@lindle/linoardo 1.0.19 → 1.0.21

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.
Files changed (153) hide show
  1. package/dist/button.cjs +30 -15
  2. package/dist/button.cjs.map +1 -1
  3. package/dist/button.d.cts +17 -7
  4. package/dist/button.d.ts +17 -7
  5. package/dist/button.js +1 -1
  6. package/dist/card.cjs +82 -20
  7. package/dist/card.cjs.map +1 -1
  8. package/dist/card.d.cts +8 -1
  9. package/dist/card.d.ts +8 -1
  10. package/dist/card.js +1 -1
  11. package/dist/chip.cjs +17 -10
  12. package/dist/chip.cjs.map +1 -1
  13. package/dist/chip.d.cts +7 -4
  14. package/dist/chip.d.ts +7 -4
  15. package/dist/chip.js +1 -1
  16. package/dist/chunk-2UL3S6KC.js +147 -0
  17. package/dist/chunk-2UL3S6KC.js.map +1 -0
  18. package/dist/{chunk-N65GNKRG.js → chunk-5LWU5T2C.js} +48 -42
  19. package/dist/chunk-5LWU5T2C.js.map +1 -0
  20. package/dist/{chunk-XFPBICJG.js → chunk-5WQW6YSJ.js} +12 -3
  21. package/dist/chunk-5WQW6YSJ.js.map +1 -0
  22. package/dist/{chunk-5GY2JCBO.js → chunk-AK7LFJI4.js} +16 -5
  23. package/dist/chunk-AK7LFJI4.js.map +1 -0
  24. package/dist/{chunk-PWK6MLZT.js → chunk-DSZ3EOQB.js} +19 -12
  25. package/dist/chunk-DSZ3EOQB.js.map +1 -0
  26. package/dist/{chunk-AOHXZ7OM.js → chunk-GMDNSU26.js} +19 -5
  27. package/dist/chunk-GMDNSU26.js.map +1 -0
  28. package/dist/chunk-HAXGOTZO.js +94 -0
  29. package/dist/chunk-HAXGOTZO.js.map +1 -0
  30. package/dist/chunk-HEXJCQRO.js +51 -0
  31. package/dist/chunk-HEXJCQRO.js.map +1 -0
  32. package/dist/chunk-JGEXEDKS.js +168 -0
  33. package/dist/chunk-JGEXEDKS.js.map +1 -0
  34. package/dist/{chunk-GA6HSRN6.js → chunk-KRYWWWXR.js} +20 -7
  35. package/dist/chunk-KRYWWWXR.js.map +1 -0
  36. package/dist/{chunk-U6NAIIDI.js → chunk-LIEBZOLG.js} +42 -20
  37. package/dist/chunk-LIEBZOLG.js.map +1 -0
  38. package/dist/{chunk-E32P5AHO.js → chunk-LYP7V32H.js} +10 -4
  39. package/dist/chunk-LYP7V32H.js.map +1 -0
  40. package/dist/chunk-QRBJFDV5.js +170 -0
  41. package/dist/chunk-QRBJFDV5.js.map +1 -0
  42. package/dist/{chunk-SZU6OYLS.js → chunk-RFPNVLAD.js} +31 -17
  43. package/dist/chunk-RFPNVLAD.js.map +1 -0
  44. package/dist/chunk-SAGQYMS3.js +167 -0
  45. package/dist/chunk-SAGQYMS3.js.map +1 -0
  46. package/dist/{chunk-QGQ66FJD.js → chunk-T37VPLS4.js} +2 -2
  47. package/dist/chunk-T37VPLS4.js.map +1 -0
  48. package/dist/{chunk-32KFNI6K.js → chunk-U2AL7XFY.js} +48 -28
  49. package/dist/chunk-U2AL7XFY.js.map +1 -0
  50. package/dist/chunk-VPF7M2PB.js +141 -0
  51. package/dist/chunk-VPF7M2PB.js.map +1 -0
  52. package/dist/dialog.cjs +40 -18
  53. package/dist/dialog.cjs.map +1 -1
  54. package/dist/dialog.d.cts +3 -0
  55. package/dist/dialog.d.ts +3 -0
  56. package/dist/dialog.js +1 -1
  57. package/dist/expansion-panel/item.cjs +11 -2
  58. package/dist/expansion-panel/item.cjs.map +1 -1
  59. package/dist/expansion-panel/item.js +1 -1
  60. package/dist/expansion-panel.cjs +25 -6
  61. package/dist/expansion-panel.cjs.map +1 -1
  62. package/dist/expansion-panel.js +2 -2
  63. package/dist/hero.cjs +143 -0
  64. package/dist/hero.cjs.map +1 -0
  65. package/dist/hero.d.cts +34 -0
  66. package/dist/hero.d.ts +34 -0
  67. package/dist/hero.js +3 -0
  68. package/dist/hero.js.map +1 -0
  69. package/dist/icon.cjs +53 -0
  70. package/dist/icon.cjs.map +1 -0
  71. package/dist/icon.d.cts +15 -0
  72. package/dist/icon.d.ts +15 -0
  73. package/dist/icon.js +3 -0
  74. package/dist/icon.js.map +1 -0
  75. package/dist/{index-Md3BuoGM.d.cts → index-B5n8tN2G.d.cts} +3 -0
  76. package/dist/{index-d_JuI06O.d.ts → index-D4-O-oJt.d.ts} +3 -0
  77. package/dist/index.cjs +1013 -173
  78. package/dist/index.cjs.map +1 -1
  79. package/dist/index.d.cts +8 -2
  80. package/dist/index.d.ts +8 -2
  81. package/dist/index.js +18 -13
  82. package/dist/input.cjs +104 -30
  83. package/dist/input.cjs.map +1 -1
  84. package/dist/input.d.cts +8 -19
  85. package/dist/input.d.ts +8 -19
  86. package/dist/input.js +1 -1
  87. package/dist/list/item.cjs +10 -1
  88. package/dist/list/item.cjs.map +1 -1
  89. package/dist/list/item.d.cts +1 -1
  90. package/dist/list/item.d.ts +1 -1
  91. package/dist/list/item.js +1 -1
  92. package/dist/list.cjs +23 -3
  93. package/dist/list.cjs.map +1 -1
  94. package/dist/list.d.cts +5 -2
  95. package/dist/list.d.ts +5 -2
  96. package/dist/list.js +2 -2
  97. package/dist/masonry.cjs +116 -0
  98. package/dist/masonry.cjs.map +1 -0
  99. package/dist/masonry.d.cts +45 -0
  100. package/dist/masonry.d.ts +45 -0
  101. package/dist/masonry.js +3 -0
  102. package/dist/masonry.js.map +1 -0
  103. package/dist/menu.cjs.map +1 -1
  104. package/dist/menu.d.cts +3 -0
  105. package/dist/menu.d.ts +3 -0
  106. package/dist/menu.js +1 -1
  107. package/dist/profileCard.cjs +391 -0
  108. package/dist/profileCard.cjs.map +1 -0
  109. package/dist/profileCard.d.cts +29 -0
  110. package/dist/profileCard.d.ts +29 -0
  111. package/dist/profileCard.js +5 -0
  112. package/dist/profileCard.js.map +1 -0
  113. package/dist/select.cjs +173 -0
  114. package/dist/select.cjs.map +1 -0
  115. package/dist/select.d.cts +29 -0
  116. package/dist/select.d.ts +29 -0
  117. package/dist/select.js +3 -0
  118. package/dist/select.js.map +1 -0
  119. package/dist/slider.cjs +17 -3
  120. package/dist/slider.cjs.map +1 -1
  121. package/dist/slider.d.cts +3 -0
  122. package/dist/slider.d.ts +3 -0
  123. package/dist/slider.js +1 -1
  124. package/dist/styles.css +1199 -9
  125. package/dist/switch.cjs +46 -40
  126. package/dist/switch.cjs.map +1 -1
  127. package/dist/switch.d.cts +4 -1
  128. package/dist/switch.d.ts +4 -1
  129. package/dist/switch.js +1 -1
  130. package/dist/tooltip.cjs +46 -26
  131. package/dist/tooltip.cjs.map +1 -1
  132. package/dist/tooltip.d.cts +3 -0
  133. package/dist/tooltip.d.ts +3 -0
  134. package/dist/tooltip.js +1 -1
  135. package/dist/types-BCqIOkp1.d.cts +24 -0
  136. package/dist/types-ChXN4u7x.d.ts +24 -0
  137. package/package.json +30 -5
  138. package/readme.md +1 -0
  139. package/dist/chunk-32KFNI6K.js.map +0 -1
  140. package/dist/chunk-5GY2JCBO.js.map +0 -1
  141. package/dist/chunk-AOHXZ7OM.js.map +0 -1
  142. package/dist/chunk-E32P5AHO.js.map +0 -1
  143. package/dist/chunk-GA6HSRN6.js.map +0 -1
  144. package/dist/chunk-N65GNKRG.js.map +0 -1
  145. package/dist/chunk-PWK6MLZT.js.map +0 -1
  146. package/dist/chunk-PYG5SDNO.js +0 -98
  147. package/dist/chunk-PYG5SDNO.js.map +0 -1
  148. package/dist/chunk-QGQ66FJD.js.map +0 -1
  149. package/dist/chunk-SZU6OYLS.js.map +0 -1
  150. package/dist/chunk-U6NAIIDI.js.map +0 -1
  151. package/dist/chunk-V4BVJOSC.js +0 -85
  152. package/dist/chunk-V4BVJOSC.js.map +0 -1
  153. package/dist/chunk-XFPBICJG.js.map +0 -1
package/dist/index.cjs CHANGED
@@ -30,17 +30,18 @@ var React3__namespace = /*#__PURE__*/_interopNamespace(React3);
30
30
  var iconBaseClasses = {
31
31
  mdi: ["mdi"]
32
32
  };
33
+
34
+ // src/Containment/Button/states.button.ts
33
35
  var base = "btn-base focus-visible:outline-none focus-visible:ring-2 rounded-lg transition-colors duration-200 font-medium disabled:opacity-50 disabled:cursor-not-allowed";
34
- var blackAndWhiteVariantClass = "bg-white text-black border border-black focus-visible:ring-black/40 focus-visible:ring-offset-white";
35
36
  var blackAndWhitePaletteClasses = {
36
- solid: tailwindMerge.twMerge(blackAndWhiteVariantClass, "bg-black text-white"),
37
- outline: blackAndWhiteVariantClass,
38
- ghost: "bg-neutral-300 text-white",
39
- text: blackAndWhiteVariantClass,
40
- filled: "bg-black text-white",
41
- underlined: tailwindMerge.twMerge(blackAndWhiteVariantClass, "b"),
42
- rounded: blackAndWhiteVariantClass,
43
- sharp: "bg-black text-white rounded-none"
37
+ solid: "bg-black text-white hover:bg-black/90 focus-visible:ring-black/40 focus-visible:ring-offset-white",
38
+ outline: "border-2 border-black text-black bg-white hover:bg-black hover:text-white focus-visible:ring-black/40 focus-visible:ring-offset-white",
39
+ ghost: "text-black bg-neutral-200 hover:bg-neutral-300 focus-visible:ring-black/20 border border-transparent",
40
+ text: "bg-transparent text-black hover:bg-neutral-200 focus-visible:ring-black/20 underline-offset-2 border border-transparent",
41
+ filled: "bg-black/10 text-black border border-black/30 hover:bg-black/20 focus-visible:ring-black/20",
42
+ underlined: "bg-transparent text-black border border-transparent underline decoration-2 underline-offset-4 hover:bg-neutral-200 focus-visible:ring-black/20",
43
+ rounded: "rounded-full border-2 border-black bg-white text-black hover:bg-black hover:text-white focus-visible:ring-black/40 focus-visible:ring-offset-white",
44
+ sharp: "bg-black text-white rounded-none hover:bg-black/90 focus-visible:ring-black/40"
44
45
  };
45
46
  var paletteVariantClasses = {
46
47
  primary: {
@@ -136,7 +137,9 @@ var resolveIconClassName = (icon) => {
136
137
  }
137
138
  const [library, providedName] = icon;
138
139
  const normalizedLibrary = library.trim();
139
- const baseClasses = iconBaseClasses[normalizedLibrary] ?? [normalizedLibrary];
140
+ const baseClasses = iconBaseClasses[normalizedLibrary] ?? [
141
+ normalizedLibrary
142
+ ];
140
143
  const iconName = providedName.trim();
141
144
  if (!iconName) {
142
145
  return baseClasses.join(" ");
@@ -152,12 +155,19 @@ var sizeClasses = {
152
155
  "x-large": "px-7 py-3.5 text-xl"
153
156
  };
154
157
  var iconOnlySizeClasses = {
155
- "x-small": "p-2 text-xs aspect-square",
158
+ "x-small": "p-0 text-xs aspect-square",
156
159
  small: "p-2.5 text-sm aspect-square",
157
160
  medium: "p-3 text-base aspect-square",
158
161
  large: "p-3.5 text-lg aspect-square",
159
162
  "x-large": "p-4 text-xl aspect-square"
160
163
  };
164
+ var iconOnlyIconSizeClasses = {
165
+ "x-small": "text-sm",
166
+ small: "text-base",
167
+ medium: "text-lg",
168
+ large: "text-xl",
169
+ "x-large": "text-2xl"
170
+ };
161
171
  var Button = React3__namespace.forwardRef(
162
172
  ({
163
173
  variant = "solid",
@@ -172,11 +182,15 @@ var Button = React3__namespace.forwardRef(
172
182
  children,
173
183
  disabled,
174
184
  onClick,
185
+ as,
175
186
  ...rest
176
187
  }, ref) => {
188
+ const Component = as ?? "button";
177
189
  const variantClass = resolveVariantClass(variant, color);
178
190
  const sizeClass = iconOnly ? iconOnlySizeClasses[size] ?? iconOnlySizeClasses.medium : sizeClasses[size] ?? sizeClasses.medium;
191
+ const iconSizeClass = iconOnly ? iconOnlyIconSizeClasses[size] ?? iconOnlyIconSizeClasses.medium : void 0;
179
192
  const blockClass = block ? "w-full" : null;
193
+ const isNativeButton = Component === "button";
180
194
  const isDisabled = disabled || loading;
181
195
  const cursor = onClick && !isDisabled ? "cursor-pointer" : "cursor-default";
182
196
  const resolvedIconClass = resolveIconClassName(icon);
@@ -185,15 +199,16 @@ var Button = React3__namespace.forwardRef(
185
199
  const content = iconOnly ? null : loading && isLoadingTextProvided ? loadingText : children;
186
200
  const hasDecorators = (loading || shouldRenderIcon) && Boolean(content);
187
201
  const gapClass = hasDecorators ? "gap-2" : void 0;
188
- const loadingIconClass = loading ? tailwindMerge.twMerge("mdi mdi-loading mdi-spin", "leading-none") : void 0;
189
- const iconClassName = shouldRenderIcon ? tailwindMerge.twMerge("leading-none", resolvedIconClass) : void 0;
202
+ const loadingIconClass = loading ? tailwindMerge.twMerge("mdi mdi-loading mdi-spin", "leading-none", iconSizeClass) : void 0;
203
+ const iconClassName = shouldRenderIcon ? tailwindMerge.twMerge("leading-none", iconSizeClass, resolvedIconClass) : void 0;
190
204
  return /* @__PURE__ */ jsxRuntime.jsxs(
191
- "button",
205
+ Component,
192
206
  {
193
207
  ...rest,
194
208
  ref,
195
209
  onClick,
196
- disabled: isDisabled,
210
+ disabled: isNativeButton ? isDisabled : void 0,
211
+ "aria-disabled": !isNativeButton ? isDisabled : void 0,
197
212
  className: tailwindMerge.twMerge(base, cursor, variantClass, sizeClass, blockClass, gapClass, className),
198
213
  "data-loading": loading || void 0,
199
214
  "aria-busy": loading || void 0,
@@ -217,16 +232,15 @@ var chipSizeClasses = {
217
232
  large: "text-base px-5 py-2 min-h-[2.5rem]"
218
233
  };
219
234
  var closeButtonClasses = "ml-1 flex h-5 w-5 shrink-0 items-center justify-center rounded-full border border-transparent text-current/70 transition-colors duration-200 hover:bg-current/10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-current/30 focus-visible:ring-offset-2";
220
- var blackAndWhiteChipVariantClass = "bg-white text-black border border-black hover:bg-white focus-visible:ring-black/40 focus-visible:ring-offset-white";
221
235
  var blackAndWhitePaletteClasses2 = {
222
- solid: blackAndWhiteChipVariantClass,
223
- outline: blackAndWhiteChipVariantClass,
224
- ghost: blackAndWhiteChipVariantClass,
225
- text: blackAndWhiteChipVariantClass,
226
- filled: blackAndWhiteChipVariantClass,
227
- underlined: blackAndWhiteChipVariantClass,
228
- rounded: blackAndWhiteChipVariantClass,
229
- sharp: `${blackAndWhiteChipVariantClass} rounded-none`
236
+ solid: "bg-black text-white border border-black hover:bg-black/90 focus-visible:ring-black/40 focus-visible:ring-offset-white",
237
+ outline: "bg-white text-black border-2 border-black hover:bg-black hover:text-white focus-visible:ring-black/40 focus-visible:ring-offset-white",
238
+ ghost: "bg-neutral-200 text-black border border-transparent hover:bg-neutral-300 focus-visible:ring-black/20",
239
+ text: "bg-transparent text-black border border-transparent hover:bg-neutral-200 focus-visible:ring-black/20",
240
+ filled: "bg-black/10 text-black border border-black/30 hover:bg-black/20 focus-visible:ring-black/20",
241
+ underlined: "bg-transparent text-black border-0 border-b-2 border-black px-0 rounded-none hover:text-black/80 focus-visible:ring-black/20",
242
+ rounded: "rounded-full bg-white text-black border-2 border-black hover:bg-black hover:text-white focus-visible:ring-black/40 focus-visible:ring-offset-white",
243
+ sharp: "rounded-none bg-black text-white border border-black hover:bg-black/90 focus-visible:ring-black/40 focus-visible:ring-offset-white"
230
244
  };
231
245
  var paletteVariantClasses2 = {
232
246
  primary: {
@@ -412,7 +426,15 @@ var Chip = React3.forwardRef(
412
426
  "aria-disabled": disabled || void 0,
413
427
  "aria-pressed": filter ? selected : void 0,
414
428
  "data-selected": selected || void 0,
415
- className: tailwindMerge.twMerge(chipBaseClasses, sizeClass, pillClass, variantClass, cursorClass, selectedClass, className),
429
+ className: tailwindMerge.twMerge(
430
+ chipBaseClasses,
431
+ sizeClass,
432
+ pillClass,
433
+ variantClass,
434
+ cursorClass,
435
+ selectedClass,
436
+ className
437
+ ),
416
438
  onClick: interactive ? handleClick : void 0,
417
439
  onKeyDown: interactive ? handleKeyDown : onKeyDown,
418
440
  children: [
@@ -546,7 +568,16 @@ var ListItem = React3__namespace.forwardRef((props, ref) => {
546
568
  prepend && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex h-10 w-10 shrink-0 items-center justify-center text-base text-gray-500", children: prepend }),
547
569
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 flex-col gap-0.5 text-left", children: [
548
570
  overline && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[0.65rem] font-semibold uppercase tracking-wide text-gray-500", children: overline }),
549
- title && /* @__PURE__ */ jsxRuntime.jsx("span", { className: tailwindMerge.twMerge("truncate font-medium text-gray-900", active ? accent.text : void 0), children: title }),
571
+ title && /* @__PURE__ */ jsxRuntime.jsx(
572
+ "span",
573
+ {
574
+ className: tailwindMerge.twMerge(
575
+ "truncate font-medium text-gray-900",
576
+ active ? accent.text : void 0
577
+ ),
578
+ children: title
579
+ }
580
+ ),
550
581
  subtitle && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-gray-500", children: subtitle }),
551
582
  children
552
583
  ] }),
@@ -619,7 +650,10 @@ var List = React3__namespace.forwardRef((props, ref) => {
619
650
  });
620
651
  }
621
652
  if (child.props && typeof child.props === "object" && "children" in child.props) {
622
- const nestedChildren = React3__namespace.Children.map(child.props.children, enhanceChild);
653
+ const nestedChildren = React3__namespace.Children.map(
654
+ child.props.children,
655
+ enhanceChild
656
+ );
623
657
  if (nestedChildren !== child.props.children) {
624
658
  return React3__namespace.cloneElement(child, void 0, nestedChildren);
625
659
  }
@@ -633,7 +667,15 @@ var List = React3__namespace.forwardRef((props, ref) => {
633
667
  ...rest,
634
668
  ref,
635
669
  role: role ?? "list",
636
- className: tailwindMerge.twMerge(listBaseClasses, variantClass, roundedClass, dividerClass, gapClass, navClass, className),
670
+ className: tailwindMerge.twMerge(
671
+ listBaseClasses,
672
+ variantClass,
673
+ roundedClass,
674
+ dividerClass,
675
+ gapClass,
676
+ navClass,
677
+ className
678
+ ),
637
679
  children: resolvedChildren
638
680
  }
639
681
  );
@@ -819,13 +861,17 @@ var traverseNode = (node, value) => {
819
861
  if (!React3.isValidElement(node)) {
820
862
  return { node, changed: false };
821
863
  }
822
- const { node: mappedChildren, changed: childrenChanged } = traverseNode(node.props.children, value);
823
- const shouldInject = hasMarker(node.type);
864
+ const element = node;
865
+ const { node: mappedChildren, changed: childrenChanged } = traverseNode(
866
+ element.props.children,
867
+ value
868
+ );
869
+ const shouldInject = hasMarker(element.type);
824
870
  if (!shouldInject && !childrenChanged) {
825
871
  return { node, changed: false };
826
872
  }
827
873
  const injectedProps = shouldInject ? { [EXPANSION_PANEL_CONTEXT_PROP]: value } : void 0;
828
- const cloned = mappedChildren === void 0 ? React3.cloneElement(node, injectedProps) : React3.cloneElement(node, injectedProps, mappedChildren);
874
+ const cloned = mappedChildren === void 0 ? React3.cloneElement(element, injectedProps) : React3.cloneElement(element, injectedProps, mappedChildren);
829
875
  return { node: cloned, changed: true };
830
876
  };
831
877
  var injectExpansionPanelContext = (children, value) => traverseNode(children, value).node;
@@ -916,8 +962,17 @@ var ExpansionPanelItemInner = (props) => {
916
962
  const densityPadding = densityClasses2[density] ?? densityClasses2.default;
917
963
  const disabledClass = disabled ? "cursor-not-allowed opacity-60" : "cursor-pointer";
918
964
  const titleClass = isExpanded ? accent.text : void 0;
919
- const activeBorderClass = tailwindMerge.twMerge("border-l-2 border-transparent", isExpanded ? accent.border : void 0);
920
- const defaultToggleIcon = /* @__PURE__ */ jsxRuntime.jsx("i", { className: "mdi mdi-chevron-down text-lg leading-none transition-transform duration-200", "aria-hidden": true });
965
+ const activeBorderClass = tailwindMerge.twMerge(
966
+ "border-l-2 border-transparent",
967
+ isExpanded ? accent.border : void 0
968
+ );
969
+ const defaultToggleIcon = /* @__PURE__ */ jsxRuntime.jsx(
970
+ "i",
971
+ {
972
+ className: "mdi mdi-chevron-down text-lg leading-none transition-transform duration-200",
973
+ "aria-hidden": true
974
+ }
975
+ );
921
976
  const hasContent = Boolean(children ?? text);
922
977
  const contentAnimationClass = isExpanded ? "pb-5 opacity-100" : "pb-0 opacity-0";
923
978
  const toggleIconNode = hideToggleIcon ? null : isExpanded && collapseIcon ? collapseIcon : expandIcon ?? defaultToggleIcon;
@@ -1120,7 +1175,13 @@ var ExpansionPanelInner = (props, forwardedRef) => {
1120
1175
  {
1121
1176
  ...rest,
1122
1177
  ref: forwardedRef,
1123
- className: tailwindMerge.twMerge("expansion-panel flex w-full flex-col text-gray-900", variantClass, shapeClass, layoutClass, className),
1178
+ className: tailwindMerge.twMerge(
1179
+ "expansion-panel flex w-full flex-col text-gray-900",
1180
+ variantClass,
1181
+ shapeClass,
1182
+ layoutClass,
1183
+ className
1184
+ ),
1124
1185
  children: enhancedChildren
1125
1186
  }
1126
1187
  );
@@ -1196,24 +1257,46 @@ var Dialog = React3__namespace.forwardRef((props, forwardedRef) => {
1196
1257
  ) : null;
1197
1258
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1198
1259
  activator ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "inline-flex", children: activator }) : null,
1199
- shouldRenderDialog ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: tailwindMerge.twMerge(containerBaseClasses, containerClassName), "data-state": state, "aria-hidden": !open, children: [
1200
- overlayNode,
1201
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: tailwindMerge.twMerge(panelWrapperClasses, fullscreen ? "h-full items-stretch" : "mx-auto"), "data-state": state, children: /* @__PURE__ */ jsxRuntime.jsx(
1202
- "div",
1203
- {
1204
- ...rest,
1205
- ref: forwardedRef,
1206
- id,
1207
- role: roleProp,
1208
- tabIndex,
1209
- "aria-modal": ariaModal,
1210
- className: tailwindMerge.twMerge(panelBaseClasses, fullscreen ? "h-full w-full max-w-none rounded-none" : void 0, className),
1211
- style: resolvedStyle,
1212
- "data-state": state,
1213
- children
1214
- }
1215
- ) })
1216
- ] }) : null
1260
+ shouldRenderDialog ? /* @__PURE__ */ jsxRuntime.jsxs(
1261
+ "div",
1262
+ {
1263
+ className: tailwindMerge.twMerge(containerBaseClasses, containerClassName),
1264
+ "data-state": state,
1265
+ "aria-hidden": !open,
1266
+ children: [
1267
+ overlayNode,
1268
+ /* @__PURE__ */ jsxRuntime.jsx(
1269
+ "div",
1270
+ {
1271
+ className: tailwindMerge.twMerge(
1272
+ panelWrapperClasses,
1273
+ fullscreen ? "h-full items-stretch" : "mx-auto"
1274
+ ),
1275
+ "data-state": state,
1276
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1277
+ "div",
1278
+ {
1279
+ ...rest,
1280
+ ref: forwardedRef,
1281
+ id,
1282
+ role: roleProp,
1283
+ tabIndex,
1284
+ "aria-modal": ariaModal,
1285
+ className: tailwindMerge.twMerge(
1286
+ panelBaseClasses,
1287
+ fullscreen ? "h-full w-full max-w-none rounded-none" : void 0,
1288
+ className
1289
+ ),
1290
+ style: resolvedStyle,
1291
+ "data-state": state,
1292
+ children
1293
+ }
1294
+ )
1295
+ }
1296
+ )
1297
+ ]
1298
+ }
1299
+ ) : null
1217
1300
  ] });
1218
1301
  });
1219
1302
  Dialog.displayName = "Dialog";
@@ -1248,19 +1331,19 @@ var arrowPlacementClasses = {
1248
1331
  bottom: "left-1/2 bottom-full -translate-x-1/2 translate-y-1/2",
1249
1332
  "bottom-start": "left-4 bottom-full translate-y-1/2",
1250
1333
  "bottom-end": "right-4 bottom-full translate-y-1/2",
1251
- left: "right-full top-1/2 -translate-y-1/2 translate-x-1/2",
1252
- "left-start": "right-full top-4 translate-x-1/2",
1253
- "left-end": "right-full bottom-4 translate-x-1/2",
1254
- right: "left-full top-1/2 -translate-y-1/2 -translate-x-1/2",
1255
- "right-start": "left-full top-4 -translate-x-1/2",
1256
- "right-end": "left-full bottom-4 -translate-x-1/2"
1334
+ left: "left-full top-1/2 -translate-y-1/2 -translate-x-1/2",
1335
+ "left-start": "left-full top-4 -translate-x-1/2",
1336
+ "left-end": "left-full bottom-4 -translate-x-1/2",
1337
+ right: "right-full top-1/2 -translate-y-1/2 translate-x-1/2",
1338
+ "right-start": "right-full top-4 translate-x-1/2",
1339
+ "right-end": "right-full bottom-4 translate-x-1/2"
1257
1340
  };
1258
1341
  var ToolTip = React3__namespace.forwardRef((props, forwardedRef) => {
1259
1342
  const {
1260
1343
  activator,
1261
1344
  children,
1262
1345
  placement = "top",
1263
- arrow = true,
1346
+ arrow = false,
1264
1347
  disabled = false,
1265
1348
  persistent = false,
1266
1349
  showOnHover = true,
@@ -1301,25 +1384,45 @@ var ToolTip = React3__namespace.forwardRef((props, forwardedRef) => {
1301
1384
  }
1302
1385
  return classes.join(" ");
1303
1386
  })();
1304
- return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: tailwindMerge.twMerge(wrapperBaseClasses, "group/tooltip", wrapperClassName), "data-disabled": disabled || void 0, children: [
1305
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex max-w-full", children: activator }),
1306
- shouldRenderTooltip ? /* @__PURE__ */ jsxRuntime.jsxs(
1307
- "div",
1308
- {
1309
- ...rest,
1310
- ref: forwardedRef,
1311
- role: "tooltip",
1312
- id,
1313
- "aria-hidden": persistent || disabled ? void 0 : true,
1314
- className: tailwindMerge.twMerge(tooltipBaseClasses, placementClasses2[placement], visibilityClasses, pointerClasses, className),
1315
- style: resolvedStyle,
1316
- children: [
1317
- children,
1318
- arrow && /* @__PURE__ */ jsxRuntime.jsx("span", { className: tailwindMerge.twMerge(arrowBaseClasses, arrowPlacementClasses[placement]), "aria-hidden": true, "data-arrow": true })
1319
- ]
1320
- }
1321
- ) : null
1322
- ] });
1387
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1388
+ "span",
1389
+ {
1390
+ className: tailwindMerge.twMerge(wrapperBaseClasses, "group/tooltip", wrapperClassName),
1391
+ "data-disabled": disabled || void 0,
1392
+ children: [
1393
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex max-w-full", children: activator }),
1394
+ shouldRenderTooltip ? /* @__PURE__ */ jsxRuntime.jsxs(
1395
+ "div",
1396
+ {
1397
+ ...rest,
1398
+ ref: forwardedRef,
1399
+ role: "tooltip",
1400
+ id,
1401
+ "aria-hidden": persistent || disabled ? void 0 : true,
1402
+ className: tailwindMerge.twMerge(
1403
+ tooltipBaseClasses,
1404
+ placementClasses2[placement],
1405
+ visibilityClasses,
1406
+ pointerClasses,
1407
+ className
1408
+ ),
1409
+ style: resolvedStyle,
1410
+ children: [
1411
+ children,
1412
+ arrow && /* @__PURE__ */ jsxRuntime.jsx(
1413
+ "span",
1414
+ {
1415
+ className: tailwindMerge.twMerge(arrowBaseClasses, arrowPlacementClasses[placement]),
1416
+ "aria-hidden": true,
1417
+ "data-arrow": true
1418
+ }
1419
+ )
1420
+ ]
1421
+ }
1422
+ ) : null
1423
+ ]
1424
+ }
1425
+ );
1323
1426
  });
1324
1427
  ToolTip.displayName = "ToolTip";
1325
1428
  var ToolTip_default = ToolTip;
@@ -1329,22 +1432,31 @@ var paddingClasses = {
1329
1432
  md: "p-4",
1330
1433
  lg: "p-6"
1331
1434
  };
1332
- var cardBase = "card-base relative w-full overflow-hidden bg-white text-gray-900 transition-colors";
1435
+ var cardBase = "card-base relative w-full overflow-hidden bg-white text-gray-900 transition-colors dark:bg-slate-900 dark:text-slate-100";
1333
1436
  var variantClasses = {
1334
- solid: "rounded-2xl border border-gray-200 bg-white shadow-lg shadow-gray-200/55",
1335
- outline: "rounded-2xl border border-gray-300 bg-white shadow-none",
1336
- text: "rounded-2xl border border-transparent bg-transparent shadow-none",
1337
- ghost: "rounded-2xl border border-transparent bg-gray-50 shadow-none",
1338
- filled: "rounded-2xl border border-gray-200 bg-gray-50 shadow-sm",
1339
- underlined: "rounded-2xl border border-transparent border-b border-b-gray-200 shadow-none",
1340
- rounded: "rounded-3xl border border-gray-200 bg-white shadow-md",
1341
- sharp: "rounded-none border border-gray-200 bg-white shadow-md"
1342
- };
1343
- var CardRoot = React3.forwardRef(function Card({ className, children, variant = "solid", padding = "md", interactive = false, ...rest }, ref) {
1437
+ solid: "rounded-2xl border border-gray-200 bg-white shadow-lg shadow-gray-200/55 dark:border-slate-800 dark:bg-slate-900 dark:shadow-black/30",
1438
+ outline: "rounded-2xl border-2 border-black bg-white shadow-none dark:border-black dark:bg-slate-900",
1439
+ text: "rounded-2xl border border-transparent bg-transparent shadow-none dark:border-transparent dark:bg-transparent",
1440
+ ghost: "rounded-2xl border border-transparent bg-gray-50 shadow-none dark:border-transparent dark:bg-slate-800",
1441
+ filled: "rounded-2xl border border-gray-200 bg-gray-50 shadow-sm dark:border-slate-800 dark:bg-slate-800 dark:shadow-black/20",
1442
+ underlined: "rounded-2xl border border-transparent border-b border-b-gray-200 shadow-none dark:border-transparent dark:border-b-slate-700 dark:bg-transparent",
1443
+ rounded: "rounded-3xl border border-gray-200 bg-white shadow-md dark:border-slate-800 dark:bg-slate-900 dark:shadow-black/25",
1444
+ sharp: "rounded-none border border-gray-200 bg-white shadow-md dark:border-slate-800 dark:bg-slate-900 dark:shadow-black/25"
1445
+ };
1446
+ var CardRoot = React3.forwardRef(function Card({
1447
+ className,
1448
+ children,
1449
+ variant = "solid",
1450
+ padding = "md",
1451
+ interactive = false,
1452
+ dividers = true,
1453
+ ...rest
1454
+ }, ref) {
1344
1455
  const variantClass = variantClasses[variant] ?? variantClasses.solid;
1345
1456
  const paddingClass = paddingClasses[padding] ?? paddingClasses.md;
1346
- const interactiveClass = interactive ? "transition-all duration-200 hover:-translate-y-0.5 hover:shadow-xl focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40 focus-visible:ring-offset-2" : void 0;
1457
+ const interactiveClass = interactive ? "transition-all duration-200 hover:-translate-y-0.5 hover:shadow-xl focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40 focus-visible:ring-offset-2 focus-visible:ring-offset-white dark:focus-visible:ring-offset-slate-900" : void 0;
1347
1458
  const tabIndexValue = interactive && rest.tabIndex === void 0 ? 0 : rest.tabIndex;
1459
+ const content = applyDividers(children, dividers);
1348
1460
  return /* @__PURE__ */ jsxRuntime.jsx(
1349
1461
  "div",
1350
1462
  {
@@ -1352,28 +1464,60 @@ var CardRoot = React3.forwardRef(function Card({ className, children, variant =
1352
1464
  ref,
1353
1465
  tabIndex: tabIndexValue,
1354
1466
  className: tailwindMerge.twMerge(cardBase, variantClass, paddingClass, interactiveClass, className),
1355
- children
1467
+ children: content
1356
1468
  }
1357
1469
  );
1358
1470
  });
1359
- var CardHeader = ({ className, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx(
1471
+ var CardHeader = ({ className, dividers = true, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx(
1360
1472
  "div",
1361
1473
  {
1362
1474
  ...rest,
1363
- className: tailwindMerge.twMerge("card-header mb-2 flex flex-col gap-1 border-b border-gray-100 pb-3", className)
1475
+ className: tailwindMerge.twMerge(
1476
+ "card-header mb-2 flex flex-col gap-1 pb-3",
1477
+ dividers ? "border-b border-gray-100 dark:border-slate-800" : void 0,
1478
+ className
1479
+ )
1364
1480
  }
1365
1481
  );
1366
1482
  var CardBody = ({ className, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx("div", { ...rest, className: tailwindMerge.twMerge("card-body flex flex-col gap-3", className) });
1367
- var CardFooter = ({ className, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx(
1483
+ var CardFooter = ({ className, dividers = true, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx(
1368
1484
  "div",
1369
1485
  {
1370
1486
  ...rest,
1371
- className: tailwindMerge.twMerge("card-footer mt-3 flex flex-wrap items-center gap-3 border-t border-gray-100 pt-3", className)
1487
+ className: tailwindMerge.twMerge(
1488
+ "card-footer mt-3 flex flex-wrap items-center gap-3 pt-3",
1489
+ dividers ? "border-t border-gray-100 dark:border-slate-800" : void 0,
1490
+ className
1491
+ )
1492
+ }
1493
+ );
1494
+ var CardTitle = ({ className, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx(
1495
+ "h3",
1496
+ {
1497
+ ...rest,
1498
+ className: tailwindMerge.twMerge(
1499
+ "card-title text-lg font-semibold text-gray-900 dark:text-slate-50",
1500
+ className
1501
+ )
1502
+ }
1503
+ );
1504
+ var CardSubtitle = ({ className, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx(
1505
+ "p",
1506
+ {
1507
+ ...rest,
1508
+ className: tailwindMerge.twMerge(
1509
+ "card-subtitle text-sm font-medium text-gray-600 dark:text-slate-300",
1510
+ className
1511
+ )
1512
+ }
1513
+ );
1514
+ var CardText = ({ className, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx(
1515
+ "p",
1516
+ {
1517
+ ...rest,
1518
+ className: tailwindMerge.twMerge("card-text text-sm text-gray-700 dark:text-slate-200", className)
1372
1519
  }
1373
1520
  );
1374
- var CardTitle = ({ className, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx("h3", { ...rest, className: tailwindMerge.twMerge("card-title text-lg font-semibold text-gray-900", className) });
1375
- var CardSubtitle = ({ className, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx("p", { ...rest, className: tailwindMerge.twMerge("card-subtitle text-sm font-medium text-gray-600", className) });
1376
- var CardText = ({ className, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx("p", { ...rest, className: tailwindMerge.twMerge("card-text text-sm text-gray-700", className) });
1377
1521
  var CardMedia = ({ className, rounded = false, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx(
1378
1522
  "img",
1379
1523
  {
@@ -1399,6 +1543,407 @@ var Card2 = Object.assign(CardRoot, {
1399
1543
  Actions: CardActions
1400
1544
  });
1401
1545
  var Card_default = Card2;
1546
+ function applyDividers(children, dividers) {
1547
+ return React3.Children.map(children, (child) => {
1548
+ if (!React3.isValidElement(child)) return child;
1549
+ if (isDividerSection(child)) {
1550
+ return React3.cloneElement(child, { dividers: child.props.dividers ?? dividers });
1551
+ }
1552
+ if (hasNestedChildren(child)) {
1553
+ return React3.cloneElement(child, {
1554
+ children: applyDividers(child.props.children, dividers)
1555
+ });
1556
+ }
1557
+ return child;
1558
+ });
1559
+ }
1560
+ function isDividerSection(element) {
1561
+ return element.type === CardHeader || element.type === CardFooter;
1562
+ }
1563
+ function hasNestedChildren(element) {
1564
+ const props = element.props;
1565
+ return "children" in props;
1566
+ }
1567
+ var masonryBaseClass = "masonry-grid w-full";
1568
+ var itemBaseClass = "masonry-item block break-inside-avoid";
1569
+ var MasonryBase = (props, ref) => {
1570
+ const {
1571
+ items,
1572
+ renderItem,
1573
+ getKey,
1574
+ column = 2,
1575
+ columnWidth,
1576
+ maxColumn,
1577
+ gutter = 16,
1578
+ className,
1579
+ itemClassName,
1580
+ itemStyle,
1581
+ children,
1582
+ style,
1583
+ role = "list",
1584
+ ...rest
1585
+ } = props;
1586
+ const resolvedGutter = toCssLength(gutter);
1587
+ const columnCount = resolveColumnCount(column, maxColumn, Boolean(columnWidth));
1588
+ const layoutStyle = {
1589
+ columnGap: resolvedGutter,
1590
+ columnCount,
1591
+ columnWidth: columnWidth ? toCssLength(columnWidth) : void 0,
1592
+ columnFill: "balance",
1593
+ ...style
1594
+ };
1595
+ const wrapItem = (content, key) => /* @__PURE__ */ jsxRuntime.jsx(
1596
+ "div",
1597
+ {
1598
+ className: tailwindMerge.twMerge(itemBaseClass, itemClassName),
1599
+ style: { breakInside: "avoid", marginBottom: resolvedGutter, width: "100%", ...itemStyle },
1600
+ children: content
1601
+ },
1602
+ key
1603
+ );
1604
+ const renderedItems = items && items.length ? items.map((item, index) => {
1605
+ const content = resolveItemContent(item, index, renderItem);
1606
+ return wrapItem(content, resolveItemKey(item, index, getKey));
1607
+ }) : React3__namespace.Children.map(children, (child, index) => wrapItem(child, resolveChildKey(child, index))) ?? null;
1608
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ...rest, ref, role, className: tailwindMerge.twMerge(masonryBaseClass, className), style: layoutStyle, children: renderedItems });
1609
+ };
1610
+ var Masonry = React3__namespace.forwardRef(MasonryBase);
1611
+ Masonry.displayName = "Masonry";
1612
+ var Masonry_default = Masonry;
1613
+ function toCssLength(value) {
1614
+ if (value === void 0) return void 0;
1615
+ return typeof value === "number" ? `${value}px` : value;
1616
+ }
1617
+ function normalizeColumns(value) {
1618
+ if (value === void 0) return void 0;
1619
+ if (!Number.isFinite(value)) return void 0;
1620
+ return Math.max(1, Math.floor(value));
1621
+ }
1622
+ function resolveColumnCount(column, maxColumn, hasColumnWidth) {
1623
+ const normalizedMax = normalizeColumns(maxColumn);
1624
+ if (hasColumnWidth) {
1625
+ return normalizedMax;
1626
+ }
1627
+ const normalizedColumn = normalizeColumns(column);
1628
+ if (normalizedColumn && normalizedMax) {
1629
+ return Math.min(normalizedColumn, normalizedMax);
1630
+ }
1631
+ return normalizedColumn ?? normalizedMax;
1632
+ }
1633
+ function resolveItemKey(item, index, getKey) {
1634
+ if (getKey) return getKey(item, index);
1635
+ if (React3__namespace.isValidElement(item) && item.key != null) {
1636
+ return item.key;
1637
+ }
1638
+ return index;
1639
+ }
1640
+ function resolveChildKey(child, index) {
1641
+ if (React3__namespace.isValidElement(child) && child.key != null) {
1642
+ return child.key;
1643
+ }
1644
+ return index;
1645
+ }
1646
+ function resolveItemContent(item, index, renderItem) {
1647
+ if (renderItem) {
1648
+ return renderItem(item, index);
1649
+ }
1650
+ return item;
1651
+ }
1652
+ var containerVariants = {
1653
+ solid: "bg-gradient-to-br from-primary via-primary/90 to-indigo-600 text-white shadow-2xl shadow-primary/30",
1654
+ outline: "border border-gray-200 bg-white text-gray-900",
1655
+ text: "bg-transparent text-gray-900",
1656
+ ghost: "bg-primary/5 text-gray-900 border border-primary/10",
1657
+ filled: "bg-slate-900 text-white shadow-2xl shadow-slate-900/40",
1658
+ underlined: "border-b-4 border-primary/70 bg-white text-gray-900",
1659
+ rounded: "rounded-3xl border border-gray-100 bg-white text-gray-900 shadow-xl",
1660
+ sharp: "rounded-none border border-gray-200 bg-white text-gray-900 shadow"
1661
+ };
1662
+ var frameRadii = {
1663
+ solid: "rounded-3xl",
1664
+ outline: "rounded-2xl",
1665
+ text: "rounded-2xl",
1666
+ ghost: "rounded-2xl",
1667
+ filled: "rounded-3xl",
1668
+ underlined: "rounded-2xl",
1669
+ rounded: "rounded-3xl",
1670
+ sharp: "rounded-none"
1671
+ };
1672
+ var badgeVariants = {
1673
+ solid: "bg-white/10 text-white border border-white/20",
1674
+ outline: "bg-primary/10 text-primary border border-primary/20",
1675
+ text: "bg-primary/10 text-primary border border-primary/20",
1676
+ ghost: "bg-primary/15 text-primary border border-primary/25",
1677
+ filled: "bg-white/10 text-white border border-white/20",
1678
+ underlined: "bg-primary/10 text-primary border border-primary/20",
1679
+ rounded: "bg-primary/10 text-primary border border-primary/20",
1680
+ sharp: "bg-primary/10 text-primary border border-primary/20"
1681
+ };
1682
+ var Hero = ({
1683
+ title,
1684
+ description,
1685
+ eyebrow,
1686
+ actions = [],
1687
+ stats = [],
1688
+ logos = [],
1689
+ image,
1690
+ variant = "solid",
1691
+ className,
1692
+ ...rest
1693
+ }) => {
1694
+ const containerClass = tailwindMerge.twMerge(
1695
+ "hero-block relative isolate overflow-hidden",
1696
+ containerVariants[variant] ?? containerVariants.solid,
1697
+ className
1698
+ );
1699
+ const badgeClass = tailwindMerge.twMerge(
1700
+ "inline-flex items-center gap-2 rounded-full px-3 py-1 text-xs font-semibold uppercase tracking-wide",
1701
+ badgeVariants[variant] ?? badgeVariants.solid
1702
+ );
1703
+ const isDark = variant === "solid" || variant === "filled";
1704
+ const subdued = isDark ? "text-white/80" : "text-gray-600";
1705
+ const statMuted = isDark ? "text-white/70" : "text-gray-500";
1706
+ const actionPrimary = isDark ? "bg-white text-gray-900 hover:bg-white/90 focus-visible:outline-white/70" : "bg-primary text-white hover:bg-primary/90 focus-visible:outline-primary/50";
1707
+ const actionSecondary = isDark ? "border border-white/40 text-white hover:bg-white/10 focus-visible:outline-white/60" : "border border-gray-300 text-gray-900 hover:border-primary/60 hover:text-primary focus-visible:outline-primary/50";
1708
+ const frameRadius = frameRadii[variant] ?? "rounded-2xl";
1709
+ const frameDecoration = isDark ? "border-white/10 bg-white/10 shadow-2xl shadow-black/20" : "border-gray-200 bg-white shadow-2xl shadow-gray-200/60";
1710
+ const renderAction = (action, index) => {
1711
+ const { href, label, onClick, variant: actionVariant = "primary" } = action;
1712
+ const Component = href ? "a" : "button";
1713
+ const resolvedClass = actionVariant === "secondary" ? tailwindMerge.twMerge("bg-white/70", actionSecondary) : tailwindMerge.twMerge("shadow-lg shadow-primary/25", actionPrimary);
1714
+ return /* @__PURE__ */ jsxRuntime.jsx(
1715
+ Component,
1716
+ {
1717
+ href,
1718
+ onClick,
1719
+ className: tailwindMerge.twMerge(
1720
+ "inline-flex items-center gap-2 rounded-xl px-4 py-3 text-sm font-semibold transition focus-visible:outline focus-visible:outline-offset-2",
1721
+ resolvedClass
1722
+ ),
1723
+ children: label
1724
+ },
1725
+ `${label}-${index}`
1726
+ );
1727
+ };
1728
+ return /* @__PURE__ */ jsxRuntime.jsxs("section", { ...rest, className: containerClass, children: [
1729
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pointer-events-none absolute inset-0 overflow-hidden", children: [
1730
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute left-24 top-10 h-64 w-64 rounded-full bg-primary/15 blur-3xl" }),
1731
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -right-16 -bottom-10 h-80 w-80 rounded-full bg-primary/20 blur-3xl" })
1732
+ ] }),
1733
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto flex max-w-6xl flex-col gap-12 px-6 py-16 lg:px-10 lg:py-24", children: [
1734
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid items-center gap-12 lg:grid-cols-2", children: [
1735
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
1736
+ eyebrow && /* @__PURE__ */ jsxRuntime.jsx("span", { className: badgeClass, children: eyebrow }),
1737
+ /* @__PURE__ */ jsxRuntime.jsx(
1738
+ "h1",
1739
+ {
1740
+ className: tailwindMerge.twMerge(
1741
+ "text-4xl font-semibold leading-tight sm:text-5xl",
1742
+ isDark ? "text-white" : "text-gray-900"
1743
+ ),
1744
+ children: title
1745
+ }
1746
+ ),
1747
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: tailwindMerge.twMerge("text-lg leading-relaxed", subdued), children: description }),
1748
+ actions.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-3", children: actions.map(renderAction) }),
1749
+ stats.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("dl", { className: "grid gap-6 sm:grid-cols-3", children: stats.map((stat) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
1750
+ /* @__PURE__ */ jsxRuntime.jsx("dd", { className: tailwindMerge.twMerge("text-3xl font-semibold", isDark ? "text-white" : "text-gray-900"), children: stat.value }),
1751
+ /* @__PURE__ */ jsxRuntime.jsx("dt", { className: tailwindMerge.twMerge("text-sm font-medium", statMuted), children: stat.label })
1752
+ ] }, stat.label)) })
1753
+ ] }),
1754
+ image && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: tailwindMerge.twMerge("relative overflow-hidden backdrop-blur", frameDecoration, frameRadius), children: [
1755
+ /* @__PURE__ */ jsxRuntime.jsx(
1756
+ "img",
1757
+ {
1758
+ src: image.src,
1759
+ alt: image.alt ?? "",
1760
+ className: tailwindMerge.twMerge("h-full w-full object-cover", frameRadius),
1761
+ loading: "lazy"
1762
+ }
1763
+ ),
1764
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pointer-events-none absolute inset-0 bg-linear-to-t from-black/30 via-transparent to-transparent" })
1765
+ ] }) })
1766
+ ] }),
1767
+ logos.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-6 lg:items-center lg:gap-10", children: [
1768
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: tailwindMerge.twMerge("text-sm font-semibold tracking-wide", subdued), children: "Duveruji nam" }),
1769
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap items-center gap-4 opacity-80", children: logos.map((logo) => /* @__PURE__ */ jsxRuntime.jsx(
1770
+ "img",
1771
+ {
1772
+ src: logo.src,
1773
+ alt: logo.alt ?? "",
1774
+ className: "h-8 w-auto grayscale transition hover:grayscale-0",
1775
+ loading: "lazy"
1776
+ },
1777
+ logo.src
1778
+ )) })
1779
+ ] })
1780
+ ] })
1781
+ ] });
1782
+ };
1783
+ Hero.displayName = "Hero";
1784
+ var Hero_default = Hero;
1785
+ var variantMap = {
1786
+ solid: "bg-white text-gray-900 border border-gray-200 shadow-lg shadow-gray-200/60",
1787
+ outline: "bg-white text-gray-900 border border-gray-300",
1788
+ text: "bg-transparent text-gray-900",
1789
+ ghost: "bg-slate-50 text-gray-900 border border-slate-100",
1790
+ filled: "bg-slate-900 text-white shadow-2xl shadow-slate-900/30",
1791
+ underlined: "bg-white text-gray-900 border-b-4 border-primary/70",
1792
+ rounded: "bg-white text-gray-900 border border-gray-200 rounded-3xl shadow-md",
1793
+ sharp: "bg-white text-gray-900 border border-gray-200 rounded-none shadow"
1794
+ };
1795
+ var cardRadiusMap = {
1796
+ solid: "rounded-2xl",
1797
+ outline: "rounded-2xl",
1798
+ text: "rounded-2xl",
1799
+ ghost: "rounded-2xl",
1800
+ filled: "rounded-3xl",
1801
+ underlined: "rounded-t-2xl",
1802
+ rounded: "rounded-3xl",
1803
+ sharp: "rounded-none"
1804
+ };
1805
+ var avatarRadiusMap = {
1806
+ solid: "rounded-2xl",
1807
+ outline: "rounded-2xl",
1808
+ text: "rounded-2xl",
1809
+ ghost: "rounded-2xl",
1810
+ filled: "rounded-3xl",
1811
+ underlined: "rounded-2xl",
1812
+ rounded: "rounded-3xl",
1813
+ sharp: "rounded-none"
1814
+ };
1815
+ var isDarkVariant = (variant) => variant === "filled";
1816
+ var SocialIcons = ({
1817
+ socials = [],
1818
+ dark
1819
+ }) => {
1820
+ if (socials.length === 0) return null;
1821
+ tailwindMerge.twMerge(
1822
+ "flex h-10 w-10 items-center justify-center rounded-full border text-lg transition",
1823
+ dark ? "border-white/30 text-white hover:bg-white/10" : "border-gray-200 text-gray-600 hover:border-primary/50 hover:text-primary"
1824
+ );
1825
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-2", children: socials.map((link) => (
1826
+ // <a
1827
+ // key={link.href}
1828
+ // href={link.href}
1829
+ // aria-label={link.label ?? link.icon}
1830
+ // className={iconBase}
1831
+ // >
1832
+ // <i className={twMerge('mdi', link.icon)} aria-hidden />
1833
+ // </a>
1834
+ /* @__PURE__ */ jsxRuntime.jsx(Button_default, { iconOnly: true, icon: link.icon, variant: "rounded", size: "x-small" })
1835
+ )) });
1836
+ };
1837
+ var Badges = ({ badges = [], dark }) => {
1838
+ if (badges.length === 0) return null;
1839
+ const badgeBase = tailwindMerge.twMerge(
1840
+ "inline-flex items-center rounded-full px-3 py-1 mb-2 text-xs font-semibold",
1841
+ dark ? "bg-white/10 text-white border border-white/20" : "bg-primary/10 text-primary border border-primary/15"
1842
+ );
1843
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-2", children: badges.map((badge) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: badgeBase, children: badge.label }, badge.label)) });
1844
+ };
1845
+ var AvatarFrame = ({ avatar, size = "md", ring, radius }) => {
1846
+ const dimension = size === "lg" ? "h-28 w-28" : "h-20 w-20";
1847
+ const ringClass = ring ? "ring-4 ring-white/80 ring-offset-4 ring-offset-transparent" : "";
1848
+ return /* @__PURE__ */ jsxRuntime.jsx(
1849
+ "div",
1850
+ {
1851
+ className: tailwindMerge.twMerge(
1852
+ "overflow-hidden bg-linear-to-br from-primary/10 to-primary/30",
1853
+ radius,
1854
+ dimension,
1855
+ ringClass
1856
+ ),
1857
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1858
+ "img",
1859
+ {
1860
+ src: avatar.src,
1861
+ alt: avatar.alt ?? "",
1862
+ className: tailwindMerge.twMerge("h-full w-full object-cover", radius),
1863
+ loading: "lazy"
1864
+ }
1865
+ )
1866
+ }
1867
+ );
1868
+ };
1869
+ var ProfileCard = ({
1870
+ name,
1871
+ role,
1872
+ description,
1873
+ avatar,
1874
+ socials,
1875
+ badges,
1876
+ layout = "classic",
1877
+ variant = "solid",
1878
+ className,
1879
+ ...rest
1880
+ }) => {
1881
+ const baseVariant = variantMap[variant] ?? variantMap.solid;
1882
+ const cardRadius = cardRadiusMap[variant] ?? "rounded-2xl";
1883
+ const avatarRadius = avatarRadiusMap[variant] ?? "rounded-2xl";
1884
+ const dark = isDarkVariant(variant);
1885
+ const muted = dark ? "text-white/70" : "text-gray-600";
1886
+ const accent = dark ? "text-white" : "text-gray-900";
1887
+ const content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1888
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
1889
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
1890
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarFrame, { avatar, radius: avatarRadius }),
1891
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1892
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: tailwindMerge.twMerge("text-xl font-semibold", accent), children: name }),
1893
+ role && /* @__PURE__ */ jsxRuntime.jsx("p", { className: tailwindMerge.twMerge("text-sm font-medium", muted), children: role })
1894
+ ] })
1895
+ ] }),
1896
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: tailwindMerge.twMerge("text-sm leading-relaxed", muted), children: description }),
1897
+ /* @__PURE__ */ jsxRuntime.jsx(Badges, { badges, dark })
1898
+ ] }),
1899
+ /* @__PURE__ */ jsxRuntime.jsx(SocialIcons, { socials, dark })
1900
+ ] });
1901
+ const spotlightContent = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative overflow-hidden", children: [
1902
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 bg-linear-to-br from-primary/10 via-transparent to-primary/20 blur-3xl" }),
1903
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex flex-col gap-6 md:flex-row md:items-center", children: [
1904
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarFrame, { avatar, size: "lg", ring: true, radius: avatarRadius }),
1905
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
1906
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: tailwindMerge.twMerge("text-2xl font-semibold", accent), children: name }),
1907
+ role && /* @__PURE__ */ jsxRuntime.jsx("p", { className: tailwindMerge.twMerge("text-sm font-medium uppercase tracking-wide", muted), children: role }),
1908
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: tailwindMerge.twMerge("text-sm leading-relaxed", muted), children: description }),
1909
+ /* @__PURE__ */ jsxRuntime.jsx(Badges, { badges, dark }),
1910
+ /* @__PURE__ */ jsxRuntime.jsx(SocialIcons, { socials, dark })
1911
+ ] })
1912
+ ] })
1913
+ ] });
1914
+ const splitContent = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid gap-6 md:grid-cols-[auto,1fr] md:items-center", children: [
1915
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarFrame, { avatar, size: "lg", ring: true, radius: avatarRadius }),
1916
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
1917
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1918
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: tailwindMerge.twMerge("text-2xl font-semibold", accent), children: name }),
1919
+ role && /* @__PURE__ */ jsxRuntime.jsx("p", { className: tailwindMerge.twMerge("text-sm font-medium", muted), children: role })
1920
+ ] }),
1921
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: tailwindMerge.twMerge("text-sm leading-relaxed", muted), children: description }),
1922
+ /* @__PURE__ */ jsxRuntime.jsx(Badges, { badges, dark }),
1923
+ /* @__PURE__ */ jsxRuntime.jsx(SocialIcons, { socials, dark })
1924
+ ] })
1925
+ ] });
1926
+ const layoutMap = {
1927
+ classic: content,
1928
+ split: splitContent,
1929
+ spotlight: spotlightContent
1930
+ };
1931
+ return /* @__PURE__ */ jsxRuntime.jsx(
1932
+ "article",
1933
+ {
1934
+ ...rest,
1935
+ className: tailwindMerge.twMerge(
1936
+ "profile-card relative overflow-hidden p-6 transition duration-200 hover:-translate-y-0.5 hover:shadow-xl",
1937
+ baseVariant,
1938
+ cardRadius,
1939
+ className
1940
+ ),
1941
+ children: layoutMap[layout] ?? layoutMap.classic
1942
+ }
1943
+ );
1944
+ };
1945
+ ProfileCard.displayName = "ProfileCard";
1946
+ var ProfileCard_default = ProfileCard;
1402
1947
 
1403
1948
  // src/Form/Input/states.input.ts
1404
1949
  var resolveIconClassName3 = (icon) => {
@@ -1426,37 +1971,49 @@ var resolveIconClassName3 = (icon) => {
1426
1971
  const classes = [...baseClasses, normalizedName];
1427
1972
  return Array.from(new Set(classes)).join(" ");
1428
1973
  };
1429
-
1430
- // src/utils/helpers/randomStr.ts
1431
- var characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
1432
- function generateString(length = 5) {
1433
- let result = "";
1434
- const charactersLength = characters.length;
1435
- for (let i = 0; i < length; i++) {
1436
- result += characters.charAt(Math.floor(Math.random() * charactersLength));
1437
- }
1438
- return result;
1439
- }
1440
1974
  var Input = ({
1441
1975
  variant = "outline",
1976
+ size = "medium",
1442
1977
  success,
1443
1978
  error,
1444
1979
  warn,
1445
1980
  icon,
1446
1981
  className,
1447
1982
  wrapperClassName,
1983
+ label,
1448
1984
  ...props
1449
1985
  }) => {
1450
- const classBase = "input-base px-3 py-2 focus-visible:outline-none focus-visible:ring-primary transition-colors duration-200 disabled:opacity-50 disabled:cursor-not-allowed w-full";
1451
- const variantClasses2 = {
1452
- solid: "rounded border border-gray-400 bg-white shadow-sm focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30",
1453
- sharp: "rounded-none border border-gray-400 bg-white shadow-sm focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30",
1454
- outline: "rounded border border-gray-300 bg-transparent focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30",
1455
- text: "rounded-none border-0 border-b border-transparent px-0 bg-transparent focus-visible:border-primary focus-visible:ring-0 focus-visible:ring-transparent",
1456
- ghost: "rounded border border-transparent bg-gray-50 text-gray-900 focus-visible:bg-white focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/15",
1457
- filled: "rounded border border-gray-200 bg-gray-100 focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/25",
1458
- underlined: "rounded-none border-0 border-b border-gray-300 px-0 bg-transparent focus-visible:border-primary focus-visible:ring-0 focus-visible:ring-transparent",
1459
- rounded: "rounded-full px-4 border border-gray-300 bg-white focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/20 shadow-sm"
1986
+ const { placeholder, onFocus, onBlur, ...inputProps } = props;
1987
+ const reactId = React3__namespace.default.useId();
1988
+ const hasLabel = Boolean(label);
1989
+ const hasProvidedPlaceholder = typeof placeholder === "string" && placeholder.trim().length > 0;
1990
+ const hidePlaceholderUntilFocus = hasLabel && hasProvidedPlaceholder;
1991
+ const [isFocused, setIsFocused] = React3__namespace.default.useState(false);
1992
+ const classBase = "input-base focus-visible:outline-none focus-visible:ring-primary transition-colors duration-200 disabled:opacity-50 disabled:cursor-not-allowed w-full text-gray-900 dark:text-gray-100 placeholder:text-gray-500 dark:placeholder:text-gray-400";
1993
+ const variantClasses3 = {
1994
+ solid: "rounded border border-gray-400 bg-white shadow-sm focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30 dark:border-gray-600 dark:bg-slate-900 dark:shadow-black/20 dark:focus-visible:border-primary/70 dark:focus-visible:ring-primary/40",
1995
+ sharp: "rounded-none border border-gray-400 bg-white shadow-sm focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30 dark:border-gray-600 dark:bg-slate-900 dark:shadow-black/20 dark:focus-visible:border-primary/70 dark:focus-visible:ring-primary/40",
1996
+ outline: "rounded border-2 border-black bg-white focus-visible:border-black focus-visible:ring-2 focus-visible:ring-black/30 dark:border-black dark:bg-transparent dark:focus-visible:border-black dark:focus-visible:ring-black/40",
1997
+ text: "rounded-none border-0 border-b border-transparent px-0 bg-transparent focus-visible:border-primary focus-visible:ring-0 focus-visible:ring-transparent dark:border-b-gray-600 dark:focus-visible:border-primary/70",
1998
+ ghost: "rounded border border-transparent bg-gray-50 text-gray-900 focus-visible:bg-white focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/15 dark:bg-slate-800 dark:text-gray-100 dark:focus-visible:bg-slate-700 dark:focus-visible:border-primary/60 dark:focus-visible:ring-primary/25",
1999
+ filled: "rounded border border-gray-200 bg-gray-100 focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/25 dark:border-gray-700 dark:bg-slate-800 dark:focus-visible:border-primary/60 dark:focus-visible:ring-primary/30",
2000
+ underlined: "rounded-none border-0 border-b border-gray-300 px-0 bg-transparent focus-visible:border-primary focus-visible:ring-0 focus-visible:ring-transparent dark:border-b-gray-600 dark:focus-visible:border-primary/70",
2001
+ rounded: "rounded-full px-4 border border-gray-300 bg-white focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/20 shadow-sm dark:border-gray-600 dark:bg-slate-900 dark:focus-visible:border-primary/70 dark:focus-visible:ring-primary/30 dark:shadow-black/20"
2002
+ };
2003
+ const sizeClasses4 = {
2004
+ "x-small": { paddingNoIcon: "px-2 py-2", paddingWithIcon: "pl-8 pr-2 py-2", text: "text-xs" },
2005
+ small: {
2006
+ paddingNoIcon: "px-2.5 py-2.5",
2007
+ paddingWithIcon: "pl-9 pr-2.5 py-2.5",
2008
+ text: "text-sm"
2009
+ },
2010
+ medium: { paddingNoIcon: "px-3 py-3", paddingWithIcon: "pl-10 pr-3 py-3", text: "text-base" },
2011
+ large: {
2012
+ paddingNoIcon: "px-3.5 py-3.5",
2013
+ paddingWithIcon: "pl-11 pr-3.5 py-3.5",
2014
+ text: "text-lg"
2015
+ },
2016
+ "x-large": { paddingNoIcon: "px-4 py-4", paddingWithIcon: "pl-12 pr-4 py-4", text: "text-xl" }
1460
2017
  };
1461
2018
  const status = error ? { tone: "error", message: error } : warn ? { tone: "warn", message: warn } : success ? { tone: "success", message: success } : void 0;
1462
2019
  const statusClasses = {
@@ -1465,24 +2022,81 @@ var Input = ({
1465
2022
  success: "border-emerald-500 focus:border-emerald-500 focus:ring-emerald-400"
1466
2023
  };
1467
2024
  const statusMessageClasses = {
1468
- error: "text-red-600",
1469
- warn: "text-amber-600",
1470
- success: "text-emerald-600"
2025
+ error: "text-red-600 dark:text-red-300",
2026
+ warn: "text-amber-600 dark:text-amber-300",
2027
+ success: "text-emerald-600 dark:text-emerald-300"
1471
2028
  };
1472
- const variantClass = variantClasses2[variant] ?? variantClasses2.outline;
2029
+ const variantClass = variantClasses3[variant] ?? variantClasses3.outline;
1473
2030
  const toneClass = status ? statusClasses[status.tone] : void 0;
1474
- const prependIconClass = resolveIconClassName3(icon);
1475
- const prependPadding = prependIconClass ? "pl-10" : void 0;
1476
- const inputName = props.name || generateString();
2031
+ let prependIconClass = resolveIconClassName3(icon);
2032
+ const sizeConfig = sizeClasses4[size] ?? sizeClasses4.medium;
2033
+ const sizeClass = [
2034
+ prependIconClass ? sizeConfig.paddingWithIcon : sizeConfig.paddingNoIcon,
2035
+ sizeConfig.text
2036
+ ].join(" ");
2037
+ const inputName = inputProps.name || reactId;
2038
+ const basePlaceholder = placeholder ?? (hasLabel ? " " : void 0);
2039
+ const placeholderValue = hidePlaceholderUntilFocus ? isFocused ? placeholder : " " : basePlaceholder;
2040
+ const placeholderClass = hidePlaceholderUntilFocus ? "placeholder-transparent focus:placeholder-gray-500 focus:dark:placeholder-gray-400" : void 0;
2041
+ const labelLeftClass = prependIconClass ? "left-10" : "left-3";
2042
+ const labelBgDefault = ["outline", "text", "underlined"].includes(variant) ? "bg-transparent" : "bg-white/90 dark:bg-slate-900";
2043
+ const handleFocus = (event) => {
2044
+ if (hidePlaceholderUntilFocus) setIsFocused(true);
2045
+ onFocus?.(event);
2046
+ };
2047
+ const handleBlur = (event) => {
2048
+ if (hidePlaceholderUntilFocus) setIsFocused(false);
2049
+ onBlur?.(event);
2050
+ };
1477
2051
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: tailwindMerge.twMerge("flex flex-col gap-1", wrapperClassName), children: [
1478
2052
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex items-center", children: [
1479
- prependIconClass && /* @__PURE__ */ jsxRuntime.jsx("i", { className: tailwindMerge.twMerge("pointer-events-none absolute left-3 ", prependIconClass), "aria-hidden": true }),
2053
+ prependIconClass && /* @__PURE__ */ jsxRuntime.jsx(
2054
+ "i",
2055
+ {
2056
+ className: tailwindMerge.twMerge(
2057
+ "pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-gray-500 dark:text-gray-400",
2058
+ status?.tone && statusMessageClasses[status?.tone] || "",
2059
+ prependIconClass
2060
+ ),
2061
+ "aria-hidden": true
2062
+ }
2063
+ ),
1480
2064
  /* @__PURE__ */ jsxRuntime.jsx(
1481
2065
  "input",
1482
2066
  {
1483
- ...props,
1484
- className: tailwindMerge.twMerge(classBase, variantClass, toneClass, prependPadding, className),
1485
- name: inputName
2067
+ ...inputProps,
2068
+ id: inputName,
2069
+ name: inputName,
2070
+ placeholder: placeholderValue,
2071
+ onFocus: handleFocus,
2072
+ onBlur: handleBlur,
2073
+ className: tailwindMerge.twMerge(
2074
+ "peer",
2075
+ classBase,
2076
+ variantClass,
2077
+ toneClass,
2078
+ sizeClass,
2079
+ placeholderClass,
2080
+ className
2081
+ )
2082
+ }
2083
+ ),
2084
+ label && /* @__PURE__ */ jsxRuntime.jsx(
2085
+ "label",
2086
+ {
2087
+ htmlFor: inputName,
2088
+ className: tailwindMerge.twMerge(
2089
+ "absolute transition-all duration-150 pointer-events-none text-gray-700 dark:text-gray-200",
2090
+ labelLeftClass,
2091
+ // Floated state: center label's vertical middle on the top border line
2092
+ "top-0 -translate-y-2/3 text-xs px-1",
2093
+ labelBgDefault,
2094
+ // focus state mirrors floated state (keeps center on border)
2095
+ "peer-focus:top-0 peer-focus:-translate-y-1/2 peer-focus:text-xs peer-focus:px-1 peer-focus:bg-white/90 peer-focus:text-gray-600 dark:peer-focus:bg-slate-900 dark:peer-focus:text-gray-300",
2096
+ // when input is empty (placeholder shown) -> center label inside input
2097
+ "peer-placeholder-shown:top-1/2 peer-placeholder-shown:-translate-y-1/2 peer-placeholder-shown:text-sm peer-placeholder-shown:bg-transparent peer-placeholder-shown:text-gray-500 dark:peer-placeholder-shown:text-gray-400"
2098
+ ),
2099
+ children: label
1486
2100
  }
1487
2101
  )
1488
2102
  ] }),
@@ -1490,8 +2104,170 @@ var Input = ({
1490
2104
  ] });
1491
2105
  };
1492
2106
  var Input_default = Input;
2107
+
2108
+ // src/utils/helpers/randomStr.ts
2109
+ var characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
2110
+ function generateString(length = 5) {
2111
+ let result = "";
2112
+ const charactersLength = characters.length;
2113
+ for (let i = 0; i < length; i++) {
2114
+ result += characters.charAt(Math.floor(Math.random() * charactersLength));
2115
+ }
2116
+ return result;
2117
+ }
2118
+ var baseClass = "select-base w-full appearance-none focus-visible:outline-none focus-visible:ring-primary transition-colors duration-200 disabled:opacity-50 disabled:cursor-not-allowed bg-white text-gray-900 placeholder:text-gray-500 dark:bg-slate-900 dark:text-gray-100 dark:placeholder:text-gray-400";
2119
+ var variantClasses2 = {
2120
+ solid: "rounded border border-gray-400 bg-white shadow-sm focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30 dark:border-gray-600 dark:bg-slate-900 dark:shadow-black/20 dark:focus-visible:border-primary/70 dark:focus-visible:ring-primary/40",
2121
+ sharp: "rounded-none border border-gray-400 bg-white shadow-sm focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30 dark:border-gray-600 dark:bg-slate-900 dark:shadow-black/20 dark:focus-visible:border-primary/70 dark:focus-visible:ring-primary/40",
2122
+ outline: "rounded border-2 border-black bg-white focus-visible:border-black focus-visible:ring-2 focus-visible:ring-black/30 dark:border-black dark:bg-transparent dark:focus-visible:border-black dark:focus-visible:ring-black/40",
2123
+ text: "rounded-none border-0 border-b border-transparent pl-0 pr-10 bg-transparent focus-visible:border-primary focus-visible:ring-0 focus-visible:ring-transparent dark:border-b-gray-600 dark:focus-visible:border-primary/70",
2124
+ ghost: "rounded border border-transparent bg-gray-50 text-gray-900 focus-visible:bg-white focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/15 dark:bg-slate-800 dark:text-gray-100 dark:focus-visible:bg-slate-700 dark:focus-visible:border-primary/60 dark:focus-visible:ring-primary/25",
2125
+ filled: "rounded border border-gray-200 bg-gray-100 focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/25 dark:border-gray-700 dark:bg-slate-800 dark:focus-visible:border-primary/60 dark:focus-visible:ring-primary/30",
2126
+ underlined: "rounded-none border-0 border-b border-gray-300 pl-0 pr-10 bg-transparent focus-visible:border-primary focus-visible:ring-0 focus-visible:ring-transparent dark:border-b-gray-600 dark:focus-visible:border-primary/70",
2127
+ rounded: "rounded-full pl-4 pr-10 border border-gray-300 bg-white focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/20 shadow-sm dark:border-gray-600 dark:bg-slate-900 dark:focus-visible:border-primary/70 dark:focus-visible:ring-primary/30 dark:shadow-black/20"
2128
+ };
2129
+ var sizeClasses2 = {
2130
+ "x-small": { padding: "pl-2 pr-8 py-2", text: "text-xs" },
2131
+ small: { padding: "pl-2.5 pr-9 py-2.5", text: "text-sm" },
2132
+ medium: { padding: "pl-3 pr-10 py-3", text: "text-base" },
2133
+ large: { padding: "pl-3.5 pr-11 py-3.5", text: "text-lg" },
2134
+ "x-large": { padding: "pl-4 pr-12 py-4", text: "text-xl" }
2135
+ };
2136
+ var normalizeOption = (option) => {
2137
+ if (typeof option === "string") {
2138
+ return { label: option, value: option };
2139
+ }
2140
+ return option;
2141
+ };
2142
+ var Select = ({
2143
+ options,
2144
+ label,
2145
+ placeholder,
2146
+ variant = "outline",
2147
+ size = "medium",
2148
+ className,
2149
+ wrapperClassName,
2150
+ id,
2151
+ name,
2152
+ multiple,
2153
+ onFocus,
2154
+ onBlur,
2155
+ onChange,
2156
+ value,
2157
+ defaultValue,
2158
+ ...props
2159
+ }) => {
2160
+ const selectId = id || name || generateString();
2161
+ const selectName = name || selectId;
2162
+ const variantClass = variantClasses2[variant] ?? variantClasses2.outline;
2163
+ const sizeConfig = sizeClasses2[size] ?? sizeClasses2.medium;
2164
+ const sizeClass = `${sizeConfig.padding} ${sizeConfig.text}`;
2165
+ const normalizedOptions = options.map(normalizeOption);
2166
+ const hasLabel = Boolean(label);
2167
+ const hasProvidedPlaceholder = typeof placeholder === "string" && placeholder.trim().length > 0;
2168
+ const hidePlaceholderUntilFocus = hasLabel && hasProvidedPlaceholder && !multiple;
2169
+ const placeholderText = placeholder ?? (hasLabel ? " " : void 0);
2170
+ const [isFocused, setIsFocused] = React3__namespace.default.useState(false);
2171
+ const [hasValue, setHasValue] = React3__namespace.default.useState(() => {
2172
+ const initial = value ?? defaultValue;
2173
+ if (initial === void 0 || initial === null) return false;
2174
+ if (multiple) {
2175
+ if (Array.isArray(initial)) return initial.length > 0;
2176
+ return String(initial).length > 0;
2177
+ }
2178
+ if (Array.isArray(initial)) {
2179
+ if (initial.length === 0) return false;
2180
+ return String(initial[0]).length > 0;
2181
+ }
2182
+ return String(initial).length > 0;
2183
+ });
2184
+ const isControlled = value !== void 0;
2185
+ React3__namespace.default.useEffect(() => {
2186
+ if (!isControlled) return;
2187
+ if (value === void 0 || value === null) {
2188
+ setHasValue(false);
2189
+ return;
2190
+ }
2191
+ if (multiple) {
2192
+ if (Array.isArray(value)) {
2193
+ setHasValue(value.length > 0);
2194
+ } else {
2195
+ setHasValue(String(value).length > 0);
2196
+ }
2197
+ return;
2198
+ }
2199
+ if (Array.isArray(value)) {
2200
+ setHasValue(value.length > 0 ? String(value[0]).length > 0 : false);
2201
+ return;
2202
+ }
2203
+ setHasValue(String(value).length > 0);
2204
+ }, [isControlled, multiple, value]);
2205
+ const placeholderOptionLabel = hidePlaceholderUntilFocus && !isFocused ? " " : placeholderText;
2206
+ const shouldRenderPlaceholder = !multiple && placeholderText !== void 0;
2207
+ const labelShouldFloat = hasValue || isFocused;
2208
+ const labelLeftClass = "left-3";
2209
+ const labelBgDefault = ["outline", "text", "underlined"].includes(variant) ? "bg-transparent" : "bg-white/90 dark:bg-slate-900";
2210
+ const handleFocus = (event) => {
2211
+ if (hidePlaceholderUntilFocus) setIsFocused(true);
2212
+ onFocus?.(event);
2213
+ };
2214
+ const handleBlur = (event) => {
2215
+ if (hidePlaceholderUntilFocus) setIsFocused(false);
2216
+ onBlur?.(event);
2217
+ };
2218
+ const handleChange = (event) => {
2219
+ if (!isControlled) {
2220
+ const nextHasValue = multiple ? event.target.selectedOptions.length > 0 : event.target.value !== "";
2221
+ setHasValue(nextHasValue);
2222
+ }
2223
+ onChange?.(event);
2224
+ };
2225
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: tailwindMerge.twMerge("flex flex-col gap-1", wrapperClassName), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex items-center", children: [
2226
+ /* @__PURE__ */ jsxRuntime.jsxs(
2227
+ "select",
2228
+ {
2229
+ ...props,
2230
+ id: selectId,
2231
+ name: selectName,
2232
+ multiple,
2233
+ value,
2234
+ defaultValue: value === void 0 ? defaultValue : void 0,
2235
+ onFocus: handleFocus,
2236
+ onBlur: handleBlur,
2237
+ onChange: handleChange,
2238
+ className: tailwindMerge.twMerge("peer", baseClass, variantClass, sizeClass, className),
2239
+ children: [
2240
+ shouldRenderPlaceholder && /* @__PURE__ */ jsxRuntime.jsx("option", { value: "", disabled: props.required, hidden: hasValue, children: placeholderOptionLabel }),
2241
+ normalizedOptions.map((option, index) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: option.value, disabled: option.disabled, children: option.label }, `${selectId}-${option.value}-${index}`))
2242
+ ]
2243
+ }
2244
+ ),
2245
+ !multiple && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "pointer-events-none absolute inset-y-0 right-3 flex items-center text-gray-500 dark:text-gray-300", children: /* @__PURE__ */ jsxRuntime.jsx("i", { className: "mdi mdi-chevron-down text-base leading-none", "aria-hidden": true }) }),
2246
+ label && /* @__PURE__ */ jsxRuntime.jsx(
2247
+ "label",
2248
+ {
2249
+ htmlFor: selectId,
2250
+ className: tailwindMerge.twMerge(
2251
+ "absolute transition-all duration-150 pointer-events-none text-gray-700 dark:text-gray-200",
2252
+ labelLeftClass,
2253
+ labelShouldFloat ? [
2254
+ "top-0 text-xs px-1",
2255
+ isFocused ? "-translate-y-1/2 text-gray-600" : "-translate-y-2/3",
2256
+ labelBgDefault
2257
+ ].join(" ") : "top-1/2 -translate-y-1/2 text-sm text-gray-500"
2258
+ ),
2259
+ children: label
2260
+ }
2261
+ )
2262
+ ] }) });
2263
+ };
2264
+ var Select_default = Select;
1493
2265
  var paletteValues = {
1494
- primary: { fill: "var(--color-primary, #6366f1)", ring: "rgba(99, 102, 241, 0.28)", thumbBorder: "#6366f1" },
2266
+ primary: {
2267
+ fill: "var(--color-primary, #6366f1)",
2268
+ ring: "rgba(99, 102, 241, 0.28)",
2269
+ thumbBorder: "#6366f1"
2270
+ },
1495
2271
  neutral: { fill: "#4b5563", ring: "rgba(75, 85, 99, 0.28)", thumbBorder: "#4b5563" },
1496
2272
  info: { fill: "#0284c7", ring: "rgba(2, 132, 199, 0.28)", thumbBorder: "#0284c7" },
1497
2273
  success: { fill: "#059669", ring: "rgba(5, 150, 105, 0.24)", thumbBorder: "#059669" },
@@ -1501,9 +2277,19 @@ var paletteValues = {
1501
2277
  bw: { fill: "#000000", ring: "rgba(0, 0, 0, 0.26)", thumbBorder: "#000000" }
1502
2278
  };
1503
2279
  var sizeTokens = {
1504
- small: { trackHeight: "0.375rem", thumbSize: "1.1rem", trackClass: "h-1.5", valueClass: "text-xs" },
2280
+ small: {
2281
+ trackHeight: "0.375rem",
2282
+ thumbSize: "1.1rem",
2283
+ trackClass: "h-1.5",
2284
+ valueClass: "text-xs"
2285
+ },
1505
2286
  medium: { trackHeight: "0.5rem", thumbSize: "1.25rem", trackClass: "h-2", valueClass: "text-sm" },
1506
- large: { trackHeight: "0.6rem", thumbSize: "1.4rem", trackClass: "h-[0.65rem]", valueClass: "text-base" }
2287
+ large: {
2288
+ trackHeight: "0.6rem",
2289
+ thumbSize: "1.4rem",
2290
+ trackClass: "h-[0.65rem]",
2291
+ valueClass: "text-base"
2292
+ }
1507
2293
  };
1508
2294
  var clamp = (value, min, max) => Math.min(Math.max(value, min), max);
1509
2295
  var toNumber = (value, fallback) => {
@@ -1690,57 +2476,106 @@ var Switch = React3.forwardRef(
1690
2476
  const sizeThumbClass = thumbSizes[size] ?? thumbSizes.medium;
1691
2477
  const thumbShiftClass = thumbTranslate[size] ?? thumbTranslate.medium;
1692
2478
  const pointerClass = disabled ? "cursor-not-allowed opacity-60" : "cursor-pointer";
1693
- return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: tailwindMerge.twMerge("flex items-center gap-3 select-none", pointerClass, wrapperClassName), children: [
1694
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "relative inline-flex items-center", children: [
1695
- /* @__PURE__ */ jsxRuntime.jsx(
1696
- "input",
1697
- {
1698
- ...rest,
1699
- type: "checkbox",
1700
- ref,
1701
- checked: currentChecked,
1702
- onChange: handleChange,
1703
- disabled,
1704
- className: "peer sr-only"
1705
- }
1706
- ),
1707
- /* @__PURE__ */ jsxRuntime.jsx(
1708
- "span",
1709
- {
1710
- className: tailwindMerge.twMerge(
1711
- "block rounded-full border border-transparent transition-all duration-200",
1712
- sizeTrackClass,
1713
- currentChecked ? paletteTrack.active : paletteTrack.inactive,
1714
- disabled && "bg-gray-200",
1715
- "peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2",
1716
- focusClass,
1717
- className
2479
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2480
+ "label",
2481
+ {
2482
+ className: tailwindMerge.twMerge("flex items-center gap-3 select-none", pointerClass, wrapperClassName),
2483
+ children: [
2484
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "relative inline-flex items-center", children: [
2485
+ /* @__PURE__ */ jsxRuntime.jsx(
2486
+ "input",
2487
+ {
2488
+ ...rest,
2489
+ type: "checkbox",
2490
+ ref,
2491
+ checked: currentChecked,
2492
+ onChange: handleChange,
2493
+ disabled,
2494
+ className: "peer sr-only"
2495
+ }
1718
2496
  ),
1719
- "aria-hidden": true,
1720
- children: /* @__PURE__ */ jsxRuntime.jsx(
2497
+ /* @__PURE__ */ jsxRuntime.jsx(
1721
2498
  "span",
1722
2499
  {
1723
2500
  className: tailwindMerge.twMerge(
1724
- "absolute left-0.5 top-0.5 rounded-full bg-white shadow-md border border-gray-200 transition-transform duration-200",
1725
- sizeThumbClass,
1726
- currentChecked && thumbShiftClass,
1727
- currentChecked && thumbActive,
1728
- disabled && "border-gray-300"
2501
+ "block rounded-full border border-transparent transition-all duration-200",
2502
+ sizeTrackClass,
2503
+ currentChecked ? paletteTrack.active : paletteTrack.inactive,
2504
+ disabled && "bg-gray-200",
2505
+ "peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2",
2506
+ focusClass,
2507
+ className
2508
+ ),
2509
+ "aria-hidden": true,
2510
+ children: /* @__PURE__ */ jsxRuntime.jsx(
2511
+ "span",
2512
+ {
2513
+ className: tailwindMerge.twMerge(
2514
+ "absolute left-0.5 top-0.5 rounded-full bg-white shadow-md border border-gray-200 transition-transform duration-200",
2515
+ sizeThumbClass,
2516
+ currentChecked && thumbShiftClass,
2517
+ currentChecked && thumbActive,
2518
+ disabled && "border-gray-300"
2519
+ )
2520
+ }
1729
2521
  )
1730
2522
  }
1731
2523
  )
1732
- }
1733
- )
1734
- ] }),
1735
- (label || description) && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: tailwindMerge.twMerge("flex flex-col leading-tight", labelClassName), children: [
1736
- label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-gray-900", children: label }),
1737
- description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-gray-600", children: description })
1738
- ] })
1739
- ] });
2524
+ ] }),
2525
+ (label || description) && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: tailwindMerge.twMerge("flex flex-col leading-tight", labelClassName), children: [
2526
+ label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-gray-900", children: label }),
2527
+ description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-gray-600", children: description })
2528
+ ] })
2529
+ ]
2530
+ }
2531
+ );
1740
2532
  }
1741
2533
  );
1742
2534
  Switch.displayName = "Switch";
1743
2535
  var Switch_default = Switch;
2536
+ var sizeClasses3 = {
2537
+ "x-small": "text-xs",
2538
+ small: "text-sm",
2539
+ medium: "text-base",
2540
+ large: "text-lg",
2541
+ "x-large": "text-2xl"
2542
+ };
2543
+ var colorClasses = {
2544
+ primary: "text-primary",
2545
+ neutral: "text-gray-700",
2546
+ info: "text-sky-600",
2547
+ success: "text-emerald-600",
2548
+ warning: "text-amber-600",
2549
+ danger: "text-red-600",
2550
+ surface: "text-gray-900",
2551
+ bw: "text-black"
2552
+ };
2553
+ var Icon = ({ className, icon, size, color, ...rest }) => {
2554
+ const normalizeMdiName = (value) => {
2555
+ const trimmed = value.trim();
2556
+ if (!trimmed) {
2557
+ return "";
2558
+ }
2559
+ if (trimmed.includes(" ")) {
2560
+ return trimmed;
2561
+ }
2562
+ return trimmed.startsWith("mdi-") ? trimmed : `mdi-${trimmed}`;
2563
+ };
2564
+ let iconValue = "";
2565
+ if (typeof icon === "string") {
2566
+ iconValue = normalizeMdiName(icon);
2567
+ } else if (Array.isArray(icon)) {
2568
+ const [group, name] = icon;
2569
+ if (group === "mdi") {
2570
+ iconValue = normalizeMdiName(name);
2571
+ }
2572
+ }
2573
+ const classBase = "mdi";
2574
+ const sizeClass = size ? sizeClasses3[size] ?? sizeClasses3.medium : void 0;
2575
+ const colorClass = color ? colorClasses[color] ?? colorClasses.primary : void 0;
2576
+ return /* @__PURE__ */ jsxRuntime.jsx("i", { ...rest, className: tailwindMerge.twMerge(classBase, iconValue, sizeClass, colorClass, className) });
2577
+ };
2578
+ var Icon_default = Icon;
1744
2579
 
1745
2580
  exports.Button = Button_default;
1746
2581
  exports.Card = Card_default;
@@ -1748,10 +2583,15 @@ exports.Chip = Chip_default;
1748
2583
  exports.Dialog = Dialog_default;
1749
2584
  exports.ExpansionPanel = ExpansionPanel_default;
1750
2585
  exports.ExpansionPanelItem = ExpansionPanelItem_default;
2586
+ exports.Hero = Hero_default;
2587
+ exports.Icon = Icon_default;
1751
2588
  exports.Input = Input_default;
1752
2589
  exports.List = List_default;
1753
2590
  exports.ListItem = Item_default;
2591
+ exports.Masonry = Masonry_default;
1754
2592
  exports.Menu = Menu_default;
2593
+ exports.ProfileCard = ProfileCard_default;
2594
+ exports.Select = Select_default;
1755
2595
  exports.Slider = Slider_default;
1756
2596
  exports.Switch = Switch_default;
1757
2597
  exports.ToolTip = ToolTip_default;