ics-ui-kit 0.1.0 → 0.1.1
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/README.md +36 -36
- package/dist/AlertContext-CxjW1LVL.js.map +1 -1
- package/dist/AlertIcon-5B6AgZpe.js.map +1 -1
- package/dist/Button-Dg89xRSi.js.map +1 -1
- package/dist/ButtonBase-e6qyv6mD.js.map +1 -1
- package/dist/{CheckboxField-B6ojieD7.js → CheckboxField-cX09-eBX.js} +2 -2
- package/dist/CheckboxField-cX09-eBX.js.map +1 -0
- package/dist/Command-BhbfL5wm.js.map +1 -1
- package/dist/ComponentVariantProvider-B0SFUaXB.js.map +1 -1
- package/dist/Description-BTPMlTT-.js.map +1 -1
- package/dist/Dialog-ByiJIDhl.js.map +1 -1
- package/dist/Divider-DPW5ZhZ8.js.map +1 -1
- package/dist/EmptyState-DRKjscH-.js.map +1 -1
- package/dist/ErrorState-B26k67-z.js.map +1 -1
- package/dist/FeatureIcon-BGE0Orkc.js.map +1 -1
- package/dist/{Field-CSvS9f_a.js → Field-CKl59qUB.js} +2 -2
- package/dist/Field-CKl59qUB.js.map +1 -0
- package/dist/{FieldLabel-BA0y5lhr.js → FieldLabel-QJ4rJFOi.js} +2 -2
- package/dist/FieldLabel-QJ4rJFOi.js.map +1 -0
- package/dist/FolderSvg-cw0DxNVy.js.map +1 -1
- package/dist/{FormFooterTemplate-BPspyDbr.js → FormFooterTemplate-DPB6Dkxn.js} +2 -2
- package/dist/FormFooterTemplate-DPB6Dkxn.js.map +1 -0
- package/dist/FormHeader--F6b2aRk.js.map +1 -1
- package/dist/{FormStack-DvlFQQiP.js → FormStack-B4QOuYgO.js} +3 -3
- package/dist/FormStack-B4QOuYgO.js.map +1 -0
- package/dist/HintState-BxrCAWqq.js.map +1 -1
- package/dist/Icon-DH3ev9GK.js.map +1 -1
- package/dist/IconButton-DwkpNgn3.js.map +1 -1
- package/dist/IconTooltip-CKJKGHbk.js +11 -0
- package/dist/IconTooltip-CKJKGHbk.js.map +1 -0
- package/dist/Indicator-AqxHWPA9.js.map +1 -1
- package/dist/InputGroup-BvD9Igmt.js.map +1 -1
- package/dist/InputOTP-B2e1nfSO.js.map +1 -1
- package/dist/Loader-BpHiL6W-.js.map +1 -1
- package/dist/MenuItem-pvsONHlh.js.map +1 -1
- package/dist/MenuItemShortcut-DgPol9Nz.js.map +1 -1
- package/dist/MenuItemText-7uPl9P3z.js.map +1 -1
- package/dist/Overlay-2XMlxApi.js.map +1 -1
- package/dist/Popover-Dvr7y0YY.js.map +1 -1
- package/dist/RichButton-DuPTenmS.js.map +1 -1
- package/dist/ScrollArea-CuuTeDn3.js.map +1 -1
- package/dist/ScrollShadowContainer-DdrnF8qU.js.map +1 -1
- package/dist/SearchSelectTag-DFCX9zT1.js.map +1 -1
- package/dist/Select-DRwv6-eZ.js.map +1 -1
- package/dist/Sheet-rtwmzm2-.js.map +1 -1
- package/dist/Shortcut-D8L15_ed.js.map +1 -1
- package/dist/Skeleton-y6I-i9q5.js.map +1 -1
- package/dist/Tag-DdHXTyKF.js.map +1 -1
- package/dist/Text-DeBE8AKl.js.map +1 -1
- package/dist/TextInput-Cj50ImXi.js.map +1 -1
- package/dist/TextOverflowTooltip-DlUgic5y.js.map +1 -1
- package/dist/Toggle-v_HT3Gm2.js.map +1 -1
- package/dist/Tooltip-C4rVuWr4.js.map +1 -1
- package/dist/TriggerButton-CfDObWP9.js.map +1 -1
- package/dist/blocks/auth/otp-form.js +1 -1
- package/dist/blocks/auth/otp-form.js.map +1 -1
- package/dist/cn-dsXlqdJg.js.map +1 -1
- package/dist/components/alert-dialog.js.map +1 -1
- package/dist/components/alert.js.map +1 -1
- package/dist/components/avatar.js.map +1 -1
- package/dist/components/badge.js.map +1 -1
- package/dist/components/banner.js.map +1 -1
- package/dist/components/breadcrumb.js.map +1 -1
- package/dist/components/button.js.map +1 -1
- package/dist/components/calendar.js.map +1 -1
- package/dist/components/card.js.map +1 -1
- package/dist/components/carousel.js.map +1 -1
- package/dist/components/checkbox.js +1 -1
- package/dist/components/collapsible.js.map +1 -1
- package/dist/components/color-tile.js.map +1 -1
- package/dist/components/container.js.map +1 -1
- package/dist/components/counter.js.map +1 -1
- package/dist/components/dialog.js +1 -1
- package/dist/components/dialog.js.map +1 -1
- package/dist/components/divider.js.map +1 -1
- package/dist/components/drawer.js +1 -1
- package/dist/components/drawer.js.map +1 -1
- package/dist/components/dropdown.js.map +1 -1
- package/dist/components/error-state.js.map +1 -1
- package/dist/components/field.js +1 -1
- package/dist/components/file-upload.js.map +1 -1
- package/dist/components/form.js +3 -3
- package/dist/components/form.js.map +1 -1
- package/dist/components/icon-tooltip.js +1 -1
- package/dist/components/image-placeholder.js.map +1 -1
- package/dist/components/image-preview.js.map +1 -1
- package/dist/components/image-uploader.js.map +1 -1
- package/dist/components/input.js.map +1 -1
- package/dist/components/label.js +1 -1
- package/dist/components/menu-item.js.map +1 -1
- package/dist/components/page-state.js.map +1 -1
- package/dist/components/portal-container.js.map +1 -1
- package/dist/components/progress-circle.js.map +1 -1
- package/dist/components/progress.js.map +1 -1
- package/dist/components/prose.js.map +1 -1
- package/dist/components/radio-group.js.map +1 -1
- package/dist/components/resizable.js.map +1 -1
- package/dist/components/scheduler.js.map +1 -1
- package/dist/components/search-select.js.map +1 -1
- package/dist/components/sidebar.js.map +1 -1
- package/dist/components/slider.js.map +1 -1
- package/dist/components/stepper.js.map +1 -1
- package/dist/components/switch/Switch.d.ts +2 -1
- package/dist/components/switch.js +67 -52
- package/dist/components/switch.js.map +1 -1
- package/dist/components/system-state.js.map +1 -1
- package/dist/components/table.js.map +1 -1
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/tag-input.js.map +1 -1
- package/dist/components/textarea.js.map +1 -1
- package/dist/components/timer.js.map +1 -1
- package/dist/components/toast.js.map +1 -1
- package/dist/components/toggle-group.js.map +1 -1
- package/dist/components/toolbar.js.map +1 -1
- package/dist/index-0ioNhtNM.js.map +1 -1
- package/dist/index-437EL2iq.js.map +1 -1
- package/dist/index-BGQepRFJ.js.map +1 -1
- package/dist/index-BVqs-uqP.js.map +1 -1
- package/dist/index-BZPx6jYI.js.map +1 -1
- package/dist/index-Bb23HztA.js.map +1 -1
- package/dist/index-BpWB3aFK.js.map +1 -1
- package/dist/index-ByaXH_ih.js.map +1 -1
- package/dist/index-BzCriPiK.js.map +1 -1
- package/dist/index-CCKe-Mpx.js.map +1 -1
- package/dist/index-CFaU3UXv.js.map +1 -1
- package/dist/index-CLuiUUQ8.js.map +1 -1
- package/dist/index-CQD-Njgt.js.map +1 -1
- package/dist/index-CmBeyp2d.js.map +1 -1
- package/dist/index-DFZozV_h.js.map +1 -1
- package/dist/index-DHsfW5Rj.js.map +1 -1
- package/dist/index-DHyZ_0Ut.js.map +1 -1
- package/dist/index-DLcqcWxM.js.map +1 -1
- package/dist/index-DRo26PBK.js.map +1 -1
- package/dist/index-DnnQs07z.js.map +1 -1
- package/dist/index-Uiy0Xwy2.js.map +1 -1
- package/dist/index-_ITz1IyW.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/inputBaseStyles-DbzD_jvq.js.map +1 -1
- package/dist/lib/utils/variants.d.ts +1 -1
- package/dist/lib/utils.js.map +1 -1
- package/dist/styles-scoped.css +6239 -6218
- package/dist/styles.css +5978 -5957
- package/dist/theme.css +329 -329
- package/dist/types/css.d.ts +4 -4
- package/dist/useBreakpoints-D8wKOvil.js.map +1 -1
- package/dist/useDebounce-BRah78CF.js.map +1 -1
- package/dist/useFileUpload-iDag0iqM.js.map +1 -1
- package/dist/useItemsKeyboardNavigation-CmeOR30y.js.map +1 -1
- package/dist/useMergeRefs-qoKniYqT.js.map +1 -1
- package/dist/usePortalContainer-ae6EzS08.js.map +1 -1
- package/dist/vendors/tanstack/react-table.js.map +1 -1
- package/dist/zod-BMNoK3aM.js.map +1 -1
- package/package.json +183 -183
- package/tailwind.preset.js +441 -440
- package/dist/CheckboxField-B6ojieD7.js.map +0 -1
- package/dist/Field-CSvS9f_a.js.map +0 -1
- package/dist/FieldLabel-BA0y5lhr.js.map +0 -1
- package/dist/FormFooterTemplate-BPspyDbr.js.map +0 -1
- package/dist/FormStack-DvlFQQiP.js.map +0 -1
- package/dist/IconTooltip-DhkXc8Uy.js +0 -11
- package/dist/IconTooltip-DhkXc8Uy.js.map +0 -1
- package/dist/design-tokens.source.json +0 -1
|
@@ -1,105 +1,106 @@
|
|
|
1
1
|
import { jsxs as y, jsx as s } from "react/jsx-runtime";
|
|
2
2
|
import * as l from "react";
|
|
3
3
|
import D, { useId as M } from "react";
|
|
4
|
-
import { P as
|
|
4
|
+
import { P as S, c as H } from "../index-CFaU3UXv.js";
|
|
5
5
|
import { u as C } from "../index-DLcqcWxM.js";
|
|
6
6
|
import { c as j } from "../index-DFZozV_h.js";
|
|
7
7
|
import { u as A } from "../index-437EL2iq.js";
|
|
8
8
|
import { u as L } from "../index-BZPx6jYI.js";
|
|
9
9
|
import { u as U } from "../index-BGQepRFJ.js";
|
|
10
10
|
import { T as N } from "../index-BVqs-uqP.js";
|
|
11
|
-
import {
|
|
11
|
+
import { u as V } from "../ComponentVariantProvider-B0SFUaXB.js";
|
|
12
|
+
import { F as W } from "../FieldLabel-QJ4rJFOi.js";
|
|
12
13
|
import { D as q } from "../Description-BTPMlTT-.js";
|
|
13
|
-
var
|
|
14
|
-
(t,
|
|
14
|
+
var g = "Switch", [O, ue] = j(g), [$, X] = O(g), P = l.forwardRef(
|
|
15
|
+
(t, n) => {
|
|
15
16
|
const {
|
|
16
17
|
__scopeSwitch: e,
|
|
17
18
|
name: o,
|
|
18
19
|
checked: r,
|
|
19
|
-
defaultChecked:
|
|
20
|
-
required:
|
|
20
|
+
defaultChecked: i,
|
|
21
|
+
required: c,
|
|
21
22
|
disabled: a,
|
|
22
23
|
value: u = "on",
|
|
23
24
|
onCheckedChange: f,
|
|
24
|
-
form:
|
|
25
|
+
form: d,
|
|
25
26
|
...b
|
|
26
|
-
} = t, [
|
|
27
|
+
} = t, [p, m] = l.useState(null), v = C(n, (x) => m(x)), h = l.useRef(!1), k = p ? d || !!p.closest("form") : !0, [w, B] = A({
|
|
27
28
|
prop: r,
|
|
28
|
-
defaultProp:
|
|
29
|
+
defaultProp: i ?? !1,
|
|
29
30
|
onChange: f,
|
|
30
|
-
caller:
|
|
31
|
+
caller: g
|
|
31
32
|
});
|
|
32
|
-
return /* @__PURE__ */ y(
|
|
33
|
+
return /* @__PURE__ */ y($, { scope: e, checked: w, disabled: a, children: [
|
|
33
34
|
/* @__PURE__ */ s(
|
|
34
|
-
|
|
35
|
+
S.button,
|
|
35
36
|
{
|
|
36
37
|
type: "button",
|
|
37
38
|
role: "switch",
|
|
38
|
-
"aria-checked":
|
|
39
|
-
"aria-required":
|
|
40
|
-
"data-state": I(
|
|
39
|
+
"aria-checked": w,
|
|
40
|
+
"aria-required": c,
|
|
41
|
+
"data-state": I(w),
|
|
41
42
|
"data-disabled": a ? "" : void 0,
|
|
42
43
|
disabled: a,
|
|
43
44
|
value: u,
|
|
44
45
|
...b,
|
|
45
|
-
ref:
|
|
46
|
+
ref: v,
|
|
46
47
|
onClick: H(t.onClick, (x) => {
|
|
47
|
-
B((z) => !z), k && (
|
|
48
|
+
B((z) => !z), k && (h.current = x.isPropagationStopped(), h.current || x.stopPropagation());
|
|
48
49
|
})
|
|
49
50
|
}
|
|
50
51
|
),
|
|
51
52
|
k && /* @__PURE__ */ s(
|
|
52
53
|
E,
|
|
53
54
|
{
|
|
54
|
-
control:
|
|
55
|
-
bubbles: !
|
|
55
|
+
control: p,
|
|
56
|
+
bubbles: !h.current,
|
|
56
57
|
name: o,
|
|
57
58
|
value: u,
|
|
58
|
-
checked:
|
|
59
|
-
required:
|
|
59
|
+
checked: w,
|
|
60
|
+
required: c,
|
|
60
61
|
disabled: a,
|
|
61
|
-
form:
|
|
62
|
+
form: d,
|
|
62
63
|
style: { transform: "translateX(-100%)" }
|
|
63
64
|
}
|
|
64
65
|
)
|
|
65
66
|
] });
|
|
66
67
|
}
|
|
67
68
|
);
|
|
68
|
-
P.displayName =
|
|
69
|
+
P.displayName = g;
|
|
69
70
|
var R = "SwitchThumb", _ = l.forwardRef(
|
|
70
|
-
(t,
|
|
71
|
-
const { __scopeSwitch: e, ...o } = t, r =
|
|
71
|
+
(t, n) => {
|
|
72
|
+
const { __scopeSwitch: e, ...o } = t, r = X(R, e);
|
|
72
73
|
return /* @__PURE__ */ s(
|
|
73
|
-
|
|
74
|
+
S.span,
|
|
74
75
|
{
|
|
75
76
|
"data-state": I(r.checked),
|
|
76
77
|
"data-disabled": r.disabled ? "" : void 0,
|
|
77
78
|
...o,
|
|
78
|
-
ref:
|
|
79
|
+
ref: n
|
|
79
80
|
}
|
|
80
81
|
);
|
|
81
82
|
}
|
|
82
83
|
);
|
|
83
84
|
_.displayName = R;
|
|
84
|
-
var
|
|
85
|
+
var G = "SwitchBubbleInput", E = l.forwardRef(
|
|
85
86
|
({
|
|
86
87
|
__scopeSwitch: t,
|
|
87
|
-
control:
|
|
88
|
+
control: n,
|
|
88
89
|
checked: e,
|
|
89
90
|
bubbles: o = !0,
|
|
90
91
|
...r
|
|
91
|
-
},
|
|
92
|
-
const
|
|
92
|
+
}, i) => {
|
|
93
|
+
const c = l.useRef(null), a = C(c, i), u = L(e), f = U(n);
|
|
93
94
|
return l.useEffect(() => {
|
|
94
|
-
const
|
|
95
|
-
if (!
|
|
95
|
+
const d = c.current;
|
|
96
|
+
if (!d) return;
|
|
96
97
|
const b = window.HTMLInputElement.prototype, m = Object.getOwnPropertyDescriptor(
|
|
97
98
|
b,
|
|
98
99
|
"checked"
|
|
99
100
|
).set;
|
|
100
101
|
if (u !== e && m) {
|
|
101
|
-
const
|
|
102
|
-
m.call(
|
|
102
|
+
const v = new Event("click", { bubbles: o });
|
|
103
|
+
m.call(d, e), d.dispatchEvent(v);
|
|
103
104
|
}
|
|
104
105
|
}, [u, e, o]), /* @__PURE__ */ s(
|
|
105
106
|
"input",
|
|
@@ -122,12 +123,12 @@ var X = "SwitchBubbleInput", E = l.forwardRef(
|
|
|
122
123
|
);
|
|
123
124
|
}
|
|
124
125
|
);
|
|
125
|
-
E.displayName =
|
|
126
|
+
E.displayName = G;
|
|
126
127
|
function I(t) {
|
|
127
128
|
return t ? "checked" : "unchecked";
|
|
128
129
|
}
|
|
129
|
-
var F = P,
|
|
130
|
-
const
|
|
130
|
+
var F = P, J = _;
|
|
131
|
+
const K = N({
|
|
131
132
|
slots: {
|
|
132
133
|
root: [
|
|
133
134
|
"peer relative inline-flex shrink-0 cursor-pointer items-center rounded-full",
|
|
@@ -142,6 +143,10 @@ const J = N({
|
|
|
142
143
|
},
|
|
143
144
|
variants: {
|
|
144
145
|
size: {
|
|
146
|
+
xs: {
|
|
147
|
+
root: "h-4 w-7",
|
|
148
|
+
thumb: "h-3 w-3 data-[state=checked]:translate-x-[14px] data-[state=unchecked]:translate-x-0.5"
|
|
149
|
+
},
|
|
145
150
|
sm: {
|
|
146
151
|
root: "h-5 w-9",
|
|
147
152
|
thumb: "h-4 w-4 data-[state=checked]:translate-x-[18px] data-[state=unchecked]:translate-x-0.5"
|
|
@@ -150,19 +155,29 @@ const J = N({
|
|
|
150
155
|
root: "h-6 w-11",
|
|
151
156
|
thumb: "h-5 w-5 data-[state=checked]:translate-x-[22px] data-[state=unchecked]:translate-x-0.5"
|
|
152
157
|
}
|
|
158
|
+
},
|
|
159
|
+
theme: {
|
|
160
|
+
inverse: {
|
|
161
|
+
root: [
|
|
162
|
+
"focus-visible:shadow-inverse-focus",
|
|
163
|
+
"data-[state=unchecked]:bg-inverse-active data-[state=unchecked]:hover:enabled:bg-inverse-muted",
|
|
164
|
+
"data-[state=checked]:bg-inverse-primary-fg data-[state=checked]:hover:enabled:bg-inverse-secondary-fg"
|
|
165
|
+
],
|
|
166
|
+
thumb: "bg-inverse-primary-bg"
|
|
167
|
+
}
|
|
153
168
|
}
|
|
154
169
|
},
|
|
155
170
|
defaultVariants: {
|
|
156
171
|
size: "md"
|
|
157
172
|
}
|
|
158
173
|
}), T = l.forwardRef(
|
|
159
|
-
({ className: t, size:
|
|
160
|
-
const {
|
|
161
|
-
return /* @__PURE__ */ s(F, { className:
|
|
174
|
+
({ className: t, size: n, ...e }, o) => {
|
|
175
|
+
const { variant: r } = V(), { root: i, thumb: c } = K({ size: n, theme: r });
|
|
176
|
+
return /* @__PURE__ */ s(F, { className: i({ className: t }), ...e, ref: o, children: /* @__PURE__ */ s(J, { className: c() }) });
|
|
162
177
|
}
|
|
163
178
|
);
|
|
164
179
|
T.displayName = F.displayName;
|
|
165
|
-
const
|
|
180
|
+
const Q = N({
|
|
166
181
|
slots: {
|
|
167
182
|
container: "flex cursor-pointer items-center gap-3",
|
|
168
183
|
textContainer: "flex flex-col gap-1",
|
|
@@ -199,26 +214,26 @@ const K = N({
|
|
|
199
214
|
defaultVariants: {
|
|
200
215
|
alignment: "left"
|
|
201
216
|
}
|
|
202
|
-
}),
|
|
203
|
-
({ className: t, id:
|
|
217
|
+
}), Y = D.forwardRef(
|
|
218
|
+
({ className: t, id: n, label: e, alignment: o, error: r, disabled: i, outline: c, description: a, ...u }, f) => {
|
|
204
219
|
const {
|
|
205
|
-
container:
|
|
220
|
+
container: d,
|
|
206
221
|
textContainer: b,
|
|
207
|
-
label:
|
|
222
|
+
label: p,
|
|
208
223
|
labelWrapper: m
|
|
209
|
-
} =
|
|
210
|
-
return /* @__PURE__ */ y("label", { htmlFor:
|
|
211
|
-
/* @__PURE__ */ s(T, { disabled:
|
|
224
|
+
} = Q({ alignment: o, error: r, disabled: i, outline: c, withDescription: !!a }), v = M(), h = n || `switch-${v}`;
|
|
225
|
+
return /* @__PURE__ */ y("label", { htmlFor: h, className: d({ class: t }), children: [
|
|
226
|
+
/* @__PURE__ */ s(T, { disabled: i, id: h, ...u, ref: f }),
|
|
212
227
|
(e || a) && /* @__PURE__ */ y("div", { className: b(), children: [
|
|
213
|
-
e && /* @__PURE__ */ s("div", { className: m(), children: /* @__PURE__ */ s(W, { htmlFor:
|
|
228
|
+
e && /* @__PURE__ */ s("div", { className: m(), children: /* @__PURE__ */ s(W, { htmlFor: h, className: p(), children: e }) }),
|
|
214
229
|
a && /* @__PURE__ */ s(q, { size: "xs", children: a })
|
|
215
230
|
] })
|
|
216
231
|
] });
|
|
217
232
|
}
|
|
218
233
|
);
|
|
219
|
-
|
|
234
|
+
Y.displayName = "SwitchField";
|
|
220
235
|
export {
|
|
221
236
|
T as Switch,
|
|
222
|
-
|
|
237
|
+
Y as SwitchField
|
|
223
238
|
};
|
|
224
239
|
//# sourceMappingURL=switch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switch.js","sources":["../../node_modules/.pnpm/@radix-ui+react-switch@1.2._f3fb04ca0cb9718d2dd2dba40e11ef1d/node_modules/@radix-ui/react-switch/dist/index.mjs","../../src/components/switch/Switch.tsx","../../src/components/switch/switch-field/SwitchField.tsx"],"sourcesContent":["\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = \"on\",\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = button ? form || !!button.closest(\"form\") : true;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n return /* @__PURE__ */ jsxs(SwitchProvider, { scope: __scopeSwitch, checked, disabled, children: [\n /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(props.onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n control: button,\n bubbles: !hasConsumerStoppedPropagationRef.current,\n name,\n value,\n checked,\n required,\n disabled,\n form,\n style: { transform: \"translateX(-100%)\" }\n }\n )\n ] });\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n ({\n __scopeSwitch,\n control,\n checked,\n bubbles = true,\n ...props\n }, forwardedRef) => {\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n return /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: checked,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0\n }\n }\n );\n }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nvar Root = Switch;\nvar Thumb = SwitchThumb;\nexport {\n Root,\n Switch,\n SwitchThumb,\n Thumb,\n createSwitchScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\r\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\";\r\nimport { tv } from \"tailwind-variants\";\r\nimport { VariantsConfig } from \"@/lib/utils/variants\";\r\n\r\nexport interface SwitchVariants {\r\n\tsize?: \"sm\" | \"md\";\r\n}\r\n\r\n/**\r\n * Варианты стилей для компонента Switch\r\n */\r\nconst switchStyles = tv({\r\n\tslots: {\r\n\t\troot: [\r\n\t\t\t\"peer relative inline-flex shrink-0 cursor-pointer items-center rounded-full\",\r\n\t\t\t\"transition-colors\",\r\n\t\t\t\"focus-visible:border-tertiary-accent focus-visible:shadow-focus focus-visible:outline-none\",\r\n\t\t\t\"disabled:cursor-not-allowed disabled:opacity-50\",\r\n\t\t\t\"data-[state=checked]:bg-primary-accent data-[state=unchecked]:bg-secondary-border\",\r\n\t\t\t\"data-[state=checked]:hover:enabled:bg-primary-accent-hover\",\r\n\t\t\t\"data-[state=unchecked]:hover:enabled:bg-primary-border\"\r\n\t\t],\r\n\t\tthumb: \"rounded-full bg-secondary-bg shadow-soft-base transition-transform\"\r\n\t},\r\n\tvariants: {\r\n\t\tsize: {\r\n\t\t\tsm: {\r\n\t\t\t\troot: \"h-5 w-9\",\r\n\t\t\t\tthumb: \"h-4 w-4 data-[state=checked]:translate-x-[18px] data-[state=unchecked]:translate-x-0.5\"\r\n\t\t\t},\r\n\t\t\tmd: {\r\n\t\t\t\troot: \"h-6 w-11\",\r\n\t\t\t\tthumb: \"h-5 w-5 data-[state=checked]:translate-x-[22px] data-[state=unchecked]:translate-x-0.5\"\r\n\t\t\t}\r\n\t\t}\r\n\t} satisfies VariantsConfig<SwitchVariants>,\r\n\tdefaultVariants: {\r\n\t\tsize: \"md\"\r\n\t}\r\n});\r\n\r\nexport type SwitchProps = React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root> & SwitchVariants;\r\n\r\nconst Switch = React.forwardRef<React.ElementRef<typeof SwitchPrimitives.Root>, SwitchProps>(\r\n\t({ className, size, ...props }, ref) => {\r\n\t\tconst { root, thumb } = switchStyles({ size });\r\n\r\n\t\treturn (\r\n\t\t\t<SwitchPrimitives.Root className={root({ className })} {...props} ref={ref}>\r\n\t\t\t\t<SwitchPrimitives.Thumb className={thumb()} />\r\n\t\t\t</SwitchPrimitives.Root>\r\n\t\t);\r\n\t}\r\n);\r\nSwitch.displayName = SwitchPrimitives.Root.displayName;\r\n\r\nexport { Switch };\r\n","import * as SwitchPrimitives from \"@radix-ui/react-checkbox\";\r\nimport { tv } from \"tailwind-variants\";\r\nimport React, { useId } from \"react\";\r\nimport { FieldLabel } from \"@/components/label\";\r\nimport { Description } from \"@/components/description\";\r\nimport { Switch, SwitchProps } from \"../Switch\";\r\nimport { VariantsConfig } from \"@/lib/utils/variants\";\r\n\r\nexport interface SwitchFieldVariants {\r\n\toutline?: boolean;\r\n\talignment?: \"left\" | \"right\";\r\n\tdisabled?: boolean;\r\n\terror?: boolean;\r\n}\r\n\r\nconst switchFieldStyles = tv({\r\n\tslots: {\r\n\t\tcontainer: \"flex cursor-pointer items-center gap-3\",\r\n\t\ttextContainer: \"flex flex-col gap-1\",\r\n\t\tlabelWrapper: \"flex h-4 items-center\",\r\n\t\tlabel: \"cursor-pointer\"\r\n\t},\r\n\tvariants: {\r\n\t\toutline: {\r\n\t\t\ttrue: {\r\n\t\t\t\tcontainer: \"rounded-lg border border-secondary-border p-3 px-4\"\r\n\t\t\t}\r\n\t\t},\r\n\t\tdisabled: {\r\n\t\t\ttrue: {\r\n\t\t\t\tcontainer: \"cursor-default\",\r\n\t\t\t\ttextContainer: \"opacity-50\",\r\n\t\t\t\tlabel: \"cursor-default text-primary-fg\",\r\n\t\t\t\tdescription: \"text-muted\"\r\n\t\t\t}\r\n\t\t},\r\n\t\terror: {\r\n\t\t\ttrue: {\r\n\t\t\t\tlabel: \"text-status-error\"\r\n\t\t\t}\r\n\t\t},\r\n\t\talignment: {\r\n\t\t\tleft: {},\r\n\t\t\tright: {\r\n\t\t\t\tcontainer: \"flex-row-reverse space-x-reverse\"\r\n\t\t\t}\r\n\t\t},\r\n\t\twithDescription: { true: { container: \"items-start\" } }\r\n\t} satisfies VariantsConfig<SwitchFieldVariants & { withDescription?: boolean }>,\r\n\tdefaultVariants: {\r\n\t\talignment: \"left\"\r\n\t}\r\n});\r\n\r\ntype SwitchFieldProps = SwitchProps &\r\n\tSwitchFieldVariants & {\r\n\t\tlabel?: string | React.ReactNode;\r\n\t\tdescription?: string;\r\n\t};\r\n\r\nconst SwitchField = React.forwardRef<React.ElementRef<typeof SwitchPrimitives.Root>, SwitchFieldProps>(\r\n\t({ className, id, label, alignment: alignment, error, disabled, outline, description, ...props }, ref) => {\r\n\t\tconst {\r\n\t\t\tcontainer,\r\n\t\t\ttextContainer,\r\n\t\t\tlabel: labelStyles,\r\n\t\t\tlabelWrapper\r\n\t\t} = switchFieldStyles({ alignment, error, disabled, outline, withDescription: !!description });\r\n\r\n\t\tconst generatedId = useId();\r\n\t\tconst switchId = id || `switch-${generatedId}`;\r\n\r\n\t\treturn (\r\n\t\t\t<label htmlFor={switchId} className={container({ class: className })}>\r\n\t\t\t\t<Switch disabled={disabled} id={switchId} {...props} ref={ref} />\r\n\t\t\t\t{(label || description) && (\r\n\t\t\t\t\t<div className={textContainer()}>\r\n\t\t\t\t\t\t{label && (\r\n\t\t\t\t\t\t\t<div className={labelWrapper()}>\r\n\t\t\t\t\t\t\t\t<FieldLabel htmlFor={switchId} className={labelStyles()}>\r\n\t\t\t\t\t\t\t\t\t{label}\r\n\t\t\t\t\t\t\t\t</FieldLabel>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{description && <Description size=\"xs\">{description}</Description>}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t)}\r\n\t\t\t</label>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nSwitchField.displayName = \"SwitchField\";\r\n\r\nexport { SwitchField };\r\n"],"names":["SWITCH_NAME","createSwitchContext","createSwitchScope","createContextScope","SwitchProvider","useSwitchContext","Switch","React","props","forwardedRef","__scopeSwitch","name","checkedProp","defaultChecked","required","disabled","value","onCheckedChange","form","switchProps","button","setButton","composedRefs","useComposedRefs","node","hasConsumerStoppedPropagationRef","isFormControl","checked","setChecked","useControllableState","jsxs","jsx","Primitive","getState","composeEventHandlers","event","prevChecked","SwitchBubbleInput","THUMB_NAME","SwitchThumb","thumbProps","context","BUBBLE_INPUT_NAME","control","bubbles","ref","usePrevious","controlSize","useSize","input","inputProto","Root","Thumb","switchStyles","tv","className","size","root","thumb","SwitchPrimitives.Root","SwitchPrimitives.Thumb","switchFieldStyles","SwitchField","id","label","alignment","error","outline","description","container","textContainer","labelStyles","labelWrapper","generatedId","useId","switchId","FieldLabel","Description"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"switch.js","sources":["../../node_modules/.pnpm/@radix-ui+react-switch@1.2.6_@types+react-dom@18.3.6_@types+react@18.3.20__@types+react_f3fb04ca0cb9718d2dd2dba40e11ef1d/node_modules/@radix-ui/react-switch/dist/index.mjs","../../src/components/switch/Switch.tsx","../../src/components/switch/switch-field/SwitchField.tsx"],"sourcesContent":["\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = \"on\",\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = button ? form || !!button.closest(\"form\") : true;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n return /* @__PURE__ */ jsxs(SwitchProvider, { scope: __scopeSwitch, checked, disabled, children: [\n /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(props.onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n control: button,\n bubbles: !hasConsumerStoppedPropagationRef.current,\n name,\n value,\n checked,\n required,\n disabled,\n form,\n style: { transform: \"translateX(-100%)\" }\n }\n )\n ] });\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n ({\n __scopeSwitch,\n control,\n checked,\n bubbles = true,\n ...props\n }, forwardedRef) => {\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n return /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: checked,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0\n }\n }\n );\n }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nvar Root = Switch;\nvar Thumb = SwitchThumb;\nexport {\n Root,\n Switch,\n SwitchThumb,\n Thumb,\n createSwitchScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\";\nimport { tv } from \"tailwind-variants\";\nimport { VariantsConfig } from \"@/lib/utils/variants\";\nimport { useComponentVariant } from \"@/providers/component-variant-context\";\n\nexport interface SwitchVariants {\n\tsize?: \"xs\" | \"sm\" | \"md\";\n\ttheme?: \"inverse\";\n}\n\n/**\n * Варианты стилей для компонента Switch\n */\nconst switchStyles = tv({\n\tslots: {\n\t\troot: [\n\t\t\t\"peer relative inline-flex shrink-0 cursor-pointer items-center rounded-full\",\n\t\t\t\"transition-colors\",\n\t\t\t\"focus-visible:border-tertiary-accent focus-visible:shadow-focus focus-visible:outline-none\",\n\t\t\t\"disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t\t\"data-[state=checked]:bg-primary-accent data-[state=unchecked]:bg-secondary-border\",\n\t\t\t\"data-[state=checked]:hover:enabled:bg-primary-accent-hover\",\n\t\t\t\"data-[state=unchecked]:hover:enabled:bg-primary-border\"\n\t\t],\n\t\tthumb: \"rounded-full bg-secondary-bg shadow-soft-base transition-transform\"\n\t},\n\tvariants: {\n\t\tsize: {\n\t\t\txs: {\n\t\t\t\troot: \"h-4 w-7\",\n\t\t\t\tthumb: \"h-3 w-3 data-[state=checked]:translate-x-[14px] data-[state=unchecked]:translate-x-0.5\"\n\t\t\t},\n\t\t\tsm: {\n\t\t\t\troot: \"h-5 w-9\",\n\t\t\t\tthumb: \"h-4 w-4 data-[state=checked]:translate-x-[18px] data-[state=unchecked]:translate-x-0.5\"\n\t\t\t},\n\t\t\tmd: {\n\t\t\t\troot: \"h-6 w-11\",\n\t\t\t\tthumb: \"h-5 w-5 data-[state=checked]:translate-x-[22px] data-[state=unchecked]:translate-x-0.5\"\n\t\t\t}\n\t\t},\n\t\ttheme: {\n\t\t\tinverse: {\n\t\t\t\troot: [\n\t\t\t\t\t\"focus-visible:shadow-inverse-focus\",\n\t\t\t\t\t\"data-[state=unchecked]:bg-inverse-active data-[state=unchecked]:hover:enabled:bg-inverse-muted\",\n\t\t\t\t\t\"data-[state=checked]:bg-inverse-primary-fg data-[state=checked]:hover:enabled:bg-inverse-secondary-fg\"\n\t\t\t\t],\n\t\t\t\tthumb: \"bg-inverse-primary-bg\"\n\t\t\t}\n\t\t}\n\t} satisfies VariantsConfig<SwitchVariants>,\n\tdefaultVariants: {\n\t\tsize: \"md\"\n\t}\n});\n\nexport type SwitchProps = React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root> & SwitchVariants;\n\nconst Switch = React.forwardRef<React.ElementRef<typeof SwitchPrimitives.Root>, SwitchProps>(\n\t({ className, size, ...props }, ref) => {\n\t\tconst { variant: theme } = useComponentVariant();\n\t\tconst { root, thumb } = switchStyles({ size, theme });\n\n\t\treturn (\n\t\t\t<SwitchPrimitives.Root className={root({ className })} {...props} ref={ref}>\n\t\t\t\t<SwitchPrimitives.Thumb className={thumb()} />\n\t\t\t</SwitchPrimitives.Root>\n\t\t);\n\t}\n);\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch };\n","import * as SwitchPrimitives from \"@radix-ui/react-checkbox\";\nimport { tv } from \"tailwind-variants\";\nimport React, { useId } from \"react\";\nimport { FieldLabel } from \"@/components/label\";\nimport { Description } from \"@/components/description\";\nimport { Switch, SwitchProps } from \"../Switch\";\nimport { VariantsConfig } from \"@/lib/utils/variants\";\n\nexport interface SwitchFieldVariants {\n\toutline?: boolean;\n\talignment?: \"left\" | \"right\";\n\tdisabled?: boolean;\n\terror?: boolean;\n}\n\nconst switchFieldStyles = tv({\n\tslots: {\n\t\tcontainer: \"flex cursor-pointer items-center gap-3\",\n\t\ttextContainer: \"flex flex-col gap-1\",\n\t\tlabelWrapper: \"flex h-4 items-center\",\n\t\tlabel: \"cursor-pointer\"\n\t},\n\tvariants: {\n\t\toutline: {\n\t\t\ttrue: {\n\t\t\t\tcontainer: \"rounded-lg border border-secondary-border p-3 px-4\"\n\t\t\t}\n\t\t},\n\t\tdisabled: {\n\t\t\ttrue: {\n\t\t\t\tcontainer: \"cursor-default\",\n\t\t\t\ttextContainer: \"opacity-50\",\n\t\t\t\tlabel: \"cursor-default text-primary-fg\",\n\t\t\t\tdescription: \"text-muted\"\n\t\t\t}\n\t\t},\n\t\terror: {\n\t\t\ttrue: {\n\t\t\t\tlabel: \"text-status-error\"\n\t\t\t}\n\t\t},\n\t\talignment: {\n\t\t\tleft: {},\n\t\t\tright: {\n\t\t\t\tcontainer: \"flex-row-reverse space-x-reverse\"\n\t\t\t}\n\t\t},\n\t\twithDescription: { true: { container: \"items-start\" } }\n\t} satisfies VariantsConfig<SwitchFieldVariants & { withDescription?: boolean }>,\n\tdefaultVariants: {\n\t\talignment: \"left\"\n\t}\n});\n\ntype SwitchFieldProps = SwitchProps &\n\tSwitchFieldVariants & {\n\t\tlabel?: string | React.ReactNode;\n\t\tdescription?: string;\n\t};\n\nconst SwitchField = React.forwardRef<React.ElementRef<typeof SwitchPrimitives.Root>, SwitchFieldProps>(\n\t({ className, id, label, alignment: alignment, error, disabled, outline, description, ...props }, ref) => {\n\t\tconst {\n\t\t\tcontainer,\n\t\t\ttextContainer,\n\t\t\tlabel: labelStyles,\n\t\t\tlabelWrapper\n\t\t} = switchFieldStyles({ alignment, error, disabled, outline, withDescription: !!description });\n\n\t\tconst generatedId = useId();\n\t\tconst switchId = id || `switch-${generatedId}`;\n\n\t\treturn (\n\t\t\t<label htmlFor={switchId} className={container({ class: className })}>\n\t\t\t\t<Switch disabled={disabled} id={switchId} {...props} ref={ref} />\n\t\t\t\t{(label || description) && (\n\t\t\t\t\t<div className={textContainer()}>\n\t\t\t\t\t\t{label && (\n\t\t\t\t\t\t\t<div className={labelWrapper()}>\n\t\t\t\t\t\t\t\t<FieldLabel htmlFor={switchId} className={labelStyles()}>\n\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t</FieldLabel>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{description && <Description size=\"xs\">{description}</Description>}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</label>\n\t\t);\n\t}\n);\n\nSwitchField.displayName = \"SwitchField\";\n\nexport { SwitchField };\n"],"names":["SWITCH_NAME","createSwitchContext","createSwitchScope","createContextScope","SwitchProvider","useSwitchContext","Switch","React","props","forwardedRef","__scopeSwitch","name","checkedProp","defaultChecked","required","disabled","value","onCheckedChange","form","switchProps","button","setButton","composedRefs","useComposedRefs","node","hasConsumerStoppedPropagationRef","isFormControl","checked","setChecked","useControllableState","jsxs","jsx","Primitive","getState","composeEventHandlers","event","prevChecked","SwitchBubbleInput","THUMB_NAME","SwitchThumb","thumbProps","context","BUBBLE_INPUT_NAME","control","bubbles","ref","usePrevious","controlSize","useSize","input","inputProto","Root","Thumb","switchStyles","tv","className","size","theme","useComponentVariant","root","thumb","SwitchPrimitives.Root","SwitchPrimitives.Thumb","switchFieldStyles","SwitchField","id","label","alignment","error","outline","description","container","textContainer","labelStyles","labelWrapper","generatedId","useId","switchId","FieldLabel","Description"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-state.js","sources":["../../src/components/system-state/SystemState.tsx","../../src/components/system-state/components/SystemStateCode.tsx","../../src/components/system-state/components/SystemStateTitle.tsx","../../src/components/system-state/components/SystemStateDescription.tsx","../../src/components/system-state/components/SystemStateActions.tsx"],"sourcesContent":["import React from \"react\";\
|
|
1
|
+
{"version":3,"file":"system-state.js","sources":["../../src/components/system-state/SystemState.tsx","../../src/components/system-state/components/SystemStateCode.tsx","../../src/components/system-state/components/SystemStateTitle.tsx","../../src/components/system-state/components/SystemStateDescription.tsx","../../src/components/system-state/components/SystemStateActions.tsx"],"sourcesContent":["import React from \"react\";\nimport { tv } from \"tailwind-variants\";\n\nconst systemStateStyles = tv({\n\tbase: \"flex w-full max-w-[343px] flex-col items-center text-center lg:max-w-[672px]\"\n});\n\nexport type SystemStateProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const SystemState = React.forwardRef<HTMLDivElement, SystemStateProps>(\n\t({ className, children, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div ref={ref} className={systemStateStyles({ className })} {...props}>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nSystemState.displayName = \"SystemState\";\n","import React from \"react\";\nimport { tv } from \"tailwind-variants\";\n\nconst codeStyles = tv({\n\tbase: \"mb-8 align-middle text-sm font-medium text-muted\"\n});\n\nexport type SystemStateCodeProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const SystemStateCode = React.forwardRef<HTMLDivElement, SystemStateCodeProps>(\n\t({ className, children, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div ref={ref} className={codeStyles({ className })} {...props}>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nSystemStateCode.displayName = \"SystemStateCode\";\n","import React from \"react\";\nimport { tv } from \"tailwind-variants\";\n\nconst titleStyles = tv({\n\tbase: \"leading-3xl lg:leading-5xl letter-spacing-[-0.02em] pb-4 text-center align-middle text-3xl font-bold lg:text-5xl\"\n});\n\nexport type SystemStateTitleProps = React.HTMLAttributes<HTMLHeadingElement>;\n\nexport const SystemStateTitle = React.forwardRef<HTMLHeadingElement, SystemStateTitleProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn <h2 ref={ref} className={titleStyles({ className })} {...props} />;\n\t}\n);\n\nSystemStateTitle.displayName = \"SystemStateTitle\";\n","import React from \"react\";\nimport { tv } from \"tailwind-variants\";\n\nconst descriptionStyles = tv({\n\tbase: \"leading-base max-w-s text-base font-normal text-muted lg:max-w-xl\"\n});\n\nexport type SystemStateDescriptionProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const SystemStateDescription = React.forwardRef<HTMLDivElement, SystemStateDescriptionProps>(\n\t({ className, children, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div ref={ref} className={descriptionStyles({ className })} {...props}>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nSystemStateDescription.displayName = \"SystemStateDescription\";\n","import React from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport { Button, ButtonProps } from \"@/components/button/button/Button\";\nimport { useIsMobile } from \"@/hooks/useBreakpoints\";\n\nconst actionsStyles = tv({\n\tslots: {\n\t\tcontainer: \"mt-8 flex w-full flex-col items-center gap-3 lg:flex-row lg:justify-center\",\n\t\tbutton: \"w-full lg:w-auto\"\n\t}\n});\n\nexport interface SystemStateActionsProps {\n\tclassName?: string;\n\tprimaryButton?: React.ReactNode;\n\tprimaryButtonProps?: ButtonProps;\n\tsecondaryButton?: React.ReactNode;\n\tsecondaryButtonProps?: ButtonProps;\n}\n\nexport const SystemStateActions = React.forwardRef<HTMLDivElement, SystemStateActionsProps>(\n\t({ className, primaryButton, secondaryButton, primaryButtonProps, secondaryButtonProps }, ref) => {\n\t\tconst isMobile = useIsMobile();\n\t\tconst { container, button } = actionsStyles();\n\n\t\tif (isMobile) {\n\t\t\tprimaryButtonProps = { ...primaryButtonProps, size: \"xl\", className: button({ className: className }) };\n\t\t\tsecondaryButtonProps = { ...secondaryButtonProps, size: \"xl\", className: button({ className: className }) };\n\t\t}\n\n\t\tconst primaryButtonElement = primaryButton && (\n\t\t\t<Button key=\"primary-button\" variant=\"primary\" {...primaryButtonProps}>\n\t\t\t\t{primaryButton}\n\t\t\t</Button>\n\t\t);\n\n\t\tconst secondaryButtonElement = secondaryButton && (\n\t\t\t<Button key=\"secondary-button\" variant=\"outline\" {...secondaryButtonProps}>\n\t\t\t\t{secondaryButton}\n\t\t\t</Button>\n\t\t);\n\n\t\treturn (\n\t\t\t<div ref={ref} className={container({ class: className })}>\n\t\t\t\t{isMobile\n\t\t\t\t\t? [primaryButtonElement, secondaryButtonElement]\n\t\t\t\t\t: [secondaryButtonElement, primaryButtonElement]}\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nSystemStateActions.displayName = \"SystemStateActions\";\n"],"names":["systemStateStyles","tv","SystemState","React","className","children","props","ref","jsx","codeStyles","SystemStateCode","titleStyles","SystemStateTitle","descriptionStyles","SystemStateDescription","actionsStyles","SystemStateActions","primaryButton","secondaryButton","primaryButtonProps","secondaryButtonProps","isMobile","useIsMobile","container","button","primaryButtonElement","Button","secondaryButtonElement"],"mappings":";;;;;AAGA,MAAMA,IAAoBC,EAAG;AAAA,EAC5B,MAAM;AACP,CAAC,GAIYC,IAAcC,EAAM;AAAA,EAChC,CAAC,EAAE,WAAAC,GAAW,UAAAC,GAAU,GAAGC,EAAA,GAASC,MAElC,gBAAAC,EAAC,OAAI,EAAA,KAAAD,GAAU,WAAWP,EAAkB,EAAE,WAAAI,GAAW,GAAI,GAAGE,GAC9D,UAAAD,EACF,CAAA;AAGH;AAEAH,EAAY,cAAc;AChB1B,MAAMO,IAAaR,EAAG;AAAA,EACrB,MAAM;AACP,CAAC,GAIYS,IAAkBP,EAAM;AAAA,EACpC,CAAC,EAAE,WAAAC,GAAW,UAAAC,GAAU,GAAGC,EAAA,GAASC,MAElC,gBAAAC,EAAC,OAAI,EAAA,KAAAD,GAAU,WAAWE,EAAW,EAAE,WAAAL,GAAW,GAAI,GAAGE,GACvD,UAAAD,EACF,CAAA;AAGH;AAEAK,EAAgB,cAAc;AChB9B,MAAMC,IAAcV,EAAG;AAAA,EACtB,MAAM;AACP,CAAC,GAIYW,IAAmBT,EAAM;AAAA,EACrC,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAClB,gBAAAC,EAAC,MAAG,EAAA,KAAAD,GAAU,WAAWI,EAAY,EAAE,WAAAP,EAAW,CAAA,GAAI,GAAGE,GAAO;AAEzE;AAEAM,EAAiB,cAAc;ACZ/B,MAAMC,IAAoBZ,EAAG;AAAA,EAC5B,MAAM;AACP,CAAC,GAIYa,IAAyBX,EAAM;AAAA,EAC3C,CAAC,EAAE,WAAAC,GAAW,UAAAC,GAAU,GAAGC,EAAA,GAASC,MAElC,gBAAAC,EAAC,OAAI,EAAA,KAAAD,GAAU,WAAWM,EAAkB,EAAE,WAAAT,GAAW,GAAI,GAAGE,GAC9D,UAAAD,EACF,CAAA;AAGH;AAEAS,EAAuB,cAAc;ACdrC,MAAMC,IAAgBd,EAAG;AAAA,EACxB,OAAO;AAAA,IACN,WAAW;AAAA,IACX,QAAQ;AAAA,EAAA;AAEV,CAAC,GAUYe,IAAqBb,EAAM;AAAA,EACvC,CAAC,EAAE,WAAAC,GAAW,eAAAa,GAAe,iBAAAC,GAAiB,oBAAAC,GAAoB,sBAAAC,KAAwBb,MAAQ;AACjG,UAAMc,IAAWC,EAAY,GACvB,EAAE,WAAAC,GAAW,QAAAC,EAAO,IAAIT,EAAc;AAE5C,IAAIM,MACkBF,IAAA,EAAE,GAAGA,GAAoB,MAAM,MAAM,WAAWK,EAAO,EAAE,WAAApB,EAAqB,CAAC,EAAE,GAC/EgB,IAAA,EAAE,GAAGA,GAAsB,MAAM,MAAM,WAAWI,EAAO,EAAE,WAAApB,EAAqB,CAAC,EAAE;AAGrG,UAAAqB,IAAuBR,KAC3B,gBAAAT,EAAAkB,GAAA,EAA4B,SAAQ,WAAW,GAAGP,GACjD,UAAAF,EAAA,GADU,gBAEZ,GAGKU,IAAyBT,KAC7B,gBAAAV,EAAAkB,GAAA,EAA8B,SAAQ,WAAW,GAAGN,GACnD,UAAAF,EAAA,GADU,kBAEZ;AAGD,6BACE,OAAI,EAAA,KAAAX,GAAU,WAAWgB,EAAU,EAAE,OAAOnB,EAAU,CAAC,GACtD,UAAAiB,IACE,CAACI,GAAsBE,CAAsB,IAC7C,CAACA,GAAwBF,CAAoB,GACjD;AAAA,EAAA;AAGH;AAEAT,EAAmB,cAAc;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.js","sources":["../../src/components/table/Table.tsx"],"sourcesContent":["import * as React from \"react\";\
|
|
1
|
+
{"version":3,"file":"table.js","sources":["../../src/components/table/Table.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport { ScrollShadowContainer } from \"../scroll-shadow-container\";\nimport { ScrollShadowContainerProps } from \"../scroll-shadow-container/ScrollShadowContainer\";\n\nconst tableStyles = tv({\n\tslots: {\n\t\twrapper: \"relative w-full overflow-x-auto\",\n\t\ttable: \"w-full caption-bottom text-sm\"\n\t}\n});\n\nexport const Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement>>(\n\t({ className, ...props }, ref) => {\n\t\tconst styles = tableStyles();\n\n\t\treturn (\n\t\t\t<div className={styles.wrapper()}>\n\t\t\t\t<table ref={ref} className={styles.table({ className })} {...props} />\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nTable.displayName = \"Table\";\n\nconst tableHeaderStyles = tv({\n\tbase: \"border-secondary-border bg-primary-bg [&_tr]:border-b\"\n});\n\nexport const TableHeader = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n\t({ className, ...props }, ref) => <thead ref={ref} className={tableHeaderStyles({ className })} {...props} />\n);\n\nTableHeader.displayName = \"TableHeader\";\n\nconst tableBodyStyles = tv({\n\tbase: \"[&_tr:last-child]:border-0\"\n});\n\nexport const TableBody = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n\t({ className, ...props }, ref) => <tbody ref={ref} className={tableBodyStyles({ className })} {...props} />\n);\n\nTableBody.displayName = \"TableBody\";\n\nconst tableBodyContainerStyles = tv({\n\tbase: \"overflow-x-hidden\"\n});\n\nexport type TableBodyContainerProps = React.HTMLAttributes<HTMLTableSectionElement> & {\n\tcontainerClassName?: string;\n\tshadowSize?: ScrollShadowContainerProps[\"shadowSize\"];\n};\n\nexport const TableBodyContainer = React.forwardRef<HTMLTableSectionElement, TableBodyContainerProps>(\n\t({ className, containerClassName, shadowSize, ...props }, ref) => (\n\t\t<ScrollShadowContainer\n\t\t\tclassName={tableBodyContainerStyles({ className: containerClassName })}\n\t\t\tshadowSize={shadowSize}\n\t\t>\n\t\t\t<tbody ref={ref} className={tableBodyStyles({ className })} {...props} />\n\t\t</ScrollShadowContainer>\n\t)\n);\n\nTableBodyContainer.displayName = \"TableBodyContainer\";\n\nconst tableFooterStyles = tv({\n\tbase: \"border-t bg-primary/[0.03] font-medium [&>tr]:last:border-b-0\"\n});\n\nexport const TableFooter = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n\t({ className, ...props }, ref) => <tfoot ref={ref} className={tableFooterStyles({ className })} {...props} />\n);\n\nTableFooter.displayName = \"TableFooter\";\n\nconst tableRowStyles = tv({\n\tbase: \"border-b border-secondary-border transition-colors hover:bg-alpha-high-97 data-[state=selected]:bg-alpha-high-95 data-[state=selected]:hover:bg-alpha-high-92\"\n});\n\nexport const TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement>>(\n\t({ className, ...props }, ref) => <tr ref={ref} className={tableRowStyles({ className })} {...props} />\n);\n\nTableRow.displayName = \"TableRow\";\n\nconst tableHeadStyles = tv({\n\tbase: \"h-10 px-2 text-left align-middle font-medium text-muted [&:has([role=checkbox])]:pr-0\"\n});\n\nexport const TableHead = React.forwardRef<HTMLTableCellElement, React.ThHTMLAttributes<HTMLTableCellElement>>(\n\t({ className, ...props }, ref) => <th ref={ref} className={tableHeadStyles({ className })} {...props} />\n);\n\nTableHead.displayName = \"TableHead\";\n\nconst tableCellStyles = tv({\n\tbase: \"px-3 py-2.5 align-middle [&:has([role=checkbox])]:pr-0\"\n});\n\nexport const TableCell = React.forwardRef<HTMLTableCellElement, React.TdHTMLAttributes<HTMLTableCellElement>>(\n\t({ className, ...props }, ref) => <td ref={ref} className={tableCellStyles({ className })} {...props} />\n);\n\nTableCell.displayName = \"TableCell\";\n\nconst tableCaptionStyles = tv({\n\tbase: \"mt-4 text-sm text-muted\"\n});\n\nexport const TableCaption = React.forwardRef<HTMLTableCaptionElement, React.HTMLAttributes<HTMLTableCaptionElement>>(\n\t({ className, ...props }, ref) => <caption ref={ref} className={tableCaptionStyles({ className })} {...props} />\n);\n\nTableCaption.displayName = \"TableCaption\";\n"],"names":["tableStyles","tv","Table","React","className","props","ref","styles","tableHeaderStyles","TableHeader","jsx","tableBodyStyles","TableBody","tableBodyContainerStyles","TableBodyContainer","containerClassName","shadowSize","ScrollShadowContainer","tableFooterStyles","TableFooter","tableRowStyles","TableRow","tableHeadStyles","TableHead","tableCellStyles","TableCell","tableCaptionStyles","TableCaption"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabs.js","sources":["../../node_modules/.pnpm/@radix-ui+react-tabs@1.1.13_21753808045192b908d4757aa4b73066/node_modules/@radix-ui/react-tabs/dist/index.mjs","../../src/components/tabs/Tabs.tsx"],"sourcesContent":["\"use client\";\n\n// src/tabs.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TABS_NAME = \"Tabs\";\nvar [createTabsContext, createTabsScope] = createContextScope(TABS_NAME, [\n createRovingFocusGroupScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [TabsProvider, useTabsContext] = createTabsContext(TABS_NAME);\nvar Tabs = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeTabs,\n value: valueProp,\n onValueChange,\n defaultValue,\n orientation = \"horizontal\",\n dir,\n activationMode = \"automatic\",\n ...tabsProps\n } = props;\n const direction = useDirection(dir);\n const [value, setValue] = useControllableState({\n prop: valueProp,\n onChange: onValueChange,\n defaultProp: defaultValue ?? \"\",\n caller: TABS_NAME\n });\n return /* @__PURE__ */ jsx(\n TabsProvider,\n {\n scope: __scopeTabs,\n baseId: useId(),\n value,\n onValueChange: setValue,\n orientation,\n dir: direction,\n activationMode,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n dir: direction,\n \"data-orientation\": orientation,\n ...tabsProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabs.displayName = TABS_NAME;\nvar TAB_LIST_NAME = \"TabsList\";\nvar TabsList = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, loop = true, ...listProps } = props;\n const context = useTabsContext(TAB_LIST_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n orientation: context.orientation,\n dir: context.dir,\n loop,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"tablist\",\n \"aria-orientation\": context.orientation,\n ...listProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabsList.displayName = TAB_LIST_NAME;\nvar TRIGGER_NAME = \"TabsTrigger\";\nvar TabsTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, disabled = false, ...triggerProps } = props;\n const context = useTabsContext(TRIGGER_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Item,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n focusable: !disabled,\n active: isSelected,\n children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"tab\",\n \"aria-selected\": isSelected,\n \"aria-controls\": contentId,\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n id: triggerId,\n ...triggerProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onValueChange(value);\n } else {\n event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if ([\" \", \"Enter\"].includes(event.key)) context.onValueChange(value);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => {\n const isAutomaticActivation = context.activationMode !== \"manual\";\n if (!isSelected && !disabled && isAutomaticActivation) {\n context.onValueChange(value);\n }\n })\n }\n )\n }\n );\n }\n);\nTabsTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"TabsContent\";\nvar TabsContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, forceMount, children, ...contentProps } = props;\n const context = useTabsContext(CONTENT_NAME, __scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n const isMountAnimationPreventedRef = React.useRef(isSelected);\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n return () => cancelAnimationFrame(rAF);\n }, []);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || isSelected, children: ({ present }) => /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-orientation\": context.orientation,\n role: \"tabpanel\",\n \"aria-labelledby\": triggerId,\n hidden: !present,\n id: contentId,\n tabIndex: 0,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n animationDuration: isMountAnimationPreventedRef.current ? \"0s\" : void 0\n },\n children: present && children\n }\n ) });\n }\n);\nTabsContent.displayName = CONTENT_NAME;\nfunction makeTriggerId(baseId, value) {\n return `${baseId}-trigger-${value}`;\n}\nfunction makeContentId(baseId, value) {\n return `${baseId}-content-${value}`;\n}\nvar Root2 = Tabs;\nvar List = TabsList;\nvar Trigger = TabsTrigger;\nvar Content = TabsContent;\nexport {\n Content,\n List,\n Root2 as Root,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Trigger,\n createTabsScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\r\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\r\nimport { tv } from \"tailwind-variants\";\r\n\r\nconst Tabs = TabsPrimitive.Root;\r\n\r\nconst tabsListStyles = tv({\r\n\tbase: \"inline-flex h-10 items-center justify-center rounded-lg bg-secondary-bg-hover p-1 text-muted lg:h-9\"\r\n});\r\n\r\nconst TabsList = React.forwardRef<\r\n\tReact.ElementRef<typeof TabsPrimitive.List>,\r\n\tReact.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\r\n>(({ className, ...props }, ref) => (\r\n\t<TabsPrimitive.List ref={ref} className={tabsListStyles({ className })} {...props} />\r\n));\r\nTabsList.displayName = TabsPrimitive.List.displayName;\r\n\r\nconst tabsTriggerStyles = tv({\r\n\tbase: [\r\n\t\t\"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md px-3 py-1.5 text-sm font-medium ring-offset-background transition-all lg:py-1\",\r\n\t\t\"hover:text-secondary-fg\",\r\n\t\t\"focus-visible:!shadow-focus focus-visible:outline-none\",\r\n\t\t\"disabled:pointer-events-none disabled:opacity-50\",\r\n\t\t\"data-[state=active]:bg-secondary-bg data-[state=active]:text-primary-fg data-[state=active]:shadow-soft-base\"\r\n\t]\r\n});\r\n\r\nconst TabsTrigger = React.forwardRef<\r\n\tReact.ElementRef<typeof TabsPrimitive.Trigger>,\r\n\tReact.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\r\n>(({ className, ...props }, ref) => (\r\n\t<TabsPrimitive.Trigger ref={ref} className={tabsTriggerStyles({ className })} {...props} />\r\n));\r\n\r\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\r\n\r\nconst tabsContentStyles = tv({\r\n\tbase: \"mt-2 ring-offset-background focus-visible:shadow-focus focus-visible:outline-none\"\r\n});\r\n\r\nconst TabsContent = React.forwardRef<\r\n\tReact.ElementRef<typeof TabsPrimitive.Content>,\r\n\tReact.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\r\n>(({ className, ...props }, ref) => (\r\n\t<TabsPrimitive.Content ref={ref} className={tabsContentStyles({ className })} {...props} />\r\n));\r\nTabsContent.displayName = TabsPrimitive.Content.displayName;\r\n\r\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\r\n"],"names":["TABS_NAME","createTabsContext","createTabsScope","createContextScope","createRovingFocusGroupScope","useRovingFocusGroupScope","TabsProvider","useTabsContext","Tabs","React","props","forwardedRef","__scopeTabs","valueProp","onValueChange","defaultValue","orientation","dir","activationMode","tabsProps","direction","useDirection","value","setValue","useControllableState","jsx","useId","Primitive","TAB_LIST_NAME","TabsList","loop","listProps","context","rovingFocusGroupScope","RovingFocusGroup.Root","TRIGGER_NAME","TabsTrigger","disabled","triggerProps","triggerId","makeTriggerId","contentId","makeContentId","isSelected","RovingFocusGroup.Item","composeEventHandlers","event","isAutomaticActivation","CONTENT_NAME","TabsContent","forceMount","children","contentProps","isMountAnimationPreventedRef","rAF","Presence","present","baseId","Root2","List","Trigger","Content","TabsPrimitive.Root","tabsListStyles","tv","className","ref","TabsPrimitive.List","tabsTriggerStyles","TabsPrimitive.Trigger","tabsContentStyles","TabsPrimitive.Content"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"tabs.js","sources":["../../node_modules/.pnpm/@radix-ui+react-tabs@1.1.13_@types+react-dom@18.3.6_@types+react@18.3.20__@types+react@_21753808045192b908d4757aa4b73066/node_modules/@radix-ui/react-tabs/dist/index.mjs","../../src/components/tabs/Tabs.tsx"],"sourcesContent":["\"use client\";\n\n// src/tabs.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TABS_NAME = \"Tabs\";\nvar [createTabsContext, createTabsScope] = createContextScope(TABS_NAME, [\n createRovingFocusGroupScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [TabsProvider, useTabsContext] = createTabsContext(TABS_NAME);\nvar Tabs = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeTabs,\n value: valueProp,\n onValueChange,\n defaultValue,\n orientation = \"horizontal\",\n dir,\n activationMode = \"automatic\",\n ...tabsProps\n } = props;\n const direction = useDirection(dir);\n const [value, setValue] = useControllableState({\n prop: valueProp,\n onChange: onValueChange,\n defaultProp: defaultValue ?? \"\",\n caller: TABS_NAME\n });\n return /* @__PURE__ */ jsx(\n TabsProvider,\n {\n scope: __scopeTabs,\n baseId: useId(),\n value,\n onValueChange: setValue,\n orientation,\n dir: direction,\n activationMode,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n dir: direction,\n \"data-orientation\": orientation,\n ...tabsProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabs.displayName = TABS_NAME;\nvar TAB_LIST_NAME = \"TabsList\";\nvar TabsList = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, loop = true, ...listProps } = props;\n const context = useTabsContext(TAB_LIST_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n orientation: context.orientation,\n dir: context.dir,\n loop,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"tablist\",\n \"aria-orientation\": context.orientation,\n ...listProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabsList.displayName = TAB_LIST_NAME;\nvar TRIGGER_NAME = \"TabsTrigger\";\nvar TabsTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, disabled = false, ...triggerProps } = props;\n const context = useTabsContext(TRIGGER_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Item,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n focusable: !disabled,\n active: isSelected,\n children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"tab\",\n \"aria-selected\": isSelected,\n \"aria-controls\": contentId,\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n id: triggerId,\n ...triggerProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onValueChange(value);\n } else {\n event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if ([\" \", \"Enter\"].includes(event.key)) context.onValueChange(value);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => {\n const isAutomaticActivation = context.activationMode !== \"manual\";\n if (!isSelected && !disabled && isAutomaticActivation) {\n context.onValueChange(value);\n }\n })\n }\n )\n }\n );\n }\n);\nTabsTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"TabsContent\";\nvar TabsContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, forceMount, children, ...contentProps } = props;\n const context = useTabsContext(CONTENT_NAME, __scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n const isMountAnimationPreventedRef = React.useRef(isSelected);\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n return () => cancelAnimationFrame(rAF);\n }, []);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || isSelected, children: ({ present }) => /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-orientation\": context.orientation,\n role: \"tabpanel\",\n \"aria-labelledby\": triggerId,\n hidden: !present,\n id: contentId,\n tabIndex: 0,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n animationDuration: isMountAnimationPreventedRef.current ? \"0s\" : void 0\n },\n children: present && children\n }\n ) });\n }\n);\nTabsContent.displayName = CONTENT_NAME;\nfunction makeTriggerId(baseId, value) {\n return `${baseId}-trigger-${value}`;\n}\nfunction makeContentId(baseId, value) {\n return `${baseId}-content-${value}`;\n}\nvar Root2 = Tabs;\nvar List = TabsList;\nvar Trigger = TabsTrigger;\nvar Content = TabsContent;\nexport {\n Content,\n List,\n Root2 as Root,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Trigger,\n createTabsScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { tv } from \"tailwind-variants\";\n\nconst Tabs = TabsPrimitive.Root;\n\nconst tabsListStyles = tv({\n\tbase: \"inline-flex h-10 items-center justify-center rounded-lg bg-secondary-bg-hover p-1 text-muted lg:h-9\"\n});\n\nconst TabsList = React.forwardRef<\n\tReact.ElementRef<typeof TabsPrimitive.List>,\n\tReact.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n\t<TabsPrimitive.List ref={ref} className={tabsListStyles({ className })} {...props} />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst tabsTriggerStyles = tv({\n\tbase: [\n\t\t\"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md px-3 py-1.5 text-sm font-medium ring-offset-background transition-all lg:py-1\",\n\t\t\"hover:text-secondary-fg\",\n\t\t\"focus-visible:!shadow-focus focus-visible:outline-none\",\n\t\t\"disabled:pointer-events-none disabled:opacity-50\",\n\t\t\"data-[state=active]:bg-secondary-bg data-[state=active]:text-primary-fg data-[state=active]:shadow-soft-base\"\n\t]\n});\n\nconst TabsTrigger = React.forwardRef<\n\tReact.ElementRef<typeof TabsPrimitive.Trigger>,\n\tReact.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n\t<TabsPrimitive.Trigger ref={ref} className={tabsTriggerStyles({ className })} {...props} />\n));\n\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst tabsContentStyles = tv({\n\tbase: \"mt-2 ring-offset-background focus-visible:shadow-focus focus-visible:outline-none\"\n});\n\nconst TabsContent = React.forwardRef<\n\tReact.ElementRef<typeof TabsPrimitive.Content>,\n\tReact.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n\t<TabsPrimitive.Content ref={ref} className={tabsContentStyles({ className })} {...props} />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n"],"names":["TABS_NAME","createTabsContext","createTabsScope","createContextScope","createRovingFocusGroupScope","useRovingFocusGroupScope","TabsProvider","useTabsContext","Tabs","React","props","forwardedRef","__scopeTabs","valueProp","onValueChange","defaultValue","orientation","dir","activationMode","tabsProps","direction","useDirection","value","setValue","useControllableState","jsx","useId","Primitive","TAB_LIST_NAME","TabsList","loop","listProps","context","rovingFocusGroupScope","RovingFocusGroup.Root","TRIGGER_NAME","TabsTrigger","disabled","triggerProps","triggerId","makeTriggerId","contentId","makeContentId","isSelected","RovingFocusGroup.Item","composeEventHandlers","event","isAutomaticActivation","CONTENT_NAME","TabsContent","forceMount","children","contentProps","isMountAnimationPreventedRef","rAF","Presence","present","baseId","Root2","List","Trigger","Content","TabsPrimitive.Root","tabsListStyles","tv","className","ref","TabsPrimitive.List","tabsTriggerStyles","TabsPrimitive.Trigger","tabsContentStyles","TabsPrimitive.Content"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tag-input.js","sources":["../../src/components/tag-input/TagInput.tsx"],"sourcesContent":["import { SearchSelectTag } from \"@/components/search-select/components/SearchSelectTag\";\r\nimport { useControllableState } from \"@/hooks/useControllableState\";\r\nimport { useItemsKeyboardNavigation } from \"@/hooks/useItemsKeyboardNavigation\";\r\nimport React, { KeyboardEvent, useCallback, useRef, useState } from \"react\";\r\nimport { tv } from \"tailwind-variants\";\r\nimport { InputGroup, InputGroupInput, InputGroupContentEditable } from \"../input\";\r\nimport { selectTriggerStyles } from \"../select/Select\";\r\n\r\nconst tagInputStyles = tv({\r\n\textend: selectTriggerStyles,\r\n\tbase: \"group/search-select-trigger flex h-auto min-h-10 flex-wrap items-center gap-1 !py-[0.3125rem] px-1.5 lg:h-auto lg:min-h-9 lg:px-1.5\"\r\n});\r\n\r\nconst inputStyles = tv({\r\n\tbase: \"min-w-28 rounded-none p-0 px-1.5 leading-6 read-only:w-0 read-only:min-w-0 lg:p-0 lg:px-1.5\"\r\n});\r\n\r\nconst editingDivStyles = tv({\r\n\tbase: \"p-0 px-1.5 outline-none lg:p-0 lg:px-1.5\"\r\n});\r\n\r\n/**\r\n * Пропсы для рендера тега\r\n */\r\nexport type RenderTagProps = {\r\n\t/** Значение тега (строка) */\r\n\ttag: string;\r\n\t/** Индекс тега в массиве */\r\n\tindex: number;\r\n\t/** Функция для удаления тега */\r\n\tonClose?: () => void;\r\n\t/** Функция для начала редактирования тега */\r\n\tonEdit?: () => void;\r\n\t/** Фокус на теге (для навигации с клавиатуры) */\r\n\tisFocused: boolean;\r\n\t/** Отключен ли компонент */\r\n\treadonly: boolean;\r\n};\r\n\r\n/**\r\n * Функция валидации тега по умолчанию\r\n */\r\nconst defaultValidateTag = (tag: string, allTags: string[], editingIndex?: number): boolean | string => {\r\n\tif (!tag.trim()) return \"Тег не может быть пустым\";\r\n\r\n\tif (editingIndex === undefined) {\r\n\t\t// Добавление нового тега\r\n\t\tif (allTags.includes(tag)) return \"Такой тег уже существует\";\r\n\t} else {\r\n\t\t// Редактирование существующего\r\n\t\tconst otherTags = allTags.filter((_, i) => i !== editingIndex);\r\n\t\tif (otherTags.includes(tag)) return \"Такой тег уже существует\";\r\n\t}\r\n\r\n\treturn true;\r\n};\r\n\r\nexport interface TagInputProps {\r\n\t/** Текущие выбранные опции (controlled режим) */\r\n\tvalue?: string[];\r\n\t/** Опции по умолчанию (uncontrolled режим) */\r\n\tdefaultValue?: string[];\r\n\t/** Callback при изменении выбранных опций */\r\n\tonChange?: (options: string[]) => void;\r\n\t/** Placeholder для input */\r\n\tplaceholder?: string;\r\n\t/** Отключить компонент */\r\n\treadonly?: boolean;\r\n\t/** CSS класс для контейнера */\r\n\tclassName?: string;\r\n\t/** Функция валидации тега. Если null - валидация отключена, если не передана - используется валидация по умолчанию */\r\n\tvalidateTag?: ((tag: string, allTags: string[], editingIndex?: number) => boolean | string) | null;\r\n\t/** Состояние ошибки */\r\n\tinvalid?: boolean;\r\n\t/** Кастомная функция рендера тега */\r\n\trenderOption?: (props: RenderTagProps) => React.ReactNode;\r\n}\r\n\r\n/**\r\n * Компонент для ввода и отображения тегов\r\n */\r\nexport const TagInput = React.forwardRef<HTMLDivElement, TagInputProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tvalue,\r\n\t\t\tdefaultValue = [],\r\n\t\t\tonChange,\r\n\t\t\tplaceholder = \"Добавить тег...\",\r\n\t\t\treadonly = false,\r\n\t\t\tclassName,\r\n\t\t\tvalidateTag,\r\n\t\t\tinvalid,\r\n\t\t\trenderOption\r\n\t\t},\r\n\t\tref\r\n\t) => {\r\n\t\t// Состояние для ввода нового тега\r\n\t\tconst [inputValue, setInputValue] = useState(\"\");\r\n\t\tconst inputRef = useRef<HTMLInputElement>(null);\r\n\r\n\t\t// Управление тегами\r\n\t\tconst [tags = [], setTags] = useControllableState<string[]>({ value, defaultValue, onChange });\r\n\r\n\t\tconst styles = tagInputStyles({ className, invalid });\r\n\t\tconst removeTag = useCallback(\r\n\t\t\t(index: number) => {\r\n\t\t\t\tif (readonly) return;\r\n\t\t\t\tsetTags(tags.filter((_, i) => i !== index));\r\n\t\t\t},\r\n\t\t\t[tags, setTags, readonly]\r\n\t\t);\r\n\r\n\t\t// Состояние для режима редактирования существующих тегов\r\n\t\tconst [editingIndex, setEditingIndex] = useState<number | null>(null);\r\n\t\tconst editingRef = useRef<HTMLDivElement>(null);\r\n\r\n\t\t/**\r\n\t\t * Функция валидации тега\r\n\t\t */\r\n\t\tconst validateTagValue = useCallback(\r\n\t\t\t(tag: string, editingIndex?: number): boolean => {\r\n\t\t\t\tif (validateTag === null) return true;\r\n\r\n\t\t\t\tconst validator = validateTag || defaultValidateTag;\r\n\t\t\t\tconst result = validator(tag, tags, editingIndex);\r\n\r\n\t\t\t\treturn result === true;\r\n\t\t\t},\r\n\t\t\t[validateTag, tags]\r\n\t\t);\r\n\r\n\t\t/**\r\n\t\t * Переключение в режим редактирования существующего тега\r\n\t\t */\r\n\t\tconst startEditing = useCallback(\r\n\t\t\t(index: number) => {\r\n\t\t\t\tif (readonly) return;\r\n\t\t\t\tsetEditingIndex(index);\r\n\t\t\t\t// Фокусируем элемент после обновления состояния\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tif (editingRef.current) {\r\n\t\t\t\t\t\t// Устанавливаем содержимое напрямую, без использования React state\r\n\t\t\t\t\t\teditingRef.current.textContent = tags[index];\r\n\t\t\t\t\t\teditingRef.current.focus();\r\n\t\t\t\t\t\t// Выделяем весь текст\r\n\t\t\t\t\t\tconst range = document.createRange();\r\n\t\t\t\t\t\trange.selectNodeContents(editingRef.current);\r\n\t\t\t\t\t\tconst selection = window.getSelection();\r\n\t\t\t\t\t\tselection?.removeAllRanges();\r\n\t\t\t\t\t\tselection?.addRange(range);\r\n\t\t\t\t\t}\r\n\t\t\t\t}, 0);\r\n\t\t\t},\r\n\t\t\t[tags, setEditingIndex, readonly]\r\n\t\t);\r\n\r\n\t\t/**\r\n\t\t * Отмена редактирования тега\r\n\t\t */\r\n\t\tconst cancelEditing = useCallback(() => {\r\n\t\t\tsetEditingIndex(null);\r\n\t\t\tsetTimeout(() => inputRef.current?.focus(), 0);\r\n\t\t}, [setEditingIndex]);\r\n\r\n\t\t/**\r\n\t\t * Обработчик нажатия Enter на теге: переключает текущий тег в режим редактирования\r\n\t\t */\r\n\t\tconst onEnter = useCallback((_: string, index: number) => startEditing(index), [startEditing]);\r\n\r\n\t\tconst handleDeleteTag = useCallback((_: string, index: number) => removeTag(index), [removeTag]);\r\n\r\n\t\t/**\r\n\t\t * Хук для навигации по тегам с помощью клавиатуры (вперед/назад)\r\n\t\t */\r\n\t\tconst { handleKeyDown: handleTagsKeyDown, isFocused } = useItemsKeyboardNavigation({\r\n\t\t\titems: tags,\r\n\t\t\tonEnter,\r\n\t\t\tonDelete: handleDeleteTag,\r\n\t\t\tcycleNavigation: true\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * Сохранение изменений в текущем теге\r\n\t\t */\r\n\t\tconst saveEditing = useCallback(() => {\r\n\t\t\tif (editingIndex !== null && editingRef.current) {\r\n\t\t\t\tconst newValue = editingRef.current.textContent?.trim() || \"\";\r\n\r\n\t\t\t\tif (newValue && validateTagValue(newValue, editingIndex)) {\r\n\t\t\t\t\tconst newTags = [...tags];\r\n\t\t\t\t\tnewTags[editingIndex] = newValue;\r\n\t\t\t\t\tsetTags(newTags);\r\n\t\t\t\t\tsetEditingIndex(null);\r\n\t\t\t\t\t// Возвращаем фокус в input и устанавливаем фокус на отредактированный элемент\r\n\t\t\t\t\tsetTimeout(() => inputRef.current?.focus(), 0);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, [editingIndex, editingRef, tags, setEditingIndex, setTags, validateTagValue]);\r\n\r\n\t\t/**\r\n\t\t * Добавление нового тега\r\n\t\t */\r\n\t\tconst addNewTag = useCallback(\r\n\t\t\t(tagValue: string) => {\r\n\t\t\t\tconst trimmedTag = tagValue.trim();\r\n\t\t\t\tif (trimmedTag && validateTagValue(trimmedTag)) {\r\n\t\t\t\t\tsetTags([...tags, trimmedTag]);\r\n\t\t\t\t\tsetInputValue(\"\");\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t[tags, setTags, setInputValue, validateTagValue]\r\n\t\t);\r\n\r\n\t\t/**\r\n\t\t * Обработчик нажатия клавиш на input:\r\n\t\t * - Если нажат Enter и input не пустой, добавляет новый тег\r\n\t\t * - Если input пустой, обрабатывает навигацию по тегам\r\n\t\t */\r\n\t\tconst handleInputKeyDown = useCallback(\r\n\t\t\t(e: KeyboardEvent<HTMLInputElement>) => {\r\n\t\t\t\tif (e.key === \"Enter\" && inputValue.trim()) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\taddNewTag(inputValue);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (!inputValue.trim()) {\r\n\t\t\t\t\thandleTagsKeyDown(e);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t[inputValue, handleTagsKeyDown, addNewTag]\r\n\t\t);\r\n\r\n\t\t/**\r\n\t\t * Обработчик потери фокуса input - добавляет тег если он не пустой\r\n\t\t */\r\n\t\tconst handleInputBlur = useCallback(() => {\r\n\t\t\tif (inputValue.trim()) {\r\n\t\t\t\taddNewTag(inputValue);\r\n\t\t\t}\r\n\t\t}, [inputValue, addNewTag]);\r\n\r\n\t\tconst handleEditingKeyDown = useCallback(\r\n\t\t\t(e: KeyboardEvent<HTMLDivElement>) => {\r\n\t\t\t\tif (e.key === \"Enter\") {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tsaveEditing();\r\n\t\t\t\t} else if (e.key === \"Escape\") {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tcancelEditing();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t[saveEditing, cancelEditing]\r\n\t\t);\r\n\r\n\t\tconst renderTags = useCallback(() => {\r\n\t\t\treturn tags.map((tag, index) => {\r\n\t\t\t\tif (editingIndex === index) {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<InputGroupContentEditable\r\n\t\t\t\t\t\t\tkey={`editing-${index}`}\r\n\t\t\t\t\t\t\tref={editingRef}\r\n\t\t\t\t\t\t\tclassName={editingDivStyles()}\r\n\t\t\t\t\t\t\tonKeyDown={handleEditingKeyDown}\r\n\t\t\t\t\t\t\tonBlur={cancelEditing}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (renderOption) {\r\n\t\t\t\t\tconst item = renderOption({\r\n\t\t\t\t\t\ttag,\r\n\t\t\t\t\t\tindex,\r\n\t\t\t\t\t\tonClose: () => removeTag(index),\r\n\t\t\t\t\t\tonEdit: () => startEditing(index),\r\n\t\t\t\t\t\tisFocused: !readonly && isFocused(index),\r\n\t\t\t\t\t\treadonly\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif (item !== undefined) {\r\n\t\t\t\t\t\treturn item;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<SearchSelectTag\r\n\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\tonLabelClick={() => startEditing(index)}\r\n\t\t\t\t\t\tonClose={() => removeTag(index)}\r\n\t\t\t\t\t\treadonly={readonly}\r\n\t\t\t\t\t\tisFocused={!readonly && isFocused(index)}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{tag}\r\n\t\t\t\t\t</SearchSelectTag>\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t}, [\r\n\t\t\teditingIndex,\r\n\t\t\teditingRef,\r\n\t\t\thandleEditingKeyDown,\r\n\t\t\tcancelEditing,\r\n\t\t\ttags,\r\n\t\t\treadonly,\r\n\t\t\tisFocused,\r\n\t\t\tremoveTag,\r\n\t\t\tstartEditing,\r\n\t\t\trenderOption\r\n\t\t]);\r\n\r\n\t\treturn (\r\n\t\t\t<InputGroup ref={ref} className={styles.base()}>\r\n\t\t\t\t{renderTags()}\r\n\t\t\t\t<InputGroupInput\r\n\t\t\t\t\tref={inputRef}\r\n\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\tvalue={inputValue}\r\n\t\t\t\t\tonChange={(e) => setInputValue(e.target.value)}\r\n\t\t\t\t\tonKeyDown={handleInputKeyDown}\r\n\t\t\t\t\tonBlur={handleInputBlur}\r\n\t\t\t\t\tplaceholder={readonly ? \"\" : placeholder}\r\n\t\t\t\t\tclassName={inputStyles()}\r\n\t\t\t\t\treadOnly={readonly}\r\n\t\t\t\t\taria-invalid={invalid}\r\n\t\t\t\t/>\r\n\t\t\t</InputGroup>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nTagInput.displayName = \"TagInput\";\r\n"],"names":["tagInputStyles","tv","selectTriggerStyles","inputStyles","editingDivStyles","defaultValidateTag","tag","allTags","editingIndex","_","i","TagInput","React","value","defaultValue","onChange","placeholder","readonly","className","validateTag","invalid","renderOption","ref","inputValue","setInputValue","useState","inputRef","useRef","tags","setTags","useControllableState","styles","removeTag","useCallback","index","setEditingIndex","editingRef","validateTagValue","startEditing","range","selection","cancelEditing","onEnter","handleDeleteTag","handleTagsKeyDown","isFocused","useItemsKeyboardNavigation","saveEditing","newValue","newTags","addNewTag","tagValue","trimmedTag","handleInputKeyDown","e","handleInputBlur","handleEditingKeyDown","renderTags","jsx","InputGroupContentEditable","item","SearchSelectTag","InputGroup","InputGroupInput"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tag-input.js","sources":["../../src/components/tag-input/TagInput.tsx"],"sourcesContent":["import { SearchSelectTag } from \"@/components/search-select/components/SearchSelectTag\";\nimport { useControllableState } from \"@/hooks/useControllableState\";\nimport { useItemsKeyboardNavigation } from \"@/hooks/useItemsKeyboardNavigation\";\nimport React, { KeyboardEvent, useCallback, useRef, useState } from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport { InputGroup, InputGroupInput, InputGroupContentEditable } from \"../input\";\nimport { selectTriggerStyles } from \"../select/Select\";\n\nconst tagInputStyles = tv({\n\textend: selectTriggerStyles,\n\tbase: \"group/search-select-trigger flex h-auto min-h-10 flex-wrap items-center gap-1 !py-[0.3125rem] px-1.5 lg:h-auto lg:min-h-9 lg:px-1.5\"\n});\n\nconst inputStyles = tv({\n\tbase: \"min-w-28 rounded-none p-0 px-1.5 leading-6 read-only:w-0 read-only:min-w-0 lg:p-0 lg:px-1.5\"\n});\n\nconst editingDivStyles = tv({\n\tbase: \"p-0 px-1.5 outline-none lg:p-0 lg:px-1.5\"\n});\n\n/**\n * Пропсы для рендера тега\n */\nexport type RenderTagProps = {\n\t/** Значение тега (строка) */\n\ttag: string;\n\t/** Индекс тега в массиве */\n\tindex: number;\n\t/** Функция для удаления тега */\n\tonClose?: () => void;\n\t/** Функция для начала редактирования тега */\n\tonEdit?: () => void;\n\t/** Фокус на теге (для навигации с клавиатуры) */\n\tisFocused: boolean;\n\t/** Отключен ли компонент */\n\treadonly: boolean;\n};\n\n/**\n * Функция валидации тега по умолчанию\n */\nconst defaultValidateTag = (tag: string, allTags: string[], editingIndex?: number): boolean | string => {\n\tif (!tag.trim()) return \"Тег не может быть пустым\";\n\n\tif (editingIndex === undefined) {\n\t\t// Добавление нового тега\n\t\tif (allTags.includes(tag)) return \"Такой тег уже существует\";\n\t} else {\n\t\t// Редактирование существующего\n\t\tconst otherTags = allTags.filter((_, i) => i !== editingIndex);\n\t\tif (otherTags.includes(tag)) return \"Такой тег уже существует\";\n\t}\n\n\treturn true;\n};\n\nexport interface TagInputProps {\n\t/** Текущие выбранные опции (controlled режим) */\n\tvalue?: string[];\n\t/** Опции по умолчанию (uncontrolled режим) */\n\tdefaultValue?: string[];\n\t/** Callback при изменении выбранных опций */\n\tonChange?: (options: string[]) => void;\n\t/** Placeholder для input */\n\tplaceholder?: string;\n\t/** Отключить компонент */\n\treadonly?: boolean;\n\t/** CSS класс для контейнера */\n\tclassName?: string;\n\t/** Функция валидации тега. Если null - валидация отключена, если не передана - используется валидация по умолчанию */\n\tvalidateTag?: ((tag: string, allTags: string[], editingIndex?: number) => boolean | string) | null;\n\t/** Состояние ошибки */\n\tinvalid?: boolean;\n\t/** Кастомная функция рендера тега */\n\trenderOption?: (props: RenderTagProps) => React.ReactNode;\n}\n\n/**\n * Компонент для ввода и отображения тегов\n */\nexport const TagInput = React.forwardRef<HTMLDivElement, TagInputProps>(\n\t(\n\t\t{\n\t\t\tvalue,\n\t\t\tdefaultValue = [],\n\t\t\tonChange,\n\t\t\tplaceholder = \"Добавить тег...\",\n\t\t\treadonly = false,\n\t\t\tclassName,\n\t\t\tvalidateTag,\n\t\t\tinvalid,\n\t\t\trenderOption\n\t\t},\n\t\tref\n\t) => {\n\t\t// Состояние для ввода нового тега\n\t\tconst [inputValue, setInputValue] = useState(\"\");\n\t\tconst inputRef = useRef<HTMLInputElement>(null);\n\n\t\t// Управление тегами\n\t\tconst [tags = [], setTags] = useControllableState<string[]>({ value, defaultValue, onChange });\n\n\t\tconst styles = tagInputStyles({ className, invalid });\n\t\tconst removeTag = useCallback(\n\t\t\t(index: number) => {\n\t\t\t\tif (readonly) return;\n\t\t\t\tsetTags(tags.filter((_, i) => i !== index));\n\t\t\t},\n\t\t\t[tags, setTags, readonly]\n\t\t);\n\n\t\t// Состояние для режима редактирования существующих тегов\n\t\tconst [editingIndex, setEditingIndex] = useState<number | null>(null);\n\t\tconst editingRef = useRef<HTMLDivElement>(null);\n\n\t\t/**\n\t\t * Функция валидации тега\n\t\t */\n\t\tconst validateTagValue = useCallback(\n\t\t\t(tag: string, editingIndex?: number): boolean => {\n\t\t\t\tif (validateTag === null) return true;\n\n\t\t\t\tconst validator = validateTag || defaultValidateTag;\n\t\t\t\tconst result = validator(tag, tags, editingIndex);\n\n\t\t\t\treturn result === true;\n\t\t\t},\n\t\t\t[validateTag, tags]\n\t\t);\n\n\t\t/**\n\t\t * Переключение в режим редактирования существующего тега\n\t\t */\n\t\tconst startEditing = useCallback(\n\t\t\t(index: number) => {\n\t\t\t\tif (readonly) return;\n\t\t\t\tsetEditingIndex(index);\n\t\t\t\t// Фокусируем элемент после обновления состояния\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (editingRef.current) {\n\t\t\t\t\t\t// Устанавливаем содержимое напрямую, без использования React state\n\t\t\t\t\t\teditingRef.current.textContent = tags[index];\n\t\t\t\t\t\teditingRef.current.focus();\n\t\t\t\t\t\t// Выделяем весь текст\n\t\t\t\t\t\tconst range = document.createRange();\n\t\t\t\t\t\trange.selectNodeContents(editingRef.current);\n\t\t\t\t\t\tconst selection = window.getSelection();\n\t\t\t\t\t\tselection?.removeAllRanges();\n\t\t\t\t\t\tselection?.addRange(range);\n\t\t\t\t\t}\n\t\t\t\t}, 0);\n\t\t\t},\n\t\t\t[tags, setEditingIndex, readonly]\n\t\t);\n\n\t\t/**\n\t\t * Отмена редактирования тега\n\t\t */\n\t\tconst cancelEditing = useCallback(() => {\n\t\t\tsetEditingIndex(null);\n\t\t\tsetTimeout(() => inputRef.current?.focus(), 0);\n\t\t}, [setEditingIndex]);\n\n\t\t/**\n\t\t * Обработчик нажатия Enter на теге: переключает текущий тег в режим редактирования\n\t\t */\n\t\tconst onEnter = useCallback((_: string, index: number) => startEditing(index), [startEditing]);\n\n\t\tconst handleDeleteTag = useCallback((_: string, index: number) => removeTag(index), [removeTag]);\n\n\t\t/**\n\t\t * Хук для навигации по тегам с помощью клавиатуры (вперед/назад)\n\t\t */\n\t\tconst { handleKeyDown: handleTagsKeyDown, isFocused } = useItemsKeyboardNavigation({\n\t\t\titems: tags,\n\t\t\tonEnter,\n\t\t\tonDelete: handleDeleteTag,\n\t\t\tcycleNavigation: true\n\t\t});\n\n\t\t/**\n\t\t * Сохранение изменений в текущем теге\n\t\t */\n\t\tconst saveEditing = useCallback(() => {\n\t\t\tif (editingIndex !== null && editingRef.current) {\n\t\t\t\tconst newValue = editingRef.current.textContent?.trim() || \"\";\n\n\t\t\t\tif (newValue && validateTagValue(newValue, editingIndex)) {\n\t\t\t\t\tconst newTags = [...tags];\n\t\t\t\t\tnewTags[editingIndex] = newValue;\n\t\t\t\t\tsetTags(newTags);\n\t\t\t\t\tsetEditingIndex(null);\n\t\t\t\t\t// Возвращаем фокус в input и устанавливаем фокус на отредактированный элемент\n\t\t\t\t\tsetTimeout(() => inputRef.current?.focus(), 0);\n\t\t\t\t}\n\t\t\t}\n\t\t}, [editingIndex, editingRef, tags, setEditingIndex, setTags, validateTagValue]);\n\n\t\t/**\n\t\t * Добавление нового тега\n\t\t */\n\t\tconst addNewTag = useCallback(\n\t\t\t(tagValue: string) => {\n\t\t\t\tconst trimmedTag = tagValue.trim();\n\t\t\t\tif (trimmedTag && validateTagValue(trimmedTag)) {\n\t\t\t\t\tsetTags([...tags, trimmedTag]);\n\t\t\t\t\tsetInputValue(\"\");\n\t\t\t\t}\n\t\t\t},\n\t\t\t[tags, setTags, setInputValue, validateTagValue]\n\t\t);\n\n\t\t/**\n\t\t * Обработчик нажатия клавиш на input:\n\t\t * - Если нажат Enter и input не пустой, добавляет новый тег\n\t\t * - Если input пустой, обрабатывает навигацию по тегам\n\t\t */\n\t\tconst handleInputKeyDown = useCallback(\n\t\t\t(e: KeyboardEvent<HTMLInputElement>) => {\n\t\t\t\tif (e.key === \"Enter\" && inputValue.trim()) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\taddNewTag(inputValue);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!inputValue.trim()) {\n\t\t\t\t\thandleTagsKeyDown(e);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[inputValue, handleTagsKeyDown, addNewTag]\n\t\t);\n\n\t\t/**\n\t\t * Обработчик потери фокуса input - добавляет тег если он не пустой\n\t\t */\n\t\tconst handleInputBlur = useCallback(() => {\n\t\t\tif (inputValue.trim()) {\n\t\t\t\taddNewTag(inputValue);\n\t\t\t}\n\t\t}, [inputValue, addNewTag]);\n\n\t\tconst handleEditingKeyDown = useCallback(\n\t\t\t(e: KeyboardEvent<HTMLDivElement>) => {\n\t\t\t\tif (e.key === \"Enter\") {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsaveEditing();\n\t\t\t\t} else if (e.key === \"Escape\") {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tcancelEditing();\n\t\t\t\t}\n\t\t\t},\n\t\t\t[saveEditing, cancelEditing]\n\t\t);\n\n\t\tconst renderTags = useCallback(() => {\n\t\t\treturn tags.map((tag, index) => {\n\t\t\t\tif (editingIndex === index) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<InputGroupContentEditable\n\t\t\t\t\t\t\tkey={`editing-${index}`}\n\t\t\t\t\t\t\tref={editingRef}\n\t\t\t\t\t\t\tclassName={editingDivStyles()}\n\t\t\t\t\t\t\tonKeyDown={handleEditingKeyDown}\n\t\t\t\t\t\t\tonBlur={cancelEditing}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (renderOption) {\n\t\t\t\t\tconst item = renderOption({\n\t\t\t\t\t\ttag,\n\t\t\t\t\t\tindex,\n\t\t\t\t\t\tonClose: () => removeTag(index),\n\t\t\t\t\t\tonEdit: () => startEditing(index),\n\t\t\t\t\t\tisFocused: !readonly && isFocused(index),\n\t\t\t\t\t\treadonly\n\t\t\t\t\t});\n\t\t\t\t\tif (item !== undefined) {\n\t\t\t\t\t\treturn item;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\t<SearchSelectTag\n\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\tonLabelClick={() => startEditing(index)}\n\t\t\t\t\t\tonClose={() => removeTag(index)}\n\t\t\t\t\t\treadonly={readonly}\n\t\t\t\t\t\tisFocused={!readonly && isFocused(index)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{tag}\n\t\t\t\t\t</SearchSelectTag>\n\t\t\t\t);\n\t\t\t});\n\t\t}, [\n\t\t\teditingIndex,\n\t\t\teditingRef,\n\t\t\thandleEditingKeyDown,\n\t\t\tcancelEditing,\n\t\t\ttags,\n\t\t\treadonly,\n\t\t\tisFocused,\n\t\t\tremoveTag,\n\t\t\tstartEditing,\n\t\t\trenderOption\n\t\t]);\n\n\t\treturn (\n\t\t\t<InputGroup ref={ref} className={styles.base()}>\n\t\t\t\t{renderTags()}\n\t\t\t\t<InputGroupInput\n\t\t\t\t\tref={inputRef}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\tonChange={(e) => setInputValue(e.target.value)}\n\t\t\t\t\tonKeyDown={handleInputKeyDown}\n\t\t\t\t\tonBlur={handleInputBlur}\n\t\t\t\t\tplaceholder={readonly ? \"\" : placeholder}\n\t\t\t\t\tclassName={inputStyles()}\n\t\t\t\t\treadOnly={readonly}\n\t\t\t\t\taria-invalid={invalid}\n\t\t\t\t/>\n\t\t\t</InputGroup>\n\t\t);\n\t}\n);\n\nTagInput.displayName = \"TagInput\";\n"],"names":["tagInputStyles","tv","selectTriggerStyles","inputStyles","editingDivStyles","defaultValidateTag","tag","allTags","editingIndex","_","i","TagInput","React","value","defaultValue","onChange","placeholder","readonly","className","validateTag","invalid","renderOption","ref","inputValue","setInputValue","useState","inputRef","useRef","tags","setTags","useControllableState","styles","removeTag","useCallback","index","setEditingIndex","editingRef","validateTagValue","startEditing","range","selection","cancelEditing","onEnter","handleDeleteTag","handleTagsKeyDown","isFocused","useItemsKeyboardNavigation","saveEditing","newValue","newTags","addNewTag","tagValue","trimmedTag","handleInputKeyDown","e","handleInputBlur","handleEditingKeyDown","renderTags","jsx","InputGroupContentEditable","item","SearchSelectTag","InputGroup","InputGroupInput"],"mappings":"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"}
|