@efiche/design 0.1.6 → 0.1.8
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 +804 -363
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +0 -886
- package/dist/index.css.map +1 -1
- package/dist/index.js +813 -372
- 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" },
|
|
@@ -290,14 +363,6 @@ var sizeStyles = {
|
|
|
290
363
|
md: { padding: "0.5rem 1rem", fontSize: "0.875rem" },
|
|
291
364
|
lg: { padding: "0.75rem 1.5rem", fontSize: "1rem" }
|
|
292
365
|
};
|
|
293
|
-
function injectSpinKeyframe() {
|
|
294
|
-
if (typeof document === "undefined") return;
|
|
295
|
-
if (document.getElementById("ds-spin-keyframe")) return;
|
|
296
|
-
const style = document.createElement("style");
|
|
297
|
-
style.id = "ds-spin-keyframe";
|
|
298
|
-
style.textContent = "@keyframes ds-spin { to { transform: rotate(360deg); } }";
|
|
299
|
-
document.head.appendChild(style);
|
|
300
|
-
}
|
|
301
366
|
var Button = (_a) => {
|
|
302
367
|
var _b = _a, {
|
|
303
368
|
text,
|
|
@@ -336,10 +401,7 @@ var Button = (_a) => {
|
|
|
336
401
|
"size",
|
|
337
402
|
"style"
|
|
338
403
|
]);
|
|
339
|
-
const [hovered, setHovered] = (0,
|
|
340
|
-
(0, import_react3.useEffect)(() => {
|
|
341
|
-
injectSpinKeyframe();
|
|
342
|
-
}, []);
|
|
404
|
+
const [hovered, setHovered] = (0, import_react4.useState)(false);
|
|
343
405
|
const resolvedVariant = variant != null ? variant : danger ? "danger" : warning ? "warning" : info ? "info" : success ? "success" : ghost ? "ghost" : outline ? "outline" : "solid";
|
|
344
406
|
const resolvedSize = size != null ? size : small ? "sm" : large ? "lg" : "md";
|
|
345
407
|
const isDisabled = disabled || loading;
|
|
@@ -357,68 +419,86 @@ var Button = (_a) => {
|
|
|
357
419
|
opacity: isDisabled ? 0.5 : 1,
|
|
358
420
|
pointerEvents: loading ? "none" : void 0
|
|
359
421
|
}, variantStyles[resolvedVariant]), sizeStyles[resolvedSize]), hovered && !isDisabled ? variantHoverStyles[resolvedVariant] : {}), styleProp);
|
|
360
|
-
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
|
|
361
|
-
"
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
422
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
|
|
423
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("style", { href: "ds-spin", precedence: "low", children: `@keyframes ds-spin { to { transform: rotate(360deg); } }` }),
|
|
424
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
|
|
425
|
+
"button",
|
|
426
|
+
__spreadProps(__spreadValues({
|
|
427
|
+
disabled: isDisabled,
|
|
428
|
+
style: computedStyle,
|
|
429
|
+
onMouseEnter: () => setHovered(true),
|
|
430
|
+
onMouseLeave: () => setHovered(false)
|
|
431
|
+
}, props), {
|
|
432
|
+
children: [
|
|
433
|
+
loading ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
434
|
+
import_lucide_react4.LoaderCircle,
|
|
435
|
+
{
|
|
436
|
+
"aria-hidden": true,
|
|
437
|
+
style: { width: "1em", height: "1em", animation: "ds-spin 0.75s linear infinite" }
|
|
438
|
+
}
|
|
439
|
+
) : null,
|
|
440
|
+
showIcon && iconPosition === "left" ? icon : null,
|
|
441
|
+
content,
|
|
442
|
+
showIcon && iconPosition === "right" ? icon : null
|
|
443
|
+
]
|
|
444
|
+
})
|
|
445
|
+
)
|
|
446
|
+
] });
|
|
382
447
|
};
|
|
383
448
|
var Button_default = Button;
|
|
384
449
|
|
|
385
|
-
// src/components/Card/Card.module.css
|
|
386
|
-
var Card_default = {};
|
|
387
|
-
|
|
388
450
|
// src/components/Card/Card.tsx
|
|
389
451
|
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
390
452
|
var Card = (_a) => {
|
|
391
|
-
var _b = _a, {
|
|
392
|
-
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));
|
|
393
459
|
};
|
|
394
460
|
var CardHeader = (_a) => {
|
|
395
|
-
var _b = _a, {
|
|
396
|
-
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));
|
|
397
468
|
};
|
|
398
469
|
var CardTitle = (_a) => {
|
|
399
|
-
var _b = _a, {
|
|
400
|
-
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));
|
|
401
478
|
};
|
|
402
479
|
var CardDescription = (_a) => {
|
|
403
|
-
var _b = _a, {
|
|
404
|
-
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));
|
|
405
486
|
};
|
|
406
487
|
var CardContent = (_a) => {
|
|
407
|
-
var _b = _a, {
|
|
408
|
-
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));
|
|
409
490
|
};
|
|
410
491
|
var CardFooter = (_a) => {
|
|
411
|
-
var _b = _a, {
|
|
412
|
-
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));
|
|
413
498
|
};
|
|
414
499
|
|
|
415
500
|
// src/components/Checkbox/Checkbox.tsx
|
|
416
|
-
var
|
|
417
|
-
|
|
418
|
-
// src/components/Checkbox/Checkbox.module.css
|
|
419
|
-
var Checkbox_default = {};
|
|
420
|
-
|
|
421
|
-
// src/components/Checkbox/Checkbox.tsx
|
|
501
|
+
var import_react5 = require("react");
|
|
422
502
|
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
423
503
|
var Checkbox = ({
|
|
424
504
|
label,
|
|
@@ -428,7 +508,7 @@ var Checkbox = ({
|
|
|
428
508
|
id,
|
|
429
509
|
onChange
|
|
430
510
|
}) => {
|
|
431
|
-
const [internal, setInternal] = (0,
|
|
511
|
+
const [internal, setInternal] = (0, import_react5.useState)(defaultChecked);
|
|
432
512
|
const isChecked = checked !== void 0 ? checked : internal;
|
|
433
513
|
const handleChange = () => {
|
|
434
514
|
if (disabled) return;
|
|
@@ -436,7 +516,14 @@ var Checkbox = ({
|
|
|
436
516
|
setInternal(next);
|
|
437
517
|
onChange == null ? void 0 : onChange(next);
|
|
438
518
|
};
|
|
439
|
-
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: [
|
|
440
527
|
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
441
528
|
"input",
|
|
442
529
|
{
|
|
@@ -445,26 +532,33 @@ var Checkbox = ({
|
|
|
445
532
|
checked: isChecked,
|
|
446
533
|
disabled,
|
|
447
534
|
onChange: handleChange,
|
|
448
|
-
|
|
535
|
+
style: { position: "absolute", opacity: 0, width: 0, height: 0 }
|
|
449
536
|
}
|
|
450
537
|
),
|
|
451
|
-
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", {
|
|
452
|
-
|
|
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 })
|
|
453
551
|
] });
|
|
454
552
|
};
|
|
455
|
-
var
|
|
553
|
+
var Checkbox_default = Checkbox;
|
|
456
554
|
|
|
457
555
|
// src/components/CopyButton/CopyButton.tsx
|
|
458
556
|
var import_lucide_react5 = require("lucide-react");
|
|
459
|
-
var
|
|
460
|
-
|
|
461
|
-
// src/components/CopyButton/CopyButton.module.css
|
|
462
|
-
var CopyButton_default = {};
|
|
463
|
-
|
|
464
|
-
// src/components/CopyButton/CopyButton.tsx
|
|
557
|
+
var import_react6 = require("react");
|
|
465
558
|
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
466
559
|
var CopyButton = ({ text }) => {
|
|
467
|
-
const [copied, setCopied] = (0,
|
|
560
|
+
const [copied, setCopied] = (0, import_react6.useState)(false);
|
|
561
|
+
const [hovered, setHovered] = (0, import_react6.useState)(false);
|
|
468
562
|
const handleCopy = () => {
|
|
469
563
|
navigator.clipboard.writeText(text);
|
|
470
564
|
setCopied(true);
|
|
@@ -473,40 +567,51 @@ var CopyButton = ({ text }) => {
|
|
|
473
567
|
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
474
568
|
"button",
|
|
475
569
|
{
|
|
476
|
-
className: CopyButton_default.copyButton,
|
|
477
570
|
onClick: handleCopy,
|
|
571
|
+
onMouseEnter: () => setHovered(true),
|
|
572
|
+
onMouseLeave: () => setHovered(false),
|
|
478
573
|
"aria-label": copied ? "Copied" : `Copy ${text}`,
|
|
479
|
-
|
|
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" } })
|
|
480
587
|
}
|
|
481
588
|
);
|
|
482
589
|
};
|
|
483
|
-
var
|
|
590
|
+
var CopyButton_default = CopyButton;
|
|
484
591
|
|
|
485
592
|
// src/components/FileUpload/FileUpload.tsx
|
|
486
593
|
var import_lucide_react6 = require("lucide-react");
|
|
487
|
-
var
|
|
488
|
-
|
|
489
|
-
// src/components/FileUpload/FileUpload.module.css
|
|
490
|
-
var FileUpload_default = {};
|
|
491
|
-
|
|
492
|
-
// src/components/FileUpload/FileUpload.tsx
|
|
594
|
+
var import_react7 = require("react");
|
|
493
595
|
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
494
596
|
var FileUpload = ({ accept, multiple, disabled, onFileSelect }) => {
|
|
495
|
-
const [isDragging, setIsDragging] = (0,
|
|
496
|
-
const [
|
|
497
|
-
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);
|
|
498
601
|
const handleFiles = (list) => {
|
|
499
602
|
setFileNames(Array.from(list).map((f) => f.name));
|
|
500
603
|
onFileSelect == null ? void 0 : onFileSelect(list);
|
|
501
604
|
};
|
|
605
|
+
const isActive = isDragging || isHovered;
|
|
502
606
|
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
503
607
|
"div",
|
|
504
608
|
{
|
|
505
|
-
className: `${FileUpload_default.zone} ${isDragging ? FileUpload_default.dragging : ""} ${disabled ? FileUpload_default.disabled : ""}`,
|
|
506
609
|
onClick: () => {
|
|
507
610
|
var _a;
|
|
508
611
|
return !disabled && ((_a = inputRef.current) == null ? void 0 : _a.click());
|
|
509
612
|
},
|
|
613
|
+
onMouseEnter: () => !disabled && setIsHovered(true),
|
|
614
|
+
onMouseLeave: () => setIsHovered(false),
|
|
510
615
|
onDragOver: (e) => {
|
|
511
616
|
e.preventDefault();
|
|
512
617
|
setIsDragging(true);
|
|
@@ -517,6 +622,20 @@ var FileUpload = ({ accept, multiple, disabled, onFileSelect }) => {
|
|
|
517
622
|
setIsDragging(false);
|
|
518
623
|
if (!disabled && e.dataTransfer.files.length) handleFiles(e.dataTransfer.files);
|
|
519
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
|
+
},
|
|
520
639
|
children: [
|
|
521
640
|
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
522
641
|
"input",
|
|
@@ -526,12 +645,12 @@ var FileUpload = ({ accept, multiple, disabled, onFileSelect }) => {
|
|
|
526
645
|
accept,
|
|
527
646
|
multiple,
|
|
528
647
|
disabled,
|
|
529
|
-
|
|
648
|
+
style: { display: "none" },
|
|
530
649
|
onChange: (e) => e.target.files && handleFiles(e.target.files)
|
|
531
650
|
}
|
|
532
651
|
),
|
|
533
|
-
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react6.Upload, { size: 32,
|
|
534
|
-
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: [
|
|
535
654
|
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("strong", { children: "Click to upload" }),
|
|
536
655
|
" or drag and drop"
|
|
537
656
|
] })
|
|
@@ -539,65 +658,91 @@ var FileUpload = ({ accept, multiple, disabled, onFileSelect }) => {
|
|
|
539
658
|
}
|
|
540
659
|
);
|
|
541
660
|
};
|
|
542
|
-
var
|
|
543
|
-
|
|
544
|
-
// src/components/Input/Input.module.css
|
|
545
|
-
var Input_default = {};
|
|
661
|
+
var FileUpload_default = FileUpload;
|
|
546
662
|
|
|
547
663
|
// src/components/Input/Input.tsx
|
|
548
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
|
+
`;
|
|
549
672
|
var Input = (_a) => {
|
|
550
|
-
var _b = _a, {
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
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
|
+
] })
|
|
575
717
|
] });
|
|
576
718
|
};
|
|
577
|
-
var
|
|
578
|
-
|
|
579
|
-
// src/components/Label/Label.module.css
|
|
580
|
-
var Label_default = {};
|
|
719
|
+
var Input_default = Input;
|
|
581
720
|
|
|
582
721
|
// src/components/Label/Label.tsx
|
|
583
722
|
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
584
723
|
var Label = (_a) => {
|
|
585
|
-
var _b = _a, { children, required,
|
|
586
|
-
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: [
|
|
587
732
|
children,
|
|
588
|
-
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: "*" })
|
|
589
734
|
] }));
|
|
590
735
|
};
|
|
591
|
-
var
|
|
736
|
+
var Label_default = Label;
|
|
592
737
|
|
|
593
738
|
// src/components/PasswordInput/PasswordInput.tsx
|
|
594
739
|
var import_lucide_react7 = require("lucide-react");
|
|
595
|
-
var
|
|
740
|
+
var import_react8 = require("react");
|
|
596
741
|
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
597
742
|
var PasswordInput = (props) => {
|
|
598
|
-
const [visible, setVisible] = (0,
|
|
743
|
+
const [visible, setVisible] = (0, import_react8.useState)(false);
|
|
599
744
|
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
600
|
-
|
|
745
|
+
Input_default,
|
|
601
746
|
__spreadProps(__spreadValues({}, props), {
|
|
602
747
|
type: visible ? "text" : "password",
|
|
603
748
|
rightIcon: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
@@ -615,9 +760,6 @@ var PasswordInput = (props) => {
|
|
|
615
760
|
};
|
|
616
761
|
var PasswordInput_default = PasswordInput;
|
|
617
762
|
|
|
618
|
-
// src/components/Progress/Progress.module.css
|
|
619
|
-
var Progress_default = {};
|
|
620
|
-
|
|
621
763
|
// src/components/Progress/Progress.tsx
|
|
622
764
|
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
623
765
|
var Progress = ({ value = 0 }) => {
|
|
@@ -625,24 +767,31 @@ var Progress = ({ value = 0 }) => {
|
|
|
625
767
|
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
626
768
|
"div",
|
|
627
769
|
{
|
|
628
|
-
className: Progress_default.track,
|
|
629
770
|
role: "progressbar",
|
|
630
771
|
"aria-valuenow": pct,
|
|
631
772
|
"aria-valuemin": 0,
|
|
632
773
|
"aria-valuemax": 100,
|
|
633
|
-
|
|
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
|
+
} })
|
|
634
788
|
}
|
|
635
789
|
);
|
|
636
790
|
};
|
|
637
|
-
var
|
|
638
|
-
|
|
639
|
-
// src/components/RadioGroup/RadioGroup.tsx
|
|
640
|
-
var import_react8 = require("react");
|
|
641
|
-
|
|
642
|
-
// src/components/RadioGroup/RadioGroup.module.css
|
|
643
|
-
var RadioGroup_default = {};
|
|
791
|
+
var Progress_default = Progress;
|
|
644
792
|
|
|
645
793
|
// src/components/RadioGroup/RadioGroup.tsx
|
|
794
|
+
var import_react9 = require("react");
|
|
646
795
|
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
647
796
|
var RadioGroup = ({
|
|
648
797
|
options,
|
|
@@ -652,48 +801,65 @@ var RadioGroup = ({
|
|
|
652
801
|
disabled,
|
|
653
802
|
onChange
|
|
654
803
|
}) => {
|
|
655
|
-
const [internal, setInternal] = (0,
|
|
804
|
+
const [internal, setInternal] = (0, import_react9.useState)(defaultValue);
|
|
656
805
|
const selected = value !== void 0 ? value : internal;
|
|
657
806
|
const handleChange = (val) => {
|
|
658
807
|
if (disabled) return;
|
|
659
808
|
setInternal(val);
|
|
660
809
|
onChange == null ? void 0 : onChange(val);
|
|
661
810
|
};
|
|
662
|
-
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", {
|
|
663
|
-
|
|
664
|
-
{
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
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
|
+
}) });
|
|
685
853
|
};
|
|
686
|
-
var
|
|
854
|
+
var RadioGroup_default = RadioGroup;
|
|
687
855
|
|
|
688
856
|
// src/components/Select/Select.tsx
|
|
689
857
|
var import_lucide_react8 = require("lucide-react");
|
|
690
|
-
var
|
|
691
|
-
|
|
692
|
-
// src/components/Select/Select.module.css
|
|
693
|
-
var Select_default = {};
|
|
694
|
-
|
|
695
|
-
// src/components/Select/Select.tsx
|
|
858
|
+
var import_react10 = require("react");
|
|
696
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
|
+
`;
|
|
697
863
|
var Select = ({
|
|
698
864
|
options,
|
|
699
865
|
value,
|
|
@@ -703,9 +869,10 @@ var Select = ({
|
|
|
703
869
|
onChange
|
|
704
870
|
}) => {
|
|
705
871
|
var _a;
|
|
706
|
-
const [internal, setInternal] = (0,
|
|
707
|
-
const [open, setOpen] = (0,
|
|
708
|
-
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);
|
|
709
876
|
const selected = value !== void 0 ? value : internal;
|
|
710
877
|
const selectedLabel = (_a = options.find((o) => o.value === selected)) == null ? void 0 : _a.label;
|
|
711
878
|
const handleSelect = (val) => {
|
|
@@ -713,66 +880,175 @@ var Select = ({
|
|
|
713
880
|
setOpen(false);
|
|
714
881
|
onChange == null ? void 0 : onChange(val);
|
|
715
882
|
};
|
|
716
|
-
(0,
|
|
883
|
+
(0, import_react10.useEffect)(() => {
|
|
717
884
|
const handleOutside = (e) => {
|
|
718
885
|
if (ref.current && !ref.current.contains(e.target)) setOpen(false);
|
|
719
886
|
};
|
|
720
887
|
document.addEventListener("mousedown", handleOutside);
|
|
721
888
|
return () => document.removeEventListener("mousedown", handleOutside);
|
|
722
889
|
}, []);
|
|
723
|
-
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
724
|
-
/* @__PURE__ */ (0, import_jsx_runtime17.
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
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
|
+
] })
|
|
749
981
|
] });
|
|
750
982
|
};
|
|
751
|
-
var
|
|
752
|
-
|
|
753
|
-
// src/components/Skeleton/Skeleton.module.css
|
|
754
|
-
var Skeleton_default = {};
|
|
983
|
+
var Select_default = Select;
|
|
755
984
|
|
|
756
985
|
// src/components/Skeleton/Skeleton.tsx
|
|
757
986
|
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
758
|
-
var Skeleton = ({ height = "1rem", width = "100%", circle = false }) => /* @__PURE__ */ (0, import_jsx_runtime18.
|
|
759
|
-
"
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
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;
|
|
773
1007
|
|
|
774
1008
|
// src/components/Slider/Slider.tsx
|
|
1009
|
+
var import_react11 = require("react");
|
|
775
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
|
+
`;
|
|
776
1052
|
var Slider = ({
|
|
777
1053
|
value,
|
|
778
1054
|
defaultValue = 50,
|
|
@@ -782,7 +1058,7 @@ var Slider = ({
|
|
|
782
1058
|
disabled,
|
|
783
1059
|
onChange
|
|
784
1060
|
}) => {
|
|
785
|
-
const [internal, setInternal] = (0,
|
|
1061
|
+
const [internal, setInternal] = (0, import_react11.useState)(defaultValue);
|
|
786
1062
|
const current = value !== void 0 ? value : internal;
|
|
787
1063
|
const fill = `${(current - min) / (max - min) * 100}%`;
|
|
788
1064
|
const handleChange = (e) => {
|
|
@@ -790,42 +1066,49 @@ var Slider = ({
|
|
|
790
1066
|
setInternal(val);
|
|
791
1067
|
onChange == null ? void 0 : onChange(val);
|
|
792
1068
|
};
|
|
793
|
-
return /* @__PURE__ */ (0, import_jsx_runtime19.
|
|
794
|
-
"
|
|
795
|
-
{
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
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
|
+
] });
|
|
807
1090
|
};
|
|
808
|
-
var
|
|
1091
|
+
var Slider_default = Slider;
|
|
809
1092
|
|
|
810
1093
|
// src/components/Spinner/Spinner.tsx
|
|
811
1094
|
var import_lucide_react9 = require("lucide-react");
|
|
812
|
-
|
|
813
|
-
// src/components/Spinner/Spinner.module.css
|
|
814
|
-
var Spinner_default = {};
|
|
815
|
-
|
|
816
|
-
// src/components/Spinner/Spinner.tsx
|
|
817
1095
|
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
818
1096
|
var sizePx = { sm: 16, md: 24, lg: 32 };
|
|
819
|
-
var Spinner = ({ size = "md" }) => /* @__PURE__ */ (0, import_jsx_runtime20.
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
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;
|
|
827
1109
|
|
|
828
1110
|
// src/components/Switch/Switch.tsx
|
|
1111
|
+
var import_react12 = require("react");
|
|
829
1112
|
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
830
1113
|
var Switch = ({
|
|
831
1114
|
label,
|
|
@@ -835,7 +1118,7 @@ var Switch = ({
|
|
|
835
1118
|
id,
|
|
836
1119
|
onChange
|
|
837
1120
|
}) => {
|
|
838
|
-
const [internal, setInternal] = (0,
|
|
1121
|
+
const [internal, setInternal] = (0, import_react12.useState)(defaultChecked);
|
|
839
1122
|
const isOn = checked !== void 0 ? checked : internal;
|
|
840
1123
|
const handleToggle = () => {
|
|
841
1124
|
if (disabled) return;
|
|
@@ -843,7 +1126,14 @@ var Switch = ({
|
|
|
843
1126
|
setInternal(next);
|
|
844
1127
|
onChange == null ? void 0 : onChange(next);
|
|
845
1128
|
};
|
|
846
|
-
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: [
|
|
847
1137
|
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
848
1138
|
"input",
|
|
849
1139
|
{
|
|
@@ -852,97 +1142,248 @@ var Switch = ({
|
|
|
852
1142
|
checked: isOn,
|
|
853
1143
|
disabled,
|
|
854
1144
|
onChange: handleToggle,
|
|
855
|
-
|
|
1145
|
+
style: { position: "absolute", opacity: 0, width: 0, height: 0 }
|
|
856
1146
|
}
|
|
857
1147
|
),
|
|
858
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", {
|
|
859
|
-
|
|
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 })
|
|
860
1169
|
] });
|
|
861
1170
|
};
|
|
862
|
-
var
|
|
863
|
-
|
|
864
|
-
// src/components/Table/Table.module.css
|
|
865
|
-
var Table_default = {};
|
|
1171
|
+
var Switch_default = Switch;
|
|
866
1172
|
|
|
867
1173
|
// src/components/Table/Table.tsx
|
|
868
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
|
+
`;
|
|
869
1178
|
var Table = (_a) => {
|
|
870
|
-
var _b = _a, {
|
|
871
|
-
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
|
+
] });
|
|
872
1193
|
};
|
|
873
1194
|
var TableHead = (props) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("thead", __spreadValues({}, props));
|
|
874
1195
|
var TableBody = (props) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("tbody", __spreadValues({}, props));
|
|
875
1196
|
var TableRow = (_a) => {
|
|
876
|
-
var _b = _a, {
|
|
877
|
-
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));
|
|
878
1199
|
};
|
|
879
1200
|
var TableHeader = (_a) => {
|
|
880
|
-
var _b = _a, {
|
|
881
|
-
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));
|
|
882
1211
|
};
|
|
883
1212
|
var TableCell = (_a) => {
|
|
884
|
-
var _b = _a, {
|
|
885
|
-
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
|
+
);
|
|
886
1226
|
};
|
|
887
1227
|
|
|
888
1228
|
// src/components/Tabs/Tabs.tsx
|
|
889
|
-
var
|
|
890
|
-
|
|
891
|
-
// src/components/Tabs/Tabs.module.css
|
|
892
|
-
var Tabs_default = {};
|
|
893
|
-
|
|
894
|
-
// src/components/Tabs/Tabs.tsx
|
|
1229
|
+
var import_react13 = require("react");
|
|
895
1230
|
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
896
1231
|
var Tabs = ({ tabs, defaultValue }) => {
|
|
897
1232
|
var _a, _b;
|
|
898
|
-
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);
|
|
899
1235
|
const activeTab = tabs.find((t) => t.value === active);
|
|
900
|
-
return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", {
|
|
901
|
-
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", {
|
|
902
|
-
"
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
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 })
|
|
916
1283
|
] });
|
|
917
1284
|
};
|
|
918
|
-
var
|
|
919
|
-
|
|
920
|
-
// src/components/Textarea/Textarea.module.css
|
|
921
|
-
var Textarea_default = {};
|
|
1285
|
+
var Tabs_default = Tabs;
|
|
922
1286
|
|
|
923
1287
|
// src/components/Textarea/Textarea.tsx
|
|
924
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
|
+
`;
|
|
925
1296
|
var Textarea = (_a) => {
|
|
926
|
-
var _b = _a, { error,
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
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;
|
|
938
1324
|
|
|
939
1325
|
// src/components/Tooltip/Tooltip.tsx
|
|
1326
|
+
var import_react14 = require("react");
|
|
940
1327
|
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
941
|
-
var
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
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;
|
|
946
1387
|
// Annotate the CommonJS export names for ESM import in node:
|
|
947
1388
|
0 && (module.exports = {
|
|
948
1389
|
Accordion,
|