ics-ui-kit 0.1.0-alpha.16 → 0.1.0-alpha.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/SearchSelectTag-9aMVvXqp.js +95 -0
- package/dist/SearchSelectTag-9aMVvXqp.js.map +1 -0
- package/dist/components/search-select/index.d.ts +2 -0
- package/dist/components/search-select.js +352 -260
- package/dist/components/search-select.js.map +1 -1
- package/dist/components/tag-input.js +110 -186
- package/dist/components/tag-input.js.map +1 -1
- package/package.json +1 -1
- package/dist/useControllableState-B3ZaoXSG.js +0 -15
- package/dist/useControllableState-B3ZaoXSG.js.map +0 -1
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { useState as b, useCallback as h, useEffect as k, useMemo as S } from "react";
|
|
2
|
+
import { jsxs as g, jsx as i, Fragment as D } from "react/jsx-runtime";
|
|
3
|
+
import { d as I, a as T, c as w, b as y } from "./Tag-DRaLIx47.js";
|
|
4
|
+
import { u as C } from "./useBreakpoints-WE4xDTqs.js";
|
|
5
|
+
import { c as F } from "./index-CR-odn5-.js";
|
|
6
|
+
function K({ value: e, defaultValue: c, onChange: s }) {
|
|
7
|
+
const [o, l] = b(c), t = e !== void 0, u = t ? e : o, f = h(
|
|
8
|
+
(a) => {
|
|
9
|
+
const d = typeof a == "function" ? a(u) : a;
|
|
10
|
+
t || l(d), s == null || s(d);
|
|
11
|
+
},
|
|
12
|
+
[u, t, s]
|
|
13
|
+
);
|
|
14
|
+
return [u, f];
|
|
15
|
+
}
|
|
16
|
+
function L({
|
|
17
|
+
items: e,
|
|
18
|
+
onEnter: c,
|
|
19
|
+
onDelete: s,
|
|
20
|
+
cycleNavigation: o = !1
|
|
21
|
+
}) {
|
|
22
|
+
const [l, t] = b(null);
|
|
23
|
+
k(() => {
|
|
24
|
+
l !== null && e.length > 0 ? l >= e.length && t(e.length - 1) : e.length === 0 ? t(null) : l === null && e.length > 0 && t(0);
|
|
25
|
+
}, [e, l]);
|
|
26
|
+
const u = h(
|
|
27
|
+
(n) => {
|
|
28
|
+
if (e.length)
|
|
29
|
+
switch (n.key) {
|
|
30
|
+
case "ArrowLeft":
|
|
31
|
+
n.preventDefault(), t((r) => r === null ? 0 : r > 0 ? r - 1 : o ? e.length - 1 : r);
|
|
32
|
+
break;
|
|
33
|
+
case "ArrowRight":
|
|
34
|
+
n.preventDefault(), t((r) => r === null ? 0 : r < e.length - 1 ? r + 1 : o ? 0 : r);
|
|
35
|
+
break;
|
|
36
|
+
case "Home":
|
|
37
|
+
n.preventDefault(), t(0);
|
|
38
|
+
break;
|
|
39
|
+
case "End":
|
|
40
|
+
n.preventDefault(), t(e.length - 1);
|
|
41
|
+
break;
|
|
42
|
+
case "Enter":
|
|
43
|
+
l !== null && e[l] && c && (n.preventDefault(), c(e[l], l));
|
|
44
|
+
break;
|
|
45
|
+
case "Delete":
|
|
46
|
+
if (l !== null && e[l] && s) {
|
|
47
|
+
n.preventDefault();
|
|
48
|
+
const r = l;
|
|
49
|
+
s(e[l], l), r >= e.length - 1 && t(Math.max(0, e.length - 2));
|
|
50
|
+
}
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
[e, l, c, s, o]
|
|
55
|
+
), f = h(() => {
|
|
56
|
+
e.length && t(0);
|
|
57
|
+
}, [e]), a = h(() => {
|
|
58
|
+
t(null);
|
|
59
|
+
}, []), d = h((n) => l === n, [l]), p = h(
|
|
60
|
+
(n) => n >= 0 && n < e.length ? (t(n), !0) : !1,
|
|
61
|
+
[e.length]
|
|
62
|
+
);
|
|
63
|
+
return {
|
|
64
|
+
focusedIndex: l,
|
|
65
|
+
handleKeyDown: u,
|
|
66
|
+
handleFocus: f,
|
|
67
|
+
handleBlur: a,
|
|
68
|
+
isFocused: d,
|
|
69
|
+
focusItemAtIndex: p
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
const x = F({
|
|
73
|
+
base: "rounded-sm",
|
|
74
|
+
variants: {
|
|
75
|
+
selected: {
|
|
76
|
+
true: "group-focus-within/search-select-trigger:shadow-focus"
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}), M = (e) => {
|
|
80
|
+
const { children: c, onLabelClick: s, onClose: o, readonly: l = !1, isFocused: t = !1 } = e, u = !!o, f = C(), a = S(() => f ? "lg" : "md", [f]), d = x({ selected: t });
|
|
81
|
+
return /* @__PURE__ */ g(I, { size: a, className: d, children: [
|
|
82
|
+
/* @__PURE__ */ i(T, { position: u && !l ? "left" : void 0, size: a, onClick: s, asChild: !0, children: /* @__PURE__ */ i("span", { children: c }) }),
|
|
83
|
+
!l && /* @__PURE__ */ g(D, { children: [
|
|
84
|
+
/* @__PURE__ */ i(w, {}),
|
|
85
|
+
/* @__PURE__ */ i(y, { size: a, onClick: o, tag: "span" })
|
|
86
|
+
] })
|
|
87
|
+
] });
|
|
88
|
+
};
|
|
89
|
+
M.displayName = "SearchSelectTag";
|
|
90
|
+
export {
|
|
91
|
+
M as S,
|
|
92
|
+
L as a,
|
|
93
|
+
K as u
|
|
94
|
+
};
|
|
95
|
+
//# sourceMappingURL=SearchSelectTag-9aMVvXqp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchSelectTag-9aMVvXqp.js","sources":["../src/hooks/useControllableState.ts","../src/hooks/useItemsKeyboardNavigation.ts","../src/components/search-select/components/SearchSelectTag.tsx"],"sourcesContent":["import { useCallback, useState } from \"react\";\r\n\r\ntype UseControllableStateParams<T> = {\r\n\t/** Controlled значение */\r\n\tvalue?: T;\r\n\t/** Значение по умолчанию для uncontrolled режима */\r\n\tdefaultValue?: T;\r\n\t/** Callback при изменении значения */\r\n\tonChange?: (value: T) => void;\r\n};\r\n\r\n/**\r\n * Универсальный хук для управления controlled/uncontrolled состоянием.\r\n */\r\nexport function useControllableState<T>({ value, defaultValue, onChange }: UseControllableStateParams<T>) {\r\n\tconst [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);\r\n\r\n\tconst isControlled = value !== undefined;\r\n\tconst actualValue = isControlled ? value : uncontrolledValue;\r\n\r\n\tconst setValue = useCallback(\r\n\t\t(nextValue: T | ((prevValue: T) => T)) => {\r\n\t\t\tconst resolvedValue =\r\n\t\t\t\ttypeof nextValue === \"function\" ? (nextValue as (prevValue: T) => T)(actualValue as T) : nextValue;\r\n\r\n\t\t\tif (!isControlled) {\r\n\t\t\t\tsetUncontrolledValue(resolvedValue);\r\n\t\t\t}\r\n\r\n\t\t\tonChange?.(resolvedValue);\r\n\t\t},\r\n\t\t[actualValue, isControlled, onChange]\r\n\t);\r\n\r\n\treturn [actualValue, setValue] as const;\r\n}\r\n","import { useCallback, useState, KeyboardEvent, useEffect } from \"react\";\r\n\r\n/**\r\n * Хук для навигации по элементам с помощью клавиатуры\r\n *\r\n * @example\r\n * ```tsx\r\n * function TagList({ tags, onTagSelect, onTagDelete }) {\r\n * const containerRef = useRef(null);\r\n *\r\n * const {\r\n * focusedIndex,\r\n * handleKeyDown,\r\n * handleFocus,\r\n * handleBlur,\r\n * isFocused\r\n * } = useItemsKeyboardNavigation({\r\n * items: tags,\r\n * onEnter: onTagSelect,\r\n * onDelete: onTagDelete\r\n * });\r\n *\r\n * return (\r\n * <div\r\n * ref={containerRef}\r\n * tabIndex={0}\r\n * onKeyDown={handleKeyDown}\r\n * onFocus={handleFocus}\r\n * onBlur={handleBlur}\r\n * >\r\n * {tags.map((tag, index) => (\r\n * <div key={tag.id} className={isFocused(index) ? \"focused\" : \"\"}>\r\n * {tag.label}\r\n * </div>\r\n * ))}\r\n * </div>\r\n * );\r\n * }\r\n * ```\r\n */\r\nexport function useItemsKeyboardNavigation<T>({\r\n\titems,\r\n\tonEnter,\r\n\tonDelete,\r\n\tcycleNavigation = false\r\n}: {\r\n\t/** Массив элементов для навигации */\r\n\titems: T[];\r\n\t/** Функция, вызываемая при нажатии Enter на элементе */\r\n\tonEnter?: (item: T, index: number) => void;\r\n\t/** Функция, вызываемая при нажатии Delete/Backspace на элементе */\r\n\tonDelete?: (item: T, index: number) => void;\r\n\t/** Включает циклическую навигацию (с последнего элемента на первый и наоборот) */\r\n\tcycleNavigation?: boolean;\r\n}) {\r\n\t/** Индекс текущего элемента с фокусом */\r\n\tconst [focusedIndex, setFocusedIndex] = useState<number | null>(null);\r\n\r\n\t/**\r\n\t * Следим за изменениями в items и корректируем focusedIndex при необходимости\r\n\t */\r\n\tuseEffect(() => {\r\n\t\tif (focusedIndex !== null && items.length > 0) {\r\n\t\t\t// Если текущий индекс выходит за границы массива\r\n\t\t\tif (focusedIndex >= items.length) {\r\n\t\t\t\t// Устанавливаем индекс на последний элемент\r\n\t\t\t\tsetFocusedIndex(items.length - 1);\r\n\t\t\t}\r\n\t\t} else if (items.length === 0) {\r\n\t\t\t// Если элементов нет, сбрасываем фокус\r\n\t\t\tsetFocusedIndex(null);\r\n\t\t} else if (focusedIndex === null && items.length > 0) {\r\n\t\t\tsetFocusedIndex(0);\r\n\t\t}\r\n\t}, [items, focusedIndex]);\r\n\r\n\t/**\r\n\t * Обработчик нажатия клавиш для навигации по элементам\r\n\t */\r\n\tconst handleKeyDown = useCallback(\r\n\t\t(e: KeyboardEvent<HTMLElement>) => {\r\n\t\t\t// Проверяем, есть ли элементы для навигации\r\n\t\t\tif (!items.length) return;\r\n\r\n\t\t\tswitch (e.key) {\r\n\t\t\t\tcase \"ArrowLeft\":\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tsetFocusedIndex((prev) => {\r\n\t\t\t\t\t\tif (prev === null) return 0;\r\n\t\t\t\t\t\tif (prev > 0) return prev - 1;\r\n\t\t\t\t\t\treturn cycleNavigation ? items.length - 1 : prev;\r\n\t\t\t\t\t});\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"ArrowRight\":\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tsetFocusedIndex((prev) => {\r\n\t\t\t\t\t\tif (prev === null) return 0;\r\n\t\t\t\t\t\tif (prev < items.length - 1) return prev + 1;\r\n\t\t\t\t\t\treturn cycleNavigation ? 0 : prev;\r\n\t\t\t\t\t});\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"Home\":\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tsetFocusedIndex(0);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"End\":\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tsetFocusedIndex(items.length - 1);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"Enter\":\r\n\t\t\t\t\tif (focusedIndex !== null && items[focusedIndex] && onEnter) {\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tonEnter(items[focusedIndex], focusedIndex);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"Delete\":\r\n\t\t\t\t\tif (focusedIndex !== null && items[focusedIndex] && onDelete) {\r\n\t\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\t\t// Сохраняем текущий индекс перед удалением\r\n\t\t\t\t\t\tconst currentIndex = focusedIndex;\r\n\r\n\t\t\t\t\t\tonDelete(items[focusedIndex], focusedIndex);\r\n\r\n\t\t\t\t\t\t// Корректируем индекс после удаления\r\n\t\t\t\t\t\t// Это сработает корректно, если items обновится синхронно\r\n\t\t\t\t\t\t// В противном случае, корректировку нужно делать в эффекте\r\n\t\t\t\t\t\tif (currentIndex >= items.length - 1) {\r\n\t\t\t\t\t\t\tsetFocusedIndex(Math.max(0, items.length - 2));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t},\r\n\t\t[items, focusedIndex, onEnter, onDelete, cycleNavigation]\r\n\t);\r\n\r\n\t/**\r\n\t * Обработчик получения фокуса контейнером\r\n\t */\r\n\tconst handleFocus = useCallback(() => {\r\n\t\tif (items.length) {\r\n\t\t\tsetFocusedIndex(0);\r\n\t\t}\r\n\t}, [items]);\r\n\r\n\t/**\r\n\t * Обработчик потери фокуса контейнером\r\n\t */\r\n\tconst handleBlur = useCallback(() => {\r\n\t\tsetFocusedIndex(null);\r\n\t}, []);\r\n\r\n\t/**\r\n\t * Проверяет, находится ли элемент с указанным индексом в фокусе\r\n\t */\r\n\tconst isFocused = useCallback((index: number) => focusedIndex === index, [focusedIndex]);\r\n\r\n\t/**\r\n\t * Безопасно устанавливает фокус на элемент по индексу\r\n\t * @param index Индекс элемента для фокусировки\r\n\t * @returns Возвращает true, если индекс был установлен успешно\r\n\t */\r\n\tconst focusItemAtIndex = useCallback(\r\n\t\t(index: number) => {\r\n\t\t\tif (index >= 0 && index < items.length) {\r\n\t\t\t\tsetFocusedIndex(index);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t},\r\n\t\t[items.length]\r\n\t);\r\n\r\n\treturn {\r\n\t\tfocusedIndex,\r\n\t\thandleKeyDown,\r\n\t\thandleFocus,\r\n\t\thandleBlur,\r\n\t\tisFocused,\r\n\t\tfocusItemAtIndex\r\n\t};\r\n}\r\n","import { TagButton, TagClose, TagDivider, TagWrapper } from \"@/components/tag/Tag\";\r\nimport { useIsMobile } from \"@/hooks/useBreakpoints\";\r\nimport { PropsWithChildren, useMemo } from \"react\";\r\nimport { tv } from \"tailwind-variants\";\r\n\r\nconst searchSelectTagStyles = tv({\r\n\tbase: \"rounded-sm\",\r\n\tvariants: {\r\n\t\tselected: {\r\n\t\t\ttrue: \"group-focus-within/search-select-trigger:shadow-focus\"\r\n\t\t}\r\n\t}\r\n});\r\ninterface SearchSelectTagProps {\r\n\tonLabelClick: (e: React.MouseEvent<HTMLElement>) => void;\r\n\tonClose: (e: React.MouseEvent<HTMLElement>) => void;\r\n\treadonly?: boolean;\r\n\tisFocused?: boolean;\r\n}\r\n\r\nexport const SearchSelectTag = (props: PropsWithChildren<SearchSelectTagProps>) => {\r\n\tconst { children, onLabelClick, onClose, readonly = false, isFocused: selected = false } = props;\r\n\tconst hasClose = Boolean(onClose);\r\n\tconst isMobile = useIsMobile();\r\n\tconst size = useMemo(() => (isMobile ? \"lg\" : \"md\"), [isMobile]);\r\n\tconst styles = searchSelectTagStyles({ selected });\r\n\r\n\treturn (\r\n\t\t<TagWrapper size={size} className={styles}>\r\n\t\t\t<TagButton position={hasClose && !readonly ? \"left\" : undefined} size={size} onClick={onLabelClick} asChild>\r\n\t\t\t\t<span>{children}</span>\r\n\t\t\t</TagButton>\r\n\r\n\t\t\t{!readonly && (\r\n\t\t\t\t<>\r\n\t\t\t\t\t<TagDivider />\r\n\t\t\t\t\t<TagClose size={size} onClick={onClose} tag=\"span\" />\r\n\t\t\t\t</>\r\n\t\t\t)}\r\n\t\t</TagWrapper>\r\n\t);\r\n};\r\n\r\nSearchSelectTag.displayName = \"SearchSelectTag\";\r\n"],"names":["useControllableState","value","defaultValue","onChange","uncontrolledValue","setUncontrolledValue","useState","isControlled","actualValue","setValue","useCallback","nextValue","resolvedValue","useItemsKeyboardNavigation","items","onEnter","onDelete","cycleNavigation","focusedIndex","setFocusedIndex","useEffect","handleKeyDown","e","prev","currentIndex","handleFocus","handleBlur","isFocused","index","focusItemAtIndex","searchSelectTagStyles","tv","SearchSelectTag","props","children","onLabelClick","onClose","readonly","selected","hasClose","isMobile","useIsMobile","size","useMemo","styles","jsxs","TagWrapper","jsx","TagButton","Fragment","TagDivider","TagClose"],"mappings":"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"}
|
|
@@ -16,3 +16,5 @@ export { AsyncSearchSelect } from './async-search-select/AsyncSearchSelect';
|
|
|
16
16
|
export { AsyncSearchSelectContent } from './async-search-select/components/AsyncSearchSelectContent';
|
|
17
17
|
export type { AsyncSearchSelectProps, LoadOptionsParams, LoadOptionsResult } from './async-search-select/types';
|
|
18
18
|
export { useAsyncDataLoader } from './async-search-select/hooks/useAsyncDataLoader';
|
|
19
|
+
export { MultiSelect } from './multi-select/MultiSelect';
|
|
20
|
+
export type { MultiSelectProps } from './multi-select/MultiSelect';
|