@rjsf/core 6.0.0-alpha.0 → 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/dist/core.umd.js +1680 -809
- package/dist/index.esm.js +2166 -1198
- package/dist/index.esm.js.map +4 -4
- package/dist/index.js +2221 -1299
- package/dist/index.js.map +4 -4
- package/lib/components/Form.d.ts +22 -9
- package/lib/components/Form.d.ts.map +1 -0
- package/lib/components/Form.js +368 -312
- package/lib/components/RichDescription.d.ts +20 -0
- package/lib/components/RichDescription.d.ts.map +1 -0
- package/lib/components/RichDescription.js +17 -0
- package/lib/components/fields/ArrayField.d.ts +20 -9
- package/lib/components/fields/ArrayField.d.ts.map +1 -0
- package/lib/components/fields/ArrayField.js +212 -206
- package/lib/components/fields/BooleanField.d.ts +1 -0
- package/lib/components/fields/BooleanField.d.ts.map +1 -0
- package/lib/components/fields/BooleanField.js +6 -14
- package/lib/components/fields/LayoutGridField.d.ts +480 -0
- package/lib/components/fields/LayoutGridField.d.ts.map +1 -0
- package/lib/components/fields/LayoutGridField.js +711 -0
- package/lib/components/fields/LayoutHeaderField.d.ts +12 -0
- package/lib/components/fields/LayoutHeaderField.d.ts.map +1 -0
- package/lib/components/fields/LayoutHeaderField.js +23 -0
- package/lib/components/fields/LayoutMultiSchemaField.d.ts +28 -0
- package/lib/components/fields/LayoutMultiSchemaField.d.ts.map +1 -0
- package/lib/components/fields/LayoutMultiSchemaField.js +114 -0
- package/lib/components/fields/MultiSchemaField.d.ts +1 -0
- package/lib/components/fields/MultiSchemaField.d.ts.map +1 -0
- package/lib/components/fields/MultiSchemaField.js +31 -31
- package/lib/components/fields/NullField.d.ts +1 -0
- package/lib/components/fields/NullField.d.ts.map +1 -0
- package/lib/components/fields/NullField.js +0 -1
- package/lib/components/fields/NumberField.d.ts +1 -0
- package/lib/components/fields/NumberField.d.ts.map +1 -0
- package/lib/components/fields/NumberField.js +2 -3
- package/lib/components/fields/ObjectField.d.ts +1 -0
- package/lib/components/fields/ObjectField.d.ts.map +1 -0
- package/lib/components/fields/ObjectField.js +146 -141
- package/lib/components/fields/SchemaField.d.ts +1 -0
- package/lib/components/fields/SchemaField.d.ts.map +1 -0
- package/lib/components/fields/SchemaField.js +10 -20
- package/lib/components/fields/StringField.d.ts +1 -0
- package/lib/components/fields/StringField.d.ts.map +1 -0
- package/lib/components/fields/StringField.js +1 -3
- package/lib/components/fields/index.d.ts +1 -0
- package/lib/components/fields/index.d.ts.map +1 -0
- package/lib/components/fields/index.js +14 -9
- package/lib/components/templates/ArrayFieldDescriptionTemplate.d.ts +1 -0
- package/lib/components/templates/ArrayFieldDescriptionTemplate.d.ts.map +1 -0
- package/lib/components/templates/ArrayFieldDescriptionTemplate.js +0 -1
- package/lib/components/templates/ArrayFieldItemButtonsTemplate.d.ts +8 -0
- package/lib/components/templates/ArrayFieldItemButtonsTemplate.d.ts.map +1 -0
- package/lib/components/templates/ArrayFieldItemButtonsTemplate.js +17 -0
- package/lib/components/templates/ArrayFieldItemTemplate.d.ts +4 -3
- package/lib/components/templates/ArrayFieldItemTemplate.d.ts.map +1 -0
- package/lib/components/templates/ArrayFieldItemTemplate.js +7 -6
- package/lib/components/templates/ArrayFieldTemplate.d.ts +2 -1
- package/lib/components/templates/ArrayFieldTemplate.d.ts.map +1 -0
- package/lib/components/templates/ArrayFieldTemplate.js +3 -4
- package/lib/components/templates/ArrayFieldTitleTemplate.d.ts +1 -0
- package/lib/components/templates/ArrayFieldTitleTemplate.d.ts.map +1 -0
- package/lib/components/templates/ArrayFieldTitleTemplate.js +0 -1
- package/lib/components/templates/BaseInputTemplate.d.ts +1 -0
- package/lib/components/templates/BaseInputTemplate.d.ts.map +1 -0
- package/lib/components/templates/BaseInputTemplate.js +0 -1
- package/lib/components/templates/ButtonTemplates/AddButton.d.ts +1 -0
- package/lib/components/templates/ButtonTemplates/AddButton.d.ts.map +1 -0
- package/lib/components/templates/ButtonTemplates/AddButton.js +1 -2
- package/lib/components/templates/ButtonTemplates/IconButton.d.ts +1 -0
- package/lib/components/templates/ButtonTemplates/IconButton.d.ts.map +1 -0
- package/lib/components/templates/ButtonTemplates/IconButton.js +4 -5
- package/lib/components/templates/ButtonTemplates/SubmitButton.d.ts +1 -0
- package/lib/components/templates/ButtonTemplates/SubmitButton.d.ts.map +1 -0
- package/lib/components/templates/ButtonTemplates/SubmitButton.js +0 -1
- package/lib/components/templates/ButtonTemplates/index.d.ts +1 -0
- package/lib/components/templates/ButtonTemplates/index.d.ts.map +1 -0
- package/lib/components/templates/ButtonTemplates/index.js +3 -4
- package/lib/components/templates/DescriptionField.d.ts +1 -0
- package/lib/components/templates/DescriptionField.d.ts.map +1 -0
- package/lib/components/templates/DescriptionField.js +3 -8
- package/lib/components/templates/ErrorList.d.ts +1 -0
- package/lib/components/templates/ErrorList.d.ts.map +1 -0
- package/lib/components/templates/ErrorList.js +0 -1
- package/lib/components/templates/FieldErrorTemplate.d.ts +1 -0
- package/lib/components/templates/FieldErrorTemplate.d.ts.map +1 -0
- package/lib/components/templates/FieldErrorTemplate.js +0 -1
- package/lib/components/templates/FieldHelpTemplate.d.ts +1 -0
- package/lib/components/templates/FieldHelpTemplate.d.ts.map +1 -0
- package/lib/components/templates/FieldHelpTemplate.js +0 -1
- package/lib/components/templates/FieldTemplate/FieldTemplate.d.ts +1 -0
- package/lib/components/templates/FieldTemplate/FieldTemplate.d.ts.map +1 -0
- package/lib/components/templates/FieldTemplate/FieldTemplate.js +1 -2
- package/lib/components/templates/FieldTemplate/Label.d.ts +1 -0
- package/lib/components/templates/FieldTemplate/Label.d.ts.map +1 -0
- package/lib/components/templates/FieldTemplate/Label.js +0 -1
- package/lib/components/templates/FieldTemplate/index.d.ts +2 -1
- package/lib/components/templates/FieldTemplate/index.d.ts.map +1 -0
- package/lib/components/templates/FieldTemplate/index.js +1 -2
- package/lib/components/templates/GridTemplate.d.ts +8 -0
- package/lib/components/templates/GridTemplate.d.ts.map +1 -0
- package/lib/components/templates/GridTemplate.js +10 -0
- package/lib/components/templates/ObjectFieldTemplate.d.ts +1 -0
- package/lib/components/templates/ObjectFieldTemplate.d.ts.map +1 -0
- package/lib/components/templates/ObjectFieldTemplate.js +2 -3
- package/lib/components/templates/TitleField.d.ts +1 -0
- package/lib/components/templates/TitleField.d.ts.map +1 -0
- package/lib/components/templates/TitleField.js +0 -1
- package/lib/components/templates/UnsupportedField.d.ts +1 -0
- package/lib/components/templates/UnsupportedField.d.ts.map +1 -0
- package/lib/components/templates/UnsupportedField.js +0 -1
- package/lib/components/templates/WrapIfAdditionalTemplate.d.ts +1 -0
- package/lib/components/templates/WrapIfAdditionalTemplate.d.ts.map +1 -0
- package/lib/components/templates/WrapIfAdditionalTemplate.js +10 -6
- package/lib/components/templates/index.d.ts +1 -0
- package/lib/components/templates/index.d.ts.map +1 -0
- package/lib/components/templates/index.js +19 -16
- package/lib/components/widgets/AltDateTimeWidget.d.ts +1 -0
- package/lib/components/widgets/AltDateTimeWidget.d.ts.map +1 -0
- package/lib/components/widgets/AltDateTimeWidget.js +0 -1
- package/lib/components/widgets/AltDateWidget.d.ts +1 -0
- package/lib/components/widgets/AltDateWidget.d.ts.map +1 -0
- package/lib/components/widgets/AltDateWidget.js +0 -1
- package/lib/components/widgets/CheckboxWidget.d.ts +1 -0
- package/lib/components/widgets/CheckboxWidget.d.ts.map +1 -0
- package/lib/components/widgets/CheckboxWidget.js +2 -4
- package/lib/components/widgets/CheckboxesWidget.d.ts +1 -0
- package/lib/components/widgets/CheckboxesWidget.d.ts.map +1 -0
- package/lib/components/widgets/CheckboxesWidget.js +0 -1
- package/lib/components/widgets/ColorWidget.d.ts +1 -0
- package/lib/components/widgets/ColorWidget.d.ts.map +1 -0
- package/lib/components/widgets/ColorWidget.js +0 -1
- package/lib/components/widgets/DateTimeWidget.d.ts +1 -0
- package/lib/components/widgets/DateTimeWidget.d.ts.map +1 -0
- package/lib/components/widgets/DateTimeWidget.js +0 -1
- package/lib/components/widgets/DateWidget.d.ts +1 -0
- package/lib/components/widgets/DateWidget.d.ts.map +1 -0
- package/lib/components/widgets/DateWidget.js +0 -1
- package/lib/components/widgets/EmailWidget.d.ts +1 -0
- package/lib/components/widgets/EmailWidget.d.ts.map +1 -0
- package/lib/components/widgets/EmailWidget.js +0 -1
- package/lib/components/widgets/FileWidget.d.ts +1 -0
- package/lib/components/widgets/FileWidget.d.ts.map +1 -0
- package/lib/components/widgets/FileWidget.js +3 -5
- package/lib/components/widgets/HiddenWidget.d.ts +1 -0
- package/lib/components/widgets/HiddenWidget.d.ts.map +1 -0
- package/lib/components/widgets/HiddenWidget.js +0 -1
- package/lib/components/widgets/PasswordWidget.d.ts +1 -0
- package/lib/components/widgets/PasswordWidget.d.ts.map +1 -0
- package/lib/components/widgets/PasswordWidget.js +0 -1
- package/lib/components/widgets/RadioWidget.d.ts +1 -0
- package/lib/components/widgets/RadioWidget.d.ts.map +1 -0
- package/lib/components/widgets/RadioWidget.js +3 -4
- package/lib/components/widgets/RangeWidget.d.ts +1 -0
- package/lib/components/widgets/RangeWidget.d.ts.map +1 -0
- package/lib/components/widgets/RangeWidget.js +0 -1
- package/lib/components/widgets/RatingWidget.d.ts +15 -0
- package/lib/components/widgets/RatingWidget.d.ts.map +1 -0
- package/lib/components/widgets/RatingWidget.js +63 -0
- package/lib/components/widgets/SelectWidget.d.ts +1 -0
- package/lib/components/widgets/SelectWidget.d.ts.map +1 -0
- package/lib/components/widgets/SelectWidget.js +4 -5
- package/lib/components/widgets/TextWidget.d.ts +1 -0
- package/lib/components/widgets/TextWidget.d.ts.map +1 -0
- package/lib/components/widgets/TextWidget.js +0 -1
- package/lib/components/widgets/TextareaWidget.d.ts +1 -0
- package/lib/components/widgets/TextareaWidget.d.ts.map +1 -0
- package/lib/components/widgets/TextareaWidget.js +0 -1
- package/lib/components/widgets/TimeWidget.d.ts +1 -0
- package/lib/components/widgets/TimeWidget.d.ts.map +1 -0
- package/lib/components/widgets/TimeWidget.js +0 -1
- package/lib/components/widgets/URLWidget.d.ts +1 -0
- package/lib/components/widgets/URLWidget.d.ts.map +1 -0
- package/lib/components/widgets/URLWidget.js +0 -1
- package/lib/components/widgets/UpDownWidget.d.ts +1 -0
- package/lib/components/widgets/UpDownWidget.d.ts.map +1 -0
- package/lib/components/widgets/UpDownWidget.js +0 -1
- package/lib/components/widgets/index.d.ts +1 -0
- package/lib/components/widgets/index.d.ts.map +1 -0
- package/lib/components/widgets/index.js +21 -20
- package/lib/getDefaultRegistry.d.ts +1 -0
- package/lib/getDefaultRegistry.d.ts.map +1 -0
- package/lib/getDefaultRegistry.js +3 -4
- package/lib/index.d.ts +7 -5
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +5 -5
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/withTheme.d.ts +2 -1
- package/lib/withTheme.d.ts.map +1 -0
- package/lib/withTheme.js +7 -8
- package/package.json +46 -37
- package/src/components/Form.tsx +127 -41
- package/src/components/RichDescription.tsx +50 -0
- package/src/components/fields/ArrayField.tsx +34 -24
- package/src/components/fields/BooleanField.tsx +6 -14
- package/src/components/fields/LayoutGridField.tsx +967 -0
- package/src/components/fields/LayoutHeaderField.tsx +49 -0
- package/src/components/fields/LayoutMultiSchemaField.tsx +228 -0
- package/src/components/fields/MultiSchemaField.tsx +9 -4
- package/src/components/fields/NullField.tsx +1 -1
- package/src/components/fields/NumberField.tsx +5 -5
- package/src/components/fields/ObjectField.tsx +32 -24
- package/src/components/fields/SchemaField.tsx +17 -30
- package/src/components/fields/StringField.tsx +2 -2
- package/src/components/fields/index.ts +7 -1
- package/src/components/templates/ArrayFieldDescriptionTemplate.tsx +2 -2
- package/src/components/templates/ArrayFieldItemButtonsTemplate.tsx +85 -0
- package/src/components/templates/ArrayFieldItemTemplate.tsx +18 -57
- package/src/components/templates/ArrayFieldTemplate.tsx +10 -8
- package/src/components/templates/ArrayFieldTitleTemplate.tsx +2 -2
- package/src/components/templates/BaseInputTemplate.tsx +4 -4
- package/src/components/templates/ButtonTemplates/IconButton.tsx +9 -36
- package/src/components/templates/ButtonTemplates/SubmitButton.tsx +1 -1
- package/src/components/templates/ButtonTemplates/index.ts +1 -1
- package/src/components/templates/DescriptionField.tsx +9 -15
- package/src/components/templates/FieldErrorTemplate.tsx +1 -1
- package/src/components/templates/FieldHelpTemplate.tsx +1 -1
- package/src/components/templates/FieldTemplate/FieldTemplate.tsx +2 -2
- package/src/components/templates/GridTemplate.tsx +15 -0
- package/src/components/templates/ObjectFieldTemplate.tsx +5 -3
- package/src/components/templates/TitleField.tsx +1 -1
- package/src/components/templates/UnsupportedField.tsx +1 -1
- package/src/components/templates/WrapIfAdditionalTemplate.tsx +14 -4
- package/src/components/templates/index.ts +4 -0
- package/src/components/widgets/AltDateWidget.tsx +9 -6
- package/src/components/widgets/CheckboxWidget.tsx +5 -5
- package/src/components/widgets/CheckboxesWidget.tsx +2 -2
- package/src/components/widgets/ColorWidget.tsx +1 -1
- package/src/components/widgets/DateTimeWidget.tsx +1 -1
- package/src/components/widgets/DateWidget.tsx +1 -1
- package/src/components/widgets/EmailWidget.tsx +1 -1
- package/src/components/widgets/FileWidget.tsx +5 -5
- package/src/components/widgets/PasswordWidget.tsx +1 -1
- package/src/components/widgets/RadioWidget.tsx +3 -3
- package/src/components/widgets/RangeWidget.tsx +1 -1
- package/src/components/widgets/RatingWidget.tsx +129 -0
- package/src/components/widgets/SelectWidget.tsx +4 -3
- package/src/components/widgets/TextWidget.tsx +1 -1
- package/src/components/widgets/TextareaWidget.tsx +3 -3
- package/src/components/widgets/TimeWidget.tsx +1 -1
- package/src/components/widgets/URLWidget.tsx +1 -1
- package/src/components/widgets/UpDownWidget.tsx +1 -1
- package/src/components/widgets/index.ts +3 -1
- package/src/getDefaultRegistry.ts +1 -1
- package/src/index.ts +3 -2
- package/src/tsconfig.json +14 -6
- package/src/withTheme.tsx +4 -3
- package/LICENSE.md +0 -201
- package/lib/components/Form.js.map +0 -1
- package/lib/components/fields/ArrayField.js.map +0 -1
- package/lib/components/fields/BooleanField.js.map +0 -1
- package/lib/components/fields/MultiSchemaField.js.map +0 -1
- package/lib/components/fields/NullField.js.map +0 -1
- package/lib/components/fields/NumberField.js.map +0 -1
- package/lib/components/fields/ObjectField.js.map +0 -1
- package/lib/components/fields/SchemaField.js.map +0 -1
- package/lib/components/fields/StringField.js.map +0 -1
- package/lib/components/fields/index.js.map +0 -1
- package/lib/components/templates/ArrayFieldDescriptionTemplate.js.map +0 -1
- package/lib/components/templates/ArrayFieldItemTemplate.js.map +0 -1
- package/lib/components/templates/ArrayFieldTemplate.js.map +0 -1
- package/lib/components/templates/ArrayFieldTitleTemplate.js.map +0 -1
- package/lib/components/templates/BaseInputTemplate.js.map +0 -1
- package/lib/components/templates/ButtonTemplates/AddButton.js.map +0 -1
- package/lib/components/templates/ButtonTemplates/IconButton.js.map +0 -1
- package/lib/components/templates/ButtonTemplates/SubmitButton.js.map +0 -1
- package/lib/components/templates/ButtonTemplates/index.js.map +0 -1
- package/lib/components/templates/DescriptionField.js.map +0 -1
- package/lib/components/templates/ErrorList.js.map +0 -1
- package/lib/components/templates/FieldErrorTemplate.js.map +0 -1
- package/lib/components/templates/FieldHelpTemplate.js.map +0 -1
- package/lib/components/templates/FieldTemplate/FieldTemplate.js.map +0 -1
- package/lib/components/templates/FieldTemplate/Label.js.map +0 -1
- package/lib/components/templates/FieldTemplate/index.js.map +0 -1
- package/lib/components/templates/ObjectFieldTemplate.js.map +0 -1
- package/lib/components/templates/TitleField.js.map +0 -1
- package/lib/components/templates/UnsupportedField.js.map +0 -1
- package/lib/components/templates/WrapIfAdditionalTemplate.js.map +0 -1
- package/lib/components/templates/index.js.map +0 -1
- package/lib/components/widgets/AltDateTimeWidget.js.map +0 -1
- package/lib/components/widgets/AltDateWidget.js.map +0 -1
- package/lib/components/widgets/CheckboxWidget.js.map +0 -1
- package/lib/components/widgets/CheckboxesWidget.js.map +0 -1
- package/lib/components/widgets/ColorWidget.js.map +0 -1
- package/lib/components/widgets/DateTimeWidget.js.map +0 -1
- package/lib/components/widgets/DateWidget.js.map +0 -1
- package/lib/components/widgets/EmailWidget.js.map +0 -1
- package/lib/components/widgets/FileWidget.js.map +0 -1
- package/lib/components/widgets/HiddenWidget.js.map +0 -1
- package/lib/components/widgets/PasswordWidget.js.map +0 -1
- package/lib/components/widgets/RadioWidget.js.map +0 -1
- package/lib/components/widgets/RangeWidget.js.map +0 -1
- package/lib/components/widgets/SelectWidget.js.map +0 -1
- package/lib/components/widgets/TextWidget.js.map +0 -1
- package/lib/components/widgets/TextareaWidget.js.map +0 -1
- package/lib/components/widgets/TimeWidget.js.map +0 -1
- package/lib/components/widgets/URLWidget.js.map +0 -1
- package/lib/components/widgets/UpDownWidget.js.map +0 -1
- package/lib/components/widgets/index.js.map +0 -1
- package/lib/getDefaultRegistry.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/withTheme.js.map +0 -1
|
@@ -85,9 +85,12 @@ function AltDateWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F exten
|
|
|
85
85
|
}: WidgetProps<T, S, F>) {
|
|
86
86
|
const { translateString } = registry;
|
|
87
87
|
const [lastValue, setLastValue] = useState(value);
|
|
88
|
-
const [state, setState] = useReducer(
|
|
89
|
-
|
|
90
|
-
|
|
88
|
+
const [state, setState] = useReducer(
|
|
89
|
+
(state: DateObject, action: Partial<DateObject>) => {
|
|
90
|
+
return { ...state, ...action };
|
|
91
|
+
},
|
|
92
|
+
parseDateString(value, time),
|
|
93
|
+
);
|
|
91
94
|
|
|
92
95
|
useEffect(() => {
|
|
93
96
|
const stateValue = toDateString(state, time);
|
|
@@ -114,7 +117,7 @@ function AltDateWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F exten
|
|
|
114
117
|
const nextState = parseDateString(new Date().toJSON(), time);
|
|
115
118
|
onChange(toDateString(nextState, time));
|
|
116
119
|
},
|
|
117
|
-
[disabled, readonly, time]
|
|
120
|
+
[disabled, readonly, time],
|
|
118
121
|
);
|
|
119
122
|
|
|
120
123
|
const handleClear = useCallback(
|
|
@@ -125,7 +128,7 @@ function AltDateWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F exten
|
|
|
125
128
|
}
|
|
126
129
|
onChange(undefined);
|
|
127
130
|
},
|
|
128
|
-
[disabled, readonly, onChange]
|
|
131
|
+
[disabled, readonly, onChange],
|
|
129
132
|
);
|
|
130
133
|
|
|
131
134
|
return (
|
|
@@ -134,7 +137,7 @@ function AltDateWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F exten
|
|
|
134
137
|
state,
|
|
135
138
|
time,
|
|
136
139
|
options.yearsRange as [number, number] | undefined,
|
|
137
|
-
options.format as DateElementFormat | undefined
|
|
140
|
+
options.format as DateElementFormat | undefined,
|
|
138
141
|
).map((elemProps, i) => (
|
|
139
142
|
<li className='list-inline-item' key={i}>
|
|
140
143
|
<DateElement
|
|
@@ -35,7 +35,7 @@ function CheckboxWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F exte
|
|
|
35
35
|
const DescriptionFieldTemplate = getTemplate<'DescriptionFieldTemplate', T, S, F>(
|
|
36
36
|
'DescriptionFieldTemplate',
|
|
37
37
|
registry,
|
|
38
|
-
options
|
|
38
|
+
options,
|
|
39
39
|
);
|
|
40
40
|
// Because an unchecked checkbox will cause html5 validation to fail, only add
|
|
41
41
|
// the "required" attribute if the field value must be "true", due to the
|
|
@@ -44,23 +44,23 @@ function CheckboxWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F exte
|
|
|
44
44
|
|
|
45
45
|
const handleChange = useCallback(
|
|
46
46
|
(event: ChangeEvent<HTMLInputElement>) => onChange(event.target.checked),
|
|
47
|
-
[onChange]
|
|
47
|
+
[onChange],
|
|
48
48
|
);
|
|
49
49
|
|
|
50
50
|
const handleBlur = useCallback(
|
|
51
51
|
(event: FocusEvent<HTMLInputElement>) => onBlur(id, event.target.checked),
|
|
52
|
-
[onBlur, id]
|
|
52
|
+
[onBlur, id],
|
|
53
53
|
);
|
|
54
54
|
|
|
55
55
|
const handleFocus = useCallback(
|
|
56
56
|
(event: FocusEvent<HTMLInputElement>) => onFocus(id, event.target.checked),
|
|
57
|
-
[onFocus, id]
|
|
57
|
+
[onFocus, id],
|
|
58
58
|
);
|
|
59
59
|
const description = options.description ?? schema.description;
|
|
60
60
|
|
|
61
61
|
return (
|
|
62
62
|
<div className={`checkbox ${disabled || readonly ? 'disabled' : ''}`}>
|
|
63
|
-
{!hideLabel &&
|
|
63
|
+
{!hideLabel && description && (
|
|
64
64
|
<DescriptionFieldTemplate
|
|
65
65
|
id={descriptionId<T>(id)}
|
|
66
66
|
description={description}
|
|
@@ -33,13 +33,13 @@ function CheckboxesWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F ex
|
|
|
33
33
|
const handleBlur = useCallback(
|
|
34
34
|
({ target }: FocusEvent<HTMLInputElement>) =>
|
|
35
35
|
onBlur(id, enumOptionsValueForIndex<S>(target && target.value, enumOptions, emptyValue)),
|
|
36
|
-
[onBlur, id]
|
|
36
|
+
[onBlur, id],
|
|
37
37
|
);
|
|
38
38
|
|
|
39
39
|
const handleFocus = useCallback(
|
|
40
40
|
({ target }: FocusEvent<HTMLInputElement>) =>
|
|
41
41
|
onFocus(id, enumOptionsValueForIndex<S>(target && target.value, enumOptions, emptyValue)),
|
|
42
|
-
[onFocus, id]
|
|
42
|
+
[onFocus, id],
|
|
43
43
|
);
|
|
44
44
|
return (
|
|
45
45
|
<div className='checkboxes' id={id}>
|
|
@@ -6,7 +6,7 @@ import { getTemplate, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps
|
|
|
6
6
|
* @param props - The `WidgetProps` for this component
|
|
7
7
|
*/
|
|
8
8
|
export default function ColorWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>(
|
|
9
|
-
props: WidgetProps<T, S, F
|
|
9
|
+
props: WidgetProps<T, S, F>,
|
|
10
10
|
) {
|
|
11
11
|
const { disabled, readonly, options, registry } = props;
|
|
12
12
|
const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options);
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
export default function DateTimeWidget<
|
|
17
17
|
T = any,
|
|
18
18
|
S extends StrictRJSFSchema = RJSFSchema,
|
|
19
|
-
F extends FormContextType = any
|
|
19
|
+
F extends FormContextType = any,
|
|
20
20
|
>(props: WidgetProps<T, S, F>) {
|
|
21
21
|
const { onChange, value, options, registry } = props;
|
|
22
22
|
const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options);
|
|
@@ -7,7 +7,7 @@ import { getTemplate, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps
|
|
|
7
7
|
* @param props - The `WidgetProps` for this component
|
|
8
8
|
*/
|
|
9
9
|
export default function DateWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>(
|
|
10
|
-
props: WidgetProps<T, S, F
|
|
10
|
+
props: WidgetProps<T, S, F>,
|
|
11
11
|
) {
|
|
12
12
|
const { onChange, options, registry } = props;
|
|
13
13
|
const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options);
|
|
@@ -5,7 +5,7 @@ import { getTemplate, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps
|
|
|
5
5
|
* @param props - The `WidgetProps` for this component
|
|
6
6
|
*/
|
|
7
7
|
export default function EmailWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>(
|
|
8
|
-
props: WidgetProps<T, S, F
|
|
8
|
+
props: WidgetProps<T, S, F>,
|
|
9
9
|
) {
|
|
10
10
|
const { options, registry } = props;
|
|
11
11
|
const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options);
|
|
@@ -141,7 +141,7 @@ function extractFileInfo(dataURLs: string[]): FileInfoType[] {
|
|
|
141
141
|
type: blob.type,
|
|
142
142
|
},
|
|
143
143
|
];
|
|
144
|
-
} catch
|
|
144
|
+
} catch {
|
|
145
145
|
// Invalid dataURI, so just ignore it.
|
|
146
146
|
return acc;
|
|
147
147
|
}
|
|
@@ -153,7 +153,7 @@ function extractFileInfo(dataURLs: string[]): FileInfoType[] {
|
|
|
153
153
|
* It is typically used with a string property with data-url format.
|
|
154
154
|
*/
|
|
155
155
|
function FileWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>(
|
|
156
|
-
props: WidgetProps<T, S, F
|
|
156
|
+
props: WidgetProps<T, S, F>,
|
|
157
157
|
) {
|
|
158
158
|
const { disabled, readonly, required, multiple, onChange, value, options, registry } = props;
|
|
159
159
|
const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options);
|
|
@@ -169,13 +169,13 @@ function FileWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends
|
|
|
169
169
|
processFiles(event.target.files).then((filesInfoEvent) => {
|
|
170
170
|
const newValue = filesInfoEvent.map((fileInfo) => fileInfo.dataURL);
|
|
171
171
|
if (multiple) {
|
|
172
|
-
onChange(value.concat(newValue
|
|
172
|
+
onChange(value.concat(newValue));
|
|
173
173
|
} else {
|
|
174
174
|
onChange(newValue[0]);
|
|
175
175
|
}
|
|
176
176
|
});
|
|
177
177
|
},
|
|
178
|
-
[multiple, value, onChange]
|
|
178
|
+
[multiple, value, onChange],
|
|
179
179
|
);
|
|
180
180
|
|
|
181
181
|
const filesInfo = useMemo(() => extractFileInfo(Array.isArray(value) ? value : [value]), [value]);
|
|
@@ -188,7 +188,7 @@ function FileWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends
|
|
|
188
188
|
onChange(undefined);
|
|
189
189
|
}
|
|
190
190
|
},
|
|
191
|
-
[multiple, value, onChange]
|
|
191
|
+
[multiple, value, onChange],
|
|
192
192
|
);
|
|
193
193
|
return (
|
|
194
194
|
<div>
|
|
@@ -7,7 +7,7 @@ import { getTemplate, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps
|
|
|
7
7
|
export default function PasswordWidget<
|
|
8
8
|
T = any,
|
|
9
9
|
S extends StrictRJSFSchema = RJSFSchema,
|
|
10
|
-
F extends FormContextType = any
|
|
10
|
+
F extends FormContextType = any,
|
|
11
11
|
>(props: WidgetProps<T, S, F>) {
|
|
12
12
|
const { options, registry } = props;
|
|
13
13
|
const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options);
|
|
@@ -32,17 +32,17 @@ function RadioWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends
|
|
|
32
32
|
const handleBlur = useCallback(
|
|
33
33
|
({ target }: FocusEvent<HTMLInputElement>) =>
|
|
34
34
|
onBlur(id, enumOptionsValueForIndex<S>(target && target.value, enumOptions, emptyValue)),
|
|
35
|
-
[onBlur, id]
|
|
35
|
+
[onBlur, enumOptions, emptyValue, id],
|
|
36
36
|
);
|
|
37
37
|
|
|
38
38
|
const handleFocus = useCallback(
|
|
39
39
|
({ target }: FocusEvent<HTMLInputElement>) =>
|
|
40
40
|
onFocus(id, enumOptionsValueForIndex<S>(target && target.value, enumOptions, emptyValue)),
|
|
41
|
-
[onFocus, id]
|
|
41
|
+
[onFocus, enumOptions, emptyValue, id],
|
|
42
42
|
);
|
|
43
43
|
|
|
44
44
|
return (
|
|
45
|
-
<div className='field-radio-group' id={id}>
|
|
45
|
+
<div className='field-radio-group' id={id} role='radiogroup'>
|
|
46
46
|
{Array.isArray(enumOptions) &&
|
|
47
47
|
enumOptions.map((option, i) => {
|
|
48
48
|
const checked = enumOptionsIsSelected<S>(option.value, value);
|
|
@@ -6,7 +6,7 @@ import { FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps } from '@rjs
|
|
|
6
6
|
* @param props - The `WidgetProps` for this component
|
|
7
7
|
*/
|
|
8
8
|
export default function RangeWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>(
|
|
9
|
-
props: WidgetProps<T, S, F
|
|
9
|
+
props: WidgetProps<T, S, F>,
|
|
10
10
|
) {
|
|
11
11
|
const {
|
|
12
12
|
value,
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { FocusEvent, useCallback } from 'react';
|
|
2
|
+
import { FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps } from '@rjsf/utils';
|
|
3
|
+
|
|
4
|
+
/** The `RatingWidget` component renders a star or heart rating input
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - Configurable number of stars/hearts (1-5) with default of 5
|
|
8
|
+
* - Supports different shapes (star, heart)
|
|
9
|
+
* - Supports minimum and maximum values from schema
|
|
10
|
+
* - Handles required, disabled, and readonly states
|
|
11
|
+
* - Provides focus and blur event handling for accessibility
|
|
12
|
+
* - Uses Unicode characters for better visual representation
|
|
13
|
+
*
|
|
14
|
+
* @param props - The `WidgetProps` for this component
|
|
15
|
+
*/
|
|
16
|
+
export default function RatingWidget<
|
|
17
|
+
T = any,
|
|
18
|
+
S extends StrictRJSFSchema = RJSFSchema,
|
|
19
|
+
F extends FormContextType = any,
|
|
20
|
+
>({
|
|
21
|
+
id,
|
|
22
|
+
value,
|
|
23
|
+
required,
|
|
24
|
+
disabled,
|
|
25
|
+
readonly,
|
|
26
|
+
autofocus,
|
|
27
|
+
onChange,
|
|
28
|
+
onFocus,
|
|
29
|
+
onBlur,
|
|
30
|
+
schema,
|
|
31
|
+
options,
|
|
32
|
+
}: WidgetProps<T, S, F>) {
|
|
33
|
+
const { stars = 5, shape = 'star' } = options;
|
|
34
|
+
|
|
35
|
+
// Use schema.maximum if provided, otherwise use stars option (limited to 1-5)
|
|
36
|
+
const numStars = schema.maximum ? Math.min(schema.maximum, 5) : Math.min(Math.max(stars as number, 1), 5);
|
|
37
|
+
const min = schema.minimum || 0;
|
|
38
|
+
|
|
39
|
+
/** Handles clicking on a star to set the rating */
|
|
40
|
+
const handleStarClick = useCallback(
|
|
41
|
+
(starValue: number) => {
|
|
42
|
+
if (!disabled && !readonly) {
|
|
43
|
+
onChange(starValue);
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
[onChange, disabled, readonly],
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
/** Handles focus events for accessibility */
|
|
50
|
+
const handleFocus = useCallback(
|
|
51
|
+
(event: FocusEvent<HTMLSpanElement>) => {
|
|
52
|
+
if (onFocus) {
|
|
53
|
+
// Get the star value from the data attribute
|
|
54
|
+
const starValue = Number((event.target as HTMLElement).dataset.value);
|
|
55
|
+
onFocus(id, starValue);
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
[onFocus, id],
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
/** Handles blur events for accessibility */
|
|
62
|
+
const handleBlur = useCallback(
|
|
63
|
+
(event: FocusEvent<HTMLSpanElement>) => {
|
|
64
|
+
if (onBlur) {
|
|
65
|
+
// Get the star value from the data attribute
|
|
66
|
+
const starValue = Number((event.target as HTMLElement).dataset.value);
|
|
67
|
+
onBlur(id, starValue);
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
[onBlur, id],
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
// Get the appropriate Unicode character based on shape option
|
|
74
|
+
const getSymbol = (isFilled: boolean): string => {
|
|
75
|
+
if (shape === 'heart') {
|
|
76
|
+
return isFilled ? '♥' : '♡';
|
|
77
|
+
}
|
|
78
|
+
return isFilled ? '★' : '☆';
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
return (
|
|
82
|
+
<>
|
|
83
|
+
<div
|
|
84
|
+
className='rating-widget'
|
|
85
|
+
style={{
|
|
86
|
+
display: 'inline-flex',
|
|
87
|
+
fontSize: '1.5rem',
|
|
88
|
+
cursor: disabled || readonly ? 'default' : 'pointer',
|
|
89
|
+
}}
|
|
90
|
+
>
|
|
91
|
+
{[...Array(numStars)].map((_, index) => {
|
|
92
|
+
const starValue = min + index;
|
|
93
|
+
const isFilled = starValue <= value;
|
|
94
|
+
|
|
95
|
+
return (
|
|
96
|
+
<span
|
|
97
|
+
key={index}
|
|
98
|
+
onClick={() => handleStarClick(starValue)}
|
|
99
|
+
onFocus={handleFocus}
|
|
100
|
+
onBlur={handleBlur}
|
|
101
|
+
data-value={starValue}
|
|
102
|
+
tabIndex={disabled || readonly ? -1 : 0}
|
|
103
|
+
role='radio'
|
|
104
|
+
aria-checked={starValue === value}
|
|
105
|
+
aria-label={`${starValue} ${shape === 'heart' ? 'heart' : 'star'}${starValue === 1 ? '' : 's'}`}
|
|
106
|
+
style={{
|
|
107
|
+
color: isFilled ? '#FFD700' : '#ccc',
|
|
108
|
+
padding: '0 0.2rem',
|
|
109
|
+
transition: 'color 0.2s',
|
|
110
|
+
userSelect: 'none',
|
|
111
|
+
}}
|
|
112
|
+
>
|
|
113
|
+
{getSymbol(isFilled)}
|
|
114
|
+
</span>
|
|
115
|
+
);
|
|
116
|
+
})}
|
|
117
|
+
<input
|
|
118
|
+
type='hidden'
|
|
119
|
+
id={id}
|
|
120
|
+
name={id}
|
|
121
|
+
value={value || ''}
|
|
122
|
+
required={required}
|
|
123
|
+
disabled={disabled || readonly}
|
|
124
|
+
aria-hidden='true'
|
|
125
|
+
/>
|
|
126
|
+
</div>
|
|
127
|
+
</>
|
|
128
|
+
);
|
|
129
|
+
}
|
|
@@ -47,7 +47,7 @@ function SelectWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extend
|
|
|
47
47
|
const newValue = getValue(event, multiple);
|
|
48
48
|
return onFocus(id, enumOptionsValueForIndex<S>(newValue, enumOptions, optEmptyVal));
|
|
49
49
|
},
|
|
50
|
-
[onFocus, id,
|
|
50
|
+
[onFocus, id, multiple, enumOptions, optEmptyVal],
|
|
51
51
|
);
|
|
52
52
|
|
|
53
53
|
const handleBlur = useCallback(
|
|
@@ -55,7 +55,7 @@ function SelectWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extend
|
|
|
55
55
|
const newValue = getValue(event, multiple);
|
|
56
56
|
return onBlur(id, enumOptionsValueForIndex<S>(newValue, enumOptions, optEmptyVal));
|
|
57
57
|
},
|
|
58
|
-
[onBlur, id,
|
|
58
|
+
[onBlur, id, multiple, enumOptions, optEmptyVal],
|
|
59
59
|
);
|
|
60
60
|
|
|
61
61
|
const handleChange = useCallback(
|
|
@@ -63,7 +63,7 @@ function SelectWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extend
|
|
|
63
63
|
const newValue = getValue(event, multiple);
|
|
64
64
|
return onChange(enumOptionsValueForIndex<S>(newValue, enumOptions, optEmptyVal));
|
|
65
65
|
},
|
|
66
|
-
[onChange,
|
|
66
|
+
[onChange, multiple, enumOptions, optEmptyVal],
|
|
67
67
|
);
|
|
68
68
|
|
|
69
69
|
const selectedIndexes = enumOptionsIndexForValue<S>(value, enumOptions, multiple);
|
|
@@ -74,6 +74,7 @@ function SelectWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extend
|
|
|
74
74
|
id={id}
|
|
75
75
|
name={id}
|
|
76
76
|
multiple={multiple}
|
|
77
|
+
role='combobox'
|
|
77
78
|
className='form-control'
|
|
78
79
|
value={typeof selectedIndexes === 'undefined' ? emptyValue : selectedIndexes}
|
|
79
80
|
required={required}
|
|
@@ -5,7 +5,7 @@ import { getTemplate, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps
|
|
|
5
5
|
* @param props - The `WidgetProps` for this component
|
|
6
6
|
*/
|
|
7
7
|
export default function TextWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>(
|
|
8
|
-
props: WidgetProps<T, S, F
|
|
8
|
+
props: WidgetProps<T, S, F>,
|
|
9
9
|
) {
|
|
10
10
|
const { options, registry } = props;
|
|
11
11
|
const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options);
|
|
@@ -20,17 +20,17 @@ function TextareaWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F exte
|
|
|
20
20
|
}: WidgetProps<T, S, F>) {
|
|
21
21
|
const handleChange = useCallback(
|
|
22
22
|
({ target: { value } }: ChangeEvent<HTMLTextAreaElement>) => onChange(value === '' ? options.emptyValue : value),
|
|
23
|
-
[onChange, options.emptyValue]
|
|
23
|
+
[onChange, options.emptyValue],
|
|
24
24
|
);
|
|
25
25
|
|
|
26
26
|
const handleBlur = useCallback(
|
|
27
27
|
({ target }: FocusEvent<HTMLTextAreaElement>) => onBlur(id, target && target.value),
|
|
28
|
-
[onBlur, id]
|
|
28
|
+
[onBlur, id],
|
|
29
29
|
);
|
|
30
30
|
|
|
31
31
|
const handleFocus = useCallback(
|
|
32
32
|
({ target }: FocusEvent<HTMLTextAreaElement>) => onFocus(id, target && target.value),
|
|
33
|
-
[id, onFocus]
|
|
33
|
+
[id, onFocus],
|
|
34
34
|
);
|
|
35
35
|
|
|
36
36
|
return (
|
|
@@ -7,7 +7,7 @@ import { getTemplate, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps
|
|
|
7
7
|
* @param props - The `WidgetProps` for this component
|
|
8
8
|
*/
|
|
9
9
|
export default function TimeWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>(
|
|
10
|
-
props: WidgetProps<T, S, F
|
|
10
|
+
props: WidgetProps<T, S, F>,
|
|
11
11
|
) {
|
|
12
12
|
const { onChange, options, registry } = props;
|
|
13
13
|
const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options);
|
|
@@ -5,7 +5,7 @@ import { getTemplate, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps
|
|
|
5
5
|
* @param props - The `WidgetProps` for this component
|
|
6
6
|
*/
|
|
7
7
|
export default function URLWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>(
|
|
8
|
-
props: WidgetProps<T, S, F
|
|
8
|
+
props: WidgetProps<T, S, F>,
|
|
9
9
|
) {
|
|
10
10
|
const { options, registry } = props;
|
|
11
11
|
const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options);
|
|
@@ -5,7 +5,7 @@ import { getTemplate, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps
|
|
|
5
5
|
* @param props - The `WidgetProps` for this component
|
|
6
6
|
*/
|
|
7
7
|
export default function UpDownWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>(
|
|
8
|
-
props: WidgetProps<T, S, F
|
|
8
|
+
props: WidgetProps<T, S, F>,
|
|
9
9
|
) {
|
|
10
10
|
const { options, registry } = props;
|
|
11
11
|
const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options);
|
|
@@ -13,6 +13,7 @@ import HiddenWidget from './HiddenWidget';
|
|
|
13
13
|
import PasswordWidget from './PasswordWidget';
|
|
14
14
|
import RadioWidget from './RadioWidget';
|
|
15
15
|
import RangeWidget from './RangeWidget';
|
|
16
|
+
import RatingWidget from './RatingWidget';
|
|
16
17
|
import SelectWidget from './SelectWidget';
|
|
17
18
|
import TextareaWidget from './TextareaWidget';
|
|
18
19
|
import TextWidget from './TextWidget';
|
|
@@ -23,7 +24,7 @@ import UpDownWidget from './UpDownWidget';
|
|
|
23
24
|
function widgets<
|
|
24
25
|
T = any,
|
|
25
26
|
S extends StrictRJSFSchema = RJSFSchema,
|
|
26
|
-
F extends FormContextType = any
|
|
27
|
+
F extends FormContextType = any,
|
|
27
28
|
>(): RegistryWidgetsType<T, S, F> {
|
|
28
29
|
return {
|
|
29
30
|
AltDateWidget,
|
|
@@ -39,6 +40,7 @@ function widgets<
|
|
|
39
40
|
PasswordWidget,
|
|
40
41
|
RadioWidget,
|
|
41
42
|
RangeWidget,
|
|
43
|
+
RatingWidget,
|
|
42
44
|
SelectWidget,
|
|
43
45
|
TextWidget,
|
|
44
46
|
TextareaWidget,
|
|
@@ -11,7 +11,7 @@ import widgets from './components/widgets';
|
|
|
11
11
|
export default function getDefaultRegistry<
|
|
12
12
|
T = any,
|
|
13
13
|
S extends StrictRJSFSchema = RJSFSchema,
|
|
14
|
-
F extends FormContextType = any
|
|
14
|
+
F extends FormContextType = any,
|
|
15
15
|
>(): Omit<Registry<T, S, F>, 'schemaUtils'> {
|
|
16
16
|
return {
|
|
17
17
|
fields: fields<T, S, F>(),
|
package/src/index.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import Form, { FormProps, FormState, IChangeEvent } from './components/Form';
|
|
2
|
+
import RichDescription, { RichDescriptionProps } from './components/RichDescription';
|
|
2
3
|
import withTheme, { ThemeProps } from './withTheme';
|
|
3
4
|
import getDefaultRegistry from './getDefaultRegistry';
|
|
4
5
|
|
|
5
|
-
export type { FormProps, FormState, IChangeEvent, ThemeProps };
|
|
6
|
+
export type { FormProps, FormState, IChangeEvent, ThemeProps, RichDescriptionProps };
|
|
6
7
|
|
|
7
|
-
export { withTheme, getDefaultRegistry };
|
|
8
|
+
export { withTheme, getDefaultRegistry, RichDescription };
|
|
8
9
|
export default Form;
|
package/src/tsconfig.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"extends": "../../../tsconfig.
|
|
2
|
+
"extends": "../../../tsconfig.build.json",
|
|
3
3
|
"include": [
|
|
4
4
|
"./"
|
|
5
5
|
],
|
|
@@ -7,17 +7,25 @@
|
|
|
7
7
|
"rootDir": "./",
|
|
8
8
|
"outDir": "../lib",
|
|
9
9
|
"baseUrl": "../",
|
|
10
|
-
"jsx": "react-jsx"
|
|
10
|
+
"jsx": "react-jsx",
|
|
11
|
+
"composite": true
|
|
11
12
|
},
|
|
12
13
|
"references": [
|
|
13
14
|
{
|
|
14
15
|
"path": "../../utils"
|
|
15
16
|
},
|
|
16
|
-
{
|
|
17
|
-
"path": "../../validator-ajv6"
|
|
18
|
-
},
|
|
19
17
|
{
|
|
20
18
|
"path": "../../validator-ajv8"
|
|
21
19
|
}
|
|
22
|
-
]
|
|
20
|
+
],
|
|
21
|
+
"tsc-alias": {
|
|
22
|
+
"resolveFullPaths": true,
|
|
23
|
+
"verbose": true,
|
|
24
|
+
"replacers": {
|
|
25
|
+
"lodash": {
|
|
26
|
+
"enabled": true,
|
|
27
|
+
"file": "lodashReplacer.js"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
23
31
|
}
|
package/src/withTheme.tsx
CHANGED
|
@@ -12,9 +12,10 @@ export type ThemeProps<T = any, S extends StrictRJSFSchema = RJSFSchema, F exten
|
|
|
12
12
|
|
|
13
13
|
/** A Higher-Order component that creates a wrapper around a `Form` with the overrides from the `WithThemeProps` */
|
|
14
14
|
export default function withTheme<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>(
|
|
15
|
-
themeProps: ThemeProps<T, S, F
|
|
15
|
+
themeProps: ThemeProps<T, S, F>,
|
|
16
16
|
): ComponentType<FormProps<T, S, F>> {
|
|
17
|
-
|
|
17
|
+
// @ts-expect-error TS2322 because the latest types complain about LegacyRef's string form not working with Form
|
|
18
|
+
return forwardRef<Form<T, S, F>, FormProps<T, S, F>>(
|
|
18
19
|
({ fields, widgets, templates, ...directProps }: FormProps<T, S, F>, ref: ForwardedRef<Form<T, S, F>>) => {
|
|
19
20
|
fields = { ...themeProps?.fields, ...fields };
|
|
20
21
|
widgets = { ...themeProps?.widgets, ...widgets };
|
|
@@ -37,6 +38,6 @@ export default function withTheme<T = any, S extends StrictRJSFSchema = RJSFSche
|
|
|
37
38
|
ref={ref}
|
|
38
39
|
/>
|
|
39
40
|
);
|
|
40
|
-
}
|
|
41
|
+
},
|
|
41
42
|
);
|
|
42
43
|
}
|