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