@rjsf/daisyui 6.0.0-beta.21 → 6.0.0-beta.23

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.
Files changed (60) hide show
  1. package/dist/chakra-ui.esm.js +169 -355
  2. package/dist/chakra-ui.esm.js.map +4 -4
  3. package/dist/chakra-ui.umd.js +60 -237
  4. package/dist/index.cjs +186 -370
  5. package/dist/index.cjs.map +4 -4
  6. package/lib/templates/ArrayFieldItemButtonsTemplate/ArrayFieldItemButtonsTemplate.d.ts +2 -2
  7. package/lib/templates/ArrayFieldItemButtonsTemplate/ArrayFieldItemButtonsTemplate.js +2 -7
  8. package/lib/templates/ArrayFieldItemButtonsTemplate/ArrayFieldItemButtonsTemplate.js.map +1 -1
  9. package/lib/templates/ArrayFieldItemTemplate/ArrayFieldItemTemplate.d.ts +3 -3
  10. package/lib/templates/ArrayFieldItemTemplate/ArrayFieldItemTemplate.js +1 -1
  11. package/lib/templates/ArrayFieldItemTemplate/ArrayFieldItemTemplate.js.map +1 -1
  12. package/lib/templates/ArrayFieldTemplate/ArrayFieldTemplate.js +1 -2
  13. package/lib/templates/ArrayFieldTemplate/ArrayFieldTemplate.js.map +1 -1
  14. package/lib/templates/BaseInputTemplate/BaseInputTemplate.js +8 -2
  15. package/lib/templates/BaseInputTemplate/BaseInputTemplate.js.map +1 -1
  16. package/lib/templates/FieldTemplate/FieldTemplate.js +3 -3
  17. package/lib/templates/FieldTemplate/FieldTemplate.js.map +1 -1
  18. package/lib/templates/ObjectFieldTemplate/ObjectFieldTemplate.js +2 -2
  19. package/lib/templates/ObjectFieldTemplate/ObjectFieldTemplate.js.map +1 -1
  20. package/lib/templates/WrapIfAdditionalTemplate/WrapIfAdditionalTemplate.js +2 -9
  21. package/lib/templates/WrapIfAdditionalTemplate/WrapIfAdditionalTemplate.js.map +1 -1
  22. package/lib/tsconfig.tsbuildinfo +1 -1
  23. package/lib/widgets/AltDateWidget/AltDateWidget.d.ts +1 -1
  24. package/lib/widgets/AltDateWidget/AltDateWidget.js +5 -121
  25. package/lib/widgets/AltDateWidget/AltDateWidget.js.map +1 -1
  26. package/lib/widgets/CheckboxWidget/CheckboxWidget.js +2 -2
  27. package/lib/widgets/CheckboxWidget/CheckboxWidget.js.map +1 -1
  28. package/lib/widgets/CheckboxesWidget/CheckboxesWidget.d.ts +1 -1
  29. package/lib/widgets/CheckboxesWidget/CheckboxesWidget.js +2 -2
  30. package/lib/widgets/CheckboxesWidget/CheckboxesWidget.js.map +1 -1
  31. package/lib/widgets/RadioWidget/RadioWidget.d.ts +1 -1
  32. package/lib/widgets/RadioWidget/RadioWidget.js +2 -2
  33. package/lib/widgets/RadioWidget/RadioWidget.js.map +1 -1
  34. package/lib/widgets/TextareaWidget/TextareaWidget.js +2 -2
  35. package/lib/widgets/TextareaWidget/TextareaWidget.js.map +1 -1
  36. package/lib/widgets/Widgets.d.ts +1 -2
  37. package/lib/widgets/Widgets.js +1 -3
  38. package/lib/widgets/Widgets.js.map +1 -1
  39. package/package.json +7 -7
  40. package/src/templates/ArrayFieldItemButtonsTemplate/ArrayFieldItemButtonsTemplate.tsx +10 -15
  41. package/src/templates/ArrayFieldItemTemplate/ArrayFieldItemTemplate.tsx +3 -3
  42. package/src/templates/ArrayFieldTemplate/ArrayFieldTemplate.tsx +1 -8
  43. package/src/templates/BaseInputTemplate/BaseInputTemplate.tsx +11 -3
  44. package/src/templates/FieldTemplate/FieldTemplate.tsx +9 -7
  45. package/src/templates/ObjectFieldTemplate/ObjectFieldTemplate.tsx +2 -2
  46. package/src/templates/WrapIfAdditionalTemplate/WrapIfAdditionalTemplate.tsx +5 -16
  47. package/src/widgets/AltDateWidget/AltDateWidget.tsx +18 -253
  48. package/src/widgets/CheckboxWidget/CheckboxWidget.tsx +2 -0
  49. package/src/widgets/CheckboxesWidget/CheckboxesWidget.tsx +2 -1
  50. package/src/widgets/RadioWidget/RadioWidget.tsx +2 -1
  51. package/src/widgets/TextareaWidget/TextareaWidget.tsx +2 -1
  52. package/src/widgets/Widgets.tsx +0 -3
  53. package/lib/widgets/FileWidget/FileWidget.d.ts +0 -12
  54. package/lib/widgets/FileWidget/FileWidget.js +0 -57
  55. package/lib/widgets/FileWidget/FileWidget.js.map +0 -1
  56. package/lib/widgets/FileWidget/index.d.ts +0 -2
  57. package/lib/widgets/FileWidget/index.js +0 -3
  58. package/lib/widgets/FileWidget/index.js.map +0 -1
  59. package/src/widgets/FileWidget/FileWidget.tsx +0 -86
  60. package/src/widgets/FileWidget/index.ts +0 -2
@@ -13,19 +13,15 @@
13
13
  hasMoveUp,
14
14
  hasRemove,
15
15
  fieldPathId,
16
- index,
17
- onCopyIndexClick,
18
- onDropIndexClick,
19
- onReorderClick,
16
+ onCopyItem,
17
+ onRemoveItem,
18
+ onMoveDownItem,
19
+ onMoveUpItem,
20
20
  readonly,
21
21
  registry,
22
22
  uiSchema
23
23
  } = props;
24
24
  const { CopyButton: CopyButton2, MoveDownButton: MoveDownButton2, MoveUpButton: MoveUpButton2, RemoveButton: RemoveButton2 } = registry.templates.ButtonTemplates;
25
- const onCopyClick = react.useMemo(() => onCopyIndexClick(index), [index, onCopyIndexClick]);
26
- const onRemoveClick = react.useMemo(() => onDropIndexClick(index), [index, onDropIndexClick]);
27
- const onArrowUpClick = react.useMemo(() => onReorderClick(index, index - 1), [index, onReorderClick]);
28
- const onArrowDownClick = react.useMemo(() => onReorderClick(index, index + 1), [index, onReorderClick]);
29
25
  const renderMany = [hasMoveUp || hasMoveDown, hasCopy, hasRemove].filter(Boolean).length > 1;
30
26
  const btnClass = renderMany ? "join-item btn btn-sm px-2" : "btn btn-sm px-2 rounded-sm";
31
27
  const removeBtnClass = renderMany ? "join-item btn btn-sm btn-error px-2" : "btn btn-sm btn-error px-2 rounded-sm";
@@ -37,7 +33,7 @@
37
33
  id: utils.buttonId(fieldPathId, "moveUp"),
38
34
  className: `rjsf-array-item-move-up ${btnClass}`,
39
35
  disabled: disabled || readonly || !hasMoveUp,
40
- onClick: onArrowUpClick,
36
+ onClick: onMoveUpItem,
41
37
  uiSchema,
42
38
  registry
43
39
  }
@@ -48,7 +44,7 @@
48
44
  id: utils.buttonId(fieldPathId, "moveDown"),
49
45
  className: `rjsf-array-item-move-down ${btnClass}`,
50
46
  disabled: disabled || readonly || !hasMoveDown,
51
- onClick: onArrowDownClick,
47
+ onClick: onMoveDownItem,
52
48
  uiSchema,
53
49
  registry
54
50
  }
@@ -60,7 +56,7 @@
60
56
  id: utils.buttonId(fieldPathId, "copy"),
61
57
  className: `rjsf-array-item-copy ${btnClass}`,
62
58
  disabled: disabled || readonly,
63
- onClick: onCopyClick,
59
+ onClick: onCopyItem,
64
60
  uiSchema,
65
61
  registry
66
62
  }
@@ -71,7 +67,7 @@
71
67
  id: utils.buttonId(fieldPathId, "remove"),
72
68
  className: `rjsf-array-item-remove ${removeBtnClass}`,
73
69
  disabled: disabled || readonly,
74
- onClick: onRemoveClick,
70
+ onClick: onRemoveItem,
75
71
  uiSchema,
76
72
  registry
77
73
  }
@@ -119,11 +115,6 @@
119
115
  registry,
120
116
  uiOptions
121
117
  );
122
- const ArrayFieldItemTemplate2 = utils.getTemplate(
123
- "ArrayFieldItemTemplate",
124
- registry,
125
- uiOptions
126
- );
127
118
  const ArrayFieldTitleTemplate = utils.getTemplate(
128
119
  "ArrayFieldTitleTemplate",
129
120
  registry,
@@ -167,7 +158,7 @@
167
158
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4", children: [
168
159
  !showOptionalDataControlInTitle ? optionalDataControl : void 0,
169
160
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rjsf-array-item-list", children: [
170
- items.map(({ key, ...itemProps }, index) => /* @__PURE__ */ jsxRuntime.jsx(ArrayFieldItemTemplate2, { ...itemProps, index, totalItems: items.length }, key)),
161
+ items,
171
162
  items && items.length === 0 && canAdd && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-center italic text-base-content/70", children: utils.TranslatableString.EmptyArray })
172
163
  ] }),
173
164
  canAdd && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -187,6 +178,8 @@
187
178
  function BaseInputTemplate(props) {
188
179
  const {
189
180
  id,
181
+ htmlName,
182
+ multiple,
190
183
  value,
191
184
  required,
192
185
  disabled,
@@ -203,6 +196,12 @@
203
196
  placeholder
204
197
  } = props;
205
198
  const inputProps = utils.getInputProps(schema, type, options);
199
+ let className = "input input-bordered";
200
+ let isMulti = multiple;
201
+ if (type === "file") {
202
+ isMulti = schema.type === "array" || Boolean(options.multiple);
203
+ className = "file-input w-full";
204
+ }
206
205
  const { step, min, max, accept, ...rest } = inputProps;
207
206
  const htmlInputProps = { step, min, max, accept, ...schema.examples ? { list: utils.examplesId(id) } : void 0 };
208
207
  const _onChange = react.useCallback(
@@ -224,13 +223,14 @@
224
223
  "input",
225
224
  {
226
225
  id,
227
- name: id,
226
+ name: htmlName || id,
228
227
  value: value || value === 0 ? value : "",
229
228
  placeholder,
230
229
  required,
231
230
  disabled: disabled || readonly,
232
231
  autoFocus: autofocus,
233
- className: "input input-bordered",
232
+ className,
233
+ multiple: isMulti,
234
234
  ...rest,
235
235
  ...htmlInputProps,
236
236
  onChange: onChangeOverride || _onChange,
@@ -364,21 +364,22 @@
364
364
  help,
365
365
  hideError,
366
366
  displayLabel,
367
+ onKeyRename,
368
+ onKeyRenameBlur,
369
+ onRemoveProperty,
367
370
  classNames,
368
- // Destructure props we don't want to pass to div
369
- description,
370
- onKeyChange,
371
- onDropPropertyClick,
372
371
  uiSchema,
373
372
  schema,
374
373
  readonly,
375
374
  required,
375
+ registry,
376
+ // Destructure props we don't want to pass to div
377
+ description,
376
378
  rawErrors,
377
379
  rawHelp,
378
380
  rawDescription,
379
381
  hidden,
380
382
  onChange,
381
- registry,
382
383
  ...divProps
383
384
  } = props;
384
385
  const isCheckbox = schema.type === "boolean";
@@ -395,8 +396,9 @@
395
396
  disabled: divProps.disabled,
396
397
  id,
397
398
  label,
398
- onDropPropertyClick,
399
- onKeyChange,
399
+ onKeyRename,
400
+ onKeyRenameBlur,
401
+ onRemoveProperty,
400
402
  readonly,
401
403
  required,
402
404
  schema,
@@ -441,7 +443,7 @@
441
443
  schema,
442
444
  formData,
443
445
  optionalDataControl,
444
- onAddClick,
446
+ onAddProperty,
445
447
  registry
446
448
  } = props;
447
449
  const uiOptions = utils.getUiOptions(uiSchema);
@@ -496,7 +498,7 @@
496
498
  {
497
499
  id: utils.buttonId(fieldPathId, "add"),
498
500
  className: "rjsf-object-property-expand btn btn-primary btn-sm",
499
- onClick: onAddClick(schema),
501
+ onClick: onAddProperty,
500
502
  disabled: disabled || readonly,
501
503
  uiSchema,
502
504
  registry
@@ -560,8 +562,9 @@
560
562
  required,
561
563
  schema,
562
564
  uiSchema,
563
- onKeyChange,
564
- onDropPropertyClick,
565
+ onKeyRename,
566
+ onKeyRenameBlur,
567
+ onRemoveProperty,
565
568
  registry,
566
569
  ...rest
567
570
  } = props;
@@ -569,15 +572,6 @@
569
572
  const { templates, translateString } = registry;
570
573
  const { RemoveButton: RemoveButton2 } = templates.ButtonTemplates;
571
574
  const keyLabel = translateString(utils.TranslatableString.KeyLabel, [label]);
572
- const handleBlur = react.useCallback(
573
- (event) => {
574
- onKeyChange(event.target.value);
575
- },
576
- [onKeyChange]
577
- );
578
- const handleRemove = react.useCallback(() => {
579
- onDropPropertyClick(label)();
580
- }, [onDropPropertyClick, label]);
581
575
  if (!additional) {
582
576
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: classNames, children });
583
577
  }
@@ -590,7 +584,7 @@
590
584
  type: "text",
591
585
  className: "input input-bordered",
592
586
  id: `${id}-key`,
593
- onBlur: handleBlur,
587
+ onBlur: onKeyRenameBlur,
594
588
  defaultValue: label,
595
589
  disabled: disabled || readonly
596
590
  }
@@ -603,7 +597,7 @@
603
597
  id: utils.buttonId(id, "remove"),
604
598
  className: "rjsf-object-property-remove",
605
599
  disabled: disabled || readonly,
606
- onClick: handleRemove,
600
+ onClick: onRemoveProperty,
607
601
  uiSchema,
608
602
  registry
609
603
  }
@@ -648,154 +642,29 @@
648
642
  return /* @__PURE__ */ jsxRuntime.jsx(AltDateWidget2, { time, ...props });
649
643
  }
650
644
  var AltDateTimeWidget_default = AltDateTimeWidget;
651
- function readyForChange(state, time = false) {
652
- return state.year && state.month && state.day && (!time || state.hour && state.minute && state.second);
653
- }
654
- function getDateElementProps(state, time, yearsRange, format3 = "YMD") {
655
- const rangeOptions = yearsRange ?? [1900, (/* @__PURE__ */ new Date()).getFullYear() + 2];
656
- const formats = {
657
- YMD: ["year", "month", "day"],
658
- MDY: ["month", "day", "year"],
659
- DMY: ["day", "month", "year"]
660
- };
661
- const dateElements = formats[format3].map((key) => ({
662
- type: key,
663
- value: state[key],
664
- range: key === "year" ? rangeOptions : key === "month" ? [1, 12] : key === "day" ? [1, 31] : [0, 59]
665
- }));
666
- if (time) {
667
- dateElements.push(
668
- { type: "hour", value: state.hour, range: [0, 23] },
669
- { type: "minute", value: state.minute, range: [0, 59] },
670
- { type: "second", value: state.second, range: [0, 59] }
671
- );
672
- }
673
- return dateElements;
674
- }
675
- function DateElement({
676
- type,
677
- range,
678
- value,
679
- select,
680
- rootId,
681
- name,
682
- disabled,
683
- readonly,
684
- autofocus,
685
- registry,
686
- onBlur,
687
- onFocus
688
- }) {
689
- const id = `${rootId}_${type}`;
690
- const { SelectWidget: SelectWidget2 } = registry.widgets;
691
- const handleChange = react.useCallback(
692
- (value2) => {
693
- select(type, value2);
694
- },
695
- [select, type]
696
- );
697
- return /* @__PURE__ */ jsxRuntime.jsx(
698
- SelectWidget2,
699
- {
700
- schema: { type: "integer" },
701
- id,
702
- name,
703
- className: "select select-bordered select-sm w-full",
704
- options: { enumOptions: utils.dateRangeOptions(range[0], range[1]) },
705
- placeholder: type,
706
- value,
707
- disabled,
708
- readonly,
709
- autofocus,
710
- onChange: handleChange,
711
- onBlur,
712
- onFocus,
713
- registry,
714
- label: "",
715
- "aria-describedby": utils.ariaDescribedByIds(rootId),
716
- required: false
717
- }
718
- );
719
- }
720
- function convertToRJSFDateObject(dateObj) {
721
- return {
722
- year: dateObj.year ? parseInt(dateObj.year) : 0,
723
- month: dateObj.month ? parseInt(dateObj.month) : 0,
724
- day: dateObj.day ? parseInt(dateObj.day) : 0,
725
- hour: dateObj.hour ? parseInt(dateObj.hour) : 0,
726
- minute: dateObj.minute ? parseInt(dateObj.minute) : 0,
727
- second: dateObj.second ? parseInt(dateObj.second) : 0
728
- };
729
- }
730
- function AltDateWidget({
731
- time = false,
732
- disabled = false,
733
- readonly = false,
734
- autofocus = false,
735
- options = {},
736
- id,
737
- name,
738
- registry,
739
- onBlur,
740
- onFocus,
741
- onChange,
742
- value
743
- }) {
645
+ function AltDateWidget(props) {
646
+ const {
647
+ disabled = false,
648
+ readonly = false,
649
+ autofocus = false,
650
+ options = {},
651
+ id,
652
+ name,
653
+ registry,
654
+ onBlur,
655
+ onFocus
656
+ } = props;
744
657
  const { translateString } = registry;
745
- const [lastValue, setLastValue] = react.useState(value);
746
- const initialState = utils.parseDateString(value, time);
747
- const dateReducer = (state2, action) => {
748
- return { ...state2, ...action };
749
- };
750
- const [state, setState] = react.useReducer(dateReducer, initialState);
751
- react.useEffect(() => {
752
- const rjsfDateObj = convertToRJSFDateObject(state);
753
- const stateValue = utils.toDateString(rjsfDateObj, time);
754
- if (readyForChange(state, time) && stateValue !== value) {
755
- onChange(stateValue);
756
- } else if (lastValue !== value) {
757
- setLastValue(value);
758
- setState(utils.parseDateString(value, time));
759
- }
760
- }, [time, value, onChange, state, lastValue]);
761
- const handleChange = react.useCallback((property, value2) => {
762
- setState({ [property]: value2 });
763
- }, []);
764
- const handleSetNow = react.useCallback(
765
- (event) => {
766
- event.preventDefault();
767
- if (disabled || readonly) {
768
- return;
769
- }
770
- const nextState = utils.parseDateString((/* @__PURE__ */ new Date()).toJSON(), time);
771
- const rjsfDateObj = convertToRJSFDateObject(nextState);
772
- onChange(utils.toDateString(rjsfDateObj, time));
773
- },
774
- [disabled, readonly, time, onChange]
775
- );
776
- const handleClear = react.useCallback(
777
- (event) => {
778
- event.preventDefault();
779
- if (disabled || readonly) {
780
- return;
781
- }
782
- onChange(void 0);
783
- },
784
- [disabled, readonly, onChange]
785
- );
658
+ const { elements, handleChange, handleClear, handleSetNow } = utils.useAltDateWidgetProps(props);
786
659
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
787
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-3 gap-2", children: getDateElementProps(
788
- state,
789
- time,
790
- options.yearsRange,
791
- options.format
792
- ).map((elemProps, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "form-control", children: [
660
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-3 gap-2", children: elements.map((elemProps, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "form-control", children: [
793
661
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "label", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "label-text capitalize", children: elemProps.type }) }),
794
662
  /* @__PURE__ */ jsxRuntime.jsx(
795
- DateElement,
663
+ utils.DateElement,
796
664
  {
797
665
  rootId: id,
798
666
  name,
667
+ className: "select select-bordered select-sm",
799
668
  select: handleChange,
800
669
  type: elemProps.type,
801
670
  range: elemProps.range,
@@ -836,6 +705,7 @@
836
705
  function CheckboxWidget(props) {
837
706
  const {
838
707
  id,
708
+ htmlName,
839
709
  value,
840
710
  required,
841
711
  disabled,
@@ -877,6 +747,7 @@
877
747
  {
878
748
  type: "checkbox",
879
749
  id,
750
+ name: htmlName || id,
880
751
  checked: value,
881
752
  required,
882
753
  disabled: disabled || readonly,
@@ -908,6 +779,7 @@
908
779
  }
909
780
  function CheckboxesWidget({
910
781
  id,
782
+ htmlName,
911
783
  disabled,
912
784
  options,
913
785
  value,
@@ -979,7 +851,7 @@
979
851
  type: "checkbox",
980
852
  id: `${id}-${option.value}`,
981
853
  className: "checkbox",
982
- name: id,
854
+ name: htmlName || id,
983
855
  checked: isChecked(option),
984
856
  required,
985
857
  disabled: disabled || readonly,
@@ -1490,58 +1362,9 @@
1490
1362
  }
1491
1363
  ) });
1492
1364
  }
1493
- function FileWidget(props) {
1494
- const { id, required, disabled, readonly, schema, onChange, onFocus, onBlur, options = {} } = props;
1495
- const isMulti = schema.type === "array" || Boolean(options.multiple);
1496
- const accept = typeof options.accept === "string" ? options.accept : void 0;
1497
- const handleChange = react.useCallback(
1498
- (event) => {
1499
- if (!event.target.files) {
1500
- return;
1501
- }
1502
- const fileList = Array.from(event.target.files);
1503
- if (isMulti) {
1504
- onChange(fileList);
1505
- } else {
1506
- onChange(fileList[0] || null);
1507
- }
1508
- },
1509
- [onChange, isMulti]
1510
- );
1511
- const handleFocus = react.useCallback(
1512
- (event) => {
1513
- if (onFocus) {
1514
- onFocus(id, event.target.files ? Array.from(event.target.files) : null);
1515
- }
1516
- },
1517
- [onFocus, id]
1518
- );
1519
- const handleBlur = react.useCallback(
1520
- (event) => {
1521
- if (onBlur) {
1522
- onBlur(id, event.target.files ? Array.from(event.target.files) : null);
1523
- }
1524
- },
1525
- [onBlur, id]
1526
- );
1527
- return /* @__PURE__ */ jsxRuntime.jsx(
1528
- "input",
1529
- {
1530
- id,
1531
- type: "file",
1532
- className: "file-input w-full",
1533
- required,
1534
- disabled: disabled || readonly,
1535
- onChange: handleChange,
1536
- onFocus: handleFocus,
1537
- onBlur: handleBlur,
1538
- multiple: isMulti,
1539
- accept
1540
- }
1541
- );
1542
- }
1543
1365
  function RadioWidget({
1544
1366
  id,
1367
+ htmlName,
1545
1368
  options,
1546
1369
  value,
1547
1370
  required,
@@ -1600,7 +1423,7 @@
1600
1423
  type: "radio",
1601
1424
  id: `${id}-${option.value}`,
1602
1425
  className: "radio",
1603
- name: id,
1426
+ name: htmlName || id,
1604
1427
  value: getValue(option),
1605
1428
  checked: isChecked(option),
1606
1429
  required,
@@ -1844,7 +1667,7 @@
1844
1667
  ] }) });
1845
1668
  }
1846
1669
  function TextareaWidget(props) {
1847
- const { id, value, required, disabled, readonly, onChange, onFocus, onBlur, options } = props;
1670
+ const { id, htmlName, value, required, disabled, readonly, onChange, onFocus, onBlur, options } = props;
1848
1671
  const handleFocus = react.useCallback(
1849
1672
  (event) => {
1850
1673
  if (onFocus) {
@@ -1872,6 +1695,7 @@
1872
1695
  "textarea",
1873
1696
  {
1874
1697
  id,
1698
+ name: htmlName || id,
1875
1699
  value: value || "",
1876
1700
  required,
1877
1701
  disabled: disabled || readonly,
@@ -1970,7 +1794,6 @@
1970
1794
  CheckboxWidget,
1971
1795
  DateTimeWidget,
1972
1796
  DateWidget,
1973
- FileWidget,
1974
1797
  RadioWidget,
1975
1798
  RangeWidget,
1976
1799
  RatingWidget,