@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.js
CHANGED
|
@@ -143,72 +143,145 @@ 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 {
|
|
211
|
-
import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
283
|
+
import { useState as useState4 } from "react";
|
|
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" },
|
|
214
287
|
outline: { backgroundColor: "transparent", color: "var(--ds-primary, #3b82f6)", borderColor: "var(--ds-primary, #3b82f6)" },
|
|
@@ -232,14 +305,6 @@ var sizeStyles = {
|
|
|
232
305
|
md: { padding: "0.5rem 1rem", fontSize: "0.875rem" },
|
|
233
306
|
lg: { padding: "0.75rem 1.5rem", fontSize: "1rem" }
|
|
234
307
|
};
|
|
235
|
-
function injectSpinKeyframe() {
|
|
236
|
-
if (typeof document === "undefined") return;
|
|
237
|
-
if (document.getElementById("ds-spin-keyframe")) return;
|
|
238
|
-
const style = document.createElement("style");
|
|
239
|
-
style.id = "ds-spin-keyframe";
|
|
240
|
-
style.textContent = "@keyframes ds-spin { to { transform: rotate(360deg); } }";
|
|
241
|
-
document.head.appendChild(style);
|
|
242
|
-
}
|
|
243
308
|
var Button = (_a) => {
|
|
244
309
|
var _b = _a, {
|
|
245
310
|
text,
|
|
@@ -278,10 +343,7 @@ var Button = (_a) => {
|
|
|
278
343
|
"size",
|
|
279
344
|
"style"
|
|
280
345
|
]);
|
|
281
|
-
const [hovered, setHovered] =
|
|
282
|
-
useEffect(() => {
|
|
283
|
-
injectSpinKeyframe();
|
|
284
|
-
}, []);
|
|
346
|
+
const [hovered, setHovered] = useState4(false);
|
|
285
347
|
const resolvedVariant = variant != null ? variant : danger ? "danger" : warning ? "warning" : info ? "info" : success ? "success" : ghost ? "ghost" : outline ? "outline" : "solid";
|
|
286
348
|
const resolvedSize = size != null ? size : small ? "sm" : large ? "lg" : "md";
|
|
287
349
|
const isDisabled = disabled || loading;
|
|
@@ -299,68 +361,86 @@ var Button = (_a) => {
|
|
|
299
361
|
opacity: isDisabled ? 0.5 : 1,
|
|
300
362
|
pointerEvents: loading ? "none" : void 0
|
|
301
363
|
}, variantStyles[resolvedVariant]), sizeStyles[resolvedSize]), hovered && !isDisabled ? variantHoverStyles[resolvedVariant] : {}), styleProp);
|
|
302
|
-
return /* @__PURE__ */ jsxs4(
|
|
303
|
-
"
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
364
|
+
return /* @__PURE__ */ jsxs4(Fragment, { children: [
|
|
365
|
+
/* @__PURE__ */ jsx7("style", { href: "ds-spin", precedence: "low", children: `@keyframes ds-spin { to { transform: rotate(360deg); } }` }),
|
|
366
|
+
/* @__PURE__ */ jsxs4(
|
|
367
|
+
"button",
|
|
368
|
+
__spreadProps(__spreadValues({
|
|
369
|
+
disabled: isDisabled,
|
|
370
|
+
style: computedStyle,
|
|
371
|
+
onMouseEnter: () => setHovered(true),
|
|
372
|
+
onMouseLeave: () => setHovered(false)
|
|
373
|
+
}, props), {
|
|
374
|
+
children: [
|
|
375
|
+
loading ? /* @__PURE__ */ jsx7(
|
|
376
|
+
LoaderCircle,
|
|
377
|
+
{
|
|
378
|
+
"aria-hidden": true,
|
|
379
|
+
style: { width: "1em", height: "1em", animation: "ds-spin 0.75s linear infinite" }
|
|
380
|
+
}
|
|
381
|
+
) : null,
|
|
382
|
+
showIcon && iconPosition === "left" ? icon : null,
|
|
383
|
+
content,
|
|
384
|
+
showIcon && iconPosition === "right" ? icon : null
|
|
385
|
+
]
|
|
386
|
+
})
|
|
387
|
+
)
|
|
388
|
+
] });
|
|
324
389
|
};
|
|
325
390
|
var Button_default = Button;
|
|
326
391
|
|
|
327
|
-
// src/components/Card/Card.module.css
|
|
328
|
-
var Card_default = {};
|
|
329
|
-
|
|
330
392
|
// src/components/Card/Card.tsx
|
|
331
393
|
import { jsx as jsx8 } from "react/jsx-runtime";
|
|
332
394
|
var Card = (_a) => {
|
|
333
|
-
var _b = _a, {
|
|
334
|
-
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));
|
|
335
401
|
};
|
|
336
402
|
var CardHeader = (_a) => {
|
|
337
|
-
var _b = _a, {
|
|
338
|
-
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));
|
|
339
410
|
};
|
|
340
411
|
var CardTitle = (_a) => {
|
|
341
|
-
var _b = _a, {
|
|
342
|
-
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));
|
|
343
420
|
};
|
|
344
421
|
var CardDescription = (_a) => {
|
|
345
|
-
var _b = _a, {
|
|
346
|
-
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));
|
|
347
428
|
};
|
|
348
429
|
var CardContent = (_a) => {
|
|
349
|
-
var _b = _a, {
|
|
350
|
-
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));
|
|
351
432
|
};
|
|
352
433
|
var CardFooter = (_a) => {
|
|
353
|
-
var _b = _a, {
|
|
354
|
-
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));
|
|
355
440
|
};
|
|
356
441
|
|
|
357
442
|
// src/components/Checkbox/Checkbox.tsx
|
|
358
|
-
import { useState as
|
|
359
|
-
|
|
360
|
-
// src/components/Checkbox/Checkbox.module.css
|
|
361
|
-
var Checkbox_default = {};
|
|
362
|
-
|
|
363
|
-
// src/components/Checkbox/Checkbox.tsx
|
|
443
|
+
import { useState as useState5 } from "react";
|
|
364
444
|
import { jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
365
445
|
var Checkbox = ({
|
|
366
446
|
label,
|
|
@@ -370,7 +450,7 @@ var Checkbox = ({
|
|
|
370
450
|
id,
|
|
371
451
|
onChange
|
|
372
452
|
}) => {
|
|
373
|
-
const [internal, setInternal] =
|
|
453
|
+
const [internal, setInternal] = useState5(defaultChecked);
|
|
374
454
|
const isChecked = checked !== void 0 ? checked : internal;
|
|
375
455
|
const handleChange = () => {
|
|
376
456
|
if (disabled) return;
|
|
@@ -378,7 +458,14 @@ var Checkbox = ({
|
|
|
378
458
|
setInternal(next);
|
|
379
459
|
onChange == null ? void 0 : onChange(next);
|
|
380
460
|
};
|
|
381
|
-
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: [
|
|
382
469
|
/* @__PURE__ */ jsx9(
|
|
383
470
|
"input",
|
|
384
471
|
{
|
|
@@ -387,26 +474,33 @@ var Checkbox = ({
|
|
|
387
474
|
checked: isChecked,
|
|
388
475
|
disabled,
|
|
389
476
|
onChange: handleChange,
|
|
390
|
-
|
|
477
|
+
style: { position: "absolute", opacity: 0, width: 0, height: 0 }
|
|
391
478
|
}
|
|
392
479
|
),
|
|
393
|
-
/* @__PURE__ */ jsx9("span", {
|
|
394
|
-
|
|
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 })
|
|
395
493
|
] });
|
|
396
494
|
};
|
|
397
|
-
var
|
|
495
|
+
var Checkbox_default = Checkbox;
|
|
398
496
|
|
|
399
497
|
// src/components/CopyButton/CopyButton.tsx
|
|
400
498
|
import { Check, Copy } from "lucide-react";
|
|
401
|
-
import { useState as
|
|
402
|
-
|
|
403
|
-
// src/components/CopyButton/CopyButton.module.css
|
|
404
|
-
var CopyButton_default = {};
|
|
405
|
-
|
|
406
|
-
// src/components/CopyButton/CopyButton.tsx
|
|
499
|
+
import { useState as useState6 } from "react";
|
|
407
500
|
import { jsx as jsx10 } from "react/jsx-runtime";
|
|
408
501
|
var CopyButton = ({ text }) => {
|
|
409
|
-
const [copied, setCopied] =
|
|
502
|
+
const [copied, setCopied] = useState6(false);
|
|
503
|
+
const [hovered, setHovered] = useState6(false);
|
|
410
504
|
const handleCopy = () => {
|
|
411
505
|
navigator.clipboard.writeText(text);
|
|
412
506
|
setCopied(true);
|
|
@@ -415,40 +509,51 @@ var CopyButton = ({ text }) => {
|
|
|
415
509
|
return /* @__PURE__ */ jsx10(
|
|
416
510
|
"button",
|
|
417
511
|
{
|
|
418
|
-
className: CopyButton_default.copyButton,
|
|
419
512
|
onClick: handleCopy,
|
|
513
|
+
onMouseEnter: () => setHovered(true),
|
|
514
|
+
onMouseLeave: () => setHovered(false),
|
|
420
515
|
"aria-label": copied ? "Copied" : `Copy ${text}`,
|
|
421
|
-
|
|
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" } })
|
|
422
529
|
}
|
|
423
530
|
);
|
|
424
531
|
};
|
|
425
|
-
var
|
|
532
|
+
var CopyButton_default = CopyButton;
|
|
426
533
|
|
|
427
534
|
// src/components/FileUpload/FileUpload.tsx
|
|
428
535
|
import { Upload } from "lucide-react";
|
|
429
|
-
import { useRef, useState as
|
|
430
|
-
|
|
431
|
-
// src/components/FileUpload/FileUpload.module.css
|
|
432
|
-
var FileUpload_default = {};
|
|
433
|
-
|
|
434
|
-
// src/components/FileUpload/FileUpload.tsx
|
|
536
|
+
import { useRef, useState as useState7 } from "react";
|
|
435
537
|
import { jsx as jsx11, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
436
538
|
var FileUpload = ({ accept, multiple, disabled, onFileSelect }) => {
|
|
437
|
-
const [isDragging, setIsDragging] =
|
|
438
|
-
const [
|
|
539
|
+
const [isDragging, setIsDragging] = useState7(false);
|
|
540
|
+
const [isHovered, setIsHovered] = useState7(false);
|
|
541
|
+
const [fileNames, setFileNames] = useState7([]);
|
|
439
542
|
const inputRef = useRef(null);
|
|
440
543
|
const handleFiles = (list) => {
|
|
441
544
|
setFileNames(Array.from(list).map((f) => f.name));
|
|
442
545
|
onFileSelect == null ? void 0 : onFileSelect(list);
|
|
443
546
|
};
|
|
547
|
+
const isActive = isDragging || isHovered;
|
|
444
548
|
return /* @__PURE__ */ jsxs6(
|
|
445
549
|
"div",
|
|
446
550
|
{
|
|
447
|
-
className: `${FileUpload_default.zone} ${isDragging ? FileUpload_default.dragging : ""} ${disabled ? FileUpload_default.disabled : ""}`,
|
|
448
551
|
onClick: () => {
|
|
449
552
|
var _a;
|
|
450
553
|
return !disabled && ((_a = inputRef.current) == null ? void 0 : _a.click());
|
|
451
554
|
},
|
|
555
|
+
onMouseEnter: () => !disabled && setIsHovered(true),
|
|
556
|
+
onMouseLeave: () => setIsHovered(false),
|
|
452
557
|
onDragOver: (e) => {
|
|
453
558
|
e.preventDefault();
|
|
454
559
|
setIsDragging(true);
|
|
@@ -459,6 +564,20 @@ var FileUpload = ({ accept, multiple, disabled, onFileSelect }) => {
|
|
|
459
564
|
setIsDragging(false);
|
|
460
565
|
if (!disabled && e.dataTransfer.files.length) handleFiles(e.dataTransfer.files);
|
|
461
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
|
+
},
|
|
462
581
|
children: [
|
|
463
582
|
/* @__PURE__ */ jsx11(
|
|
464
583
|
"input",
|
|
@@ -468,12 +587,12 @@ var FileUpload = ({ accept, multiple, disabled, onFileSelect }) => {
|
|
|
468
587
|
accept,
|
|
469
588
|
multiple,
|
|
470
589
|
disabled,
|
|
471
|
-
|
|
590
|
+
style: { display: "none" },
|
|
472
591
|
onChange: (e) => e.target.files && handleFiles(e.target.files)
|
|
473
592
|
}
|
|
474
593
|
),
|
|
475
|
-
/* @__PURE__ */ jsx11(Upload, { size: 32,
|
|
476
|
-
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: [
|
|
477
596
|
/* @__PURE__ */ jsx11("strong", { children: "Click to upload" }),
|
|
478
597
|
" or drag and drop"
|
|
479
598
|
] })
|
|
@@ -481,65 +600,91 @@ var FileUpload = ({ accept, multiple, disabled, onFileSelect }) => {
|
|
|
481
600
|
}
|
|
482
601
|
);
|
|
483
602
|
};
|
|
484
|
-
var
|
|
485
|
-
|
|
486
|
-
// src/components/Input/Input.module.css
|
|
487
|
-
var Input_default = {};
|
|
603
|
+
var FileUpload_default = FileUpload;
|
|
488
604
|
|
|
489
605
|
// src/components/Input/Input.tsx
|
|
490
|
-
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
|
+
`;
|
|
491
614
|
var Input = (_a) => {
|
|
492
|
-
var _b = _a, {
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
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
|
+
] })
|
|
517
659
|
] });
|
|
518
660
|
};
|
|
519
|
-
var
|
|
520
|
-
|
|
521
|
-
// src/components/Label/Label.module.css
|
|
522
|
-
var Label_default = {};
|
|
661
|
+
var Input_default = Input;
|
|
523
662
|
|
|
524
663
|
// src/components/Label/Label.tsx
|
|
525
664
|
import { jsx as jsx13, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
526
665
|
var Label = (_a) => {
|
|
527
|
-
var _b = _a, { children, required,
|
|
528
|
-
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: [
|
|
529
674
|
children,
|
|
530
|
-
required && /* @__PURE__ */ jsx13("span", {
|
|
675
|
+
required && /* @__PURE__ */ jsx13("span", { style: { color: "var(--ds-danger, #ef4444)", marginLeft: "0.25rem" }, children: "*" })
|
|
531
676
|
] }));
|
|
532
677
|
};
|
|
533
|
-
var
|
|
678
|
+
var Label_default = Label;
|
|
534
679
|
|
|
535
680
|
// src/components/PasswordInput/PasswordInput.tsx
|
|
536
681
|
import { Eye, EyeOff } from "lucide-react";
|
|
537
|
-
import { useState as
|
|
682
|
+
import { useState as useState8 } from "react";
|
|
538
683
|
import { jsx as jsx14 } from "react/jsx-runtime";
|
|
539
684
|
var PasswordInput = (props) => {
|
|
540
|
-
const [visible, setVisible] =
|
|
685
|
+
const [visible, setVisible] = useState8(false);
|
|
541
686
|
return /* @__PURE__ */ jsx14(
|
|
542
|
-
|
|
687
|
+
Input_default,
|
|
543
688
|
__spreadProps(__spreadValues({}, props), {
|
|
544
689
|
type: visible ? "text" : "password",
|
|
545
690
|
rightIcon: /* @__PURE__ */ jsx14(
|
|
@@ -557,9 +702,6 @@ var PasswordInput = (props) => {
|
|
|
557
702
|
};
|
|
558
703
|
var PasswordInput_default = PasswordInput;
|
|
559
704
|
|
|
560
|
-
// src/components/Progress/Progress.module.css
|
|
561
|
-
var Progress_default = {};
|
|
562
|
-
|
|
563
705
|
// src/components/Progress/Progress.tsx
|
|
564
706
|
import { jsx as jsx15 } from "react/jsx-runtime";
|
|
565
707
|
var Progress = ({ value = 0 }) => {
|
|
@@ -567,24 +709,31 @@ var Progress = ({ value = 0 }) => {
|
|
|
567
709
|
return /* @__PURE__ */ jsx15(
|
|
568
710
|
"div",
|
|
569
711
|
{
|
|
570
|
-
className: Progress_default.track,
|
|
571
712
|
role: "progressbar",
|
|
572
713
|
"aria-valuenow": pct,
|
|
573
714
|
"aria-valuemin": 0,
|
|
574
715
|
"aria-valuemax": 100,
|
|
575
|
-
|
|
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
|
+
} })
|
|
576
730
|
}
|
|
577
731
|
);
|
|
578
732
|
};
|
|
579
|
-
var
|
|
580
|
-
|
|
581
|
-
// src/components/RadioGroup/RadioGroup.tsx
|
|
582
|
-
import { useState as useState8 } from "react";
|
|
583
|
-
|
|
584
|
-
// src/components/RadioGroup/RadioGroup.module.css
|
|
585
|
-
var RadioGroup_default = {};
|
|
733
|
+
var Progress_default = Progress;
|
|
586
734
|
|
|
587
735
|
// src/components/RadioGroup/RadioGroup.tsx
|
|
736
|
+
import { useState as useState9 } from "react";
|
|
588
737
|
import { jsx as jsx16, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
589
738
|
var RadioGroup = ({
|
|
590
739
|
options,
|
|
@@ -594,48 +743,65 @@ var RadioGroup = ({
|
|
|
594
743
|
disabled,
|
|
595
744
|
onChange
|
|
596
745
|
}) => {
|
|
597
|
-
const [internal, setInternal] =
|
|
746
|
+
const [internal, setInternal] = useState9(defaultValue);
|
|
598
747
|
const selected = value !== void 0 ? value : internal;
|
|
599
748
|
const handleChange = (val) => {
|
|
600
749
|
if (disabled) return;
|
|
601
750
|
setInternal(val);
|
|
602
751
|
onChange == null ? void 0 : onChange(val);
|
|
603
752
|
};
|
|
604
|
-
return /* @__PURE__ */ jsx16("div", {
|
|
605
|
-
|
|
606
|
-
{
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
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
|
+
}) });
|
|
627
795
|
};
|
|
628
|
-
var
|
|
796
|
+
var RadioGroup_default = RadioGroup;
|
|
629
797
|
|
|
630
798
|
// src/components/Select/Select.tsx
|
|
631
799
|
import { Check as Check2, ChevronDown as ChevronDown2 } from "lucide-react";
|
|
632
|
-
import { useEffect
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
var
|
|
636
|
-
|
|
637
|
-
// src/components/Select/Select.tsx
|
|
638
|
-
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
|
+
`;
|
|
639
805
|
var Select = ({
|
|
640
806
|
options,
|
|
641
807
|
value,
|
|
@@ -645,8 +811,9 @@ var Select = ({
|
|
|
645
811
|
onChange
|
|
646
812
|
}) => {
|
|
647
813
|
var _a;
|
|
648
|
-
const [internal, setInternal] =
|
|
649
|
-
const [open, setOpen] =
|
|
814
|
+
const [internal, setInternal] = useState10(defaultValue);
|
|
815
|
+
const [open, setOpen] = useState10(false);
|
|
816
|
+
const [hoveredOption, setHoveredOption] = useState10(null);
|
|
650
817
|
const ref = useRef2(null);
|
|
651
818
|
const selected = value !== void 0 ? value : internal;
|
|
652
819
|
const selectedLabel = (_a = options.find((o) => o.value === selected)) == null ? void 0 : _a.label;
|
|
@@ -655,66 +822,175 @@ var Select = ({
|
|
|
655
822
|
setOpen(false);
|
|
656
823
|
onChange == null ? void 0 : onChange(val);
|
|
657
824
|
};
|
|
658
|
-
|
|
825
|
+
useEffect(() => {
|
|
659
826
|
const handleOutside = (e) => {
|
|
660
827
|
if (ref.current && !ref.current.contains(e.target)) setOpen(false);
|
|
661
828
|
};
|
|
662
829
|
document.addEventListener("mousedown", handleOutside);
|
|
663
830
|
return () => document.removeEventListener("mousedown", handleOutside);
|
|
664
831
|
}, []);
|
|
665
|
-
return /* @__PURE__ */ jsxs10(
|
|
666
|
-
/* @__PURE__ */
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
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
|
+
] })
|
|
691
923
|
] });
|
|
692
924
|
};
|
|
693
|
-
var
|
|
694
|
-
|
|
695
|
-
// src/components/Skeleton/Skeleton.module.css
|
|
696
|
-
var Skeleton_default = {};
|
|
925
|
+
var Select_default = Select;
|
|
697
926
|
|
|
698
927
|
// src/components/Skeleton/Skeleton.tsx
|
|
699
|
-
import { jsx as jsx18 } from "react/jsx-runtime";
|
|
700
|
-
var Skeleton = ({ height = "1rem", width = "100%", circle = false }) => /* @__PURE__ */
|
|
701
|
-
"
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
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;
|
|
715
949
|
|
|
716
950
|
// src/components/Slider/Slider.tsx
|
|
717
|
-
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
|
+
`;
|
|
718
994
|
var Slider = ({
|
|
719
995
|
value,
|
|
720
996
|
defaultValue = 50,
|
|
@@ -724,7 +1000,7 @@ var Slider = ({
|
|
|
724
1000
|
disabled,
|
|
725
1001
|
onChange
|
|
726
1002
|
}) => {
|
|
727
|
-
const [internal, setInternal] =
|
|
1003
|
+
const [internal, setInternal] = useState11(defaultValue);
|
|
728
1004
|
const current = value !== void 0 ? value : internal;
|
|
729
1005
|
const fill = `${(current - min) / (max - min) * 100}%`;
|
|
730
1006
|
const handleChange = (e) => {
|
|
@@ -732,43 +1008,50 @@ var Slider = ({
|
|
|
732
1008
|
setInternal(val);
|
|
733
1009
|
onChange == null ? void 0 : onChange(val);
|
|
734
1010
|
};
|
|
735
|
-
return /* @__PURE__ */
|
|
736
|
-
"
|
|
737
|
-
{
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
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
|
+
] });
|
|
749
1032
|
};
|
|
750
|
-
var
|
|
1033
|
+
var Slider_default = Slider;
|
|
751
1034
|
|
|
752
1035
|
// src/components/Spinner/Spinner.tsx
|
|
753
1036
|
import { Loader2 } from "lucide-react";
|
|
754
|
-
|
|
755
|
-
// src/components/Spinner/Spinner.module.css
|
|
756
|
-
var Spinner_default = {};
|
|
757
|
-
|
|
758
|
-
// src/components/Spinner/Spinner.tsx
|
|
759
|
-
import { jsx as jsx20 } from "react/jsx-runtime";
|
|
1037
|
+
import { Fragment as Fragment6, jsx as jsx20, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
760
1038
|
var sizePx = { sm: 16, md: 24, lg: 32 };
|
|
761
|
-
var Spinner = ({ size = "md" }) => /* @__PURE__ */
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
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;
|
|
769
1051
|
|
|
770
1052
|
// src/components/Switch/Switch.tsx
|
|
771
|
-
import {
|
|
1053
|
+
import { useState as useState12 } from "react";
|
|
1054
|
+
import { jsx as jsx21, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
772
1055
|
var Switch = ({
|
|
773
1056
|
label,
|
|
774
1057
|
checked,
|
|
@@ -777,7 +1060,7 @@ var Switch = ({
|
|
|
777
1060
|
id,
|
|
778
1061
|
onChange
|
|
779
1062
|
}) => {
|
|
780
|
-
const [internal, setInternal] =
|
|
1063
|
+
const [internal, setInternal] = useState12(defaultChecked);
|
|
781
1064
|
const isOn = checked !== void 0 ? checked : internal;
|
|
782
1065
|
const handleToggle = () => {
|
|
783
1066
|
if (disabled) return;
|
|
@@ -785,7 +1068,14 @@ var Switch = ({
|
|
|
785
1068
|
setInternal(next);
|
|
786
1069
|
onChange == null ? void 0 : onChange(next);
|
|
787
1070
|
};
|
|
788
|
-
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: [
|
|
789
1079
|
/* @__PURE__ */ jsx21(
|
|
790
1080
|
"input",
|
|
791
1081
|
{
|
|
@@ -794,103 +1084,254 @@ var Switch = ({
|
|
|
794
1084
|
checked: isOn,
|
|
795
1085
|
disabled,
|
|
796
1086
|
onChange: handleToggle,
|
|
797
|
-
|
|
1087
|
+
style: { position: "absolute", opacity: 0, width: 0, height: 0 }
|
|
798
1088
|
}
|
|
799
1089
|
),
|
|
800
|
-
/* @__PURE__ */ jsx21("span", {
|
|
801
|
-
|
|
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 })
|
|
802
1111
|
] });
|
|
803
1112
|
};
|
|
804
|
-
var
|
|
805
|
-
|
|
806
|
-
// src/components/Table/Table.module.css
|
|
807
|
-
var Table_default = {};
|
|
1113
|
+
var Switch_default = Switch;
|
|
808
1114
|
|
|
809
1115
|
// src/components/Table/Table.tsx
|
|
810
|
-
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
|
+
`;
|
|
811
1120
|
var Table = (_a) => {
|
|
812
|
-
var _b = _a, {
|
|
813
|
-
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
|
+
] });
|
|
814
1135
|
};
|
|
815
1136
|
var TableHead = (props) => /* @__PURE__ */ jsx22("thead", __spreadValues({}, props));
|
|
816
1137
|
var TableBody = (props) => /* @__PURE__ */ jsx22("tbody", __spreadValues({}, props));
|
|
817
1138
|
var TableRow = (_a) => {
|
|
818
|
-
var _b = _a, {
|
|
819
|
-
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));
|
|
820
1141
|
};
|
|
821
1142
|
var TableHeader = (_a) => {
|
|
822
|
-
var _b = _a, {
|
|
823
|
-
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));
|
|
824
1153
|
};
|
|
825
1154
|
var TableCell = (_a) => {
|
|
826
|
-
var _b = _a, {
|
|
827
|
-
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
|
+
);
|
|
828
1168
|
};
|
|
829
1169
|
|
|
830
1170
|
// src/components/Tabs/Tabs.tsx
|
|
831
|
-
import { useState as
|
|
832
|
-
|
|
833
|
-
// src/components/Tabs/Tabs.module.css
|
|
834
|
-
var Tabs_default = {};
|
|
835
|
-
|
|
836
|
-
// src/components/Tabs/Tabs.tsx
|
|
837
|
-
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";
|
|
838
1173
|
var Tabs = ({ tabs, defaultValue }) => {
|
|
839
1174
|
var _a, _b;
|
|
840
|
-
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);
|
|
841
1177
|
const activeTab = tabs.find((t) => t.value === active);
|
|
842
|
-
return /* @__PURE__ */
|
|
843
|
-
/* @__PURE__ */ jsx23("div", {
|
|
844
|
-
"
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
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 })
|
|
858
1225
|
] });
|
|
859
1226
|
};
|
|
860
|
-
var
|
|
861
|
-
|
|
862
|
-
// src/components/Textarea/Textarea.module.css
|
|
863
|
-
var Textarea_default = {};
|
|
1227
|
+
var Tabs_default = Tabs;
|
|
864
1228
|
|
|
865
1229
|
// src/components/Textarea/Textarea.tsx
|
|
866
|
-
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
|
+
`;
|
|
867
1238
|
var Textarea = (_a) => {
|
|
868
|
-
var _b = _a, { error,
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
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;
|
|
880
1266
|
|
|
881
1267
|
// src/components/Tooltip/Tooltip.tsx
|
|
882
|
-
import {
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
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;
|
|
888
1329
|
export {
|
|
889
1330
|
Accordion_default as Accordion,
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
1331
|
+
Alert_default as Alert,
|
|
1332
|
+
Avatar_default as Avatar,
|
|
1333
|
+
Badge_default as Badge,
|
|
1334
|
+
Breadcrumb_default as Breadcrumb,
|
|
894
1335
|
Button_default as Button,
|
|
895
1336
|
Card,
|
|
896
1337
|
CardContent,
|
|
@@ -898,29 +1339,29 @@ export {
|
|
|
898
1339
|
CardFooter,
|
|
899
1340
|
CardHeader,
|
|
900
1341
|
CardTitle,
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
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,
|
|
906
1347
|
PasswordInput_default as PasswordInput,
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
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,
|
|
914
1355
|
Table,
|
|
915
1356
|
TableBody,
|
|
916
1357
|
TableCell,
|
|
917
1358
|
TableHead,
|
|
918
1359
|
TableHeader,
|
|
919
1360
|
TableRow,
|
|
920
|
-
|
|
921
|
-
|
|
1361
|
+
Tabs_default as Tabs,
|
|
1362
|
+
Textarea_default as Textarea,
|
|
922
1363
|
ThemeProvider,
|
|
923
|
-
|
|
1364
|
+
Tooltip_default as Tooltip,
|
|
924
1365
|
useTheme
|
|
925
1366
|
};
|
|
926
1367
|
//# sourceMappingURL=index.js.map
|