@rjsf/daisyui 6.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +231 -0
- package/dist/chakra-ui.esm.js +2192 -0
- package/dist/chakra-ui.esm.js.map +7 -0
- package/dist/chakra-ui.umd.js +2011 -0
- package/dist/index.js +2180 -0
- package/dist/index.js.map +7 -0
- package/lib/DaisyUIForm.d.ts +5 -0
- package/lib/DaisyUIForm.js +8 -0
- package/lib/DaisyUIForm.js.map +1 -0
- package/lib/DaisyUIFrameProvider.d.ts +35 -0
- package/lib/DaisyUIFrameProvider.js +93 -0
- package/lib/DaisyUIFrameProvider.js.map +1 -0
- package/lib/daisyForm/DaisyForm.d.ts +12 -0
- package/lib/daisyForm/DaisyForm.js +15 -0
- package/lib/daisyForm/DaisyForm.js.map +1 -0
- package/lib/daisyForm/index.d.ts +2 -0
- package/lib/daisyForm/index.js +3 -0
- package/lib/daisyForm/index.js.map +1 -0
- package/lib/index.d.ts +10 -0
- package/lib/index.js +11 -0
- package/lib/index.js.map +1 -0
- package/lib/templates/ArrayFieldDescriptionTemplate/ArrayFieldDescriptionTemplate.d.ts +7 -0
- package/lib/templates/ArrayFieldDescriptionTemplate/ArrayFieldDescriptionTemplate.js +11 -0
- package/lib/templates/ArrayFieldDescriptionTemplate/ArrayFieldDescriptionTemplate.js.map +1 -0
- package/lib/templates/ArrayFieldDescriptionTemplate/index.d.ts +2 -0
- package/lib/templates/ArrayFieldDescriptionTemplate/index.js +3 -0
- package/lib/templates/ArrayFieldDescriptionTemplate/index.js.map +1 -0
- package/lib/templates/ArrayFieldItemButtonsTemplate/ArrayFieldItemButtonsTemplate.d.ts +5 -0
- package/lib/templates/ArrayFieldItemButtonsTemplate/ArrayFieldItemButtonsTemplate.js +20 -0
- package/lib/templates/ArrayFieldItemButtonsTemplate/ArrayFieldItemButtonsTemplate.js.map +1 -0
- package/lib/templates/ArrayFieldItemButtonsTemplate/index.d.ts +2 -0
- package/lib/templates/ArrayFieldItemButtonsTemplate/index.js +3 -0
- package/lib/templates/ArrayFieldItemButtonsTemplate/index.js.map +1 -0
- package/lib/templates/ArrayFieldItemTemplate/ArrayFieldItemTemplate.d.ts +14 -0
- package/lib/templates/ArrayFieldItemTemplate/ArrayFieldItemTemplate.js +27 -0
- package/lib/templates/ArrayFieldItemTemplate/ArrayFieldItemTemplate.js.map +1 -0
- package/lib/templates/ArrayFieldItemTemplate/index.d.ts +2 -0
- package/lib/templates/ArrayFieldItemTemplate/index.js +3 -0
- package/lib/templates/ArrayFieldItemTemplate/index.js.map +1 -0
- package/lib/templates/ArrayFieldTemplate/ArrayFieldTemplate.d.ts +15 -0
- package/lib/templates/ArrayFieldTemplate/ArrayFieldTemplate.js +37 -0
- package/lib/templates/ArrayFieldTemplate/ArrayFieldTemplate.js.map +1 -0
- package/lib/templates/ArrayFieldTemplate/index.d.ts +2 -0
- package/lib/templates/ArrayFieldTemplate/index.js +3 -0
- package/lib/templates/ArrayFieldTemplate/index.js.map +1 -0
- package/lib/templates/ArrayFieldTitleTemplate/ArrayFieldTitleTemplate.d.ts +7 -0
- package/lib/templates/ArrayFieldTitleTemplate/ArrayFieldTitleTemplate.js +11 -0
- package/lib/templates/ArrayFieldTitleTemplate/ArrayFieldTitleTemplate.js.map +1 -0
- package/lib/templates/ArrayFieldTitleTemplate/index.d.ts +2 -0
- package/lib/templates/ArrayFieldTitleTemplate/index.js +3 -0
- package/lib/templates/ArrayFieldTitleTemplate/index.js.map +1 -0
- package/lib/templates/BaseInputTemplate/BaseInputTemplate.d.ts +16 -0
- package/lib/templates/BaseInputTemplate/BaseInputTemplate.js +33 -0
- package/lib/templates/BaseInputTemplate/BaseInputTemplate.js.map +1 -0
- package/lib/templates/BaseInputTemplate/index.d.ts +2 -0
- package/lib/templates/BaseInputTemplate/index.js +3 -0
- package/lib/templates/BaseInputTemplate/index.js.map +1 -0
- package/lib/templates/ButtonTemplates/AddButton.d.ts +6 -0
- package/lib/templates/ButtonTemplates/AddButton.js +15 -0
- package/lib/templates/ButtonTemplates/AddButton.js.map +1 -0
- package/lib/templates/ButtonTemplates/DaisyUIButton.d.ts +18 -0
- package/lib/templates/ButtonTemplates/DaisyUIButton.js +15 -0
- package/lib/templates/ButtonTemplates/DaisyUIButton.js.map +1 -0
- package/lib/templates/ButtonTemplates/IconButton.d.ts +5 -0
- package/lib/templates/ButtonTemplates/IconButton.js +21 -0
- package/lib/templates/ButtonTemplates/IconButton.js.map +1 -0
- package/lib/templates/ButtonTemplates/SubmitButton.d.ts +4 -0
- package/lib/templates/ButtonTemplates/SubmitButton.js +12 -0
- package/lib/templates/ButtonTemplates/SubmitButton.js.map +1 -0
- package/lib/templates/ButtonTemplates/index.d.ts +15 -0
- package/lib/templates/ButtonTemplates/index.js +17 -0
- package/lib/templates/ButtonTemplates/index.js.map +1 -0
- package/lib/templates/DescriptionField/DescriptionField.d.ts +8 -0
- package/lib/templates/DescriptionField/DescriptionField.js +16 -0
- package/lib/templates/DescriptionField/DescriptionField.js.map +1 -0
- package/lib/templates/DescriptionField/index.d.ts +2 -0
- package/lib/templates/DescriptionField/index.js +3 -0
- package/lib/templates/DescriptionField/index.js.map +1 -0
- package/lib/templates/ErrorList/ErrorList.d.ts +7 -0
- package/lib/templates/ErrorList/ErrorList.js +11 -0
- package/lib/templates/ErrorList/ErrorList.js.map +1 -0
- package/lib/templates/ErrorList/index.d.ts +2 -0
- package/lib/templates/ErrorList/index.js +3 -0
- package/lib/templates/ErrorList/index.js.map +1 -0
- package/lib/templates/FieldErrorTemplate/FieldErrorTemplate.d.ts +10 -0
- package/lib/templates/FieldErrorTemplate/FieldErrorTemplate.js +15 -0
- package/lib/templates/FieldErrorTemplate/FieldErrorTemplate.js.map +1 -0
- package/lib/templates/FieldErrorTemplate/index.d.ts +2 -0
- package/lib/templates/FieldErrorTemplate/index.js +3 -0
- package/lib/templates/FieldErrorTemplate/index.js.map +1 -0
- package/lib/templates/FieldHelpTemplate/FieldHelpTemplate.d.ts +11 -0
- package/lib/templates/FieldHelpTemplate/FieldHelpTemplate.js +15 -0
- package/lib/templates/FieldHelpTemplate/FieldHelpTemplate.js.map +1 -0
- package/lib/templates/FieldHelpTemplate/index.d.ts +2 -0
- package/lib/templates/FieldHelpTemplate/index.js +3 -0
- package/lib/templates/FieldHelpTemplate/index.js.map +1 -0
- package/lib/templates/FieldTemplate/FieldTemplate.d.ts +15 -0
- package/lib/templates/FieldTemplate/FieldTemplate.js +23 -0
- package/lib/templates/FieldTemplate/FieldTemplate.js.map +1 -0
- package/lib/templates/FieldTemplate/index.d.ts +2 -0
- package/lib/templates/FieldTemplate/index.js +3 -0
- package/lib/templates/FieldTemplate/index.js.map +1 -0
- package/lib/templates/GridTemplate/GridTemplate.d.ts +7 -0
- package/lib/templates/GridTemplate/GridTemplate.js +16 -0
- package/lib/templates/GridTemplate/GridTemplate.js.map +1 -0
- package/lib/templates/GridTemplate/index.d.ts +2 -0
- package/lib/templates/GridTemplate/index.js +3 -0
- package/lib/templates/GridTemplate/index.js.map +1 -0
- package/lib/templates/ObjectFieldTemplate/ObjectFieldTemplate.d.ts +13 -0
- package/lib/templates/ObjectFieldTemplate/ObjectFieldTemplate.js +25 -0
- package/lib/templates/ObjectFieldTemplate/ObjectFieldTemplate.js.map +1 -0
- package/lib/templates/ObjectFieldTemplate/index.d.ts +2 -0
- package/lib/templates/ObjectFieldTemplate/index.js +3 -0
- package/lib/templates/ObjectFieldTemplate/index.js.map +1 -0
- package/lib/templates/Templates.d.ts +19 -0
- package/lib/templates/Templates.js +56 -0
- package/lib/templates/Templates.js.map +1 -0
- package/lib/templates/TitleField/TitleField.d.ts +13 -0
- package/lib/templates/TitleField/TitleField.js +19 -0
- package/lib/templates/TitleField/TitleField.js.map +1 -0
- package/lib/templates/TitleField/index.d.ts +2 -0
- package/lib/templates/TitleField/index.js +3 -0
- package/lib/templates/TitleField/index.js.map +1 -0
- package/lib/templates/WrapIfAdditionalTemplate/WrapIfAdditionalTemplate.d.ts +7 -0
- package/lib/templates/WrapIfAdditionalTemplate/WrapIfAdditionalTemplate.js +20 -0
- package/lib/templates/WrapIfAdditionalTemplate/WrapIfAdditionalTemplate.js.map +1 -0
- package/lib/templates/WrapIfAdditionalTemplate/index.d.ts +2 -0
- package/lib/templates/WrapIfAdditionalTemplate/index.js +3 -0
- package/lib/templates/WrapIfAdditionalTemplate/index.js.map +1 -0
- package/lib/templates/index.d.ts +19 -0
- package/lib/templates/index.js +20 -0
- package/lib/templates/index.js.map +1 -0
- package/lib/theme/Theme.d.ts +43 -0
- package/lib/theme/Theme.js +68 -0
- package/lib/theme/Theme.js.map +1 -0
- package/lib/theme/index.d.ts +2 -0
- package/lib/theme/index.js +3 -0
- package/lib/theme/index.js.map +1 -0
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/lib/types/DaisyProps.d.ts +5 -0
- package/lib/types/DaisyProps.js +2 -0
- package/lib/types/DaisyProps.js.map +1 -0
- package/lib/utils.d.ts +13 -0
- package/lib/utils.js +5 -0
- package/lib/utils.js.map +1 -0
- package/lib/widgets/AltDateTimeWidget/AltDateTimeWidget.d.ts +6 -0
- package/lib/widgets/AltDateTimeWidget/AltDateTimeWidget.js +10 -0
- package/lib/widgets/AltDateTimeWidget/AltDateTimeWidget.js.map +1 -0
- package/lib/widgets/AltDateTimeWidget/index.d.ts +2 -0
- package/lib/widgets/AltDateTimeWidget/index.js +3 -0
- package/lib/widgets/AltDateTimeWidget/index.js.map +1 -0
- package/lib/widgets/AltDateWidget/AltDateWidget.d.ts +15 -0
- package/lib/widgets/AltDateWidget/AltDateWidget.js +138 -0
- package/lib/widgets/AltDateWidget/AltDateWidget.js.map +1 -0
- package/lib/widgets/AltDateWidget/index.d.ts +2 -0
- package/lib/widgets/AltDateWidget/index.js +3 -0
- package/lib/widgets/AltDateWidget/index.js.map +1 -0
- package/lib/widgets/CheckboxWidget/CheckboxWidget.d.ts +13 -0
- package/lib/widgets/CheckboxWidget/CheckboxWidget.js +43 -0
- package/lib/widgets/CheckboxWidget/CheckboxWidget.js.map +1 -0
- package/lib/widgets/CheckboxWidget/index.d.ts +2 -0
- package/lib/widgets/CheckboxWidget/index.js +3 -0
- package/lib/widgets/CheckboxWidget/index.js.map +1 -0
- package/lib/widgets/CheckboxesWidget/CheckboxesWidget.d.ts +16 -0
- package/lib/widgets/CheckboxesWidget/CheckboxesWidget.js +73 -0
- package/lib/widgets/CheckboxesWidget/CheckboxesWidget.js.map +1 -0
- package/lib/widgets/CheckboxesWidget/index.d.ts +2 -0
- package/lib/widgets/CheckboxesWidget/index.js +3 -0
- package/lib/widgets/CheckboxesWidget/index.js.map +1 -0
- package/lib/widgets/DateTimeWidget/DateTimeWidget.d.ts +14 -0
- package/lib/widgets/DateTimeWidget/DateTimeWidget.js +207 -0
- package/lib/widgets/DateTimeWidget/DateTimeWidget.js.map +1 -0
- package/lib/widgets/DateTimeWidget/index.d.ts +2 -0
- package/lib/widgets/DateTimeWidget/index.js +3 -0
- package/lib/widgets/DateTimeWidget/index.js.map +1 -0
- package/lib/widgets/DateWidget/DateWidget.d.ts +14 -0
- package/lib/widgets/DateWidget/DateWidget.js +274 -0
- package/lib/widgets/DateWidget/DateWidget.js.map +1 -0
- package/lib/widgets/DateWidget/index.d.ts +2 -0
- package/lib/widgets/DateWidget/index.js +3 -0
- package/lib/widgets/DateWidget/index.js.map +1 -0
- package/lib/widgets/FileWidget/FileWidget.d.ts +12 -0
- package/lib/widgets/FileWidget/FileWidget.js +57 -0
- package/lib/widgets/FileWidget/FileWidget.js.map +1 -0
- package/lib/widgets/FileWidget/index.d.ts +2 -0
- package/lib/widgets/FileWidget/index.js +3 -0
- package/lib/widgets/FileWidget/index.js.map +1 -0
- package/lib/widgets/RadioWidget/RadioWidget.d.ts +14 -0
- package/lib/widgets/RadioWidget/RadioWidget.js +67 -0
- package/lib/widgets/RadioWidget/RadioWidget.js.map +1 -0
- package/lib/widgets/RadioWidget/index.d.ts +2 -0
- package/lib/widgets/RadioWidget/index.js +3 -0
- package/lib/widgets/RadioWidget/index.js.map +1 -0
- package/lib/widgets/RangeWidget/RangeWidget.d.ts +13 -0
- package/lib/widgets/RangeWidget/RangeWidget.js +42 -0
- package/lib/widgets/RangeWidget/RangeWidget.js.map +1 -0
- package/lib/widgets/RangeWidget/index.d.ts +2 -0
- package/lib/widgets/RangeWidget/index.js +3 -0
- package/lib/widgets/RangeWidget/index.js.map +1 -0
- package/lib/widgets/RatingWidget/RatingWidget.d.ts +17 -0
- package/lib/widgets/RatingWidget/RatingWidget.js +64 -0
- package/lib/widgets/RatingWidget/RatingWidget.js.map +1 -0
- package/lib/widgets/RatingWidget/index.d.ts +2 -0
- package/lib/widgets/RatingWidget/index.js +3 -0
- package/lib/widgets/RatingWidget/index.js.map +1 -0
- package/lib/widgets/SelectWidget/SelectWidget.d.ts +14 -0
- package/lib/widgets/SelectWidget/SelectWidget.js +74 -0
- package/lib/widgets/SelectWidget/SelectWidget.js.map +1 -0
- package/lib/widgets/SelectWidget/index.d.ts +2 -0
- package/lib/widgets/SelectWidget/index.js +3 -0
- package/lib/widgets/SelectWidget/index.js.map +1 -0
- package/lib/widgets/TextareaWidget/TextareaWidget.d.ts +12 -0
- package/lib/widgets/TextareaWidget/TextareaWidget.js +44 -0
- package/lib/widgets/TextareaWidget/TextareaWidget.js.map +1 -0
- package/lib/widgets/TextareaWidget/index.d.ts +2 -0
- package/lib/widgets/TextareaWidget/index.js +3 -0
- package/lib/widgets/TextareaWidget/index.js.map +1 -0
- package/lib/widgets/TimeWidget/TimeWidget.d.ts +12 -0
- package/lib/widgets/TimeWidget/TimeWidget.js +42 -0
- package/lib/widgets/TimeWidget/TimeWidget.js.map +1 -0
- package/lib/widgets/TimeWidget/index.d.ts +2 -0
- package/lib/widgets/TimeWidget/index.js +3 -0
- package/lib/widgets/TimeWidget/index.js.map +1 -0
- package/lib/widgets/ToggleWidget/ToggleWidget.d.ts +13 -0
- package/lib/widgets/ToggleWidget/ToggleWidget.js +40 -0
- package/lib/widgets/ToggleWidget/ToggleWidget.js.map +1 -0
- package/lib/widgets/ToggleWidget/index.d.ts +2 -0
- package/lib/widgets/ToggleWidget/index.js +3 -0
- package/lib/widgets/ToggleWidget/index.js.map +1 -0
- package/lib/widgets/Widgets.d.ts +18 -0
- package/lib/widgets/Widgets.js +35 -0
- package/lib/widgets/Widgets.js.map +1 -0
- package/lib/widgets/index.d.ts +2 -0
- package/lib/widgets/index.js +3 -0
- package/lib/widgets/index.js.map +1 -0
- package/package.json +95 -0
- package/src/DaisyUIForm.tsx +9 -0
- package/src/DaisyUIFrameProvider.tsx +107 -0
- package/src/daisyForm/DaisyForm.tsx +20 -0
- package/src/daisyForm/index.ts +2 -0
- package/src/index.ts +13 -0
- package/src/styles.css +9 -0
- package/src/templates/ArrayFieldDescriptionTemplate/ArrayFieldDescriptionTemplate.tsx +19 -0
- package/src/templates/ArrayFieldDescriptionTemplate/index.ts +2 -0
- package/src/templates/ArrayFieldItemButtonsTemplate/ArrayFieldItemButtonsTemplate.tsx +89 -0
- package/src/templates/ArrayFieldItemButtonsTemplate/index.ts +2 -0
- package/src/templates/ArrayFieldItemTemplate/ArrayFieldItemTemplate.tsx +55 -0
- package/src/templates/ArrayFieldItemTemplate/index.ts +2 -0
- package/src/templates/ArrayFieldTemplate/ArrayFieldTemplate.tsx +120 -0
- package/src/templates/ArrayFieldTemplate/index.ts +2 -0
- package/src/templates/ArrayFieldTitleTemplate/ArrayFieldTitleTemplate.tsx +15 -0
- package/src/templates/ArrayFieldTitleTemplate/index.ts +2 -0
- package/src/templates/BaseInputTemplate/BaseInputTemplate.tsx +104 -0
- package/src/templates/BaseInputTemplate/index.ts +2 -0
- package/src/templates/ButtonTemplates/AddButton.tsx +38 -0
- package/src/templates/ButtonTemplates/DaisyUIButton.tsx +31 -0
- package/src/templates/ButtonTemplates/IconButton.tsx +62 -0
- package/src/templates/ButtonTemplates/SubmitButton.tsx +25 -0
- package/src/templates/ButtonTemplates/index.ts +19 -0
- package/src/templates/DescriptionField/DescriptionField.tsx +26 -0
- package/src/templates/DescriptionField/index.ts +2 -0
- package/src/templates/ErrorList/ErrorList.tsx +21 -0
- package/src/templates/ErrorList/index.ts +2 -0
- package/src/templates/FieldErrorTemplate/FieldErrorTemplate.tsx +22 -0
- package/src/templates/FieldErrorTemplate/index.ts +2 -0
- package/src/templates/FieldHelpTemplate/FieldHelpTemplate.tsx +23 -0
- package/src/templates/FieldHelpTemplate/index.ts +2 -0
- package/src/templates/FieldTemplate/FieldTemplate.tsx +66 -0
- package/src/templates/FieldTemplate/index.ts +2 -0
- package/src/templates/GridTemplate/GridTemplate.tsx +26 -0
- package/src/templates/GridTemplate/index.ts +2 -0
- package/src/templates/ObjectFieldTemplate/ObjectFieldTemplate.tsx +108 -0
- package/src/templates/ObjectFieldTemplate/index.ts +2 -0
- package/src/templates/Templates.tsx +63 -0
- package/src/templates/TitleField/TitleField.tsx +26 -0
- package/src/templates/TitleField/index.ts +2 -0
- package/src/templates/WrapIfAdditionalTemplate/WrapIfAdditionalTemplate.tsx +74 -0
- package/src/templates/WrapIfAdditionalTemplate/index.ts +2 -0
- package/src/templates/index.ts +22 -0
- package/src/theme/Theme.tsx +93 -0
- package/src/theme/index.ts +2 -0
- package/src/tsconfig.json +26 -0
- package/src/types/DaisyProps.ts +5 -0
- package/src/types.d.ts +4 -0
- package/src/utils.ts +18 -0
- package/src/widgets/AltDateTimeWidget/AltDateTimeWidget.tsx +14 -0
- package/src/widgets/AltDateTimeWidget/index.ts +2 -0
- package/src/widgets/AltDateWidget/AltDateWidget.tsx +328 -0
- package/src/widgets/AltDateWidget/index.ts +2 -0
- package/src/widgets/CheckboxWidget/CheckboxWidget.tsx +108 -0
- package/src/widgets/CheckboxWidget/index.ts +2 -0
- package/src/widgets/CheckboxesWidget/CheckboxesWidget.tsx +124 -0
- package/src/widgets/CheckboxesWidget/index.ts +2 -0
- package/src/widgets/DateTimeWidget/DateTimeWidget.tsx +343 -0
- package/src/widgets/DateTimeWidget/index.ts +2 -0
- package/src/widgets/DateWidget/DateWidget.tsx +393 -0
- package/src/widgets/DateWidget/index.ts +2 -0
- package/src/widgets/FileWidget/FileWidget.tsx +86 -0
- package/src/widgets/FileWidget/index.ts +2 -0
- package/src/widgets/RadioWidget/RadioWidget.tsx +114 -0
- package/src/widgets/RadioWidget/index.ts +2 -0
- package/src/widgets/RangeWidget/RangeWidget.tsx +78 -0
- package/src/widgets/RangeWidget/index.ts +2 -0
- package/src/widgets/RatingWidget/RatingWidget.tsx +120 -0
- package/src/widgets/RatingWidget/index.ts +2 -0
- package/src/widgets/SelectWidget/SelectWidget.tsx +161 -0
- package/src/widgets/SelectWidget/index.ts +2 -0
- package/src/widgets/TextareaWidget/TextareaWidget.tsx +77 -0
- package/src/widgets/TextareaWidget/index.ts +2 -0
- package/src/widgets/TimeWidget/TimeWidget.tsx +72 -0
- package/src/widgets/TimeWidget/index.ts +2 -0
- package/src/widgets/ToggleWidget/ToggleWidget.tsx +70 -0
- package/src/widgets/ToggleWidget/index.ts +2 -0
- package/src/widgets/Widgets.tsx +58 -0
- package/src/widgets/index.ts +2 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* __createDaisyUIFrameProvider is used to ensure that DaisyUI styles
|
|
3
|
+
* can be rendered within an iframe without affecting the parent page.
|
|
4
|
+
* Required for using DaisyUI in the playground.
|
|
5
|
+
*
|
|
6
|
+
* We have to define DaisyUIFrameProvider in this library, as opposed to the playground,
|
|
7
|
+
* to ensure consistent styling and proper theme management across frames.
|
|
8
|
+
*
|
|
9
|
+
* This provider:
|
|
10
|
+
* - Injects Tailwind CSS and DaisyUI stylesheets into the iframe
|
|
11
|
+
* - Configures Tailwind with DaisyUI themes
|
|
12
|
+
* - Manages theme persistence through localStorage
|
|
13
|
+
* - Wraps content in a themed container
|
|
14
|
+
*
|
|
15
|
+
* NOTE: This is an internal component only used by @rjsf/playground (no
|
|
16
|
+
* backwards compatibility guarantees!)
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { useEffect, ReactNode } from 'react';
|
|
20
|
+
|
|
21
|
+
interface DaisyUIFrameProviderProps {
|
|
22
|
+
children: ReactNode;
|
|
23
|
+
subtheme?: { dataTheme?: string } | null;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** This component has a useEffect with a cleanup function to remove the tailwind stylesheets loads upon unmount so
|
|
27
|
+
* that the styles are removed when the theme in the playground is switched to something else
|
|
28
|
+
*
|
|
29
|
+
* @param props - The component props
|
|
30
|
+
*/
|
|
31
|
+
function DaisyUIFrameComponent(props: DaisyUIFrameProviderProps & { document?: Document }) {
|
|
32
|
+
const { children, subtheme = {}, document } = props;
|
|
33
|
+
const theme = (() => {
|
|
34
|
+
try {
|
|
35
|
+
if (subtheme?.dataTheme) {
|
|
36
|
+
localStorage.setItem('daisyui-theme', subtheme.dataTheme);
|
|
37
|
+
return subtheme.dataTheme;
|
|
38
|
+
}
|
|
39
|
+
return localStorage.getItem('daisyui-theme') || 'cupcake';
|
|
40
|
+
} catch {
|
|
41
|
+
return 'cupcake';
|
|
42
|
+
}
|
|
43
|
+
})();
|
|
44
|
+
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
if (document) {
|
|
47
|
+
// Configure Tailwind first to ensure config is available before script loads
|
|
48
|
+
const configScript = document.createElement('script');
|
|
49
|
+
configScript.textContent = `
|
|
50
|
+
window.tailwind = window.tailwind || {};
|
|
51
|
+
window.tailwind.config = {
|
|
52
|
+
daisyui: {
|
|
53
|
+
themes: true,
|
|
54
|
+
},
|
|
55
|
+
future: {
|
|
56
|
+
disableProductionWarning: true
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
`;
|
|
60
|
+
document.head.appendChild(configScript);
|
|
61
|
+
|
|
62
|
+
// Add Tailwind
|
|
63
|
+
const tailwindScript = document.createElement('script');
|
|
64
|
+
tailwindScript.src = 'https://unpkg.com/@tailwindcss/browser@4.1.3';
|
|
65
|
+
document.head.appendChild(tailwindScript);
|
|
66
|
+
|
|
67
|
+
// Add DaisyUI CSS
|
|
68
|
+
const daisyLink = document.createElement('link');
|
|
69
|
+
daisyLink.rel = 'stylesheet';
|
|
70
|
+
daisyLink.href = 'https://cdn.jsdelivr.net/npm/daisyui@5.0.20';
|
|
71
|
+
document.head.appendChild(daisyLink);
|
|
72
|
+
|
|
73
|
+
// Add all themes
|
|
74
|
+
const daisyLinkAllThemes = document.createElement('link');
|
|
75
|
+
daisyLinkAllThemes.rel = 'stylesheet';
|
|
76
|
+
daisyLinkAllThemes.href = 'https://cdn.jsdelivr.net/npm/daisyui@5.0.20/themes.css';
|
|
77
|
+
document.head.appendChild(daisyLinkAllThemes);
|
|
78
|
+
return () => {
|
|
79
|
+
configScript.remove();
|
|
80
|
+
tailwindScript.remove();
|
|
81
|
+
daisyLink.remove();
|
|
82
|
+
daisyLinkAllThemes.remove();
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
return undefined;
|
|
86
|
+
}, [document]);
|
|
87
|
+
|
|
88
|
+
return (
|
|
89
|
+
<div data-theme={theme} className='daisy-ui-theme'>
|
|
90
|
+
{children}
|
|
91
|
+
</div>
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Creates a DaisyUI frame provider component that can be used within an iframe
|
|
97
|
+
* to properly render DaisyUI styles without affecting the parent document.
|
|
98
|
+
*
|
|
99
|
+
* @param props - The component props
|
|
100
|
+
* @returns A component that sets up DaisyUI within an iframe context
|
|
101
|
+
*/
|
|
102
|
+
export const __createDaisyUIFrameProvider = (props: DaisyUIFrameProviderProps) => {
|
|
103
|
+
return function DaisyUIFrame({ document }: { document?: Document }) {
|
|
104
|
+
// Get theme from localStorage or use default
|
|
105
|
+
return <DaisyUIFrameComponent document={document} {...props} />;
|
|
106
|
+
};
|
|
107
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { withTheme } from '@rjsf/core';
|
|
2
|
+
import { RJSFSchema, StrictRJSFSchema, FormContextType } from '@rjsf/utils';
|
|
3
|
+
|
|
4
|
+
import { generateTheme } from '../theme/Theme';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Generate a form with the DaisyUI theme
|
|
8
|
+
*/
|
|
9
|
+
export function generateForm<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>() {
|
|
10
|
+
return withTheme(generateTheme<T, S, F>());
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Form component with DaisyUI theme
|
|
15
|
+
*/
|
|
16
|
+
const Form = generateForm();
|
|
17
|
+
|
|
18
|
+
export { Form, generateTheme };
|
|
19
|
+
|
|
20
|
+
export default Form;
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { withTheme } from '@rjsf/core';
|
|
2
|
+
|
|
3
|
+
import Theme, { ThemeProvider, useTheme } from './theme';
|
|
4
|
+
|
|
5
|
+
export { default as Form } from './DaisyUIForm';
|
|
6
|
+
export { __createDaisyUIFrameProvider } from './DaisyUIFrameProvider';
|
|
7
|
+
export { default as GridTemplate } from './templates/GridTemplate/GridTemplate';
|
|
8
|
+
export { default as Templates } from './templates/Templates';
|
|
9
|
+
export { default as Theme } from './theme';
|
|
10
|
+
export { default as Widgets } from './widgets/Widgets';
|
|
11
|
+
export { ThemeProvider, useTheme };
|
|
12
|
+
|
|
13
|
+
export default withTheme(Theme);
|
package/src/styles.css
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { FormContextType, StrictRJSFSchema, RJSFSchema, ArrayFieldDescriptionProps } from '@rjsf/utils';
|
|
2
|
+
|
|
3
|
+
/** The `ArrayFieldDescriptionTemplate` component renders the description for an array field
|
|
4
|
+
* with DaisyUI styling, displaying it as a small text with accent color.
|
|
5
|
+
*
|
|
6
|
+
* @param props - The `ArrayFieldDescriptionProps` for the component
|
|
7
|
+
*/
|
|
8
|
+
export default function ArrayFieldDescriptionTemplate<
|
|
9
|
+
T = any,
|
|
10
|
+
S extends StrictRJSFSchema = RJSFSchema,
|
|
11
|
+
F extends FormContextType = any,
|
|
12
|
+
>(props: ArrayFieldDescriptionProps<T, S, F>) {
|
|
13
|
+
const { description } = props;
|
|
14
|
+
return (
|
|
15
|
+
<div>
|
|
16
|
+
<div className='text-sm text-accent'>{description}</div>
|
|
17
|
+
</div>
|
|
18
|
+
);
|
|
19
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
FormContextType,
|
|
4
|
+
RJSFSchema,
|
|
5
|
+
StrictRJSFSchema,
|
|
6
|
+
ArrayFieldItemButtonsTemplateType,
|
|
7
|
+
buttonId,
|
|
8
|
+
} from '@rjsf/utils';
|
|
9
|
+
|
|
10
|
+
/** The `ArrayFieldItemButtonsTemplate` component renders the action buttons for an array field item
|
|
11
|
+
* using DaisyUI's join component when multiple buttons are present.
|
|
12
|
+
*/
|
|
13
|
+
export default function ArrayFieldItemButtonsTemplate<
|
|
14
|
+
T = any,
|
|
15
|
+
S extends StrictRJSFSchema = RJSFSchema,
|
|
16
|
+
F extends FormContextType = any,
|
|
17
|
+
>(props: ArrayFieldItemButtonsTemplateType<T, S, F>) {
|
|
18
|
+
const {
|
|
19
|
+
disabled,
|
|
20
|
+
hasCopy,
|
|
21
|
+
hasMoveDown,
|
|
22
|
+
hasMoveUp,
|
|
23
|
+
hasRemove,
|
|
24
|
+
idSchema,
|
|
25
|
+
index,
|
|
26
|
+
onCopyIndexClick,
|
|
27
|
+
onDropIndexClick,
|
|
28
|
+
onReorderClick,
|
|
29
|
+
readonly,
|
|
30
|
+
registry,
|
|
31
|
+
uiSchema,
|
|
32
|
+
} = props;
|
|
33
|
+
const { CopyButton, MoveDownButton, MoveUpButton, RemoveButton } = registry.templates.ButtonTemplates;
|
|
34
|
+
const onCopyClick = useMemo(() => onCopyIndexClick(index), [index, onCopyIndexClick]);
|
|
35
|
+
const onRemoveClick = useMemo(() => onDropIndexClick(index), [index, onDropIndexClick]);
|
|
36
|
+
const onArrowUpClick = useMemo(() => onReorderClick(index, index - 1), [index, onReorderClick]);
|
|
37
|
+
const onArrowDownClick = useMemo(() => onReorderClick(index, index + 1), [index, onReorderClick]);
|
|
38
|
+
|
|
39
|
+
const renderMany = [hasMoveUp || hasMoveDown, hasCopy, hasRemove].filter(Boolean).length > 1;
|
|
40
|
+
const btnClass = renderMany ? 'join-item btn btn-sm px-2' : 'btn btn-sm px-2 rounded-sm';
|
|
41
|
+
const removeBtnClass = renderMany ? 'join-item btn btn-sm btn-error px-2' : 'btn btn-sm btn-error px-2 rounded-sm';
|
|
42
|
+
|
|
43
|
+
const buttons = (
|
|
44
|
+
<>
|
|
45
|
+
{(hasMoveUp || hasMoveDown) && (
|
|
46
|
+
<>
|
|
47
|
+
<MoveUpButton
|
|
48
|
+
id={buttonId<T>(idSchema, 'moveUp')}
|
|
49
|
+
className={`rjsf-array-item-move-up ${btnClass}`}
|
|
50
|
+
disabled={disabled || readonly || !hasMoveUp}
|
|
51
|
+
onClick={onArrowUpClick}
|
|
52
|
+
uiSchema={uiSchema}
|
|
53
|
+
registry={registry}
|
|
54
|
+
/>
|
|
55
|
+
<MoveDownButton
|
|
56
|
+
id={buttonId<T>(idSchema, 'moveDown')}
|
|
57
|
+
className={`rjsf-array-item-move-down ${btnClass}`}
|
|
58
|
+
disabled={disabled || readonly || !hasMoveDown}
|
|
59
|
+
onClick={onArrowDownClick}
|
|
60
|
+
uiSchema={uiSchema}
|
|
61
|
+
registry={registry}
|
|
62
|
+
/>
|
|
63
|
+
</>
|
|
64
|
+
)}
|
|
65
|
+
{hasCopy && (
|
|
66
|
+
<CopyButton
|
|
67
|
+
id={buttonId<T>(idSchema, 'copy')}
|
|
68
|
+
className={`rjsf-array-item-copy ${btnClass}`}
|
|
69
|
+
disabled={disabled || readonly}
|
|
70
|
+
onClick={onCopyClick}
|
|
71
|
+
uiSchema={uiSchema}
|
|
72
|
+
registry={registry}
|
|
73
|
+
/>
|
|
74
|
+
)}
|
|
75
|
+
{hasRemove && (
|
|
76
|
+
<RemoveButton
|
|
77
|
+
id={buttonId<T>(idSchema, 'remove')}
|
|
78
|
+
className={`rjsf-array-item-remove ${removeBtnClass}`}
|
|
79
|
+
disabled={disabled || readonly}
|
|
80
|
+
onClick={onRemoveClick}
|
|
81
|
+
uiSchema={uiSchema}
|
|
82
|
+
registry={registry}
|
|
83
|
+
/>
|
|
84
|
+
)}
|
|
85
|
+
</>
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
return renderMany ? <div className='join'>{buttons}</div> : buttons;
|
|
89
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ArrayFieldItemTemplateType,
|
|
3
|
+
FormContextType,
|
|
4
|
+
getTemplate,
|
|
5
|
+
getUiOptions,
|
|
6
|
+
RJSFSchema,
|
|
7
|
+
StrictRJSFSchema,
|
|
8
|
+
} from '@rjsf/utils';
|
|
9
|
+
|
|
10
|
+
/** The `ArrayFieldItemTemplate` component is the template used to render an item of an array.
|
|
11
|
+
*
|
|
12
|
+
* This DaisyUI implementation:
|
|
13
|
+
* - Uses the fieldset component for proper form grouping
|
|
14
|
+
* - Maintains connected appearance for multiple items
|
|
15
|
+
* - Positions items with z-index to create a stacked effect
|
|
16
|
+
* - Places action buttons in an easily accessible location
|
|
17
|
+
*
|
|
18
|
+
* @param props - The `ArrayFieldItemTemplateType` props for the component with additional properties:
|
|
19
|
+
* @param props.index - The position of this item in the array (optional)
|
|
20
|
+
* @param props.totalItems - The total number of items in the array (optional)
|
|
21
|
+
*/
|
|
22
|
+
export default function ArrayFieldItemTemplate<
|
|
23
|
+
T = any,
|
|
24
|
+
S extends StrictRJSFSchema = RJSFSchema,
|
|
25
|
+
F extends FormContextType = any,
|
|
26
|
+
>(props: ArrayFieldItemTemplateType<T, S, F>) {
|
|
27
|
+
const { children, buttonsProps, hasToolbar, registry, uiSchema, index, totalItems } = props;
|
|
28
|
+
const uiOptions = getUiOptions<T, S, F>(uiSchema);
|
|
29
|
+
const ArrayFieldItemButtonsTemplate = getTemplate<'ArrayFieldItemButtonsTemplate', T, S, F>(
|
|
30
|
+
'ArrayFieldItemButtonsTemplate',
|
|
31
|
+
registry,
|
|
32
|
+
uiOptions,
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
// Different styling for first, middle, and last items to create connected feel
|
|
36
|
+
const isFirstItem = index === 0;
|
|
37
|
+
const isLastItem = index === totalItems - 1;
|
|
38
|
+
const borderRadius = isFirstItem ? 'rounded-t-lg' : isLastItem ? 'rounded-b-lg' : '';
|
|
39
|
+
const marginBottom = isLastItem ? '' : 'mb-[-1px]';
|
|
40
|
+
const zIndex = index === undefined ? '' : 'z-' + (10 - Math.min(index, 9));
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<fieldset className={`fieldset bg-base-100 border border-base-300 p-4 ${borderRadius} ${marginBottom} ${zIndex}`}>
|
|
44
|
+
{/* Main content area */}
|
|
45
|
+
{children}
|
|
46
|
+
|
|
47
|
+
{/* Action buttons */}
|
|
48
|
+
{hasToolbar && (
|
|
49
|
+
<div className='flex justify-end mt-2'>
|
|
50
|
+
<ArrayFieldItemButtonsTemplate {...buttonsProps} />
|
|
51
|
+
</div>
|
|
52
|
+
)}
|
|
53
|
+
</fieldset>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import React, { useCallback } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
ArrayFieldTemplateProps,
|
|
4
|
+
getTemplate,
|
|
5
|
+
getUiOptions,
|
|
6
|
+
Registry,
|
|
7
|
+
RJSFSchema,
|
|
8
|
+
FormContextType,
|
|
9
|
+
TranslatableString,
|
|
10
|
+
buttonId,
|
|
11
|
+
} from '@rjsf/utils';
|
|
12
|
+
|
|
13
|
+
/** The `ArrayFieldTemplate` component is the template used to render all items in an array.
|
|
14
|
+
*
|
|
15
|
+
* This DaisyUI implementation:
|
|
16
|
+
* - Renders the entire array in a rounded container with base-200 background
|
|
17
|
+
* - Uses custom ArrayFieldTitleTemplate and ArrayFieldDescriptionTemplate
|
|
18
|
+
* - Displays an info alert when the array is empty
|
|
19
|
+
* - Renders each array item using ArrayFieldItemTemplate with additional props
|
|
20
|
+
* - Positions the add button at the bottom right using flexbox
|
|
21
|
+
* - Uses DaisyUI's button styling for the add button
|
|
22
|
+
* - Maintains proper spacing with margin and padding utilities
|
|
23
|
+
*
|
|
24
|
+
* @param props - The `ArrayFieldTemplateProps` for the component
|
|
25
|
+
*/
|
|
26
|
+
export default function ArrayFieldTemplate<T = any, S extends RJSFSchema = RJSFSchema, F extends FormContextType = any>(
|
|
27
|
+
props: ArrayFieldTemplateProps<T, S, F>,
|
|
28
|
+
) {
|
|
29
|
+
const {
|
|
30
|
+
canAdd,
|
|
31
|
+
className,
|
|
32
|
+
disabled,
|
|
33
|
+
idSchema,
|
|
34
|
+
items,
|
|
35
|
+
onAddClick,
|
|
36
|
+
readonly,
|
|
37
|
+
registry,
|
|
38
|
+
required,
|
|
39
|
+
schema,
|
|
40
|
+
title,
|
|
41
|
+
uiSchema,
|
|
42
|
+
} = props;
|
|
43
|
+
|
|
44
|
+
const uiOptions = getUiOptions<T, S, F>(uiSchema);
|
|
45
|
+
const ArrayFieldDescriptionTemplate = getTemplate<'ArrayFieldDescriptionTemplate', T, S, F>(
|
|
46
|
+
'ArrayFieldDescriptionTemplate',
|
|
47
|
+
registry as Registry<T, S, F>,
|
|
48
|
+
uiOptions,
|
|
49
|
+
);
|
|
50
|
+
const ArrayFieldItemTemplate = getTemplate<'ArrayFieldItemTemplate', T, S, F>(
|
|
51
|
+
'ArrayFieldItemTemplate',
|
|
52
|
+
registry as Registry<T, S, F>,
|
|
53
|
+
uiOptions,
|
|
54
|
+
);
|
|
55
|
+
const ArrayFieldTitleTemplate = getTemplate<'ArrayFieldTitleTemplate', T, S, F>(
|
|
56
|
+
'ArrayFieldTitleTemplate',
|
|
57
|
+
registry as Registry<T, S, F>,
|
|
58
|
+
uiOptions,
|
|
59
|
+
);
|
|
60
|
+
// Button templates are not overridden in the uiSchema
|
|
61
|
+
const {
|
|
62
|
+
ButtonTemplates: { AddButton },
|
|
63
|
+
} = registry.templates;
|
|
64
|
+
|
|
65
|
+
/** Handle the add button click
|
|
66
|
+
*
|
|
67
|
+
* @param e - The click event
|
|
68
|
+
*/
|
|
69
|
+
const handleAddClick = useCallback(
|
|
70
|
+
(e: React.MouseEvent<HTMLButtonElement>) => {
|
|
71
|
+
e.preventDefault();
|
|
72
|
+
e.stopPropagation();
|
|
73
|
+
onAddClick(e);
|
|
74
|
+
},
|
|
75
|
+
[onAddClick],
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
return (
|
|
79
|
+
<div className={`array-field-template ${className}`}>
|
|
80
|
+
<ArrayFieldTitleTemplate
|
|
81
|
+
idSchema={idSchema}
|
|
82
|
+
title={uiOptions.title || title}
|
|
83
|
+
schema={schema}
|
|
84
|
+
uiSchema={uiSchema}
|
|
85
|
+
required={required}
|
|
86
|
+
registry={registry}
|
|
87
|
+
/>
|
|
88
|
+
<ArrayFieldDescriptionTemplate
|
|
89
|
+
idSchema={idSchema}
|
|
90
|
+
description={uiOptions.description || schema.description}
|
|
91
|
+
schema={schema}
|
|
92
|
+
uiSchema={uiSchema}
|
|
93
|
+
registry={registry}
|
|
94
|
+
/>
|
|
95
|
+
<div className='flex flex-col gap-4'>
|
|
96
|
+
<div className='rjsf-array-item-list'>
|
|
97
|
+
{items &&
|
|
98
|
+
items.map(({ key, ...itemProps }, index) => (
|
|
99
|
+
<ArrayFieldItemTemplate key={key} {...itemProps} index={index} totalItems={items.length} />
|
|
100
|
+
))}
|
|
101
|
+
{items && items.length === 0 && canAdd && (
|
|
102
|
+
<div className='text-center italic text-base-content/70'>{TranslatableString.EmptyArray}</div>
|
|
103
|
+
)}
|
|
104
|
+
</div>
|
|
105
|
+
{canAdd && (
|
|
106
|
+
<div className='flex justify-end'>
|
|
107
|
+
<AddButton
|
|
108
|
+
id={buttonId<T>(idSchema, 'add')}
|
|
109
|
+
className='rjsf-array-item-add btn btn-primary btn-sm'
|
|
110
|
+
onClick={handleAddClick}
|
|
111
|
+
disabled={disabled || readonly}
|
|
112
|
+
uiSchema={uiSchema}
|
|
113
|
+
registry={registry}
|
|
114
|
+
/>
|
|
115
|
+
</div>
|
|
116
|
+
)}
|
|
117
|
+
</div>
|
|
118
|
+
</div>
|
|
119
|
+
);
|
|
120
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ArrayFieldTitleProps, StrictRJSFSchema, RJSFSchema, FormContextType } from '@rjsf/utils';
|
|
2
|
+
|
|
3
|
+
/** The `ArrayFieldTitleTemplate` component renders the title for an array field
|
|
4
|
+
* using DaisyUI styling with large bold text.
|
|
5
|
+
*
|
|
6
|
+
* @param props - The `ArrayFieldTitleProps` for the component
|
|
7
|
+
*/
|
|
8
|
+
export default function ArrayFieldTitleTemplate<
|
|
9
|
+
T = any,
|
|
10
|
+
S extends StrictRJSFSchema = RJSFSchema,
|
|
11
|
+
F extends FormContextType = any,
|
|
12
|
+
>(props: ArrayFieldTitleProps<T, S, F>) {
|
|
13
|
+
const { title } = props;
|
|
14
|
+
return <h3 className='text-2xl font-bold'>{title}</h3>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { ChangeEvent, FocusEvent, useCallback } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
WidgetProps,
|
|
4
|
+
StrictRJSFSchema,
|
|
5
|
+
RJSFSchema,
|
|
6
|
+
FormContextType,
|
|
7
|
+
getInputProps,
|
|
8
|
+
ariaDescribedByIds,
|
|
9
|
+
examplesId,
|
|
10
|
+
} from '@rjsf/utils';
|
|
11
|
+
|
|
12
|
+
/** The `BaseInputTemplate` component is a template for rendering basic input elements
|
|
13
|
+
* with DaisyUI styling. It's used as the foundation for various input types in forms.
|
|
14
|
+
*
|
|
15
|
+
* Features:
|
|
16
|
+
* - Wraps input in DaisyUI's form-control for proper spacing
|
|
17
|
+
* - Uses DaisyUI's input and input-bordered classes for styling
|
|
18
|
+
* - Includes a hidden label for accessibility
|
|
19
|
+
* - Handles common input properties like disabled and readonly states
|
|
20
|
+
* - Processes input props based on schema type and options
|
|
21
|
+
* - Supports schema examples with datalist
|
|
22
|
+
* - Handles onChange, onBlur, and onFocus events
|
|
23
|
+
*
|
|
24
|
+
* @param props - The `WidgetProps` for the component
|
|
25
|
+
*/
|
|
26
|
+
export default function BaseInputTemplate<
|
|
27
|
+
T = any,
|
|
28
|
+
S extends StrictRJSFSchema = RJSFSchema,
|
|
29
|
+
F extends FormContextType = any,
|
|
30
|
+
>(props: WidgetProps<T, S, F>) {
|
|
31
|
+
const {
|
|
32
|
+
id,
|
|
33
|
+
value,
|
|
34
|
+
required,
|
|
35
|
+
disabled,
|
|
36
|
+
readonly,
|
|
37
|
+
autofocus,
|
|
38
|
+
onChange,
|
|
39
|
+
onBlur,
|
|
40
|
+
onFocus,
|
|
41
|
+
onChangeOverride,
|
|
42
|
+
options,
|
|
43
|
+
schema,
|
|
44
|
+
type,
|
|
45
|
+
label,
|
|
46
|
+
placeholder,
|
|
47
|
+
} = props;
|
|
48
|
+
|
|
49
|
+
const inputProps = getInputProps<T, S, F>(schema, type, options);
|
|
50
|
+
|
|
51
|
+
// Extract step, min, max, accept from inputProps
|
|
52
|
+
const { step, min, max, accept, ...rest } = inputProps;
|
|
53
|
+
const htmlInputProps = { step, min, max, accept, ...(schema.examples ? { list: examplesId<T>(id) } : undefined) };
|
|
54
|
+
|
|
55
|
+
const _onChange = useCallback(
|
|
56
|
+
({ target: { value } }: ChangeEvent<HTMLInputElement>) => onChange(value === '' ? options.emptyValue : value),
|
|
57
|
+
[onChange, options],
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
const _onBlur = useCallback(
|
|
61
|
+
({ target }: FocusEvent<HTMLInputElement>) => onBlur && onBlur(id, target.value),
|
|
62
|
+
[onBlur, id],
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
const _onFocus = useCallback(
|
|
66
|
+
({ target }: FocusEvent<HTMLInputElement>) => onFocus && onFocus(id, target.value),
|
|
67
|
+
[onFocus, id],
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
return (
|
|
71
|
+
<>
|
|
72
|
+
<div className='form-control'>
|
|
73
|
+
<label htmlFor={id} className='label hidden' style={{ display: 'none' }}>
|
|
74
|
+
<span className='label-text'>{label}</span>
|
|
75
|
+
</label>
|
|
76
|
+
<input
|
|
77
|
+
id={id}
|
|
78
|
+
name={id}
|
|
79
|
+
value={value || value === 0 ? value : ''}
|
|
80
|
+
placeholder={placeholder}
|
|
81
|
+
required={required}
|
|
82
|
+
disabled={disabled || readonly}
|
|
83
|
+
autoFocus={autofocus}
|
|
84
|
+
className='input input-bordered'
|
|
85
|
+
{...rest}
|
|
86
|
+
{...htmlInputProps}
|
|
87
|
+
onChange={onChangeOverride || _onChange}
|
|
88
|
+
onBlur={_onBlur}
|
|
89
|
+
onFocus={_onFocus}
|
|
90
|
+
aria-describedby={ariaDescribedByIds<T>(id, !!schema.examples)}
|
|
91
|
+
/>
|
|
92
|
+
</div>
|
|
93
|
+
{Array.isArray(schema.examples) && (
|
|
94
|
+
<datalist id={examplesId<T>(id)}>
|
|
95
|
+
{(schema.examples as string[])
|
|
96
|
+
.concat(schema.default && !schema.examples.includes(schema.default) ? ([schema.default] as string[]) : [])
|
|
97
|
+
.map((example: any) => {
|
|
98
|
+
return <option key={example} value={example} />;
|
|
99
|
+
})}
|
|
100
|
+
</datalist>
|
|
101
|
+
)}
|
|
102
|
+
</>
|
|
103
|
+
);
|
|
104
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { FormContextType, IconButtonProps, RJSFSchema, StrictRJSFSchema, TranslatableString } from '@rjsf/utils';
|
|
2
|
+
import { library } from '@fortawesome/fontawesome-svg-core';
|
|
3
|
+
import { faArrowDown, faArrowUp, faCopy, faTrash, faPlus } from '@fortawesome/free-solid-svg-icons';
|
|
4
|
+
import type { IconDefinition } from '@fortawesome/fontawesome-svg-core';
|
|
5
|
+
|
|
6
|
+
import DaisyUIButton from './DaisyUIButton';
|
|
7
|
+
|
|
8
|
+
library.add(faPlus, faCopy, faArrowDown, faArrowUp, faTrash);
|
|
9
|
+
|
|
10
|
+
/** The `AddButton` renders a button that represent the `Add` action on a form
|
|
11
|
+
*
|
|
12
|
+
* @param props - The props for the component
|
|
13
|
+
*/
|
|
14
|
+
export default function AddButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({
|
|
15
|
+
className,
|
|
16
|
+
onClick,
|
|
17
|
+
disabled,
|
|
18
|
+
registry,
|
|
19
|
+
...otherProps
|
|
20
|
+
}: IconButtonProps<T, S, F>) {
|
|
21
|
+
const { translateString } = registry;
|
|
22
|
+
return (
|
|
23
|
+
<div className='row'>
|
|
24
|
+
<p className={`col-xs-3 col-xs-offset-9 text-right ${className}`}>
|
|
25
|
+
<DaisyUIButton
|
|
26
|
+
{...otherProps}
|
|
27
|
+
iconType='info'
|
|
28
|
+
icon={faPlus as IconDefinition}
|
|
29
|
+
className='btn-add col-xs-12 btn-primary btn-primary-content'
|
|
30
|
+
title={translateString(TranslatableString.AddButton)}
|
|
31
|
+
onClick={onClick}
|
|
32
|
+
disabled={disabled}
|
|
33
|
+
registry={registry}
|
|
34
|
+
/>
|
|
35
|
+
</p>
|
|
36
|
+
</div>
|
|
37
|
+
);
|
|
38
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { memo } from 'react';
|
|
2
|
+
import { FormContextType, IconButtonProps, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils';
|
|
3
|
+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
4
|
+
import { IconDefinition } from '@fortawesome/fontawesome-svg-core';
|
|
5
|
+
|
|
6
|
+
/** Interface for props specific to DaisyUIButton, extending IconButtonProps but with stricter icon typing */
|
|
7
|
+
interface DaisyUIButtonProps<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>
|
|
8
|
+
extends Omit<IconButtonProps<T, S, F>, 'icon'> {
|
|
9
|
+
/** The FontAwesome icon to display in the button */
|
|
10
|
+
icon: IconDefinition;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/** The `DaisyUIButton` component renders a button with an icon using DaisyUI styling.
|
|
14
|
+
* It's used as the base for various button components like add, remove, copy, move up/down.
|
|
15
|
+
*
|
|
16
|
+
* @param props - The component props
|
|
17
|
+
*/
|
|
18
|
+
function DaisyUIButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>(
|
|
19
|
+
props: DaisyUIButtonProps<T, S, F>,
|
|
20
|
+
) {
|
|
21
|
+
const { icon, iconType, uiSchema, registry, className, ...otherProps } = props;
|
|
22
|
+
return (
|
|
23
|
+
<button type='button' className={className} aria-label={props.title!} {...otherProps}>
|
|
24
|
+
<FontAwesomeIcon icon={icon} className='h-5 w-5' />
|
|
25
|
+
</button>
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
DaisyUIButton.displayName = 'DaisyUIButton';
|
|
30
|
+
|
|
31
|
+
export default memo(DaisyUIButton) as typeof DaisyUIButton;
|