@efiche/design 0.1.7 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -20
- package/dist/index.cjs +779 -330
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +0 -886
- package/dist/index.css.map +1 -1
- package/dist/index.js +786 -337
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -50,10 +50,10 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
50
50
|
var index_exports = {};
|
|
51
51
|
__export(index_exports, {
|
|
52
52
|
Accordion: () => Accordion_default,
|
|
53
|
-
Alert: () =>
|
|
54
|
-
Avatar: () =>
|
|
55
|
-
Badge: () =>
|
|
56
|
-
Breadcrumb: () =>
|
|
53
|
+
Alert: () => Alert_default,
|
|
54
|
+
Avatar: () => Avatar_default,
|
|
55
|
+
Badge: () => Badge_default,
|
|
56
|
+
Breadcrumb: () => Breadcrumb_default,
|
|
57
57
|
Button: () => Button_default,
|
|
58
58
|
Card: () => Card,
|
|
59
59
|
CardContent: () => CardContent,
|
|
@@ -61,29 +61,29 @@ __export(index_exports, {
|
|
|
61
61
|
CardFooter: () => CardFooter,
|
|
62
62
|
CardHeader: () => CardHeader,
|
|
63
63
|
CardTitle: () => CardTitle,
|
|
64
|
-
Checkbox: () =>
|
|
65
|
-
CopyButton: () =>
|
|
66
|
-
FileUpload: () =>
|
|
67
|
-
Input: () =>
|
|
68
|
-
Label: () =>
|
|
64
|
+
Checkbox: () => Checkbox_default,
|
|
65
|
+
CopyButton: () => CopyButton_default,
|
|
66
|
+
FileUpload: () => FileUpload_default,
|
|
67
|
+
Input: () => Input_default,
|
|
68
|
+
Label: () => Label_default,
|
|
69
69
|
PasswordInput: () => PasswordInput_default,
|
|
70
|
-
Progress: () =>
|
|
71
|
-
RadioGroup: () =>
|
|
72
|
-
Select: () =>
|
|
73
|
-
Skeleton: () =>
|
|
74
|
-
Slider: () =>
|
|
75
|
-
Spinner: () =>
|
|
76
|
-
Switch: () =>
|
|
70
|
+
Progress: () => Progress_default,
|
|
71
|
+
RadioGroup: () => RadioGroup_default,
|
|
72
|
+
Select: () => Select_default,
|
|
73
|
+
Skeleton: () => Skeleton_default,
|
|
74
|
+
Slider: () => Slider_default,
|
|
75
|
+
Spinner: () => Spinner_default,
|
|
76
|
+
Switch: () => Switch_default,
|
|
77
77
|
Table: () => Table,
|
|
78
78
|
TableBody: () => TableBody,
|
|
79
79
|
TableCell: () => TableCell,
|
|
80
80
|
TableHead: () => TableHead,
|
|
81
81
|
TableHeader: () => TableHeader,
|
|
82
82
|
TableRow: () => TableRow,
|
|
83
|
-
Tabs: () =>
|
|
84
|
-
Textarea: () =>
|
|
83
|
+
Tabs: () => Tabs_default,
|
|
84
|
+
Textarea: () => Textarea_default,
|
|
85
85
|
ThemeProvider: () => ThemeProvider,
|
|
86
|
-
Tooltip: () =>
|
|
86
|
+
Tooltip: () => Tooltip_default,
|
|
87
87
|
useTheme: () => useTheme
|
|
88
88
|
});
|
|
89
89
|
module.exports = __toCommonJS(index_exports);
|
|
@@ -201,71 +201,144 @@ var Accordion_default = Accordion;
|
|
|
201
201
|
|
|
202
202
|
// src/components/Alert/Alert.tsx
|
|
203
203
|
var import_lucide_react2 = require("lucide-react");
|
|
204
|
-
|
|
205
|
-
// src/components/Alert/Alert.module.css
|
|
206
|
-
var Alert_default = {};
|
|
207
|
-
|
|
208
|
-
// src/components/Alert/Alert.tsx
|
|
209
204
|
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
205
|
+
var variantMap = {
|
|
206
|
+
info: { bg: "var(--ds-info-bg, #eff6ff)", border: "var(--ds-info, #3b82f6)", icon: "var(--ds-info, #3b82f6)", title: "var(--ds-info-title, #1e3a8a)", desc: "var(--ds-info-desc, #1e40af)" },
|
|
207
|
+
success: { bg: "var(--ds-success-bg, #f0fdf4)", border: "var(--ds-success, #22c55e)", icon: "var(--ds-success, #22c55e)", title: "var(--ds-success-title, #14532d)", desc: "var(--ds-success-desc, #166534)" },
|
|
208
|
+
warning: { bg: "var(--ds-warning-bg, #fffbeb)", border: "var(--ds-warning, #f59e0b)", icon: "var(--ds-warning, #f59e0b)", title: "var(--ds-warning-title, #78350f)", desc: "var(--ds-warning-desc, #92400e)" },
|
|
209
|
+
danger: { bg: "var(--ds-danger-bg, #fef2f2)", border: "var(--ds-danger, #ef4444)", icon: "var(--ds-danger, #ef4444)", title: "var(--ds-danger-title, #7f1d1d)", desc: "var(--ds-danger-desc, #991b1b)" }
|
|
210
|
+
};
|
|
210
211
|
var icons = {
|
|
211
212
|
info: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react2.Info, { size: 16 }),
|
|
212
213
|
success: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react2.CheckCircle2, { size: 16 }),
|
|
213
214
|
warning: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react2.AlertTriangle, { size: 16 }),
|
|
214
215
|
danger: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react2.AlertCircle, { size: 16 })
|
|
215
216
|
};
|
|
216
|
-
var Alert = ({ variant = "info", title, description }) =>
|
|
217
|
-
|
|
218
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", {
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
217
|
+
var Alert = ({ variant = "info", title, description }) => {
|
|
218
|
+
const v = variantMap[variant];
|
|
219
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { role: "alert", style: {
|
|
220
|
+
display: "flex",
|
|
221
|
+
gap: "0.75rem",
|
|
222
|
+
padding: "1rem",
|
|
223
|
+
borderRadius: "0.5rem",
|
|
224
|
+
borderLeft: `4px solid ${v.border}`,
|
|
225
|
+
backgroundColor: v.bg
|
|
226
|
+
}, children: [
|
|
227
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { flexShrink: 0, marginTop: "0.125rem", color: v.icon }, children: icons[variant] }),
|
|
228
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { style: { flex: 1 }, children: [
|
|
229
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { style: { fontWeight: 600, fontSize: "0.875rem", marginBottom: "0.25rem", marginTop: 0, color: v.title }, children: title }),
|
|
230
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { style: { fontSize: "0.875rem", margin: 0, color: v.desc }, children: description })
|
|
231
|
+
] })
|
|
232
|
+
] });
|
|
233
|
+
};
|
|
234
|
+
var Alert_default = Alert;
|
|
227
235
|
|
|
228
236
|
// src/components/Avatar/Avatar.tsx
|
|
229
237
|
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
238
|
+
var sizeMap = {
|
|
239
|
+
sm: { width: "2rem", height: "2rem", fontSize: "0.625rem" },
|
|
240
|
+
md: { width: "2.5rem", height: "2.5rem", fontSize: "0.875rem" },
|
|
241
|
+
lg: { width: "4rem", height: "4rem", fontSize: "1.25rem" }
|
|
242
|
+
};
|
|
230
243
|
var Avatar = ({ fallback, size = "md", style, className }) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
231
244
|
"div",
|
|
232
245
|
{
|
|
233
|
-
className
|
|
234
|
-
style,
|
|
246
|
+
className,
|
|
235
247
|
"aria-label": fallback,
|
|
248
|
+
style: __spreadValues(__spreadValues({
|
|
249
|
+
display: "inline-flex",
|
|
250
|
+
alignItems: "center",
|
|
251
|
+
justifyContent: "center",
|
|
252
|
+
borderRadius: "9999px",
|
|
253
|
+
backgroundColor: "var(--ds-accent, #f1f5f9)",
|
|
254
|
+
color: "var(--ds-text-primary, #0f172a)",
|
|
255
|
+
fontWeight: 600,
|
|
256
|
+
flexShrink: 0,
|
|
257
|
+
userSelect: "none"
|
|
258
|
+
}, sizeMap[size]), style),
|
|
236
259
|
children: fallback
|
|
237
260
|
}
|
|
238
261
|
);
|
|
239
|
-
var
|
|
240
|
-
|
|
241
|
-
// src/components/Badge/Badge.module.css
|
|
242
|
-
var Badge_default = {};
|
|
262
|
+
var Avatar_default = Avatar;
|
|
243
263
|
|
|
244
264
|
// src/components/Badge/Badge.tsx
|
|
245
265
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
246
|
-
var
|
|
247
|
-
var
|
|
266
|
+
var variantMap2 = {
|
|
267
|
+
default: { backgroundColor: "var(--ds-primary, #3b82f6)", color: "#fff" },
|
|
268
|
+
secondary: { backgroundColor: "var(--ds-muted, #f1f5f9)", color: "var(--ds-text-secondary, #64748b)" },
|
|
269
|
+
outline: { backgroundColor: "transparent", border: "1px solid var(--ds-border, #e2e8f0)", color: "var(--ds-text-primary, #0f172a)" },
|
|
270
|
+
danger: { backgroundColor: "var(--ds-danger, #ef4444)", color: "#fff" },
|
|
271
|
+
success: { backgroundColor: "var(--ds-success, #22c55e)", color: "#fff" },
|
|
272
|
+
warning: { backgroundColor: "var(--ds-warning, #f59e0b)", color: "#fff" },
|
|
273
|
+
info: { backgroundColor: "var(--ds-info, #3b82f6)", color: "#fff" }
|
|
274
|
+
};
|
|
275
|
+
var sizeMap2 = {
|
|
276
|
+
sm: { padding: "0.125rem 0.5rem", fontSize: "0.625rem" },
|
|
277
|
+
md: { padding: "0.25rem 0.625rem", fontSize: "0.75rem" },
|
|
278
|
+
lg: { padding: "0.375rem 0.875rem", fontSize: "0.875rem" }
|
|
279
|
+
};
|
|
280
|
+
var Badge = ({ variant = "default", size = "md", children, style }) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { style: __spreadValues(__spreadValues(__spreadValues({
|
|
281
|
+
display: "inline-flex",
|
|
282
|
+
alignItems: "center",
|
|
283
|
+
gap: "0.25rem",
|
|
284
|
+
borderRadius: "9999px",
|
|
285
|
+
fontWeight: 500,
|
|
286
|
+
whiteSpace: "nowrap"
|
|
287
|
+
}, variantMap2[variant]), sizeMap2[size]), style), children });
|
|
288
|
+
var Badge_default = Badge;
|
|
248
289
|
|
|
249
290
|
// src/components/Breadcrumb/Breadcrumb.tsx
|
|
291
|
+
var import_react3 = require("react");
|
|
250
292
|
var import_lucide_react3 = require("lucide-react");
|
|
251
|
-
|
|
252
|
-
// src/components/Breadcrumb/Breadcrumb.module.css
|
|
253
|
-
var Breadcrumb_default = {};
|
|
254
|
-
|
|
255
|
-
// src/components/Breadcrumb/Breadcrumb.tsx
|
|
256
293
|
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
257
|
-
var Breadcrumb = ({ items }) =>
|
|
258
|
-
const
|
|
259
|
-
return /* @__PURE__ */ (0, import_jsx_runtime6.
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
294
|
+
var Breadcrumb = ({ items }) => {
|
|
295
|
+
const [hovered, setHovered] = (0, import_react3.useState)(null);
|
|
296
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("nav", { "aria-label": "Breadcrumb", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("ol", { style: {
|
|
297
|
+
display: "flex",
|
|
298
|
+
flexWrap: "wrap",
|
|
299
|
+
alignItems: "center",
|
|
300
|
+
listStyle: "none",
|
|
301
|
+
padding: 0,
|
|
302
|
+
margin: 0,
|
|
303
|
+
fontSize: "0.875rem"
|
|
304
|
+
}, children: items.map((item, i) => {
|
|
305
|
+
const isLast = i === items.length - 1;
|
|
306
|
+
const isHovered = hovered === item.label;
|
|
307
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("li", { style: { display: "flex", alignItems: "center" }, children: [
|
|
308
|
+
i > 0 && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
309
|
+
import_lucide_react3.ChevronRight,
|
|
310
|
+
{
|
|
311
|
+
size: 14,
|
|
312
|
+
"aria-hidden": true,
|
|
313
|
+
style: { color: "var(--ds-text-secondary, #64748b)", margin: "0 0.25rem", flexShrink: 0 }
|
|
314
|
+
}
|
|
315
|
+
),
|
|
316
|
+
isLast || !item.href ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { style: {
|
|
317
|
+
color: isLast ? "var(--ds-text-primary, #0f172a)" : "var(--ds-text-secondary, #64748b)",
|
|
318
|
+
fontWeight: isLast ? 500 : void 0,
|
|
319
|
+
cursor: isLast ? "default" : void 0
|
|
320
|
+
}, children: item.label }) : /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
321
|
+
"a",
|
|
322
|
+
{
|
|
323
|
+
href: item.href,
|
|
324
|
+
onMouseEnter: () => setHovered(item.label),
|
|
325
|
+
onMouseLeave: () => setHovered(null),
|
|
326
|
+
style: {
|
|
327
|
+
color: "var(--ds-text-secondary, #64748b)",
|
|
328
|
+
textDecoration: isHovered ? "underline" : "none",
|
|
329
|
+
transition: "color 0.15s"
|
|
330
|
+
},
|
|
331
|
+
children: item.label
|
|
332
|
+
}
|
|
333
|
+
)
|
|
334
|
+
] }, item.label);
|
|
335
|
+
}) }) });
|
|
336
|
+
};
|
|
337
|
+
var Breadcrumb_default = Breadcrumb;
|
|
265
338
|
|
|
266
339
|
// src/components/Button/Button.tsx
|
|
267
340
|
var import_lucide_react4 = require("lucide-react");
|
|
268
|
-
var
|
|
341
|
+
var import_react4 = require("react");
|
|
269
342
|
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
270
343
|
var variantStyles = {
|
|
271
344
|
solid: { backgroundColor: "var(--ds-primary, #3b82f6)", color: "#fff", borderColor: "transparent" },
|
|
@@ -328,7 +401,7 @@ var Button = (_a) => {
|
|
|
328
401
|
"size",
|
|
329
402
|
"style"
|
|
330
403
|
]);
|
|
331
|
-
const [hovered, setHovered] = (0,
|
|
404
|
+
const [hovered, setHovered] = (0, import_react4.useState)(false);
|
|
332
405
|
const resolvedVariant = variant != null ? variant : danger ? "danger" : warning ? "warning" : info ? "info" : success ? "success" : ghost ? "ghost" : outline ? "outline" : "solid";
|
|
333
406
|
const resolvedSize = size != null ? size : small ? "sm" : large ? "lg" : "md";
|
|
334
407
|
const isDisabled = disabled || loading;
|
|
@@ -374,43 +447,58 @@ var Button = (_a) => {
|
|
|
374
447
|
};
|
|
375
448
|
var Button_default = Button;
|
|
376
449
|
|
|
377
|
-
// src/components/Card/Card.module.css
|
|
378
|
-
var Card_default = {};
|
|
379
|
-
|
|
380
450
|
// src/components/Card/Card.tsx
|
|
381
451
|
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
382
452
|
var Card = (_a) => {
|
|
383
|
-
var _b = _a, {
|
|
384
|
-
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", __spreadValues({
|
|
453
|
+
var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
|
|
454
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", __spreadValues({ style: __spreadValues({
|
|
455
|
+
border: "1px solid var(--ds-border, #e2e8f0)",
|
|
456
|
+
borderRadius: "0.5rem",
|
|
457
|
+
backgroundColor: "var(--ds-card, #ffffff)"
|
|
458
|
+
}, style) }, props));
|
|
385
459
|
};
|
|
386
460
|
var CardHeader = (_a) => {
|
|
387
|
-
var _b = _a, {
|
|
388
|
-
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", __spreadValues({
|
|
461
|
+
var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
|
|
462
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", __spreadValues({ style: __spreadValues({
|
|
463
|
+
display: "flex",
|
|
464
|
+
flexDirection: "column",
|
|
465
|
+
gap: "0.375rem",
|
|
466
|
+
padding: "1.5rem 1.5rem 0"
|
|
467
|
+
}, style) }, props));
|
|
389
468
|
};
|
|
390
469
|
var CardTitle = (_a) => {
|
|
391
|
-
var _b = _a, {
|
|
392
|
-
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h3", __spreadValues({
|
|
470
|
+
var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
|
|
471
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h3", __spreadValues({ style: __spreadValues({
|
|
472
|
+
fontSize: "1rem",
|
|
473
|
+
fontWeight: 600,
|
|
474
|
+
color: "var(--ds-text-primary, #0f172a)",
|
|
475
|
+
margin: 0,
|
|
476
|
+
lineHeight: 1.4
|
|
477
|
+
}, style) }, props));
|
|
393
478
|
};
|
|
394
479
|
var CardDescription = (_a) => {
|
|
395
|
-
var _b = _a, {
|
|
396
|
-
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", __spreadValues({
|
|
480
|
+
var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
|
|
481
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", __spreadValues({ style: __spreadValues({
|
|
482
|
+
fontSize: "0.875rem",
|
|
483
|
+
color: "var(--ds-text-secondary, #64748b)",
|
|
484
|
+
margin: 0
|
|
485
|
+
}, style) }, props));
|
|
397
486
|
};
|
|
398
487
|
var CardContent = (_a) => {
|
|
399
|
-
var _b = _a, {
|
|
400
|
-
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", __spreadValues({
|
|
488
|
+
var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
|
|
489
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", __spreadValues({ style: __spreadValues({ padding: "1.5rem" }, style) }, props));
|
|
401
490
|
};
|
|
402
491
|
var CardFooter = (_a) => {
|
|
403
|
-
var _b = _a, {
|
|
404
|
-
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", __spreadValues({
|
|
492
|
+
var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
|
|
493
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", __spreadValues({ style: __spreadValues({
|
|
494
|
+
display: "flex",
|
|
495
|
+
alignItems: "center",
|
|
496
|
+
padding: "0 1.5rem 1.5rem"
|
|
497
|
+
}, style) }, props));
|
|
405
498
|
};
|
|
406
499
|
|
|
407
500
|
// src/components/Checkbox/Checkbox.tsx
|
|
408
|
-
var
|
|
409
|
-
|
|
410
|
-
// src/components/Checkbox/Checkbox.module.css
|
|
411
|
-
var Checkbox_default = {};
|
|
412
|
-
|
|
413
|
-
// src/components/Checkbox/Checkbox.tsx
|
|
501
|
+
var import_react5 = require("react");
|
|
414
502
|
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
415
503
|
var Checkbox = ({
|
|
416
504
|
label,
|
|
@@ -420,7 +508,7 @@ var Checkbox = ({
|
|
|
420
508
|
id,
|
|
421
509
|
onChange
|
|
422
510
|
}) => {
|
|
423
|
-
const [internal, setInternal] = (0,
|
|
511
|
+
const [internal, setInternal] = (0, import_react5.useState)(defaultChecked);
|
|
424
512
|
const isChecked = checked !== void 0 ? checked : internal;
|
|
425
513
|
const handleChange = () => {
|
|
426
514
|
if (disabled) return;
|
|
@@ -428,7 +516,14 @@ var Checkbox = ({
|
|
|
428
516
|
setInternal(next);
|
|
429
517
|
onChange == null ? void 0 : onChange(next);
|
|
430
518
|
};
|
|
431
|
-
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("label", {
|
|
519
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("label", { htmlFor: id, style: {
|
|
520
|
+
display: "inline-flex",
|
|
521
|
+
alignItems: "center",
|
|
522
|
+
gap: "0.5rem",
|
|
523
|
+
cursor: disabled ? "not-allowed" : "pointer",
|
|
524
|
+
userSelect: "none",
|
|
525
|
+
opacity: disabled ? 0.5 : 1
|
|
526
|
+
}, children: [
|
|
432
527
|
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
433
528
|
"input",
|
|
434
529
|
{
|
|
@@ -437,26 +532,33 @@ var Checkbox = ({
|
|
|
437
532
|
checked: isChecked,
|
|
438
533
|
disabled,
|
|
439
534
|
onChange: handleChange,
|
|
440
|
-
|
|
535
|
+
style: { position: "absolute", opacity: 0, width: 0, height: 0 }
|
|
441
536
|
}
|
|
442
537
|
),
|
|
443
|
-
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", {
|
|
444
|
-
|
|
538
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { style: {
|
|
539
|
+
width: "1.125rem",
|
|
540
|
+
height: "1.125rem",
|
|
541
|
+
border: `2px solid ${isChecked ? "var(--ds-primary, #3b82f6)" : "var(--ds-border, #e2e8f0)"}`,
|
|
542
|
+
borderRadius: "0.25rem",
|
|
543
|
+
display: "flex",
|
|
544
|
+
alignItems: "center",
|
|
545
|
+
justifyContent: "center",
|
|
546
|
+
flexShrink: 0,
|
|
547
|
+
transition: "background-color 0.15s, border-color 0.15s",
|
|
548
|
+
backgroundColor: isChecked ? "var(--ds-primary, #3b82f6)" : "var(--ds-card, #fff)"
|
|
549
|
+
}, children: isChecked && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("svg", { viewBox: "0 0 12 10", fill: "none", style: { width: "0.625rem", height: "0.625rem" }, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("path", { d: "M1 5l3.5 3.5L11 1", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) }),
|
|
550
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { style: { fontSize: "0.875rem", color: "var(--ds-text-primary, #0f172a)" }, children: label })
|
|
445
551
|
] });
|
|
446
552
|
};
|
|
447
|
-
var
|
|
553
|
+
var Checkbox_default = Checkbox;
|
|
448
554
|
|
|
449
555
|
// src/components/CopyButton/CopyButton.tsx
|
|
450
556
|
var import_lucide_react5 = require("lucide-react");
|
|
451
|
-
var
|
|
452
|
-
|
|
453
|
-
// src/components/CopyButton/CopyButton.module.css
|
|
454
|
-
var CopyButton_default = {};
|
|
455
|
-
|
|
456
|
-
// src/components/CopyButton/CopyButton.tsx
|
|
557
|
+
var import_react6 = require("react");
|
|
457
558
|
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
458
559
|
var CopyButton = ({ text }) => {
|
|
459
|
-
const [copied, setCopied] = (0,
|
|
560
|
+
const [copied, setCopied] = (0, import_react6.useState)(false);
|
|
561
|
+
const [hovered, setHovered] = (0, import_react6.useState)(false);
|
|
460
562
|
const handleCopy = () => {
|
|
461
563
|
navigator.clipboard.writeText(text);
|
|
462
564
|
setCopied(true);
|
|
@@ -465,40 +567,51 @@ var CopyButton = ({ text }) => {
|
|
|
465
567
|
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
466
568
|
"button",
|
|
467
569
|
{
|
|
468
|
-
className: CopyButton_default.copyButton,
|
|
469
570
|
onClick: handleCopy,
|
|
571
|
+
onMouseEnter: () => setHovered(true),
|
|
572
|
+
onMouseLeave: () => setHovered(false),
|
|
470
573
|
"aria-label": copied ? "Copied" : `Copy ${text}`,
|
|
471
|
-
|
|
574
|
+
style: {
|
|
575
|
+
display: "inline-flex",
|
|
576
|
+
alignItems: "center",
|
|
577
|
+
justifyContent: "center",
|
|
578
|
+
padding: "0.25rem",
|
|
579
|
+
border: "none",
|
|
580
|
+
borderRadius: "0.25rem",
|
|
581
|
+
backgroundColor: hovered ? "var(--ds-accent, #f1f5f9)" : "transparent",
|
|
582
|
+
color: hovered ? "var(--ds-text-primary, #0f172a)" : "var(--ds-text-secondary, #64748b)",
|
|
583
|
+
cursor: "pointer",
|
|
584
|
+
transition: "background-color 0.15s, color 0.15s"
|
|
585
|
+
},
|
|
586
|
+
children: copied ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react5.Check, { style: { width: "1rem", height: "1rem" } }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react5.Copy, { style: { width: "1rem", height: "1rem" } })
|
|
472
587
|
}
|
|
473
588
|
);
|
|
474
589
|
};
|
|
475
|
-
var
|
|
590
|
+
var CopyButton_default = CopyButton;
|
|
476
591
|
|
|
477
592
|
// src/components/FileUpload/FileUpload.tsx
|
|
478
593
|
var import_lucide_react6 = require("lucide-react");
|
|
479
|
-
var
|
|
480
|
-
|
|
481
|
-
// src/components/FileUpload/FileUpload.module.css
|
|
482
|
-
var FileUpload_default = {};
|
|
483
|
-
|
|
484
|
-
// src/components/FileUpload/FileUpload.tsx
|
|
594
|
+
var import_react7 = require("react");
|
|
485
595
|
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
486
596
|
var FileUpload = ({ accept, multiple, disabled, onFileSelect }) => {
|
|
487
|
-
const [isDragging, setIsDragging] = (0,
|
|
488
|
-
const [
|
|
489
|
-
const
|
|
597
|
+
const [isDragging, setIsDragging] = (0, import_react7.useState)(false);
|
|
598
|
+
const [isHovered, setIsHovered] = (0, import_react7.useState)(false);
|
|
599
|
+
const [fileNames, setFileNames] = (0, import_react7.useState)([]);
|
|
600
|
+
const inputRef = (0, import_react7.useRef)(null);
|
|
490
601
|
const handleFiles = (list) => {
|
|
491
602
|
setFileNames(Array.from(list).map((f) => f.name));
|
|
492
603
|
onFileSelect == null ? void 0 : onFileSelect(list);
|
|
493
604
|
};
|
|
605
|
+
const isActive = isDragging || isHovered;
|
|
494
606
|
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
495
607
|
"div",
|
|
496
608
|
{
|
|
497
|
-
className: `${FileUpload_default.zone} ${isDragging ? FileUpload_default.dragging : ""} ${disabled ? FileUpload_default.disabled : ""}`,
|
|
498
609
|
onClick: () => {
|
|
499
610
|
var _a;
|
|
500
611
|
return !disabled && ((_a = inputRef.current) == null ? void 0 : _a.click());
|
|
501
612
|
},
|
|
613
|
+
onMouseEnter: () => !disabled && setIsHovered(true),
|
|
614
|
+
onMouseLeave: () => setIsHovered(false),
|
|
502
615
|
onDragOver: (e) => {
|
|
503
616
|
e.preventDefault();
|
|
504
617
|
setIsDragging(true);
|
|
@@ -509,6 +622,20 @@ var FileUpload = ({ accept, multiple, disabled, onFileSelect }) => {
|
|
|
509
622
|
setIsDragging(false);
|
|
510
623
|
if (!disabled && e.dataTransfer.files.length) handleFiles(e.dataTransfer.files);
|
|
511
624
|
},
|
|
625
|
+
style: {
|
|
626
|
+
border: `2px dashed ${isActive ? "var(--ds-primary, #3b82f6)" : "var(--ds-border, #e2e8f0)"}`,
|
|
627
|
+
borderRadius: "0.5rem",
|
|
628
|
+
padding: "2rem",
|
|
629
|
+
display: "flex",
|
|
630
|
+
flexDirection: "column",
|
|
631
|
+
alignItems: "center",
|
|
632
|
+
gap: "0.5rem",
|
|
633
|
+
cursor: disabled ? "not-allowed" : "pointer",
|
|
634
|
+
backgroundColor: isActive ? "var(--ds-primary-50, #eff6ff)" : "var(--ds-muted, #f1f5f9)",
|
|
635
|
+
transition: "border-color 0.15s, background-color 0.15s",
|
|
636
|
+
textAlign: "center",
|
|
637
|
+
opacity: disabled ? 0.5 : 1
|
|
638
|
+
},
|
|
512
639
|
children: [
|
|
513
640
|
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
514
641
|
"input",
|
|
@@ -518,12 +645,12 @@ var FileUpload = ({ accept, multiple, disabled, onFileSelect }) => {
|
|
|
518
645
|
accept,
|
|
519
646
|
multiple,
|
|
520
647
|
disabled,
|
|
521
|
-
|
|
648
|
+
style: { display: "none" },
|
|
522
649
|
onChange: (e) => e.target.files && handleFiles(e.target.files)
|
|
523
650
|
}
|
|
524
651
|
),
|
|
525
|
-
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react6.Upload, { size: 32,
|
|
526
|
-
fileNames.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", {
|
|
652
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react6.Upload, { size: 32, style: { color: "var(--ds-text-secondary, #64748b)" } }),
|
|
653
|
+
fileNames.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { style: { fontSize: "0.875rem", color: "var(--ds-primary, #3b82f6)", fontWeight: 500, margin: 0 }, children: fileNames.join(", ") }) : /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("p", { style: { fontSize: "0.875rem", color: "var(--ds-text-secondary, #64748b)", margin: 0 }, children: [
|
|
527
654
|
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("strong", { children: "Click to upload" }),
|
|
528
655
|
" or drag and drop"
|
|
529
656
|
] })
|
|
@@ -531,65 +658,91 @@ var FileUpload = ({ accept, multiple, disabled, onFileSelect }) => {
|
|
|
531
658
|
}
|
|
532
659
|
);
|
|
533
660
|
};
|
|
534
|
-
var
|
|
535
|
-
|
|
536
|
-
// src/components/Input/Input.module.css
|
|
537
|
-
var Input_default = {};
|
|
661
|
+
var FileUpload_default = FileUpload;
|
|
538
662
|
|
|
539
663
|
// src/components/Input/Input.tsx
|
|
540
664
|
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
665
|
+
var inputCSS = `
|
|
666
|
+
[data-ds-input]::placeholder { color: var(--ds-text-secondary, #64748b); }
|
|
667
|
+
[data-ds-input]:focus { outline: none; border-color: var(--ds-primary, #3b82f6); box-shadow: 0 0 0 3px rgb(59 130 246 / 0.15); }
|
|
668
|
+
[data-ds-input]:disabled { opacity: 0.5; cursor: not-allowed; background-color: var(--ds-muted, #f1f5f9); }
|
|
669
|
+
[data-ds-input][data-error="true"]:focus { border-color: var(--ds-danger, #ef4444); box-shadow: 0 0 0 3px rgb(239 68 68 / 0.15); }
|
|
670
|
+
[data-ds-input][data-success="true"]:focus { border-color: var(--ds-success, #22c55e); box-shadow: 0 0 0 3px rgb(34 197 94 / 0.15); }
|
|
671
|
+
`;
|
|
541
672
|
var Input = (_a) => {
|
|
542
|
-
var _b = _a, {
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
673
|
+
var _b = _a, { error, success, leftIcon, rightIcon, style } = _b, props = __objRest(_b, ["error", "success", "leftIcon", "rightIcon", "style"]);
|
|
674
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
|
|
675
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("style", { href: "ds-input", precedence: "low", children: inputCSS }),
|
|
676
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { style: { position: "relative", display: "flex", alignItems: "center", width: "100%" }, children: [
|
|
677
|
+
leftIcon && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { style: {
|
|
678
|
+
position: "absolute",
|
|
679
|
+
left: "0.625rem",
|
|
680
|
+
display: "flex",
|
|
681
|
+
alignItems: "center",
|
|
682
|
+
color: "var(--ds-text-secondary, #64748b)",
|
|
683
|
+
pointerEvents: "none"
|
|
684
|
+
}, children: leftIcon }),
|
|
685
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
686
|
+
"input",
|
|
687
|
+
__spreadValues({
|
|
688
|
+
"data-ds-input": "",
|
|
689
|
+
"data-error": error ? "true" : void 0,
|
|
690
|
+
"data-success": success ? "true" : void 0,
|
|
691
|
+
style: __spreadValues({
|
|
692
|
+
width: "100%",
|
|
693
|
+
height: "2.25rem",
|
|
694
|
+
paddingTop: 0,
|
|
695
|
+
paddingBottom: 0,
|
|
696
|
+
paddingLeft: leftIcon ? "2.25rem" : "0.75rem",
|
|
697
|
+
paddingRight: rightIcon ? "2.25rem" : "0.75rem",
|
|
698
|
+
border: `1px solid ${error ? "var(--ds-danger, #ef4444)" : success ? "var(--ds-success, #22c55e)" : "var(--ds-border, #e2e8f0)"}`,
|
|
699
|
+
borderRadius: "0.375rem",
|
|
700
|
+
fontSize: "0.875rem",
|
|
701
|
+
backgroundColor: "var(--ds-card, #fff)",
|
|
702
|
+
color: "var(--ds-text-primary, #0f172a)",
|
|
703
|
+
fontFamily: "inherit",
|
|
704
|
+
transition: "border-color 0.15s, box-shadow 0.15s"
|
|
705
|
+
}, style)
|
|
706
|
+
}, props)
|
|
707
|
+
),
|
|
708
|
+
rightIcon && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { style: {
|
|
709
|
+
position: "absolute",
|
|
710
|
+
right: "0.625rem",
|
|
711
|
+
display: "flex",
|
|
712
|
+
alignItems: "center",
|
|
713
|
+
color: "var(--ds-text-secondary, #64748b)",
|
|
714
|
+
pointerEvents: "none"
|
|
715
|
+
}, children: rightIcon })
|
|
716
|
+
] })
|
|
567
717
|
] });
|
|
568
718
|
};
|
|
569
|
-
var
|
|
570
|
-
|
|
571
|
-
// src/components/Label/Label.module.css
|
|
572
|
-
var Label_default = {};
|
|
719
|
+
var Input_default = Input;
|
|
573
720
|
|
|
574
721
|
// src/components/Label/Label.tsx
|
|
575
722
|
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
576
723
|
var Label = (_a) => {
|
|
577
|
-
var _b = _a, { children, required,
|
|
578
|
-
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("label", __spreadProps(__spreadValues({
|
|
724
|
+
var _b = _a, { children, required, style } = _b, props = __objRest(_b, ["children", "required", "style"]);
|
|
725
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("label", __spreadProps(__spreadValues({ style: __spreadValues({
|
|
726
|
+
display: "block",
|
|
727
|
+
fontSize: "0.875rem",
|
|
728
|
+
fontWeight: 500,
|
|
729
|
+
color: "var(--ds-text-primary, #0f172a)",
|
|
730
|
+
marginBottom: "0.375rem"
|
|
731
|
+
}, style) }, props), { children: [
|
|
579
732
|
children,
|
|
580
|
-
required && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", {
|
|
733
|
+
required && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { style: { color: "var(--ds-danger, #ef4444)", marginLeft: "0.25rem" }, children: "*" })
|
|
581
734
|
] }));
|
|
582
735
|
};
|
|
583
|
-
var
|
|
736
|
+
var Label_default = Label;
|
|
584
737
|
|
|
585
738
|
// src/components/PasswordInput/PasswordInput.tsx
|
|
586
739
|
var import_lucide_react7 = require("lucide-react");
|
|
587
|
-
var
|
|
740
|
+
var import_react8 = require("react");
|
|
588
741
|
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
589
742
|
var PasswordInput = (props) => {
|
|
590
|
-
const [visible, setVisible] = (0,
|
|
743
|
+
const [visible, setVisible] = (0, import_react8.useState)(false);
|
|
591
744
|
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
592
|
-
|
|
745
|
+
Input_default,
|
|
593
746
|
__spreadProps(__spreadValues({}, props), {
|
|
594
747
|
type: visible ? "text" : "password",
|
|
595
748
|
rightIcon: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
@@ -607,9 +760,6 @@ var PasswordInput = (props) => {
|
|
|
607
760
|
};
|
|
608
761
|
var PasswordInput_default = PasswordInput;
|
|
609
762
|
|
|
610
|
-
// src/components/Progress/Progress.module.css
|
|
611
|
-
var Progress_default = {};
|
|
612
|
-
|
|
613
763
|
// src/components/Progress/Progress.tsx
|
|
614
764
|
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
615
765
|
var Progress = ({ value = 0 }) => {
|
|
@@ -617,24 +767,31 @@ var Progress = ({ value = 0 }) => {
|
|
|
617
767
|
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
618
768
|
"div",
|
|
619
769
|
{
|
|
620
|
-
className: Progress_default.track,
|
|
621
770
|
role: "progressbar",
|
|
622
771
|
"aria-valuenow": pct,
|
|
623
772
|
"aria-valuemin": 0,
|
|
624
773
|
"aria-valuemax": 100,
|
|
625
|
-
|
|
774
|
+
style: {
|
|
775
|
+
width: "100%",
|
|
776
|
+
height: "0.5rem",
|
|
777
|
+
backgroundColor: "var(--ds-border, #e2e8f0)",
|
|
778
|
+
borderRadius: "9999px",
|
|
779
|
+
overflow: "hidden"
|
|
780
|
+
},
|
|
781
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { style: {
|
|
782
|
+
height: "100%",
|
|
783
|
+
width: `${pct}%`,
|
|
784
|
+
backgroundColor: "var(--ds-primary, #3b82f6)",
|
|
785
|
+
borderRadius: "9999px",
|
|
786
|
+
transition: "width 0.3s ease"
|
|
787
|
+
} })
|
|
626
788
|
}
|
|
627
789
|
);
|
|
628
790
|
};
|
|
629
|
-
var
|
|
630
|
-
|
|
631
|
-
// src/components/RadioGroup/RadioGroup.tsx
|
|
632
|
-
var import_react8 = require("react");
|
|
633
|
-
|
|
634
|
-
// src/components/RadioGroup/RadioGroup.module.css
|
|
635
|
-
var RadioGroup_default = {};
|
|
791
|
+
var Progress_default = Progress;
|
|
636
792
|
|
|
637
793
|
// src/components/RadioGroup/RadioGroup.tsx
|
|
794
|
+
var import_react9 = require("react");
|
|
638
795
|
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
639
796
|
var RadioGroup = ({
|
|
640
797
|
options,
|
|
@@ -644,48 +801,65 @@ var RadioGroup = ({
|
|
|
644
801
|
disabled,
|
|
645
802
|
onChange
|
|
646
803
|
}) => {
|
|
647
|
-
const [internal, setInternal] = (0,
|
|
804
|
+
const [internal, setInternal] = (0, import_react9.useState)(defaultValue);
|
|
648
805
|
const selected = value !== void 0 ? value : internal;
|
|
649
806
|
const handleChange = (val) => {
|
|
650
807
|
if (disabled) return;
|
|
651
808
|
setInternal(val);
|
|
652
809
|
onChange == null ? void 0 : onChange(val);
|
|
653
810
|
};
|
|
654
|
-
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", {
|
|
655
|
-
|
|
656
|
-
{
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
811
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: { display: "flex", flexDirection: "column", gap: "0.5rem" }, children: options.map((option) => {
|
|
812
|
+
const isSelected = selected === option.value;
|
|
813
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("label", { style: {
|
|
814
|
+
display: "inline-flex",
|
|
815
|
+
alignItems: "center",
|
|
816
|
+
gap: "0.5rem",
|
|
817
|
+
cursor: disabled ? "not-allowed" : "pointer",
|
|
818
|
+
userSelect: "none",
|
|
819
|
+
opacity: disabled ? 0.5 : 1
|
|
820
|
+
}, children: [
|
|
821
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
822
|
+
"input",
|
|
823
|
+
{
|
|
824
|
+
type: "radio",
|
|
825
|
+
name,
|
|
826
|
+
value: option.value,
|
|
827
|
+
checked: isSelected,
|
|
828
|
+
disabled,
|
|
829
|
+
onChange: () => handleChange(option.value),
|
|
830
|
+
style: { position: "absolute", opacity: 0, width: 0, height: 0 }
|
|
831
|
+
}
|
|
832
|
+
),
|
|
833
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: {
|
|
834
|
+
width: "1.125rem",
|
|
835
|
+
height: "1.125rem",
|
|
836
|
+
borderRadius: "9999px",
|
|
837
|
+
border: `2px solid ${isSelected ? "var(--ds-primary, #3b82f6)" : "var(--ds-border, #e2e8f0)"}`,
|
|
838
|
+
display: "flex",
|
|
839
|
+
alignItems: "center",
|
|
840
|
+
justifyContent: "center",
|
|
841
|
+
flexShrink: 0,
|
|
842
|
+
backgroundColor: "var(--ds-card, #fff)",
|
|
843
|
+
transition: "border-color 0.15s"
|
|
844
|
+
}, children: isSelected && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: {
|
|
845
|
+
width: "0.5rem",
|
|
846
|
+
height: "0.5rem",
|
|
847
|
+
borderRadius: "9999px",
|
|
848
|
+
backgroundColor: "var(--ds-primary, #3b82f6)"
|
|
849
|
+
} }) }),
|
|
850
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: { fontSize: "0.875rem", color: "var(--ds-text-primary, #0f172a)" }, children: option.label })
|
|
851
|
+
] }, option.value);
|
|
852
|
+
}) });
|
|
677
853
|
};
|
|
678
|
-
var
|
|
854
|
+
var RadioGroup_default = RadioGroup;
|
|
679
855
|
|
|
680
856
|
// src/components/Select/Select.tsx
|
|
681
857
|
var import_lucide_react8 = require("lucide-react");
|
|
682
|
-
var
|
|
683
|
-
|
|
684
|
-
// src/components/Select/Select.module.css
|
|
685
|
-
var Select_default = {};
|
|
686
|
-
|
|
687
|
-
// src/components/Select/Select.tsx
|
|
858
|
+
var import_react10 = require("react");
|
|
688
859
|
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
860
|
+
var selectCSS = `
|
|
861
|
+
[data-ds-select-trigger]:focus { outline: none; border-color: var(--ds-primary, #3b82f6); box-shadow: 0 0 0 3px rgb(59 130 246 / 0.15); }
|
|
862
|
+
`;
|
|
689
863
|
var Select = ({
|
|
690
864
|
options,
|
|
691
865
|
value,
|
|
@@ -695,9 +869,10 @@ var Select = ({
|
|
|
695
869
|
onChange
|
|
696
870
|
}) => {
|
|
697
871
|
var _a;
|
|
698
|
-
const [internal, setInternal] = (0,
|
|
699
|
-
const [open, setOpen] = (0,
|
|
700
|
-
const
|
|
872
|
+
const [internal, setInternal] = (0, import_react10.useState)(defaultValue);
|
|
873
|
+
const [open, setOpen] = (0, import_react10.useState)(false);
|
|
874
|
+
const [hoveredOption, setHoveredOption] = (0, import_react10.useState)(null);
|
|
875
|
+
const ref = (0, import_react10.useRef)(null);
|
|
701
876
|
const selected = value !== void 0 ? value : internal;
|
|
702
877
|
const selectedLabel = (_a = options.find((o) => o.value === selected)) == null ? void 0 : _a.label;
|
|
703
878
|
const handleSelect = (val) => {
|
|
@@ -705,66 +880,175 @@ var Select = ({
|
|
|
705
880
|
setOpen(false);
|
|
706
881
|
onChange == null ? void 0 : onChange(val);
|
|
707
882
|
};
|
|
708
|
-
(0,
|
|
883
|
+
(0, import_react10.useEffect)(() => {
|
|
709
884
|
const handleOutside = (e) => {
|
|
710
885
|
if (ref.current && !ref.current.contains(e.target)) setOpen(false);
|
|
711
886
|
};
|
|
712
887
|
document.addEventListener("mousedown", handleOutside);
|
|
713
888
|
return () => document.removeEventListener("mousedown", handleOutside);
|
|
714
889
|
}, []);
|
|
715
|
-
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
716
|
-
/* @__PURE__ */ (0, import_jsx_runtime17.
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
890
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [
|
|
891
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("style", { href: "ds-select", precedence: "low", children: selectCSS }),
|
|
892
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { ref, style: {
|
|
893
|
+
position: "relative",
|
|
894
|
+
width: "100%",
|
|
895
|
+
opacity: disabled ? 0.5 : 1,
|
|
896
|
+
pointerEvents: disabled ? "none" : void 0
|
|
897
|
+
}, children: [
|
|
898
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
899
|
+
"button",
|
|
900
|
+
{
|
|
901
|
+
type: "button",
|
|
902
|
+
"data-ds-select-trigger": "",
|
|
903
|
+
onClick: () => !disabled && setOpen((o) => !o),
|
|
904
|
+
disabled,
|
|
905
|
+
style: {
|
|
906
|
+
width: "100%",
|
|
907
|
+
height: "2.25rem",
|
|
908
|
+
padding: "0 0.75rem",
|
|
909
|
+
border: `1px solid ${open ? "var(--ds-primary, #3b82f6)" : "var(--ds-border, #e2e8f0)"}`,
|
|
910
|
+
borderRadius: "0.375rem",
|
|
911
|
+
fontSize: "0.875rem",
|
|
912
|
+
backgroundColor: "var(--ds-card, #fff)",
|
|
913
|
+
cursor: "pointer",
|
|
914
|
+
display: "flex",
|
|
915
|
+
alignItems: "center",
|
|
916
|
+
justifyContent: "space-between",
|
|
917
|
+
gap: "0.5rem",
|
|
918
|
+
boxShadow: open ? "0 0 0 3px rgb(59 130 246 / 0.15)" : "none",
|
|
919
|
+
transition: "border-color 0.15s, box-shadow 0.15s",
|
|
920
|
+
textAlign: "left",
|
|
921
|
+
fontFamily: "inherit"
|
|
922
|
+
},
|
|
923
|
+
children: [
|
|
924
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { style: { color: selectedLabel ? "var(--ds-text-primary, #0f172a)" : "var(--ds-text-secondary, #64748b)" }, children: selectedLabel != null ? selectedLabel : placeholder }),
|
|
925
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
926
|
+
import_lucide_react8.ChevronDown,
|
|
927
|
+
{
|
|
928
|
+
size: 16,
|
|
929
|
+
style: {
|
|
930
|
+
flexShrink: 0,
|
|
931
|
+
color: "var(--ds-text-secondary, #64748b)",
|
|
932
|
+
transition: "transform 0.15s",
|
|
933
|
+
transform: open ? "rotate(180deg)" : "rotate(0deg)"
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
)
|
|
937
|
+
]
|
|
938
|
+
}
|
|
939
|
+
),
|
|
940
|
+
open && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: {
|
|
941
|
+
position: "absolute",
|
|
942
|
+
top: "calc(100% + 0.25rem)",
|
|
943
|
+
left: 0,
|
|
944
|
+
right: 0,
|
|
945
|
+
zIndex: 50,
|
|
946
|
+
backgroundColor: "var(--ds-card, #fff)",
|
|
947
|
+
border: "1px solid var(--ds-border, #e2e8f0)",
|
|
948
|
+
borderRadius: "0.375rem",
|
|
949
|
+
boxShadow: "0 10px 15px -3px rgb(0 0 0 / 0.1)",
|
|
950
|
+
overflow: "hidden"
|
|
951
|
+
}, children: options.map((option) => {
|
|
952
|
+
const isSelected = selected === option.value;
|
|
953
|
+
const isHovered = hoveredOption === option.value;
|
|
954
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
955
|
+
"div",
|
|
956
|
+
{
|
|
957
|
+
onClick: () => handleSelect(option.value),
|
|
958
|
+
onMouseEnter: () => setHoveredOption(option.value),
|
|
959
|
+
onMouseLeave: () => setHoveredOption(null),
|
|
960
|
+
style: {
|
|
961
|
+
padding: "0.5rem 0.75rem",
|
|
962
|
+
fontSize: "0.875rem",
|
|
963
|
+
cursor: "pointer",
|
|
964
|
+
display: "flex",
|
|
965
|
+
alignItems: "center",
|
|
966
|
+
gap: "0.5rem",
|
|
967
|
+
color: "var(--ds-text-primary, #0f172a)",
|
|
968
|
+
backgroundColor: isSelected || isHovered ? "var(--ds-muted, #f1f5f9)" : "transparent",
|
|
969
|
+
fontWeight: isSelected ? 500 : void 0,
|
|
970
|
+
transition: "background-color 0.1s"
|
|
971
|
+
},
|
|
972
|
+
children: [
|
|
973
|
+
isSelected ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react8.Check, { size: 14, style: { color: "var(--ds-primary, #3b82f6)", flexShrink: 0 } }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { style: { width: 14, flexShrink: 0 } }),
|
|
974
|
+
option.label
|
|
975
|
+
]
|
|
976
|
+
},
|
|
977
|
+
option.value
|
|
978
|
+
);
|
|
979
|
+
}) })
|
|
980
|
+
] })
|
|
741
981
|
] });
|
|
742
982
|
};
|
|
743
|
-
var
|
|
744
|
-
|
|
745
|
-
// src/components/Skeleton/Skeleton.module.css
|
|
746
|
-
var Skeleton_default = {};
|
|
983
|
+
var Select_default = Select;
|
|
747
984
|
|
|
748
985
|
// src/components/Skeleton/Skeleton.tsx
|
|
749
986
|
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
750
|
-
var Skeleton = ({ height = "1rem", width = "100%", circle = false }) => /* @__PURE__ */ (0, import_jsx_runtime18.
|
|
751
|
-
"
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
987
|
+
var Skeleton = ({ height = "1rem", width = "100%", circle = false }) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_jsx_runtime18.Fragment, { children: [
|
|
988
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("style", { href: "ds-skeleton", precedence: "low", children: `
|
|
989
|
+
@keyframes ds-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } }
|
|
990
|
+
[data-ds-skeleton] { animation: ds-pulse 1.5s ease-in-out infinite; }
|
|
991
|
+
` }),
|
|
992
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
993
|
+
"div",
|
|
994
|
+
{
|
|
995
|
+
"data-ds-skeleton": "",
|
|
996
|
+
"aria-hidden": "true",
|
|
997
|
+
style: {
|
|
998
|
+
height,
|
|
999
|
+
width,
|
|
1000
|
+
backgroundColor: "var(--ds-muted, #f1f5f9)",
|
|
1001
|
+
borderRadius: circle ? "9999px" : "0.375rem"
|
|
1002
|
+
}
|
|
1003
|
+
}
|
|
1004
|
+
)
|
|
1005
|
+
] });
|
|
1006
|
+
var Skeleton_default = Skeleton;
|
|
765
1007
|
|
|
766
1008
|
// src/components/Slider/Slider.tsx
|
|
1009
|
+
var import_react11 = require("react");
|
|
767
1010
|
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
1011
|
+
var sliderCSS = `
|
|
1012
|
+
[data-ds-slider] {
|
|
1013
|
+
-webkit-appearance: none;
|
|
1014
|
+
appearance: none;
|
|
1015
|
+
width: 100%;
|
|
1016
|
+
height: 0.375rem;
|
|
1017
|
+
border-radius: 9999px;
|
|
1018
|
+
outline: none;
|
|
1019
|
+
cursor: pointer;
|
|
1020
|
+
background: linear-gradient(
|
|
1021
|
+
to right,
|
|
1022
|
+
var(--ds-primary, #3b82f6) 0%,
|
|
1023
|
+
var(--ds-primary, #3b82f6) var(--fill, 50%),
|
|
1024
|
+
var(--ds-border, #e2e8f0) var(--fill, 50%),
|
|
1025
|
+
var(--ds-border, #e2e8f0) 100%
|
|
1026
|
+
);
|
|
1027
|
+
}
|
|
1028
|
+
[data-ds-slider]::-webkit-slider-thumb {
|
|
1029
|
+
-webkit-appearance: none;
|
|
1030
|
+
appearance: none;
|
|
1031
|
+
width: 1.125rem;
|
|
1032
|
+
height: 1.125rem;
|
|
1033
|
+
border-radius: 9999px;
|
|
1034
|
+
background-color: var(--ds-primary, #3b82f6);
|
|
1035
|
+
cursor: pointer;
|
|
1036
|
+
border: 2px solid #fff;
|
|
1037
|
+
box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.2);
|
|
1038
|
+
transition: transform 0.1s;
|
|
1039
|
+
}
|
|
1040
|
+
[data-ds-slider]::-webkit-slider-thumb:hover { transform: scale(1.2); }
|
|
1041
|
+
[data-ds-slider]::-moz-range-thumb {
|
|
1042
|
+
width: 1.125rem;
|
|
1043
|
+
height: 1.125rem;
|
|
1044
|
+
border-radius: 9999px;
|
|
1045
|
+
background-color: var(--ds-primary, #3b82f6);
|
|
1046
|
+
cursor: pointer;
|
|
1047
|
+
border: 2px solid #fff;
|
|
1048
|
+
box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.2);
|
|
1049
|
+
}
|
|
1050
|
+
[data-ds-slider]:disabled { cursor: not-allowed; }
|
|
1051
|
+
`;
|
|
768
1052
|
var Slider = ({
|
|
769
1053
|
value,
|
|
770
1054
|
defaultValue = 50,
|
|
@@ -774,7 +1058,7 @@ var Slider = ({
|
|
|
774
1058
|
disabled,
|
|
775
1059
|
onChange
|
|
776
1060
|
}) => {
|
|
777
|
-
const [internal, setInternal] = (0,
|
|
1061
|
+
const [internal, setInternal] = (0, import_react11.useState)(defaultValue);
|
|
778
1062
|
const current = value !== void 0 ? value : internal;
|
|
779
1063
|
const fill = `${(current - min) / (max - min) * 100}%`;
|
|
780
1064
|
const handleChange = (e) => {
|
|
@@ -782,42 +1066,49 @@ var Slider = ({
|
|
|
782
1066
|
setInternal(val);
|
|
783
1067
|
onChange == null ? void 0 : onChange(val);
|
|
784
1068
|
};
|
|
785
|
-
return /* @__PURE__ */ (0, import_jsx_runtime19.
|
|
786
|
-
"
|
|
787
|
-
{
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
1069
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_jsx_runtime19.Fragment, { children: [
|
|
1070
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("style", { href: "ds-slider", precedence: "low", children: sliderCSS }),
|
|
1071
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { style: {
|
|
1072
|
+
width: "100%",
|
|
1073
|
+
padding: "0.25rem 0",
|
|
1074
|
+
opacity: disabled ? 0.5 : 1
|
|
1075
|
+
}, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1076
|
+
"input",
|
|
1077
|
+
{
|
|
1078
|
+
type: "range",
|
|
1079
|
+
"data-ds-slider": "",
|
|
1080
|
+
min,
|
|
1081
|
+
max,
|
|
1082
|
+
step,
|
|
1083
|
+
value: current,
|
|
1084
|
+
disabled,
|
|
1085
|
+
onChange: handleChange,
|
|
1086
|
+
style: { "--fill": fill }
|
|
1087
|
+
}
|
|
1088
|
+
) })
|
|
1089
|
+
] });
|
|
799
1090
|
};
|
|
800
|
-
var
|
|
1091
|
+
var Slider_default = Slider;
|
|
801
1092
|
|
|
802
1093
|
// src/components/Spinner/Spinner.tsx
|
|
803
1094
|
var import_lucide_react9 = require("lucide-react");
|
|
804
|
-
|
|
805
|
-
// src/components/Spinner/Spinner.module.css
|
|
806
|
-
var Spinner_default = {};
|
|
807
|
-
|
|
808
|
-
// src/components/Spinner/Spinner.tsx
|
|
809
1095
|
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
810
1096
|
var sizePx = { sm: 16, md: 24, lg: 32 };
|
|
811
|
-
var Spinner = ({ size = "md" }) => /* @__PURE__ */ (0, import_jsx_runtime20.
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
var
|
|
1097
|
+
var Spinner = ({ size = "md" }) => /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_jsx_runtime20.Fragment, { children: [
|
|
1098
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("style", { href: "ds-spin", precedence: "low", children: `@keyframes ds-spin { to { transform: rotate(360deg); } }` }),
|
|
1099
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
1100
|
+
import_lucide_react9.Loader2,
|
|
1101
|
+
{
|
|
1102
|
+
size: sizePx[size],
|
|
1103
|
+
"aria-label": "Loading",
|
|
1104
|
+
style: { color: "var(--ds-primary, #3b82f6)", animation: "ds-spin 0.75s linear infinite" }
|
|
1105
|
+
}
|
|
1106
|
+
)
|
|
1107
|
+
] });
|
|
1108
|
+
var Spinner_default = Spinner;
|
|
819
1109
|
|
|
820
1110
|
// src/components/Switch/Switch.tsx
|
|
1111
|
+
var import_react12 = require("react");
|
|
821
1112
|
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
822
1113
|
var Switch = ({
|
|
823
1114
|
label,
|
|
@@ -827,7 +1118,7 @@ var Switch = ({
|
|
|
827
1118
|
id,
|
|
828
1119
|
onChange
|
|
829
1120
|
}) => {
|
|
830
|
-
const [internal, setInternal] = (0,
|
|
1121
|
+
const [internal, setInternal] = (0, import_react12.useState)(defaultChecked);
|
|
831
1122
|
const isOn = checked !== void 0 ? checked : internal;
|
|
832
1123
|
const handleToggle = () => {
|
|
833
1124
|
if (disabled) return;
|
|
@@ -835,7 +1126,14 @@ var Switch = ({
|
|
|
835
1126
|
setInternal(next);
|
|
836
1127
|
onChange == null ? void 0 : onChange(next);
|
|
837
1128
|
};
|
|
838
|
-
return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("label", {
|
|
1129
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("label", { htmlFor: id, style: {
|
|
1130
|
+
display: "inline-flex",
|
|
1131
|
+
alignItems: "center",
|
|
1132
|
+
gap: "0.625rem",
|
|
1133
|
+
cursor: disabled ? "not-allowed" : "pointer",
|
|
1134
|
+
userSelect: "none",
|
|
1135
|
+
opacity: disabled ? 0.5 : 1
|
|
1136
|
+
}, children: [
|
|
839
1137
|
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
840
1138
|
"input",
|
|
841
1139
|
{
|
|
@@ -844,97 +1142,248 @@ var Switch = ({
|
|
|
844
1142
|
checked: isOn,
|
|
845
1143
|
disabled,
|
|
846
1144
|
onChange: handleToggle,
|
|
847
|
-
|
|
1145
|
+
style: { position: "absolute", opacity: 0, width: 0, height: 0 }
|
|
848
1146
|
}
|
|
849
1147
|
),
|
|
850
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", {
|
|
851
|
-
|
|
1148
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { style: {
|
|
1149
|
+
width: "2.75rem",
|
|
1150
|
+
height: "1.5rem",
|
|
1151
|
+
borderRadius: "9999px",
|
|
1152
|
+
backgroundColor: isOn ? "var(--ds-primary, #3b82f6)" : "var(--ds-border, #e2e8f0)",
|
|
1153
|
+
position: "relative",
|
|
1154
|
+
transition: "background-color 0.2s",
|
|
1155
|
+
flexShrink: 0
|
|
1156
|
+
}, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { style: {
|
|
1157
|
+
position: "absolute",
|
|
1158
|
+
top: "0.175rem",
|
|
1159
|
+
left: "0.175rem",
|
|
1160
|
+
width: "1.15rem",
|
|
1161
|
+
height: "1.15rem",
|
|
1162
|
+
borderRadius: "9999px",
|
|
1163
|
+
backgroundColor: "#fff",
|
|
1164
|
+
boxShadow: "0 1px 3px 0 rgb(0 0 0 / 0.15)",
|
|
1165
|
+
transition: "transform 0.2s",
|
|
1166
|
+
transform: isOn ? "translateX(1.25rem)" : "translateX(0)"
|
|
1167
|
+
} }) }),
|
|
1168
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { style: { fontSize: "0.875rem", color: "var(--ds-text-primary, #0f172a)" }, children: label })
|
|
852
1169
|
] });
|
|
853
1170
|
};
|
|
854
|
-
var
|
|
855
|
-
|
|
856
|
-
// src/components/Table/Table.module.css
|
|
857
|
-
var Table_default = {};
|
|
1171
|
+
var Switch_default = Switch;
|
|
858
1172
|
|
|
859
1173
|
// src/components/Table/Table.tsx
|
|
860
1174
|
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
1175
|
+
var tableCSS = `
|
|
1176
|
+
[data-ds-table-row]:hover [data-ds-table-cell] { background-color: var(--ds-muted, #f1f5f9); }
|
|
1177
|
+
`;
|
|
861
1178
|
var Table = (_a) => {
|
|
862
|
-
var _b = _a, {
|
|
863
|
-
return /* @__PURE__ */ (0, import_jsx_runtime22.
|
|
1179
|
+
var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
|
|
1180
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_jsx_runtime22.Fragment, { children: [
|
|
1181
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("style", { href: "ds-table", precedence: "low", children: tableCSS }),
|
|
1182
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { style: {
|
|
1183
|
+
width: "100%",
|
|
1184
|
+
overflowX: "auto",
|
|
1185
|
+
border: "1px solid var(--ds-border, #e2e8f0)",
|
|
1186
|
+
borderRadius: "0.5rem"
|
|
1187
|
+
}, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("table", __spreadValues({ style: __spreadValues({
|
|
1188
|
+
width: "100%",
|
|
1189
|
+
borderCollapse: "collapse",
|
|
1190
|
+
fontSize: "0.875rem"
|
|
1191
|
+
}, style) }, props)) })
|
|
1192
|
+
] });
|
|
864
1193
|
};
|
|
865
1194
|
var TableHead = (props) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("thead", __spreadValues({}, props));
|
|
866
1195
|
var TableBody = (props) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("tbody", __spreadValues({}, props));
|
|
867
1196
|
var TableRow = (_a) => {
|
|
868
|
-
var _b = _a, {
|
|
869
|
-
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("tr", __spreadValues({
|
|
1197
|
+
var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
|
|
1198
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("tr", __spreadValues({ "data-ds-table-row": "", style }, props));
|
|
870
1199
|
};
|
|
871
1200
|
var TableHeader = (_a) => {
|
|
872
|
-
var _b = _a, {
|
|
873
|
-
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("th", __spreadValues({
|
|
1201
|
+
var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
|
|
1202
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("th", __spreadValues({ style: __spreadValues({
|
|
1203
|
+
padding: "0.75rem 1rem",
|
|
1204
|
+
textAlign: "left",
|
|
1205
|
+
fontWeight: 500,
|
|
1206
|
+
color: "var(--ds-text-secondary, #64748b)",
|
|
1207
|
+
backgroundColor: "var(--ds-muted, #f1f5f9)",
|
|
1208
|
+
borderBottom: "1px solid var(--ds-border, #e2e8f0)",
|
|
1209
|
+
whiteSpace: "nowrap"
|
|
1210
|
+
}, style) }, props));
|
|
874
1211
|
};
|
|
875
1212
|
var TableCell = (_a) => {
|
|
876
|
-
var _b = _a, {
|
|
877
|
-
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
1213
|
+
var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
|
|
1214
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
1215
|
+
"td",
|
|
1216
|
+
__spreadValues({
|
|
1217
|
+
"data-ds-table-cell": "",
|
|
1218
|
+
style: __spreadValues({
|
|
1219
|
+
padding: "0.75rem 1rem",
|
|
1220
|
+
borderBottom: "1px solid var(--ds-border, #e2e8f0)",
|
|
1221
|
+
color: "var(--ds-text-primary, #0f172a)",
|
|
1222
|
+
transition: "background-color 0.1s"
|
|
1223
|
+
}, style)
|
|
1224
|
+
}, props)
|
|
1225
|
+
);
|
|
878
1226
|
};
|
|
879
1227
|
|
|
880
1228
|
// src/components/Tabs/Tabs.tsx
|
|
881
|
-
var
|
|
882
|
-
|
|
883
|
-
// src/components/Tabs/Tabs.module.css
|
|
884
|
-
var Tabs_default = {};
|
|
885
|
-
|
|
886
|
-
// src/components/Tabs/Tabs.tsx
|
|
1229
|
+
var import_react13 = require("react");
|
|
887
1230
|
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
888
1231
|
var Tabs = ({ tabs, defaultValue }) => {
|
|
889
1232
|
var _a, _b;
|
|
890
|
-
const [active, setActive] = (0,
|
|
1233
|
+
const [active, setActive] = (0, import_react13.useState)((_b = defaultValue != null ? defaultValue : (_a = tabs[0]) == null ? void 0 : _a.value) != null ? _b : "");
|
|
1234
|
+
const [hovered, setHovered] = (0, import_react13.useState)(null);
|
|
891
1235
|
const activeTab = tabs.find((t) => t.value === active);
|
|
892
|
-
return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", {
|
|
893
|
-
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", {
|
|
894
|
-
"
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
1236
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { style: { display: "flex", flexDirection: "column" }, children: [
|
|
1237
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { role: "tablist", style: {
|
|
1238
|
+
display: "inline-flex",
|
|
1239
|
+
backgroundColor: "var(--ds-muted, #f1f5f9)",
|
|
1240
|
+
borderRadius: "0.5rem",
|
|
1241
|
+
padding: "0.25rem",
|
|
1242
|
+
gap: "0.125rem"
|
|
1243
|
+
}, children: tabs.map((tab) => {
|
|
1244
|
+
const isActive = active === tab.value;
|
|
1245
|
+
const isHovered = hovered === tab.value;
|
|
1246
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
|
|
1247
|
+
"button",
|
|
1248
|
+
{
|
|
1249
|
+
role: "tab",
|
|
1250
|
+
"aria-selected": isActive,
|
|
1251
|
+
onClick: () => setActive(tab.value),
|
|
1252
|
+
onMouseEnter: () => setHovered(tab.value),
|
|
1253
|
+
onMouseLeave: () => setHovered(null),
|
|
1254
|
+
style: {
|
|
1255
|
+
display: "inline-flex",
|
|
1256
|
+
alignItems: "center",
|
|
1257
|
+
gap: "0.375rem",
|
|
1258
|
+
padding: "0.375rem 0.75rem",
|
|
1259
|
+
fontSize: "0.875rem",
|
|
1260
|
+
fontWeight: 500,
|
|
1261
|
+
borderRadius: "0.375rem",
|
|
1262
|
+
background: isActive ? "var(--ds-card, #ffffff)" : "transparent",
|
|
1263
|
+
border: "none",
|
|
1264
|
+
cursor: "pointer",
|
|
1265
|
+
color: isActive || isHovered ? "var(--ds-text-primary, #0f172a)" : "var(--ds-text-secondary, #64748b)",
|
|
1266
|
+
boxShadow: isActive ? "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)" : "none",
|
|
1267
|
+
transition: "color 0.15s, background-color 0.15s, box-shadow 0.15s",
|
|
1268
|
+
whiteSpace: "nowrap"
|
|
1269
|
+
},
|
|
1270
|
+
children: [
|
|
1271
|
+
tab.icon && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { style: { display: "flex", alignItems: "center" }, children: tab.icon }),
|
|
1272
|
+
tab.label
|
|
1273
|
+
]
|
|
1274
|
+
},
|
|
1275
|
+
tab.value
|
|
1276
|
+
);
|
|
1277
|
+
}) }),
|
|
1278
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { role: "tabpanel", style: {
|
|
1279
|
+
paddingTop: "1rem",
|
|
1280
|
+
fontSize: "0.875rem",
|
|
1281
|
+
color: "var(--ds-text-secondary, #64748b)"
|
|
1282
|
+
}, children: activeTab == null ? void 0 : activeTab.content })
|
|
908
1283
|
] });
|
|
909
1284
|
};
|
|
910
|
-
var
|
|
911
|
-
|
|
912
|
-
// src/components/Textarea/Textarea.module.css
|
|
913
|
-
var Textarea_default = {};
|
|
1285
|
+
var Tabs_default = Tabs;
|
|
914
1286
|
|
|
915
1287
|
// src/components/Textarea/Textarea.tsx
|
|
916
1288
|
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
1289
|
+
var textareaCSS = `
|
|
1290
|
+
[data-ds-textarea]::placeholder { color: var(--ds-text-secondary, #64748b); }
|
|
1291
|
+
[data-ds-textarea]:focus { outline: none; border-color: var(--ds-primary, #3b82f6); box-shadow: 0 0 0 3px rgb(59 130 246 / 0.15); }
|
|
1292
|
+
[data-ds-textarea]:disabled { opacity: 0.5; cursor: not-allowed; background-color: var(--ds-muted, #f1f5f9); }
|
|
1293
|
+
[data-ds-textarea][data-error="true"] { border-color: var(--ds-danger, #ef4444); }
|
|
1294
|
+
[data-ds-textarea][data-error="true"]:focus { border-color: var(--ds-danger, #ef4444); box-shadow: 0 0 0 3px rgb(239 68 68 / 0.15); }
|
|
1295
|
+
`;
|
|
917
1296
|
var Textarea = (_a) => {
|
|
918
|
-
var _b = _a, { error,
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
var
|
|
1297
|
+
var _b = _a, { error, style } = _b, props = __objRest(_b, ["error", "style"]);
|
|
1298
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_jsx_runtime24.Fragment, { children: [
|
|
1299
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("style", { href: "ds-textarea", precedence: "low", children: textareaCSS }),
|
|
1300
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
1301
|
+
"textarea",
|
|
1302
|
+
__spreadValues({
|
|
1303
|
+
"data-ds-textarea": "",
|
|
1304
|
+
"data-error": error ? "true" : void 0,
|
|
1305
|
+
style: __spreadValues({
|
|
1306
|
+
width: "100%",
|
|
1307
|
+
padding: "0.5rem 0.75rem",
|
|
1308
|
+
border: `1px solid ${error ? "var(--ds-danger, #ef4444)" : "var(--ds-border, #e2e8f0)"}`,
|
|
1309
|
+
borderRadius: "0.375rem",
|
|
1310
|
+
fontSize: "0.875rem",
|
|
1311
|
+
backgroundColor: "var(--ds-card, #fff)",
|
|
1312
|
+
color: "var(--ds-text-primary, #0f172a)",
|
|
1313
|
+
fontFamily: "inherit",
|
|
1314
|
+
resize: "vertical",
|
|
1315
|
+
transition: "border-color 0.15s, box-shadow 0.15s",
|
|
1316
|
+
minHeight: "6rem",
|
|
1317
|
+
boxSizing: "border-box"
|
|
1318
|
+
}, style)
|
|
1319
|
+
}, props)
|
|
1320
|
+
)
|
|
1321
|
+
] });
|
|
1322
|
+
};
|
|
1323
|
+
var Textarea_default = Textarea;
|
|
930
1324
|
|
|
931
1325
|
// src/components/Tooltip/Tooltip.tsx
|
|
1326
|
+
var import_react14 = require("react");
|
|
932
1327
|
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
933
|
-
var
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
1328
|
+
var positionStyle = {
|
|
1329
|
+
top: { bottom: "calc(100% + 8px)", left: "50%", transform: "translateX(-50%)" },
|
|
1330
|
+
bottom: { top: "calc(100% + 8px)", left: "50%", transform: "translateX(-50%)" },
|
|
1331
|
+
left: { right: "calc(100% + 8px)", top: "50%", transform: "translateY(-50%)" },
|
|
1332
|
+
right: { left: "calc(100% + 8px)", top: "50%", transform: "translateY(-50%)" }
|
|
1333
|
+
};
|
|
1334
|
+
var tooltipCSS = `
|
|
1335
|
+
[data-ds-tt]::before {
|
|
1336
|
+
content: '';
|
|
1337
|
+
position: absolute;
|
|
1338
|
+
border: 5px solid transparent;
|
|
1339
|
+
}
|
|
1340
|
+
[data-ds-tt="top"]::before { top: 100%; left: 50%; transform: translateX(-50%); border-top-color: var(--ds-tooltip-bg, #0f172a); }
|
|
1341
|
+
[data-ds-tt="bottom"]::before { bottom: 100%; left: 50%; transform: translateX(-50%); border-bottom-color: var(--ds-tooltip-bg, #0f172a); }
|
|
1342
|
+
[data-ds-tt="left"]::before { left: 100%; top: 50%; transform: translateY(-50%); border-left-color: var(--ds-tooltip-bg, #0f172a); }
|
|
1343
|
+
[data-ds-tt="right"]::before { right: 100%; top: 50%; transform: translateY(-50%); border-right-color: var(--ds-tooltip-bg, #0f172a); }
|
|
1344
|
+
`;
|
|
1345
|
+
var Tooltip = ({ content, children, position = "top" }) => {
|
|
1346
|
+
const [visible, setVisible] = (0, import_react14.useState)(false);
|
|
1347
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment, { children: [
|
|
1348
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("style", { href: "ds-tooltip", precedence: "low", children: tooltipCSS }),
|
|
1349
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
|
|
1350
|
+
"span",
|
|
1351
|
+
{
|
|
1352
|
+
style: { position: "relative", display: "inline-flex" },
|
|
1353
|
+
onMouseEnter: () => setVisible(true),
|
|
1354
|
+
onMouseLeave: () => setVisible(false),
|
|
1355
|
+
onFocus: () => setVisible(true),
|
|
1356
|
+
onBlur: () => setVisible(false),
|
|
1357
|
+
children: [
|
|
1358
|
+
children,
|
|
1359
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
1360
|
+
"span",
|
|
1361
|
+
{
|
|
1362
|
+
role: "tooltip",
|
|
1363
|
+
"data-ds-tt": position,
|
|
1364
|
+
style: __spreadValues({
|
|
1365
|
+
position: "absolute",
|
|
1366
|
+
zIndex: 50,
|
|
1367
|
+
padding: "0.375rem 0.625rem",
|
|
1368
|
+
backgroundColor: "var(--ds-tooltip-bg, #0f172a)",
|
|
1369
|
+
color: "var(--ds-tooltip-text, #ffffff)",
|
|
1370
|
+
fontSize: "0.75rem",
|
|
1371
|
+
lineHeight: 1.4,
|
|
1372
|
+
borderRadius: "0.375rem",
|
|
1373
|
+
whiteSpace: "nowrap",
|
|
1374
|
+
pointerEvents: "none",
|
|
1375
|
+
opacity: visible ? 1 : 0,
|
|
1376
|
+
transition: "opacity 0.15s"
|
|
1377
|
+
}, positionStyle[position]),
|
|
1378
|
+
children: content
|
|
1379
|
+
}
|
|
1380
|
+
)
|
|
1381
|
+
]
|
|
1382
|
+
}
|
|
1383
|
+
)
|
|
1384
|
+
] });
|
|
1385
|
+
};
|
|
1386
|
+
var Tooltip_default = Tooltip;
|
|
938
1387
|
// Annotate the CommonJS export names for ESM import in node:
|
|
939
1388
|
0 && (module.exports = {
|
|
940
1389
|
Accordion,
|