Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
4629664
feat(textarea): add autoResize, minHeight, and maxHeight props
jaieds Apr 13, 2026
964fdbe
feat(textarea): add autoResize, minHeight, and maxHeight props
jaieds Apr 13, 2026
fe544c2
chore: update changelog for v1.7.12 textarea auto-resize props
jaieds Apr 13, 2026
f39d47d
chore: update changelog for v1.7.12 textarea auto-resize props
jaieds Apr 13, 2026
dc8398a
chore: Lint
jaieds Apr 14, 2026
0348e8c
chore: Lint
jaieds Apr 14, 2026
4f58e1f
docs: fix MCP server URL in README
jaieds Apr 15, 2026
6aef224
docs: fix MCP server URL in README
jaieds Apr 15, 2026
d3e5923
chore: reformat workflow files and storybook config
jaieds Apr 15, 2026
f361235
chore: reformat workflow files and storybook config
jaieds Apr 15, 2026
79d7198
Merge pull request #433 from brainstormforce/improvement/textarea
jaieds May 11, 2026
5cdf637
Merge pull request #433 from brainstormforce/improvement/textarea
jaieds May 11, 2026
9f40456
Add seriesLabels prop to LineChart for translatable tooltip series names
ravindrakele Jun 6, 2026
3c5aec8
Add seriesLabels prop to LineChart for translatable tooltip series names
ravindrakele Jun 6, 2026
cfd3dc3
fix(editor-input): support Lexical mention menu in Shadow DOM
jaieds Jun 8, 2026
7343d1e
fix(editor-input): support Lexical mention menu in Shadow DOM
jaieds Jun 8, 2026
333f63b
chore: remove unused component-data.json
jaieds Jun 8, 2026
db41fdc
chore: remove unused component-data.json
jaieds Jun 8, 2026
5b27cc9
docs: changelog entry for editor input Shadow DOM fix
jaieds Jun 9, 2026
1c222d9
docs: changelog entry for editor input Shadow DOM fix
jaieds Jun 9, 2026
abb5f70
bump version + Update change log
jaieds Jun 10, 2026
a4306f5
bump version + Update change log
jaieds Jun 10, 2026
b4701c3
perf: fix typing lag from always-mounted accordion content and eager …
jaieds Jun 10, 2026
1080460
perf: fix typing lag from always-mounted accordion content and eager …
jaieds Jun 10, 2026
9d63321
Merge pull request #459 from brainstormforce/fix/lexical-shadow-dom-m…
jaieds Jun 10, 2026
3931f04
Merge pull request #459 from brainstormforce/fix/lexical-shadow-dom-m…
jaieds Jun 10, 2026
c43d5ee
feat(textarea): add autoResize, minHeight, and maxHeight props
jaieds Apr 13, 2026
b7cb9fb
feat(textarea): add autoResize, minHeight, and maxHeight props
jaieds Apr 13, 2026
4fb0255
chore: update changelog for v1.7.12 textarea auto-resize props
jaieds Apr 13, 2026
7b7bb32
chore: update changelog for v1.7.12 textarea auto-resize props
jaieds Apr 13, 2026
1c877a0
chore: Lint
jaieds Apr 14, 2026
9bcfe1e
chore: Lint
jaieds Apr 14, 2026
8f174df
docs: fix MCP server URL in README
jaieds Apr 15, 2026
392943c
docs: fix MCP server URL in README
jaieds Apr 15, 2026
c8d1d5a
chore: reformat workflow files and storybook config
jaieds Apr 15, 2026
a1936af
chore: reformat workflow files and storybook config
jaieds Apr 15, 2026
14bf35a
Merge pull request #433 from brainstormforce/improvement/textarea
jaieds May 11, 2026
6218a4b
Merge pull request #433 from brainstormforce/improvement/textarea
jaieds May 11, 2026
90114e6
fix(editor-input): support Lexical mention menu in Shadow DOM
jaieds Jun 8, 2026
6e84818
fix(editor-input): support Lexical mention menu in Shadow DOM
jaieds Jun 8, 2026
2e99897
chore: remove unused component-data.json
jaieds Jun 8, 2026
7f390ce
chore: remove unused component-data.json
jaieds Jun 8, 2026
965dcd9
docs: changelog entry for editor input Shadow DOM fix
jaieds Jun 9, 2026
42d8b7f
docs: changelog entry for editor input Shadow DOM fix
jaieds Jun 9, 2026
f43f471
bump version + Update change log
jaieds Jun 10, 2026
361df05
bump version + Update change log
jaieds Jun 10, 2026
6725503
perf: fix typing lag from always-mounted accordion content and eager …
jaieds Jun 10, 2026
ba4a9d8
perf: fix typing lag from always-mounted accordion content and eager …
jaieds Jun 10, 2026
62671fa
Merge pull request #459 from brainstormforce/fix/lexical-shadow-dom-m…
jaieds Jun 10, 2026
2b28391
Merge pull request #459 from brainstormforce/fix/lexical-shadow-dom-m…
jaieds Jun 10, 2026
1caa4d0
Merge branch 'staging' into feat/line-chart-series-labels
jaieds Jun 10, 2026
f0d92b7
Merge branch 'staging' into feat/line-chart-series-labels
jaieds Jun 10, 2026
59e19c6
docs: add v1.7.12 changelog entries for LineChart seriesLabels and pe…
jaieds Jun 10, 2026
b106218
docs: add v1.7.12 changelog entries for LineChart seriesLabels and pe…
jaieds Jun 10, 2026
2699269
Revert "docs: add v1.7.12 changelog entries for LineChart seriesLabel…
jaieds Jun 10, 2026
ee91b67
Revert "docs: add v1.7.12 changelog entries for LineChart seriesLabel…
jaieds Jun 10, 2026
de97445
Merge pull request #457 from brainstormforce/feat/line-chart-series-l…
ravindrakele Jun 10, 2026
ae2932a
Merge pull request #457 from brainstormforce/feat/line-chart-series-l…
ravindrakele Jun 10, 2026
8c8a943
Update changelog.txt
jaieds Jun 10, 2026
09a64fc
Update changelog.txt
jaieds Jun 10, 2026
d7a682c
Merge pull request #461 from brainstormforce/change-log
ravindrakele Jun 10, 2026
3bee711
Merge pull request #461 from brainstormforce/change-log
ravindrakele Jun 10, 2026
5ad2431
feat: add opt-in enableTimeSelection prop to DatePicker
jaieds Jun 11, 2026
10519a5
feat: add opt-in enableTimeSelection prop to DatePicker
jaieds Jun 11, 2026
0bf4b29
docs: add v1.7.12 changelog entry for DatePicker enableTimeSelection
jaieds Jun 11, 2026
65f6f77
docs: add v1.7.12 changelog entry for DatePicker enableTimeSelection
jaieds Jun 11, 2026
117ac6a
docs: add v1.7.12 changelog entry for DatePicker enableTimeSelection
jaieds Jun 11, 2026
0d6086f
docs: add v1.7.12 changelog entry for DatePicker enableTimeSelection
jaieds Jun 11, 2026
a38d8b2
test: add regression interaction tests for DatePicker with time selec…
jaieds Jun 11, 2026
4f1a9cb
test: add regression interaction tests for DatePicker with time selec…
jaieds Jun 11, 2026
801d8f6
Merge branch 'date-time-picker' of https://github.com/brainstormforce…
jaieds Jun 11, 2026
15e3baf
Merge pull request #462 from brainstormforce/date-time-picker
jaieds Jun 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 35 additions & 36 deletions .github/workflows/claude-code-review.yml
Original file line number Diff line number Diff line change
@@ -1,44 +1,43 @@
name: Claude Code Review

on:
pull_request:
types: [opened, synchronize, ready_for_review, reopened]
# Optional: Only run on specific file changes
# paths:
# - "src/**/*.ts"
# - "src/**/*.tsx"
# - "src/**/*.js"
# - "src/**/*.jsx"
pull_request:
types: [opened, synchronize, ready_for_review, reopened]
# Optional: Only run on specific file changes
# paths:
# - "src/**/*.ts"
# - "src/**/*.tsx"
# - "src/**/*.js"
# - "src/**/*.jsx"

jobs:
claude-review:
# Optional: Filter by PR author
# if: |
# github.event.pull_request.user.login == 'external-contributor' ||
# github.event.pull_request.user.login == 'new-developer' ||
# github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
claude-review:
# Optional: Filter by PR author
# if: |
# github.event.pull_request.user.login == 'external-contributor' ||
# github.event.pull_request.user.login == 'new-developer' ||
# github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'

runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
issues: read
id-token: write
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
issues: read
id-token: write

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1

- name: Run Claude Code Review
id: claude-review
uses: anthropics/claude-code-action@v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
plugin_marketplaces: 'https://github.com/anthropics/claude-code.git'
plugins: 'code-review@claude-code-plugins'
prompt: '/code-review:code-review ${{ github.repository }}/pull/${{ github.event.pull_request.number }}'
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
# or https://code.claude.com/docs/en/cli-reference for available options
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1

- name: Run Claude Code Review
id: claude-review
uses: anthropics/claude-code-action@v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
plugin_marketplaces: 'https://github.com/anthropics/claude-code.git'
plugins: 'code-review@claude-code-plugins'
prompt: '/code-review:code-review ${{ github.repository }}/pull/${{ github.event.pull_request.number }}'
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
# or https://code.claude.com/docs/en/cli-reference for available options
81 changes: 40 additions & 41 deletions .github/workflows/claude.yml
Original file line number Diff line number Diff line change
@@ -1,50 +1,49 @@
name: Claude Code

on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
issues:
types: [opened, assigned]
pull_request_review:
types: [submitted]
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
issues:
types: [opened, assigned]
pull_request_review:
types: [submitted]

jobs:
claude:
if: |
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
issues: read
id-token: write
actions: read # Required for Claude to read CI results on PRs
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1
claude:
if: |
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
issues: read
id-token: write
actions: read # Required for Claude to read CI results on PRs
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1

- name: Run Claude Code
id: claude
uses: anthropics/claude-code-action@v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
- name: Run Claude Code
id: claude
uses: anthropics/claude-code-action@v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}

# This is an optional setting that allows Claude to read CI results on PRs
additional_permissions: |
actions: read
# This is an optional setting that allows Claude to read CI results on PRs
additional_permissions: |
actions: read

# Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
# prompt: 'Update the pull request description to include a summary of changes.'

# Optional: Add claude_args to customize behavior and configuration
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
# or https://code.claude.com/docs/en/cli-reference for available options
# claude_args: '--allowed-tools Bash(gh pr:*)'
# Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
# prompt: 'Update the pull request description to include a summary of changes.'

# Optional: Add claude_args to customize behavior and configuration
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
# or https://code.claude.com/docs/en/cli-reference for available options
# claude_args: '--allowed-tools Bash(gh pr:*)'
102 changes: 51 additions & 51 deletions .github/workflows/publish-public-build.yml
Original file line number Diff line number Diff line change
@@ -1,56 +1,56 @@
name: Publish Public Build

on:
push:
branches:
- master
push:
branches:
- master

jobs:
publish-build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: '18'

# Build the library
- name: Install and Build
run: |
npm ci
npm run build

# Push to public mirror repo
- name: Push Build to Public Mirror
env:
FORCE_UI_TOKEN: ${{ secrets.FORCE_UI_TOKEN }}
run: |
# Clone public mirror repo
git clone https://x-access-token:${{ secrets.FORCE_UI_TOKEN }}@github.com/brainstormforce/bsf-admin-ui.git build-repo

cd build-repo

# Clear old dist
rm -rf dist

# Copy new build
cp -r ../dist ./

# Update version in package.json
VERSION=$(node -p "require('../package.json').version")
node -e "
const pkg = require('./package.json');
pkg.version = process.argv[1];
require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2));
" "$VERSION"

# Commit and tag
git config user.name github-actions
git config user.email github-actions@github.com
git add dist package.json
git commit -m "Release v$VERSION - build artifacts only"
git tag v$VERSION
git push origin master
git push origin v$VERSION
publish-build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: '18'

# Build the library
- name: Install and Build
run: |
npm ci
npm run build

# Push to public mirror repo
- name: Push Build to Public Mirror
env:
FORCE_UI_TOKEN: ${{ secrets.FORCE_UI_TOKEN }}
run: |
# Clone public mirror repo
git clone https://x-access-token:${{ secrets.FORCE_UI_TOKEN }}@github.com/brainstormforce/bsf-admin-ui.git build-repo

cd build-repo

# Clear old dist
rm -rf dist

# Copy new build
cp -r ../dist ./

# Update version in package.json
VERSION=$(node -p "require('../package.json').version")
node -e "
const pkg = require('./package.json');
pkg.version = process.argv[1];
require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2));
" "$VERSION"

# Commit and tag
git config user.name github-actions
git config user.email github-actions@github.com
git add dist package.json
git commit -m "Release v$VERSION - build artifacts only"
git tag v$VERSION
git push origin master
git push origin v$VERSION
40 changes: 20 additions & 20 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -1,28 +1,28 @@
name: Publish Package

on:
push:
branches:
- master
push:
branches:
- master

jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
publish:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: '18'
registry-url: 'https://npm.pkg.github.com'
scope: '@brainstormforce'
- uses: actions/setup-node@v4
with:
node-version: '18'
registry-url: 'https://npm.pkg.github.com'
scope: '@brainstormforce'

- run: npm ci
- run: npm run build
- run: npm ci
- run: npm run build

- run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
18 changes: 9 additions & 9 deletions .storybook/main.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// This file has been automatically migrated to valid ESM format by Storybook.
import { fileURLToPath } from "node:url";
import { fileURLToPath } from 'node:url';
import type { StorybookConfig } from '@storybook/react-vite';

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What: The quotation marks in the import statement should be consistent with the rest of the codebase, preferably using double quotes for consistency.

Why: Consistency in code style improves readability and maintainability. In JavaScript and TypeScript, using the same type of quotation marks throughout the code helps avoid confusion and enforces style guidelines.

How: Change the import statement from import { fileURLToPath } from 'node:url'; to import { fileURLToPath } from "node:url";. This aligns it with the existing style using double quotes.

import path, { dirname } from 'path';

Expand All @@ -10,14 +10,14 @@ const __dirname = dirname(__filename);
const config: StorybookConfig = {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What: When specifying the stories in the configuration, consider using constants for patterns if they are referenced multiple times in the codebase in the future.

Why: Using constants enhances maintainability and refactorability as any changes to the stories' paths can be applied in a single place instead of multiple occurrences throughout the code.

How: Define a constant at the top of the file like const STORY_PATTERNS = ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)']; and replace its references in the stories array. This promotes clearer intent and simplifies potential future changes.

stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'],
addons: [
'@storybook/addon-onboarding',
'@storybook/addon-links',
'@chromatic-com/storybook',
'@storybook/addon-a11y',
'@storybook/addon-docs',
'@storybook/addon-mcp',
'@storybook/addon-vitest'
],
'@storybook/addon-onboarding',
'@storybook/addon-links',
'@chromatic-com/storybook',
'@storybook/addon-a11y',
'@storybook/addon-docs',
'@storybook/addon-mcp',
'@storybook/addon-vitest',
],
framework: {
name: '@storybook/react-vite',
options: {
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Using Force UI as a dependency in package.json -

```json
"dependencies": {
"@bsf/force-ui": "git+https://github.com/brainstormforce/force-ui#1.7.11"
"@bsf/force-ui": "git+https://github.com/brainstormforce/force-ui#1.7.12"
}
```

Expand All @@ -28,7 +28,7 @@ npm install
Or you can directly run the following command to install the package -

```bash
npm i -S @bsf/force-ui@git+https://github.com/brainstormforce/force-ui.git#1.7.11
npm i -S @bsf/force-ui@git+https://github.com/brainstormforce/force-ui.git#1.7.12
```

<br />
Expand Down Expand Up @@ -307,7 +307,7 @@ export default function Example() {
Force UI provides an MCP server that gives AI assistants accurate component usage context correct props, patterns, and examples. So you get reliable implementations without guesswork.

```bash
npx mcp-add --type http --url "https://brainstormforce.github.io/force-ui/mcp" --scope project # use `global` instead of `project` for making it accessible globally
npx mcp-add --type http --url "https://forceui.brainstormforce.com/mcp" --scope project # use `global` instead of `project` for making it accessible globally
```

When prompted, use the following configuration:
Expand Down
8 changes: 8 additions & 0 deletions changelog.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
Version 1.7.12 - 10th June, 2026
- Improvement: Atom - Textarea: Added `autoResize`, `minHeight`, and `maxHeight` props. When `autoResize` is enabled, the textarea height auto-adjusts to fit its content and stops growing at `maxHeight` (default 160px), at which point it becomes scrollable. `minHeight` and `maxHeight` apply as CSS constraints regardless of `autoResize`.
- Improvement: Organism - Line Chart: Added `seriesLabels` prop to map data keys to custom display names in the tooltip, useful for translated labels. Falls back to the data key when no label is provided.
- Improvement: Atom - DatePicker: Added opt-in `enableTimeSelection` prop that renders time inputs below the calendar grid for `single` and `range` selection types (ignored for `multiple`). The chosen time is merged into the selected dates and carried in the `onDateSelect`/`onApply` payloads.
- Fix: Organism - Editor Input: Added Shadow DOM support for the mention suggestions menu.
- Fix: Molecule - Accordion: Collapsed content children are unmounted again to prevent heavy panel content from rendering up front and re-rendering on every keystroke; the ARIA region element stays in the DOM so `aria-controls` and `aria-labelledby` still resolve.
- Fix: Organism - Editor Input: The mention typeahead anchor is now created lazily and appended to the DOM only when the menu opens, eliminating per-mount style recalculations and typing lag on pages with many editors.

Version 1.7.11 - 8th April, 2026
- New: Added Storybook MCP compatibility support for smoother integration with MCP-based tooling and workflows.
- Improvement: Atom - Alert: Added `role="alert"` and improved focus-visible ring on the close button.
Expand Down
Loading
Loading