luna-components-library 1.1.39 → 1.1.41

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.
@@ -17,7 +17,23 @@ var colors = {
17
17
  bgSelected: "#eff6ff",
18
18
  bgSkeleton: "#f3f4f6",
19
19
  primary: "#2563eb",
20
- dark: "#111827"
20
+ primaryHover: "#1d4ed8",
21
+ secondary: "#4b5563",
22
+ secondaryHover: "#6d737c",
23
+ success: "#16a34a",
24
+ successHover: "#15803d",
25
+ danger: "#dc2626",
26
+ dangerHover: "#b91c1c",
27
+ warning: "#f59e0b",
28
+ warningHover: "#d97706",
29
+ info: "#0ea5e9",
30
+ infoHover: "#0891b2",
31
+ light: "#f9fafb",
32
+ lightHover: "#f3f4f6",
33
+ dark: "#111827",
34
+ darkHover: "#1f2937",
35
+ whatsapp: "#25D366",
36
+ whatsappHover: "#128C7E"
21
37
  };
22
38
  var radii = {
23
39
  sm: "0.375rem",
@@ -111,15 +127,7 @@ var commonStyles = {
111
127
  padding: "1rem",
112
128
  display: "flex",
113
129
  alignItems: "center",
114
- justifyContent: "space-between",
115
- backgroundColor: colors.bgHeader,
116
- border: "none",
117
- cursor: "pointer",
118
- textAlign: "left",
119
- fontSize: fontSizes.sm,
120
- fontWeight: fontWeights.semibold,
121
- color: colors.text,
122
- outline: "none"
130
+ justifyContent: "space-between"
123
131
  },
124
132
  chevron: {
125
133
  fontSize: fontSizes.xs,
@@ -200,15 +208,11 @@ var commonStyles = {
200
208
  },
201
209
  buttonBase: {
202
210
  display: "inline-flex",
203
- alignItems: "center",
204
- justifyContent: "center",
205
211
  fontWeight: fontWeights.medium,
206
212
  borderRadius: radii.md,
207
- transition: transitions.fast,
208
- cursor: "pointer",
209
- outline: "none",
210
- border: "1px solid transparent"
213
+ hover: { backgroundColor: colors.bgHover }
211
214
  },
215
+ anchorBase: {},
212
216
  inputWrapper: {
213
217
  position: "relative",
214
218
  display: "inline-block",
@@ -224,7 +228,9 @@ var commonStyles = {
224
228
  inputField: {
225
229
  width: "100%",
226
230
  borderRadius: radii.md,
227
- border: `1px solid ${colors.borderInput}`,
231
+ borderStyle: "solid",
232
+ borderWidth: "1px",
233
+ borderColor: colors.borderInput,
228
234
  transition: transitions.fast,
229
235
  outline: "none"
230
236
  },
@@ -296,7 +302,8 @@ var dataTableStyles = (styles) => ({
296
302
  },
297
303
  searchContainer: {
298
304
  padding: "1rem",
299
- borderBottom: `1px solid ${colors.border}`
305
+ borderBottom: `1px solid ${colors.border}`,
306
+ ...styles?.searchContainer
300
307
  },
301
308
  table: {
302
309
  width: "100%",
@@ -324,12 +331,25 @@ var dataTableStyles = (styles) => ({
324
331
  },
325
332
  tr: (clickable) => ({
326
333
  transition: transitions.bg,
327
- cursor: clickable ? "pointer" : "default"
334
+ cursor: clickable ? "pointer" : "default",
335
+ ...styles?.tr
328
336
  }),
329
- pagination: { ...commonStyles.pagination },
330
- icon: { ...commonStyles.icon },
331
- filterMenu: { ...commonStyles.filterMenu },
332
- filterOption: (active) => ({ ...commonStyles.filterOption(active) })
337
+ pagination: {
338
+ ...commonStyles.pagination,
339
+ ...styles?.pagination
340
+ },
341
+ icon: {
342
+ ...commonStyles.icon,
343
+ ...styles?.icon
344
+ },
345
+ filterMenu: {
346
+ ...commonStyles.filterMenu,
347
+ ...styles?.filterMenu
348
+ },
349
+ filterOption: (active) => ({
350
+ ...commonStyles.filterOption(active),
351
+ ...styles?.filterOption
352
+ })
333
353
  });
334
354
  var dropDownStyles = (styles, disabled, isOpen, hoverIndex, value) => ({
335
355
  container: {
@@ -374,76 +394,20 @@ var dropDownStyles = (styles, disabled, isOpen, hoverIndex, value) => ({
374
394
  arrow: {
375
395
  ...commonStyles.chevron,
376
396
  marginLeft: "0.5rem",
377
- transform: isOpen ? "rotate(180deg)" : "rotate(0deg)"
397
+ transform: isOpen ? "rotate(180deg)" : "rotate(0deg)",
398
+ ...styles?.arrow
378
399
  }
379
400
  });
380
- var variantStyles = {
381
- primary: {
382
- backgroundColor: "#2563eb",
383
- color: "#ffffff"
384
- },
385
- secondary: {
386
- backgroundColor: "#4b5563",
387
- color: "#ffffff"
388
- },
389
- outline: {
390
- backgroundColor: "transparent",
391
- color: "#374151",
392
- borderColor: "#d1d5db"
393
- },
394
- success: {
395
- backgroundColor: "#16a34a",
396
- color: "#ffffff"
397
- },
398
- danger: {
399
- backgroundColor: "#dc2626",
400
- color: "#ffffff"
401
- },
402
- warning: {
403
- backgroundColor: "#eab308",
404
- color: "#ffffff"
405
- },
406
- info: {
407
- backgroundColor: "#0891b2",
408
- color: "#ffffff"
409
- },
410
- dark: {
411
- backgroundColor: "#111827",
412
- color: "#ffffff"
413
- },
414
- light: {
415
- backgroundColor: "#f3f4f6",
416
- color: "#111827"
417
- },
418
- link: {
419
- backgroundColor: "transparent",
420
- color: "#2563eb",
421
- border: "none",
422
- padding: 0,
423
- textDecoration: "underline"
424
- }
425
- };
426
- var variantClasses = {
427
- primary: "bg-blue-600 text-white hover:bg-blue-700",
428
- secondary: "bg-gray-600 text-white hover:bg-gray-700",
429
- outline: "border border-gray-300 text-gray-700 hover:bg-gray-50",
430
- success: "bg-green-600 text-white hover:bg-green-700",
431
- danger: "bg-red-600 text-white hover:bg-red-700",
432
- warning: "bg-yellow-500 text-white hover:bg-yellow-600",
433
- info: "bg-cyan-600 text-white hover:bg-cyan-700",
434
- dark: "bg-gray-900 text-white hover:bg-gray-800",
435
- light: "bg-gray-100 text-gray-900 hover:bg-gray-200",
436
- link: "text-blue-600 hover:text-blue-800 hover:underline"
437
- };
401
+ colors.primary, colors.white, colors.secondary, colors.white, colors.text, colors.borderInput, colors.success, colors.white, colors.danger, colors.white, colors.warning, colors.white, colors.info, colors.white, colors.dark, colors.white, colors.light, colors.dark, colors.primary;
438
402
  var inputStyles = (styles, extraStyle, inputSize, readOnly, disabled) => ({
439
403
  container: {
440
404
  ...commonStyles.inputWrapper,
441
- ...styles?.container,
405
+ styles,
442
406
  ...extraStyle
443
407
  },
444
408
  label: {
445
409
  ...commonStyles.inputLabel,
446
- ...styles?.label
410
+ styles
447
411
  },
448
412
  input: {
449
413
  ...commonStyles.inputField,
@@ -452,30 +416,49 @@ var inputStyles = (styles, extraStyle, inputSize, readOnly, disabled) => ({
452
416
  backgroundColor: readOnly ? colors.borderLight : colors.white,
453
417
  cursor: disabled ? "not-allowed" : readOnly ? "default" : "text",
454
418
  opacity: disabled ? .5 : 1,
455
- ...styles?.input
419
+ styles
456
420
  },
457
421
  variants: {
458
422
  none: {},
459
423
  primary: {
460
- ...variantStyles.primary,
461
- borderColor: "#2563eb"
424
+ borderColor: colors.primary,
425
+ color: colors.primary
462
426
  },
463
427
  secondary: {
464
- ...variantStyles.secondary,
465
- borderColor: "#4b5563"
428
+ borderColor: colors.secondary,
429
+ color: colors.secondary
466
430
  },
467
431
  outline: {
468
- ...variantStyles.outline,
469
- backgroundColor: "#ffffff",
470
- borderColor: "#d1d5db"
432
+ borderColor: colors.borderInput,
433
+ color: colors.text
471
434
  },
472
435
  danger: {
473
- ...variantStyles.danger,
474
- borderColor: "#dc2626"
436
+ borderColor: colors.danger,
437
+ color: colors.danger
475
438
  },
476
439
  success: {
477
- ...variantStyles.success,
478
- borderColor: "#16a34a"
440
+ borderColor: colors.success,
441
+ color: colors.success
442
+ },
443
+ warning: {
444
+ borderColor: colors.warning,
445
+ color: colors.warning
446
+ },
447
+ info: {
448
+ borderColor: colors.info,
449
+ color: colors.info
450
+ },
451
+ dark: {
452
+ borderColor: colors.dark,
453
+ color: colors.dark
454
+ },
455
+ light: {
456
+ borderColor: colors.light,
457
+ color: colors.light
458
+ },
459
+ link: {
460
+ borderColor: "transparent",
461
+ color: colors.primary
479
462
  }
480
463
  }
481
464
  });
@@ -483,14 +466,14 @@ var multiSelectStyles = (styles, disabled, isOpen) => ({
483
466
  container: {
484
467
  position: "relative",
485
468
  width: "100%",
486
- ...styles?.container
469
+ styles
487
470
  },
488
471
  trigger: {
489
472
  ...commonStyles.trigger,
490
473
  minHeight: "2.5rem",
491
474
  cursor: disabled ? "not-allowed" : "pointer",
492
475
  opacity: disabled ? .6 : 1,
493
- ...styles?.trigger
476
+ styles
494
477
  },
495
478
  chevron: {
496
479
  ...commonStyles.chevron,
@@ -499,7 +482,7 @@ var multiSelectStyles = (styles, disabled, isOpen) => ({
499
482
  panel: {
500
483
  ...commonStyles.panel,
501
484
  display: isOpen ? "block" : "none",
502
- ...styles?.panel
485
+ styles
503
486
  },
504
487
  header: {
505
488
  ...commonStyles.header,
@@ -507,7 +490,7 @@ var multiSelectStyles = (styles, disabled, isOpen) => ({
507
490
  borderBottom: `1px solid ${colors.borderLight}`,
508
491
  flexDirection: "column",
509
492
  gap: "0.5rem",
510
- ...styles?.header
493
+ styles
511
494
  },
512
495
  selectAllWrapper: {
513
496
  display: "flex",
@@ -520,12 +503,12 @@ var multiSelectStyles = (styles, disabled, isOpen) => ({
520
503
  list: { ...commonStyles.list },
521
504
  item: (isSelected, isDisabled) => ({
522
505
  ...commonStyles.item(isSelected, isDisabled),
523
- ...styles?.item
506
+ styles
524
507
  }),
525
508
  checkbox: { ...commonStyles.checkbox },
526
509
  chip: {
527
510
  ...commonStyles.chip,
528
- ...styles?.chip
511
+ styles
529
512
  },
530
513
  chipIcon: {
531
514
  cursor: "pointer",
@@ -580,13 +563,15 @@ var popconfirmStyles = (styles, show, position) => ({
580
563
  display: "flex",
581
564
  alignItems: "flex-start",
582
565
  gap: "0.5rem",
583
- marginBottom: "0.5rem"
566
+ marginBottom: "0.5rem",
567
+ ...styles?.titleWrapper
584
568
  },
585
569
  icon: {
586
570
  color: "#eab308",
587
571
  fontSize: "1rem",
588
572
  fontWeight: "bold",
589
- marginTop: "1px"
573
+ marginTop: "1px",
574
+ ...styles?.icon
590
575
  },
591
576
  title: {
592
577
  fontSize: fontSizes.sm,
@@ -604,7 +589,8 @@ var popconfirmStyles = (styles, show, position) => ({
604
589
  actions: {
605
590
  display: "flex",
606
591
  justifyContent: "flex-end",
607
- gap: "0.5rem"
592
+ gap: "0.5rem",
593
+ ...styles?.actions
608
594
  }
609
595
  });
610
596
  var preloaderStyles = (zIndex, backgroundColor, size, borderWidth, styles) => ({
@@ -631,34 +617,34 @@ var preloaderStyles = (zIndex, backgroundColor, size, borderWidth, styles) => ({
631
617
  });
632
618
  var progressBarVariantColors = {
633
619
  primary: {
634
- bg: "#2563eb",
635
- text: "#ffffff",
636
- track: "#e5e7eb"
620
+ bg: colors.primary,
621
+ text: colors.white,
622
+ track: colors.border
637
623
  },
638
624
  success: {
639
- bg: "#16a34a",
640
- text: "#ffffff",
641
- track: "#e5e7eb"
625
+ bg: colors.success,
626
+ text: colors.white,
627
+ track: colors.border
642
628
  },
643
629
  warning: {
644
- bg: "#eab308",
645
- text: "#111827",
646
- track: "#e5e7eb"
630
+ bg: colors.warning,
631
+ text: colors.dark,
632
+ track: colors.border
647
633
  },
648
634
  danger: {
649
- bg: "#dc2626",
650
- text: "#ffffff",
651
- track: "#e5e7eb"
635
+ bg: colors.danger,
636
+ text: colors.white,
637
+ track: colors.border
652
638
  },
653
639
  dark: {
654
- bg: "#1f2937",
655
- text: "#ffffff",
656
- track: "#d1d5db"
640
+ bg: colors.darkHover,
641
+ text: colors.white,
642
+ track: colors.borderInput
657
643
  },
658
644
  light: {
659
- bg: "#f3f4f6",
660
- text: "#111827",
661
- track: "#d1d5db"
645
+ bg: colors.light,
646
+ text: colors.dark,
647
+ track: colors.borderInput
662
648
  }
663
649
  };
664
650
  var progressBarStyles = (styles, percentage, variant) => {
@@ -722,7 +708,8 @@ var qrCodeStyles = (styles, bordered, cleanBgColor, size, isLoading) => ({
722
708
  backgroundColor: colors.bgSkeleton,
723
709
  borderRadius: radii.sm,
724
710
  display: isLoading ? "block" : "none",
725
- animation: "pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite"
711
+ animation: "pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite",
712
+ ...styles?.skeleton
726
713
  }
727
714
  });
728
715
  var spinnerAnimationStyles = `
@@ -861,7 +848,8 @@ var toastStyles = (styles, severity, position, isExiting, visible) => {
861
848
  color: config.text,
862
849
  fontSize: fontSizes.sm,
863
850
  fontWeight: fontWeights.bold,
864
- flexShrink: 0
851
+ flexShrink: 0,
852
+ ...styles?.iconWrapper
865
853
  },
866
854
  content: {
867
855
  flex: 1,
@@ -895,7 +883,8 @@ var toastStyles = (styles, severity, position, isExiting, visible) => {
895
883
  display: "flex",
896
884
  alignItems: "center",
897
885
  justifyContent: "center",
898
- flexShrink: 0
886
+ flexShrink: 0,
887
+ ...styles?.closeButton
899
888
  }
900
889
  };
901
890
  };
@@ -961,7 +950,7 @@ var whatsAppStyles = (styles, position, size, isHovered, zIndex) => {
961
950
  ...cornerPositionStyles(pos),
962
951
  width: `${currentSize.button}px`,
963
952
  height: `${currentSize.button}px`,
964
- backgroundColor: isHovered ? "#128C7E" : "#25D366",
953
+ backgroundColor: isHovered ? colors.whatsappHover : colors.whatsapp,
965
954
  color: colors.white,
966
955
  zIndex: zIndex ?? 1e3,
967
956
  transition: transitions.normal,
@@ -1013,34 +1002,26 @@ var modalSizeClasses = {
1013
1002
  var modalOverlayClasses = (show, animation, className) => `fixed inset-0 z-60 flex items-center justify-center ${show ? "opacity-100 pointer-events-auto" : "opacity-0 pointer-events-none"} ${animation ? "transition-opacity duration-300" : ""} ${className}`.trim();
1014
1003
  var modalDialogClasses = (size, centered, dialogClassName) => `relative w-full ${modalSizeClasses[size]} mx-auto ${centered ? "flex items-center justify-center min-h-screen" : "mt-8"} ${dialogClassName}`.trim();
1015
1004
  var anchorBaseStyles = (variant, isHovered, size) => ({
1016
- ...commonStyles.buttonBase,
1017
- gap: "0",
1018
- cursor: "pointer",
1019
1005
  textDecoration: variant === "none" ? isHovered ? "underline" : "none" : "none",
1020
- border: variant === "none" ? "none" : "1px solid transparent",
1021
1006
  ...variant !== "none" ? sizeStyles[size] : {},
1022
- display: variant === "none" ? "inline" : "inline-flex",
1023
1007
  borderRadius: variant === "none" ? "0" : radii.md
1024
1008
  });
1025
1009
  var accordionStyles = (isActive, styles) => ({
1026
1010
  container: {
1027
1011
  ...commonStyles.container,
1028
1012
  overflow: "hidden",
1029
- marginBottom: "0.5rem",
1030
- ...styles?.container
1013
+ marginBottom: "0.5rem"
1031
1014
  },
1032
1015
  header: {
1033
1016
  ...commonStyles.header,
1034
- transition: transitions.bgSlow,
1035
- ...styles?.header
1017
+ transition: transitions.bgSlow
1036
1018
  },
1037
1019
  content: {
1038
1020
  maxHeight: isActive ? "1000px" : "0",
1039
1021
  opacity: isActive ? 1 : 0,
1040
1022
  overflow: "hidden",
1041
1023
  transition: transitions.normal,
1042
- borderTop: isActive ? `1px solid ${colors.border}` : "none",
1043
- ...styles?.content
1024
+ borderTop: isActive ? `1px solid ${colors.border}` : "none"
1044
1025
  },
1045
1026
  innerContent: {
1046
1027
  padding: "1rem",
@@ -1049,27 +1030,48 @@ var accordionStyles = (isActive, styles) => ({
1049
1030
  },
1050
1031
  arrow: {
1051
1032
  ...commonStyles.chevron,
1052
- transform: isActive ? "rotate(180deg)" : "rotate(0deg)",
1053
- ...styles?.arrow
1033
+ transform: isActive ? "rotate(180deg)" : "rotate(0deg)"
1054
1034
  }
1055
1035
  });
1056
- var anchorVariantStyles = (isHovered) => ({
1036
+ var standardVariantStyles = (isHovered) => ({
1057
1037
  none: { color: colors.primary },
1058
1038
  primary: {
1059
- backgroundColor: isHovered ? "#1d4ed8" : "#2563eb",
1060
- color: "#ffffff",
1061
- border: "1px solid transparent"
1039
+ backgroundColor: isHovered ? colors.primaryHover : colors.primary,
1040
+ color: colors.white
1062
1041
  },
1063
1042
  secondary: {
1064
- backgroundColor: isHovered ? "#374151" : "#4b5563",
1065
- color: "#ffffff",
1066
- border: "1px solid transparent"
1043
+ backgroundColor: isHovered ? colors.secondaryHover : colors.secondary,
1044
+ color: colors.white
1067
1045
  },
1068
1046
  outline: {
1069
- backgroundColor: isHovered ? "#f9fafb" : "transparent",
1070
- color: "#374151",
1071
- border: `1px solid ${colors.borderInput}`
1072
- }
1047
+ backgroundColor: isHovered ? colors.lightHover : colors.white,
1048
+ color: colors.dark
1049
+ },
1050
+ danger: {
1051
+ backgroundColor: isHovered ? colors.dangerHover : colors.danger,
1052
+ color: colors.white
1053
+ },
1054
+ success: {
1055
+ backgroundColor: isHovered ? colors.successHover : colors.success,
1056
+ color: colors.white
1057
+ },
1058
+ warning: {
1059
+ backgroundColor: isHovered ? colors.warningHover : colors.warning,
1060
+ color: colors.white
1061
+ },
1062
+ info: {
1063
+ backgroundColor: isHovered ? colors.infoHover : colors.info,
1064
+ color: colors.white
1065
+ },
1066
+ dark: {
1067
+ backgroundColor: isHovered ? colors.darkHover : colors.dark,
1068
+ color: colors.white
1069
+ },
1070
+ light: {
1071
+ backgroundColor: isHovered ? colors.lightHover : colors.light,
1072
+ color: colors.dark
1073
+ },
1074
+ link: { color: isHovered ? colors.primary : colors.text }
1073
1075
  });
1074
1076
  //#endregion
1075
1077
  //#region node_modules/react/cjs/react-jsx-runtime.production.js
@@ -1110,30 +1112,53 @@ var require_react_jsx_runtime_production = /* @__PURE__ */ __commonJSMin(((expor
1110
1112
  var import_jsx_runtime = (/* @__PURE__ */ __commonJSMin(((exports, module) => {
1111
1113
  module.exports = require_react_jsx_runtime_production();
1112
1114
  })))();
1113
- var Button = ({ children, variant = "primary", size = "sm", onClick, disabled = false, classNames = {}, styles = {}, className = "", style: extraStyle = {}, ...props }) => {
1114
- const finalButtonStyle = {
1115
+ var Button = ({ children, variant = "primary", size = "sm", onClick, disabled = false, rounded = false, icon, iconPosition = "left", classNames = {}, styles = {}, className = "", style: extraStyle = {}, ...props }) => {
1116
+ const [isHovered, setIsHovered] = useState(false);
1117
+ const finalClassNames = {
1118
+ container: "",
1119
+ button: "",
1120
+ variant: "",
1121
+ size: "",
1122
+ ...classNames
1123
+ };
1124
+ const baseButtonStyle = {
1115
1125
  ...commonStyles.buttonBase,
1116
1126
  cursor: disabled ? "not-allowed" : "pointer",
1117
1127
  opacity: disabled ? .5 : 1,
1118
- ...sizeStyles[size],
1119
- ...styles.button,
1120
- ...variantStyles[variant],
1128
+ borderRadius: rounded ? "9999px" : "5px",
1129
+ boxShadow: "0 2px 4px rgba(0,0,0,0.15), 0 2px 3px rgba(0,0,0,0.08)",
1130
+ ...icon ? {
1131
+ display: "inline-flex",
1132
+ alignItems: "center",
1133
+ gap: "0.4em"
1134
+ } : {},
1135
+ ...sizeStyles[size]
1136
+ };
1137
+ const uiStyles = { variants: standardVariantStyles(isHovered) };
1138
+ const finalButtonStyle = {
1139
+ ...baseButtonStyle,
1140
+ ...uiStyles.variants[variant],
1121
1141
  ...extraStyle
1122
1142
  };
1123
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
1143
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("button", {
1124
1144
  className: [
1125
- classNames.container || "",
1126
- variantClasses[variant],
1145
+ finalClassNames.container,
1127
1146
  sizeClasses[size],
1128
- classNames.button || "",
1147
+ finalClassNames.button,
1129
1148
  "luna-button",
1130
1149
  className
1131
1150
  ].filter(Boolean).join(" ").trim(),
1132
1151
  onClick,
1133
1152
  disabled,
1134
1153
  style: finalButtonStyle,
1154
+ onMouseEnter: () => setIsHovered(true),
1155
+ onMouseLeave: () => setIsHovered(false),
1135
1156
  ...props,
1136
- children
1157
+ children: [
1158
+ icon && iconPosition === "left" && icon,
1159
+ children,
1160
+ icon && iconPosition === "right" && icon
1161
+ ]
1137
1162
  });
1138
1163
  };
1139
1164
  //#endregion
@@ -1157,12 +1182,12 @@ var Card = ({ children, title, className = "", padding = "md", shadow = "md", st
1157
1182
  };
1158
1183
  //#endregion
1159
1184
  //#region src/components/Anchor.tsx
1160
- var Anchor = ({ children, variant = "none", size = "md", href = "https://andreychaconresumereact.netlify.app/", className = "", target, rel, style = {}, ...props }) => {
1185
+ var Anchor = ({ children, variant = "none", size = "md", href = "https://andreychaconresumereact.netlify.app/", className = "", target = "_blank", rel = "noopener noreferrer", style = {}, ...props }) => {
1161
1186
  const [isHovered, setIsHovered] = useState(false);
1162
1187
  const combinedClassName = `luna-anchor ${className}`.trim();
1163
1188
  const uiStyles = {
1164
1189
  base: anchorBaseStyles(variant, isHovered, size),
1165
- variants: anchorVariantStyles(isHovered)
1190
+ variants: standardVariantStyles(isHovered)
1166
1191
  };
1167
1192
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", {
1168
1193
  href,
@@ -1197,6 +1222,7 @@ var Accordion = ({ title, children, defaultActive = false, active: externalActiv
1197
1222
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("button", {
1198
1223
  type: "button",
1199
1224
  style: uiStyles.header,
1225
+ className: "accordion-button",
1200
1226
  onClick: handleToggle,
1201
1227
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: title }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
1202
1228
  style: uiStyles.arrow,
@@ -1204,6 +1230,7 @@ var Accordion = ({ title, children, defaultActive = false, active: externalActiv
1204
1230
  })]
1205
1231
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
1206
1232
  style: uiStyles.content,
1233
+ className: "accordion-content",
1207
1234
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
1208
1235
  style: uiStyles.innerContent,
1209
1236
  children
@@ -1331,13 +1358,13 @@ var Spinner = ({ className = "", size = "md", type = "circle", color = "#2563eb"
1331
1358
  };
1332
1359
  //#endregion
1333
1360
  //#region src/components/DropDown.tsx
1334
- var DropDown = ({ options, value, onChange, placeholder = "Select an option", toggle, classNames = {}, styles = {}, disabled = false, className }) => {
1361
+ var DropDown = ({ options, value, onChange, placeholder = "Select an option", toggle, className, styles, disabled = false }) => {
1335
1362
  const finalClassNames = {
1336
1363
  container: "luna-dropdown",
1337
1364
  trigger: "luna-dropdown-trigger",
1338
1365
  panel: "luna-dropdown-panel",
1339
1366
  option: "luna-dropdown-option",
1340
- ...classNames
1367
+ className
1341
1368
  };
1342
1369
  const [isOpen, setIsOpen] = useState(false);
1343
1370
  const [hoverIndex, setHoverIndex] = useState(null);
@@ -1694,15 +1721,29 @@ var Modal = ({ show, onHide, size = "md", centered = false, backdrop = true, bac
1694
1721
  };
1695
1722
  //#endregion
1696
1723
  //#region src/components/Input.tsx
1697
- var Input = ({ children, variant = "none", type = "text", inputSize = "md", placeholder, value: controlledValue, onChange, onFocus, onBlur, disabled = false, required = false, readOnly = false, id, name, mask, maskChar = "_", useCurrency = false, currency = "USD", locale = "en-US", minFractionDigits = 0, maxFractionDigits = 2, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledby, classNames = {}, styles = {}, className: extraClassName = "", style: extraStyle = {}, ...props }) => {
1724
+ var variantBorderColors = {
1725
+ none: colors.borderInput,
1726
+ primary: colors.primary,
1727
+ secondary: colors.secondary,
1728
+ outline: colors.borderInput,
1729
+ danger: colors.danger,
1730
+ success: colors.success,
1731
+ warning: colors.warning,
1732
+ info: colors.info,
1733
+ dark: colors.dark,
1734
+ light: colors.light,
1735
+ link: "transparent"
1736
+ };
1737
+ var Input = ({ children, variant = "none", type = "text", inputSize = "md", placeholder, value: controlledValue, onChange, onFocus, onBlur, disabled = false, required = false, isRequired = false, icon, iconPosition = "left", readOnly = false, id, name, mask, maskChar = "_", useCurrency = false, currency = "USD", locale = "en-US", minFractionDigits = 0, maxFractionDigits = 2, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledby, classNames, styles, className: extraClassName = "", style: extraStyle = {}, ...props }) => {
1698
1738
  const inputId = id || name;
1699
1739
  const finalClassNames = {
1700
1740
  container: "luna-input",
1701
1741
  input: "luna-input-field",
1702
1742
  label: "luna-input-label",
1703
- ...classNames
1743
+ classNames
1704
1744
  };
1705
1745
  const [internalValue, setInternalValue] = useState(controlledValue || "");
1746
+ const [isFocused, setIsFocused] = useState(false);
1706
1747
  useEffect(() => {
1707
1748
  if (controlledValue !== void 0) setInternalValue(controlledValue);
1708
1749
  }, [controlledValue]);
@@ -1764,6 +1805,7 @@ var Input = ({ children, variant = "none", type = "text", inputSize = "md", plac
1764
1805
  onChange?.(newVal);
1765
1806
  };
1766
1807
  const handleBlur = () => {
1808
+ setIsFocused(false);
1767
1809
  if (useCurrency && internalValue) {
1768
1810
  const formatted = formatCurrency(internalValue);
1769
1811
  if (controlledValue === void 0) setInternalValue(formatted);
@@ -1772,41 +1814,87 @@ var Input = ({ children, variant = "none", type = "text", inputSize = "md", plac
1772
1814
  onBlur?.();
1773
1815
  };
1774
1816
  const uiStyles = inputStyles(styles, extraStyle, inputSize, readOnly, disabled);
1817
+ const iconPadding = icon ? "2.25rem" : void 0;
1775
1818
  const finalInputStyle = {
1776
1819
  ...uiStyles.input,
1777
- ...uiStyles.variants[variant]
1820
+ ...uiStyles.variants[variant],
1821
+ borderStyle: "solid",
1822
+ borderWidth: isFocused ? "2px" : "1px",
1823
+ borderColor: variantBorderColors[variant],
1824
+ ...icon && iconPosition === "left" ? { paddingLeft: iconPadding } : {},
1825
+ ...icon && iconPosition === "right" ? { paddingRight: iconPadding } : {}
1778
1826
  };
1779
1827
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
1780
1828
  className: `${finalClassNames.container || ""} ${extraClassName}`.trim(),
1781
1829
  style: uiStyles.container,
1782
- children: [children && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("label", {
1830
+ children: [children && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", {
1783
1831
  htmlFor: inputId,
1784
1832
  className: finalClassNames.label,
1785
1833
  style: uiStyles.label,
1786
- children
1787
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("input", {
1788
- id: inputId,
1789
- name,
1790
- type: useCurrency ? "text" : type,
1791
- placeholder: placeholder || (mask ? mask.replace(/[9a*]/g, maskChar) : ""),
1792
- value: internalValue,
1793
- onChange: handleChange,
1794
- onFocus,
1795
- onBlur: handleBlur,
1796
- disabled,
1797
- required,
1798
- readOnly,
1799
- "aria-label": ariaLabel,
1800
- "aria-labelledby": ariaLabelledby,
1801
- style: finalInputStyle,
1802
- className: `${finalClassNames.input || ""} rounded-xl`.trim(),
1803
- ...props
1834
+ children: [children, isRequired && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
1835
+ style: {
1836
+ color: colors.danger,
1837
+ marginLeft: "0.25rem"
1838
+ },
1839
+ children: "*"
1840
+ })]
1841
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
1842
+ style: {
1843
+ position: "relative",
1844
+ display: "flex",
1845
+ alignItems: "center"
1846
+ },
1847
+ children: [
1848
+ icon && iconPosition === "left" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
1849
+ style: {
1850
+ position: "absolute",
1851
+ left: "0.65rem",
1852
+ display: "flex",
1853
+ alignItems: "center",
1854
+ color: colors.textDisabled,
1855
+ pointerEvents: "none"
1856
+ },
1857
+ children: icon
1858
+ }),
1859
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("input", {
1860
+ id: inputId,
1861
+ name,
1862
+ type: useCurrency ? "text" : type,
1863
+ placeholder: placeholder || (mask ? mask.replace(/[9a*]/g, maskChar) : ""),
1864
+ value: internalValue,
1865
+ onChange: handleChange,
1866
+ onFocus: () => {
1867
+ setIsFocused(true);
1868
+ onFocus?.();
1869
+ },
1870
+ onBlur: handleBlur,
1871
+ disabled,
1872
+ required,
1873
+ readOnly,
1874
+ "aria-label": ariaLabel,
1875
+ "aria-labelledby": ariaLabelledby,
1876
+ style: finalInputStyle,
1877
+ className: `${finalClassNames.input || ""} rounded-xl`.trim(),
1878
+ ...props
1879
+ }),
1880
+ icon && iconPosition === "right" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
1881
+ style: {
1882
+ position: "absolute",
1883
+ right: "0.65rem",
1884
+ display: "flex",
1885
+ alignItems: "center",
1886
+ color: colors.textDisabled,
1887
+ pointerEvents: "none"
1888
+ },
1889
+ children: icon
1890
+ })
1891
+ ]
1804
1892
  })]
1805
1893
  });
1806
1894
  };
1807
1895
  //#endregion
1808
1896
  //#region src/components/DataTable.tsx
1809
- var DataTable = ({ columns, data, pagination = false, pageSize = 10, selectable = false, onSelectionChange, onRowClick, onRowDoubleClick, searchable = false, texts = {}, classNames = {}, styles = {}, className }) => {
1897
+ var DataTable = ({ columns, data, pagination = false, pageSize = 10, selectable = false, onSelectionChange, onRowClick, onRowDoubleClick, searchable = false, texts = {}, classNames, styles, className }) => {
1810
1898
  const finalClassNames = {
1811
1899
  container: "luna-datatable",
1812
1900
  table: "luna-datatable-table",
@@ -1817,7 +1905,7 @@ var DataTable = ({ columns, data, pagination = false, pageSize = 10, selectable
1817
1905
  td: "luna-datatable-td",
1818
1906
  pagination: "luna-datatable-pagination",
1819
1907
  searchContainer: "luna-datatable-search",
1820
- ...classNames
1908
+ classNames
1821
1909
  };
1822
1910
  const [currentPage, setCurrentPage] = useState(1);
1823
1911
  const [sortConfig, setSortConfig] = useState(null);
@@ -1979,7 +2067,6 @@ var DataTable = ({ columns, data, pagination = false, pageSize = 10, selectable
1979
2067
  })
1980
2068
  }, col.key))] })
1981
2069
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("tbody", {
1982
- style: styles.tbody,
1983
2070
  className: finalClassNames.tbody,
1984
2071
  children: paginatedData.length > 0 ? paginatedData.map((row, idx) => {
1985
2072
  const rowId = row.id || row._id || JSON.stringify(row);
@@ -2073,7 +2160,7 @@ var DataTable = ({ columns, data, pagination = false, pageSize = 10, selectable
2073
2160
  };
2074
2161
  //#endregion
2075
2162
  //#region src/components/Toast.tsx
2076
- var Toast = ({ visible, severity = "info", summary, detail, life, onClose, position = "top-right", classNames = {}, styles = {}, className }) => {
2163
+ var Toast = ({ visible, severity = "info", summary, detail, life, onClose, position = "top-right", classNames, styles, className }) => {
2077
2164
  const finalClassNames = {
2078
2165
  container: "luna-toast",
2079
2166
  content: "luna-toast-content",
@@ -2081,7 +2168,7 @@ var Toast = ({ visible, severity = "info", summary, detail, life, onClose, posit
2081
2168
  summary: "luna-toast-summary",
2082
2169
  detail: "luna-toast-detail",
2083
2170
  closeButton: "luna-toast-close",
2084
- ...classNames
2171
+ classNames
2085
2172
  };
2086
2173
  const [isExiting, setIsExiting] = useState(false);
2087
2174
  useEffect(() => {
@@ -2104,19 +2191,19 @@ var Toast = ({ visible, severity = "info", summary, detail, life, onClose, posit
2104
2191
  const uiStyles = toastStyles(styles, severity, position, isExiting, visible);
2105
2192
  const config = toastSeverityConfig[severity || "info"];
2106
2193
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
2107
- className: `${finalClassNames.container} ${className || ""}`.trim(),
2194
+ className: `${finalClassNames?.container} ${className || ""}`.trim(),
2108
2195
  style: uiStyles.container,
2109
2196
  children: [
2110
2197
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
2111
- className: finalClassNames.icon,
2198
+ className: finalClassNames?.icon,
2112
2199
  style: uiStyles.iconWrapper,
2113
2200
  children: config.icon
2114
2201
  }),
2115
2202
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
2116
- className: finalClassNames.content,
2203
+ className: finalClassNames?.content,
2117
2204
  style: uiStyles.content,
2118
2205
  children: [summary && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
2119
- className: finalClassNames.summary,
2206
+ className: finalClassNames?.summary,
2120
2207
  style: uiStyles.summary,
2121
2208
  children: summary
2122
2209
  }), detail && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
@@ -2138,7 +2225,7 @@ var Toast = ({ visible, severity = "info", summary, detail, life, onClose, posit
2138
2225
  };
2139
2226
  //#endregion
2140
2227
  //#region src/components/MultiSelect.tsx
2141
- var MultiSelect = ({ options, value = [], onChange, id, placeholder = "Select Items", display = "comma", filter = true, filterPlaceholder = "Search...", selectAll = true, maxSelectedLabels = 3, classNames = {}, styles = {}, disabled = false, className }) => {
2228
+ var MultiSelect = ({ options, value = [], onChange, id, placeholder = "Select Items", display = "comma", filter = true, filterPlaceholder = "Search...", selectAll = true, maxSelectedLabels = 3, classNames, styles, disabled = false }) => {
2142
2229
  const finalClassNames = {
2143
2230
  container: "luna-multiselect",
2144
2231
  trigger: "luna-multiselect-trigger",
@@ -2146,7 +2233,7 @@ var MultiSelect = ({ options, value = [], onChange, id, placeholder = "Select It
2146
2233
  header: "luna-multiselect-header",
2147
2234
  item: "luna-multiselect-item",
2148
2235
  chip: "luna-multiselect-chip",
2149
- ...classNames
2236
+ classNames
2150
2237
  };
2151
2238
  const [isOpen, setIsOpen] = useState(false);
2152
2239
  const [filterText, setFilterText] = useState("");
@@ -2202,7 +2289,7 @@ var MultiSelect = ({ options, value = [], onChange, id, placeholder = "Select It
2202
2289
  const uiStyles = multiSelectStyles(styles, disabled, isOpen);
2203
2290
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
2204
2291
  ref: containerRef,
2205
- className: `${finalClassNames.container} ${className || ""}`.trim(),
2292
+ className: `${finalClassNames.container} ${classNames || ""}`.trim(),
2206
2293
  style: uiStyles.container,
2207
2294
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
2208
2295
  className: finalClassNames.trigger,
@@ -2240,7 +2327,7 @@ var MultiSelect = ({ options, value = [], onChange, id, placeholder = "Select It
2240
2327
  placeholder: filterPlaceholder,
2241
2328
  value: filterText,
2242
2329
  onChange: setFilterText,
2243
- classNames: { container: "w-full" }
2330
+ className: "w-full"
2244
2331
  })]
2245
2332
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
2246
2333
  style: uiStyles.list,
@@ -2275,7 +2362,7 @@ var MultiSelect = ({ options, value = [], onChange, id, placeholder = "Select It
2275
2362
  };
2276
2363
  //#endregion
2277
2364
  //#region src/components/Popconfirm.tsx
2278
- var Popconfirm = ({ title, description, onConfirm, onCancel, okText = "Yes", cancelText = "No", position = "top", children, classNames = {}, styles = {}, disabled = false, className = "" }) => {
2365
+ var Popconfirm = ({ title, description, onConfirm, onCancel, okText = "Yes", cancelText = "No", position = "top", children, classNames, styles, disabled = false, className = "" }) => {
2279
2366
  const finalClassNames = {
2280
2367
  container: "luna-popconfirm",
2281
2368
  popover: "luna-popconfirm-popover",
@@ -2284,7 +2371,7 @@ var Popconfirm = ({ title, description, onConfirm, onCancel, okText = "Yes", can
2284
2371
  actions: "luna-popconfirm-actions",
2285
2372
  okButton: "luna-popconfirm-ok",
2286
2373
  cancelButton: "luna-popconfirm-cancel",
2287
- ...classNames
2374
+ classNames
2288
2375
  };
2289
2376
  const [show, setShow] = useState(false);
2290
2377
  const containerRef = useRef(null);
@@ -2358,11 +2445,11 @@ var Popconfirm = ({ title, description, onConfirm, onCancel, okText = "Yes", can
2358
2445
  };
2359
2446
  //#endregion
2360
2447
  //#region src/components/QRCode.tsx
2361
- var QRCode = ({ value, size = 160, color = "000000", bgColor = "ffffff", bordered = true, classNames = {}, styles = {}, errorCorrectionLevel = "M", className }) => {
2448
+ var QRCode = ({ value, size = 160, color = "000000", bgColor = "ffffff", bordered = true, classNames, styles, errorCorrectionLevel = "M", className }) => {
2362
2449
  const finalClassNames = {
2363
2450
  container: "luna-qrcode",
2364
2451
  image: "luna-qrcode-image",
2365
- ...classNames
2452
+ classNames
2366
2453
  };
2367
2454
  const [isLoading, setIsLoading] = useState(true);
2368
2455
  const cleanColor = color.startsWith("#") ? color.slice(1) : color;