@marcoschwartz/lite-ui 0.2.0 → 0.3.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.d.mts +99 -6
- package/dist/index.d.ts +99 -6
- package/dist/index.js +1122 -426
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1085 -426
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +4 -2
package/dist/index.js
CHANGED
|
@@ -33,33 +33,57 @@ var index_exports = {};
|
|
|
33
33
|
__export(index_exports, {
|
|
34
34
|
ActionMenu: () => ActionMenu,
|
|
35
35
|
Alert: () => Alert,
|
|
36
|
+
AlertCircleIcon: () => AlertCircleIcon,
|
|
36
37
|
AppShell: () => AppShell,
|
|
37
38
|
AppleIcon: () => AppleIcon,
|
|
39
|
+
ArrowLeftIcon: () => ArrowLeftIcon,
|
|
40
|
+
ArrowRightIcon: () => ArrowRightIcon,
|
|
41
|
+
AudioPlayer: () => AudioPlayer,
|
|
38
42
|
Avatar: () => Avatar,
|
|
39
43
|
Badge: () => Badge,
|
|
44
|
+
BeakerIcon: () => BeakerIcon,
|
|
40
45
|
BellIcon: () => BellIcon,
|
|
46
|
+
BookIcon: () => BookIcon,
|
|
47
|
+
BrainIcon: () => BrainIcon,
|
|
41
48
|
Button: () => Button,
|
|
42
49
|
Calendar: () => Calendar,
|
|
43
50
|
CalendarIcon: () => CalendarIcon,
|
|
44
51
|
CameraIcon: () => CameraIcon,
|
|
45
52
|
Card: () => Card,
|
|
53
|
+
ChatIcon: () => ChatIcon,
|
|
54
|
+
CheckCircleIcon: () => CheckCircleIcon,
|
|
46
55
|
CheckIcon: () => CheckIcon,
|
|
47
56
|
Checkbox: () => Checkbox,
|
|
48
57
|
ChevronDownIcon: () => ChevronDownIcon,
|
|
58
|
+
ChevronLeftIcon: () => ChevronLeftIcon,
|
|
49
59
|
ChevronRightIcon: () => ChevronRightIcon,
|
|
60
|
+
ChevronUpIcon: () => ChevronUpIcon,
|
|
50
61
|
CloseIcon: () => CloseIcon,
|
|
62
|
+
CloudIcon: () => CloudIcon,
|
|
63
|
+
CodeIcon: () => CodeIcon,
|
|
64
|
+
CopyIcon: () => CopyIcon,
|
|
65
|
+
DatabaseIcon: () => DatabaseIcon,
|
|
51
66
|
DatePicker: () => DatePicker,
|
|
52
67
|
DateTimePicker: () => DateTimePicker,
|
|
53
68
|
Divider: () => Divider,
|
|
54
69
|
DownloadIcon: () => DownloadIcon,
|
|
55
70
|
Drawer: () => Drawer,
|
|
56
71
|
EditIcon: () => EditIcon,
|
|
72
|
+
ExternalLinkIcon: () => ExternalLinkIcon,
|
|
73
|
+
EyeIcon: () => EyeIcon,
|
|
74
|
+
EyeOffIcon: () => EyeOffIcon,
|
|
57
75
|
FacebookIcon: () => FacebookIcon,
|
|
76
|
+
FileIcon: () => FileIcon,
|
|
58
77
|
FileUpload: () => FileUpload,
|
|
78
|
+
FolderIcon: () => FolderIcon,
|
|
59
79
|
GitHubIcon: () => GitHubIcon,
|
|
80
|
+
GlobeIcon: () => GlobeIcon,
|
|
60
81
|
GoogleIcon: () => GoogleIcon,
|
|
61
82
|
HeartIcon: () => HeartIcon,
|
|
62
83
|
HomeIcon: () => HomeIcon,
|
|
84
|
+
ImageIcon: () => ImageIcon,
|
|
85
|
+
InfoCircleIcon: () => InfoCircleIcon,
|
|
86
|
+
KeyIcon: () => KeyIcon,
|
|
63
87
|
LinkedInIcon: () => LinkedInIcon,
|
|
64
88
|
LockIcon: () => LockIcon,
|
|
65
89
|
MailIcon: () => MailIcon,
|
|
@@ -68,22 +92,33 @@ __export(index_exports, {
|
|
|
68
92
|
Navbar: () => Navbar,
|
|
69
93
|
NumberInput: () => NumberInput,
|
|
70
94
|
Pagination: () => Pagination,
|
|
95
|
+
PauseIcon: () => PauseIcon,
|
|
96
|
+
PlayIcon: () => PlayIcon,
|
|
97
|
+
PlugIcon: () => PlugIcon,
|
|
71
98
|
PlusIcon: () => PlusIcon,
|
|
72
99
|
ProgressBar: () => ProgressBar,
|
|
73
100
|
Radio: () => Radio,
|
|
101
|
+
RefreshIcon: () => RefreshIcon,
|
|
74
102
|
RichTextEditor: () => RichTextEditor,
|
|
103
|
+
SaveIcon: () => SaveIcon,
|
|
75
104
|
SearchIcon: () => SearchIcon,
|
|
76
105
|
Select: () => Select,
|
|
77
106
|
SettingsIcon: () => SettingsIcon,
|
|
107
|
+
ShieldIcon: () => ShieldIcon,
|
|
78
108
|
Sidebar: () => Sidebar,
|
|
79
109
|
SidebarProvider: () => SidebarProvider,
|
|
110
|
+
SkipBackIcon: () => SkipBackIcon,
|
|
111
|
+
SkipForwardIcon: () => SkipForwardIcon,
|
|
80
112
|
SlackIcon: () => SlackIcon,
|
|
81
113
|
Slider: () => Slider,
|
|
114
|
+
SparklesIcon: () => SparklesIcon,
|
|
82
115
|
Spinner: () => Spinner,
|
|
83
116
|
StarIcon: () => StarIcon,
|
|
84
117
|
Stepper: () => Stepper,
|
|
118
|
+
StopIcon: () => StopIcon,
|
|
85
119
|
Table: () => Table,
|
|
86
120
|
Tabs: () => Tabs,
|
|
121
|
+
TerminalIcon: () => TerminalIcon,
|
|
87
122
|
TextInput: () => TextInput,
|
|
88
123
|
Textarea: () => Textarea,
|
|
89
124
|
ThemeProvider: () => ThemeProvider,
|
|
@@ -94,6 +129,8 @@ __export(index_exports, {
|
|
|
94
129
|
TwitterIcon: () => TwitterIcon,
|
|
95
130
|
UploadIcon: () => UploadIcon,
|
|
96
131
|
UserIcon: () => UserIcon,
|
|
132
|
+
VolumeOffIcon: () => VolumeOffIcon,
|
|
133
|
+
VolumeUpIcon: () => VolumeUpIcon,
|
|
97
134
|
YouTubeIcon: () => YouTubeIcon,
|
|
98
135
|
getThemeScript: () => getThemeScript,
|
|
99
136
|
themeScript: () => themeScript,
|
|
@@ -713,173 +750,437 @@ var CloseIcon = createIcon(
|
|
|
713
750
|
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" })
|
|
714
751
|
);
|
|
715
752
|
|
|
716
|
-
// src/icons/
|
|
753
|
+
// src/icons/PlusIcon.tsx
|
|
717
754
|
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
755
|
+
var PlusIcon = createIcon(
|
|
756
|
+
"PlusIcon",
|
|
757
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 4v16m8-8H4" })
|
|
758
|
+
);
|
|
759
|
+
|
|
760
|
+
// src/icons/ArrowLeftIcon.tsx
|
|
761
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
762
|
+
var ArrowLeftIcon = createIcon(
|
|
763
|
+
"ArrowLeftIcon",
|
|
764
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M10 19l-7-7m0 0l7-7m-7 7h18" })
|
|
765
|
+
);
|
|
766
|
+
|
|
767
|
+
// src/icons/ArrowRightIcon.tsx
|
|
768
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
769
|
+
var ArrowRightIcon = createIcon(
|
|
770
|
+
"ArrowRightIcon",
|
|
771
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M14 5l7 7m0 0l-7 7m7-7H3" })
|
|
772
|
+
);
|
|
773
|
+
|
|
774
|
+
// src/icons/ChevronDownIcon.tsx
|
|
775
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
718
776
|
var ChevronDownIcon = createIcon(
|
|
719
777
|
"ChevronDownIcon",
|
|
720
|
-
/* @__PURE__ */ (0,
|
|
778
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" })
|
|
779
|
+
);
|
|
780
|
+
|
|
781
|
+
// src/icons/ChevronUpIcon.tsx
|
|
782
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
783
|
+
var ChevronUpIcon = createIcon(
|
|
784
|
+
"ChevronUpIcon",
|
|
785
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 15l7-7 7 7" })
|
|
786
|
+
);
|
|
787
|
+
|
|
788
|
+
// src/icons/ChevronLeftIcon.tsx
|
|
789
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
790
|
+
var ChevronLeftIcon = createIcon(
|
|
791
|
+
"ChevronLeftIcon",
|
|
792
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" })
|
|
721
793
|
);
|
|
722
794
|
|
|
723
795
|
// src/icons/ChevronRightIcon.tsx
|
|
724
|
-
var
|
|
796
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
725
797
|
var ChevronRightIcon = createIcon(
|
|
726
798
|
"ChevronRightIcon",
|
|
727
|
-
/* @__PURE__ */ (0,
|
|
799
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" })
|
|
800
|
+
);
|
|
801
|
+
|
|
802
|
+
// src/icons/ExternalLinkIcon.tsx
|
|
803
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
804
|
+
var ExternalLinkIcon = createIcon(
|
|
805
|
+
"ExternalLinkIcon",
|
|
806
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" })
|
|
728
807
|
);
|
|
729
808
|
|
|
730
809
|
// src/icons/CheckIcon.tsx
|
|
731
|
-
var
|
|
810
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
732
811
|
var CheckIcon = createIcon(
|
|
733
812
|
"CheckIcon",
|
|
734
|
-
/* @__PURE__ */ (0,
|
|
813
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" })
|
|
735
814
|
);
|
|
736
815
|
|
|
737
|
-
// src/icons/
|
|
738
|
-
var
|
|
739
|
-
var
|
|
740
|
-
"
|
|
741
|
-
/* @__PURE__ */ (0,
|
|
816
|
+
// src/icons/CheckCircleIcon.tsx
|
|
817
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
818
|
+
var CheckCircleIcon = createIcon(
|
|
819
|
+
"CheckCircleIcon",
|
|
820
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" })
|
|
821
|
+
);
|
|
822
|
+
|
|
823
|
+
// src/icons/AlertCircleIcon.tsx
|
|
824
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
825
|
+
var AlertCircleIcon = createIcon(
|
|
826
|
+
"AlertCircleIcon",
|
|
827
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" })
|
|
828
|
+
);
|
|
829
|
+
|
|
830
|
+
// src/icons/InfoCircleIcon.tsx
|
|
831
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
832
|
+
var InfoCircleIcon = createIcon(
|
|
833
|
+
"InfoCircleIcon",
|
|
834
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" })
|
|
742
835
|
);
|
|
743
836
|
|
|
744
837
|
// src/icons/TrashIcon.tsx
|
|
745
|
-
var
|
|
838
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
746
839
|
var TrashIcon = createIcon(
|
|
747
840
|
"TrashIcon",
|
|
748
|
-
/* @__PURE__ */ (0,
|
|
841
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" })
|
|
749
842
|
);
|
|
750
843
|
|
|
751
844
|
// src/icons/EditIcon.tsx
|
|
752
|
-
var
|
|
845
|
+
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
753
846
|
var EditIcon = createIcon(
|
|
754
847
|
"EditIcon",
|
|
755
|
-
/* @__PURE__ */ (0,
|
|
848
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z" })
|
|
849
|
+
);
|
|
850
|
+
|
|
851
|
+
// src/icons/CopyIcon.tsx
|
|
852
|
+
var import_jsx_runtime30 = require("react/jsx-runtime");
|
|
853
|
+
var CopyIcon = createIcon(
|
|
854
|
+
"CopyIcon",
|
|
855
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z" })
|
|
856
|
+
);
|
|
857
|
+
|
|
858
|
+
// src/icons/SaveIcon.tsx
|
|
859
|
+
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
860
|
+
var SaveIcon = createIcon(
|
|
861
|
+
"SaveIcon",
|
|
862
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M8 7H5a2 2 0 00-2 2v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-3m-1 4l-3 3m0 0l-3-3m3 3V4" })
|
|
863
|
+
);
|
|
864
|
+
|
|
865
|
+
// src/icons/DownloadIcon.tsx
|
|
866
|
+
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
867
|
+
var DownloadIcon = createIcon(
|
|
868
|
+
"DownloadIcon",
|
|
869
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4" })
|
|
870
|
+
);
|
|
871
|
+
|
|
872
|
+
// src/icons/UploadIcon.tsx
|
|
873
|
+
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
874
|
+
var UploadIcon = createIcon(
|
|
875
|
+
"UploadIcon",
|
|
876
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12" })
|
|
877
|
+
);
|
|
878
|
+
|
|
879
|
+
// src/icons/RefreshIcon.tsx
|
|
880
|
+
var import_jsx_runtime34 = require("react/jsx-runtime");
|
|
881
|
+
var RefreshIcon = createIcon(
|
|
882
|
+
"RefreshIcon",
|
|
883
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" })
|
|
884
|
+
);
|
|
885
|
+
|
|
886
|
+
// src/icons/EyeIcon.tsx
|
|
887
|
+
var import_jsx_runtime35 = require("react/jsx-runtime");
|
|
888
|
+
var EyeIcon = createIcon(
|
|
889
|
+
"EyeIcon",
|
|
890
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z" })
|
|
891
|
+
);
|
|
892
|
+
|
|
893
|
+
// src/icons/EyeOffIcon.tsx
|
|
894
|
+
var import_jsx_runtime36 = require("react/jsx-runtime");
|
|
895
|
+
var EyeOffIcon = createIcon(
|
|
896
|
+
"EyeOffIcon",
|
|
897
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21" })
|
|
898
|
+
);
|
|
899
|
+
|
|
900
|
+
// src/icons/PlayIcon.tsx
|
|
901
|
+
var import_jsx_runtime37 = require("react/jsx-runtime");
|
|
902
|
+
var PlayIcon = createIcon(
|
|
903
|
+
"PlayIcon",
|
|
904
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)("path", { d: "M8 5v14l11-7z" }),
|
|
905
|
+
true
|
|
906
|
+
);
|
|
907
|
+
|
|
908
|
+
// src/icons/PauseIcon.tsx
|
|
909
|
+
var import_jsx_runtime38 = require("react/jsx-runtime");
|
|
910
|
+
var PauseIcon = createIcon(
|
|
911
|
+
"PauseIcon",
|
|
912
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
913
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("rect", { x: "6", y: "4", width: "4", height: "16", rx: "1" }),
|
|
914
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("rect", { x: "14", y: "4", width: "4", height: "16", rx: "1" })
|
|
915
|
+
] }),
|
|
916
|
+
true
|
|
917
|
+
);
|
|
918
|
+
|
|
919
|
+
// src/icons/StopIcon.tsx
|
|
920
|
+
var import_jsx_runtime39 = require("react/jsx-runtime");
|
|
921
|
+
var StopIcon = createIcon(
|
|
922
|
+
"StopIcon",
|
|
923
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M21 12a9 9 0 11-18 0 9 9 0 0118 0z" })
|
|
924
|
+
);
|
|
925
|
+
|
|
926
|
+
// src/icons/SkipBackIcon.tsx
|
|
927
|
+
var import_jsx_runtime40 = require("react/jsx-runtime");
|
|
928
|
+
var SkipBackIcon = createIcon(
|
|
929
|
+
"SkipBackIcon",
|
|
930
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_jsx_runtime40.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12.066 11.2a1 1 0 000 1.6l5.334 4A1 1 0 0019 16V8a1 1 0 00-1.6-.8l-5.333 4zM4.066 11.2a1 1 0 000 1.6l5.334 4A1 1 0 0011 16V8a1 1 0 00-1.6-.8l-5.334 4z" }) }),
|
|
931
|
+
false
|
|
932
|
+
);
|
|
933
|
+
|
|
934
|
+
// src/icons/SkipForwardIcon.tsx
|
|
935
|
+
var import_jsx_runtime41 = require("react/jsx-runtime");
|
|
936
|
+
var SkipForwardIcon = createIcon(
|
|
937
|
+
"SkipForwardIcon",
|
|
938
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_jsx_runtime41.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M11.933 12.8a1 1 0 000-1.6L6.6 7.2A1 1 0 005 8v8a1 1 0 001.6.8l5.333-4zM19.933 12.8a1 1 0 000-1.6l-5.333-4A1 1 0 0013 8v8a1 1 0 001.6.8l5.333-4z" }) }),
|
|
939
|
+
false
|
|
940
|
+
);
|
|
941
|
+
|
|
942
|
+
// src/icons/VolumeUpIcon.tsx
|
|
943
|
+
var import_jsx_runtime42 = require("react/jsx-runtime");
|
|
944
|
+
var VolumeUpIcon = createIcon(
|
|
945
|
+
"VolumeUpIcon",
|
|
946
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_jsx_runtime42.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15.536 8.464a5 5 0 010 7.072m2.828-9.9a9 9 0 010 12.728M5.586 15H4a1 1 0 01-1-1v-4a1 1 0 011-1h1.586l4.707-4.707C10.923 3.663 12 4.109 12 5v14c0 .891-1.077 1.337-1.707.707L5.586 15z" }) }),
|
|
947
|
+
false
|
|
948
|
+
);
|
|
949
|
+
|
|
950
|
+
// src/icons/VolumeOffIcon.tsx
|
|
951
|
+
var import_jsx_runtime43 = require("react/jsx-runtime");
|
|
952
|
+
var VolumeOffIcon = createIcon(
|
|
953
|
+
"VolumeOffIcon",
|
|
954
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_jsx_runtime43.Fragment, { children: [
|
|
955
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5.586 15H4a1 1 0 01-1-1v-4a1 1 0 011-1h1.586l4.707-4.707C10.923 3.663 12 4.109 12 5v14c0 .891-1.077 1.337-1.707.707L5.586 15z", clipRule: "evenodd" }),
|
|
956
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M17 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2" })
|
|
957
|
+
] }),
|
|
958
|
+
false
|
|
756
959
|
);
|
|
757
960
|
|
|
758
961
|
// src/icons/MailIcon.tsx
|
|
759
|
-
var
|
|
962
|
+
var import_jsx_runtime44 = require("react/jsx-runtime");
|
|
760
963
|
var MailIcon = createIcon(
|
|
761
964
|
"MailIcon",
|
|
762
|
-
/* @__PURE__ */ (0,
|
|
965
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" })
|
|
966
|
+
);
|
|
967
|
+
|
|
968
|
+
// src/icons/ChatIcon.tsx
|
|
969
|
+
var import_jsx_runtime45 = require("react/jsx-runtime");
|
|
970
|
+
var ChatIcon = createIcon(
|
|
971
|
+
"ChatIcon",
|
|
972
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" })
|
|
763
973
|
);
|
|
764
974
|
|
|
765
975
|
// src/icons/StarIcon.tsx
|
|
766
|
-
var
|
|
976
|
+
var import_jsx_runtime46 = require("react/jsx-runtime");
|
|
767
977
|
var StarIcon = createIcon(
|
|
768
978
|
"StarIcon",
|
|
769
|
-
/* @__PURE__ */ (0,
|
|
979
|
+
/* @__PURE__ */ (0, import_jsx_runtime46.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z" })
|
|
770
980
|
);
|
|
771
981
|
|
|
772
982
|
// src/icons/HeartIcon.tsx
|
|
773
|
-
var
|
|
983
|
+
var import_jsx_runtime47 = require("react/jsx-runtime");
|
|
774
984
|
var HeartIcon = createIcon(
|
|
775
985
|
"HeartIcon",
|
|
776
|
-
/* @__PURE__ */ (0,
|
|
777
|
-
);
|
|
778
|
-
|
|
779
|
-
// src/icons/DownloadIcon.tsx
|
|
780
|
-
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
781
|
-
var DownloadIcon = createIcon(
|
|
782
|
-
"DownloadIcon",
|
|
783
|
-
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4" })
|
|
784
|
-
);
|
|
785
|
-
|
|
786
|
-
// src/icons/UploadIcon.tsx
|
|
787
|
-
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
788
|
-
var UploadIcon = createIcon(
|
|
789
|
-
"UploadIcon",
|
|
790
|
-
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12" })
|
|
986
|
+
/* @__PURE__ */ (0, import_jsx_runtime47.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" })
|
|
791
987
|
);
|
|
792
988
|
|
|
793
989
|
// src/icons/CameraIcon.tsx
|
|
794
|
-
var
|
|
990
|
+
var import_jsx_runtime48 = require("react/jsx-runtime");
|
|
795
991
|
var CameraIcon = createIcon(
|
|
796
992
|
"CameraIcon",
|
|
797
|
-
/* @__PURE__ */ (0,
|
|
798
|
-
/* @__PURE__ */ (0,
|
|
799
|
-
/* @__PURE__ */ (0,
|
|
993
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(import_jsx_runtime48.Fragment, { children: [
|
|
994
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z" }),
|
|
995
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 13a3 3 0 11-6 0 3 3 0 016 0z" })
|
|
800
996
|
] })
|
|
801
997
|
);
|
|
802
998
|
|
|
999
|
+
// src/icons/CalendarIcon.tsx
|
|
1000
|
+
var import_jsx_runtime49 = require("react/jsx-runtime");
|
|
1001
|
+
var CalendarIcon = createIcon(
|
|
1002
|
+
"CalendarIcon",
|
|
1003
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" })
|
|
1004
|
+
);
|
|
1005
|
+
|
|
1006
|
+
// src/icons/BookIcon.tsx
|
|
1007
|
+
var import_jsx_runtime50 = require("react/jsx-runtime");
|
|
1008
|
+
var BookIcon = createIcon(
|
|
1009
|
+
"BookIcon",
|
|
1010
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253" })
|
|
1011
|
+
);
|
|
1012
|
+
|
|
1013
|
+
// src/icons/FileIcon.tsx
|
|
1014
|
+
var import_jsx_runtime51 = require("react/jsx-runtime");
|
|
1015
|
+
var FileIcon = createIcon(
|
|
1016
|
+
"FileIcon",
|
|
1017
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z" })
|
|
1018
|
+
);
|
|
1019
|
+
|
|
1020
|
+
// src/icons/FolderIcon.tsx
|
|
1021
|
+
var import_jsx_runtime52 = require("react/jsx-runtime");
|
|
1022
|
+
var FolderIcon = createIcon(
|
|
1023
|
+
"FolderIcon",
|
|
1024
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z" })
|
|
1025
|
+
);
|
|
1026
|
+
|
|
1027
|
+
// src/icons/ImageIcon.tsx
|
|
1028
|
+
var import_jsx_runtime53 = require("react/jsx-runtime");
|
|
1029
|
+
var ImageIcon = createIcon(
|
|
1030
|
+
"ImageIcon",
|
|
1031
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z" })
|
|
1032
|
+
);
|
|
1033
|
+
|
|
1034
|
+
// src/icons/CodeIcon.tsx
|
|
1035
|
+
var import_jsx_runtime54 = require("react/jsx-runtime");
|
|
1036
|
+
var CodeIcon = createIcon(
|
|
1037
|
+
"CodeIcon",
|
|
1038
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4" })
|
|
1039
|
+
);
|
|
1040
|
+
|
|
1041
|
+
// src/icons/TerminalIcon.tsx
|
|
1042
|
+
var import_jsx_runtime55 = require("react/jsx-runtime");
|
|
1043
|
+
var TerminalIcon = createIcon(
|
|
1044
|
+
"TerminalIcon",
|
|
1045
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" })
|
|
1046
|
+
);
|
|
1047
|
+
|
|
1048
|
+
// src/icons/DatabaseIcon.tsx
|
|
1049
|
+
var import_jsx_runtime56 = require("react/jsx-runtime");
|
|
1050
|
+
var DatabaseIcon = createIcon(
|
|
1051
|
+
"DatabaseIcon",
|
|
1052
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4" })
|
|
1053
|
+
);
|
|
1054
|
+
|
|
1055
|
+
// src/icons/CloudIcon.tsx
|
|
1056
|
+
var import_jsx_runtime57 = require("react/jsx-runtime");
|
|
1057
|
+
var CloudIcon = createIcon(
|
|
1058
|
+
"CloudIcon",
|
|
1059
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 15a4 4 0 004 4h9a5 5 0 10-.1-9.999 5.002 5.002 0 10-9.78 2.096A4.001 4.001 0 003 15z" })
|
|
1060
|
+
);
|
|
1061
|
+
|
|
1062
|
+
// src/icons/PlugIcon.tsx
|
|
1063
|
+
var import_jsx_runtime58 = require("react/jsx-runtime");
|
|
1064
|
+
var PlugIcon = createIcon(
|
|
1065
|
+
"PlugIcon",
|
|
1066
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M13 10V3L4 14h7v7l9-11h-7z" })
|
|
1067
|
+
);
|
|
1068
|
+
|
|
1069
|
+
// src/icons/KeyIcon.tsx
|
|
1070
|
+
var import_jsx_runtime59 = require("react/jsx-runtime");
|
|
1071
|
+
var KeyIcon = createIcon(
|
|
1072
|
+
"KeyIcon",
|
|
1073
|
+
/* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 7a2 2 0 012 2m4 0a6 6 0 01-7.743 5.743L11 17H9v2H7v2H4a1 1 0 01-1-1v-2.586a1 1 0 01.293-.707l5.964-5.964A6 6 0 1121 9z" })
|
|
1074
|
+
);
|
|
1075
|
+
|
|
803
1076
|
// src/icons/LockIcon.tsx
|
|
804
|
-
var
|
|
1077
|
+
var import_jsx_runtime60 = require("react/jsx-runtime");
|
|
805
1078
|
var LockIcon = createIcon(
|
|
806
1079
|
"LockIcon",
|
|
807
|
-
/* @__PURE__ */ (0,
|
|
1080
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z" })
|
|
808
1081
|
);
|
|
809
1082
|
|
|
810
|
-
// src/icons/
|
|
811
|
-
var
|
|
812
|
-
var
|
|
813
|
-
"
|
|
814
|
-
/* @__PURE__ */ (0,
|
|
1083
|
+
// src/icons/ShieldIcon.tsx
|
|
1084
|
+
var import_jsx_runtime61 = require("react/jsx-runtime");
|
|
1085
|
+
var ShieldIcon = createIcon(
|
|
1086
|
+
"ShieldIcon",
|
|
1087
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z" })
|
|
1088
|
+
);
|
|
1089
|
+
|
|
1090
|
+
// src/icons/SparklesIcon.tsx
|
|
1091
|
+
var import_jsx_runtime62 = require("react/jsx-runtime");
|
|
1092
|
+
var SparklesIcon = createIcon(
|
|
1093
|
+
"SparklesIcon",
|
|
1094
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 3v4M3 5h4M6 17v4m-2-2h4m5-16l2.286 6.857L21 12l-5.714 2.143L13 21l-2.286-6.857L5 12l5.714-2.143L13 3z" })
|
|
1095
|
+
);
|
|
1096
|
+
|
|
1097
|
+
// src/icons/BrainIcon.tsx
|
|
1098
|
+
var import_jsx_runtime63 = require("react/jsx-runtime");
|
|
1099
|
+
var BrainIcon = createIcon(
|
|
1100
|
+
"BrainIcon",
|
|
1101
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z" })
|
|
1102
|
+
);
|
|
1103
|
+
|
|
1104
|
+
// src/icons/GlobeIcon.tsx
|
|
1105
|
+
var import_jsx_runtime64 = require("react/jsx-runtime");
|
|
1106
|
+
var GlobeIcon = createIcon(
|
|
1107
|
+
"GlobeIcon",
|
|
1108
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3.055 11H5a2 2 0 012 2v1a2 2 0 002 2 2 2 0 012 2v2.945M8 3.935V5.5A2.5 2.5 0 0010.5 8h.5a2 2 0 012 2 2 2 0 104 0 2 2 0 012-2h1.064M15 20.488V18a2 2 0 012-2h3.064M21 12a9 9 0 11-18 0 9 9 0 0118 0z" })
|
|
1109
|
+
);
|
|
1110
|
+
|
|
1111
|
+
// src/icons/BeakerIcon.tsx
|
|
1112
|
+
var import_jsx_runtime65 = require("react/jsx-runtime");
|
|
1113
|
+
var BeakerIcon = createIcon(
|
|
1114
|
+
"BeakerIcon",
|
|
1115
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19.428 15.428a2 2 0 00-1.022-.547l-2.387-.477a6 6 0 00-3.86.517l-.318.158a6 6 0 01-3.86.517L6.05 15.21a2 2 0 00-1.806.547M8 4h8l-1 1v5.172a2 2 0 00.586 1.414l5 5c1.26 1.26.367 3.414-1.415 3.414H4.828c-1.782 0-2.674-2.154-1.414-3.414l5-5A2 2 0 009 10.172V5L8 4z" })
|
|
815
1116
|
);
|
|
816
1117
|
|
|
817
1118
|
// src/icons/GoogleIcon.tsx
|
|
818
|
-
var
|
|
1119
|
+
var import_jsx_runtime66 = require("react/jsx-runtime");
|
|
819
1120
|
var GoogleIcon = createIcon(
|
|
820
1121
|
"GoogleIcon",
|
|
821
|
-
/* @__PURE__ */ (0,
|
|
1122
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)("path", { d: "M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z" }),
|
|
822
1123
|
true
|
|
823
1124
|
);
|
|
824
1125
|
|
|
825
1126
|
// src/icons/GitHubIcon.tsx
|
|
826
|
-
var
|
|
1127
|
+
var import_jsx_runtime67 = require("react/jsx-runtime");
|
|
827
1128
|
var GitHubIcon = createIcon(
|
|
828
1129
|
"GitHubIcon",
|
|
829
|
-
/* @__PURE__ */ (0,
|
|
1130
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)("path", { d: "M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" }),
|
|
830
1131
|
true
|
|
831
1132
|
);
|
|
832
1133
|
|
|
833
1134
|
// src/icons/TwitterIcon.tsx
|
|
834
|
-
var
|
|
1135
|
+
var import_jsx_runtime68 = require("react/jsx-runtime");
|
|
835
1136
|
var TwitterIcon = createIcon(
|
|
836
1137
|
"TwitterIcon",
|
|
837
|
-
/* @__PURE__ */ (0,
|
|
1138
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsx)("path", { d: "M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" }),
|
|
838
1139
|
true
|
|
839
1140
|
);
|
|
840
1141
|
|
|
841
1142
|
// src/icons/FacebookIcon.tsx
|
|
842
|
-
var
|
|
1143
|
+
var import_jsx_runtime69 = require("react/jsx-runtime");
|
|
843
1144
|
var FacebookIcon = createIcon(
|
|
844
1145
|
"FacebookIcon",
|
|
845
|
-
/* @__PURE__ */ (0,
|
|
1146
|
+
/* @__PURE__ */ (0, import_jsx_runtime69.jsx)("path", { d: "M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z" }),
|
|
846
1147
|
true
|
|
847
1148
|
);
|
|
848
1149
|
|
|
849
1150
|
// src/icons/AppleIcon.tsx
|
|
850
|
-
var
|
|
1151
|
+
var import_jsx_runtime70 = require("react/jsx-runtime");
|
|
851
1152
|
var AppleIcon = createIcon(
|
|
852
1153
|
"AppleIcon",
|
|
853
|
-
/* @__PURE__ */ (0,
|
|
1154
|
+
/* @__PURE__ */ (0, import_jsx_runtime70.jsx)("path", { d: "M17.05 20.28c-.98.95-2.05.88-3.08.4-1.09-.5-2.08-.48-3.24 0-1.44.62-2.2.44-3.06-.4C2.79 15.25 3.51 7.59 9.05 7.31c1.35.07 2.29.74 3.08.8 1.18-.24 2.31-.93 3.57-.84 1.51.12 2.65.72 3.4 1.8-3.12 1.87-2.38 5.98.48 7.13-.57 1.5-1.31 2.99-2.54 4.09l.01-.01zM12.03 7.25c-.15-2.23 1.66-4.07 3.74-4.25.29 2.58-2.34 4.5-3.74 4.25z" }),
|
|
854
1155
|
true
|
|
855
1156
|
);
|
|
856
1157
|
|
|
857
1158
|
// src/icons/LinkedInIcon.tsx
|
|
858
|
-
var
|
|
1159
|
+
var import_jsx_runtime71 = require("react/jsx-runtime");
|
|
859
1160
|
var LinkedInIcon = createIcon(
|
|
860
1161
|
"LinkedInIcon",
|
|
861
|
-
/* @__PURE__ */ (0,
|
|
1162
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsx)("path", { d: "M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" }),
|
|
862
1163
|
true
|
|
863
1164
|
);
|
|
864
1165
|
|
|
865
1166
|
// src/icons/YouTubeIcon.tsx
|
|
866
|
-
var
|
|
1167
|
+
var import_jsx_runtime72 = require("react/jsx-runtime");
|
|
867
1168
|
var YouTubeIcon = createIcon(
|
|
868
1169
|
"YouTubeIcon",
|
|
869
|
-
/* @__PURE__ */ (0,
|
|
1170
|
+
/* @__PURE__ */ (0, import_jsx_runtime72.jsx)("path", { d: "M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z" }),
|
|
870
1171
|
true
|
|
871
1172
|
);
|
|
872
1173
|
|
|
873
1174
|
// src/icons/SlackIcon.tsx
|
|
874
|
-
var
|
|
1175
|
+
var import_jsx_runtime73 = require("react/jsx-runtime");
|
|
875
1176
|
var SlackIcon = createIcon(
|
|
876
1177
|
"SlackIcon",
|
|
877
|
-
/* @__PURE__ */ (0,
|
|
1178
|
+
/* @__PURE__ */ (0, import_jsx_runtime73.jsx)("path", { d: "M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z" }),
|
|
878
1179
|
true
|
|
879
1180
|
);
|
|
880
1181
|
|
|
881
1182
|
// src/components/AppShell.tsx
|
|
882
|
-
var
|
|
1183
|
+
var import_jsx_runtime74 = require("react/jsx-runtime");
|
|
883
1184
|
var widthClasses2 = {
|
|
884
1185
|
sm: "w-48",
|
|
885
1186
|
md: "w-64",
|
|
@@ -909,60 +1210,60 @@ var AppShell = ({
|
|
|
909
1210
|
const widthClass = widthClasses2[navbarWidth];
|
|
910
1211
|
const breakpoint = breakpointClasses[navbarBreakpoint];
|
|
911
1212
|
if (!responsive && navbar) {
|
|
912
|
-
return /* @__PURE__ */ (0,
|
|
913
|
-
header && /* @__PURE__ */ (0,
|
|
914
|
-
/* @__PURE__ */ (0,
|
|
915
|
-
/* @__PURE__ */ (0,
|
|
916
|
-
/* @__PURE__ */ (0,
|
|
1213
|
+
return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: `min-h-screen flex flex-col ${className}`, children: [
|
|
1214
|
+
header && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { className: "w-full", children: header }),
|
|
1215
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "flex flex-1", children: [
|
|
1216
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsx)("aside", { className: `${widthClass} bg-white dark:bg-gray-800 border-r border-gray-200 dark:border-gray-700 h-full overflow-y-auto`, children: navbar.content }),
|
|
1217
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsx)("main", { className: "flex-1 overflow-y-auto", children })
|
|
917
1218
|
] })
|
|
918
1219
|
] });
|
|
919
1220
|
}
|
|
920
1221
|
if (!responsive) {
|
|
921
|
-
return /* @__PURE__ */ (0,
|
|
922
|
-
header && /* @__PURE__ */ (0,
|
|
923
|
-
/* @__PURE__ */ (0,
|
|
1222
|
+
return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: `min-h-screen flex flex-col ${className}`, children: [
|
|
1223
|
+
header && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { className: "w-full", children: header }),
|
|
1224
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsx)("main", { className: "flex-1 overflow-y-auto", children })
|
|
924
1225
|
] });
|
|
925
1226
|
}
|
|
926
1227
|
if (navbar && navbarPosition === "top") {
|
|
927
1228
|
const mobileMenuClass = navbarBreakpoint === "sm" ? "sm:hidden" : navbarBreakpoint === "md" ? "md:hidden" : navbarBreakpoint === "lg" ? "lg:hidden" : "xl:hidden";
|
|
928
1229
|
const desktopNavClass = navbarBreakpoint === "sm" ? "sm:flex" : navbarBreakpoint === "md" ? "md:flex" : navbarBreakpoint === "lg" ? "lg:flex" : "xl:flex";
|
|
929
|
-
return /* @__PURE__ */ (0,
|
|
930
|
-
/* @__PURE__ */ (0,
|
|
931
|
-
/* @__PURE__ */ (0,
|
|
932
|
-
/* @__PURE__ */ (0,
|
|
933
|
-
/* @__PURE__ */ (0,
|
|
1230
|
+
return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: `min-h-screen flex flex-col bg-gray-50 dark:bg-gray-900 ${className}`, children: [
|
|
1231
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsx)("nav", { className: "sticky top-0 z-30 bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700", children: /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "flex justify-between items-center h-16", children: [
|
|
1232
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { className: "flex items-center", children: navbarLogo ? /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { children: navbarLogo }) : navbarTitle ? /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "text-xl font-bold text-gray-900 dark:text-gray-100", children: navbarTitle }) : null }),
|
|
1233
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { className: `hidden ${desktopNavClass} items-center gap-6`, children: navbar.content }),
|
|
1234
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
|
|
934
1235
|
"button",
|
|
935
1236
|
{
|
|
936
1237
|
className: `${mobileMenuClass} p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors`,
|
|
937
1238
|
onClick: () => setIsMobileNavbarOpen(!isMobileNavbarOpen),
|
|
938
1239
|
"aria-label": "Toggle menu",
|
|
939
|
-
children: /* @__PURE__ */ (0,
|
|
1240
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(MenuIcon, { size: "md" })
|
|
940
1241
|
}
|
|
941
1242
|
)
|
|
942
1243
|
] }) }) }),
|
|
943
|
-
header && /* @__PURE__ */ (0,
|
|
944
|
-
isMobileNavbarOpen && /* @__PURE__ */ (0,
|
|
945
|
-
/* @__PURE__ */ (0,
|
|
1244
|
+
header && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { className: "w-full", children: header }),
|
|
1245
|
+
isMobileNavbarOpen && /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(import_jsx_runtime74.Fragment, { children: [
|
|
1246
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
|
|
946
1247
|
"div",
|
|
947
1248
|
{
|
|
948
1249
|
className: `${mobileMenuClass} fixed inset-0 z-40 bg-black/60 backdrop-blur-sm animate-in fade-in duration-200`,
|
|
949
1250
|
onClick: () => setIsMobileNavbarOpen(false)
|
|
950
1251
|
}
|
|
951
1252
|
),
|
|
952
|
-
/* @__PURE__ */ (0,
|
|
953
|
-
/* @__PURE__ */ (0,
|
|
954
|
-
navbarLogo ? /* @__PURE__ */ (0,
|
|
955
|
-
/* @__PURE__ */ (0,
|
|
1253
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: `${mobileMenuClass} fixed left-0 top-0 bottom-0 z-50 w-64 bg-white dark:bg-gray-800 shadow-2xl animate-in slide-in-from-left duration-300`, children: [
|
|
1254
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "p-4 border-b border-gray-200 dark:border-gray-700 flex items-center justify-between", children: [
|
|
1255
|
+
navbarLogo ? /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { children: navbarLogo }) : navbarTitle ? /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "text-xl font-bold text-gray-900 dark:text-gray-100", children: navbarTitle }) : null,
|
|
1256
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
|
|
956
1257
|
"button",
|
|
957
1258
|
{
|
|
958
1259
|
className: "p-1 rounded hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors",
|
|
959
1260
|
onClick: () => setIsMobileNavbarOpen(false),
|
|
960
1261
|
"aria-label": "Close menu",
|
|
961
|
-
children: /* @__PURE__ */ (0,
|
|
1262
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("svg", { className: "w-6 h-6", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
|
|
962
1263
|
}
|
|
963
1264
|
)
|
|
964
1265
|
] }),
|
|
965
|
-
/* @__PURE__ */ (0,
|
|
1266
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
|
|
966
1267
|
"div",
|
|
967
1268
|
{
|
|
968
1269
|
className: "p-4 flex flex-col gap-4",
|
|
@@ -972,7 +1273,7 @@ var AppShell = ({
|
|
|
972
1273
|
)
|
|
973
1274
|
] })
|
|
974
1275
|
] }),
|
|
975
|
-
/* @__PURE__ */ (0,
|
|
1276
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsx)("main", { className: "flex-1 overflow-y-auto", children })
|
|
976
1277
|
] });
|
|
977
1278
|
}
|
|
978
1279
|
if (navbar) {
|
|
@@ -980,44 +1281,44 @@ var AppShell = ({
|
|
|
980
1281
|
const desktopNavbarClass = navbarBreakpoint === "sm" ? "sm:block" : navbarBreakpoint === "md" ? "md:block" : navbarBreakpoint === "lg" ? "lg:block" : "xl:block";
|
|
981
1282
|
const mobileDrawerClass = navbarBreakpoint === "sm" ? "sm:hidden" : navbarBreakpoint === "md" ? "md:hidden" : navbarBreakpoint === "lg" ? "lg:hidden" : "xl:hidden";
|
|
982
1283
|
const sidebarWidthClass = navbarWidth === "sm" ? "w-48" : navbarWidth === "lg" ? "w-80" : "w-64";
|
|
983
|
-
return /* @__PURE__ */ (0,
|
|
984
|
-
/* @__PURE__ */ (0,
|
|
985
|
-
navbarLogo ? /* @__PURE__ */ (0,
|
|
986
|
-
/* @__PURE__ */ (0,
|
|
1284
|
+
return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: `min-h-screen flex flex-col bg-gray-50 dark:bg-gray-900 ${className}`, children: [
|
|
1285
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: `${mobileHeaderClass} sticky top-0 z-30 bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 px-4 py-3 flex items-center justify-between`, children: [
|
|
1286
|
+
navbarLogo ? /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { children: navbarLogo }) : navbarTitle ? /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "text-xl font-bold text-gray-900 dark:text-gray-100", children: navbarTitle }) : null,
|
|
1287
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
|
|
987
1288
|
"button",
|
|
988
1289
|
{
|
|
989
1290
|
className: "p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors",
|
|
990
1291
|
onClick: () => setIsMobileNavbarOpen(!isMobileNavbarOpen),
|
|
991
1292
|
"aria-label": "Toggle menu",
|
|
992
|
-
children: /* @__PURE__ */ (0,
|
|
1293
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(MenuIcon, { size: "md" })
|
|
993
1294
|
}
|
|
994
1295
|
)
|
|
995
1296
|
] }),
|
|
996
|
-
header && /* @__PURE__ */ (0,
|
|
997
|
-
/* @__PURE__ */ (0,
|
|
998
|
-
/* @__PURE__ */ (0,
|
|
999
|
-
isMobileNavbarOpen && /* @__PURE__ */ (0,
|
|
1000
|
-
/* @__PURE__ */ (0,
|
|
1297
|
+
header && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { className: "w-full", children: header }),
|
|
1298
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "flex flex-1 min-h-0", children: [
|
|
1299
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsx)("aside", { className: `hidden ${desktopNavbarClass} ${sidebarWidthClass} bg-white dark:bg-gray-800 border-r border-gray-200 dark:border-gray-700 overflow-y-auto shrink-0`, children: navbar.content }),
|
|
1300
|
+
isMobileNavbarOpen && /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(import_jsx_runtime74.Fragment, { children: [
|
|
1301
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
|
|
1001
1302
|
"div",
|
|
1002
1303
|
{
|
|
1003
1304
|
className: `${mobileDrawerClass} fixed inset-0 z-40 bg-black/60 backdrop-blur-sm animate-in fade-in duration-200`,
|
|
1004
1305
|
onClick: () => setIsMobileNavbarOpen(false)
|
|
1005
1306
|
}
|
|
1006
1307
|
),
|
|
1007
|
-
/* @__PURE__ */ (0,
|
|
1008
|
-
/* @__PURE__ */ (0,
|
|
1009
|
-
navbarLogo ? /* @__PURE__ */ (0,
|
|
1010
|
-
/* @__PURE__ */ (0,
|
|
1308
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: `${mobileDrawerClass} fixed left-0 top-0 bottom-0 z-50 w-64 bg-white dark:bg-gray-800 shadow-2xl animate-in slide-in-from-left duration-300`, children: [
|
|
1309
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "p-4 border-b border-gray-200 dark:border-gray-700 flex items-center justify-between", children: [
|
|
1310
|
+
navbarLogo ? /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { children: navbarLogo }) : navbarTitle ? /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "text-xl font-bold text-gray-900 dark:text-gray-100", children: navbarTitle }) : null,
|
|
1311
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
|
|
1011
1312
|
"button",
|
|
1012
1313
|
{
|
|
1013
1314
|
className: "p-1 rounded hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors",
|
|
1014
1315
|
onClick: () => setIsMobileNavbarOpen(false),
|
|
1015
1316
|
"aria-label": "Close menu",
|
|
1016
|
-
children: /* @__PURE__ */ (0,
|
|
1317
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("svg", { className: "w-6 h-6", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
|
|
1017
1318
|
}
|
|
1018
1319
|
)
|
|
1019
1320
|
] }),
|
|
1020
|
-
/* @__PURE__ */ (0,
|
|
1321
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
|
|
1021
1322
|
"div",
|
|
1022
1323
|
{
|
|
1023
1324
|
className: "overflow-y-auto h-[calc(100vh-73px)]",
|
|
@@ -1027,19 +1328,19 @@ var AppShell = ({
|
|
|
1027
1328
|
)
|
|
1028
1329
|
] })
|
|
1029
1330
|
] }),
|
|
1030
|
-
/* @__PURE__ */ (0,
|
|
1331
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsx)("main", { className: "flex-1 overflow-y-auto min-h-screen", children })
|
|
1031
1332
|
] })
|
|
1032
1333
|
] });
|
|
1033
1334
|
}
|
|
1034
|
-
return /* @__PURE__ */ (0,
|
|
1035
|
-
header && /* @__PURE__ */ (0,
|
|
1036
|
-
/* @__PURE__ */ (0,
|
|
1335
|
+
return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: `min-h-screen flex flex-col ${className}`, children: [
|
|
1336
|
+
header && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { className: "w-full", children: header }),
|
|
1337
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsx)("main", { className: "flex-1 overflow-y-auto", children })
|
|
1037
1338
|
] });
|
|
1038
1339
|
};
|
|
1039
1340
|
|
|
1040
1341
|
// src/components/Drawer.tsx
|
|
1041
1342
|
var import_react6 = require("react");
|
|
1042
|
-
var
|
|
1343
|
+
var import_jsx_runtime75 = require("react/jsx-runtime");
|
|
1043
1344
|
var sizeClasses3 = {
|
|
1044
1345
|
left: {
|
|
1045
1346
|
sm: "w-64",
|
|
@@ -1102,32 +1403,32 @@ var Drawer = ({
|
|
|
1102
1403
|
if (!isOpen) return null;
|
|
1103
1404
|
const sizeClass = sizeClasses3[position][size];
|
|
1104
1405
|
const positionClass = positionClasses[position];
|
|
1105
|
-
return /* @__PURE__ */ (0,
|
|
1106
|
-
/* @__PURE__ */ (0,
|
|
1406
|
+
return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(import_jsx_runtime75.Fragment, { children: [
|
|
1407
|
+
/* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
|
|
1107
1408
|
"div",
|
|
1108
1409
|
{
|
|
1109
1410
|
className: "fixed inset-0 z-40 bg-black/60 backdrop-blur-sm transition-all duration-200",
|
|
1110
1411
|
onClick: onClose
|
|
1111
1412
|
}
|
|
1112
1413
|
),
|
|
1113
|
-
/* @__PURE__ */ (0,
|
|
1414
|
+
/* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(
|
|
1114
1415
|
"div",
|
|
1115
1416
|
{
|
|
1116
1417
|
className: `fixed z-50 ${positionClass} ${sizeClass} bg-white dark:bg-gray-800 shadow-2xl overflow-hidden flex flex-col ${slideClasses[position]}`,
|
|
1117
1418
|
children: [
|
|
1118
|
-
(title || showCloseButton) && /* @__PURE__ */ (0,
|
|
1119
|
-
title && /* @__PURE__ */ (0,
|
|
1120
|
-
showCloseButton && /* @__PURE__ */ (0,
|
|
1419
|
+
(title || showCloseButton) && /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "flex items-center justify-between p-6 border-b border-gray-200 dark:border-gray-700", children: [
|
|
1420
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("h3", { className: "text-xl font-semibold text-gray-900 dark:text-gray-100", children: title }),
|
|
1421
|
+
showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
|
|
1121
1422
|
"button",
|
|
1122
1423
|
{
|
|
1123
1424
|
onClick: onClose,
|
|
1124
1425
|
className: "ml-auto text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 transition-colors",
|
|
1125
1426
|
"aria-label": "Close drawer",
|
|
1126
|
-
children: /* @__PURE__ */ (0,
|
|
1427
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("svg", { className: "w-6 h-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
|
|
1127
1428
|
}
|
|
1128
1429
|
)
|
|
1129
1430
|
] }),
|
|
1130
|
-
/* @__PURE__ */ (0,
|
|
1431
|
+
/* @__PURE__ */ (0, import_jsx_runtime75.jsx)("div", { className: "flex-1 p-6 overflow-y-auto", children })
|
|
1131
1432
|
]
|
|
1132
1433
|
}
|
|
1133
1434
|
)
|
|
@@ -1136,7 +1437,7 @@ var Drawer = ({
|
|
|
1136
1437
|
|
|
1137
1438
|
// src/components/TextInput.tsx
|
|
1138
1439
|
var import_react7 = require("react");
|
|
1139
|
-
var
|
|
1440
|
+
var import_jsx_runtime76 = require("react/jsx-runtime");
|
|
1140
1441
|
var sizeClasses4 = {
|
|
1141
1442
|
sm: "px-3 py-1.5 text-sm",
|
|
1142
1443
|
md: "px-4 py-2.5 text-base",
|
|
@@ -1162,11 +1463,11 @@ var TextInput = (0, import_react7.forwardRef)(
|
|
|
1162
1463
|
const disabledStyles = disabled ? "opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900" : "";
|
|
1163
1464
|
const widthStyle = fullWidth ? "w-full" : "";
|
|
1164
1465
|
const paddingWithIcon = leftIcon ? "pl-10" : rightIcon ? "pr-10" : "";
|
|
1165
|
-
return /* @__PURE__ */ (0,
|
|
1166
|
-
label && /* @__PURE__ */ (0,
|
|
1167
|
-
/* @__PURE__ */ (0,
|
|
1168
|
-
leftIcon && /* @__PURE__ */ (0,
|
|
1169
|
-
/* @__PURE__ */ (0,
|
|
1466
|
+
return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: `${widthStyle} ${className}`, children: [
|
|
1467
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: label }),
|
|
1468
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "relative", children: [
|
|
1469
|
+
leftIcon && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "absolute left-3 top-1/2 transform -translate-y-1/2 text-gray-400 dark:text-gray-500", children: leftIcon }),
|
|
1470
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
|
|
1170
1471
|
"input",
|
|
1171
1472
|
{
|
|
1172
1473
|
ref,
|
|
@@ -1175,10 +1476,10 @@ var TextInput = (0, import_react7.forwardRef)(
|
|
|
1175
1476
|
...props
|
|
1176
1477
|
}
|
|
1177
1478
|
),
|
|
1178
|
-
rightIcon && /* @__PURE__ */ (0,
|
|
1479
|
+
rightIcon && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 dark:text-gray-500", children: rightIcon })
|
|
1179
1480
|
] }),
|
|
1180
|
-
error && /* @__PURE__ */ (0,
|
|
1181
|
-
helperText && !error && /* @__PURE__ */ (0,
|
|
1481
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error }),
|
|
1482
|
+
helperText && !error && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("p", { className: "mt-1 text-sm text-gray-500 dark:text-gray-400", children: helperText })
|
|
1182
1483
|
] });
|
|
1183
1484
|
}
|
|
1184
1485
|
);
|
|
@@ -1186,7 +1487,7 @@ TextInput.displayName = "TextInput";
|
|
|
1186
1487
|
|
|
1187
1488
|
// src/components/NumberInput.tsx
|
|
1188
1489
|
var import_react8 = require("react");
|
|
1189
|
-
var
|
|
1490
|
+
var import_jsx_runtime77 = require("react/jsx-runtime");
|
|
1190
1491
|
var sizeClasses5 = {
|
|
1191
1492
|
sm: "px-3 py-1.5 text-sm",
|
|
1192
1493
|
md: "px-4 py-2.5 text-base",
|
|
@@ -1261,10 +1562,10 @@ var NumberInput = ({
|
|
|
1261
1562
|
const widthStyle = fullWidth ? "w-full" : "";
|
|
1262
1563
|
const paddingWithControls = !hideControls ? "pr-8" : "";
|
|
1263
1564
|
const displayValue = value !== void 0 ? value.toString() : "";
|
|
1264
|
-
return /* @__PURE__ */ (0,
|
|
1265
|
-
label && /* @__PURE__ */ (0,
|
|
1266
|
-
/* @__PURE__ */ (0,
|
|
1267
|
-
/* @__PURE__ */ (0,
|
|
1565
|
+
return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: `${widthStyle} ${className}`, children: [
|
|
1566
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: label }),
|
|
1567
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "relative", children: [
|
|
1568
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
|
|
1268
1569
|
"input",
|
|
1269
1570
|
{
|
|
1270
1571
|
ref: inputRef,
|
|
@@ -1282,8 +1583,8 @@ var NumberInput = ({
|
|
|
1282
1583
|
className: `${baseStyles} ${sizeStyle} ${errorStyles} ${disabledStyles} ${paddingWithControls} [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none`.trim()
|
|
1283
1584
|
}
|
|
1284
1585
|
),
|
|
1285
|
-
!hideControls && /* @__PURE__ */ (0,
|
|
1286
|
-
/* @__PURE__ */ (0,
|
|
1586
|
+
!hideControls && /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "absolute right-1 top-1/2 -translate-y-1/2 flex flex-col", children: [
|
|
1587
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
|
|
1287
1588
|
"button",
|
|
1288
1589
|
{
|
|
1289
1590
|
type: "button",
|
|
@@ -1291,10 +1592,10 @@ var NumberInput = ({
|
|
|
1291
1592
|
disabled: disabled || max !== void 0 && value !== void 0 && value >= max,
|
|
1292
1593
|
className: "px-2 py-0.5 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors disabled:opacity-30 disabled:cursor-not-allowed",
|
|
1293
1594
|
tabIndex: -1,
|
|
1294
|
-
children: /* @__PURE__ */ (0,
|
|
1595
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("svg", { className: "w-3 h-3 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 3, d: "M5 15l7-7 7 7" }) })
|
|
1295
1596
|
}
|
|
1296
1597
|
),
|
|
1297
|
-
/* @__PURE__ */ (0,
|
|
1598
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
|
|
1298
1599
|
"button",
|
|
1299
1600
|
{
|
|
1300
1601
|
type: "button",
|
|
@@ -1302,13 +1603,13 @@ var NumberInput = ({
|
|
|
1302
1603
|
disabled: disabled || min !== void 0 && value !== void 0 && value <= min,
|
|
1303
1604
|
className: "px-2 py-0.5 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors disabled:opacity-30 disabled:cursor-not-allowed",
|
|
1304
1605
|
tabIndex: -1,
|
|
1305
|
-
children: /* @__PURE__ */ (0,
|
|
1606
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("svg", { className: "w-3 h-3 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 3, d: "M19 9l-7 7-7-7" }) })
|
|
1306
1607
|
}
|
|
1307
1608
|
)
|
|
1308
1609
|
] })
|
|
1309
1610
|
] }),
|
|
1310
|
-
error && /* @__PURE__ */ (0,
|
|
1311
|
-
helperText && !error && /* @__PURE__ */ (0,
|
|
1611
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error }),
|
|
1612
|
+
helperText && !error && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("p", { className: "mt-1 text-sm text-gray-500 dark:text-gray-400", children: helperText })
|
|
1312
1613
|
] });
|
|
1313
1614
|
};
|
|
1314
1615
|
NumberInput.displayName = "NumberInput";
|
|
@@ -1316,7 +1617,7 @@ NumberInput.displayName = "NumberInput";
|
|
|
1316
1617
|
// src/components/ActionMenu.tsx
|
|
1317
1618
|
var import_react9 = require("react");
|
|
1318
1619
|
var import_react_dom = require("react-dom");
|
|
1319
|
-
var
|
|
1620
|
+
var import_jsx_runtime78 = require("react/jsx-runtime");
|
|
1320
1621
|
var ActionMenu = ({
|
|
1321
1622
|
items,
|
|
1322
1623
|
trigger,
|
|
@@ -1381,17 +1682,17 @@ var ActionMenu = ({
|
|
|
1381
1682
|
setIsOpen(false);
|
|
1382
1683
|
}
|
|
1383
1684
|
};
|
|
1384
|
-
const defaultTrigger = /* @__PURE__ */ (0,
|
|
1685
|
+
const defaultTrigger = /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
|
|
1385
1686
|
"button",
|
|
1386
1687
|
{
|
|
1387
1688
|
className: "p-2 rounded-md hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors",
|
|
1388
1689
|
"aria-label": "Open menu",
|
|
1389
|
-
children: /* @__PURE__ */ (0,
|
|
1690
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("svg", { className: "w-5 h-5 text-gray-600 dark:text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 5v.01M12 12v.01M12 19v.01M12 6a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2z" }) })
|
|
1390
1691
|
}
|
|
1391
1692
|
);
|
|
1392
1693
|
const menuBaseStyles = themeName === "minimalistic" ? "bg-black border-2 border-white" : "bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 shadow-lg";
|
|
1393
1694
|
const itemBaseStyles = themeName === "minimalistic" ? "text-white hover:bg-white hover:text-black transition-colors duration-200" : "text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors";
|
|
1394
|
-
const menu = isOpen && mounted && menuPosition ? /* @__PURE__ */ (0,
|
|
1695
|
+
const menu = isOpen && mounted && menuPosition ? /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
|
|
1395
1696
|
"div",
|
|
1396
1697
|
{
|
|
1397
1698
|
ref: menuRef,
|
|
@@ -1403,7 +1704,7 @@ var ActionMenu = ({
|
|
|
1403
1704
|
},
|
|
1404
1705
|
children: items.map((item, index) => {
|
|
1405
1706
|
if (item.type === "divider") {
|
|
1406
|
-
return /* @__PURE__ */ (0,
|
|
1707
|
+
return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
|
|
1407
1708
|
"div",
|
|
1408
1709
|
{
|
|
1409
1710
|
className: "my-1 border-t border-gray-200 dark:border-gray-700"
|
|
@@ -1411,15 +1712,15 @@ var ActionMenu = ({
|
|
|
1411
1712
|
index
|
|
1412
1713
|
);
|
|
1413
1714
|
}
|
|
1414
|
-
return /* @__PURE__ */ (0,
|
|
1715
|
+
return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(
|
|
1415
1716
|
"button",
|
|
1416
1717
|
{
|
|
1417
1718
|
onClick: () => handleItemClick(item),
|
|
1418
1719
|
disabled: item.disabled,
|
|
1419
1720
|
className: `w-full text-left px-4 py-3 flex items-center gap-3 ${itemBaseStyles} ${item.disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer"} ${item.variant === "danger" ? "text-red-600 dark:text-red-400 hover:bg-red-50 dark:hover:bg-red-900/20" : ""}`,
|
|
1420
1721
|
children: [
|
|
1421
|
-
item.icon && /* @__PURE__ */ (0,
|
|
1422
|
-
/* @__PURE__ */ (0,
|
|
1722
|
+
item.icon && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "flex-shrink-0", children: item.icon }),
|
|
1723
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "flex-1", children: item.label })
|
|
1423
1724
|
]
|
|
1424
1725
|
},
|
|
1425
1726
|
index
|
|
@@ -1427,14 +1728,14 @@ var ActionMenu = ({
|
|
|
1427
1728
|
})
|
|
1428
1729
|
}
|
|
1429
1730
|
) : null;
|
|
1430
|
-
return /* @__PURE__ */ (0,
|
|
1431
|
-
/* @__PURE__ */ (0,
|
|
1731
|
+
return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(import_jsx_runtime78.Fragment, { children: [
|
|
1732
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "relative inline-block", ref: triggerRef, children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { onClick: () => setIsOpen(!isOpen), children: trigger || defaultTrigger }) }),
|
|
1432
1733
|
mounted && (0, import_react_dom.createPortal)(menu, document.body)
|
|
1433
1734
|
] });
|
|
1434
1735
|
};
|
|
1435
1736
|
|
|
1436
1737
|
// src/components/Card.tsx
|
|
1437
|
-
var
|
|
1738
|
+
var import_jsx_runtime79 = require("react/jsx-runtime");
|
|
1438
1739
|
var paddingClasses = {
|
|
1439
1740
|
none: "",
|
|
1440
1741
|
sm: "p-4",
|
|
@@ -1451,7 +1752,7 @@ var Card = ({
|
|
|
1451
1752
|
const { theme } = useTheme();
|
|
1452
1753
|
const paddingClass = paddingClasses[padding];
|
|
1453
1754
|
const hoverClass = hover ? "hover:shadow-xl hover:scale-[1.02] hover:border-blue-400 dark:hover:border-blue-500 cursor-pointer transition-all duration-200 ease-in-out" : "";
|
|
1454
|
-
return /* @__PURE__ */ (0,
|
|
1755
|
+
return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
|
|
1455
1756
|
"div",
|
|
1456
1757
|
{
|
|
1457
1758
|
className: `bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 ${paddingClass} ${hoverClass} ${className}`,
|
|
@@ -1462,7 +1763,7 @@ var Card = ({
|
|
|
1462
1763
|
};
|
|
1463
1764
|
|
|
1464
1765
|
// src/components/Alert.tsx
|
|
1465
|
-
var
|
|
1766
|
+
var import_jsx_runtime80 = require("react/jsx-runtime");
|
|
1466
1767
|
var variantStyles = {
|
|
1467
1768
|
info: "bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800 text-blue-900 dark:text-blue-100",
|
|
1468
1769
|
success: "bg-green-50 dark:bg-green-900/20 border-green-200 dark:border-green-800 text-green-900 dark:text-green-100",
|
|
@@ -1485,24 +1786,24 @@ var Alert = ({
|
|
|
1485
1786
|
const { theme } = useTheme();
|
|
1486
1787
|
const variantClass = variantStyles[variant];
|
|
1487
1788
|
const iconClass = iconStyles[variant];
|
|
1488
|
-
return /* @__PURE__ */ (0,
|
|
1489
|
-
/* @__PURE__ */ (0,
|
|
1490
|
-
variant === "info" && /* @__PURE__ */ (0,
|
|
1491
|
-
variant === "success" && /* @__PURE__ */ (0,
|
|
1492
|
-
variant === "warning" && /* @__PURE__ */ (0,
|
|
1493
|
-
variant === "error" && /* @__PURE__ */ (0,
|
|
1789
|
+
return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: `rounded-lg border p-4 ${variantClass} ${className}`, role: "alert", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "flex items-start gap-3", children: [
|
|
1790
|
+
/* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: `flex-shrink-0 ${iconClass}`, children: [
|
|
1791
|
+
variant === "info" && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("svg", { className: "w-5 h-5", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("path", { fillRule: "evenodd", d: "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z", clipRule: "evenodd" }) }),
|
|
1792
|
+
variant === "success" && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("svg", { className: "w-5 h-5", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("path", { fillRule: "evenodd", d: "M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z", clipRule: "evenodd" }) }),
|
|
1793
|
+
variant === "warning" && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("svg", { className: "w-5 h-5", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("path", { fillRule: "evenodd", d: "M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z", clipRule: "evenodd" }) }),
|
|
1794
|
+
variant === "error" && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("svg", { className: "w-5 h-5", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("path", { fillRule: "evenodd", d: "M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z", clipRule: "evenodd" }) })
|
|
1494
1795
|
] }),
|
|
1495
|
-
/* @__PURE__ */ (0,
|
|
1496
|
-
title && /* @__PURE__ */ (0,
|
|
1497
|
-
/* @__PURE__ */ (0,
|
|
1796
|
+
/* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "flex-1", children: [
|
|
1797
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("h3", { className: "font-semibold mb-1", children: title }),
|
|
1798
|
+
/* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "text-sm", children })
|
|
1498
1799
|
] }),
|
|
1499
|
-
onClose && /* @__PURE__ */ (0,
|
|
1800
|
+
onClose && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
|
|
1500
1801
|
"button",
|
|
1501
1802
|
{
|
|
1502
1803
|
onClick: onClose,
|
|
1503
1804
|
className: `flex-shrink-0 ${iconClass} hover:opacity-70 transition-opacity`,
|
|
1504
1805
|
"aria-label": "Close alert",
|
|
1505
|
-
children: /* @__PURE__ */ (0,
|
|
1806
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("svg", { className: "w-5 h-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
|
|
1506
1807
|
}
|
|
1507
1808
|
)
|
|
1508
1809
|
] }) });
|
|
@@ -1510,14 +1811,14 @@ var Alert = ({
|
|
|
1510
1811
|
|
|
1511
1812
|
// src/components/Checkbox.tsx
|
|
1512
1813
|
var import_react10 = require("react");
|
|
1513
|
-
var
|
|
1814
|
+
var import_jsx_runtime81 = require("react/jsx-runtime");
|
|
1514
1815
|
var Checkbox = (0, import_react10.forwardRef)(
|
|
1515
1816
|
({ label, error, className = "", disabled, checked, ...props }, ref) => {
|
|
1516
1817
|
const { theme } = useTheme();
|
|
1517
|
-
return /* @__PURE__ */ (0,
|
|
1518
|
-
/* @__PURE__ */ (0,
|
|
1519
|
-
/* @__PURE__ */ (0,
|
|
1520
|
-
/* @__PURE__ */ (0,
|
|
1818
|
+
return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className, children: [
|
|
1819
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("label", { className: "flex items-center gap-2 cursor-pointer group", children: [
|
|
1820
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "relative inline-flex items-center", children: [
|
|
1821
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
|
|
1521
1822
|
"input",
|
|
1522
1823
|
{
|
|
1523
1824
|
ref,
|
|
@@ -1528,19 +1829,19 @@ var Checkbox = (0, import_react10.forwardRef)(
|
|
|
1528
1829
|
...props
|
|
1529
1830
|
}
|
|
1530
1831
|
),
|
|
1531
|
-
/* @__PURE__ */ (0,
|
|
1832
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: `w-4 h-4 border-2 rounded transition-all duration-200 flex items-center justify-center
|
|
1532
1833
|
${error ? "border-red-500 dark:border-red-500" : "border-gray-300 dark:border-gray-600"}
|
|
1533
1834
|
${disabled ? "opacity-50 cursor-not-allowed bg-gray-100 dark:bg-gray-800" : "peer-hover:border-gray-400 dark:peer-hover:border-gray-500"}
|
|
1534
1835
|
peer-checked:bg-blue-600 peer-checked:border-blue-600
|
|
1535
1836
|
peer-focus:ring-2 peer-focus:ring-blue-500 peer-focus:ring-offset-2
|
|
1536
|
-
`, children: /* @__PURE__ */ (0,
|
|
1837
|
+
`, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
|
|
1537
1838
|
"svg",
|
|
1538
1839
|
{
|
|
1539
1840
|
className: `w-3 h-3 text-white transition-opacity duration-200 ${checked ? "opacity-100" : "opacity-0"}`,
|
|
1540
1841
|
viewBox: "0 0 12 12",
|
|
1541
1842
|
fill: "none",
|
|
1542
1843
|
xmlns: "http://www.w3.org/2000/svg",
|
|
1543
|
-
children: /* @__PURE__ */ (0,
|
|
1844
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
|
|
1544
1845
|
"path",
|
|
1545
1846
|
{
|
|
1546
1847
|
d: "M10 3L4.5 8.5L2 6",
|
|
@@ -1553,9 +1854,9 @@ var Checkbox = (0, import_react10.forwardRef)(
|
|
|
1553
1854
|
}
|
|
1554
1855
|
) })
|
|
1555
1856
|
] }),
|
|
1556
|
-
label && /* @__PURE__ */ (0,
|
|
1857
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: `text-sm text-gray-700 dark:text-gray-300 ${disabled ? "opacity-50 cursor-not-allowed" : "group-hover:text-gray-900 dark:group-hover:text-gray-100"}`, children: label })
|
|
1557
1858
|
] }),
|
|
1558
|
-
error && /* @__PURE__ */ (0,
|
|
1859
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error })
|
|
1559
1860
|
] });
|
|
1560
1861
|
}
|
|
1561
1862
|
);
|
|
@@ -1563,7 +1864,7 @@ Checkbox.displayName = "Checkbox";
|
|
|
1563
1864
|
|
|
1564
1865
|
// src/components/Toggle.tsx
|
|
1565
1866
|
var import_react11 = require("react");
|
|
1566
|
-
var
|
|
1867
|
+
var import_jsx_runtime82 = require("react/jsx-runtime");
|
|
1567
1868
|
var Toggle = (0, import_react11.forwardRef)(
|
|
1568
1869
|
({ label, size = "md", className = "", disabled, checked, ...props }, ref) => {
|
|
1569
1870
|
const { theme } = useTheme();
|
|
@@ -1582,9 +1883,9 @@ var Toggle = (0, import_react11.forwardRef)(
|
|
|
1582
1883
|
}
|
|
1583
1884
|
};
|
|
1584
1885
|
const currentSize = toggleClasses[size];
|
|
1585
|
-
return /* @__PURE__ */ (0,
|
|
1586
|
-
/* @__PURE__ */ (0,
|
|
1587
|
-
/* @__PURE__ */ (0,
|
|
1886
|
+
return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("label", { className: `inline-flex items-center gap-3 cursor-pointer ${disabled ? "opacity-50 cursor-not-allowed" : ""} ${className}`, children: [
|
|
1887
|
+
/* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "relative", children: [
|
|
1888
|
+
/* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
|
|
1588
1889
|
"input",
|
|
1589
1890
|
{
|
|
1590
1891
|
ref,
|
|
@@ -1595,27 +1896,27 @@ var Toggle = (0, import_react11.forwardRef)(
|
|
|
1595
1896
|
...props
|
|
1596
1897
|
}
|
|
1597
1898
|
),
|
|
1598
|
-
/* @__PURE__ */ (0,
|
|
1899
|
+
/* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
|
|
1599
1900
|
"div",
|
|
1600
1901
|
{
|
|
1601
1902
|
className: `${currentSize.switch} bg-gray-300 dark:bg-gray-700 peer-focus:ring-2 peer-focus:ring-blue-500 rounded-full peer peer-checked:bg-blue-600 dark:peer-checked:bg-blue-500 transition-colors`
|
|
1602
1903
|
}
|
|
1603
1904
|
),
|
|
1604
|
-
/* @__PURE__ */ (0,
|
|
1905
|
+
/* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
|
|
1605
1906
|
"div",
|
|
1606
1907
|
{
|
|
1607
1908
|
className: `${currentSize.thumb} bg-white rounded-full shadow-md absolute top-0.5 left-0.5 transition-transform`
|
|
1608
1909
|
}
|
|
1609
1910
|
)
|
|
1610
1911
|
] }),
|
|
1611
|
-
label && /* @__PURE__ */ (0,
|
|
1912
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: label })
|
|
1612
1913
|
] });
|
|
1613
1914
|
}
|
|
1614
1915
|
);
|
|
1615
1916
|
Toggle.displayName = "Toggle";
|
|
1616
1917
|
|
|
1617
1918
|
// src/components/Badge.tsx
|
|
1618
|
-
var
|
|
1919
|
+
var import_jsx_runtime83 = require("react/jsx-runtime");
|
|
1619
1920
|
var variantStyles2 = {
|
|
1620
1921
|
default: "bg-gray-100 dark:bg-gray-700 text-gray-800 dark:text-gray-200",
|
|
1621
1922
|
primary: "bg-blue-100 dark:bg-blue-900/30 text-blue-800 dark:text-blue-200",
|
|
@@ -1638,11 +1939,11 @@ var Badge = ({
|
|
|
1638
1939
|
const { theme } = useTheme();
|
|
1639
1940
|
const variantClass = variantStyles2[variant];
|
|
1640
1941
|
const sizeClass = sizeStyles[size];
|
|
1641
|
-
return /* @__PURE__ */ (0,
|
|
1942
|
+
return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: `inline-flex items-center font-medium rounded-full ${variantClass} ${sizeClass} ${className}`, children });
|
|
1642
1943
|
};
|
|
1643
1944
|
|
|
1644
1945
|
// src/components/Spinner.tsx
|
|
1645
|
-
var
|
|
1946
|
+
var import_jsx_runtime84 = require("react/jsx-runtime");
|
|
1646
1947
|
var sizeClasses6 = {
|
|
1647
1948
|
sm: "w-4 h-4 border-2",
|
|
1648
1949
|
md: "w-8 h-8 border-2",
|
|
@@ -1662,20 +1963,20 @@ var Spinner = ({
|
|
|
1662
1963
|
const { theme } = useTheme();
|
|
1663
1964
|
const sizeClass = sizeClasses6[size];
|
|
1664
1965
|
const colorClass = colorClasses[color];
|
|
1665
|
-
return /* @__PURE__ */ (0,
|
|
1966
|
+
return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
|
|
1666
1967
|
"div",
|
|
1667
1968
|
{
|
|
1668
1969
|
className: `inline-block rounded-full animate-spin ${sizeClass} ${colorClass} ${className}`,
|
|
1669
1970
|
role: "status",
|
|
1670
1971
|
"aria-label": "Loading",
|
|
1671
|
-
children: /* @__PURE__ */ (0,
|
|
1972
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "sr-only", children: "Loading..." })
|
|
1672
1973
|
}
|
|
1673
1974
|
);
|
|
1674
1975
|
};
|
|
1675
1976
|
|
|
1676
1977
|
// src/components/Tabs.tsx
|
|
1677
1978
|
var import_react12 = require("react");
|
|
1678
|
-
var
|
|
1979
|
+
var import_jsx_runtime85 = require("react/jsx-runtime");
|
|
1679
1980
|
var Tabs = ({
|
|
1680
1981
|
tabs,
|
|
1681
1982
|
defaultIndex = 0,
|
|
@@ -1689,8 +1990,8 @@ var Tabs = ({
|
|
|
1689
1990
|
setActiveIndex(index);
|
|
1690
1991
|
onChange?.(index);
|
|
1691
1992
|
};
|
|
1692
|
-
return /* @__PURE__ */ (0,
|
|
1693
|
-
/* @__PURE__ */ (0,
|
|
1993
|
+
return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className, children: [
|
|
1994
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)("div", { className: "border-b border-gray-200 dark:border-gray-700", children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("nav", { className: "flex gap-8 px-6", "aria-label": "Tabs", children: tabs.map((tab, index) => /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
|
|
1694
1995
|
"button",
|
|
1695
1996
|
{
|
|
1696
1997
|
onClick: () => handleTabClick(index),
|
|
@@ -1701,12 +2002,12 @@ var Tabs = ({
|
|
|
1701
2002
|
},
|
|
1702
2003
|
index
|
|
1703
2004
|
)) }) }),
|
|
1704
|
-
/* @__PURE__ */ (0,
|
|
2005
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)("div", { children: tabs[activeIndex]?.content })
|
|
1705
2006
|
] });
|
|
1706
2007
|
};
|
|
1707
2008
|
|
|
1708
2009
|
// src/components/Table.tsx
|
|
1709
|
-
var
|
|
2010
|
+
var import_jsx_runtime86 = require("react/jsx-runtime");
|
|
1710
2011
|
function Table({
|
|
1711
2012
|
columns,
|
|
1712
2013
|
data,
|
|
@@ -1716,11 +2017,11 @@ function Table({
|
|
|
1716
2017
|
className = ""
|
|
1717
2018
|
}) {
|
|
1718
2019
|
const { theme } = useTheme();
|
|
1719
|
-
return /* @__PURE__ */ (0,
|
|
1720
|
-
/* @__PURE__ */ (0,
|
|
1721
|
-
/* @__PURE__ */ (0,
|
|
2020
|
+
return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: `overflow-x-auto ${className}`, children: [
|
|
2021
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("table", { className: "w-full text-left", children: [
|
|
2022
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)("thead", { className: "bg-gray-50 dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700", children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("tr", { children: columns.map((column, colIndex) => {
|
|
1722
2023
|
const isLast = colIndex === columns.length - 1;
|
|
1723
|
-
return /* @__PURE__ */ (0,
|
|
2024
|
+
return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
|
|
1724
2025
|
"th",
|
|
1725
2026
|
{
|
|
1726
2027
|
className: isLast ? "px-6 py-3 text-xs font-medium text-gray-700 dark:text-gray-300 uppercase tracking-wider relative" : "px-6 py-3 text-xs font-medium text-gray-700 dark:text-gray-300 uppercase tracking-wider",
|
|
@@ -1730,18 +2031,18 @@ function Table({
|
|
|
1730
2031
|
column.key
|
|
1731
2032
|
);
|
|
1732
2033
|
}) }) }),
|
|
1733
|
-
/* @__PURE__ */ (0,
|
|
2034
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)("tbody", { className: "bg-white dark:bg-gray-900 divide-y divide-gray-200 dark:divide-gray-700", children: data.map((row, rowIndex) => {
|
|
1734
2035
|
const rowClasses = [
|
|
1735
2036
|
striped && rowIndex % 2 === 1 ? "bg-gray-50 dark:bg-gray-800/50" : "",
|
|
1736
2037
|
hoverable ? "hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors" : ""
|
|
1737
2038
|
].filter(Boolean).join(" ");
|
|
1738
|
-
return /* @__PURE__ */ (0,
|
|
2039
|
+
return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
|
|
1739
2040
|
"tr",
|
|
1740
2041
|
{
|
|
1741
2042
|
className: rowClasses,
|
|
1742
2043
|
children: columns.map((column, colIndex) => {
|
|
1743
2044
|
const isLast = colIndex === columns.length - 1;
|
|
1744
|
-
return /* @__PURE__ */ (0,
|
|
2045
|
+
return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
|
|
1745
2046
|
"td",
|
|
1746
2047
|
{
|
|
1747
2048
|
className: isLast ? "px-6 py-4 text-sm text-gray-900 dark:text-gray-100 overflow-visible" : "px-6 py-4 text-sm text-gray-900 dark:text-gray-100",
|
|
@@ -1755,12 +2056,12 @@ function Table({
|
|
|
1755
2056
|
);
|
|
1756
2057
|
}) })
|
|
1757
2058
|
] }),
|
|
1758
|
-
data.length === 0 && /* @__PURE__ */ (0,
|
|
2059
|
+
data.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("div", { className: "text-center py-8 text-gray-500 dark:text-gray-400", children: "No data available" })
|
|
1759
2060
|
] });
|
|
1760
2061
|
}
|
|
1761
2062
|
|
|
1762
2063
|
// src/components/Pagination.tsx
|
|
1763
|
-
var
|
|
2064
|
+
var import_jsx_runtime87 = require("react/jsx-runtime");
|
|
1764
2065
|
var Pagination = ({
|
|
1765
2066
|
currentPage,
|
|
1766
2067
|
totalPages,
|
|
@@ -1801,8 +2102,8 @@ var Pagination = ({
|
|
|
1801
2102
|
return range(1, totalPages);
|
|
1802
2103
|
};
|
|
1803
2104
|
const pages = paginationRange();
|
|
1804
|
-
return /* @__PURE__ */ (0,
|
|
1805
|
-
/* @__PURE__ */ (0,
|
|
2105
|
+
return /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("nav", { className: `flex items-center gap-1 ${className}`, "aria-label": "Pagination", children: [
|
|
2106
|
+
/* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
|
|
1806
2107
|
"button",
|
|
1807
2108
|
{
|
|
1808
2109
|
onClick: () => onPageChange(currentPage - 1),
|
|
@@ -1814,7 +2115,7 @@ var Pagination = ({
|
|
|
1814
2115
|
),
|
|
1815
2116
|
pages.map((page, index) => {
|
|
1816
2117
|
if (page === "...") {
|
|
1817
|
-
return /* @__PURE__ */ (0,
|
|
2118
|
+
return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
|
|
1818
2119
|
"span",
|
|
1819
2120
|
{
|
|
1820
2121
|
className: "px-3 py-2 text-gray-700 dark:text-gray-300",
|
|
@@ -1823,7 +2124,7 @@ var Pagination = ({
|
|
|
1823
2124
|
`dots-${index}`
|
|
1824
2125
|
);
|
|
1825
2126
|
}
|
|
1826
|
-
return /* @__PURE__ */ (0,
|
|
2127
|
+
return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
|
|
1827
2128
|
"button",
|
|
1828
2129
|
{
|
|
1829
2130
|
onClick: () => onPageChange(page),
|
|
@@ -1835,7 +2136,7 @@ var Pagination = ({
|
|
|
1835
2136
|
page
|
|
1836
2137
|
);
|
|
1837
2138
|
}),
|
|
1838
|
-
/* @__PURE__ */ (0,
|
|
2139
|
+
/* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
|
|
1839
2140
|
"button",
|
|
1840
2141
|
{
|
|
1841
2142
|
onClick: () => onPageChange(currentPage + 1),
|
|
@@ -1851,7 +2152,7 @@ var Pagination = ({
|
|
|
1851
2152
|
// src/components/DatePicker.tsx
|
|
1852
2153
|
var import_react13 = require("react");
|
|
1853
2154
|
var import_react_dom2 = require("react-dom");
|
|
1854
|
-
var
|
|
2155
|
+
var import_jsx_runtime88 = require("react/jsx-runtime");
|
|
1855
2156
|
var DAYS = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
|
|
1856
2157
|
var MONTHS = [
|
|
1857
2158
|
"January",
|
|
@@ -1972,7 +2273,7 @@ var DatePicker = ({
|
|
|
1972
2273
|
const baseStyles = "w-full appearance-none rounded-lg border border-gray-300 bg-white text-gray-900 px-4 py-2.5 text-base transition-all duration-150 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent shadow-sm hover:border-gray-400 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-100 dark:hover:border-gray-500 cursor-pointer";
|
|
1973
2274
|
const errorStyles = error ? "border-red-500 focus:ring-red-500 dark:border-red-500" : "";
|
|
1974
2275
|
const disabledStyles = disabled ? "opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900" : "";
|
|
1975
|
-
const calendar = isOpen && mounted && calendarPosition ? /* @__PURE__ */ (0,
|
|
2276
|
+
const calendar = isOpen && mounted && calendarPosition ? /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)(
|
|
1976
2277
|
"div",
|
|
1977
2278
|
{
|
|
1978
2279
|
ref: calendarRef,
|
|
@@ -1983,23 +2284,23 @@ var DatePicker = ({
|
|
|
1983
2284
|
minWidth: "320px"
|
|
1984
2285
|
},
|
|
1985
2286
|
children: [
|
|
1986
|
-
/* @__PURE__ */ (0,
|
|
1987
|
-
/* @__PURE__ */ (0,
|
|
2287
|
+
/* @__PURE__ */ (0, import_jsx_runtime88.jsxs)("div", { className: "flex items-center justify-between mb-4", children: [
|
|
2288
|
+
/* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
|
|
1988
2289
|
"button",
|
|
1989
2290
|
{
|
|
1990
2291
|
onClick: handlePrevMonth,
|
|
1991
2292
|
className: "p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors",
|
|
1992
2293
|
"aria-label": "Previous month",
|
|
1993
|
-
children: /* @__PURE__ */ (0,
|
|
2294
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("svg", { className: "w-5 h-5 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) })
|
|
1994
2295
|
}
|
|
1995
2296
|
),
|
|
1996
|
-
/* @__PURE__ */ (0,
|
|
1997
|
-
/* @__PURE__ */ (0,
|
|
2297
|
+
/* @__PURE__ */ (0, import_jsx_runtime88.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
2298
|
+
/* @__PURE__ */ (0, import_jsx_runtime88.jsxs)("h2", { className: "text-base font-semibold text-gray-900 dark:text-gray-100", children: [
|
|
1998
2299
|
MONTHS[month],
|
|
1999
2300
|
" ",
|
|
2000
2301
|
year
|
|
2001
2302
|
] }),
|
|
2002
|
-
/* @__PURE__ */ (0,
|
|
2303
|
+
/* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
|
|
2003
2304
|
"button",
|
|
2004
2305
|
{
|
|
2005
2306
|
onClick: handleToday,
|
|
@@ -2008,23 +2309,23 @@ var DatePicker = ({
|
|
|
2008
2309
|
}
|
|
2009
2310
|
)
|
|
2010
2311
|
] }),
|
|
2011
|
-
/* @__PURE__ */ (0,
|
|
2312
|
+
/* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
|
|
2012
2313
|
"button",
|
|
2013
2314
|
{
|
|
2014
2315
|
onClick: handleNextMonth,
|
|
2015
2316
|
className: "p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors",
|
|
2016
2317
|
"aria-label": "Next month",
|
|
2017
|
-
children: /* @__PURE__ */ (0,
|
|
2318
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("svg", { className: "w-5 h-5 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
|
|
2018
2319
|
}
|
|
2019
2320
|
)
|
|
2020
2321
|
] }),
|
|
2021
|
-
/* @__PURE__ */ (0,
|
|
2022
|
-
/* @__PURE__ */ (0,
|
|
2322
|
+
/* @__PURE__ */ (0, import_jsx_runtime88.jsx)("div", { className: "grid grid-cols-7 gap-1 mb-2", children: DAYS.map((day) => /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("div", { className: "text-center text-xs font-semibold text-gray-600 dark:text-gray-400 py-1", children: day }, day)) }),
|
|
2323
|
+
/* @__PURE__ */ (0, import_jsx_runtime88.jsx)("div", { className: "grid grid-cols-7 gap-1", children: calendarDays.map((date, index) => {
|
|
2023
2324
|
const isCurrentMonthDay = isCurrentMonth(date);
|
|
2024
2325
|
const isTodayDay = isToday(date);
|
|
2025
2326
|
const isSelectedDay = isSelected(date);
|
|
2026
2327
|
const isDisabledDay = isDisabled(date);
|
|
2027
|
-
return /* @__PURE__ */ (0,
|
|
2328
|
+
return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
|
|
2028
2329
|
"button",
|
|
2029
2330
|
{
|
|
2030
2331
|
onClick: () => handleDateClick(date),
|
|
@@ -2045,22 +2346,22 @@ var DatePicker = ({
|
|
|
2045
2346
|
]
|
|
2046
2347
|
}
|
|
2047
2348
|
) : null;
|
|
2048
|
-
return /* @__PURE__ */ (0,
|
|
2049
|
-
label && /* @__PURE__ */ (0,
|
|
2050
|
-
/* @__PURE__ */ (0,
|
|
2349
|
+
return /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)("div", { className, children: [
|
|
2350
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: label }),
|
|
2351
|
+
/* @__PURE__ */ (0, import_jsx_runtime88.jsxs)(
|
|
2051
2352
|
"div",
|
|
2052
2353
|
{
|
|
2053
2354
|
ref: inputRef,
|
|
2054
2355
|
onClick: () => !disabled && setIsOpen(!isOpen),
|
|
2055
2356
|
className: `${baseStyles} ${errorStyles} ${disabledStyles} flex items-center justify-between`.trim(),
|
|
2056
2357
|
children: [
|
|
2057
|
-
/* @__PURE__ */ (0,
|
|
2058
|
-
/* @__PURE__ */ (0,
|
|
2358
|
+
/* @__PURE__ */ (0, import_jsx_runtime88.jsx)("span", { className: !value ? "text-gray-500 dark:text-gray-400" : "", children: value ? formatDate(value) : placeholder }),
|
|
2359
|
+
/* @__PURE__ */ (0, import_jsx_runtime88.jsx)("svg", { className: "w-5 h-5 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) })
|
|
2059
2360
|
]
|
|
2060
2361
|
}
|
|
2061
2362
|
),
|
|
2062
|
-
error && /* @__PURE__ */ (0,
|
|
2063
|
-
helperText && !error && /* @__PURE__ */ (0,
|
|
2363
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error }),
|
|
2364
|
+
helperText && !error && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("p", { className: "mt-1 text-sm text-gray-500 dark:text-gray-400", children: helperText }),
|
|
2064
2365
|
mounted && (0, import_react_dom2.createPortal)(calendar, document.body)
|
|
2065
2366
|
] });
|
|
2066
2367
|
};
|
|
@@ -2068,16 +2369,16 @@ DatePicker.displayName = "DatePicker";
|
|
|
2068
2369
|
|
|
2069
2370
|
// src/components/TimePicker.tsx
|
|
2070
2371
|
var import_react14 = require("react");
|
|
2071
|
-
var
|
|
2372
|
+
var import_jsx_runtime89 = require("react/jsx-runtime");
|
|
2072
2373
|
var TimePicker = (0, import_react14.forwardRef)(
|
|
2073
2374
|
({ label, error, helperText, className = "", disabled, ...props }, ref) => {
|
|
2074
2375
|
const { theme } = useTheme();
|
|
2075
2376
|
const baseStyles = "w-full appearance-none rounded-lg border border-gray-300 bg-white text-gray-900 px-4 py-2.5 text-base transition-all duration-150 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent shadow-sm hover:border-gray-400 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-100 dark:hover:border-gray-500";
|
|
2076
2377
|
const errorStyles = error ? "border-red-500 focus:ring-red-500 dark:border-red-500" : "";
|
|
2077
2378
|
const disabledStyles = disabled ? "opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900" : "";
|
|
2078
|
-
return /* @__PURE__ */ (0,
|
|
2079
|
-
label && /* @__PURE__ */ (0,
|
|
2080
|
-
/* @__PURE__ */ (0,
|
|
2379
|
+
return /* @__PURE__ */ (0, import_jsx_runtime89.jsxs)("div", { className, children: [
|
|
2380
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: label }),
|
|
2381
|
+
/* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
|
|
2081
2382
|
"input",
|
|
2082
2383
|
{
|
|
2083
2384
|
ref,
|
|
@@ -2087,8 +2388,8 @@ var TimePicker = (0, import_react14.forwardRef)(
|
|
|
2087
2388
|
...props
|
|
2088
2389
|
}
|
|
2089
2390
|
),
|
|
2090
|
-
error && /* @__PURE__ */ (0,
|
|
2091
|
-
helperText && !error && /* @__PURE__ */ (0,
|
|
2391
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error }),
|
|
2392
|
+
helperText && !error && /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("p", { className: "mt-1 text-sm text-gray-500 dark:text-gray-400", children: helperText })
|
|
2092
2393
|
] });
|
|
2093
2394
|
}
|
|
2094
2395
|
);
|
|
@@ -2097,7 +2398,7 @@ TimePicker.displayName = "TimePicker";
|
|
|
2097
2398
|
// src/components/DateTimePicker.tsx
|
|
2098
2399
|
var import_react15 = require("react");
|
|
2099
2400
|
var import_react_dom3 = require("react-dom");
|
|
2100
|
-
var
|
|
2401
|
+
var import_jsx_runtime90 = require("react/jsx-runtime");
|
|
2101
2402
|
var DAYS2 = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
|
|
2102
2403
|
var MONTHS2 = [
|
|
2103
2404
|
"January",
|
|
@@ -2254,7 +2555,7 @@ var DateTimePicker = ({
|
|
|
2254
2555
|
const baseStyles = "w-full appearance-none rounded-lg border border-gray-300 bg-white text-gray-900 px-4 py-2.5 text-base transition-all duration-150 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent shadow-sm hover:border-gray-400 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-100 dark:hover:border-gray-500 cursor-pointer";
|
|
2255
2556
|
const errorStyles = error ? "border-red-500 focus:ring-red-500 dark:border-red-500" : "";
|
|
2256
2557
|
const disabledStyles = disabled ? "opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900" : "";
|
|
2257
|
-
const picker = isOpen && mounted && pickerPosition ? /* @__PURE__ */ (0,
|
|
2558
|
+
const picker = isOpen && mounted && pickerPosition ? /* @__PURE__ */ (0, import_jsx_runtime90.jsxs)(
|
|
2258
2559
|
"div",
|
|
2259
2560
|
{
|
|
2260
2561
|
ref: pickerRef,
|
|
@@ -2265,23 +2566,23 @@ var DateTimePicker = ({
|
|
|
2265
2566
|
minWidth: "360px"
|
|
2266
2567
|
},
|
|
2267
2568
|
children: [
|
|
2268
|
-
/* @__PURE__ */ (0,
|
|
2269
|
-
/* @__PURE__ */ (0,
|
|
2569
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsxs)("div", { className: "flex items-center justify-between mb-4", children: [
|
|
2570
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
|
|
2270
2571
|
"button",
|
|
2271
2572
|
{
|
|
2272
2573
|
onClick: handlePrevMonth,
|
|
2273
2574
|
className: "p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors",
|
|
2274
2575
|
"aria-label": "Previous month",
|
|
2275
|
-
children: /* @__PURE__ */ (0,
|
|
2576
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("svg", { className: "w-5 h-5 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) })
|
|
2276
2577
|
}
|
|
2277
2578
|
),
|
|
2278
|
-
/* @__PURE__ */ (0,
|
|
2279
|
-
/* @__PURE__ */ (0,
|
|
2579
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
2580
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsxs)("h2", { className: "text-base font-semibold text-gray-900 dark:text-gray-100", children: [
|
|
2280
2581
|
MONTHS2[month],
|
|
2281
2582
|
" ",
|
|
2282
2583
|
year
|
|
2283
2584
|
] }),
|
|
2284
|
-
/* @__PURE__ */ (0,
|
|
2585
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
|
|
2285
2586
|
"button",
|
|
2286
2587
|
{
|
|
2287
2588
|
onClick: handleToday,
|
|
@@ -2290,23 +2591,23 @@ var DateTimePicker = ({
|
|
|
2290
2591
|
}
|
|
2291
2592
|
)
|
|
2292
2593
|
] }),
|
|
2293
|
-
/* @__PURE__ */ (0,
|
|
2594
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
|
|
2294
2595
|
"button",
|
|
2295
2596
|
{
|
|
2296
2597
|
onClick: handleNextMonth,
|
|
2297
2598
|
className: "p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors",
|
|
2298
2599
|
"aria-label": "Next month",
|
|
2299
|
-
children: /* @__PURE__ */ (0,
|
|
2600
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("svg", { className: "w-5 h-5 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
|
|
2300
2601
|
}
|
|
2301
2602
|
)
|
|
2302
2603
|
] }),
|
|
2303
|
-
/* @__PURE__ */ (0,
|
|
2304
|
-
/* @__PURE__ */ (0,
|
|
2604
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsx)("div", { className: "grid grid-cols-7 gap-1 mb-2", children: DAYS2.map((day) => /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("div", { className: "text-center text-xs font-semibold text-gray-600 dark:text-gray-400 py-1", children: day }, day)) }),
|
|
2605
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsx)("div", { className: "grid grid-cols-7 gap-1 mb-4", children: calendarDays.map((date, index) => {
|
|
2305
2606
|
const isCurrentMonthDay = isCurrentMonth(date);
|
|
2306
2607
|
const isTodayDay = isToday(date);
|
|
2307
2608
|
const isSelectedDay = isSelected(date);
|
|
2308
2609
|
const isDisabledDay = isDisabled(date);
|
|
2309
|
-
return /* @__PURE__ */ (0,
|
|
2610
|
+
return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
|
|
2310
2611
|
"button",
|
|
2311
2612
|
{
|
|
2312
2613
|
onClick: () => handleDateClick(date),
|
|
@@ -2324,21 +2625,21 @@ var DateTimePicker = ({
|
|
|
2324
2625
|
index
|
|
2325
2626
|
);
|
|
2326
2627
|
}) }),
|
|
2327
|
-
/* @__PURE__ */ (0,
|
|
2328
|
-
/* @__PURE__ */ (0,
|
|
2329
|
-
/* @__PURE__ */ (0,
|
|
2330
|
-
/* @__PURE__ */ (0,
|
|
2331
|
-
/* @__PURE__ */ (0,
|
|
2332
|
-
/* @__PURE__ */ (0,
|
|
2628
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsxs)("div", { className: "border-t border-gray-200 dark:border-gray-700 pt-4", children: [
|
|
2629
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsxs)("div", { className: "flex items-center justify-center gap-4 mb-4", children: [
|
|
2630
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsxs)("div", { className: "flex flex-col items-center", children: [
|
|
2631
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsx)("label", { className: "text-xs font-semibold text-gray-600 dark:text-gray-400 mb-2", children: "Hour" }),
|
|
2632
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsxs)("div", { className: "flex flex-col items-center gap-1", children: [
|
|
2633
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
|
|
2333
2634
|
"button",
|
|
2334
2635
|
{
|
|
2335
2636
|
type: "button",
|
|
2336
2637
|
onClick: () => handleTimeChange((selectedTime.hours + 1) % 24, selectedTime.minutes),
|
|
2337
2638
|
className: "p-1 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors",
|
|
2338
|
-
children: /* @__PURE__ */ (0,
|
|
2639
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("svg", { className: "w-4 h-4 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 15l7-7 7 7" }) })
|
|
2339
2640
|
}
|
|
2340
2641
|
),
|
|
2341
|
-
/* @__PURE__ */ (0,
|
|
2642
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
|
|
2342
2643
|
"input",
|
|
2343
2644
|
{
|
|
2344
2645
|
type: "number",
|
|
@@ -2354,31 +2655,31 @@ var DateTimePicker = ({
|
|
|
2354
2655
|
className: "w-16 px-2 py-2 text-center border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500 text-lg font-semibold [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none"
|
|
2355
2656
|
}
|
|
2356
2657
|
),
|
|
2357
|
-
/* @__PURE__ */ (0,
|
|
2658
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
|
|
2358
2659
|
"button",
|
|
2359
2660
|
{
|
|
2360
2661
|
type: "button",
|
|
2361
2662
|
onClick: () => handleTimeChange((selectedTime.hours - 1 + 24) % 24, selectedTime.minutes),
|
|
2362
2663
|
className: "p-1 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors",
|
|
2363
|
-
children: /* @__PURE__ */ (0,
|
|
2664
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("svg", { className: "w-4 h-4 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }) })
|
|
2364
2665
|
}
|
|
2365
2666
|
)
|
|
2366
2667
|
] })
|
|
2367
2668
|
] }),
|
|
2368
|
-
/* @__PURE__ */ (0,
|
|
2369
|
-
/* @__PURE__ */ (0,
|
|
2370
|
-
/* @__PURE__ */ (0,
|
|
2371
|
-
/* @__PURE__ */ (0,
|
|
2372
|
-
/* @__PURE__ */ (0,
|
|
2669
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsx)("span", { className: "text-2xl font-bold text-gray-600 dark:text-gray-400 mt-8", children: ":" }),
|
|
2670
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsxs)("div", { className: "flex flex-col items-center", children: [
|
|
2671
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsx)("label", { className: "text-xs font-semibold text-gray-600 dark:text-gray-400 mb-2", children: "Minute" }),
|
|
2672
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsxs)("div", { className: "flex flex-col items-center gap-1", children: [
|
|
2673
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
|
|
2373
2674
|
"button",
|
|
2374
2675
|
{
|
|
2375
2676
|
type: "button",
|
|
2376
2677
|
onClick: () => handleTimeChange(selectedTime.hours, (selectedTime.minutes + 1) % 60),
|
|
2377
2678
|
className: "p-1 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors",
|
|
2378
|
-
children: /* @__PURE__ */ (0,
|
|
2679
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("svg", { className: "w-4 h-4 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 15l7-7 7 7" }) })
|
|
2379
2680
|
}
|
|
2380
2681
|
),
|
|
2381
|
-
/* @__PURE__ */ (0,
|
|
2682
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
|
|
2382
2683
|
"input",
|
|
2383
2684
|
{
|
|
2384
2685
|
type: "number",
|
|
@@ -2394,20 +2695,20 @@ var DateTimePicker = ({
|
|
|
2394
2695
|
className: "w-16 px-2 py-2 text-center border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500 text-lg font-semibold [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none"
|
|
2395
2696
|
}
|
|
2396
2697
|
),
|
|
2397
|
-
/* @__PURE__ */ (0,
|
|
2698
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
|
|
2398
2699
|
"button",
|
|
2399
2700
|
{
|
|
2400
2701
|
type: "button",
|
|
2401
2702
|
onClick: () => handleTimeChange(selectedTime.hours, (selectedTime.minutes - 1 + 60) % 60),
|
|
2402
2703
|
className: "p-1 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors",
|
|
2403
|
-
children: /* @__PURE__ */ (0,
|
|
2704
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("svg", { className: "w-4 h-4 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }) })
|
|
2404
2705
|
}
|
|
2405
2706
|
)
|
|
2406
2707
|
] })
|
|
2407
2708
|
] })
|
|
2408
2709
|
] }),
|
|
2409
|
-
/* @__PURE__ */ (0,
|
|
2410
|
-
/* @__PURE__ */ (0,
|
|
2710
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsx)("div", { className: "text-center text-sm text-gray-600 dark:text-gray-400 mb-4", children: formatTime(selectedTime.hours, selectedTime.minutes) }),
|
|
2711
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
|
|
2411
2712
|
"button",
|
|
2412
2713
|
{
|
|
2413
2714
|
onClick: handleDone,
|
|
@@ -2419,22 +2720,22 @@ var DateTimePicker = ({
|
|
|
2419
2720
|
]
|
|
2420
2721
|
}
|
|
2421
2722
|
) : null;
|
|
2422
|
-
return /* @__PURE__ */ (0,
|
|
2423
|
-
label && /* @__PURE__ */ (0,
|
|
2424
|
-
/* @__PURE__ */ (0,
|
|
2723
|
+
return /* @__PURE__ */ (0, import_jsx_runtime90.jsxs)("div", { className, children: [
|
|
2724
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: label }),
|
|
2725
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsxs)(
|
|
2425
2726
|
"div",
|
|
2426
2727
|
{
|
|
2427
2728
|
ref: inputRef,
|
|
2428
2729
|
onClick: () => !disabled && setIsOpen(!isOpen),
|
|
2429
2730
|
className: `${baseStyles} ${errorStyles} ${disabledStyles} flex items-center justify-between`.trim(),
|
|
2430
2731
|
children: [
|
|
2431
|
-
/* @__PURE__ */ (0,
|
|
2432
|
-
/* @__PURE__ */ (0,
|
|
2732
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsx)("span", { className: !value ? "text-gray-500 dark:text-gray-400" : "", children: value ? formatDateTime(value) : placeholder }),
|
|
2733
|
+
/* @__PURE__ */ (0, import_jsx_runtime90.jsx)("svg", { className: "w-5 h-5 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) })
|
|
2433
2734
|
]
|
|
2434
2735
|
}
|
|
2435
2736
|
),
|
|
2436
|
-
error && /* @__PURE__ */ (0,
|
|
2437
|
-
helperText && !error && /* @__PURE__ */ (0,
|
|
2737
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error }),
|
|
2738
|
+
helperText && !error && /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("p", { className: "mt-1 text-sm text-gray-500 dark:text-gray-400", children: helperText }),
|
|
2438
2739
|
mounted && (0, import_react_dom3.createPortal)(picker, document.body)
|
|
2439
2740
|
] });
|
|
2440
2741
|
};
|
|
@@ -2442,7 +2743,7 @@ DateTimePicker.displayName = "DateTimePicker";
|
|
|
2442
2743
|
|
|
2443
2744
|
// src/components/Calendar.tsx
|
|
2444
2745
|
var import_react16 = require("react");
|
|
2445
|
-
var
|
|
2746
|
+
var import_jsx_runtime91 = require("react/jsx-runtime");
|
|
2446
2747
|
var DAYS3 = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
|
|
2447
2748
|
var MONTHS3 = [
|
|
2448
2749
|
"January",
|
|
@@ -2518,24 +2819,24 @@ var Calendar = ({
|
|
|
2518
2819
|
setCurrentDate(today);
|
|
2519
2820
|
onChange?.(today);
|
|
2520
2821
|
};
|
|
2521
|
-
return /* @__PURE__ */ (0,
|
|
2522
|
-
/* @__PURE__ */ (0,
|
|
2523
|
-
/* @__PURE__ */ (0,
|
|
2822
|
+
return /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("div", { className: `bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 p-4 ${className}`, children: [
|
|
2823
|
+
/* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("div", { className: "flex items-center justify-between mb-4", children: [
|
|
2824
|
+
/* @__PURE__ */ (0, import_jsx_runtime91.jsx)(
|
|
2524
2825
|
"button",
|
|
2525
2826
|
{
|
|
2526
2827
|
onClick: handlePrevMonth,
|
|
2527
2828
|
className: "p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors",
|
|
2528
2829
|
"aria-label": "Previous month",
|
|
2529
|
-
children: /* @__PURE__ */ (0,
|
|
2830
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("svg", { className: "w-5 h-5 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) })
|
|
2530
2831
|
}
|
|
2531
2832
|
),
|
|
2532
|
-
/* @__PURE__ */ (0,
|
|
2533
|
-
/* @__PURE__ */ (0,
|
|
2833
|
+
/* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
2834
|
+
/* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("h2", { className: "text-lg font-semibold text-gray-900 dark:text-gray-100", children: [
|
|
2534
2835
|
MONTHS3[month],
|
|
2535
2836
|
" ",
|
|
2536
2837
|
year
|
|
2537
2838
|
] }),
|
|
2538
|
-
/* @__PURE__ */ (0,
|
|
2839
|
+
/* @__PURE__ */ (0, import_jsx_runtime91.jsx)(
|
|
2539
2840
|
"button",
|
|
2540
2841
|
{
|
|
2541
2842
|
onClick: handleToday,
|
|
@@ -2544,17 +2845,17 @@ var Calendar = ({
|
|
|
2544
2845
|
}
|
|
2545
2846
|
)
|
|
2546
2847
|
] }),
|
|
2547
|
-
/* @__PURE__ */ (0,
|
|
2848
|
+
/* @__PURE__ */ (0, import_jsx_runtime91.jsx)(
|
|
2548
2849
|
"button",
|
|
2549
2850
|
{
|
|
2550
2851
|
onClick: handleNextMonth,
|
|
2551
2852
|
className: "p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors",
|
|
2552
2853
|
"aria-label": "Next month",
|
|
2553
|
-
children: /* @__PURE__ */ (0,
|
|
2854
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("svg", { className: "w-5 h-5 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
|
|
2554
2855
|
}
|
|
2555
2856
|
)
|
|
2556
2857
|
] }),
|
|
2557
|
-
/* @__PURE__ */ (0,
|
|
2858
|
+
/* @__PURE__ */ (0, import_jsx_runtime91.jsx)("div", { className: "grid grid-cols-7 gap-1 mb-2", children: DAYS3.map((day) => /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(
|
|
2558
2859
|
"div",
|
|
2559
2860
|
{
|
|
2560
2861
|
className: "text-center text-xs font-semibold text-gray-600 dark:text-gray-400 py-2",
|
|
@@ -2562,13 +2863,13 @@ var Calendar = ({
|
|
|
2562
2863
|
},
|
|
2563
2864
|
day
|
|
2564
2865
|
)) }),
|
|
2565
|
-
/* @__PURE__ */ (0,
|
|
2566
|
-
if (!date) return /* @__PURE__ */ (0,
|
|
2866
|
+
/* @__PURE__ */ (0, import_jsx_runtime91.jsx)("div", { className: "grid grid-cols-7 gap-1", children: calendarDays.map((date, index) => {
|
|
2867
|
+
if (!date) return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("div", {}, index);
|
|
2567
2868
|
const isCurrentMonthDay = isCurrentMonth(date);
|
|
2568
2869
|
const isTodayDay = isToday(date);
|
|
2569
2870
|
const isSelectedDay = isSelected(date);
|
|
2570
2871
|
const isDisabledDay = isDisabled(date);
|
|
2571
|
-
return /* @__PURE__ */ (0,
|
|
2872
|
+
return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(
|
|
2572
2873
|
"button",
|
|
2573
2874
|
{
|
|
2574
2875
|
onClick: () => handleDateClick(date),
|
|
@@ -2591,7 +2892,7 @@ var Calendar = ({
|
|
|
2591
2892
|
|
|
2592
2893
|
// src/components/Radio.tsx
|
|
2593
2894
|
var import_react17 = __toESM(require("react"));
|
|
2594
|
-
var
|
|
2895
|
+
var import_jsx_runtime92 = require("react/jsx-runtime");
|
|
2595
2896
|
var Radio = ({
|
|
2596
2897
|
name,
|
|
2597
2898
|
options,
|
|
@@ -2610,18 +2911,18 @@ var Radio = ({
|
|
|
2610
2911
|
onChange?.(optionValue);
|
|
2611
2912
|
};
|
|
2612
2913
|
const containerClass = orientation === "horizontal" ? "flex flex-wrap gap-4" : "flex flex-col gap-2";
|
|
2613
|
-
return /* @__PURE__ */ (0,
|
|
2914
|
+
return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("div", { className: `${containerClass} ${className}`, role: "radiogroup", children: options.map((option) => {
|
|
2614
2915
|
const isDisabled = disabled || option.disabled;
|
|
2615
2916
|
const isChecked = value === option.value;
|
|
2616
2917
|
const id = `${name}-${option.value}`;
|
|
2617
|
-
return /* @__PURE__ */ (0,
|
|
2918
|
+
return /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)(
|
|
2618
2919
|
"label",
|
|
2619
2920
|
{
|
|
2620
2921
|
htmlFor: id,
|
|
2621
2922
|
className: `flex items-center gap-2 cursor-pointer group ${isDisabled ? "opacity-50 cursor-not-allowed" : ""}`,
|
|
2622
2923
|
children: [
|
|
2623
|
-
/* @__PURE__ */ (0,
|
|
2624
|
-
/* @__PURE__ */ (0,
|
|
2924
|
+
/* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("div", { className: "relative inline-flex items-center", children: [
|
|
2925
|
+
/* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
|
|
2625
2926
|
"input",
|
|
2626
2927
|
{
|
|
2627
2928
|
type: "radio",
|
|
@@ -2634,14 +2935,14 @@ var Radio = ({
|
|
|
2634
2935
|
className: "sr-only peer"
|
|
2635
2936
|
}
|
|
2636
2937
|
),
|
|
2637
|
-
/* @__PURE__ */ (0,
|
|
2938
|
+
/* @__PURE__ */ (0, import_jsx_runtime92.jsx)("div", { className: `w-4 h-4 rounded-full border-2 transition-all duration-200 flex items-center justify-center
|
|
2638
2939
|
border-gray-300 dark:border-gray-600
|
|
2639
2940
|
${isDisabled ? "bg-gray-100 dark:bg-gray-800" : "peer-hover:border-gray-400 dark:peer-hover:border-gray-500"}
|
|
2640
2941
|
${isChecked ? "border-blue-600 bg-white dark:bg-gray-900" : ""}
|
|
2641
2942
|
peer-focus:ring-2 peer-focus:ring-blue-500 peer-focus:ring-offset-2
|
|
2642
|
-
`, children: /* @__PURE__ */ (0,
|
|
2943
|
+
`, children: /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("div", { className: `w-2 h-2 rounded-full bg-blue-600 transition-all duration-200 ${isChecked ? "scale-100" : "scale-0"}` }) })
|
|
2643
2944
|
] }),
|
|
2644
|
-
/* @__PURE__ */ (0,
|
|
2945
|
+
/* @__PURE__ */ (0, import_jsx_runtime92.jsx)("span", { className: `text-sm font-medium text-gray-900 dark:text-gray-300 ${!isDisabled && "group-hover:text-gray-700 dark:group-hover:text-gray-100"}`, children: option.label })
|
|
2645
2946
|
]
|
|
2646
2947
|
},
|
|
2647
2948
|
option.value
|
|
@@ -2650,7 +2951,7 @@ var Radio = ({
|
|
|
2650
2951
|
};
|
|
2651
2952
|
|
|
2652
2953
|
// src/components/ProgressBar.tsx
|
|
2653
|
-
var
|
|
2954
|
+
var import_jsx_runtime93 = require("react/jsx-runtime");
|
|
2654
2955
|
var ProgressBar = ({
|
|
2655
2956
|
value,
|
|
2656
2957
|
max = 100,
|
|
@@ -2672,15 +2973,15 @@ var ProgressBar = ({
|
|
|
2672
2973
|
warning: "bg-yellow-500 dark:bg-yellow-400",
|
|
2673
2974
|
danger: "bg-red-600 dark:bg-red-500"
|
|
2674
2975
|
};
|
|
2675
|
-
return /* @__PURE__ */ (0,
|
|
2676
|
-
(showLabel || label) && /* @__PURE__ */ (0,
|
|
2677
|
-
label && /* @__PURE__ */ (0,
|
|
2678
|
-
showLabel && /* @__PURE__ */ (0,
|
|
2976
|
+
return /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)("div", { className: `w-full ${className}`, children: [
|
|
2977
|
+
(showLabel || label) && /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)("div", { className: "flex justify-between items-center mb-1", children: [
|
|
2978
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("span", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: label }),
|
|
2979
|
+
showLabel && /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)("span", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: [
|
|
2679
2980
|
Math.round(percentage),
|
|
2680
2981
|
"%"
|
|
2681
2982
|
] })
|
|
2682
2983
|
] }),
|
|
2683
|
-
/* @__PURE__ */ (0,
|
|
2984
|
+
/* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
|
|
2684
2985
|
"div",
|
|
2685
2986
|
{
|
|
2686
2987
|
className: `w-full bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden ${sizeClasses7[size]}`,
|
|
@@ -2688,7 +2989,7 @@ var ProgressBar = ({
|
|
|
2688
2989
|
"aria-valuenow": value,
|
|
2689
2990
|
"aria-valuemin": 0,
|
|
2690
2991
|
"aria-valuemax": max,
|
|
2691
|
-
children: /* @__PURE__ */ (0,
|
|
2992
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
|
|
2692
2993
|
"div",
|
|
2693
2994
|
{
|
|
2694
2995
|
className: `${sizeClasses7[size]} ${variantClasses[variant]} rounded-full transition-all duration-300 ease-out`,
|
|
@@ -2702,7 +3003,7 @@ var ProgressBar = ({
|
|
|
2702
3003
|
|
|
2703
3004
|
// src/components/Slider.tsx
|
|
2704
3005
|
var import_react18 = __toESM(require("react"));
|
|
2705
|
-
var
|
|
3006
|
+
var import_jsx_runtime94 = require("react/jsx-runtime");
|
|
2706
3007
|
var Slider = ({
|
|
2707
3008
|
value: controlledValue,
|
|
2708
3009
|
defaultValue = 50,
|
|
@@ -2769,18 +3070,18 @@ var Slider = ({
|
|
|
2769
3070
|
const minPercentage = (rangeValue[0] - min) / (max - min) * 100;
|
|
2770
3071
|
const maxPercentage = (rangeValue[1] - min) / (max - min) * 100;
|
|
2771
3072
|
if (range) {
|
|
2772
|
-
return /* @__PURE__ */ (0,
|
|
2773
|
-
(label || showValue) && /* @__PURE__ */ (0,
|
|
2774
|
-
label && /* @__PURE__ */ (0,
|
|
2775
|
-
showValue && /* @__PURE__ */ (0,
|
|
3073
|
+
return /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("div", { className: `w-full ${className}`, children: [
|
|
3074
|
+
(label || showValue) && /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("div", { className: "flex justify-between items-center mb-2", children: [
|
|
3075
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("label", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: label }),
|
|
3076
|
+
showValue && /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("span", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: [
|
|
2776
3077
|
rangeValue[0],
|
|
2777
3078
|
" - ",
|
|
2778
3079
|
rangeValue[1]
|
|
2779
3080
|
] })
|
|
2780
3081
|
] }),
|
|
2781
|
-
/* @__PURE__ */ (0,
|
|
2782
|
-
/* @__PURE__ */ (0,
|
|
2783
|
-
/* @__PURE__ */ (0,
|
|
3082
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("div", { className: "relative h-10 flex items-center", ref: trackRef, children: [
|
|
3083
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("div", { className: "absolute w-full h-2 bg-gray-200 dark:bg-gray-700 rounded-full" }),
|
|
3084
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
|
|
2784
3085
|
"div",
|
|
2785
3086
|
{
|
|
2786
3087
|
className: "absolute h-2 bg-blue-600 dark:bg-blue-500 rounded-full pointer-events-none",
|
|
@@ -2790,7 +3091,7 @@ var Slider = ({
|
|
|
2790
3091
|
}
|
|
2791
3092
|
}
|
|
2792
3093
|
),
|
|
2793
|
-
/* @__PURE__ */ (0,
|
|
3094
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
|
|
2794
3095
|
"div",
|
|
2795
3096
|
{
|
|
2796
3097
|
className: `absolute w-4 h-4 -ml-2 rounded-sm bg-white dark:bg-gray-800 border-2 border-blue-600 shadow-md cursor-pointer z-10
|
|
@@ -2806,7 +3107,7 @@ var Slider = ({
|
|
|
2806
3107
|
tabIndex: disabled ? -1 : 0
|
|
2807
3108
|
}
|
|
2808
3109
|
),
|
|
2809
|
-
/* @__PURE__ */ (0,
|
|
3110
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
|
|
2810
3111
|
"div",
|
|
2811
3112
|
{
|
|
2812
3113
|
className: `absolute w-4 h-4 -ml-2 rounded-sm bg-white dark:bg-gray-800 border-2 border-blue-600 shadow-md cursor-pointer z-10
|
|
@@ -2825,21 +3126,21 @@ var Slider = ({
|
|
|
2825
3126
|
] })
|
|
2826
3127
|
] });
|
|
2827
3128
|
}
|
|
2828
|
-
return /* @__PURE__ */ (0,
|
|
2829
|
-
(label || showValue) && /* @__PURE__ */ (0,
|
|
2830
|
-
label && /* @__PURE__ */ (0,
|
|
2831
|
-
showValue && /* @__PURE__ */ (0,
|
|
3129
|
+
return /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("div", { className: `w-full ${className}`, children: [
|
|
3130
|
+
(label || showValue) && /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("div", { className: "flex justify-between items-center mb-2", children: [
|
|
3131
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("label", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: label }),
|
|
3132
|
+
showValue && /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("span", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: value })
|
|
2832
3133
|
] }),
|
|
2833
|
-
/* @__PURE__ */ (0,
|
|
2834
|
-
/* @__PURE__ */ (0,
|
|
2835
|
-
/* @__PURE__ */ (0,
|
|
3134
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("div", { className: "relative h-10 flex items-center", children: [
|
|
3135
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("div", { className: "absolute w-full h-2 bg-gray-200 dark:bg-gray-700 rounded-full" }),
|
|
3136
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
|
|
2836
3137
|
"div",
|
|
2837
3138
|
{
|
|
2838
3139
|
className: "absolute h-2 bg-blue-600 dark:bg-blue-500 rounded-full pointer-events-none",
|
|
2839
3140
|
style: { width: `${percentage}%` }
|
|
2840
3141
|
}
|
|
2841
3142
|
),
|
|
2842
|
-
/* @__PURE__ */ (0,
|
|
3143
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
|
|
2843
3144
|
"div",
|
|
2844
3145
|
{
|
|
2845
3146
|
className: `absolute w-4 h-4 -ml-2 rounded-sm bg-white dark:bg-gray-800 border-2 border-blue-600 shadow-md pointer-events-none z-10
|
|
@@ -2848,7 +3149,7 @@ var Slider = ({
|
|
|
2848
3149
|
style: { left: `${percentage}%` }
|
|
2849
3150
|
}
|
|
2850
3151
|
),
|
|
2851
|
-
/* @__PURE__ */ (0,
|
|
3152
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
|
|
2852
3153
|
"input",
|
|
2853
3154
|
{
|
|
2854
3155
|
type: "range",
|
|
@@ -2871,7 +3172,7 @@ var Slider = ({
|
|
|
2871
3172
|
|
|
2872
3173
|
// src/components/Avatar.tsx
|
|
2873
3174
|
var import_react19 = __toESM(require("react"));
|
|
2874
|
-
var
|
|
3175
|
+
var import_jsx_runtime95 = require("react/jsx-runtime");
|
|
2875
3176
|
var Avatar = ({
|
|
2876
3177
|
src,
|
|
2877
3178
|
alt,
|
|
@@ -2899,11 +3200,11 @@ var Avatar = ({
|
|
|
2899
3200
|
};
|
|
2900
3201
|
const showImage = src && !imageError;
|
|
2901
3202
|
const showInitials = !showImage && name;
|
|
2902
|
-
return /* @__PURE__ */ (0,
|
|
3203
|
+
return /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
|
|
2903
3204
|
"div",
|
|
2904
3205
|
{
|
|
2905
3206
|
className: `${sizeClasses7[size]} ${shapeClass} flex items-center justify-center overflow-hidden ${showImage ? "bg-gray-200 dark:bg-gray-700" : `${fallbackColor} text-white`} ${className}`,
|
|
2906
|
-
children: showImage ? /* @__PURE__ */ (0,
|
|
3207
|
+
children: showImage ? /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
|
|
2907
3208
|
"img",
|
|
2908
3209
|
{
|
|
2909
3210
|
src,
|
|
@@ -2911,13 +3212,13 @@ var Avatar = ({
|
|
|
2911
3212
|
className: "w-full h-full object-cover",
|
|
2912
3213
|
onError: () => setImageError(true)
|
|
2913
3214
|
}
|
|
2914
|
-
) : showInitials ? /* @__PURE__ */ (0,
|
|
3215
|
+
) : showInitials ? /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("span", { className: "font-semibold select-none", children: getInitials(name) }) : /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
|
|
2915
3216
|
"svg",
|
|
2916
3217
|
{
|
|
2917
3218
|
className: "w-full h-full text-gray-400 dark:text-gray-600",
|
|
2918
3219
|
fill: "currentColor",
|
|
2919
3220
|
viewBox: "0 0 24 24",
|
|
2920
|
-
children: /* @__PURE__ */ (0,
|
|
3221
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("path", { d: "M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z" })
|
|
2921
3222
|
}
|
|
2922
3223
|
)
|
|
2923
3224
|
}
|
|
@@ -2925,7 +3226,7 @@ var Avatar = ({
|
|
|
2925
3226
|
};
|
|
2926
3227
|
|
|
2927
3228
|
// src/components/Textarea.tsx
|
|
2928
|
-
var
|
|
3229
|
+
var import_jsx_runtime96 = require("react/jsx-runtime");
|
|
2929
3230
|
var Textarea = ({
|
|
2930
3231
|
label,
|
|
2931
3232
|
error,
|
|
@@ -2952,9 +3253,9 @@ var Textarea = ({
|
|
|
2952
3253
|
bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100
|
|
2953
3254
|
placeholder:text-gray-500 dark:placeholder:text-gray-400
|
|
2954
3255
|
disabled:opacity-50 disabled:cursor-not-allowed disabled:bg-gray-50 dark:disabled:bg-gray-900`;
|
|
2955
|
-
return /* @__PURE__ */ (0,
|
|
2956
|
-
label && /* @__PURE__ */ (0,
|
|
2957
|
-
/* @__PURE__ */ (0,
|
|
3256
|
+
return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: `w-full ${className}`, children: [
|
|
3257
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: label }),
|
|
3258
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
|
|
2958
3259
|
"textarea",
|
|
2959
3260
|
{
|
|
2960
3261
|
className: `${baseClasses} ${sizeClasses7[size]} ${resizeClasses[resize]}`,
|
|
@@ -2962,14 +3263,14 @@ var Textarea = ({
|
|
|
2962
3263
|
...props
|
|
2963
3264
|
}
|
|
2964
3265
|
),
|
|
2965
|
-
error && /* @__PURE__ */ (0,
|
|
2966
|
-
helperText && !error && /* @__PURE__ */ (0,
|
|
3266
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error }),
|
|
3267
|
+
helperText && !error && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("p", { className: "mt-1 text-sm text-gray-500 dark:text-gray-400", children: helperText })
|
|
2967
3268
|
] });
|
|
2968
3269
|
};
|
|
2969
3270
|
|
|
2970
3271
|
// src/components/RichTextEditor.tsx
|
|
2971
3272
|
var import_react20 = require("react");
|
|
2972
|
-
var
|
|
3273
|
+
var import_jsx_runtime97 = require("react/jsx-runtime");
|
|
2973
3274
|
var RichTextEditor = ({
|
|
2974
3275
|
value = "",
|
|
2975
3276
|
onChange,
|
|
@@ -3163,11 +3464,11 @@ var RichTextEditor = ({
|
|
|
3163
3464
|
const editorBaseClass = themeName === "minimalistic" ? "bg-transparent border-2 border-white text-white placeholder:text-gray-500" : "bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 text-gray-900 dark:text-gray-100";
|
|
3164
3465
|
const focusClass = isFocused && !disabled ? themeName === "minimalistic" ? "border-white" : "border-blue-500 dark:border-blue-400 ring-2 ring-blue-500/20" : "";
|
|
3165
3466
|
const errorClass = error ? "border-red-500 dark:border-red-400" : "";
|
|
3166
|
-
return /* @__PURE__ */ (0,
|
|
3167
|
-
label && /* @__PURE__ */ (0,
|
|
3168
|
-
/* @__PURE__ */ (0,
|
|
3169
|
-
/* @__PURE__ */ (0,
|
|
3170
|
-
/* @__PURE__ */ (0,
|
|
3467
|
+
return /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: `w-full ${className}`, children: [
|
|
3468
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2", children: label }),
|
|
3469
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: `rounded-t-lg border-b ${editorBaseClass} p-2 flex flex-wrap gap-1`, children: [
|
|
3470
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "flex gap-1", children: [
|
|
3471
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
3171
3472
|
"button",
|
|
3172
3473
|
{
|
|
3173
3474
|
type: "button",
|
|
@@ -3175,10 +3476,10 @@ var RichTextEditor = ({
|
|
|
3175
3476
|
className: getButtonClass(activeFormats.has("bold")),
|
|
3176
3477
|
disabled,
|
|
3177
3478
|
title: "Bold (Ctrl+B)",
|
|
3178
|
-
children: /* @__PURE__ */ (0,
|
|
3479
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("svg", { className: "w-4 h-4", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("path", { d: "M12.78 4c1.09 0 2.04.38 2.84 1.14.8.76 1.2 1.74 1.2 2.94 0 .9-.25 1.68-.76 2.36-.51.68-1.2 1.14-2.04 1.38v.08c1.06.22 1.89.7 2.48 1.44.59.74.88 1.64.88 2.7 0 1.34-.47 2.43-1.41 3.27C14.96 19.77 13.74 20 12.24 20H4V4h8.78zm-.66 7.14c.62 0 1.12-.18 1.5-.54.38-.36.57-.84.57-1.44 0-.6-.19-1.08-.57-1.44-.38-.36-.88-.54-1.5-.54H7.5v3.96h4.62zm.24 6.86c.68 0 1.24-.19 1.68-.57.44-.38.66-.9.66-1.56 0-.66-.22-1.18-.66-1.56-.44-.38-1-.57-1.68-.57H7.5v4.26h4.86z" }) })
|
|
3179
3480
|
}
|
|
3180
3481
|
),
|
|
3181
|
-
/* @__PURE__ */ (0,
|
|
3482
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
3182
3483
|
"button",
|
|
3183
3484
|
{
|
|
3184
3485
|
type: "button",
|
|
@@ -3186,10 +3487,10 @@ var RichTextEditor = ({
|
|
|
3186
3487
|
className: getButtonClass(activeFormats.has("italic")),
|
|
3187
3488
|
disabled,
|
|
3188
3489
|
title: "Italic (Ctrl+I)",
|
|
3189
|
-
children: /* @__PURE__ */ (0,
|
|
3490
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("svg", { className: "w-4 h-4", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("path", { d: "M11.59 4H16v2h-1.71l-3.58 8H13v2H8v-2h1.71l3.58-8H11.59V4z" }) })
|
|
3190
3491
|
}
|
|
3191
3492
|
),
|
|
3192
|
-
/* @__PURE__ */ (0,
|
|
3493
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
3193
3494
|
"button",
|
|
3194
3495
|
{
|
|
3195
3496
|
type: "button",
|
|
@@ -3197,10 +3498,10 @@ var RichTextEditor = ({
|
|
|
3197
3498
|
className: getButtonClass(activeFormats.has("underline")),
|
|
3198
3499
|
disabled,
|
|
3199
3500
|
title: "Underline (Ctrl+U)",
|
|
3200
|
-
children: /* @__PURE__ */ (0,
|
|
3501
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("svg", { className: "w-4 h-4", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("path", { d: "M10 16c-2.21 0-4-1.79-4-4V4h2v8c0 1.1.9 2 2 2s2-.9 2-2V4h2v8c0 2.21-1.79 4-4 4zM4 18h12v2H4v-2z" }) })
|
|
3201
3502
|
}
|
|
3202
3503
|
),
|
|
3203
|
-
/* @__PURE__ */ (0,
|
|
3504
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
3204
3505
|
"button",
|
|
3205
3506
|
{
|
|
3206
3507
|
type: "button",
|
|
@@ -3208,13 +3509,13 @@ var RichTextEditor = ({
|
|
|
3208
3509
|
className: getButtonClass(activeFormats.has("strikeThrough")),
|
|
3209
3510
|
disabled,
|
|
3210
3511
|
title: "Strikethrough",
|
|
3211
|
-
children: /* @__PURE__ */ (0,
|
|
3512
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("svg", { className: "w-4 h-4", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("path", { d: "M10 4c-2 0-3.5.5-4.5 1.5S4 7.5 4 9h2c0-.7.2-1.2.6-1.6.4-.4 1-.6 1.9-.6.8 0 1.4.2 1.8.5.4.3.7.8.7 1.4 0 .5-.2.9-.5 1.2-.3.3-.9.6-1.8.9l-.7.2c-1.2.3-2.1.7-2.7 1.2C4.2 12.7 4 13.5 4 14.5c0 1.1.4 2 1.1 2.6.7.6 1.7.9 3 .9 2.1 0 3.6-.5 4.6-1.5.9-1 1.3-2.3 1.3-3.8h-2c0 .9-.2 1.6-.7 2.1-.5.5-1.2.7-2.2.7-.8 0-1.4-.2-1.8-.5-.4-.3-.6-.8-.6-1.4 0-.5.2-.9.5-1.2.3-.3.9-.6 1.8-.9l.7-.2c1.2-.3 2.1-.7 2.7-1.2.6-.5.9-1.3.9-2.3 0-1.2-.4-2.1-1.2-2.8-.8-.7-1.9-1-3.3-1zM2 10h16v1H2v-1z" }) })
|
|
3212
3513
|
}
|
|
3213
3514
|
)
|
|
3214
3515
|
] }),
|
|
3215
|
-
/* @__PURE__ */ (0,
|
|
3216
|
-
/* @__PURE__ */ (0,
|
|
3217
|
-
/* @__PURE__ */ (0,
|
|
3516
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)("div", { className: "w-px bg-gray-300 dark:bg-gray-600 mx-1" }),
|
|
3517
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "flex gap-1", children: [
|
|
3518
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
3218
3519
|
"button",
|
|
3219
3520
|
{
|
|
3220
3521
|
type: "button",
|
|
@@ -3222,10 +3523,10 @@ var RichTextEditor = ({
|
|
|
3222
3523
|
className: getButtonClass(activeFormats.has("h1")),
|
|
3223
3524
|
disabled,
|
|
3224
3525
|
title: "Heading 1",
|
|
3225
|
-
children: /* @__PURE__ */ (0,
|
|
3526
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("svg", { className: "w-4 h-4", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("text", { x: "2", y: "16", fontSize: "14", fontWeight: "bold", children: "H1" }) })
|
|
3226
3527
|
}
|
|
3227
3528
|
),
|
|
3228
|
-
/* @__PURE__ */ (0,
|
|
3529
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
3229
3530
|
"button",
|
|
3230
3531
|
{
|
|
3231
3532
|
type: "button",
|
|
@@ -3233,10 +3534,10 @@ var RichTextEditor = ({
|
|
|
3233
3534
|
className: getButtonClass(activeFormats.has("h2")),
|
|
3234
3535
|
disabled,
|
|
3235
3536
|
title: "Heading 2",
|
|
3236
|
-
children: /* @__PURE__ */ (0,
|
|
3537
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("svg", { className: "w-4 h-4", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("text", { x: "2", y: "16", fontSize: "14", fontWeight: "bold", children: "H2" }) })
|
|
3237
3538
|
}
|
|
3238
3539
|
),
|
|
3239
|
-
/* @__PURE__ */ (0,
|
|
3540
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
3240
3541
|
"button",
|
|
3241
3542
|
{
|
|
3242
3543
|
type: "button",
|
|
@@ -3244,13 +3545,13 @@ var RichTextEditor = ({
|
|
|
3244
3545
|
className: getButtonClass(activeFormats.has("h3")),
|
|
3245
3546
|
disabled,
|
|
3246
3547
|
title: "Heading 3",
|
|
3247
|
-
children: /* @__PURE__ */ (0,
|
|
3548
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("svg", { className: "w-4 h-4", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("text", { x: "2", y: "16", fontSize: "14", fontWeight: "bold", children: "H3" }) })
|
|
3248
3549
|
}
|
|
3249
3550
|
)
|
|
3250
3551
|
] }),
|
|
3251
|
-
/* @__PURE__ */ (0,
|
|
3252
|
-
/* @__PURE__ */ (0,
|
|
3253
|
-
/* @__PURE__ */ (0,
|
|
3552
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)("div", { className: "w-px bg-gray-300 dark:bg-gray-600 mx-1" }),
|
|
3553
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "flex gap-1", children: [
|
|
3554
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
3254
3555
|
"button",
|
|
3255
3556
|
{
|
|
3256
3557
|
type: "button",
|
|
@@ -3258,10 +3559,10 @@ var RichTextEditor = ({
|
|
|
3258
3559
|
className: getButtonClass(activeFormats.has("ul")),
|
|
3259
3560
|
disabled,
|
|
3260
3561
|
title: "Bullet List",
|
|
3261
|
-
children: /* @__PURE__ */ (0,
|
|
3562
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("svg", { className: "w-4 h-4", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("path", { d: "M4 4h2v2H4V4zm4 0h8v2H8V4zM4 8h2v2H4V8zm4 0h8v2H8V8zm-4 4h2v2H4v-2zm4 0h8v2H8v-2zm-4 4h2v2H4v-2zm4 0h8v2H8v-2z" }) })
|
|
3262
3563
|
}
|
|
3263
3564
|
),
|
|
3264
|
-
/* @__PURE__ */ (0,
|
|
3565
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
3265
3566
|
"button",
|
|
3266
3567
|
{
|
|
3267
3568
|
type: "button",
|
|
@@ -3269,13 +3570,13 @@ var RichTextEditor = ({
|
|
|
3269
3570
|
className: getButtonClass(activeFormats.has("ol")),
|
|
3270
3571
|
disabled,
|
|
3271
3572
|
title: "Numbered List",
|
|
3272
|
-
children: /* @__PURE__ */ (0,
|
|
3573
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("svg", { className: "w-4 h-4", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("path", { d: "M4 4h1v3H4V4zm0 4h1v1H3V8h2v1H4zm1 2H3v1h2v1H3v1h2v-3zM8 4h8v2H8V4zm0 4h8v2H8V8zm0 4h8v2H8v-2zm0 4h8v2H8v-2z" }) })
|
|
3273
3574
|
}
|
|
3274
3575
|
)
|
|
3275
3576
|
] }),
|
|
3276
|
-
/* @__PURE__ */ (0,
|
|
3277
|
-
/* @__PURE__ */ (0,
|
|
3278
|
-
/* @__PURE__ */ (0,
|
|
3577
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)("div", { className: "w-px bg-gray-300 dark:bg-gray-600 mx-1" }),
|
|
3578
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "flex gap-1", children: [
|
|
3579
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
3279
3580
|
"button",
|
|
3280
3581
|
{
|
|
3281
3582
|
type: "button",
|
|
@@ -3283,10 +3584,10 @@ var RichTextEditor = ({
|
|
|
3283
3584
|
className: getButtonClass(false),
|
|
3284
3585
|
disabled,
|
|
3285
3586
|
title: "Insert Link",
|
|
3286
|
-
children: /* @__PURE__ */ (0,
|
|
3587
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1" }) })
|
|
3287
3588
|
}
|
|
3288
3589
|
),
|
|
3289
|
-
/* @__PURE__ */ (0,
|
|
3590
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
3290
3591
|
"button",
|
|
3291
3592
|
{
|
|
3292
3593
|
type: "button",
|
|
@@ -3294,10 +3595,10 @@ var RichTextEditor = ({
|
|
|
3294
3595
|
className: getButtonClass(false),
|
|
3295
3596
|
disabled,
|
|
3296
3597
|
title: "Insert Image/Video",
|
|
3297
|
-
children: /* @__PURE__ */ (0,
|
|
3598
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z" }) })
|
|
3298
3599
|
}
|
|
3299
3600
|
),
|
|
3300
|
-
/* @__PURE__ */ (0,
|
|
3601
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
3301
3602
|
"button",
|
|
3302
3603
|
{
|
|
3303
3604
|
type: "button",
|
|
@@ -3305,12 +3606,12 @@ var RichTextEditor = ({
|
|
|
3305
3606
|
className: getButtonClass(false),
|
|
3306
3607
|
disabled,
|
|
3307
3608
|
title: "Code",
|
|
3308
|
-
children: /* @__PURE__ */ (0,
|
|
3609
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4" }) })
|
|
3309
3610
|
}
|
|
3310
3611
|
)
|
|
3311
3612
|
] })
|
|
3312
3613
|
] }),
|
|
3313
|
-
/* @__PURE__ */ (0,
|
|
3614
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
3314
3615
|
"div",
|
|
3315
3616
|
{
|
|
3316
3617
|
ref: editorRef,
|
|
@@ -3335,9 +3636,9 @@ var RichTextEditor = ({
|
|
|
3335
3636
|
suppressContentEditableWarning: true
|
|
3336
3637
|
}
|
|
3337
3638
|
),
|
|
3338
|
-
error && /* @__PURE__ */ (0,
|
|
3339
|
-
helperText && !error && /* @__PURE__ */ (0,
|
|
3340
|
-
/* @__PURE__ */ (0,
|
|
3639
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error }),
|
|
3640
|
+
helperText && !error && /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("p", { className: "mt-1 text-sm text-gray-500 dark:text-gray-400", children: helperText }),
|
|
3641
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
3341
3642
|
Modal,
|
|
3342
3643
|
{
|
|
3343
3644
|
isOpen: showLinkModal,
|
|
@@ -3347,8 +3648,8 @@ var RichTextEditor = ({
|
|
|
3347
3648
|
},
|
|
3348
3649
|
title: "Insert Link",
|
|
3349
3650
|
size: "sm",
|
|
3350
|
-
children: /* @__PURE__ */ (0,
|
|
3351
|
-
/* @__PURE__ */ (0,
|
|
3651
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "space-y-4", children: [
|
|
3652
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
3352
3653
|
TextInput,
|
|
3353
3654
|
{
|
|
3354
3655
|
label: "URL",
|
|
@@ -3364,8 +3665,8 @@ var RichTextEditor = ({
|
|
|
3364
3665
|
}
|
|
3365
3666
|
}
|
|
3366
3667
|
),
|
|
3367
|
-
/* @__PURE__ */ (0,
|
|
3368
|
-
/* @__PURE__ */ (0,
|
|
3668
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "flex gap-2 justify-end", children: [
|
|
3669
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
3369
3670
|
Button,
|
|
3370
3671
|
{
|
|
3371
3672
|
variant: "secondary",
|
|
@@ -3376,7 +3677,7 @@ var RichTextEditor = ({
|
|
|
3376
3677
|
children: "Cancel"
|
|
3377
3678
|
}
|
|
3378
3679
|
),
|
|
3379
|
-
/* @__PURE__ */ (0,
|
|
3680
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
3380
3681
|
Button,
|
|
3381
3682
|
{
|
|
3382
3683
|
variant: "primary",
|
|
@@ -3389,7 +3690,7 @@ var RichTextEditor = ({
|
|
|
3389
3690
|
] })
|
|
3390
3691
|
}
|
|
3391
3692
|
),
|
|
3392
|
-
/* @__PURE__ */ (0,
|
|
3693
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
3393
3694
|
Modal,
|
|
3394
3695
|
{
|
|
3395
3696
|
isOpen: showImageModal,
|
|
@@ -3400,8 +3701,8 @@ var RichTextEditor = ({
|
|
|
3400
3701
|
},
|
|
3401
3702
|
title: "Insert Image",
|
|
3402
3703
|
size: "sm",
|
|
3403
|
-
children: /* @__PURE__ */ (0,
|
|
3404
|
-
/* @__PURE__ */ (0,
|
|
3704
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "space-y-4", children: [
|
|
3705
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
3405
3706
|
TextInput,
|
|
3406
3707
|
{
|
|
3407
3708
|
label: "Image URL",
|
|
@@ -3417,7 +3718,7 @@ var RichTextEditor = ({
|
|
|
3417
3718
|
}
|
|
3418
3719
|
}
|
|
3419
3720
|
),
|
|
3420
|
-
/* @__PURE__ */ (0,
|
|
3721
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
3421
3722
|
TextInput,
|
|
3422
3723
|
{
|
|
3423
3724
|
label: "Alt Text (optional)",
|
|
@@ -3426,8 +3727,8 @@ var RichTextEditor = ({
|
|
|
3426
3727
|
placeholder: "Describe the image"
|
|
3427
3728
|
}
|
|
3428
3729
|
),
|
|
3429
|
-
/* @__PURE__ */ (0,
|
|
3430
|
-
/* @__PURE__ */ (0,
|
|
3730
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "flex gap-2 justify-end", children: [
|
|
3731
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
3431
3732
|
Button,
|
|
3432
3733
|
{
|
|
3433
3734
|
variant: "secondary",
|
|
@@ -3439,7 +3740,7 @@ var RichTextEditor = ({
|
|
|
3439
3740
|
children: "Cancel"
|
|
3440
3741
|
}
|
|
3441
3742
|
),
|
|
3442
|
-
/* @__PURE__ */ (0,
|
|
3743
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
3443
3744
|
Button,
|
|
3444
3745
|
{
|
|
3445
3746
|
variant: "primary",
|
|
@@ -3457,7 +3758,7 @@ var RichTextEditor = ({
|
|
|
3457
3758
|
|
|
3458
3759
|
// src/components/Toast.tsx
|
|
3459
3760
|
var import_react21 = require("react");
|
|
3460
|
-
var
|
|
3761
|
+
var import_jsx_runtime98 = require("react/jsx-runtime");
|
|
3461
3762
|
var ToastContext = (0, import_react21.createContext)(void 0);
|
|
3462
3763
|
var useToast = () => {
|
|
3463
3764
|
const context = (0, import_react21.useContext)(ToastContext);
|
|
@@ -3488,9 +3789,9 @@ var ToastProvider = ({ children, position = "top-right" }) => {
|
|
|
3488
3789
|
"top-center": "top-4 left-1/2 -translate-x-1/2",
|
|
3489
3790
|
"bottom-center": "bottom-4 left-1/2 -translate-x-1/2"
|
|
3490
3791
|
};
|
|
3491
|
-
return /* @__PURE__ */ (0,
|
|
3792
|
+
return /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(ToastContext.Provider, { value: { toasts, addToast, removeToast }, children: [
|
|
3492
3793
|
children,
|
|
3493
|
-
/* @__PURE__ */ (0,
|
|
3794
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)("div", { className: `fixed ${positionClasses2[position]} z-50 flex flex-col gap-2 max-w-md`, children: toasts.map((toast2) => /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(ToastItem, { toast: toast2, onClose: () => removeToast(toast2.id) }, toast2.id)) })
|
|
3494
3795
|
] });
|
|
3495
3796
|
};
|
|
3496
3797
|
var ToastItem = ({ toast: toast2, onClose }) => {
|
|
@@ -3501,27 +3802,27 @@ var ToastItem = ({ toast: toast2, onClose }) => {
|
|
|
3501
3802
|
info: "bg-blue-50 dark:bg-blue-900/30 border-blue-500 text-blue-800 dark:text-blue-200"
|
|
3502
3803
|
};
|
|
3503
3804
|
const typeIcons = {
|
|
3504
|
-
success: /* @__PURE__ */ (0,
|
|
3505
|
-
error: /* @__PURE__ */ (0,
|
|
3506
|
-
warning: /* @__PURE__ */ (0,
|
|
3507
|
-
info: /* @__PURE__ */ (0,
|
|
3805
|
+
success: /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(CheckIcon, { size: "sm", className: "text-green-600 dark:text-green-400" }),
|
|
3806
|
+
error: /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(CloseIcon, { size: "sm", className: "text-red-600 dark:text-red-400" }),
|
|
3807
|
+
warning: /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("svg", { className: "w-4 h-4 text-yellow-600 dark:text-yellow-400", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("path", { fillRule: "evenodd", d: "M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z", clipRule: "evenodd" }) }),
|
|
3808
|
+
info: /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("svg", { className: "w-4 h-4 text-blue-600 dark:text-blue-400", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("path", { fillRule: "evenodd", d: "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z", clipRule: "evenodd" }) })
|
|
3508
3809
|
};
|
|
3509
3810
|
const type = toast2.type || "info";
|
|
3510
|
-
return /* @__PURE__ */ (0,
|
|
3811
|
+
return /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(
|
|
3511
3812
|
"div",
|
|
3512
3813
|
{
|
|
3513
3814
|
className: `flex items-start gap-3 p-4 rounded-lg border-l-4 shadow-lg backdrop-blur-sm ${typeStyles[type]} animate-slide-in`,
|
|
3514
3815
|
role: "alert",
|
|
3515
3816
|
children: [
|
|
3516
|
-
/* @__PURE__ */ (0,
|
|
3517
|
-
/* @__PURE__ */ (0,
|
|
3518
|
-
/* @__PURE__ */ (0,
|
|
3817
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)("div", { className: "flex-shrink-0 mt-0.5", children: typeIcons[type] }),
|
|
3818
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)("p", { className: "flex-1 text-sm font-medium", children: toast2.message }),
|
|
3819
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
|
|
3519
3820
|
"button",
|
|
3520
3821
|
{
|
|
3521
3822
|
onClick: onClose,
|
|
3522
3823
|
className: "flex-shrink-0 text-gray-400 hover:text-gray-600 dark:hover:text-gray-200 transition-colors",
|
|
3523
3824
|
"aria-label": "Close",
|
|
3524
|
-
children: /* @__PURE__ */ (0,
|
|
3825
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(CloseIcon, { size: "sm" })
|
|
3525
3826
|
}
|
|
3526
3827
|
)
|
|
3527
3828
|
]
|
|
@@ -3553,7 +3854,7 @@ var toast = {
|
|
|
3553
3854
|
|
|
3554
3855
|
// src/components/Stepper.tsx
|
|
3555
3856
|
var import_react22 = __toESM(require("react"));
|
|
3556
|
-
var
|
|
3857
|
+
var import_jsx_runtime99 = require("react/jsx-runtime");
|
|
3557
3858
|
var Stepper = ({
|
|
3558
3859
|
steps,
|
|
3559
3860
|
currentStep,
|
|
@@ -3561,18 +3862,18 @@ var Stepper = ({
|
|
|
3561
3862
|
className = ""
|
|
3562
3863
|
}) => {
|
|
3563
3864
|
const isHorizontal = orientation === "horizontal";
|
|
3564
|
-
return /* @__PURE__ */ (0,
|
|
3865
|
+
return /* @__PURE__ */ (0, import_jsx_runtime99.jsx)("div", { className: `${isHorizontal ? "flex items-center" : "flex flex-col"} ${className}`, children: steps.map((step, index) => {
|
|
3565
3866
|
const stepNumber = index + 1;
|
|
3566
3867
|
const isActive = stepNumber === currentStep;
|
|
3567
3868
|
const isCompleted = stepNumber < currentStep;
|
|
3568
3869
|
const isLast = index === steps.length - 1;
|
|
3569
|
-
return /* @__PURE__ */ (0,
|
|
3570
|
-
/* @__PURE__ */ (0,
|
|
3571
|
-
/* @__PURE__ */ (0,
|
|
3870
|
+
return /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(import_react22.default.Fragment, { children: [
|
|
3871
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: `flex ${isHorizontal ? "flex-col items-center" : "flex-row items-start"} ${isHorizontal ? "" : "flex-1"}`, children: [
|
|
3872
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)("div", { className: "flex items-center", children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
|
|
3572
3873
|
"div",
|
|
3573
3874
|
{
|
|
3574
3875
|
className: `flex items-center justify-center w-10 h-10 rounded-full border-2 transition-all ${isCompleted ? "bg-blue-600 border-blue-600 dark:bg-blue-500 dark:border-blue-500" : isActive ? "border-blue-600 bg-white dark:border-blue-500 dark:bg-gray-800" : "border-gray-300 bg-white dark:border-gray-600 dark:bg-gray-800"}`,
|
|
3575
|
-
children: isCompleted ? /* @__PURE__ */ (0,
|
|
3876
|
+
children: isCompleted ? /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(CheckIcon, { size: "sm", className: "text-white" }) : /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
|
|
3576
3877
|
"span",
|
|
3577
3878
|
{
|
|
3578
3879
|
className: `text-sm font-semibold ${isActive ? "text-blue-600 dark:text-blue-400" : "text-gray-500 dark:text-gray-400"}`,
|
|
@@ -3581,18 +3882,18 @@ var Stepper = ({
|
|
|
3581
3882
|
)
|
|
3582
3883
|
}
|
|
3583
3884
|
) }),
|
|
3584
|
-
/* @__PURE__ */ (0,
|
|
3585
|
-
/* @__PURE__ */ (0,
|
|
3885
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: `${isHorizontal ? "mt-2 text-center" : "ml-4 pb-8"} ${isLast && !isHorizontal ? "pb-0" : ""}`, children: [
|
|
3886
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
|
|
3586
3887
|
"p",
|
|
3587
3888
|
{
|
|
3588
3889
|
className: `text-sm font-medium ${isActive || isCompleted ? "text-gray-900 dark:text-gray-100" : "text-gray-500 dark:text-gray-400"}`,
|
|
3589
3890
|
children: step.label
|
|
3590
3891
|
}
|
|
3591
3892
|
),
|
|
3592
|
-
step.description && /* @__PURE__ */ (0,
|
|
3893
|
+
step.description && /* @__PURE__ */ (0, import_jsx_runtime99.jsx)("p", { className: "text-xs text-gray-500 dark:text-gray-400 mt-1", children: step.description })
|
|
3593
3894
|
] })
|
|
3594
3895
|
] }),
|
|
3595
|
-
!isLast && /* @__PURE__ */ (0,
|
|
3896
|
+
!isLast && /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
|
|
3596
3897
|
"div",
|
|
3597
3898
|
{
|
|
3598
3899
|
className: `${isHorizontal ? "flex-1 h-0.5 mx-4" : "w-0.5 h-full ml-5 -mt-8"} ${isCompleted || isActive && stepNumber < currentStep ? "bg-blue-600 dark:bg-blue-500" : "bg-gray-300 dark:bg-gray-600"}`
|
|
@@ -3603,7 +3904,7 @@ var Stepper = ({
|
|
|
3603
3904
|
};
|
|
3604
3905
|
|
|
3605
3906
|
// src/components/Divider.tsx
|
|
3606
|
-
var
|
|
3907
|
+
var import_jsx_runtime100 = require("react/jsx-runtime");
|
|
3607
3908
|
var Divider = ({
|
|
3608
3909
|
orientation = "horizontal",
|
|
3609
3910
|
variant = "solid",
|
|
@@ -3622,14 +3923,14 @@ var Divider = ({
|
|
|
3622
3923
|
center: "justify-center",
|
|
3623
3924
|
right: "justify-end"
|
|
3624
3925
|
};
|
|
3625
|
-
return /* @__PURE__ */ (0,
|
|
3626
|
-
labelPosition !== "left" && /* @__PURE__ */ (0,
|
|
3627
|
-
/* @__PURE__ */ (0,
|
|
3628
|
-
labelPosition !== "right" && /* @__PURE__ */ (0,
|
|
3926
|
+
return /* @__PURE__ */ (0, import_jsx_runtime100.jsxs)("div", { className: `flex items-center ${alignmentClasses[labelPosition]} ${className}`, role: "separator", children: [
|
|
3927
|
+
labelPosition !== "left" && /* @__PURE__ */ (0, import_jsx_runtime100.jsx)("div", { className: `flex-1 border-t ${variantClasses[variant]} border-gray-300 dark:border-gray-600` }),
|
|
3928
|
+
/* @__PURE__ */ (0, import_jsx_runtime100.jsx)("span", { className: "px-4 text-sm text-gray-500 dark:text-gray-400", children: label }),
|
|
3929
|
+
labelPosition !== "right" && /* @__PURE__ */ (0, import_jsx_runtime100.jsx)("div", { className: `flex-1 border-t ${variantClasses[variant]} border-gray-300 dark:border-gray-600` })
|
|
3629
3930
|
] });
|
|
3630
3931
|
}
|
|
3631
3932
|
if (orientation === "vertical") {
|
|
3632
|
-
return /* @__PURE__ */ (0,
|
|
3933
|
+
return /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(
|
|
3633
3934
|
"div",
|
|
3634
3935
|
{
|
|
3635
3936
|
className: `inline-block h-full border-l ${variantClasses[variant]} border-gray-300 dark:border-gray-600 ${className}`,
|
|
@@ -3638,7 +3939,7 @@ var Divider = ({
|
|
|
3638
3939
|
}
|
|
3639
3940
|
);
|
|
3640
3941
|
}
|
|
3641
|
-
return /* @__PURE__ */ (0,
|
|
3942
|
+
return /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(
|
|
3642
3943
|
"hr",
|
|
3643
3944
|
{
|
|
3644
3945
|
className: `border-t ${variantClasses[variant]} border-gray-300 dark:border-gray-600 ${className}`,
|
|
@@ -3649,7 +3950,7 @@ var Divider = ({
|
|
|
3649
3950
|
|
|
3650
3951
|
// src/components/FileUpload.tsx
|
|
3651
3952
|
var import_react23 = require("react");
|
|
3652
|
-
var
|
|
3953
|
+
var import_jsx_runtime101 = require("react/jsx-runtime");
|
|
3653
3954
|
var FileUpload = ({
|
|
3654
3955
|
accept,
|
|
3655
3956
|
multiple = false,
|
|
@@ -3722,9 +4023,9 @@ var FileUpload = ({
|
|
|
3722
4023
|
setFiles(newFiles);
|
|
3723
4024
|
onChange?.(newFiles);
|
|
3724
4025
|
};
|
|
3725
|
-
return /* @__PURE__ */ (0,
|
|
3726
|
-
label && /* @__PURE__ */ (0,
|
|
3727
|
-
/* @__PURE__ */ (0,
|
|
4026
|
+
return /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)("div", { className: `w-full ${className}`, children: [
|
|
4027
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime101.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2", children: label }),
|
|
4028
|
+
/* @__PURE__ */ (0, import_jsx_runtime101.jsxs)(
|
|
3728
4029
|
"div",
|
|
3729
4030
|
{
|
|
3730
4031
|
onDrop: handleDrop,
|
|
@@ -3733,7 +4034,7 @@ var FileUpload = ({
|
|
|
3733
4034
|
onClick: handleClick,
|
|
3734
4035
|
className: `relative border-2 border-dashed rounded-lg p-8 text-center cursor-pointer transition-all ${isDragging ? "border-blue-500 bg-blue-50 dark:bg-blue-900/20" : "border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"} ${disabled ? "opacity-50 cursor-not-allowed" : ""}`,
|
|
3735
4036
|
children: [
|
|
3736
|
-
/* @__PURE__ */ (0,
|
|
4037
|
+
/* @__PURE__ */ (0, import_jsx_runtime101.jsx)(
|
|
3737
4038
|
"input",
|
|
3738
4039
|
{
|
|
3739
4040
|
ref: fileInputRef,
|
|
@@ -3745,14 +4046,14 @@ var FileUpload = ({
|
|
|
3745
4046
|
className: "hidden"
|
|
3746
4047
|
}
|
|
3747
4048
|
),
|
|
3748
|
-
/* @__PURE__ */ (0,
|
|
3749
|
-
/* @__PURE__ */ (0,
|
|
3750
|
-
/* @__PURE__ */ (0,
|
|
3751
|
-
/* @__PURE__ */ (0,
|
|
3752
|
-
/* @__PURE__ */ (0,
|
|
4049
|
+
/* @__PURE__ */ (0, import_jsx_runtime101.jsxs)("div", { className: "flex flex-col items-center gap-2", children: [
|
|
4050
|
+
/* @__PURE__ */ (0, import_jsx_runtime101.jsx)("div", { className: "w-12 h-12 rounded-full bg-gray-100 dark:bg-gray-800 flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(UploadIcon, { size: "lg", className: "text-gray-400 dark:text-gray-500" }) }),
|
|
4051
|
+
/* @__PURE__ */ (0, import_jsx_runtime101.jsxs)("div", { children: [
|
|
4052
|
+
/* @__PURE__ */ (0, import_jsx_runtime101.jsxs)("p", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: [
|
|
4053
|
+
/* @__PURE__ */ (0, import_jsx_runtime101.jsx)("span", { className: "text-blue-600 dark:text-blue-400", children: "Click to upload" }),
|
|
3753
4054
|
" or drag and drop"
|
|
3754
4055
|
] }),
|
|
3755
|
-
/* @__PURE__ */ (0,
|
|
4056
|
+
/* @__PURE__ */ (0, import_jsx_runtime101.jsxs)("p", { className: "text-xs text-gray-500 dark:text-gray-400 mt-1", children: [
|
|
3756
4057
|
accept ? `Accepted: ${accept}` : "Any file type",
|
|
3757
4058
|
maxSize && ` \u2022 Max size: ${formatFileSize(maxSize)}`
|
|
3758
4059
|
] })
|
|
@@ -3761,17 +4062,17 @@ var FileUpload = ({
|
|
|
3761
4062
|
]
|
|
3762
4063
|
}
|
|
3763
4064
|
),
|
|
3764
|
-
helperText && /* @__PURE__ */ (0,
|
|
3765
|
-
files.length > 0 && /* @__PURE__ */ (0,
|
|
4065
|
+
helperText && /* @__PURE__ */ (0, import_jsx_runtime101.jsx)("p", { className: "mt-2 text-sm text-gray-500 dark:text-gray-400", children: helperText }),
|
|
4066
|
+
files.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime101.jsx)("div", { className: "mt-4 space-y-2", children: files.map((file, index) => /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)(
|
|
3766
4067
|
"div",
|
|
3767
4068
|
{
|
|
3768
4069
|
className: "flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700",
|
|
3769
4070
|
children: [
|
|
3770
|
-
/* @__PURE__ */ (0,
|
|
3771
|
-
/* @__PURE__ */ (0,
|
|
3772
|
-
/* @__PURE__ */ (0,
|
|
4071
|
+
/* @__PURE__ */ (0, import_jsx_runtime101.jsxs)("div", { className: "flex-1 min-w-0", children: [
|
|
4072
|
+
/* @__PURE__ */ (0, import_jsx_runtime101.jsx)("p", { className: "text-sm font-medium text-gray-900 dark:text-gray-100 truncate", children: file.name }),
|
|
4073
|
+
/* @__PURE__ */ (0, import_jsx_runtime101.jsx)("p", { className: "text-xs text-gray-500 dark:text-gray-400", children: formatFileSize(file.size) })
|
|
3773
4074
|
] }),
|
|
3774
|
-
/* @__PURE__ */ (0,
|
|
4075
|
+
/* @__PURE__ */ (0, import_jsx_runtime101.jsx)(
|
|
3775
4076
|
"button",
|
|
3776
4077
|
{
|
|
3777
4078
|
onClick: (e) => {
|
|
@@ -3780,7 +4081,7 @@ var FileUpload = ({
|
|
|
3780
4081
|
},
|
|
3781
4082
|
className: "ml-4 text-gray-400 hover:text-red-600 dark:hover:text-red-400 transition-colors",
|
|
3782
4083
|
"aria-label": "Remove file",
|
|
3783
|
-
children: /* @__PURE__ */ (0,
|
|
4084
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(CloseIcon, { size: "sm" })
|
|
3784
4085
|
}
|
|
3785
4086
|
)
|
|
3786
4087
|
]
|
|
@@ -3790,6 +4091,364 @@ var FileUpload = ({
|
|
|
3790
4091
|
] });
|
|
3791
4092
|
};
|
|
3792
4093
|
|
|
4094
|
+
// src/components/AudioPlayer.tsx
|
|
4095
|
+
var import_react24 = require("react");
|
|
4096
|
+
var import_jsx_runtime102 = require("react/jsx-runtime");
|
|
4097
|
+
var AudioPlayer = ({
|
|
4098
|
+
src,
|
|
4099
|
+
title,
|
|
4100
|
+
artist,
|
|
4101
|
+
album,
|
|
4102
|
+
coverArt,
|
|
4103
|
+
variant = "default",
|
|
4104
|
+
autoPlay = false,
|
|
4105
|
+
loop = false,
|
|
4106
|
+
preload = "metadata",
|
|
4107
|
+
onPlay,
|
|
4108
|
+
onPause,
|
|
4109
|
+
onEnded,
|
|
4110
|
+
onTimeUpdate,
|
|
4111
|
+
className = "",
|
|
4112
|
+
showSkipButtons = false,
|
|
4113
|
+
onSkipBack,
|
|
4114
|
+
onSkipForward
|
|
4115
|
+
}) => {
|
|
4116
|
+
const audioRef = (0, import_react24.useRef)(null);
|
|
4117
|
+
const [isPlaying, setIsPlaying] = (0, import_react24.useState)(false);
|
|
4118
|
+
const [currentTime, setCurrentTime] = (0, import_react24.useState)(0);
|
|
4119
|
+
const [duration, setDuration] = (0, import_react24.useState)(0);
|
|
4120
|
+
const [volume, setVolume] = (0, import_react24.useState)(1);
|
|
4121
|
+
const [isMuted, setIsMuted] = (0, import_react24.useState)(false);
|
|
4122
|
+
const [isLoading, setIsLoading] = (0, import_react24.useState)(true);
|
|
4123
|
+
(0, import_react24.useEffect)(() => {
|
|
4124
|
+
const audio = audioRef.current;
|
|
4125
|
+
if (!audio) return;
|
|
4126
|
+
const handleLoadedMetadata = () => {
|
|
4127
|
+
setDuration(audio.duration);
|
|
4128
|
+
setIsLoading(false);
|
|
4129
|
+
};
|
|
4130
|
+
const handleCanPlay = () => {
|
|
4131
|
+
setIsLoading(false);
|
|
4132
|
+
};
|
|
4133
|
+
const handleTimeUpdate = () => {
|
|
4134
|
+
setCurrentTime(audio.currentTime);
|
|
4135
|
+
onTimeUpdate?.(audio.currentTime);
|
|
4136
|
+
};
|
|
4137
|
+
const handleEnded = () => {
|
|
4138
|
+
setIsPlaying(false);
|
|
4139
|
+
onEnded?.();
|
|
4140
|
+
};
|
|
4141
|
+
const handlePlay = () => {
|
|
4142
|
+
setIsPlaying(true);
|
|
4143
|
+
onPlay?.();
|
|
4144
|
+
};
|
|
4145
|
+
const handlePause = () => {
|
|
4146
|
+
setIsPlaying(false);
|
|
4147
|
+
onPause?.();
|
|
4148
|
+
};
|
|
4149
|
+
const handleError = (e) => {
|
|
4150
|
+
console.error("Audio error:", e);
|
|
4151
|
+
setIsPlaying(false);
|
|
4152
|
+
setIsLoading(false);
|
|
4153
|
+
};
|
|
4154
|
+
const handleLoadStart = () => {
|
|
4155
|
+
setIsLoading(true);
|
|
4156
|
+
};
|
|
4157
|
+
audio.addEventListener("loadstart", handleLoadStart);
|
|
4158
|
+
audio.addEventListener("loadedmetadata", handleLoadedMetadata);
|
|
4159
|
+
audio.addEventListener("canplay", handleCanPlay);
|
|
4160
|
+
audio.addEventListener("timeupdate", handleTimeUpdate);
|
|
4161
|
+
audio.addEventListener("ended", handleEnded);
|
|
4162
|
+
audio.addEventListener("play", handlePlay);
|
|
4163
|
+
audio.addEventListener("pause", handlePause);
|
|
4164
|
+
audio.addEventListener("error", handleError);
|
|
4165
|
+
if (audio.readyState >= 2) {
|
|
4166
|
+
setIsLoading(false);
|
|
4167
|
+
setDuration(audio.duration);
|
|
4168
|
+
}
|
|
4169
|
+
return () => {
|
|
4170
|
+
audio.removeEventListener("loadstart", handleLoadStart);
|
|
4171
|
+
audio.removeEventListener("loadedmetadata", handleLoadedMetadata);
|
|
4172
|
+
audio.removeEventListener("canplay", handleCanPlay);
|
|
4173
|
+
audio.removeEventListener("timeupdate", handleTimeUpdate);
|
|
4174
|
+
audio.removeEventListener("ended", handleEnded);
|
|
4175
|
+
audio.removeEventListener("play", handlePlay);
|
|
4176
|
+
audio.removeEventListener("pause", handlePause);
|
|
4177
|
+
audio.removeEventListener("error", handleError);
|
|
4178
|
+
};
|
|
4179
|
+
}, [onPlay, onPause, onEnded, onTimeUpdate]);
|
|
4180
|
+
(0, import_react24.useEffect)(() => {
|
|
4181
|
+
const audio = audioRef.current;
|
|
4182
|
+
if (!audio) return;
|
|
4183
|
+
audio.load();
|
|
4184
|
+
}, [src]);
|
|
4185
|
+
const togglePlayPause = async () => {
|
|
4186
|
+
const audio = audioRef.current;
|
|
4187
|
+
if (!audio) return;
|
|
4188
|
+
try {
|
|
4189
|
+
if (isPlaying) {
|
|
4190
|
+
audio.pause();
|
|
4191
|
+
} else {
|
|
4192
|
+
await audio.play();
|
|
4193
|
+
}
|
|
4194
|
+
} catch (error) {
|
|
4195
|
+
console.error("Playback error:", error);
|
|
4196
|
+
setIsPlaying(false);
|
|
4197
|
+
}
|
|
4198
|
+
};
|
|
4199
|
+
const handleSeek = (e) => {
|
|
4200
|
+
const audio = audioRef.current;
|
|
4201
|
+
if (!audio) return;
|
|
4202
|
+
const time = parseFloat(e.target.value);
|
|
4203
|
+
audio.currentTime = time;
|
|
4204
|
+
setCurrentTime(time);
|
|
4205
|
+
};
|
|
4206
|
+
const handleVolumeChange = (e) => {
|
|
4207
|
+
const audio = audioRef.current;
|
|
4208
|
+
if (!audio) return;
|
|
4209
|
+
const vol = parseFloat(e.target.value);
|
|
4210
|
+
audio.volume = vol;
|
|
4211
|
+
setVolume(vol);
|
|
4212
|
+
setIsMuted(vol === 0);
|
|
4213
|
+
};
|
|
4214
|
+
const toggleMute = () => {
|
|
4215
|
+
const audio = audioRef.current;
|
|
4216
|
+
if (!audio) return;
|
|
4217
|
+
if (isMuted) {
|
|
4218
|
+
audio.volume = volume || 0.5;
|
|
4219
|
+
setIsMuted(false);
|
|
4220
|
+
} else {
|
|
4221
|
+
audio.volume = 0;
|
|
4222
|
+
setIsMuted(true);
|
|
4223
|
+
}
|
|
4224
|
+
};
|
|
4225
|
+
const formatTime = (time) => {
|
|
4226
|
+
if (!isFinite(time)) return "0:00";
|
|
4227
|
+
const minutes = Math.floor(time / 60);
|
|
4228
|
+
const seconds = Math.floor(time % 60);
|
|
4229
|
+
return `${minutes}:${seconds.toString().padStart(2, "0")}`;
|
|
4230
|
+
};
|
|
4231
|
+
const handleSkipBack = () => {
|
|
4232
|
+
const audio = audioRef.current;
|
|
4233
|
+
if (!audio) return;
|
|
4234
|
+
if (onSkipBack) {
|
|
4235
|
+
onSkipBack();
|
|
4236
|
+
} else {
|
|
4237
|
+
audio.currentTime = Math.max(0, audio.currentTime - 10);
|
|
4238
|
+
}
|
|
4239
|
+
};
|
|
4240
|
+
const handleSkipForward = () => {
|
|
4241
|
+
const audio = audioRef.current;
|
|
4242
|
+
if (!audio) return;
|
|
4243
|
+
if (onSkipForward) {
|
|
4244
|
+
onSkipForward();
|
|
4245
|
+
} else {
|
|
4246
|
+
audio.currentTime = Math.min(duration, audio.currentTime + 10);
|
|
4247
|
+
}
|
|
4248
|
+
};
|
|
4249
|
+
const progress = duration > 0 ? currentTime / duration * 100 : 0;
|
|
4250
|
+
if (variant === "mini") {
|
|
4251
|
+
return /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)("div", { className: `flex items-center gap-2 p-2 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 ${className}`, children: [
|
|
4252
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsx)("audio", { ref: audioRef, src, preload, loop, autoPlay }),
|
|
4253
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
|
|
4254
|
+
Button,
|
|
4255
|
+
{
|
|
4256
|
+
iconOnly: true,
|
|
4257
|
+
size: "sm",
|
|
4258
|
+
variant: "primary",
|
|
4259
|
+
onClick: togglePlayPause,
|
|
4260
|
+
disabled: isLoading,
|
|
4261
|
+
"aria-label": isPlaying ? "Pause" : "Play",
|
|
4262
|
+
children: isPlaying ? /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(PauseIcon, { size: "sm" }) : /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(PlayIcon, { size: "sm" })
|
|
4263
|
+
}
|
|
4264
|
+
),
|
|
4265
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime102.jsx)("span", { className: "text-sm font-medium text-gray-700 dark:text-gray-300 truncate", children: title })
|
|
4266
|
+
] });
|
|
4267
|
+
}
|
|
4268
|
+
if (variant === "compact") {
|
|
4269
|
+
return /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)("div", { className: `flex items-center gap-3 p-3 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 shadow-sm ${className}`, children: [
|
|
4270
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsx)("audio", { ref: audioRef, src, preload, loop, autoPlay }),
|
|
4271
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
|
|
4272
|
+
Button,
|
|
4273
|
+
{
|
|
4274
|
+
iconOnly: true,
|
|
4275
|
+
size: "md",
|
|
4276
|
+
variant: "primary",
|
|
4277
|
+
onClick: togglePlayPause,
|
|
4278
|
+
disabled: isLoading,
|
|
4279
|
+
"aria-label": isPlaying ? "Pause" : "Play",
|
|
4280
|
+
children: isPlaying ? /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(PauseIcon, { size: "md" }) : /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(PlayIcon, { size: "md" })
|
|
4281
|
+
}
|
|
4282
|
+
),
|
|
4283
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsxs)("div", { className: "flex-1 min-w-0", children: [
|
|
4284
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime102.jsx)("div", { className: "text-sm font-medium text-gray-900 dark:text-gray-100 truncate", children: title }),
|
|
4285
|
+
artist && /* @__PURE__ */ (0, import_jsx_runtime102.jsx)("div", { className: "text-xs text-gray-500 dark:text-gray-400 truncate", children: artist })
|
|
4286
|
+
] }),
|
|
4287
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsxs)("div", { className: "flex items-center gap-2 flex-1", children: [
|
|
4288
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsx)("span", { className: "text-xs text-gray-500 dark:text-gray-400 tabular-nums", children: formatTime(currentTime) }),
|
|
4289
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsxs)("div", { className: "relative flex-1 h-1.5 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden", children: [
|
|
4290
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
|
|
4291
|
+
"div",
|
|
4292
|
+
{
|
|
4293
|
+
className: "absolute h-full bg-blue-600 dark:bg-blue-500 rounded-full transition-all",
|
|
4294
|
+
style: { width: `${progress}%` }
|
|
4295
|
+
}
|
|
4296
|
+
),
|
|
4297
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
|
|
4298
|
+
"input",
|
|
4299
|
+
{
|
|
4300
|
+
type: "range",
|
|
4301
|
+
min: 0,
|
|
4302
|
+
max: duration || 0,
|
|
4303
|
+
value: currentTime,
|
|
4304
|
+
onChange: handleSeek,
|
|
4305
|
+
disabled: isLoading,
|
|
4306
|
+
className: "absolute inset-0 w-full h-full opacity-0 cursor-pointer disabled:cursor-not-allowed",
|
|
4307
|
+
"aria-label": "Seek"
|
|
4308
|
+
}
|
|
4309
|
+
)
|
|
4310
|
+
] }),
|
|
4311
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsx)("span", { className: "text-xs text-gray-500 dark:text-gray-400 tabular-nums", children: formatTime(duration) })
|
|
4312
|
+
] }),
|
|
4313
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
4314
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
|
|
4315
|
+
"button",
|
|
4316
|
+
{
|
|
4317
|
+
onClick: toggleMute,
|
|
4318
|
+
className: "text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200",
|
|
4319
|
+
"aria-label": isMuted ? "Unmute" : "Mute",
|
|
4320
|
+
children: isMuted ? /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(VolumeOffIcon, { size: "sm" }) : /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(VolumeUpIcon, { size: "sm" })
|
|
4321
|
+
}
|
|
4322
|
+
),
|
|
4323
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
|
|
4324
|
+
"input",
|
|
4325
|
+
{
|
|
4326
|
+
type: "range",
|
|
4327
|
+
min: 0,
|
|
4328
|
+
max: 1,
|
|
4329
|
+
step: 0.01,
|
|
4330
|
+
value: isMuted ? 0 : volume,
|
|
4331
|
+
onChange: handleVolumeChange,
|
|
4332
|
+
className: "w-16 h-1.5 bg-gray-200 dark:bg-gray-700 rounded-full appearance-none cursor-pointer\n [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:w-3 [&::-webkit-slider-thumb]:h-3\n [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-blue-600 [&::-webkit-slider-thumb]:cursor-pointer\n [&::-moz-range-thumb]:w-3 [&::-moz-range-thumb]:h-3 [&::-moz-range-thumb]:rounded-full\n [&::-moz-range-thumb]:bg-blue-600 [&::-moz-range-thumb]:cursor-pointer [&::-moz-range-thumb]:border-none",
|
|
4333
|
+
"aria-label": "Volume"
|
|
4334
|
+
}
|
|
4335
|
+
)
|
|
4336
|
+
] })
|
|
4337
|
+
] });
|
|
4338
|
+
}
|
|
4339
|
+
return /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)("div", { className: `bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 shadow-md overflow-hidden ${className}`, children: [
|
|
4340
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsx)("audio", { ref: audioRef, src, preload, loop, autoPlay }),
|
|
4341
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsxs)("div", { className: "flex items-center gap-4 p-4 border-b border-gray-200 dark:border-gray-700", children: [
|
|
4342
|
+
coverArt && /* @__PURE__ */ (0, import_jsx_runtime102.jsx)("div", { className: "w-16 h-16 flex-shrink-0 rounded-md overflow-hidden bg-gray-100 dark:bg-gray-700", children: /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
|
|
4343
|
+
"img",
|
|
4344
|
+
{
|
|
4345
|
+
src: coverArt,
|
|
4346
|
+
alt: `${title || "Track"} cover art`,
|
|
4347
|
+
className: "w-full h-full object-cover"
|
|
4348
|
+
}
|
|
4349
|
+
) }),
|
|
4350
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsxs)("div", { className: "flex-1 min-w-0", children: [
|
|
4351
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime102.jsx)("h3", { className: "text-base font-semibold text-gray-900 dark:text-gray-100 truncate", children: title }),
|
|
4352
|
+
artist && /* @__PURE__ */ (0, import_jsx_runtime102.jsx)("p", { className: "text-sm text-gray-600 dark:text-gray-400 truncate", children: artist }),
|
|
4353
|
+
album && /* @__PURE__ */ (0, import_jsx_runtime102.jsx)("p", { className: "text-xs text-gray-500 dark:text-gray-500 truncate", children: album })
|
|
4354
|
+
] })
|
|
4355
|
+
] }),
|
|
4356
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsxs)("div", { className: "px-4 pt-4", children: [
|
|
4357
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsxs)("div", { className: "relative h-2 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden", children: [
|
|
4358
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
|
|
4359
|
+
"div",
|
|
4360
|
+
{
|
|
4361
|
+
className: "absolute h-full bg-blue-600 dark:bg-blue-500 rounded-full transition-all",
|
|
4362
|
+
style: { width: `${progress}%` }
|
|
4363
|
+
}
|
|
4364
|
+
),
|
|
4365
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
|
|
4366
|
+
"input",
|
|
4367
|
+
{
|
|
4368
|
+
type: "range",
|
|
4369
|
+
min: 0,
|
|
4370
|
+
max: duration || 0,
|
|
4371
|
+
value: currentTime,
|
|
4372
|
+
onChange: handleSeek,
|
|
4373
|
+
disabled: isLoading,
|
|
4374
|
+
className: "absolute inset-0 w-full h-full opacity-0 cursor-pointer disabled:cursor-not-allowed",
|
|
4375
|
+
"aria-label": "Seek"
|
|
4376
|
+
}
|
|
4377
|
+
)
|
|
4378
|
+
] }),
|
|
4379
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsxs)("div", { className: "flex justify-between items-center mt-1 text-xs text-gray-500 dark:text-gray-400 tabular-nums", children: [
|
|
4380
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsx)("span", { children: formatTime(currentTime) }),
|
|
4381
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsx)("span", { children: formatTime(duration) })
|
|
4382
|
+
] })
|
|
4383
|
+
] }),
|
|
4384
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsxs)("div", { className: "flex items-center justify-between px-4 py-4", children: [
|
|
4385
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsxs)("div", { className: "flex items-center gap-2 flex-1", children: [
|
|
4386
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
|
|
4387
|
+
"button",
|
|
4388
|
+
{
|
|
4389
|
+
onClick: toggleMute,
|
|
4390
|
+
className: "text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 transition-colors",
|
|
4391
|
+
"aria-label": isMuted ? "Unmute" : "Mute",
|
|
4392
|
+
children: isMuted ? /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(VolumeOffIcon, { size: "md" }) : /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(VolumeUpIcon, { size: "md" })
|
|
4393
|
+
}
|
|
4394
|
+
),
|
|
4395
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
|
|
4396
|
+
"input",
|
|
4397
|
+
{
|
|
4398
|
+
type: "range",
|
|
4399
|
+
min: 0,
|
|
4400
|
+
max: 1,
|
|
4401
|
+
step: 0.01,
|
|
4402
|
+
value: isMuted ? 0 : volume,
|
|
4403
|
+
onChange: handleVolumeChange,
|
|
4404
|
+
className: "w-20 h-1.5 bg-gray-200 dark:bg-gray-700 rounded-full appearance-none cursor-pointer\n [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:w-3 [&::-webkit-slider-thumb]:h-3\n [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-blue-600 [&::-webkit-slider-thumb]:cursor-pointer\n [&::-moz-range-thumb]:w-3 [&::-moz-range-thumb]:h-3 [&::-moz-range-thumb]:rounded-full\n [&::-moz-range-thumb]:bg-blue-600 [&::-moz-range-thumb]:cursor-pointer [&::-moz-range-thumb]:border-none",
|
|
4405
|
+
"aria-label": "Volume"
|
|
4406
|
+
}
|
|
4407
|
+
)
|
|
4408
|
+
] }),
|
|
4409
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
4410
|
+
showSkipButtons && /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
|
|
4411
|
+
Button,
|
|
4412
|
+
{
|
|
4413
|
+
iconOnly: true,
|
|
4414
|
+
size: "md",
|
|
4415
|
+
variant: "secondary",
|
|
4416
|
+
onClick: handleSkipBack,
|
|
4417
|
+
disabled: isLoading,
|
|
4418
|
+
"aria-label": "Skip back 10 seconds",
|
|
4419
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(SkipBackIcon, { size: "md" })
|
|
4420
|
+
}
|
|
4421
|
+
),
|
|
4422
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
|
|
4423
|
+
Button,
|
|
4424
|
+
{
|
|
4425
|
+
iconOnly: true,
|
|
4426
|
+
size: "lg",
|
|
4427
|
+
variant: "primary",
|
|
4428
|
+
onClick: togglePlayPause,
|
|
4429
|
+
disabled: isLoading,
|
|
4430
|
+
"aria-label": isPlaying ? "Pause" : "Play",
|
|
4431
|
+
children: isPlaying ? /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(PauseIcon, { size: "lg" }) : /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(PlayIcon, { size: "lg" })
|
|
4432
|
+
}
|
|
4433
|
+
),
|
|
4434
|
+
showSkipButtons && /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
|
|
4435
|
+
Button,
|
|
4436
|
+
{
|
|
4437
|
+
iconOnly: true,
|
|
4438
|
+
size: "md",
|
|
4439
|
+
variant: "secondary",
|
|
4440
|
+
onClick: handleSkipForward,
|
|
4441
|
+
disabled: isLoading,
|
|
4442
|
+
"aria-label": "Skip forward 10 seconds",
|
|
4443
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(SkipForwardIcon, { size: "md" })
|
|
4444
|
+
}
|
|
4445
|
+
)
|
|
4446
|
+
] }),
|
|
4447
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsx)("div", { className: "flex-1" })
|
|
4448
|
+
] })
|
|
4449
|
+
] });
|
|
4450
|
+
};
|
|
4451
|
+
|
|
3793
4452
|
// src/utils/theme-script.ts
|
|
3794
4453
|
var themeScript = `
|
|
3795
4454
|
(function() {
|
|
@@ -3826,33 +4485,57 @@ function getThemeScript() {
|
|
|
3826
4485
|
0 && (module.exports = {
|
|
3827
4486
|
ActionMenu,
|
|
3828
4487
|
Alert,
|
|
4488
|
+
AlertCircleIcon,
|
|
3829
4489
|
AppShell,
|
|
3830
4490
|
AppleIcon,
|
|
4491
|
+
ArrowLeftIcon,
|
|
4492
|
+
ArrowRightIcon,
|
|
4493
|
+
AudioPlayer,
|
|
3831
4494
|
Avatar,
|
|
3832
4495
|
Badge,
|
|
4496
|
+
BeakerIcon,
|
|
3833
4497
|
BellIcon,
|
|
4498
|
+
BookIcon,
|
|
4499
|
+
BrainIcon,
|
|
3834
4500
|
Button,
|
|
3835
4501
|
Calendar,
|
|
3836
4502
|
CalendarIcon,
|
|
3837
4503
|
CameraIcon,
|
|
3838
4504
|
Card,
|
|
4505
|
+
ChatIcon,
|
|
4506
|
+
CheckCircleIcon,
|
|
3839
4507
|
CheckIcon,
|
|
3840
4508
|
Checkbox,
|
|
3841
4509
|
ChevronDownIcon,
|
|
4510
|
+
ChevronLeftIcon,
|
|
3842
4511
|
ChevronRightIcon,
|
|
4512
|
+
ChevronUpIcon,
|
|
3843
4513
|
CloseIcon,
|
|
4514
|
+
CloudIcon,
|
|
4515
|
+
CodeIcon,
|
|
4516
|
+
CopyIcon,
|
|
4517
|
+
DatabaseIcon,
|
|
3844
4518
|
DatePicker,
|
|
3845
4519
|
DateTimePicker,
|
|
3846
4520
|
Divider,
|
|
3847
4521
|
DownloadIcon,
|
|
3848
4522
|
Drawer,
|
|
3849
4523
|
EditIcon,
|
|
4524
|
+
ExternalLinkIcon,
|
|
4525
|
+
EyeIcon,
|
|
4526
|
+
EyeOffIcon,
|
|
3850
4527
|
FacebookIcon,
|
|
4528
|
+
FileIcon,
|
|
3851
4529
|
FileUpload,
|
|
4530
|
+
FolderIcon,
|
|
3852
4531
|
GitHubIcon,
|
|
4532
|
+
GlobeIcon,
|
|
3853
4533
|
GoogleIcon,
|
|
3854
4534
|
HeartIcon,
|
|
3855
4535
|
HomeIcon,
|
|
4536
|
+
ImageIcon,
|
|
4537
|
+
InfoCircleIcon,
|
|
4538
|
+
KeyIcon,
|
|
3856
4539
|
LinkedInIcon,
|
|
3857
4540
|
LockIcon,
|
|
3858
4541
|
MailIcon,
|
|
@@ -3861,22 +4544,33 @@ function getThemeScript() {
|
|
|
3861
4544
|
Navbar,
|
|
3862
4545
|
NumberInput,
|
|
3863
4546
|
Pagination,
|
|
4547
|
+
PauseIcon,
|
|
4548
|
+
PlayIcon,
|
|
4549
|
+
PlugIcon,
|
|
3864
4550
|
PlusIcon,
|
|
3865
4551
|
ProgressBar,
|
|
3866
4552
|
Radio,
|
|
4553
|
+
RefreshIcon,
|
|
3867
4554
|
RichTextEditor,
|
|
4555
|
+
SaveIcon,
|
|
3868
4556
|
SearchIcon,
|
|
3869
4557
|
Select,
|
|
3870
4558
|
SettingsIcon,
|
|
4559
|
+
ShieldIcon,
|
|
3871
4560
|
Sidebar,
|
|
3872
4561
|
SidebarProvider,
|
|
4562
|
+
SkipBackIcon,
|
|
4563
|
+
SkipForwardIcon,
|
|
3873
4564
|
SlackIcon,
|
|
3874
4565
|
Slider,
|
|
4566
|
+
SparklesIcon,
|
|
3875
4567
|
Spinner,
|
|
3876
4568
|
StarIcon,
|
|
3877
4569
|
Stepper,
|
|
4570
|
+
StopIcon,
|
|
3878
4571
|
Table,
|
|
3879
4572
|
Tabs,
|
|
4573
|
+
TerminalIcon,
|
|
3880
4574
|
TextInput,
|
|
3881
4575
|
Textarea,
|
|
3882
4576
|
ThemeProvider,
|
|
@@ -3887,6 +4581,8 @@ function getThemeScript() {
|
|
|
3887
4581
|
TwitterIcon,
|
|
3888
4582
|
UploadIcon,
|
|
3889
4583
|
UserIcon,
|
|
4584
|
+
VolumeOffIcon,
|
|
4585
|
+
VolumeUpIcon,
|
|
3890
4586
|
YouTubeIcon,
|
|
3891
4587
|
getThemeScript,
|
|
3892
4588
|
themeScript,
|