@oneplatformdev/ui 0.1.99-beta.301 → 0.1.99-beta.302
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/Combobox/Combobox.js +38 -37
- package/Combobox/Combobox.js.map +1 -1
- package/Combobox/Combobox.types.d.ts +2 -0
- package/Combobox/Combobox.types.d.ts.map +1 -1
- package/Combobox/Combobox.types.js.map +1 -1
- package/Form/Form.js +14 -14
- package/Form/Form.js.map +1 -1
- package/FormCombobox/FormCombobox.stories.js +104 -0
- package/FormCombobox/FormCombobox.stories.js.map +1 -0
- package/FormSelect/FormSelect.d.ts.map +1 -1
- package/FormSelect/FormSelect.js +30 -26
- package/FormSelect/FormSelect.js.map +1 -1
- package/Input/inputVariants.d.ts.map +1 -1
- package/Input/inputVariants.js +2 -3
- package/Input/inputVariants.js.map +1 -1
- package/Select/Select.d.ts.map +1 -1
- package/Select/Select.js +62 -50
- package/Select/Select.js.map +1 -1
- package/Select/Select.types.d.ts +2 -0
- package/Select/Select.types.d.ts.map +1 -1
- package/Textarea/Textarea.d.ts.map +1 -1
- package/Textarea/Textarea.js +18 -19
- package/Textarea/Textarea.js.map +1 -1
- package/package.json +4 -4
package/Combobox/Combobox.js
CHANGED
|
@@ -5,7 +5,7 @@ import { DEFAULT_COMBOBOX_TYPE as xe } from "./Combobox.types.js";
|
|
|
5
5
|
import { ComboboxRenderTrigger as Le } from "./ComboboxRenderTrigger.js";
|
|
6
6
|
import { ComboboxRenderContent as Re } from "./ComboboxRenderContent.js";
|
|
7
7
|
import { Popover as Ee } from "../Popover/Popover.js";
|
|
8
|
-
function
|
|
8
|
+
function Fe(o) {
|
|
9
9
|
const {
|
|
10
10
|
value: f,
|
|
11
11
|
options: N,
|
|
@@ -13,7 +13,7 @@ function Be(o) {
|
|
|
13
13
|
disabled: K,
|
|
14
14
|
searchLabel: Q,
|
|
15
15
|
emptyLabel: W,
|
|
16
|
-
loadData:
|
|
16
|
+
loadData: p,
|
|
17
17
|
renderTrigger: Z,
|
|
18
18
|
commandInputAction: ee,
|
|
19
19
|
renderList: te,
|
|
@@ -24,20 +24,20 @@ function Be(o) {
|
|
|
24
24
|
defaultNodeOpen: ae,
|
|
25
25
|
defaultNodeDisabled: se,
|
|
26
26
|
defaultNodeMatched: ce,
|
|
27
|
-
defaultNodeMuted:
|
|
28
|
-
defaultNodeInteractive:
|
|
27
|
+
defaultNodeMuted: le,
|
|
28
|
+
defaultNodeInteractive: ie,
|
|
29
29
|
forcePointerSelect: ue
|
|
30
|
-
} = o, v = o.type ?? xe, [fe, z] = d(!1), [h, b] = d(!1), [k, A] = d(!1), [C, x] = d(!1), [g, L] = d(""), [S, O] = d(/* @__PURE__ */ new Map()), [
|
|
30
|
+
} = o, v = o.type ?? xe, [fe, z] = d(!1), [h, b] = d(!1), [k, A] = d(!1), [C, x] = d(!1), [g, L] = d(""), [S, O] = d(/* @__PURE__ */ new Map()), [y, de] = d([]), [he, me] = d([]), M = u((t) => {
|
|
31
31
|
const r = (e) => {
|
|
32
32
|
const n = [], s = (c) => {
|
|
33
33
|
if (c)
|
|
34
|
-
for (const
|
|
35
|
-
n.push(
|
|
34
|
+
for (const i of c)
|
|
35
|
+
n.push(i), i.items && i.items.length && s(i.items);
|
|
36
36
|
};
|
|
37
37
|
s(e), me((c) => {
|
|
38
38
|
if (!n.find((a) => !!f && String(a.value) === String(f))) {
|
|
39
|
-
const
|
|
40
|
-
if (
|
|
39
|
+
const l = ((S.size ? Array.from(S.values()) : void 0) || c).find((j) => !!f && String(j.value) === String(f));
|
|
40
|
+
if (l) return [l, ...n];
|
|
41
41
|
}
|
|
42
42
|
return n;
|
|
43
43
|
});
|
|
@@ -45,16 +45,16 @@ function Be(o) {
|
|
|
45
45
|
de((e) => {
|
|
46
46
|
const n = typeof t == "function" ? t(e) : t;
|
|
47
47
|
return r(n), O((s) => {
|
|
48
|
-
const c = new Map(s),
|
|
49
|
-
for (const a of
|
|
48
|
+
const c = new Map(s), i = Array.isArray(f) ? f : [f];
|
|
49
|
+
for (const a of i) {
|
|
50
50
|
if (!a || c.has(a)) continue;
|
|
51
|
-
const
|
|
52
|
-
|
|
51
|
+
const l = n.find((j) => String(j.value).toLowerCase() === String(a).toLowerCase());
|
|
52
|
+
l && c.set(l.value, l);
|
|
53
53
|
}
|
|
54
54
|
return c;
|
|
55
55
|
}), n;
|
|
56
56
|
});
|
|
57
|
-
}, [S, f]), [ge, G] = d(0), [
|
|
57
|
+
}, [S, f]), [ge, G] = d(0), [B, V] = d(0), F = B < ge;
|
|
58
58
|
$(() => {
|
|
59
59
|
N?.length && M(N);
|
|
60
60
|
}, [N]);
|
|
@@ -64,7 +64,7 @@ function Be(o) {
|
|
|
64
64
|
return R.current = t, { id: w.current, signal: t.signal };
|
|
65
65
|
}, []);
|
|
66
66
|
$(() => () => R.current?.abort(), []);
|
|
67
|
-
const X = H(() => !!g && !
|
|
67
|
+
const X = H(() => !!g && !y.length && !h, [h, y.length, g]), U = H(() => !y.length && !h, [h, y.length, g]), I = u((t) => {
|
|
68
68
|
o.type === "single" && (O((r) => {
|
|
69
69
|
let e = new Map(r);
|
|
70
70
|
const n = e.has(t.value);
|
|
@@ -75,7 +75,7 @@ function Be(o) {
|
|
|
75
75
|
});
|
|
76
76
|
}, [o.type, o.onChange]), m = H(() => {
|
|
77
77
|
const t = {
|
|
78
|
-
options:
|
|
78
|
+
options: y,
|
|
79
79
|
setOptions: M,
|
|
80
80
|
search: g || "",
|
|
81
81
|
setSearch: L,
|
|
@@ -91,28 +91,28 @@ function Be(o) {
|
|
|
91
91
|
if (v === "multi")
|
|
92
92
|
return { ...t, type: "multi", selectedOption: r, setSelectedOption: (s) => {
|
|
93
93
|
O((c) => {
|
|
94
|
-
const
|
|
95
|
-
return a ? new Map(a.map((
|
|
94
|
+
const i = Array.from(c.values()), a = typeof s == "function" ? s(i) : s;
|
|
95
|
+
return a ? new Map(a.map((l) => [l.value, l])) : /* @__PURE__ */ new Map();
|
|
96
96
|
});
|
|
97
97
|
} };
|
|
98
98
|
if (v === "single") {
|
|
99
99
|
const e = r[0];
|
|
100
100
|
return { ...t, type: "single", selectedOption: e, setSelectedOption: (s) => {
|
|
101
101
|
O((c) => {
|
|
102
|
-
const [
|
|
103
|
-
return a &&
|
|
102
|
+
const [i] = Array.from(c.values()), a = typeof s == "function" ? s(i) : s, l = /* @__PURE__ */ new Map();
|
|
103
|
+
return a && l.set(a.value, a), l;
|
|
104
104
|
});
|
|
105
105
|
} };
|
|
106
106
|
}
|
|
107
107
|
throw new Error(`Combobox type ${v} is not supported`);
|
|
108
|
-
}, [T, h, C,
|
|
108
|
+
}, [T, h, C, y, g, S, U, X, M, I, o.type]);
|
|
109
109
|
Ce(o.imperativeRef, () => m, [m]);
|
|
110
110
|
const D = u(async (t, r) => {
|
|
111
|
-
const e = await
|
|
111
|
+
const e = await p(t, r, m);
|
|
112
112
|
if (!e) throw new Error("Expected loadData to return data");
|
|
113
113
|
return Array.isArray(e) ? { data: e, total: e.length } : e;
|
|
114
|
-
}, [
|
|
115
|
-
if (!
|
|
114
|
+
}, [p, m]), _ = u(async (t = "") => {
|
|
115
|
+
if (!p) return;
|
|
116
116
|
const { id: r, signal: e } = E();
|
|
117
117
|
try {
|
|
118
118
|
b(!0), A(!1);
|
|
@@ -124,13 +124,13 @@ function Be(o) {
|
|
|
124
124
|
} finally {
|
|
125
125
|
r === w.current && b(!1);
|
|
126
126
|
}
|
|
127
|
-
}, [E, D,
|
|
128
|
-
if (!
|
|
127
|
+
}, [E, D, p]), ye = u(async () => {
|
|
128
|
+
if (!p || !F || h || k) return;
|
|
129
129
|
const { id: t, signal: r } = E();
|
|
130
130
|
try {
|
|
131
131
|
A(!0);
|
|
132
132
|
const e = await D(
|
|
133
|
-
{ search: g, offset:
|
|
133
|
+
{ search: g, offset: B },
|
|
134
134
|
r
|
|
135
135
|
);
|
|
136
136
|
M((n) => [...n, ...e.data]), G(e.total), V((n) => n + e.data.length);
|
|
@@ -139,19 +139,20 @@ function Be(o) {
|
|
|
139
139
|
} finally {
|
|
140
140
|
t === w.current && A(!1);
|
|
141
141
|
}
|
|
142
|
-
}, [E, D,
|
|
142
|
+
}, [E, D, F, p, h, k, B, g]), pe = Ae(_, 600, {
|
|
143
143
|
leading: !1,
|
|
144
144
|
trailing: !0
|
|
145
145
|
}), ve = u((t) => {
|
|
146
|
-
b(!0), L(t),
|
|
146
|
+
b(!0), L(t), pe(t);
|
|
147
147
|
}, []), Se = u(() => {
|
|
148
148
|
o.onChange(void 0), O(/* @__PURE__ */ new Map()), x(!1);
|
|
149
149
|
}, [o.onChange]), Y = u(() => {
|
|
150
150
|
R.current?.abort(), w.current += 1, L(""), b(!1), A(!1);
|
|
151
151
|
}, []), Oe = u(async (t) => {
|
|
152
|
-
if (x(t), !t)
|
|
152
|
+
if (x(t), !t)
|
|
153
|
+
return o.onBlur?.(), Y();
|
|
153
154
|
_(), L("");
|
|
154
|
-
}, [Y, _]), we = u(async () => {
|
|
155
|
+
}, [Y, _, o.onBlur]), we = u(async () => {
|
|
155
156
|
if (o.onMount) {
|
|
156
157
|
z(!0);
|
|
157
158
|
try {
|
|
@@ -193,12 +194,12 @@ function Be(o) {
|
|
|
193
194
|
open: C,
|
|
194
195
|
value: f,
|
|
195
196
|
type: v,
|
|
196
|
-
options:
|
|
197
|
+
options: y,
|
|
197
198
|
search: g,
|
|
198
199
|
onSearch: ve,
|
|
199
200
|
onSelect: I,
|
|
200
|
-
onLoadMore:
|
|
201
|
-
hasNext:
|
|
201
|
+
onLoadMore: ye,
|
|
202
|
+
hasNext: F,
|
|
202
203
|
loading: h,
|
|
203
204
|
loadingMore: k,
|
|
204
205
|
isEmptyList: U,
|
|
@@ -214,8 +215,8 @@ function Be(o) {
|
|
|
214
215
|
defaultNodeOpen: ae,
|
|
215
216
|
defaultNodeDisabled: se,
|
|
216
217
|
defaultNodeMatched: ce,
|
|
217
|
-
defaultNodeMuted:
|
|
218
|
-
defaultNodeInteractive:
|
|
218
|
+
defaultNodeMuted: le,
|
|
219
|
+
defaultNodeInteractive: ie,
|
|
219
220
|
forcePointerSelect: ue,
|
|
220
221
|
popoverContainer: P?.popover?.container
|
|
221
222
|
}
|
|
@@ -225,6 +226,6 @@ function Be(o) {
|
|
|
225
226
|
) });
|
|
226
227
|
}
|
|
227
228
|
export {
|
|
228
|
-
|
|
229
|
+
Fe as Combobox
|
|
229
230
|
};
|
|
230
231
|
//# sourceMappingURL=Combobox.js.map
|
package/Combobox/Combobox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Combobox.js","sources":["../../src/Combobox/Combobox.tsx"],"sourcesContent":["import {\r\n Dispatch, JSX,\r\n SetStateAction,\r\n useCallback,\r\n useEffect, useImperativeHandle,\r\n useLayoutEffect,\r\n useMemo, useRef,\r\n useState,\r\n} from 'react';\r\nimport { Popover } from '../Popover';\r\nimport { useDebounceCallback } from '@oneplatformdev/hooks';\r\nimport {\r\n ComboboxCallbackStateParams, ComboboxCallbackStateParamsRenderHandler,\r\n ComboboxOption,\r\n ComboboxProps, ComboboxSelectedType,\r\n DEFAULT_COMBOBOX_TYPE, MultiComboboxProps, SingleComboboxProps,\r\n} from './Combobox.types';\r\nimport { ComboboxRenderTrigger } from \"./ComboboxRenderTrigger\";\r\nimport { ComboboxRenderContent } from \"./ComboboxRenderContent\";\r\n\r\nexport function Combobox<Data extends object>(props: SingleComboboxProps<Data>): JSX.Element;\r\nexport function Combobox<Data extends object>(props: MultiComboboxProps<Data>): JSX.Element;\r\n\r\nexport function Combobox<Data extends object = object>(\r\n props: ComboboxProps<Data, 'single'> | ComboboxProps<Data, 'multi'>\r\n): JSX.Element {\r\n const {\r\n value,\r\n options: itemOptions,\r\n placeholder,\r\n disabled,\r\n searchLabel,\r\n emptyLabel,\r\n loadData,\r\n renderTrigger,\r\n commandInputAction,\r\n renderList,\r\n listHeadAction,\r\n listFooterAction,\r\n emptyAction,\r\n slotProps,\r\n defaultNodeOpen,\r\n defaultNodeDisabled,\r\n defaultNodeMatched,\r\n defaultNodeMuted,\r\n defaultNodeInteractive,\r\n forcePointerSelect,\r\n } = props;\r\n\r\n const type: ComboboxSelectedType = props.type ?? DEFAULT_COMBOBOX_TYPE;\r\n type StateSingle = ComboboxCallbackStateParams<Data, 'single'>;\r\n type StateMulti = ComboboxCallbackStateParams<Data, 'multi'>;\r\n type State = StateSingle | StateMulti;\r\n\r\n const [ initialLoading, setInitialLoading ] = useState(false);\r\n const [ loading, setLoading ] = useState(false);\r\n const [loadingMore, setLoadingMore] = useState(false);\r\n\r\n const [ open, setOpen ] = useState(false);\r\n const [ searchTerm, setSearchTerm ] = useState('');\r\n\r\n const [ selectedOptions, setSelectedOptions ] = useState<\r\n Map<ComboboxOption<Data>['value'], ComboboxOption<Data>>\r\n >(new Map());\r\n\r\n const [ options, _setOptions ] = useState<ComboboxOption<Data>[]>([]);\r\n const [ flattenOptions, setFlattenOptions ] = useState<ComboboxOption<Data>[]>([]);\r\n const setOptions: Dispatch<SetStateAction<ComboboxOption<Data>[]>> = useCallback((stater) => {\r\n const flatten = (next: ComboboxOption<Data>[]) => {\r\n const res: ComboboxOption<Data>[] = [];\r\n const walk = (nodes?: ComboboxOption<Data>[]) => {\r\n if (!nodes) return;\r\n for (const node of nodes) {\r\n res.push(node);\r\n if (node.items && node.items.length) walk(node.items);\r\n }\r\n };\r\n walk(next);\r\n setFlattenOptions((prev) => {\r\n const isIncludedInRes = res.find(o => !!value && String(o.value) === String(value));\r\n\r\n if (!isIncludedInRes) {\r\n const selectedOption = selectedOptions.size ? Array.from(selectedOptions.values()) : undefined;\r\n const current = (selectedOption || prev).find(o => !!value && String(o.value) === String(value))\r\n if (current) return [ current, ...res ];\r\n }\r\n\r\n return res;\r\n });\r\n }\r\n _setOptions((prev) => {\r\n const next: ComboboxOption<Data>[] = typeof stater === 'function' ? stater(prev) : stater;\r\n flatten(next);\r\n setSelectedOptions(prevSelections => {\r\n const nextSelections = new Map(prevSelections);\r\n const vls = Array.isArray(value) ? value : [value];\r\n for (const v of vls) {\r\n if(!v) continue;\r\n if(nextSelections.has(v)) continue;\r\n const o = next.find(o => String(o.value).toLowerCase() === String(v).toLowerCase());\r\n if(!o) continue;\r\n nextSelections.set(o.value, o);\r\n }\r\n return nextSelections;\r\n })\r\n return next;\r\n });\r\n }, [ selectedOptions, value ])\r\n\r\n const [total, setTotal] = useState<number>(0);\r\n const [offset, setOffset] = useState<number>(0);\r\n const hasNext = offset < total;\r\n\r\n useEffect(() => {\r\n itemOptions?.length && setOptions(itemOptions);\r\n }, [ itemOptions ]);\r\n\r\n const requestIdRef = useRef(0);\r\n const abortRef = useRef<AbortController>(null);\r\n const beginRequest = useCallback(() => {\r\n requestIdRef.current += 1;\r\n abortRef.current?.abort();\r\n const ac = new AbortController();\r\n abortRef.current = ac;\r\n return { id: requestIdRef.current, signal: ac.signal };\r\n }, []);\r\n useEffect(() => {\r\n return () => abortRef.current?.abort();\r\n }, []);\r\n\r\n const isSearchedEmptyList = useMemo(() => {\r\n return Boolean(searchTerm) && !options.length && !loading;\r\n }, [ loading, options.length, searchTerm ])\r\n\r\n const isEmptyList = useMemo(() => {\r\n return !options.length && !loading;\r\n }, [ loading, options.length, searchTerm ])\r\n\r\n const onChangeOption = useCallback((option: ComboboxOption<Data>) => {\r\n if(props.type === 'single') {\r\n setSelectedOptions(prev => {\r\n let next = new Map(prev);\r\n const isSelected = next.has(option.value);\r\n\r\n if(next.has(option.value)) next = new Map();\r\n else next.set(option.value, option);\r\n\r\n if(isSelected) props.onChange?.(undefined);\r\n else props.onChange?.(option.value);\r\n\r\n return next;\r\n });\r\n setOpen(false);\r\n }\r\n\r\n if(props.type === 'multi') {\r\n setSelectedOptions(prev => {\r\n const next = new Map(prev);\r\n if(next.has(option.value)) next.delete(option.value);\r\n else next.set(option.value, option);\r\n props.onChange?.(Array.from(next.keys()));\r\n return next;\r\n });\r\n }\r\n }, [props.type, props.onChange]);\r\n\r\n const callbackStateParams = useMemo((): State => {\r\n const base = {\r\n options,\r\n setOptions,\r\n search: searchTerm || '',\r\n setSearch: setSearchTerm,\r\n onChangeOption,\r\n open,\r\n setOpen,\r\n loading,\r\n setLoading,\r\n isEmptyList,\r\n isSearchedEmptyList,\r\n placeholder,\r\n }\r\n\r\n const selectedOptionArray = Array.from(selectedOptions.values());\r\n\r\n if(type === 'multi') {\r\n const selectedOption = selectedOptionArray\r\n const setSelectedOption: Dispatch<SetStateAction<ComboboxOption<Data>[] | undefined>> = (value) => {\r\n setSelectedOptions((prevSet) => {\r\n const prevStateArray = Array.from(prevSet.values());\r\n const nextStateArray = typeof value === 'function'\r\n ? (value as (prev: ComboboxOption<Data>[]) => ComboboxOption<Data>[])(prevStateArray)\r\n : value;\r\n if (!nextStateArray) return new Map();\r\n return new Map(nextStateArray.map(o => [o.value, o]));\r\n });\r\n };\r\n return { ...base, type: 'multi', selectedOption, setSelectedOption } satisfies StateMulti;\r\n }\r\n\r\n if(type === 'single') {\r\n const selectedOption = selectedOptionArray[0]\r\n const setSelectedOption: Dispatch<SetStateAction<ComboboxOption<Data> | undefined>> = (value) => {\r\n setSelectedOptions((prevSet) => {\r\n const [currentSingle] = Array.from(prevSet.values());\r\n const nextValue = typeof value === 'function'\r\n ? (value as (prev: ComboboxOption<Data> | undefined) => ComboboxOption<Data> | undefined)(currentSingle)\r\n : value;\r\n\r\n const nextMap = new Map<ComboboxOption<Data>['value'], ComboboxOption<Data>>();\r\n if (nextValue) nextMap.set(nextValue.value, nextValue);\r\n return nextMap;\r\n });\r\n };\r\n return { ...base, type: 'single', selectedOption, setSelectedOption } satisfies StateSingle;\r\n }\r\n\r\n throw new Error(`Combobox type ${type} is not supported`);\r\n }, [ placeholder, loading, open, options, searchTerm, selectedOptions, isEmptyList, isSearchedEmptyList, setOptions, onChangeOption, props.type ]);\r\n useImperativeHandle(props.imperativeRef, () => callbackStateParams, [callbackStateParams]);\r\n\r\n const fetchData = useCallback(async (\r\n params: Parameters<typeof loadData>[0],\r\n signal: AbortSignal,\r\n ) => {\r\n const fetchedData = await loadData(params, signal, callbackStateParams);\r\n if (!fetchedData) throw new Error('Expected loadData to return data');\r\n return Array.isArray(fetchedData)\r\n ? { data: fetchedData, total: fetchedData.length }\r\n : fetchedData;\r\n }, [loadData, callbackStateParams]);\r\n\r\n const loadFirst = useCallback(async (value: string = '') => {\r\n if (!loadData) return;\r\n const { id, signal } = beginRequest();\r\n try {\r\n setLoading(true);\r\n setLoadingMore(false);\r\n\r\n const result = await fetchData({ search: value }, signal);\r\n if (id !== requestIdRef.current) return;\r\n\r\n setOptions(result.data);\r\n setTotal(result.total);\r\n setOffset(result.data.length);\r\n } catch (error) {\r\n console.error('Unexpected error while get option:', error);\r\n } finally {\r\n if (id === requestIdRef.current) setLoading(false);\r\n }\r\n }, [beginRequest, fetchData, loadData]);\r\n\r\n const loadMore = useCallback(async () => {\r\n if (!loadData) return;\r\n if (!hasNext || loading || loadingMore) return;\r\n const { id, signal } = beginRequest();\r\n try {\r\n setLoadingMore(true);\r\n const result = await fetchData(\r\n { search: searchTerm, offset },\r\n signal\r\n );\r\n setOptions((prev) => [...prev, ...result.data]);\r\n setTotal(result.total);\r\n setOffset((prev) => prev + result.data.length);\r\n } catch (error) {\r\n console.error('Unexpected error while load more option:', error);\r\n } finally {\r\n if (id === requestIdRef.current) setLoadingMore(false);\r\n }\r\n }, [beginRequest, fetchData, hasNext, loadData, loading, loadingMore, offset, searchTerm]);\r\n\r\n const debouncedGetData = useDebounceCallback(loadFirst, 600, {\r\n leading: false,\r\n trailing: true,\r\n });\r\n\r\n const handleSearchChange = useCallback((value: string) => {\r\n setLoading(true);\r\n setSearchTerm(value);\r\n debouncedGetData(value);\r\n }, []);\r\n\r\n const handleClearSelections = useCallback(() => {\r\n props.onChange(undefined);\r\n setSelectedOptions(new Map());\r\n setOpen(false);\r\n }, [props.onChange]);\r\n\r\n const handleReset = useCallback(() => {\r\n abortRef.current?.abort();\r\n requestIdRef.current += 1;\r\n setSearchTerm(\"\");\r\n setLoading(false);\r\n setLoadingMore(false);\r\n }, []);\r\n\r\n const handlePopoverOpen = useCallback(async (next: boolean) => {\r\n setOpen(next);\r\n if(!next) return handleReset();\r\n void loadFirst();\r\n setSearchTerm('');\r\n }, [handleReset, loadFirst]);\r\n\r\n const runOnMount = useCallback(async () => {\r\n if (!props.onMount) return;\r\n setInitialLoading(true);\r\n try {\r\n if (type === 'multi') {\r\n await (props as MultiComboboxProps<Data>).onMount?.(callbackStateParams as StateMulti);\r\n } else {\r\n await (props as SingleComboboxProps<Data>).onMount?.(callbackStateParams as StateSingle);\r\n }\r\n } finally {\r\n setInitialLoading(false);\r\n }\r\n }, [ props.onMount, callbackStateParams ]);\r\n useLayoutEffect(() => {\r\n runOnMount();\r\n }, []);\r\n\r\n return (\r\n <div className=\"w-full\">\r\n <Popover\r\n open={open}\r\n onOpenChange={handlePopoverOpen}\r\n modal={slotProps?.popover?.modal}\r\n >\r\n <ComboboxRenderTrigger\r\n value={value}\r\n type={type}\r\n open={open}\r\n initialLoading={initialLoading}\r\n selectedOptions={selectedOptions}\r\n flattenOptions={flattenOptions}\r\n onSelect={onChangeOption}\r\n onClearSelections={handleClearSelections}\r\n callbackStateParams={callbackStateParams}\r\n renderTrigger={renderTrigger as ComboboxCallbackStateParamsRenderHandler<Data>}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n />\r\n\r\n <ComboboxRenderContent\r\n open={open}\r\n value={value}\r\n type={type}\r\n options={options}\r\n search={searchTerm}\r\n onSearch={handleSearchChange}\r\n onSelect={onChangeOption}\r\n onLoadMore={loadMore}\r\n hasNext={hasNext}\r\n loading={loading}\r\n loadingMore={loadingMore}\r\n isEmptyList={isEmptyList}\r\n callbackStateParams={callbackStateParams}\r\n commandInputAction={commandInputAction as ComboboxCallbackStateParamsRenderHandler<Data>}\r\n renderList={renderList as ComboboxCallbackStateParamsRenderHandler<Data>}\r\n listHeadAction={listHeadAction as ComboboxCallbackStateParamsRenderHandler<Data>}\r\n listFooterAction={listFooterAction as ComboboxCallbackStateParamsRenderHandler<Data>}\r\n emptyAction={emptyAction as ComboboxCallbackStateParamsRenderHandler<Data>}\r\n slotProps={slotProps}\r\n searchLabel={searchLabel}\r\n emptyLabel={emptyLabel}\r\n defaultNodeOpen={defaultNodeOpen}\r\n defaultNodeDisabled={defaultNodeDisabled}\r\n defaultNodeMatched={defaultNodeMatched}\r\n defaultNodeMuted={defaultNodeMuted}\r\n defaultNodeInteractive={defaultNodeInteractive}\r\n forcePointerSelect={forcePointerSelect}\r\n popoverContainer={slotProps?.popover?.container}\r\n />\r\n </Popover>\r\n </div>\r\n );\r\n}\r\n"],"names":["Combobox","props","value","itemOptions","placeholder","disabled","searchLabel","emptyLabel","loadData","renderTrigger","commandInputAction","renderList","listHeadAction","listFooterAction","emptyAction","slotProps","defaultNodeOpen","defaultNodeDisabled","defaultNodeMatched","defaultNodeMuted","defaultNodeInteractive","forcePointerSelect","type","DEFAULT_COMBOBOX_TYPE","initialLoading","setInitialLoading","useState","loading","setLoading","loadingMore","setLoadingMore","open","setOpen","searchTerm","setSearchTerm","selectedOptions","setSelectedOptions","options","_setOptions","flattenOptions","setFlattenOptions","setOptions","useCallback","stater","flatten","next","res","walk","nodes","node","prev","o","current","prevSelections","nextSelections","vls","v","total","setTotal","offset","setOffset","hasNext","useEffect","requestIdRef","useRef","abortRef","beginRequest","ac","isSearchedEmptyList","useMemo","isEmptyList","onChangeOption","option","isSelected","callbackStateParams","base","selectedOptionArray","prevSet","prevStateArray","nextStateArray","selectedOption","currentSingle","nextValue","nextMap","useImperativeHandle","fetchData","params","signal","fetchedData","loadFirst","id","result","error","loadMore","debouncedGetData","useDebounceCallback","handleSearchChange","handleClearSelections","handleReset","handlePopoverOpen","runOnMount","useLayoutEffect","jsx","jsxs","Popover","ComboboxRenderTrigger","ComboboxRenderContent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Combobox.js","sources":["../../src/Combobox/Combobox.tsx"],"sourcesContent":["import {\r\n Dispatch, JSX,\r\n SetStateAction,\r\n useCallback,\r\n useEffect, useImperativeHandle,\r\n useLayoutEffect,\r\n useMemo, useRef,\r\n useState,\r\n} from 'react';\r\nimport { Popover } from '../Popover';\r\nimport { useDebounceCallback } from '@oneplatformdev/hooks';\r\nimport {\r\n ComboboxCallbackStateParams, ComboboxCallbackStateParamsRenderHandler,\r\n ComboboxOption,\r\n ComboboxProps, ComboboxSelectedType,\r\n DEFAULT_COMBOBOX_TYPE, MultiComboboxProps, SingleComboboxProps,\r\n} from './Combobox.types';\r\nimport { ComboboxRenderTrigger } from \"./ComboboxRenderTrigger\";\r\nimport { ComboboxRenderContent } from \"./ComboboxRenderContent\";\r\n\r\nexport function Combobox<Data extends object>(props: SingleComboboxProps<Data>): JSX.Element;\r\nexport function Combobox<Data extends object>(props: MultiComboboxProps<Data>): JSX.Element;\r\n\r\nexport function Combobox<Data extends object = object>(\r\n props: ComboboxProps<Data, 'single'> | ComboboxProps<Data, 'multi'>\r\n): JSX.Element {\r\n const {\r\n value,\r\n options: itemOptions,\r\n placeholder,\r\n disabled,\r\n searchLabel,\r\n emptyLabel,\r\n loadData,\r\n renderTrigger,\r\n commandInputAction,\r\n renderList,\r\n listHeadAction,\r\n listFooterAction,\r\n emptyAction,\r\n slotProps,\r\n defaultNodeOpen,\r\n defaultNodeDisabled,\r\n defaultNodeMatched,\r\n defaultNodeMuted,\r\n defaultNodeInteractive,\r\n forcePointerSelect,\r\n } = props;\r\n\r\n const type: ComboboxSelectedType = props.type ?? DEFAULT_COMBOBOX_TYPE;\r\n type StateSingle = ComboboxCallbackStateParams<Data, 'single'>;\r\n type StateMulti = ComboboxCallbackStateParams<Data, 'multi'>;\r\n type State = StateSingle | StateMulti;\r\n\r\n const [ initialLoading, setInitialLoading ] = useState(false);\r\n const [ loading, setLoading ] = useState(false);\r\n const [loadingMore, setLoadingMore] = useState(false);\r\n\r\n const [ open, setOpen ] = useState(false);\r\n const [ searchTerm, setSearchTerm ] = useState('');\r\n\r\n const [ selectedOptions, setSelectedOptions ] = useState<\r\n Map<ComboboxOption<Data>['value'], ComboboxOption<Data>>\r\n >(new Map());\r\n\r\n const [ options, _setOptions ] = useState<ComboboxOption<Data>[]>([]);\r\n const [ flattenOptions, setFlattenOptions ] = useState<ComboboxOption<Data>[]>([]);\r\n const setOptions: Dispatch<SetStateAction<ComboboxOption<Data>[]>> = useCallback((stater) => {\r\n const flatten = (next: ComboboxOption<Data>[]) => {\r\n const res: ComboboxOption<Data>[] = [];\r\n const walk = (nodes?: ComboboxOption<Data>[]) => {\r\n if (!nodes) return;\r\n for (const node of nodes) {\r\n res.push(node);\r\n if (node.items && node.items.length) walk(node.items);\r\n }\r\n };\r\n walk(next);\r\n setFlattenOptions((prev) => {\r\n const isIncludedInRes = res.find(o => !!value && String(o.value) === String(value));\r\n\r\n if (!isIncludedInRes) {\r\n const selectedOption = selectedOptions.size ? Array.from(selectedOptions.values()) : undefined;\r\n const current = (selectedOption || prev).find(o => !!value && String(o.value) === String(value))\r\n if (current) return [ current, ...res ];\r\n }\r\n\r\n return res;\r\n });\r\n }\r\n _setOptions((prev) => {\r\n const next: ComboboxOption<Data>[] = typeof stater === 'function' ? stater(prev) : stater;\r\n flatten(next);\r\n setSelectedOptions(prevSelections => {\r\n const nextSelections = new Map(prevSelections);\r\n const vls = Array.isArray(value) ? value : [value];\r\n for (const v of vls) {\r\n if(!v) continue;\r\n if(nextSelections.has(v)) continue;\r\n const o = next.find(o => String(o.value).toLowerCase() === String(v).toLowerCase());\r\n if(!o) continue;\r\n nextSelections.set(o.value, o);\r\n }\r\n return nextSelections;\r\n })\r\n return next;\r\n });\r\n }, [ selectedOptions, value ])\r\n\r\n const [total, setTotal] = useState<number>(0);\r\n const [offset, setOffset] = useState<number>(0);\r\n const hasNext = offset < total;\r\n\r\n useEffect(() => {\r\n itemOptions?.length && setOptions(itemOptions);\r\n }, [ itemOptions ]);\r\n\r\n const requestIdRef = useRef(0);\r\n const abortRef = useRef<AbortController>(null);\r\n const beginRequest = useCallback(() => {\r\n requestIdRef.current += 1;\r\n abortRef.current?.abort();\r\n const ac = new AbortController();\r\n abortRef.current = ac;\r\n return { id: requestIdRef.current, signal: ac.signal };\r\n }, []);\r\n useEffect(() => {\r\n return () => abortRef.current?.abort();\r\n }, []);\r\n\r\n const isSearchedEmptyList = useMemo(() => {\r\n return Boolean(searchTerm) && !options.length && !loading;\r\n }, [ loading, options.length, searchTerm ])\r\n\r\n const isEmptyList = useMemo(() => {\r\n return !options.length && !loading;\r\n }, [ loading, options.length, searchTerm ])\r\n\r\n const onChangeOption = useCallback((option: ComboboxOption<Data>) => {\r\n if(props.type === 'single') {\r\n setSelectedOptions(prev => {\r\n let next = new Map(prev);\r\n const isSelected = next.has(option.value);\r\n\r\n if(next.has(option.value)) next = new Map();\r\n else next.set(option.value, option);\r\n\r\n if(isSelected) props.onChange?.(undefined);\r\n else props.onChange?.(option.value);\r\n\r\n return next;\r\n });\r\n setOpen(false);\r\n }\r\n\r\n if(props.type === 'multi') {\r\n setSelectedOptions(prev => {\r\n const next = new Map(prev);\r\n if(next.has(option.value)) next.delete(option.value);\r\n else next.set(option.value, option);\r\n props.onChange?.(Array.from(next.keys()));\r\n return next;\r\n });\r\n }\r\n }, [props.type, props.onChange]);\r\n\r\n const callbackStateParams = useMemo((): State => {\r\n const base = {\r\n options,\r\n setOptions,\r\n search: searchTerm || '',\r\n setSearch: setSearchTerm,\r\n onChangeOption,\r\n open,\r\n setOpen,\r\n loading,\r\n setLoading,\r\n isEmptyList,\r\n isSearchedEmptyList,\r\n placeholder,\r\n }\r\n\r\n const selectedOptionArray = Array.from(selectedOptions.values());\r\n\r\n if(type === 'multi') {\r\n const selectedOption = selectedOptionArray\r\n const setSelectedOption: Dispatch<SetStateAction<ComboboxOption<Data>[] | undefined>> = (value) => {\r\n setSelectedOptions((prevSet) => {\r\n const prevStateArray = Array.from(prevSet.values());\r\n const nextStateArray = typeof value === 'function'\r\n ? (value as (prev: ComboboxOption<Data>[]) => ComboboxOption<Data>[])(prevStateArray)\r\n : value;\r\n if (!nextStateArray) return new Map();\r\n return new Map(nextStateArray.map(o => [o.value, o]));\r\n });\r\n };\r\n return { ...base, type: 'multi', selectedOption, setSelectedOption } satisfies StateMulti;\r\n }\r\n\r\n if(type === 'single') {\r\n const selectedOption = selectedOptionArray[0]\r\n const setSelectedOption: Dispatch<SetStateAction<ComboboxOption<Data> | undefined>> = (value) => {\r\n setSelectedOptions((prevSet) => {\r\n const [currentSingle] = Array.from(prevSet.values());\r\n const nextValue = typeof value === 'function'\r\n ? (value as (prev: ComboboxOption<Data> | undefined) => ComboboxOption<Data> | undefined)(currentSingle)\r\n : value;\r\n\r\n const nextMap = new Map<ComboboxOption<Data>['value'], ComboboxOption<Data>>();\r\n if (nextValue) nextMap.set(nextValue.value, nextValue);\r\n return nextMap;\r\n });\r\n };\r\n return { ...base, type: 'single', selectedOption, setSelectedOption } satisfies StateSingle;\r\n }\r\n\r\n throw new Error(`Combobox type ${type} is not supported`);\r\n }, [ placeholder, loading, open, options, searchTerm, selectedOptions, isEmptyList, isSearchedEmptyList, setOptions, onChangeOption, props.type ]);\r\n useImperativeHandle(props.imperativeRef, () => callbackStateParams, [callbackStateParams]);\r\n\r\n const fetchData = useCallback(async (\r\n params: Parameters<typeof loadData>[0],\r\n signal: AbortSignal,\r\n ) => {\r\n const fetchedData = await loadData(params, signal, callbackStateParams);\r\n if (!fetchedData) throw new Error('Expected loadData to return data');\r\n return Array.isArray(fetchedData)\r\n ? { data: fetchedData, total: fetchedData.length }\r\n : fetchedData;\r\n }, [loadData, callbackStateParams]);\r\n\r\n const loadFirst = useCallback(async (value: string = '') => {\r\n if (!loadData) return;\r\n const { id, signal } = beginRequest();\r\n try {\r\n setLoading(true);\r\n setLoadingMore(false);\r\n\r\n const result = await fetchData({ search: value }, signal);\r\n if (id !== requestIdRef.current) return;\r\n\r\n setOptions(result.data);\r\n setTotal(result.total);\r\n setOffset(result.data.length);\r\n } catch (error) {\r\n console.error('Unexpected error while get option:', error);\r\n } finally {\r\n if (id === requestIdRef.current) setLoading(false);\r\n }\r\n }, [beginRequest, fetchData, loadData]);\r\n\r\n const loadMore = useCallback(async () => {\r\n if (!loadData) return;\r\n if (!hasNext || loading || loadingMore) return;\r\n const { id, signal } = beginRequest();\r\n try {\r\n setLoadingMore(true);\r\n const result = await fetchData(\r\n { search: searchTerm, offset },\r\n signal\r\n );\r\n setOptions((prev) => [...prev, ...result.data]);\r\n setTotal(result.total);\r\n setOffset((prev) => prev + result.data.length);\r\n } catch (error) {\r\n console.error('Unexpected error while load more option:', error);\r\n } finally {\r\n if (id === requestIdRef.current) setLoadingMore(false);\r\n }\r\n }, [beginRequest, fetchData, hasNext, loadData, loading, loadingMore, offset, searchTerm]);\r\n\r\n const debouncedGetData = useDebounceCallback(loadFirst, 600, {\r\n leading: false,\r\n trailing: true,\r\n });\r\n\r\n const handleSearchChange = useCallback((value: string) => {\r\n setLoading(true);\r\n setSearchTerm(value);\r\n debouncedGetData(value);\r\n }, []);\r\n\r\n const handleClearSelections = useCallback(() => {\r\n props.onChange(undefined);\r\n setSelectedOptions(new Map());\r\n setOpen(false);\r\n }, [props.onChange]);\r\n\r\n const handleReset = useCallback(() => {\r\n abortRef.current?.abort();\r\n requestIdRef.current += 1;\r\n setSearchTerm(\"\");\r\n setLoading(false);\r\n setLoadingMore(false);\r\n }, []);\r\n\r\n const handlePopoverOpen = useCallback(async (next: boolean) => {\r\n setOpen(next);\r\n if(!next) {\r\n // Mark field as touched on close so onTouched validation surfaces the error\r\n props.onBlur?.();\r\n return handleReset();\r\n }\r\n void loadFirst();\r\n setSearchTerm('');\r\n }, [handleReset, loadFirst, props.onBlur]);\r\n\r\n const runOnMount = useCallback(async () => {\r\n if (!props.onMount) return;\r\n setInitialLoading(true);\r\n try {\r\n if (type === 'multi') {\r\n await (props as MultiComboboxProps<Data>).onMount?.(callbackStateParams as StateMulti);\r\n } else {\r\n await (props as SingleComboboxProps<Data>).onMount?.(callbackStateParams as StateSingle);\r\n }\r\n } finally {\r\n setInitialLoading(false);\r\n }\r\n }, [ props.onMount, callbackStateParams ]);\r\n useLayoutEffect(() => {\r\n runOnMount();\r\n }, []);\r\n\r\n return (\r\n <div className=\"w-full\">\r\n <Popover\r\n open={open}\r\n onOpenChange={handlePopoverOpen}\r\n modal={slotProps?.popover?.modal}\r\n >\r\n <ComboboxRenderTrigger\r\n value={value}\r\n type={type}\r\n open={open}\r\n initialLoading={initialLoading}\r\n selectedOptions={selectedOptions}\r\n flattenOptions={flattenOptions}\r\n onSelect={onChangeOption}\r\n onClearSelections={handleClearSelections}\r\n callbackStateParams={callbackStateParams}\r\n renderTrigger={renderTrigger as ComboboxCallbackStateParamsRenderHandler<Data>}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n />\r\n\r\n <ComboboxRenderContent\r\n open={open}\r\n value={value}\r\n type={type}\r\n options={options}\r\n search={searchTerm}\r\n onSearch={handleSearchChange}\r\n onSelect={onChangeOption}\r\n onLoadMore={loadMore}\r\n hasNext={hasNext}\r\n loading={loading}\r\n loadingMore={loadingMore}\r\n isEmptyList={isEmptyList}\r\n callbackStateParams={callbackStateParams}\r\n commandInputAction={commandInputAction as ComboboxCallbackStateParamsRenderHandler<Data>}\r\n renderList={renderList as ComboboxCallbackStateParamsRenderHandler<Data>}\r\n listHeadAction={listHeadAction as ComboboxCallbackStateParamsRenderHandler<Data>}\r\n listFooterAction={listFooterAction as ComboboxCallbackStateParamsRenderHandler<Data>}\r\n emptyAction={emptyAction as ComboboxCallbackStateParamsRenderHandler<Data>}\r\n slotProps={slotProps}\r\n searchLabel={searchLabel}\r\n emptyLabel={emptyLabel}\r\n defaultNodeOpen={defaultNodeOpen}\r\n defaultNodeDisabled={defaultNodeDisabled}\r\n defaultNodeMatched={defaultNodeMatched}\r\n defaultNodeMuted={defaultNodeMuted}\r\n defaultNodeInteractive={defaultNodeInteractive}\r\n forcePointerSelect={forcePointerSelect}\r\n popoverContainer={slotProps?.popover?.container}\r\n />\r\n </Popover>\r\n </div>\r\n );\r\n}\r\n"],"names":["Combobox","props","value","itemOptions","placeholder","disabled","searchLabel","emptyLabel","loadData","renderTrigger","commandInputAction","renderList","listHeadAction","listFooterAction","emptyAction","slotProps","defaultNodeOpen","defaultNodeDisabled","defaultNodeMatched","defaultNodeMuted","defaultNodeInteractive","forcePointerSelect","type","DEFAULT_COMBOBOX_TYPE","initialLoading","setInitialLoading","useState","loading","setLoading","loadingMore","setLoadingMore","open","setOpen","searchTerm","setSearchTerm","selectedOptions","setSelectedOptions","options","_setOptions","flattenOptions","setFlattenOptions","setOptions","useCallback","stater","flatten","next","res","walk","nodes","node","prev","o","current","prevSelections","nextSelections","vls","v","total","setTotal","offset","setOffset","hasNext","useEffect","requestIdRef","useRef","abortRef","beginRequest","ac","isSearchedEmptyList","useMemo","isEmptyList","onChangeOption","option","isSelected","callbackStateParams","base","selectedOptionArray","prevSet","prevStateArray","nextStateArray","selectedOption","currentSingle","nextValue","nextMap","useImperativeHandle","fetchData","params","signal","fetchedData","loadFirst","id","result","error","loadMore","debouncedGetData","useDebounceCallback","handleSearchChange","handleClearSelections","handleReset","handlePopoverOpen","runOnMount","useLayoutEffect","jsx","jsxs","Popover","ComboboxRenderTrigger","ComboboxRenderContent"],"mappings":"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"}
|
|
@@ -95,6 +95,8 @@ export interface ComboboxBaseProps<Data extends object = object, T extends Combo
|
|
|
95
95
|
listFooterAction?: ((params: ComboboxCallbackStateParams<Data, T>) => ReactNode) | ReactNode;
|
|
96
96
|
/** Callback for load data on start component */
|
|
97
97
|
onMount?: (params: ComboboxCallbackStateParams<Data, T>) => Promise<void>;
|
|
98
|
+
/** Called when the dropdown closes. Used to mark RHF field as touched (onTouched validation). */
|
|
99
|
+
onBlur?: () => void;
|
|
98
100
|
renderTrigger?: (params: ComboboxCallbackStateParams<Data, T>) => ReactNode;
|
|
99
101
|
renderList?: (params: ComboboxCallbackStateParams<Data, T>) => ReactNode;
|
|
100
102
|
slotProps?: ISlotProps;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Combobox.types.d.ts","sourceRoot":"","sources":["../../src/Combobox/Combobox.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEjF,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AAClD,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEtD,eAAO,MAAM,qBAAqB,EAAE,oBAA+B,CAAC;AAEpE,MAAM,WAAW,cAAc,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,IAAI,CAAC;IAEZ,KAAK,CAAC,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B,CAC1C,IAAI,SAAS,MAAM,GAAG,MAAM,EAC5B,CAAC,SAAS,oBAAoB,GAAG,QAAQ;IAEzC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;IAChC,UAAU,EAAG,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAA;IAC5C,cAAc,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IACvD,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9C,WAAW,EAAE,OAAO,CAAC;IACrB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,IAAI,EAAE,CAAC,CAAC;IACR,cAAc,EAAE,CAAC,SAAS,QAAQ,GAC9B,cAAc,CAAC,IAAI,CAAC,GAAG,SAAS,GAChC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;IAC3B,iBAAiB,EAAE,CAAC,SAAS,QAAQ,GACjC,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,GAC1D,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;CAClE;AAED,MAAM,MAAM,gCAAgC,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM,IAAI,2BAA2B,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAI,2BAA2B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;AACtK,MAAM,MAAM,wCAAwC,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,EAAC,gCAAgC,CAAC,IAAI,CAAC,KAAK,SAAS,CAAA;AAEjJ,MAAM,WAAW,iCAAiC,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM;IAC7E,eAAe,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC,CAAC;IAClG,mBAAmB,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC,CAAC;IACtG,kBAAkB,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC,CAAC;IACrG,gBAAgB,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC,CAAC;IACnG,sBAAsB,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC,CAAC;IACzG,qFAAqF;IACrF,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,yBAAyB,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM,CACrE,SAAQ,iCAAiC,CAAC,IAAI,CAAC;IAC/C,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;IAC7B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM,CACjE,SAAQ,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,iCAAiC,CAAC,IAAI,CAAC;IAChG,OAAO,CAAC,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;CAClC;AAED,UAAU,gBAAiB,SAAQ,cAAc,CAAC,cAAc,CAAC;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AACD,UAAU,iBAAiB;IACzB,iFAAiF;IACjF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,KAAK,sBAAsB,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAAE,CAAA;AACnE,KAAK,sBAAsB,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM,IAAI;IAAE,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;CAAE,CAAA;AAC5G,KAAK,sBAAsB,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;AAClH,KAAK,gBAAgB,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM,IAAI,CACpD,MAAM,EAAE,sBAAsB,EAC9B,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,2BAA2B,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,2BAA2B,CAAC,IAAI,EAAE,OAAO,CAAC,KACjG,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC;AAE3C,MAAM,WAAW,iBAAiB,CAChC,IAAI,SAAS,MAAM,GAAG,MAAM,EAC5B,CAAC,SAAS,oBAAoB,GAAG,QAAQ,CACzC,SAAQ,iCAAiC;IACzC,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,aAAa,CAAC,EAAE,GAAG,CACjB,2BAA2B,CAAC,IAAI,EAAE,QAAQ,CAAC,GACzC,2BAA2B,CAAC,IAAI,EAAE,OAAO,CAAC,GAC1C,IAAI,CACP,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gDAAgD;IAChD,QAAQ,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;IACjC,8BAA8B;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,WAAW,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,2BAA2B,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;IACxF,kCAAkC;IAClC,kBAAkB,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,2BAA2B,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;IAC/F,wCAAwC;IACxC,cAAc,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,2BAA2B,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;IAC3F,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,2BAA2B,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;IAC7F,gDAAgD;IAChD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,2BAA2B,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"Combobox.types.d.ts","sourceRoot":"","sources":["../../src/Combobox/Combobox.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Combobox.types.js","sources":["../../src/Combobox/Combobox.types.ts"],"sourcesContent":["import { Dispatch, HTMLAttributes, ReactNode, Ref, SetStateAction } from 'react';\r\n\r\nexport type ComboboxValueType = string | string[];\r\nexport type ComboboxSelectedType = 'single' | 'multi';\r\n\r\nexport const DEFAULT_COMBOBOX_TYPE: ComboboxSelectedType = 'single';\r\n\r\nexport interface ComboboxOption<Data extends object = object> {\r\n value: string;\r\n label: string;\r\n node?: Data;\r\n // tree only\r\n items?: ComboboxOption<Data>[];\r\n path?: string[];\r\n parent?: string;\r\n level?: number;\r\n matched?: boolean;\r\n}\r\n\r\nexport interface ComboboxCallbackStateParams<\r\n Data extends object = object,\r\n T extends ComboboxSelectedType = 'single'\r\n> {\r\n options: ComboboxOption<Data>[];\r\n setOptions: Dispatch<SetStateAction<ComboboxOption<Data>[]>>\r\n search: string;\r\n setSearch: Dispatch<SetStateAction<string>>\r\n onChangeOption: (option: ComboboxOption<Data>) => void;\r\n open: boolean,\r\n setOpen: Dispatch<SetStateAction<boolean>>;\r\n loading: boolean;\r\n setLoading: Dispatch<SetStateAction<boolean>>;\r\n isEmptyList: boolean;\r\n isSearchedEmptyList: boolean;\r\n placeholder?: string;\r\n\r\n type: T;\r\n selectedOption: T extends 'single'\r\n ? ComboboxOption<Data> | undefined\r\n : ComboboxOption<Data>[];\r\n setSelectedOption: T extends 'single'\r\n ? Dispatch<SetStateAction<ComboboxOption<Data> | undefined>>\r\n : Dispatch<SetStateAction<ComboboxOption<Data>[] | undefined>>;\r\n}\r\n\r\nexport type ComboboxCallbackStateParamsUnion<Data extends object = object> = ComboboxCallbackStateParams<Data, 'single'> | ComboboxCallbackStateParams<Data, 'multi'>\r\nexport type ComboboxCallbackStateParamsRenderHandler<Data extends object = object> = (params:ComboboxCallbackStateParamsUnion<Data>) => ReactNode\r\n\r\nexport interface IComboboxOptionsNodeHandlersProps<Data extends object = object> {\r\n defaultNodeOpen?: boolean | ((option: ComboboxOption<Data>, deep: number) => boolean | undefined);\r\n defaultNodeDisabled?: boolean | ((option: ComboboxOption<Data>, deep: number) => boolean | undefined);\r\n defaultNodeMatched?: boolean | ((option: ComboboxOption<Data>, deep: number) => boolean | undefined);\r\n defaultNodeMuted?: boolean | ((option: ComboboxOption<Data>, deep: number) => boolean | undefined);\r\n defaultNodeInteractive?: boolean | ((option: ComboboxOption<Data>, deep: number) => boolean | undefined);\r\n /** Use onPointerUp instead of cmdk onSelect. Fixes selection inside modal Dialog. */\r\n forcePointerSelect?: boolean;\r\n}\r\n\r\nexport interface IComboboxOptionsNodeProps<Data extends object = object>\r\n extends IComboboxOptionsNodeHandlersProps<Data> {\r\n type: ComboboxSelectedType,\r\n search?: string;\r\n value?: ComboboxValueType;\r\n option: ComboboxOption<Data>;\r\n onSelect?: (option: ComboboxOption<Data>) => void;\r\n deep?: number;\r\n}\r\n\r\nexport interface IComboboxOptionsProps<Data extends object = object>\r\n extends Omit<IComboboxOptionsNodeProps<Data>, 'option'>, IComboboxOptionsNodeHandlersProps<Data> {\r\n options?: ComboboxOption<Data>[];\r\n}\r\n\r\ninterface IListActionProps extends HTMLAttributes<HTMLDivElement> {\r\n bordered?: boolean;\r\n}\r\ninterface IPopoverSlotProps {\r\n /** Set Popover modal mode. Use `true` when Combobox is inside a modal Dialog. */\r\n modal?: boolean;\r\n /** Container element for Popover portal. Use to render inside modal Dialog. */\r\n container?: HTMLElement | null;\r\n}\r\n\r\nexport interface ISlotProps {\r\n popover?: IPopoverSlotProps;\r\n listFooterAction?: IListActionProps;\r\n}\r\n\r\ntype ComboboxLoadDataParams = { search?: string; offset?: number; }\r\ntype ComboboxLoadDataResult<Data extends object = object> = { data: ComboboxOption<Data>[]; total: number; }\r\ntype ComboboxLoadDataReturn<Data extends object = object> = ComboboxOption<Data>[] | ComboboxLoadDataResult<Data>;\r\ntype ComboboxLoadData<Data extends object = object> = (\r\n params: ComboboxLoadDataParams,\r\n signal: AbortSignal,\r\n controller: ComboboxCallbackStateParams<Data, 'single'> | ComboboxCallbackStateParams<Data, 'multi'>\r\n) => Promise<ComboboxLoadDataReturn<Data>>;\r\n\r\nexport interface ComboboxBaseProps<\r\n Data extends object = object,\r\n T extends ComboboxSelectedType = 'single'\r\n> extends IComboboxOptionsNodeHandlersProps {\r\n type?: T;\r\n imperativeRef?: Ref<\r\n ComboboxCallbackStateParams<Data, 'single'>\r\n | ComboboxCallbackStateParams<Data, 'multi'>\r\n | null\r\n >;\r\n placeholder?: string;\r\n searchLabel?: string;\r\n disabled?: boolean;\r\n /** Callback for load data on search debounce */\r\n loadData: ComboboxLoadData<Data>;\r\n options?: ComboboxOption<Data>[];\r\n /** Command Empty list label*/\r\n emptyLabel?: string;\r\n /** Command Empty list action */\r\n emptyAction?: ((params: ComboboxCallbackStateParams<Data, T>) => ReactNode) | ReactNode;\r\n /** Command Input footer action */\r\n commandInputAction?: ((params: ComboboxCallbackStateParams<Data, T>) => ReactNode) | ReactNode;\r\n /** Command List first element action */\r\n listHeadAction?: ((params: ComboboxCallbackStateParams<Data, T>) => ReactNode) | ReactNode;\r\n /** Command List footer element action */\r\n listFooterAction?: ((params: ComboboxCallbackStateParams<Data, T>) => ReactNode) | ReactNode;\r\n /** Callback for load data on start component */\r\n onMount?: (params: ComboboxCallbackStateParams<Data, T>) => Promise<void>;\r\n\r\n renderTrigger?: (params: ComboboxCallbackStateParams<Data, T>) => ReactNode;\r\n renderList?: (params: ComboboxCallbackStateParams<Data, T>) => ReactNode;\r\n\r\n slotProps?: ISlotProps;\r\n}\r\n\r\nexport interface SingleComboboxProps<Data extends object = object>\r\n extends ComboboxBaseProps<Data, 'single'> {\r\n type?: 'single';\r\n value?: string;\r\n onChange: (value: string | undefined) => void;\r\n}\r\nexport interface MultiComboboxProps<Data extends object = object>\r\n extends ComboboxBaseProps<Data, 'multi'> {\r\n type: 'multi';\r\n value?: string[];\r\n onChange: (value: string[] | undefined) => void;\r\n}\r\n\r\nexport type ComboboxProps<\r\n Data extends object = object,\r\n T extends ComboboxSelectedType = 'single'\r\n> = T extends 'single'\r\n ? SingleComboboxProps<Data>\r\n : MultiComboboxProps<Data>;\r\n"],"names":["DEFAULT_COMBOBOX_TYPE"],"mappings":"AAKO,MAAMA,IAA8C;"}
|
|
1
|
+
{"version":3,"file":"Combobox.types.js","sources":["../../src/Combobox/Combobox.types.ts"],"sourcesContent":["import { Dispatch, HTMLAttributes, ReactNode, Ref, SetStateAction } from 'react';\r\n\r\nexport type ComboboxValueType = string | string[];\r\nexport type ComboboxSelectedType = 'single' | 'multi';\r\n\r\nexport const DEFAULT_COMBOBOX_TYPE: ComboboxSelectedType = 'single';\r\n\r\nexport interface ComboboxOption<Data extends object = object> {\r\n value: string;\r\n label: string;\r\n node?: Data;\r\n // tree only\r\n items?: ComboboxOption<Data>[];\r\n path?: string[];\r\n parent?: string;\r\n level?: number;\r\n matched?: boolean;\r\n}\r\n\r\nexport interface ComboboxCallbackStateParams<\r\n Data extends object = object,\r\n T extends ComboboxSelectedType = 'single'\r\n> {\r\n options: ComboboxOption<Data>[];\r\n setOptions: Dispatch<SetStateAction<ComboboxOption<Data>[]>>\r\n search: string;\r\n setSearch: Dispatch<SetStateAction<string>>\r\n onChangeOption: (option: ComboboxOption<Data>) => void;\r\n open: boolean,\r\n setOpen: Dispatch<SetStateAction<boolean>>;\r\n loading: boolean;\r\n setLoading: Dispatch<SetStateAction<boolean>>;\r\n isEmptyList: boolean;\r\n isSearchedEmptyList: boolean;\r\n placeholder?: string;\r\n\r\n type: T;\r\n selectedOption: T extends 'single'\r\n ? ComboboxOption<Data> | undefined\r\n : ComboboxOption<Data>[];\r\n setSelectedOption: T extends 'single'\r\n ? Dispatch<SetStateAction<ComboboxOption<Data> | undefined>>\r\n : Dispatch<SetStateAction<ComboboxOption<Data>[] | undefined>>;\r\n}\r\n\r\nexport type ComboboxCallbackStateParamsUnion<Data extends object = object> = ComboboxCallbackStateParams<Data, 'single'> | ComboboxCallbackStateParams<Data, 'multi'>\r\nexport type ComboboxCallbackStateParamsRenderHandler<Data extends object = object> = (params:ComboboxCallbackStateParamsUnion<Data>) => ReactNode\r\n\r\nexport interface IComboboxOptionsNodeHandlersProps<Data extends object = object> {\r\n defaultNodeOpen?: boolean | ((option: ComboboxOption<Data>, deep: number) => boolean | undefined);\r\n defaultNodeDisabled?: boolean | ((option: ComboboxOption<Data>, deep: number) => boolean | undefined);\r\n defaultNodeMatched?: boolean | ((option: ComboboxOption<Data>, deep: number) => boolean | undefined);\r\n defaultNodeMuted?: boolean | ((option: ComboboxOption<Data>, deep: number) => boolean | undefined);\r\n defaultNodeInteractive?: boolean | ((option: ComboboxOption<Data>, deep: number) => boolean | undefined);\r\n /** Use onPointerUp instead of cmdk onSelect. Fixes selection inside modal Dialog. */\r\n forcePointerSelect?: boolean;\r\n}\r\n\r\nexport interface IComboboxOptionsNodeProps<Data extends object = object>\r\n extends IComboboxOptionsNodeHandlersProps<Data> {\r\n type: ComboboxSelectedType,\r\n search?: string;\r\n value?: ComboboxValueType;\r\n option: ComboboxOption<Data>;\r\n onSelect?: (option: ComboboxOption<Data>) => void;\r\n deep?: number;\r\n}\r\n\r\nexport interface IComboboxOptionsProps<Data extends object = object>\r\n extends Omit<IComboboxOptionsNodeProps<Data>, 'option'>, IComboboxOptionsNodeHandlersProps<Data> {\r\n options?: ComboboxOption<Data>[];\r\n}\r\n\r\ninterface IListActionProps extends HTMLAttributes<HTMLDivElement> {\r\n bordered?: boolean;\r\n}\r\ninterface IPopoverSlotProps {\r\n /** Set Popover modal mode. Use `true` when Combobox is inside a modal Dialog. */\r\n modal?: boolean;\r\n /** Container element for Popover portal. Use to render inside modal Dialog. */\r\n container?: HTMLElement | null;\r\n}\r\n\r\nexport interface ISlotProps {\r\n popover?: IPopoverSlotProps;\r\n listFooterAction?: IListActionProps;\r\n}\r\n\r\ntype ComboboxLoadDataParams = { search?: string; offset?: number; }\r\ntype ComboboxLoadDataResult<Data extends object = object> = { data: ComboboxOption<Data>[]; total: number; }\r\ntype ComboboxLoadDataReturn<Data extends object = object> = ComboboxOption<Data>[] | ComboboxLoadDataResult<Data>;\r\ntype ComboboxLoadData<Data extends object = object> = (\r\n params: ComboboxLoadDataParams,\r\n signal: AbortSignal,\r\n controller: ComboboxCallbackStateParams<Data, 'single'> | ComboboxCallbackStateParams<Data, 'multi'>\r\n) => Promise<ComboboxLoadDataReturn<Data>>;\r\n\r\nexport interface ComboboxBaseProps<\r\n Data extends object = object,\r\n T extends ComboboxSelectedType = 'single'\r\n> extends IComboboxOptionsNodeHandlersProps {\r\n type?: T;\r\n imperativeRef?: Ref<\r\n ComboboxCallbackStateParams<Data, 'single'>\r\n | ComboboxCallbackStateParams<Data, 'multi'>\r\n | null\r\n >;\r\n placeholder?: string;\r\n searchLabel?: string;\r\n disabled?: boolean;\r\n /** Callback for load data on search debounce */\r\n loadData: ComboboxLoadData<Data>;\r\n options?: ComboboxOption<Data>[];\r\n /** Command Empty list label*/\r\n emptyLabel?: string;\r\n /** Command Empty list action */\r\n emptyAction?: ((params: ComboboxCallbackStateParams<Data, T>) => ReactNode) | ReactNode;\r\n /** Command Input footer action */\r\n commandInputAction?: ((params: ComboboxCallbackStateParams<Data, T>) => ReactNode) | ReactNode;\r\n /** Command List first element action */\r\n listHeadAction?: ((params: ComboboxCallbackStateParams<Data, T>) => ReactNode) | ReactNode;\r\n /** Command List footer element action */\r\n listFooterAction?: ((params: ComboboxCallbackStateParams<Data, T>) => ReactNode) | ReactNode;\r\n /** Callback for load data on start component */\r\n onMount?: (params: ComboboxCallbackStateParams<Data, T>) => Promise<void>;\r\n /** Called when the dropdown closes. Used to mark RHF field as touched (onTouched validation). */\r\n onBlur?: () => void;\r\n\r\n renderTrigger?: (params: ComboboxCallbackStateParams<Data, T>) => ReactNode;\r\n renderList?: (params: ComboboxCallbackStateParams<Data, T>) => ReactNode;\r\n\r\n slotProps?: ISlotProps;\r\n}\r\n\r\nexport interface SingleComboboxProps<Data extends object = object>\r\n extends ComboboxBaseProps<Data, 'single'> {\r\n type?: 'single';\r\n value?: string;\r\n onChange: (value: string | undefined) => void;\r\n}\r\nexport interface MultiComboboxProps<Data extends object = object>\r\n extends ComboboxBaseProps<Data, 'multi'> {\r\n type: 'multi';\r\n value?: string[];\r\n onChange: (value: string[] | undefined) => void;\r\n}\r\n\r\nexport type ComboboxProps<\r\n Data extends object = object,\r\n T extends ComboboxSelectedType = 'single'\r\n> = T extends 'single'\r\n ? SingleComboboxProps<Data>\r\n : MultiComboboxProps<Data>;\r\n"],"names":["DEFAULT_COMBOBOX_TYPE"],"mappings":"AAKO,MAAMA,IAA8C;"}
|
package/Form/Form.js
CHANGED
|
@@ -9,7 +9,7 @@ const S = I, c = s.createContext(
|
|
|
9
9
|
), $ = ({
|
|
10
10
|
...e
|
|
11
11
|
}) => /* @__PURE__ */ m(c.Provider, { value: { name: e.name }, children: /* @__PURE__ */ m(u, { ...e }) }), d = () => {
|
|
12
|
-
const e = s.useContext(c), t = s.useContext(l), { getFieldState:
|
|
12
|
+
const e = s.useContext(c), t = s.useContext(l), { getFieldState: o } = F(), r = x({ name: e.name }), n = o(e.name, r);
|
|
13
13
|
if (!e)
|
|
14
14
|
throw new Error("useFormField should be used within <FormField>");
|
|
15
15
|
const { id: i } = t;
|
|
@@ -25,8 +25,8 @@ const S = I, c = s.createContext(
|
|
|
25
25
|
{}
|
|
26
26
|
);
|
|
27
27
|
function D({ className: e, ...t }) {
|
|
28
|
-
const
|
|
29
|
-
return /* @__PURE__ */ m(l.Provider, { value: { id:
|
|
28
|
+
const o = s.useId();
|
|
29
|
+
return /* @__PURE__ */ m(l.Provider, { value: { id: o }, children: /* @__PURE__ */ m(
|
|
30
30
|
"div",
|
|
31
31
|
{
|
|
32
32
|
"data-slot": "form-item",
|
|
@@ -39,50 +39,50 @@ function M({
|
|
|
39
39
|
className: e,
|
|
40
40
|
...t
|
|
41
41
|
}) {
|
|
42
|
-
const { error:
|
|
42
|
+
const { error: o, formItemId: r } = d();
|
|
43
43
|
return /* @__PURE__ */ m(
|
|
44
44
|
p,
|
|
45
45
|
{
|
|
46
46
|
"data-slot": "form-label",
|
|
47
|
-
"data-error": !!
|
|
48
|
-
className: a(
|
|
49
|
-
htmlFor:
|
|
47
|
+
"data-error": !!o,
|
|
48
|
+
className: a(e),
|
|
49
|
+
htmlFor: r,
|
|
50
50
|
...t
|
|
51
51
|
}
|
|
52
52
|
);
|
|
53
53
|
}
|
|
54
54
|
function N({ ...e }) {
|
|
55
|
-
const { error: t, formItemId:
|
|
55
|
+
const { error: t, formItemId: o, formDescriptionId: r, formMessageId: n } = d();
|
|
56
56
|
return /* @__PURE__ */ m(
|
|
57
57
|
f,
|
|
58
58
|
{
|
|
59
59
|
"data-slot": "form-control",
|
|
60
|
-
id:
|
|
61
|
-
"aria-describedby": t ? `${
|
|
60
|
+
id: o,
|
|
61
|
+
"aria-describedby": t ? `${r} ${n}` : `${r}`,
|
|
62
62
|
"aria-invalid": !!t,
|
|
63
63
|
...e
|
|
64
64
|
}
|
|
65
65
|
);
|
|
66
66
|
}
|
|
67
67
|
function w({ className: e, ...t }) {
|
|
68
|
-
const { formDescriptionId:
|
|
68
|
+
const { formDescriptionId: o } = d();
|
|
69
69
|
return /* @__PURE__ */ m(
|
|
70
70
|
"p",
|
|
71
71
|
{
|
|
72
72
|
"data-slot": "form-description",
|
|
73
|
-
id:
|
|
73
|
+
id: o,
|
|
74
74
|
className: a("text-muted-foreground text-sm", e),
|
|
75
75
|
...t
|
|
76
76
|
}
|
|
77
77
|
);
|
|
78
78
|
}
|
|
79
79
|
function P({ className: e, ...t }) {
|
|
80
|
-
const { error:
|
|
80
|
+
const { error: o, formMessageId: r } = d(), n = o ? String(o?.message ?? "") : t.children;
|
|
81
81
|
return n ? /* @__PURE__ */ m(
|
|
82
82
|
"p",
|
|
83
83
|
{
|
|
84
84
|
"data-slot": "form-message",
|
|
85
|
-
id:
|
|
85
|
+
id: r,
|
|
86
86
|
className: a("text-destructive text-sm", e),
|
|
87
87
|
...t,
|
|
88
88
|
children: n
|
package/Form/Form.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Form.js","sources":["../../src/Form/Form.tsx"],"sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\r\nimport { Slot } from \"@radix-ui/react-slot\"\r\nimport {\r\n Controller,\r\n FormProvider,\r\n useFormContext,\r\n useFormState,\r\n type ControllerProps,\r\n type FieldPath,\r\n type FieldValues,\r\n} from \"react-hook-form\"\r\n\r\nimport { cn } from \"@oneplatformdev/utils\"\r\nimport { Label } from \"../Label\"\r\n\r\nconst Form = FormProvider\r\n\r\ntype FormFieldContextValue<\r\n TFieldValues extends FieldValues = FieldValues,\r\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\r\n> = {\r\n name: TName\r\n}\r\n\r\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\r\n {} as FormFieldContextValue\r\n)\r\n\r\nconst FormField = <\r\n TFieldValues extends FieldValues = FieldValues,\r\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\r\n>({\r\n ...props\r\n }: ControllerProps<TFieldValues, TName>) => {\r\n return (\r\n <FormFieldContext.Provider value={{ name: props.name }}>\r\n <Controller {...props} />\r\n </FormFieldContext.Provider>\r\n )\r\n}\r\n\r\nconst useFormField = () => {\r\n const fieldContext = React.useContext(FormFieldContext)\r\n const itemContext = React.useContext(FormItemContext)\r\n const { getFieldState } = useFormContext()\r\n const formState = useFormState({ name: fieldContext.name })\r\n const fieldState = getFieldState(fieldContext.name, formState)\r\n\r\n if (!fieldContext) {\r\n throw new Error(\"useFormField should be used within <FormField>\")\r\n }\r\n\r\n const { id } = itemContext\r\n\r\n return {\r\n id,\r\n name: fieldContext.name,\r\n formItemId: `${id}-form-item`,\r\n formDescriptionId: `${id}-form-item-description`,\r\n formMessageId: `${id}-form-item-message`,\r\n ...fieldState,\r\n }\r\n}\r\n\r\ntype FormItemContextValue = {\r\n id: string\r\n}\r\n\r\nconst FormItemContext = React.createContext<FormItemContextValue>(\r\n {} as FormItemContextValue\r\n)\r\n\r\nfunction FormItem({ className, ...props }: React.ComponentProps<\"div\">) {\r\n const id = React.useId()\r\n\r\n return (\r\n <FormItemContext.Provider value={{ id }}>\r\n <div\r\n data-slot=\"form-item\"\r\n className={cn(\"flex flex-col gap-2\", className)}\r\n {...props}\r\n />\r\n </FormItemContext.Provider>\r\n )\r\n}\r\n\r\nfunction FormLabel({\r\n className,\r\n ...props\r\n }: React.ComponentProps<typeof LabelPrimitive.Root>) {\r\n const { error, formItemId } = useFormField()\r\n\r\n return (\r\n <Label\r\n data-slot=\"form-label\"\r\n data-error={!!error}\r\n className={cn(
|
|
1
|
+
{"version":3,"file":"Form.js","sources":["../../src/Form/Form.tsx"],"sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\r\nimport { Slot } from \"@radix-ui/react-slot\"\r\nimport {\r\n Controller,\r\n FormProvider,\r\n useFormContext,\r\n useFormState,\r\n type ControllerProps,\r\n type FieldPath,\r\n type FieldValues,\r\n} from \"react-hook-form\"\r\n\r\nimport { cn } from \"@oneplatformdev/utils\"\r\nimport { Label } from \"../Label\"\r\n\r\nconst Form = FormProvider\r\n\r\ntype FormFieldContextValue<\r\n TFieldValues extends FieldValues = FieldValues,\r\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\r\n> = {\r\n name: TName\r\n}\r\n\r\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\r\n {} as FormFieldContextValue\r\n)\r\n\r\nconst FormField = <\r\n TFieldValues extends FieldValues = FieldValues,\r\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\r\n>({\r\n ...props\r\n }: ControllerProps<TFieldValues, TName>) => {\r\n return (\r\n <FormFieldContext.Provider value={{ name: props.name }}>\r\n <Controller {...props} />\r\n </FormFieldContext.Provider>\r\n )\r\n}\r\n\r\nconst useFormField = () => {\r\n const fieldContext = React.useContext(FormFieldContext)\r\n const itemContext = React.useContext(FormItemContext)\r\n const { getFieldState } = useFormContext()\r\n const formState = useFormState({ name: fieldContext.name })\r\n const fieldState = getFieldState(fieldContext.name, formState)\r\n\r\n if (!fieldContext) {\r\n throw new Error(\"useFormField should be used within <FormField>\")\r\n }\r\n\r\n const { id } = itemContext\r\n\r\n return {\r\n id,\r\n name: fieldContext.name,\r\n formItemId: `${id}-form-item`,\r\n formDescriptionId: `${id}-form-item-description`,\r\n formMessageId: `${id}-form-item-message`,\r\n ...fieldState,\r\n }\r\n}\r\n\r\ntype FormItemContextValue = {\r\n id: string\r\n}\r\n\r\nconst FormItemContext = React.createContext<FormItemContextValue>(\r\n {} as FormItemContextValue\r\n)\r\n\r\nfunction FormItem({ className, ...props }: React.ComponentProps<\"div\">) {\r\n const id = React.useId()\r\n\r\n return (\r\n <FormItemContext.Provider value={{ id }}>\r\n <div\r\n data-slot=\"form-item\"\r\n className={cn(\"flex flex-col gap-2\", className)}\r\n {...props}\r\n />\r\n </FormItemContext.Provider>\r\n )\r\n}\r\n\r\nfunction FormLabel({\r\n className,\r\n ...props\r\n }: React.ComponentProps<typeof LabelPrimitive.Root>) {\r\n const { error, formItemId } = useFormField()\r\n\r\n return (\r\n <Label\r\n data-slot=\"form-label\"\r\n data-error={!!error}\r\n className={cn(className)}\r\n htmlFor={formItemId}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot>) {\r\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\r\n\r\n return (\r\n <Slot\r\n data-slot=\"form-control\"\r\n id={formItemId}\r\n aria-describedby={\r\n !error\r\n ? `${formDescriptionId}`\r\n : `${formDescriptionId} ${formMessageId}`\r\n }\r\n aria-invalid={!!error}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction FormDescription({ className, ...props }: React.ComponentProps<\"p\">) {\r\n const { formDescriptionId } = useFormField()\r\n\r\n return (\r\n <p\r\n data-slot=\"form-description\"\r\n id={formDescriptionId}\r\n className={cn(\"text-muted-foreground text-sm\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction FormMessage({ className, ...props }: React.ComponentProps<\"p\">) {\r\n const { error, formMessageId } = useFormField()\r\n const body = error ? String(error?.message ?? \"\") : props.children\r\n\r\n if (!body) {\r\n return null\r\n }\r\n\r\n return (\r\n <p\r\n data-slot=\"form-message\"\r\n id={formMessageId}\r\n className={cn(\"text-destructive text-sm\", className)}\r\n {...props}\r\n >\r\n {body}\r\n </p>\r\n )\r\n}\r\n\r\nexport {\r\n useFormField,\r\n Form,\r\n FormItem,\r\n FormLabel,\r\n FormControl,\r\n FormDescription,\r\n FormMessage,\r\n FormField,\r\n}\r\n"],"names":["Form","FormProvider","FormFieldContext","React","FormField","props","jsx","Controller","useFormField","fieldContext","itemContext","FormItemContext","getFieldState","useFormContext","formState","useFormState","fieldState","id","FormItem","className","cn","FormLabel","error","formItemId","Label","FormControl","formDescriptionId","formMessageId","Slot","FormDescription","FormMessage","body"],"mappings":";;;;;;AAkBA,MAAMA,IAAOC,GASPC,IAAmBC,EAAM;AAAA,EAC7B,CAAA;AACF,GAEMC,IAAY,CAGhB;AAAA,EACE,GAAGC;AACL,MAEE,gBAAAC,EAACJ,EAAiB,UAAjB,EAA0B,OAAO,EAAE,MAAMG,EAAM,KAAA,GAC9C,UAAA,gBAAAC,EAACC,GAAA,EAAY,GAAGF,GAAO,GACzB,GAIEG,IAAe,MAAM;AACzB,QAAMC,IAAeN,EAAM,WAAWD,CAAgB,GAChDQ,IAAcP,EAAM,WAAWQ,CAAe,GAC9C,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GACpBC,IAAYC,EAAa,EAAE,MAAMN,EAAa,MAAM,GACpDO,IAAaJ,EAAcH,EAAa,MAAMK,CAAS;AAE7D,MAAI,CAACL;AACH,UAAM,IAAI,MAAM,gDAAgD;AAGlE,QAAM,EAAE,IAAAQ,MAAOP;AAEf,SAAO;AAAA,IACL,IAAAO;AAAA,IACA,MAAMR,EAAa;AAAA,IACnB,YAAY,GAAGQ,CAAE;AAAA,IACjB,mBAAmB,GAAGA,CAAE;AAAA,IACxB,eAAe,GAAGA,CAAE;AAAA,IACpB,GAAGD;AAAA,EAAA;AAEP,GAMML,IAAkBR,EAAM;AAAA,EAC5B,CAAA;AACF;AAEA,SAASe,EAAS,EAAE,WAAAC,GAAW,GAAGd,KAAsC;AACtE,QAAMY,IAAKd,EAAM,MAAA;AAEjB,2BACGQ,EAAgB,UAAhB,EAAyB,OAAO,EAAE,IAAAM,KACjC,UAAA,gBAAAX;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWc,EAAG,uBAAuBD,CAAS;AAAA,MAC7C,GAAGd;AAAA,IAAA;AAAA,EAAA,GAER;AAEJ;AAEA,SAASgB,EAAU;AAAA,EACE,WAAAF;AAAA,EACA,GAAGd;AACL,GAAqD;AACtE,QAAM,EAAE,OAAAiB,GAAO,YAAAC,EAAA,IAAef,EAAA;AAE9B,SACE,gBAAAF;AAAA,IAACkB;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,cAAY,CAAC,CAACF;AAAA,MACd,WAAWF,EAAGD,CAAS;AAAA,MACvB,SAASI;AAAA,MACR,GAAGlB;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAASoB,EAAY,EAAE,GAAGpB,KAA4C;AACpE,QAAM,EAAE,OAAAiB,GAAO,YAAAC,GAAY,mBAAAG,GAAmB,eAAAC,EAAA,IAAkBnB,EAAA;AAEhE,SACE,gBAAAF;AAAA,IAACsB;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,IAAIL;AAAA,MACJ,oBACGD,IAEG,GAAGI,CAAiB,IAAIC,CAAa,KADrC,GAAGD,CAAiB;AAAA,MAG1B,gBAAc,CAAC,CAACJ;AAAA,MACf,GAAGjB;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAASwB,EAAgB,EAAE,WAAAV,GAAW,GAAGd,KAAoC;AAC3E,QAAM,EAAE,mBAAAqB,EAAA,IAAsBlB,EAAA;AAE9B,SACE,gBAAAF;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,IAAIoB;AAAA,MACJ,WAAWN,EAAG,iCAAiCD,CAAS;AAAA,MACvD,GAAGd;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAASyB,EAAY,EAAE,WAAAX,GAAW,GAAGd,KAAoC;AACvE,QAAM,EAAE,OAAAiB,GAAO,eAAAK,EAAA,IAAkBnB,EAAA,GAC3BuB,IAAOT,IAAQ,OAAOA,GAAO,WAAW,EAAE,IAAIjB,EAAM;AAE1D,SAAK0B,IAKH,gBAAAzB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,IAAIqB;AAAA,MACJ,WAAWP,EAAG,4BAA4BD,CAAS;AAAA,MAClD,GAAGd;AAAA,MAEH,UAAA0B;AAAA,IAAA;AAAA,EAAA,IAVI;AAaX;"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { jsx as l, jsxs as o } from "react/jsx-runtime";
|
|
2
|
+
import { useForm as i, FormProvider as n } from "react-hook-form";
|
|
3
|
+
import { FormCombobox as m } from "./FormCombobox.js";
|
|
4
|
+
import { FormInput as s } from "../FormInput/FormInput.js";
|
|
5
|
+
import { FormSelect as c } from "../FormSelect/FormSelect.js";
|
|
6
|
+
import { Button as d } from "../Button/Button.js";
|
|
7
|
+
import { FormTextarea as u } from "../FormTextarea/FormTextarea.js";
|
|
8
|
+
const p = (e) => new Promise((r) => setTimeout(r, e)), a = [
|
|
9
|
+
{ value: "ua", label: "Ukraine" },
|
|
10
|
+
{ value: "pl", label: "Poland" },
|
|
11
|
+
{ value: "de", label: "Germany" },
|
|
12
|
+
{ value: "fr", label: "France" },
|
|
13
|
+
{ value: "es", label: "Spain" },
|
|
14
|
+
{ value: "it", label: "Italy" }
|
|
15
|
+
], b = async ({ search: e }) => {
|
|
16
|
+
await p(200);
|
|
17
|
+
const r = (e ?? "").trim().toLowerCase();
|
|
18
|
+
return r ? a.filter((t) => String(t.label).toLowerCase().includes(r)) : a;
|
|
19
|
+
}, f = [
|
|
20
|
+
{ value: "admin", label: "Адміністратор" },
|
|
21
|
+
{ value: "manager", label: "Менеджер" },
|
|
22
|
+
{ value: "user", label: "Користувач" }
|
|
23
|
+
], L = {
|
|
24
|
+
title: "Forms/HybridValidation",
|
|
25
|
+
parameters: {
|
|
26
|
+
layout: "centered"
|
|
27
|
+
},
|
|
28
|
+
decorators: [
|
|
29
|
+
(e) => /* @__PURE__ */ l("div", { className: "p-6 w-[420px]", children: /* @__PURE__ */ l(e, {}) })
|
|
30
|
+
]
|
|
31
|
+
}, y = (e) => {
|
|
32
|
+
const r = {};
|
|
33
|
+
return e.fullName?.trim() || (r.fullName = { type: "required", message: "Обовʼязкове поле" }), e.role || (r.role = { type: "required", message: "Оберіть роль" }), e.country || (r.country = { type: "required", message: "Оберіть країну" }), e.description?.trim() ? e.description.trim().length < 10 && (r.description = { type: "minLength", message: "Мінімум 10 символів" }) : r.description = { type: "required", message: "Обовʼязкове поле" }, {
|
|
34
|
+
values: Object.keys(r).length ? {} : e,
|
|
35
|
+
errors: r
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
function h() {
|
|
39
|
+
const e = i({
|
|
40
|
+
mode: "onTouched",
|
|
41
|
+
resolver: y,
|
|
42
|
+
defaultValues: { fullName: "", role: "", country: "", description: "" }
|
|
43
|
+
}), { isValid: r, isSubmitting: t } = e.formState;
|
|
44
|
+
return /* @__PURE__ */ l(n, { ...e, children: /* @__PURE__ */ o(
|
|
45
|
+
"form",
|
|
46
|
+
{
|
|
47
|
+
className: "space-y-4",
|
|
48
|
+
onSubmit: e.handleSubmit(() => {
|
|
49
|
+
alert("Форму надіслано ✅");
|
|
50
|
+
}),
|
|
51
|
+
children: [
|
|
52
|
+
/* @__PURE__ */ l(
|
|
53
|
+
s,
|
|
54
|
+
{
|
|
55
|
+
form: e,
|
|
56
|
+
name: "fullName",
|
|
57
|
+
label: "Імʼя",
|
|
58
|
+
placeholder: "Іван Петренко"
|
|
59
|
+
}
|
|
60
|
+
),
|
|
61
|
+
/* @__PURE__ */ l(
|
|
62
|
+
c,
|
|
63
|
+
{
|
|
64
|
+
form: e,
|
|
65
|
+
name: "role",
|
|
66
|
+
label: "Роль",
|
|
67
|
+
placeholder: "Оберіть роль",
|
|
68
|
+
options: f
|
|
69
|
+
}
|
|
70
|
+
),
|
|
71
|
+
/* @__PURE__ */ l(
|
|
72
|
+
m,
|
|
73
|
+
{
|
|
74
|
+
form: e,
|
|
75
|
+
name: "country",
|
|
76
|
+
label: "Країна",
|
|
77
|
+
placeholder: "Оберіть країну",
|
|
78
|
+
searchLabel: "Пошук...",
|
|
79
|
+
emptyLabel: "Нічого не знайдено",
|
|
80
|
+
loadData: b
|
|
81
|
+
}
|
|
82
|
+
),
|
|
83
|
+
/* @__PURE__ */ l(
|
|
84
|
+
u,
|
|
85
|
+
{
|
|
86
|
+
form: e,
|
|
87
|
+
name: "description",
|
|
88
|
+
label: "Опис",
|
|
89
|
+
placeholder: "Мінімум 10 символів"
|
|
90
|
+
}
|
|
91
|
+
),
|
|
92
|
+
/* @__PURE__ */ l(d, { type: "submit", disabled: !r || t, className: "w-full", children: "Зберегти" })
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
) });
|
|
96
|
+
}
|
|
97
|
+
const q = {
|
|
98
|
+
render: () => /* @__PURE__ */ l(h, {})
|
|
99
|
+
};
|
|
100
|
+
export {
|
|
101
|
+
q as AllFields,
|
|
102
|
+
L as default
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=FormCombobox.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormCombobox.stories.js","sources":["../../src/FormCombobox/FormCombobox.stories.tsx"],"sourcesContent":["import React from 'react';\nimport type { Meta, StoryObj } from '@storybook/react';\nimport { FormProvider, useForm } from 'react-hook-form';\n\nimport { FormCombobox } from './FormCombobox';\nimport { FormInput } from '../FormInput';\nimport { FormTextarea } from '../FormTextarea';\nimport { FormSelect } from '../FormSelect';\nimport { Button } from '../Button';\nimport { ComboboxOption, ComboboxProps } from '../Combobox';\n\nconst sleep = (ms: number) => new Promise((r) => setTimeout(r, ms));\n\nconst COUNTRIES: ComboboxOption[] = [\n { value: 'ua', label: 'Ukraine' },\n { value: 'pl', label: 'Poland' },\n { value: 'de', label: 'Germany' },\n { value: 'fr', label: 'France' },\n { value: 'es', label: 'Spain' },\n { value: 'it', label: 'Italy' },\n];\n\nconst loadCountries: ComboboxProps['loadData'] = async ({ search }) => {\n await sleep(200);\n const q = (search ?? '').trim().toLowerCase();\n if (!q) return COUNTRIES;\n return COUNTRIES.filter((o) => String(o.label).toLowerCase().includes(q));\n};\n\nconst ROLE_OPTIONS = [\n { value: 'admin', label: 'Адміністратор' },\n { value: 'manager', label: 'Менеджер' },\n { value: 'user', label: 'Користувач' },\n];\n\nconst meta = {\n title: 'Forms/HybridValidation',\n parameters: {\n layout: 'centered',\n },\n decorators: [\n (Story) => (\n <div className=\"p-6 w-[420px]\">\n <Story />\n </div>\n ),\n ],\n} satisfies Meta;\n\nexport default meta;\n\ntype Story = StoryObj<typeof meta>;\n\n// Гібридна модель валідації (feat/1856 + feat/3677):\n// - mode: \"onTouched\" — помилка зʼявляється після blur поля\n// - для Combobox: blur спрацьовує на закриття дропдауна (відкрив → закрив без вибору → помилка)\n// - помилка зникає миттєво при виправленні (on change), щойно значення валідне\n// - кнопка submit disabled, поки форма невалідна\ntype FormValues = {\n fullName: string;\n role: string;\n country: string;\n description: string;\n};\n\nconst resolver = (values: FormValues) => {\n const errors: Record<string, { type: string; message: string }> = {};\n\n if (!values.fullName?.trim()) {\n errors.fullName = { type: 'required', message: 'Обовʼязкове поле' };\n }\n if (!values.role) {\n errors.role = { type: 'required', message: 'Оберіть роль' };\n }\n if (!values.country) {\n errors.country = { type: 'required', message: 'Оберіть країну' };\n }\n if (!values.description?.trim()) {\n errors.description = { type: 'required', message: 'Обовʼязкове поле' };\n } else if (values.description.trim().length < 10) {\n errors.description = { type: 'minLength', message: 'Мінімум 10 символів' };\n }\n\n return {\n values: Object.keys(errors).length ? {} : values,\n errors,\n };\n};\n\nfunction HybridForm() {\n const form = useForm<FormValues>({\n mode: 'onTouched',\n resolver,\n defaultValues: { fullName: '', role: '', country: '', description: '' },\n });\n\n const { isValid, isSubmitting } = form.formState;\n\n return (\n <FormProvider {...form}>\n <form\n className=\"space-y-4\"\n onSubmit={form.handleSubmit(() => {\n alert('Форму надіслано ✅');\n })}\n >\n <FormInput<FormValues>\n form={form}\n name=\"fullName\"\n label=\"Імʼя\"\n placeholder=\"Іван Петренко\"\n />\n\n <FormSelect<FormValues, unknown>\n form={form}\n name=\"role\"\n label=\"Роль\"\n placeholder=\"Оберіть роль\"\n options={ROLE_OPTIONS}\n />\n\n <FormCombobox<FormValues>\n form={form}\n name=\"country\"\n label=\"Країна\"\n placeholder=\"Оберіть країну\"\n searchLabel=\"Пошук...\"\n emptyLabel=\"Нічого не знайдено\"\n loadData={loadCountries}\n />\n\n <FormTextarea<FormValues>\n form={form}\n name=\"description\"\n label=\"Опис\"\n placeholder=\"Мінімум 10 символів\"\n />\n\n <Button type=\"submit\" disabled={!isValid || isSubmitting} className=\"w-full\">\n Зберегти\n </Button>\n </form>\n </FormProvider>\n );\n}\n\nexport const AllFields: Story = {\n render: () => <HybridForm />,\n};\n"],"names":["sleep","ms","COUNTRIES","loadCountries","search","q","o","ROLE_OPTIONS","meta","Story","jsx","resolver","values","errors","HybridForm","form","useForm","isValid","isSubmitting","FormProvider","jsxs","FormInput","FormSelect","FormCombobox","FormTextarea","Button","AllFields"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormSelect.d.ts","sourceRoot":"","sources":["../../src/FormSelect/FormSelect.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,eAAO,MAAM,UAAU,GAAI,IAAI,SAAS,WAAW,EAAE,gBAAgB,EACnE,OAAO,eAAe,CAAC,IAAI,EAAE,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"FormSelect.d.ts","sourceRoot":"","sources":["../../src/FormSelect/FormSelect.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,eAAO,MAAM,UAAU,GAAI,IAAI,SAAS,WAAW,EAAE,gBAAgB,EACnE,OAAO,eAAe,CAAC,IAAI,EAAE,gBAAgB,CAAC,4CAmD/C,CAAC"}
|
package/FormSelect/FormSelect.js
CHANGED
|
@@ -1,42 +1,46 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { Select as
|
|
3
|
-
import { FormRenderControl as
|
|
4
|
-
import { FormControl as
|
|
1
|
+
import { jsx as n } from "react/jsx-runtime";
|
|
2
|
+
import { Select as B } from "../Select/Select.js";
|
|
3
|
+
import { FormRenderControl as F } from "../Form/FormRenderControl.js";
|
|
4
|
+
import { FormControl as P } from "../Form/Form.js";
|
|
5
5
|
const b = (m) => {
|
|
6
6
|
const {
|
|
7
|
-
value:
|
|
8
|
-
form:
|
|
9
|
-
label:
|
|
10
|
-
tooltip:
|
|
7
|
+
value: l = void 0,
|
|
8
|
+
form: i,
|
|
9
|
+
label: p,
|
|
10
|
+
tooltip: a,
|
|
11
11
|
tooltipProps: g,
|
|
12
12
|
name: s,
|
|
13
13
|
options: c = [],
|
|
14
|
-
onChange:
|
|
15
|
-
containerProps:
|
|
16
|
-
renderTrigger:
|
|
17
|
-
onChangePrepare:
|
|
18
|
-
|
|
14
|
+
onChange: u,
|
|
15
|
+
containerProps: h,
|
|
16
|
+
renderTrigger: C,
|
|
17
|
+
onChangePrepare: t,
|
|
18
|
+
onBlur: d,
|
|
19
|
+
...x
|
|
19
20
|
} = m;
|
|
20
|
-
return /* @__PURE__ */
|
|
21
|
-
|
|
21
|
+
return /* @__PURE__ */ n(
|
|
22
|
+
F,
|
|
22
23
|
{
|
|
23
|
-
form:
|
|
24
|
+
form: i,
|
|
24
25
|
name: s,
|
|
25
|
-
tooltip:
|
|
26
|
+
tooltip: a,
|
|
26
27
|
tooltipProps: g,
|
|
27
|
-
label:
|
|
28
|
-
containerProps:
|
|
29
|
-
render: ({ field:
|
|
30
|
-
|
|
28
|
+
label: p,
|
|
29
|
+
containerProps: h,
|
|
30
|
+
render: ({ field: e }) => /* @__PURE__ */ n(
|
|
31
|
+
B,
|
|
31
32
|
{
|
|
32
|
-
value:
|
|
33
|
+
value: e.value ?? (l || ""),
|
|
33
34
|
options: c,
|
|
35
|
+
onBlur: () => {
|
|
36
|
+
e.onBlur(), d?.();
|
|
37
|
+
},
|
|
34
38
|
onChange: (r) => {
|
|
35
|
-
const o =
|
|
36
|
-
|
|
39
|
+
const o = t ? t(r) : r;
|
|
40
|
+
e.onChange(o), u?.(r, o);
|
|
37
41
|
},
|
|
38
|
-
renderTrigger: (r, o) => /* @__PURE__ */
|
|
39
|
-
...
|
|
42
|
+
renderTrigger: (r, o) => /* @__PURE__ */ n(P, { children: C?.(r, o) || o }),
|
|
43
|
+
...x
|
|
40
44
|
}
|
|
41
45
|
)
|
|
42
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormSelect.js","sources":["../../src/FormSelect/FormSelect.tsx"],"sourcesContent":["import { FormControl, FormRenderControl } from '../Form';\r\nimport { Select } from '../Select';\r\nimport { FormSelectProps } from './FormSelect.types';\r\nimport { FieldValues } from 'react-hook-form';\r\n\r\n// TODO: add description\r\nexport const FormSelect = <Data extends FieldValues, ExtendOptionData>(\r\n props: FormSelectProps<Data, ExtendOptionData>\r\n) => {\r\n const {\r\n value = undefined,\r\n form,\r\n label,\r\n tooltip,\r\n tooltipProps,\r\n name,\r\n options = [],\r\n onChange,\r\n containerProps,\r\n renderTrigger,\r\n onChangePrepare,\r\n ...rest\r\n } = props;\r\n\r\n return (\r\n <FormRenderControl\r\n form={form}\r\n name={name}\r\n tooltip={tooltip}\r\n tooltipProps={tooltipProps}\r\n label={label}\r\n containerProps={containerProps}\r\n render={({ field }) => (\r\n <Select<ExtendOptionData>\r\n value={field.value ?? (value || '')}\r\n options={options}\r\n onChange={(value) => {\r\n const nextValue = onChangePrepare ? onChangePrepare(value) : value;\r\n field.onChange(nextValue);\r\n onChange?.(value, nextValue);\r\n }}\r\n renderTrigger={(p, defaultComponent) => {\r\n return (\r\n <FormControl>\r\n {renderTrigger?.(p, defaultComponent) || defaultComponent}\r\n </FormControl>\r\n )\r\n }}\r\n {...rest}\r\n />\r\n )}\r\n />\r\n );\r\n};\r\n"],"names":["FormSelect","props","value","form","label","tooltip","tooltipProps","name","options","onChange","containerProps","renderTrigger","onChangePrepare","rest","jsx","FormRenderControl","field","Select","nextValue","p","defaultComponent","FormControl"],"mappings":";;;;AAMO,MAAMA,IAAa,CACxBC,MACG;AACH,QAAM;AAAA,IACJ,OAAAC,IAAQ;AAAA,IACR,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,SAAAC;AAAA,IACA,cAAAC;AAAA,IACA,MAAAC;AAAA,IACA,SAAAC,IAAU,CAAA;AAAA,IACV,UAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,
|
|
1
|
+
{"version":3,"file":"FormSelect.js","sources":["../../src/FormSelect/FormSelect.tsx"],"sourcesContent":["import { FormControl, FormRenderControl } from '../Form';\r\nimport { Select } from '../Select';\r\nimport { FormSelectProps } from './FormSelect.types';\r\nimport { FieldValues } from 'react-hook-form';\r\n\r\n// TODO: add description\r\nexport const FormSelect = <Data extends FieldValues, ExtendOptionData>(\r\n props: FormSelectProps<Data, ExtendOptionData>\r\n) => {\r\n const {\r\n value = undefined,\r\n form,\r\n label,\r\n tooltip,\r\n tooltipProps,\r\n name,\r\n options = [],\r\n onChange,\r\n containerProps,\r\n renderTrigger,\r\n onChangePrepare,\r\n onBlur,\r\n ...rest\r\n } = props;\r\n\r\n return (\r\n <FormRenderControl\r\n form={form}\r\n name={name}\r\n tooltip={tooltip}\r\n tooltipProps={tooltipProps}\r\n label={label}\r\n containerProps={containerProps}\r\n render={({ field }) => (\r\n <Select<ExtendOptionData>\r\n value={field.value ?? (value || '')}\r\n options={options}\r\n onBlur={() => {\r\n field.onBlur();\r\n onBlur?.();\r\n }}\r\n onChange={(value) => {\r\n const nextValue = onChangePrepare ? onChangePrepare(value) : value;\r\n field.onChange(nextValue);\r\n onChange?.(value, nextValue);\r\n }}\r\n renderTrigger={(p, defaultComponent) => {\r\n return (\r\n <FormControl>\r\n {renderTrigger?.(p, defaultComponent) || defaultComponent}\r\n </FormControl>\r\n )\r\n }}\r\n {...rest}\r\n />\r\n )}\r\n />\r\n );\r\n};\r\n"],"names":["FormSelect","props","value","form","label","tooltip","tooltipProps","name","options","onChange","containerProps","renderTrigger","onChangePrepare","onBlur","rest","jsx","FormRenderControl","field","Select","nextValue","p","defaultComponent","FormControl"],"mappings":";;;;AAMO,MAAMA,IAAa,CACxBC,MACG;AACH,QAAM;AAAA,IACJ,OAAAC,IAAQ;AAAA,IACR,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,SAAAC;AAAA,IACA,cAAAC;AAAA,IACA,MAAAC;AAAA,IACA,SAAAC,IAAU,CAAA;AAAA,IACV,UAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,QAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,IACDb;AAEJ,SACE,gBAAAc;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAb;AAAA,MACA,MAAAI;AAAA,MACA,SAAAF;AAAA,MACA,cAAAC;AAAA,MACA,OAAAF;AAAA,MACA,gBAAAM;AAAA,MACA,QAAQ,CAAC,EAAE,OAAAO,EAAA,MACT,gBAAAF;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,OAAOD,EAAM,UAAUf,KAAS;AAAA,UAChC,SAAAM;AAAA,UACA,QAAQ,MAAM;AACZ,YAAAS,EAAM,OAAA,GACNJ,IAAA;AAAA,UACF;AAAA,UACA,UAAU,CAACX,MAAU;AACnB,kBAAMiB,IAAYP,IAAkBA,EAAgBV,CAAK,IAAIA;AAC7D,YAAAe,EAAM,SAASE,CAAS,GACxBV,IAAWP,GAAOiB,CAAS;AAAA,UAC7B;AAAA,UACA,eAAe,CAACC,GAAGC,wBAEdC,GAAA,EACE,UAAAX,IAAgBS,GAAGC,CAAgB,KAAKA,GAC3C;AAAA,UAGH,GAAGP;AAAA,QAAA;AAAA,MAAA;AAAA,IACN;AAAA,EAAA;AAIR;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputVariants.d.ts","sourceRoot":"","sources":["../../src/Input/inputVariants.tsx"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa;;
|
|
1
|
+
{"version":3,"file":"inputVariants.d.ts","sourceRoot":"","sources":["../../src/Input/inputVariants.tsx"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa;;8EAkBzB,CAAC"}
|
package/Input/inputVariants.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { cva as e } from "class-variance-authority";
|
|
2
|
-
const
|
|
2
|
+
const i = e(
|
|
3
3
|
[
|
|
4
4
|
"flex h-10 w-full rounded-lg border border-input px-3 py-2",
|
|
5
5
|
"text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground",
|
|
6
6
|
"focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
|
|
7
|
-
"aria-invalid:border-destructive aria-invalid:focus-visible:ring-destructive",
|
|
8
7
|
"box-border"
|
|
9
8
|
],
|
|
10
9
|
{
|
|
@@ -20,6 +19,6 @@ const r = e(
|
|
|
20
19
|
}
|
|
21
20
|
);
|
|
22
21
|
export {
|
|
23
|
-
|
|
22
|
+
i as inputVariants
|
|
24
23
|
};
|
|
25
24
|
//# sourceMappingURL=inputVariants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputVariants.js","sources":["../../src/Input/inputVariants.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority';\r\n\r\nexport const inputVariants = cva(\r\n [\r\n 'flex h-10 w-full rounded-lg border border-input px-3 py-2',\r\n 'text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground',\r\n 'focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\r\n '
|
|
1
|
+
{"version":3,"file":"inputVariants.js","sources":["../../src/Input/inputVariants.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority';\r\n\r\nexport const inputVariants = cva(\r\n [\r\n 'flex h-10 w-full rounded-lg border border-input px-3 py-2',\r\n 'text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground',\r\n 'focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\r\n 'box-border',\r\n ],\r\n {\r\n variants: {\r\n variant: {\r\n default: 'bg-background',\r\n grey: 'bg-slate-200',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n },\r\n }\r\n);\r\n"],"names":["inputVariants","cva"],"mappings":";AAEO,MAAMA,IAAgBC;AAAA,EAC3B;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,MAAA;AAAA,IACR;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ;"}
|
package/Select/Select.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../src/Select/Select.tsx"],"names":[],"mappings":"AAGA,OAAO,EAIL,WAAW,EAIZ,MAAM,WAAW,CAAC;AAkGnB,eAAO,MAAM,MAAM,GAAI,gBAAgB,EACrC,OAAO,WAAW,CAAC,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../src/Select/Select.tsx"],"names":[],"mappings":"AAGA,OAAO,EAIL,WAAW,EAIZ,MAAM,WAAW,CAAC;AAkGnB,eAAO,MAAM,MAAM,GAAI,gBAAgB,EACrC,OAAO,WAAW,CAAC,gBAAgB,CAAC,4CA0DrC,CAAC"}
|
package/Select/Select.js
CHANGED
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
import { jsxs as u, jsx as
|
|
2
|
-
import { useMemo as
|
|
3
|
-
import { cn as
|
|
4
|
-
import { SelectRoot as
|
|
5
|
-
import { Button as
|
|
6
|
-
const
|
|
7
|
-
const { placeholder: n, renderTrigger: t, slotProps: l } = e, r = /* @__PURE__ */
|
|
1
|
+
import { jsxs as u, jsx as i, Fragment as S } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo as v, createElement as p } from "react";
|
|
3
|
+
import { cn as C } from "@oneplatformdev/utils";
|
|
4
|
+
import { SelectRoot as O, SelectContent as b, SelectTrigger as N, SelectValue as P, SelectItem as R } from "./SelectRoot.js";
|
|
5
|
+
import { Button as k } from "../Button/Button.js";
|
|
6
|
+
const B = (e) => {
|
|
7
|
+
const { placeholder: n, renderTrigger: t, slotProps: l } = e, r = /* @__PURE__ */ i(N, { ...l?.triggerProps || {}, children: /* @__PURE__ */ i(P, { placeholder: n }) });
|
|
8
8
|
return t && typeof t == "function" ? t(e, r) : r;
|
|
9
9
|
}, s = (e) => {
|
|
10
10
|
const { children: n, child: t, option: l, deep: r = 0, className: c, style: a = {} } = e;
|
|
11
11
|
return /* @__PURE__ */ u(
|
|
12
|
-
|
|
12
|
+
R,
|
|
13
13
|
{
|
|
14
14
|
value: l.value ?? "",
|
|
15
15
|
disabled: l.disabled,
|
|
16
|
-
className:
|
|
16
|
+
className: C("cursor-pointer", c),
|
|
17
17
|
style: { paddingLeft: `calc(8px + ${(r || 0) * 8}px)`, ...a || {} },
|
|
18
18
|
children: [
|
|
19
19
|
n,
|
|
20
20
|
!t && l.label,
|
|
21
|
-
t && /* @__PURE__ */
|
|
21
|
+
t && /* @__PURE__ */ i(S, { children: typeof t == "function" ? t({ ...e }) : t })
|
|
22
22
|
]
|
|
23
23
|
},
|
|
24
24
|
l.value
|
|
25
25
|
);
|
|
26
26
|
}, g = (e) => {
|
|
27
27
|
const { renderOption: n, option: t, index: l, options: r, deep: c = 0, ...a } = e;
|
|
28
|
-
return n ? n && typeof n != "function" ? /* @__PURE__ */
|
|
28
|
+
return n ? n && typeof n != "function" ? /* @__PURE__ */ i(s, { ...e }) : n && typeof n == "function" ? n(
|
|
29
29
|
t,
|
|
30
30
|
l,
|
|
31
31
|
r,
|
|
32
32
|
{ ...a, options: r },
|
|
33
|
-
/* @__PURE__ */
|
|
33
|
+
/* @__PURE__ */ i(s, { ...e })
|
|
34
34
|
) : t.children?.length ? /* @__PURE__ */ u(
|
|
35
35
|
"div",
|
|
36
36
|
{
|
|
37
37
|
className: "flex flex-col gap-1 truncate line-clamp-2",
|
|
38
38
|
children: [
|
|
39
|
-
/* @__PURE__ */
|
|
39
|
+
/* @__PURE__ */ i(s, { ...e }),
|
|
40
40
|
t.children?.map((d, f, m) => /* @__PURE__ */ p(
|
|
41
41
|
g,
|
|
42
42
|
{
|
|
@@ -51,51 +51,63 @@ const k = (e) => {
|
|
|
51
51
|
]
|
|
52
52
|
},
|
|
53
53
|
t.value
|
|
54
|
-
) : /* @__PURE__ */
|
|
55
|
-
},
|
|
54
|
+
) : /* @__PURE__ */ i(s, { ...e }) : /* @__PURE__ */ i(s, { ...e });
|
|
55
|
+
}, z = (e) => {
|
|
56
56
|
const {
|
|
57
57
|
value: n,
|
|
58
58
|
options: t = [],
|
|
59
59
|
filterOption: l,
|
|
60
60
|
filterOptions: r,
|
|
61
61
|
onChange: c,
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
62
|
+
onBlur: a,
|
|
63
|
+
nullable: d = !1,
|
|
64
|
+
clearLabel: f = "Clear",
|
|
65
|
+
disabled: m,
|
|
66
|
+
slotProps: h
|
|
67
|
+
} = e, x = v(() => {
|
|
68
|
+
let o = t;
|
|
69
|
+
return l && (o = o.filter(l)), r && (o = r(o)), o;
|
|
69
70
|
}, [t, r]);
|
|
70
|
-
return /* @__PURE__ */ u(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
71
|
+
return /* @__PURE__ */ u(
|
|
72
|
+
O,
|
|
73
|
+
{
|
|
74
|
+
value: n,
|
|
75
|
+
onValueChange: c,
|
|
76
|
+
disabled: m,
|
|
77
|
+
onOpenChange: (o) => {
|
|
78
|
+
o || a?.();
|
|
79
|
+
},
|
|
80
|
+
children: [
|
|
81
|
+
/* @__PURE__ */ i(B, { ...e }),
|
|
82
|
+
/* @__PURE__ */ u(b, { ...h?.selectProps || {}, children: [
|
|
83
|
+
d && /* @__PURE__ */ i(
|
|
84
|
+
k,
|
|
85
|
+
{
|
|
86
|
+
className: "w-full px-2",
|
|
87
|
+
color: "secondary",
|
|
88
|
+
size: "sm",
|
|
89
|
+
onClick: () => {
|
|
90
|
+
c?.("");
|
|
91
|
+
},
|
|
92
|
+
children: f
|
|
93
|
+
}
|
|
94
|
+
),
|
|
95
|
+
x.map((o, y) => /* @__PURE__ */ p(
|
|
96
|
+
g,
|
|
97
|
+
{
|
|
98
|
+
...e,
|
|
99
|
+
key: o.value,
|
|
100
|
+
option: o,
|
|
101
|
+
index: y,
|
|
102
|
+
deep: 0
|
|
103
|
+
}
|
|
104
|
+
))
|
|
105
|
+
] })
|
|
106
|
+
]
|
|
107
|
+
}
|
|
108
|
+
);
|
|
97
109
|
};
|
|
98
110
|
export {
|
|
99
|
-
|
|
111
|
+
z as Select
|
|
100
112
|
};
|
|
101
113
|
//# sourceMappingURL=Select.js.map
|
package/Select/Select.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.js","sources":["../../src/Select/Select.tsx"],"sourcesContent":["import { HTMLAttributes, ReactNode, useMemo } from 'react';\r\n\r\nimport { Button } from '../Button';\r\nimport {\r\n SelectContent,\r\n SelectItem,\r\n SelectOption,\r\n SelectProps,\r\n SelectRoot,\r\n SelectTrigger,\r\n SelectValue,\r\n} from '../Select';\r\nimport { cn } from '@oneplatformdev/utils';\r\n\r\nconst RenderSelectTrigger = <ExtendOptionData, >(\r\n props: SelectProps<ExtendOptionData>\r\n) => {\r\n const { placeholder, renderTrigger, slotProps } = props;\r\n const defaultComponent = (\r\n <SelectTrigger {...(slotProps?.triggerProps || {})}>\r\n <SelectValue placeholder={placeholder}/>\r\n </SelectTrigger>\r\n );\r\n\r\n if (Boolean(renderTrigger) && typeof renderTrigger === 'function') {\r\n return renderTrigger(props, defaultComponent);\r\n }\r\n\r\n return defaultComponent;\r\n};\r\n\r\nconst DefaultRenderSelectOption = <ExtendOptionData, >(\r\n props: SelectProps<ExtendOptionData> & {\r\n option: SelectOption<ExtendOptionData>;\r\n index: number;\r\n deep?: number;\r\n child?: ((params: SelectProps<ExtendOptionData> & {\r\n option: SelectOption<ExtendOptionData>;\r\n index: number;\r\n }) => ReactNode) | ReactNode;\r\n } & Omit<HTMLAttributes<HTMLDivElement>, 'onChange'>\r\n) => {\r\n const { children, child, option, deep = 0, className, style = {} } = props;\r\n\r\n return (\r\n <SelectItem\r\n key={option.value}\r\n value={option.value ?? ''}\r\n disabled={option.disabled}\r\n className={cn('cursor-pointer', className)}\r\n style={{ paddingLeft: `calc(8px + ${(deep || 0) * 8}px)`, ...(style || {}) }}\r\n >\r\n {children}\r\n {!child && option.label}\r\n {child && (\r\n <>\r\n {typeof child === 'function'\r\n ? child({ ...props })\r\n : child\r\n }\r\n </>\r\n )}\r\n </SelectItem>\r\n )\r\n};\r\n\r\nconst RenderSelectOption = <ExtendOptionData, >(\r\n props: SelectProps<ExtendOptionData> & {\r\n option: SelectOption<ExtendOptionData>;\r\n index: number;\r\n deep?: number;\r\n }\r\n) => {\r\n const { renderOption, option, index, options, deep = 0, ...rest } = props;\r\n if (!renderOption) return <DefaultRenderSelectOption {...props} />;\r\n if (renderOption && typeof renderOption !== 'function') return <DefaultRenderSelectOption {...props} />;\r\n if (renderOption && typeof renderOption === 'function') return renderOption(\r\n option,\r\n index,\r\n options,\r\n { ...rest, options },\r\n <DefaultRenderSelectOption {...props} />\r\n )\r\n\r\n if (!option.children?.length) {\r\n return <DefaultRenderSelectOption {...props} />;\r\n }\r\n\r\n return (\r\n <div\r\n key={option.value}\r\n className=\"flex flex-col gap-1 truncate line-clamp-2\"\r\n >\r\n <DefaultRenderSelectOption {...props} />\r\n {option.children?.map((child, idx, arr) => (\r\n <RenderSelectOption\r\n {...props}\r\n key={child.value}\r\n option={child}\r\n options={arr}\r\n index={idx}\r\n deep={(deep || 0) + 1}\r\n />\r\n ))}\r\n </div>\r\n )\r\n};\r\n\r\n// TODO: add description\r\nexport const Select = <ExtendOptionData, >(\r\n props: SelectProps<ExtendOptionData>\r\n) => {\r\n const {\r\n value,\r\n options: initialOptions = [],\r\n filterOption,\r\n filterOptions,\r\n onChange,\r\n nullable = false,\r\n clearLabel = 'Clear',\r\n disabled,\r\n slotProps,\r\n } = props;\r\n\r\n const options = useMemo(() => {\r\n let opt = initialOptions;\r\n if(filterOption) opt = opt.filter(filterOption);\r\n if(filterOptions) opt = filterOptions(opt);\r\n return opt;\r\n }, [ initialOptions, filterOptions ]);\r\n\r\n return (\r\n <SelectRoot
|
|
1
|
+
{"version":3,"file":"Select.js","sources":["../../src/Select/Select.tsx"],"sourcesContent":["import { HTMLAttributes, ReactNode, useMemo } from 'react';\r\n\r\nimport { Button } from '../Button';\r\nimport {\r\n SelectContent,\r\n SelectItem,\r\n SelectOption,\r\n SelectProps,\r\n SelectRoot,\r\n SelectTrigger,\r\n SelectValue,\r\n} from '../Select';\r\nimport { cn } from '@oneplatformdev/utils';\r\n\r\nconst RenderSelectTrigger = <ExtendOptionData, >(\r\n props: SelectProps<ExtendOptionData>\r\n) => {\r\n const { placeholder, renderTrigger, slotProps } = props;\r\n const defaultComponent = (\r\n <SelectTrigger {...(slotProps?.triggerProps || {})}>\r\n <SelectValue placeholder={placeholder}/>\r\n </SelectTrigger>\r\n );\r\n\r\n if (Boolean(renderTrigger) && typeof renderTrigger === 'function') {\r\n return renderTrigger(props, defaultComponent);\r\n }\r\n\r\n return defaultComponent;\r\n};\r\n\r\nconst DefaultRenderSelectOption = <ExtendOptionData, >(\r\n props: SelectProps<ExtendOptionData> & {\r\n option: SelectOption<ExtendOptionData>;\r\n index: number;\r\n deep?: number;\r\n child?: ((params: SelectProps<ExtendOptionData> & {\r\n option: SelectOption<ExtendOptionData>;\r\n index: number;\r\n }) => ReactNode) | ReactNode;\r\n } & Omit<HTMLAttributes<HTMLDivElement>, 'onChange'>\r\n) => {\r\n const { children, child, option, deep = 0, className, style = {} } = props;\r\n\r\n return (\r\n <SelectItem\r\n key={option.value}\r\n value={option.value ?? ''}\r\n disabled={option.disabled}\r\n className={cn('cursor-pointer', className)}\r\n style={{ paddingLeft: `calc(8px + ${(deep || 0) * 8}px)`, ...(style || {}) }}\r\n >\r\n {children}\r\n {!child && option.label}\r\n {child && (\r\n <>\r\n {typeof child === 'function'\r\n ? child({ ...props })\r\n : child\r\n }\r\n </>\r\n )}\r\n </SelectItem>\r\n )\r\n};\r\n\r\nconst RenderSelectOption = <ExtendOptionData, >(\r\n props: SelectProps<ExtendOptionData> & {\r\n option: SelectOption<ExtendOptionData>;\r\n index: number;\r\n deep?: number;\r\n }\r\n) => {\r\n const { renderOption, option, index, options, deep = 0, ...rest } = props;\r\n if (!renderOption) return <DefaultRenderSelectOption {...props} />;\r\n if (renderOption && typeof renderOption !== 'function') return <DefaultRenderSelectOption {...props} />;\r\n if (renderOption && typeof renderOption === 'function') return renderOption(\r\n option,\r\n index,\r\n options,\r\n { ...rest, options },\r\n <DefaultRenderSelectOption {...props} />\r\n )\r\n\r\n if (!option.children?.length) {\r\n return <DefaultRenderSelectOption {...props} />;\r\n }\r\n\r\n return (\r\n <div\r\n key={option.value}\r\n className=\"flex flex-col gap-1 truncate line-clamp-2\"\r\n >\r\n <DefaultRenderSelectOption {...props} />\r\n {option.children?.map((child, idx, arr) => (\r\n <RenderSelectOption\r\n {...props}\r\n key={child.value}\r\n option={child}\r\n options={arr}\r\n index={idx}\r\n deep={(deep || 0) + 1}\r\n />\r\n ))}\r\n </div>\r\n )\r\n};\r\n\r\n// TODO: add description\r\nexport const Select = <ExtendOptionData, >(\r\n props: SelectProps<ExtendOptionData>\r\n) => {\r\n const {\r\n value,\r\n options: initialOptions = [],\r\n filterOption,\r\n filterOptions,\r\n onChange,\r\n onBlur,\r\n nullable = false,\r\n clearLabel = 'Clear',\r\n disabled,\r\n slotProps,\r\n } = props;\r\n\r\n const options = useMemo(() => {\r\n let opt = initialOptions;\r\n if(filterOption) opt = opt.filter(filterOption);\r\n if(filterOptions) opt = filterOptions(opt);\r\n return opt;\r\n }, [ initialOptions, filterOptions ]);\r\n\r\n return (\r\n <SelectRoot\r\n value={value}\r\n onValueChange={onChange}\r\n disabled={disabled}\r\n onOpenChange={(open) => {\r\n // Mark field as touched on close so onTouched validation surfaces the error\r\n if (!open) onBlur?.();\r\n }}\r\n >\r\n <RenderSelectTrigger {...props} />\r\n <SelectContent {...(slotProps?.selectProps || {})}>\r\n {nullable && (\r\n <Button\r\n className=\"w-full px-2\"\r\n color=\"secondary\"\r\n size=\"sm\"\r\n onClick={() => {\r\n onChange?.('');\r\n }}\r\n >\r\n {clearLabel}\r\n </Button>\r\n )}\r\n {options.map((option, index) => (\r\n <RenderSelectOption\r\n {...props}\r\n key={option.value}\r\n option={option}\r\n index={index}\r\n deep={0}\r\n />\r\n ))}\r\n </SelectContent>\r\n </SelectRoot>\r\n );\r\n};\r\n"],"names":["RenderSelectTrigger","props","placeholder","renderTrigger","slotProps","defaultComponent","jsx","SelectTrigger","SelectValue","DefaultRenderSelectOption","children","child","option","deep","className","style","jsxs","SelectItem","cn","Fragment","RenderSelectOption","renderOption","index","options","rest","idx","arr","createElement","Select","value","initialOptions","filterOption","filterOptions","onChange","onBlur","nullable","clearLabel","disabled","useMemo","opt","SelectRoot","open","SelectContent","Button"],"mappings":";;;;;AAcA,MAAMA,IAAsB,CAC1BC,MACG;AACH,QAAM,EAAE,aAAAC,GAAa,eAAAC,GAAe,WAAAC,EAAA,IAAcH,GAC5CI,IACJ,gBAAAC,EAACC,GAAA,EAAe,GAAIH,GAAW,gBAAgB,IAC7C,UAAA,gBAAAE,EAACE,GAAA,EAAY,aAAAN,EAAA,CAAyB,EAAA,CACxC;AAGF,SAAYC,KAAkB,OAAOA,KAAkB,aAC9CA,EAAcF,GAAOI,CAAgB,IAGvCA;AACT,GAEMI,IAA4B,CAChCR,MASG;AACH,QAAM,EAAE,UAAAS,GAAU,OAAAC,GAAO,QAAAC,GAAQ,MAAAC,IAAO,GAAG,WAAAC,GAAW,OAAAC,IAAQ,CAAA,EAAC,IAAMd;AAErE,SACE,gBAAAe;AAAA,IAACC;AAAA,IAAA;AAAA,MAEC,OAAOL,EAAO,SAAS;AAAA,MACvB,UAAUA,EAAO;AAAA,MACjB,WAAWM,EAAG,kBAAkBJ,CAAS;AAAA,MACzC,OAAO,EAAE,aAAa,eAAeD,KAAQ,KAAK,CAAC,OAAO,GAAIE,KAAS,CAAA,EAAC;AAAA,MAEvE,UAAA;AAAA,QAAAL;AAAA,QACA,CAACC,KAASC,EAAO;AAAA,QACjBD,KACC,gBAAAL,EAAAa,GAAA,EACG,UAAA,OAAOR,KAAU,aACdA,EAAM,EAAE,GAAGV,EAAA,CAAO,IAClBU,EAAA,CAEN;AAAA,MAAA;AAAA,IAAA;AAAA,IAdGC,EAAO;AAAA,EAAA;AAkBlB,GAEMQ,IAAqB,CACzBnB,MAKG;AACH,QAAM,EAAE,cAAAoB,GAAc,QAAAT,GAAQ,OAAAU,GAAO,SAAAC,GAAS,MAAAV,IAAO,GAAG,GAAGW,EAAA,IAASvB;AACpE,SAAKoB,IACDA,KAAgB,OAAOA,KAAiB,aAAmB,gBAAAf,EAACG,GAAA,EAA2B,GAAGR,GAAO,IACjGoB,KAAgB,OAAOA,KAAiB,aAAmBA;AAAA,IAC7DT;AAAA,IACAU;AAAA,IACAC;AAAA,IACA,EAAE,GAAGC,GAAM,SAAAD,EAAA;AAAA,IACX,gBAAAjB,EAACG,GAAA,EAA2B,GAAGR,EAAA,CAAO;AAAA,EAAA,IAGnCW,EAAO,UAAU,SAKpB,gBAAAI;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,WAAU;AAAA,MAEV,UAAA;AAAA,QAAA,gBAAAV,EAACG,GAAA,EAA2B,GAAGR,GAAO;AAAA,QACrCW,EAAO,UAAU,IAAI,CAACD,GAAOc,GAAKC,MACjC,gBAAAC;AAAA,UAACP;AAAA,UAAA;AAAA,YACE,GAAGnB;AAAA,YACJ,KAAKU,EAAM;AAAA,YACX,QAAQA;AAAA,YACR,SAASe;AAAA,YACT,OAAOD;AAAA,YACP,OAAOZ,KAAQ,KAAK;AAAA,UAAA;AAAA,QAAA,CAEvB;AAAA,MAAA;AAAA,IAAA;AAAA,IAbID,EAAO;AAAA,EAAA,IALP,gBAAAN,EAACG,GAAA,EAA2B,GAAGR,EAAA,CAAO,IAXrB,gBAAAK,EAACG,GAAA,EAA2B,GAAGR,GAAO;AAgClE,GAGa2B,IAAS,CACpB3B,MACG;AACH,QAAM;AAAA,IACJ,OAAA4B;AAAA,IACA,SAASC,IAAiB,CAAA;AAAA,IAC1B,cAAAC;AAAA,IACA,eAAAC;AAAA,IACA,UAAAC;AAAA,IACA,QAAAC;AAAA,IACA,UAAAC,IAAW;AAAA,IACX,YAAAC,IAAa;AAAA,IACb,UAAAC;AAAA,IACA,WAAAjC;AAAA,EAAA,IACEH,GAEEsB,IAAUe,EAAQ,MAAM;AAC5B,QAAIC,IAAMT;AACV,WAAGC,MAAcQ,IAAMA,EAAI,OAAOR,CAAY,IAC3CC,MAAeO,IAAOP,EAAcO,CAAG,IACnCA;AAAA,EACT,GAAG,CAAET,GAAgBE,CAAc,CAAC;AAEpC,SACE,gBAAAhB;AAAA,IAACwB;AAAA,IAAA;AAAA,MACC,OAAAX;AAAA,MACA,eAAeI;AAAA,MACf,UAAAI;AAAA,MACA,cAAc,CAACI,MAAS;AAEtB,QAAKA,KAAMP,IAAA;AAAA,MACb;AAAA,MAEA,UAAA;AAAA,QAAA,gBAAA5B,EAACN,GAAA,EAAqB,GAAGC,GAAO;AAAA,0BAC/ByC,GAAA,EAAe,GAAItC,GAAW,eAAe,CAAA,GAC3C,UAAA;AAAA,UAAA+B,KACC,gBAAA7B;AAAA,YAACqC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAM;AAAA,cACN,MAAK;AAAA,cACL,SAAS,MAAM;AACb,gBAAAV,IAAW,EAAE;AAAA,cACf;AAAA,cAEC,UAAAG;AAAA,YAAA;AAAA,UAAA;AAAA,UAGJb,EAAQ,IAAI,CAACX,GAAQU,MACpB,gBAAAK;AAAA,YAACP;AAAA,YAAA;AAAA,cACE,GAAGnB;AAAA,cACJ,KAAKW,EAAO;AAAA,cACZ,QAAAA;AAAA,cACA,OAAAU;AAAA,cACA,MAAM;AAAA,YAAA;AAAA,UAAA,CAET;AAAA,QAAA,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
package/Select/Select.types.d.ts
CHANGED
|
@@ -23,6 +23,8 @@ export interface SelectProps<ExtendOptionData> {
|
|
|
23
23
|
placeholder?: string;
|
|
24
24
|
/** Select Root onValueChange handler. */
|
|
25
25
|
onChange?: (value: SelectOption<ExtendOptionData>['value']) => void;
|
|
26
|
+
/** Called when the dropdown closes. Used to mark RHF field as touched (onTouched validation). */
|
|
27
|
+
onBlur?: () => void;
|
|
26
28
|
/** Show reset select item button. */
|
|
27
29
|
disabled?: boolean;
|
|
28
30
|
/** Show reset select item button. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.types.d.ts","sourceRoot":"","sources":["../../src/Select/Select.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1E,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,WAAW,YAAY,CAAC,gBAAgB,GAAG,OAAO;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,QAAQ,CAAC,EAAE,YAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC;CAC7C;AAED,MAAM,MAAM,mBAAmB,CAAC,gBAAgB,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,eAAe,CAAC,EAAE,gBAAgB,EAAE,SAAS,KAAK,SAAS,CAAC;AAE5J,MAAM,MAAM,kBAAkB,CAAC,gBAAgB,IAAI,CACjD,MAAM,EAAE,YAAY,CAAC,gBAAgB,CAAC,EACtC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,YAAY,CAAC,gBAAgB,CAAC,EAAE,EACzC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,cAAc,CAAC,EAC1D,gBAAgB,EAAE,SAAS,KACxB,YAAY,CAAC;AAElB,MAAM,WAAW,WAAW,CAAC,gBAAgB;IAC3C,sBAAsB;IACtB,OAAO,EAAE,YAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC;IAC1C,6BAA6B;IAC7B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,gBAAgB,CAAC,EAAE,KAAK,YAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC;IAChG,4BAA4B;IAC5B,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,gBAAgB,CAAC,EAAE,KAAK,OAAO,CAAC;IAC7H,qBAAqB;IACrB,KAAK,CAAC,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC;IAChD,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACpE,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,aAAa,CAAC,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IACtD,4BAA4B;IAC5B,YAAY,CAAC,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IACpD,wBAAwB;IACxB,SAAS,CAAC,EAAE;QACV,mCAAmC;QACnC,YAAY,CAAC,EAAE,wBAAwB,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;QACxE,2BAA2B;QAC3B,WAAW,CAAC,EAAE,wBAAwB,CAAC,OAAO,aAAa,CAAC,CAAC;KAC9D,CAAC;CACH"}
|
|
1
|
+
{"version":3,"file":"Select.types.d.ts","sourceRoot":"","sources":["../../src/Select/Select.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1E,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,WAAW,YAAY,CAAC,gBAAgB,GAAG,OAAO;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,QAAQ,CAAC,EAAE,YAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC;CAC7C;AAED,MAAM,MAAM,mBAAmB,CAAC,gBAAgB,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,eAAe,CAAC,EAAE,gBAAgB,EAAE,SAAS,KAAK,SAAS,CAAC;AAE5J,MAAM,MAAM,kBAAkB,CAAC,gBAAgB,IAAI,CACjD,MAAM,EAAE,YAAY,CAAC,gBAAgB,CAAC,EACtC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,YAAY,CAAC,gBAAgB,CAAC,EAAE,EACzC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,cAAc,CAAC,EAC1D,gBAAgB,EAAE,SAAS,KACxB,YAAY,CAAC;AAElB,MAAM,WAAW,WAAW,CAAC,gBAAgB;IAC3C,sBAAsB;IACtB,OAAO,EAAE,YAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC;IAC1C,6BAA6B;IAC7B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,gBAAgB,CAAC,EAAE,KAAK,YAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC;IAChG,4BAA4B;IAC5B,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,gBAAgB,CAAC,EAAE,KAAK,OAAO,CAAC;IAC7H,qBAAqB;IACrB,KAAK,CAAC,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC;IAChD,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACpE,iGAAiG;IACjG,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,aAAa,CAAC,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IACtD,4BAA4B;IAC5B,YAAY,CAAC,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IACpD,wBAAwB;IACxB,SAAS,CAAC,EAAE;QACV,mCAAmC;QACnC,YAAY,CAAC,EAAE,wBAAwB,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;QACxE,2BAA2B;QAC3B,WAAW,CAAC,EAAE,wBAAwB,CAAC,OAAO,aAAa,CAAC,CAAC;KAC9D,CAAC;CACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../src/Textarea/Textarea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,QAAA,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../src/Textarea/Textarea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,QAAA,MAAM,QAAQ,wGA2Eb,CAAC;AAGF,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
package/Textarea/Textarea.js
CHANGED
|
@@ -1,63 +1,62 @@
|
|
|
1
1
|
import { jsxs as d, Fragment as v, jsx as A } from "react/jsx-runtime";
|
|
2
2
|
import * as w from "react";
|
|
3
3
|
import { useId as y, useRef as z, useState as F, useImperativeHandle as N, useEffect as T } from "react";
|
|
4
|
-
import { cn as
|
|
4
|
+
import { cn as m } from "@oneplatformdev/utils";
|
|
5
5
|
import { useAutosizeTextArea as C } from "./useAutosizeTextArea.js";
|
|
6
6
|
const R = w.forwardRef(
|
|
7
|
-
(
|
|
7
|
+
(f, c) => {
|
|
8
8
|
const {
|
|
9
9
|
className: g,
|
|
10
10
|
value: r = "",
|
|
11
11
|
maxHeight: a = Number.MAX_SAFE_INTEGER,
|
|
12
|
-
minHeight:
|
|
12
|
+
minHeight: i = 40,
|
|
13
13
|
resizeble: x = !1,
|
|
14
|
-
counter:
|
|
15
|
-
id:
|
|
14
|
+
counter: n = !0,
|
|
15
|
+
id: s = "",
|
|
16
16
|
onChange: p,
|
|
17
17
|
onTransform: l,
|
|
18
|
-
...
|
|
19
|
-
} =
|
|
18
|
+
...o
|
|
19
|
+
} = f, u = y(), t = z(null), [b, h] = F("");
|
|
20
20
|
return C({
|
|
21
21
|
textAreaRef: t,
|
|
22
22
|
triggerAutoSize: b,
|
|
23
23
|
maxHeight: a,
|
|
24
|
-
minHeight:
|
|
24
|
+
minHeight: i
|
|
25
25
|
}), N(c, () => ({
|
|
26
26
|
...t.current ?? {},
|
|
27
27
|
textArea: t.current,
|
|
28
28
|
focus: () => t?.current?.focus(),
|
|
29
29
|
maxHeight: a,
|
|
30
|
-
minHeight:
|
|
30
|
+
minHeight: i
|
|
31
31
|
})), T(() => {
|
|
32
32
|
h(r);
|
|
33
|
-
}, [
|
|
33
|
+
}, [o?.defaultValue, r]), /* @__PURE__ */ d(v, { children: [
|
|
34
34
|
/* @__PURE__ */ A(
|
|
35
35
|
"textarea",
|
|
36
36
|
{
|
|
37
|
-
id:
|
|
38
|
-
...
|
|
37
|
+
id: s || u,
|
|
38
|
+
...o,
|
|
39
39
|
ref: t,
|
|
40
40
|
value: r,
|
|
41
41
|
onChange: (e) => {
|
|
42
42
|
typeof l?.(e.target.value, e) == "string" && (e.target.value = l(e.target.value, e)), p?.(e);
|
|
43
43
|
},
|
|
44
|
-
className:
|
|
44
|
+
className: m(
|
|
45
45
|
"flex min-h-10 w-full px-3 py-2 text-base relative md:text-sm",
|
|
46
46
|
"rounded-lg border border-input bg-[#FCFCFC] shadow-none",
|
|
47
|
-
"aria-invalid:border-destructive aria-invalid:focus-visible:ring-destructive",
|
|
48
47
|
"placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
|
|
49
48
|
"focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring",
|
|
50
49
|
x ? "resize" : "resize-none overflow-hidden!",
|
|
51
|
-
|
|
50
|
+
n && "pb-1",
|
|
52
51
|
g
|
|
53
52
|
)
|
|
54
53
|
}
|
|
55
54
|
),
|
|
56
|
-
|
|
55
|
+
n && typeof o?.maxLength == "number" && /* @__PURE__ */ d(
|
|
57
56
|
"label",
|
|
58
57
|
{
|
|
59
|
-
htmlFor:
|
|
60
|
-
className:
|
|
58
|
+
htmlFor: s || u,
|
|
59
|
+
className: m(
|
|
61
60
|
"w-full text-right inline-flex items-center justify-end",
|
|
62
61
|
"text-xs font-medium leading-[1.2] text-muted-foreground",
|
|
63
62
|
"peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
|
|
@@ -65,7 +64,7 @@ const R = w.forwardRef(
|
|
|
65
64
|
children: [
|
|
66
65
|
String(r || "").length,
|
|
67
66
|
" / ",
|
|
68
|
-
|
|
67
|
+
o?.maxLength
|
|
69
68
|
]
|
|
70
69
|
}
|
|
71
70
|
)
|
package/Textarea/Textarea.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Textarea.js","sources":["../../src/Textarea/Textarea.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport { useEffect, useId, useImperativeHandle, useRef, useState } from 'react';\r\nimport { cn } from '@oneplatformdev/utils';\r\n\r\nimport { TextareaProps } from './Textarea.types';\r\nimport { useAutosizeTextArea } from './useAutosizeTextArea';\r\n\r\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\r\n (textareaProps, ref) => {\r\n const {\r\n className,\r\n value = '',\r\n maxHeight = Number.MAX_SAFE_INTEGER,\r\n minHeight = 40,\r\n resizeble = false,\r\n counter = true,\r\n id: customId = '',\r\n onChange,\r\n onTransform,\r\n ...props\r\n } = textareaProps;\r\n const id = useId();\r\n const textAreaRef = useRef<HTMLTextAreaElement | null>(null);\r\n const [triggerAutoSize, setTriggerAutoSize] = useState('');\r\n\r\n useAutosizeTextArea({\r\n textAreaRef,\r\n triggerAutoSize: triggerAutoSize,\r\n maxHeight,\r\n minHeight,\r\n });\r\n\r\n useImperativeHandle(ref, () => ({\r\n ...((textAreaRef.current ?? {}) as HTMLTextAreaElement),\r\n textArea: textAreaRef.current as HTMLTextAreaElement,\r\n focus: () => textAreaRef?.current?.focus(),\r\n maxHeight,\r\n minHeight,\r\n }));\r\n\r\n useEffect(() => {\r\n setTriggerAutoSize(value as string);\r\n }, [props?.defaultValue, value]);\r\n\r\n return (\r\n <>\r\n <textarea\r\n id={customId || id}\r\n {...props}\r\n ref={textAreaRef}\r\n value={value}\r\n onChange={(e) => {\r\n if (typeof onTransform?.(e.target.value, e) === 'string') {\r\n e.target.value = onTransform(e.target.value, e);\r\n }\r\n onChange?.(e);\r\n }}\r\n className={cn(\r\n 'flex min-h-10 w-full px-3 py-2 text-base relative md:text-sm',\r\n 'rounded-lg border border-input bg-[#FCFCFC] shadow-none',\r\n '
|
|
1
|
+
{"version":3,"file":"Textarea.js","sources":["../../src/Textarea/Textarea.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport { useEffect, useId, useImperativeHandle, useRef, useState } from 'react';\r\nimport { cn } from '@oneplatformdev/utils';\r\n\r\nimport { TextareaProps } from './Textarea.types';\r\nimport { useAutosizeTextArea } from './useAutosizeTextArea';\r\n\r\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\r\n (textareaProps, ref) => {\r\n const {\r\n className,\r\n value = '',\r\n maxHeight = Number.MAX_SAFE_INTEGER,\r\n minHeight = 40,\r\n resizeble = false,\r\n counter = true,\r\n id: customId = '',\r\n onChange,\r\n onTransform,\r\n ...props\r\n } = textareaProps;\r\n const id = useId();\r\n const textAreaRef = useRef<HTMLTextAreaElement | null>(null);\r\n const [triggerAutoSize, setTriggerAutoSize] = useState('');\r\n\r\n useAutosizeTextArea({\r\n textAreaRef,\r\n triggerAutoSize: triggerAutoSize,\r\n maxHeight,\r\n minHeight,\r\n });\r\n\r\n useImperativeHandle(ref, () => ({\r\n ...((textAreaRef.current ?? {}) as HTMLTextAreaElement),\r\n textArea: textAreaRef.current as HTMLTextAreaElement,\r\n focus: () => textAreaRef?.current?.focus(),\r\n maxHeight,\r\n minHeight,\r\n }));\r\n\r\n useEffect(() => {\r\n setTriggerAutoSize(value as string);\r\n }, [props?.defaultValue, value]);\r\n\r\n return (\r\n <>\r\n <textarea\r\n id={customId || id}\r\n {...props}\r\n ref={textAreaRef}\r\n value={value}\r\n onChange={(e) => {\r\n if (typeof onTransform?.(e.target.value, e) === 'string') {\r\n e.target.value = onTransform(e.target.value, e);\r\n }\r\n onChange?.(e);\r\n }}\r\n className={cn(\r\n 'flex min-h-10 w-full px-3 py-2 text-base relative md:text-sm',\r\n 'rounded-lg border border-input bg-[#FCFCFC] shadow-none',\r\n 'placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50',\r\n 'focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring',\r\n resizeble ? 'resize' : 'resize-none overflow-hidden!',\r\n counter && 'pb-1',\r\n className\r\n )}\r\n />\r\n {counter && typeof props?.maxLength === 'number' && (\r\n <label\r\n htmlFor={customId || id}\r\n className={cn(\r\n 'w-full text-right inline-flex items-center justify-end',\r\n 'text-xs font-medium leading-[1.2] text-muted-foreground',\r\n 'peer-disabled:cursor-not-allowed peer-disabled:opacity-70'\r\n )}\r\n >\r\n {String(value || '').length} / {props?.maxLength}\r\n </label>\r\n )}\r\n </>\r\n );\r\n }\r\n);\r\nTextarea.displayName = 'Textarea';\r\n\r\nexport { Textarea };\r\n"],"names":["Textarea","React","textareaProps","ref","className","value","maxHeight","minHeight","resizeble","counter","customId","onChange","onTransform","props","id","useId","textAreaRef","useRef","triggerAutoSize","setTriggerAutoSize","useState","useAutosizeTextArea","useImperativeHandle","useEffect","jsxs","Fragment","jsx","cn"],"mappings":";;;;;AAOA,MAAMA,IAAWC,EAAM;AAAA,EACrB,CAACC,GAAeC,MAAQ;AACtB,UAAM;AAAA,MACJ,WAAAC;AAAA,MACA,OAAAC,IAAQ;AAAA,MACR,WAAAC,IAAY,OAAO;AAAA,MACnB,WAAAC,IAAY;AAAA,MACZ,WAAAC,IAAY;AAAA,MACZ,SAAAC,IAAU;AAAA,MACV,IAAIC,IAAW;AAAA,MACf,UAAAC;AAAA,MACA,aAAAC;AAAA,MACA,GAAGC;AAAA,IAAA,IACDX,GACEY,IAAKC,EAAA,GACLC,IAAcC,EAAmC,IAAI,GACrD,CAACC,GAAiBC,CAAkB,IAAIC,EAAS,EAAE;AAEzD,WAAAC,EAAoB;AAAA,MAClB,aAAAL;AAAA,MACA,iBAAAE;AAAA,MACA,WAAAZ;AAAA,MACA,WAAAC;AAAA,IAAA,CACD,GAEDe,EAAoBnB,GAAK,OAAO;AAAA,MAC9B,GAAKa,EAAY,WAAW,CAAA;AAAA,MAC5B,UAAUA,EAAY;AAAA,MACtB,OAAO,MAAMA,GAAa,SAAS,MAAA;AAAA,MACnC,WAAAV;AAAA,MACA,WAAAC;AAAA,IAAA,EACA,GAEFgB,EAAU,MAAM;AACd,MAAAJ,EAAmBd,CAAe;AAAA,IACpC,GAAG,CAACQ,GAAO,cAAcR,CAAK,CAAC,GAG7B,gBAAAmB,EAAAC,GAAA,EACE,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAIhB,KAAYI;AAAA,UACf,GAAGD;AAAA,UACJ,KAAKG;AAAA,UACL,OAAAX;AAAA,UACA,UAAU,CAAC,MAAM;AACf,YAAI,OAAOO,IAAc,EAAE,OAAO,OAAO,CAAC,KAAM,aAC9C,EAAE,OAAO,QAAQA,EAAY,EAAE,OAAO,OAAO,CAAC,IAEhDD,IAAW,CAAC;AAAA,UACd;AAAA,UACA,WAAWgB;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACAnB,IAAY,WAAW;AAAA,YACvBC,KAAW;AAAA,YACXL;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,MAEDK,KAAW,OAAOI,GAAO,aAAc,YACtC,gBAAAW;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAASd,KAAYI;AAAA,UACrB,WAAWa;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,UAGD,UAAA;AAAA,YAAA,OAAOtB,KAAS,EAAE,EAAE;AAAA,YAAO;AAAA,YAAIQ,GAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACzC,GAEJ;AAAA,EAEJ;AACF;AACAb,EAAS,cAAc;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oneplatformdev/ui",
|
|
3
|
-
"version": "0.1.99-beta.
|
|
3
|
+
"version": "0.1.99-beta.302",
|
|
4
4
|
"description": "UI component library for OnePlatform",
|
|
5
5
|
"author": "One Platform Development Team",
|
|
6
6
|
"keywords": [
|
|
@@ -109,9 +109,9 @@
|
|
|
109
109
|
"recharts": "^3.2.0",
|
|
110
110
|
"sonner": "^2.0.7",
|
|
111
111
|
"vaul": "^1.1.2",
|
|
112
|
-
"@oneplatformdev/
|
|
113
|
-
"@oneplatformdev/
|
|
114
|
-
"@oneplatformdev/utils": "^0.1.99-beta.
|
|
112
|
+
"@oneplatformdev/hooks": "^0.1.99-beta.302",
|
|
113
|
+
"@oneplatformdev/tokens": "^0.1.99-beta.302",
|
|
114
|
+
"@oneplatformdev/utils": "^0.1.99-beta.302"
|
|
115
115
|
},
|
|
116
116
|
"scripts": {
|
|
117
117
|
"chromatic": "chromatic"
|