@octavius2929-personal/design-system 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,2134 @@
1
+ // src/theme/theme.css.ts
2
+ var modeNames = ["light", "dark", "sepia", "contrast"];
3
+ var schemaNames = ["tinta"];
4
+ var themes = { tinta: { light: "theme_themes_tinta_light__e3grur2v", dark: "theme_themes_tinta_dark__e3grur2w", sepia: "theme_themes_tinta_sepia__e3grur2x", contrast: "theme_themes_tinta_contrast__e3grur2y" } };
5
+ var vars = { font: { display: "var(--font-display__e3grur0)", text: "var(--font-text__e3grur1)", mono: "var(--font-mono__e3grur2)", black: "var(--font-black__e3grur3)" }, text: { eyebrow: { size: "var(--text-eyebrow-size__e3grur4)", lineHeight: "var(--text-eyebrow-lineHeight__e3grur5)", weight: "var(--text-eyebrow-weight__e3grur6)", letterSpacing: "var(--text-eyebrow-letterSpacing__e3grur7)" }, display: { size: "var(--text-display-size__e3grur8)", lineHeight: "var(--text-display-lineHeight__e3grur9)", weight: "var(--text-display-weight__e3grura)", letterSpacing: "var(--text-display-letterSpacing__e3grurb)" }, h1: { size: "var(--text-h1-size__e3grurc)", lineHeight: "var(--text-h1-lineHeight__e3grurd)", weight: "var(--text-h1-weight__e3grure)", letterSpacing: "var(--text-h1-letterSpacing__e3grurf)" }, h2: { size: "var(--text-h2-size__e3grurg)", lineHeight: "var(--text-h2-lineHeight__e3grurh)", weight: "var(--text-h2-weight__e3gruri)", letterSpacing: "var(--text-h2-letterSpacing__e3grurj)" }, h3: { size: "var(--text-h3-size__e3grurk)", lineHeight: "var(--text-h3-lineHeight__e3grurl)", weight: "var(--text-h3-weight__e3grurm)", letterSpacing: "var(--text-h3-letterSpacing__e3grurn)" }, h4: { size: "var(--text-h4-size__e3gruro)", lineHeight: "var(--text-h4-lineHeight__e3grurp)", weight: "var(--text-h4-weight__e3grurq)", letterSpacing: "var(--text-h4-letterSpacing__e3grurr)" }, body: { size: "var(--text-body-size__e3grurs)", lineHeight: "var(--text-body-lineHeight__e3grurt)", weight: "var(--text-body-weight__e3gruru)", letterSpacing: "var(--text-body-letterSpacing__e3grurv)" }, lead: { size: "var(--text-lead-size__e3grurw)", lineHeight: "var(--text-lead-lineHeight__e3grurx)", weight: "var(--text-lead-weight__e3grury)", letterSpacing: "var(--text-lead-letterSpacing__e3grurz)" }, small: { size: "var(--text-small-size__e3grur10)", lineHeight: "var(--text-small-lineHeight__e3grur11)", weight: "var(--text-small-weight__e3grur12)", letterSpacing: "var(--text-small-letterSpacing__e3grur13)" }, caption: { size: "var(--text-caption-size__e3grur14)", lineHeight: "var(--text-caption-lineHeight__e3grur15)", weight: "var(--text-caption-weight__e3grur16)", letterSpacing: "var(--text-caption-letterSpacing__e3grur17)" } }, space: { none: "var(--space-none__e3grur18)", xs: "var(--space-xs__e3grur19)", sm: "var(--space-sm__e3grur1a)", md: "var(--space-md__e3grur1b)", lg: "var(--space-lg__e3grur1c)", xl: "var(--space-xl__e3grur1d)", "2xl": "var(--space-2xl__e3grur1e)", "3xl": "var(--space-3xl__e3grur1f)", "4xl": "var(--space-4xl__e3grur1g)", "5xl": "var(--space-5xl__e3grur1h)" }, radius: { none: "var(--radius-none__e3grur1i)", sm: "var(--radius-sm__e3grur1j)", md: "var(--radius-md__e3grur1k)", lg: "var(--radius-lg__e3grur1l)", base: "var(--radius-base__e3grur1m)", full: "var(--radius-full__e3grur1n)" }, border: { hair: "var(--border-hair__e3grur1o)", rule: "var(--border-rule__e3grur1p)", heavy: "var(--border-heavy__e3grur1q)" }, tracking: { tight: "var(--tracking-tight__e3grur1r)", normal: "var(--tracking-normal__e3grur1s)", wide: "var(--tracking-wide__e3grur1t)", wider: "var(--tracking-wider__e3grur1u)", widest: "var(--tracking-widest__e3grur1v)" }, leading: { tight: "var(--leading-tight__e3grur1w)", snug: "var(--leading-snug__e3grur1x)", normal: "var(--leading-normal__e3grur1y)", relaxed: "var(--leading-relaxed__e3grur1z)" }, weight: { light: "var(--weight-light__e3grur20)", regular: "var(--weight-regular__e3grur21)", medium: "var(--weight-medium__e3grur22)", semibold: "var(--weight-semibold__e3grur23)", bold: "var(--weight-bold__e3grur24)" }, dur: { fast: "var(--dur-fast__e3grur25)", base: "var(--dur-base__e3grur26)", slow: "var(--dur-slow__e3grur27)" }, ease: { ink: "var(--ease-ink__e3grur28)" }, shadow: { sm: "var(--shadow-sm__e3grur29)", md: "var(--shadow-md__e3grur2a)", lg: "var(--shadow-lg__e3grur2b)" }, color: { bg1: "var(--color-bg1__e3grur2c)", bg2: "var(--color-bg2__e3grur2d)", bg3: "var(--color-bg3__e3grur2e)", bgInset: "var(--color-bgInset__e3grur2f)", fg1: "var(--color-fg1__e3grur2g)", fg2: "var(--color-fg2__e3grur2h)", fg3: "var(--color-fg3__e3grur2i)", fgOnAccent: "var(--color-fgOnAccent__e3grur2j)", border1: "var(--color-border1__e3grur2k)", border2: "var(--color-border2__e3grur2l)", borderStrong: "var(--color-borderStrong__e3grur2m)", accent: "var(--color-accent__e3grur2n)", accentHover: "var(--color-accentHover__e3grur2o)", accentSoft: "var(--color-accentSoft__e3grur2p)", ok: "var(--color-ok__e3grur2q)", warn: "var(--color-warn__e3grur2r)", danger: "var(--color-danger__e3grur2s)", info: "var(--color-info__e3grur2t)", scrim: "var(--color-scrim__e3grur2u)" } };
6
+
7
+ // src/hooks/use-toggle/index.ts
8
+ import { useCallback, useState } from "react";
9
+ function useToggle(initial = false) {
10
+ const [on, setOn] = useState(initial);
11
+ const toggle = useCallback(() => setOn((value) => !value), []);
12
+ return [on, toggle, setOn];
13
+ }
14
+
15
+ // src/components/button/use-styles.ts
16
+ import { useMemo as useMemo2 } from "react";
17
+
18
+ // src/theme/context/theme-context.tsx
19
+ import { createContext, useContext, useMemo, useState as useState2 } from "react";
20
+ import { jsx } from "react/jsx-runtime";
21
+ var noop = () => {
22
+ };
23
+ var DEFAULT_VALUE = {
24
+ schema: "tinta",
25
+ mode: "light",
26
+ themeClass: themes.tinta.light,
27
+ setSchema: noop,
28
+ setMode: noop,
29
+ toggleMode: noop
30
+ };
31
+ var ThemeContext = createContext(null);
32
+ function ThemeProvider({
33
+ children,
34
+ defaultSchema = "tinta",
35
+ defaultMode = "light"
36
+ }) {
37
+ const [schema, setSchema] = useState2(defaultSchema);
38
+ const [mode, setMode] = useState2(defaultMode);
39
+ const value = useMemo(
40
+ () => ({
41
+ schema,
42
+ mode,
43
+ themeClass: themes[schema][mode],
44
+ setSchema,
45
+ setMode,
46
+ toggleMode: () => setMode((current2) => current2 === "dark" ? "light" : "dark")
47
+ }),
48
+ [schema, mode]
49
+ );
50
+ return /* @__PURE__ */ jsx(ThemeContext.Provider, { value, children });
51
+ }
52
+ function useTheme() {
53
+ return useContext(ThemeContext) ?? DEFAULT_VALUE;
54
+ }
55
+
56
+ // src/components/button/use-styles.css.ts
57
+ var full = "use-styles_full__1pbtill4";
58
+ var root = "use-styles_root__1pbtill0";
59
+ var size = { sm: "use-styles_size_sm__1pbtill1", md: "use-styles_size_md__1pbtill2", lg: "use-styles_size_lg__1pbtill3" };
60
+ var tone = { filledInk: "use-styles_tone_filledInk__1pbtill5", filledAccent: "use-styles_tone_filledAccent__1pbtill6", outlineInk: "use-styles_tone_outlineInk__1pbtill7", outlineAccent: "use-styles_tone_outlineAccent__1pbtill8", ghostInk: "use-styles_tone_ghostInk__1pbtill9", ghostAccent: "use-styles_tone_ghostAccent__1pbtilla" };
61
+
62
+ // src/components/button/use-styles.ts
63
+ function toneKey(variant2, tone4) {
64
+ return `${variant2}${tone4 === "ink" ? "Ink" : "Accent"}`;
65
+ }
66
+ function useStyles({
67
+ variant: variant2 = "filled",
68
+ tone: tone4 = "ink",
69
+ size: size3 = "md",
70
+ full: full2,
71
+ className
72
+ }) {
73
+ const { themeClass } = useTheme();
74
+ const container = useMemo2(
75
+ () => [
76
+ themeClass,
77
+ root,
78
+ size[size3],
79
+ tone[toneKey(variant2, tone4)],
80
+ full2 && full,
81
+ className
82
+ ].filter(Boolean).join(" "),
83
+ [themeClass, variant2, tone4, size3, full2, className]
84
+ );
85
+ return { container };
86
+ }
87
+
88
+ // src/components/button/index.tsx
89
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
90
+ var ICON_SIZE = { sm: 14, md: 16, lg: 18 };
91
+ function Button({
92
+ variant: variant2,
93
+ tone: tone4,
94
+ size: size3 = "md",
95
+ startIcon: StartIcon,
96
+ endIcon: EndIcon,
97
+ full: full2,
98
+ className,
99
+ children,
100
+ ...rest
101
+ }) {
102
+ const { container } = useStyles({ variant: variant2, tone: tone4, size: size3, full: full2, className });
103
+ const iconSize = ICON_SIZE[size3];
104
+ return /* @__PURE__ */ jsxs("button", { className: container, ...rest, children: [
105
+ StartIcon && /* @__PURE__ */ jsx2(StartIcon, { size: iconSize }),
106
+ children,
107
+ EndIcon && /* @__PURE__ */ jsx2(EndIcon, { size: iconSize })
108
+ ] });
109
+ }
110
+
111
+ // src/components/divider/use-styles.ts
112
+ import { useMemo as useMemo3 } from "react";
113
+
114
+ // src/components/divider/use-styles.css.ts
115
+ var horizontal = "use-styles_horizontal__1n7v7yj1";
116
+ var label = "use-styles_label__1n7v7yj5";
117
+ var labelled = "use-styles_labelled__1n7v7yj3";
118
+ var line = "use-styles_line__1n7v7yj4";
119
+ var root2 = "use-styles_root__1n7v7yj0";
120
+ var vertical = "use-styles_vertical__1n7v7yj2";
121
+
122
+ // src/components/divider/use-styles.ts
123
+ function useStyles2({ vertical: vertical2, hasLabel }) {
124
+ const { themeClass } = useTheme();
125
+ const root24 = useMemo3(
126
+ () => [
127
+ themeClass,
128
+ root2,
129
+ hasLabel ? labelled : vertical2 ? vertical : horizontal
130
+ ].filter(Boolean).join(" "),
131
+ [themeClass, vertical2, hasLabel]
132
+ );
133
+ return { root: root24, line, label };
134
+ }
135
+
136
+ // src/components/divider/index.tsx
137
+ import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
138
+ function Divider({ vertical: vertical2, label: label7, ...rest }) {
139
+ const hasLabel = label7 != null;
140
+ const { root: root24, line: line2, label: labelClass } = useStyles2({ vertical: vertical2, hasLabel });
141
+ if (hasLabel) {
142
+ return /* @__PURE__ */ jsxs2("div", { role: "separator", className: root24, ...rest, children: [
143
+ /* @__PURE__ */ jsx3("span", { className: line2 }),
144
+ /* @__PURE__ */ jsx3("span", { className: labelClass, children: label7 }),
145
+ /* @__PURE__ */ jsx3("span", { className: line2 })
146
+ ] });
147
+ }
148
+ return /* @__PURE__ */ jsx3("div", { role: "separator", className: root24, ...rest });
149
+ }
150
+
151
+ // src/components/avatar/use-styles.ts
152
+ import { useMemo as useMemo4 } from "react";
153
+
154
+ // src/components/avatar/use-styles.css.ts
155
+ var root3 = "use-styles_root__1mn1rmu0";
156
+ var size2 = { sm: "use-styles_size_sm__1mn1rmu1", md: "use-styles_size_md__1mn1rmu2", lg: "use-styles_size_lg__1mn1rmu3" };
157
+ var variant = { "default": "use-styles_variant_default__1mn1rmu4", filled: "use-styles_variant_filled__1mn1rmu5" };
158
+
159
+ // src/components/avatar/use-styles.ts
160
+ function useStyles3({
161
+ size: size3 = "md",
162
+ filled,
163
+ className
164
+ }) {
165
+ const { themeClass } = useTheme();
166
+ const root24 = useMemo4(
167
+ () => [
168
+ themeClass,
169
+ root3,
170
+ size2[size3],
171
+ filled ? variant.filled : variant.default,
172
+ className
173
+ ].filter(Boolean).join(" "),
174
+ [themeClass, size3, filled, className]
175
+ );
176
+ return { root: root24 };
177
+ }
178
+
179
+ // src/components/avatar/index.tsx
180
+ import { jsx as jsx4 } from "react/jsx-runtime";
181
+ function Avatar({ size: size3, filled, className, children, ...rest }) {
182
+ const { root: root24 } = useStyles3({ size: size3, filled, className });
183
+ return /* @__PURE__ */ jsx4("span", { className: root24, ...rest, children });
184
+ }
185
+
186
+ // src/components/badge/use-styles.ts
187
+ import { useMemo as useMemo5 } from "react";
188
+
189
+ // src/components/badge/use-styles.css.ts
190
+ var dot = "use-styles_dot__1wpei6p1";
191
+ var root4 = "use-styles_root__1wpei6p0";
192
+ var tone2 = { ink: "use-styles_tone_ink__1wpei6p2", accent: "use-styles_tone_accent__1wpei6p3" };
193
+
194
+ // src/components/badge/use-styles.ts
195
+ function useStyles4({ tone: tone4 = "ink", className }) {
196
+ const { themeClass } = useTheme();
197
+ const root24 = useMemo5(
198
+ () => [themeClass, root4, className].filter(Boolean).join(" "),
199
+ [themeClass, className]
200
+ );
201
+ const dot3 = useMemo5(() => [dot, tone2[tone4]].join(" "), [tone4]);
202
+ return { root: root24, dot: dot3 };
203
+ }
204
+
205
+ // src/components/badge/index.tsx
206
+ import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
207
+ function Badge({ count, tone: tone4, className, children, ...rest }) {
208
+ const { root: root24, dot: dot3 } = useStyles4({ tone: tone4, className });
209
+ return /* @__PURE__ */ jsxs3("span", { className: root24, ...rest, children: [
210
+ children,
211
+ count != null && /* @__PURE__ */ jsx5("span", { className: dot3, children: count })
212
+ ] });
213
+ }
214
+
215
+ // src/components/progress/use-styles.ts
216
+ import { useMemo as useMemo6 } from "react";
217
+
218
+ // src/components/progress/use-styles.css.ts
219
+ var bar = "use-styles_bar__kbop7v3";
220
+ var indeterminate = "use-styles_indeterminate__kbop7v4";
221
+ var spinner = "use-styles_spinner__kbop7v5";
222
+ var track = "use-styles_track__kbop7v2";
223
+
224
+ // src/components/progress/use-styles.ts
225
+ function useStyles5({
226
+ variant: variant2 = "linear",
227
+ value,
228
+ className
229
+ }) {
230
+ const { themeClass } = useTheme();
231
+ const indeterminate2 = value === void 0;
232
+ return useMemo6(() => {
233
+ const root24 = (...classes) => [themeClass, ...classes, className].filter(Boolean).join(" ");
234
+ if (variant2 === "circular") {
235
+ return { track: "", bar: "", spinner: root24(spinner) };
236
+ }
237
+ return {
238
+ track: root24(track),
239
+ bar: [bar, indeterminate2 && indeterminate].filter(Boolean).join(" "),
240
+ spinner: ""
241
+ };
242
+ }, [themeClass, variant2, indeterminate2, className]);
243
+ }
244
+
245
+ // src/components/progress/index.tsx
246
+ import { jsx as jsx6 } from "react/jsx-runtime";
247
+ function Progress({
248
+ variant: variant2 = "linear",
249
+ value,
250
+ size: size3 = 20,
251
+ className,
252
+ ...rest
253
+ }) {
254
+ const { track: track4, bar: bar2, spinner: spinner2 } = useStyles5({ variant: variant2, value, className });
255
+ const indeterminate2 = value === void 0;
256
+ if (variant2 === "circular") {
257
+ return /* @__PURE__ */ jsx6(
258
+ "span",
259
+ {
260
+ className: spinner2,
261
+ role: "progressbar",
262
+ "aria-valuenow": indeterminate2 ? void 0 : value,
263
+ "aria-valuemin": indeterminate2 ? void 0 : 0,
264
+ "aria-valuemax": indeterminate2 ? void 0 : 100,
265
+ style: { width: size3, height: size3 },
266
+ ...rest
267
+ }
268
+ );
269
+ }
270
+ return /* @__PURE__ */ jsx6(
271
+ "div",
272
+ {
273
+ className: track4,
274
+ role: "progressbar",
275
+ "aria-valuenow": indeterminate2 ? void 0 : value,
276
+ "aria-valuemin": indeterminate2 ? void 0 : 0,
277
+ "aria-valuemax": indeterminate2 ? void 0 : 100,
278
+ ...rest,
279
+ children: /* @__PURE__ */ jsx6("div", { className: bar2, style: indeterminate2 ? void 0 : { width: `${value}%` } })
280
+ }
281
+ );
282
+ }
283
+
284
+ // src/components/icons/x/index.tsx
285
+ import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
286
+ function XIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
287
+ return /* @__PURE__ */ jsxs4(
288
+ "svg",
289
+ {
290
+ xmlns: "http://www.w3.org/2000/svg",
291
+ width: size3,
292
+ height: size3,
293
+ viewBox: "0 0 24 24",
294
+ fill: "none",
295
+ stroke: "currentColor",
296
+ strokeWidth,
297
+ strokeLinecap: "round",
298
+ strokeLinejoin: "round",
299
+ "aria-hidden": "true",
300
+ ...rest,
301
+ children: [
302
+ /* @__PURE__ */ jsx7("path", { d: "M18 6 6 18" }),
303
+ /* @__PURE__ */ jsx7("path", { d: "m6 6 12 12" })
304
+ ]
305
+ }
306
+ );
307
+ }
308
+
309
+ // src/components/chip/use-styles.ts
310
+ import { useMemo as useMemo7 } from "react";
311
+
312
+ // src/components/chip/use-styles.css.ts
313
+ var clickable = "use-styles_clickable__1axilf44";
314
+ var deleteBtn = "use-styles_deleteBtn__1axilf45";
315
+ var root5 = "use-styles_root__1axilf40";
316
+ var selected = "use-styles_selected__1axilf43";
317
+ var tone3 = { ink: "use-styles_tone_ink__1axilf41", accent: "use-styles_tone_accent__1axilf42" };
318
+
319
+ // src/components/chip/use-styles.ts
320
+ function useStyles6({
321
+ selected: selected3,
322
+ tone: tone4 = "ink",
323
+ clickable: clickable2
324
+ }) {
325
+ const { themeClass } = useTheme();
326
+ const root24 = useMemo7(
327
+ () => [
328
+ themeClass,
329
+ root5,
330
+ selected3 ? selected : tone3[tone4],
331
+ clickable2 && clickable
332
+ ].filter(Boolean).join(" "),
333
+ [themeClass, selected3, tone4, clickable2]
334
+ );
335
+ return { root: root24, deleteBtn };
336
+ }
337
+
338
+ // src/components/chip/index.tsx
339
+ import { jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
340
+ function Chip({ selected: selected3, tone: tone4, onDelete, onClick, children, ...rest }) {
341
+ const clickable2 = Boolean(onClick);
342
+ const { root: root24, deleteBtn: deleteBtn2 } = useStyles6({ selected: selected3, tone: tone4, clickable: clickable2 });
343
+ const handleDelete = (event) => {
344
+ event.stopPropagation();
345
+ onDelete?.();
346
+ };
347
+ return /* @__PURE__ */ jsxs5("span", { className: root24, onClick, ...rest, children: [
348
+ children,
349
+ onDelete && /* @__PURE__ */ jsx8("button", { type: "button", className: deleteBtn2, "aria-label": "Remove", onClick: handleDelete, children: /* @__PURE__ */ jsx8(XIcon, { size: 13 }) })
350
+ ] });
351
+ }
352
+
353
+ // src/components/icons/check/index.tsx
354
+ import { jsx as jsx9 } from "react/jsx-runtime";
355
+ function CheckIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
356
+ return /* @__PURE__ */ jsx9(
357
+ "svg",
358
+ {
359
+ xmlns: "http://www.w3.org/2000/svg",
360
+ width: size3,
361
+ height: size3,
362
+ viewBox: "0 0 24 24",
363
+ fill: "none",
364
+ stroke: "currentColor",
365
+ strokeWidth,
366
+ strokeLinecap: "round",
367
+ strokeLinejoin: "round",
368
+ "aria-hidden": "true",
369
+ ...rest,
370
+ children: /* @__PURE__ */ jsx9("path", { d: "M20 6 9 17l-5-5" })
371
+ }
372
+ );
373
+ }
374
+
375
+ // src/components/checkbox/use-styles.ts
376
+ import { useMemo as useMemo8 } from "react";
377
+
378
+ // src/components/checkbox/use-styles.css.ts
379
+ var box = "use-styles_box__9zoga92";
380
+ var boxChecked = "use-styles_boxChecked__9zoga93";
381
+ var check = "use-styles_check__9zoga94";
382
+ var disabled = "use-styles_disabled__9zoga95";
383
+ var input = "use-styles_input__9zoga91";
384
+ var root6 = "use-styles_root__9zoga90";
385
+
386
+ // src/components/checkbox/use-styles.ts
387
+ function useStyles7({ checked, disabled: disabled3 }) {
388
+ const { themeClass } = useTheme();
389
+ const root24 = useMemo8(
390
+ () => [themeClass, root6, disabled3 && disabled].filter(Boolean).join(" "),
391
+ [themeClass, disabled3]
392
+ );
393
+ const box2 = useMemo8(
394
+ () => [box, checked && boxChecked].filter(Boolean).join(" "),
395
+ [checked]
396
+ );
397
+ return { root: root24, input, box: box2, check };
398
+ }
399
+
400
+ // src/components/checkbox/index.tsx
401
+ import { jsx as jsx10, jsxs as jsxs6 } from "react/jsx-runtime";
402
+ function Checkbox({
403
+ checked = false,
404
+ onChange,
405
+ label: label7,
406
+ disabled: disabled3 = false,
407
+ id
408
+ }) {
409
+ const { root: root24, input: input6, box: box2, check: check2 } = useStyles7({ checked, disabled: disabled3 });
410
+ const handleChange = (e) => {
411
+ if (disabled3) return;
412
+ onChange?.(e.target.checked);
413
+ };
414
+ return /* @__PURE__ */ jsxs6("label", { className: root24, children: [
415
+ /* @__PURE__ */ jsx10(
416
+ "input",
417
+ {
418
+ type: "checkbox",
419
+ className: input6,
420
+ id,
421
+ checked,
422
+ disabled: disabled3,
423
+ onChange: handleChange
424
+ }
425
+ ),
426
+ /* @__PURE__ */ jsx10("span", { className: box2, children: checked && /* @__PURE__ */ jsx10(CheckIcon, { size: 12, className: check2 }) }),
427
+ label7
428
+ ] });
429
+ }
430
+
431
+ // src/components/radio/use-styles.ts
432
+ import { useMemo as useMemo9 } from "react";
433
+
434
+ // src/components/radio/use-styles.css.ts
435
+ var circle = "use-styles_circle__vy61b43";
436
+ var disabled2 = "use-styles_disabled__vy61b41";
437
+ var dot2 = "use-styles_dot__vy61b44";
438
+ var input2 = "use-styles_input__vy61b42";
439
+ var label2 = "use-styles_label__vy61b45";
440
+ var root7 = "use-styles_root__vy61b40";
441
+
442
+ // src/components/radio/use-styles.ts
443
+ function useStyles8({
444
+ disabled: disabled3,
445
+ className
446
+ }) {
447
+ const { themeClass } = useTheme();
448
+ const root24 = useMemo9(
449
+ () => [themeClass, root7, disabled3 && disabled2, className].filter(Boolean).join(" "),
450
+ [themeClass, disabled3, className]
451
+ );
452
+ return {
453
+ root: root24,
454
+ input: input2,
455
+ circle,
456
+ dot: dot2,
457
+ label: label2
458
+ };
459
+ }
460
+
461
+ // src/components/radio/index.tsx
462
+ import { jsx as jsx11, jsxs as jsxs7 } from "react/jsx-runtime";
463
+ function Radio({ checked, onChange, label: label7, name, value, disabled: disabled3 }) {
464
+ const { root: root24, input: input6, circle: circle2, dot: dot3, label: labelClass } = useStyles8({ disabled: disabled3 });
465
+ return /* @__PURE__ */ jsxs7("label", { className: root24, children: [
466
+ /* @__PURE__ */ jsx11(
467
+ "input",
468
+ {
469
+ className: input6,
470
+ type: "radio",
471
+ name,
472
+ value,
473
+ checked,
474
+ disabled: disabled3,
475
+ onChange
476
+ }
477
+ ),
478
+ /* @__PURE__ */ jsx11("span", { className: circle2, children: checked && /* @__PURE__ */ jsx11("span", { className: dot3 }) }),
479
+ label7 != null && /* @__PURE__ */ jsx11("span", { className: labelClass, children: label7 })
480
+ ] });
481
+ }
482
+
483
+ // src/components/switch/use-styles.ts
484
+ import { useMemo as useMemo10 } from "react";
485
+
486
+ // src/components/switch/use-styles.css.ts
487
+ var input3 = "use-styles_input__1r6kem71";
488
+ var knob = "use-styles_knob__1r6kem74";
489
+ var knobChecked = "use-styles_knobChecked__1r6kem75";
490
+ var label3 = "use-styles_label__1r6kem76";
491
+ var root8 = "use-styles_root__1r6kem70";
492
+ var track2 = "use-styles_track__1r6kem72";
493
+ var trackChecked = "use-styles_trackChecked__1r6kem73";
494
+
495
+ // src/components/switch/use-styles.ts
496
+ function useStyles9({ checked }) {
497
+ const { themeClass } = useTheme();
498
+ return useMemo10(
499
+ () => ({
500
+ root: [themeClass, root8].filter(Boolean).join(" "),
501
+ input: input3,
502
+ track: [track2, checked && trackChecked].filter(Boolean).join(" "),
503
+ knob: [knob, checked && knobChecked].filter(Boolean).join(" "),
504
+ label: label3
505
+ }),
506
+ [themeClass, checked]
507
+ );
508
+ }
509
+
510
+ // src/components/switch/index.tsx
511
+ import { jsx as jsx12, jsxs as jsxs8 } from "react/jsx-runtime";
512
+ function Switch({ checked = false, onChange, label: label7, disabled: disabled3 }) {
513
+ const { root: root24, input: input6, track: track4, knob: knob2, label: labelClass } = useStyles9({ checked });
514
+ return /* @__PURE__ */ jsxs8("label", { className: root24, children: [
515
+ /* @__PURE__ */ jsx12(
516
+ "input",
517
+ {
518
+ type: "checkbox",
519
+ role: "switch",
520
+ "aria-checked": checked,
521
+ className: input6,
522
+ checked,
523
+ disabled: disabled3,
524
+ onChange: (event) => {
525
+ if (disabled3) return;
526
+ onChange?.(event.target.checked);
527
+ }
528
+ }
529
+ ),
530
+ /* @__PURE__ */ jsx12("span", { className: track4, children: /* @__PURE__ */ jsx12("span", { className: knob2 }) }),
531
+ label7 != null && /* @__PURE__ */ jsx12("span", { className: labelClass, children: label7 })
532
+ ] });
533
+ }
534
+
535
+ // src/components/text-field/index.tsx
536
+ import {
537
+ useId,
538
+ useState as useState3
539
+ } from "react";
540
+
541
+ // src/components/icons/eye/index.tsx
542
+ import { jsx as jsx13, jsxs as jsxs9 } from "react/jsx-runtime";
543
+ function EyeIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
544
+ return /* @__PURE__ */ jsxs9(
545
+ "svg",
546
+ {
547
+ xmlns: "http://www.w3.org/2000/svg",
548
+ width: size3,
549
+ height: size3,
550
+ viewBox: "0 0 24 24",
551
+ fill: "none",
552
+ stroke: "currentColor",
553
+ strokeWidth,
554
+ strokeLinecap: "round",
555
+ strokeLinejoin: "round",
556
+ "aria-hidden": "true",
557
+ ...rest,
558
+ children: [
559
+ /* @__PURE__ */ jsx13("path", { d: "M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z" }),
560
+ /* @__PURE__ */ jsx13("circle", { cx: "12", cy: "12", r: "3" })
561
+ ]
562
+ }
563
+ );
564
+ }
565
+
566
+ // src/components/icons/eye-off/index.tsx
567
+ import { jsx as jsx14, jsxs as jsxs10 } from "react/jsx-runtime";
568
+ function EyeOffIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
569
+ return /* @__PURE__ */ jsxs10(
570
+ "svg",
571
+ {
572
+ xmlns: "http://www.w3.org/2000/svg",
573
+ width: size3,
574
+ height: size3,
575
+ viewBox: "0 0 24 24",
576
+ fill: "none",
577
+ stroke: "currentColor",
578
+ strokeWidth,
579
+ strokeLinecap: "round",
580
+ strokeLinejoin: "round",
581
+ "aria-hidden": "true",
582
+ ...rest,
583
+ children: [
584
+ /* @__PURE__ */ jsx14("path", { d: "M9.88 9.88a3 3 0 1 0 4.24 4.24" }),
585
+ /* @__PURE__ */ jsx14("path", { d: "M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68" }),
586
+ /* @__PURE__ */ jsx14("path", { d: "M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61" }),
587
+ /* @__PURE__ */ jsx14("path", { d: "m2 2 20 20" })
588
+ ]
589
+ }
590
+ );
591
+ }
592
+
593
+ // src/components/text-field/use-styles.ts
594
+ import { useMemo as useMemo11 } from "react";
595
+
596
+ // src/components/text-field/use-styles.css.ts
597
+ var field = "use-styles_field__vat8gv3";
598
+ var helpText = "use-styles_helpText__vat8gv8";
599
+ var helpTextError = "use-styles_helpTextError__vat8gv9";
600
+ var input4 = "use-styles_input__vat8gv4";
601
+ var inputError = "use-styles_inputError__vat8gv5";
602
+ var inputRevealPad = "use-styles_inputRevealPad__vat8gv7";
603
+ var inputStartPad = "use-styles_inputStartPad__vat8gv6";
604
+ var labelText = "use-styles_labelText__vat8gv1";
605
+ var labelTextError = "use-styles_labelTextError__vat8gv2";
606
+ var revealButton = "use-styles_revealButton__vat8gvb";
607
+ var root9 = "use-styles_root__vat8gv0";
608
+ var startIcon = "use-styles_startIcon__vat8gva";
609
+
610
+ // src/components/text-field/use-styles.ts
611
+ function useStyles10({ error, hasStartIcon, hasReveal, className }) {
612
+ const { themeClass } = useTheme();
613
+ return useMemo11(() => {
614
+ const root24 = [themeClass, root9].filter(Boolean).join(" ");
615
+ const labelText2 = [labelText, error && labelTextError].filter(Boolean).join(" ");
616
+ const input6 = [
617
+ input4,
618
+ error && inputError,
619
+ hasStartIcon && inputStartPad,
620
+ hasReveal && inputRevealPad,
621
+ className
622
+ ].filter(Boolean).join(" ");
623
+ const helpText2 = [helpText, error && helpTextError].filter(Boolean).join(" ");
624
+ return {
625
+ root: root24,
626
+ labelText: labelText2,
627
+ field,
628
+ input: input6,
629
+ helpText: helpText2,
630
+ startIcon,
631
+ revealButton
632
+ };
633
+ }, [themeClass, error, hasStartIcon, hasReveal, className]);
634
+ }
635
+
636
+ // src/components/text-field/index.tsx
637
+ import { jsx as jsx15, jsxs as jsxs11 } from "react/jsx-runtime";
638
+ function TextField({
639
+ label: label7,
640
+ help,
641
+ error,
642
+ startIcon: StartIcon,
643
+ multiline,
644
+ rows,
645
+ type = "text",
646
+ onChange,
647
+ className,
648
+ id,
649
+ ...rest
650
+ }) {
651
+ const [reveal, setReveal] = useState3(false);
652
+ const isPassword = type === "password";
653
+ const hasReveal = isPassword;
654
+ const effectiveType = isPassword ? reveal ? "text" : "password" : type;
655
+ const autoId = useId();
656
+ const controlId = id ?? autoId;
657
+ const classes = useStyles10({
658
+ error,
659
+ hasStartIcon: Boolean(StartIcon),
660
+ hasReveal,
661
+ className
662
+ });
663
+ const handleInputChange = (e) => {
664
+ onChange?.(e.target.value);
665
+ };
666
+ const handleTextareaChange = (e) => {
667
+ onChange?.(e.target.value);
668
+ };
669
+ const handleToggleMouseDown = (e) => {
670
+ e.preventDefault();
671
+ };
672
+ return /* @__PURE__ */ jsxs11("div", { className: classes.root, children: [
673
+ label7 != null && /* @__PURE__ */ jsx15("label", { htmlFor: controlId, className: classes.labelText, children: label7 }),
674
+ /* @__PURE__ */ jsxs11("div", { className: classes.field, children: [
675
+ StartIcon != null && /* @__PURE__ */ jsx15("span", { className: classes.startIcon, children: /* @__PURE__ */ jsx15(StartIcon, { size: 18 }) }),
676
+ multiline ? /* @__PURE__ */ jsx15(
677
+ "textarea",
678
+ {
679
+ id: controlId,
680
+ className: classes.input,
681
+ rows: rows ?? 4,
682
+ onChange: handleTextareaChange,
683
+ ...rest
684
+ }
685
+ ) : /* @__PURE__ */ jsx15(
686
+ "input",
687
+ {
688
+ id: controlId,
689
+ className: classes.input,
690
+ type: effectiveType,
691
+ onChange: handleInputChange,
692
+ ...rest
693
+ }
694
+ ),
695
+ hasReveal && /* @__PURE__ */ jsx15(
696
+ "button",
697
+ {
698
+ type: "button",
699
+ tabIndex: -1,
700
+ className: classes.revealButton,
701
+ "aria-label": reveal ? "Ocultar contrase\xF1a" : "Mostrar contrase\xF1a",
702
+ onMouseDown: handleToggleMouseDown,
703
+ onClick: () => setReveal((r) => !r),
704
+ children: reveal ? /* @__PURE__ */ jsx15(EyeOffIcon, { size: 18 }) : /* @__PURE__ */ jsx15(EyeIcon, { size: 18 })
705
+ }
706
+ )
707
+ ] }),
708
+ help != null && /* @__PURE__ */ jsx15("span", { className: classes.helpText, children: help })
709
+ ] });
710
+ }
711
+
712
+ // src/components/icon-button/use-styles.ts
713
+ import { useMemo as useMemo12 } from "react";
714
+
715
+ // src/components/icon-button/use-styles.css.ts
716
+ var accent = "use-styles_accent__18np0q02";
717
+ var active = "use-styles_active__18np0q01";
718
+ var root10 = "use-styles_root__18np0q00";
719
+
720
+ // src/components/icon-button/use-styles.ts
721
+ function useStyles11({
722
+ active: active2 = false,
723
+ tone: tone4 = "ink"
724
+ }) {
725
+ const { themeClass } = useTheme();
726
+ const root24 = useMemo12(
727
+ () => [themeClass, root10, tone4 === "accent" && accent, active2 && active].filter(Boolean).join(" "),
728
+ [themeClass, active2, tone4]
729
+ );
730
+ return { root: root24 };
731
+ }
732
+
733
+ // src/components/icon-button/index.tsx
734
+ import { jsx as jsx16 } from "react/jsx-runtime";
735
+ function IconButton({ icon: Icon, active: active2, tone: tone4, title, ...rest }) {
736
+ const { root: root24 } = useStyles11({ active: active2, tone: tone4 });
737
+ return /* @__PURE__ */ jsx16("button", { className: root24, "aria-label": title, title, ...rest, children: /* @__PURE__ */ jsx16(Icon, { size: 18 }) });
738
+ }
739
+
740
+ // src/components/card/use-styles.ts
741
+ import { useMemo as useMemo13 } from "react";
742
+
743
+ // src/components/card/use-styles.css.ts
744
+ var body = "use-styles_body__1fuvd022";
745
+ var footer = "use-styles_footer__1fuvd023";
746
+ var header = "use-styles_header__1fuvd021";
747
+ var root11 = "use-styles_root__1fuvd020";
748
+
749
+ // src/components/card/use-styles.ts
750
+ function useStyles12() {
751
+ const { themeClass } = useTheme();
752
+ const root24 = useMemo13(() => `${themeClass} ${root11}`, [themeClass]);
753
+ return { root: root24, header, body, footer };
754
+ }
755
+
756
+ // src/components/card/index.tsx
757
+ import { jsx as jsx17 } from "react/jsx-runtime";
758
+ function CardRoot({ children, ...rest }) {
759
+ const { root: root24 } = useStyles12();
760
+ return /* @__PURE__ */ jsx17("div", { className: root24, ...rest, children });
761
+ }
762
+ function CardHeader({ children, ...rest }) {
763
+ const { header: header3 } = useStyles12();
764
+ return /* @__PURE__ */ jsx17("div", { className: header3, ...rest, children });
765
+ }
766
+ function CardBody({ children, ...rest }) {
767
+ const { body: body4 } = useStyles12();
768
+ return /* @__PURE__ */ jsx17("div", { className: body4, ...rest, children });
769
+ }
770
+ function CardFooter({ children, ...rest }) {
771
+ const { footer: footer2 } = useStyles12();
772
+ return /* @__PURE__ */ jsx17("div", { className: footer2, ...rest, children });
773
+ }
774
+ CardRoot.displayName = "Card";
775
+ CardHeader.displayName = "Card.Header";
776
+ CardBody.displayName = "Card.Body";
777
+ CardFooter.displayName = "Card.Footer";
778
+ var Card = Object.assign(CardRoot, {
779
+ Header: CardHeader,
780
+ Body: CardBody,
781
+ Footer: CardFooter
782
+ });
783
+
784
+ // src/components/icons/circle-check/index.tsx
785
+ import { jsx as jsx18, jsxs as jsxs12 } from "react/jsx-runtime";
786
+ function CircleCheckIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
787
+ return /* @__PURE__ */ jsxs12(
788
+ "svg",
789
+ {
790
+ xmlns: "http://www.w3.org/2000/svg",
791
+ width: size3,
792
+ height: size3,
793
+ viewBox: "0 0 24 24",
794
+ fill: "none",
795
+ stroke: "currentColor",
796
+ strokeWidth,
797
+ strokeLinecap: "round",
798
+ strokeLinejoin: "round",
799
+ "aria-hidden": "true",
800
+ ...rest,
801
+ children: [
802
+ /* @__PURE__ */ jsx18("circle", { cx: "12", cy: "12", r: "10" }),
803
+ /* @__PURE__ */ jsx18("path", { d: "m9 12 2 2 4-4" })
804
+ ]
805
+ }
806
+ );
807
+ }
808
+
809
+ // src/components/icons/circle-x/index.tsx
810
+ import { jsx as jsx19, jsxs as jsxs13 } from "react/jsx-runtime";
811
+ function CircleXIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
812
+ return /* @__PURE__ */ jsxs13(
813
+ "svg",
814
+ {
815
+ xmlns: "http://www.w3.org/2000/svg",
816
+ width: size3,
817
+ height: size3,
818
+ viewBox: "0 0 24 24",
819
+ fill: "none",
820
+ stroke: "currentColor",
821
+ strokeWidth,
822
+ strokeLinecap: "round",
823
+ strokeLinejoin: "round",
824
+ "aria-hidden": "true",
825
+ ...rest,
826
+ children: [
827
+ /* @__PURE__ */ jsx19("circle", { cx: "12", cy: "12", r: "10" }),
828
+ /* @__PURE__ */ jsx19("path", { d: "m15 9-6 6" }),
829
+ /* @__PURE__ */ jsx19("path", { d: "m9 9 6 6" })
830
+ ]
831
+ }
832
+ );
833
+ }
834
+
835
+ // src/components/icons/info/index.tsx
836
+ import { jsx as jsx20, jsxs as jsxs14 } from "react/jsx-runtime";
837
+ function InfoIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
838
+ return /* @__PURE__ */ jsxs14(
839
+ "svg",
840
+ {
841
+ xmlns: "http://www.w3.org/2000/svg",
842
+ width: size3,
843
+ height: size3,
844
+ viewBox: "0 0 24 24",
845
+ fill: "none",
846
+ stroke: "currentColor",
847
+ strokeWidth,
848
+ strokeLinecap: "round",
849
+ strokeLinejoin: "round",
850
+ "aria-hidden": "true",
851
+ ...rest,
852
+ children: [
853
+ /* @__PURE__ */ jsx20("circle", { cx: "12", cy: "12", r: "10" }),
854
+ /* @__PURE__ */ jsx20("path", { d: "M12 16v-4" }),
855
+ /* @__PURE__ */ jsx20("path", { d: "M12 8h.01" })
856
+ ]
857
+ }
858
+ );
859
+ }
860
+
861
+ // src/components/icons/triangle-alert/index.tsx
862
+ import { jsx as jsx21, jsxs as jsxs15 } from "react/jsx-runtime";
863
+ function TriangleAlertIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
864
+ return /* @__PURE__ */ jsxs15(
865
+ "svg",
866
+ {
867
+ xmlns: "http://www.w3.org/2000/svg",
868
+ width: size3,
869
+ height: size3,
870
+ viewBox: "0 0 24 24",
871
+ fill: "none",
872
+ stroke: "currentColor",
873
+ strokeWidth,
874
+ strokeLinecap: "round",
875
+ strokeLinejoin: "round",
876
+ "aria-hidden": "true",
877
+ ...rest,
878
+ children: [
879
+ /* @__PURE__ */ jsx21("path", { d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z" }),
880
+ /* @__PURE__ */ jsx21("path", { d: "M12 9v4" }),
881
+ /* @__PURE__ */ jsx21("path", { d: "M12 17h.01" })
882
+ ]
883
+ }
884
+ );
885
+ }
886
+
887
+ // src/components/alert/use-styles.ts
888
+ import { useMemo as useMemo14 } from "react";
889
+
890
+ // src/components/alert/use-styles.css.ts
891
+ var body2 = "use-styles_body__ivsh6u8";
892
+ var content = "use-styles_content__ivsh6u6";
893
+ var iconSlot = "use-styles_iconSlot__ivsh6u5";
894
+ var root12 = "use-styles_root__ivsh6u0";
895
+ var severity = { info: "use-styles_severity_info__ivsh6u1", ok: "use-styles_severity_ok__ivsh6u2", warn: "use-styles_severity_warn__ivsh6u3", danger: "use-styles_severity_danger__ivsh6u4" };
896
+ var titleText = "use-styles_titleText__ivsh6u7";
897
+
898
+ // src/components/alert/use-styles.ts
899
+ function useStyles13({
900
+ severity: severity2 = "info",
901
+ className
902
+ }) {
903
+ const { themeClass } = useTheme();
904
+ const root24 = useMemo14(
905
+ () => [themeClass, root12, severity[severity2], className].filter(Boolean).join(" "),
906
+ [themeClass, severity2, className]
907
+ );
908
+ return {
909
+ root: root24,
910
+ iconSlot,
911
+ content,
912
+ titleText,
913
+ body: body2
914
+ };
915
+ }
916
+
917
+ // src/components/alert/index.tsx
918
+ import { jsx as jsx22, jsxs as jsxs16 } from "react/jsx-runtime";
919
+ var defaultIcons = {
920
+ info: InfoIcon,
921
+ ok: CircleCheckIcon,
922
+ warn: TriangleAlertIcon,
923
+ danger: CircleXIcon
924
+ };
925
+ function Alert({
926
+ severity: severity2 = "info",
927
+ title,
928
+ icon,
929
+ className,
930
+ children,
931
+ ...rest
932
+ }) {
933
+ const styles = useStyles13({ severity: severity2, className });
934
+ const IconComponent = icon ?? defaultIcons[severity2];
935
+ return /* @__PURE__ */ jsxs16("div", { role: "alert", className: styles.root, ...rest, children: [
936
+ /* @__PURE__ */ jsx22("span", { className: styles.iconSlot, children: /* @__PURE__ */ jsx22(IconComponent, {}) }),
937
+ /* @__PURE__ */ jsxs16("div", { className: styles.content, children: [
938
+ title != null && /* @__PURE__ */ jsx22("div", { className: styles.titleText, children: title }),
939
+ children != null && /* @__PURE__ */ jsx22("div", { className: styles.body, children })
940
+ ] })
941
+ ] });
942
+ }
943
+
944
+ // src/components/tooltip/index.tsx
945
+ import { cloneElement, useId as useId2, useState as useState4 } from "react";
946
+
947
+ // src/components/tooltip/use-styles.ts
948
+ import { useMemo as useMemo15 } from "react";
949
+
950
+ // src/components/tooltip/use-styles.css.ts
951
+ var bubble = "use-styles_bubble__h9kvh1";
952
+ var placement = { top: "use-styles_placement_top__h9kvh2", bottom: "use-styles_placement_bottom__h9kvh3" };
953
+ var wrapper = "use-styles_wrapper__h9kvh0";
954
+
955
+ // src/components/tooltip/use-styles.ts
956
+ function useStyles14({ placement: placement2 = "top" }) {
957
+ const { themeClass } = useTheme();
958
+ const wrapper4 = useMemo15(
959
+ () => [themeClass, wrapper].filter(Boolean).join(" "),
960
+ [themeClass]
961
+ );
962
+ const bubble2 = useMemo15(
963
+ () => [bubble, placement[placement2]].filter(Boolean).join(" "),
964
+ [placement2]
965
+ );
966
+ return { wrapper: wrapper4, bubble: bubble2 };
967
+ }
968
+
969
+ // src/components/tooltip/index.tsx
970
+ import { jsx as jsx23, jsxs as jsxs17 } from "react/jsx-runtime";
971
+ function Tooltip({ label: label7, children, placement: placement2 }) {
972
+ const [open, setOpen] = useState4(false);
973
+ const tooltipId = useId2();
974
+ const { wrapper: wrapper4, bubble: bubble2 } = useStyles14({ placement: placement2 });
975
+ const show = () => setOpen(true);
976
+ const hide = () => setOpen(false);
977
+ const previousDescribedBy = children.props["aria-describedby"];
978
+ const describedBy = open ? [previousDescribedBy, tooltipId].filter(Boolean).join(" ") : previousDescribedBy;
979
+ const trigger2 = cloneElement(children, { "aria-describedby": describedBy });
980
+ return /* @__PURE__ */ jsxs17("span", { className: wrapper4, onMouseEnter: show, onMouseLeave: hide, onFocus: show, onBlur: hide, children: [
981
+ trigger2,
982
+ open && /* @__PURE__ */ jsx23("span", { id: tooltipId, role: "tooltip", className: bubble2, children: label7 })
983
+ ] });
984
+ }
985
+
986
+ // src/components/select/index.tsx
987
+ import { useEffect, useId as useId3, useRef, useState as useState5 } from "react";
988
+
989
+ // src/components/icons/chevron-down/index.tsx
990
+ import { jsx as jsx24 } from "react/jsx-runtime";
991
+ function ChevronDownIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
992
+ return /* @__PURE__ */ jsx24(
993
+ "svg",
994
+ {
995
+ xmlns: "http://www.w3.org/2000/svg",
996
+ width: size3,
997
+ height: size3,
998
+ viewBox: "0 0 24 24",
999
+ fill: "none",
1000
+ stroke: "currentColor",
1001
+ strokeWidth,
1002
+ strokeLinecap: "round",
1003
+ strokeLinejoin: "round",
1004
+ "aria-hidden": "true",
1005
+ ...rest,
1006
+ children: /* @__PURE__ */ jsx24("path", { d: "m6 9 6 6 6-6" })
1007
+ }
1008
+ );
1009
+ }
1010
+
1011
+ // src/components/select/use-styles.ts
1012
+ import { useMemo as useMemo16 } from "react";
1013
+
1014
+ // src/components/select/use-styles.css.ts
1015
+ var chevron = "use-styles_chevron__1w1czpb4";
1016
+ var chevronOpen = "use-styles_chevronOpen__1w1czpb5";
1017
+ var label4 = "use-styles_label__1w1czpb1";
1018
+ var menu = "use-styles_menu__1w1czpb6";
1019
+ var option = "use-styles_option__1w1czpb7";
1020
+ var optionActive = "use-styles_optionActive__1w1czpb9";
1021
+ var optionSelected = "use-styles_optionSelected__1w1czpb8";
1022
+ var placeholder = "use-styles_placeholder__1w1czpb3";
1023
+ var root13 = "use-styles_root__1w1czpb0";
1024
+ var trigger = "use-styles_trigger__1w1czpb2";
1025
+
1026
+ // src/components/select/use-styles.ts
1027
+ function useStyles15({
1028
+ open = false
1029
+ }) {
1030
+ const { themeClass } = useTheme();
1031
+ return useMemo16(() => {
1032
+ const chevron3 = [chevron, open && chevronOpen].filter(Boolean).join(" ");
1033
+ return {
1034
+ root: [themeClass, root13].filter(Boolean).join(" "),
1035
+ label: label4,
1036
+ trigger,
1037
+ placeholder,
1038
+ chevron: chevron3,
1039
+ menu,
1040
+ optionClass: (selected3, active2) => [option, selected3 && optionSelected, active2 && optionActive].filter(Boolean).join(" ")
1041
+ };
1042
+ }, [themeClass, open]);
1043
+ }
1044
+
1045
+ // src/components/select/index.tsx
1046
+ import { jsx as jsx25, jsxs as jsxs18 } from "react/jsx-runtime";
1047
+ function Select({ options, value, onChange, placeholder: placeholder2, label: label7, disabled: disabled3 }) {
1048
+ const [open, setOpen] = useState5(false);
1049
+ const [activeIndex, setActiveIndex] = useState5(0);
1050
+ const rootRef = useRef(null);
1051
+ const baseId = useId3();
1052
+ const labelId = `${baseId}-label`;
1053
+ const optionId = (index) => `${baseId}-option-${index}`;
1054
+ const {
1055
+ root: root24,
1056
+ label: labelClass,
1057
+ trigger: trigger2,
1058
+ placeholder: placeholderClass,
1059
+ chevron: chevron3,
1060
+ menu: menu2,
1061
+ optionClass
1062
+ } = useStyles15({ open });
1063
+ useEffect(() => {
1064
+ if (!open) return;
1065
+ const onPointerDown = (event) => {
1066
+ if (rootRef.current && !rootRef.current.contains(event.target)) {
1067
+ setOpen(false);
1068
+ }
1069
+ };
1070
+ document.addEventListener("mousedown", onPointerDown);
1071
+ return () => document.removeEventListener("mousedown", onPointerDown);
1072
+ }, [open]);
1073
+ const selected3 = options.find((option2) => option2.value === value);
1074
+ const selectAt = (index) => {
1075
+ const option2 = options[index];
1076
+ if (option2) onChange?.(option2.value);
1077
+ setOpen(false);
1078
+ };
1079
+ const handleSelect = (optionValue) => {
1080
+ onChange?.(optionValue);
1081
+ setOpen(false);
1082
+ };
1083
+ const openMenu = () => {
1084
+ const current2 = options.findIndex((option2) => option2.value === value);
1085
+ setActiveIndex(current2 >= 0 ? current2 : 0);
1086
+ setOpen(true);
1087
+ };
1088
+ const handleKeyDown = (event) => {
1089
+ if (disabled3) return;
1090
+ switch (event.key) {
1091
+ case "Escape":
1092
+ setOpen(false);
1093
+ break;
1094
+ case "ArrowDown":
1095
+ event.preventDefault();
1096
+ if (!open) {
1097
+ openMenu();
1098
+ } else {
1099
+ setActiveIndex((index) => (index + 1) % options.length);
1100
+ }
1101
+ break;
1102
+ case "ArrowUp":
1103
+ event.preventDefault();
1104
+ if (!open) {
1105
+ openMenu();
1106
+ } else {
1107
+ setActiveIndex((index) => (index - 1 + options.length) % options.length);
1108
+ }
1109
+ break;
1110
+ case "Enter":
1111
+ case " ":
1112
+ event.preventDefault();
1113
+ if (!open) {
1114
+ openMenu();
1115
+ } else {
1116
+ selectAt(activeIndex);
1117
+ }
1118
+ break;
1119
+ default:
1120
+ break;
1121
+ }
1122
+ };
1123
+ return /* @__PURE__ */ jsxs18("div", { ref: rootRef, className: root24, children: [
1124
+ label7 && /* @__PURE__ */ jsx25("span", { id: labelId, className: labelClass, children: label7 }),
1125
+ /* @__PURE__ */ jsxs18(
1126
+ "button",
1127
+ {
1128
+ type: "button",
1129
+ className: trigger2,
1130
+ disabled: disabled3,
1131
+ "aria-haspopup": "listbox",
1132
+ "aria-expanded": open,
1133
+ "aria-labelledby": label7 ? labelId : void 0,
1134
+ "aria-activedescendant": open ? optionId(activeIndex) : void 0,
1135
+ onClick: () => {
1136
+ if (disabled3) return;
1137
+ if (open) {
1138
+ setOpen(false);
1139
+ } else {
1140
+ openMenu();
1141
+ }
1142
+ },
1143
+ onKeyDown: handleKeyDown,
1144
+ children: [
1145
+ selected3 ? selected3.label : /* @__PURE__ */ jsx25("span", { className: placeholderClass, children: placeholder2 }),
1146
+ /* @__PURE__ */ jsx25("span", { className: chevron3, children: /* @__PURE__ */ jsx25(ChevronDownIcon, { size: 18 }) })
1147
+ ]
1148
+ }
1149
+ ),
1150
+ open && /* @__PURE__ */ jsx25("div", { className: menu2, role: "listbox", children: options.map((option2, index) => {
1151
+ const isSelected = option2.value === value;
1152
+ const isActive = index === activeIndex;
1153
+ return (
1154
+ // biome-ignore lint/a11y/useKeyWithClickEvents: keyboard nav lives on the trigger via aria-activedescendant; options are not focusable.
1155
+ /* @__PURE__ */ jsx25(
1156
+ "div",
1157
+ {
1158
+ id: optionId(index),
1159
+ role: "option",
1160
+ tabIndex: -1,
1161
+ "aria-selected": isSelected,
1162
+ className: optionClass(isSelected, isActive),
1163
+ onClick: () => handleSelect(option2.value),
1164
+ children: option2.label
1165
+ },
1166
+ option2.value
1167
+ )
1168
+ );
1169
+ }) })
1170
+ ] });
1171
+ }
1172
+
1173
+ // src/components/slider/use-styles.ts
1174
+ import { useMemo as useMemo17 } from "react";
1175
+
1176
+ // src/components/slider/use-styles.css.ts
1177
+ var input5 = "use-styles_input__okw59n3";
1178
+ var label5 = "use-styles_label__okw59n5";
1179
+ var range = "use-styles_range__okw59n2";
1180
+ var root14 = "use-styles_root__okw59n0";
1181
+ var thumb = "use-styles_thumb__okw59n4";
1182
+ var track3 = "use-styles_track__okw59n1";
1183
+ var wrapper2 = "use-styles_wrapper__okw59n6";
1184
+
1185
+ // src/components/slider/use-styles.ts
1186
+ function useStyles16() {
1187
+ const { themeClass } = useTheme();
1188
+ return useMemo17(() => {
1189
+ const root24 = [themeClass, root14].filter(Boolean).join(" ");
1190
+ return {
1191
+ wrapper: wrapper2,
1192
+ label: label5,
1193
+ root: root24,
1194
+ track: track3,
1195
+ range,
1196
+ thumb,
1197
+ input: input5
1198
+ };
1199
+ }, [themeClass]);
1200
+ }
1201
+
1202
+ // src/components/slider/index.tsx
1203
+ import { jsx as jsx26, jsxs as jsxs19 } from "react/jsx-runtime";
1204
+ function Slider({
1205
+ value = 0,
1206
+ onChange,
1207
+ min = 0,
1208
+ max = 100,
1209
+ step: step2 = 1,
1210
+ disabled: disabled3,
1211
+ label: label7
1212
+ }) {
1213
+ const { wrapper: wrapper4, label: labelClass, root: root24, track: track4, range: range2, thumb: thumb2, input: input6 } = useStyles16();
1214
+ const span = max - min;
1215
+ const percent = span > 0 ? (value - min) / span * 100 : 0;
1216
+ const clamped = Math.max(0, Math.min(100, percent));
1217
+ const handleChange = (e) => {
1218
+ onChange?.(Number(e.target.value));
1219
+ };
1220
+ return /* @__PURE__ */ jsxs19("span", { className: wrapper4, children: [
1221
+ label7 ? /* @__PURE__ */ jsx26("span", { className: labelClass, children: label7 }) : null,
1222
+ /* @__PURE__ */ jsxs19("span", { className: root24, children: [
1223
+ /* @__PURE__ */ jsx26("span", { className: track4 }),
1224
+ /* @__PURE__ */ jsx26("span", { className: range2, style: { width: `${clamped}%` } }),
1225
+ /* @__PURE__ */ jsx26(
1226
+ "input",
1227
+ {
1228
+ className: input6,
1229
+ type: "range",
1230
+ min,
1231
+ max,
1232
+ step: step2,
1233
+ value,
1234
+ disabled: disabled3,
1235
+ onChange: handleChange
1236
+ }
1237
+ ),
1238
+ /* @__PURE__ */ jsx26("span", { className: thumb2, style: { left: `${clamped}%` } })
1239
+ ] })
1240
+ ] });
1241
+ }
1242
+
1243
+ // src/components/accordion/index.tsx
1244
+ import { useState as useState6 } from "react";
1245
+
1246
+ // src/components/accordion/use-styles.ts
1247
+ import { useMemo as useMemo18 } from "react";
1248
+
1249
+ // src/components/accordion/use-styles.css.ts
1250
+ var chevron2 = "use-styles_chevron__1cjrdh93";
1251
+ var chevronOpen2 = "use-styles_chevronOpen__1cjrdh94";
1252
+ var header2 = "use-styles_header__1cjrdh92";
1253
+ var item = "use-styles_item__1cjrdh91";
1254
+ var panel = "use-styles_panel__1cjrdh95";
1255
+ var root15 = "use-styles_root__1cjrdh90";
1256
+
1257
+ // src/components/accordion/use-styles.ts
1258
+ function useStyles17({ className }) {
1259
+ const { themeClass } = useTheme();
1260
+ return useMemo18(
1261
+ () => ({
1262
+ root: [themeClass, root15, className].filter(Boolean).join(" "),
1263
+ item,
1264
+ header: header2,
1265
+ chevronFor: (open) => [chevron2, open && chevronOpen2].filter(Boolean).join(" "),
1266
+ panel
1267
+ }),
1268
+ [themeClass, className]
1269
+ );
1270
+ }
1271
+
1272
+ // src/components/accordion/index.tsx
1273
+ import { jsx as jsx27, jsxs as jsxs20 } from "react/jsx-runtime";
1274
+ function Accordion({
1275
+ items,
1276
+ multiple = false,
1277
+ defaultOpen = [],
1278
+ className
1279
+ }) {
1280
+ const [open, setOpen] = useState6(defaultOpen);
1281
+ const { root: root24, item: item3, header: header3, chevronFor, panel: panel2 } = useStyles17({ className });
1282
+ const toggle = (id) => {
1283
+ setOpen((current2) => {
1284
+ const isOpen = current2.includes(id);
1285
+ if (isOpen) return current2.filter((x) => x !== id);
1286
+ return multiple ? [...current2, id] : [id];
1287
+ });
1288
+ };
1289
+ return /* @__PURE__ */ jsx27("div", { className: root24, children: items.map((it) => {
1290
+ const isOpen = open.includes(it.id);
1291
+ const panelId = `accordion-panel-${it.id}`;
1292
+ const headerId = `accordion-header-${it.id}`;
1293
+ return /* @__PURE__ */ jsxs20("div", { className: item3, children: [
1294
+ /* @__PURE__ */ jsxs20(
1295
+ "button",
1296
+ {
1297
+ type: "button",
1298
+ id: headerId,
1299
+ className: header3,
1300
+ "aria-expanded": isOpen,
1301
+ "aria-controls": panelId,
1302
+ onClick: () => toggle(it.id),
1303
+ children: [
1304
+ it.title,
1305
+ /* @__PURE__ */ jsx27(ChevronDownIcon, { className: chevronFor(isOpen) })
1306
+ ]
1307
+ }
1308
+ ),
1309
+ isOpen && /* @__PURE__ */ jsx27("div", { id: panelId, className: panel2, role: "region", "aria-labelledby": headerId, children: it.content })
1310
+ ] }, it.id);
1311
+ }) });
1312
+ }
1313
+
1314
+ // src/components/breadcrumbs/index.tsx
1315
+ import { Fragment } from "react";
1316
+
1317
+ // src/components/icons/chevron-right/index.tsx
1318
+ import { jsx as jsx28 } from "react/jsx-runtime";
1319
+ function ChevronRightIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
1320
+ return /* @__PURE__ */ jsx28(
1321
+ "svg",
1322
+ {
1323
+ xmlns: "http://www.w3.org/2000/svg",
1324
+ width: size3,
1325
+ height: size3,
1326
+ viewBox: "0 0 24 24",
1327
+ fill: "none",
1328
+ stroke: "currentColor",
1329
+ strokeWidth,
1330
+ strokeLinecap: "round",
1331
+ strokeLinejoin: "round",
1332
+ "aria-hidden": "true",
1333
+ ...rest,
1334
+ children: /* @__PURE__ */ jsx28("path", { d: "m9 18 6-6-6-6" })
1335
+ }
1336
+ );
1337
+ }
1338
+
1339
+ // src/components/breadcrumbs/use-styles.ts
1340
+ import { useMemo as useMemo19 } from "react";
1341
+
1342
+ // src/components/breadcrumbs/use-styles.css.ts
1343
+ var crumb = "use-styles_crumb__7u0du61";
1344
+ var current = "use-styles_current__7u0du62";
1345
+ var root16 = "use-styles_root__7u0du60";
1346
+ var separator = "use-styles_separator__7u0du63";
1347
+
1348
+ // src/components/breadcrumbs/use-styles.ts
1349
+ function useStyles18({ className }) {
1350
+ const { themeClass } = useTheme();
1351
+ const root24 = useMemo19(
1352
+ () => [themeClass, root16, className].filter(Boolean).join(" "),
1353
+ [themeClass, className]
1354
+ );
1355
+ return { root: root24, crumb, current, separator };
1356
+ }
1357
+
1358
+ // src/components/breadcrumbs/index.tsx
1359
+ import { jsx as jsx29, jsxs as jsxs21 } from "react/jsx-runtime";
1360
+ function Breadcrumbs({ items, className, ...rest }) {
1361
+ const { root: root24, crumb: crumb2, current: current2, separator: separator2 } = useStyles18({ className });
1362
+ return /* @__PURE__ */ jsx29("nav", { "aria-label": "Breadcrumb", className: root24, ...rest, children: items.map((item3, index) => {
1363
+ const isLast = index === items.length - 1;
1364
+ const key = index;
1365
+ return /* @__PURE__ */ jsxs21(Fragment, { children: [
1366
+ isLast ? /* @__PURE__ */ jsx29("span", { className: current2, "aria-current": "page", children: item3.label }) : item3.href ? /* @__PURE__ */ jsx29("a", { className: crumb2, href: item3.href, children: item3.label }) : /* @__PURE__ */ jsx29("span", { className: crumb2, children: item3.label }),
1367
+ !isLast && /* @__PURE__ */ jsx29("span", { className: separator2, children: /* @__PURE__ */ jsx29(ChevronRightIcon, { size: 14 }) })
1368
+ ] }, key);
1369
+ }) });
1370
+ }
1371
+
1372
+ // src/components/icons/chevron-left/index.tsx
1373
+ import { jsx as jsx30 } from "react/jsx-runtime";
1374
+ function ChevronLeftIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
1375
+ return /* @__PURE__ */ jsx30(
1376
+ "svg",
1377
+ {
1378
+ xmlns: "http://www.w3.org/2000/svg",
1379
+ width: size3,
1380
+ height: size3,
1381
+ viewBox: "0 0 24 24",
1382
+ fill: "none",
1383
+ stroke: "currentColor",
1384
+ strokeWidth,
1385
+ strokeLinecap: "round",
1386
+ strokeLinejoin: "round",
1387
+ "aria-hidden": "true",
1388
+ ...rest,
1389
+ children: /* @__PURE__ */ jsx30("path", { d: "m15 18-6-6 6-6" })
1390
+ }
1391
+ );
1392
+ }
1393
+
1394
+ // src/components/pagination/use-styles.ts
1395
+ import { useMemo as useMemo20 } from "react";
1396
+
1397
+ // src/components/pagination/use-styles.css.ts
1398
+ var ellipsis = "use-styles_ellipsis__1azgzoh3";
1399
+ var nav = "use-styles_nav__1azgzoh4";
1400
+ var pageActive = "use-styles_pageActive__1azgzoh2";
1401
+ var pageBtn = "use-styles_pageBtn__1azgzoh1";
1402
+ var root17 = "use-styles_root__1azgzoh0";
1403
+
1404
+ // src/components/pagination/use-styles.ts
1405
+ function useStyles19() {
1406
+ const { themeClass } = useTheme();
1407
+ return useMemo20(
1408
+ () => ({
1409
+ root: [themeClass, root17].filter(Boolean).join(" "),
1410
+ pageBtnFor: (active2) => [pageBtn, active2 && pageActive].filter(Boolean).join(" "),
1411
+ ellipsis,
1412
+ nav: [pageBtn, nav].join(" ")
1413
+ }),
1414
+ [themeClass]
1415
+ );
1416
+ }
1417
+
1418
+ // src/components/pagination/index.tsx
1419
+ import { jsx as jsx31, jsxs as jsxs22 } from "react/jsx-runtime";
1420
+ function buildItems(count, page, siblingCount) {
1421
+ const total = Math.max(1, count);
1422
+ const first = 1;
1423
+ const last = total;
1424
+ const start = Math.max(first + 1, page - siblingCount);
1425
+ const end = Math.min(last - 1, page + siblingCount);
1426
+ const items = [first];
1427
+ if (start > first + 1) items.push("ellipsis");
1428
+ for (let n = start; n <= end; n++) items.push(n);
1429
+ if (end < last - 1) items.push("ellipsis");
1430
+ if (last > first) items.push(last);
1431
+ return items;
1432
+ }
1433
+ function Pagination({ count, page = 1, onChange, siblingCount = 1 }) {
1434
+ const { root: root24, pageBtnFor, ellipsis: ellipsis2, nav: nav2 } = useStyles19();
1435
+ const total = Math.max(1, count);
1436
+ const current2 = Math.min(Math.max(1, page), total);
1437
+ const items = buildItems(total, current2, siblingCount);
1438
+ const go = (n) => onChange?.(Math.min(Math.max(1, n), total));
1439
+ return /* @__PURE__ */ jsxs22("nav", { className: root24, "aria-label": "Pagination", children: [
1440
+ /* @__PURE__ */ jsx31(
1441
+ "button",
1442
+ {
1443
+ type: "button",
1444
+ className: nav2,
1445
+ "aria-label": "Previous page",
1446
+ disabled: current2 <= 1,
1447
+ onClick: () => go(current2 - 1),
1448
+ children: /* @__PURE__ */ jsx31(ChevronLeftIcon, { size: 18 })
1449
+ }
1450
+ ),
1451
+ items.map(
1452
+ (item3, index) => item3 === "ellipsis" ? (
1453
+ // biome-ignore lint/suspicious/noArrayIndexKey: ellipsis position is stable per render
1454
+ /* @__PURE__ */ jsx31("span", { className: ellipsis2, children: "\u2026" }, `ellipsis-${index}`)
1455
+ ) : /* @__PURE__ */ jsx31(
1456
+ "button",
1457
+ {
1458
+ type: "button",
1459
+ className: pageBtnFor(item3 === current2),
1460
+ "aria-current": item3 === current2 ? "page" : void 0,
1461
+ onClick: () => go(item3),
1462
+ children: item3
1463
+ },
1464
+ item3
1465
+ )
1466
+ ),
1467
+ /* @__PURE__ */ jsx31(
1468
+ "button",
1469
+ {
1470
+ type: "button",
1471
+ className: nav2,
1472
+ "aria-label": "Next page",
1473
+ disabled: current2 >= total,
1474
+ onClick: () => go(current2 + 1),
1475
+ children: /* @__PURE__ */ jsx31(ChevronRightIcon, { size: 18 })
1476
+ }
1477
+ )
1478
+ ] });
1479
+ }
1480
+
1481
+ // src/components/stepper/index.tsx
1482
+ import { Fragment as Fragment2 } from "react";
1483
+
1484
+ // src/components/stepper/use-styles.ts
1485
+ import { useMemo as useMemo21 } from "react";
1486
+
1487
+ // src/components/stepper/use-styles.css.ts
1488
+ var connector = "use-styles_connector__79pt4e7";
1489
+ var label6 = "use-styles_label__79pt4e5";
1490
+ var labelActive = "use-styles_labelActive__79pt4e6";
1491
+ var marker = "use-styles_marker__79pt4e2";
1492
+ var markerActive = "use-styles_markerActive__79pt4e3";
1493
+ var markerDone = "use-styles_markerDone__79pt4e4";
1494
+ var root18 = "use-styles_root__79pt4e0";
1495
+ var step = "use-styles_step__79pt4e1";
1496
+
1497
+ // src/components/stepper/use-styles.ts
1498
+ function useStyles20({ className }) {
1499
+ const { themeClass } = useTheme();
1500
+ return useMemo21(() => {
1501
+ const root24 = [themeClass, root18, className].filter(Boolean).join(" ");
1502
+ const markerFor = (state) => [
1503
+ marker,
1504
+ state === "active" && markerActive,
1505
+ state === "done" && markerDone
1506
+ ].filter(Boolean).join(" ");
1507
+ const labelFor = (active2) => [label6, active2 && labelActive].filter(Boolean).join(" ");
1508
+ return { root: root24, step, connector, markerFor, labelFor };
1509
+ }, [themeClass, className]);
1510
+ }
1511
+
1512
+ // src/components/stepper/index.tsx
1513
+ import { jsx as jsx32, jsxs as jsxs23 } from "react/jsx-runtime";
1514
+ function Stepper({ steps, active: active2 = 0, className, ...rest }) {
1515
+ const { root: root24, step: step2, connector: connector2, markerFor, labelFor } = useStyles20({ className });
1516
+ return /* @__PURE__ */ jsx32("div", { className: root24, ...rest, children: steps.map((s, index) => {
1517
+ const state = index < active2 ? "done" : index === active2 ? "active" : "upcoming";
1518
+ const isActive = state === "active";
1519
+ return (
1520
+ // biome-ignore lint/suspicious/noArrayIndexKey: steps are a static, ordered list with no stable id.
1521
+ /* @__PURE__ */ jsxs23(Fragment2, { children: [
1522
+ /* @__PURE__ */ jsxs23("div", { className: step2, "aria-current": isActive ? "step" : void 0, children: [
1523
+ /* @__PURE__ */ jsx32("span", { className: markerFor(state), children: state === "done" ? /* @__PURE__ */ jsx32(CheckIcon, { size: 14 }) : index + 1 }),
1524
+ /* @__PURE__ */ jsx32("span", { className: labelFor(isActive), children: s.label })
1525
+ ] }),
1526
+ index < steps.length - 1 && /* @__PURE__ */ jsx32("span", { "data-part": "connector", className: connector2 })
1527
+ ] }, index)
1528
+ );
1529
+ }) });
1530
+ }
1531
+
1532
+ // src/components/tabs/use-styles.ts
1533
+ import { useMemo as useMemo22 } from "react";
1534
+
1535
+ // src/components/tabs/use-styles.css.ts
1536
+ var root19 = "use-styles_root__1l4m7t40";
1537
+ var tab = "use-styles_tab__1l4m7t41";
1538
+ var tabActive = "use-styles_tabActive__1l4m7t42";
1539
+
1540
+ // src/components/tabs/use-styles.ts
1541
+ function useStyles21() {
1542
+ const { themeClass } = useTheme();
1543
+ return useMemo22(() => {
1544
+ const root24 = [themeClass, root19].filter(Boolean).join(" ");
1545
+ const tabClass = (active2) => [tab, active2 && tabActive].filter(Boolean).join(" ");
1546
+ return { root: root24, tab, tabClass };
1547
+ }, [themeClass]);
1548
+ }
1549
+
1550
+ // src/components/tabs/index.tsx
1551
+ import { jsx as jsx33 } from "react/jsx-runtime";
1552
+ function Tabs({ items, value, onChange }) {
1553
+ const { root: root24, tabClass } = useStyles21();
1554
+ return /* @__PURE__ */ jsx33("div", { role: "tablist", className: root24, children: items.map((item3) => {
1555
+ const active2 = item3.value === value;
1556
+ return /* @__PURE__ */ jsx33(
1557
+ "button",
1558
+ {
1559
+ type: "button",
1560
+ role: "tab",
1561
+ "aria-selected": active2,
1562
+ className: tabClass(active2),
1563
+ onClick: () => onChange?.(item3.value),
1564
+ children: item3.label
1565
+ },
1566
+ item3.value
1567
+ );
1568
+ }) });
1569
+ }
1570
+
1571
+ // src/components/menu/index.tsx
1572
+ import {
1573
+ cloneElement as cloneElement2,
1574
+ useEffect as useEffect2,
1575
+ useRef as useRef2,
1576
+ useState as useState7
1577
+ } from "react";
1578
+
1579
+ // src/components/menu/use-styles.ts
1580
+ import { useMemo as useMemo23 } from "react";
1581
+
1582
+ // src/components/menu/use-styles.css.ts
1583
+ var danger = "use-styles_danger__1uyxaj3";
1584
+ var item2 = "use-styles_item__1uyxaj2";
1585
+ var list = "use-styles_list__1uyxaj1";
1586
+ var wrapper3 = "use-styles_wrapper__1uyxaj0";
1587
+
1588
+ // src/components/menu/use-styles.ts
1589
+ function useStyles22() {
1590
+ const { themeClass } = useTheme();
1591
+ return useMemo23(
1592
+ () => ({
1593
+ wrapper: [themeClass, wrapper3].filter(Boolean).join(" "),
1594
+ list,
1595
+ item: item2,
1596
+ dangerItem: [item2, danger].join(" ")
1597
+ }),
1598
+ [themeClass]
1599
+ );
1600
+ }
1601
+
1602
+ // src/components/menu/index.tsx
1603
+ import { jsx as jsx34, jsxs as jsxs24 } from "react/jsx-runtime";
1604
+ function assignRef(ref, value) {
1605
+ if (typeof ref === "function") ref(value);
1606
+ else if (ref) ref.current = value;
1607
+ }
1608
+ function Menu({ trigger: trigger2, items }) {
1609
+ const { wrapper: wrapper4, list: list2, item: item3, dangerItem } = useStyles22();
1610
+ const [open, setOpen] = useState7(false);
1611
+ const rootRef = useRef2(null);
1612
+ const listRef = useRef2(null);
1613
+ const triggerRef = useRef2(null);
1614
+ const getMenuItems = () => Array.from(listRef.current?.querySelectorAll('[role="menuitem"]') ?? []);
1615
+ const focusItemAt = (index) => {
1616
+ const menuItems = getMenuItems();
1617
+ if (menuItems.length === 0) return;
1618
+ const wrapped = (index + menuItems.length) % menuItems.length;
1619
+ menuItems[wrapped]?.focus();
1620
+ };
1621
+ const closeAndRestoreFocus = () => {
1622
+ setOpen(false);
1623
+ triggerRef.current?.focus();
1624
+ };
1625
+ useEffect2(() => {
1626
+ if (!open) return;
1627
+ listRef.current?.querySelector('[role="menuitem"]')?.focus();
1628
+ const onDocMouseDown = (event) => {
1629
+ if (rootRef.current && !rootRef.current.contains(event.target)) {
1630
+ setOpen(false);
1631
+ }
1632
+ };
1633
+ const onKeyDown = (event) => {
1634
+ if (event.key === "Escape") {
1635
+ setOpen(false);
1636
+ triggerRef.current?.focus();
1637
+ }
1638
+ };
1639
+ document.addEventListener("mousedown", onDocMouseDown);
1640
+ document.addEventListener("keydown", onKeyDown);
1641
+ return () => {
1642
+ document.removeEventListener("mousedown", onDocMouseDown);
1643
+ document.removeEventListener("keydown", onKeyDown);
1644
+ };
1645
+ }, [open]);
1646
+ const onMenuKeyDown = (event) => {
1647
+ const menuItems = getMenuItems();
1648
+ const current2 = menuItems.indexOf(document.activeElement);
1649
+ switch (event.key) {
1650
+ case "ArrowDown":
1651
+ event.preventDefault();
1652
+ focusItemAt(current2 + 1);
1653
+ break;
1654
+ case "ArrowUp":
1655
+ event.preventDefault();
1656
+ focusItemAt(current2 - 1);
1657
+ break;
1658
+ case "Home":
1659
+ event.preventDefault();
1660
+ focusItemAt(0);
1661
+ break;
1662
+ case "End":
1663
+ event.preventDefault();
1664
+ focusItemAt(menuItems.length - 1);
1665
+ break;
1666
+ case "Escape":
1667
+ event.preventDefault();
1668
+ closeAndRestoreFocus();
1669
+ break;
1670
+ case "Tab":
1671
+ setOpen(false);
1672
+ break;
1673
+ }
1674
+ };
1675
+ const triggerProps = trigger2.props;
1676
+ const consumerRef = trigger2.ref;
1677
+ const mergedTriggerRef = (node) => {
1678
+ triggerRef.current = node;
1679
+ assignRef(consumerRef, node);
1680
+ };
1681
+ const clonedTrigger = cloneElement2(trigger2, {
1682
+ ref: mergedTriggerRef,
1683
+ "aria-haspopup": "menu",
1684
+ "aria-expanded": open,
1685
+ onClick: (event) => {
1686
+ triggerProps.onClick?.(event);
1687
+ setOpen((prev) => !prev);
1688
+ }
1689
+ });
1690
+ return /* @__PURE__ */ jsxs24("div", { ref: rootRef, className: wrapper4, children: [
1691
+ clonedTrigger,
1692
+ open && /* @__PURE__ */ jsx34("div", { ref: listRef, role: "menu", className: list2, onKeyDown: onMenuKeyDown, children: items.map((entry, index) => /* @__PURE__ */ jsx34(
1693
+ "button",
1694
+ {
1695
+ type: "button",
1696
+ role: "menuitem",
1697
+ tabIndex: -1,
1698
+ className: entry.danger ? dangerItem : item3,
1699
+ onClick: () => {
1700
+ entry.onClick?.();
1701
+ setOpen(false);
1702
+ },
1703
+ children: entry.label
1704
+ },
1705
+ index
1706
+ )) })
1707
+ ] });
1708
+ }
1709
+
1710
+ // src/components/dialog/index.tsx
1711
+ import {
1712
+ useEffect as useEffect3,
1713
+ useId as useId4,
1714
+ useRef as useRef3
1715
+ } from "react";
1716
+
1717
+ // src/components/dialog/use-styles.ts
1718
+ import { useMemo as useMemo24 } from "react";
1719
+
1720
+ // src/components/dialog/use-styles.css.ts
1721
+ var actions = "use-styles_actions__5tstu84";
1722
+ var body3 = "use-styles_body__5tstu83";
1723
+ var overlay = "use-styles_overlay__5tstu80";
1724
+ var surface = "use-styles_surface__5tstu81";
1725
+ var titleText2 = "use-styles_titleText__5tstu82";
1726
+
1727
+ // src/components/dialog/use-styles.ts
1728
+ function useStyles23() {
1729
+ const { themeClass } = useTheme();
1730
+ return useMemo24(
1731
+ () => ({
1732
+ overlay: [themeClass, overlay].filter(Boolean).join(" "),
1733
+ surface,
1734
+ titleText: titleText2,
1735
+ body: body3,
1736
+ actions
1737
+ }),
1738
+ [themeClass]
1739
+ );
1740
+ }
1741
+
1742
+ // src/components/dialog/index.tsx
1743
+ import { jsx as jsx35, jsxs as jsxs25 } from "react/jsx-runtime";
1744
+ var FOCUSABLE = 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';
1745
+ function Dialog({ open, onClose, title, actions: actions3, children }) {
1746
+ const { overlay: overlay2, surface: surface2, titleText: titleText3, body: body4, actions: actionsClass } = useStyles23();
1747
+ const surfaceRef = useRef3(null);
1748
+ const previouslyFocused = useRef3(null);
1749
+ const generatedId = useId4();
1750
+ const titleId = title != null ? generatedId : void 0;
1751
+ useEffect3(() => {
1752
+ if (!open) return;
1753
+ const onKeyDown = (event) => {
1754
+ if (event.key === "Escape") onClose();
1755
+ };
1756
+ document.addEventListener("keydown", onKeyDown);
1757
+ return () => document.removeEventListener("keydown", onKeyDown);
1758
+ }, [open, onClose]);
1759
+ useEffect3(() => {
1760
+ if (!open) return;
1761
+ previouslyFocused.current = document.activeElement;
1762
+ surfaceRef.current?.focus();
1763
+ return () => previouslyFocused.current?.focus?.();
1764
+ }, [open]);
1765
+ useEffect3(() => {
1766
+ if (!open) return;
1767
+ const previousOverflow = document.body.style.overflow;
1768
+ document.body.style.overflow = "hidden";
1769
+ return () => {
1770
+ document.body.style.overflow = previousOverflow;
1771
+ };
1772
+ }, [open]);
1773
+ if (!open) return null;
1774
+ const stop = (event) => event.stopPropagation();
1775
+ const onSurfaceKeyDown = (event) => {
1776
+ if (event.key !== "Tab") return;
1777
+ const surfaceEl = surfaceRef.current;
1778
+ if (!surfaceEl) return;
1779
+ const focusable = Array.from(surfaceEl.querySelectorAll(FOCUSABLE)).filter(
1780
+ (el) => el.offsetParent !== null || el === surfaceEl
1781
+ );
1782
+ if (focusable.length === 0) {
1783
+ event.preventDefault();
1784
+ surfaceEl.focus();
1785
+ return;
1786
+ }
1787
+ const first = focusable[0];
1788
+ const last = focusable[focusable.length - 1];
1789
+ const active2 = document.activeElement;
1790
+ if (event.shiftKey) {
1791
+ if (active2 === first || active2 === surfaceEl) {
1792
+ event.preventDefault();
1793
+ last.focus();
1794
+ }
1795
+ } else if (active2 === last) {
1796
+ event.preventDefault();
1797
+ first.focus();
1798
+ }
1799
+ };
1800
+ return (
1801
+ // biome-ignore lint/a11y/useKeyWithClickEvents: ESC handled by a document keydown listener.
1802
+ /* @__PURE__ */ jsx35("div", { className: overlay2, "data-testid": "dialog-overlay", onClick: onClose, children: /* @__PURE__ */ jsxs25(
1803
+ "div",
1804
+ {
1805
+ ref: surfaceRef,
1806
+ className: surface2,
1807
+ role: "dialog",
1808
+ "aria-modal": "true",
1809
+ "aria-labelledby": titleId,
1810
+ tabIndex: -1,
1811
+ onClick: stop,
1812
+ onKeyDown: onSurfaceKeyDown,
1813
+ children: [
1814
+ title != null && /* @__PURE__ */ jsx35("h2", { id: titleId, className: titleText3, children: title }),
1815
+ children != null && /* @__PURE__ */ jsx35("div", { className: body4, children }),
1816
+ actions3 != null && /* @__PURE__ */ jsx35("div", { className: actionsClass, children: actions3 })
1817
+ ]
1818
+ }
1819
+ ) })
1820
+ );
1821
+ }
1822
+
1823
+ // src/components/snackbar/use-styles.ts
1824
+ import { useMemo as useMemo25 } from "react";
1825
+
1826
+ // src/components/snackbar/use-styles.css.ts
1827
+ var closeBtn = "use-styles_closeBtn__ihzsep2";
1828
+ var message = "use-styles_message__ihzsep1";
1829
+ var root20 = "use-styles_root__ihzsep0";
1830
+
1831
+ // src/components/snackbar/use-styles.ts
1832
+ function useStyles24() {
1833
+ const { themeClass } = useTheme();
1834
+ return useMemo25(
1835
+ () => ({
1836
+ root: [themeClass, root20].filter(Boolean).join(" "),
1837
+ message,
1838
+ closeBtn
1839
+ }),
1840
+ [themeClass]
1841
+ );
1842
+ }
1843
+
1844
+ // src/components/snackbar/index.tsx
1845
+ import { jsx as jsx36, jsxs as jsxs26 } from "react/jsx-runtime";
1846
+ function Snackbar({ open, message: message2, action, onClose }) {
1847
+ const { root: root24, message: messageClass, closeBtn: closeBtn2 } = useStyles24();
1848
+ if (!open) return null;
1849
+ return /* @__PURE__ */ jsxs26("div", { role: "status", className: root24, children: [
1850
+ /* @__PURE__ */ jsx36("span", { className: messageClass, children: message2 }),
1851
+ action,
1852
+ onClose && /* @__PURE__ */ jsx36("button", { type: "button", "aria-label": "Close", className: closeBtn2, onClick: onClose, children: /* @__PURE__ */ jsx36(XIcon, { size: 18 }) })
1853
+ ] });
1854
+ }
1855
+
1856
+ // src/components/table/use-styles.ts
1857
+ import { useMemo as useMemo26 } from "react";
1858
+
1859
+ // src/components/table/use-styles.css.ts
1860
+ var alignRight = "use-styles_alignRight__1n2cz6i3";
1861
+ var root21 = "use-styles_root__1n2cz6i0";
1862
+ var td = "use-styles_td__1n2cz6i2";
1863
+ var th = "use-styles_th__1n2cz6i1";
1864
+
1865
+ // src/components/table/use-styles.ts
1866
+ function useStyles25({ className }) {
1867
+ const { themeClass } = useTheme();
1868
+ const root24 = useMemo26(
1869
+ () => [themeClass, root21, className].filter(Boolean).join(" "),
1870
+ [themeClass, className]
1871
+ );
1872
+ return { root: root24, th, td, alignRight };
1873
+ }
1874
+
1875
+ // src/components/table/index.tsx
1876
+ import { jsx as jsx37, jsxs as jsxs27 } from "react/jsx-runtime";
1877
+ function Table({
1878
+ columns,
1879
+ rows,
1880
+ getRowKey,
1881
+ className,
1882
+ ...rest
1883
+ }) {
1884
+ const { root: root24, th: th2, td: td2, alignRight: alignRight2 } = useStyles25({ className });
1885
+ const headClass = (column) => column.align === "right" ? `${th2} ${alignRight2}` : th2;
1886
+ const cellClass = (column) => column.align === "right" ? `${td2} ${alignRight2}` : td2;
1887
+ return /* @__PURE__ */ jsxs27("table", { className: root24, ...rest, children: [
1888
+ /* @__PURE__ */ jsx37("thead", { children: /* @__PURE__ */ jsx37("tr", { children: columns.map((column) => /* @__PURE__ */ jsx37("th", { className: headClass(column), children: column.header }, column.key)) }) }),
1889
+ /* @__PURE__ */ jsx37("tbody", { children: rows.map((row, index) => /* @__PURE__ */ jsx37("tr", { children: columns.map((column) => /* @__PURE__ */ jsx37("td", { className: cellClass(column), children: column.render ? column.render(row) : String(row[column.key]) }, column.key)) }, getRowKey ? getRowKey(row, index) : index)) })
1890
+ ] });
1891
+ }
1892
+
1893
+ // src/components/app-bar/use-styles.ts
1894
+ import { useMemo as useMemo27 } from "react";
1895
+
1896
+ // src/components/app-bar/use-styles.css.ts
1897
+ var actions2 = "use-styles_actions__1h133nh2";
1898
+ var brand = "use-styles_brand__1h133nh1";
1899
+ var root22 = "use-styles_root__1h133nh0";
1900
+
1901
+ // src/components/app-bar/use-styles.ts
1902
+ function useStyles26({ className }) {
1903
+ const { themeClass } = useTheme();
1904
+ const root24 = useMemo27(
1905
+ () => [themeClass, root22, className].filter(Boolean).join(" "),
1906
+ [themeClass, className]
1907
+ );
1908
+ return { root: root24, brand, actions: actions2 };
1909
+ }
1910
+
1911
+ // src/components/app-bar/index.tsx
1912
+ import { jsx as jsx38, jsxs as jsxs28 } from "react/jsx-runtime";
1913
+ function AppBar({ brand: brand2, actions: actions3, className, children, ...rest }) {
1914
+ const styles = useStyles26({ className });
1915
+ return /* @__PURE__ */ jsxs28("header", { className: styles.root, ...rest, children: [
1916
+ brand2 !== void 0 ? /* @__PURE__ */ jsx38("div", { className: styles.brand, children: brand2 }) : null,
1917
+ children,
1918
+ actions3 !== void 0 ? /* @__PURE__ */ jsx38("div", { className: styles.actions, children: actions3 }) : null
1919
+ ] });
1920
+ }
1921
+
1922
+ // src/components/list-item/use-styles.ts
1923
+ import { useMemo as useMemo28 } from "react";
1924
+
1925
+ // src/components/list-item/use-styles.css.ts
1926
+ var content2 = "use-styles_content__kbreq13";
1927
+ var leading = "use-styles_leading__kbreq12";
1928
+ var root23 = "use-styles_root__kbreq10";
1929
+ var selected2 = "use-styles_selected__kbreq11";
1930
+ var trailing = "use-styles_trailing__kbreq14";
1931
+
1932
+ // src/components/list-item/use-styles.ts
1933
+ function useStyles27({ selected: selected3, className }) {
1934
+ const { themeClass } = useTheme();
1935
+ const root24 = useMemo28(
1936
+ () => [themeClass, root23, selected3 && selected2, className].filter(Boolean).join(" "),
1937
+ [themeClass, selected3, className]
1938
+ );
1939
+ return { root: root24, leading, content: content2, trailing };
1940
+ }
1941
+
1942
+ // src/components/list-item/index.tsx
1943
+ import { jsx as jsx39, jsxs as jsxs29 } from "react/jsx-runtime";
1944
+ function ListItem({
1945
+ leading: leading2,
1946
+ trailing: trailing2,
1947
+ selected: selected3,
1948
+ className,
1949
+ children,
1950
+ ...rest
1951
+ }) {
1952
+ const styles = useStyles27({ selected: selected3, className });
1953
+ return /* @__PURE__ */ jsxs29("div", { className: styles.root, ...rest, children: [
1954
+ leading2 != null && /* @__PURE__ */ jsx39("span", { className: styles.leading, children: leading2 }),
1955
+ /* @__PURE__ */ jsx39("span", { className: styles.content, children }),
1956
+ trailing2 != null && /* @__PURE__ */ jsx39("span", { className: styles.trailing, children: trailing2 })
1957
+ ] });
1958
+ }
1959
+
1960
+ // src/components/icons/chevron-up/index.tsx
1961
+ import { jsx as jsx40 } from "react/jsx-runtime";
1962
+ function ChevronUpIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
1963
+ return /* @__PURE__ */ jsx40(
1964
+ "svg",
1965
+ {
1966
+ xmlns: "http://www.w3.org/2000/svg",
1967
+ width: size3,
1968
+ height: size3,
1969
+ viewBox: "0 0 24 24",
1970
+ fill: "none",
1971
+ stroke: "currentColor",
1972
+ strokeWidth,
1973
+ strokeLinecap: "round",
1974
+ strokeLinejoin: "round",
1975
+ "aria-hidden": "true",
1976
+ ...rest,
1977
+ children: /* @__PURE__ */ jsx40("path", { d: "m18 15-6-6-6 6" })
1978
+ }
1979
+ );
1980
+ }
1981
+
1982
+ // src/components/icons/search/index.tsx
1983
+ import { jsx as jsx41, jsxs as jsxs30 } from "react/jsx-runtime";
1984
+ function SearchIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
1985
+ return /* @__PURE__ */ jsxs30(
1986
+ "svg",
1987
+ {
1988
+ xmlns: "http://www.w3.org/2000/svg",
1989
+ width: size3,
1990
+ height: size3,
1991
+ viewBox: "0 0 24 24",
1992
+ fill: "none",
1993
+ stroke: "currentColor",
1994
+ strokeWidth,
1995
+ strokeLinecap: "round",
1996
+ strokeLinejoin: "round",
1997
+ "aria-hidden": "true",
1998
+ ...rest,
1999
+ children: [
2000
+ /* @__PURE__ */ jsx41("circle", { cx: "11", cy: "11", r: "8" }),
2001
+ /* @__PURE__ */ jsx41("path", { d: "m21 21-4.3-4.3" })
2002
+ ]
2003
+ }
2004
+ );
2005
+ }
2006
+
2007
+ // src/components/icons/plus/index.tsx
2008
+ import { jsx as jsx42, jsxs as jsxs31 } from "react/jsx-runtime";
2009
+ function PlusIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
2010
+ return /* @__PURE__ */ jsxs31(
2011
+ "svg",
2012
+ {
2013
+ xmlns: "http://www.w3.org/2000/svg",
2014
+ width: size3,
2015
+ height: size3,
2016
+ viewBox: "0 0 24 24",
2017
+ fill: "none",
2018
+ stroke: "currentColor",
2019
+ strokeWidth,
2020
+ strokeLinecap: "round",
2021
+ strokeLinejoin: "round",
2022
+ "aria-hidden": "true",
2023
+ ...rest,
2024
+ children: [
2025
+ /* @__PURE__ */ jsx42("path", { d: "M5 12h14" }),
2026
+ /* @__PURE__ */ jsx42("path", { d: "M12 5v14" })
2027
+ ]
2028
+ }
2029
+ );
2030
+ }
2031
+
2032
+ // src/components/icons/minus/index.tsx
2033
+ import { jsx as jsx43 } from "react/jsx-runtime";
2034
+ function MinusIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
2035
+ return /* @__PURE__ */ jsx43(
2036
+ "svg",
2037
+ {
2038
+ xmlns: "http://www.w3.org/2000/svg",
2039
+ width: size3,
2040
+ height: size3,
2041
+ viewBox: "0 0 24 24",
2042
+ fill: "none",
2043
+ stroke: "currentColor",
2044
+ strokeWidth,
2045
+ strokeLinecap: "round",
2046
+ strokeLinejoin: "round",
2047
+ "aria-hidden": "true",
2048
+ ...rest,
2049
+ children: /* @__PURE__ */ jsx43("path", { d: "M5 12h14" })
2050
+ }
2051
+ );
2052
+ }
2053
+
2054
+ // src/components/icons/more-horizontal/index.tsx
2055
+ import { jsx as jsx44, jsxs as jsxs32 } from "react/jsx-runtime";
2056
+ function MoreHorizontalIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
2057
+ return /* @__PURE__ */ jsxs32(
2058
+ "svg",
2059
+ {
2060
+ xmlns: "http://www.w3.org/2000/svg",
2061
+ width: size3,
2062
+ height: size3,
2063
+ viewBox: "0 0 24 24",
2064
+ fill: "none",
2065
+ stroke: "currentColor",
2066
+ strokeWidth,
2067
+ strokeLinecap: "round",
2068
+ strokeLinejoin: "round",
2069
+ "aria-hidden": "true",
2070
+ ...rest,
2071
+ children: [
2072
+ /* @__PURE__ */ jsx44("circle", { cx: "12", cy: "12", r: "1" }),
2073
+ /* @__PURE__ */ jsx44("circle", { cx: "19", cy: "12", r: "1" }),
2074
+ /* @__PURE__ */ jsx44("circle", { cx: "5", cy: "12", r: "1" })
2075
+ ]
2076
+ }
2077
+ );
2078
+ }
2079
+
2080
+ // src/theme/typography.css.ts
2081
+ var text = { eyebrow: "typography_text_eyebrow__1wmlzy0", display: "typography_text_display__1wmlzy1", h1: "typography_text_h1__1wmlzy2", h2: "typography_text_h2__1wmlzy3", h3: "typography_text_h3__1wmlzy4", h4: "typography_text_h4__1wmlzy5", body: "typography_text_body__1wmlzy6", lead: "typography_text_lead__1wmlzy7", small: "typography_text_small__1wmlzy8", caption: "typography_text_caption__1wmlzy9", code: "typography_text_code__1wmlzya", blackletter: "typography_text_blackletter__1wmlzyb" };
2082
+ export {
2083
+ Accordion,
2084
+ Alert,
2085
+ AppBar,
2086
+ Avatar,
2087
+ Badge,
2088
+ Breadcrumbs,
2089
+ Button,
2090
+ Card,
2091
+ CheckIcon,
2092
+ Checkbox,
2093
+ ChevronDownIcon,
2094
+ ChevronLeftIcon,
2095
+ ChevronRightIcon,
2096
+ ChevronUpIcon,
2097
+ Chip,
2098
+ CircleCheckIcon,
2099
+ CircleXIcon,
2100
+ Dialog,
2101
+ Divider,
2102
+ EyeIcon,
2103
+ EyeOffIcon,
2104
+ IconButton,
2105
+ InfoIcon,
2106
+ ListItem,
2107
+ Menu,
2108
+ MinusIcon,
2109
+ MoreHorizontalIcon,
2110
+ Pagination,
2111
+ PlusIcon,
2112
+ Progress,
2113
+ Radio,
2114
+ SearchIcon,
2115
+ Select,
2116
+ Slider,
2117
+ Snackbar,
2118
+ Stepper,
2119
+ Switch,
2120
+ Table,
2121
+ Tabs,
2122
+ TextField,
2123
+ ThemeProvider,
2124
+ Tooltip,
2125
+ TriangleAlertIcon,
2126
+ XIcon,
2127
+ modeNames,
2128
+ schemaNames,
2129
+ text,
2130
+ vars as theme,
2131
+ themes,
2132
+ useTheme,
2133
+ useToggle
2134
+ };