@efiche/design 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.cjs ADDED
@@ -0,0 +1,900 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
10
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
11
+ var __spreadValues = (a, b) => {
12
+ for (var prop in b || (b = {}))
13
+ if (__hasOwnProp.call(b, prop))
14
+ __defNormalProp(a, prop, b[prop]);
15
+ if (__getOwnPropSymbols)
16
+ for (var prop of __getOwnPropSymbols(b)) {
17
+ if (__propIsEnum.call(b, prop))
18
+ __defNormalProp(a, prop, b[prop]);
19
+ }
20
+ return a;
21
+ };
22
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
23
+ var __objRest = (source, exclude) => {
24
+ var target = {};
25
+ for (var prop in source)
26
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
27
+ target[prop] = source[prop];
28
+ if (source != null && __getOwnPropSymbols)
29
+ for (var prop of __getOwnPropSymbols(source)) {
30
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
31
+ target[prop] = source[prop];
32
+ }
33
+ return target;
34
+ };
35
+ var __export = (target, all) => {
36
+ for (var name in all)
37
+ __defProp(target, name, { get: all[name], enumerable: true });
38
+ };
39
+ var __copyProps = (to, from, except, desc) => {
40
+ if (from && typeof from === "object" || typeof from === "function") {
41
+ for (let key of __getOwnPropNames(from))
42
+ if (!__hasOwnProp.call(to, key) && key !== except)
43
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
44
+ }
45
+ return to;
46
+ };
47
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
48
+
49
+ // src/components/index.ts
50
+ var index_exports = {};
51
+ __export(index_exports, {
52
+ Accordion: () => Accordion_default2,
53
+ Alert: () => Alert_default2,
54
+ Avatar: () => Avatar_default2,
55
+ Badge: () => Badge_default2,
56
+ Breadcrumb: () => Breadcrumb_default2,
57
+ Button: () => Button_default2,
58
+ Card: () => Card,
59
+ CardContent: () => CardContent,
60
+ CardDescription: () => CardDescription,
61
+ CardFooter: () => CardFooter,
62
+ CardHeader: () => CardHeader,
63
+ CardTitle: () => CardTitle,
64
+ Checkbox: () => Checkbox_default2,
65
+ CopyButton: () => CopyButton_default2,
66
+ FileUpload: () => FileUpload_default2,
67
+ Input: () => Input_default2,
68
+ Label: () => Label_default2,
69
+ PasswordInput: () => PasswordInput_default,
70
+ Progress: () => Progress_default2,
71
+ RadioGroup: () => RadioGroup_default2,
72
+ Select: () => Select_default2,
73
+ Skeleton: () => Skeleton_default2,
74
+ Slider: () => Slider_default2,
75
+ Spinner: () => Spinner_default2,
76
+ Switch: () => Switch_default2,
77
+ Table: () => Table,
78
+ TableBody: () => TableBody,
79
+ TableCell: () => TableCell,
80
+ TableHead: () => TableHead,
81
+ TableHeader: () => TableHeader,
82
+ TableRow: () => TableRow,
83
+ Tabs: () => Tabs_default2,
84
+ Textarea: () => Textarea_default2,
85
+ ThemeProvider: () => ThemeProvider,
86
+ Tooltip: () => Tooltip_default2,
87
+ useTheme: () => useTheme
88
+ });
89
+ module.exports = __toCommonJS(index_exports);
90
+
91
+ // src/components/ThemeProvider.tsx
92
+ var import_react = require("react");
93
+ var import_jsx_runtime = require("react/jsx-runtime");
94
+ var ThemeContext = (0, import_react.createContext)(null);
95
+ var ThemeProvider = ({
96
+ children,
97
+ defaultTheme = "light"
98
+ }) => {
99
+ const [theme, setTheme] = (0, import_react.useState)(defaultTheme);
100
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThemeContext.Provider, { value: { theme, toggle: () => setTheme((t) => t === "light" ? "dark" : "light") }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: theme === "dark" ? "ds-theme-dark" : "ds-theme", children }) });
101
+ };
102
+ var useTheme = () => {
103
+ const ctx = (0, import_react.useContext)(ThemeContext);
104
+ if (!ctx) throw new Error("useTheme must be used inside <ThemeProvider>");
105
+ return ctx;
106
+ };
107
+
108
+ // src/components/Accordion/Accordion.tsx
109
+ var import_react2 = require("react");
110
+ var import_lucide_react = require("lucide-react");
111
+
112
+ // src/components/Accordion/Accordion.module.css
113
+ var Accordion_default = {};
114
+
115
+ // src/components/Accordion/Accordion.tsx
116
+ var import_jsx_runtime2 = require("react/jsx-runtime");
117
+ var Accordion = ({ items, defaultValue, multiple = false }) => {
118
+ const [open, setOpen] = (0, import_react2.useState)(() => {
119
+ if (!defaultValue) return /* @__PURE__ */ new Set();
120
+ if (Array.isArray(defaultValue)) return new Set(defaultValue);
121
+ return /* @__PURE__ */ new Set([defaultValue]);
122
+ });
123
+ const toggle = (value) => {
124
+ setOpen((prev) => {
125
+ const next = new Set(prev);
126
+ if (next.has(value)) {
127
+ next.delete(value);
128
+ } else {
129
+ if (!multiple) next.clear();
130
+ next.add(value);
131
+ }
132
+ return next;
133
+ });
134
+ };
135
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: Accordion_default.root, children: items.map((item) => {
136
+ const isOpen = open.has(item.value);
137
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: Accordion_default.item, children: [
138
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
139
+ "button",
140
+ {
141
+ className: Accordion_default.trigger,
142
+ onClick: () => toggle(item.value),
143
+ "aria-expanded": isOpen,
144
+ children: [
145
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { children: item.trigger }),
146
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
147
+ import_lucide_react.ChevronDown,
148
+ {
149
+ size: 16,
150
+ className: `${Accordion_default.chevron} ${isOpen ? Accordion_default["chevron-open"] : ""}`
151
+ }
152
+ )
153
+ ]
154
+ }
155
+ ),
156
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: `${Accordion_default.panel} ${isOpen ? Accordion_default["panel-open"] : ""}`, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: Accordion_default.content, children: item.content }) })
157
+ ] }, item.value);
158
+ }) });
159
+ };
160
+ var Accordion_default2 = Accordion;
161
+
162
+ // src/components/Alert/Alert.tsx
163
+ var import_lucide_react2 = require("lucide-react");
164
+
165
+ // src/components/Alert/Alert.module.css
166
+ var Alert_default = {};
167
+
168
+ // src/components/Alert/Alert.tsx
169
+ var import_jsx_runtime3 = require("react/jsx-runtime");
170
+ var icons = {
171
+ info: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react2.Info, { size: 16 }),
172
+ success: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react2.CheckCircle2, { size: 16 }),
173
+ warning: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react2.AlertTriangle, { size: 16 }),
174
+ danger: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react2.AlertCircle, { size: 16 })
175
+ };
176
+ var Alert = ({ variant = "info", title, description }) => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: `${Alert_default.alert} ${Alert_default[variant]}`, role: "alert", children: [
177
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: Alert_default.icon, children: icons[variant] }),
178
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: Alert_default.content, children: [
179
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: Alert_default.title, children: title }),
180
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: Alert_default.description, children: description })
181
+ ] })
182
+ ] });
183
+ var Alert_default2 = Alert;
184
+
185
+ // src/components/Avatar/Avatar.module.css
186
+ var Avatar_default = {};
187
+
188
+ // src/components/Avatar/Avatar.tsx
189
+ var import_jsx_runtime4 = require("react/jsx-runtime");
190
+ var Avatar = ({ fallback, size = "md", style, className }) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
191
+ "div",
192
+ {
193
+ className: `${Avatar_default.avatar} ${Avatar_default[size]}${className ? ` ${className}` : ""}`,
194
+ style,
195
+ "aria-label": fallback,
196
+ children: fallback
197
+ }
198
+ );
199
+ var Avatar_default2 = Avatar;
200
+
201
+ // src/components/Badge/Badge.module.css
202
+ var Badge_default = {};
203
+
204
+ // src/components/Badge/Badge.tsx
205
+ var import_jsx_runtime5 = require("react/jsx-runtime");
206
+ var Badge = ({ variant = "default", size = "md", children, style }) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: `${Badge_default.badge} ${Badge_default[variant]} ${Badge_default[size]}`, style, children });
207
+ var Badge_default2 = Badge;
208
+
209
+ // src/components/Breadcrumb/Breadcrumb.tsx
210
+ var import_lucide_react3 = require("lucide-react");
211
+
212
+ // src/components/Breadcrumb/Breadcrumb.module.css
213
+ var Breadcrumb_default = {};
214
+
215
+ // src/components/Breadcrumb/Breadcrumb.tsx
216
+ var import_jsx_runtime6 = require("react/jsx-runtime");
217
+ var Breadcrumb = ({ items }) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("nav", { "aria-label": "Breadcrumb", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("ol", { className: Breadcrumb_default.list, children: items.map((item, i) => {
218
+ const isLast = i === items.length - 1;
219
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("li", { className: Breadcrumb_default.item, children: [
220
+ i > 0 && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react3.ChevronRight, { size: 14, className: Breadcrumb_default.separator, "aria-hidden": true }),
221
+ isLast || !item.href ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: `${Breadcrumb_default.link} ${isLast ? Breadcrumb_default.current : ""}`, children: item.label }) : /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("a", { href: item.href, className: Breadcrumb_default.link, children: item.label })
222
+ ] }, item.label);
223
+ }) }) });
224
+ var Breadcrumb_default2 = Breadcrumb;
225
+
226
+ // src/components/Button/Button.tsx
227
+ var import_lucide_react4 = require("lucide-react");
228
+
229
+ // src/components/Button/Button.module.css
230
+ var Button_default = {};
231
+
232
+ // src/components/Button/Button.tsx
233
+ var import_jsx_runtime7 = require("react/jsx-runtime");
234
+ var Button = (_a) => {
235
+ var _b = _a, {
236
+ text,
237
+ children,
238
+ loading = false,
239
+ disabled = false,
240
+ icon,
241
+ iconPosition = "left",
242
+ outline = false,
243
+ ghost = false,
244
+ danger = false,
245
+ warning = false,
246
+ info = false,
247
+ success = false,
248
+ variant,
249
+ small = false,
250
+ large = false,
251
+ size,
252
+ className
253
+ } = _b, props = __objRest(_b, [
254
+ "text",
255
+ "children",
256
+ "loading",
257
+ "disabled",
258
+ "icon",
259
+ "iconPosition",
260
+ "outline",
261
+ "ghost",
262
+ "danger",
263
+ "warning",
264
+ "info",
265
+ "success",
266
+ "variant",
267
+ "small",
268
+ "large",
269
+ "size",
270
+ "className"
271
+ ]);
272
+ const resolvedVariant = variant != null ? variant : danger ? "danger" : warning ? "warning" : info ? "info" : success ? "success" : ghost ? "ghost" : outline ? "outline" : "solid";
273
+ const resolvedSize = size != null ? size : small ? "sm" : large ? "lg" : "md";
274
+ const content = children != null ? children : text;
275
+ const showIcon = icon && !loading;
276
+ const classes = [
277
+ Button_default.button,
278
+ Button_default[resolvedVariant],
279
+ Button_default[resolvedSize],
280
+ loading ? Button_default.loading : "",
281
+ className != null ? className : ""
282
+ ].filter(Boolean).join(" ");
283
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
284
+ "button",
285
+ __spreadProps(__spreadValues({
286
+ disabled: disabled || loading,
287
+ className: classes
288
+ }, props), {
289
+ children: [
290
+ loading ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_lucide_react4.LoaderCircle, { className: Button_default.spinner, "aria-hidden": true }) : null,
291
+ showIcon && iconPosition === "left" ? icon : null,
292
+ content,
293
+ showIcon && iconPosition === "right" ? icon : null
294
+ ]
295
+ })
296
+ );
297
+ };
298
+ var Button_default2 = Button;
299
+
300
+ // src/components/Card/Card.module.css
301
+ var Card_default = {};
302
+
303
+ // src/components/Card/Card.tsx
304
+ var import_jsx_runtime8 = require("react/jsx-runtime");
305
+ var Card = (_a) => {
306
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
307
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", __spreadValues({ className: `${Card_default.card}${className ? ` ${className}` : ""}` }, props));
308
+ };
309
+ var CardHeader = (_a) => {
310
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
311
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", __spreadValues({ className: `${Card_default.header}${className ? ` ${className}` : ""}` }, props));
312
+ };
313
+ var CardTitle = (_a) => {
314
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
315
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h3", __spreadValues({ className: `${Card_default.title}${className ? ` ${className}` : ""}` }, props));
316
+ };
317
+ var CardDescription = (_a) => {
318
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
319
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", __spreadValues({ className: `${Card_default.description}${className ? ` ${className}` : ""}` }, props));
320
+ };
321
+ var CardContent = (_a) => {
322
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
323
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", __spreadValues({ className: `${Card_default.content}${className ? ` ${className}` : ""}` }, props));
324
+ };
325
+ var CardFooter = (_a) => {
326
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
327
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", __spreadValues({ className: `${Card_default.footer}${className ? ` ${className}` : ""}` }, props));
328
+ };
329
+
330
+ // src/components/Checkbox/Checkbox.tsx
331
+ var import_react3 = require("react");
332
+
333
+ // src/components/Checkbox/Checkbox.module.css
334
+ var Checkbox_default = {};
335
+
336
+ // src/components/Checkbox/Checkbox.tsx
337
+ var import_jsx_runtime9 = require("react/jsx-runtime");
338
+ var Checkbox = ({
339
+ label,
340
+ checked,
341
+ defaultChecked = false,
342
+ disabled,
343
+ id,
344
+ onChange
345
+ }) => {
346
+ const [internal, setInternal] = (0, import_react3.useState)(defaultChecked);
347
+ const isChecked = checked !== void 0 ? checked : internal;
348
+ const handleChange = () => {
349
+ if (disabled) return;
350
+ const next = !isChecked;
351
+ setInternal(next);
352
+ onChange == null ? void 0 : onChange(next);
353
+ };
354
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("label", { className: `${Checkbox_default.container} ${disabled ? Checkbox_default.disabled : ""}`, htmlFor: id, children: [
355
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
356
+ "input",
357
+ {
358
+ type: "checkbox",
359
+ id,
360
+ checked: isChecked,
361
+ disabled,
362
+ onChange: handleChange,
363
+ className: Checkbox_default.input
364
+ }
365
+ ),
366
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: `${Checkbox_default.box} ${isChecked ? Checkbox_default.checked : ""}`, children: isChecked && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("svg", { viewBox: "0 0 12 10", fill: "none", className: Checkbox_default.checkmark, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("path", { d: "M1 5l3.5 3.5L11 1", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) }),
367
+ label && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: Checkbox_default.label, children: label })
368
+ ] });
369
+ };
370
+ var Checkbox_default2 = Checkbox;
371
+
372
+ // src/components/CopyButton/CopyButton.tsx
373
+ var import_lucide_react5 = require("lucide-react");
374
+ var import_react4 = require("react");
375
+
376
+ // src/components/CopyButton/CopyButton.module.css
377
+ var CopyButton_default = {};
378
+
379
+ // src/components/CopyButton/CopyButton.tsx
380
+ var import_jsx_runtime10 = require("react/jsx-runtime");
381
+ var CopyButton = ({ text }) => {
382
+ const [copied, setCopied] = (0, import_react4.useState)(false);
383
+ const handleCopy = () => {
384
+ navigator.clipboard.writeText(text);
385
+ setCopied(true);
386
+ setTimeout(() => setCopied(false), 2e3);
387
+ };
388
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
389
+ "button",
390
+ {
391
+ className: CopyButton_default.copyButton,
392
+ onClick: handleCopy,
393
+ "aria-label": copied ? "Copied" : `Copy ${text}`,
394
+ children: copied ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react5.Check, { className: CopyButton_default.icon }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react5.Copy, { className: CopyButton_default.icon })
395
+ }
396
+ );
397
+ };
398
+ var CopyButton_default2 = CopyButton;
399
+
400
+ // src/components/FileUpload/FileUpload.tsx
401
+ var import_lucide_react6 = require("lucide-react");
402
+ var import_react5 = require("react");
403
+
404
+ // src/components/FileUpload/FileUpload.module.css
405
+ var FileUpload_default = {};
406
+
407
+ // src/components/FileUpload/FileUpload.tsx
408
+ var import_jsx_runtime11 = require("react/jsx-runtime");
409
+ var FileUpload = ({ accept, multiple, disabled, onFileSelect }) => {
410
+ const [isDragging, setIsDragging] = (0, import_react5.useState)(false);
411
+ const [fileNames, setFileNames] = (0, import_react5.useState)([]);
412
+ const inputRef = (0, import_react5.useRef)(null);
413
+ const handleFiles = (list) => {
414
+ setFileNames(Array.from(list).map((f) => f.name));
415
+ onFileSelect == null ? void 0 : onFileSelect(list);
416
+ };
417
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
418
+ "div",
419
+ {
420
+ className: `${FileUpload_default.zone} ${isDragging ? FileUpload_default.dragging : ""} ${disabled ? FileUpload_default.disabled : ""}`,
421
+ onClick: () => {
422
+ var _a;
423
+ return !disabled && ((_a = inputRef.current) == null ? void 0 : _a.click());
424
+ },
425
+ onDragOver: (e) => {
426
+ e.preventDefault();
427
+ setIsDragging(true);
428
+ },
429
+ onDragLeave: () => setIsDragging(false),
430
+ onDrop: (e) => {
431
+ e.preventDefault();
432
+ setIsDragging(false);
433
+ if (!disabled && e.dataTransfer.files.length) handleFiles(e.dataTransfer.files);
434
+ },
435
+ children: [
436
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
437
+ "input",
438
+ {
439
+ ref: inputRef,
440
+ type: "file",
441
+ accept,
442
+ multiple,
443
+ disabled,
444
+ className: FileUpload_default.input,
445
+ onChange: (e) => e.target.files && handleFiles(e.target.files)
446
+ }
447
+ ),
448
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react6.Upload, { size: 32, className: FileUpload_default.icon }),
449
+ fileNames.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: FileUpload_default.fileName, children: fileNames.join(", ") }) : /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("p", { className: FileUpload_default.hint, children: [
450
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("strong", { children: "Click to upload" }),
451
+ " or drag and drop"
452
+ ] })
453
+ ]
454
+ }
455
+ );
456
+ };
457
+ var FileUpload_default2 = FileUpload;
458
+
459
+ // src/components/Input/Input.module.css
460
+ var Input_default = {};
461
+
462
+ // src/components/Input/Input.tsx
463
+ var import_jsx_runtime12 = require("react/jsx-runtime");
464
+ var Input = (_a) => {
465
+ var _b = _a, {
466
+ error,
467
+ success,
468
+ leftIcon,
469
+ rightIcon,
470
+ className
471
+ } = _b, props = __objRest(_b, [
472
+ "error",
473
+ "success",
474
+ "leftIcon",
475
+ "rightIcon",
476
+ "className"
477
+ ]);
478
+ const wrapperClasses = [
479
+ Input_default.wrapper,
480
+ error ? Input_default.error : "",
481
+ success ? Input_default.success : "",
482
+ leftIcon ? Input_default.hasLeft : "",
483
+ rightIcon ? Input_default.hasRight : "",
484
+ className != null ? className : ""
485
+ ].filter(Boolean).join(" ");
486
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: wrapperClasses, children: [
487
+ leftIcon && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: Input_default.leftIcon, children: leftIcon }),
488
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("input", __spreadValues({ className: Input_default.input }, props)),
489
+ rightIcon && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: Input_default.rightIcon, children: rightIcon })
490
+ ] });
491
+ };
492
+ var Input_default2 = Input;
493
+
494
+ // src/components/Label/Label.module.css
495
+ var Label_default = {};
496
+
497
+ // src/components/Label/Label.tsx
498
+ var import_jsx_runtime13 = require("react/jsx-runtime");
499
+ var Label = (_a) => {
500
+ var _b = _a, { children, required, className } = _b, props = __objRest(_b, ["children", "required", "className"]);
501
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("label", __spreadProps(__spreadValues({ className: `${Label_default.label} ${className != null ? className : ""}` }, props), { children: [
502
+ children,
503
+ required && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: Label_default.required, children: "*" })
504
+ ] }));
505
+ };
506
+ var Label_default2 = Label;
507
+
508
+ // src/components/PasswordInput/PasswordInput.tsx
509
+ var import_lucide_react7 = require("lucide-react");
510
+ var import_react6 = require("react");
511
+ var import_jsx_runtime14 = require("react/jsx-runtime");
512
+ var PasswordInput = (props) => {
513
+ const [visible, setVisible] = (0, import_react6.useState)(false);
514
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
515
+ Input_default2,
516
+ __spreadProps(__spreadValues({}, props), {
517
+ type: visible ? "text" : "password",
518
+ rightIcon: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
519
+ "button",
520
+ {
521
+ type: "button",
522
+ onClick: () => setVisible((v) => !v),
523
+ style: { background: "none", border: "none", cursor: "pointer", padding: 0, display: "flex", pointerEvents: "all" },
524
+ tabIndex: -1,
525
+ children: visible ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react7.EyeOff, { size: 16 }) : /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react7.Eye, { size: 16 })
526
+ }
527
+ )
528
+ })
529
+ );
530
+ };
531
+ var PasswordInput_default = PasswordInput;
532
+
533
+ // src/components/Progress/Progress.module.css
534
+ var Progress_default = {};
535
+
536
+ // src/components/Progress/Progress.tsx
537
+ var import_jsx_runtime15 = require("react/jsx-runtime");
538
+ var Progress = ({ value = 0 }) => {
539
+ const pct = Math.min(100, Math.max(0, value));
540
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
541
+ "div",
542
+ {
543
+ className: Progress_default.track,
544
+ role: "progressbar",
545
+ "aria-valuenow": pct,
546
+ "aria-valuemin": 0,
547
+ "aria-valuemax": 100,
548
+ children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: Progress_default.fill, style: { width: `${pct}%` } })
549
+ }
550
+ );
551
+ };
552
+ var Progress_default2 = Progress;
553
+
554
+ // src/components/RadioGroup/RadioGroup.tsx
555
+ var import_react7 = require("react");
556
+
557
+ // src/components/RadioGroup/RadioGroup.module.css
558
+ var RadioGroup_default = {};
559
+
560
+ // src/components/RadioGroup/RadioGroup.tsx
561
+ var import_jsx_runtime16 = require("react/jsx-runtime");
562
+ var RadioGroup = ({
563
+ options,
564
+ name,
565
+ value,
566
+ defaultValue = "",
567
+ disabled,
568
+ onChange
569
+ }) => {
570
+ const [internal, setInternal] = (0, import_react7.useState)(defaultValue);
571
+ const selected = value !== void 0 ? value : internal;
572
+ const handleChange = (val) => {
573
+ if (disabled) return;
574
+ setInternal(val);
575
+ onChange == null ? void 0 : onChange(val);
576
+ };
577
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: RadioGroup_default.group, children: options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
578
+ "label",
579
+ {
580
+ className: `${RadioGroup_default.item} ${disabled ? RadioGroup_default.disabled : ""}`,
581
+ children: [
582
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
583
+ "input",
584
+ {
585
+ type: "radio",
586
+ name,
587
+ value: option.value,
588
+ checked: selected === option.value,
589
+ disabled,
590
+ onChange: () => handleChange(option.value),
591
+ className: RadioGroup_default.input
592
+ }
593
+ ),
594
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: `${RadioGroup_default.dot} ${selected === option.value ? RadioGroup_default.checked : ""}`, children: selected === option.value && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: RadioGroup_default.inner }) }),
595
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: RadioGroup_default.label, children: option.label })
596
+ ]
597
+ },
598
+ option.value
599
+ )) });
600
+ };
601
+ var RadioGroup_default2 = RadioGroup;
602
+
603
+ // src/components/Select/Select.tsx
604
+ var import_lucide_react8 = require("lucide-react");
605
+ var import_react8 = require("react");
606
+
607
+ // src/components/Select/Select.module.css
608
+ var Select_default = {};
609
+
610
+ // src/components/Select/Select.tsx
611
+ var import_jsx_runtime17 = require("react/jsx-runtime");
612
+ var Select = ({
613
+ options,
614
+ value,
615
+ defaultValue = "",
616
+ placeholder = "Choose an option",
617
+ disabled,
618
+ onChange
619
+ }) => {
620
+ var _a;
621
+ const [internal, setInternal] = (0, import_react8.useState)(defaultValue);
622
+ const [open, setOpen] = (0, import_react8.useState)(false);
623
+ const ref = (0, import_react8.useRef)(null);
624
+ const selected = value !== void 0 ? value : internal;
625
+ const selectedLabel = (_a = options.find((o) => o.value === selected)) == null ? void 0 : _a.label;
626
+ const handleSelect = (val) => {
627
+ setInternal(val);
628
+ setOpen(false);
629
+ onChange == null ? void 0 : onChange(val);
630
+ };
631
+ (0, import_react8.useEffect)(() => {
632
+ const handleOutside = (e) => {
633
+ if (ref.current && !ref.current.contains(e.target)) setOpen(false);
634
+ };
635
+ document.addEventListener("mousedown", handleOutside);
636
+ return () => document.removeEventListener("mousedown", handleOutside);
637
+ }, []);
638
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { ref, className: `${Select_default.wrapper} ${disabled ? Select_default.disabled : ""}`, children: [
639
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
640
+ "button",
641
+ {
642
+ type: "button",
643
+ className: `${Select_default.trigger} ${open ? Select_default.open : ""}`,
644
+ onClick: () => !disabled && setOpen((o) => !o),
645
+ disabled,
646
+ children: [
647
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: selectedLabel ? Select_default.value : Select_default.placeholder, children: selectedLabel != null ? selectedLabel : placeholder }),
648
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react8.ChevronDown, { size: 16, className: `${Select_default.chevron} ${open ? Select_default.chevronOpen : ""}` })
649
+ ]
650
+ }
651
+ ),
652
+ open && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: Select_default.dropdown, children: options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
653
+ "div",
654
+ {
655
+ className: `${Select_default.option} ${selected === option.value ? Select_default.selected : ""}`,
656
+ onClick: () => handleSelect(option.value),
657
+ children: [
658
+ selected === option.value ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react8.Check, { size: 14, className: Select_default.checkIcon }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: Select_default.checkSpacer }),
659
+ option.label
660
+ ]
661
+ },
662
+ option.value
663
+ )) })
664
+ ] });
665
+ };
666
+ var Select_default2 = Select;
667
+
668
+ // src/components/Skeleton/Skeleton.module.css
669
+ var Skeleton_default = {};
670
+
671
+ // src/components/Skeleton/Skeleton.tsx
672
+ var import_jsx_runtime18 = require("react/jsx-runtime");
673
+ var Skeleton = ({ height = "1rem", width = "100%", circle = false }) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
674
+ "div",
675
+ {
676
+ className: `${Skeleton_default.skeleton} ${circle ? Skeleton_default.circle : ""}`,
677
+ style: { height, width },
678
+ "aria-hidden": "true"
679
+ }
680
+ );
681
+ var Skeleton_default2 = Skeleton;
682
+
683
+ // src/components/Slider/Slider.tsx
684
+ var import_react9 = require("react");
685
+
686
+ // src/components/Slider/Slider.module.css
687
+ var Slider_default = {};
688
+
689
+ // src/components/Slider/Slider.tsx
690
+ var import_jsx_runtime19 = require("react/jsx-runtime");
691
+ var Slider = ({
692
+ value,
693
+ defaultValue = 50,
694
+ min = 0,
695
+ max = 100,
696
+ step = 1,
697
+ disabled,
698
+ onChange
699
+ }) => {
700
+ const [internal, setInternal] = (0, import_react9.useState)(defaultValue);
701
+ const current = value !== void 0 ? value : internal;
702
+ const fill = `${(current - min) / (max - min) * 100}%`;
703
+ const handleChange = (e) => {
704
+ const val = Number(e.target.value);
705
+ setInternal(val);
706
+ onChange == null ? void 0 : onChange(val);
707
+ };
708
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: `${Slider_default.wrapper} ${disabled ? Slider_default.disabled : ""}`, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
709
+ "input",
710
+ {
711
+ type: "range",
712
+ min,
713
+ max,
714
+ step,
715
+ value: current,
716
+ disabled,
717
+ onChange: handleChange,
718
+ className: Slider_default.range,
719
+ style: { "--fill": fill }
720
+ }
721
+ ) });
722
+ };
723
+ var Slider_default2 = Slider;
724
+
725
+ // src/components/Spinner/Spinner.tsx
726
+ var import_lucide_react9 = require("lucide-react");
727
+
728
+ // src/components/Spinner/Spinner.module.css
729
+ var Spinner_default = {};
730
+
731
+ // src/components/Spinner/Spinner.tsx
732
+ var import_jsx_runtime20 = require("react/jsx-runtime");
733
+ var sizePx = { sm: 16, md: 24, lg: 32 };
734
+ var Spinner = ({ size = "md" }) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react9.Loader2, { size: sizePx[size], className: Spinner_default.spinner, "aria-label": "Loading" });
735
+ var Spinner_default2 = Spinner;
736
+
737
+ // src/components/Switch/Switch.tsx
738
+ var import_react10 = require("react");
739
+
740
+ // src/components/Switch/Switch.module.css
741
+ var Switch_default = {};
742
+
743
+ // src/components/Switch/Switch.tsx
744
+ var import_jsx_runtime21 = require("react/jsx-runtime");
745
+ var Switch = ({
746
+ label,
747
+ checked,
748
+ defaultChecked = false,
749
+ disabled,
750
+ id,
751
+ onChange
752
+ }) => {
753
+ const [internal, setInternal] = (0, import_react10.useState)(defaultChecked);
754
+ const isOn = checked !== void 0 ? checked : internal;
755
+ const handleToggle = () => {
756
+ if (disabled) return;
757
+ const next = !isOn;
758
+ setInternal(next);
759
+ onChange == null ? void 0 : onChange(next);
760
+ };
761
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("label", { className: `${Switch_default.container} ${disabled ? Switch_default.disabled : ""}`, htmlFor: id, children: [
762
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
763
+ "input",
764
+ {
765
+ type: "checkbox",
766
+ id,
767
+ checked: isOn,
768
+ disabled,
769
+ onChange: handleToggle,
770
+ className: Switch_default.input
771
+ }
772
+ ),
773
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: `${Switch_default.track} ${isOn ? Switch_default.on : ""}`, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: `${Switch_default.thumb} ${isOn ? Switch_default.thumbOn : ""}` }) }),
774
+ label && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: Switch_default.label, children: label })
775
+ ] });
776
+ };
777
+ var Switch_default2 = Switch;
778
+
779
+ // src/components/Table/Table.module.css
780
+ var Table_default = {};
781
+
782
+ // src/components/Table/Table.tsx
783
+ var import_jsx_runtime22 = require("react/jsx-runtime");
784
+ var Table = (_a) => {
785
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
786
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: Table_default.wrapper, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("table", __spreadValues({ className: `${Table_default.table}${className ? ` ${className}` : ""}` }, props)) });
787
+ };
788
+ var TableHead = (props) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("thead", __spreadValues({}, props));
789
+ var TableBody = (props) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("tbody", __spreadValues({}, props));
790
+ var TableRow = (_a) => {
791
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
792
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("tr", __spreadValues({ className: `${Table_default.row}${className ? ` ${className}` : ""}` }, props));
793
+ };
794
+ var TableHeader = (_a) => {
795
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
796
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("th", __spreadValues({ className: `${Table_default.th}${className ? ` ${className}` : ""}` }, props));
797
+ };
798
+ var TableCell = (_a) => {
799
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
800
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("td", __spreadValues({ className: `${Table_default.td}${className ? ` ${className}` : ""}` }, props));
801
+ };
802
+
803
+ // src/components/Tabs/Tabs.tsx
804
+ var import_react11 = require("react");
805
+
806
+ // src/components/Tabs/Tabs.module.css
807
+ var Tabs_default = {};
808
+
809
+ // src/components/Tabs/Tabs.tsx
810
+ var import_jsx_runtime23 = require("react/jsx-runtime");
811
+ var Tabs = ({ tabs, defaultValue }) => {
812
+ var _a, _b;
813
+ const [active, setActive] = (0, import_react11.useState)((_b = defaultValue != null ? defaultValue : (_a = tabs[0]) == null ? void 0 : _a.value) != null ? _b : "");
814
+ const activeTab = tabs.find((t) => t.value === active);
815
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: Tabs_default.root, children: [
816
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: Tabs_default.list, role: "tablist", children: tabs.map((tab) => /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
817
+ "button",
818
+ {
819
+ role: "tab",
820
+ "aria-selected": active === tab.value,
821
+ className: `${Tabs_default.trigger} ${active === tab.value ? Tabs_default.active : ""}`,
822
+ onClick: () => setActive(tab.value),
823
+ children: [
824
+ tab.icon && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: Tabs_default["trigger-icon"], children: tab.icon }),
825
+ tab.label
826
+ ]
827
+ },
828
+ tab.value
829
+ )) }),
830
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: Tabs_default.content, role: "tabpanel", children: activeTab == null ? void 0 : activeTab.content })
831
+ ] });
832
+ };
833
+ var Tabs_default2 = Tabs;
834
+
835
+ // src/components/Textarea/Textarea.module.css
836
+ var Textarea_default = {};
837
+
838
+ // src/components/Textarea/Textarea.tsx
839
+ var import_jsx_runtime24 = require("react/jsx-runtime");
840
+ var Textarea = (_a) => {
841
+ var _b = _a, { error, className } = _b, props = __objRest(_b, ["error", "className"]);
842
+ const classes = [
843
+ Textarea_default.textarea,
844
+ error ? Textarea_default.error : "",
845
+ className != null ? className : ""
846
+ ].filter(Boolean).join(" ");
847
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("textarea", __spreadValues({ className: classes }, props));
848
+ };
849
+ var Textarea_default2 = Textarea;
850
+
851
+ // src/components/Tooltip/Tooltip.module.css
852
+ var Tooltip_default = {};
853
+
854
+ // src/components/Tooltip/Tooltip.tsx
855
+ var import_jsx_runtime25 = require("react/jsx-runtime");
856
+ var Tooltip = ({ content, children, position = "top" }) => /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("span", { className: Tooltip_default.wrapper, children: [
857
+ children,
858
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: `${Tooltip_default.tooltip} ${Tooltip_default[position]}`, role: "tooltip", children: content })
859
+ ] });
860
+ var Tooltip_default2 = Tooltip;
861
+ // Annotate the CommonJS export names for ESM import in node:
862
+ 0 && (module.exports = {
863
+ Accordion,
864
+ Alert,
865
+ Avatar,
866
+ Badge,
867
+ Breadcrumb,
868
+ Button,
869
+ Card,
870
+ CardContent,
871
+ CardDescription,
872
+ CardFooter,
873
+ CardHeader,
874
+ CardTitle,
875
+ Checkbox,
876
+ CopyButton,
877
+ FileUpload,
878
+ Input,
879
+ Label,
880
+ PasswordInput,
881
+ Progress,
882
+ RadioGroup,
883
+ Select,
884
+ Skeleton,
885
+ Slider,
886
+ Spinner,
887
+ Switch,
888
+ Table,
889
+ TableBody,
890
+ TableCell,
891
+ TableHead,
892
+ TableHeader,
893
+ TableRow,
894
+ Tabs,
895
+ Textarea,
896
+ ThemeProvider,
897
+ Tooltip,
898
+ useTheme
899
+ });
900
+ //# sourceMappingURL=index.cjs.map