@marcoschwartz/lite-ui 0.3.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/dist/index.mjs CHANGED
@@ -8,7 +8,7 @@ var themes = {
8
8
  default: {
9
9
  name: "default",
10
10
  button: {
11
- base: "font-semibold rounded-lg transition-all duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 active:scale-95",
11
+ 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",
12
12
  variants: {
13
13
  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",
14
14
  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",
@@ -18,10 +18,10 @@ var themes = {
18
18
  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"
19
19
  },
20
20
  sizes: {
21
- sm: "px-3 py-1.5 text-sm",
22
- md: "px-4 py-2 text-base",
23
- lg: "px-6 py-3 text-lg",
24
- xl: "px-8 py-4 text-xl"
21
+ sm: "px-3 py-1.5 text-sm min-h-[30px]",
22
+ md: "px-4 py-2 text-base min-h-[38px]",
23
+ lg: "px-6 py-3 text-lg min-h-[48px]",
24
+ xl: "px-8 py-4 text-xl min-h-[60px]"
25
25
  },
26
26
  disabled: "opacity-50 cursor-not-allowed hover:shadow-sm active:scale-100"
27
27
  },
@@ -39,7 +39,7 @@ var themes = {
39
39
  minimalistic: {
40
40
  name: "minimalistic",
41
41
  button: {
42
- base: "font-normal rounded-none transition-colors duration-200 focus:outline-none border-2",
42
+ base: "font-normal rounded-none transition-colors duration-200 focus:outline-none border-2 gap-2",
43
43
  variants: {
44
44
  primary: "bg-transparent border-white text-white hover:bg-white hover:text-black",
45
45
  secondary: "bg-transparent border-gray-400 text-gray-400 hover:bg-gray-400 hover:text-black",
@@ -49,10 +49,10 @@ var themes = {
49
49
  info: "bg-transparent border-blue-400 text-blue-400 hover:bg-blue-400 hover:text-black"
50
50
  },
51
51
  sizes: {
52
- sm: "px-4 py-2 text-sm uppercase tracking-wide",
53
- md: "px-6 py-3 text-base uppercase tracking-wide",
54
- lg: "px-8 py-4 text-lg uppercase tracking-wider",
55
- xl: "px-10 py-5 text-xl uppercase tracking-wider"
52
+ sm: "px-4 py-2 text-sm uppercase tracking-wide min-h-[36px]",
53
+ md: "px-6 py-3 text-base uppercase tracking-wide min-h-[48px]",
54
+ lg: "px-8 py-4 text-lg uppercase tracking-wider min-h-[60px]",
55
+ xl: "px-10 py-5 text-xl uppercase tracking-wider min-h-[72px]"
56
56
  },
57
57
  disabled: "opacity-30 cursor-not-allowed hover:bg-transparent"
58
58
  },
@@ -152,13 +152,16 @@ function ThemeProvider({
152
152
  }
153
153
 
154
154
  // src/components/Button.tsx
155
- import { jsx as jsx2 } from "react/jsx-runtime";
155
+ import { Fragment, jsx as jsx2, jsxs } from "react/jsx-runtime";
156
156
  var Button = ({
157
157
  variant = "primary",
158
158
  size = "md",
159
159
  className = "",
160
160
  children,
161
161
  disabled,
162
+ leftIcon,
163
+ rightIcon,
164
+ iconOnly = false,
162
165
  ...props
163
166
  }) => {
164
167
  const { theme } = useTheme();
@@ -166,21 +169,26 @@ var Button = ({
166
169
  const variantStyles3 = theme.button.variants[variant];
167
170
  const sizeStyles2 = theme.button.sizes[size];
168
171
  const disabledStyles = disabled ? theme.button.disabled : "";
169
- const classes = `${baseStyles} ${variantStyles3} ${sizeStyles2} ${disabledStyles} ${className}`.trim();
172
+ const iconOnlyStyles = iconOnly ? "!p-0 aspect-square" : "";
173
+ const classes = `inline-flex items-center justify-center ${baseStyles} ${variantStyles3} ${sizeStyles2} ${disabledStyles} ${iconOnlyStyles} ${className}`.trim();
170
174
  return /* @__PURE__ */ jsx2(
171
175
  "button",
172
176
  {
173
177
  className: classes,
174
178
  disabled,
175
179
  ...props,
176
- children
180
+ children: iconOnly ? children : /* @__PURE__ */ jsxs(Fragment, { children: [
181
+ leftIcon && /* @__PURE__ */ jsx2("span", { className: "inline-flex shrink-0", children: leftIcon }),
182
+ children && /* @__PURE__ */ jsx2("span", { className: "inline-flex items-center", children }),
183
+ rightIcon && /* @__PURE__ */ jsx2("span", { className: "inline-flex shrink-0", children: rightIcon })
184
+ ] })
177
185
  }
178
186
  );
179
187
  };
180
188
 
181
189
  // src/components/Select.tsx
182
190
  import { useState as useState2, useRef, useEffect as useEffect2 } from "react";
183
- import { jsx as jsx3, jsxs } from "react/jsx-runtime";
191
+ import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
184
192
  var Select = ({
185
193
  options,
186
194
  size = "md",
@@ -234,7 +242,7 @@ var Select = ({
234
242
  lg: "px-4 py-3 text-lg",
235
243
  xl: "px-5 py-4 text-xl"
236
244
  }[size];
237
- return /* @__PURE__ */ jsxs("div", { className: "relative inline-block w-full", ref: dropdownRef, ...props, children: [
245
+ return /* @__PURE__ */ jsxs2("div", { className: "relative inline-block w-full", ref: dropdownRef, ...props, children: [
238
246
  /* @__PURE__ */ jsx3(
239
247
  "button",
240
248
  {
@@ -284,7 +292,7 @@ var Select = ({
284
292
 
285
293
  // src/components/Modal.tsx
286
294
  import { useEffect as useEffect3 } from "react";
287
- import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
295
+ import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
288
296
  var sizeClasses = {
289
297
  sm: "max-w-md",
290
298
  md: "max-w-lg",
@@ -325,13 +333,13 @@ var Modal = ({
325
333
  role: "dialog",
326
334
  "aria-modal": "true",
327
335
  "aria-labelledby": title ? "modal-title" : void 0,
328
- children: /* @__PURE__ */ jsxs2(
336
+ children: /* @__PURE__ */ jsxs3(
329
337
  "div",
330
338
  {
331
339
  className: `relative w-full ${sizeClass} bg-white dark:bg-gray-800 rounded-lg shadow-2xl transform transition-all duration-200 scale-100 animate-in`,
332
340
  onClick: (e) => e.stopPropagation(),
333
341
  children: [
334
- (title || showCloseButton) && /* @__PURE__ */ jsxs2("div", { className: "flex items-center justify-between p-6 border-b border-gray-200 dark:border-gray-700", children: [
342
+ (title || showCloseButton) && /* @__PURE__ */ jsxs3("div", { className: "flex items-center justify-between p-6 border-b border-gray-200 dark:border-gray-700", children: [
335
343
  title && /* @__PURE__ */ jsx4("h3", { id: "modal-title", className: "text-xl font-semibold text-gray-900 dark:text-gray-100", children: title }),
336
344
  showCloseButton && /* @__PURE__ */ jsx4(
337
345
  "button",
@@ -352,7 +360,7 @@ var Modal = ({
352
360
  };
353
361
 
354
362
  // src/components/Navbar.tsx
355
- import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
363
+ import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
356
364
  var Navbar = ({
357
365
  logo,
358
366
  children,
@@ -361,7 +369,7 @@ var Navbar = ({
361
369
  }) => {
362
370
  const { theme } = useTheme();
363
371
  const baseClasses = sticky ? "sticky top-0 z-40" : "";
364
- return /* @__PURE__ */ jsx5("nav", { className: `bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 ${baseClasses} ${className}`, children: /* @__PURE__ */ jsx5("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxs3("div", { className: "flex justify-between items-center h-16", children: [
372
+ return /* @__PURE__ */ jsx5("nav", { className: `bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 ${baseClasses} ${className}`, children: /* @__PURE__ */ jsx5("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxs4("div", { className: "flex justify-between items-center h-16", children: [
365
373
  logo && /* @__PURE__ */ jsx5("div", { className: "flex items-center", children: logo }),
366
374
  children && /* @__PURE__ */ jsx5("div", { className: "flex items-center gap-6", children })
367
375
  ] }) }) });
@@ -424,7 +432,7 @@ var useSidebar = () => {
424
432
 
425
433
  // src/components/Drawer.tsx
426
434
  import { useEffect as useEffect4 } from "react";
427
- import { Fragment, jsx as jsx8, jsxs as jsxs4 } from "react/jsx-runtime";
435
+ import { Fragment as Fragment2, jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
428
436
  var sizeClasses2 = {
429
437
  left: {
430
438
  sm: "w-64",
@@ -487,7 +495,7 @@ var Drawer = ({
487
495
  if (!isOpen) return null;
488
496
  const sizeClass = sizeClasses2[position][size];
489
497
  const positionClass = positionClasses[position];
490
- return /* @__PURE__ */ jsxs4(Fragment, { children: [
498
+ return /* @__PURE__ */ jsxs5(Fragment2, { children: [
491
499
  /* @__PURE__ */ jsx8(
492
500
  "div",
493
501
  {
@@ -495,12 +503,12 @@ var Drawer = ({
495
503
  onClick: onClose
496
504
  }
497
505
  ),
498
- /* @__PURE__ */ jsxs4(
506
+ /* @__PURE__ */ jsxs5(
499
507
  "div",
500
508
  {
501
509
  className: `fixed z-50 ${positionClass} ${sizeClass} bg-white dark:bg-gray-800 shadow-2xl overflow-hidden flex flex-col ${slideClasses[position]}`,
502
510
  children: [
503
- (title || showCloseButton) && /* @__PURE__ */ jsxs4("div", { className: "flex items-center justify-between p-6 border-b border-gray-200 dark:border-gray-700", children: [
511
+ (title || showCloseButton) && /* @__PURE__ */ jsxs5("div", { className: "flex items-center justify-between p-6 border-b border-gray-200 dark:border-gray-700", children: [
504
512
  title && /* @__PURE__ */ jsx8("h3", { className: "text-xl font-semibold text-gray-900 dark:text-gray-100", children: title }),
505
513
  showCloseButton && /* @__PURE__ */ jsx8(
506
514
  "button",
@@ -521,7 +529,7 @@ var Drawer = ({
521
529
 
522
530
  // src/components/TextInput.tsx
523
531
  import { forwardRef } from "react";
524
- import { jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
532
+ import { jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
525
533
  var sizeClasses3 = {
526
534
  sm: "px-3 py-1.5 text-sm",
527
535
  md: "px-4 py-2.5 text-base",
@@ -547,9 +555,9 @@ var TextInput = forwardRef(
547
555
  const disabledStyles = disabled ? "opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900" : "";
548
556
  const widthStyle = fullWidth ? "w-full" : "";
549
557
  const paddingWithIcon = leftIcon ? "pl-10" : rightIcon ? "pr-10" : "";
550
- return /* @__PURE__ */ jsxs5("div", { className: `${widthStyle} ${className}`, children: [
558
+ return /* @__PURE__ */ jsxs6("div", { className: `${widthStyle} ${className}`, children: [
551
559
  label && /* @__PURE__ */ jsx9("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: label }),
552
- /* @__PURE__ */ jsxs5("div", { className: "relative", children: [
560
+ /* @__PURE__ */ jsxs6("div", { className: "relative", children: [
553
561
  leftIcon && /* @__PURE__ */ jsx9("div", { className: "absolute left-3 top-1/2 transform -translate-y-1/2 text-gray-400 dark:text-gray-500", children: leftIcon }),
554
562
  /* @__PURE__ */ jsx9(
555
563
  "input",
@@ -571,7 +579,7 @@ TextInput.displayName = "TextInput";
571
579
 
572
580
  // src/components/ActionMenu.tsx
573
581
  import { useState as useState4, useRef as useRef2, useEffect as useEffect5 } from "react";
574
- import { jsx as jsx10, jsxs as jsxs6 } from "react/jsx-runtime";
582
+ import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
575
583
  var ActionMenu = ({
576
584
  items,
577
585
  trigger,
@@ -608,14 +616,14 @@ var ActionMenu = ({
608
616
  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";
609
617
  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";
610
618
  const positionClass = position === "left" ? "left-0" : "right-0";
611
- return /* @__PURE__ */ jsxs6("div", { className: "relative inline-block", ref: menuRef, children: [
619
+ return /* @__PURE__ */ jsxs7("div", { className: "relative inline-block", ref: menuRef, children: [
612
620
  /* @__PURE__ */ jsx10("div", { onClick: () => setIsOpen(!isOpen), children: trigger || defaultTrigger }),
613
621
  isOpen && /* @__PURE__ */ jsx10(
614
622
  "div",
615
623
  {
616
624
  className: `absolute ${positionClass} mt-2 w-56 rounded-lg ${menuBaseStyles} z-50 overflow-hidden`,
617
625
  style: { minWidth: "14rem" },
618
- children: items.map((item, index) => /* @__PURE__ */ jsxs6(
626
+ children: items.map((item, index) => /* @__PURE__ */ jsxs7(
619
627
  "button",
620
628
  {
621
629
  onClick: () => handleItemClick(item),
@@ -660,7 +668,7 @@ var Card = ({
660
668
  };
661
669
 
662
670
  // src/components/Alert.tsx
663
- import { jsx as jsx12, jsxs as jsxs7 } from "react/jsx-runtime";
671
+ import { jsx as jsx12, jsxs as jsxs8 } from "react/jsx-runtime";
664
672
  var variantStyles = {
665
673
  info: "bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800 text-blue-900 dark:text-blue-100",
666
674
  success: "bg-green-50 dark:bg-green-900/20 border-green-200 dark:border-green-800 text-green-900 dark:text-green-100",
@@ -683,14 +691,14 @@ var Alert = ({
683
691
  const { theme } = useTheme();
684
692
  const variantClass = variantStyles[variant];
685
693
  const iconClass = iconStyles[variant];
686
- return /* @__PURE__ */ jsx12("div", { className: `rounded-lg border p-4 ${variantClass} ${className}`, role: "alert", children: /* @__PURE__ */ jsxs7("div", { className: "flex items-start gap-3", children: [
687
- /* @__PURE__ */ jsxs7("div", { className: `flex-shrink-0 ${iconClass}`, children: [
694
+ return /* @__PURE__ */ jsx12("div", { className: `rounded-lg border p-4 ${variantClass} ${className}`, role: "alert", children: /* @__PURE__ */ jsxs8("div", { className: "flex items-start gap-3", children: [
695
+ /* @__PURE__ */ jsxs8("div", { className: `flex-shrink-0 ${iconClass}`, children: [
688
696
  variant === "info" && /* @__PURE__ */ jsx12("svg", { className: "w-5 h-5", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ jsx12("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" }) }),
689
697
  variant === "success" && /* @__PURE__ */ jsx12("svg", { className: "w-5 h-5", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ jsx12("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" }) }),
690
698
  variant === "warning" && /* @__PURE__ */ jsx12("svg", { className: "w-5 h-5", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ jsx12("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" }) }),
691
699
  variant === "error" && /* @__PURE__ */ jsx12("svg", { className: "w-5 h-5", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ jsx12("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" }) })
692
700
  ] }),
693
- /* @__PURE__ */ jsxs7("div", { className: "flex-1", children: [
701
+ /* @__PURE__ */ jsxs8("div", { className: "flex-1", children: [
694
702
  title && /* @__PURE__ */ jsx12("h3", { className: "font-semibold mb-1", children: title }),
695
703
  /* @__PURE__ */ jsx12("div", { className: "text-sm", children })
696
704
  ] }),
@@ -708,12 +716,12 @@ var Alert = ({
708
716
 
709
717
  // src/components/Checkbox.tsx
710
718
  import { forwardRef as forwardRef2 } from "react";
711
- import { jsx as jsx13, jsxs as jsxs8 } from "react/jsx-runtime";
719
+ import { jsx as jsx13, jsxs as jsxs9 } from "react/jsx-runtime";
712
720
  var Checkbox = forwardRef2(
713
721
  ({ label, error, className = "", disabled, ...props }, ref) => {
714
722
  const { theme } = useTheme();
715
- return /* @__PURE__ */ jsxs8("div", { className, children: [
716
- /* @__PURE__ */ jsxs8("label", { className: "flex items-center gap-2 cursor-pointer group", children: [
723
+ return /* @__PURE__ */ jsxs9("div", { className, children: [
724
+ /* @__PURE__ */ jsxs9("label", { className: "flex items-center gap-2 cursor-pointer group", children: [
717
725
  /* @__PURE__ */ jsx13(
718
726
  "input",
719
727
  {
@@ -734,7 +742,7 @@ Checkbox.displayName = "Checkbox";
734
742
 
735
743
  // src/components/Toggle.tsx
736
744
  import { forwardRef as forwardRef3 } from "react";
737
- import { jsx as jsx14, jsxs as jsxs9 } from "react/jsx-runtime";
745
+ import { jsx as jsx14, jsxs as jsxs10 } from "react/jsx-runtime";
738
746
  var Toggle = forwardRef3(
739
747
  ({ label, size = "md", className = "", disabled, checked, ...props }, ref) => {
740
748
  const { theme } = useTheme();
@@ -753,8 +761,8 @@ var Toggle = forwardRef3(
753
761
  }
754
762
  };
755
763
  const currentSize = toggleClasses[size];
756
- return /* @__PURE__ */ jsxs9("label", { className: `inline-flex items-center gap-3 cursor-pointer ${disabled ? "opacity-50 cursor-not-allowed" : ""} ${className}`, children: [
757
- /* @__PURE__ */ jsxs9("div", { className: "relative", children: [
764
+ return /* @__PURE__ */ jsxs10("label", { className: `inline-flex items-center gap-3 cursor-pointer ${disabled ? "opacity-50 cursor-not-allowed" : ""} ${className}`, children: [
765
+ /* @__PURE__ */ jsxs10("div", { className: "relative", children: [
758
766
  /* @__PURE__ */ jsx14(
759
767
  "input",
760
768
  {
@@ -846,7 +854,7 @@ var Spinner = ({
846
854
 
847
855
  // src/components/Tabs.tsx
848
856
  import { useState as useState5 } from "react";
849
- import { jsx as jsx17, jsxs as jsxs10 } from "react/jsx-runtime";
857
+ import { jsx as jsx17, jsxs as jsxs11 } from "react/jsx-runtime";
850
858
  var Tabs = ({
851
859
  tabs,
852
860
  defaultIndex = 0,
@@ -860,7 +868,7 @@ var Tabs = ({
860
868
  setActiveIndex(index);
861
869
  onChange?.(index);
862
870
  };
863
- return /* @__PURE__ */ jsxs10("div", { className, children: [
871
+ return /* @__PURE__ */ jsxs11("div", { className, children: [
864
872
  /* @__PURE__ */ jsx17("div", { className: "border-b border-gray-200 dark:border-gray-700", children: /* @__PURE__ */ jsx17("nav", { className: "flex gap-8 px-6", "aria-label": "Tabs", children: tabs.map((tab, index) => /* @__PURE__ */ jsx17(
865
873
  "button",
866
874
  {
@@ -877,7 +885,7 @@ var Tabs = ({
877
885
  };
878
886
 
879
887
  // src/components/Table.tsx
880
- import { jsx as jsx18, jsxs as jsxs11 } from "react/jsx-runtime";
888
+ import { jsx as jsx18, jsxs as jsxs12 } from "react/jsx-runtime";
881
889
  function Table({
882
890
  columns,
883
891
  data,
@@ -887,8 +895,8 @@ function Table({
887
895
  className = ""
888
896
  }) {
889
897
  const { theme } = useTheme();
890
- return /* @__PURE__ */ jsxs11("div", { className: `overflow-x-auto ${className}`, children: [
891
- /* @__PURE__ */ jsxs11("table", { className: "w-full text-left", children: [
898
+ return /* @__PURE__ */ jsxs12("div", { className: `overflow-x-auto ${className}`, children: [
899
+ /* @__PURE__ */ jsxs12("table", { className: "w-full text-left", children: [
892
900
  /* @__PURE__ */ jsx18("thead", { className: "bg-gray-50 dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700", children: /* @__PURE__ */ jsx18("tr", { children: columns.map((column) => /* @__PURE__ */ jsx18(
893
901
  "th",
894
902
  {
@@ -922,7 +930,7 @@ function Table({
922
930
  }
923
931
 
924
932
  // src/components/Pagination.tsx
925
- import { jsx as jsx19, jsxs as jsxs12 } from "react/jsx-runtime";
933
+ import { jsx as jsx19, jsxs as jsxs13 } from "react/jsx-runtime";
926
934
  var Pagination = ({
927
935
  currentPage,
928
936
  totalPages,
@@ -963,7 +971,7 @@ var Pagination = ({
963
971
  return range(1, totalPages);
964
972
  };
965
973
  const pages = paginationRange();
966
- return /* @__PURE__ */ jsxs12("nav", { className: `flex items-center gap-1 ${className}`, "aria-label": "Pagination", children: [
974
+ return /* @__PURE__ */ jsxs13("nav", { className: `flex items-center gap-1 ${className}`, "aria-label": "Pagination", children: [
967
975
  /* @__PURE__ */ jsx19(
968
976
  "button",
969
977
  {
@@ -1012,14 +1020,14 @@ var Pagination = ({
1012
1020
 
1013
1021
  // src/components/DatePicker.tsx
1014
1022
  import { forwardRef as forwardRef4 } from "react";
1015
- import { jsx as jsx20, jsxs as jsxs13 } from "react/jsx-runtime";
1023
+ import { jsx as jsx20, jsxs as jsxs14 } from "react/jsx-runtime";
1016
1024
  var DatePicker = forwardRef4(
1017
1025
  ({ label, error, helperText, className = "", disabled, ...props }, ref) => {
1018
1026
  const { theme } = useTheme();
1019
1027
  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";
1020
1028
  const errorStyles = error ? "border-red-500 focus:ring-red-500 dark:border-red-500" : "";
1021
1029
  const disabledStyles = disabled ? "opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900" : "";
1022
- return /* @__PURE__ */ jsxs13("div", { className, children: [
1030
+ return /* @__PURE__ */ jsxs14("div", { className, children: [
1023
1031
  label && /* @__PURE__ */ jsx20("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: label }),
1024
1032
  /* @__PURE__ */ jsx20(
1025
1033
  "input",
@@ -1040,14 +1048,14 @@ DatePicker.displayName = "DatePicker";
1040
1048
 
1041
1049
  // src/components/TimePicker.tsx
1042
1050
  import { forwardRef as forwardRef5 } from "react";
1043
- import { jsx as jsx21, jsxs as jsxs14 } from "react/jsx-runtime";
1051
+ import { jsx as jsx21, jsxs as jsxs15 } from "react/jsx-runtime";
1044
1052
  var TimePicker = forwardRef5(
1045
1053
  ({ label, error, helperText, className = "", disabled, ...props }, ref) => {
1046
1054
  const { theme } = useTheme();
1047
1055
  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";
1048
1056
  const errorStyles = error ? "border-red-500 focus:ring-red-500 dark:border-red-500" : "";
1049
1057
  const disabledStyles = disabled ? "opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900" : "";
1050
- return /* @__PURE__ */ jsxs14("div", { className, children: [
1058
+ return /* @__PURE__ */ jsxs15("div", { className, children: [
1051
1059
  label && /* @__PURE__ */ jsx21("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: label }),
1052
1060
  /* @__PURE__ */ jsx21(
1053
1061
  "input",
@@ -1068,14 +1076,14 @@ TimePicker.displayName = "TimePicker";
1068
1076
 
1069
1077
  // src/components/DateTimePicker.tsx
1070
1078
  import { forwardRef as forwardRef6 } from "react";
1071
- import { jsx as jsx22, jsxs as jsxs15 } from "react/jsx-runtime";
1079
+ import { jsx as jsx22, jsxs as jsxs16 } from "react/jsx-runtime";
1072
1080
  var DateTimePicker = forwardRef6(
1073
1081
  ({ label, error, helperText, className = "", disabled, ...props }, ref) => {
1074
1082
  const { theme } = useTheme();
1075
1083
  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";
1076
1084
  const errorStyles = error ? "border-red-500 focus:ring-red-500 dark:border-red-500" : "";
1077
1085
  const disabledStyles = disabled ? "opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900" : "";
1078
- return /* @__PURE__ */ jsxs15("div", { className, children: [
1086
+ return /* @__PURE__ */ jsxs16("div", { className, children: [
1079
1087
  label && /* @__PURE__ */ jsx22("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: label }),
1080
1088
  /* @__PURE__ */ jsx22(
1081
1089
  "input",
@@ -1128,7 +1136,7 @@ function getThemeScript() {
1128
1136
  }
1129
1137
 
1130
1138
  // src/icons/Icon.tsx
1131
- import { Fragment as Fragment2, jsx as jsx23, jsxs as jsxs16 } from "react/jsx-runtime";
1139
+ import { Fragment as Fragment3, jsx as jsx23, jsxs as jsxs17 } from "react/jsx-runtime";
1132
1140
  var sizeClasses5 = {
1133
1141
  xs: "w-3 h-3",
1134
1142
  sm: "w-4 h-4",
@@ -1136,16 +1144,16 @@ var sizeClasses5 = {
1136
1144
  lg: "w-6 h-6",
1137
1145
  xl: "w-8 h-8"
1138
1146
  };
1139
- var createIcon = (displayName, path) => {
1147
+ var createIcon = (displayName, path, filled = false) => {
1140
1148
  const Icon = ({ size = "md", className = "", color = "currentColor" }) => {
1141
1149
  const sizeClass = sizeClasses5[size];
1142
1150
  return /* @__PURE__ */ jsx23(
1143
1151
  "svg",
1144
1152
  {
1145
1153
  className: `${sizeClass} ${className}`,
1146
- fill: "none",
1154
+ fill: filled ? color : "none",
1147
1155
  viewBox: "0 0 24 24",
1148
- stroke: color,
1156
+ stroke: filled ? "none" : color,
1149
1157
  "aria-hidden": "true",
1150
1158
  children: path
1151
1159
  }
@@ -1172,7 +1180,7 @@ var BellIcon = createIcon(
1172
1180
  );
1173
1181
  var SettingsIcon = createIcon(
1174
1182
  "SettingsIcon",
1175
- /* @__PURE__ */ jsxs16(Fragment2, { children: [
1183
+ /* @__PURE__ */ jsxs17(Fragment3, { children: [
1176
1184
  /* @__PURE__ */ jsx23("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" }),
1177
1185
  /* @__PURE__ */ jsx23("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" })
1178
1186
  ] })
@@ -1231,7 +1239,7 @@ var UploadIcon = createIcon(
1231
1239
  );
1232
1240
  var CameraIcon = createIcon(
1233
1241
  "CameraIcon",
1234
- /* @__PURE__ */ jsxs16(Fragment2, { children: [
1242
+ /* @__PURE__ */ jsxs17(Fragment3, { children: [
1235
1243
  /* @__PURE__ */ jsx23("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" }),
1236
1244
  /* @__PURE__ */ jsx23("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 13a3 3 0 11-6 0 3 3 0 016 0z" })
1237
1245
  ] })
@@ -1244,9 +1252,50 @@ var CalendarIcon = createIcon(
1244
1252
  "CalendarIcon",
1245
1253
  /* @__PURE__ */ jsx23("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" })
1246
1254
  );
1255
+ var GoogleIcon = createIcon(
1256
+ "GoogleIcon",
1257
+ /* @__PURE__ */ jsx23("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" }),
1258
+ true
1259
+ );
1260
+ var GitHubIcon = createIcon(
1261
+ "GitHubIcon",
1262
+ /* @__PURE__ */ jsx23("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" }),
1263
+ true
1264
+ );
1265
+ var TwitterIcon = createIcon(
1266
+ "TwitterIcon",
1267
+ /* @__PURE__ */ jsx23("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" }),
1268
+ true
1269
+ );
1270
+ var FacebookIcon = createIcon(
1271
+ "FacebookIcon",
1272
+ /* @__PURE__ */ jsx23("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" }),
1273
+ true
1274
+ );
1275
+ var AppleIcon = createIcon(
1276
+ "AppleIcon",
1277
+ /* @__PURE__ */ jsx23("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" }),
1278
+ true
1279
+ );
1280
+ var LinkedInIcon = createIcon(
1281
+ "LinkedInIcon",
1282
+ /* @__PURE__ */ jsx23("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" }),
1283
+ true
1284
+ );
1285
+ var YouTubeIcon = createIcon(
1286
+ "YouTubeIcon",
1287
+ /* @__PURE__ */ jsx23("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" }),
1288
+ true
1289
+ );
1290
+ var SlackIcon = createIcon(
1291
+ "SlackIcon",
1292
+ /* @__PURE__ */ jsx23("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" }),
1293
+ true
1294
+ );
1247
1295
  export {
1248
1296
  ActionMenu,
1249
1297
  Alert,
1298
+ AppleIcon,
1250
1299
  Badge,
1251
1300
  BellIcon,
1252
1301
  Button,
@@ -1263,8 +1312,12 @@ export {
1263
1312
  DownloadIcon,
1264
1313
  Drawer,
1265
1314
  EditIcon,
1315
+ FacebookIcon,
1316
+ GitHubIcon,
1317
+ GoogleIcon,
1266
1318
  HeartIcon,
1267
1319
  HomeIcon,
1320
+ LinkedInIcon,
1268
1321
  LockIcon,
1269
1322
  MailIcon,
1270
1323
  MenuIcon,
@@ -1277,6 +1330,7 @@ export {
1277
1330
  SettingsIcon,
1278
1331
  Sidebar,
1279
1332
  SidebarProvider,
1333
+ SlackIcon,
1280
1334
  Spinner,
1281
1335
  StarIcon,
1282
1336
  Table,
@@ -1286,8 +1340,10 @@ export {
1286
1340
  TimePicker,
1287
1341
  Toggle,
1288
1342
  TrashIcon,
1343
+ TwitterIcon,
1289
1344
  UploadIcon,
1290
1345
  UserIcon,
1346
+ YouTubeIcon,
1291
1347
  getThemeScript,
1292
1348
  themeScript,
1293
1349
  themes,