ics-ui-kit 0.1.0-alpha.35 → 0.1.0-alpha.36
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/{Modal-9NNMBF-S.js → Modal-DWNmrjLy.js} +13 -13
- package/dist/Modal-DWNmrjLy.js.map +1 -0
- package/dist/{SearchSelectTag-DOHGWBGw.js → SearchSelectTag-Bkr3faVn.js} +2 -2
- package/dist/{SearchSelectTag-DOHGWBGw.js.map → SearchSelectTag-Bkr3faVn.js.map} +1 -1
- package/dist/{Tag-D3JqSOIw.js → Tag-CJpDh6a7.js} +34 -29
- package/dist/Tag-CJpDh6a7.js.map +1 -0
- package/dist/components/checkbox/index.d.ts +2 -2
- package/dist/components/color-tile/ColorTile.d.ts +9 -0
- package/dist/components/color-tile/ColorTile.stories.d.ts +6 -0
- package/dist/components/color-tile/index.d.ts +1 -0
- package/dist/components/color-tile.d.ts +2 -0
- package/dist/components/color-tile.js +26 -0
- package/dist/components/color-tile.js.map +1 -0
- package/dist/components/gallery.js +1 -1
- package/dist/components/modal.js +2 -2
- package/dist/components/search-select.js +1 -1
- package/dist/components/stepper/Stepper.d.ts +8 -0
- package/dist/components/stepper/Stepper.stories.d.ts +8 -0
- package/dist/components/stepper/StepperContext.d.ts +9 -0
- package/dist/components/stepper/components/stepper-description/StepperDescription.d.ts +1 -0
- package/dist/components/stepper/components/stepper-indicator/StepperIndicator.d.ts +4 -0
- package/dist/components/stepper/components/stepper-item/StepperItem.d.ts +7 -0
- package/dist/components/stepper/components/stepper-item/StepperItemContext.d.ts +11 -0
- package/dist/components/stepper/components/stepper-title/StepperTitle.d.ts +1 -0
- package/dist/components/stepper/components/stepper-trigger/StepperTrigger.d.ts +4 -0
- package/dist/components/stepper/index.d.ts +9 -0
- package/dist/components/stepper/stepper-separator/StepperSeparator.d.ts +1 -0
- package/dist/components/stepper.d.ts +2 -0
- package/dist/components/stepper.js +145 -0
- package/dist/components/stepper.js.map +1 -0
- package/dist/components/tag/Tag.d.ts +2 -0
- package/dist/components/tag/Tag.stories.d.ts +1 -0
- package/dist/components/tag-input.js +1 -1
- package/dist/components/tag.js +1 -1
- package/dist/styles-scoped.css +171 -0
- package/dist/styles.css +131 -0
- package/package.json +3 -1
- package/dist/Modal-9NNMBF-S.js.map +0 -1
- package/dist/Tag-D3JqSOIw.js.map +0 -1
|
@@ -14,14 +14,14 @@ const H = b;
|
|
|
14
14
|
H.displayName = "ModalTrigger";
|
|
15
15
|
const O = c;
|
|
16
16
|
O.displayName = "ModalPortal";
|
|
17
|
-
const X = l.forwardRef(({ className: a, ...o },
|
|
18
|
-
const
|
|
19
|
-
return /* @__PURE__ */ e(w, { ref:
|
|
17
|
+
const X = l.forwardRef(({ className: a, ...o }, t) => {
|
|
18
|
+
const s = z({ class: a });
|
|
19
|
+
return /* @__PURE__ */ e(w, { ref: t, className: s, ...o });
|
|
20
20
|
});
|
|
21
21
|
X.displayName = "ModalTitle";
|
|
22
|
-
const k = l.forwardRef(({ className: a, ...o },
|
|
23
|
-
const
|
|
24
|
-
return /* @__PURE__ */ e(h, { ref:
|
|
22
|
+
const k = l.forwardRef(({ className: a, ...o }, t) => {
|
|
23
|
+
const s = F({ class: a });
|
|
24
|
+
return /* @__PURE__ */ e(h, { ref: t, className: s, ...o });
|
|
25
25
|
});
|
|
26
26
|
k.displayName = "ModalDescription";
|
|
27
27
|
const q = C;
|
|
@@ -33,12 +33,12 @@ E.displayName = "ModalFooter";
|
|
|
33
33
|
const p = D;
|
|
34
34
|
p.displayName = "ModalClose";
|
|
35
35
|
const G = i({ extend: R }), f = l.forwardRef(
|
|
36
|
-
({ className: a, blur: o, type:
|
|
36
|
+
({ className: a, blur: o, type: t, ...s }, r) => /* @__PURE__ */ e(m, { ref: r, className: G({ class: a, blur: o, type: t }), ...s })
|
|
37
37
|
);
|
|
38
38
|
f.displayName = m.displayName;
|
|
39
39
|
const J = i({
|
|
40
40
|
base: [
|
|
41
|
-
"fixed left-[50%] top-[
|
|
41
|
+
"fixed left-[50%] top-[45%] z-50 max-h-[min(90vh,calc(100vh-44px))] w-full max-w-[min(480px,calc(100vw-32px))] translate-x-[-50%] translate-y-[-45%] lg:top-[35%] lg:max-h-[min(90vh,830px)] lg:max-w-[min(544px,calc(100vw-32px))] lg:translate-y-[-35%]",
|
|
42
42
|
"flex flex-col gap-0 overflow-hidden rounded-xl bg-secondary-bg p-0 shadow-lg",
|
|
43
43
|
"duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]"
|
|
44
44
|
],
|
|
@@ -48,8 +48,8 @@ const J = i({
|
|
|
48
48
|
}
|
|
49
49
|
}), K = l.forwardRef((a, o) => {
|
|
50
50
|
const {
|
|
51
|
-
className:
|
|
52
|
-
children:
|
|
51
|
+
className: t,
|
|
52
|
+
children: s,
|
|
53
53
|
overlayBlur: r,
|
|
54
54
|
overlayType: y,
|
|
55
55
|
showCloseButton: g = !0,
|
|
@@ -58,8 +58,8 @@ const J = i({
|
|
|
58
58
|
} = a, d = J(), x = S(M);
|
|
59
59
|
return /* @__PURE__ */ n(c, { container: x, children: [
|
|
60
60
|
/* @__PURE__ */ e(f, { blur: r, type: y }),
|
|
61
|
-
/* @__PURE__ */ n(N, { ref: o, className: d.base({ className:
|
|
62
|
-
|
|
61
|
+
/* @__PURE__ */ n(N, { ref: o, className: d.base({ className: t }), ...u, children: [
|
|
62
|
+
s,
|
|
63
63
|
g && /* @__PURE__ */ e(p, { className: d.closeButton(), children: /* @__PURE__ */ e(P, { className: d.closeIcon(), size: "lg", icon: I }) })
|
|
64
64
|
] })
|
|
65
65
|
] });
|
|
@@ -78,4 +78,4 @@ export {
|
|
|
78
78
|
O as i,
|
|
79
79
|
H as j
|
|
80
80
|
};
|
|
81
|
-
//# sourceMappingURL=Modal-
|
|
81
|
+
//# sourceMappingURL=Modal-DWNmrjLy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Modal-DWNmrjLy.js","sources":["../src/components/modal/Modal.tsx"],"sourcesContent":["import * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport * as React from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport { Dialog, DialogClose, DialogOverlay, DialogPortal, DialogTrigger } from \"../dialog/Dialog\";\nimport { FormBody } from \"../form/components/form-body/FormBody\";\nimport { FormFooter } from \"../form/components/form-footer/FormFooter\";\nimport { formDescriptionStyles, FormHeader, formTitleStyles } from \"../form/components/form-header/FormHeader\";\nimport { Icon } from \"../icon\";\nimport { overlayStyles, OverlayVariants } from \"../overlay/Overlay\";\nimport { usePortalContainer } from \"../portal-container\";\n\nconst Modal = Dialog;\nModal.displayName = \"Modal\";\n\nconst ModalTrigger = DialogTrigger;\nModalTrigger.displayName = \"ModalTrigger\";\n\nconst ModalPortal = DialogPortal;\nModalPortal.displayName = \"ModalPortal\";\n\nconst ModalTitle = React.forwardRef<\n\tReact.ElementRef<typeof DialogPrimitive.Title>,\n\tReact.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => {\n\tconst styles = formTitleStyles({ class: className });\n\treturn <DialogPrimitive.Title ref={ref} className={styles} {...props} />;\n});\nModalTitle.displayName = \"ModalTitle\";\n\nconst ModalDescription = React.forwardRef<\n\tReact.ElementRef<typeof DialogPrimitive.Description>,\n\tReact.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => {\n\tconst styles = formDescriptionStyles({ class: className });\n\treturn <DialogPrimitive.Description ref={ref} className={styles} {...props} />;\n});\nModalDescription.displayName = \"ModalDescription\";\n\nconst ModalHeader = FormHeader;\nModalHeader.displayName = \"ModalHeader\";\n\nconst ModalBody = FormBody;\nModalBody.displayName = \"ModalBody\";\n\nconst ModalFooter = FormFooter;\nModalFooter.displayName = \"ModalFooter\";\n\nconst ModalClose = DialogClose;\nModalClose.displayName = \"ModalClose\";\n\nconst modalOverlayStyles = tv({ extend: overlayStyles });\n\ninterface ModalOverlayProps extends React.ComponentPropsWithoutRef<typeof DialogOverlay>, OverlayVariants {}\n\nconst ModalOverlay = React.forwardRef<React.ElementRef<typeof DialogOverlay>, ModalOverlayProps>(\n\t({ className, blur, type, ...props }, ref) => (\n\t\t<DialogOverlay ref={ref} className={modalOverlayStyles({ class: className, blur, type })} {...props} />\n\t)\n);\nModalOverlay.displayName = DialogOverlay.displayName;\n\nconst modalContentStyles = tv({\n\tbase: [\n\t\t\"fixed left-[50%] top-[45%] z-50 max-h-[min(90vh,calc(100vh-44px))] w-full max-w-[min(480px,calc(100vw-32px))] translate-x-[-50%] translate-y-[-45%] lg:top-[35%] lg:max-h-[min(90vh,830px)] lg:max-w-[min(544px,calc(100vw-32px))] lg:translate-y-[-35%]\",\n\t\t\"flex flex-col gap-0 overflow-hidden rounded-xl bg-secondary-bg p-0 shadow-lg\",\n\t\t\"duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]\"\n\t],\n\tslots: {\n\t\tcloseButton: \"absolute right-0 z-50 h-11 w-11 p-3.5 text-muted lg:right-2 lg:top-2 lg:p-3\",\n\t\tcloseIcon: \"h-4 w-4 lg:h-5 lg:w-5\"\n\t}\n});\n\ntype BackgroundProps = OverlayVariants;\n\nconst ModalContent = React.forwardRef<\n\tReact.ElementRef<typeof DialogPrimitive.Content>,\n\tReact.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\n\t\toverlayBlur?: BackgroundProps[\"blur\"];\n\t\toverlayType?: BackgroundProps[\"type\"];\n\t\tshowCloseButton?: boolean;\n\t\t/**\n\t\t * Контейнер для портала. Если не указан, используется хук usePortalContainer\n\t\t * для поиска PortalContainer\n\t\t */\n\t\tportalContainer?: HTMLElement;\n\t}\n>((props, ref) => {\n\tconst {\n\t\tclassName,\n\t\tchildren,\n\t\toverlayBlur,\n\t\toverlayType,\n\t\tshowCloseButton = true,\n\t\tportalContainer,\n\t\t...restProps\n\t} = props;\n\tconst styles = modalContentStyles();\n\tconst container = usePortalContainer(portalContainer);\n\treturn (\n\t\t<DialogPortal container={container}>\n\t\t\t<ModalOverlay blur={overlayBlur} type={overlayType} />\n\t\t\t<DialogPrimitive.Content ref={ref} className={styles.base({ className })} {...restProps}>\n\t\t\t\t{children}\n\t\t\t\t{showCloseButton && (\n\t\t\t\t\t<ModalClose className={styles.closeButton()}>\n\t\t\t\t\t\t<Icon className={styles.closeIcon()} size=\"lg\" icon={X}></Icon>\n\t\t\t\t\t</ModalClose>\n\t\t\t\t)}\n\t\t\t</DialogPrimitive.Content>\n\t\t</DialogPortal>\n\t);\n});\nModalContent.displayName = \"ModalContent\";\n\nexport {\n\tModal,\n\tModalBody,\n\tModalClose,\n\tModalContent,\n\tModalDescription,\n\tModalFooter,\n\tModalHeader,\n\tModalOverlay,\n\tModalPortal,\n\tModalTitle,\n\tModalTrigger\n};\n"],"names":["Modal","Dialog","ModalTrigger","DialogTrigger","ModalPortal","DialogPortal","ModalTitle","React","className","props","ref","styles","formTitleStyles","jsx","DialogPrimitive.Title","ModalDescription","formDescriptionStyles","DialogPrimitive.Description","ModalHeader","FormHeader","ModalBody","FormBody","ModalFooter","FormFooter","ModalClose","DialogClose","modalOverlayStyles","tv","overlayStyles","ModalOverlay","blur","type","DialogOverlay","modalContentStyles","ModalContent","children","overlayBlur","overlayType","showCloseButton","portalContainer","restProps","container","usePortalContainer","jsxs","DialogPrimitive.Content","Icon","X"],"mappings":";;;;;;;;;;AAYA,MAAMA,IAAQC;AACdD,EAAM,cAAc;AAEpB,MAAME,IAAeC;AACrBD,EAAa,cAAc;AAE3B,MAAME,IAAcC;AACpBD,EAAY,cAAc;AAEpB,MAAAE,IAAaC,EAAM,WAGvB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAM,GAAGC,MAAQ;AACnC,QAAMC,IAASC,EAAgB,EAAE,OAAOJ,GAAW;AAC5C,SAAA,gBAAAK,EAACC,GAAA,EAAsB,KAAAJ,GAAU,WAAWC,GAAS,GAAGF,GAAO;AACvE,CAAC;AACDH,EAAW,cAAc;AAEnB,MAAAS,IAAmBR,EAAM,WAG7B,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAM,GAAGC,MAAQ;AACnC,QAAMC,IAASK,EAAsB,EAAE,OAAOR,GAAW;AAClD,SAAA,gBAAAK,EAACI,GAAA,EAA4B,KAAAP,GAAU,WAAWC,GAAS,GAAGF,GAAO;AAC7E,CAAC;AACDM,EAAiB,cAAc;AAE/B,MAAMG,IAAcC;AACpBD,EAAY,cAAc;AAE1B,MAAME,IAAYC;AAClBD,EAAU,cAAc;AAExB,MAAME,IAAcC;AACpBD,EAAY,cAAc;AAE1B,MAAME,IAAaC;AACnBD,EAAW,cAAc;AAEzB,MAAME,IAAqBC,EAAG,EAAE,QAAQC,GAAe,GAIjDC,IAAetB,EAAM;AAAA,EAC1B,CAAC,EAAE,WAAAC,GAAW,MAAAsB,GAAM,MAAAC,GAAM,GAAGtB,KAASC,MACpC,gBAAAG,EAAAmB,GAAA,EAAc,KAAAtB,GAAU,WAAWgB,EAAmB,EAAE,OAAOlB,GAAW,MAAAsB,GAAM,MAAAC,EAAK,CAAC,GAAI,GAAGtB,EAAO,CAAA;AAEvG;AACAoB,EAAa,cAAcG,EAAc;AAEzC,MAAMC,IAAqBN,EAAG;AAAA,EAC7B,MAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,OAAO;AAAA,IACN,aAAa;AAAA,IACb,WAAW;AAAA,EAAA;AAEb,CAAC,GAIKO,IAAe3B,EAAM,WAYzB,CAACE,GAAOC,MAAQ;AACX,QAAA;AAAA,IACL,WAAAF;AAAA,IACA,UAAA2B;AAAA,IACA,aAAAC;AAAA,IACA,aAAAC;AAAA,IACA,iBAAAC,IAAkB;AAAA,IAClB,iBAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,IACA/B,GACEE,IAASsB,EAAmB,GAC5BQ,IAAYC,EAAmBH,CAAe;AAEnD,SAAA,gBAAAI,EAACtC,KAAa,WAAAoC,GACb,UAAA;AAAA,IAAA,gBAAA5B,EAACgB,GAAa,EAAA,MAAMO,GAAa,MAAMC,GAAa;AAAA,IACnD,gBAAAM,EAAAC,GAAA,EAAwB,KAAAlC,GAAU,WAAWC,EAAO,KAAK,EAAE,WAAAH,EAAW,CAAA,GAAI,GAAGgC,GAC5E,UAAA;AAAA,MAAAL;AAAA,MACAG,KACC,gBAAAzB,EAAAW,GAAA,EAAW,WAAWb,EAAO,eAC7B,UAAA,gBAAAE,EAACgC,GAAK,EAAA,WAAWlC,EAAO,UAAU,GAAG,MAAK,MAAK,MAAMmC,GAAG,EACzD,CAAA;AAAA,IAAA,EAEF,CAAA;AAAA,EAAA,GACD;AAEF,CAAC;AACDZ,EAAa,cAAc;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useState as b, useCallback as h, useEffect as k, useMemo as C } from "react";
|
|
2
2
|
import { jsxs as g, jsx as i, Fragment as S } from "react/jsx-runtime";
|
|
3
|
-
import { d as T, a as D, c as I, b as w } from "./Tag-
|
|
3
|
+
import { d as T, a as D, c as I, b as w } from "./Tag-CJpDh6a7.js";
|
|
4
4
|
import { u as y } from "./useBreakpoints-wEcfJPHd.js";
|
|
5
5
|
import { T as F } from "./index-BVqs-uqP.js";
|
|
6
6
|
function K({ value: e, defaultValue: u, onChange: s }) {
|
|
@@ -92,4 +92,4 @@ export {
|
|
|
92
92
|
L as a,
|
|
93
93
|
K as u
|
|
94
94
|
};
|
|
95
|
-
//# sourceMappingURL=SearchSelectTag-
|
|
95
|
+
//# sourceMappingURL=SearchSelectTag-Bkr3faVn.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchSelectTag-DOHGWBGw.js","sources":["../src/hooks/useControllableState.ts","../src/hooks/useItemsKeyboardNavigation.ts","../src/components/search-select/components/SearchSelectTag.tsx"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\ntype UseControllableStateParams<T> = {\n\t/** Controlled значение */\n\tvalue?: T;\n\t/** Значение по умолчанию для uncontrolled режима */\n\tdefaultValue?: T;\n\t/** Callback при изменении значения */\n\tonChange?: (value: T) => void;\n};\n\n/**\n * Универсальный хук для управления controlled/uncontrolled состоянием.\n */\nexport function useControllableState<T>({ value, defaultValue, onChange }: UseControllableStateParams<T>) {\n\tconst [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);\n\n\tconst isControlled = value !== undefined;\n\tconst actualValue = isControlled ? value : uncontrolledValue;\n\n\tconst setValue = useCallback(\n\t\t(nextValue: T | ((prevValue: T) => T)) => {\n\t\t\tconst resolvedValue =\n\t\t\t\ttypeof nextValue === \"function\" ? (nextValue as (prevValue: T) => T)(actualValue as T) : nextValue;\n\n\t\t\tif (!isControlled) {\n\t\t\t\tsetUncontrolledValue(resolvedValue);\n\t\t\t}\n\n\t\t\tonChange?.(resolvedValue);\n\t\t},\n\t\t[actualValue, isControlled, onChange]\n\t);\n\n\treturn [actualValue, setValue] as const;\n}\n","import { useCallback, useState, KeyboardEvent, useEffect } from \"react\";\n\n/**\n * Хук для навигации по элементам с помощью клавиатуры\n *\n * @example\n * ```tsx\n * function TagList({ tags, onTagSelect, onTagDelete }) {\n * const containerRef = useRef(null);\n *\n * const {\n * focusedIndex,\n * handleKeyDown,\n * handleFocus,\n * handleBlur,\n * isFocused\n * } = useItemsKeyboardNavigation({\n * items: tags,\n * onEnter: onTagSelect,\n * onDelete: onTagDelete\n * });\n *\n * return (\n * <div\n * ref={containerRef}\n * tabIndex={0}\n * onKeyDown={handleKeyDown}\n * onFocus={handleFocus}\n * onBlur={handleBlur}\n * >\n * {tags.map((tag, index) => (\n * <div key={tag.id} className={isFocused(index) ? \"focused\" : \"\"}>\n * {tag.label}\n * </div>\n * ))}\n * </div>\n * );\n * }\n * ```\n */\nexport function useItemsKeyboardNavigation<T>({\n\titems,\n\tonEnter,\n\tonDelete,\n\tcycleNavigation = false\n}: {\n\t/** Массив элементов для навигации */\n\titems: T[];\n\t/** Функция, вызываемая при нажатии Enter на элементе */\n\tonEnter?: (item: T, index: number) => void;\n\t/** Функция, вызываемая при нажатии Delete/Backspace на элементе */\n\tonDelete?: (item: T, index: number) => void;\n\t/** Включает циклическую навигацию (с последнего элемента на первый и наоборот) */\n\tcycleNavigation?: boolean;\n}) {\n\t/** Индекс текущего элемента с фокусом */\n\tconst [focusedIndex, setFocusedIndex] = useState<number | null>(null);\n\n\t/**\n\t * Следим за изменениями в items и корректируем focusedIndex при необходимости\n\t */\n\tuseEffect(() => {\n\t\tif (focusedIndex !== null && items.length > 0) {\n\t\t\t// Если текущий индекс выходит за границы массива\n\t\t\tif (focusedIndex >= items.length) {\n\t\t\t\t// Устанавливаем индекс на последний элемент\n\t\t\t\tsetFocusedIndex(items.length - 1);\n\t\t\t}\n\t\t} else if (items.length === 0) {\n\t\t\t// Если элементов нет, сбрасываем фокус\n\t\t\tsetFocusedIndex(null);\n\t\t} else if (focusedIndex === null && items.length > 0) {\n\t\t\tsetFocusedIndex(0);\n\t\t}\n\t}, [items, focusedIndex]);\n\n\t/**\n\t * Обработчик нажатия клавиш для навигации по элементам\n\t */\n\tconst handleKeyDown = useCallback(\n\t\t(e: KeyboardEvent<HTMLElement>) => {\n\t\t\t// Проверяем, есть ли элементы для навигации\n\t\t\tif (!items.length) return;\n\n\t\t\tswitch (e.key) {\n\t\t\t\tcase \"ArrowLeft\":\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetFocusedIndex((prev) => {\n\t\t\t\t\t\tif (prev === null) return 0;\n\t\t\t\t\t\tif (prev > 0) return prev - 1;\n\t\t\t\t\t\treturn cycleNavigation ? items.length - 1 : prev;\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"ArrowRight\":\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetFocusedIndex((prev) => {\n\t\t\t\t\t\tif (prev === null) return 0;\n\t\t\t\t\t\tif (prev < items.length - 1) return prev + 1;\n\t\t\t\t\t\treturn cycleNavigation ? 0 : prev;\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"Home\":\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetFocusedIndex(0);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"End\":\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetFocusedIndex(items.length - 1);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"Enter\":\n\t\t\t\t\tif (focusedIndex !== null && items[focusedIndex] && onEnter) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tonEnter(items[focusedIndex], focusedIndex);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"Delete\":\n\t\t\t\t\tif (focusedIndex !== null && items[focusedIndex] && onDelete) {\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\t// Сохраняем текущий индекс перед удалением\n\t\t\t\t\t\tconst currentIndex = focusedIndex;\n\n\t\t\t\t\t\tonDelete(items[focusedIndex], focusedIndex);\n\n\t\t\t\t\t\t// Корректируем индекс после удаления\n\t\t\t\t\t\t// Это сработает корректно, если items обновится синхронно\n\t\t\t\t\t\t// В противном случае, корректировку нужно делать в эффекте\n\t\t\t\t\t\tif (currentIndex >= items.length - 1) {\n\t\t\t\t\t\t\tsetFocusedIndex(Math.max(0, items.length - 2));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\t[items, focusedIndex, onEnter, onDelete, cycleNavigation]\n\t);\n\n\t/**\n\t * Обработчик получения фокуса контейнером\n\t */\n\tconst handleFocus = useCallback(() => {\n\t\tif (items.length) {\n\t\t\tsetFocusedIndex(0);\n\t\t}\n\t}, [items]);\n\n\t/**\n\t * Обработчик потери фокуса контейнером\n\t */\n\tconst handleBlur = useCallback(() => {\n\t\tsetFocusedIndex(null);\n\t}, []);\n\n\t/**\n\t * Проверяет, находится ли элемент с указанным индексом в фокусе\n\t */\n\tconst isFocused = useCallback((index: number) => focusedIndex === index, [focusedIndex]);\n\n\t/**\n\t * Безопасно устанавливает фокус на элемент по индексу\n\t * @param index Индекс элемента для фокусировки\n\t * @returns Возвращает true, если индекс был установлен успешно\n\t */\n\tconst focusItemAtIndex = useCallback(\n\t\t(index: number) => {\n\t\t\tif (index >= 0 && index < items.length) {\n\t\t\t\tsetFocusedIndex(index);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\t[items.length]\n\t);\n\n\treturn {\n\t\tfocusedIndex,\n\t\thandleKeyDown,\n\t\thandleFocus,\n\t\thandleBlur,\n\t\tisFocused,\n\t\tfocusItemAtIndex\n\t};\n}\n","import { TagButton, TagClose, TagDivider, TagWrapper } from \"@/components/tag/Tag\";\nimport { useIsMobile } from \"@/hooks/useBreakpoints\";\nimport { PropsWithChildren, useMemo } from \"react\";\nimport { tv } from \"tailwind-variants\";\n\nconst searchSelectTagStyles = tv({\n\tbase: \"rounded-sm\",\n\tvariants: {\n\t\tselected: {\n\t\t\ttrue: \"group-focus-within/search-select-trigger:shadow-focus\"\n\t\t}\n\t}\n});\ninterface SearchSelectTagProps {\n\tonLabelClick: (e: React.MouseEvent<HTMLElement>) => void;\n\tonClose: (e: React.MouseEvent<HTMLElement>) => void;\n\treadonly?: boolean;\n\tisFocused?: boolean;\n}\n\nexport const SearchSelectTag = (props: PropsWithChildren<SearchSelectTagProps>) => {\n\tconst { children, onLabelClick, onClose, readonly = false, isFocused: selected = false } = props;\n\tconst hasClose = Boolean(onClose);\n\tconst isMobile = useIsMobile();\n\tconst size = useMemo(() => (isMobile ? \"lg\" : \"md\"), [isMobile]);\n\tconst styles = searchSelectTagStyles({ selected });\n\n\treturn (\n\t\t<TagWrapper size={size} className={styles}>\n\t\t\t<TagButton position={hasClose && !readonly ? \"left\" : undefined} size={size} onClick={onLabelClick} asChild>\n\t\t\t\t<span>{children}</span>\n\t\t\t</TagButton>\n\n\t\t\t{!readonly && (\n\t\t\t\t<>\n\t\t\t\t\t<TagDivider />\n\t\t\t\t\t<TagClose size={size} onClick={onClose} tag=\"span\" />\n\t\t\t\t</>\n\t\t\t)}\n\t\t</TagWrapper>\n\t);\n};\n\nSearchSelectTag.displayName = \"SearchSelectTag\";\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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"}
|
|
1
|
+
{"version":3,"file":"SearchSelectTag-Bkr3faVn.js","sources":["../src/hooks/useControllableState.ts","../src/hooks/useItemsKeyboardNavigation.ts","../src/components/search-select/components/SearchSelectTag.tsx"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\ntype UseControllableStateParams<T> = {\n\t/** Controlled значение */\n\tvalue?: T;\n\t/** Значение по умолчанию для uncontrolled режима */\n\tdefaultValue?: T;\n\t/** Callback при изменении значения */\n\tonChange?: (value: T) => void;\n};\n\n/**\n * Универсальный хук для управления controlled/uncontrolled состоянием.\n */\nexport function useControllableState<T>({ value, defaultValue, onChange }: UseControllableStateParams<T>) {\n\tconst [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);\n\n\tconst isControlled = value !== undefined;\n\tconst actualValue = isControlled ? value : uncontrolledValue;\n\n\tconst setValue = useCallback(\n\t\t(nextValue: T | ((prevValue: T) => T)) => {\n\t\t\tconst resolvedValue =\n\t\t\t\ttypeof nextValue === \"function\" ? (nextValue as (prevValue: T) => T)(actualValue as T) : nextValue;\n\n\t\t\tif (!isControlled) {\n\t\t\t\tsetUncontrolledValue(resolvedValue);\n\t\t\t}\n\n\t\t\tonChange?.(resolvedValue);\n\t\t},\n\t\t[actualValue, isControlled, onChange]\n\t);\n\n\treturn [actualValue, setValue] as const;\n}\n","import { useCallback, useState, KeyboardEvent, useEffect } from \"react\";\n\n/**\n * Хук для навигации по элементам с помощью клавиатуры\n *\n * @example\n * ```tsx\n * function TagList({ tags, onTagSelect, onTagDelete }) {\n * const containerRef = useRef(null);\n *\n * const {\n * focusedIndex,\n * handleKeyDown,\n * handleFocus,\n * handleBlur,\n * isFocused\n * } = useItemsKeyboardNavigation({\n * items: tags,\n * onEnter: onTagSelect,\n * onDelete: onTagDelete\n * });\n *\n * return (\n * <div\n * ref={containerRef}\n * tabIndex={0}\n * onKeyDown={handleKeyDown}\n * onFocus={handleFocus}\n * onBlur={handleBlur}\n * >\n * {tags.map((tag, index) => (\n * <div key={tag.id} className={isFocused(index) ? \"focused\" : \"\"}>\n * {tag.label}\n * </div>\n * ))}\n * </div>\n * );\n * }\n * ```\n */\nexport function useItemsKeyboardNavigation<T>({\n\titems,\n\tonEnter,\n\tonDelete,\n\tcycleNavigation = false\n}: {\n\t/** Массив элементов для навигации */\n\titems: T[];\n\t/** Функция, вызываемая при нажатии Enter на элементе */\n\tonEnter?: (item: T, index: number) => void;\n\t/** Функция, вызываемая при нажатии Delete/Backspace на элементе */\n\tonDelete?: (item: T, index: number) => void;\n\t/** Включает циклическую навигацию (с последнего элемента на первый и наоборот) */\n\tcycleNavigation?: boolean;\n}) {\n\t/** Индекс текущего элемента с фокусом */\n\tconst [focusedIndex, setFocusedIndex] = useState<number | null>(null);\n\n\t/**\n\t * Следим за изменениями в items и корректируем focusedIndex при необходимости\n\t */\n\tuseEffect(() => {\n\t\tif (focusedIndex !== null && items.length > 0) {\n\t\t\t// Если текущий индекс выходит за границы массива\n\t\t\tif (focusedIndex >= items.length) {\n\t\t\t\t// Устанавливаем индекс на последний элемент\n\t\t\t\tsetFocusedIndex(items.length - 1);\n\t\t\t}\n\t\t} else if (items.length === 0) {\n\t\t\t// Если элементов нет, сбрасываем фокус\n\t\t\tsetFocusedIndex(null);\n\t\t} else if (focusedIndex === null && items.length > 0) {\n\t\t\tsetFocusedIndex(0);\n\t\t}\n\t}, [items, focusedIndex]);\n\n\t/**\n\t * Обработчик нажатия клавиш для навигации по элементам\n\t */\n\tconst handleKeyDown = useCallback(\n\t\t(e: KeyboardEvent<HTMLElement>) => {\n\t\t\t// Проверяем, есть ли элементы для навигации\n\t\t\tif (!items.length) return;\n\n\t\t\tswitch (e.key) {\n\t\t\t\tcase \"ArrowLeft\":\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetFocusedIndex((prev) => {\n\t\t\t\t\t\tif (prev === null) return 0;\n\t\t\t\t\t\tif (prev > 0) return prev - 1;\n\t\t\t\t\t\treturn cycleNavigation ? items.length - 1 : prev;\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"ArrowRight\":\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetFocusedIndex((prev) => {\n\t\t\t\t\t\tif (prev === null) return 0;\n\t\t\t\t\t\tif (prev < items.length - 1) return prev + 1;\n\t\t\t\t\t\treturn cycleNavigation ? 0 : prev;\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"Home\":\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetFocusedIndex(0);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"End\":\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetFocusedIndex(items.length - 1);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"Enter\":\n\t\t\t\t\tif (focusedIndex !== null && items[focusedIndex] && onEnter) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tonEnter(items[focusedIndex], focusedIndex);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"Delete\":\n\t\t\t\t\tif (focusedIndex !== null && items[focusedIndex] && onDelete) {\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\t// Сохраняем текущий индекс перед удалением\n\t\t\t\t\t\tconst currentIndex = focusedIndex;\n\n\t\t\t\t\t\tonDelete(items[focusedIndex], focusedIndex);\n\n\t\t\t\t\t\t// Корректируем индекс после удаления\n\t\t\t\t\t\t// Это сработает корректно, если items обновится синхронно\n\t\t\t\t\t\t// В противном случае, корректировку нужно делать в эффекте\n\t\t\t\t\t\tif (currentIndex >= items.length - 1) {\n\t\t\t\t\t\t\tsetFocusedIndex(Math.max(0, items.length - 2));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\t[items, focusedIndex, onEnter, onDelete, cycleNavigation]\n\t);\n\n\t/**\n\t * Обработчик получения фокуса контейнером\n\t */\n\tconst handleFocus = useCallback(() => {\n\t\tif (items.length) {\n\t\t\tsetFocusedIndex(0);\n\t\t}\n\t}, [items]);\n\n\t/**\n\t * Обработчик потери фокуса контейнером\n\t */\n\tconst handleBlur = useCallback(() => {\n\t\tsetFocusedIndex(null);\n\t}, []);\n\n\t/**\n\t * Проверяет, находится ли элемент с указанным индексом в фокусе\n\t */\n\tconst isFocused = useCallback((index: number) => focusedIndex === index, [focusedIndex]);\n\n\t/**\n\t * Безопасно устанавливает фокус на элемент по индексу\n\t * @param index Индекс элемента для фокусировки\n\t * @returns Возвращает true, если индекс был установлен успешно\n\t */\n\tconst focusItemAtIndex = useCallback(\n\t\t(index: number) => {\n\t\t\tif (index >= 0 && index < items.length) {\n\t\t\t\tsetFocusedIndex(index);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\t[items.length]\n\t);\n\n\treturn {\n\t\tfocusedIndex,\n\t\thandleKeyDown,\n\t\thandleFocus,\n\t\thandleBlur,\n\t\tisFocused,\n\t\tfocusItemAtIndex\n\t};\n}\n","import { TagButton, TagClose, TagDivider, TagWrapper } from \"@/components/tag/Tag\";\nimport { useIsMobile } from \"@/hooks/useBreakpoints\";\nimport { PropsWithChildren, useMemo } from \"react\";\nimport { tv } from \"tailwind-variants\";\n\nconst searchSelectTagStyles = tv({\n\tbase: \"rounded-sm\",\n\tvariants: {\n\t\tselected: {\n\t\t\ttrue: \"group-focus-within/search-select-trigger:shadow-focus\"\n\t\t}\n\t}\n});\ninterface SearchSelectTagProps {\n\tonLabelClick: (e: React.MouseEvent<HTMLElement>) => void;\n\tonClose: (e: React.MouseEvent<HTMLElement>) => void;\n\treadonly?: boolean;\n\tisFocused?: boolean;\n}\n\nexport const SearchSelectTag = (props: PropsWithChildren<SearchSelectTagProps>) => {\n\tconst { children, onLabelClick, onClose, readonly = false, isFocused: selected = false } = props;\n\tconst hasClose = Boolean(onClose);\n\tconst isMobile = useIsMobile();\n\tconst size = useMemo(() => (isMobile ? \"lg\" : \"md\"), [isMobile]);\n\tconst styles = searchSelectTagStyles({ selected });\n\n\treturn (\n\t\t<TagWrapper size={size} className={styles}>\n\t\t\t<TagButton position={hasClose && !readonly ? \"left\" : undefined} size={size} onClick={onLabelClick} asChild>\n\t\t\t\t<span>{children}</span>\n\t\t\t</TagButton>\n\n\t\t\t{!readonly && (\n\t\t\t\t<>\n\t\t\t\t\t<TagDivider />\n\t\t\t\t\t<TagClose size={size} onClick={onClose} tag=\"span\" />\n\t\t\t\t</>\n\t\t\t)}\n\t\t</TagWrapper>\n\t);\n};\n\nSearchSelectTag.displayName = \"SearchSelectTag\";\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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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { jsx as r, jsxs as l, Fragment as
|
|
1
|
+
import { jsx as r, jsxs as l, Fragment as C } from "react/jsx-runtime";
|
|
2
2
|
import { T as c } from "./index-BVqs-uqP.js";
|
|
3
3
|
import { S as h } from "./index-5Bhkapwi.js";
|
|
4
|
-
import { D as
|
|
5
|
-
import { I
|
|
6
|
-
import { X as
|
|
4
|
+
import { D as z } from "./Divider-Dm2gjy8W.js";
|
|
5
|
+
import { I } from "./Icon-DH3ev9GK.js";
|
|
6
|
+
import { X as S } from "./x-tDTt7hTQ.js";
|
|
7
7
|
const g = c({
|
|
8
8
|
base: "inline-flex items-center justify-center overflow-hidden font-medium leading-none transition-colors",
|
|
9
9
|
variants: {
|
|
@@ -61,11 +61,11 @@ const g = c({
|
|
|
61
61
|
class: "border-transparent bg-status-error hover:bg-status-error-hover"
|
|
62
62
|
}
|
|
63
63
|
]
|
|
64
|
-
}),
|
|
65
|
-
|
|
66
|
-
const
|
|
64
|
+
}), B = ({ asChild: e = !1, children: t, ...s }) => /* @__PURE__ */ r(e ? h : "span", { className: g(s), ...s, children: t });
|
|
65
|
+
B.displayName = "TagBase";
|
|
66
|
+
const k = c({
|
|
67
67
|
extend: g,
|
|
68
|
-
base: "flex cursor-pointer items-center justify-center rounded-sm border focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary",
|
|
68
|
+
base: "flex cursor-pointer items-center justify-center whitespace-nowrap rounded-sm border focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary",
|
|
69
69
|
variants: {
|
|
70
70
|
size: {
|
|
71
71
|
sm: "gap-1",
|
|
@@ -87,11 +87,11 @@ const I = c({
|
|
|
87
87
|
position: "standalone"
|
|
88
88
|
}
|
|
89
89
|
}), f = (e) => {
|
|
90
|
-
const { asChild: t = !1, children: s, className: o, ...n } = e, a = t ? h : "button", i =
|
|
90
|
+
const { asChild: t = !1, children: s, className: o, ...n } = e, a = t ? h : "button", i = k({ className: o, ...n });
|
|
91
91
|
return /* @__PURE__ */ r(a, { className: i, ...n, children: s });
|
|
92
92
|
};
|
|
93
93
|
f.displayName = "TagButton";
|
|
94
|
-
const
|
|
94
|
+
const D = c({
|
|
95
95
|
extend: g,
|
|
96
96
|
base: "aspect-square cursor-pointer rounded-l-none rounded-r-sm border border-l-0 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary",
|
|
97
97
|
variants: {
|
|
@@ -115,11 +115,11 @@ const S = c({
|
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
}), p = (e) => {
|
|
118
|
-
const { icon: t =
|
|
119
|
-
return /* @__PURE__ */ r(o, { type: "button", className: i, "aria-label": "Удалить", size: s, ...a, children: /* @__PURE__ */ r(
|
|
118
|
+
const { icon: t = S, size: s, tag: o = "button", className: n, ...a } = e, i = D({ className: n, size: s, ...a });
|
|
119
|
+
return /* @__PURE__ */ r(o, { type: "button", className: i, "aria-label": "Удалить", size: s, ...a, children: /* @__PURE__ */ r(I, { icon: t, className: d({ size: s }) }) });
|
|
120
120
|
};
|
|
121
121
|
p.displayName = "TagClose";
|
|
122
|
-
const
|
|
122
|
+
const j = c({
|
|
123
123
|
base: "",
|
|
124
124
|
variants: {
|
|
125
125
|
status: {
|
|
@@ -135,10 +135,10 @@ const B = c({
|
|
|
135
135
|
}
|
|
136
136
|
}), v = (e) => {
|
|
137
137
|
const { status: t, ...s } = e;
|
|
138
|
-
return /* @__PURE__ */ r(
|
|
138
|
+
return /* @__PURE__ */ r(z, { orientation: "vertical", className: j({ status: t }), ...s });
|
|
139
139
|
};
|
|
140
140
|
v.displayName = "TagDivider";
|
|
141
|
-
const
|
|
141
|
+
const V = c({
|
|
142
142
|
base: "inline-flex items-center rounded-sm",
|
|
143
143
|
variants: {
|
|
144
144
|
size: {
|
|
@@ -147,10 +147,10 @@ const k = c({
|
|
|
147
147
|
lg: "h-7"
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
|
-
}),
|
|
151
|
-
const { children: t, className: s, size: o, ...n } = e, a =
|
|
150
|
+
}), E = (e) => {
|
|
151
|
+
const { children: t, className: s, size: o, ...n } = e, a = V({ className: s, size: o });
|
|
152
152
|
return /* @__PURE__ */ r("div", { className: a, ...n, children: t });
|
|
153
|
-
},
|
|
153
|
+
}, q = (e) => {
|
|
154
154
|
const {
|
|
155
155
|
startIcon: t,
|
|
156
156
|
endIcon: s,
|
|
@@ -159,9 +159,12 @@ const k = c({
|
|
|
159
159
|
onClose: a,
|
|
160
160
|
status: i,
|
|
161
161
|
focus: b,
|
|
162
|
-
size: u = "md"
|
|
163
|
-
|
|
164
|
-
|
|
162
|
+
size: u = "md",
|
|
163
|
+
className: x,
|
|
164
|
+
buttonClassName: y,
|
|
165
|
+
...w
|
|
166
|
+
} = e, m = !!a, N = t && /* @__PURE__ */ r(t, { className: d({ size: u }) }), T = s && /* @__PURE__ */ r(s, { className: d({ size: u }) });
|
|
167
|
+
return /* @__PURE__ */ l(E, { size: u, className: x, children: [
|
|
165
168
|
/* @__PURE__ */ l(
|
|
166
169
|
f,
|
|
167
170
|
{
|
|
@@ -170,26 +173,28 @@ const k = c({
|
|
|
170
173
|
focus: b,
|
|
171
174
|
size: u,
|
|
172
175
|
onClick: n,
|
|
176
|
+
className: y,
|
|
177
|
+
...w,
|
|
173
178
|
children: [
|
|
174
|
-
|
|
179
|
+
N,
|
|
175
180
|
o,
|
|
176
|
-
|
|
181
|
+
T
|
|
177
182
|
]
|
|
178
183
|
}
|
|
179
184
|
),
|
|
180
|
-
m && /* @__PURE__ */ l(
|
|
185
|
+
m && /* @__PURE__ */ l(C, { children: [
|
|
181
186
|
/* @__PURE__ */ r(v, { status: i }),
|
|
182
187
|
/* @__PURE__ */ r(p, { status: i, focus: b, size: u, onClick: a })
|
|
183
188
|
] })
|
|
184
189
|
] });
|
|
185
190
|
};
|
|
186
|
-
|
|
191
|
+
q.displayName = "Tag";
|
|
187
192
|
export {
|
|
188
|
-
|
|
193
|
+
B as T,
|
|
189
194
|
f as a,
|
|
190
195
|
p as b,
|
|
191
196
|
v as c,
|
|
192
|
-
|
|
193
|
-
|
|
197
|
+
E as d,
|
|
198
|
+
q as e
|
|
194
199
|
};
|
|
195
|
-
//# sourceMappingURL=Tag-
|
|
200
|
+
//# sourceMappingURL=Tag-CJpDh6a7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tag-CJpDh6a7.js","sources":["../src/components/tag/Tag.tsx"],"sourcesContent":["import React, { PropsWithChildren } from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { LucideIcon, X } from \"lucide-react\";\nimport { Divider } from \"../divider\";\nimport { Icon } from \"../icon\";\nimport { ButtonProps } from \"../button/button/Button\";\nimport { VariantsConfig } from \"@/lib/utils/variants\";\n\nexport interface TagBaseVariants {\n\tstatus?: \"default\" | \"info\" | \"success\" | \"warning\" | \"error\";\n\tfocus?: \"low\" | \"high\";\n\tsize?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst tagBaseStyles = tv({\n\tbase: \"inline-flex items-center justify-center overflow-hidden font-medium leading-none transition-colors\",\n\tvariants: {\n\t\tstatus: {\n\t\t\tdefault: \"border-primary-border bg-status-neutral-bg text-primary-fg hover:bg-status-neutral-bg-hover\",\n\t\t\tinfo: \"border-status-info-border bg-status-info-bg text-status-info hover:bg-status-info-bg-hover\",\n\t\t\tsuccess:\n\t\t\t\t\"border-status-success-border bg-status-success-bg text-status-success hover:bg-status-success-bg-hover\",\n\t\t\twarning:\n\t\t\t\t\"border-status-warning-border bg-status-warning-bg text-status-warning hover:bg-status-warning-bg-hover\",\n\t\t\terror: \"border-status-error-border bg-status-error-bg text-status-error hover:bg-status-error-bg-hover\"\n\t\t},\n\t\tfocus: {\n\t\t\tlow: \"shadow-sm\",\n\t\t\thigh: \"shadow-base\"\n\t\t},\n\t\tsize: {\n\t\t\tsm: \"h-5 px-1.5 py-1 text-xs\",\n\t\t\tmd: \"h-6 px-1.5 py-1 text-sm\",\n\t\t\tlg: \"h-7 px-2 py-1 text-base\"\n\t\t}\n\t} satisfies VariantsConfig<TagBaseVariants>,\n\tdefaultVariants: {\n\t\tstatus: \"default\",\n\t\tfocus: \"low\",\n\t\tsize: \"md\"\n\t},\n\tcompoundVariants: [\n\t\t{\n\t\t\tstatus: [\"info\", \"success\", \"warning\", \"error\"],\n\t\t\tfocus: \"high\",\n\t\t\tclass: \"text-white\"\n\t\t},\n\t\t{\n\t\t\tstatus: \"default\",\n\t\t\tfocus: \"high\",\n\t\t\tclass: \"border-transparent bg-status-neutral text-primary-bg hover:bg-status-neutral-hover\"\n\t\t},\n\t\t{\n\t\t\tstatus: \"info\",\n\t\t\tfocus: \"high\",\n\t\t\tclass: \"border-transparent bg-status-info hover:bg-status-info-hover\"\n\t\t},\n\t\t{\n\t\t\tstatus: \"success\",\n\t\t\tfocus: \"high\",\n\t\t\tclass: \"border-transparent bg-status-success hover:bg-status-success-hover\"\n\t\t},\n\t\t{\n\t\t\tstatus: \"warning\",\n\t\t\tfocus: \"high\",\n\t\t\tclass: \"border-transparent bg-status-warning hover:bg-status-warning-hover\"\n\t\t},\n\t\t{\n\t\t\tstatus: \"error\",\n\t\t\tfocus: \"high\",\n\t\t\tclass: \"border-transparent bg-status-error hover:bg-status-error-hover\"\n\t\t}\n\t]\n});\n\nexport type TagBaseProps = React.HTMLAttributes<HTMLElement> &\n\tTagBaseVariants & {\n\t\tasChild?: boolean;\n\t};\n\nexport const TagBase = ({ asChild = false, children, ...props }: PropsWithChildren<TagBaseProps>) => {\n\tconst Comp = asChild ? Slot : \"span\";\n\treturn (\n\t\t<Comp className={tagBaseStyles(props)} {...props}>\n\t\t\t{children}\n\t\t</Comp>\n\t);\n};\n\nTagBase.displayName = \"TagBase\";\n\nexport interface TagButtonVariants {\n\tsize?: \"sm\" | \"md\" | \"lg\";\n\tclickable?: boolean;\n\tposition?: \"standalone\" | \"left\" | \"right\" | \"middle\";\n}\n\nconst tagButtonStyles = tv({\n\textend: tagBaseStyles,\n\tbase: \"flex cursor-pointer items-center justify-center whitespace-nowrap rounded-sm border focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary\",\n\tvariants: {\n\t\tsize: {\n\t\t\tsm: \"gap-1\",\n\t\t\tmd: \"gap-1\",\n\t\t\tlg: \"gap-1.5\"\n\t\t},\n\t\tclickable: {\n\t\t\tfalse: \"cursor-default\"\n\t\t},\n\t\tposition: {\n\t\t\tstandalone: \"\",\n\t\t\tleft: \"rounded-r-none border-r-0\",\n\t\t\tright: \"rounded-l-none border-l-0\",\n\t\t\tmiddle: \"rounded-none border-l-0 border-r-0\"\n\t\t}\n\t} satisfies VariantsConfig<TagButtonVariants>,\n\tdefaultVariants: {\n\t\tclickable: true,\n\t\tposition: \"standalone\"\n\t}\n});\n\nexport type TagButtonProps = React.HTMLAttributes<HTMLElement> &\n\tTagButtonVariants &\n\tOmit<TagBaseVariants, \"size\"> & {\n\t\tasChild?: boolean;\n\t};\n\nexport const TagButton = (props: PropsWithChildren<TagButtonProps>) => {\n\tconst { asChild = false, children, className, ...rest } = props;\n\tconst Comp = asChild ? Slot : \"button\";\n\tconst styles = tagButtonStyles({ className, ...rest });\n\treturn (\n\t\t<Comp className={styles} {...rest}>\n\t\t\t{children}\n\t\t</Comp>\n\t);\n};\n\nTagButton.displayName = \"TagButton\";\n\nexport interface TagCloseVariants {\n\tsize?: \"sm\" | \"md\" | \"lg\";\n\tfocus?: \"low\" | \"high\";\n}\n\nconst tagCloseStyles = tv({\n\textend: tagBaseStyles,\n\tbase: \"aspect-square cursor-pointer rounded-l-none rounded-r-sm border border-l-0 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary\",\n\tvariants: {\n\t\tsize: {\n\t\t\tsm: \"h-5 p-1 text-xs\",\n\t\t\tmd: \"h-6 p-1 text-sm\",\n\t\t\tlg: \"h-7 p-1.5 text-base\"\n\t\t},\n\t\tfocus: {\n\t\t\tlow: \"!text-primary-fg\",\n\t\t\thigh: \"\"\n\t\t}\n\t} satisfies VariantsConfig<TagCloseVariants>\n});\n\nconst tagIconStyles = tv({\n\tbase: \"aspect-square flex-shrink-0\",\n\tvariants: {\n\t\tsize: {\n\t\t\tsm: \"h-3 w-3\",\n\t\t\tmd: \"h-3.5 w-3.5\",\n\t\t\tlg: \"h-4 w-4\"\n\t\t}\n\t}\n});\n\nexport type TagCloseProps = React.ButtonHTMLAttributes<HTMLButtonElement> &\n\tTagCloseVariants &\n\tOmit<TagBaseVariants, \"size\"> & {\n\t\ticon?: LucideIcon;\n\t\ttag?: React.ElementType;\n\t};\n\nexport const TagClose = (props: TagCloseProps) => {\n\tconst { icon = X, size, tag: Tag = \"button\", className, ...rest } = props;\n\tconst styles = tagCloseStyles({ className, size, ...rest });\n\treturn (\n\t\t<Tag type=\"button\" className={styles} aria-label=\"Удалить\" size={size} {...rest}>\n\t\t\t<Icon icon={icon} className={tagIconStyles({ size })} />\n\t\t</Tag>\n\t);\n};\n\nTagClose.displayName = \"TagClose\";\n\nexport interface TagDividerVariants {\n\tstatus?: \"default\" | \"info\" | \"success\" | \"warning\" | \"error\";\n}\n\nconst tagDividerStyles = tv({\n\tbase: \"\",\n\tvariants: {\n\t\tstatus: {\n\t\t\tdefault: \"bg-primary-border\",\n\t\t\tinfo: \"bg-status-info-border\",\n\t\t\tsuccess: \"bg-status-success-border\",\n\t\t\twarning: \"bg-status-warning-border\",\n\t\t\terror: \"bg-status-error-border\"\n\t\t}\n\t} satisfies VariantsConfig<TagDividerVariants>,\n\tdefaultVariants: {\n\t\tstatus: \"default\"\n\t}\n});\n\nexport type TagDividerProps = React.HTMLAttributes<HTMLDivElement> & TagDividerVariants;\n\nexport const TagDivider = (props: TagDividerProps) => {\n\tconst { status, ...rest } = props;\n\treturn <Divider orientation=\"vertical\" className={tagDividerStyles({ status })} {...rest} />;\n};\n\nTagDivider.displayName = \"TagDivider\";\n\nexport interface TagWrapperVariants {\n\tsize?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst tagWrapperStyles = tv({\n\tbase: \"inline-flex items-center rounded-sm\",\n\tvariants: {\n\t\tsize: {\n\t\t\tsm: \"h-5\",\n\t\t\tmd: \"h-6\",\n\t\t\tlg: \"h-7\"\n\t\t}\n\t} satisfies VariantsConfig<TagWrapperVariants>\n});\n\nexport type TagWrapperProps = React.HTMLAttributes<HTMLDivElement> & TagWrapperVariants;\n\nexport const TagWrapper = (props: TagWrapperProps) => {\n\tconst { children, className, size, ...rest } = props;\n\tconst styles = tagWrapperStyles({ className, size });\n\treturn (\n\t\t<div className={styles} {...rest}>\n\t\t\t{children}\n\t\t</div>\n\t);\n};\n\nexport type TagProps = PropsWithChildren<\n\tPick<TagBaseVariants, \"focus\" | \"size\"> &\n\t\tButtonProps & {\n\t\t\tonLabelClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n\t\t\tonClose?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n\t\t\tclassName?: string;\n\t\t\tbuttonClassName?: string;\n\t\t}\n>;\n\nexport const Tag = (props: TagProps) => {\n\tconst {\n\t\tstartIcon: StartIcon,\n\t\tendIcon: EndIcon,\n\t\tchildren,\n\t\tonLabelClick,\n\t\tonClose,\n\t\tstatus,\n\t\tfocus,\n\t\tsize = \"md\",\n\t\tclassName,\n\t\tbuttonClassName,\n\t\t...rest\n\t} = props;\n\tconst hasClose = Boolean(onClose);\n\n\tconst startIconEl = StartIcon && <StartIcon className={tagIconStyles({ size })} />;\n\tconst endIconEl = EndIcon && <EndIcon className={tagIconStyles({ size })} />;\n\n\treturn (\n\t\t<TagWrapper size={size} className={className}>\n\t\t\t<TagButton\n\t\t\t\tposition={hasClose ? \"left\" : undefined}\n\t\t\t\tstatus={status}\n\t\t\t\tfocus={focus}\n\t\t\t\tsize={size}\n\t\t\t\tonClick={onLabelClick}\n\t\t\t\tclassName={buttonClassName}\n\t\t\t\t{...rest}\n\t\t\t>\n\t\t\t\t{startIconEl}\n\t\t\t\t{children}\n\t\t\t\t{endIconEl}\n\t\t\t</TagButton>\n\n\t\t\t{hasClose && (\n\t\t\t\t<>\n\t\t\t\t\t<TagDivider status={status} />\n\t\t\t\t\t<TagClose status={status} focus={focus} size={size} onClick={onClose} />\n\t\t\t\t</>\n\t\t\t)}\n\t\t</TagWrapper>\n\t);\n};\n\nTag.displayName = \"Tag\";\n"],"names":["tagBaseStyles","tv","TagBase","asChild","children","props","jsx","Slot","tagButtonStyles","TagButton","className","rest","Comp","styles","tagCloseStyles","tagIconStyles","TagClose","icon","X","size","Tag","Icon","tagDividerStyles","TagDivider","status","Divider","tagWrapperStyles","TagWrapper","StartIcon","EndIcon","onLabelClick","onClose","focus","buttonClassName","hasClose","startIconEl","endIconEl","jsxs","Fragment"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { Checkbox } from './Checkbox';
|
|
2
|
-
export { CheckboxField } from './checkbox-field/CheckboxField';
|
|
1
|
+
export { Checkbox, type CheckboxProps } from './Checkbox';
|
|
2
|
+
export { CheckboxField, type CheckboxFieldProps } from './checkbox-field/CheckboxField';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
interface ColorTileVariants {
|
|
3
|
+
selected?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export type ColorTileProps = ColorTileVariants & React.HTMLAttributes<HTMLDivElement>;
|
|
6
|
+
export declare const ColorTile: React.ForwardRefExoticComponent<ColorTileVariants & React.HTMLAttributes<HTMLDivElement> & {
|
|
7
|
+
children?: React.ReactNode | undefined;
|
|
8
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ColorTile, type ColorTileProps } from './ColorTile';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import l from "react";
|
|
3
|
+
import { T as d } from "../index-BVqs-uqP.js";
|
|
4
|
+
const c = d({
|
|
5
|
+
slots: {
|
|
6
|
+
wrapper: "flex aspect-square h-[1.375rem] w-[1.375rem] items-center justify-center rounded-md",
|
|
7
|
+
color: "aspect-square h-4 w-4 rounded-sm border border-alpha-high-90 hover:cursor-pointer"
|
|
8
|
+
},
|
|
9
|
+
variants: {
|
|
10
|
+
selected: {
|
|
11
|
+
true: {
|
|
12
|
+
wrapper: "border border-muted"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}), i = l.forwardRef(
|
|
17
|
+
({ className: o, selected: s, ...t }, a) => {
|
|
18
|
+
const r = c({ selected: s });
|
|
19
|
+
return /* @__PURE__ */ e("div", { className: r.wrapper(), children: /* @__PURE__ */ e("div", { className: r.color({ className: o }), ref: a, ...t }) });
|
|
20
|
+
}
|
|
21
|
+
);
|
|
22
|
+
i.displayName = "ColorTile";
|
|
23
|
+
export {
|
|
24
|
+
i as ColorTile
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=color-tile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-tile.js","sources":["../../src/components/color-tile/ColorTile.tsx"],"sourcesContent":["import { VariantsConfig } from \"@/lib/utils/variants\";\nimport React from \"react\";\nimport { PropsWithChildren } from \"react\";\nimport { tv } from \"tailwind-variants\";\n\ninterface ColorTileVariants {\n\tselected?: boolean;\n}\n\nconst colorTileVariants = tv({\n\tslots: {\n\t\twrapper: \"flex aspect-square h-[1.375rem] w-[1.375rem] items-center justify-center rounded-md\",\n\t\tcolor: \"aspect-square h-4 w-4 rounded-sm border border-alpha-high-90 hover:cursor-pointer\"\n\t},\n\tvariants: {\n\t\tselected: {\n\t\t\ttrue: {\n\t\t\t\twrapper: \"border border-muted\"\n\t\t\t}\n\t\t}\n\t} satisfies VariantsConfig<ColorTileVariants>\n});\n\nexport type ColorTileProps = ColorTileVariants & React.HTMLAttributes<HTMLDivElement>;\n\nexport const ColorTile = React.forwardRef<HTMLDivElement, PropsWithChildren<ColorTileProps>>(\n\t({ className, selected, ...props }, ref) => {\n\t\tconst styles = colorTileVariants({ selected });\n\n\t\treturn (\n\t\t\t<div className={styles.wrapper()}>\n\t\t\t\t<div className={styles.color({ className })} ref={ref} {...props} />\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nColorTile.displayName = \"ColorTile\";\n"],"names":["colorTileVariants","tv","ColorTile","React","className","selected","props","ref","styles"],"mappings":";;;AASA,MAAMA,IAAoBC,EAAG;AAAA,EAC5B,OAAO;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,EACR;AAAA,EACA,UAAU;AAAA,IACT,UAAU;AAAA,MACT,MAAM;AAAA,QACL,SAAS;AAAA,MAAA;AAAA,IACV;AAAA,EACD;AAEF,CAAC,GAIYC,IAAYC,EAAM;AAAA,EAC9B,CAAC,EAAE,WAAAC,GAAW,UAAAC,GAAU,GAAGC,EAAA,GAASC,MAAQ;AAC3C,UAAMC,IAASR,EAAkB,EAAE,UAAAK,GAAU;AAE7C,6BACE,OAAI,EAAA,WAAWG,EAAO,QAAQ,GAC9B,4BAAC,OAAI,EAAA,WAAWA,EAAO,MAAM,EAAE,WAAAJ,EAAU,CAAC,GAAG,KAAAG,GAAW,GAAGD,EAAO,CAAA,GACnE;AAAA,EAAA;AAGH;AAEAJ,EAAU,cAAc;"}
|
|
@@ -5,7 +5,7 @@ import { I as N } from "../ImageUploader-Dn9N2b0r.js";
|
|
|
5
5
|
import { I as T } from "../ImagePlaceholder-B6mGYVx2.js";
|
|
6
6
|
import { I as _ } from "../ImagePreview-RtfJHGfM.js";
|
|
7
7
|
import { T as F } from "../index-BVqs-uqP.js";
|
|
8
|
-
import { b as G, d as L, e as O, a as P } from "../Modal-
|
|
8
|
+
import { b as G, d as L, e as O, a as P } from "../Modal-DWNmrjLy.js";
|
|
9
9
|
import { d as S } from "../downloadFile-yZV-aaO2.js";
|
|
10
10
|
const $ = (r) => {
|
|
11
11
|
const s = URL.createObjectURL(r);
|
package/dist/components/modal.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { M as t, a as d } from "../Modal-
|
|
2
|
-
import { b as g, f as h, c as x, d as y, g as B, e as j, h as u, i as C, j as R } from "../Modal-
|
|
1
|
+
import { M as t, a as d } from "../Modal-DWNmrjLy.js";
|
|
2
|
+
import { b as g, f as h, c as x, d as y, g as B, e as j, h as u, i as C, j as R } from "../Modal-DWNmrjLy.js";
|
|
3
3
|
import { jsx as a } from "react/jsx-runtime";
|
|
4
4
|
import s from "react";
|
|
5
5
|
import { F as m, B as i } from "../FormHeaderTemplate-NfdHG33w.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as e, jsxs as T, Fragment as B } from "react/jsx-runtime";
|
|
2
2
|
import M, { useState as w, useCallback as x, useEffect as F, forwardRef as Y, useMemo as V, useRef as q } from "react";
|
|
3
3
|
import { T as A } from "../index-BVqs-uqP.js";
|
|
4
|
-
import { u as H, a as fe, S as me } from "../SearchSelectTag-
|
|
4
|
+
import { u as H, a as fe, S as me } from "../SearchSelectTag-Bkr3faVn.js";
|
|
5
5
|
import { b as Se, f as Z, C as ee, c as te, d as ge, h as ve } from "../Command-CIbwIJiT.js";
|
|
6
6
|
import { I as K } from "../Icon-DH3ev9GK.js";
|
|
7
7
|
import { b as ye, P as j, a as _ } from "../Popover-YwPKBpCX.js";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export interface StepperProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
defaultValue?: number;
|
|
4
|
+
value?: number;
|
|
5
|
+
onValueChange?: (value: number) => void;
|
|
6
|
+
orientation?: "horizontal" | "vertical";
|
|
7
|
+
}
|
|
8
|
+
export declare function Stepper({ defaultValue, value, onValueChange, orientation, className, ...props }: StepperProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Stepper } from './Stepper';
|
|
2
|
+
import { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
declare const meta: Meta<typeof Stepper>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof Stepper>;
|
|
6
|
+
export declare const Default: Story;
|
|
7
|
+
export declare const Vertical: Story;
|
|
8
|
+
export declare const WithDescription: Story;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Context } from 'react';
|
|
2
|
+
type StepperContextValue = {
|
|
3
|
+
activeStep: number;
|
|
4
|
+
setActiveStep: (step: number) => void;
|
|
5
|
+
orientation: "horizontal" | "vertical";
|
|
6
|
+
};
|
|
7
|
+
export declare const StepperContext: Context<StepperContextValue | undefined>;
|
|
8
|
+
export declare const useStepper: () => StepperContextValue;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function StepperDescription({ className, ...props }: React.HTMLAttributes<HTMLParagraphElement>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface StepperItemProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
2
|
+
step: number;
|
|
3
|
+
completed?: boolean;
|
|
4
|
+
disabled?: boolean;
|
|
5
|
+
loading?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function StepperItem({ step, completed, disabled, loading, className, children, ...props }: StepperItemProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Context } from 'react';
|
|
2
|
+
type StepItemContextValue = {
|
|
3
|
+
step: number;
|
|
4
|
+
state: StepState;
|
|
5
|
+
isDisabled: boolean;
|
|
6
|
+
isLoading: boolean;
|
|
7
|
+
};
|
|
8
|
+
export type StepState = "active" | "completed" | "inactive" | "loading";
|
|
9
|
+
export declare const StepItemContext: Context<StepItemContextValue | undefined>;
|
|
10
|
+
export declare const useStepItem: () => StepItemContextValue;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function StepperTitle({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { Stepper, type StepperProps } from './Stepper';
|
|
2
|
+
export { useStepper, StepperContext } from './StepperContext';
|
|
3
|
+
export { StepperItem, type StepperItemProps } from './components/stepper-item/StepperItem';
|
|
4
|
+
export { StepItemContext, useStepItem } from './components/stepper-item/StepperItemContext';
|
|
5
|
+
export { StepperIndicator, type StepperIndicatorProps } from './components/stepper-indicator/StepperIndicator';
|
|
6
|
+
export { StepperTitle } from './components/stepper-title/StepperTitle';
|
|
7
|
+
export { StepperTrigger, type StepperTriggerProps } from './components/stepper-trigger/StepperTrigger';
|
|
8
|
+
export { StepperSeparator } from './stepper-separator/StepperSeparator';
|
|
9
|
+
export { StepperDescription } from './components/stepper-description/StepperDescription';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function StepperSeparator({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
|