From 06931b5680dc3d3fdffd6cb7e5c0b134559ec8af Mon Sep 17 00:00:00 2001
From: Nick Grosenbacher
Date: Fri, 4 Apr 2025 14:18:40 -0500
Subject: [PATCH 1/8] fix #4539 by setting upper bound peerDependency version
for chakra-react-select
---
package-lock.json | 2 +-
packages/chakra-ui/package.json | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 921efb6657..adfe9ae0c2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -34297,7 +34297,7 @@
"@chakra-ui/system": ">=1.12.1",
"@rjsf/core": "^5.24.x",
"@rjsf/utils": "^5.24.x",
- "chakra-react-select": ">=3.3.8",
+ "chakra-react-select": ">=3.3.8 <6.0.0",
"framer-motion": ">=5.6.0",
"react": "^16.14.0 || >=17"
}
diff --git a/packages/chakra-ui/package.json b/packages/chakra-ui/package.json
index 039a8175c9..c0bcad78bd 100644
--- a/packages/chakra-ui/package.json
+++ b/packages/chakra-ui/package.json
@@ -66,7 +66,7 @@
"@chakra-ui/system": ">=1.12.1",
"@rjsf/core": "^5.24.x",
"@rjsf/utils": "^5.24.x",
- "chakra-react-select": ">=3.3.8",
+ "chakra-react-select": ">=3.3.8 <6.0.0",
"framer-motion": ">=5.6.0",
"react": "^16.14.0 || >=17"
},
From e442431531e2fe79360266134410e722077deab4 Mon Sep 17 00:00:00 2001
From: Nick Grosenbacher
Date: Fri, 4 Apr 2025 14:21:02 -0500
Subject: [PATCH 2/8] changelog
---
CHANGELOG.md | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 962278322a..3d68ff34d5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -15,12 +15,17 @@ it according to semantic versioning. For example, if your PR adds a breaking cha
should change the heading of the (upcoming) version to include a major version bump.
-->
+
# 5.24.9
## @rjsf/antd
- Fixed ts errors in newer antd versions [#4525](https://github.com/rjsf-team/react-jsonschema-form/issues/4525)
+## @rjsf/chakra-ui
+
+- Restricted the chakra-react-select peerDependency to <6.0.0, fixing [#4539](https://github.com/rjsf-team/react-jsonschema-form/issues/4539)
+
## Dev / docs / playground
- Updated docs for ArrayFieldItemTemplate to include prop `onCopyIndexClick`, fixing [#4507](https://github.com/rjsf-team/react-jsonschema-form/issues/4507)
From a178e4fd7e06eea1ad36beae03a2a496ebf562ac Mon Sep 17 00:00:00 2001
From: Nick Grosenbacher
Date: Fri, 4 Apr 2025 14:57:21 -0500
Subject: [PATCH 3/8] improve raise error within widget docs
---
CHANGELOG.md | 1 +
.../docs/advanced-customization/custom-widgets-fields.md | 8 +++++++-
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3d68ff34d5..4f87ccd0c3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -30,6 +30,7 @@ should change the heading of the (upcoming) version to include a major version b
- Updated docs for ArrayFieldItemTemplate to include prop `onCopyIndexClick`, fixing [#4507](https://github.com/rjsf-team/react-jsonschema-form/issues/4507)
- Use antd 5 in playground
+- Updated docs to clarify that errors raised within a widget are not caught during form validation
# 5.24.8
diff --git a/packages/docs/docs/advanced-customization/custom-widgets-fields.md b/packages/docs/docs/advanced-customization/custom-widgets-fields.md
index 86240d14b7..6881f5f013 100644
--- a/packages/docs/docs/advanced-customization/custom-widgets-fields.md
+++ b/packages/docs/docs/advanced-customization/custom-widgets-fields.md
@@ -94,7 +94,13 @@ The default widgets you can override are:
## Raising errors from within a custom widget or field
-You can raise a custom error by overriding the `onChange` method to raise field/widget errors:
+You can raise custom 'live validation' errors by overriding the `onChange` method to provide feedback while users are actively changing the form data. Note that these errors are temporary and are not recognized during the form validation process.
+
+:::warning
+
+This method of raising errors _only_ runs onChange, i.e. when the user is changing data. This will not catch errors `onSubmit`. If you wish to add generic validation logic, you should use the [`customValidate` Form prop](../api-reference/form-props.md#customvalidate).
+
+:::
```tsx
import { ErrorSchema, RJSFSchema, UiSchema, WidgetProps, RegistryWidgetsType } from '@rjsf/utils';
From 692bb30f38bd11c51f73c6cff9101a94da6377ef Mon Sep 17 00:00:00 2001
From: Heath C <51679588+heath-freenome@users.noreply.github.com>
Date: Fri, 4 Apr 2025 13:01:11 -0700
Subject: [PATCH 4/8] Update
packages/docs/docs/advanced-customization/custom-widgets-fields.md
---
.../docs/docs/advanced-customization/custom-widgets-fields.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/packages/docs/docs/advanced-customization/custom-widgets-fields.md b/packages/docs/docs/advanced-customization/custom-widgets-fields.md
index 6881f5f013..b3cdd428bd 100644
--- a/packages/docs/docs/advanced-customization/custom-widgets-fields.md
+++ b/packages/docs/docs/advanced-customization/custom-widgets-fields.md
@@ -98,7 +98,8 @@ You can raise custom 'live validation' errors by overriding the `onChange` metho
:::warning
-This method of raising errors _only_ runs onChange, i.e. when the user is changing data. This will not catch errors `onSubmit`. If you wish to add generic validation logic, you should use the [`customValidate` Form prop](../api-reference/form-props.md#customvalidate).
+This method of raising errors _only_ runs during `onChange`, i.e. when the user is changing data. This will not catch errors `onSubmit`.
+If you wish to add generic validation logic for your component, you should use the [`customValidate` Form prop](../api-reference/form-props.md#customvalidate).
:::
From bb5db24bde26ff06887e5098de5f09ea5d81edf4 Mon Sep 17 00:00:00 2001
From: Heath C <51679588+heath-freenome@users.noreply.github.com>
Date: Fri, 4 Apr 2025 13:03:26 -0700
Subject: [PATCH 5/8] Apply suggestions from code review
Reviewer feedback
---
.../docs/advanced-customization/custom-widgets-fields.md | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/packages/docs/docs/advanced-customization/custom-widgets-fields.md b/packages/docs/docs/advanced-customization/custom-widgets-fields.md
index b3cdd428bd..628752fee8 100644
--- a/packages/docs/docs/advanced-customization/custom-widgets-fields.md
+++ b/packages/docs/docs/advanced-customization/custom-widgets-fields.md
@@ -94,11 +94,12 @@ The default widgets you can override are:
## Raising errors from within a custom widget or field
-You can raise custom 'live validation' errors by overriding the `onChange` method to provide feedback while users are actively changing the form data. Note that these errors are temporary and are not recognized during the form validation process.
+You can raise custom 'live validation' errors by overriding the `onChange` method to provide feedback while users are actively changing the form data.
+Note that these errors are temporary and are not recognized during the form validation process.
:::warning
-This method of raising errors _only_ runs during `onChange`, i.e. when the user is changing data. This will not catch errors `onSubmit`.
+This method of raising errors _only_ runs during `onChange`, i.e. when the user is changing data. This will not catch errors `onSubmit`, i.e when submitting the form.
If you wish to add generic validation logic for your component, you should use the [`customValidate` Form prop](../api-reference/form-props.md#customvalidate).
:::
From 8d85931fa8e6a50453d83251128f8cab6c302b67 Mon Sep 17 00:00:00 2001
From: Farhad Zare
Date: Fri, 14 Feb 2025 16:19:53 +0300
Subject: [PATCH 6/8] Implement Mantine theme for RJSF
---
.github/ISSUE_TEMPLATE/bug_report.yml | 1 +
.github/ISSUE_TEMPLATE/feature_request.yml | 1 +
.github/ISSUE_TEMPLATE/question_issue.yml | 1 +
README.md | 1 +
package-lock.json | 255 +-
package.json | 1 +
packages/docs/docs/usage/themes.md | 23 +-
packages/mantine/.eslintrc | 4 +
packages/mantine/README.md | 153 +
packages/mantine/babel.config.js | 3 +
packages/mantine/jest.config.js | 10 +
packages/mantine/logo.png | Bin 0 -> 9075 bytes
packages/mantine/package.json | 97 +
packages/mantine/screenshot.png | Bin 0 -> 303396 bytes
packages/mantine/src/Form/index.ts | 15 +
packages/mantine/src/Theme/index.ts | 18 +
packages/mantine/src/index.ts | 8 +
.../src/templates/ArrayFieldItemTemplate.tsx | 83 +
.../src/templates/ArrayFieldTemplate.tsx | 100 +
.../src/templates/ArrayFieldTitleTemplate.tsx | 33 +
.../src/templates/BaseInputTemplate.tsx | 107 +
.../templates/ButtonTemplates/AddButton.tsx | 14 +
.../templates/ButtonTemplates/IconButton.tsx | 86 +
.../ButtonTemplates/SubmitButton.tsx | 20 +
.../src/templates/ButtonTemplates/index.ts | 21 +
packages/mantine/src/templates/ErrorList.tsx | 35 +
.../src/templates/FieldErrorTemplate.tsx | 27 +
.../src/templates/FieldHelpTemplate.tsx | 18 +
.../mantine/src/templates/FieldTemplate.tsx | 46 +
.../src/templates/ObjectFieldTemplate.tsx | 94 +
packages/mantine/src/templates/TitleField.tsx | 13 +
.../templates/WrapIfAdditionalTemplate.tsx | 94 +
packages/mantine/src/templates/icons.tsx | 141 +
packages/mantine/src/templates/index.ts | 37 +
packages/mantine/src/tsconfig.json | 23 +
.../mantine/src/widgets/CheckboxWidget.tsx | 79 +
.../mantine/src/widgets/CheckboxesWidget.tsx | 110 +
packages/mantine/src/widgets/ColorWidget.tsx | 84 +
.../widgets/DateTime/AltDateTimeWidget.tsx | 17 +
.../src/widgets/DateTime/AltDateWidget.tsx | 138 +
.../src/widgets/DateTime/DateTimeInput.tsx | 88 +
.../src/widgets/DateTime/DateTimeWidget.tsx | 23 +
.../src/widgets/DateTime/DateWidget.tsx | 21 +
.../src/widgets/DateTime/TimeWidget.tsx | 83 +
.../mantine/src/widgets/DateTime/index.ts | 5 +
.../mantine/src/widgets/PasswordWidget.tsx | 86 +
packages/mantine/src/widgets/RadioWidget.tsx | 101 +
packages/mantine/src/widgets/RangeWidget.tsx | 85 +
packages/mantine/src/widgets/SelectWidget.tsx | 107 +
.../mantine/src/widgets/TextareaWidget.tsx | 72 +
packages/mantine/src/widgets/index.ts | 40 +
packages/mantine/test/Array.test.tsx | 14 +
packages/mantine/test/Form.test.tsx | 19 +
packages/mantine/test/Object.test.tsx | 14 +
.../test/__snapshots__/Array.test.tsx.snap | 13100 ++++++++++++++++
.../test/__snapshots__/Form.test.tsx.snap | 10694 +++++++++++++
.../test/__snapshots__/Object.test.tsx.snap | 7506 +++++++++
.../mantine/test/cleanSnapshotSerializer.ts | 93 +
packages/mantine/test/tsconfig.json | 18 +
packages/mantine/tsconfig.json | 12 +
packages/playground/package.json | 3 +
packages/playground/src/app.tsx | 5 +
.../playground/src/components/DemoFrame.tsx | 11 +
packages/playground/vite.config.ts | 1 +
64 files changed, 34168 insertions(+), 44 deletions(-)
create mode 100644 packages/mantine/.eslintrc
create mode 100644 packages/mantine/README.md
create mode 100644 packages/mantine/babel.config.js
create mode 100644 packages/mantine/jest.config.js
create mode 100644 packages/mantine/logo.png
create mode 100644 packages/mantine/package.json
create mode 100644 packages/mantine/screenshot.png
create mode 100644 packages/mantine/src/Form/index.ts
create mode 100644 packages/mantine/src/Theme/index.ts
create mode 100644 packages/mantine/src/index.ts
create mode 100644 packages/mantine/src/templates/ArrayFieldItemTemplate.tsx
create mode 100644 packages/mantine/src/templates/ArrayFieldTemplate.tsx
create mode 100644 packages/mantine/src/templates/ArrayFieldTitleTemplate.tsx
create mode 100644 packages/mantine/src/templates/BaseInputTemplate.tsx
create mode 100644 packages/mantine/src/templates/ButtonTemplates/AddButton.tsx
create mode 100644 packages/mantine/src/templates/ButtonTemplates/IconButton.tsx
create mode 100644 packages/mantine/src/templates/ButtonTemplates/SubmitButton.tsx
create mode 100644 packages/mantine/src/templates/ButtonTemplates/index.ts
create mode 100644 packages/mantine/src/templates/ErrorList.tsx
create mode 100644 packages/mantine/src/templates/FieldErrorTemplate.tsx
create mode 100644 packages/mantine/src/templates/FieldHelpTemplate.tsx
create mode 100644 packages/mantine/src/templates/FieldTemplate.tsx
create mode 100644 packages/mantine/src/templates/ObjectFieldTemplate.tsx
create mode 100644 packages/mantine/src/templates/TitleField.tsx
create mode 100644 packages/mantine/src/templates/WrapIfAdditionalTemplate.tsx
create mode 100644 packages/mantine/src/templates/icons.tsx
create mode 100644 packages/mantine/src/templates/index.ts
create mode 100644 packages/mantine/src/tsconfig.json
create mode 100644 packages/mantine/src/widgets/CheckboxWidget.tsx
create mode 100644 packages/mantine/src/widgets/CheckboxesWidget.tsx
create mode 100644 packages/mantine/src/widgets/ColorWidget.tsx
create mode 100644 packages/mantine/src/widgets/DateTime/AltDateTimeWidget.tsx
create mode 100644 packages/mantine/src/widgets/DateTime/AltDateWidget.tsx
create mode 100644 packages/mantine/src/widgets/DateTime/DateTimeInput.tsx
create mode 100644 packages/mantine/src/widgets/DateTime/DateTimeWidget.tsx
create mode 100644 packages/mantine/src/widgets/DateTime/DateWidget.tsx
create mode 100644 packages/mantine/src/widgets/DateTime/TimeWidget.tsx
create mode 100644 packages/mantine/src/widgets/DateTime/index.ts
create mode 100644 packages/mantine/src/widgets/PasswordWidget.tsx
create mode 100644 packages/mantine/src/widgets/RadioWidget.tsx
create mode 100644 packages/mantine/src/widgets/RangeWidget.tsx
create mode 100644 packages/mantine/src/widgets/SelectWidget.tsx
create mode 100644 packages/mantine/src/widgets/TextareaWidget.tsx
create mode 100644 packages/mantine/src/widgets/index.ts
create mode 100644 packages/mantine/test/Array.test.tsx
create mode 100644 packages/mantine/test/Form.test.tsx
create mode 100644 packages/mantine/test/Object.test.tsx
create mode 100644 packages/mantine/test/__snapshots__/Array.test.tsx.snap
create mode 100644 packages/mantine/test/__snapshots__/Form.test.tsx.snap
create mode 100644 packages/mantine/test/__snapshots__/Object.test.tsx.snap
create mode 100644 packages/mantine/test/cleanSnapshotSerializer.ts
create mode 100644 packages/mantine/test/tsconfig.json
create mode 100644 packages/mantine/tsconfig.json
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index f4b8ef9af3..c06eaf0585 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -27,6 +27,7 @@ body:
- bootstrap-4
- chakra-ui
- fluent-ui
+ - mantine
- material-ui
- mui
- semantic-ui
diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml
index 9d3a1b8db1..cf9415b472 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.yml
+++ b/.github/ISSUE_TEMPLATE/feature_request.yml
@@ -21,6 +21,7 @@ body:
- bootstrap-4
- chakra-ui
- fluent-ui
+ - mantine
- material-ui
- mui
- semantic-ui
diff --git a/.github/ISSUE_TEMPLATE/question_issue.yml b/.github/ISSUE_TEMPLATE/question_issue.yml
index 8f46bc297c..3324b82cc0 100644
--- a/.github/ISSUE_TEMPLATE/question_issue.yml
+++ b/.github/ISSUE_TEMPLATE/question_issue.yml
@@ -21,6 +21,7 @@ body:
- bootstrap-4
- chakra-ui
- fluent-ui
+ - mantine
- material-ui
- mui
- semantic-ui
diff --git a/README.md b/README.md
index 2fc11268d9..1f1e5f532d 100644
--- a/README.md
+++ b/README.md
@@ -33,6 +33,7 @@
- [Chakra UI](https://github.com/rjsf-team/react-jsonschema-form/tree/main/packages/chakra-ui)
- [Fluent UI](https://github.com/rjsf-team/react-jsonschema-form/tree/main/packages/fluent-ui)
- [Fluent UI 9](https://github.com/rjsf-team/react-jsonschema-form/tree/main/packages/fluentui-rc)
+- [Mantine](https://github.com/rjsf-team/react-jsonschema-form/tree/main/packages/mantine)
- [Material UI 4](https://github.com/rjsf-team/react-jsonschema-form/tree/main/packages/material-ui)
- [Material UI 5](https://github.com/rjsf-team/react-jsonschema-form/tree/main/packages/mui)
- [Semantic UI](https://github.com/rjsf-team/react-jsonschema-form/tree/main/packages/semantic-ui)
diff --git a/package-lock.json b/package-lock.json
index adfe9ae0c2..79c651d059 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,6 +14,7 @@
"packages/docs",
"packages/fluent-ui",
"packages/fluentui-rc",
+ "packages/mantine",
"packages/material-ui",
"packages/mui",
"packages/playground",
@@ -4626,12 +4627,28 @@
"@floating-ui/utils": "^0.2.1"
}
},
+ "node_modules/@floating-ui/react": {
+ "version": "0.26.28",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.28.tgz",
+ "integrity": "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/react-dom": "^2.1.2",
+ "@floating-ui/utils": "^0.2.8",
+ "tabbable": "^6.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
"node_modules/@floating-ui/react-dom": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz",
- "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz",
+ "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==",
+ "license": "MIT",
"dependencies": {
- "@floating-ui/dom": "^1.6.1"
+ "@floating-ui/dom": "^1.0.0"
},
"peerDependencies": {
"react": ">=16.8.0",
@@ -4639,9 +4656,10 @@
}
},
"node_modules/@floating-ui/utils": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz",
- "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q=="
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz",
+ "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==",
+ "license": "MIT"
},
"node_modules/@fluentui/date-time-utilities": {
"version": "8.5.16",
@@ -7459,6 +7477,105 @@
"node": ">=10"
}
},
+ "node_modules/@mantine/core": {
+ "version": "7.16.3",
+ "resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.16.3.tgz",
+ "integrity": "sha512-cxhIpfd2i0Zmk9TKdejYAoIvWouMGhzK3OOX+VRViZ5HEjnTQCGl2h3db56ThqB6NfVPCno6BPbt5lwekTtmuQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/react": "^0.26.28",
+ "clsx": "^2.1.1",
+ "react-number-format": "^5.4.3",
+ "react-remove-scroll": "^2.6.2",
+ "react-textarea-autosize": "8.5.6",
+ "type-fest": "^4.27.0"
+ },
+ "peerDependencies": {
+ "@mantine/hooks": "7.16.3",
+ "react": "^18.x || ^19.x",
+ "react-dom": "^18.x || ^19.x"
+ }
+ },
+ "node_modules/@mantine/core/node_modules/clsx": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@mantine/core/node_modules/react-remove-scroll": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.3.tgz",
+ "integrity": "sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==",
+ "license": "MIT",
+ "dependencies": {
+ "react-remove-scroll-bar": "^2.3.7",
+ "react-style-singleton": "^2.2.3",
+ "tslib": "^2.1.0",
+ "use-callback-ref": "^1.3.3",
+ "use-sidecar": "^1.1.3"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mantine/core/node_modules/type-fest": {
+ "version": "4.34.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.34.1.tgz",
+ "integrity": "sha512-6kSc32kT0rbwxD6QL1CYe8IqdzN/J/ILMrNK+HMQCKH3insCDRY/3ITb0vcBss0a3t72fzh2YSzj8ko1HgwT3g==",
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@mantine/dates": {
+ "version": "7.16.3",
+ "resolved": "https://registry.npmjs.org/@mantine/dates/-/dates-7.16.3.tgz",
+ "integrity": "sha512-YI8aW3GFBmLJz0eu9Q6tFFXaubZIZMccA+6Jla8K8K8KMdx5wEPBrCCOHZnL3r0RcVLhARLa0VEmEyaQB+DTjQ==",
+ "license": "MIT",
+ "dependencies": {
+ "clsx": "^2.1.1"
+ },
+ "peerDependencies": {
+ "@mantine/core": "7.16.3",
+ "@mantine/hooks": "7.16.3",
+ "dayjs": ">=1.0.0",
+ "react": "^18.x || ^19.x",
+ "react-dom": "^18.x || ^19.x"
+ }
+ },
+ "node_modules/@mantine/dates/node_modules/clsx": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@mantine/hooks": {
+ "version": "7.16.3",
+ "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.16.3.tgz",
+ "integrity": "sha512-B94FBWk5Sc81tAjV+B3dGh/gKzfqzpzVC/KHyBRWOOyJRqeeRbI/FAaJo4zwppyQo1POSl5ArdyjtDRrRIj2SQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^18.x || ^19.x"
+ }
+ },
"node_modules/@material-ui/core": {
"version": "4.12.4",
"resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.12.4.tgz",
@@ -9666,6 +9783,10 @@
"resolved": "packages/fluentui-rc",
"link": true
},
+ "node_modules/@rjsf/mantine": {
+ "resolved": "packages/mantine",
+ "link": true
+ },
"node_modules/@rjsf/material-ui": {
"resolved": "packages/material-ui",
"link": true
@@ -28258,6 +28379,16 @@
"url": "https://github.com/sponsors/gregberge"
}
},
+ "node_modules/react-number-format": {
+ "version": "5.4.3",
+ "resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-5.4.3.tgz",
+ "integrity": "sha512-VCY5hFg/soBighAoGcdE+GagkJq0230qN6jcS5sp8wQX1qy1fYN/RX7/BXkrs0oyzzwqR8/+eSUrqXbGeywdUQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
"node_modules/react-overlays": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-5.2.1.tgz",
@@ -28347,19 +28478,20 @@
}
},
"node_modules/react-remove-scroll-bar": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz",
- "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==",
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz",
+ "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==",
+ "license": "MIT",
"dependencies": {
- "react-style-singleton": "^2.2.1",
+ "react-style-singleton": "^2.2.2",
"tslib": "^2.0.0"
},
"engines": {
"node": ">=10"
},
"peerDependencies": {
- "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -28459,20 +28591,20 @@
}
},
"node_modules/react-style-singleton": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz",
- "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==",
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz",
+ "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==",
+ "license": "MIT",
"dependencies": {
"get-nonce": "^1.0.0",
- "invariant": "^2.2.4",
"tslib": "^2.0.0"
},
"engines": {
"node": ">=10"
},
"peerDependencies": {
- "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -28495,9 +28627,10 @@
}
},
"node_modules/react-textarea-autosize": {
- "version": "8.5.3",
- "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz",
- "integrity": "sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==",
+ "version": "8.5.6",
+ "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.6.tgz",
+ "integrity": "sha512-aT3ioKXMa8f6zHYGebhbdMD2L00tKeRX1zuVuDx9YQK/JLLRSaSxq3ugECEmUB9z2kvk6bFSIoRHLkkUv0RJiw==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.20.13",
"use-composed-ref": "^1.3.0",
@@ -28507,7 +28640,7 @@
"node": ">=10"
},
"peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
}
},
"node_modules/react-transform-catch-errors": {
@@ -31214,6 +31347,12 @@
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
"dev": true
},
+ "node_modules/tabbable": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz",
+ "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==",
+ "license": "MIT"
+ },
"node_modules/tabster": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/tabster/-/tabster-6.0.0.tgz",
@@ -32724,9 +32863,10 @@
}
},
"node_modules/use-callback-ref": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.1.tgz",
- "integrity": "sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz",
+ "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==",
+ "license": "MIT",
"dependencies": {
"tslib": "^2.0.0"
},
@@ -32734,8 +32874,8 @@
"node": ">=10"
},
"peerDependencies": {
- "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -32792,9 +32932,10 @@
}
},
"node_modules/use-sidecar": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz",
- "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz",
+ "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==",
+ "license": "MIT",
"dependencies": {
"detect-node-es": "^1.1.0",
"tslib": "^2.0.0"
@@ -32803,8 +32944,8 @@
"node": ">=10"
},
"peerDependencies": {
- "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -34550,6 +34691,51 @@
"react": "^16.14.0 || >=17"
}
},
+ "packages/mantine": {
+ "name": "@rjsf/mantine",
+ "version": "5.24.3",
+ "license": "Apache-2.0",
+ "devDependencies": {
+ "@babel/core": "^7.23.9",
+ "@babel/plugin-proposal-class-properties": "^7.18.6",
+ "@babel/plugin-proposal-optional-chaining": "^7.21.0",
+ "@babel/preset-env": "^7.23.9",
+ "@babel/preset-react": "^7.23.3",
+ "@babel/preset-typescript": "^7.23.3",
+ "@rjsf/core": "^5.24.3",
+ "@rjsf/snapshot-tests": "^5.24.3",
+ "@rjsf/utils": "^5.24.3",
+ "@rjsf/validator-ajv8": "^5.24.3",
+ "@types/jest": "^29.5.12",
+ "@types/lodash": "^4.14.202",
+ "@types/react": "^18.2.58",
+ "@types/react-dom": "^18.2.19",
+ "@types/react-test-renderer": "^18.0.7",
+ "atob": "^2.1.2",
+ "babel-jest": "^29.7.0",
+ "eslint": "^8.56.0",
+ "jest": "^29.7.0",
+ "jest-environment-jsdom": "^29.7.0",
+ "nanoid": "^3.3.7",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "react-test-renderer": "^18.2.0",
+ "rimraf": "^5.0.5",
+ "rollup": "^3.29.4",
+ "typescript": "^4.9.5"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@mantine/core": ">=7",
+ "@mantine/dates": ">=7",
+ "@mantine/hooks": ">=7",
+ "@rjsf/core": "^5.24.x",
+ "@rjsf/utils": "^5.24.x",
+ "react": "^16.14.0 || >=17"
+ }
+ },
"packages/material-ui": {
"name": "@rjsf/material-ui",
"version": "5.24.8",
@@ -34653,6 +34839,9 @@
"@chakra-ui/icons": "^1.1.7",
"@chakra-ui/react": "^1.8.9",
"@fluentui/react": "^8.115.3",
+ "@mantine/core": "^7.16.3",
+ "@mantine/dates": "^7.16.3",
+ "@mantine/hooks": "^7.16.3",
"@material-ui/core": "^4.12.4",
"@mui/base": "5.0.0-beta.28",
"@mui/material": "6.0.2",
diff --git a/package.json b/package.json
index 457e4ee156..57dd044033 100644
--- a/package.json
+++ b/package.json
@@ -72,6 +72,7 @@
"packages/docs",
"packages/fluent-ui",
"packages/fluentui-rc",
+ "packages/mantine",
"packages/material-ui",
"packages/mui",
"packages/playground",
diff --git a/packages/docs/docs/usage/themes.md b/packages/docs/docs/usage/themes.md
index 779d742401..9172ae852c 100644
--- a/packages/docs/docs/usage/themes.md
+++ b/packages/docs/docs/usage/themes.md
@@ -5,17 +5,18 @@ meaning that you must load the Bootstrap stylesheet on the page to view the form
## Supported themes
-| Theme Name | Status | Package Name / Link |
-| --------------------- | --------- | ------------------- |
-| antd | Published | `@rjsf/antd` |
-| Bootstrap 3 (default) | Published | `@rjsf/core` |
-| Bootstrap 4 | Published | `@rjsf/bootstrap-4` |
-| Chakra UI | Published | `@rjsf/chakra-ui` |
-| fluent-ui | Published | `@rjsf/fluent-ui` |
-| fluentui-rc | Published | `@rjsf/fluentui-rc` |
-| material-ui 4 | Published | `@rjsf/material-ui` |
-| material-ui 5 | Published | `@rjsf/mui` |
-| Semantic UI | Published | `@rjsf/semantic-ui` |
+| Theme Name | Status | Package Name / Link |
+| --------------------- | ------------- | ------------------- |
+| antd | Published | `@rjsf/antd` |
+| Bootstrap 3 (default) | Published | `@rjsf/core` |
+| Bootstrap 4 | Published | `@rjsf/bootstrap-4` |
+| Chakra UI | Published | `@rjsf/chakra-ui` |
+| fluent-ui | Published | `@rjsf/fluent-ui` |
+| fluentui-rc | Published | `@rjsf/fluentui-rc` |
+| mantine | Not Published | `@rjsf/mantine` |
+| material-ui 4 | Published | `@rjsf/material-ui` |
+| material-ui 5 | Published | `@rjsf/mui` |
+| Semantic UI | Published | `@rjsf/semantic-ui` |
## Using themes
diff --git a/packages/mantine/.eslintrc b/packages/mantine/.eslintrc
new file mode 100644
index 0000000000..726b68b788
--- /dev/null
+++ b/packages/mantine/.eslintrc
@@ -0,0 +1,4 @@
+{
+ "extends": "../../.eslintrc",
+ "plugins": ["@typescript-eslint", "jsx-a11y", "react", "import"]
+}
diff --git a/packages/mantine/README.md b/packages/mantine/README.md
new file mode 100644
index 0000000000..9a19a2ffc9
--- /dev/null
+++ b/packages/mantine/README.md
@@ -0,0 +1,153 @@
+[![Build Status][build-shield]][build-url]
+[![npm][npm-shield]][npm-url]
+[![npm downloads][npm-dl-shield]][npm-dl-url]
+[![Contributors][contributors-shield]][contributors-url]
+[![Apache 2.0 License][license-shield]][license-url]
+
+
+
+
+
+
+
+
+
rjsf-mantine
+
+
+ Mantine theme, fields and widgets for react-jsonschema-form
.
+
+ Explore the docs »
+
+
+ View Playground
+ ·
+ Report Bug
+ ·
+ Request Feature
+
+
+
+
+
+## Table of Contents
+
+- [Table of Contents](#table-of-contents)
+- [About The Project](#about-the-project)
+ - [Built With](#built-with)
+- [Getting Started](#getting-started)
+ - [Prerequisites](#prerequisites)
+ - [Installation](#installation)
+- [Usage](#usage)
+- [Optional Mantine Theme properties](#optional-mantine-theme-properties)
+ - [Mantine Widget Optional Properties](#mantine-widget-optional-properties)
+- [Roadmap](#roadmap)
+- [Contributing](#contributing)
+- [Contact](#contact)
+
+
+
+## About The Project
+
+`Mantine` theme, fields and widgets for `react-jsonschema-form`.
+
+### Built With
+
+- [react-jsonschema-form](https://github.com/rjsf-team/react-jsonschema-form/)
+- [Mantine](https://mantine.dev/)
+
+
+
+## Getting Started
+
+- See the [getting started guide](https://mantine.dev/getting-started/) on Mantine documentation.
+
+### Prerequisites
+
+- `@mantine/core >= 7`
+- `@mantine/hooks >= 7`
+- `@mantine/dates >= 7`
+- `dayjs >= 1.8.0`
+- `@rjsf/core >= 2.0.0`
+
+```sh
+npm install @mantine/core @mantine/hooks @mantine/dates dayjs @rjsf/core
+```
+
+### Installation
+
+```sh
+npm install @rjsf/mantine
+```
+
+
+
+## Usage
+
+```javascript
+import Form from '@rjsf/mantine';
+```
+
+or
+
+```javascript
+import { withTheme } from '@rjsf/core';
+import { Theme as MantineTheme } from '@rjsf/mantine';
+
+// Make modifications to the theme with your own fields and widgets
+
+const Form = withTheme(MantineTheme);
+```
+
+## Optional Mantine Theme properties
+
+- To pass additional properties to widgets, see this [guide](https://rjsf-team.github.io/react-jsonschema-form/docs/usage/objects#additional-properties).
+
+#### Mantine Widget Optional Properties
+
+- [Mantine props for CheckboxWidget](https://mantine.dev/core/checkbox/?t=props)
+- [Mantine props for ColorWidget](https://mantine.dev/core/color-input/?t=props)
+- [Mantine props for DateWidget](https://mantine.dev/dates/date-input/?t=props)
+- [Mantine props for DateTimeWidget](https://mantine.dev/dates/date-input/?t=props)
+- [Mantine props for PasswordWidget](https://mantine.dev/core/password-input/?t=props)
+- [Mantine props for RadioWidget](https://mantine.dev/core/radio/?t=props)
+- [Mantine props for RangeWidget](https://mantine.dev/core/slider/?t=props)
+- [Mantine props for SelectWidget](https://mantine.dev/core/select/?t=props)
+- [Mantine props for UpDownWidget](https://mantine.dev/core/number-input/?t=props)
+- [Mantine props for TextWidget](https://mantine.dev/core/text-input/?t=props)
+- [Mantine props for TextAreaWidget](https://mantine.dev/core/textarea/?t=props)
+- [Mantine props for TimeWidget](https://mantine.dev/dates/time-input/?t=props)
+
+
+
+## Roadmap
+
+See the [open issues](https://github.com/rjsf-team/react-jsonschema-form/issues) for a list of proposed features (and known issues).
+
+
+
+## Contributing
+
+Read our [contributors' guide](https://rjsf-team.github.io/react-jsonschema-form/docs/contributing/) to get started.
+
+
+
+## Contact
+
+rjsf team: [https://github.com/orgs/rjsf-team/people](https://github.com/orgs/rjsf-team/people)
+
+GitHub repository: [https://github.com/rjsf-team/react-jsonschema-form](https://github.com/rjsf-team/react-jsonschema-form)
+
+
+
+
+[build-shield]: https://github.com/rjsf-team/react-jsonschema-form/workflows/CI/badge.svg
+[build-url]: https://github.com/rjsf-team/react-jsonschema-form/actions
+[contributors-shield]: https://img.shields.io/github/contributors/rjsf-team/react-jsonschema-form.svg
+[contributors-url]: https://github.com/rjsf-team/react-jsonschema-form/graphs/contributors
+[license-shield]: https://img.shields.io/badge/license-Apache%202.0-blue.svg?style=flat-square
+[license-url]: https://choosealicense.com/licenses/apache-2.0/
+[npm-shield]: https://img.shields.io/npm/v/@rjsf/mantine/latest.svg?style=flat-square
+[npm-url]: https://www.npmjs.com/package/@rjsf/mantine
+[npm-dl-shield]: https://img.shields.io/npm/dm/@rjsf/mantine.svg?style=flat-square
+[npm-dl-url]: https://www.npmjs.com/package/@rjsf/mantine
+[product-screenshot]: https://raw.githubusercontent.com/rjsf-team/react-jsonschema-form/59a8206e148474bea854bbb004f624143fbcbac8/packages/mantine/screenshot.png
diff --git a/packages/mantine/babel.config.js b/packages/mantine/babel.config.js
new file mode 100644
index 0000000000..5f772a56c4
--- /dev/null
+++ b/packages/mantine/babel.config.js
@@ -0,0 +1,3 @@
+const defaultConfig = require('../../babel.config');
+
+module.exports = defaultConfig;
diff --git a/packages/mantine/jest.config.js b/packages/mantine/jest.config.js
new file mode 100644
index 0000000000..6e7a8ee681
--- /dev/null
+++ b/packages/mantine/jest.config.js
@@ -0,0 +1,10 @@
+module.exports = {
+ rootDir: './',
+ snapshotSerializers: ['/test/cleanSnapshotSerializer.ts'],
+ verbose: true,
+ testEnvironment: 'jsdom',
+ testEnvironmentOptions: {
+ browsers: ['chrome', 'firefox', 'safari'],
+ },
+ transformIgnorePatterns: [`/node_modules/(?!nanoid)`],
+};
diff --git a/packages/mantine/logo.png b/packages/mantine/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..1da1cc614184c7a39ff74752df03c0c32b1e8818
GIT binary patch
literal 9075
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