@marcoschwartz/lite-ui 0.1.1 → 0.4.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/README.md +238 -134
- package/dist/index.d.mts +223 -2
- package/dist/index.d.ts +223 -2
- package/dist/index.js +1092 -16
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1046 -19
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -21,12 +21,61 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
21
21
|
// src/index.ts
|
|
22
22
|
var index_exports = {};
|
|
23
23
|
__export(index_exports, {
|
|
24
|
+
ActionMenu: () => ActionMenu,
|
|
25
|
+
Alert: () => Alert,
|
|
26
|
+
AppleIcon: () => AppleIcon,
|
|
27
|
+
Badge: () => Badge,
|
|
28
|
+
BellIcon: () => BellIcon,
|
|
24
29
|
Button: () => Button,
|
|
30
|
+
CalendarIcon: () => CalendarIcon,
|
|
31
|
+
CameraIcon: () => CameraIcon,
|
|
32
|
+
Card: () => Card,
|
|
33
|
+
CheckIcon: () => CheckIcon,
|
|
34
|
+
Checkbox: () => Checkbox,
|
|
35
|
+
ChevronDownIcon: () => ChevronDownIcon,
|
|
36
|
+
ChevronRightIcon: () => ChevronRightIcon,
|
|
37
|
+
CloseIcon: () => CloseIcon,
|
|
38
|
+
DatePicker: () => DatePicker,
|
|
39
|
+
DateTimePicker: () => DateTimePicker,
|
|
40
|
+
DownloadIcon: () => DownloadIcon,
|
|
41
|
+
Drawer: () => Drawer,
|
|
42
|
+
EditIcon: () => EditIcon,
|
|
43
|
+
FacebookIcon: () => FacebookIcon,
|
|
44
|
+
GitHubIcon: () => GitHubIcon,
|
|
45
|
+
GoogleIcon: () => GoogleIcon,
|
|
46
|
+
HeartIcon: () => HeartIcon,
|
|
47
|
+
HomeIcon: () => HomeIcon,
|
|
48
|
+
LinkedInIcon: () => LinkedInIcon,
|
|
49
|
+
LockIcon: () => LockIcon,
|
|
50
|
+
MailIcon: () => MailIcon,
|
|
51
|
+
MenuIcon: () => MenuIcon,
|
|
52
|
+
Modal: () => Modal,
|
|
53
|
+
Navbar: () => Navbar,
|
|
54
|
+
Pagination: () => Pagination,
|
|
55
|
+
PlusIcon: () => PlusIcon,
|
|
56
|
+
SearchIcon: () => SearchIcon,
|
|
25
57
|
Select: () => Select,
|
|
58
|
+
SettingsIcon: () => SettingsIcon,
|
|
59
|
+
Sidebar: () => Sidebar,
|
|
60
|
+
SidebarProvider: () => SidebarProvider,
|
|
61
|
+
SlackIcon: () => SlackIcon,
|
|
62
|
+
Spinner: () => Spinner,
|
|
63
|
+
StarIcon: () => StarIcon,
|
|
64
|
+
Table: () => Table,
|
|
65
|
+
Tabs: () => Tabs,
|
|
66
|
+
TextInput: () => TextInput,
|
|
26
67
|
ThemeProvider: () => ThemeProvider,
|
|
68
|
+
TimePicker: () => TimePicker,
|
|
69
|
+
Toggle: () => Toggle,
|
|
70
|
+
TrashIcon: () => TrashIcon,
|
|
71
|
+
TwitterIcon: () => TwitterIcon,
|
|
72
|
+
UploadIcon: () => UploadIcon,
|
|
73
|
+
UserIcon: () => UserIcon,
|
|
74
|
+
YouTubeIcon: () => YouTubeIcon,
|
|
27
75
|
getThemeScript: () => getThemeScript,
|
|
28
76
|
themeScript: () => themeScript,
|
|
29
77
|
themes: () => themes,
|
|
78
|
+
useSidebar: () => useSidebar,
|
|
30
79
|
useTheme: () => useTheme
|
|
31
80
|
});
|
|
32
81
|
module.exports = __toCommonJS(index_exports);
|
|
@@ -39,7 +88,7 @@ var themes = {
|
|
|
39
88
|
default: {
|
|
40
89
|
name: "default",
|
|
41
90
|
button: {
|
|
42
|
-
base: "font-semibold rounded-lg transition-all duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 active:scale-95",
|
|
91
|
+
base: "font-semibold rounded-lg transition-all duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 active:scale-95 gap-2",
|
|
43
92
|
variants: {
|
|
44
93
|
primary: "bg-blue-600 hover:bg-blue-700 active:bg-blue-800 text-white shadow-sm hover:shadow-md dark:bg-blue-500 dark:hover:bg-blue-600 dark:active:bg-blue-700",
|
|
45
94
|
secondary: "bg-gray-600 hover:bg-gray-700 active:bg-gray-800 text-white shadow-sm hover:shadow-md dark:bg-gray-500 dark:hover:bg-gray-600 dark:active:bg-gray-700",
|
|
@@ -49,10 +98,10 @@ var themes = {
|
|
|
49
98
|
info: "bg-cyan-600 hover:bg-cyan-700 active:bg-cyan-800 text-white shadow-sm hover:shadow-md dark:bg-cyan-500 dark:hover:bg-cyan-600 dark:active:bg-cyan-700"
|
|
50
99
|
},
|
|
51
100
|
sizes: {
|
|
52
|
-
sm: "px-3 py-1.5 text-sm",
|
|
53
|
-
md: "px-4 py-2 text-base",
|
|
54
|
-
lg: "px-6 py-3 text-lg",
|
|
55
|
-
xl: "px-8 py-4 text-xl"
|
|
101
|
+
sm: "px-3 py-1.5 text-sm min-h-[30px]",
|
|
102
|
+
md: "px-4 py-2 text-base min-h-[38px]",
|
|
103
|
+
lg: "px-6 py-3 text-lg min-h-[48px]",
|
|
104
|
+
xl: "px-8 py-4 text-xl min-h-[60px]"
|
|
56
105
|
},
|
|
57
106
|
disabled: "opacity-50 cursor-not-allowed hover:shadow-sm active:scale-100"
|
|
58
107
|
},
|
|
@@ -70,7 +119,7 @@ var themes = {
|
|
|
70
119
|
minimalistic: {
|
|
71
120
|
name: "minimalistic",
|
|
72
121
|
button: {
|
|
73
|
-
base: "font-normal rounded-none transition-colors duration-200 focus:outline-none border-2",
|
|
122
|
+
base: "font-normal rounded-none transition-colors duration-200 focus:outline-none border-2 gap-2",
|
|
74
123
|
variants: {
|
|
75
124
|
primary: "bg-transparent border-white text-white hover:bg-white hover:text-black",
|
|
76
125
|
secondary: "bg-transparent border-gray-400 text-gray-400 hover:bg-gray-400 hover:text-black",
|
|
@@ -80,10 +129,10 @@ var themes = {
|
|
|
80
129
|
info: "bg-transparent border-blue-400 text-blue-400 hover:bg-blue-400 hover:text-black"
|
|
81
130
|
},
|
|
82
131
|
sizes: {
|
|
83
|
-
sm: "px-4 py-2 text-sm uppercase tracking-wide",
|
|
84
|
-
md: "px-6 py-3 text-base uppercase tracking-wide",
|
|
85
|
-
lg: "px-8 py-4 text-lg uppercase tracking-wider",
|
|
86
|
-
xl: "px-10 py-5 text-xl uppercase tracking-wider"
|
|
132
|
+
sm: "px-4 py-2 text-sm uppercase tracking-wide min-h-[36px]",
|
|
133
|
+
md: "px-6 py-3 text-base uppercase tracking-wide min-h-[48px]",
|
|
134
|
+
lg: "px-8 py-4 text-lg uppercase tracking-wider min-h-[60px]",
|
|
135
|
+
xl: "px-10 py-5 text-xl uppercase tracking-wider min-h-[72px]"
|
|
87
136
|
},
|
|
88
137
|
disabled: "opacity-30 cursor-not-allowed hover:bg-transparent"
|
|
89
138
|
},
|
|
@@ -190,21 +239,29 @@ var Button = ({
|
|
|
190
239
|
className = "",
|
|
191
240
|
children,
|
|
192
241
|
disabled,
|
|
242
|
+
leftIcon,
|
|
243
|
+
rightIcon,
|
|
244
|
+
iconOnly = false,
|
|
193
245
|
...props
|
|
194
246
|
}) => {
|
|
195
247
|
const { theme } = useTheme();
|
|
196
248
|
const baseStyles = theme.button.base;
|
|
197
|
-
const
|
|
198
|
-
const
|
|
249
|
+
const variantStyles3 = theme.button.variants[variant];
|
|
250
|
+
const sizeStyles2 = theme.button.sizes[size];
|
|
199
251
|
const disabledStyles = disabled ? theme.button.disabled : "";
|
|
200
|
-
const
|
|
252
|
+
const iconOnlyStyles = iconOnly ? "!p-0 aspect-square" : "";
|
|
253
|
+
const classes = `inline-flex items-center justify-center ${baseStyles} ${variantStyles3} ${sizeStyles2} ${disabledStyles} ${iconOnlyStyles} ${className}`.trim();
|
|
201
254
|
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
202
255
|
"button",
|
|
203
256
|
{
|
|
204
257
|
className: classes,
|
|
205
258
|
disabled,
|
|
206
259
|
...props,
|
|
207
|
-
children
|
|
260
|
+
children: iconOnly ? children : /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
|
|
261
|
+
leftIcon && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: "inline-flex shrink-0", children: leftIcon }),
|
|
262
|
+
children && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: "inline-flex items-center", children }),
|
|
263
|
+
rightIcon && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: "inline-flex shrink-0", children: rightIcon })
|
|
264
|
+
] })
|
|
208
265
|
}
|
|
209
266
|
);
|
|
210
267
|
};
|
|
@@ -253,9 +310,9 @@ var Select = ({
|
|
|
253
310
|
}
|
|
254
311
|
};
|
|
255
312
|
const baseStyles = theme.select.base;
|
|
256
|
-
const
|
|
313
|
+
const sizeStyles2 = theme.select.sizes[size];
|
|
257
314
|
const disabledStyles = disabled ? theme.select.disabled : "";
|
|
258
|
-
const buttonClasses = `${baseStyles} ${
|
|
315
|
+
const buttonClasses = `${baseStyles} ${sizeStyles2} ${disabledStyles} ${className}`.trim();
|
|
259
316
|
const iconColor = themeName === "minimalistic" ? disabled ? "text-gray-600" : "text-white" : disabled ? "text-gray-400" : "text-gray-500";
|
|
260
317
|
const dropdownBaseStyles = themeName === "minimalistic" ? "bg-black border-2 border-white" : "bg-white border border-gray-300 shadow-lg dark:bg-gray-800 dark:border-gray-600";
|
|
261
318
|
const optionBaseStyles = themeName === "minimalistic" ? "text-white hover:bg-white hover:text-black transition-colors duration-200" : "text-gray-900 hover:bg-blue-50 transition-colors duration-150 dark:text-gray-100 dark:hover:bg-gray-700";
|
|
@@ -313,6 +370,818 @@ var Select = ({
|
|
|
313
370
|
] });
|
|
314
371
|
};
|
|
315
372
|
|
|
373
|
+
// src/components/Modal.tsx
|
|
374
|
+
var import_react3 = require("react");
|
|
375
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
376
|
+
var sizeClasses = {
|
|
377
|
+
sm: "max-w-md",
|
|
378
|
+
md: "max-w-lg",
|
|
379
|
+
lg: "max-w-2xl",
|
|
380
|
+
xl: "max-w-4xl"
|
|
381
|
+
};
|
|
382
|
+
var Modal = ({
|
|
383
|
+
isOpen,
|
|
384
|
+
onClose,
|
|
385
|
+
title,
|
|
386
|
+
children,
|
|
387
|
+
size = "md",
|
|
388
|
+
showCloseButton = true
|
|
389
|
+
}) => {
|
|
390
|
+
const { theme } = useTheme();
|
|
391
|
+
(0, import_react3.useEffect)(() => {
|
|
392
|
+
const handleEscape = (e) => {
|
|
393
|
+
if (e.key === "Escape" && isOpen) {
|
|
394
|
+
onClose();
|
|
395
|
+
}
|
|
396
|
+
};
|
|
397
|
+
if (isOpen) {
|
|
398
|
+
document.addEventListener("keydown", handleEscape);
|
|
399
|
+
document.body.style.overflow = "hidden";
|
|
400
|
+
}
|
|
401
|
+
return () => {
|
|
402
|
+
document.removeEventListener("keydown", handleEscape);
|
|
403
|
+
document.body.style.overflow = "unset";
|
|
404
|
+
};
|
|
405
|
+
}, [isOpen, onClose]);
|
|
406
|
+
if (!isOpen) return null;
|
|
407
|
+
const sizeClass = sizeClasses[size];
|
|
408
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
409
|
+
"div",
|
|
410
|
+
{
|
|
411
|
+
className: "fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/60 backdrop-blur-sm transition-all duration-200",
|
|
412
|
+
onClick: onClose,
|
|
413
|
+
role: "dialog",
|
|
414
|
+
"aria-modal": "true",
|
|
415
|
+
"aria-labelledby": title ? "modal-title" : void 0,
|
|
416
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
417
|
+
"div",
|
|
418
|
+
{
|
|
419
|
+
className: `relative w-full ${sizeClass} bg-white dark:bg-gray-800 rounded-lg shadow-2xl transform transition-all duration-200 scale-100 animate-in`,
|
|
420
|
+
onClick: (e) => e.stopPropagation(),
|
|
421
|
+
children: [
|
|
422
|
+
(title || showCloseButton) && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "flex items-center justify-between p-6 border-b border-gray-200 dark:border-gray-700", children: [
|
|
423
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h3", { id: "modal-title", className: "text-xl font-semibold text-gray-900 dark:text-gray-100", children: title }),
|
|
424
|
+
showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
425
|
+
"button",
|
|
426
|
+
{
|
|
427
|
+
onClick: onClose,
|
|
428
|
+
className: "ml-auto text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 transition-colors",
|
|
429
|
+
"aria-label": "Close modal",
|
|
430
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("svg", { className: "w-6 h-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
|
|
431
|
+
}
|
|
432
|
+
)
|
|
433
|
+
] }),
|
|
434
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "p-6", children })
|
|
435
|
+
]
|
|
436
|
+
}
|
|
437
|
+
)
|
|
438
|
+
}
|
|
439
|
+
);
|
|
440
|
+
};
|
|
441
|
+
|
|
442
|
+
// src/components/Navbar.tsx
|
|
443
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
444
|
+
var Navbar = ({
|
|
445
|
+
logo,
|
|
446
|
+
children,
|
|
447
|
+
className = "",
|
|
448
|
+
sticky = false
|
|
449
|
+
}) => {
|
|
450
|
+
const { theme } = useTheme();
|
|
451
|
+
const baseClasses = sticky ? "sticky top-0 z-40" : "";
|
|
452
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("nav", { className: `bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 ${baseClasses} ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex justify-between items-center h-16", children: [
|
|
453
|
+
logo && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "flex items-center", children: logo }),
|
|
454
|
+
children && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "flex items-center gap-6", children })
|
|
455
|
+
] }) }) });
|
|
456
|
+
};
|
|
457
|
+
|
|
458
|
+
// src/components/Sidebar.tsx
|
|
459
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
460
|
+
var widthClasses = {
|
|
461
|
+
sm: "w-48",
|
|
462
|
+
md: "w-64",
|
|
463
|
+
lg: "w-80"
|
|
464
|
+
};
|
|
465
|
+
var Sidebar = ({
|
|
466
|
+
children,
|
|
467
|
+
className = "",
|
|
468
|
+
width = "md",
|
|
469
|
+
position = "left"
|
|
470
|
+
}) => {
|
|
471
|
+
const { theme } = useTheme();
|
|
472
|
+
const widthClass = widthClasses[width];
|
|
473
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
474
|
+
"aside",
|
|
475
|
+
{
|
|
476
|
+
className: `${widthClass} bg-white dark:bg-gray-800 border-${position === "left" ? "r" : "l"} border-gray-200 dark:border-gray-700 h-full overflow-y-auto ${className}`,
|
|
477
|
+
children
|
|
478
|
+
}
|
|
479
|
+
);
|
|
480
|
+
};
|
|
481
|
+
|
|
482
|
+
// src/components/SidebarProvider.tsx
|
|
483
|
+
var import_react4 = require("react");
|
|
484
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
485
|
+
var SidebarContext = (0, import_react4.createContext)(void 0);
|
|
486
|
+
var SidebarProvider = ({
|
|
487
|
+
children,
|
|
488
|
+
defaultOpen = false
|
|
489
|
+
}) => {
|
|
490
|
+
const [isOpen, setIsOpen] = (0, import_react4.useState)(defaultOpen);
|
|
491
|
+
const [isMobile, setIsMobile] = (0, import_react4.useState)(false);
|
|
492
|
+
const open = () => setIsOpen(true);
|
|
493
|
+
const close = () => setIsOpen(false);
|
|
494
|
+
const toggle = () => setIsOpen((prev) => !prev);
|
|
495
|
+
const value = {
|
|
496
|
+
isOpen,
|
|
497
|
+
isMobile,
|
|
498
|
+
open,
|
|
499
|
+
close,
|
|
500
|
+
toggle,
|
|
501
|
+
setIsMobile
|
|
502
|
+
};
|
|
503
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(SidebarContext.Provider, { value, children });
|
|
504
|
+
};
|
|
505
|
+
var useSidebar = () => {
|
|
506
|
+
const context = (0, import_react4.useContext)(SidebarContext);
|
|
507
|
+
if (!context) {
|
|
508
|
+
throw new Error("useSidebar must be used within a SidebarProvider");
|
|
509
|
+
}
|
|
510
|
+
return context;
|
|
511
|
+
};
|
|
512
|
+
|
|
513
|
+
// src/components/Drawer.tsx
|
|
514
|
+
var import_react5 = require("react");
|
|
515
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
516
|
+
var sizeClasses2 = {
|
|
517
|
+
left: {
|
|
518
|
+
sm: "w-64",
|
|
519
|
+
md: "w-80",
|
|
520
|
+
lg: "w-96"
|
|
521
|
+
},
|
|
522
|
+
right: {
|
|
523
|
+
sm: "w-64",
|
|
524
|
+
md: "w-80",
|
|
525
|
+
lg: "w-96"
|
|
526
|
+
},
|
|
527
|
+
top: {
|
|
528
|
+
sm: "h-48",
|
|
529
|
+
md: "h-64",
|
|
530
|
+
lg: "h-80"
|
|
531
|
+
},
|
|
532
|
+
bottom: {
|
|
533
|
+
sm: "h-48",
|
|
534
|
+
md: "h-64",
|
|
535
|
+
lg: "h-80"
|
|
536
|
+
}
|
|
537
|
+
};
|
|
538
|
+
var positionClasses = {
|
|
539
|
+
left: "left-0 top-0 h-full",
|
|
540
|
+
right: "right-0 top-0 h-full",
|
|
541
|
+
top: "top-0 left-0 w-full",
|
|
542
|
+
bottom: "bottom-0 left-0 w-full"
|
|
543
|
+
};
|
|
544
|
+
var slideClasses = {
|
|
545
|
+
left: "transform transition-transform duration-300",
|
|
546
|
+
right: "transform transition-transform duration-300",
|
|
547
|
+
top: "transform transition-transform duration-300",
|
|
548
|
+
bottom: "transform transition-transform duration-300"
|
|
549
|
+
};
|
|
550
|
+
var Drawer = ({
|
|
551
|
+
isOpen,
|
|
552
|
+
onClose,
|
|
553
|
+
title,
|
|
554
|
+
children,
|
|
555
|
+
position = "right",
|
|
556
|
+
size = "md",
|
|
557
|
+
showCloseButton = true
|
|
558
|
+
}) => {
|
|
559
|
+
const { theme } = useTheme();
|
|
560
|
+
(0, import_react5.useEffect)(() => {
|
|
561
|
+
const handleEscape = (e) => {
|
|
562
|
+
if (e.key === "Escape" && isOpen) {
|
|
563
|
+
onClose();
|
|
564
|
+
}
|
|
565
|
+
};
|
|
566
|
+
if (isOpen) {
|
|
567
|
+
document.addEventListener("keydown", handleEscape);
|
|
568
|
+
document.body.style.overflow = "hidden";
|
|
569
|
+
}
|
|
570
|
+
return () => {
|
|
571
|
+
document.removeEventListener("keydown", handleEscape);
|
|
572
|
+
document.body.style.overflow = "unset";
|
|
573
|
+
};
|
|
574
|
+
}, [isOpen, onClose]);
|
|
575
|
+
if (!isOpen) return null;
|
|
576
|
+
const sizeClass = sizeClasses2[position][size];
|
|
577
|
+
const positionClass = positionClasses[position];
|
|
578
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_jsx_runtime8.Fragment, { children: [
|
|
579
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
580
|
+
"div",
|
|
581
|
+
{
|
|
582
|
+
className: "fixed inset-0 z-40 bg-black/60 backdrop-blur-sm transition-all duration-200",
|
|
583
|
+
onClick: onClose
|
|
584
|
+
}
|
|
585
|
+
),
|
|
586
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
587
|
+
"div",
|
|
588
|
+
{
|
|
589
|
+
className: `fixed z-50 ${positionClass} ${sizeClass} bg-white dark:bg-gray-800 shadow-2xl overflow-hidden flex flex-col ${slideClasses[position]}`,
|
|
590
|
+
children: [
|
|
591
|
+
(title || showCloseButton) && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "flex items-center justify-between p-6 border-b border-gray-200 dark:border-gray-700", children: [
|
|
592
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h3", { className: "text-xl font-semibold text-gray-900 dark:text-gray-100", children: title }),
|
|
593
|
+
showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
594
|
+
"button",
|
|
595
|
+
{
|
|
596
|
+
onClick: onClose,
|
|
597
|
+
className: "ml-auto text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 transition-colors",
|
|
598
|
+
"aria-label": "Close drawer",
|
|
599
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("svg", { className: "w-6 h-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
|
|
600
|
+
}
|
|
601
|
+
)
|
|
602
|
+
] }),
|
|
603
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "flex-1 p-6 overflow-y-auto", children })
|
|
604
|
+
]
|
|
605
|
+
}
|
|
606
|
+
)
|
|
607
|
+
] });
|
|
608
|
+
};
|
|
609
|
+
|
|
610
|
+
// src/components/TextInput.tsx
|
|
611
|
+
var import_react6 = require("react");
|
|
612
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
613
|
+
var sizeClasses3 = {
|
|
614
|
+
sm: "px-3 py-1.5 text-sm",
|
|
615
|
+
md: "px-4 py-2.5 text-base",
|
|
616
|
+
lg: "px-4 py-3 text-lg"
|
|
617
|
+
};
|
|
618
|
+
var TextInput = (0, import_react6.forwardRef)(
|
|
619
|
+
({
|
|
620
|
+
label,
|
|
621
|
+
error,
|
|
622
|
+
helperText,
|
|
623
|
+
size = "md",
|
|
624
|
+
fullWidth = false,
|
|
625
|
+
leftIcon,
|
|
626
|
+
rightIcon,
|
|
627
|
+
className = "",
|
|
628
|
+
disabled,
|
|
629
|
+
...props
|
|
630
|
+
}, ref) => {
|
|
631
|
+
const { theme, themeName } = useTheme();
|
|
632
|
+
const baseStyles = theme.select?.base || "w-full appearance-none rounded-lg border border-gray-300 bg-white text-gray-900 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";
|
|
633
|
+
const sizeStyle = sizeClasses3[size];
|
|
634
|
+
const errorStyles = error ? "border-red-500 focus:ring-red-500 dark:border-red-500" : "";
|
|
635
|
+
const disabledStyles = disabled ? "opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900" : "";
|
|
636
|
+
const widthStyle = fullWidth ? "w-full" : "";
|
|
637
|
+
const paddingWithIcon = leftIcon ? "pl-10" : rightIcon ? "pr-10" : "";
|
|
638
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: `${widthStyle} ${className}`, children: [
|
|
639
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: label }),
|
|
640
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "relative", children: [
|
|
641
|
+
leftIcon && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "absolute left-3 top-1/2 transform -translate-y-1/2 text-gray-400 dark:text-gray-500", children: leftIcon }),
|
|
642
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
643
|
+
"input",
|
|
644
|
+
{
|
|
645
|
+
ref,
|
|
646
|
+
className: `${baseStyles} ${sizeStyle} ${errorStyles} ${disabledStyles} ${paddingWithIcon}`.trim(),
|
|
647
|
+
disabled,
|
|
648
|
+
...props
|
|
649
|
+
}
|
|
650
|
+
),
|
|
651
|
+
rightIcon && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 dark:text-gray-500", children: rightIcon })
|
|
652
|
+
] }),
|
|
653
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error }),
|
|
654
|
+
helperText && !error && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "mt-1 text-sm text-gray-500 dark:text-gray-400", children: helperText })
|
|
655
|
+
] });
|
|
656
|
+
}
|
|
657
|
+
);
|
|
658
|
+
TextInput.displayName = "TextInput";
|
|
659
|
+
|
|
660
|
+
// src/components/ActionMenu.tsx
|
|
661
|
+
var import_react7 = require("react");
|
|
662
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
663
|
+
var ActionMenu = ({
|
|
664
|
+
items,
|
|
665
|
+
trigger,
|
|
666
|
+
position = "right"
|
|
667
|
+
}) => {
|
|
668
|
+
const { themeName } = useTheme();
|
|
669
|
+
const [isOpen, setIsOpen] = (0, import_react7.useState)(false);
|
|
670
|
+
const menuRef = (0, import_react7.useRef)(null);
|
|
671
|
+
(0, import_react7.useEffect)(() => {
|
|
672
|
+
const handleClickOutside = (event) => {
|
|
673
|
+
if (menuRef.current && !menuRef.current.contains(event.target)) {
|
|
674
|
+
setIsOpen(false);
|
|
675
|
+
}
|
|
676
|
+
};
|
|
677
|
+
if (isOpen) {
|
|
678
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
679
|
+
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
680
|
+
}
|
|
681
|
+
}, [isOpen]);
|
|
682
|
+
const handleItemClick = (item) => {
|
|
683
|
+
if (!item.disabled) {
|
|
684
|
+
item.onClick();
|
|
685
|
+
setIsOpen(false);
|
|
686
|
+
}
|
|
687
|
+
};
|
|
688
|
+
const defaultTrigger = /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
689
|
+
"button",
|
|
690
|
+
{
|
|
691
|
+
className: "p-2 rounded-md hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors",
|
|
692
|
+
"aria-label": "Open menu",
|
|
693
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime10.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_runtime10.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" }) })
|
|
694
|
+
}
|
|
695
|
+
);
|
|
696
|
+
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";
|
|
697
|
+
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";
|
|
698
|
+
const positionClass = position === "left" ? "left-0" : "right-0";
|
|
699
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "relative inline-block", ref: menuRef, children: [
|
|
700
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { onClick: () => setIsOpen(!isOpen), children: trigger || defaultTrigger }),
|
|
701
|
+
isOpen && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
702
|
+
"div",
|
|
703
|
+
{
|
|
704
|
+
className: `absolute ${positionClass} mt-2 w-56 rounded-lg ${menuBaseStyles} z-50 overflow-hidden`,
|
|
705
|
+
style: { minWidth: "14rem" },
|
|
706
|
+
children: items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
707
|
+
"button",
|
|
708
|
+
{
|
|
709
|
+
onClick: () => handleItemClick(item),
|
|
710
|
+
disabled: item.disabled,
|
|
711
|
+
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" : ""}`,
|
|
712
|
+
children: [
|
|
713
|
+
item.icon && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "flex-shrink-0", children: item.icon }),
|
|
714
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "flex-1", children: item.label })
|
|
715
|
+
]
|
|
716
|
+
},
|
|
717
|
+
index
|
|
718
|
+
))
|
|
719
|
+
}
|
|
720
|
+
)
|
|
721
|
+
] });
|
|
722
|
+
};
|
|
723
|
+
|
|
724
|
+
// src/components/Card.tsx
|
|
725
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
726
|
+
var paddingClasses = {
|
|
727
|
+
none: "",
|
|
728
|
+
sm: "p-4",
|
|
729
|
+
md: "p-6",
|
|
730
|
+
lg: "p-8"
|
|
731
|
+
};
|
|
732
|
+
var Card = ({
|
|
733
|
+
children,
|
|
734
|
+
className = "",
|
|
735
|
+
padding = "md",
|
|
736
|
+
hover = false
|
|
737
|
+
}) => {
|
|
738
|
+
const { theme } = useTheme();
|
|
739
|
+
const paddingClass = paddingClasses[padding];
|
|
740
|
+
const hoverClass = hover ? "hover:shadow-lg transition-shadow duration-200" : "";
|
|
741
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
742
|
+
"div",
|
|
743
|
+
{
|
|
744
|
+
className: `bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 ${paddingClass} ${hoverClass} ${className}`,
|
|
745
|
+
children
|
|
746
|
+
}
|
|
747
|
+
);
|
|
748
|
+
};
|
|
749
|
+
|
|
750
|
+
// src/components/Alert.tsx
|
|
751
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
752
|
+
var variantStyles = {
|
|
753
|
+
info: "bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800 text-blue-900 dark:text-blue-100",
|
|
754
|
+
success: "bg-green-50 dark:bg-green-900/20 border-green-200 dark:border-green-800 text-green-900 dark:text-green-100",
|
|
755
|
+
warning: "bg-yellow-50 dark:bg-yellow-900/20 border-yellow-200 dark:border-yellow-800 text-yellow-900 dark:text-yellow-100",
|
|
756
|
+
error: "bg-red-50 dark:bg-red-900/20 border-red-200 dark:border-red-800 text-red-900 dark:text-red-100"
|
|
757
|
+
};
|
|
758
|
+
var iconStyles = {
|
|
759
|
+
info: "text-blue-600 dark:text-blue-400",
|
|
760
|
+
success: "text-green-600 dark:text-green-400",
|
|
761
|
+
warning: "text-yellow-600 dark:text-yellow-400",
|
|
762
|
+
error: "text-red-600 dark:text-red-400"
|
|
763
|
+
};
|
|
764
|
+
var Alert = ({
|
|
765
|
+
variant = "info",
|
|
766
|
+
title,
|
|
767
|
+
children,
|
|
768
|
+
onClose,
|
|
769
|
+
className = ""
|
|
770
|
+
}) => {
|
|
771
|
+
const { theme } = useTheme();
|
|
772
|
+
const variantClass = variantStyles[variant];
|
|
773
|
+
const iconClass = iconStyles[variant];
|
|
774
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: `rounded-lg border p-4 ${variantClass} ${className}`, role: "alert", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-start gap-3", children: [
|
|
775
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: `flex-shrink-0 ${iconClass}`, children: [
|
|
776
|
+
variant === "info" && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("svg", { className: "w-5 h-5", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime12.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" }) }),
|
|
777
|
+
variant === "success" && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("svg", { className: "w-5 h-5", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime12.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" }) }),
|
|
778
|
+
variant === "warning" && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("svg", { className: "w-5 h-5", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime12.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" }) }),
|
|
779
|
+
variant === "error" && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("svg", { className: "w-5 h-5", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime12.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" }) })
|
|
780
|
+
] }),
|
|
781
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex-1", children: [
|
|
782
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("h3", { className: "font-semibold mb-1", children: title }),
|
|
783
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "text-sm", children })
|
|
784
|
+
] }),
|
|
785
|
+
onClose && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
786
|
+
"button",
|
|
787
|
+
{
|
|
788
|
+
onClick: onClose,
|
|
789
|
+
className: `flex-shrink-0 ${iconClass} hover:opacity-70 transition-opacity`,
|
|
790
|
+
"aria-label": "Close alert",
|
|
791
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("svg", { className: "w-5 h-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
|
|
792
|
+
}
|
|
793
|
+
)
|
|
794
|
+
] }) });
|
|
795
|
+
};
|
|
796
|
+
|
|
797
|
+
// src/components/Checkbox.tsx
|
|
798
|
+
var import_react8 = require("react");
|
|
799
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
800
|
+
var Checkbox = (0, import_react8.forwardRef)(
|
|
801
|
+
({ label, error, className = "", disabled, ...props }, ref) => {
|
|
802
|
+
const { theme } = useTheme();
|
|
803
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className, children: [
|
|
804
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("label", { className: "flex items-center gap-2 cursor-pointer group", children: [
|
|
805
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
806
|
+
"input",
|
|
807
|
+
{
|
|
808
|
+
ref,
|
|
809
|
+
type: "checkbox",
|
|
810
|
+
disabled,
|
|
811
|
+
className: `w-4 h-4 rounded border-gray-300 dark:border-gray-600 text-blue-600 focus:ring-2 focus:ring-blue-500 focus:ring-offset-0 disabled:opacity-50 disabled:cursor-not-allowed transition-colors ${error ? "border-red-500 dark:border-red-500" : ""}`,
|
|
812
|
+
...props
|
|
813
|
+
}
|
|
814
|
+
),
|
|
815
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime13.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 })
|
|
816
|
+
] }),
|
|
817
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error })
|
|
818
|
+
] });
|
|
819
|
+
}
|
|
820
|
+
);
|
|
821
|
+
Checkbox.displayName = "Checkbox";
|
|
822
|
+
|
|
823
|
+
// src/components/Toggle.tsx
|
|
824
|
+
var import_react9 = require("react");
|
|
825
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
826
|
+
var Toggle = (0, import_react9.forwardRef)(
|
|
827
|
+
({ label, size = "md", className = "", disabled, checked, ...props }, ref) => {
|
|
828
|
+
const { theme } = useTheme();
|
|
829
|
+
const toggleClasses = {
|
|
830
|
+
sm: {
|
|
831
|
+
switch: "w-9 h-5",
|
|
832
|
+
thumb: "w-4 h-4 peer-checked:translate-x-4"
|
|
833
|
+
},
|
|
834
|
+
md: {
|
|
835
|
+
switch: "w-11 h-6",
|
|
836
|
+
thumb: "w-5 h-5 peer-checked:translate-x-5"
|
|
837
|
+
},
|
|
838
|
+
lg: {
|
|
839
|
+
switch: "w-14 h-7",
|
|
840
|
+
thumb: "w-6 h-6 peer-checked:translate-x-7"
|
|
841
|
+
}
|
|
842
|
+
};
|
|
843
|
+
const currentSize = toggleClasses[size];
|
|
844
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("label", { className: `inline-flex items-center gap-3 cursor-pointer ${disabled ? "opacity-50 cursor-not-allowed" : ""} ${className}`, children: [
|
|
845
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "relative", children: [
|
|
846
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
847
|
+
"input",
|
|
848
|
+
{
|
|
849
|
+
ref,
|
|
850
|
+
type: "checkbox",
|
|
851
|
+
className: "sr-only peer",
|
|
852
|
+
disabled,
|
|
853
|
+
checked,
|
|
854
|
+
...props
|
|
855
|
+
}
|
|
856
|
+
),
|
|
857
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
858
|
+
"div",
|
|
859
|
+
{
|
|
860
|
+
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`
|
|
861
|
+
}
|
|
862
|
+
),
|
|
863
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
864
|
+
"div",
|
|
865
|
+
{
|
|
866
|
+
className: `${currentSize.thumb} bg-white rounded-full shadow-md absolute top-0.5 left-0.5 transition-transform`
|
|
867
|
+
}
|
|
868
|
+
)
|
|
869
|
+
] }),
|
|
870
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: label })
|
|
871
|
+
] });
|
|
872
|
+
}
|
|
873
|
+
);
|
|
874
|
+
Toggle.displayName = "Toggle";
|
|
875
|
+
|
|
876
|
+
// src/components/Badge.tsx
|
|
877
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
878
|
+
var variantStyles2 = {
|
|
879
|
+
default: "bg-gray-100 dark:bg-gray-700 text-gray-800 dark:text-gray-200",
|
|
880
|
+
primary: "bg-blue-100 dark:bg-blue-900/30 text-blue-800 dark:text-blue-200",
|
|
881
|
+
success: "bg-green-100 dark:bg-green-900/30 text-green-800 dark:text-green-200",
|
|
882
|
+
warning: "bg-yellow-100 dark:bg-yellow-900/30 text-yellow-800 dark:text-yellow-200",
|
|
883
|
+
error: "bg-red-100 dark:bg-red-900/30 text-red-800 dark:text-red-200",
|
|
884
|
+
info: "bg-cyan-100 dark:bg-cyan-900/30 text-cyan-800 dark:text-cyan-200"
|
|
885
|
+
};
|
|
886
|
+
var sizeStyles = {
|
|
887
|
+
sm: "px-2 py-0.5 text-xs",
|
|
888
|
+
md: "px-2.5 py-1 text-sm",
|
|
889
|
+
lg: "px-3 py-1.5 text-base"
|
|
890
|
+
};
|
|
891
|
+
var Badge = ({
|
|
892
|
+
children,
|
|
893
|
+
variant = "default",
|
|
894
|
+
size = "md",
|
|
895
|
+
className = ""
|
|
896
|
+
}) => {
|
|
897
|
+
const { theme } = useTheme();
|
|
898
|
+
const variantClass = variantStyles2[variant];
|
|
899
|
+
const sizeClass = sizeStyles[size];
|
|
900
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: `inline-flex items-center font-medium rounded-full ${variantClass} ${sizeClass} ${className}`, children });
|
|
901
|
+
};
|
|
902
|
+
|
|
903
|
+
// src/components/Spinner.tsx
|
|
904
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
905
|
+
var sizeClasses4 = {
|
|
906
|
+
sm: "w-4 h-4 border-2",
|
|
907
|
+
md: "w-8 h-8 border-2",
|
|
908
|
+
lg: "w-12 h-12 border-3",
|
|
909
|
+
xl: "w-16 h-16 border-4"
|
|
910
|
+
};
|
|
911
|
+
var colorClasses = {
|
|
912
|
+
primary: "border-blue-600 border-t-transparent",
|
|
913
|
+
secondary: "border-gray-600 border-t-transparent",
|
|
914
|
+
white: "border-white border-t-transparent"
|
|
915
|
+
};
|
|
916
|
+
var Spinner = ({
|
|
917
|
+
size = "md",
|
|
918
|
+
color = "primary",
|
|
919
|
+
className = ""
|
|
920
|
+
}) => {
|
|
921
|
+
const { theme } = useTheme();
|
|
922
|
+
const sizeClass = sizeClasses4[size];
|
|
923
|
+
const colorClass = colorClasses[color];
|
|
924
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
925
|
+
"div",
|
|
926
|
+
{
|
|
927
|
+
className: `inline-block rounded-full animate-spin ${sizeClass} ${colorClass} ${className}`,
|
|
928
|
+
role: "status",
|
|
929
|
+
"aria-label": "Loading",
|
|
930
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "sr-only", children: "Loading..." })
|
|
931
|
+
}
|
|
932
|
+
);
|
|
933
|
+
};
|
|
934
|
+
|
|
935
|
+
// src/components/Tabs.tsx
|
|
936
|
+
var import_react10 = require("react");
|
|
937
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
938
|
+
var Tabs = ({
|
|
939
|
+
tabs,
|
|
940
|
+
defaultIndex = 0,
|
|
941
|
+
onChange,
|
|
942
|
+
className = ""
|
|
943
|
+
}) => {
|
|
944
|
+
const { theme } = useTheme();
|
|
945
|
+
const [activeIndex, setActiveIndex] = (0, import_react10.useState)(defaultIndex);
|
|
946
|
+
const handleTabClick = (index) => {
|
|
947
|
+
if (tabs[index].disabled) return;
|
|
948
|
+
setActiveIndex(index);
|
|
949
|
+
onChange?.(index);
|
|
950
|
+
};
|
|
951
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className, children: [
|
|
952
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "border-b border-gray-200 dark:border-gray-700", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("nav", { className: "flex gap-8 px-6", "aria-label": "Tabs", children: tabs.map((tab, index) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
953
|
+
"button",
|
|
954
|
+
{
|
|
955
|
+
onClick: () => handleTabClick(index),
|
|
956
|
+
disabled: tab.disabled,
|
|
957
|
+
className: `py-4 px-1 border-b-2 font-medium text-sm transition-colors ${activeIndex === index ? "border-blue-600 text-blue-600 dark:text-blue-400" : "border-transparent text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 hover:border-gray-300 dark:hover:border-gray-600"} ${tab.disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer"}`,
|
|
958
|
+
"aria-current": activeIndex === index ? "page" : void 0,
|
|
959
|
+
children: tab.label
|
|
960
|
+
},
|
|
961
|
+
index
|
|
962
|
+
)) }) }),
|
|
963
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { children: tabs[activeIndex]?.content })
|
|
964
|
+
] });
|
|
965
|
+
};
|
|
966
|
+
|
|
967
|
+
// src/components/Table.tsx
|
|
968
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
969
|
+
function Table({
|
|
970
|
+
columns,
|
|
971
|
+
data,
|
|
972
|
+
keyField = "id",
|
|
973
|
+
striped = false,
|
|
974
|
+
hoverable = true,
|
|
975
|
+
className = ""
|
|
976
|
+
}) {
|
|
977
|
+
const { theme } = useTheme();
|
|
978
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: `overflow-x-auto ${className}`, children: [
|
|
979
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("table", { className: "w-full text-left", children: [
|
|
980
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("thead", { className: "bg-gray-50 dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("tr", { children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
981
|
+
"th",
|
|
982
|
+
{
|
|
983
|
+
className: "px-6 py-3 text-xs font-medium text-gray-700 dark:text-gray-300 uppercase tracking-wider",
|
|
984
|
+
style: { width: column.width },
|
|
985
|
+
children: column.title
|
|
986
|
+
},
|
|
987
|
+
column.key
|
|
988
|
+
)) }) }),
|
|
989
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("tbody", { className: "bg-white dark:bg-gray-900 divide-y divide-gray-200 dark:divide-gray-700", children: data.map((row, rowIndex) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
990
|
+
"tr",
|
|
991
|
+
{
|
|
992
|
+
className: `
|
|
993
|
+
${striped && rowIndex % 2 === 1 ? "bg-gray-50 dark:bg-gray-800/50" : ""}
|
|
994
|
+
${hoverable ? "hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors" : ""}
|
|
995
|
+
`,
|
|
996
|
+
children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
997
|
+
"td",
|
|
998
|
+
{
|
|
999
|
+
className: "px-6 py-4 text-sm text-gray-900 dark:text-gray-100",
|
|
1000
|
+
children: column.render ? column.render(row[column.key], row, rowIndex) : row[column.key]
|
|
1001
|
+
},
|
|
1002
|
+
column.key
|
|
1003
|
+
))
|
|
1004
|
+
},
|
|
1005
|
+
row[keyField] || rowIndex
|
|
1006
|
+
)) })
|
|
1007
|
+
] }),
|
|
1008
|
+
data.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "text-center py-8 text-gray-500 dark:text-gray-400", children: "No data available" })
|
|
1009
|
+
] });
|
|
1010
|
+
}
|
|
1011
|
+
|
|
1012
|
+
// src/components/Pagination.tsx
|
|
1013
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
1014
|
+
var Pagination = ({
|
|
1015
|
+
currentPage,
|
|
1016
|
+
totalPages,
|
|
1017
|
+
onPageChange,
|
|
1018
|
+
siblingCount = 1,
|
|
1019
|
+
className = ""
|
|
1020
|
+
}) => {
|
|
1021
|
+
const { theme } = useTheme();
|
|
1022
|
+
const range = (start, end) => {
|
|
1023
|
+
const length = end - start + 1;
|
|
1024
|
+
return Array.from({ length }, (_, idx) => idx + start);
|
|
1025
|
+
};
|
|
1026
|
+
const paginationRange = () => {
|
|
1027
|
+
const totalPageNumbers = siblingCount + 5;
|
|
1028
|
+
if (totalPageNumbers >= totalPages) {
|
|
1029
|
+
return range(1, totalPages);
|
|
1030
|
+
}
|
|
1031
|
+
const leftSiblingIndex = Math.max(currentPage - siblingCount, 1);
|
|
1032
|
+
const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages);
|
|
1033
|
+
const shouldShowLeftDots = leftSiblingIndex > 2;
|
|
1034
|
+
const shouldShowRightDots = rightSiblingIndex < totalPages - 2;
|
|
1035
|
+
const firstPageIndex = 1;
|
|
1036
|
+
const lastPageIndex = totalPages;
|
|
1037
|
+
if (!shouldShowLeftDots && shouldShowRightDots) {
|
|
1038
|
+
const leftItemCount = 3 + 2 * siblingCount;
|
|
1039
|
+
const leftRange = range(1, leftItemCount);
|
|
1040
|
+
return [...leftRange, "...", totalPages];
|
|
1041
|
+
}
|
|
1042
|
+
if (shouldShowLeftDots && !shouldShowRightDots) {
|
|
1043
|
+
const rightItemCount = 3 + 2 * siblingCount;
|
|
1044
|
+
const rightRange = range(totalPages - rightItemCount + 1, totalPages);
|
|
1045
|
+
return [firstPageIndex, "...", ...rightRange];
|
|
1046
|
+
}
|
|
1047
|
+
if (shouldShowLeftDots && shouldShowRightDots) {
|
|
1048
|
+
const middleRange = range(leftSiblingIndex, rightSiblingIndex);
|
|
1049
|
+
return [firstPageIndex, "...", ...middleRange, "...", lastPageIndex];
|
|
1050
|
+
}
|
|
1051
|
+
return range(1, totalPages);
|
|
1052
|
+
};
|
|
1053
|
+
const pages = paginationRange();
|
|
1054
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("nav", { className: `flex items-center gap-1 ${className}`, "aria-label": "Pagination", children: [
|
|
1055
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1056
|
+
"button",
|
|
1057
|
+
{
|
|
1058
|
+
onClick: () => onPageChange(currentPage - 1),
|
|
1059
|
+
disabled: currentPage === 1,
|
|
1060
|
+
className: "px-3 py-2 rounded-md text-sm font-medium text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800 disabled:opacity-50 disabled:cursor-not-allowed transition-colors",
|
|
1061
|
+
"aria-label": "Previous page",
|
|
1062
|
+
children: "Previous"
|
|
1063
|
+
}
|
|
1064
|
+
),
|
|
1065
|
+
pages.map((page, index) => {
|
|
1066
|
+
if (page === "...") {
|
|
1067
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1068
|
+
"span",
|
|
1069
|
+
{
|
|
1070
|
+
className: "px-3 py-2 text-gray-700 dark:text-gray-300",
|
|
1071
|
+
children: "..."
|
|
1072
|
+
},
|
|
1073
|
+
`dots-${index}`
|
|
1074
|
+
);
|
|
1075
|
+
}
|
|
1076
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1077
|
+
"button",
|
|
1078
|
+
{
|
|
1079
|
+
onClick: () => onPageChange(page),
|
|
1080
|
+
className: `px-3 py-2 rounded-md text-sm font-medium transition-colors ${currentPage === page ? "bg-blue-600 text-white" : "text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800"}`,
|
|
1081
|
+
"aria-label": `Page ${page}`,
|
|
1082
|
+
"aria-current": currentPage === page ? "page" : void 0,
|
|
1083
|
+
children: page
|
|
1084
|
+
},
|
|
1085
|
+
page
|
|
1086
|
+
);
|
|
1087
|
+
}),
|
|
1088
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1089
|
+
"button",
|
|
1090
|
+
{
|
|
1091
|
+
onClick: () => onPageChange(currentPage + 1),
|
|
1092
|
+
disabled: currentPage === totalPages,
|
|
1093
|
+
className: "px-3 py-2 rounded-md text-sm font-medium text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800 disabled:opacity-50 disabled:cursor-not-allowed transition-colors",
|
|
1094
|
+
"aria-label": "Next page",
|
|
1095
|
+
children: "Next"
|
|
1096
|
+
}
|
|
1097
|
+
)
|
|
1098
|
+
] });
|
|
1099
|
+
};
|
|
1100
|
+
|
|
1101
|
+
// src/components/DatePicker.tsx
|
|
1102
|
+
var import_react11 = require("react");
|
|
1103
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
1104
|
+
var DatePicker = (0, import_react11.forwardRef)(
|
|
1105
|
+
({ label, error, helperText, className = "", disabled, ...props }, ref) => {
|
|
1106
|
+
const { theme } = useTheme();
|
|
1107
|
+
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";
|
|
1108
|
+
const errorStyles = error ? "border-red-500 focus:ring-red-500 dark:border-red-500" : "";
|
|
1109
|
+
const disabledStyles = disabled ? "opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900" : "";
|
|
1110
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className, children: [
|
|
1111
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: label }),
|
|
1112
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
1113
|
+
"input",
|
|
1114
|
+
{
|
|
1115
|
+
ref,
|
|
1116
|
+
type: "date",
|
|
1117
|
+
disabled,
|
|
1118
|
+
className: `${baseStyles} ${errorStyles} ${disabledStyles}`.trim(),
|
|
1119
|
+
...props
|
|
1120
|
+
}
|
|
1121
|
+
),
|
|
1122
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error }),
|
|
1123
|
+
helperText && !error && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "mt-1 text-sm text-gray-500 dark:text-gray-400", children: helperText })
|
|
1124
|
+
] });
|
|
1125
|
+
}
|
|
1126
|
+
);
|
|
1127
|
+
DatePicker.displayName = "DatePicker";
|
|
1128
|
+
|
|
1129
|
+
// src/components/TimePicker.tsx
|
|
1130
|
+
var import_react12 = require("react");
|
|
1131
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
1132
|
+
var TimePicker = (0, import_react12.forwardRef)(
|
|
1133
|
+
({ label, error, helperText, className = "", disabled, ...props }, ref) => {
|
|
1134
|
+
const { theme } = useTheme();
|
|
1135
|
+
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";
|
|
1136
|
+
const errorStyles = error ? "border-red-500 focus:ring-red-500 dark:border-red-500" : "";
|
|
1137
|
+
const disabledStyles = disabled ? "opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900" : "";
|
|
1138
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className, children: [
|
|
1139
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: label }),
|
|
1140
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
1141
|
+
"input",
|
|
1142
|
+
{
|
|
1143
|
+
ref,
|
|
1144
|
+
type: "time",
|
|
1145
|
+
disabled,
|
|
1146
|
+
className: `${baseStyles} ${errorStyles} ${disabledStyles}`.trim(),
|
|
1147
|
+
...props
|
|
1148
|
+
}
|
|
1149
|
+
),
|
|
1150
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error }),
|
|
1151
|
+
helperText && !error && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { className: "mt-1 text-sm text-gray-500 dark:text-gray-400", children: helperText })
|
|
1152
|
+
] });
|
|
1153
|
+
}
|
|
1154
|
+
);
|
|
1155
|
+
TimePicker.displayName = "TimePicker";
|
|
1156
|
+
|
|
1157
|
+
// src/components/DateTimePicker.tsx
|
|
1158
|
+
var import_react13 = require("react");
|
|
1159
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
1160
|
+
var DateTimePicker = (0, import_react13.forwardRef)(
|
|
1161
|
+
({ label, error, helperText, className = "", disabled, ...props }, ref) => {
|
|
1162
|
+
const { theme } = useTheme();
|
|
1163
|
+
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";
|
|
1164
|
+
const errorStyles = error ? "border-red-500 focus:ring-red-500 dark:border-red-500" : "";
|
|
1165
|
+
const disabledStyles = disabled ? "opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900" : "";
|
|
1166
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className, children: [
|
|
1167
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: label }),
|
|
1168
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
1169
|
+
"input",
|
|
1170
|
+
{
|
|
1171
|
+
ref,
|
|
1172
|
+
type: "datetime-local",
|
|
1173
|
+
disabled,
|
|
1174
|
+
className: `${baseStyles} ${errorStyles} ${disabledStyles}`.trim(),
|
|
1175
|
+
...props
|
|
1176
|
+
}
|
|
1177
|
+
),
|
|
1178
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error }),
|
|
1179
|
+
helperText && !error && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "mt-1 text-sm text-gray-500 dark:text-gray-400", children: helperText })
|
|
1180
|
+
] });
|
|
1181
|
+
}
|
|
1182
|
+
);
|
|
1183
|
+
DateTimePicker.displayName = "DateTimePicker";
|
|
1184
|
+
|
|
316
1185
|
// src/utils/theme-script.ts
|
|
317
1186
|
var themeScript = `
|
|
318
1187
|
(function() {
|
|
@@ -345,14 +1214,221 @@ var themeScript = `
|
|
|
345
1214
|
function getThemeScript() {
|
|
346
1215
|
return themeScript;
|
|
347
1216
|
}
|
|
1217
|
+
|
|
1218
|
+
// src/icons/Icon.tsx
|
|
1219
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
1220
|
+
var sizeClasses5 = {
|
|
1221
|
+
xs: "w-3 h-3",
|
|
1222
|
+
sm: "w-4 h-4",
|
|
1223
|
+
md: "w-5 h-5",
|
|
1224
|
+
lg: "w-6 h-6",
|
|
1225
|
+
xl: "w-8 h-8"
|
|
1226
|
+
};
|
|
1227
|
+
var createIcon = (displayName, path, filled = false) => {
|
|
1228
|
+
const Icon = ({ size = "md", className = "", color = "currentColor" }) => {
|
|
1229
|
+
const sizeClass = sizeClasses5[size];
|
|
1230
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
1231
|
+
"svg",
|
|
1232
|
+
{
|
|
1233
|
+
className: `${sizeClass} ${className}`,
|
|
1234
|
+
fill: filled ? color : "none",
|
|
1235
|
+
viewBox: "0 0 24 24",
|
|
1236
|
+
stroke: filled ? "none" : color,
|
|
1237
|
+
"aria-hidden": "true",
|
|
1238
|
+
children: path
|
|
1239
|
+
}
|
|
1240
|
+
);
|
|
1241
|
+
};
|
|
1242
|
+
Icon.displayName = displayName;
|
|
1243
|
+
return Icon;
|
|
1244
|
+
};
|
|
1245
|
+
var HomeIcon = createIcon(
|
|
1246
|
+
"HomeIcon",
|
|
1247
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" })
|
|
1248
|
+
);
|
|
1249
|
+
var UserIcon = createIcon(
|
|
1250
|
+
"UserIcon",
|
|
1251
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" })
|
|
1252
|
+
);
|
|
1253
|
+
var SearchIcon = createIcon(
|
|
1254
|
+
"SearchIcon",
|
|
1255
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" })
|
|
1256
|
+
);
|
|
1257
|
+
var BellIcon = createIcon(
|
|
1258
|
+
"BellIcon",
|
|
1259
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9" })
|
|
1260
|
+
);
|
|
1261
|
+
var SettingsIcon = createIcon(
|
|
1262
|
+
"SettingsIcon",
|
|
1263
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
|
|
1264
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" }),
|
|
1265
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" })
|
|
1266
|
+
] })
|
|
1267
|
+
);
|
|
1268
|
+
var MenuIcon = createIcon(
|
|
1269
|
+
"MenuIcon",
|
|
1270
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 6h16M4 12h16M4 18h16" })
|
|
1271
|
+
);
|
|
1272
|
+
var CloseIcon = createIcon(
|
|
1273
|
+
"CloseIcon",
|
|
1274
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" })
|
|
1275
|
+
);
|
|
1276
|
+
var ChevronDownIcon = createIcon(
|
|
1277
|
+
"ChevronDownIcon",
|
|
1278
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" })
|
|
1279
|
+
);
|
|
1280
|
+
var ChevronRightIcon = createIcon(
|
|
1281
|
+
"ChevronRightIcon",
|
|
1282
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" })
|
|
1283
|
+
);
|
|
1284
|
+
var CheckIcon = createIcon(
|
|
1285
|
+
"CheckIcon",
|
|
1286
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" })
|
|
1287
|
+
);
|
|
1288
|
+
var PlusIcon = createIcon(
|
|
1289
|
+
"PlusIcon",
|
|
1290
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 4v16m8-8H4" })
|
|
1291
|
+
);
|
|
1292
|
+
var TrashIcon = createIcon(
|
|
1293
|
+
"TrashIcon",
|
|
1294
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.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" })
|
|
1295
|
+
);
|
|
1296
|
+
var EditIcon = createIcon(
|
|
1297
|
+
"EditIcon",
|
|
1298
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.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" })
|
|
1299
|
+
);
|
|
1300
|
+
var MailIcon = createIcon(
|
|
1301
|
+
"MailIcon",
|
|
1302
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.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" })
|
|
1303
|
+
);
|
|
1304
|
+
var StarIcon = createIcon(
|
|
1305
|
+
"StarIcon",
|
|
1306
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.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" })
|
|
1307
|
+
);
|
|
1308
|
+
var HeartIcon = createIcon(
|
|
1309
|
+
"HeartIcon",
|
|
1310
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.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" })
|
|
1311
|
+
);
|
|
1312
|
+
var DownloadIcon = createIcon(
|
|
1313
|
+
"DownloadIcon",
|
|
1314
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.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" })
|
|
1315
|
+
);
|
|
1316
|
+
var UploadIcon = createIcon(
|
|
1317
|
+
"UploadIcon",
|
|
1318
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.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" })
|
|
1319
|
+
);
|
|
1320
|
+
var CameraIcon = createIcon(
|
|
1321
|
+
"CameraIcon",
|
|
1322
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
|
|
1323
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.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" }),
|
|
1324
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 13a3 3 0 11-6 0 3 3 0 016 0z" })
|
|
1325
|
+
] })
|
|
1326
|
+
);
|
|
1327
|
+
var LockIcon = createIcon(
|
|
1328
|
+
"LockIcon",
|
|
1329
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.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" })
|
|
1330
|
+
);
|
|
1331
|
+
var CalendarIcon = createIcon(
|
|
1332
|
+
"CalendarIcon",
|
|
1333
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.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" })
|
|
1334
|
+
);
|
|
1335
|
+
var GoogleIcon = createIcon(
|
|
1336
|
+
"GoogleIcon",
|
|
1337
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.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" }),
|
|
1338
|
+
true
|
|
1339
|
+
);
|
|
1340
|
+
var GitHubIcon = createIcon(
|
|
1341
|
+
"GitHubIcon",
|
|
1342
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.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" }),
|
|
1343
|
+
true
|
|
1344
|
+
);
|
|
1345
|
+
var TwitterIcon = createIcon(
|
|
1346
|
+
"TwitterIcon",
|
|
1347
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.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" }),
|
|
1348
|
+
true
|
|
1349
|
+
);
|
|
1350
|
+
var FacebookIcon = createIcon(
|
|
1351
|
+
"FacebookIcon",
|
|
1352
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.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" }),
|
|
1353
|
+
true
|
|
1354
|
+
);
|
|
1355
|
+
var AppleIcon = createIcon(
|
|
1356
|
+
"AppleIcon",
|
|
1357
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.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" }),
|
|
1358
|
+
true
|
|
1359
|
+
);
|
|
1360
|
+
var LinkedInIcon = createIcon(
|
|
1361
|
+
"LinkedInIcon",
|
|
1362
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.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" }),
|
|
1363
|
+
true
|
|
1364
|
+
);
|
|
1365
|
+
var YouTubeIcon = createIcon(
|
|
1366
|
+
"YouTubeIcon",
|
|
1367
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.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" }),
|
|
1368
|
+
true
|
|
1369
|
+
);
|
|
1370
|
+
var SlackIcon = createIcon(
|
|
1371
|
+
"SlackIcon",
|
|
1372
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.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" }),
|
|
1373
|
+
true
|
|
1374
|
+
);
|
|
348
1375
|
// Annotate the CommonJS export names for ESM import in node:
|
|
349
1376
|
0 && (module.exports = {
|
|
1377
|
+
ActionMenu,
|
|
1378
|
+
Alert,
|
|
1379
|
+
AppleIcon,
|
|
1380
|
+
Badge,
|
|
1381
|
+
BellIcon,
|
|
350
1382
|
Button,
|
|
1383
|
+
CalendarIcon,
|
|
1384
|
+
CameraIcon,
|
|
1385
|
+
Card,
|
|
1386
|
+
CheckIcon,
|
|
1387
|
+
Checkbox,
|
|
1388
|
+
ChevronDownIcon,
|
|
1389
|
+
ChevronRightIcon,
|
|
1390
|
+
CloseIcon,
|
|
1391
|
+
DatePicker,
|
|
1392
|
+
DateTimePicker,
|
|
1393
|
+
DownloadIcon,
|
|
1394
|
+
Drawer,
|
|
1395
|
+
EditIcon,
|
|
1396
|
+
FacebookIcon,
|
|
1397
|
+
GitHubIcon,
|
|
1398
|
+
GoogleIcon,
|
|
1399
|
+
HeartIcon,
|
|
1400
|
+
HomeIcon,
|
|
1401
|
+
LinkedInIcon,
|
|
1402
|
+
LockIcon,
|
|
1403
|
+
MailIcon,
|
|
1404
|
+
MenuIcon,
|
|
1405
|
+
Modal,
|
|
1406
|
+
Navbar,
|
|
1407
|
+
Pagination,
|
|
1408
|
+
PlusIcon,
|
|
1409
|
+
SearchIcon,
|
|
351
1410
|
Select,
|
|
1411
|
+
SettingsIcon,
|
|
1412
|
+
Sidebar,
|
|
1413
|
+
SidebarProvider,
|
|
1414
|
+
SlackIcon,
|
|
1415
|
+
Spinner,
|
|
1416
|
+
StarIcon,
|
|
1417
|
+
Table,
|
|
1418
|
+
Tabs,
|
|
1419
|
+
TextInput,
|
|
352
1420
|
ThemeProvider,
|
|
1421
|
+
TimePicker,
|
|
1422
|
+
Toggle,
|
|
1423
|
+
TrashIcon,
|
|
1424
|
+
TwitterIcon,
|
|
1425
|
+
UploadIcon,
|
|
1426
|
+
UserIcon,
|
|
1427
|
+
YouTubeIcon,
|
|
353
1428
|
getThemeScript,
|
|
354
1429
|
themeScript,
|
|
355
1430
|
themes,
|
|
1431
|
+
useSidebar,
|
|
356
1432
|
useTheme
|
|
357
1433
|
});
|
|
358
1434
|
//# sourceMappingURL=index.js.map
|