From 62f33b7759c516e3d01093acbf8fd69a5a2006e4 Mon Sep 17 00:00:00 2001 From: Nick Grosenbacher Date: Sat, 25 Nov 2023 11:26:44 -0500 Subject: [PATCH] Add react-bootstrap theme to replace bootstrap-4 (#3638) - Add react-bootstrap package and use react-bootstrap v2, corresponding to Bootstrap 5 - CheckboxesWidget: Remove deprecated prop `custom` - IconButton: Remove deprecated `block` prop - RangeWidget: Use `FormRange` component - SelectWidget: Use new FormSelect component, remove `bsPrefix` prop to achieve correct styling --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- .github/ISSUE_TEMPLATE/feature_request.yml | 2 +- .github/ISSUE_TEMPLATE/question_issue.yml | 2 +- CHANGELOG.md | 15 ++ README.md | 2 +- package-lock.json | 133 +++++++++- package.json | 2 +- .../bootstrap-4/react-bootstrap-4-logo.png | Bin 18146 -> 0 bytes .../src/RangeWidget/RangeWidget.tsx | 13 - packages/docs/docs/usage/themes.md | 22 +- packages/playground/package.json | 2 +- packages/playground/src/app.tsx | 10 +- packages/playground/tsconfig.json | 2 +- packages/playground/vite.config.ts | 2 +- .../.eslintrc | 0 .../.gitignore | 0 .../README.md | 26 +- .../babel.config.js | 0 packages/react-bootstrap/bootstrap-logo.png | Bin 0 -> 48625 bytes .../jest.config.js | 0 .../package.json | 18 +- .../src/AddButton/AddButton.tsx | 0 .../src/AddButton/index.ts | 0 .../ArrayFieldItemTemplate.tsx | 0 .../src/ArrayFieldItemTemplate/index.ts | 0 .../ArrayFieldTemplate/ArrayFieldTemplate.tsx | 0 .../src/ArrayFieldTemplate/index.ts | 0 .../BaseInputTemplate/BaseInputTemplate.tsx | 0 .../src/BaseInputTemplate/index.ts | 0 .../src/CheckboxWidget/CheckboxWidget.tsx | 0 .../src/CheckboxWidget/index.ts | 0 .../src/CheckboxesWidget/CheckboxesWidget.tsx | 1 - .../src/CheckboxesWidget/index.ts | 0 .../src/DescriptionField/DescriptionField.tsx | 0 .../src/DescriptionField/index.ts | 0 .../src/ErrorList/ErrorList.tsx | 0 .../src/ErrorList/index.ts | 0 .../FieldErrorTemplate/FieldErrorTemplate.tsx | 0 .../src/FieldErrorTemplate/index.ts | 0 .../FieldHelpTemplate/FieldHelpTemplate.tsx | 0 .../src/FieldHelpTemplate/index.ts | 0 .../src/FieldTemplate/FieldTemplate.tsx | 0 .../src/FieldTemplate/index.ts | 0 .../src/Form/Form.tsx | 0 .../src/Form/index.ts | 0 .../src/IconButton/IconButton.tsx | 2 +- .../src/IconButton/index.ts | 0 .../ObjectFieldTemplate.tsx | 0 .../src/ObjectFieldTemplate/index.ts | 0 .../src/RadioWidget/RadioWidget.tsx | 0 .../src/RadioWidget/index.ts | 0 .../src/RangeWidget/RangeWidget.tsx | 31 +++ .../src/RangeWidget/index.ts | 0 .../src/SelectWidget/SelectWidget.tsx | 8 +- .../src/SelectWidget/index.ts | 0 .../src/SubmitButton/SubmitButton.tsx | 0 .../src/SubmitButton/index.ts | 0 .../src/Templates/Templates.ts | 0 .../src/Templates/index.ts | 0 .../src/TextareaWidget/TextareaWidget.tsx | 0 .../src/TextareaWidget/index.ts | 0 .../src/Theme/Theme.tsx | 0 .../src/Theme/index.ts | 0 .../src/TitleField/TitleField.tsx | 0 .../src/TitleField/index.ts | 0 .../src/Widgets/Widgets.ts | 0 .../src/Widgets/index.ts | 0 .../WrapIfAdditionalTemplate.tsx | 3 +- .../src/WrapIfAdditionalTemplate/index.ts | 0 .../src/index.ts | 0 .../src/tsconfig.json | 0 .../test/Array.test.tsx | 0 .../test/CheckboxesWidget.test.tsx | 0 .../test/Form.test.tsx | 0 .../test/Object.test.tsx | 0 .../test/TextAreaWidget.test.tsx | 0 .../test/__snapshots__/Array.test.tsx.snap | 200 ++++----------- .../CheckboxesWidget.test.tsx.snap | 20 +- .../test/__snapshots__/Form.test.tsx.snap | 227 ++++++------------ .../test/__snapshots__/Object.test.tsx.snap | 204 +++++----------- .../TextAreaWidget.test.tsx.snap | 0 .../test/helpers/createMocks.ts | 0 .../test/tsconfig.json | 0 .../tsconfig.json | 0 tsconfig.json | 2 +- 85 files changed, 416 insertions(+), 535 deletions(-) delete mode 100644 packages/bootstrap-4/react-bootstrap-4-logo.png delete mode 100644 packages/bootstrap-4/src/RangeWidget/RangeWidget.tsx rename packages/{bootstrap-4 => react-bootstrap}/.eslintrc (100%) rename packages/{bootstrap-4 => react-bootstrap}/.gitignore (100%) rename packages/{bootstrap-4 => react-bootstrap}/README.md (76%) rename packages/{bootstrap-4 => react-bootstrap}/babel.config.js (100%) create mode 100644 packages/react-bootstrap/bootstrap-logo.png rename packages/{bootstrap-4 => react-bootstrap}/jest.config.js (100%) rename packages/{bootstrap-4 => react-bootstrap}/package.json (83%) rename packages/{bootstrap-4 => react-bootstrap}/src/AddButton/AddButton.tsx (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/AddButton/index.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/ArrayFieldItemTemplate/ArrayFieldItemTemplate.tsx (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/ArrayFieldItemTemplate/index.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/ArrayFieldTemplate/ArrayFieldTemplate.tsx (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/ArrayFieldTemplate/index.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/BaseInputTemplate/BaseInputTemplate.tsx (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/BaseInputTemplate/index.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/CheckboxWidget/CheckboxWidget.tsx (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/CheckboxWidget/index.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/CheckboxesWidget/CheckboxesWidget.tsx (99%) rename packages/{bootstrap-4 => react-bootstrap}/src/CheckboxesWidget/index.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/DescriptionField/DescriptionField.tsx (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/DescriptionField/index.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/ErrorList/ErrorList.tsx (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/ErrorList/index.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/FieldErrorTemplate/FieldErrorTemplate.tsx (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/FieldErrorTemplate/index.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/FieldHelpTemplate/FieldHelpTemplate.tsx (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/FieldHelpTemplate/index.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/FieldTemplate/FieldTemplate.tsx (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/FieldTemplate/index.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/Form/Form.tsx (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/Form/index.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/IconButton/IconButton.tsx (95%) rename packages/{bootstrap-4 => react-bootstrap}/src/IconButton/index.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/ObjectFieldTemplate/ObjectFieldTemplate.tsx (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/ObjectFieldTemplate/index.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/RadioWidget/RadioWidget.tsx (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/RadioWidget/index.ts (100%) create mode 100644 packages/react-bootstrap/src/RangeWidget/RangeWidget.tsx rename packages/{bootstrap-4 => react-bootstrap}/src/RangeWidget/index.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/SelectWidget/SelectWidget.tsx (95%) rename packages/{bootstrap-4 => react-bootstrap}/src/SelectWidget/index.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/SubmitButton/SubmitButton.tsx (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/SubmitButton/index.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/Templates/Templates.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/Templates/index.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/TextareaWidget/TextareaWidget.tsx (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/TextareaWidget/index.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/Theme/Theme.tsx (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/Theme/index.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/TitleField/TitleField.tsx (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/TitleField/index.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/Widgets/Widgets.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/Widgets/index.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/WrapIfAdditionalTemplate/WrapIfAdditionalTemplate.tsx (96%) rename packages/{bootstrap-4 => react-bootstrap}/src/WrapIfAdditionalTemplate/index.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/index.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/src/tsconfig.json (100%) rename packages/{bootstrap-4 => react-bootstrap}/test/Array.test.tsx (100%) rename packages/{bootstrap-4 => react-bootstrap}/test/CheckboxesWidget.test.tsx (100%) rename packages/{bootstrap-4 => react-bootstrap}/test/Form.test.tsx (100%) rename packages/{bootstrap-4 => react-bootstrap}/test/Object.test.tsx (100%) rename packages/{bootstrap-4 => react-bootstrap}/test/TextAreaWidget.test.tsx (100%) rename packages/{bootstrap-4 => react-bootstrap}/test/__snapshots__/Array.test.tsx.snap (97%) rename packages/{bootstrap-4 => react-bootstrap}/test/__snapshots__/CheckboxesWidget.test.tsx.snap (71%) rename packages/{bootstrap-4 => react-bootstrap}/test/__snapshots__/Form.test.tsx.snap (92%) rename packages/{bootstrap-4 => react-bootstrap}/test/__snapshots__/Object.test.tsx.snap (94%) rename packages/{bootstrap-4 => react-bootstrap}/test/__snapshots__/TextAreaWidget.test.tsx.snap (100%) rename packages/{bootstrap-4 => react-bootstrap}/test/helpers/createMocks.ts (100%) rename packages/{bootstrap-4 => react-bootstrap}/test/tsconfig.json (100%) rename packages/{bootstrap-4 => react-bootstrap}/tsconfig.json (100%) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index f4b8ef9af3..894c288b2e 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -24,11 +24,11 @@ body: options: - core - antd - - bootstrap-4 - chakra-ui - fluent-ui - material-ui - mui + - react-bootstrap - semantic-ui - utils - validator-ajv6 diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 9d3a1b8db1..6e30c80cbd 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -18,11 +18,11 @@ body: options: - core - antd - - bootstrap-4 - chakra-ui - fluent-ui - material-ui - mui + - react-bootstrap - semantic-ui - utils - validator-ajv6 diff --git a/.github/ISSUE_TEMPLATE/question_issue.yml b/.github/ISSUE_TEMPLATE/question_issue.yml index 8f46bc297c..b4d33876c2 100644 --- a/.github/ISSUE_TEMPLATE/question_issue.yml +++ b/.github/ISSUE_TEMPLATE/question_issue.yml @@ -18,11 +18,11 @@ body: options: - core - antd - - bootstrap-4 - chakra-ui - fluent-ui - material-ui - mui + - react-bootstrap - semantic-ui - utils - validator-ajv6 diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a2c9edd2e..dcf4a2c00e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,21 @@ 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. --> +# 6.0.0 + +## @rjsf/bootstrap-4 + +- Package has been replaced with `@rjsf/react-bootstrap`. `react-boostrap` v1 / Bootstrap 4 are no longer supported in RJSF v6. + +## @rjsf/react-bootstrap + +- Added new package to replace `@rjsf/bootstrap-4` +- `react-bootstrap` peer dependency bumped to `^2.0.0`, corresponding to Bootstrap 5 +- CheckboxesWidget: Remove deprecated prop `custom` +- IconButton: Remove deprecated `block` prop +- RangeWidget: Use `FormRange` component +- SelectWidget: Use new FormSelect component, remove `bsPrefix` prop to achieve correct styling + # 5.15.1 ## @rjsf/core diff --git a/README.md b/README.md index 2fc11268d9..ccc848ea91 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ - [Ant Design](https://github.com/rjsf-team/react-jsonschema-form/tree/main/packages/antd) - [Bootstrap 3](https://github.com/rjsf-team/react-jsonschema-form/tree/main/packages/core) -- [Bootstrap 4](https://github.com/rjsf-team/react-jsonschema-form/tree/main/packages/bootstrap-4) +- [React-Bootstrap (Bootstrap 5)](https://github.com/rjsf-team/react-jsonschema-form/tree/main/packages/react-bootstrap) - [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) diff --git a/package-lock.json b/package-lock.json index a27264bfd3..35a58931f9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,6 @@ "license": "Apache-2.0", "workspaces": [ "packages/antd", - "packages/bootstrap-4", "packages/chakra-ui", "packages/core", "packages/docs", @@ -17,6 +16,7 @@ "packages/material-ui", "packages/mui", "packages/playground", + "packages/react-bootstrap", "packages/semantic-ui", "packages/utils", "packages/validator-ajv6", @@ -9592,6 +9592,21 @@ "react-dom": "^16.8.0 || 17.x" } }, + "node_modules/@react-aria/ssr": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.0.tgz", + "integrity": "sha512-Bz6BqP6ZorCme9tSWHZVmmY+s7AU8l6Vl2NUYmBzezD//fVHHfFo4lFBn5tBuAaJEm3AuCLaJQ6H2qhxNSb7zg==", + "dev": true, + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, "node_modules/@react-icons/all-files": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@react-icons/all-files/-/all-files-4.1.0.tgz", @@ -9619,14 +9634,40 @@ "react": ">=16.8.0" } }, + "node_modules/@restart/ui": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.6.6.tgz", + "integrity": "sha512-eC3puKuWE1SRYbojWHXnvCNHGgf3uzHCb6JOhnF4OXPibOIPEkR1sqDSkL643ydigxwh+ruCa1CmYHlzk7ikKA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.21.0", + "@popperjs/core": "^2.11.6", + "@react-aria/ssr": "^3.5.0", + "@restart/hooks": "^0.4.9", + "@types/warning": "^3.0.0", + "dequal": "^2.0.3", + "dom-helpers": "^5.2.0", + "uncontrollable": "^8.0.1", + "warning": "^4.0.3" + }, + "peerDependencies": { + "react": ">=16.14.0", + "react-dom": ">=16.14.0" + } + }, + "node_modules/@restart/ui/node_modules/uncontrollable": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-8.0.4.tgz", + "integrity": "sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ==", + "dev": true, + "peerDependencies": { + "react": ">=16.14.0" + } + }, "node_modules/@rjsf/antd": { "resolved": "packages/antd", "link": true }, - "node_modules/@rjsf/bootstrap-4": { - "resolved": "packages/bootstrap-4", - "link": true - }, "node_modules/@rjsf/chakra-ui": { "resolved": "packages/chakra-ui", "link": true @@ -9659,6 +9700,10 @@ "resolved": "packages/playground", "link": true }, + "node_modules/@rjsf/react-bootstrap": { + "resolved": "packages/react-bootstrap", + "link": true + }, "node_modules/@rjsf/semantic-ui": { "resolved": "packages/semantic-ui", "link": true @@ -34188,6 +34233,7 @@ "packages/bootstrap-4": { "name": "@rjsf/bootstrap-4", "version": "5.15.0", + "extraneous": true, "license": "MIT", "dependencies": { "@react-icons/all-files": "^4.1.0" @@ -34646,13 +34692,13 @@ "@material-ui/core": "^4.12.4", "@mui/material": "^5.14.8", "@rjsf/antd": "^5.15.0", - "@rjsf/bootstrap-4": "^5.15.0", "@rjsf/chakra-ui": "^5.15.0", "@rjsf/core": "^5.15.0", "@rjsf/fluent-ui": "^5.15.0", "@rjsf/fluentui-rc": "^5.15.0", "@rjsf/material-ui": "^5.15.0", "@rjsf/mui": "^5.15.0", + "@rjsf/react-bootstrap": "file:../react-bootstrap", "@rjsf/semantic-ui": "^5.15.0", "@rjsf/utils": "^5.15.0", "@rjsf/validator-ajv6": "^5.15.0", @@ -34772,6 +34818,81 @@ "loose-envify": "^1.1.0" } }, + "packages/react-bootstrap": { + "name": "@rjsf/react-bootstrap", + "version": "5.15.0", + "license": "MIT", + "dependencies": { + "@react-icons/all-files": "^4.1.0" + }, + "devDependencies": { + "@babel/core": "^7.22.17", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.21.0", + "@babel/preset-env": "^7.22.15", + "@babel/preset-react": "^7.22.15", + "@babel/preset-typescript": "^7.22.15", + "@rjsf/core": "^5.15.0", + "@rjsf/snapshot-tests": "^5.15.0", + "@rjsf/utils": "^5.15.0", + "@rjsf/validator-ajv8": "^5.15.0", + "@types/jest": "^29.5.7", + "@types/react": "^17.0.65", + "@types/react-dom": "^17.0.20", + "@types/react-test-renderer": "^17.0.3", + "babel-jest": "^29.6.4", + "esbuild": "^0.18.20", + "eslint": "^8.48.0", + "jest": "^29.6.4", + "jest-environment-jsdom": "^29.6.4", + "react": "^17.0.2", + "react-bootstrap": "^2.9.1", + "react-dom": "^17.0.2", + "react-test-renderer": "^17.0.2", + "rimraf": "^5.0.1", + "rollup": "^3.29.0", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@rjsf/core": "^5.12.x", + "@rjsf/utils": "^5.12.x", + "react": "^16.14.0 || >=17", + "react-bootstrap": "^2.0.0" + } + }, + "packages/react-bootstrap/node_modules/react-bootstrap": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.9.1.tgz", + "integrity": "sha512-ezgmh/ARCYp18LbZEqPp0ppvy+ytCmycDORqc8vXSKYV3cer4VH7OReV8uMOoKXmYzivJTxgzGHalGrHamryHA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.22.5", + "@restart/hooks": "^0.4.9", + "@restart/ui": "^1.6.6", + "@types/react-transition-group": "^4.4.6", + "classnames": "^2.3.2", + "dom-helpers": "^5.2.1", + "invariant": "^2.2.4", + "prop-types": "^15.8.1", + "prop-types-extra": "^1.1.0", + "react-transition-group": "^4.4.5", + "uncontrollable": "^7.2.1", + "warning": "^4.0.3" + }, + "peerDependencies": { + "@types/react": ">=16.14.8", + "react": ">=16.14.0", + "react-dom": ">=16.14.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "packages/semantic-ui": { "name": "@rjsf/semantic-ui", "version": "5.15.0", diff --git a/package.json b/package.json index 82498696b0..7804dca436 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,6 @@ }, "workspaces": [ "packages/antd", - "packages/bootstrap-4", "packages/chakra-ui", "packages/core", "packages/docs", @@ -70,6 +69,7 @@ "packages/material-ui", "packages/mui", "packages/playground", + "packages/react-bootstrap", "packages/semantic-ui", "packages/utils", "packages/validator-ajv6", diff --git a/packages/bootstrap-4/react-bootstrap-4-logo.png b/packages/bootstrap-4/react-bootstrap-4-logo.png deleted file mode 100644 index 3b82d59728d8d15779231b509271473385ab9a79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18146 zcmZ|11yodD^e=t^#U>P`Lt0UgmPQ%CkrI(mQc|QOq+|S|(jcKUqolNShf>nrDcwl- z%>UdOfA9a^TJJ5^UBjGvVxPVD+3`8&jNcPw`70M`E#;0OL*J&5~u%h z3v+t3tB&aH*RIN6(pDWFtHj??%A5bLRh)LXLMIWOl6o(_Y_^&yV7i*=Vj_x(FrSC0 zV0?e~IH}r0MZeb|>Yba5Bx4A}jmvdy$JIeA4R6N>Vs4~-C6 ziY(8gk-gW=*)N%9r|k;{`X7RdaTsawAs2s&Ui0~ zwZMsHDTkc*KC`2rFNQ%LGN66TVu(bvh4>zZ){B|bR-F<_3 zx1gD`-e-nYWc5i64fcJs7v%egyt`Qxl72TzMP9(%quKkrGN!q{pfzl@HJoFxI7$xs zYsL|Bq7k{AT=y;1Pt}~}96NauOJb}Egu3egUnGm4d8kTST3O4|+s?imz5s}mwn#NL zTH?0To0$3w=E+U+_3y|-^DaYA*tg8?D7-5$M4g?tI{

ujOGy+t_8Cpc)-}6I@T9Ae9jEo~UcXdZR(>@D*RToMz z7mqRy^NZ&jcC$&)88rZP?&l<~$iR z+OW_#pkedcT=JGu*fz^FRR9E8UgJqMx089Brc^S%^*dy_{U$Uro^E8}l+{+G6D1eN zXgzoV`cakT_sIH@_SWEl1pmuCku%b<$8C!W^0VQyT;?(ELOP?Q&=bxW79{2q>t>yw zitb^h$eCIVF{8c%BWAyVIul6<`fx{yg&~MFCq34#{~91hdo_zUl0H-=oQq|e(*lAh zJ}-qf>qsu8b0r9TfDVq&VUoC|1R|4X!hNr06F^V;7!+8lvaFZiFDTxGB#p-wZ8oll zRyDqpf~1j1mg#C8A*apw@EYM!IzpxnhPTL&FNzHfp^bxe6}yB`M8+3Zq)m(QZJr7b zyS0l1Pd>g*655{sJ|>ldJWBFioSD1;q4Iy+R+{#oi}qjPP|2|(hfJokRA-vzS#knc z_x3g*Ncs@TqStB~mOHW8_gU?%^aWa{wubSrR1!@@jHe(oUjkU^bK?Za`s~9m{<-}U zY88*6h$w#fASqs@=}7XtqynoHXijKPvV1f*^nCeO9!jYvcFLrt>I``}VUb zP4Y3~6y&<%kr2drRWP*v)GWAqHR9nZ;iWAPs4=K~m60X<(4(|T3W6Han3+Z19(?7^ z?R;_H#POSl?b&@A6n|5ol#tTQgzxvQF#_nTuV6~3RFU;^zZV6>_$RPCG9>U3W3Vqx zCnW?lD^-z(V~lq#qnU6DYdinDl|+HRndMImpzN`NM@(u{zf$ZyCFleV>&Qkd`_i>P z)?na>)FSg3I$hzl7RpvhNSRh$j5W4U{My9qB?$HOOJlyGY{N?@#T?xq5;cKquC!gY zK7)I0>~~4;ADn}}&a!p$peI*+~FFEp1WUwB_S;qf2%tYg=*#W`PV|vIw22JkYV?nuPlT z?^4zWwSjum+OE1r!OG7CQ1V=xc%;ASp& zsU(1y1~`y(qP8vSHrAPwZ(^&64aSB>I?SKimcU{<2;erSaYEa_vKoAP3B}sHVD0~C ze~XF;s@10+(fM2sk~nxS<^1JyD}tq1hOn z#3R8J)W%QV{c{Ec3ykT!;jBKBymKv)quavfg9<2R(I3TX$-|>`Kyhm))jzBBj^c{C ziKUyA?@B3zJ47{Ig&?8U1bT}Yuc3sR2Nk-64*2z7A@LD{ewg&ID#OOJO7SpH zY4(Mw9Kwc_5iHugx#83k$r35I-TY!q{hHl{Ct%&)y$*Y?%uz|(D*4!L*n92SDQ){mae*+tr{aSUhh1DR9Tn8h?^ zlB+Ilf@sTeFmB!mUB0B*ZobAb1l}JCcuq|LMioc5uwI*-j8W-Y291I$SHHTmyKs*k zo&&Ga1$tywQk9)^1Z#@HKwC(iHC&S_*07CY%wX}aQq{}9O9YUCo4T~?Z1SyZ zsg_GT7X8#HR%A~8eZV$(^OX)lOIs+8_w@-cxovU-s9Pbr3_FryHwbZ+a+C%PRpZVT z++MOM2%)JxmV9-L^)B#W&O)gFJ|#DMUQ5$GT%Pwlxe-tBTXsGcHkV&NU1Y)*-97r- zep+kmqc3zX{n5NE;v5$dB>nT1b+g9hG7Gykx7h8Uu^z-s>A&6Ee*(c%#I^Xlw`vL> zmwMVuE}}!KzNgx%?Yfb7k5@y`lQ$YRBU*Vg9y|lqCvJ?T&&?njVMp;^T*EAec+q*~ z$vD!nN(B_(5~UST=nq^NufhLc(NeQA) z$(TLBX8#95;h5G*iE3;qn$GE9P>lV$U;s;^j|gZomAwkYxjEllbcJ!3fYFVZNv->k z;v5j^69L!$g%`>vLq;bd$Ib5b&xOuFsOeBd+@X^v#zt(RYb2+g{>2wrL=iRU=ar>m z!S&N+_Cf0dZK=ahGw8)_d$i+UQV>F?srB@@_sE~l$`eb+B%6(p0E$#%j3u|UFgALG z4*%3kfhE!V5Q4rg3Z$yHpDr_0n66=uuX$}>mgWwZ_=)30cE+oW`|CER^^?_SIMHzi z{J?bUA!F!jo)bKwEs6%Qo+7Y5vTJIa!rX`0Cs3tG{^2LzMGGEK@3mN*$WhNJ)*3>v z+gE0Tfez++Nf}4IIH8_LaGDT-V)Y}XAI0_yK0q^Qk5`9zW3RELLYAD1`;N%_1cVF<%F5pFHk4 z7$v}k$#V5SZxBMLFuQ}HyrS!j7g7E3N2`qF@vC4Awv<#A1?x%Dv(oHgGFG41`z%(x!lYedifsUY(%v{4<`E2R+SR)D|1Xs@qWK|_yC(C-U+yhfPtX7 zBqw&Ic<>Ts_bIiTD;%*5EEjmq>NgQBkXUgGreNo{G4t9hU>7(&kchYJLCM~5@lFc4 zdbBSYsQrXN)R;N31*q1O8*!j32!0|gA>%dhX>v0*4}6axg$oJ61Ghkd2Lfb3Oz=PO zoAcn22G9Rl<^TQW|JoP@ckq9G^M7{xKUJjR`Y=tLY}eUQ1FagyN##c8WNM2eQdMid z{UibJimOgZM_H;}c85Qr*1qR`6N!m^k?1KSBOoXwZ*R1%k2!8UYSgN+HnP;J*zClP zQLGH~H66XBH5!jO(kgf@lYH3civkliR8`ldR`37ZU1rgA7gJRBMJG$I?52k24}qTuEi=4Zq=*Pd{b~>_sFQ+dJ%b!=SoCjRwWJ89Xu#xRa8vNEj9V-{y-CQ44m>GA%?4Zxu z-1XbPaVNxG(&oN21WBhaja0GkiM$#dTKKAq-7>lo8#6s#64_WO5@58~_F=QJbsJ2> z)rbJF=&|bCCK6r;biC1`q*&8t8Y6>wOyhBYMtv6LLQ@;%q~CL%&XA+s*vn^O8f1}S z^|kTGxF-+m{AhOjQ0wnNSk&QkC3wU(=QA%Qrihqv!c^R9G3Mhn9;&6{vowga>sWkc z`6~E1PkR6*I)T1Z#e;t!$FYoz2`HSgy1Hf~f&AqlqF^eT1&_6Q=k0!{nL~4%#y}4J z5W!3#s`Eg%o@C@-A09fcy_vWFPG;JkGLFoq{RM>@gQrNUlqA1Uzc3BHR+!>eB;_@< z+s_M|zjlUscSAL2K2zI|n^M4iw1_@aZzPvryCzRpq>`nVCz&dK@>qP!$IPf9zo?M_ z=ubpGLsdont%bngYn|fEdQp;M3>6E9@B|wEi zuymaK;#KWUNm7LuOG-|v{oA;sVV0Sra+~^LeNiFN{`)NO65@2B7gKM5sj}eklu#Bi zb8z^cA#f4qUfX^5|XelaA7;zmxj@<31b4 zWPk_KB13P7YD>3{cp5di#qO5xE?VM>(-ruTfrovbo4uf$V39+n$g}St5VJl|T39}q zmQAa7^7Pc(naqoPAPtJ=402D2n*@bD*kEFe`ADw7rEIww<$O3=#w|JnCQi$#&j6M_ zA^8|YMIlvrn8~{pMcxR{G{Re1u;2ENQ)2^6Lq>)e6~1Dl`|Fy6i6AVE*m}<(6%$w` zcK6;qK}Y@7*Y}rcTs66jo51(=p_`bQmV)V39(r12qZ=^_jQvT9qpPshB-1>N#-T+VA;xje+NX(+n z2F+!-2BmKKTmMZdjLwd|6BA6l%VKwhg3jJdr);Ek{J&mKiFbSh*yHH0e}0Z1=_eRr zI$-ktFuXoccD#G5o{C{p9AWqG?@7ulXhqjkN#FjX!c(W1P_+~V>?Hz z9%)uaaULE_NEv&=VL0_w@*`esEiL{Bzl4C#>j{(lXfmS4ha3tzP>FZH(MCh0jE!jb16E}+(4 z{;4$S?up|^M6dLfiH5QIkY*Q~fLH7IDar`LWuC2au&a4M^L`^vUMLw{`RRgV$EHsb0(g73d(B!Jmo ztSpHR8P2VuEzoxpwl2eb8^ZpOm_Fzw4XGlfGmIlFSVLeK-zXJiaDGbu#X5>*s z)58yu<2rql=h3J8%k|!g8Rb3q&oUvy?pv--*iO>-1`=4co%TYUZW}y05iiIXT$b&|Ye=K*uRo@VLlGS*;s!)^aOm-2J7LElgcYL^=hcBJ1+Yem7z zx%RrQT*-EnhcP&yql#P4)iwA*aX2e-x;C`#GR&poAd`*UU<>XtK~LwU4a41*UE*O9 zIl973a%l*vE#CcAC_IyBpBu0gQe_%wWtn^G`$5WNTLK8CO)@{wVQoe{c%y?f~Y4j6S3C0WI99gN8O{+9z`2MuA>}O`u~0 z@HSK9$GAmA@$ig5lOW|J%|S+iZ;$K@KMKgT?%%jrx<431I~7Qh!M-ZcZx0dDmTX>nbvK!| z{Zv>p;%yoUzMLnrwTU*jO}Jjej+zW+1`WS{oZ0*AzI6K{9O1T6+eZ&sEK_K3>&YLE z?d0s$0&W&ReA{#z$LQ&-b{9KxkifEJaz73OQlR!Q^FjszOy~yi0pBwfhn_{P3~5{KKHm6-<8h$a zaA5~9Jl#{5adRk#-VlFP2kK;iQ>^y{Q9ylzIb)VOM1uS%T-{M|6Tz0S;zXL43PiPddbD;|S)gJ>U23YcSEv~D4i;X&lMjR35TQ*~^*y`0A~GmY zHr?lyrU#c*m)GL#+I`??-dyOq;W~32&-y-8yqi4GwjsrKrMsIQu>n_LNrt^zA4lTvISnV z`G4rHk}tius|t(dOI*g~Kk(aVkN219iyB9xHuvr|DVTMk zBOu}&vVEg3W0{)9;41RJnBg$Hc})BAlDI84057+6BPI1f5l1Od5q35Kle*Tps6H-O za`Wq=mYRug`_5E6Kb}H0p;*5eWwAE0SaT4)Z&p@dVGbL<1)a*H>C0gn501^oj&a(P z=HFroLhC%h*WDFimrWjc&U$F^IWn)~nzQQ_My{4wHurFxkQ{gIt1sOS=Bqb-QIaaj zur;j@8;~qXdrTfK)QDYLpOm~FD8&{1~{x<5zTI~AoZVq|yP{AP&1v+Dy zWHZIa0|XwtjiyJZ?J5X0BfO>E6xsi8CTX%Z0nnpBnd{HN=!^^Yz8(aMnF;_G$`a z?rV&AwNdcNXenJ>E&#y_L*o!(xV0MvR+;p(>5HxNA*V zoaWNx^Vc|e(SeY@UO4ASanq-Oo=#^j%>5;Eyask)z7q!0aF9Mn>*f?UH)f`NB)}VrQ`Taia*<)spVbd#By;7iBtbEf;u{jZle43n18g+2|`IT2!n_xRqhW1r$3Vt&+ z`EeOYjiKxqZ$Z|0kYPjilMifnn$I=;K@W-LKR<`DGM~nZGdP_(=EHuxc2B)G#fT2$ z_s4e3+^0dgVu$~cSkw;JIV=;1Rm7G-io!xNAxI+i8h!uO?2qr?cSx$&=8Cbdtm~)a z&u}zYWdbj3J4IeMjbi!Om~c$u*j007%(E_u1jnc26)m;v6{{0cj>AUMm#IaW_Qssv z>@1JA-y3}d0>w$4V`*`R!GcEEja%)UduAf!y0=avaqJKzDdrHO=TYA9b==WccW;qV zY;}k$tiEE$nl$K&lI@z;K*Ob8Gg=Uh*UpR0M|c~}d?c2MNC#niQof9=!|Jo^(U$D5 z%b&@!ha=KrmcIjWNgO){tV@W|X4GcAsOHWoo7J${I!g!{w0a!H@yel?^Z&-D*tY+R zj$i?Cn&gU$3Bw|RQ3Eg(z!rMkY4%U7Un`!Vn^@4D_}npLASWjTyRj@b^Vw_xU#~^a z%U17XI%Bd4z%n>#bE*UJu44c^dORskZ7wMYV>Mr&-PNwV?TJB$Psa}j{QvcU5Qj@= z8k-Vds)auQf`U?BgGkJ_j&x(Q1OsG)dO9%FMdyT>Z!X=~Te9A`fTI>(Jf6GZ$A*VJ zf;f&wWWeCi248|R%5*3D)}OO*YttO!x#{H{OXMdR!_eSbGkVL^>tEgLdGpY*L4Ac7Qk?A+dz z9`A*rGbR*FWue1nhVwxO_2yz#r#uK^9>8)=S;qMF&J18T{s5$es`f@JjDskEEEi56 zLs|WJQFrG721yak5;7_kEN+d3(X~oJ`FOAFPX|dMAzYqLlDlkh5nCE$@E& zK6ATUJH!MeV!U?mhgsZ7w5sivnH&tN%^arV0VZKRT_$2MB$SdRpUZ8#nnvnpB<1l4 zR;C1x*BXkRf9JIBIr-V*tNhDpaY)%ln;u=ru|1kta@`vBtwFd4w; z&0Vezf5wv|F54lFJt3Sj(yfXo>${&ybp~#noK#X(x_Nn{K=qcNe?f|~F?ld|&|;D% zJGd@LOaR0fQO+7(AEmNJDOI-n>;C+#H%qg#2OOz=orRI6YUl1|+XkL$GLQ-w{lk-t zHsWVuVlj9BK|wq)r`U4AdW}0xF`DsTsUZUh$Gv~FNV=z$&Zp+qe^*(z_y?H`rQhZ* zJ=wvL0nkW18Q#3;5uTirxkK&?gfLkF@jg2NnKlP@tM*+vc%Ap|&=qSe@j4j3kJ+ii zud;K)mh6&Fe=cku=Eg4u)xng^O_!>X24PF5v%arBd5ItLzHyu0<{G0X0N9?v#sTa9qJzAxaLkglO=Q57ED`3m&KS zLsq%;_^;<+m?KsbeXZ)qL6Erc8*sU!b-=~201y0MdrzL4&u>$HRrT?o^oA{pFjn zi{rW4JHy}HcGd?aTz6M)=$1S3y&$I*GJFy!w(%V{Rxn6~vg;e`y9xqQa`HUKxApn^ znqI3-PCy-qFE7&*o!j+$=Y3Sq?RMGsCU}Ac)f?|zMN66~0zl-%c@3nv@Ps8NVEDYF z?E?r!f7P65g|X(<1y>pFS2+es?9<~Q4g#@#A&qyB`H=2!PnI^@JM|eYG;MH-GsFjA z=`dL?!{)^6ymNmvnWt3-V?*v6m)xKF`z>$dW`%58%xjtJpR6UsnkcJnpPo3Mtl^YI z+XkfCymQ|)4O?V#5g@2>TNmRb!PZOKE)G>y27i^N<1@{@KfUNNz0_oelY3#jjsiDq z=PNPOm8DB&`%Ts7Hf|WH3`vpDh}_A)zK$rAh~F=|W;CF%ZMe4VY9!6&40e5n0;ynY zycyoQ;hP(HY&&KaV5o^ z21e4W4-fV0cQq%MuB;b-qbJ@ARO_I&g5$6s^beWPjS)V2e%ONriKP4>#XCj{+745VxYJJXv}8xwv;)p50AULmABd5XM}A54&e7u zNr~88-iNWsX%)Z^xEZZ+DfK$9PEby3qp`A;rvQ&N=Ku%~4z9b{1azgz2`HoUVh45O zD-O4{nt;*&{sUg*7Xao0^sy%)o7*GE?x8NrPmcH2E0dU!S8=`m+T6LuKjZIJa|_N5 z1BHZ)7f~?igiC!cwvO6VQ_f&_Yi6p>PKak^$2+cTv7q2y3*47tzE@3Y<{7MCH7fiz zzBj_VCt-{O7Qsu9%^Y-Ivhgp`(|;8xLByCaLVK z{CSaQX$7kxye$xz{p|U3a$xp9;c=E&F$>kPzjbbxyNO}AQZ8(>(SQk<*jgo*gU`-8 z2@6;9J|C@iN$iQd(Zq9OKX!$|*J)DkwQsh=j^8;N9JW$DpZcYAy=Br(qEVvDX{0hk5c8>~IfE4#8EUw!y?ylRQtLvYuNnzxqD&TIM`9|%+o^6v~# z>EwOLwaVup{Y*oH3fCEk$GAhl<{h=+C3Ovr`mf_o_s#&L$0-S-l_mg9H0f~@Jp_$q zU+raH3hcV*y}xLK?|p&{%I15e842A4>dRdC`mkJU5A#~a^4mM_V}#Jkz4I`w-wy3> zfJ_;5jljmc(c*@D2?062*LXus1`qW3(i!Q@%WsHbmQy5s*#1KOO_1P6I6QqYD9B5} z5;OL_TL^LsIk>EWL#bD5p8j2lmX{d}kV)sg*qV6EV)+f2@9u1QGZ`j8&UAs{@C%m0 zhm!;n|E3-T;@+-{RY#8egz%`6nHu2e*I8+F4!%=>A`L9v!u7{H^20Nn{0vTCC}Wpt z1G{3N#k;syUpx$TyaO@{$VS<&VE7PWA$i;Ub8lq{9%;v=n zOLC5Zx9_~R`P?}RJZI}LJ{vF3;IJ;Rw+MFBroWC~&ikx!=NfL9^K`DWdaA0?g7q5b zYH4u&{u16=B$skZ?iR;!<>Iq29qMC$(SV#*UKnvYUiMYnj5( zl1XQt9{1O{a%b539xa4`PF*bqnDO&*n5Je)0{QjFS27!wWka~Y_%9rU#ksDBfOIcV(a$qA!uWFd&KcQ_mp^r+~2U^ z0Qi07(by*vq?WBrgIiM@$ovNZtz>?e7i zvg3Jn5A4+1PDis`=~mYBn7{*lxJ18tCtHO!k-mx@0^~{GTonE)ujAe>B@cG}ct@H? z)M=-)2gk86UmOz!*NEsw|gf7!4ZY?XHXZwjtP85p%J@d-)#eSVG9eW z!_BB+pJpiqqi=Ik$L=6&LGz9bgP?KdN(uJ8ukZJJ1dyd0h=+p|yxgr<@0aHC7QdrR zYY*1xz!7L5He?%FZM#G&MGM=fMxm{?*})))5N!QaRqai(ahEUi!+Y(##i9LN15Fm4 zRYte~$BN#5>w)dWpmHDplc+|!)JUsV*J1eCU^G2rolO6r5y?BRc1&$VtI#U|?;_yB zregSPL#e^Z60gC+MB@<2e47rH!i{Vkg!oDyq#??ZZVq7QpF?M>fL`LTRsk0>tXY69 zy})fAQ8wbWVsGB!ByhB1I+|nb^ckoP=>aY|1;bCp1x@Q7H^GJwF6tRM zAnk3jq;qSzX?x@%FRQfh+M5Cef>nlUi;pjTXoGcz9!6<#gs7yiE^|wU~b*+&uy@ zE`TU-j$Av(Vn2q;rOlVhW3@VO<;OeXTZB#%C&@6(Upv17_O$~nd_a)?YKBy=U z@gjFwJ1m(A(!7C#L){BOSP45(!vhdp)yO!7+>|+o2rCUT%R}}GSl4Xw;v$`zfdZ95 z_=p1T@iGjg%FM*cEgABW>uip{D(DR`3g z9h?>t!ooWji~uSI1IW_fmbKLA;f<#MLZp0ErgJB>xWLBuaxgu>OzY5?;XE0K^&Vb$ zb2n#P3{Hi+lR(e?CE5Vfx_kS!ZiPNK5WHPw$rKSxjh3%SbEc{dz; zBg#Se&_F-2a|z7u$&p=|yN;8Iu7KrhKHMgL-}r89^X48c_bDz*uXM4W2&u4%#~%Vn zA1%z|%{lEv!f-JzpKa+82*Q@nljhAzLiC%)jZwo4O^ZTQC1rmncyRnmpZS!N1KHP=ck&;54}v!7B~=OSuDf+;Tnb z^u;|VFX3mHuS82bV>TI21@Jxm>5-?!t_?>A7y#e?SElff=1cS3ejEDk3gGz9zo`nr zhlCm#$FBulX~*}JF+cz1V4R21@0=$#5I>wH@L)3>lVvOuo--2o$qp-Yw)w4aj8W4L zSmA~AOi)m$X~V{oZ@tRn1vnzc!~`7B)7?GVjRugPQG-oxJOGj2GPh-mrSCPG&SePE zQRu+eD>7IQJDA(w*lX0owF6)vg%ifqZp^D`=l9$e9v8`oOh~v^bF}1<2SPJE9sS^_ z!E`Emk}SF8 z!p#~stepj5Uy45s!f_5$x@@@=y4e>r4Hy zIe7p}B_lc7h3{D->$A&kv4H~M$- zDmgt*1mye)-kyM7>GUIm=4F7#k2%kkm2DmcY#@we3h-Tkt#mfinmy|__s#gI!(U>& zHXX-uu=$Me2bOpudfT%t`p~)((^KiZ{rN2B3nPf_p4D(oZSojDRFkQ7D-x zJ>e<^08ptI8r=>em}xJ#B69=SE@{@o2loIucw6+HcQ} zeDu|N4Gv9nns4;CXIQl$5Xt11R^cjEo(KdxGxLR9KnS?mf;g%nVsdF>1>=1TKJ)a#(u?F;}5zf&CaHpw6Kv`7=NED&(e|=_*eU06)fWVzH zM)HDHP?o|G6m^*9bs_>`PU^V97BuQ=#7VBvX&d(RCj!hy`W85u9)0)?@>S%k12?;# z{73M~&rFg6g6}Mn=luj%L!Ueqy3=kfZhnmiQ=>>`6fFja*ptnVP~X7!1Cy|}NmA4wH7 zdbJ$)xea1ztG;=bX;nAS)8=Dl4^HNu8d`{)+&rulM(X{wj)b|fhrgj$9mb5lzH$Yi zn(FKCmTi)S!vueQnu{!$kqmjXAQwjq1f8>XD|Q?=JqHN6dgzx*1ahTtU2apkd`id7F0D1LyS4KvPfl2PD8#22Wsa4YaiUG zO%6F;3b}$(j$W-I&uj4q%%srB$$Wm?1oEc#a0^;yq;(Ms82+7rwddcTD>T~lfOupw z)&z){^S>D^t5fgfaTJ)+wKSbwQ-rvYGAN(&#tNhkD4kBw;;YjL$4~%^AW9BH}q zXfTuN??;~3_#KS)NkiUxW@GdYwC5G?<>v)DL;YmLfKVMT)uqG_8DIrJfmImDa%f5&bziu1C&gk|<^$Ayr2pJu#{32CV`RSe@dZ)UZTEajZ4dQ=iTI=Szwu2wA*>`@R6tu}4`s(AGOaB$Rlb2{H zCNu%v9;yHJ(Y@Ei>hQv-00gV9F3q9W?tKENc0eJ#bPB$*q5lIgN>zAwSxPRf&!rSB zrQI+APfg*u47bsvZPSsNfOesI?(-YqS_PE7`#`eUBU?h!w&G0fTBlyso#utkD^6gK z7IpWtT#V;8>*f8CIi9|PwO#ej7XrI$f4t>3$U;lGfQ7eAW$jtvP>TIquy=G4y>~J# zX2Mm&U|zZY@(hG(7d`P}natnRUON;kw1CFM%ZhJ?BPD6cl^7Jk4K}SHB#qgi#CEUJ z+F`8m=y8Sf>G&-LA5t1MMsoBPFxs{9k9utsV+Qt|PKW2ge0VMXL{Qf`F%)RB@{X|p z4l~*vC!1fZF1qWP)K+{H+~e=>g=8^xu_OS8HQTb5hyFHL?Z&c=Zi$ImwH=HXn2R%# zkBfHz*JROS+3@pixW(jzM$Jo8ZBHjB<+9h-$xBi``(XK^1eAKWi|2s!gj}!GVudXJ z^p(K(KoRv?AtGQaX|)1eE<4#T#wZnx&WOeDu1BPS*98iQ)fHQCRq*n-r1`SC{wPC@ zt*Mwto%#L|Y4s<$qtYe@;7+#tjyf!)7)O`#57w?jwsir*0#2_o#08m6U15L55GH)P z=Zlv+Y!OOEHGfob+_$h?n{roZ4SbY{<^T?p%@V1=Epd{Q#!*=zQRCaTr}rngx#&_p z5;NqhH3x1tN&CGBM}~O~O`OA?B?mU8M5XGeNHHdkjC@5x7}yZrm7YgZZ<`{x^ts>j zu&Z%qf-9OWW-MVdEQu5LKx$X>ZiP4AdaK4EuF0wYB=yrkw7_o5k~#Z!2zmEn86h|> zWZ}=MTw^q%9)4*lpykHMW1Gt3zREw|jg<`KX*Z?^0S9Bh@%rtw!8eTcU+HT-{T>iR zD~Ks&^{Ze`Oj-bzRMyxCG2e$&%XKa#t0_(X6e+gyyH$Q+d+C(CyMOyUKpcPERGN+` zzojXm`d#1P>EfjX!L5Ant?1crzKe5*XCP?;?fBW=YwXJCdr6;aekW6Xp>wKFIcAG) zlbN`48JuA(Vx>Ktu|~V@T71BKF!g`gUY?fg$)=`itA*J5xNrlUUSti5>JL*O<@xB1 zO}v2em8vp&qb4NA2dt9{uw)nOueA^RtA6-PQWKl`-MT=;?dR;rs&YCHx1L*4oXmT> z?%?vT8>V#UHuaBQ`k4=2*P4)Iaosvqd&p}HW?HuIF z*YAUyLG~07N~nv<{3sjQ%dVq+d-6$h6>6_AG?KK_xMz}$oJCw8T!g-8lUjB%4Bs(+ ze9J>^ILs~LhSGD--=C7Kt%D0K5Oi19uY%(qHy$%v4;SW5&sLx->{Ks!+N7)mc26EY zLtqBUyC-|8z;gc~-m|06t`z%5Ki$)N_^IcP>0S5bc=A*EahhS{G~c1oZEEl<1GaAV zIn%SiOB~wW@(MSxcWI+GYDANnpYSm|?u`*cQ(i7oO1-%^wyRD{5XCwS{m(a)qupwM z$bd_KxAVzu5zbbCvttj}P+mY+TYj|&_;Dpo#_9L<_s_N1qVj7l zo5J^Vk=1kHwr$v7VnYzoWQc^#Mw^18L$e?nDIs)y1Nr7H5adu~2{1DRvR0Y)L|jm7 zy9pJKm>V^2Bm~W7hNdpaBZ_2UudH^JmpA{AQ8CVacLn^ufz^6eXc5uY@Rv(0K|Hbu zrvPBEDKoLGUW&I1?qBAj(8SusY>>$opdpWg@Kq-tXHdY~S8 zMOP(|)!q~sR0M(}6S%^b#z!+4)@#=W`?F4Gyh-&2U;VG&mOvKw@*=|m62AfCKC8#H8`W^26^no<%r4W}+m?Wsc@Z$rmn`v$b zEKp0G6r-D}Qe9)lY4{_#RAk^|X1Nce0fbOWk|eX9A8V?tWcwV@Hn+HLfmMgmzZaAg$#*eadnNfL1B8 zKtsQpmfBbvNt?}j$ie+Xdh!andTuXFXRYt=sPoW}+!lG>edc-j`jbaJCB5!#E%I}j zPRg0_jNA+4P+_iZorTz}ThZkV-yyc3La&$*J!II@_0SDkWU6K|{M#s@h!@x3-$oH+ z&L>x;?zjyuo{W-_x08n|FzfCw%)CGH)uKn{^MND>kuR_aKQHFdwn~CHA1`uL%kkxW9e(7K$YGh{uJ|Mn(ydrmb@7?7Sdd4dxdXG<3 tP?+o9J<)sj{zDM}gZjTUu(B~WH+A`cH`pF8%K!}^q^vR`=b^!W{~yEv=0E@d diff --git a/packages/bootstrap-4/src/RangeWidget/RangeWidget.tsx b/packages/bootstrap-4/src/RangeWidget/RangeWidget.tsx deleted file mode 100644 index 6b46a44e47..0000000000 --- a/packages/bootstrap-4/src/RangeWidget/RangeWidget.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { FormContextType, getTemplate, labelValue, RJSFSchema, StrictRJSFSchema, WidgetProps } from '@rjsf/utils'; - -export default function RangeWidget( - props: WidgetProps -) { - const { value, label, hideLabel, options, registry } = props; - const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options); - return ( - - {value} - - ); -} diff --git a/packages/docs/docs/usage/themes.md b/packages/docs/docs/usage/themes.md index a80a79cf7d..3971e324a7 100644 --- a/packages/docs/docs/usage/themes.md +++ b/packages/docs/docs/usage/themes.md @@ -5,17 +5,17 @@ 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` | +| react-bootstrap | Published | `@rjsf/react-bootstrap` | +| 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` | ## Using themes diff --git a/packages/playground/package.json b/packages/playground/package.json index aaf3f98c3f..dc08f05ce9 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -41,13 +41,13 @@ "@material-ui/core": "^4.12.4", "@mui/material": "^5.14.8", "@rjsf/antd": "^5.15.0", - "@rjsf/bootstrap-4": "^5.15.0", "@rjsf/chakra-ui": "^5.15.0", "@rjsf/core": "^5.15.0", "@rjsf/fluent-ui": "^5.15.0", "@rjsf/fluentui-rc": "^5.15.0", "@rjsf/material-ui": "^5.15.0", "@rjsf/mui": "^5.15.0", + "@rjsf/react-bootstrap": "file:../react-bootstrap", "@rjsf/semantic-ui": "^5.15.0", "@rjsf/utils": "^5.15.0", "@rjsf/validator-ajv6": "^5.15.0", diff --git a/packages/playground/src/app.tsx b/packages/playground/src/app.tsx index ba979b91cf..478bf655a8 100644 --- a/packages/playground/src/app.tsx +++ b/packages/playground/src/app.tsx @@ -4,7 +4,7 @@ import { Theme as FluentUITheme } from '@rjsf/fluent-ui'; import { Theme as FluentUIRCTheme } from '@rjsf/fluentui-rc'; import { Theme as SuiTheme } from '@rjsf/semantic-ui'; import { Theme as AntdTheme } from '@rjsf/antd'; -import { Theme as Bootstrap4Theme } from '@rjsf/bootstrap-4'; +import { Theme as BootstrapTheme } from '@rjsf/react-bootstrap'; import { Theme as ChakraUITheme } from '@rjsf/chakra-ui'; import v8Validator, { customizeValidator } from '@rjsf/validator-ajv8'; import v6Validator from '@rjsf/validator-ajv6'; @@ -93,10 +93,6 @@ const themes: PlaygroundProps['themes'] = { stylesheet: '//cdnjs.cloudflare.com/ajax/libs/antd/4.1.4/antd.min.css', theme: AntdTheme, }, - 'bootstrap-4': { - stylesheet: 'https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css', - theme: Bootstrap4Theme, - }, 'chakra-ui': { stylesheet: '', theme: ChakraUITheme, @@ -117,6 +113,10 @@ const themes: PlaygroundProps['themes'] = { stylesheet: '', theme: MuiV5Theme, }, + 'react-bootstrap': { + stylesheet: '//cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css', + theme: BootstrapTheme, + }, 'semantic-ui': { stylesheet: '//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css', theme: SuiTheme, diff --git a/packages/playground/tsconfig.json b/packages/playground/tsconfig.json index 1b8e30ff70..61d8ac350a 100644 --- a/packages/playground/tsconfig.json +++ b/packages/playground/tsconfig.json @@ -23,13 +23,13 @@ "include": ["src"], "references": [ { "path": "../antd" }, - { "path": "../bootstrap-4" }, { "path": "../chakra-ui" }, { "path": "../core" }, { "path": "../fluent-ui" }, { "path": "../fluentui-rc" }, { "path": "../material-ui" }, { "path": "../mui" }, + { "path": "../react-bootstrap"}, { "path": "../semantic-ui" }, { "path": "../utils" }, { "path": "../validator-ajv6" }, diff --git a/packages/playground/vite.config.ts b/packages/playground/vite.config.ts index cd3e413c15..065ddabfd2 100644 --- a/packages/playground/vite.config.ts +++ b/packages/playground/vite.config.ts @@ -16,13 +16,13 @@ export default defineConfig({ alias: { // mapping packages in monorepo to make vite use sources directly avoiding build step '@rjsf/antd': path.resolve(__dirname, '../antd/src'), - '@rjsf/bootstrap-4': path.resolve(__dirname, '../bootstrap-4/src'), '@rjsf/chakra-ui': path.resolve(__dirname, '../chakra-ui/src'), '@rjsf/core': path.resolve(__dirname, '../core/src'), '@rjsf/fluent-ui': path.resolve(__dirname, '../fluent-ui/src'), '@rjsf/fluentui-rc': path.resolve(__dirname, '../fluentui-rc/src'), '@rjsf/material-ui': path.resolve(__dirname, '../material-ui/src'), '@rjsf/mui': path.resolve(__dirname, '../mui/src'), + '@rjsf/react-bootstrap': path.resolve(__dirname, '../react-bootstrap/src'), '@rjsf/semantic-ui': path.resolve(__dirname, '../semantic-ui/src'), '@rjsf/utils': path.resolve(__dirname, '../utils/src'), '@rjsf/validator-ajv8': path.resolve(__dirname, '../validator-ajv8/src'), diff --git a/packages/bootstrap-4/.eslintrc b/packages/react-bootstrap/.eslintrc similarity index 100% rename from packages/bootstrap-4/.eslintrc rename to packages/react-bootstrap/.eslintrc diff --git a/packages/bootstrap-4/.gitignore b/packages/react-bootstrap/.gitignore similarity index 100% rename from packages/bootstrap-4/.gitignore rename to packages/react-bootstrap/.gitignore diff --git a/packages/bootstrap-4/README.md b/packages/react-bootstrap/README.md similarity index 76% rename from packages/bootstrap-4/README.md rename to packages/react-bootstrap/README.md index d1f0a51441..22db0bbb8e 100644 --- a/packages/bootstrap-4/README.md +++ b/packages/react-bootstrap/README.md @@ -2,13 +2,13 @@

- Logo + Logo -

@rjsf/bootstrap-4

+

@rjsf/react-bootstrap

- Bootstrap-4 theme, fields and widgets for react-jsonschema-form. + Bootstrap 5 theme, fields and widgets for react-jsonschema-form.
Explore the docs ยป
@@ -39,12 +39,12 @@ ## About The Project -Exports `bootstrap-4` theme, fields and widgets for `react-jsonschema-form`. +Exports `react-bootstrap` theme, fields and widgets for `react-jsonschema-form`. ### Built With - [react-jsonschema-form](https://github.com/mozilla-services/react-jsonschema-form/) -- [Bootstrap-4](https://getbootstrap.com/docs/4.0/) +- [Bootstrap-5](https://getbootstrap.com/docs/4.0/) - [Typescript](https://www.typescriptlang.org/) @@ -63,20 +63,20 @@ yarn add react-bootstrap @rjsf/core ### Installation ```bash -yarn add @rjsf/bootstrap-4 +yarn add @rjsf/react-bootstrap ``` ## Usage ```js -import Form from '@rjsf/bootstrap-4'; +import Form from 'packages/react-bootstrap'; ``` or ```js import { withTheme } from '@rjsf/core'; -import { Theme as Bootstrap4Theme } from '@rjsf/bootstrap-4'; +import { Theme as Bootstrap4Theme } from 'packages/react-bootstrap'; const Form = withTheme(Bootstrap4Theme); ``` @@ -104,8 +104,8 @@ GitHub repository: [https://github.com/rjsf-team/react-jsonschema-form](https:// [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/bootstrap-4/latest.svg?style=flat-square -[npm-url]: https://www.npmjs.com/package/@rjsf/bootstrap-4 -[npm-dl-shield]: https://img.shields.io/npm/dm/@rjsf/bootstrap-4.svg?style=flat-square -[npm-dl-url]: https://www.npmjs.com/package/@rjsf/bootstrap-4 -[product-screenshot]: https://raw.githubusercontent.com/rjsf-team/react-jsonschema-form/59a8206e148474bea854bbb004f624143fbcbac8/packages/bootstrap-4/screenshot.png +[npm-shield]: https://img.shields.io/npm/v/@rjsf/react-bootstrap/latest.svg?style=flat-square +[npm-url]: https://www.npmjs.com/package/@rjsf/react-bootstrap +[npm-dl-shield]: https://img.shields.io/npm/dm/@rjsf/react-bootstrap.svg?style=flat-square +[npm-dl-url]: https://www.npmjs.com/package/@rjsf/react-bootstrap +[product-screenshot]: https://raw.githubusercontent.com/rjsf-team/react-jsonschema-form/59a8206e148474bea854bbb004f624143fbcbac8/packages/react-bootstrap/screenshot.png diff --git a/packages/bootstrap-4/babel.config.js b/packages/react-bootstrap/babel.config.js similarity index 100% rename from packages/bootstrap-4/babel.config.js rename to packages/react-bootstrap/babel.config.js diff --git a/packages/react-bootstrap/bootstrap-logo.png b/packages/react-bootstrap/bootstrap-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..3643b912e9115b983a63576230ebf48f1b603de9 GIT binary patch literal 48625 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 i+5pb`^q>8wgMR^o#0yehJx=QY0000R literal 0 HcmV?d00001 diff --git a/packages/bootstrap-4/jest.config.js b/packages/react-bootstrap/jest.config.js similarity index 100% rename from packages/bootstrap-4/jest.config.js rename to packages/react-bootstrap/jest.config.js diff --git a/packages/bootstrap-4/package.json b/packages/react-bootstrap/package.json similarity index 83% rename from packages/bootstrap-4/package.json rename to packages/react-bootstrap/package.json index 2f73c6b36a..60cdc38749 100644 --- a/packages/bootstrap-4/package.json +++ b/packages/react-bootstrap/package.json @@ -1,10 +1,10 @@ { - "name": "@rjsf/bootstrap-4", + "name": "@rjsf/react-bootstrap", "version": "5.15.0", "main": "dist/index.js", "module": "lib/index.js", "typings": "lib/index.d.ts", - "description": "Bootstrap 4 theme, fields and widgets for react-jsonschema-form", + "description": "Bootstrap 5 theme, fields and widgets for react-jsonschema-form, powered by react-bootstrap", "files": [ "dist", "lib", @@ -17,8 +17,8 @@ "scripts": { "build:ts": "tsc -b", "build:cjs": "esbuild ./src/index.ts --bundle --outfile=dist/index.js --sourcemap --packages=external --format=cjs", - "build:esm": "esbuild ./src/index.ts --bundle --outfile=dist/bootstrap-4.esm.js --sourcemap --packages=external --format=esm", - "build:umd": "rollup dist/bootstrap-4.esm.js --format=umd --file=dist/bootstrap-4.umd.js --name=@rjsf/bootstrap-4", + "build:esm": "esbuild ./src/index.ts --bundle --outfile=dist/react-bootstrap.esm.js --sourcemap --packages=external --format=esm", + "build:umd": "rollup dist/react-bootstrap.esm.js --format=umd --file=dist/react-bootstrap.umd.js --name=@rjsf/react-bootstrap", "build": "npm run build:ts && npm run build:cjs && npm run build:esm && npm run build:umd", "cs-check": "prettier -l \"{src,test}/**/*.ts?(x)\"", "cs-format": "prettier \"{src,test}/**/*.ts?(x)\" --write", @@ -36,7 +36,7 @@ "@rjsf/core": "^5.12.x", "@rjsf/utils": "^5.12.x", "react": "^16.14.0 || >=17", - "react-bootstrap": "^1.6.5" + "react-bootstrap": "^2.0.0" }, "engineStrict": false, "engines": { @@ -63,7 +63,7 @@ "jest": "^29.6.4", "jest-environment-jsdom": "^29.6.4", "react": "^17.0.2", - "react-bootstrap": "^1.6.7", + "react-bootstrap": "^2.9.1", "react-dom": "^17.0.2", "react-test-renderer": "^17.0.2", "rimraf": "^5.0.1", @@ -74,7 +74,7 @@ "access": "public" }, "keywords": [ - "Bootstrap 4", + "Bootstrap 5", "react-jsonschema-form", "jsonschema", "json-schema", @@ -82,8 +82,8 @@ "schema", "form", "react", - "bootstrap-4", - "rjsf-bootstrap-4" + "bootstrap-5", + "rjsf-bootstrap-5" ], "contributors": [ "Heath Chiavettone + ); diff --git a/packages/bootstrap-4/src/IconButton/index.ts b/packages/react-bootstrap/src/IconButton/index.ts similarity index 100% rename from packages/bootstrap-4/src/IconButton/index.ts rename to packages/react-bootstrap/src/IconButton/index.ts diff --git a/packages/bootstrap-4/src/ObjectFieldTemplate/ObjectFieldTemplate.tsx b/packages/react-bootstrap/src/ObjectFieldTemplate/ObjectFieldTemplate.tsx similarity index 100% rename from packages/bootstrap-4/src/ObjectFieldTemplate/ObjectFieldTemplate.tsx rename to packages/react-bootstrap/src/ObjectFieldTemplate/ObjectFieldTemplate.tsx diff --git a/packages/bootstrap-4/src/ObjectFieldTemplate/index.ts b/packages/react-bootstrap/src/ObjectFieldTemplate/index.ts similarity index 100% rename from packages/bootstrap-4/src/ObjectFieldTemplate/index.ts rename to packages/react-bootstrap/src/ObjectFieldTemplate/index.ts diff --git a/packages/bootstrap-4/src/RadioWidget/RadioWidget.tsx b/packages/react-bootstrap/src/RadioWidget/RadioWidget.tsx similarity index 100% rename from packages/bootstrap-4/src/RadioWidget/RadioWidget.tsx rename to packages/react-bootstrap/src/RadioWidget/RadioWidget.tsx diff --git a/packages/bootstrap-4/src/RadioWidget/index.ts b/packages/react-bootstrap/src/RadioWidget/index.ts similarity index 100% rename from packages/bootstrap-4/src/RadioWidget/index.ts rename to packages/react-bootstrap/src/RadioWidget/index.ts diff --git a/packages/react-bootstrap/src/RangeWidget/RangeWidget.tsx b/packages/react-bootstrap/src/RangeWidget/RangeWidget.tsx new file mode 100644 index 0000000000..98f2461f75 --- /dev/null +++ b/packages/react-bootstrap/src/RangeWidget/RangeWidget.tsx @@ -0,0 +1,31 @@ +import { FormContextType, rangeSpec, RJSFSchema, StrictRJSFSchema, WidgetProps } from '@rjsf/utils'; +import { ChangeEvent, FocusEvent } from 'react'; +import FormRange from 'react-bootstrap/FormRange'; + +export default function RangeWidget( + props: WidgetProps +) { + const { id, value, disabled, onChange, onBlur, onFocus, schema } = props; + + const _onChange = ({ target: { value } }: ChangeEvent) => onChange(value); + const _onBlur = ({ target: { value } }: FocusEvent) => onBlur(id, value); + const _onFocus = ({ target: { value } }: FocusEvent) => onFocus(id, value); + + const rangeProps = { + value, + id, + name: id, + disabled, + onChange: _onChange, + onBlur: _onBlur, + onFocus: _onFocus, + ...rangeSpec(schema), + }; + + return ( + <> + + {value} + + ); +} diff --git a/packages/bootstrap-4/src/RangeWidget/index.ts b/packages/react-bootstrap/src/RangeWidget/index.ts similarity index 100% rename from packages/bootstrap-4/src/RangeWidget/index.ts rename to packages/react-bootstrap/src/RangeWidget/index.ts diff --git a/packages/bootstrap-4/src/SelectWidget/SelectWidget.tsx b/packages/react-bootstrap/src/SelectWidget/SelectWidget.tsx similarity index 95% rename from packages/bootstrap-4/src/SelectWidget/SelectWidget.tsx rename to packages/react-bootstrap/src/SelectWidget/SelectWidget.tsx index 8a92cee3f5..ef49be384d 100644 --- a/packages/bootstrap-4/src/SelectWidget/SelectWidget.tsx +++ b/packages/react-bootstrap/src/SelectWidget/SelectWidget.tsx @@ -1,5 +1,5 @@ import { ChangeEvent, FocusEvent } from 'react'; -import Form from 'react-bootstrap/Form'; +import FormSelect from 'react-bootstrap/FormSelect'; import { ariaDescribedByIds, FormContextType, @@ -47,9 +47,7 @@ export default function SelectWidget< const selectedIndexes = enumOptionsIndexForValue(value, enumOptions, multiple); return ( - ); })} - + ); } diff --git a/packages/bootstrap-4/src/SelectWidget/index.ts b/packages/react-bootstrap/src/SelectWidget/index.ts similarity index 100% rename from packages/bootstrap-4/src/SelectWidget/index.ts rename to packages/react-bootstrap/src/SelectWidget/index.ts diff --git a/packages/bootstrap-4/src/SubmitButton/SubmitButton.tsx b/packages/react-bootstrap/src/SubmitButton/SubmitButton.tsx similarity index 100% rename from packages/bootstrap-4/src/SubmitButton/SubmitButton.tsx rename to packages/react-bootstrap/src/SubmitButton/SubmitButton.tsx diff --git a/packages/bootstrap-4/src/SubmitButton/index.ts b/packages/react-bootstrap/src/SubmitButton/index.ts similarity index 100% rename from packages/bootstrap-4/src/SubmitButton/index.ts rename to packages/react-bootstrap/src/SubmitButton/index.ts diff --git a/packages/bootstrap-4/src/Templates/Templates.ts b/packages/react-bootstrap/src/Templates/Templates.ts similarity index 100% rename from packages/bootstrap-4/src/Templates/Templates.ts rename to packages/react-bootstrap/src/Templates/Templates.ts diff --git a/packages/bootstrap-4/src/Templates/index.ts b/packages/react-bootstrap/src/Templates/index.ts similarity index 100% rename from packages/bootstrap-4/src/Templates/index.ts rename to packages/react-bootstrap/src/Templates/index.ts diff --git a/packages/bootstrap-4/src/TextareaWidget/TextareaWidget.tsx b/packages/react-bootstrap/src/TextareaWidget/TextareaWidget.tsx similarity index 100% rename from packages/bootstrap-4/src/TextareaWidget/TextareaWidget.tsx rename to packages/react-bootstrap/src/TextareaWidget/TextareaWidget.tsx diff --git a/packages/bootstrap-4/src/TextareaWidget/index.ts b/packages/react-bootstrap/src/TextareaWidget/index.ts similarity index 100% rename from packages/bootstrap-4/src/TextareaWidget/index.ts rename to packages/react-bootstrap/src/TextareaWidget/index.ts diff --git a/packages/bootstrap-4/src/Theme/Theme.tsx b/packages/react-bootstrap/src/Theme/Theme.tsx similarity index 100% rename from packages/bootstrap-4/src/Theme/Theme.tsx rename to packages/react-bootstrap/src/Theme/Theme.tsx diff --git a/packages/bootstrap-4/src/Theme/index.ts b/packages/react-bootstrap/src/Theme/index.ts similarity index 100% rename from packages/bootstrap-4/src/Theme/index.ts rename to packages/react-bootstrap/src/Theme/index.ts diff --git a/packages/bootstrap-4/src/TitleField/TitleField.tsx b/packages/react-bootstrap/src/TitleField/TitleField.tsx similarity index 100% rename from packages/bootstrap-4/src/TitleField/TitleField.tsx rename to packages/react-bootstrap/src/TitleField/TitleField.tsx diff --git a/packages/bootstrap-4/src/TitleField/index.ts b/packages/react-bootstrap/src/TitleField/index.ts similarity index 100% rename from packages/bootstrap-4/src/TitleField/index.ts rename to packages/react-bootstrap/src/TitleField/index.ts diff --git a/packages/bootstrap-4/src/Widgets/Widgets.ts b/packages/react-bootstrap/src/Widgets/Widgets.ts similarity index 100% rename from packages/bootstrap-4/src/Widgets/Widgets.ts rename to packages/react-bootstrap/src/Widgets/Widgets.ts diff --git a/packages/bootstrap-4/src/Widgets/index.ts b/packages/react-bootstrap/src/Widgets/index.ts similarity index 100% rename from packages/bootstrap-4/src/Widgets/index.ts rename to packages/react-bootstrap/src/Widgets/index.ts diff --git a/packages/bootstrap-4/src/WrapIfAdditionalTemplate/WrapIfAdditionalTemplate.tsx b/packages/react-bootstrap/src/WrapIfAdditionalTemplate/WrapIfAdditionalTemplate.tsx similarity index 96% rename from packages/bootstrap-4/src/WrapIfAdditionalTemplate/WrapIfAdditionalTemplate.tsx rename to packages/react-bootstrap/src/WrapIfAdditionalTemplate/WrapIfAdditionalTemplate.tsx index 7bb42415ea..2c29d41a54 100644 --- a/packages/bootstrap-4/src/WrapIfAdditionalTemplate/WrapIfAdditionalTemplate.tsx +++ b/packages/react-bootstrap/src/WrapIfAdditionalTemplate/WrapIfAdditionalTemplate.tsx @@ -65,9 +65,8 @@ export default function WrapIfAdditionalTemplate< {children} - + -

+
-
+
-
+