@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.
- package/dist/CheckboxGroup/index.cjs +7 -6
- package/dist/CheckboxGroup/index.cjs.map +1 -1
- package/dist/CheckboxGroup/index.d.cts +2 -2
- package/dist/CheckboxGroup/index.d.ts +2 -2
- package/dist/CheckboxGroup/index.js +6 -5
- package/dist/{CheckboxGroup-o-qWkWe1.d.cts → CheckboxGroup-fAdey3Td.d.cts} +1 -1
- package/dist/{CheckboxGroup-o-qWkWe1.d.ts → CheckboxGroup-fAdey3Td.d.ts} +1 -1
- package/dist/Controller/index.cjs +4 -2
- package/dist/Controller/index.cjs.map +1 -1
- package/dist/Controller/index.d.cts +7 -3
- package/dist/Controller/index.d.ts +7 -3
- package/dist/Controller/index.js +7 -5
- package/dist/Controller-8Nqugui5.d.cts +37 -0
- package/dist/Controller-8Nqugui5.d.ts +37 -0
- package/dist/FieldArray/index.cjs +6 -5
- package/dist/FieldArray/index.cjs.map +1 -1
- package/dist/FieldArray/index.d.cts +5 -3
- package/dist/FieldArray/index.d.ts +5 -3
- package/dist/FieldArray/index.js +5 -4
- package/dist/FieldArray-AqM2XKIh.d.cts +151 -0
- package/dist/FieldArray-AqM2XKIh.d.ts +151 -0
- package/dist/Form/index.cjs +5 -4
- package/dist/Form/index.cjs.map +1 -1
- package/dist/Form/index.js +4 -3
- package/dist/Grid/index.cjs +1 -0
- package/dist/Grid/index.cjs.map +1 -1
- package/dist/Grid/index.js +1 -0
- package/dist/Input/index.cjs +7 -6
- package/dist/Input/index.cjs.map +1 -1
- package/dist/Input/index.d.cts +2 -2
- package/dist/Input/index.d.ts +2 -2
- package/dist/Input/index.js +6 -5
- package/dist/{Input-IkWP4cWg.d.cts → Input-B_wjhY9e.d.cts} +1 -1
- package/dist/{Input-IkWP4cWg.d.ts → Input-B_wjhY9e.d.ts} +1 -1
- package/dist/RadioGroup/index.cjs +7 -6
- package/dist/RadioGroup/index.cjs.map +1 -1
- package/dist/RadioGroup/index.d.cts +2 -2
- package/dist/RadioGroup/index.d.ts +2 -2
- package/dist/RadioGroup/index.js +6 -5
- package/dist/{RadioGroup-1J39ASHa.d.cts → RadioGroup-Dxd2FPQj.d.cts} +1 -1
- package/dist/{RadioGroup-1J39ASHa.d.ts → RadioGroup-Dxd2FPQj.d.ts} +1 -1
- package/dist/Select/index.cjs +7 -6
- package/dist/Select/index.cjs.map +1 -1
- package/dist/Select/index.d.cts +2 -2
- package/dist/Select/index.d.ts +2 -2
- package/dist/Select/index.js +6 -5
- package/dist/{Select-BhS4z0Pj.d.cts → Select-JRwrSDew.d.cts} +1 -1
- package/dist/{Select-BhS4z0Pj.d.ts → Select-JRwrSDew.d.ts} +1 -1
- package/dist/SubmitButton/index.cjs +5 -4
- package/dist/SubmitButton/index.cjs.map +1 -1
- package/dist/SubmitButton/index.js +4 -3
- package/dist/Switch/index.cjs +7 -6
- package/dist/Switch/index.cjs.map +1 -1
- package/dist/Switch/index.d.cts +2 -2
- package/dist/Switch/index.d.ts +2 -2
- package/dist/Switch/index.js +6 -5
- package/dist/{Switch-Fdldj8LV.d.cts → Switch-mdolzzEc.d.cts} +1 -1
- package/dist/{Switch-Fdldj8LV.d.ts → Switch-mdolzzEc.d.ts} +1 -1
- package/dist/TextArea/index.cjs +7 -6
- package/dist/TextArea/index.cjs.map +1 -1
- package/dist/TextArea/index.d.cts +2 -2
- package/dist/TextArea/index.d.ts +2 -2
- package/dist/TextArea/index.js +6 -5
- package/dist/{TextArea-B-sKvTkd.d.cts → TextArea-DNpInDsW.d.cts} +1 -1
- package/dist/{TextArea-B-sKvTkd.d.ts → TextArea-DNpInDsW.d.ts} +1 -1
- package/dist/{chunk-QCVTB2NI.js → chunk-3QBYSFDX.js} +10 -9
- package/dist/chunk-3QBYSFDX.js.map +1 -0
- package/dist/chunk-4DAZAO6Y.cjs +59 -0
- package/dist/chunk-4DAZAO6Y.cjs.map +1 -0
- package/dist/{chunk-BS52M4SZ.js → chunk-5YDNHSEU.js} +47 -41
- package/dist/chunk-5YDNHSEU.js.map +1 -0
- package/dist/chunk-7ROOJK7G.cjs +110 -0
- package/dist/chunk-7ROOJK7G.cjs.map +1 -0
- package/dist/{chunk-WKM2D7LF.js → chunk-ASPOGQPS.js} +2 -5
- package/dist/chunk-ASPOGQPS.js.map +1 -0
- package/dist/{chunk-XCZKNTFT.cjs → chunk-BDVAK232.cjs} +23 -24
- package/dist/chunk-BDVAK232.cjs.map +1 -0
- package/dist/chunk-CESGUF6F.cjs +63 -0
- package/dist/chunk-CESGUF6F.cjs.map +1 -0
- package/dist/chunk-CRTRMMJ7.js +59 -0
- package/dist/chunk-CRTRMMJ7.js.map +1 -0
- package/dist/{chunk-VP7WDLJM.js → chunk-DS7GUNDT.js} +17 -14
- package/dist/chunk-DS7GUNDT.js.map +1 -0
- package/dist/chunk-ECDLVJLZ.js +246 -0
- package/dist/chunk-ECDLVJLZ.js.map +1 -0
- package/dist/{chunk-GN5NJ6ZU.js → chunk-GNDW3TAU.js} +3 -6
- package/dist/chunk-GNDW3TAU.js.map +1 -0
- package/dist/{chunk-VZ5MMFIF.cjs → chunk-H65I56SI.cjs} +4 -7
- package/dist/chunk-H65I56SI.cjs.map +1 -0
- package/dist/chunk-HCQJGNWT.cjs +246 -0
- package/dist/chunk-HCQJGNWT.cjs.map +1 -0
- package/dist/chunk-IBQCNI5H.js +372 -0
- package/dist/chunk-IBQCNI5H.js.map +1 -0
- package/dist/chunk-IUVEFLF3.cjs +133 -0
- package/dist/chunk-IUVEFLF3.cjs.map +1 -0
- package/dist/{chunk-Y3SFF6RN.cjs → chunk-KIAIGPG7.cjs} +11 -10
- package/dist/chunk-KIAIGPG7.cjs.map +1 -0
- package/dist/{chunk-QW44EUAH.js → chunk-MEK7YR46.js} +10 -10
- package/dist/chunk-MEK7YR46.js.map +1 -0
- package/dist/{chunk-OHJYXA6R.cjs → chunk-OE5IW4ZG.cjs} +4 -7
- package/dist/chunk-OE5IW4ZG.cjs.map +1 -0
- package/dist/chunk-PHGFXKPU.cjs +51 -0
- package/dist/chunk-PHGFXKPU.cjs.map +1 -0
- package/dist/{chunk-PZ4LZQI4.cjs → chunk-Q23XGBJ5.cjs} +18 -15
- package/dist/chunk-Q23XGBJ5.cjs.map +1 -0
- package/dist/{chunk-DDZMDOSG.js → chunk-STU7SBQX.js} +25 -23
- package/dist/chunk-STU7SBQX.js.map +1 -0
- package/dist/{chunk-BZAPTLMC.js → chunk-T4N6TMUL.js} +49 -49
- package/dist/chunk-T4N6TMUL.js.map +1 -0
- package/dist/chunk-TJESSWIB.cjs +372 -0
- package/dist/chunk-TJESSWIB.cjs.map +1 -0
- package/dist/chunk-UAV6PVB4.js +63 -0
- package/dist/chunk-UAV6PVB4.js.map +1 -0
- package/dist/{chunk-BYKOCVCK.js → chunk-WKJN5A2E.js} +22 -23
- package/dist/chunk-WKJN5A2E.js.map +1 -0
- package/dist/{chunk-XJZAS7NG.cjs → chunk-WRIXKFKW.cjs} +25 -23
- package/dist/chunk-WRIXKFKW.cjs.map +1 -0
- package/dist/{chunk-RBIX6EWU.cjs → chunk-Y7MJBI4A.cjs} +11 -11
- package/dist/chunk-Y7MJBI4A.cjs.map +1 -0
- package/dist/chunk-ZI22WT2P.js +51 -0
- package/dist/chunk-ZI22WT2P.js.map +1 -0
- package/dist/helpers/index.cjs +9 -2
- package/dist/helpers/index.cjs.map +1 -1
- package/dist/helpers/index.d.cts +67 -4
- package/dist/helpers/index.d.ts +67 -4
- package/dist/helpers/index.js +10 -3
- package/dist/hooks/index.cjs +6 -3
- package/dist/hooks/index.cjs.map +1 -1
- package/dist/hooks/index.d.cts +3 -2
- package/dist/hooks/index.d.ts +3 -2
- package/dist/hooks/index.js +7 -4
- package/dist/index.cjs +25 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -10
- package/dist/index.d.ts +11 -10
- package/dist/index.js +31 -22
- package/dist/partials/FieldCopyTestIdButton/index.cjs +1 -0
- package/dist/partials/FieldCopyTestIdButton/index.cjs.map +1 -1
- package/dist/partials/FieldCopyTestIdButton/index.js +1 -0
- package/dist/partials/FieldValidationError/index.cjs +3 -3
- package/dist/partials/FieldValidationError/index.js +2 -2
- package/package.json +18 -20
- package/dist/FieldArray-DD9z-xZ3.d.cts +0 -37
- package/dist/FieldArray-DD9z-xZ3.d.ts +0 -37
- package/dist/chunk-BBB4FEY6.cjs +0 -22
- package/dist/chunk-BBB4FEY6.cjs.map +0 -1
- package/dist/chunk-BS52M4SZ.js.map +0 -1
- package/dist/chunk-BYKOCVCK.js.map +0 -1
- package/dist/chunk-BZAPTLMC.js.map +0 -1
- package/dist/chunk-DDZMDOSG.js.map +0 -1
- package/dist/chunk-EKE5URXQ.cjs +0 -104
- package/dist/chunk-EKE5URXQ.cjs.map +0 -1
- package/dist/chunk-GN5NJ6ZU.js.map +0 -1
- package/dist/chunk-HOETR36J.cjs +0 -299
- package/dist/chunk-HOETR36J.cjs.map +0 -1
- package/dist/chunk-HZP3EXGR.cjs +0 -241
- package/dist/chunk-HZP3EXGR.cjs.map +0 -1
- package/dist/chunk-IUNDGVMC.js +0 -241
- package/dist/chunk-IUNDGVMC.js.map +0 -1
- package/dist/chunk-KOKIM2ND.js +0 -9
- package/dist/chunk-KOKIM2ND.js.map +0 -1
- package/dist/chunk-OHJYXA6R.cjs.map +0 -1
- package/dist/chunk-PZ4LZQI4.cjs.map +0 -1
- package/dist/chunk-QCVTB2NI.js.map +0 -1
- package/dist/chunk-QW44EUAH.js.map +0 -1
- package/dist/chunk-RBIX6EWU.cjs.map +0 -1
- package/dist/chunk-V46BHM2U.js +0 -22
- package/dist/chunk-V46BHM2U.js.map +0 -1
- package/dist/chunk-VP7WDLJM.js.map +0 -1
- package/dist/chunk-VQWKXSHW.cjs +0 -9
- package/dist/chunk-VQWKXSHW.cjs.map +0 -1
- package/dist/chunk-VZ5MMFIF.cjs.map +0 -1
- package/dist/chunk-WKM2D7LF.js.map +0 -1
- package/dist/chunk-XCZKNTFT.cjs.map +0 -1
- package/dist/chunk-XJWEUCV3.cjs +0 -133
- package/dist/chunk-XJWEUCV3.cjs.map +0 -1
- package/dist/chunk-XJZAS7NG.cjs.map +0 -1
- package/dist/chunk-Y3SFF6RN.cjs.map +0 -1
- package/dist/chunk-Y53IHK6B.js +0 -299
- 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
|