@fuf-stack/uniform 0.14.5 → 0.16.0

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 (180) hide show
  1. package/dist/CheckboxGroup/index.cjs +7 -6
  2. package/dist/CheckboxGroup/index.cjs.map +1 -1
  3. package/dist/CheckboxGroup/index.d.cts +2 -2
  4. package/dist/CheckboxGroup/index.d.ts +2 -2
  5. package/dist/CheckboxGroup/index.js +6 -5
  6. package/dist/{CheckboxGroup-o-qWkWe1.d.cts → CheckboxGroup-fAdey3Td.d.cts} +1 -1
  7. package/dist/{CheckboxGroup-o-qWkWe1.d.ts → CheckboxGroup-fAdey3Td.d.ts} +1 -1
  8. package/dist/Controller/index.cjs +4 -2
  9. package/dist/Controller/index.cjs.map +1 -1
  10. package/dist/Controller/index.d.cts +7 -3
  11. package/dist/Controller/index.d.ts +7 -3
  12. package/dist/Controller/index.js +7 -5
  13. package/dist/Controller-8Nqugui5.d.cts +37 -0
  14. package/dist/Controller-8Nqugui5.d.ts +37 -0
  15. package/dist/FieldArray/index.cjs +6 -5
  16. package/dist/FieldArray/index.cjs.map +1 -1
  17. package/dist/FieldArray/index.d.cts +5 -3
  18. package/dist/FieldArray/index.d.ts +5 -3
  19. package/dist/FieldArray/index.js +5 -4
  20. package/dist/FieldArray-AqM2XKIh.d.cts +151 -0
  21. package/dist/FieldArray-AqM2XKIh.d.ts +151 -0
  22. package/dist/Form/index.cjs +5 -4
  23. package/dist/Form/index.cjs.map +1 -1
  24. package/dist/Form/index.js +4 -3
  25. package/dist/Grid/index.cjs +1 -0
  26. package/dist/Grid/index.cjs.map +1 -1
  27. package/dist/Grid/index.js +1 -0
  28. package/dist/Input/index.cjs +7 -6
  29. package/dist/Input/index.cjs.map +1 -1
  30. package/dist/Input/index.d.cts +2 -2
  31. package/dist/Input/index.d.ts +2 -2
  32. package/dist/Input/index.js +6 -5
  33. package/dist/{Input-IkWP4cWg.d.cts → Input-B_wjhY9e.d.cts} +1 -1
  34. package/dist/{Input-IkWP4cWg.d.ts → Input-B_wjhY9e.d.ts} +1 -1
  35. package/dist/RadioGroup/index.cjs +7 -6
  36. package/dist/RadioGroup/index.cjs.map +1 -1
  37. package/dist/RadioGroup/index.d.cts +2 -2
  38. package/dist/RadioGroup/index.d.ts +2 -2
  39. package/dist/RadioGroup/index.js +6 -5
  40. package/dist/{RadioGroup-1J39ASHa.d.cts → RadioGroup-Dxd2FPQj.d.cts} +1 -1
  41. package/dist/{RadioGroup-1J39ASHa.d.ts → RadioGroup-Dxd2FPQj.d.ts} +1 -1
  42. package/dist/Select/index.cjs +7 -6
  43. package/dist/Select/index.cjs.map +1 -1
  44. package/dist/Select/index.d.cts +2 -2
  45. package/dist/Select/index.d.ts +2 -2
  46. package/dist/Select/index.js +6 -5
  47. package/dist/{Select-BhS4z0Pj.d.cts → Select-JRwrSDew.d.cts} +1 -1
  48. package/dist/{Select-BhS4z0Pj.d.ts → Select-JRwrSDew.d.ts} +1 -1
  49. package/dist/SubmitButton/index.cjs +5 -4
  50. package/dist/SubmitButton/index.cjs.map +1 -1
  51. package/dist/SubmitButton/index.js +4 -3
  52. package/dist/Switch/index.cjs +7 -6
  53. package/dist/Switch/index.cjs.map +1 -1
  54. package/dist/Switch/index.d.cts +2 -2
  55. package/dist/Switch/index.d.ts +2 -2
  56. package/dist/Switch/index.js +6 -5
  57. package/dist/{Switch-Fdldj8LV.d.cts → Switch-mdolzzEc.d.cts} +1 -1
  58. package/dist/{Switch-Fdldj8LV.d.ts → Switch-mdolzzEc.d.ts} +1 -1
  59. package/dist/TextArea/index.cjs +7 -6
  60. package/dist/TextArea/index.cjs.map +1 -1
  61. package/dist/TextArea/index.d.cts +2 -2
  62. package/dist/TextArea/index.d.ts +2 -2
  63. package/dist/TextArea/index.js +6 -5
  64. package/dist/{TextArea-B-sKvTkd.d.cts → TextArea-DNpInDsW.d.cts} +1 -1
  65. package/dist/{TextArea-B-sKvTkd.d.ts → TextArea-DNpInDsW.d.ts} +1 -1
  66. package/dist/{chunk-QCVTB2NI.js → chunk-3QBYSFDX.js} +10 -9
  67. package/dist/chunk-3QBYSFDX.js.map +1 -0
  68. package/dist/chunk-4DAZAO6Y.cjs +59 -0
  69. package/dist/chunk-4DAZAO6Y.cjs.map +1 -0
  70. package/dist/{chunk-BS52M4SZ.js → chunk-5YDNHSEU.js} +47 -41
  71. package/dist/chunk-5YDNHSEU.js.map +1 -0
  72. package/dist/chunk-7ROOJK7G.cjs +110 -0
  73. package/dist/chunk-7ROOJK7G.cjs.map +1 -0
  74. package/dist/{chunk-WKM2D7LF.js → chunk-ASPOGQPS.js} +2 -5
  75. package/dist/chunk-ASPOGQPS.js.map +1 -0
  76. package/dist/{chunk-XCZKNTFT.cjs → chunk-BDVAK232.cjs} +23 -24
  77. package/dist/chunk-BDVAK232.cjs.map +1 -0
  78. package/dist/chunk-CESGUF6F.cjs +63 -0
  79. package/dist/chunk-CESGUF6F.cjs.map +1 -0
  80. package/dist/chunk-CRTRMMJ7.js +59 -0
  81. package/dist/chunk-CRTRMMJ7.js.map +1 -0
  82. package/dist/{chunk-VP7WDLJM.js → chunk-DS7GUNDT.js} +17 -14
  83. package/dist/chunk-DS7GUNDT.js.map +1 -0
  84. package/dist/chunk-ECDLVJLZ.js +246 -0
  85. package/dist/chunk-ECDLVJLZ.js.map +1 -0
  86. package/dist/{chunk-GN5NJ6ZU.js → chunk-GNDW3TAU.js} +3 -6
  87. package/dist/chunk-GNDW3TAU.js.map +1 -0
  88. package/dist/{chunk-VZ5MMFIF.cjs → chunk-H65I56SI.cjs} +4 -7
  89. package/dist/chunk-H65I56SI.cjs.map +1 -0
  90. package/dist/chunk-HCQJGNWT.cjs +246 -0
  91. package/dist/chunk-HCQJGNWT.cjs.map +1 -0
  92. package/dist/chunk-IBQCNI5H.js +372 -0
  93. package/dist/chunk-IBQCNI5H.js.map +1 -0
  94. package/dist/chunk-IUVEFLF3.cjs +133 -0
  95. package/dist/chunk-IUVEFLF3.cjs.map +1 -0
  96. package/dist/{chunk-Y3SFF6RN.cjs → chunk-KIAIGPG7.cjs} +11 -10
  97. package/dist/chunk-KIAIGPG7.cjs.map +1 -0
  98. package/dist/{chunk-QW44EUAH.js → chunk-MEK7YR46.js} +10 -10
  99. package/dist/chunk-MEK7YR46.js.map +1 -0
  100. package/dist/{chunk-OHJYXA6R.cjs → chunk-OE5IW4ZG.cjs} +4 -7
  101. package/dist/chunk-OE5IW4ZG.cjs.map +1 -0
  102. package/dist/chunk-PHGFXKPU.cjs +51 -0
  103. package/dist/chunk-PHGFXKPU.cjs.map +1 -0
  104. package/dist/{chunk-PZ4LZQI4.cjs → chunk-Q23XGBJ5.cjs} +18 -15
  105. package/dist/chunk-Q23XGBJ5.cjs.map +1 -0
  106. package/dist/{chunk-DDZMDOSG.js → chunk-STU7SBQX.js} +25 -23
  107. package/dist/chunk-STU7SBQX.js.map +1 -0
  108. package/dist/{chunk-BZAPTLMC.js → chunk-T4N6TMUL.js} +49 -49
  109. package/dist/chunk-T4N6TMUL.js.map +1 -0
  110. package/dist/chunk-TJESSWIB.cjs +372 -0
  111. package/dist/chunk-TJESSWIB.cjs.map +1 -0
  112. package/dist/chunk-UAV6PVB4.js +63 -0
  113. package/dist/chunk-UAV6PVB4.js.map +1 -0
  114. package/dist/{chunk-BYKOCVCK.js → chunk-WKJN5A2E.js} +22 -23
  115. package/dist/chunk-WKJN5A2E.js.map +1 -0
  116. package/dist/{chunk-XJZAS7NG.cjs → chunk-WRIXKFKW.cjs} +25 -23
  117. package/dist/chunk-WRIXKFKW.cjs.map +1 -0
  118. package/dist/{chunk-RBIX6EWU.cjs → chunk-Y7MJBI4A.cjs} +11 -11
  119. package/dist/chunk-Y7MJBI4A.cjs.map +1 -0
  120. package/dist/chunk-ZI22WT2P.js +51 -0
  121. package/dist/chunk-ZI22WT2P.js.map +1 -0
  122. package/dist/helpers/index.cjs +9 -2
  123. package/dist/helpers/index.cjs.map +1 -1
  124. package/dist/helpers/index.d.cts +67 -4
  125. package/dist/helpers/index.d.ts +67 -4
  126. package/dist/helpers/index.js +10 -3
  127. package/dist/hooks/index.cjs +6 -3
  128. package/dist/hooks/index.cjs.map +1 -1
  129. package/dist/hooks/index.d.cts +3 -2
  130. package/dist/hooks/index.d.ts +3 -2
  131. package/dist/hooks/index.js +7 -4
  132. package/dist/index.cjs +25 -16
  133. package/dist/index.cjs.map +1 -1
  134. package/dist/index.d.cts +11 -10
  135. package/dist/index.d.ts +11 -10
  136. package/dist/index.js +31 -22
  137. package/dist/partials/FieldCopyTestIdButton/index.cjs +1 -0
  138. package/dist/partials/FieldCopyTestIdButton/index.cjs.map +1 -1
  139. package/dist/partials/FieldCopyTestIdButton/index.js +1 -0
  140. package/dist/partials/FieldValidationError/index.cjs +3 -3
  141. package/dist/partials/FieldValidationError/index.js +2 -2
  142. package/package.json +18 -20
  143. package/dist/FieldArray-DD9z-xZ3.d.cts +0 -37
  144. package/dist/FieldArray-DD9z-xZ3.d.ts +0 -37
  145. package/dist/chunk-BBB4FEY6.cjs +0 -22
  146. package/dist/chunk-BBB4FEY6.cjs.map +0 -1
  147. package/dist/chunk-BS52M4SZ.js.map +0 -1
  148. package/dist/chunk-BYKOCVCK.js.map +0 -1
  149. package/dist/chunk-BZAPTLMC.js.map +0 -1
  150. package/dist/chunk-DDZMDOSG.js.map +0 -1
  151. package/dist/chunk-EKE5URXQ.cjs +0 -104
  152. package/dist/chunk-EKE5URXQ.cjs.map +0 -1
  153. package/dist/chunk-GN5NJ6ZU.js.map +0 -1
  154. package/dist/chunk-HOETR36J.cjs +0 -299
  155. package/dist/chunk-HOETR36J.cjs.map +0 -1
  156. package/dist/chunk-HZP3EXGR.cjs +0 -241
  157. package/dist/chunk-HZP3EXGR.cjs.map +0 -1
  158. package/dist/chunk-IUNDGVMC.js +0 -241
  159. package/dist/chunk-IUNDGVMC.js.map +0 -1
  160. package/dist/chunk-KOKIM2ND.js +0 -9
  161. package/dist/chunk-KOKIM2ND.js.map +0 -1
  162. package/dist/chunk-OHJYXA6R.cjs.map +0 -1
  163. package/dist/chunk-PZ4LZQI4.cjs.map +0 -1
  164. package/dist/chunk-QCVTB2NI.js.map +0 -1
  165. package/dist/chunk-QW44EUAH.js.map +0 -1
  166. package/dist/chunk-RBIX6EWU.cjs.map +0 -1
  167. package/dist/chunk-V46BHM2U.js +0 -22
  168. package/dist/chunk-V46BHM2U.js.map +0 -1
  169. package/dist/chunk-VP7WDLJM.js.map +0 -1
  170. package/dist/chunk-VQWKXSHW.cjs +0 -9
  171. package/dist/chunk-VQWKXSHW.cjs.map +0 -1
  172. package/dist/chunk-VZ5MMFIF.cjs.map +0 -1
  173. package/dist/chunk-WKM2D7LF.js.map +0 -1
  174. package/dist/chunk-XCZKNTFT.cjs.map +0 -1
  175. package/dist/chunk-XJWEUCV3.cjs +0 -133
  176. package/dist/chunk-XJWEUCV3.cjs.map +0 -1
  177. package/dist/chunk-XJZAS7NG.cjs.map +0 -1
  178. package/dist/chunk-Y3SFF6RN.cjs.map +0 -1
  179. package/dist/chunk-Y53IHK6B.js +0 -299
  180. package/dist/chunk-Y53IHK6B.js.map +0 -1
@@ -0,0 +1,246 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
+
3
+ var _chunkPHGFXKPUcjs = require('./chunk-PHGFXKPU.cjs');
4
+
5
+
6
+ var _chunkJU5RT22Ycjs = require('./chunk-JU5RT22Y.cjs');
7
+
8
+
9
+ var _chunkOE5IW4ZGcjs = require('./chunk-OE5IW4ZG.cjs');
10
+
11
+
12
+ var _chunkIUVEFLF3cjs = require('./chunk-IUVEFLF3.cjs');
13
+
14
+
15
+
16
+ var _chunk4DAZAO6Ycjs = require('./chunk-4DAZAO6Y.cjs');
17
+
18
+ // src/Select/Select.tsx
19
+ var _react = require('react');
20
+ var _reactselect = require('react-select'); var _reactselect2 = _interopRequireDefault(_reactselect);
21
+ var _select = require('@heroui/select');
22
+ var _pixelutils = require('@fuf-stack/pixel-utils');
23
+ var _jsxruntime = require('react/jsx-runtime');
24
+ var selectVariants = _pixelutils.tv.call(void 0, {
25
+ slots: {
26
+ base: "group leading-normal",
27
+ clearIndicator: "rounded-md p-1 text-foreground-500 hover:cursor-pointer hover:bg-default-200 hover:text-foreground-800",
28
+ control: "rounded-lg border-2 border-default-200 !duration-150 transition-background hover:border-default-400 group-data-[invalid=true]:border-danger group-data-[invalid=true]:hover:border-danger motion-reduce:transition-none",
29
+ control_focused: "border-focus",
30
+ crossIcon: "",
31
+ downChevron: "",
32
+ dropdownIndicator: "rounded-md p-1 text-foreground-500 hover:cursor-pointer hover:bg-default-200 hover:text-black",
33
+ group: "",
34
+ groupHeading: "mb-1 ml-3 mt-2 text-sm text-foreground-500",
35
+ indicatorsContainer: "gap-1 p-1",
36
+ indicatorSeparator: "bg-default-300",
37
+ input: "py-0.5 pl-1",
38
+ // see HeroUI styles for group-data condition,
39
+ // e.g.: https://github.com/heroui-inc/heroui/blob/main/packages/core/theme/src/components/select.ts
40
+ label: 'pointer-events-auto relative bottom-1.5 ml-1 text-small subpixel-antialiased group-data-[invalid=true]:!text-danger group-data-[required=true]:after:ml-0.5 group-data-[required=true]:after:text-danger group-data-[required=true]:after:content-["*"]',
41
+ loadingIndicator: "",
42
+ loadingMessage: "",
43
+ menu: "mt-2 rounded-xl border border-default-200 bg-content1 p-1 shadow-lg",
44
+ menuList: "",
45
+ // ensure menu has same z-index as modal so it is visible when rendered in modal
46
+ // see: https://github.com/heroui-inc/heroui/blob/main/packages/core/theme/src/components/modal.ts (see z-50)
47
+ menuPortal: "!z-50",
48
+ multiValue: "items-center gap-1.5 rounded bg-default-100 py-0.5 pl-2 pr-1",
49
+ multiValueContainer: "",
50
+ multiValueLabel: "py-0.5 leading-6",
51
+ multiValueRemove: "rounded text-default-500 hover:cursor-pointer hover:border-default-300 hover:text-default-800",
52
+ noOptionsMessage: "rounded-sm p-2 text-foreground-500",
53
+ option_focused: "bg-default-100 active:bg-default-200",
54
+ option_selected: "bg-default-300",
55
+ option: "rounded px-3 py-2 hover:cursor-pointer",
56
+ placeholder: "ml-1 py-0.5 pl-1 text-sm text-foreground-500",
57
+ selectContainer: "",
58
+ singleValue: "!ml-1 !leading-7",
59
+ valueContainer: "gap-1 p-1"
60
+ }
61
+ });
62
+ var InputComponent = (props) => {
63
+ const testId = `${props.selectProps["data-testid"]}`;
64
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _reactselect.components.Input, _chunk4DAZAO6Ycjs.__spreadValues.call(void 0, { "data-testid": testId }, props));
65
+ };
66
+ var ControlComponent = (props) => {
67
+ const testId = `${props.selectProps["data-testid"]}_select`;
68
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { "data-testid": testId, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _reactselect.components.Control, _chunk4DAZAO6Ycjs.__spreadValues.call(void 0, {}, props)) });
69
+ };
70
+ var OptionComponent = (props) => {
71
+ var _a, _b, _c;
72
+ const testId = `${props.selectProps["data-testid"]}_select_option_${_pixelutils.slugify.call(void 0, (_c = (_a = props == null ? void 0 : props.data) == null ? void 0 : _a.testId) != null ? _c : (_b = props == null ? void 0 : props.data) == null ? void 0 : _b.value)}`;
73
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { "data-testid": testId, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _reactselect.components.Option, _chunk4DAZAO6Ycjs.__spreadValues.call(void 0, {}, props)) });
74
+ };
75
+ var DropdownIndicatorComponent = (props) => {
76
+ const testId = props == null ? void 0 : props.selectProps["data-testid"];
77
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { "data-testid": `${testId}_select_dropdown`, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _reactselect.components.DropdownIndicator, _chunk4DAZAO6Ycjs.__spreadValues.call(void 0, {}, props)) });
78
+ };
79
+ var Select = ({
80
+ className = void 0,
81
+ clearable = true,
82
+ disabled = false,
83
+ filterOption = void 0,
84
+ renderOptionLabel = void 0,
85
+ inputValue = void 0,
86
+ label: _label = void 0,
87
+ loading = false,
88
+ multiSelect = false,
89
+ name,
90
+ onInputChange = void 0,
91
+ options,
92
+ placeholder = void 0,
93
+ testId: _testId = void 0
94
+ }) => {
95
+ const { control, debugMode, getFieldState } = _chunkIUVEFLF3cjs.useFormContext.call(void 0, );
96
+ const { error, invalid, required, testId } = getFieldState(name, _testId);
97
+ const [isFocused, setIsFocused] = _react.useState.call(void 0, false);
98
+ const variants = selectVariants();
99
+ const classNames = _pixelutils.variantsToClassNames.call(void 0, variants, className, "base");
100
+ const {
101
+ getBaseProps,
102
+ getErrorMessageProps,
103
+ getHelperWrapperProps,
104
+ getLabelProps,
105
+ getTriggerProps,
106
+ getValueProps,
107
+ label
108
+ } = _select.useSelect.call(void 0, {
109
+ children: [],
110
+ classNames,
111
+ errorMessage: JSON.stringify(error),
112
+ isDisabled: disabled,
113
+ isInvalid: invalid,
114
+ isLoading: loading,
115
+ isRequired: required,
116
+ label: _label,
117
+ labelPlacement: "outside",
118
+ placeholder: " "
119
+ });
120
+ const showTestIdCopyButton = debugMode === "debug-testids";
121
+ const showLabel = label || showTestIdCopyButton;
122
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
123
+ _chunkPHGFXKPUcjs.Controller_default,
124
+ {
125
+ control,
126
+ name,
127
+ render: ({
128
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
129
+ field: { onChange, value, ref, onBlur }
130
+ }) => {
131
+ var _a;
132
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
133
+ "div",
134
+ _chunk4DAZAO6Ycjs.__spreadProps.call(void 0, _chunk4DAZAO6Ycjs.__spreadValues.call(void 0, {}, getBaseProps()), {
135
+ className: _pixelutils.cn.call(void 0, classNames.base),
136
+ "data-testid": `${testId}_wrapper`,
137
+ "data-required": required,
138
+ children: [
139
+ showLabel && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
140
+ "label",
141
+ {
142
+ className: classNames.label,
143
+ "data-slot": "label",
144
+ htmlFor: `react-select-${name}-input`,
145
+ id: getLabelProps().id,
146
+ children: [
147
+ label,
148
+ showTestIdCopyButton && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJU5RT22Ycjs.FieldCopyTestIdButton_default, { testId })
149
+ ]
150
+ }
151
+ ),
152
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
153
+ _reactselect2.default,
154
+ {
155
+ "aria-errormessage": "",
156
+ "aria-labelledby": (_a = getTriggerProps()["aria-labelledby"]) == null ? void 0 : _a.split(" ")[1],
157
+ "aria-invalid": invalid,
158
+ classNames: {
159
+ control: () => _pixelutils.cn.call(void 0, classNames.control, {
160
+ [classNames.control_focused]: isFocused && !invalid
161
+ }),
162
+ clearIndicator: () => classNames.clearIndicator,
163
+ dropdownIndicator: () => classNames.dropdownIndicator,
164
+ groupHeading: () => classNames.groupHeading,
165
+ indicatorsContainer: () => classNames.indicatorsContainer,
166
+ indicatorSeparator: () => classNames.indicatorSeparator,
167
+ input: () => classNames.input,
168
+ menu: () => classNames.menu,
169
+ menuList: () => classNames.menuList,
170
+ menuPortal: () => classNames.menuPortal,
171
+ multiValue: () => classNames.multiValue,
172
+ multiValueLabel: () => _pixelutils.cn.call(void 0, classNames.multiValueLabel, `${getValueProps().className}`),
173
+ multiValueRemove: () => classNames.multiValueRemove,
174
+ noOptionsMessage: () => classNames.noOptionsMessage,
175
+ option: ({
176
+ isFocused: optionIsFocused,
177
+ isSelected: optionIsSelected
178
+ }) => _pixelutils.cn.call(void 0, classNames.option, {
179
+ [classNames.option_focused]: optionIsFocused,
180
+ [classNames.option_selected]: optionIsSelected
181
+ }),
182
+ placeholder: () => classNames.placeholder,
183
+ singleValue: () => _pixelutils.cn.call(void 0, classNames.singleValue, `${getValueProps().className}`),
184
+ valueContainer: () => classNames.valueContainer
185
+ },
186
+ components: {
187
+ Input: InputComponent,
188
+ Option: OptionComponent,
189
+ DropdownIndicator: DropdownIndicatorComponent,
190
+ Control: ControlComponent
191
+ },
192
+ "data-testid": testId,
193
+ filterOption,
194
+ formatOptionLabel: renderOptionLabel,
195
+ inputValue,
196
+ instanceId: name,
197
+ isClearable: clearable,
198
+ isDisabled: disabled,
199
+ isLoading: loading,
200
+ isMulti: multiSelect,
201
+ name,
202
+ menuPosition: "fixed",
203
+ menuShouldBlockScroll: true,
204
+ options,
205
+ placeholder,
206
+ onBlur: (_e) => {
207
+ setIsFocused(false);
208
+ return onBlur();
209
+ },
210
+ onChange: (option) => {
211
+ if (multiSelect) {
212
+ onChange(
213
+ option == null ? void 0 : option.map((_option) => _option.value)
214
+ );
215
+ } else {
216
+ onChange(option == null ? void 0 : option.value);
217
+ }
218
+ },
219
+ onFocus: (_e) => {
220
+ setIsFocused(true);
221
+ },
222
+ onInputChange,
223
+ ref,
224
+ value: options.find((option) => option.value === value),
225
+ unstyled: true
226
+ }
227
+ ),
228
+ error && // eslint-disable-next-line react/jsx-props-no-spreading
229
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", _chunk4DAZAO6Ycjs.__spreadProps.call(void 0, _chunk4DAZAO6Ycjs.__spreadValues.call(void 0, {}, getHelperWrapperProps()), { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", _chunk4DAZAO6Ycjs.__spreadProps.call(void 0, _chunk4DAZAO6Ycjs.__spreadValues.call(void 0, {}, getErrorMessageProps()), { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkOE5IW4ZGcjs.FieldValidationError_default, { error }) })) }))
230
+ ]
231
+ })
232
+ );
233
+ }
234
+ }
235
+ );
236
+ };
237
+ var Select_default = Select;
238
+
239
+ // src/Select/index.ts
240
+ var Select_default2 = Select_default;
241
+
242
+
243
+
244
+
245
+ exports.Select_default = Select_default; exports.Select_default2 = Select_default2;
246
+ //# sourceMappingURL=chunk-HCQJGNWT.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-HCQJGNWT.cjs","../src/Select/Select.tsx","../src/Select/index.ts"],"names":["Select_default"],"mappings":"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","file":"/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-HCQJGNWT.cjs","sourcesContent":[null,"import type { TVClassName, TVProps } from '@fuf-stack/pixel-utils';\nimport type { Props } from 'react-select';\n\nimport { useState } from 'react';\nimport ReactSelect, { components } from 'react-select';\n\nimport { useSelect } from '@heroui/select';\n\nimport { cn, slugify, tv, variantsToClassNames } from '@fuf-stack/pixel-utils';\n\nimport { Controller } from '../Controller';\nimport { useFormContext } from '../hooks';\nimport { FieldCopyTestIdButton } from '../partials/FieldCopyTestIdButton';\nimport { FieldValidationError } from '../partials/FieldValidationError';\n\nexport const selectVariants = tv({\n slots: {\n base: 'group leading-normal',\n clearIndicator:\n 'rounded-md p-1 text-foreground-500 hover:cursor-pointer hover:bg-default-200 hover:text-foreground-800',\n control:\n 'rounded-lg border-2 border-default-200 !duration-150 transition-background hover:border-default-400 group-data-[invalid=true]:border-danger group-data-[invalid=true]:hover:border-danger motion-reduce:transition-none',\n control_focused: 'border-focus',\n crossIcon: '',\n downChevron: '',\n dropdownIndicator:\n 'rounded-md p-1 text-foreground-500 hover:cursor-pointer hover:bg-default-200 hover:text-black',\n group: '',\n groupHeading: 'mb-1 ml-3 mt-2 text-sm text-foreground-500',\n indicatorsContainer: 'gap-1 p-1',\n indicatorSeparator: 'bg-default-300',\n input: 'py-0.5 pl-1',\n // see HeroUI styles for group-data condition,\n // e.g.: https://github.com/heroui-inc/heroui/blob/main/packages/core/theme/src/components/select.ts\n label:\n 'pointer-events-auto relative bottom-1.5 ml-1 text-small subpixel-antialiased group-data-[invalid=true]:!text-danger group-data-[required=true]:after:ml-0.5 group-data-[required=true]:after:text-danger group-data-[required=true]:after:content-[\"*\"]',\n loadingIndicator: '',\n loadingMessage: '',\n menu: 'mt-2 rounded-xl border border-default-200 bg-content1 p-1 shadow-lg',\n menuList: '',\n // ensure menu has same z-index as modal so it is visible when rendered in modal\n // see: https://github.com/heroui-inc/heroui/blob/main/packages/core/theme/src/components/modal.ts (see z-50)\n menuPortal: '!z-50',\n multiValue: 'items-center gap-1.5 rounded bg-default-100 py-0.5 pl-2 pr-1',\n multiValueContainer: '',\n multiValueLabel: 'py-0.5 leading-6',\n multiValueRemove:\n 'rounded text-default-500 hover:cursor-pointer hover:border-default-300 hover:text-default-800',\n noOptionsMessage: 'rounded-sm p-2 text-foreground-500',\n option_focused: 'bg-default-100 active:bg-default-200',\n option_selected: 'bg-default-300',\n option: 'rounded px-3 py-2 hover:cursor-pointer',\n placeholder: 'ml-1 py-0.5 pl-1 text-sm text-foreground-500',\n selectContainer: '',\n singleValue: '!ml-1 !leading-7',\n valueContainer: 'gap-1 p-1',\n },\n});\n\ntype SelectOption = {\n /** option label */\n label?: React.ReactNode;\n /** option value */\n value: string;\n};\n\ntype VariantProps = TVProps<typeof selectVariants>;\ntype ClassName = TVClassName<typeof selectVariants>;\n\nexport interface SelectProps extends VariantProps {\n /** CSS class name */\n className?: ClassName; // string;\n /** Determine if the */\n clearable?: boolean;\n /** Set the select to disabled state. */\n disabled?: boolean;\n /** Filter Select Options */\n filterOption?:\n | undefined\n | ((option?: SelectOption, inputValue?: string) => boolean);\n /** Format the label of the option */\n renderOptionLabel?: undefined | Props['formatOptionLabel'];\n /** The value of the search input */\n inputValue?: string;\n /** Label that should be associated with the select. */\n label?: React.ReactNode;\n /** Set the select to a loading state. */\n loading?: boolean;\n /** switch between single and multi select mode. */\n multiSelect?: boolean;\n /** The name for the Select component, used by react-hook-form */\n name: string;\n /** Placeholder that is displayed when nothing is selected */\n placeholder?: string;\n /** The options for the Select component */\n options: SelectOption[];\n /** Handle change events on the input */\n onInputChange?: Props['onInputChange'];\n /** HTML data-testid attribute used in e2e tests */\n testId?: string;\n}\n\nconst InputComponent: typeof components.Input = (props) => {\n // @ts-expect-error data-testid is not a default prop\n // eslint-disable-next-line react/prop-types, react/destructuring-assignment\n const testId = `${props.selectProps['data-testid']}`;\n // eslint-disable-next-line react/jsx-props-no-spreading\n return <components.Input data-testid={testId} {...props} />;\n};\n\nconst ControlComponent: typeof components.Control = (props) => {\n // @ts-expect-error data-testid is not a default prop\n // eslint-disable-next-line react/prop-types, react/destructuring-assignment\n const testId = `${props.selectProps['data-testid']}_select`;\n return (\n <div data-testid={testId}>\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n <components.Control {...props} />\n </div>\n );\n};\n\nconst OptionComponent: typeof components.Option = (props) => {\n // @ts-expect-error data-testid is not a default prop\n // eslint-disable-next-line react/prop-types, react/destructuring-assignment\n const testId = `${props.selectProps['data-testid']}_select_option_${slugify(props?.data?.testId ?? props?.data?.value)}`;\n return (\n <div data-testid={testId}>\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n <components.Option {...props} />\n </div>\n );\n};\n\nconst DropdownIndicatorComponent: typeof components.DropdownIndicator = (\n props,\n) => {\n // @ts-expect-error data-testid is not a default prop\n // eslint-disable-next-line react/prop-types\n const testId = props?.selectProps['data-testid'] as string;\n return (\n <div data-testid={`${testId}_select_dropdown`}>\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n <components.DropdownIndicator {...props} />\n </div>\n );\n};\n\n/** Select component based on [HeroUI Select](https://www.heroui.com//docs/components/select) and [React-Select](https://react-select.com/home) */\nconst Select = ({\n className = undefined,\n clearable = true,\n disabled = false,\n filterOption = undefined,\n renderOptionLabel = undefined,\n inputValue = undefined,\n label: _label = undefined,\n loading = false,\n multiSelect = false,\n name,\n onInputChange = undefined,\n options,\n placeholder = undefined,\n testId: _testId = undefined,\n}: SelectProps) => {\n const { control, debugMode, getFieldState } = useFormContext();\n const { error, invalid, required, testId } = getFieldState(name, _testId);\n\n const [isFocused, setIsFocused] = useState(false);\n\n const variants = selectVariants();\n const classNames = variantsToClassNames(variants, className, 'base');\n\n const {\n getBaseProps,\n getErrorMessageProps,\n getHelperWrapperProps,\n getLabelProps,\n getTriggerProps,\n getValueProps,\n label,\n } = useSelect({\n children: [],\n classNames,\n errorMessage: JSON.stringify(error),\n isDisabled: disabled,\n isInvalid: invalid,\n isLoading: loading,\n isRequired: required,\n label: _label,\n labelPlacement: 'outside',\n placeholder: ' ',\n });\n\n const showTestIdCopyButton = debugMode === 'debug-testids';\n const showLabel = label || showTestIdCopyButton;\n\n return (\n <Controller\n control={control}\n name={name}\n render={({\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n field: { onChange, value, ref, onBlur },\n }) => (\n <div\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...getBaseProps()}\n className={cn(classNames.base)}\n data-testid={`${testId}_wrapper`}\n // see HeroUI styles for group-data condition (data-invalid),\n // e.g.: https://github.com/heroui-inc/heroui/blob/main/packages/components/select/src/use-select.ts\n data-required={required}\n >\n {showLabel && (\n <label\n className={classNames.label}\n data-slot=\"label\"\n htmlFor={`react-select-${name}-input`}\n id={getLabelProps().id}\n >\n {label}\n {showTestIdCopyButton && (\n <FieldCopyTestIdButton testId={testId} />\n )}\n </label>\n )}\n <ReactSelect\n aria-errormessage=\"\"\n aria-labelledby={\n getTriggerProps()['aria-labelledby']?.split(' ')[1]\n }\n aria-invalid={invalid}\n classNames={{\n control: () =>\n cn(classNames.control, {\n [classNames.control_focused]: isFocused && !invalid,\n }),\n clearIndicator: () => classNames.clearIndicator,\n dropdownIndicator: () => classNames.dropdownIndicator,\n groupHeading: () => classNames.groupHeading,\n indicatorsContainer: () => classNames.indicatorsContainer,\n indicatorSeparator: () => classNames.indicatorSeparator,\n input: () => classNames.input,\n menu: () => classNames.menu,\n menuList: () => classNames.menuList,\n menuPortal: () => classNames.menuPortal,\n multiValue: () => classNames.multiValue,\n multiValueLabel: () =>\n cn(classNames.multiValueLabel, `${getValueProps().className}`),\n multiValueRemove: () => classNames.multiValueRemove,\n noOptionsMessage: () => classNames.noOptionsMessage,\n option: ({\n isFocused: optionIsFocused,\n isSelected: optionIsSelected,\n }) =>\n cn(classNames.option, {\n [classNames.option_focused]: optionIsFocused,\n [classNames.option_selected]: optionIsSelected,\n }),\n placeholder: () => classNames.placeholder,\n singleValue: () =>\n cn(classNames.singleValue, `${getValueProps().className}`),\n valueContainer: () => classNames.valueContainer,\n }}\n components={{\n Input: InputComponent,\n Option: OptionComponent,\n DropdownIndicator: DropdownIndicatorComponent,\n Control: ControlComponent,\n }}\n // Does not affect the testId of the select, but is needed to pass it to sub-components\n data-testid={testId}\n filterOption={filterOption}\n formatOptionLabel={renderOptionLabel}\n inputValue={inputValue}\n instanceId={name}\n isClearable={clearable}\n isDisabled={disabled}\n isLoading={loading}\n isMulti={multiSelect}\n name={name}\n // set menuPosition to fixed so that menu can be rendered\n // inside Card / Modal components, menuShouldBlockScroll\n // prevents container scroll when menu is open\n menuPosition=\"fixed\"\n menuShouldBlockScroll\n options={options}\n placeholder={placeholder}\n onBlur={(_e) => {\n setIsFocused(false);\n return onBlur();\n }}\n onChange={(option) => {\n if (multiSelect) {\n onChange(\n (option as SelectOption[])?.map((_option) => _option.value),\n );\n } else {\n onChange((option as SelectOption)?.value);\n }\n }}\n onFocus={(_e) => {\n setIsFocused(true);\n }}\n onInputChange={onInputChange}\n ref={ref}\n // set complete option as value by current field value\n value={options.find((option) => option.value === value)}\n unstyled\n />\n {error && (\n // eslint-disable-next-line react/jsx-props-no-spreading\n <div {...getHelperWrapperProps()}>\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n <div {...getErrorMessageProps()}>\n <FieldValidationError error={error} />\n </div>\n </div>\n )}\n </div>\n )}\n />\n );\n};\n\nexport default Select;\n","import Select from './Select';\n\nexport type { SelectProps } from './Select';\n\nexport { Select };\n\nexport default Select;\n"]}
@@ -0,0 +1,372 @@
1
+ import {
2
+ FieldCopyTestIdButton_default
3
+ } from "./chunk-2CRY7VDQ.js";
4
+ import {
5
+ FieldValidationError_default
6
+ } from "./chunk-ASPOGQPS.js";
7
+ import {
8
+ useFieldArray,
9
+ useFormContext,
10
+ useInput
11
+ } from "./chunk-T4N6TMUL.js";
12
+ import {
13
+ toNullishString
14
+ } from "./chunk-UAV6PVB4.js";
15
+ import {
16
+ __spreadProps,
17
+ __spreadValues
18
+ } from "./chunk-CRTRMMJ7.js";
19
+
20
+ // src/FieldArray/FieldArray.tsx
21
+ import { cn as cn5, tv, variantsToClassNames } from "@fuf-stack/pixel-utils";
22
+ import { Button as Button3 } from "@fuf-stack/pixels";
23
+
24
+ // src/FieldArray/subcomponents/FieldArrayElement.tsx
25
+ import { useSortable as useSortable2 } from "@dnd-kit/sortable";
26
+ import { CSS } from "@dnd-kit/utilities";
27
+ import { cn as cn4 } from "@fuf-stack/pixel-utils";
28
+
29
+ // src/FieldArray/subcomponents/ElementInsertAfterButton.tsx
30
+ import { FaPlus } from "react-icons/fa6";
31
+ import { cn } from "@fuf-stack/pixel-utils";
32
+ import { Button } from "@fuf-stack/pixels";
33
+ import { jsx } from "react/jsx-runtime";
34
+ var ElementInsertAfterButton = ({
35
+ className = void 0,
36
+ onClick,
37
+ testId = void 0
38
+ }) => {
39
+ return /* @__PURE__ */ jsx(
40
+ Button,
41
+ {
42
+ className: cn(className),
43
+ color: "success",
44
+ icon: /* @__PURE__ */ jsx(FaPlus, {}),
45
+ onClick,
46
+ size: "sm",
47
+ testId,
48
+ variant: "light"
49
+ }
50
+ );
51
+ };
52
+ var ElementInsertAfterButton_default = ElementInsertAfterButton;
53
+
54
+ // src/FieldArray/subcomponents/ElementRemoveButton.tsx
55
+ import { FaTimes } from "react-icons/fa";
56
+ import { cn as cn2 } from "@fuf-stack/pixel-utils";
57
+ import { Button as Button2 } from "@fuf-stack/pixels";
58
+ import { jsx as jsx2 } from "react/jsx-runtime";
59
+ var ElementRemoveButton = ({
60
+ className = void 0,
61
+ onClick,
62
+ testId = void 0
63
+ }) => {
64
+ return /* @__PURE__ */ jsx2(
65
+ Button2,
66
+ {
67
+ ariaLabel: "remove element",
68
+ className: cn2(className),
69
+ color: "danger",
70
+ icon: /* @__PURE__ */ jsx2(FaTimes, {}),
71
+ onClick,
72
+ testId,
73
+ variant: "light"
74
+ }
75
+ );
76
+ };
77
+ var ElementRemoveButton_default = ElementRemoveButton;
78
+
79
+ // src/FieldArray/subcomponents/SortDragHandle.tsx
80
+ import { FaGripVertical } from "react-icons/fa";
81
+ import { useSortable } from "@dnd-kit/sortable";
82
+ import { cn as cn3 } from "@fuf-stack/pixel-utils";
83
+ import { jsx as jsx3 } from "react/jsx-runtime";
84
+ var SortDragHandle = ({
85
+ className = void 0,
86
+ id,
87
+ testId = void 0
88
+ }) => {
89
+ const { attributes, listeners } = useSortable({ id });
90
+ return /* @__PURE__ */ jsx3(
91
+ "div",
92
+ __spreadProps(__spreadValues(__spreadValues({
93
+ className: cn3(className),
94
+ "data-testid": testId
95
+ }, attributes), listeners), {
96
+ children: /* @__PURE__ */ jsx3(FaGripVertical, {})
97
+ })
98
+ );
99
+ };
100
+ var SortDragHandle_default = SortDragHandle;
101
+
102
+ // src/FieldArray/subcomponents/FieldArrayElement.tsx
103
+ import { Fragment, jsx as jsx4, jsxs } from "react/jsx-runtime";
104
+ var FieldArrayElement = ({
105
+ children,
106
+ className,
107
+ fields,
108
+ id,
109
+ index,
110
+ insertAfter = false,
111
+ lastNotDeletable = true,
112
+ methods,
113
+ name,
114
+ sortable = false,
115
+ testId = void 0
116
+ }) => {
117
+ var _a;
118
+ const { getFieldState } = useFormContext();
119
+ const { error, invalid } = getFieldState(`${name}`, void 0);
120
+ const { getHelperWrapperProps, getErrorMessageProps } = useInput({
121
+ classNames: { helperWrapper: "block" },
122
+ errorMessage: JSON.stringify(error),
123
+ isInvalid: invalid,
124
+ labelPlacement: "inside",
125
+ placeholder: " "
126
+ });
127
+ const { setNodeRef, transform, transition } = useSortable2({ id });
128
+ const sortingStyle = sortable ? {
129
+ transform: CSS.Translate.toString(transform),
130
+ transition
131
+ } : void 0;
132
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
133
+ /* @__PURE__ */ jsxs(
134
+ "li",
135
+ {
136
+ className: cn4(className.listItem),
137
+ ref: setNodeRef,
138
+ style: sortingStyle,
139
+ children: [
140
+ sortable && /* @__PURE__ */ jsx4(
141
+ SortDragHandle_default,
142
+ {
143
+ className: className.sortDragHandle,
144
+ id,
145
+ testId: `${testId}_sort_drag_handle`
146
+ }
147
+ ),
148
+ /* @__PURE__ */ jsx4("div", { className: cn4(className.elementContent), "data-testid": testId, children }),
149
+ lastNotDeletable && fields.length === 1 ? null : /* @__PURE__ */ jsx4(
150
+ ElementRemoveButton_default,
151
+ {
152
+ className: className.removeButton,
153
+ onClick: () => methods.remove(),
154
+ testId: `${testId}_remove_button`
155
+ }
156
+ ),
157
+ insertAfter && index !== fields.length - 1 && /* @__PURE__ */ jsx4(
158
+ ElementInsertAfterButton_default,
159
+ {
160
+ className: className.insertAfterButton,
161
+ onClick: () => methods.insert(),
162
+ testId: `${testId}_insert_after_button`
163
+ }
164
+ )
165
+ ]
166
+ }
167
+ ),
168
+ error && typeof error[index] !== "undefined" && /* @__PURE__ */ jsx4("div", __spreadProps(__spreadValues({}, getHelperWrapperProps()), { children: /* @__PURE__ */ jsx4("div", __spreadProps(__spreadValues({}, getErrorMessageProps()), { children: /* @__PURE__ */ jsx4(
169
+ FieldValidationError_default,
170
+ {
171
+ error: (_a = error[Number(index)]) == null ? void 0 : _a._errors
172
+ }
173
+ ) })) }))
174
+ ] });
175
+ };
176
+ var FieldArrayElement_default = FieldArrayElement;
177
+
178
+ // src/FieldArray/subcomponents/SortContext.tsx
179
+ import {
180
+ closestCenter,
181
+ DndContext,
182
+ KeyboardSensor,
183
+ PointerSensor,
184
+ useSensor,
185
+ useSensors
186
+ } from "@dnd-kit/core";
187
+ import {
188
+ restrictToVerticalAxis,
189
+ restrictToWindowEdges
190
+ } from "@dnd-kit/modifiers";
191
+ import {
192
+ SortableContext,
193
+ verticalListSortingStrategy
194
+ } from "@dnd-kit/sortable";
195
+ import { jsx as jsx5 } from "react/jsx-runtime";
196
+ var SortContext = ({
197
+ children,
198
+ sortable,
199
+ fields,
200
+ move
201
+ }) => {
202
+ const sensors = useSensors(
203
+ useSensor(PointerSensor),
204
+ useSensor(KeyboardSensor)
205
+ );
206
+ if (!sortable) {
207
+ return children;
208
+ }
209
+ const handleDragEnd = (event) => {
210
+ const { active, over } = event;
211
+ if (active.id !== (over == null ? void 0 : over.id)) {
212
+ const oldIndex = fields.findIndex((field) => field.id === active.id);
213
+ const newIndex = fields.findIndex((field) => field.id === (over == null ? void 0 : over.id));
214
+ move(oldIndex, newIndex);
215
+ }
216
+ };
217
+ return /* @__PURE__ */ jsx5(
218
+ DndContext,
219
+ {
220
+ collisionDetection: closestCenter,
221
+ modifiers: [restrictToVerticalAxis, restrictToWindowEdges],
222
+ onDragEnd: handleDragEnd,
223
+ sensors,
224
+ children: /* @__PURE__ */ jsx5(
225
+ SortableContext,
226
+ {
227
+ items: fields.map((field) => field.id),
228
+ strategy: verticalListSortingStrategy,
229
+ children
230
+ }
231
+ )
232
+ }
233
+ );
234
+ };
235
+ var SortContext_default = SortContext;
236
+
237
+ // src/FieldArray/FieldArray.tsx
238
+ import { Fragment as Fragment2, jsx as jsx6, jsxs as jsxs2 } from "react/jsx-runtime";
239
+ var fieldArrayVariants = tv({
240
+ slots: {
241
+ appendButton: "w-full",
242
+ elementContent: "flex-grow",
243
+ insertAfterButton: "text-xs font-medium",
244
+ label: "!pointer-events-auto !static !z-0 -mb-1 ml-1 !inline-block",
245
+ list: "m-0 w-full list-none",
246
+ listItem: "mb-4 flex w-full flex-row items-center",
247
+ removeButton: "ml-1",
248
+ sortDragHandle: "mr-2 text-base text-xl"
249
+ }
250
+ });
251
+ var FieldArray = ({
252
+ appendButtonText = "Add Element",
253
+ children,
254
+ className: _className = void 0,
255
+ duplicate = false,
256
+ elementInitialValue: _elementInitialValue = null,
257
+ insertAfter = false,
258
+ label: _label = void 0,
259
+ lastElementNotDeletable = true,
260
+ name,
261
+ sortable = false,
262
+ testId: _testId = void 0
263
+ }) => {
264
+ var _a;
265
+ const variants = fieldArrayVariants();
266
+ const className = variantsToClassNames(variants, _className, "list");
267
+ const {
268
+ control,
269
+ debugMode,
270
+ getValues,
271
+ getFieldState,
272
+ trigger
273
+ // watch
274
+ } = useFormContext();
275
+ const { fields, append, remove, insert, move } = useFieldArray({
276
+ control,
277
+ name
278
+ });
279
+ const { error, testId, invalid, required } = getFieldState(name, _testId);
280
+ const { label, getLabelProps, getHelperWrapperProps, getErrorMessageProps } = useInput({
281
+ isInvalid: invalid,
282
+ isRequired: required,
283
+ errorMessage: JSON.stringify(error),
284
+ label: _label,
285
+ labelPlacement: "inside",
286
+ placeholder: " ",
287
+ classNames: { helperWrapper: "block" }
288
+ });
289
+ const elementInitialValue = toNullishString(_elementInitialValue);
290
+ if (lastElementNotDeletable && fields.length === 0) {
291
+ append(elementInitialValue);
292
+ }
293
+ const showTestIdCopyButton = debugMode === "debug-testids";
294
+ const showLabel = label || showTestIdCopyButton;
295
+ return /* @__PURE__ */ jsx6(SortContext_default, { sortable, move, fields, children: /* @__PURE__ */ jsxs2(
296
+ "ul",
297
+ {
298
+ className: className.list,
299
+ "data-testid": testId,
300
+ onBlur: () => trigger(`${name}`),
301
+ children: [
302
+ showLabel && /* @__PURE__ */ jsxs2(Fragment2, { children: [
303
+ label && // eslint-disable-next-line jsx-a11y/label-has-associated-control
304
+ /* @__PURE__ */ jsx6(
305
+ "label",
306
+ __spreadProps(__spreadValues({}, getLabelProps()), {
307
+ className: cn5((_a = getLabelProps()) == null ? void 0 : _a.className, className.label),
308
+ children: label
309
+ })
310
+ ),
311
+ showTestIdCopyButton && /* @__PURE__ */ jsx6(FieldCopyTestIdButton_default, { testId })
312
+ ] }),
313
+ fields.map((field, index) => {
314
+ const methods = {
315
+ append: () => append(elementInitialValue),
316
+ duplicate: () => {
317
+ const values = getValues(name);
318
+ insert(index + 1, values[index]);
319
+ },
320
+ insert: () => insert(index + 1, elementInitialValue),
321
+ remove: () => remove(index)
322
+ };
323
+ return /* @__PURE__ */ jsx6(
324
+ FieldArrayElement_default,
325
+ {
326
+ className,
327
+ fields,
328
+ id: field.id,
329
+ index,
330
+ duplicate,
331
+ insertAfter,
332
+ lastNotDeletable: lastElementNotDeletable,
333
+ methods,
334
+ name,
335
+ sortable,
336
+ testId: `${testId}_${index}`,
337
+ children: children({
338
+ index,
339
+ length: fields.length,
340
+ methods,
341
+ name: `${name}.${index}`,
342
+ testId: `${testId}_${index}`
343
+ })
344
+ },
345
+ field.id
346
+ );
347
+ }),
348
+ /* @__PURE__ */ jsx6(
349
+ Button3,
350
+ {
351
+ className: className.appendButton,
352
+ onClick: () => append(elementInitialValue),
353
+ size: "sm",
354
+ testId: `${testId}_append_button`,
355
+ children: appendButtonText
356
+ }
357
+ ),
358
+ (error == null ? void 0 : error._errors) && /* @__PURE__ */ jsx6("div", __spreadProps(__spreadValues({}, getHelperWrapperProps()), { children: /* @__PURE__ */ jsx6("div", __spreadProps(__spreadValues({}, getErrorMessageProps()), { children: /* @__PURE__ */ jsx6(FieldValidationError_default, { error: error == null ? void 0 : error._errors }) })) }))
359
+ ]
360
+ }
361
+ ) });
362
+ };
363
+ var FieldArray_default = FieldArray;
364
+
365
+ // src/FieldArray/index.ts
366
+ var FieldArray_default2 = FieldArray_default;
367
+
368
+ export {
369
+ FieldArray_default,
370
+ FieldArray_default2
371
+ };
372
+ //# sourceMappingURL=chunk-IBQCNI5H.js.map