@cytario/design 3.4.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.css +1 -1
- package/dist/index.d.ts +5 -84
- package/dist/index.js +299 -832
- package/dist/index.js.map +1 -1
- package/package.json +1 -2
package/dist/index.js
CHANGED
|
@@ -328,12 +328,44 @@ function IconButton({
|
|
|
328
328
|
// src/components/Form/Input/Input.tsx
|
|
329
329
|
import {
|
|
330
330
|
TextField,
|
|
331
|
-
Label,
|
|
332
331
|
Input as AriaInput,
|
|
333
332
|
Text
|
|
334
333
|
} from "react-aria-components";
|
|
335
334
|
import { twMerge as twMerge2 } from "tailwind-merge";
|
|
335
|
+
|
|
336
|
+
// src/components/Form/Label/Label.tsx
|
|
337
|
+
import {
|
|
338
|
+
Label as AriaLabel
|
|
339
|
+
} from "react-aria-components";
|
|
336
340
|
import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
341
|
+
function Label({ isRequired, children, className, ...props }) {
|
|
342
|
+
return /* @__PURE__ */ jsxs4(
|
|
343
|
+
AriaLabel,
|
|
344
|
+
{
|
|
345
|
+
...props,
|
|
346
|
+
className: [
|
|
347
|
+
"text-sm",
|
|
348
|
+
"font-medium",
|
|
349
|
+
"text-(--color-text-primary)",
|
|
350
|
+
className
|
|
351
|
+
].filter(Boolean).join(" "),
|
|
352
|
+
children: [
|
|
353
|
+
children,
|
|
354
|
+
isRequired && /* @__PURE__ */ jsx6(
|
|
355
|
+
"span",
|
|
356
|
+
{
|
|
357
|
+
"aria-hidden": "true",
|
|
358
|
+
className: "ml-0.5 text-(--color-text-danger)",
|
|
359
|
+
children: "*"
|
|
360
|
+
}
|
|
361
|
+
)
|
|
362
|
+
]
|
|
363
|
+
}
|
|
364
|
+
);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
// src/components/Form/Input/Input.tsx
|
|
368
|
+
import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
337
369
|
var alignClasses = {
|
|
338
370
|
left: "text-left",
|
|
339
371
|
center: "text-center",
|
|
@@ -366,14 +398,14 @@ function Input({
|
|
|
366
398
|
className,
|
|
367
399
|
...props
|
|
368
400
|
}) {
|
|
369
|
-
const
|
|
401
|
+
const Field = FieldProp;
|
|
370
402
|
const isInvalid = !!errorMessage;
|
|
371
403
|
const { inGroup, position } = useInputGroup();
|
|
372
404
|
const borderColor = isInvalid ? "border-(--color-border-danger)" : "border-(--color-border-default) hover:border-(--color-border-strong)";
|
|
373
405
|
const radiusClass = inGroup ? groupRadiusClasses(position) : "rounded-md";
|
|
374
406
|
const marginClass = inGroup && position !== "start" && position !== "standalone" ? "-ml-px" : "";
|
|
375
|
-
return /* @__PURE__ */
|
|
376
|
-
|
|
407
|
+
return /* @__PURE__ */ jsxs5(
|
|
408
|
+
Field,
|
|
377
409
|
{
|
|
378
410
|
...props,
|
|
379
411
|
type,
|
|
@@ -387,28 +419,8 @@ function Input({
|
|
|
387
419
|
className
|
|
388
420
|
),
|
|
389
421
|
children: [
|
|
390
|
-
label && /* @__PURE__ */
|
|
391
|
-
|
|
392
|
-
{
|
|
393
|
-
className: twMerge2(
|
|
394
|
-
"text-sm",
|
|
395
|
-
"font-medium",
|
|
396
|
-
"text-(--color-text-primary)"
|
|
397
|
-
),
|
|
398
|
-
children: [
|
|
399
|
-
label,
|
|
400
|
-
isRequired && /* @__PURE__ */ jsx6(
|
|
401
|
-
"span",
|
|
402
|
-
{
|
|
403
|
-
"aria-hidden": "true",
|
|
404
|
-
className: "ml-0.5 text-(--color-text-danger)",
|
|
405
|
-
children: "*"
|
|
406
|
-
}
|
|
407
|
-
)
|
|
408
|
-
]
|
|
409
|
-
}
|
|
410
|
-
),
|
|
411
|
-
prefix ? /* @__PURE__ */ jsxs4(
|
|
422
|
+
label && /* @__PURE__ */ jsx7(Label, { isRequired, children: label }),
|
|
423
|
+
prefix ? /* @__PURE__ */ jsxs5(
|
|
412
424
|
"div",
|
|
413
425
|
{
|
|
414
426
|
className: twMerge2(
|
|
@@ -423,7 +435,7 @@ function Input({
|
|
|
423
435
|
isDisabled && "opacity-50 pointer-events-none"
|
|
424
436
|
),
|
|
425
437
|
children: [
|
|
426
|
-
/* @__PURE__ */
|
|
438
|
+
/* @__PURE__ */ jsx7(
|
|
427
439
|
"span",
|
|
428
440
|
{
|
|
429
441
|
className: twMerge2(
|
|
@@ -436,7 +448,7 @@ function Input({
|
|
|
436
448
|
children: prefix
|
|
437
449
|
}
|
|
438
450
|
),
|
|
439
|
-
/* @__PURE__ */
|
|
451
|
+
/* @__PURE__ */ jsx7(
|
|
440
452
|
AriaInput,
|
|
441
453
|
{
|
|
442
454
|
placeholder,
|
|
@@ -452,7 +464,7 @@ function Input({
|
|
|
452
464
|
)
|
|
453
465
|
]
|
|
454
466
|
}
|
|
455
|
-
) : /* @__PURE__ */
|
|
467
|
+
) : /* @__PURE__ */ jsx7(
|
|
456
468
|
AriaInput,
|
|
457
469
|
{
|
|
458
470
|
placeholder,
|
|
@@ -473,7 +485,7 @@ function Input({
|
|
|
473
485
|
)
|
|
474
486
|
}
|
|
475
487
|
),
|
|
476
|
-
description &&
|
|
488
|
+
description && /* @__PURE__ */ jsx7(
|
|
477
489
|
Text,
|
|
478
490
|
{
|
|
479
491
|
slot: "description",
|
|
@@ -481,10 +493,11 @@ function Input({
|
|
|
481
493
|
children: description
|
|
482
494
|
}
|
|
483
495
|
),
|
|
484
|
-
isInvalid && /* @__PURE__ */
|
|
496
|
+
isInvalid && /* @__PURE__ */ jsx7(
|
|
485
497
|
Text,
|
|
486
498
|
{
|
|
487
499
|
slot: "errorMessage",
|
|
500
|
+
role: "alert",
|
|
488
501
|
className: "text-sm text-(--color-text-danger)",
|
|
489
502
|
children: errorMessage
|
|
490
503
|
}
|
|
@@ -498,19 +511,20 @@ function Input({
|
|
|
498
511
|
import { Check, ChevronDown } from "lucide-react";
|
|
499
512
|
import {
|
|
500
513
|
Button as Button2,
|
|
501
|
-
Label as Label2,
|
|
502
514
|
ListBox,
|
|
503
515
|
ListBoxItem,
|
|
504
516
|
Popover,
|
|
505
517
|
Select as AriaSelect,
|
|
506
|
-
SelectValue
|
|
518
|
+
SelectValue,
|
|
519
|
+
Text as Text2
|
|
507
520
|
} from "react-aria-components";
|
|
508
521
|
import { twMerge as twMerge3 } from "tailwind-merge";
|
|
509
|
-
import { Fragment, jsx as
|
|
522
|
+
import { Fragment, jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
510
523
|
function Select({
|
|
511
524
|
label,
|
|
512
525
|
items,
|
|
513
526
|
placeholder = "Select an option",
|
|
527
|
+
description,
|
|
514
528
|
errorMessage,
|
|
515
529
|
size = "md",
|
|
516
530
|
isDisabled,
|
|
@@ -520,7 +534,7 @@ function Select({
|
|
|
520
534
|
...props
|
|
521
535
|
}) {
|
|
522
536
|
const hasError = Boolean(errorMessage);
|
|
523
|
-
return /* @__PURE__ */
|
|
537
|
+
return /* @__PURE__ */ jsxs6(
|
|
524
538
|
AriaSelect,
|
|
525
539
|
{
|
|
526
540
|
...props,
|
|
@@ -529,20 +543,11 @@ function Select({
|
|
|
529
543
|
isInvalid: hasError,
|
|
530
544
|
className: twMerge3("flex flex-col gap-1", className),
|
|
531
545
|
children: [
|
|
532
|
-
label && /* @__PURE__ */
|
|
533
|
-
|
|
534
|
-
isRequired && /* @__PURE__ */ jsx7(
|
|
535
|
-
"span",
|
|
536
|
-
{
|
|
537
|
-
"aria-hidden": "true",
|
|
538
|
-
className: "ml-0.5 text-(--color-text-danger)",
|
|
539
|
-
children: "*"
|
|
540
|
-
}
|
|
541
|
-
)
|
|
542
|
-
] }),
|
|
543
|
-
/* @__PURE__ */ jsxs5(
|
|
546
|
+
label && /* @__PURE__ */ jsx8(Label, { isRequired, children: label }),
|
|
547
|
+
/* @__PURE__ */ jsxs6(
|
|
544
548
|
Button2,
|
|
545
549
|
{
|
|
550
|
+
"aria-required": isRequired || void 0,
|
|
546
551
|
className: twMerge3(
|
|
547
552
|
`
|
|
548
553
|
inline-flex items-center justify-between
|
|
@@ -557,7 +562,7 @@ function Select({
|
|
|
557
562
|
hasError ? "border-(--color-border-danger)" : "border-(--color-border-default)"
|
|
558
563
|
),
|
|
559
564
|
children: [
|
|
560
|
-
/* @__PURE__ */
|
|
565
|
+
/* @__PURE__ */ jsx8(
|
|
561
566
|
SelectValue,
|
|
562
567
|
{
|
|
563
568
|
className: twMerge3(
|
|
@@ -571,7 +576,7 @@ function Select({
|
|
|
571
576
|
}
|
|
572
577
|
}
|
|
573
578
|
),
|
|
574
|
-
/* @__PURE__ */
|
|
579
|
+
/* @__PURE__ */ jsx8(
|
|
575
580
|
ChevronDown,
|
|
576
581
|
{
|
|
577
582
|
"aria-hidden": true,
|
|
@@ -584,8 +589,17 @@ function Select({
|
|
|
584
589
|
]
|
|
585
590
|
}
|
|
586
591
|
),
|
|
587
|
-
|
|
588
|
-
/* @__PURE__ */
|
|
592
|
+
description && /* @__PURE__ */ jsx8(Text2, { slot: "description", className: "text-sm text-(--color-text-secondary)", children: description }),
|
|
593
|
+
hasError && /* @__PURE__ */ jsx8(
|
|
594
|
+
Text2,
|
|
595
|
+
{
|
|
596
|
+
slot: "errorMessage",
|
|
597
|
+
role: "alert",
|
|
598
|
+
className: "text-sm text-(--color-text-danger)",
|
|
599
|
+
children: errorMessage
|
|
600
|
+
}
|
|
601
|
+
),
|
|
602
|
+
/* @__PURE__ */ jsx8(
|
|
589
603
|
Popover,
|
|
590
604
|
{
|
|
591
605
|
className: twMerge3(
|
|
@@ -598,7 +612,7 @@ function Select({
|
|
|
598
612
|
"entering:animate-in entering:fade-in",
|
|
599
613
|
"exiting:animate-out exiting:fade-out"
|
|
600
614
|
),
|
|
601
|
-
children: /* @__PURE__ */
|
|
615
|
+
children: /* @__PURE__ */ jsx8(ListBox, { className: "p-1 outline-none", items, children: (item) => /* @__PURE__ */ jsx8(
|
|
602
616
|
ListBoxItem,
|
|
603
617
|
{
|
|
604
618
|
id: item.id,
|
|
@@ -615,9 +629,9 @@ function Select({
|
|
|
615
629
|
`,
|
|
616
630
|
sizeStyles[size]
|
|
617
631
|
),
|
|
618
|
-
children: ({ isSelected }) => /* @__PURE__ */
|
|
619
|
-
/* @__PURE__ */
|
|
620
|
-
isSelected && /* @__PURE__ */
|
|
632
|
+
children: ({ isSelected }) => /* @__PURE__ */ jsxs6(Fragment, { children: [
|
|
633
|
+
/* @__PURE__ */ jsx8("span", { className: renderItem ? "min-w-0 flex-1" : "truncate", children: renderItem ? renderItem(item) : item.name }),
|
|
634
|
+
isSelected && /* @__PURE__ */ jsx8(Check, { className: "h-4 w-4 shrink-0 text-(--color-action-primary)" })
|
|
621
635
|
] })
|
|
622
636
|
}
|
|
623
637
|
) })
|
|
@@ -637,13 +651,13 @@ import {
|
|
|
637
651
|
TableBody as AriaTableBody,
|
|
638
652
|
TableHeader as AriaTableHeader
|
|
639
653
|
} from "react-aria-components";
|
|
640
|
-
import { jsx as
|
|
654
|
+
import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
641
655
|
var tableSizeClass = {
|
|
642
656
|
compact: "[--table-row-py:theme(spacing.1)]",
|
|
643
657
|
comfortable: "[--table-row-py:theme(spacing.3)]"
|
|
644
658
|
};
|
|
645
659
|
function Table({ size = "comfortable", className, ...props }) {
|
|
646
|
-
return /* @__PURE__ */
|
|
660
|
+
return /* @__PURE__ */ jsx9(
|
|
647
661
|
AriaTable,
|
|
648
662
|
{
|
|
649
663
|
...props,
|
|
@@ -656,10 +670,10 @@ function Table({ size = "comfortable", className, ...props }) {
|
|
|
656
670
|
);
|
|
657
671
|
}
|
|
658
672
|
function TableHeader(props) {
|
|
659
|
-
return /* @__PURE__ */
|
|
673
|
+
return /* @__PURE__ */ jsx9(AriaTableHeader, { ...props });
|
|
660
674
|
}
|
|
661
675
|
function Column(props) {
|
|
662
|
-
return /* @__PURE__ */
|
|
676
|
+
return /* @__PURE__ */ jsx9(
|
|
663
677
|
AriaColumn,
|
|
664
678
|
{
|
|
665
679
|
...props,
|
|
@@ -669,18 +683,18 @@ function Column(props) {
|
|
|
669
683
|
"cursor-default select-none outline-none",
|
|
670
684
|
"focus-visible:outline-2 focus-visible:outline-(--color-border-focus) focus-visible:outline-offset-[-2px]"
|
|
671
685
|
].join(" "),
|
|
672
|
-
children: ({ allowsSorting, sortDirection }) => /* @__PURE__ */
|
|
686
|
+
children: ({ allowsSorting, sortDirection }) => /* @__PURE__ */ jsxs7("span", { className: "inline-flex items-center gap-1", children: [
|
|
673
687
|
props.children,
|
|
674
|
-
allowsSorting && /* @__PURE__ */
|
|
688
|
+
allowsSorting && /* @__PURE__ */ jsx9("span", { "aria-hidden": "true", className: "text-(--color-text-tertiary)", children: sortDirection === "ascending" ? "\u25B2" : sortDirection === "descending" ? "\u25BC" : "\u25B4" })
|
|
675
689
|
] })
|
|
676
690
|
}
|
|
677
691
|
);
|
|
678
692
|
}
|
|
679
693
|
function TableBody(props) {
|
|
680
|
-
return /* @__PURE__ */
|
|
694
|
+
return /* @__PURE__ */ jsx9(AriaTableBody, { ...props });
|
|
681
695
|
}
|
|
682
696
|
function Row(props) {
|
|
683
|
-
return /* @__PURE__ */
|
|
697
|
+
return /* @__PURE__ */ jsx9(
|
|
684
698
|
AriaRow,
|
|
685
699
|
{
|
|
686
700
|
...props,
|
|
@@ -696,7 +710,7 @@ function Row(props) {
|
|
|
696
710
|
);
|
|
697
711
|
}
|
|
698
712
|
function Cell(props) {
|
|
699
|
-
return /* @__PURE__ */
|
|
713
|
+
return /* @__PURE__ */ jsx9(
|
|
700
714
|
AriaCell,
|
|
701
715
|
{
|
|
702
716
|
...props,
|
|
@@ -718,7 +732,7 @@ import {
|
|
|
718
732
|
Heading
|
|
719
733
|
} from "react-aria-components";
|
|
720
734
|
import { X } from "lucide-react";
|
|
721
|
-
import { Fragment as Fragment2, jsx as
|
|
735
|
+
import { Fragment as Fragment2, jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
722
736
|
var sizeStyles2 = {
|
|
723
737
|
sm: "max-w-md",
|
|
724
738
|
md: "max-w-lg",
|
|
@@ -734,7 +748,7 @@ function Dialog({
|
|
|
734
748
|
children,
|
|
735
749
|
className
|
|
736
750
|
}) {
|
|
737
|
-
return /* @__PURE__ */
|
|
751
|
+
return /* @__PURE__ */ jsx10(
|
|
738
752
|
ModalOverlay,
|
|
739
753
|
{
|
|
740
754
|
isOpen,
|
|
@@ -746,7 +760,7 @@ function Dialog({
|
|
|
746
760
|
"data-[entering]:animate-in data-[entering]:fade-in",
|
|
747
761
|
"data-[exiting]:animate-out data-[exiting]:fade-out"
|
|
748
762
|
].join(" "),
|
|
749
|
-
children: /* @__PURE__ */
|
|
763
|
+
children: /* @__PURE__ */ jsx10(
|
|
750
764
|
Modal,
|
|
751
765
|
{
|
|
752
766
|
className: [
|
|
@@ -757,9 +771,9 @@ function Dialog({
|
|
|
757
771
|
"data-[exiting]:animate-out data-[exiting]:zoom-out-95 data-[exiting]:fade-out",
|
|
758
772
|
className
|
|
759
773
|
].filter(Boolean).join(" "),
|
|
760
|
-
children: /* @__PURE__ */
|
|
761
|
-
/* @__PURE__ */
|
|
762
|
-
/* @__PURE__ */
|
|
774
|
+
children: /* @__PURE__ */ jsx10(AriaDialog, { className: "outline-none flex flex-col max-h-[85vh]", children: ({ close }) => /* @__PURE__ */ jsxs8(Fragment2, { children: [
|
|
775
|
+
/* @__PURE__ */ jsxs8("div", { className: "flex items-center justify-between px-6 py-4 border-b border-(--color-border-default)", children: [
|
|
776
|
+
/* @__PURE__ */ jsx10(
|
|
763
777
|
Heading,
|
|
764
778
|
{
|
|
765
779
|
slot: "title",
|
|
@@ -767,7 +781,7 @@ function Dialog({
|
|
|
767
781
|
children: title
|
|
768
782
|
}
|
|
769
783
|
),
|
|
770
|
-
/* @__PURE__ */
|
|
784
|
+
/* @__PURE__ */ jsx10(
|
|
771
785
|
"button",
|
|
772
786
|
{
|
|
773
787
|
type: "button",
|
|
@@ -779,11 +793,11 @@ function Dialog({
|
|
|
779
793
|
"transition-colors"
|
|
780
794
|
].join(" "),
|
|
781
795
|
"aria-label": "Close",
|
|
782
|
-
children: /* @__PURE__ */
|
|
796
|
+
children: /* @__PURE__ */ jsx10(X, { size: 20, "aria-hidden": "true" })
|
|
783
797
|
}
|
|
784
798
|
)
|
|
785
799
|
] }),
|
|
786
|
-
/* @__PURE__ */
|
|
800
|
+
/* @__PURE__ */ jsx10("div", { className: "px-6 py-4 overflow-y-auto", children })
|
|
787
801
|
] }) })
|
|
788
802
|
}
|
|
789
803
|
)
|
|
@@ -792,7 +806,7 @@ function Dialog({
|
|
|
792
806
|
}
|
|
793
807
|
|
|
794
808
|
// src/components/Dialog/DialogFooter.tsx
|
|
795
|
-
import { jsx as
|
|
809
|
+
import { jsx as jsx11 } from "react/jsx-runtime";
|
|
796
810
|
|
|
797
811
|
// src/components/Toast/Toast.tsx
|
|
798
812
|
import {
|
|
@@ -805,7 +819,7 @@ import {
|
|
|
805
819
|
} from "react";
|
|
806
820
|
import { createPortal } from "react-dom";
|
|
807
821
|
import { CheckCircle, XCircle, Info, X as X2 } from "lucide-react";
|
|
808
|
-
import { jsx as
|
|
822
|
+
import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
809
823
|
var ToastContext = createContext2(null);
|
|
810
824
|
var toastCounter = 0;
|
|
811
825
|
var defaultDuration = {
|
|
@@ -863,7 +877,7 @@ function ToastItem({
|
|
|
863
877
|
if (timerRef.current) clearTimeout(timerRef.current);
|
|
864
878
|
};
|
|
865
879
|
}, [toast.duration, toast.variant, dismiss]);
|
|
866
|
-
return /* @__PURE__ */
|
|
880
|
+
return /* @__PURE__ */ jsxs9(
|
|
867
881
|
"div",
|
|
868
882
|
{
|
|
869
883
|
role: "status",
|
|
@@ -876,16 +890,16 @@ function ToastItem({
|
|
|
876
890
|
config.containerClass
|
|
877
891
|
].join(" "),
|
|
878
892
|
children: [
|
|
879
|
-
/* @__PURE__ */
|
|
880
|
-
/* @__PURE__ */
|
|
881
|
-
/* @__PURE__ */
|
|
893
|
+
/* @__PURE__ */ jsx12(IconComponent, { size: 20, className: ["shrink-0 mt-0.5", config.iconClass].join(" "), "aria-hidden": "true" }),
|
|
894
|
+
/* @__PURE__ */ jsx12("p", { className: "flex-1 text-sm font-medium", children: toast.message }),
|
|
895
|
+
/* @__PURE__ */ jsx12(
|
|
882
896
|
"button",
|
|
883
897
|
{
|
|
884
898
|
type: "button",
|
|
885
899
|
onClick: dismiss,
|
|
886
900
|
className: "shrink-0 rounded-sm p-0.5 opacity-70 hover:opacity-100 transition-opacity outline-none focus-visible:ring-2 focus-visible:ring-current",
|
|
887
901
|
"aria-label": "Dismiss",
|
|
888
|
-
children: /* @__PURE__ */
|
|
902
|
+
children: /* @__PURE__ */ jsx12(X2, { size: 16, "aria-hidden": "true" })
|
|
889
903
|
}
|
|
890
904
|
)
|
|
891
905
|
]
|
|
@@ -905,7 +919,7 @@ function ToastContainer({
|
|
|
905
919
|
}) {
|
|
906
920
|
if (toasts.length === 0) return null;
|
|
907
921
|
return createPortal(
|
|
908
|
-
/* @__PURE__ */
|
|
922
|
+
/* @__PURE__ */ jsx12(PlacementContext.Provider, { value: placement, children: /* @__PURE__ */ jsx12("div", { className: containerPositionStyles[placement], children: toasts.map((toast) => /* @__PURE__ */ jsx12(ToastItem, { toast, onRemove: removeToast }, toast.id)) }) }),
|
|
909
923
|
document.body
|
|
910
924
|
);
|
|
911
925
|
}
|
|
@@ -936,9 +950,9 @@ function ToastProvider({ children, bridge, placement = "bottom-right" }) {
|
|
|
936
950
|
if (!bridge) return;
|
|
937
951
|
return bridge.subscribe(addToast);
|
|
938
952
|
}, [bridge, addToast]);
|
|
939
|
-
return /* @__PURE__ */
|
|
953
|
+
return /* @__PURE__ */ jsxs9(ToastContext.Provider, { value: { toasts, addToast, removeToast }, children: [
|
|
940
954
|
children,
|
|
941
|
-
/* @__PURE__ */
|
|
955
|
+
/* @__PURE__ */ jsx12(ToastContainer, { toasts, removeToast, placement })
|
|
942
956
|
] });
|
|
943
957
|
}
|
|
944
958
|
function useToast() {
|
|
@@ -954,7 +968,7 @@ function useToast() {
|
|
|
954
968
|
}
|
|
955
969
|
|
|
956
970
|
// src/components/EmptyState/EmptyState.tsx
|
|
957
|
-
import { jsx as
|
|
971
|
+
import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
958
972
|
function EmptyState({
|
|
959
973
|
icon,
|
|
960
974
|
title,
|
|
@@ -962,7 +976,7 @@ function EmptyState({
|
|
|
962
976
|
action,
|
|
963
977
|
className
|
|
964
978
|
}) {
|
|
965
|
-
return /* @__PURE__ */
|
|
979
|
+
return /* @__PURE__ */ jsxs10(
|
|
966
980
|
"div",
|
|
967
981
|
{
|
|
968
982
|
className: [
|
|
@@ -970,10 +984,10 @@ function EmptyState({
|
|
|
970
984
|
className
|
|
971
985
|
].filter(Boolean).join(" "),
|
|
972
986
|
children: [
|
|
973
|
-
icon && /* @__PURE__ */
|
|
974
|
-
/* @__PURE__ */
|
|
975
|
-
description && /* @__PURE__ */
|
|
976
|
-
action && /* @__PURE__ */
|
|
987
|
+
icon && /* @__PURE__ */ jsx13(Icon, { icon, size: "xl", className: "text-(--color-text-tertiary)" }),
|
|
988
|
+
/* @__PURE__ */ jsx13("h3", { className: "text-lg font-semibold text-(--color-text-primary) mt-4", children: title }),
|
|
989
|
+
description && /* @__PURE__ */ jsx13("p", { className: "text-sm text-(--color-text-secondary) mt-2 max-w-sm", children: description }),
|
|
990
|
+
action && /* @__PURE__ */ jsx13("div", { className: "mt-6", children: action })
|
|
977
991
|
]
|
|
978
992
|
}
|
|
979
993
|
);
|
|
@@ -984,9 +998,9 @@ import {
|
|
|
984
998
|
Checkbox as AriaCheckbox
|
|
985
999
|
} from "react-aria-components";
|
|
986
1000
|
import { Check as Check2 } from "lucide-react";
|
|
987
|
-
import { Fragment as Fragment3, jsx as
|
|
1001
|
+
import { Fragment as Fragment3, jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
988
1002
|
function Checkbox({ children, className, ...props }) {
|
|
989
|
-
return /* @__PURE__ */
|
|
1003
|
+
return /* @__PURE__ */ jsx14(
|
|
990
1004
|
AriaCheckbox,
|
|
991
1005
|
{
|
|
992
1006
|
...props,
|
|
@@ -995,8 +1009,8 @@ function Checkbox({ children, className, ...props }) {
|
|
|
995
1009
|
"disabled:opacity-50 disabled:cursor-default",
|
|
996
1010
|
className
|
|
997
1011
|
].filter(Boolean).join(" "),
|
|
998
|
-
children: ({ isSelected, isIndeterminate }) => /* @__PURE__ */
|
|
999
|
-
/* @__PURE__ */
|
|
1012
|
+
children: ({ isSelected, isIndeterminate }) => /* @__PURE__ */ jsxs11(Fragment3, { children: [
|
|
1013
|
+
/* @__PURE__ */ jsxs11(
|
|
1000
1014
|
"div",
|
|
1001
1015
|
{
|
|
1002
1016
|
className: [
|
|
@@ -1006,12 +1020,12 @@ function Checkbox({ children, className, ...props }) {
|
|
|
1006
1020
|
isSelected || isIndeterminate ? "bg-(--color-action-primary) border-(--color-action-primary)" : "bg-(--color-surface-default) border-(--color-border-default) group-hover:border-(--color-border-strong)"
|
|
1007
1021
|
].join(" "),
|
|
1008
1022
|
children: [
|
|
1009
|
-
isSelected && /* @__PURE__ */
|
|
1010
|
-
isIndeterminate && /* @__PURE__ */
|
|
1023
|
+
isSelected && /* @__PURE__ */ jsx14(Check2, { className: "w-4 h-4 text-(--color-text-inverse)", strokeWidth: 3 }),
|
|
1024
|
+
isIndeterminate && /* @__PURE__ */ jsx14("div", { className: "w-3 h-0.5 bg-(--color-text-inverse) rounded-full" })
|
|
1011
1025
|
]
|
|
1012
1026
|
}
|
|
1013
1027
|
),
|
|
1014
|
-
children && /* @__PURE__ */
|
|
1028
|
+
children && /* @__PURE__ */ jsx14("span", { children })
|
|
1015
1029
|
] })
|
|
1016
1030
|
}
|
|
1017
1031
|
);
|
|
@@ -1021,7 +1035,7 @@ function Checkbox({ children, className, ...props }) {
|
|
|
1021
1035
|
import {
|
|
1022
1036
|
Switch as AriaSwitch
|
|
1023
1037
|
} from "react-aria-components";
|
|
1024
|
-
import { Fragment as Fragment4, jsx as
|
|
1038
|
+
import { Fragment as Fragment4, jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
1025
1039
|
var trackColorMap = {
|
|
1026
1040
|
primary: "bg-(--color-action-primary)",
|
|
1027
1041
|
success: "bg-(--color-action-success)",
|
|
@@ -1038,7 +1052,7 @@ function Switch({
|
|
|
1038
1052
|
...props
|
|
1039
1053
|
}) {
|
|
1040
1054
|
const isPreset = isPresetColor(color);
|
|
1041
|
-
return /* @__PURE__ */
|
|
1055
|
+
return /* @__PURE__ */ jsx15(
|
|
1042
1056
|
AriaSwitch,
|
|
1043
1057
|
{
|
|
1044
1058
|
...props,
|
|
@@ -1047,8 +1061,8 @@ function Switch({
|
|
|
1047
1061
|
"disabled:opacity-50 disabled:cursor-default",
|
|
1048
1062
|
className
|
|
1049
1063
|
].filter(Boolean).join(" "),
|
|
1050
|
-
children: ({ isSelected }) => /* @__PURE__ */
|
|
1051
|
-
/* @__PURE__ */
|
|
1064
|
+
children: ({ isSelected }) => /* @__PURE__ */ jsxs12(Fragment4, { children: [
|
|
1065
|
+
/* @__PURE__ */ jsx15(
|
|
1052
1066
|
"div",
|
|
1053
1067
|
{
|
|
1054
1068
|
className: [
|
|
@@ -1057,7 +1071,7 @@ function Switch({
|
|
|
1057
1071
|
isSelected && isPreset ? trackColorMap[color] : !isSelected ? "bg-(--color-border-strong)" : ""
|
|
1058
1072
|
].join(" "),
|
|
1059
1073
|
style: isSelected && !isPreset ? { backgroundColor: color } : void 0,
|
|
1060
|
-
children: /* @__PURE__ */
|
|
1074
|
+
children: /* @__PURE__ */ jsx15(
|
|
1061
1075
|
"div",
|
|
1062
1076
|
{
|
|
1063
1077
|
className: [
|
|
@@ -1068,7 +1082,7 @@ function Switch({
|
|
|
1068
1082
|
)
|
|
1069
1083
|
}
|
|
1070
1084
|
),
|
|
1071
|
-
children && /* @__PURE__ */
|
|
1085
|
+
children && /* @__PURE__ */ jsx15("span", { children })
|
|
1072
1086
|
] })
|
|
1073
1087
|
}
|
|
1074
1088
|
);
|
|
@@ -1079,9 +1093,9 @@ import {
|
|
|
1079
1093
|
RadioGroup as AriaRadioGroup,
|
|
1080
1094
|
Radio as AriaRadio
|
|
1081
1095
|
} from "react-aria-components";
|
|
1082
|
-
import { Fragment as Fragment5, jsx as
|
|
1096
|
+
import { Fragment as Fragment5, jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
1083
1097
|
function RadioGroup({ children, className, ...props }) {
|
|
1084
|
-
return /* @__PURE__ */
|
|
1098
|
+
return /* @__PURE__ */ jsx16(
|
|
1085
1099
|
AriaRadioGroup,
|
|
1086
1100
|
{
|
|
1087
1101
|
...props,
|
|
@@ -1095,7 +1109,7 @@ function RadioGroup({ children, className, ...props }) {
|
|
|
1095
1109
|
);
|
|
1096
1110
|
}
|
|
1097
1111
|
function Radio({ children, className, ...props }) {
|
|
1098
|
-
return /* @__PURE__ */
|
|
1112
|
+
return /* @__PURE__ */ jsx16(
|
|
1099
1113
|
AriaRadio,
|
|
1100
1114
|
{
|
|
1101
1115
|
...props,
|
|
@@ -1104,8 +1118,8 @@ function Radio({ children, className, ...props }) {
|
|
|
1104
1118
|
"disabled:opacity-50 disabled:cursor-default",
|
|
1105
1119
|
className
|
|
1106
1120
|
].filter(Boolean).join(" "),
|
|
1107
|
-
children: ({ isSelected }) => /* @__PURE__ */
|
|
1108
|
-
/* @__PURE__ */
|
|
1121
|
+
children: ({ isSelected }) => /* @__PURE__ */ jsxs13(Fragment5, { children: [
|
|
1122
|
+
/* @__PURE__ */ jsx16(
|
|
1109
1123
|
"div",
|
|
1110
1124
|
{
|
|
1111
1125
|
className: [
|
|
@@ -1114,16 +1128,16 @@ function Radio({ children, className, ...props }) {
|
|
|
1114
1128
|
"group-focus-visible:ring-2 group-focus-visible:ring-(--color-border-focus) group-focus-visible:ring-offset-2",
|
|
1115
1129
|
isSelected ? "border-(--color-action-primary)" : "border-(--color-border-default) group-hover:border-(--color-border-strong)"
|
|
1116
1130
|
].join(" "),
|
|
1117
|
-
children: isSelected && /* @__PURE__ */
|
|
1131
|
+
children: isSelected && /* @__PURE__ */ jsx16("div", { className: "w-2.5 h-2.5 rounded-full bg-(--color-action-primary)" })
|
|
1118
1132
|
}
|
|
1119
1133
|
),
|
|
1120
|
-
children && /* @__PURE__ */
|
|
1134
|
+
children && /* @__PURE__ */ jsx16("span", { children })
|
|
1121
1135
|
] })
|
|
1122
1136
|
}
|
|
1123
1137
|
);
|
|
1124
1138
|
}
|
|
1125
1139
|
function RadioButton({ children, className, ...props }) {
|
|
1126
|
-
return /* @__PURE__ */
|
|
1140
|
+
return /* @__PURE__ */ jsx16(
|
|
1127
1141
|
AriaRadio,
|
|
1128
1142
|
{
|
|
1129
1143
|
...props,
|
|
@@ -1132,7 +1146,7 @@ function RadioButton({ children, className, ...props }) {
|
|
|
1132
1146
|
"disabled:opacity-50 disabled:cursor-default",
|
|
1133
1147
|
className
|
|
1134
1148
|
].filter(Boolean).join(" "),
|
|
1135
|
-
children: ({ isSelected }) => /* @__PURE__ */
|
|
1149
|
+
children: ({ isSelected }) => /* @__PURE__ */ jsx16(
|
|
1136
1150
|
"div",
|
|
1137
1151
|
{
|
|
1138
1152
|
className: [
|
|
@@ -1148,71 +1162,10 @@ function RadioButton({ children, className, ...props }) {
|
|
|
1148
1162
|
);
|
|
1149
1163
|
}
|
|
1150
1164
|
|
|
1151
|
-
// src/components/Form/Label/Label.tsx
|
|
1152
|
-
import {
|
|
1153
|
-
Label as AriaLabel
|
|
1154
|
-
} from "react-aria-components";
|
|
1155
|
-
import { jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
1156
|
-
function Label3({ isRequired, children, className, ...props }) {
|
|
1157
|
-
return /* @__PURE__ */ jsxs13(
|
|
1158
|
-
AriaLabel,
|
|
1159
|
-
{
|
|
1160
|
-
...props,
|
|
1161
|
-
className: [
|
|
1162
|
-
"text-sm",
|
|
1163
|
-
"font-medium",
|
|
1164
|
-
"text-(--color-text-primary)",
|
|
1165
|
-
className
|
|
1166
|
-
].filter(Boolean).join(" "),
|
|
1167
|
-
children: [
|
|
1168
|
-
children,
|
|
1169
|
-
isRequired && /* @__PURE__ */ jsx16(
|
|
1170
|
-
"span",
|
|
1171
|
-
{
|
|
1172
|
-
"aria-hidden": "true",
|
|
1173
|
-
className: "ml-0.5 text-(--color-text-danger)",
|
|
1174
|
-
children: "*"
|
|
1175
|
-
}
|
|
1176
|
-
)
|
|
1177
|
-
]
|
|
1178
|
-
}
|
|
1179
|
-
);
|
|
1180
|
-
}
|
|
1181
|
-
|
|
1182
|
-
// src/components/Form/Field/Field.tsx
|
|
1183
|
-
import { jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
1184
|
-
function getErrorMessage(error) {
|
|
1185
|
-
if (!error) return void 0;
|
|
1186
|
-
if (typeof error === "string") return error;
|
|
1187
|
-
return error.message;
|
|
1188
|
-
}
|
|
1189
|
-
function Field({
|
|
1190
|
-
label,
|
|
1191
|
-
isRequired,
|
|
1192
|
-
description,
|
|
1193
|
-
error,
|
|
1194
|
-
children,
|
|
1195
|
-
className
|
|
1196
|
-
}) {
|
|
1197
|
-
const errorMessage = getErrorMessage(error);
|
|
1198
|
-
return /* @__PURE__ */ jsxs14(
|
|
1199
|
-
"div",
|
|
1200
|
-
{
|
|
1201
|
-
className: ["flex flex-col gap-1", className].filter(Boolean).join(" "),
|
|
1202
|
-
children: [
|
|
1203
|
-
label && /* @__PURE__ */ jsx17(Label3, { isRequired, children: label }),
|
|
1204
|
-
children,
|
|
1205
|
-
description && !errorMessage && /* @__PURE__ */ jsx17("p", { className: "text-sm text-(--color-text-secondary)", children: description }),
|
|
1206
|
-
errorMessage && /* @__PURE__ */ jsx17("p", { className: "text-sm text-(--color-text-danger)", children: errorMessage })
|
|
1207
|
-
]
|
|
1208
|
-
}
|
|
1209
|
-
);
|
|
1210
|
-
}
|
|
1211
|
-
|
|
1212
1165
|
// src/components/Form/Fieldset/Fieldset.tsx
|
|
1213
|
-
import { jsx as
|
|
1166
|
+
import { jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
1214
1167
|
function Fieldset({ legend, children, className }) {
|
|
1215
|
-
return /* @__PURE__ */
|
|
1168
|
+
return /* @__PURE__ */ jsxs14(
|
|
1216
1169
|
"fieldset",
|
|
1217
1170
|
{
|
|
1218
1171
|
className: [
|
|
@@ -1221,7 +1174,7 @@ function Fieldset({ legend, children, className }) {
|
|
|
1221
1174
|
className
|
|
1222
1175
|
].filter(Boolean).join(" "),
|
|
1223
1176
|
children: [
|
|
1224
|
-
legend && /* @__PURE__ */
|
|
1177
|
+
legend && /* @__PURE__ */ jsx17(
|
|
1225
1178
|
"legend",
|
|
1226
1179
|
{
|
|
1227
1180
|
className: [
|
|
@@ -1241,18 +1194,18 @@ function Fieldset({ legend, children, className }) {
|
|
|
1241
1194
|
|
|
1242
1195
|
// src/components/Form/InputGroup/InputGroup.tsx
|
|
1243
1196
|
import React from "react";
|
|
1244
|
-
import { jsx as
|
|
1197
|
+
import { jsx as jsx18 } from "react/jsx-runtime";
|
|
1245
1198
|
function InputGroup({ children, className }) {
|
|
1246
1199
|
const childArray = React.Children.toArray(children).filter(
|
|
1247
1200
|
React.isValidElement
|
|
1248
1201
|
);
|
|
1249
|
-
return /* @__PURE__ */
|
|
1202
|
+
return /* @__PURE__ */ jsx18(
|
|
1250
1203
|
"div",
|
|
1251
1204
|
{
|
|
1252
1205
|
className: ["flex items-stretch", className].filter(Boolean).join(" "),
|
|
1253
1206
|
children: childArray.map((child, index) => {
|
|
1254
1207
|
const position = childArray.length === 1 ? "standalone" : index === 0 ? "start" : index === childArray.length - 1 ? "end" : "middle";
|
|
1255
|
-
return /* @__PURE__ */
|
|
1208
|
+
return /* @__PURE__ */ jsx18(
|
|
1256
1209
|
InputGroupContext.Provider,
|
|
1257
1210
|
{
|
|
1258
1211
|
value: { inGroup: true, position },
|
|
@@ -1266,7 +1219,7 @@ function InputGroup({ children, className }) {
|
|
|
1266
1219
|
}
|
|
1267
1220
|
|
|
1268
1221
|
// src/components/Form/InputAddon/InputAddon.tsx
|
|
1269
|
-
import { jsx as
|
|
1222
|
+
import { jsx as jsx19 } from "react/jsx-runtime";
|
|
1270
1223
|
function groupRadiusClass3(position) {
|
|
1271
1224
|
switch (position) {
|
|
1272
1225
|
case "start":
|
|
@@ -1283,7 +1236,7 @@ function InputAddon({ children, className }) {
|
|
|
1283
1236
|
const { inGroup, position } = useInputGroup();
|
|
1284
1237
|
const radiusClass = inGroup ? groupRadiusClass3(position) : "rounded-md";
|
|
1285
1238
|
const marginClass = inGroup && position !== "start" && position !== "standalone" ? "-ml-px" : "";
|
|
1286
|
-
return /* @__PURE__ */
|
|
1239
|
+
return /* @__PURE__ */ jsx19(
|
|
1287
1240
|
"div",
|
|
1288
1241
|
{
|
|
1289
1242
|
className: [
|
|
@@ -1303,7 +1256,7 @@ function InputAddon({ children, className }) {
|
|
|
1303
1256
|
|
|
1304
1257
|
// src/components/Heading/Heading.tsx
|
|
1305
1258
|
import { twMerge as twMerge4 } from "tailwind-merge";
|
|
1306
|
-
import { jsx as
|
|
1259
|
+
import { jsx as jsx20 } from "react/jsx-runtime";
|
|
1307
1260
|
var defaultSizeMap = {
|
|
1308
1261
|
h1: "2xl",
|
|
1309
1262
|
h2: "xl",
|
|
@@ -1333,7 +1286,7 @@ function Heading2({
|
|
|
1333
1286
|
children
|
|
1334
1287
|
}) {
|
|
1335
1288
|
const resolvedSize = size ?? defaultSizeMap[Tag];
|
|
1336
|
-
return /* @__PURE__ */
|
|
1289
|
+
return /* @__PURE__ */ jsx20(
|
|
1337
1290
|
Tag,
|
|
1338
1291
|
{
|
|
1339
1292
|
className: twMerge4(
|
|
@@ -1347,7 +1300,7 @@ function Heading2({
|
|
|
1347
1300
|
);
|
|
1348
1301
|
}
|
|
1349
1302
|
function H1(props) {
|
|
1350
|
-
return /* @__PURE__ */
|
|
1303
|
+
return /* @__PURE__ */ jsx20(
|
|
1351
1304
|
Heading2,
|
|
1352
1305
|
{
|
|
1353
1306
|
...props,
|
|
@@ -1358,17 +1311,17 @@ function H1(props) {
|
|
|
1358
1311
|
);
|
|
1359
1312
|
}
|
|
1360
1313
|
function H2(props) {
|
|
1361
|
-
return /* @__PURE__ */
|
|
1314
|
+
return /* @__PURE__ */ jsx20(Heading2, { ...props, as: "h2", size: props.size ?? "xl" });
|
|
1362
1315
|
}
|
|
1363
1316
|
function H3(props) {
|
|
1364
|
-
return /* @__PURE__ */
|
|
1317
|
+
return /* @__PURE__ */ jsx20(Heading2, { ...props, as: "h3", size: props.size ?? "lg" });
|
|
1365
1318
|
}
|
|
1366
1319
|
|
|
1367
1320
|
// src/components/Link/Link.tsx
|
|
1368
1321
|
import {
|
|
1369
1322
|
Link as AriaLink
|
|
1370
1323
|
} from "react-aria-components";
|
|
1371
|
-
import { jsx as
|
|
1324
|
+
import { jsx as jsx21 } from "react/jsx-runtime";
|
|
1372
1325
|
var variantStyles2 = {
|
|
1373
1326
|
default: [
|
|
1374
1327
|
"text-teal-700 underline",
|
|
@@ -1384,7 +1337,7 @@ function Link({
|
|
|
1384
1337
|
className,
|
|
1385
1338
|
...props
|
|
1386
1339
|
}) {
|
|
1387
|
-
return /* @__PURE__ */
|
|
1340
|
+
return /* @__PURE__ */ jsx21(
|
|
1388
1341
|
AriaLink,
|
|
1389
1342
|
{
|
|
1390
1343
|
...props,
|
|
@@ -1405,20 +1358,20 @@ import {
|
|
|
1405
1358
|
Link as Link2
|
|
1406
1359
|
} from "react-aria-components";
|
|
1407
1360
|
import { ChevronRight } from "lucide-react";
|
|
1408
|
-
import { Fragment as Fragment6, jsx as
|
|
1361
|
+
import { Fragment as Fragment6, jsx as jsx22, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
1409
1362
|
function Breadcrumbs({ items, className }) {
|
|
1410
|
-
return /* @__PURE__ */
|
|
1363
|
+
return /* @__PURE__ */ jsx22(
|
|
1411
1364
|
"nav",
|
|
1412
1365
|
{
|
|
1413
1366
|
"aria-label": "Breadcrumb",
|
|
1414
1367
|
className,
|
|
1415
|
-
children: /* @__PURE__ */
|
|
1368
|
+
children: /* @__PURE__ */ jsx22(
|
|
1416
1369
|
AriaBreadcrumbs,
|
|
1417
1370
|
{
|
|
1418
1371
|
className: "flex items-center gap-1 text-sm min-w-0",
|
|
1419
1372
|
children: items.map((item, index) => {
|
|
1420
1373
|
const isLast = index === items.length - 1;
|
|
1421
|
-
return /* @__PURE__ */
|
|
1374
|
+
return /* @__PURE__ */ jsx22(
|
|
1422
1375
|
AriaBreadcrumb,
|
|
1423
1376
|
{
|
|
1424
1377
|
id: item.id,
|
|
@@ -1426,8 +1379,8 @@ function Breadcrumbs({ items, className }) {
|
|
|
1426
1379
|
"flex items-center gap-1",
|
|
1427
1380
|
isLast ? "min-w-0" : "shrink-0"
|
|
1428
1381
|
].join(" "),
|
|
1429
|
-
children: isLast ? /* @__PURE__ */
|
|
1430
|
-
/* @__PURE__ */
|
|
1382
|
+
children: isLast ? /* @__PURE__ */ jsx22("span", { className: "font-medium text-(--color-text-primary) truncate", children: item.label }) : /* @__PURE__ */ jsxs15(Fragment6, { children: [
|
|
1383
|
+
/* @__PURE__ */ jsx22(
|
|
1431
1384
|
Link2,
|
|
1432
1385
|
{
|
|
1433
1386
|
href: item.href,
|
|
@@ -1435,7 +1388,7 @@ function Breadcrumbs({ items, className }) {
|
|
|
1435
1388
|
children: item.label
|
|
1436
1389
|
}
|
|
1437
1390
|
),
|
|
1438
|
-
/* @__PURE__ */
|
|
1391
|
+
/* @__PURE__ */ jsx22(
|
|
1439
1392
|
ChevronRight,
|
|
1440
1393
|
{
|
|
1441
1394
|
className: "shrink-0 text-neutral-400",
|
|
@@ -1459,7 +1412,7 @@ import {
|
|
|
1459
1412
|
Link as AriaLink2
|
|
1460
1413
|
} from "react-aria-components";
|
|
1461
1414
|
import { twMerge as twMerge5 } from "tailwind-merge";
|
|
1462
|
-
import { jsx as
|
|
1415
|
+
import { jsx as jsx23, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
1463
1416
|
var iconSizeMap3 = {
|
|
1464
1417
|
sm: "sm",
|
|
1465
1418
|
md: "sm",
|
|
@@ -1474,7 +1427,7 @@ function ButtonLink({
|
|
|
1474
1427
|
children,
|
|
1475
1428
|
...props
|
|
1476
1429
|
}) {
|
|
1477
|
-
return /* @__PURE__ */
|
|
1430
|
+
return /* @__PURE__ */ jsxs16(
|
|
1478
1431
|
AriaLink2,
|
|
1479
1432
|
{
|
|
1480
1433
|
...props,
|
|
@@ -1490,9 +1443,9 @@ function ButtonLink({
|
|
|
1490
1443
|
className
|
|
1491
1444
|
),
|
|
1492
1445
|
children: [
|
|
1493
|
-
iconLeft && /* @__PURE__ */
|
|
1446
|
+
iconLeft && /* @__PURE__ */ jsx23(Icon, { icon: iconLeft, size: iconSizeMap3[size] }),
|
|
1494
1447
|
children,
|
|
1495
|
-
iconRight && /* @__PURE__ */
|
|
1448
|
+
iconRight && /* @__PURE__ */ jsx23(Icon, { icon: iconRight, size: iconSizeMap3[size] })
|
|
1496
1449
|
]
|
|
1497
1450
|
}
|
|
1498
1451
|
);
|
|
@@ -1512,7 +1465,7 @@ function IconButtonLink({
|
|
|
1512
1465
|
className,
|
|
1513
1466
|
...props
|
|
1514
1467
|
}) {
|
|
1515
|
-
const link = /* @__PURE__ */
|
|
1468
|
+
const link = /* @__PURE__ */ jsx23(
|
|
1516
1469
|
AriaLink2,
|
|
1517
1470
|
{
|
|
1518
1471
|
...props,
|
|
@@ -1526,11 +1479,11 @@ function IconButtonLink({
|
|
|
1526
1479
|
squareSizeStyles2[size],
|
|
1527
1480
|
className
|
|
1528
1481
|
),
|
|
1529
|
-
children: /* @__PURE__ */
|
|
1482
|
+
children: /* @__PURE__ */ jsx23(Icon, { icon, size: iconSizeMap3[size] })
|
|
1530
1483
|
}
|
|
1531
1484
|
);
|
|
1532
1485
|
if (showTooltip) {
|
|
1533
|
-
return /* @__PURE__ */
|
|
1486
|
+
return /* @__PURE__ */ jsx23(Tooltip, { content: ariaLabel, placement: tooltipPlacement, children: link });
|
|
1534
1487
|
}
|
|
1535
1488
|
return link;
|
|
1536
1489
|
}
|
|
@@ -1540,7 +1493,7 @@ import {
|
|
|
1540
1493
|
ToggleButton as AriaToggleButton
|
|
1541
1494
|
} from "react-aria-components";
|
|
1542
1495
|
import { twMerge as twMerge6 } from "tailwind-merge";
|
|
1543
|
-
import { jsx as
|
|
1496
|
+
import { jsx as jsx24 } from "react/jsx-runtime";
|
|
1544
1497
|
var sizeStyles4 = {
|
|
1545
1498
|
sm: "px-3 py-1.5 text-sm",
|
|
1546
1499
|
md: "px-4 py-2 text-base",
|
|
@@ -1589,7 +1542,7 @@ function ToggleButton({
|
|
|
1589
1542
|
...props
|
|
1590
1543
|
}) {
|
|
1591
1544
|
const styles = variantStyles3[variant];
|
|
1592
|
-
return /* @__PURE__ */
|
|
1545
|
+
return /* @__PURE__ */ jsx24(
|
|
1593
1546
|
AriaToggleButton,
|
|
1594
1547
|
{
|
|
1595
1548
|
...props,
|
|
@@ -1616,7 +1569,7 @@ import {
|
|
|
1616
1569
|
RadioGroup as AriaRadioGroup2,
|
|
1617
1570
|
Radio as AriaRadio2
|
|
1618
1571
|
} from "react-aria-components";
|
|
1619
|
-
import { jsx as
|
|
1572
|
+
import { jsx as jsx25 } from "react/jsx-runtime";
|
|
1620
1573
|
var ToggleButtonGroupContext = createContext3({
|
|
1621
1574
|
size: "md"
|
|
1622
1575
|
});
|
|
@@ -1636,7 +1589,7 @@ function ToggleButtonGroup({
|
|
|
1636
1589
|
children,
|
|
1637
1590
|
...props
|
|
1638
1591
|
}) {
|
|
1639
|
-
return /* @__PURE__ */
|
|
1592
|
+
return /* @__PURE__ */ jsx25(ToggleButtonGroupContext.Provider, { value: { size }, children: /* @__PURE__ */ jsx25(
|
|
1640
1593
|
AriaRadioGroup2,
|
|
1641
1594
|
{
|
|
1642
1595
|
...props,
|
|
@@ -1656,7 +1609,7 @@ function ToggleButtonGroupItem({
|
|
|
1656
1609
|
...props
|
|
1657
1610
|
}) {
|
|
1658
1611
|
const { size } = useContext3(ToggleButtonGroupContext);
|
|
1659
|
-
return /* @__PURE__ */
|
|
1612
|
+
return /* @__PURE__ */ jsx25(
|
|
1660
1613
|
AriaRadio2,
|
|
1661
1614
|
{
|
|
1662
1615
|
...props,
|
|
@@ -1688,7 +1641,7 @@ import {
|
|
|
1688
1641
|
MenuItem as AriaMenuItem,
|
|
1689
1642
|
Popover as Popover2
|
|
1690
1643
|
} from "react-aria-components";
|
|
1691
|
-
import { jsx as
|
|
1644
|
+
import { jsx as jsx26, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
1692
1645
|
var popoverStyles = [
|
|
1693
1646
|
"bg-(--color-surface-default) rounded-md",
|
|
1694
1647
|
"shadow-lg border border-(--color-border-default)",
|
|
@@ -1708,13 +1661,13 @@ function Menu({
|
|
|
1708
1661
|
className
|
|
1709
1662
|
}) {
|
|
1710
1663
|
const selectionProps = selectionMode && selectionMode !== "none" ? { selectionMode, selectedKeys, defaultSelectedKeys, onSelectionChange } : {};
|
|
1711
|
-
return /* @__PURE__ */
|
|
1664
|
+
return /* @__PURE__ */ jsxs17(MenuTrigger, { children: [
|
|
1712
1665
|
children,
|
|
1713
|
-
/* @__PURE__ */
|
|
1666
|
+
/* @__PURE__ */ jsx26(
|
|
1714
1667
|
Popover2,
|
|
1715
1668
|
{
|
|
1716
1669
|
className: [popoverStyles, className].filter(Boolean).join(" "),
|
|
1717
|
-
children: items ? /* @__PURE__ */
|
|
1670
|
+
children: items ? /* @__PURE__ */ jsx26(
|
|
1718
1671
|
AriaMenu,
|
|
1719
1672
|
{
|
|
1720
1673
|
items,
|
|
@@ -1725,7 +1678,7 @@ function Menu({
|
|
|
1725
1678
|
},
|
|
1726
1679
|
...selectionProps,
|
|
1727
1680
|
className: "outline-none",
|
|
1728
|
-
children: (item) => /* @__PURE__ */
|
|
1681
|
+
children: (item) => /* @__PURE__ */ jsxs17(
|
|
1729
1682
|
AriaMenuItem,
|
|
1730
1683
|
{
|
|
1731
1684
|
id: item.id,
|
|
@@ -1741,14 +1694,14 @@ function Menu({
|
|
|
1741
1694
|
item.isDanger ? "text-(--color-text-danger)" : "text-(--color-text-primary)"
|
|
1742
1695
|
].filter(Boolean).join(" "),
|
|
1743
1696
|
children: [
|
|
1744
|
-
item.icon && /* @__PURE__ */
|
|
1745
|
-
/* @__PURE__ */
|
|
1746
|
-
item.endContent && /* @__PURE__ */
|
|
1697
|
+
item.icon && /* @__PURE__ */ jsx26(Icon, { icon: item.icon, size: "sm" }),
|
|
1698
|
+
/* @__PURE__ */ jsx26("span", { className: "flex-1", children: item.label }),
|
|
1699
|
+
item.endContent && /* @__PURE__ */ jsx26("span", { className: "ml-auto flex items-center", children: item.endContent })
|
|
1747
1700
|
]
|
|
1748
1701
|
}
|
|
1749
1702
|
)
|
|
1750
1703
|
}
|
|
1751
|
-
) : /* @__PURE__ */
|
|
1704
|
+
) : /* @__PURE__ */ jsx26(
|
|
1752
1705
|
AriaMenu,
|
|
1753
1706
|
{
|
|
1754
1707
|
onAction: (key) => onAction?.(key),
|
|
@@ -1764,7 +1717,7 @@ function Menu({
|
|
|
1764
1717
|
|
|
1765
1718
|
// src/components/Menu/MenuItem.tsx
|
|
1766
1719
|
import { MenuItem as AriaMenuItem2 } from "react-aria-components";
|
|
1767
|
-
import { jsx as
|
|
1720
|
+
import { jsx as jsx27, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
1768
1721
|
function MenuItem({
|
|
1769
1722
|
id,
|
|
1770
1723
|
children,
|
|
@@ -1778,7 +1731,7 @@ function MenuItem({
|
|
|
1778
1731
|
textValue,
|
|
1779
1732
|
className
|
|
1780
1733
|
}) {
|
|
1781
|
-
return /* @__PURE__ */
|
|
1734
|
+
return /* @__PURE__ */ jsxs18(
|
|
1782
1735
|
AriaMenuItem2,
|
|
1783
1736
|
{
|
|
1784
1737
|
id,
|
|
@@ -1797,9 +1750,9 @@ function MenuItem({
|
|
|
1797
1750
|
className
|
|
1798
1751
|
].filter(Boolean).join(" "),
|
|
1799
1752
|
children: [
|
|
1800
|
-
icon && /* @__PURE__ */
|
|
1801
|
-
/* @__PURE__ */
|
|
1802
|
-
endContent && /* @__PURE__ */
|
|
1753
|
+
icon && /* @__PURE__ */ jsx27(Icon, { icon, size: "sm" }),
|
|
1754
|
+
/* @__PURE__ */ jsx27("span", { className: "flex-1", children }),
|
|
1755
|
+
endContent && /* @__PURE__ */ jsx27("span", { className: "ml-auto flex items-center", children: endContent })
|
|
1803
1756
|
]
|
|
1804
1757
|
}
|
|
1805
1758
|
);
|
|
@@ -1808,7 +1761,7 @@ function MenuItem({
|
|
|
1808
1761
|
// src/components/Menu/MenuCheckboxItem.tsx
|
|
1809
1762
|
import { MenuItem as AriaMenuItem3 } from "react-aria-components";
|
|
1810
1763
|
import { Check as Check3 } from "lucide-react";
|
|
1811
|
-
import { Fragment as Fragment7, jsx as
|
|
1764
|
+
import { Fragment as Fragment7, jsx as jsx28, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
1812
1765
|
function MenuCheckboxItem({
|
|
1813
1766
|
id,
|
|
1814
1767
|
children,
|
|
@@ -1816,7 +1769,7 @@ function MenuCheckboxItem({
|
|
|
1816
1769
|
isDisabled,
|
|
1817
1770
|
className
|
|
1818
1771
|
}) {
|
|
1819
|
-
return /* @__PURE__ */
|
|
1772
|
+
return /* @__PURE__ */ jsx28(
|
|
1820
1773
|
AriaMenuItem3,
|
|
1821
1774
|
{
|
|
1822
1775
|
id,
|
|
@@ -1832,9 +1785,9 @@ function MenuCheckboxItem({
|
|
|
1832
1785
|
isSelected ? "font-medium" : "",
|
|
1833
1786
|
className
|
|
1834
1787
|
].filter(Boolean).join(" "),
|
|
1835
|
-
children: ({ isSelected }) => /* @__PURE__ */
|
|
1836
|
-
/* @__PURE__ */
|
|
1837
|
-
/* @__PURE__ */
|
|
1788
|
+
children: ({ isSelected }) => /* @__PURE__ */ jsxs19(Fragment7, { children: [
|
|
1789
|
+
/* @__PURE__ */ jsx28("span", { className: "flex items-center justify-center w-4 h-4 shrink-0", children: isSelected && /* @__PURE__ */ jsx28(Check3, { size: 14, className: "text-(--color-action-primary)", "aria-hidden": "true" }) }),
|
|
1790
|
+
/* @__PURE__ */ jsx28("span", { className: "flex-1", children })
|
|
1838
1791
|
] })
|
|
1839
1792
|
}
|
|
1840
1793
|
);
|
|
@@ -1845,15 +1798,15 @@ import {
|
|
|
1845
1798
|
MenuSection as AriaMenuSection,
|
|
1846
1799
|
Header
|
|
1847
1800
|
} from "react-aria-components";
|
|
1848
|
-
import { jsx as
|
|
1801
|
+
import { jsx as jsx29, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
1849
1802
|
function MenuSection({
|
|
1850
1803
|
header,
|
|
1851
1804
|
children,
|
|
1852
1805
|
"aria-label": ariaLabel,
|
|
1853
1806
|
className
|
|
1854
1807
|
}) {
|
|
1855
|
-
return /* @__PURE__ */
|
|
1856
|
-
header && /* @__PURE__ */
|
|
1808
|
+
return /* @__PURE__ */ jsxs20(AriaMenuSection, { className, "aria-label": ariaLabel, children: [
|
|
1809
|
+
header && /* @__PURE__ */ jsx29(
|
|
1857
1810
|
Header,
|
|
1858
1811
|
{
|
|
1859
1812
|
className: [
|
|
@@ -1872,16 +1825,16 @@ function MenuSection({
|
|
|
1872
1825
|
|
|
1873
1826
|
// src/components/Menu/MenuHeader.tsx
|
|
1874
1827
|
import { Header as Header2 } from "react-aria-components";
|
|
1875
|
-
import { jsx as
|
|
1828
|
+
import { jsx as jsx30 } from "react/jsx-runtime";
|
|
1876
1829
|
function MenuHeader({ children, className }) {
|
|
1877
|
-
return /* @__PURE__ */
|
|
1830
|
+
return /* @__PURE__ */ jsx30(Header2, { className, children });
|
|
1878
1831
|
}
|
|
1879
1832
|
|
|
1880
1833
|
// src/components/Menu/MenuSeparator.tsx
|
|
1881
1834
|
import { Separator } from "react-aria-components";
|
|
1882
|
-
import { jsx as
|
|
1835
|
+
import { jsx as jsx31 } from "react/jsx-runtime";
|
|
1883
1836
|
function MenuSeparator({ className }) {
|
|
1884
|
-
return /* @__PURE__ */
|
|
1837
|
+
return /* @__PURE__ */ jsx31(
|
|
1885
1838
|
Separator,
|
|
1886
1839
|
{
|
|
1887
1840
|
className: [
|
|
@@ -1899,16 +1852,16 @@ import {
|
|
|
1899
1852
|
Button as AriaButton3
|
|
1900
1853
|
} from "react-aria-components";
|
|
1901
1854
|
import { twMerge as twMerge8 } from "tailwind-merge";
|
|
1902
|
-
import { jsx as
|
|
1855
|
+
import { jsx as jsx32 } from "react/jsx-runtime";
|
|
1903
1856
|
function Popover3({ children, isOpen, onOpenChange }) {
|
|
1904
|
-
return /* @__PURE__ */
|
|
1857
|
+
return /* @__PURE__ */ jsx32(DialogTrigger, { isOpen, onOpenChange, children });
|
|
1905
1858
|
}
|
|
1906
1859
|
function PopoverTrigger({ children, className }) {
|
|
1907
1860
|
const cx = `
|
|
1908
1861
|
inline-flex items-center bg-transparent border-none p-0 outline-none cursor-pointer
|
|
1909
1862
|
focus-visible:ring-2 focus-visible:ring-(--color-border-focus) focus-visible:rounded-sm
|
|
1910
1863
|
`;
|
|
1911
|
-
return /* @__PURE__ */
|
|
1864
|
+
return /* @__PURE__ */ jsx32(AriaButton3, { className: twMerge8(cx, className), children });
|
|
1912
1865
|
}
|
|
1913
1866
|
function PopoverContent({
|
|
1914
1867
|
placement = "bottom",
|
|
@@ -1929,7 +1882,7 @@ function PopoverContent({
|
|
|
1929
1882
|
entering:placement-left:slide-in-from-right-1
|
|
1930
1883
|
entering:placement-right:slide-in-from-left-1
|
|
1931
1884
|
`;
|
|
1932
|
-
return /* @__PURE__ */
|
|
1885
|
+
return /* @__PURE__ */ jsx32(
|
|
1933
1886
|
AriaPopover,
|
|
1934
1887
|
{
|
|
1935
1888
|
...rest,
|
|
@@ -1950,7 +1903,7 @@ import {
|
|
|
1950
1903
|
Tab as AriaTab,
|
|
1951
1904
|
TabPanel as AriaTabPanel
|
|
1952
1905
|
} from "react-aria-components";
|
|
1953
|
-
import { jsx as
|
|
1906
|
+
import { jsx as jsx33 } from "react/jsx-runtime";
|
|
1954
1907
|
var TabsContext = createContext4({
|
|
1955
1908
|
variant: "underline",
|
|
1956
1909
|
size: "md"
|
|
@@ -1968,7 +1921,7 @@ function Tabs({
|
|
|
1968
1921
|
children,
|
|
1969
1922
|
...props
|
|
1970
1923
|
}) {
|
|
1971
|
-
return /* @__PURE__ */
|
|
1924
|
+
return /* @__PURE__ */ jsx33(TabsContext.Provider, { value: { variant, size }, children: /* @__PURE__ */ jsx33(
|
|
1972
1925
|
AriaTabs,
|
|
1973
1926
|
{
|
|
1974
1927
|
...props,
|
|
@@ -1988,7 +1941,7 @@ function TabList({
|
|
|
1988
1941
|
const { variant } = useContext4(TabsContext);
|
|
1989
1942
|
const baseStyles = variant === "unstyled" ? "flex items-center" : variant === "underline" ? "flex items-center border-b border-(--color-border-default)" : "inline-flex items-center bg-(--color-surface-muted) rounded-lg p-1 gap-1";
|
|
1990
1943
|
const verticalStyles = variant === "unstyled" ? "flex-col" : variant === "underline" ? "flex-col border-b-0 border-r border-(--color-border-default)" : "flex-col";
|
|
1991
|
-
return /* @__PURE__ */
|
|
1944
|
+
return /* @__PURE__ */ jsx33(
|
|
1992
1945
|
AriaTabList,
|
|
1993
1946
|
{
|
|
1994
1947
|
...props,
|
|
@@ -2002,7 +1955,7 @@ function TabList({
|
|
|
2002
1955
|
}
|
|
2003
1956
|
function Tab({ className, ...props }) {
|
|
2004
1957
|
const { variant, size } = useContext4(TabsContext);
|
|
2005
|
-
return /* @__PURE__ */
|
|
1958
|
+
return /* @__PURE__ */ jsx33(
|
|
2006
1959
|
AriaTab,
|
|
2007
1960
|
{
|
|
2008
1961
|
...props,
|
|
@@ -2059,7 +2012,7 @@ function getTabVariantStyles(variant, state) {
|
|
|
2059
2012
|
}
|
|
2060
2013
|
function TabPanel({ className, ...props }) {
|
|
2061
2014
|
const { variant } = useContext4(TabsContext);
|
|
2062
|
-
return /* @__PURE__ */
|
|
2015
|
+
return /* @__PURE__ */ jsx33(
|
|
2063
2016
|
AriaTabPanel,
|
|
2064
2017
|
{
|
|
2065
2018
|
...props,
|
|
@@ -2079,240 +2032,6 @@ import {
|
|
|
2079
2032
|
TabPanel as TabPanel2
|
|
2080
2033
|
} from "react-aria-components";
|
|
2081
2034
|
|
|
2082
|
-
// src/components/Tree/Tree.tsx
|
|
2083
|
-
import { useCallback as useCallback2, useImperativeHandle, useRef as useRef2, useState as useState2 } from "react";
|
|
2084
|
-
import { Tree as ArboristTree } from "react-arborist";
|
|
2085
|
-
import { ChevronRight as ChevronRight2, Folder, File } from "lucide-react";
|
|
2086
|
-
import { Check as Check4 } from "lucide-react";
|
|
2087
|
-
import { jsx as jsx35, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
2088
|
-
var rowHeightMap = {
|
|
2089
|
-
compact: 32,
|
|
2090
|
-
comfortable: 40
|
|
2091
|
-
};
|
|
2092
|
-
function NodeRenderer({
|
|
2093
|
-
node,
|
|
2094
|
-
style,
|
|
2095
|
-
tree,
|
|
2096
|
-
dragHandle,
|
|
2097
|
-
checkedIds,
|
|
2098
|
-
onCheckToggle,
|
|
2099
|
-
selectionMode,
|
|
2100
|
-
size,
|
|
2101
|
-
onHover,
|
|
2102
|
-
onHoverEnd,
|
|
2103
|
-
onToggle
|
|
2104
|
-
}) {
|
|
2105
|
-
const data = node.data;
|
|
2106
|
-
const isCheckbox = selectionMode === "checkbox";
|
|
2107
|
-
const isChecked = isCheckbox && checkedIds.has(node.id);
|
|
2108
|
-
const isSelected = node.isSelected && !isCheckbox;
|
|
2109
|
-
const isCompact = size === "compact";
|
|
2110
|
-
const IconComponent = data.icon ? data.icon : node.isInternal ? Folder : File;
|
|
2111
|
-
return /* @__PURE__ */ jsxs22(
|
|
2112
|
-
"div",
|
|
2113
|
-
{
|
|
2114
|
-
ref: dragHandle,
|
|
2115
|
-
style,
|
|
2116
|
-
className: [
|
|
2117
|
-
"relative flex items-center cursor-default select-none",
|
|
2118
|
-
isCompact ? "gap-0.5 px-2" : "gap-1 px-3",
|
|
2119
|
-
"text-sm text-(--color-text-primary)",
|
|
2120
|
-
"outline-none",
|
|
2121
|
-
// Full-width background via pseudo-element
|
|
2122
|
-
"before:absolute before:inset-y-0 before:left-[-100vw] before:right-0 before:-z-10 before:transition-colors",
|
|
2123
|
-
isSelected ? "before:bg-(--color-surface-selected) hover:before:bg-(--color-surface-selected-hover) border-l-2 border-l-(--color-brand-accent)" : "hover:before:bg-(--color-surface-hover)",
|
|
2124
|
-
node.isFocused ? "outline-2 outline-(--color-border-focus) outline-offset-[-2px]" : ""
|
|
2125
|
-
].filter(Boolean).join(" "),
|
|
2126
|
-
role: "treeitem",
|
|
2127
|
-
"aria-selected": isCheckbox ? isChecked : node.isSelected,
|
|
2128
|
-
"aria-expanded": node.isInternal ? node.isOpen : void 0,
|
|
2129
|
-
"aria-level": node.level + 1,
|
|
2130
|
-
onPointerEnter: () => onHover?.(node.data),
|
|
2131
|
-
onPointerLeave: () => onHoverEnd?.(node.data),
|
|
2132
|
-
onClick: (e) => {
|
|
2133
|
-
if (isCheckbox) {
|
|
2134
|
-
onCheckToggle(node.id);
|
|
2135
|
-
} else {
|
|
2136
|
-
node.handleClick(e);
|
|
2137
|
-
}
|
|
2138
|
-
},
|
|
2139
|
-
onKeyDown: (e) => {
|
|
2140
|
-
if (isCheckbox && (e.key === " " || e.key === "Enter")) {
|
|
2141
|
-
e.preventDefault();
|
|
2142
|
-
onCheckToggle(node.id);
|
|
2143
|
-
}
|
|
2144
|
-
},
|
|
2145
|
-
children: [
|
|
2146
|
-
/* @__PURE__ */ jsx35(
|
|
2147
|
-
"button",
|
|
2148
|
-
{
|
|
2149
|
-
type: "button",
|
|
2150
|
-
className: [
|
|
2151
|
-
"flex items-center justify-center w-6 h-6 shrink-0",
|
|
2152
|
-
"rounded-sm",
|
|
2153
|
-
"text-(--color-text-secondary)",
|
|
2154
|
-
"hover:text-(--color-text-primary)",
|
|
2155
|
-
"transition-transform",
|
|
2156
|
-
node.isInternal ? "visible" : "invisible"
|
|
2157
|
-
].filter(Boolean).join(" "),
|
|
2158
|
-
onClick: (e) => {
|
|
2159
|
-
e.stopPropagation();
|
|
2160
|
-
node.toggle();
|
|
2161
|
-
onToggle?.(node.data);
|
|
2162
|
-
},
|
|
2163
|
-
tabIndex: -1,
|
|
2164
|
-
"aria-label": node.isOpen ? "Collapse" : "Expand",
|
|
2165
|
-
children: /* @__PURE__ */ jsx35(
|
|
2166
|
-
ChevronRight2,
|
|
2167
|
-
{
|
|
2168
|
-
size: 14,
|
|
2169
|
-
className: [
|
|
2170
|
-
"transition-transform",
|
|
2171
|
-
node.isOpen ? "rotate-90" : ""
|
|
2172
|
-
].filter(Boolean).join(" ")
|
|
2173
|
-
}
|
|
2174
|
-
)
|
|
2175
|
-
}
|
|
2176
|
-
),
|
|
2177
|
-
isCheckbox && /* @__PURE__ */ jsx35(
|
|
2178
|
-
"div",
|
|
2179
|
-
{
|
|
2180
|
-
className: [
|
|
2181
|
-
"flex items-center justify-center w-5 h-5 shrink-0",
|
|
2182
|
-
"rounded-sm border transition-colors",
|
|
2183
|
-
isChecked ? "bg-(--color-action-primary) border-(--color-action-primary)" : "bg-(--color-surface-default) border-(--color-border-default) hover:border-(--color-border-strong)"
|
|
2184
|
-
].join(" "),
|
|
2185
|
-
role: "checkbox",
|
|
2186
|
-
"aria-checked": isChecked,
|
|
2187
|
-
"aria-label": `Select ${data.name}`,
|
|
2188
|
-
children: isChecked && /* @__PURE__ */ jsx35(
|
|
2189
|
-
Check4,
|
|
2190
|
-
{
|
|
2191
|
-
className: "w-3 h-3 text-(--color-text-inverse)",
|
|
2192
|
-
strokeWidth: 3
|
|
2193
|
-
}
|
|
2194
|
-
)
|
|
2195
|
-
}
|
|
2196
|
-
),
|
|
2197
|
-
/* @__PURE__ */ jsx35(
|
|
2198
|
-
IconComponent,
|
|
2199
|
-
{
|
|
2200
|
-
size: 16,
|
|
2201
|
-
className: "shrink-0 text-(--color-text-secondary)",
|
|
2202
|
-
"aria-hidden": "true"
|
|
2203
|
-
}
|
|
2204
|
-
),
|
|
2205
|
-
/* @__PURE__ */ jsx35("span", { className: "truncate", children: data.name })
|
|
2206
|
-
]
|
|
2207
|
-
}
|
|
2208
|
-
);
|
|
2209
|
-
}
|
|
2210
|
-
function Tree({
|
|
2211
|
-
data,
|
|
2212
|
-
"aria-label": ariaLabel,
|
|
2213
|
-
size = "comfortable",
|
|
2214
|
-
selectionMode = "single",
|
|
2215
|
-
selectedIds,
|
|
2216
|
-
onSelectionChange,
|
|
2217
|
-
onActivate,
|
|
2218
|
-
onToggle,
|
|
2219
|
-
onHover,
|
|
2220
|
-
onHoverEnd,
|
|
2221
|
-
openByDefault = false,
|
|
2222
|
-
searchTerm,
|
|
2223
|
-
searchMatch,
|
|
2224
|
-
height = 400,
|
|
2225
|
-
indent = 24,
|
|
2226
|
-
disableDrag = true,
|
|
2227
|
-
disableDrop = true,
|
|
2228
|
-
treeRef,
|
|
2229
|
-
className
|
|
2230
|
-
}) {
|
|
2231
|
-
const internalRef = useRef2(null);
|
|
2232
|
-
useImperativeHandle(treeRef, () => internalRef.current, []);
|
|
2233
|
-
const [internalChecked, setInternalChecked] = useState2(
|
|
2234
|
-
() => /* @__PURE__ */ new Set()
|
|
2235
|
-
);
|
|
2236
|
-
const checkedIds = selectedIds ?? internalChecked;
|
|
2237
|
-
const handleCheckToggle = useCallback2(
|
|
2238
|
-
(id) => {
|
|
2239
|
-
const next = new Set(checkedIds);
|
|
2240
|
-
if (next.has(id)) {
|
|
2241
|
-
next.delete(id);
|
|
2242
|
-
} else {
|
|
2243
|
-
next.add(id);
|
|
2244
|
-
}
|
|
2245
|
-
if (onSelectionChange) {
|
|
2246
|
-
onSelectionChange(next);
|
|
2247
|
-
} else {
|
|
2248
|
-
setInternalChecked(next);
|
|
2249
|
-
}
|
|
2250
|
-
},
|
|
2251
|
-
[checkedIds, onSelectionChange]
|
|
2252
|
-
);
|
|
2253
|
-
const handleSelect = useCallback2(
|
|
2254
|
-
(nodes) => {
|
|
2255
|
-
if (selectionMode === "checkbox" || selectionMode === "none") return;
|
|
2256
|
-
if (onSelectionChange) {
|
|
2257
|
-
onSelectionChange(new Set(nodes.map((n) => n.id)));
|
|
2258
|
-
}
|
|
2259
|
-
},
|
|
2260
|
-
[selectionMode, onSelectionChange]
|
|
2261
|
-
);
|
|
2262
|
-
const handleActivate = useCallback2(
|
|
2263
|
-
(node) => {
|
|
2264
|
-
if (onActivate) {
|
|
2265
|
-
onActivate(node.data);
|
|
2266
|
-
}
|
|
2267
|
-
},
|
|
2268
|
-
[onActivate]
|
|
2269
|
-
);
|
|
2270
|
-
const arboristSearchMatch = searchMatch ? (node, term) => searchMatch(node.data, term) : void 0;
|
|
2271
|
-
const selectionProp = selectionMode === "single" && selectedIds && selectedIds.size > 0 ? [...selectedIds][0] : void 0;
|
|
2272
|
-
return /* @__PURE__ */ jsx35(
|
|
2273
|
-
"div",
|
|
2274
|
-
{
|
|
2275
|
-
role: "tree",
|
|
2276
|
-
"aria-label": ariaLabel,
|
|
2277
|
-
className: ["outline-none overflow-hidden", className].filter(Boolean).join(" "),
|
|
2278
|
-
children: /* @__PURE__ */ jsx35(
|
|
2279
|
-
ArboristTree,
|
|
2280
|
-
{
|
|
2281
|
-
ref: internalRef,
|
|
2282
|
-
data,
|
|
2283
|
-
width: "100%",
|
|
2284
|
-
height,
|
|
2285
|
-
rowHeight: rowHeightMap[size],
|
|
2286
|
-
indent,
|
|
2287
|
-
openByDefault,
|
|
2288
|
-
searchTerm,
|
|
2289
|
-
searchMatch: arboristSearchMatch,
|
|
2290
|
-
disableDrag,
|
|
2291
|
-
disableDrop,
|
|
2292
|
-
disableMultiSelection: selectionMode === "single" || selectionMode === "none",
|
|
2293
|
-
selection: selectionProp,
|
|
2294
|
-
onSelect: handleSelect,
|
|
2295
|
-
onActivate: handleActivate,
|
|
2296
|
-
disableEdit: true,
|
|
2297
|
-
children: (props) => /* @__PURE__ */ jsx35(
|
|
2298
|
-
NodeRenderer,
|
|
2299
|
-
{
|
|
2300
|
-
...props,
|
|
2301
|
-
checkedIds,
|
|
2302
|
-
onCheckToggle: handleCheckToggle,
|
|
2303
|
-
selectionMode,
|
|
2304
|
-
size,
|
|
2305
|
-
onHover,
|
|
2306
|
-
onHoverEnd,
|
|
2307
|
-
onToggle
|
|
2308
|
-
}
|
|
2309
|
-
)
|
|
2310
|
-
}
|
|
2311
|
-
)
|
|
2312
|
-
}
|
|
2313
|
-
);
|
|
2314
|
-
}
|
|
2315
|
-
|
|
2316
2035
|
// src/components/SegmentedControl/SegmentedControl.tsx
|
|
2317
2036
|
import { createContext as createContext5, useContext as useContext5 } from "react";
|
|
2318
2037
|
import { twMerge as twMerge10 } from "tailwind-merge";
|
|
@@ -2320,7 +2039,7 @@ import {
|
|
|
2320
2039
|
ToggleButtonGroup as AriaToggleButtonGroup,
|
|
2321
2040
|
ToggleButton as AriaToggleButton2
|
|
2322
2041
|
} from "react-aria-components";
|
|
2323
|
-
import { jsx as
|
|
2042
|
+
import { jsx as jsx34 } from "react/jsx-runtime";
|
|
2324
2043
|
var SegmentedControlContext = createContext5({
|
|
2325
2044
|
size: "md"
|
|
2326
2045
|
});
|
|
@@ -2340,7 +2059,7 @@ function SegmentedControl({
|
|
|
2340
2059
|
...props
|
|
2341
2060
|
}) {
|
|
2342
2061
|
const isNoneMode = selectionMode === "none";
|
|
2343
|
-
return /* @__PURE__ */
|
|
2062
|
+
return /* @__PURE__ */ jsx34(SegmentedControlContext.Provider, { value: { size }, children: /* @__PURE__ */ jsx34(
|
|
2344
2063
|
AriaToggleButtonGroup,
|
|
2345
2064
|
{
|
|
2346
2065
|
...props,
|
|
@@ -2361,7 +2080,7 @@ function SegmentedControlItem({
|
|
|
2361
2080
|
...props
|
|
2362
2081
|
}) {
|
|
2363
2082
|
const { size } = useContext5(SegmentedControlContext);
|
|
2364
|
-
return /* @__PURE__ */
|
|
2083
|
+
return /* @__PURE__ */ jsx34(
|
|
2365
2084
|
AriaToggleButton2,
|
|
2366
2085
|
{
|
|
2367
2086
|
...props,
|
|
@@ -2385,257 +2104,9 @@ function SegmentedControlItem({
|
|
|
2385
2104
|
);
|
|
2386
2105
|
}
|
|
2387
2106
|
|
|
2388
|
-
// src/components/FileCard/FileCard.tsx
|
|
2389
|
-
import { useCallback as useCallback3 } from "react";
|
|
2390
|
-
import { File as File2, Info as Info2 } from "lucide-react";
|
|
2391
|
-
import { Fragment as Fragment8, jsx as jsx37, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
2392
|
-
function FileCard({
|
|
2393
|
-
name,
|
|
2394
|
-
icon: IconComponent = File2,
|
|
2395
|
-
size,
|
|
2396
|
-
compact = false,
|
|
2397
|
-
children,
|
|
2398
|
-
onInfo,
|
|
2399
|
-
onPress,
|
|
2400
|
-
className
|
|
2401
|
-
}) {
|
|
2402
|
-
const isInteractive = !!onPress;
|
|
2403
|
-
const radius = compact ? "rounded-md" : "rounded-lg";
|
|
2404
|
-
const iconSize = compact ? 24 : 32;
|
|
2405
|
-
const thumbnailClass = compact ? "aspect-square rounded-t-(--border-radius-md)" : "aspect-[4/3] rounded-t-(--border-radius-lg)";
|
|
2406
|
-
const handleInfoClick = useCallback3(
|
|
2407
|
-
(e) => {
|
|
2408
|
-
if (isInteractive) {
|
|
2409
|
-
e.stopPropagation();
|
|
2410
|
-
e.preventDefault();
|
|
2411
|
-
}
|
|
2412
|
-
onInfo?.();
|
|
2413
|
-
},
|
|
2414
|
-
[onInfo, isInteractive]
|
|
2415
|
-
);
|
|
2416
|
-
const handleKeyDown = useCallback3(
|
|
2417
|
-
(e) => {
|
|
2418
|
-
if (onPress && (e.key === "Enter" || e.key === " ")) {
|
|
2419
|
-
e.preventDefault();
|
|
2420
|
-
onPress();
|
|
2421
|
-
}
|
|
2422
|
-
},
|
|
2423
|
-
[onPress]
|
|
2424
|
-
);
|
|
2425
|
-
const cardContent = /* @__PURE__ */ jsxs23(Fragment8, { children: [
|
|
2426
|
-
/* @__PURE__ */ jsx37(
|
|
2427
|
-
"div",
|
|
2428
|
-
{
|
|
2429
|
-
className: `shrink-0 overflow-hidden bg-neutral-900 ${thumbnailClass}`,
|
|
2430
|
-
children: children ? /* @__PURE__ */ jsx37("div", { className: "h-full w-full overflow-hidden", children }) : /* @__PURE__ */ jsx37("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsx37(IconComponent, { size: iconSize, className: "text-(--color-text-secondary)" }) })
|
|
2431
|
-
}
|
|
2432
|
-
),
|
|
2433
|
-
/* @__PURE__ */ jsx37(
|
|
2434
|
-
"div",
|
|
2435
|
-
{
|
|
2436
|
-
className: [
|
|
2437
|
-
"flex flex-col border-t border-(--color-border-default)",
|
|
2438
|
-
"bg-(--color-surface-default)",
|
|
2439
|
-
compact ? "px-2 py-1.5 rounded-b-(--border-radius-md)" : "gap-0.5 px-3 py-2 rounded-b-(--border-radius-lg)"
|
|
2440
|
-
].join(" "),
|
|
2441
|
-
children: compact ? /* @__PURE__ */ jsx37("span", { className: "text-xs font-medium text-(--color-text-primary) truncate", children: name }) : /* @__PURE__ */ jsxs23(Fragment8, { children: [
|
|
2442
|
-
/* @__PURE__ */ jsxs23("span", { className: "flex items-center gap-1.5", children: [
|
|
2443
|
-
/* @__PURE__ */ jsx37(
|
|
2444
|
-
IconComponent,
|
|
2445
|
-
{
|
|
2446
|
-
size: 16,
|
|
2447
|
-
className: "shrink-0 text-(--color-text-secondary)"
|
|
2448
|
-
}
|
|
2449
|
-
),
|
|
2450
|
-
/* @__PURE__ */ jsx37("span", { className: "min-w-0 flex-1 text-sm font-medium text-(--color-text-primary) truncate", children: name }),
|
|
2451
|
-
onInfo && /* @__PURE__ */ jsx37(
|
|
2452
|
-
"span",
|
|
2453
|
-
{
|
|
2454
|
-
onClick: handleInfoClick,
|
|
2455
|
-
onKeyDown: (e) => {
|
|
2456
|
-
if (e.key === "Enter" || e.key === " ") {
|
|
2457
|
-
handleInfoClick(e);
|
|
2458
|
-
}
|
|
2459
|
-
},
|
|
2460
|
-
role: "presentation",
|
|
2461
|
-
children: /* @__PURE__ */ jsx37(
|
|
2462
|
-
IconButton,
|
|
2463
|
-
{
|
|
2464
|
-
icon: Info2,
|
|
2465
|
-
"aria-label": `Show info for ${name}`,
|
|
2466
|
-
variant: "ghost",
|
|
2467
|
-
size: "sm",
|
|
2468
|
-
className: "shrink-0 -mt-0.5 -mr-1",
|
|
2469
|
-
onPress: onInfo
|
|
2470
|
-
}
|
|
2471
|
-
)
|
|
2472
|
-
}
|
|
2473
|
-
)
|
|
2474
|
-
] }),
|
|
2475
|
-
size && /* @__PURE__ */ jsx37("span", { className: "text-xs text-(--color-text-secondary) tabular-nums pl-[22px]", children: size })
|
|
2476
|
-
] })
|
|
2477
|
-
}
|
|
2478
|
-
)
|
|
2479
|
-
] });
|
|
2480
|
-
const baseStyles = [
|
|
2481
|
-
"group flex flex-col overflow-hidden",
|
|
2482
|
-
radius,
|
|
2483
|
-
"border border-(--color-border-default)",
|
|
2484
|
-
"shadow-sm",
|
|
2485
|
-
"transition-all",
|
|
2486
|
-
isInteractive && "hover:border-(--color-border-focus) hover:shadow-md cursor-pointer",
|
|
2487
|
-
isInteractive && "focus-visible:ring-2 focus-visible:ring-(--color-border-focus) focus-visible:ring-offset-2 outline-none",
|
|
2488
|
-
className
|
|
2489
|
-
].filter(Boolean).join(" ");
|
|
2490
|
-
if (onPress) {
|
|
2491
|
-
return /* @__PURE__ */ jsx37(
|
|
2492
|
-
"div",
|
|
2493
|
-
{
|
|
2494
|
-
role: "button",
|
|
2495
|
-
tabIndex: 0,
|
|
2496
|
-
"aria-label": name,
|
|
2497
|
-
className: baseStyles,
|
|
2498
|
-
onClick: onPress,
|
|
2499
|
-
onKeyDown: handleKeyDown,
|
|
2500
|
-
children: cardContent
|
|
2501
|
-
}
|
|
2502
|
-
);
|
|
2503
|
-
}
|
|
2504
|
-
return /* @__PURE__ */ jsx37("div", { className: baseStyles, children: cardContent });
|
|
2505
|
-
}
|
|
2506
|
-
|
|
2507
|
-
// src/components/StorageConnectionCard/StorageConnectionCard.tsx
|
|
2508
|
-
import { useCallback as useCallback4 } from "react";
|
|
2509
|
-
import { AlertCircle, Database } from "lucide-react";
|
|
2510
|
-
import { twMerge as twMerge11 } from "tailwind-merge";
|
|
2511
|
-
import { Fragment as Fragment9, jsx as jsx38, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
2512
|
-
var statusDotStyles = {
|
|
2513
|
-
connected: "bg-(--color-status-success)",
|
|
2514
|
-
error: "border-2 border-(--color-status-danger) bg-transparent",
|
|
2515
|
-
loading: "bg-(--color-status-warning) animate-pulse"
|
|
2516
|
-
};
|
|
2517
|
-
function PreviewArea({
|
|
2518
|
-
status = "connected",
|
|
2519
|
-
errorMessage,
|
|
2520
|
-
children
|
|
2521
|
-
}) {
|
|
2522
|
-
if (status === "loading") {
|
|
2523
|
-
return /* @__PURE__ */ jsx38("div", { className: "flex h-full items-center justify-center", children: /* @__PURE__ */ jsx38(Spinner, { size: "lg", "aria-label": "Loading connection" }) });
|
|
2524
|
-
}
|
|
2525
|
-
if (status === "error") {
|
|
2526
|
-
return /* @__PURE__ */ jsxs24("div", { className: "flex h-full flex-col items-center justify-center gap-2 bg-(--color-surface-danger) px-4", children: [
|
|
2527
|
-
/* @__PURE__ */ jsx38(
|
|
2528
|
-
Icon,
|
|
2529
|
-
{
|
|
2530
|
-
icon: AlertCircle,
|
|
2531
|
-
size: "lg",
|
|
2532
|
-
className: "text-(--color-text-danger)"
|
|
2533
|
-
}
|
|
2534
|
-
),
|
|
2535
|
-
errorMessage && /* @__PURE__ */ jsx38("p", { className: "text-center text-xs text-(--color-text-danger)", children: errorMessage })
|
|
2536
|
-
] });
|
|
2537
|
-
}
|
|
2538
|
-
if (children) {
|
|
2539
|
-
return /* @__PURE__ */ jsx38("div", { className: "h-full w-full overflow-hidden", children });
|
|
2540
|
-
}
|
|
2541
|
-
return /* @__PURE__ */ jsx38("div", { className: "flex h-full items-center justify-center", children: /* @__PURE__ */ jsx38(
|
|
2542
|
-
Icon,
|
|
2543
|
-
{
|
|
2544
|
-
icon: Database,
|
|
2545
|
-
size: "xl",
|
|
2546
|
-
className: "text-(--color-text-secondary)"
|
|
2547
|
-
}
|
|
2548
|
-
) });
|
|
2549
|
-
}
|
|
2550
|
-
function StorageConnectionCard({
|
|
2551
|
-
name,
|
|
2552
|
-
status,
|
|
2553
|
-
errorMessage,
|
|
2554
|
-
meta,
|
|
2555
|
-
children,
|
|
2556
|
-
href,
|
|
2557
|
-
onPress,
|
|
2558
|
-
actions,
|
|
2559
|
-
className
|
|
2560
|
-
}) {
|
|
2561
|
-
const isInteractive = !!href || !!onPress;
|
|
2562
|
-
const handleKeyDown = useCallback4(
|
|
2563
|
-
(e) => {
|
|
2564
|
-
if (onPress && (e.key === "Enter" || e.key === " ")) {
|
|
2565
|
-
e.preventDefault();
|
|
2566
|
-
onPress();
|
|
2567
|
-
}
|
|
2568
|
-
},
|
|
2569
|
-
[onPress]
|
|
2570
|
-
);
|
|
2571
|
-
const cardContent = /* @__PURE__ */ jsxs24(Fragment9, { children: [
|
|
2572
|
-
/* @__PURE__ */ jsx38("div", { className: "aspect-[4/3] bg-neutral-900 overflow-hidden rounded-t-(--border-radius-lg)", children: /* @__PURE__ */ jsx38(PreviewArea, { status, errorMessage, children }) }),
|
|
2573
|
-
/* @__PURE__ */ jsxs24("div", { className: "flex flex-col gap-1.5 border-t border-(--color-border-default) bg-(--color-surface-default) px-3 py-2.5 rounded-b-(--border-radius-lg)", children: [
|
|
2574
|
-
/* @__PURE__ */ jsxs24("div", { className: "flex items-start gap-2", children: [
|
|
2575
|
-
status && /* @__PURE__ */ jsx38(
|
|
2576
|
-
"span",
|
|
2577
|
-
{
|
|
2578
|
-
className: twMerge11(
|
|
2579
|
-
"mt-1.5 h-2 w-2 shrink-0 rounded-full",
|
|
2580
|
-
statusDotStyles[status]
|
|
2581
|
-
),
|
|
2582
|
-
"aria-label": `Status: ${status}`
|
|
2583
|
-
}
|
|
2584
|
-
),
|
|
2585
|
-
/* @__PURE__ */ jsx38("span", { className: "min-w-0 flex-1 line-clamp-2 text-sm font-medium text-(--color-text-primary)", children: name }),
|
|
2586
|
-
actions && /* @__PURE__ */ jsx38(
|
|
2587
|
-
"span",
|
|
2588
|
-
{
|
|
2589
|
-
onClick: (e) => {
|
|
2590
|
-
if (isInteractive) {
|
|
2591
|
-
e.stopPropagation();
|
|
2592
|
-
e.preventDefault();
|
|
2593
|
-
}
|
|
2594
|
-
},
|
|
2595
|
-
onKeyDown: (e) => {
|
|
2596
|
-
if (isInteractive) {
|
|
2597
|
-
e.stopPropagation();
|
|
2598
|
-
}
|
|
2599
|
-
},
|
|
2600
|
-
role: "presentation",
|
|
2601
|
-
className: "shrink-0 -mt-1 -mr-1",
|
|
2602
|
-
children: actions
|
|
2603
|
-
}
|
|
2604
|
-
)
|
|
2605
|
-
] }),
|
|
2606
|
-
meta && /* @__PURE__ */ jsx38("div", { className: twMerge11("flex items-center gap-2", status && "pl-4"), children: meta })
|
|
2607
|
-
] })
|
|
2608
|
-
] });
|
|
2609
|
-
const baseStyles = twMerge11(
|
|
2610
|
-
"flex flex-col overflow-hidden rounded-lg",
|
|
2611
|
-
"border border-(--color-border-default)",
|
|
2612
|
-
"shadow-sm transition-all",
|
|
2613
|
-
isInteractive && "hover:border-(--color-border-focus) hover:shadow-md cursor-pointer",
|
|
2614
|
-
isInteractive && "focus-visible:ring-2 focus-visible:ring-(--color-border-focus) focus-visible:ring-offset-2 outline-none",
|
|
2615
|
-
className
|
|
2616
|
-
);
|
|
2617
|
-
if (href) {
|
|
2618
|
-
return /* @__PURE__ */ jsx38("a", { href, className: twMerge11(baseStyles, "no-underline"), children: cardContent });
|
|
2619
|
-
}
|
|
2620
|
-
if (onPress) {
|
|
2621
|
-
return /* @__PURE__ */ jsx38(
|
|
2622
|
-
"div",
|
|
2623
|
-
{
|
|
2624
|
-
role: "button",
|
|
2625
|
-
tabIndex: 0,
|
|
2626
|
-
className: baseStyles,
|
|
2627
|
-
onClick: onPress,
|
|
2628
|
-
onKeyDown: handleKeyDown,
|
|
2629
|
-
children: cardContent
|
|
2630
|
-
}
|
|
2631
|
-
);
|
|
2632
|
-
}
|
|
2633
|
-
return /* @__PURE__ */ jsx38("div", { className: baseStyles, children: cardContent });
|
|
2634
|
-
}
|
|
2635
|
-
|
|
2636
2107
|
// src/components/Badge/Badge.tsx
|
|
2637
|
-
import { twMerge as
|
|
2638
|
-
import { jsx as
|
|
2108
|
+
import { twMerge as twMerge11 } from "tailwind-merge";
|
|
2109
|
+
import { jsx as jsx35, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
2639
2110
|
var variantStyles4 = {
|
|
2640
2111
|
neutral: "bg-(--color-badge-neutral-bg) text-(--color-badge-neutral-text)",
|
|
2641
2112
|
purple: "bg-(--color-badge-purple-bg) text-(--color-badge-purple-text)",
|
|
@@ -2660,10 +2131,10 @@ function Badge({
|
|
|
2660
2131
|
icon: IconComponent,
|
|
2661
2132
|
className
|
|
2662
2133
|
}) {
|
|
2663
|
-
return /* @__PURE__ */
|
|
2134
|
+
return /* @__PURE__ */ jsxs21(
|
|
2664
2135
|
"span",
|
|
2665
2136
|
{
|
|
2666
|
-
className:
|
|
2137
|
+
className: twMerge11(
|
|
2667
2138
|
"inline-flex items-center gap-1 rounded-full",
|
|
2668
2139
|
"text-xs font-medium leading-tight",
|
|
2669
2140
|
variantStyles4[variant],
|
|
@@ -2671,7 +2142,7 @@ function Badge({
|
|
|
2671
2142
|
className
|
|
2672
2143
|
),
|
|
2673
2144
|
children: [
|
|
2674
|
-
IconComponent && /* @__PURE__ */
|
|
2145
|
+
IconComponent && /* @__PURE__ */ jsx35(IconComponent, { size: iconSizeMap4[size], "aria-hidden": "true" }),
|
|
2675
2146
|
children
|
|
2676
2147
|
]
|
|
2677
2148
|
}
|
|
@@ -2679,9 +2150,9 @@ function Badge({
|
|
|
2679
2150
|
}
|
|
2680
2151
|
|
|
2681
2152
|
// src/components/Card/Card.tsx
|
|
2682
|
-
import { useCallback as
|
|
2683
|
-
import { twMerge as
|
|
2684
|
-
import { Fragment as
|
|
2153
|
+
import { useCallback as useCallback2 } from "react";
|
|
2154
|
+
import { twMerge as twMerge12 } from "tailwind-merge";
|
|
2155
|
+
import { Fragment as Fragment8, jsx as jsx36, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
2685
2156
|
var paddingStyles = {
|
|
2686
2157
|
none: "p-0",
|
|
2687
2158
|
sm: "p-3",
|
|
@@ -2699,13 +2170,13 @@ function Card({
|
|
|
2699
2170
|
className
|
|
2700
2171
|
}) {
|
|
2701
2172
|
const isInteractive = interactive || !!href || !!onPress;
|
|
2702
|
-
const containerClass =
|
|
2173
|
+
const containerClass = twMerge12(
|
|
2703
2174
|
"bg-(--color-surface-default) border border-(--color-border-default) rounded-lg overflow-hidden shadow-sm",
|
|
2704
2175
|
isInteractive && "transition-all hover:shadow-md hover:border-(--color-border-focus) cursor-pointer",
|
|
2705
2176
|
(href || onPress) && "block focus-visible:ring-2 focus-visible:ring-(--color-border-focus) focus-visible:ring-offset-2 outline-none",
|
|
2706
2177
|
className
|
|
2707
2178
|
);
|
|
2708
|
-
const handleKeyDown =
|
|
2179
|
+
const handleKeyDown = useCallback2(
|
|
2709
2180
|
(e) => {
|
|
2710
2181
|
if (onPress && (e.key === "Enter" || e.key === " ")) {
|
|
2711
2182
|
e.preventDefault();
|
|
@@ -2714,22 +2185,22 @@ function Card({
|
|
|
2714
2185
|
},
|
|
2715
2186
|
[onPress]
|
|
2716
2187
|
);
|
|
2717
|
-
const content = /* @__PURE__ */
|
|
2718
|
-
header && /* @__PURE__ */
|
|
2188
|
+
const content = /* @__PURE__ */ jsxs22(Fragment8, { children: [
|
|
2189
|
+
header && /* @__PURE__ */ jsx36(
|
|
2719
2190
|
"div",
|
|
2720
2191
|
{
|
|
2721
|
-
className:
|
|
2192
|
+
className: twMerge12(
|
|
2722
2193
|
"border-b border-(--color-border-default)",
|
|
2723
2194
|
paddingStyles[padding]
|
|
2724
2195
|
),
|
|
2725
2196
|
children: header
|
|
2726
2197
|
}
|
|
2727
2198
|
),
|
|
2728
|
-
/* @__PURE__ */
|
|
2729
|
-
footer && /* @__PURE__ */
|
|
2199
|
+
/* @__PURE__ */ jsx36("div", { className: paddingStyles[padding], children }),
|
|
2200
|
+
footer && /* @__PURE__ */ jsx36(
|
|
2730
2201
|
"div",
|
|
2731
2202
|
{
|
|
2732
|
-
className:
|
|
2203
|
+
className: twMerge12(
|
|
2733
2204
|
"border-t border-(--color-border-default)",
|
|
2734
2205
|
paddingStyles[padding]
|
|
2735
2206
|
),
|
|
@@ -2738,10 +2209,10 @@ function Card({
|
|
|
2738
2209
|
)
|
|
2739
2210
|
] });
|
|
2740
2211
|
if (href) {
|
|
2741
|
-
return /* @__PURE__ */
|
|
2212
|
+
return /* @__PURE__ */ jsx36("a", { href, className: containerClass, children: content });
|
|
2742
2213
|
}
|
|
2743
2214
|
if (onPress) {
|
|
2744
|
-
return /* @__PURE__ */
|
|
2215
|
+
return /* @__PURE__ */ jsx36(
|
|
2745
2216
|
"div",
|
|
2746
2217
|
{
|
|
2747
2218
|
role: "button",
|
|
@@ -2753,13 +2224,13 @@ function Card({
|
|
|
2753
2224
|
}
|
|
2754
2225
|
);
|
|
2755
2226
|
}
|
|
2756
|
-
return /* @__PURE__ */
|
|
2227
|
+
return /* @__PURE__ */ jsx36("div", { className: containerClass, children: content });
|
|
2757
2228
|
}
|
|
2758
2229
|
|
|
2759
2230
|
// src/components/DeltaIndicator/DeltaIndicator.tsx
|
|
2760
2231
|
import { ArrowUp, ArrowDown, Minus } from "lucide-react";
|
|
2761
|
-
import { twMerge as
|
|
2762
|
-
import { jsx as
|
|
2232
|
+
import { twMerge as twMerge13 } from "tailwind-merge";
|
|
2233
|
+
import { jsx as jsx37, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
2763
2234
|
function getDirection(current, previous) {
|
|
2764
2235
|
const diff = current - previous;
|
|
2765
2236
|
if (diff > 0) return "increase";
|
|
@@ -2812,16 +2283,16 @@ function DeltaIndicator({
|
|
|
2812
2283
|
className
|
|
2813
2284
|
}) {
|
|
2814
2285
|
if (unavailable) {
|
|
2815
|
-
return /* @__PURE__ */
|
|
2286
|
+
return /* @__PURE__ */ jsxs23(
|
|
2816
2287
|
"span",
|
|
2817
2288
|
{
|
|
2818
|
-
className:
|
|
2289
|
+
className: twMerge13(
|
|
2819
2290
|
"inline-flex items-center gap-1 font-medium",
|
|
2820
2291
|
"text-(--color-text-tertiary)",
|
|
2821
2292
|
className
|
|
2822
2293
|
),
|
|
2823
2294
|
children: [
|
|
2824
|
-
label && /* @__PURE__ */
|
|
2295
|
+
label && /* @__PURE__ */ jsx37("span", { className: "text-sm text-(--color-text-secondary) mr-1", children: label }),
|
|
2825
2296
|
unavailableText
|
|
2826
2297
|
]
|
|
2827
2298
|
}
|
|
@@ -2851,10 +2322,10 @@ function DeltaIndicator({
|
|
|
2851
2322
|
}
|
|
2852
2323
|
}
|
|
2853
2324
|
const isPill = mode === "pill";
|
|
2854
|
-
return /* @__PURE__ */
|
|
2325
|
+
return /* @__PURE__ */ jsxs23(
|
|
2855
2326
|
"span",
|
|
2856
2327
|
{
|
|
2857
|
-
className:
|
|
2328
|
+
className: twMerge13(
|
|
2858
2329
|
"inline-flex items-center gap-1 font-medium",
|
|
2859
2330
|
colorStyles2,
|
|
2860
2331
|
isPill && [
|
|
@@ -2865,8 +2336,8 @@ function DeltaIndicator({
|
|
|
2865
2336
|
className
|
|
2866
2337
|
),
|
|
2867
2338
|
children: [
|
|
2868
|
-
label && /* @__PURE__ */
|
|
2869
|
-
/* @__PURE__ */
|
|
2339
|
+
label && /* @__PURE__ */ jsx37("span", { className: "text-sm text-(--color-text-secondary) mr-1", children: label }),
|
|
2340
|
+
/* @__PURE__ */ jsx37(IconComponent, { size: 14, "aria-hidden": true }),
|
|
2870
2341
|
valueText
|
|
2871
2342
|
]
|
|
2872
2343
|
}
|
|
@@ -2874,8 +2345,8 @@ function DeltaIndicator({
|
|
|
2874
2345
|
}
|
|
2875
2346
|
|
|
2876
2347
|
// src/components/ProgressBar/ProgressBar.tsx
|
|
2877
|
-
import { twMerge as
|
|
2878
|
-
import { jsx as
|
|
2348
|
+
import { twMerge as twMerge14 } from "tailwind-merge";
|
|
2349
|
+
import { jsx as jsx38, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
2879
2350
|
var fillStyles = {
|
|
2880
2351
|
brand: "bg-(--color-progress-fill)",
|
|
2881
2352
|
success: "bg-(--color-progress-fill-success)",
|
|
@@ -2898,12 +2369,12 @@ function ProgressBar({
|
|
|
2898
2369
|
className
|
|
2899
2370
|
}) {
|
|
2900
2371
|
const clampedValue = Math.min(100, Math.max(0, value));
|
|
2901
|
-
return /* @__PURE__ */
|
|
2902
|
-
(label || description || showValue) && /* @__PURE__ */
|
|
2903
|
-
/* @__PURE__ */
|
|
2904
|
-
/* @__PURE__ */
|
|
2372
|
+
return /* @__PURE__ */ jsxs24("div", { className: twMerge14("w-full", className), children: [
|
|
2373
|
+
(label || description || showValue) && /* @__PURE__ */ jsxs24("div", { className: "flex items-center justify-between mb-2", children: [
|
|
2374
|
+
/* @__PURE__ */ jsx38("span", { className: "text-sm font-medium text-(--color-text-primary)", children: label }),
|
|
2375
|
+
/* @__PURE__ */ jsx38("span", { className: "text-sm text-(--color-text-secondary)", children: description ?? (showValue ? `${clampedValue}%` : null) })
|
|
2905
2376
|
] }),
|
|
2906
|
-
/* @__PURE__ */
|
|
2377
|
+
/* @__PURE__ */ jsx38(
|
|
2907
2378
|
"div",
|
|
2908
2379
|
{
|
|
2909
2380
|
role: "progressbar",
|
|
@@ -2911,14 +2382,14 @@ function ProgressBar({
|
|
|
2911
2382
|
"aria-valuemin": 0,
|
|
2912
2383
|
"aria-valuemax": 100,
|
|
2913
2384
|
"aria-label": label ?? "Progress",
|
|
2914
|
-
className:
|
|
2385
|
+
className: twMerge14(
|
|
2915
2386
|
"w-full rounded-full bg-(--color-progress-track)",
|
|
2916
2387
|
sizeStyles9[size]
|
|
2917
2388
|
),
|
|
2918
|
-
children: /* @__PURE__ */
|
|
2389
|
+
children: /* @__PURE__ */ jsx38(
|
|
2919
2390
|
"div",
|
|
2920
2391
|
{
|
|
2921
|
-
className:
|
|
2392
|
+
className: twMerge14(
|
|
2922
2393
|
"h-full rounded-full transition-all duration-300",
|
|
2923
2394
|
fillStyles[variant]
|
|
2924
2395
|
),
|
|
@@ -2931,19 +2402,19 @@ function ProgressBar({
|
|
|
2931
2402
|
}
|
|
2932
2403
|
|
|
2933
2404
|
// src/components/Banner/Banner.tsx
|
|
2934
|
-
import { useState as
|
|
2405
|
+
import { useState as useState2 } from "react";
|
|
2935
2406
|
import {
|
|
2936
|
-
Info as
|
|
2407
|
+
Info as Info2,
|
|
2937
2408
|
AlertTriangle,
|
|
2938
|
-
AlertCircle
|
|
2409
|
+
AlertCircle,
|
|
2939
2410
|
CheckCircle2,
|
|
2940
2411
|
X as X3
|
|
2941
2412
|
} from "lucide-react";
|
|
2942
|
-
import { twMerge as
|
|
2943
|
-
import { jsx as
|
|
2413
|
+
import { twMerge as twMerge15 } from "tailwind-merge";
|
|
2414
|
+
import { jsx as jsx39, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
2944
2415
|
var variantConfig2 = {
|
|
2945
2416
|
info: {
|
|
2946
|
-
icon:
|
|
2417
|
+
icon: Info2,
|
|
2947
2418
|
containerClass: "bg-(--color-banner-info-bg) border-(--color-banner-info-border) text-(--color-banner-info-text)",
|
|
2948
2419
|
iconClass: "text-(--color-banner-info-icon)",
|
|
2949
2420
|
role: "status"
|
|
@@ -2955,7 +2426,7 @@ var variantConfig2 = {
|
|
|
2955
2426
|
role: "alert"
|
|
2956
2427
|
},
|
|
2957
2428
|
danger: {
|
|
2958
|
-
icon:
|
|
2429
|
+
icon: AlertCircle,
|
|
2959
2430
|
containerClass: "bg-(--color-banner-danger-bg) border-(--color-banner-danger-border) text-(--color-banner-danger-text)",
|
|
2960
2431
|
iconClass: "text-(--color-banner-danger-icon)",
|
|
2961
2432
|
role: "alert"
|
|
@@ -2976,7 +2447,7 @@ function Banner({
|
|
|
2976
2447
|
onDismiss,
|
|
2977
2448
|
className
|
|
2978
2449
|
}) {
|
|
2979
|
-
const [dismissed, setDismissed] =
|
|
2450
|
+
const [dismissed, setDismissed] = useState2(false);
|
|
2980
2451
|
if (dismissed) return null;
|
|
2981
2452
|
const config = variantConfig2[variant];
|
|
2982
2453
|
const IconComponent = icon ?? config.icon;
|
|
@@ -2984,40 +2455,40 @@ function Banner({
|
|
|
2984
2455
|
setDismissed(true);
|
|
2985
2456
|
onDismiss?.();
|
|
2986
2457
|
};
|
|
2987
|
-
return /* @__PURE__ */
|
|
2458
|
+
return /* @__PURE__ */ jsxs25(
|
|
2988
2459
|
"div",
|
|
2989
2460
|
{
|
|
2990
2461
|
role: config.role,
|
|
2991
|
-
className:
|
|
2462
|
+
className: twMerge15(
|
|
2992
2463
|
"flex items-start gap-3 rounded-lg border px-4 py-3",
|
|
2993
2464
|
"text-sm",
|
|
2994
2465
|
config.containerClass,
|
|
2995
2466
|
className
|
|
2996
2467
|
),
|
|
2997
2468
|
children: [
|
|
2998
|
-
/* @__PURE__ */
|
|
2469
|
+
/* @__PURE__ */ jsx39(
|
|
2999
2470
|
IconComponent,
|
|
3000
2471
|
{
|
|
3001
2472
|
size: 20,
|
|
3002
|
-
className:
|
|
2473
|
+
className: twMerge15("shrink-0 mt-0.5", config.iconClass),
|
|
3003
2474
|
"aria-hidden": "true"
|
|
3004
2475
|
}
|
|
3005
2476
|
),
|
|
3006
|
-
/* @__PURE__ */
|
|
3007
|
-
title && /* @__PURE__ */
|
|
2477
|
+
/* @__PURE__ */ jsxs25("div", { className: "flex-1", children: [
|
|
2478
|
+
title && /* @__PURE__ */ jsxs25("span", { className: "font-medium", children: [
|
|
3008
2479
|
title,
|
|
3009
2480
|
" \u2014 "
|
|
3010
2481
|
] }),
|
|
3011
2482
|
children
|
|
3012
2483
|
] }),
|
|
3013
|
-
dismissible && /* @__PURE__ */
|
|
2484
|
+
dismissible && /* @__PURE__ */ jsx39(
|
|
3014
2485
|
"button",
|
|
3015
2486
|
{
|
|
3016
2487
|
type: "button",
|
|
3017
2488
|
onClick: handleDismiss,
|
|
3018
2489
|
className: "shrink-0 rounded-sm p-0.5 opacity-70 hover:opacity-100 transition-opacity outline-none focus-visible:ring-2 focus-visible:ring-current",
|
|
3019
2490
|
"aria-label": "Dismiss",
|
|
3020
|
-
children: /* @__PURE__ */
|
|
2491
|
+
children: /* @__PURE__ */ jsx39(X3, { size: 16, "aria-hidden": "true" })
|
|
3021
2492
|
}
|
|
3022
2493
|
)
|
|
3023
2494
|
]
|
|
@@ -3026,8 +2497,8 @@ function Banner({
|
|
|
3026
2497
|
}
|
|
3027
2498
|
|
|
3028
2499
|
// src/components/MetricCard/MetricCard.tsx
|
|
3029
|
-
import { twMerge as
|
|
3030
|
-
import { Fragment as
|
|
2500
|
+
import { twMerge as twMerge16 } from "tailwind-merge";
|
|
2501
|
+
import { Fragment as Fragment9, jsx as jsx40, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
3031
2502
|
var sizeConfig = {
|
|
3032
2503
|
sm: {
|
|
3033
2504
|
padding: "p-3",
|
|
@@ -3049,58 +2520,58 @@ function MetricCard({
|
|
|
3049
2520
|
className
|
|
3050
2521
|
}) {
|
|
3051
2522
|
const config = sizeConfig[size];
|
|
3052
|
-
const containerClass =
|
|
2523
|
+
const containerClass = twMerge16(
|
|
3053
2524
|
"bg-(--color-surface-default) border border-(--color-border-default) rounded-lg shadow-sm",
|
|
3054
2525
|
config.padding,
|
|
3055
2526
|
href && "block transition-shadow hover:shadow-md hover:border-(--color-border-focus) focus-visible:ring-2 focus-visible:ring-(--color-border-focus) focus-visible:ring-offset-2 outline-none",
|
|
3056
2527
|
className
|
|
3057
2528
|
);
|
|
3058
|
-
const content = /* @__PURE__ */
|
|
3059
|
-
/* @__PURE__ */
|
|
3060
|
-
/* @__PURE__ */
|
|
2529
|
+
const content = /* @__PURE__ */ jsxs26(Fragment9, { children: [
|
|
2530
|
+
/* @__PURE__ */ jsx40("div", { className: twMerge16(config.labelClass, "text-(--color-text-secondary)"), children: label }),
|
|
2531
|
+
/* @__PURE__ */ jsx40(
|
|
3061
2532
|
"div",
|
|
3062
2533
|
{
|
|
3063
|
-
className:
|
|
2534
|
+
className: twMerge16(
|
|
3064
2535
|
config.valueClass,
|
|
3065
2536
|
"font-semibold text-(--color-text-primary) mt-1 tabular-nums"
|
|
3066
2537
|
),
|
|
3067
2538
|
children: value
|
|
3068
2539
|
}
|
|
3069
2540
|
),
|
|
3070
|
-
secondary && /* @__PURE__ */
|
|
2541
|
+
secondary && /* @__PURE__ */ jsx40("div", { className: "mt-1 text-sm", children: secondary })
|
|
3071
2542
|
] });
|
|
3072
2543
|
if (href) {
|
|
3073
|
-
return /* @__PURE__ */
|
|
2544
|
+
return /* @__PURE__ */ jsx40("a", { href, className: containerClass, children: content });
|
|
3074
2545
|
}
|
|
3075
|
-
return /* @__PURE__ */
|
|
2546
|
+
return /* @__PURE__ */ jsx40("div", { className: containerClass, children: content });
|
|
3076
2547
|
}
|
|
3077
2548
|
|
|
3078
2549
|
// src/components/SectionHeader/SectionHeader.tsx
|
|
3079
|
-
import { twMerge as
|
|
3080
|
-
import { jsx as
|
|
2550
|
+
import { twMerge as twMerge17 } from "tailwind-merge";
|
|
2551
|
+
import { jsx as jsx41, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
3081
2552
|
function SectionHeader({
|
|
3082
2553
|
title,
|
|
3083
2554
|
children,
|
|
3084
2555
|
className
|
|
3085
2556
|
}) {
|
|
3086
|
-
return /* @__PURE__ */
|
|
2557
|
+
return /* @__PURE__ */ jsxs27(
|
|
3087
2558
|
"div",
|
|
3088
2559
|
{
|
|
3089
|
-
className:
|
|
2560
|
+
className: twMerge17(
|
|
3090
2561
|
"flex flex-wrap items-center gap-3 py-4",
|
|
3091
2562
|
className
|
|
3092
2563
|
),
|
|
3093
2564
|
children: [
|
|
3094
|
-
/* @__PURE__ */
|
|
3095
|
-
children && /* @__PURE__ */
|
|
2565
|
+
/* @__PURE__ */ jsx41(H2, { children: title }),
|
|
2566
|
+
children && /* @__PURE__ */ jsx41("div", { className: "ml-auto flex flex-wrap items-center gap-2", children })
|
|
3096
2567
|
]
|
|
3097
2568
|
}
|
|
3098
2569
|
);
|
|
3099
2570
|
}
|
|
3100
2571
|
|
|
3101
2572
|
// src/components/Pill/Pill.tsx
|
|
3102
|
-
import { twMerge as
|
|
3103
|
-
import { jsx as
|
|
2573
|
+
import { twMerge as twMerge18 } from "tailwind-merge";
|
|
2574
|
+
import { jsx as jsx42 } from "react/jsx-runtime";
|
|
3104
2575
|
var hashColors = {
|
|
3105
2576
|
purple: "bg-(--color-badge-purple-bg) text-(--color-badge-purple-text) border-(--color-badge-purple-text)/20",
|
|
3106
2577
|
teal: "bg-(--color-badge-teal-bg) text-(--color-badge-teal-text) border-(--color-badge-teal-text)/20",
|
|
@@ -3126,7 +2597,7 @@ function Pill({
|
|
|
3126
2597
|
className,
|
|
3127
2598
|
...rest
|
|
3128
2599
|
}) {
|
|
3129
|
-
const cx =
|
|
2600
|
+
const cx = twMerge18(
|
|
3130
2601
|
`
|
|
3131
2602
|
inline-flex items-center
|
|
3132
2603
|
rounded-full
|
|
@@ -3138,12 +2609,12 @@ function Pill({
|
|
|
3138
2609
|
colorStyles[color],
|
|
3139
2610
|
className
|
|
3140
2611
|
);
|
|
3141
|
-
return /* @__PURE__ */
|
|
2612
|
+
return /* @__PURE__ */ jsx42("span", { className: cx, ...rest, children });
|
|
3142
2613
|
}
|
|
3143
2614
|
|
|
3144
2615
|
// src/components/Pill/PathPill.tsx
|
|
3145
|
-
import { twMerge as
|
|
3146
|
-
import { jsx as
|
|
2616
|
+
import { twMerge as twMerge19 } from "tailwind-merge";
|
|
2617
|
+
import { jsx as jsx43 } from "react/jsx-runtime";
|
|
3147
2618
|
function PathPill({
|
|
3148
2619
|
children,
|
|
3149
2620
|
visibleCount,
|
|
@@ -3155,17 +2626,17 @@ function PathPill({
|
|
|
3155
2626
|
const effectiveVisible = visibleCount ?? segments.length;
|
|
3156
2627
|
const dotCount = Math.max(0, segments.length - effectiveVisible);
|
|
3157
2628
|
const fullPath = segments.join(" / ");
|
|
3158
|
-
return /* @__PURE__ */
|
|
2629
|
+
return /* @__PURE__ */ jsx43(
|
|
3159
2630
|
"div",
|
|
3160
2631
|
{
|
|
3161
|
-
className:
|
|
2632
|
+
className: twMerge19("relative flex", className),
|
|
3162
2633
|
"aria-label": `Path: ${fullPath}`,
|
|
3163
2634
|
children: segments.map((segment, i) => {
|
|
3164
2635
|
const isCollapsed = i < dotCount;
|
|
3165
2636
|
const isLast = i === segments.length - 1;
|
|
3166
|
-
const cx =
|
|
2637
|
+
const cx = twMerge19(!isLast && "pr-5 -mr-4", isCollapsed && "pr-3");
|
|
3167
2638
|
const color = colorFn ? colorFn(segment, i) : pillColorFromName(segment);
|
|
3168
|
-
return /* @__PURE__ */
|
|
2639
|
+
return /* @__PURE__ */ jsx43(
|
|
3169
2640
|
Pill,
|
|
3170
2641
|
{
|
|
3171
2642
|
className: cx,
|
|
@@ -3181,8 +2652,8 @@ function PathPill({
|
|
|
3181
2652
|
}
|
|
3182
2653
|
|
|
3183
2654
|
// src/components/FormWizard/FormWizard.tsx
|
|
3184
|
-
import { createContext as createContext6, useContext as useContext6, useCallback as
|
|
3185
|
-
import { jsx as
|
|
2655
|
+
import { createContext as createContext6, useContext as useContext6, useCallback as useCallback3, useMemo } from "react";
|
|
2656
|
+
import { jsx as jsx44 } from "react/jsx-runtime";
|
|
3186
2657
|
var FormWizardContext = createContext6({
|
|
3187
2658
|
currentStep: 0,
|
|
3188
2659
|
totalSteps: 1,
|
|
@@ -3202,7 +2673,7 @@ function FormWizard({
|
|
|
3202
2673
|
}) {
|
|
3203
2674
|
const canGoBack = currentStep > 0;
|
|
3204
2675
|
const isLastStep = currentStep >= totalSteps - 1;
|
|
3205
|
-
const goBack =
|
|
2676
|
+
const goBack = useCallback3(() => {
|
|
3206
2677
|
if (currentStep > 0) {
|
|
3207
2678
|
onStepChange(currentStep - 1);
|
|
3208
2679
|
}
|
|
@@ -3217,13 +2688,13 @@ function FormWizard({
|
|
|
3217
2688
|
}),
|
|
3218
2689
|
[currentStep, totalSteps, canGoBack, goBack, isLastStep]
|
|
3219
2690
|
);
|
|
3220
|
-
return /* @__PURE__ */
|
|
2691
|
+
return /* @__PURE__ */ jsx44(FormWizardContext.Provider, { value, children });
|
|
3221
2692
|
}
|
|
3222
2693
|
|
|
3223
2694
|
// src/components/FormWizard/FormWizardProgress.tsx
|
|
3224
|
-
import { jsx as
|
|
2695
|
+
import { jsx as jsx45, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
3225
2696
|
function CheckIcon() {
|
|
3226
|
-
return /* @__PURE__ */
|
|
2697
|
+
return /* @__PURE__ */ jsx45(
|
|
3227
2698
|
"svg",
|
|
3228
2699
|
{
|
|
3229
2700
|
"aria-hidden": "true",
|
|
@@ -3234,24 +2705,24 @@ function CheckIcon() {
|
|
|
3234
2705
|
strokeWidth: "2",
|
|
3235
2706
|
strokeLinecap: "round",
|
|
3236
2707
|
strokeLinejoin: "round",
|
|
3237
|
-
children: /* @__PURE__ */
|
|
2708
|
+
children: /* @__PURE__ */ jsx45("path", { d: "M3 8.5l3.5 3.5 6.5-7" })
|
|
3238
2709
|
}
|
|
3239
2710
|
);
|
|
3240
2711
|
}
|
|
3241
2712
|
function FormWizardProgress({ labels }) {
|
|
3242
2713
|
const { currentStep, totalSteps } = useFormWizard();
|
|
3243
|
-
return /* @__PURE__ */
|
|
2714
|
+
return /* @__PURE__ */ jsx45("nav", { "aria-label": "Form progress", children: /* @__PURE__ */ jsx45("ol", { className: "flex items-start", role: "list", children: labels.map((label, index) => {
|
|
3244
2715
|
const isCompleted = index < currentStep;
|
|
3245
2716
|
const isCurrent = index === currentStep;
|
|
3246
2717
|
const isFuture = index > currentStep;
|
|
3247
|
-
return /* @__PURE__ */
|
|
2718
|
+
return /* @__PURE__ */ jsxs28(
|
|
3248
2719
|
"li",
|
|
3249
2720
|
{
|
|
3250
2721
|
className: "flex flex-1 flex-col items-center",
|
|
3251
2722
|
"aria-current": isCurrent ? "step" : void 0,
|
|
3252
2723
|
children: [
|
|
3253
|
-
/* @__PURE__ */
|
|
3254
|
-
index > 0 ? /* @__PURE__ */
|
|
2724
|
+
/* @__PURE__ */ jsxs28("div", { className: "flex w-full items-center", children: [
|
|
2725
|
+
index > 0 ? /* @__PURE__ */ jsx45(
|
|
3255
2726
|
"div",
|
|
3256
2727
|
{
|
|
3257
2728
|
"aria-hidden": "true",
|
|
@@ -3260,8 +2731,8 @@ function FormWizardProgress({ labels }) {
|
|
|
3260
2731
|
index <= currentStep ? "bg-(--color-brand-primary)" : "bg-(--color-border-default)"
|
|
3261
2732
|
].join(" ")
|
|
3262
2733
|
}
|
|
3263
|
-
) : /* @__PURE__ */
|
|
3264
|
-
/* @__PURE__ */
|
|
2734
|
+
) : /* @__PURE__ */ jsx45("div", { className: "flex-1", "aria-hidden": "true" }),
|
|
2735
|
+
/* @__PURE__ */ jsx45(
|
|
3265
2736
|
"div",
|
|
3266
2737
|
{
|
|
3267
2738
|
className: [
|
|
@@ -3273,10 +2744,10 @@ function FormWizardProgress({ labels }) {
|
|
|
3273
2744
|
isFuture ? "border-2 border-(--color-border-default) bg-(--color-surface-default) text-(--color-text-tertiary)" : ""
|
|
3274
2745
|
].join(" "),
|
|
3275
2746
|
"aria-hidden": "true",
|
|
3276
|
-
children: isCompleted ? /* @__PURE__ */
|
|
2747
|
+
children: isCompleted ? /* @__PURE__ */ jsx45(CheckIcon, {}) : index + 1
|
|
3277
2748
|
}
|
|
3278
2749
|
),
|
|
3279
|
-
index < totalSteps - 1 ? /* @__PURE__ */
|
|
2750
|
+
index < totalSteps - 1 ? /* @__PURE__ */ jsx45(
|
|
3280
2751
|
"div",
|
|
3281
2752
|
{
|
|
3282
2753
|
"aria-hidden": "true",
|
|
@@ -3285,9 +2756,9 @@ function FormWizardProgress({ labels }) {
|
|
|
3285
2756
|
index < currentStep ? "bg-(--color-brand-primary)" : "bg-(--color-border-default)"
|
|
3286
2757
|
].join(" ")
|
|
3287
2758
|
}
|
|
3288
|
-
) : /* @__PURE__ */
|
|
2759
|
+
) : /* @__PURE__ */ jsx45("div", { className: "flex-1", "aria-hidden": "true" })
|
|
3289
2760
|
] }),
|
|
3290
|
-
/* @__PURE__ */
|
|
2761
|
+
/* @__PURE__ */ jsx45(
|
|
3291
2762
|
"span",
|
|
3292
2763
|
{
|
|
3293
2764
|
className: [
|
|
@@ -3305,15 +2776,15 @@ function FormWizardProgress({ labels }) {
|
|
|
3305
2776
|
}
|
|
3306
2777
|
|
|
3307
2778
|
// src/components/FormWizard/FormWizardNav.tsx
|
|
3308
|
-
import { jsx as
|
|
2779
|
+
import { jsx as jsx46, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
3309
2780
|
function FormWizardNav({
|
|
3310
2781
|
onNext,
|
|
3311
2782
|
isSubmitting = false,
|
|
3312
2783
|
submitLabel = "Submit"
|
|
3313
2784
|
}) {
|
|
3314
2785
|
const { canGoBack, goBack, isLastStep } = useFormWizard();
|
|
3315
|
-
return /* @__PURE__ */
|
|
3316
|
-
canGoBack && /* @__PURE__ */
|
|
2786
|
+
return /* @__PURE__ */ jsxs29("div", { className: "flex items-center justify-end gap-3", children: [
|
|
2787
|
+
canGoBack && /* @__PURE__ */ jsx46(
|
|
3317
2788
|
Button,
|
|
3318
2789
|
{
|
|
3319
2790
|
variant: "secondary",
|
|
@@ -3323,7 +2794,7 @@ function FormWizardNav({
|
|
|
3323
2794
|
children: "Back"
|
|
3324
2795
|
}
|
|
3325
2796
|
),
|
|
3326
|
-
/* @__PURE__ */
|
|
2797
|
+
/* @__PURE__ */ jsx46(
|
|
3327
2798
|
Button,
|
|
3328
2799
|
{
|
|
3329
2800
|
variant: "primary",
|
|
@@ -3728,9 +3199,7 @@ export {
|
|
|
3728
3199
|
DeltaIndicator,
|
|
3729
3200
|
Dialog,
|
|
3730
3201
|
EmptyState,
|
|
3731
|
-
Field,
|
|
3732
3202
|
Fieldset,
|
|
3733
|
-
FileCard,
|
|
3734
3203
|
FontSize2xl,
|
|
3735
3204
|
FontSize3xl,
|
|
3736
3205
|
FontSize4xl,
|
|
@@ -3760,7 +3229,7 @@ export {
|
|
|
3760
3229
|
InputAddon,
|
|
3761
3230
|
InputGroup,
|
|
3762
3231
|
InputGroupContext,
|
|
3763
|
-
|
|
3232
|
+
Label,
|
|
3764
3233
|
LineHeightNormal,
|
|
3765
3234
|
LineHeightRelaxed,
|
|
3766
3235
|
LineHeightTight,
|
|
@@ -3796,7 +3265,6 @@ export {
|
|
|
3796
3265
|
Spacing6,
|
|
3797
3266
|
Spacing8,
|
|
3798
3267
|
Spinner,
|
|
3799
|
-
StorageConnectionCard,
|
|
3800
3268
|
Switch,
|
|
3801
3269
|
Tab,
|
|
3802
3270
|
TabList,
|
|
@@ -3810,7 +3278,6 @@ export {
|
|
|
3810
3278
|
ToggleButtonGroup,
|
|
3811
3279
|
ToggleButtonGroupItem,
|
|
3812
3280
|
Tooltip,
|
|
3813
|
-
Tree,
|
|
3814
3281
|
Tab2 as UnstyledTab,
|
|
3815
3282
|
TabList2 as UnstyledTabList,
|
|
3816
3283
|
TabPanel2 as UnstyledTabPanel,
|