Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
e7d2d7d
[TextArea] Add Disabled story to Storybook
Rohitgautam02 Dec 16, 2025
8cf93bc
Merge branch 'main' of github.com:rtCamp/frappe-ui-react into develop
mohdsayed Dec 17, 2025
289edb6
Merge pull request #99 from Rohitgautam02/docs/textarea-add-disabled-…
mohdsayed Dec 17, 2025
a32422f
Fix dark mode colors across components
b1ink0 Dec 18, 2025
25058bf
Merge pull request #102 from rtCamp/fix/dark-mode-colors
mohdsayed Dec 21, 2025
fa109ad
[Divider] Add Storybook stories
Rohitgautam02 Dec 22, 2025
6964b1b
Merge branch 'main' of github.com:rtCamp/frappe-ui-react into develop
mohdsayed Dec 22, 2025
4b7a2cc
[Divider] Increase margin on action position labels
Rohitgautam02 Dec 24, 2025
acb6cc7
[Divider] Remove labels in ActionPositions story; rely on button labels
Rohitgautam02 Dec 25, 2025
bd9eb71
Merge pull request #104 from Rohitgautam02/docs/divider-add-storybook…
b1ink0 Dec 29, 2025
db6ff8a
Migrate Dropdown from radix-ui to base-ui
abhishekxix Jan 7, 2026
47577a7
Migrate Dialog from radix-ui to base-ui
abhishekxix Jan 7, 2026
0fb4d38
Remove radix-ui dialog and dropdown menu
abhishekxix Jan 7, 2026
9a0e925
Migrate Tooltip from radix-ui to base-ui
abhishekxix Jan 8, 2026
d8cf571
Remove radix-ui tooltip
abhishekxix Jan 8, 2026
7fc2d6b
WIP: Migrate toast component from radix-ui to base-ui
abhishekxix Jan 8, 2026
f8393ec
Migrate Toast from radix-ui to base-ui
abhishekxix Jan 9, 2026
e30b1b7
Remove radix-ui toast
abhishekxix Jan 9, 2026
e472a45
Fix timeout logic
abhishekxix Jan 9, 2026
40ec5d0
Add type keyword to type imports
abhishekxix Jan 9, 2026
d5b067b
Update toast styles for animation
abhishekxix Jan 9, 2026
42bf300
Fix dropdown not showing inside dialog
abhishekxix Jan 12, 2026
8fc9565
Convert conditional classes to clsx call
abhishekxix Jan 12, 2026
4b987c1
Prevent layout shift on dropdown open
abhishekxix Jan 12, 2026
fa53325
Update packages/frappe-ui-react/src/components/dropdown/dropdown.tsx
abhishekxix Jan 12, 2026
7ba1eb2
Replace string interpolation with clsx
abhishekxix Jan 12, 2026
696587d
Revert the initial z-index for dropdown and dialog
abhishekxix Jan 12, 2026
dfe4f8a
Fix escaping issue in toast description
abhishekxix Jan 13, 2026
e3c8d0a
Fix async issues and add test cases for dropdown
abhishekxix Jan 14, 2026
6d65f32
Add more test cases for dropdown component
abhishekxix Jan 14, 2026
6eea34d
Add test cases for toast
abhishekxix Jan 14, 2026
e732ac7
Add test cases for tooltip
abhishekxix Jan 14, 2026
c2e64de
Remove unused import for act
abhishekxix Jan 14, 2026
c604311
fix: eslint config file
ayushnirwal Jan 15, 2026
255cbd1
fix: eslint config file
ayushnirwal Jan 15, 2026
09a0d86
fix: update baseline-browser mapping
ayushnirwal Jan 15, 2026
cdcd3f4
fix: bad use of useEffect
ayushnirwal Jan 15, 2026
cb278d9
fix: partially fix lint errors
ayushnirwal Jan 15, 2026
d876493
Bump globals from 16.4.0 to 17.0.0
dependabot[bot] Jan 16, 2026
796efcb
Bump vite from 7.1.11 to 7.3.1
dependabot[bot] Jan 16, 2026
dbe6ac7
Merge pull request #109 from rtCamp/chore/migrate-to-base-ui
mohdsayed Jan 16, 2026
d045782
refactor: fix TextEditor lint errors
ayushnirwal Jan 17, 2026
3d3df91
refactor: fix TextEditor lint errors
ayushnirwal Jan 17, 2026
4e247d4
chore: add missing dependency in effect
ayushnirwal Jan 17, 2026
377f42f
fix: update baseline-browser mapping
ayushnirwal Jan 17, 2026
23b0f82
Merge pull request #143 from rtCamp/fix/lint-issues
mohdsayed Jan 17, 2026
9f1217c
Merge main and resolve conflics
mohdsayed Jan 17, 2026
597474d
chore: fix formatting issues
ayushnirwal Jan 19, 2026
b9213ed
Merge branch 'develop' into fix/format-issues
ayushnirwal Jan 19, 2026
db9de06
chore: fix formatting
ayushnirwal Jan 19, 2026
12779ba
chore: add final newline
ayushnirwal Jan 19, 2026
a22e46e
Merge pull request #141 from rtCamp/dependabot/npm_and_yarn/vite-7.3.1
ayushnirwal Jan 19, 2026
e1ee184
Merge pull request #138 from rtCamp/dependabot/npm_and_yarn/globals-1…
ayushnirwal Jan 19, 2026
68d61d9
fix: tsconfig file for node env
ayushnirwal Jan 19, 2026
df9c58e
fix: ts config for node files and type check command
ayushnirwal Jan 19, 2026
245e295
fix: ts config file for src files
ayushnirwal Jan 19, 2026
c3ff00b
fix: verbatimModuleSyntax errors
ayushnirwal Jan 19, 2026
0b93306
refactor: format first
ayushnirwal Jan 19, 2026
2fa57d9
Merge develop and resolve conflicts
ayushnirwal Jan 19, 2026
392b25f
fix: misc type check error
ayushnirwal Jan 19, 2026
4eeafa0
Merge pull request #146 from rtCamp/fix/type-lint
mayan-000 Jan 20, 2026
f44c8bb
Merge pull request #145 from rtCamp/fix/format-issues
mayan-000 Jan 20, 2026
fb005ac
Fix type errors
b1ink0 Jan 21, 2026
2ba6b67
Merge pull request #158 from rtCamp/fix/type-errors
b1ink0 Jan 21, 2026
95d69fe
chore: sync changed in main to develop
ayushnirwal Jan 22, 2026
a74b067
chore: setup pnpm
ayushnirwal Jan 22, 2026
1c3e499
chore: only allow pnpm engine
ayushnirwal Jan 22, 2026
5f89160
chore: eol fix
ayushnirwal Jan 22, 2026
47e44d9
fix: build script and build error by adding return type
ayushnirwal Jan 22, 2026
07b052f
fix: update contributing doc
ayushnirwal Jan 22, 2026
0870d1a
fix: update getting started doc
ayushnirwal Jan 22, 2026
f98de05
fix: update deploy workflow
ayushnirwal Jan 22, 2026
c22dfa9
fix: update bach commands
ayushnirwal Jan 22, 2026
357192c
chore: update readme
ayushnirwal Jan 22, 2026
670c476
chore: update contribuiting
ayushnirwal Jan 22, 2026
2e73a73
fix: build config
ayushnirwal Jan 22, 2026
c875413
chore: remove duplicate entry
ayushnirwal Jan 22, 2026
7c558b9
fix: move tailwind dependency
ayushnirwal Jan 22, 2026
8306120
fix: tsconfig for build
ayushnirwal Jan 22, 2026
9c30027
chore: update lockfile
ayushnirwal Jan 22, 2026
fbf5a23
fix: lint:types script
ayushnirwal Jan 22, 2026
d70b6bc
fix: add pnpm install step
ayushnirwal Jan 22, 2026
eca69fa
fix: remove tsconfig.json from publish
ayushnirwal Jan 22, 2026
567af07
Merge pull request #162 from rtCamp/feat/add-only-allow
b1ink0 Jan 22, 2026
433a1ea
feat: add basic textEditor
ayushnirwal Jan 22, 2026
50e356a
feat: add basic text editing features in text editor
ayushnirwal Jan 24, 2026
7133852
refactor: command folder
ayushnirwal Jan 24, 2026
a1f4dfb
feat: add strikethrough option
ayushnirwal Jan 26, 2026
58aea4c
style-fix: fix order for options
ayushnirwal Jan 26, 2026
377bfd0
chore: update lock file and dependencies
ayushnirwal Jan 26, 2026
11db0ca
feat: bind event handling
ayushnirwal Jan 26, 2026
8e5772d
feat: add placeholder handling
ayushnirwal Jan 26, 2026
26615af
feat: bind editable prop
ayushnirwal Jan 26, 2026
f7abf8a
feat: bind more props
ayushnirwal Jan 26, 2026
1d5367d
feat: partially bind fixed menu prop
ayushnirwal Jan 26, 2026
d09ed0e
feat: bind slots
ayushnirwal Jan 26, 2026
c3d46af
chore: update lock file
ayushnirwal Jan 27, 2026
b5c6900
feat: add embed extension and configure it
ayushnirwal Jan 28, 2026
6ab8876
feat: add button styles
ayushnirwal Jan 28, 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
7 changes: 6 additions & 1 deletion .editorConfig
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,9 @@ indent_size = 2

# Markdown files
[*.md]
trim_trailing_whitespace = false
trim_trailing_whitespace = false

# Style files
[*.css]
indent_size = 4

9 changes: 6 additions & 3 deletions .github/workflows/deploy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,22 +21,25 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v6

- name: Install pnpm
uses: pnpm/action-setup@v4

- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version-file: '.nvmrc'
cache: 'npm'
cache: 'pnpm'

- name: Install dependencies
run: |
ls
pwd
rm -rf **/node_modules
rm -rf package-lock.json
npm install || true
pnpm install || true

- name: Build Storybook
run: npm run build-storybook
run: pnpm build-storybook

- name: Setup Pages
uses: actions/configure-pages@v5
Expand Down
1 change: 1 addition & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
engine-strict = true
3 changes: 3 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.github
pnpm-lock.yaml
storybook-static
3 changes: 2 additions & 1 deletion .storybook/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ const config: StorybookConfig = {
check: true,
skipCompiler: true,
reactDocgenTypescriptOptions: {
propFilter: (prop) => (prop.parent ? !/node_modules/.test(prop.parent.fileName) : true),
propFilter: (prop) =>
prop.parent ? !/node_modules/.test(prop.parent.fileName) : true,
},
},
};
Expand Down
14 changes: 7 additions & 7 deletions .storybook/manager.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
import { addons } from 'storybook/manager-api';
import { create } from 'storybook/theming';
import { addons } from "storybook/manager-api";
import { create } from "storybook/theming";

addons.setConfig({
theme: create({
base: 'light',
base: "light",
brandTitle:
'<h1 id="fur-title">frappe-ui-react</h1> <span id="fur-version">(v1.0.4)</span>', // update version as per package.json
brandUrl: undefined, // disables link on the title
brandImage: undefined,

// Sidebar/Toolbar active state color
barSelectedColor: 'rgb(153, 153, 153)',
barSelectedColor: "rgb(153, 153, 153)",

// Primary accent color for buttons, links, focus states
colorPrimary: 'rgb(153, 153, 153)',
colorSecondary: 'rgb(153, 153, 153)',
colorPrimary: "rgb(153, 153, 153)",
colorSecondary: "rgb(153, 153, 153)",
fontBase: '"Inter", sans-serif',
}),
panelPosition: 'right', // Options: 'bottom' (default), 'right'
panelPosition: "right", // Options: 'bottom' (default), 'right'
});
27 changes: 20 additions & 7 deletions .storybook/preview.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
import type { Preview } from "@storybook/react-vite";
import { themes } from 'storybook/theming';
import { DocsRenderer } from '@storybook/addon-docs';
import type { DocsContextProps, Parameters, Renderer } from 'storybook/internal/types';
import './preview-styles.css';
import { themes } from "storybook/theming";
import { DocsRenderer } from "@storybook/addon-docs";
import type {
DocsContextProps,
Parameters,
Renderer,
} from "storybook/internal/types";
import "./preview-styles.css";
import "@rtcamp/frappe-ui-react/theme.css";

import { decorators } from "./modeDecorator";
Expand All @@ -22,12 +26,21 @@ const preview: Preview = {
const renderer = new DocsRenderer();
const oldRender = renderer.render;

renderer.render = async (context: DocsContextProps<Renderer>, docsParameter: Parameters, element: HTMLElement) => {
renderer.render = async (
context: DocsContextProps<Renderer>,
docsParameter: Parameters,
element: HTMLElement
) => {
const theme = (context as any).store.userGlobals.globals.theme;

docsParameter.theme = theme === 'dark' ? themes.dark : themes.light;
docsParameter.theme = theme === "dark" ? themes.dark : themes.light;

const result = await oldRender.call(renderer, context, docsParameter, element);
const result = await oldRender.call(
renderer,
context,
docsParameter,
element
);

return result;
};
Expand Down
21 changes: 10 additions & 11 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,12 +71,11 @@ git checkout main
git pull upstream main
```

4. Install the dependencies with npm and run storybook.
4. Install the dependencies with pnpm and run storybook.

```bash
nvm use # To ensure correct node version.
npm install
npm run storybook
pnpm install
pnpm storybook
```

5. Create a new topic branch:
Expand Down Expand Up @@ -116,9 +115,9 @@ Make sure the following is true:
We will only merge a PR when all tests pass.
The following statements must be true:

- The code is formatted. If the code was changed, run `npm run lint:js:fix`.
- The code is linted. If the code was changed, run `npm run lint:js`.
- The code is type-safe. If TypeScript sources or declarations were changed, run `npm run lint:types` to confirm that the check passes.
- The code is formatted. If the code was changed, run `pnpm lint:js:fix`.
- The code is linted. If the code was changed, run `pnpm lint:js`.
- The code is type-safe. If TypeScript sources or declarations were changed, run `pnpm lint:types` to confirm that the check passes.
- The pull request title follows the pattern `[Component/Area] Imperative commit message`. (See: [How to Write a Git Commit Message](https://chris.beams.io/posts/git-commit/) for a great explanation).

Don't worry if you miss a step—the Continuous Integration will run a thorough set of tests on your commits, and the maintainers of the project can assist you if you run into problems.
Expand Down Expand Up @@ -152,9 +151,9 @@ This ensures the package can be built successfully for distribution.
Please follow the coding style of the project.
It uses Prettier and ESLint, so if possible, enable linting in your editor to get real-time feedback.

- `npm run lint:js:fix` reformats the code and fixes linting issues.
- `npm run lint:js` runs the linting rules.
- `npm run lint:types` checks TypeScript types.
- `pnpm lint:js:fix` reformats the code and fixes linting issues.
- `pnpm lint:js` runs the linting rules.
- `pnpm lint:types` checks TypeScript types.

When you submit a PR, these checks are run again by our continuous integration tools, but hopefully your code is already clean!

Expand Down Expand Up @@ -220,7 +219,7 @@ export const Default: Story = {
Run Storybook locally to ensure your new story appears and works correctly:

```bash
npm run storybook
pnpm storybook
```

#### 4. Submit your PR
Expand Down
7 changes: 6 additions & 1 deletion GETTING-STARTED.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,16 @@ You can set up `frappe-ui-react` in your existing Frappe app with the following

### Step 1: Installation

Install the package using npm.
Install the packages.

```bash
npm install @rtcamp/frappe-ui-react
```
OR

```bash
pnpm add @rtcamp/frappe-ui-react
```

### Step 2: Configuration

Expand Down
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,16 @@ You can set up `frappe-ui-react` in your existing Frappe app with the following

### Step 1: Installation

Install the package using npm.
Install the packages.

```bash
npm install @rtcamp/frappe-ui-react
```
OR

```bash
pnpm add @rtcamp/frappe-ui-react
```

### Step 2: Configuration

Expand Down
2 changes: 1 addition & 1 deletion bin/setup-local-registry.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ curdir=$(dirname "$(realpath $0)")

(cd && nohup npx verdaccio --config "$curdir/verdaccio-config.yml" &>$tmp_registry_log &)

npm i --global verdaccio-memory
pnpm i --global verdaccio-memory

# Wait for Verdaccio to boot.
grep -q 'http address' <(tail -f $tmp_registry_log)
Expand Down
42 changes: 20 additions & 22 deletions eslint.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,25 @@ import globals from "globals";
import reactHooks from "eslint-plugin-react-hooks";
import reactRefresh from "eslint-plugin-react-refresh";
import tseslint from "typescript-eslint";
import { globalIgnores } from "eslint/config";
import { defineConfig, globalIgnores } from "eslint/config";

export default tseslint.config(
[
globalIgnores(["dist"]),
{
files: ["**/*.{ts,tsx}"],
extends: [
js.configs.recommended,
tseslint.configs.recommended,
reactHooks.configs["recommended-latest"],
reactRefresh.configs.vite,
],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
},
rules: {
"@typescript-eslint/no-explicit-any": "warn",
},
export default defineConfig([
globalIgnores(["dist", "storybook-static"]),
reactHooks.configs.flat.recommended,
{
files: ["**/*.{ts,tsx}"],
extends: [
js.configs.recommended,
tseslint.configs.recommended,
reactRefresh.configs.vite,
storybook.configs["flat/recommended"],
],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
},
],
storybook.configs["flat/recommended"]
);
rules: {
"@typescript-eslint/no-explicit-any": "warn",
},
},
]);
Loading