Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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 import statement style has been switched from double quotes to single quotes for consistency.

Why: Consistency in import statement style helps maintain readability and adheres to common coding standards. It reduces cognitive load for developers reading the code and prevents mixing styles which can lead to confusion.

How: Consider maintaining your project's coding style guide regarding quotes. If standardizing on single quotes is the direction, ensure that this is consistently applied across the entire codebase.

import path, { dirname } from 'path';

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: Inconsistent use of quotes for module imports.

Why: Consistency in code styling, including aspects such as quotation marks, not only enhances the readability of the code but also helps maintain a uniform codebase. This makes it easier for developers to navigate and maintain the project, especially when working within teams.

How: Consider standardizing all import statements to use either single quotes or double quotes consistently throughout the file. For instance, changing import { fileURLToPath } from "node:url"; to import { fileURLToPath } from 'node:url'; to match the new style. This aligns with the updated line.


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: Possible unnecessary spacing adjustments in the array of addons.

Why: While formatting spacing can often make code easier to read, excessive reformatting or re-spacing can introduce noise into version control history without functional improvements. This can make it difficult to track actual code changes versus mere formatting changes.

How: When editing this section, only modify spacing and alignment where it improves readability and maintainability. If you previously had an organization of entries, consider keeping similar formatting to avoid unnecessary diffs.

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',

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: Ensure that all addons in the configuration meet the latest versions and security standards.

Why: Older versions of add-ons might contain vulnerabilities that could be exploited, especially in a development environment where testing is done. Keeping dependencies up-to-date reduces security risks and benefits from performance improvements and new features.

How: Check each addon listed in the config against the latest version available in npm or the project's repository. If there are updates available, consider updating them and testing for any breaking changes that may occur.

'@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