@lindle/linoardo 1.0.18 → 1.0.20

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 (130) hide show
  1. package/dist/card.cjs +81 -19
  2. package/dist/card.cjs.map +1 -1
  3. package/dist/card.d.cts +8 -1
  4. package/dist/card.d.ts +8 -1
  5. package/dist/card.js +1 -1
  6. package/dist/chip.cjs +9 -1
  7. package/dist/chip.cjs.map +1 -1
  8. package/dist/chip.d.cts +3 -0
  9. package/dist/chip.d.ts +3 -0
  10. package/dist/chip.js +1 -1
  11. package/dist/chunk-36T6I3XH.js +167 -0
  12. package/dist/chunk-36T6I3XH.js.map +1 -0
  13. package/dist/{chunk-N65GNKRG.js → chunk-5LWU5T2C.js} +48 -42
  14. package/dist/chunk-5LWU5T2C.js.map +1 -0
  15. package/dist/{chunk-PWK6MLZT.js → chunk-5PBPURGP.js} +11 -3
  16. package/dist/chunk-5PBPURGP.js.map +1 -0
  17. package/dist/{chunk-XFPBICJG.js → chunk-5WQW6YSJ.js} +12 -3
  18. package/dist/chunk-5WQW6YSJ.js.map +1 -0
  19. package/dist/{chunk-5GY2JCBO.js → chunk-AK7LFJI4.js} +16 -5
  20. package/dist/chunk-AK7LFJI4.js.map +1 -0
  21. package/dist/chunk-B5FW33K3.js +147 -0
  22. package/dist/chunk-B5FW33K3.js.map +1 -0
  23. package/dist/{chunk-AOHXZ7OM.js → chunk-GMDNSU26.js} +19 -5
  24. package/dist/chunk-GMDNSU26.js.map +1 -0
  25. package/dist/chunk-HAXGOTZO.js +94 -0
  26. package/dist/chunk-HAXGOTZO.js.map +1 -0
  27. package/dist/chunk-HEXJCQRO.js +51 -0
  28. package/dist/chunk-HEXJCQRO.js.map +1 -0
  29. package/dist/{chunk-GA6HSRN6.js → chunk-KRYWWWXR.js} +20 -7
  30. package/dist/chunk-KRYWWWXR.js.map +1 -0
  31. package/dist/{chunk-U6NAIIDI.js → chunk-LIEBZOLG.js} +42 -20
  32. package/dist/chunk-LIEBZOLG.js.map +1 -0
  33. package/dist/{chunk-E32P5AHO.js → chunk-LYP7V32H.js} +10 -4
  34. package/dist/chunk-LYP7V32H.js.map +1 -0
  35. package/dist/chunk-MFLH36XK.js +168 -0
  36. package/dist/chunk-MFLH36XK.js.map +1 -0
  37. package/dist/{chunk-QGQ66FJD.js → chunk-T37VPLS4.js} +2 -2
  38. package/dist/chunk-T37VPLS4.js.map +1 -0
  39. package/dist/{chunk-32KFNI6K.js → chunk-U2AL7XFY.js} +48 -28
  40. package/dist/chunk-U2AL7XFY.js.map +1 -0
  41. package/dist/dialog.cjs +40 -18
  42. package/dist/dialog.cjs.map +1 -1
  43. package/dist/dialog.d.cts +3 -0
  44. package/dist/dialog.d.ts +3 -0
  45. package/dist/dialog.js +1 -1
  46. package/dist/expansion-panel/item.cjs +11 -2
  47. package/dist/expansion-panel/item.cjs.map +1 -1
  48. package/dist/expansion-panel/item.js +1 -1
  49. package/dist/expansion-panel.cjs +25 -6
  50. package/dist/expansion-panel.cjs.map +1 -1
  51. package/dist/expansion-panel.js +2 -2
  52. package/dist/icon.cjs +53 -0
  53. package/dist/icon.cjs.map +1 -0
  54. package/dist/icon.d.cts +15 -0
  55. package/dist/icon.d.ts +15 -0
  56. package/dist/icon.js +3 -0
  57. package/dist/icon.js.map +1 -0
  58. package/dist/{index-Md3BuoGM.d.cts → index-B5n8tN2G.d.cts} +3 -0
  59. package/dist/{index-d_JuI06O.d.ts → index-D4-O-oJt.d.ts} +3 -0
  60. package/dist/index.cjs +956 -149
  61. package/dist/index.cjs.map +1 -1
  62. package/dist/index.d.cts +64 -3
  63. package/dist/index.d.ts +64 -3
  64. package/dist/index.js +296 -12
  65. package/dist/index.js.map +1 -1
  66. package/dist/input.cjs +104 -30
  67. package/dist/input.cjs.map +1 -1
  68. package/dist/input.d.cts +8 -19
  69. package/dist/input.d.ts +8 -19
  70. package/dist/input.js +1 -1
  71. package/dist/list/item.cjs +10 -1
  72. package/dist/list/item.cjs.map +1 -1
  73. package/dist/list/item.d.cts +1 -1
  74. package/dist/list/item.d.ts +1 -1
  75. package/dist/list/item.js +1 -1
  76. package/dist/list.cjs +23 -3
  77. package/dist/list.cjs.map +1 -1
  78. package/dist/list.d.cts +5 -2
  79. package/dist/list.d.ts +5 -2
  80. package/dist/list.js +2 -2
  81. package/dist/masonry.cjs +116 -0
  82. package/dist/masonry.cjs.map +1 -0
  83. package/dist/masonry.d.cts +45 -0
  84. package/dist/masonry.d.ts +45 -0
  85. package/dist/masonry.js +3 -0
  86. package/dist/masonry.js.map +1 -0
  87. package/dist/menu.cjs.map +1 -1
  88. package/dist/menu.d.cts +3 -0
  89. package/dist/menu.d.ts +3 -0
  90. package/dist/menu.js +1 -1
  91. package/dist/select.cjs +173 -0
  92. package/dist/select.cjs.map +1 -0
  93. package/dist/select.d.cts +29 -0
  94. package/dist/select.d.ts +29 -0
  95. package/dist/select.js +3 -0
  96. package/dist/select.js.map +1 -0
  97. package/dist/slider.cjs +17 -3
  98. package/dist/slider.cjs.map +1 -1
  99. package/dist/slider.d.cts +3 -0
  100. package/dist/slider.d.ts +3 -0
  101. package/dist/slider.js +1 -1
  102. package/dist/styles.css +1096 -8
  103. package/dist/switch.cjs +46 -40
  104. package/dist/switch.cjs.map +1 -1
  105. package/dist/switch.d.cts +3 -0
  106. package/dist/switch.d.ts +3 -0
  107. package/dist/switch.js +1 -1
  108. package/dist/tooltip.cjs +46 -26
  109. package/dist/tooltip.cjs.map +1 -1
  110. package/dist/tooltip.d.cts +3 -0
  111. package/dist/tooltip.d.ts +3 -0
  112. package/dist/tooltip.js +1 -1
  113. package/dist/types-BCqIOkp1.d.cts +24 -0
  114. package/dist/types-ChXN4u7x.d.ts +24 -0
  115. package/package.json +29 -7
  116. package/readme.md +1 -0
  117. package/dist/chunk-32KFNI6K.js.map +0 -1
  118. package/dist/chunk-5GY2JCBO.js.map +0 -1
  119. package/dist/chunk-AOHXZ7OM.js.map +0 -1
  120. package/dist/chunk-E32P5AHO.js.map +0 -1
  121. package/dist/chunk-GA6HSRN6.js.map +0 -1
  122. package/dist/chunk-N65GNKRG.js.map +0 -1
  123. package/dist/chunk-PWK6MLZT.js.map +0 -1
  124. package/dist/chunk-PYG5SDNO.js +0 -98
  125. package/dist/chunk-PYG5SDNO.js.map +0 -1
  126. package/dist/chunk-QGQ66FJD.js.map +0 -1
  127. package/dist/chunk-U6NAIIDI.js.map +0 -1
  128. package/dist/chunk-V4BVJOSC.js +0 -85
  129. package/dist/chunk-V4BVJOSC.js.map +0 -1
  130. package/dist/chunk-XFPBICJG.js.map +0 -1
package/dist/index.cjs CHANGED
@@ -412,7 +412,15 @@ var Chip = React3.forwardRef(
412
412
  "aria-disabled": disabled || void 0,
413
413
  "aria-pressed": filter ? selected : void 0,
414
414
  "data-selected": selected || void 0,
415
- className: tailwindMerge.twMerge(chipBaseClasses, sizeClass, pillClass, variantClass, cursorClass, selectedClass, className),
415
+ className: tailwindMerge.twMerge(
416
+ chipBaseClasses,
417
+ sizeClass,
418
+ pillClass,
419
+ variantClass,
420
+ cursorClass,
421
+ selectedClass,
422
+ className
423
+ ),
416
424
  onClick: interactive ? handleClick : void 0,
417
425
  onKeyDown: interactive ? handleKeyDown : onKeyDown,
418
426
  children: [
@@ -546,7 +554,16 @@ var ListItem = React3__namespace.forwardRef((props, ref) => {
546
554
  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
555
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 flex-col gap-0.5 text-left", children: [
548
556
  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 }),
557
+ title && /* @__PURE__ */ jsxRuntime.jsx(
558
+ "span",
559
+ {
560
+ className: tailwindMerge.twMerge(
561
+ "truncate font-medium text-gray-900",
562
+ active ? accent.text : void 0
563
+ ),
564
+ children: title
565
+ }
566
+ ),
550
567
  subtitle && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-gray-500", children: subtitle }),
551
568
  children
552
569
  ] }),
@@ -619,7 +636,10 @@ var List = React3__namespace.forwardRef((props, ref) => {
619
636
  });
620
637
  }
621
638
  if (child.props && typeof child.props === "object" && "children" in child.props) {
622
- const nestedChildren = React3__namespace.Children.map(child.props.children, enhanceChild);
639
+ const nestedChildren = React3__namespace.Children.map(
640
+ child.props.children,
641
+ enhanceChild
642
+ );
623
643
  if (nestedChildren !== child.props.children) {
624
644
  return React3__namespace.cloneElement(child, void 0, nestedChildren);
625
645
  }
@@ -633,7 +653,15 @@ var List = React3__namespace.forwardRef((props, ref) => {
633
653
  ...rest,
634
654
  ref,
635
655
  role: role ?? "list",
636
- className: tailwindMerge.twMerge(listBaseClasses, variantClass, roundedClass, dividerClass, gapClass, navClass, className),
656
+ className: tailwindMerge.twMerge(
657
+ listBaseClasses,
658
+ variantClass,
659
+ roundedClass,
660
+ dividerClass,
661
+ gapClass,
662
+ navClass,
663
+ className
664
+ ),
637
665
  children: resolvedChildren
638
666
  }
639
667
  );
@@ -819,13 +847,17 @@ var traverseNode = (node, value) => {
819
847
  if (!React3.isValidElement(node)) {
820
848
  return { node, changed: false };
821
849
  }
822
- const { node: mappedChildren, changed: childrenChanged } = traverseNode(node.props.children, value);
823
- const shouldInject = hasMarker(node.type);
850
+ const element = node;
851
+ const { node: mappedChildren, changed: childrenChanged } = traverseNode(
852
+ element.props.children,
853
+ value
854
+ );
855
+ const shouldInject = hasMarker(element.type);
824
856
  if (!shouldInject && !childrenChanged) {
825
857
  return { node, changed: false };
826
858
  }
827
859
  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);
860
+ const cloned = mappedChildren === void 0 ? React3.cloneElement(element, injectedProps) : React3.cloneElement(element, injectedProps, mappedChildren);
829
861
  return { node: cloned, changed: true };
830
862
  };
831
863
  var injectExpansionPanelContext = (children, value) => traverseNode(children, value).node;
@@ -916,8 +948,17 @@ var ExpansionPanelItemInner = (props) => {
916
948
  const densityPadding = densityClasses2[density] ?? densityClasses2.default;
917
949
  const disabledClass = disabled ? "cursor-not-allowed opacity-60" : "cursor-pointer";
918
950
  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 });
951
+ const activeBorderClass = tailwindMerge.twMerge(
952
+ "border-l-2 border-transparent",
953
+ isExpanded ? accent.border : void 0
954
+ );
955
+ const defaultToggleIcon = /* @__PURE__ */ jsxRuntime.jsx(
956
+ "i",
957
+ {
958
+ className: "mdi mdi-chevron-down text-lg leading-none transition-transform duration-200",
959
+ "aria-hidden": true
960
+ }
961
+ );
921
962
  const hasContent = Boolean(children ?? text);
922
963
  const contentAnimationClass = isExpanded ? "pb-5 opacity-100" : "pb-0 opacity-0";
923
964
  const toggleIconNode = hideToggleIcon ? null : isExpanded && collapseIcon ? collapseIcon : expandIcon ?? defaultToggleIcon;
@@ -1120,7 +1161,13 @@ var ExpansionPanelInner = (props, forwardedRef) => {
1120
1161
  {
1121
1162
  ...rest,
1122
1163
  ref: forwardedRef,
1123
- className: tailwindMerge.twMerge("expansion-panel flex w-full flex-col text-gray-900", variantClass, shapeClass, layoutClass, className),
1164
+ className: tailwindMerge.twMerge(
1165
+ "expansion-panel flex w-full flex-col text-gray-900",
1166
+ variantClass,
1167
+ shapeClass,
1168
+ layoutClass,
1169
+ className
1170
+ ),
1124
1171
  children: enhancedChildren
1125
1172
  }
1126
1173
  );
@@ -1196,24 +1243,46 @@ var Dialog = React3__namespace.forwardRef((props, forwardedRef) => {
1196
1243
  ) : null;
1197
1244
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1198
1245
  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
1246
+ shouldRenderDialog ? /* @__PURE__ */ jsxRuntime.jsxs(
1247
+ "div",
1248
+ {
1249
+ className: tailwindMerge.twMerge(containerBaseClasses, containerClassName),
1250
+ "data-state": state,
1251
+ "aria-hidden": !open,
1252
+ children: [
1253
+ overlayNode,
1254
+ /* @__PURE__ */ jsxRuntime.jsx(
1255
+ "div",
1256
+ {
1257
+ className: tailwindMerge.twMerge(
1258
+ panelWrapperClasses,
1259
+ fullscreen ? "h-full items-stretch" : "mx-auto"
1260
+ ),
1261
+ "data-state": state,
1262
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1263
+ "div",
1264
+ {
1265
+ ...rest,
1266
+ ref: forwardedRef,
1267
+ id,
1268
+ role: roleProp,
1269
+ tabIndex,
1270
+ "aria-modal": ariaModal,
1271
+ className: tailwindMerge.twMerge(
1272
+ panelBaseClasses,
1273
+ fullscreen ? "h-full w-full max-w-none rounded-none" : void 0,
1274
+ className
1275
+ ),
1276
+ style: resolvedStyle,
1277
+ "data-state": state,
1278
+ children
1279
+ }
1280
+ )
1281
+ }
1282
+ )
1283
+ ]
1284
+ }
1285
+ ) : null
1217
1286
  ] });
1218
1287
  });
1219
1288
  Dialog.displayName = "Dialog";
@@ -1248,19 +1317,19 @@ var arrowPlacementClasses = {
1248
1317
  bottom: "left-1/2 bottom-full -translate-x-1/2 translate-y-1/2",
1249
1318
  "bottom-start": "left-4 bottom-full translate-y-1/2",
1250
1319
  "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"
1320
+ left: "left-full top-1/2 -translate-y-1/2 -translate-x-1/2",
1321
+ "left-start": "left-full top-4 -translate-x-1/2",
1322
+ "left-end": "left-full bottom-4 -translate-x-1/2",
1323
+ right: "right-full top-1/2 -translate-y-1/2 translate-x-1/2",
1324
+ "right-start": "right-full top-4 translate-x-1/2",
1325
+ "right-end": "right-full bottom-4 translate-x-1/2"
1257
1326
  };
1258
1327
  var ToolTip = React3__namespace.forwardRef((props, forwardedRef) => {
1259
1328
  const {
1260
1329
  activator,
1261
1330
  children,
1262
1331
  placement = "top",
1263
- arrow = true,
1332
+ arrow = false,
1264
1333
  disabled = false,
1265
1334
  persistent = false,
1266
1335
  showOnHover = true,
@@ -1301,25 +1370,45 @@ var ToolTip = React3__namespace.forwardRef((props, forwardedRef) => {
1301
1370
  }
1302
1371
  return classes.join(" ");
1303
1372
  })();
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
- ] });
1373
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1374
+ "span",
1375
+ {
1376
+ className: tailwindMerge.twMerge(wrapperBaseClasses, "group/tooltip", wrapperClassName),
1377
+ "data-disabled": disabled || void 0,
1378
+ children: [
1379
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex max-w-full", children: activator }),
1380
+ shouldRenderTooltip ? /* @__PURE__ */ jsxRuntime.jsxs(
1381
+ "div",
1382
+ {
1383
+ ...rest,
1384
+ ref: forwardedRef,
1385
+ role: "tooltip",
1386
+ id,
1387
+ "aria-hidden": persistent || disabled ? void 0 : true,
1388
+ className: tailwindMerge.twMerge(
1389
+ tooltipBaseClasses,
1390
+ placementClasses2[placement],
1391
+ visibilityClasses,
1392
+ pointerClasses,
1393
+ className
1394
+ ),
1395
+ style: resolvedStyle,
1396
+ children: [
1397
+ children,
1398
+ arrow && /* @__PURE__ */ jsxRuntime.jsx(
1399
+ "span",
1400
+ {
1401
+ className: tailwindMerge.twMerge(arrowBaseClasses, arrowPlacementClasses[placement]),
1402
+ "aria-hidden": true,
1403
+ "data-arrow": true
1404
+ }
1405
+ )
1406
+ ]
1407
+ }
1408
+ ) : null
1409
+ ]
1410
+ }
1411
+ );
1323
1412
  });
1324
1413
  ToolTip.displayName = "ToolTip";
1325
1414
  var ToolTip_default = ToolTip;
@@ -1329,22 +1418,31 @@ var paddingClasses = {
1329
1418
  md: "p-4",
1330
1419
  lg: "p-6"
1331
1420
  };
1332
- var cardBase = "card-base relative w-full overflow-hidden bg-white text-gray-900 transition-colors";
1421
+ 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
1422
  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) {
1423
+ 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",
1424
+ outline: "rounded-2xl border border-gray-300 bg-white shadow-none dark:border-slate-700 dark:bg-slate-900",
1425
+ text: "rounded-2xl border border-transparent bg-transparent shadow-none dark:border-transparent dark:bg-transparent",
1426
+ ghost: "rounded-2xl border border-transparent bg-gray-50 shadow-none dark:border-transparent dark:bg-slate-800",
1427
+ filled: "rounded-2xl border border-gray-200 bg-gray-50 shadow-sm dark:border-slate-800 dark:bg-slate-800 dark:shadow-black/20",
1428
+ 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",
1429
+ rounded: "rounded-3xl border border-gray-200 bg-white shadow-md dark:border-slate-800 dark:bg-slate-900 dark:shadow-black/25",
1430
+ sharp: "rounded-none border border-gray-200 bg-white shadow-md dark:border-slate-800 dark:bg-slate-900 dark:shadow-black/25"
1431
+ };
1432
+ var CardRoot = React3.forwardRef(function Card({
1433
+ className,
1434
+ children,
1435
+ variant = "solid",
1436
+ padding = "md",
1437
+ interactive = false,
1438
+ dividers = true,
1439
+ ...rest
1440
+ }, ref) {
1344
1441
  const variantClass = variantClasses[variant] ?? variantClasses.solid;
1345
1442
  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;
1443
+ 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
1444
  const tabIndexValue = interactive && rest.tabIndex === void 0 ? 0 : rest.tabIndex;
1445
+ const content = applyDividers(children, dividers);
1348
1446
  return /* @__PURE__ */ jsxRuntime.jsx(
1349
1447
  "div",
1350
1448
  {
@@ -1352,28 +1450,60 @@ var CardRoot = React3.forwardRef(function Card({ className, children, variant =
1352
1450
  ref,
1353
1451
  tabIndex: tabIndexValue,
1354
1452
  className: tailwindMerge.twMerge(cardBase, variantClass, paddingClass, interactiveClass, className),
1355
- children
1453
+ children: content
1356
1454
  }
1357
1455
  );
1358
1456
  });
1359
- var CardHeader = ({ className, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx(
1457
+ var CardHeader = ({ className, dividers = true, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx(
1360
1458
  "div",
1361
1459
  {
1362
1460
  ...rest,
1363
- className: tailwindMerge.twMerge("card-header mb-2 flex flex-col gap-1 border-b border-gray-100 pb-3", className)
1461
+ className: tailwindMerge.twMerge(
1462
+ "card-header mb-2 flex flex-col gap-1 pb-3",
1463
+ dividers ? "border-b border-gray-100 dark:border-slate-800" : void 0,
1464
+ className
1465
+ )
1364
1466
  }
1365
1467
  );
1366
1468
  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(
1469
+ var CardFooter = ({ className, dividers = true, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx(
1368
1470
  "div",
1369
1471
  {
1370
1472
  ...rest,
1371
- className: tailwindMerge.twMerge("card-footer mt-3 flex flex-wrap items-center gap-3 border-t border-gray-100 pt-3", className)
1473
+ className: tailwindMerge.twMerge(
1474
+ "card-footer mt-3 flex flex-wrap items-center gap-3 pt-3",
1475
+ dividers ? "border-t border-gray-100 dark:border-slate-800" : void 0,
1476
+ className
1477
+ )
1478
+ }
1479
+ );
1480
+ var CardTitle = ({ className, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx(
1481
+ "h3",
1482
+ {
1483
+ ...rest,
1484
+ className: tailwindMerge.twMerge(
1485
+ "card-title text-lg font-semibold text-gray-900 dark:text-slate-50",
1486
+ className
1487
+ )
1488
+ }
1489
+ );
1490
+ var CardSubtitle = ({ className, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx(
1491
+ "p",
1492
+ {
1493
+ ...rest,
1494
+ className: tailwindMerge.twMerge(
1495
+ "card-subtitle text-sm font-medium text-gray-600 dark:text-slate-300",
1496
+ className
1497
+ )
1498
+ }
1499
+ );
1500
+ var CardText = ({ className, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx(
1501
+ "p",
1502
+ {
1503
+ ...rest,
1504
+ className: tailwindMerge.twMerge("card-text text-sm text-gray-700 dark:text-slate-200", className)
1372
1505
  }
1373
1506
  );
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
1507
  var CardMedia = ({ className, rounded = false, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx(
1378
1508
  "img",
1379
1509
  {
@@ -1399,6 +1529,388 @@ var Card2 = Object.assign(CardRoot, {
1399
1529
  Actions: CardActions
1400
1530
  });
1401
1531
  var Card_default = Card2;
1532
+ function applyDividers(children, dividers) {
1533
+ return React3.Children.map(children, (child) => {
1534
+ if (!React3.isValidElement(child)) return child;
1535
+ if (isDividerSection(child)) {
1536
+ return React3.cloneElement(child, { dividers: child.props.dividers ?? dividers });
1537
+ }
1538
+ if (hasNestedChildren(child)) {
1539
+ return React3.cloneElement(child, {
1540
+ children: applyDividers(child.props.children, dividers)
1541
+ });
1542
+ }
1543
+ return child;
1544
+ });
1545
+ }
1546
+ function isDividerSection(element) {
1547
+ return element.type === CardHeader || element.type === CardFooter;
1548
+ }
1549
+ function hasNestedChildren(element) {
1550
+ const props = element.props;
1551
+ return "children" in props;
1552
+ }
1553
+ var masonryBaseClass = "masonry-grid w-full";
1554
+ var itemBaseClass = "masonry-item block break-inside-avoid";
1555
+ var MasonryBase = (props, ref) => {
1556
+ const {
1557
+ items,
1558
+ renderItem,
1559
+ getKey,
1560
+ column = 2,
1561
+ columnWidth,
1562
+ maxColumn,
1563
+ gutter = 16,
1564
+ className,
1565
+ itemClassName,
1566
+ itemStyle,
1567
+ children,
1568
+ style,
1569
+ role = "list",
1570
+ ...rest
1571
+ } = props;
1572
+ const resolvedGutter = toCssLength(gutter);
1573
+ const columnCount = resolveColumnCount(column, maxColumn, Boolean(columnWidth));
1574
+ const layoutStyle = {
1575
+ columnGap: resolvedGutter,
1576
+ columnCount,
1577
+ columnWidth: columnWidth ? toCssLength(columnWidth) : void 0,
1578
+ columnFill: "balance",
1579
+ ...style
1580
+ };
1581
+ const wrapItem = (content, key) => /* @__PURE__ */ jsxRuntime.jsx(
1582
+ "div",
1583
+ {
1584
+ className: tailwindMerge.twMerge(itemBaseClass, itemClassName),
1585
+ style: { breakInside: "avoid", marginBottom: resolvedGutter, width: "100%", ...itemStyle },
1586
+ children: content
1587
+ },
1588
+ key
1589
+ );
1590
+ const renderedItems = items && items.length ? items.map((item, index) => {
1591
+ const content = resolveItemContent(item, index, renderItem);
1592
+ return wrapItem(content, resolveItemKey(item, index, getKey));
1593
+ }) : React3__namespace.Children.map(children, (child, index) => wrapItem(child, resolveChildKey(child, index))) ?? null;
1594
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ...rest, ref, role, className: tailwindMerge.twMerge(masonryBaseClass, className), style: layoutStyle, children: renderedItems });
1595
+ };
1596
+ var Masonry = React3__namespace.forwardRef(MasonryBase);
1597
+ Masonry.displayName = "Masonry";
1598
+ var Masonry_default = Masonry;
1599
+ function toCssLength(value) {
1600
+ if (value === void 0) return void 0;
1601
+ return typeof value === "number" ? `${value}px` : value;
1602
+ }
1603
+ function normalizeColumns(value) {
1604
+ if (value === void 0) return void 0;
1605
+ if (!Number.isFinite(value)) return void 0;
1606
+ return Math.max(1, Math.floor(value));
1607
+ }
1608
+ function resolveColumnCount(column, maxColumn, hasColumnWidth) {
1609
+ const normalizedMax = normalizeColumns(maxColumn);
1610
+ if (hasColumnWidth) {
1611
+ return normalizedMax;
1612
+ }
1613
+ const normalizedColumn = normalizeColumns(column);
1614
+ if (normalizedColumn && normalizedMax) {
1615
+ return Math.min(normalizedColumn, normalizedMax);
1616
+ }
1617
+ return normalizedColumn ?? normalizedMax;
1618
+ }
1619
+ function resolveItemKey(item, index, getKey) {
1620
+ if (getKey) return getKey(item, index);
1621
+ if (React3__namespace.isValidElement(item) && item.key != null) {
1622
+ return item.key;
1623
+ }
1624
+ return index;
1625
+ }
1626
+ function resolveChildKey(child, index) {
1627
+ if (React3__namespace.isValidElement(child) && child.key != null) {
1628
+ return child.key;
1629
+ }
1630
+ return index;
1631
+ }
1632
+ function resolveItemContent(item, index, renderItem) {
1633
+ if (renderItem) {
1634
+ return renderItem(item, index);
1635
+ }
1636
+ return item;
1637
+ }
1638
+ var containerVariants = {
1639
+ solid: "bg-gradient-to-br from-primary via-primary/90 to-indigo-600 text-white shadow-2xl shadow-primary/30",
1640
+ outline: "border border-gray-200 bg-white text-gray-900",
1641
+ text: "bg-transparent text-gray-900",
1642
+ ghost: "bg-primary/5 text-gray-900 border border-primary/10",
1643
+ filled: "bg-slate-900 text-white shadow-2xl shadow-slate-900/40",
1644
+ underlined: "border-b-4 border-primary/70 bg-white text-gray-900",
1645
+ rounded: "rounded-3xl border border-gray-100 bg-white text-gray-900 shadow-xl",
1646
+ sharp: "rounded-none border border-gray-200 bg-white text-gray-900 shadow"
1647
+ };
1648
+ var frameRadii = {
1649
+ solid: "rounded-3xl",
1650
+ outline: "rounded-2xl",
1651
+ text: "rounded-2xl",
1652
+ ghost: "rounded-2xl",
1653
+ filled: "rounded-3xl",
1654
+ underlined: "rounded-2xl",
1655
+ rounded: "rounded-3xl",
1656
+ sharp: "rounded-none"
1657
+ };
1658
+ var badgeVariants = {
1659
+ solid: "bg-white/10 text-white border border-white/20",
1660
+ outline: "bg-primary/10 text-primary border border-primary/20",
1661
+ text: "bg-primary/10 text-primary border border-primary/20",
1662
+ ghost: "bg-primary/15 text-primary border border-primary/25",
1663
+ filled: "bg-white/10 text-white border border-white/20",
1664
+ underlined: "bg-primary/10 text-primary border border-primary/20",
1665
+ rounded: "bg-primary/10 text-primary border border-primary/20",
1666
+ sharp: "bg-primary/10 text-primary border border-primary/20"
1667
+ };
1668
+ var Hero = ({
1669
+ title,
1670
+ description,
1671
+ eyebrow,
1672
+ actions = [],
1673
+ stats = [],
1674
+ logos = [],
1675
+ image,
1676
+ variant = "solid",
1677
+ className,
1678
+ ...rest
1679
+ }) => {
1680
+ const containerClass = tailwindMerge.twMerge(
1681
+ "hero-block relative isolate overflow-hidden",
1682
+ containerVariants[variant] ?? containerVariants.solid,
1683
+ className
1684
+ );
1685
+ const badgeClass = tailwindMerge.twMerge(
1686
+ "inline-flex items-center gap-2 rounded-full px-3 py-1 text-xs font-semibold uppercase tracking-wide",
1687
+ badgeVariants[variant] ?? badgeVariants.solid
1688
+ );
1689
+ const isDark = variant === "solid" || variant === "filled";
1690
+ const subdued = isDark ? "text-white/80" : "text-gray-600";
1691
+ const statMuted = isDark ? "text-white/70" : "text-gray-500";
1692
+ 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";
1693
+ 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";
1694
+ const frameRadius = frameRadii[variant] ?? "rounded-2xl";
1695
+ 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";
1696
+ const renderAction = (action, index) => {
1697
+ const { href, label, onClick, variant: actionVariant = "primary" } = action;
1698
+ const Component = href ? "a" : "button";
1699
+ const resolvedClass = actionVariant === "secondary" ? tailwindMerge.twMerge("bg-white/70", actionSecondary) : tailwindMerge.twMerge("shadow-lg shadow-primary/25", actionPrimary);
1700
+ return /* @__PURE__ */ jsxRuntime.jsx(
1701
+ Component,
1702
+ {
1703
+ href,
1704
+ onClick,
1705
+ className: tailwindMerge.twMerge(
1706
+ "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",
1707
+ resolvedClass
1708
+ ),
1709
+ children: label
1710
+ },
1711
+ `${label}-${index}`
1712
+ );
1713
+ };
1714
+ return /* @__PURE__ */ jsxRuntime.jsxs("section", { ...rest, className: containerClass, children: [
1715
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pointer-events-none absolute inset-0 overflow-hidden", children: [
1716
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute left-24 top-10 h-64 w-64 rounded-full bg-primary/15 blur-3xl" }),
1717
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -right-16 -bottom-10 h-80 w-80 rounded-full bg-primary/20 blur-3xl" })
1718
+ ] }),
1719
+ /* @__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: [
1720
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid items-center gap-12 lg:grid-cols-2", children: [
1721
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
1722
+ eyebrow && /* @__PURE__ */ jsxRuntime.jsx("span", { className: badgeClass, children: eyebrow }),
1723
+ /* @__PURE__ */ jsxRuntime.jsx(
1724
+ "h1",
1725
+ {
1726
+ className: tailwindMerge.twMerge(
1727
+ "text-4xl font-semibold leading-tight sm:text-5xl",
1728
+ isDark ? "text-white" : "text-gray-900"
1729
+ ),
1730
+ children: title
1731
+ }
1732
+ ),
1733
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: tailwindMerge.twMerge("text-lg leading-relaxed", subdued), children: description }),
1734
+ actions.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-3", children: actions.map(renderAction) }),
1735
+ 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: [
1736
+ /* @__PURE__ */ jsxRuntime.jsx("dd", { className: tailwindMerge.twMerge("text-3xl font-semibold", isDark ? "text-white" : "text-gray-900"), children: stat.value }),
1737
+ /* @__PURE__ */ jsxRuntime.jsx("dt", { className: tailwindMerge.twMerge("text-sm font-medium", statMuted), children: stat.label })
1738
+ ] }, stat.label)) })
1739
+ ] }),
1740
+ image && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: tailwindMerge.twMerge("relative overflow-hidden backdrop-blur", frameDecoration, frameRadius), children: [
1741
+ /* @__PURE__ */ jsxRuntime.jsx(
1742
+ "img",
1743
+ {
1744
+ src: image.src,
1745
+ alt: image.alt ?? "",
1746
+ className: tailwindMerge.twMerge("h-full w-full object-cover", frameRadius),
1747
+ loading: "lazy"
1748
+ }
1749
+ ),
1750
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pointer-events-none absolute inset-0 bg-linear-to-t from-black/30 via-transparent to-transparent" })
1751
+ ] }) })
1752
+ ] }),
1753
+ logos.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-6 lg:items-center lg:gap-10", children: [
1754
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: tailwindMerge.twMerge("text-sm font-semibold tracking-wide", subdued), children: "Duveruji nam" }),
1755
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap items-center gap-4 opacity-80", children: logos.map((logo) => /* @__PURE__ */ jsxRuntime.jsx(
1756
+ "img",
1757
+ {
1758
+ src: logo.src,
1759
+ alt: logo.alt ?? "",
1760
+ className: "h-8 w-auto grayscale transition hover:grayscale-0",
1761
+ loading: "lazy"
1762
+ },
1763
+ logo.src
1764
+ )) })
1765
+ ] })
1766
+ ] })
1767
+ ] });
1768
+ };
1769
+ Hero.displayName = "Hero";
1770
+ var Hero_default = Hero;
1771
+ var variantMap = {
1772
+ solid: "bg-white text-gray-900 border border-gray-200 shadow-lg shadow-gray-200/60",
1773
+ outline: "bg-white text-gray-900 border border-gray-300",
1774
+ text: "bg-transparent text-gray-900",
1775
+ ghost: "bg-slate-50 text-gray-900 border border-slate-100",
1776
+ filled: "bg-slate-900 text-white shadow-2xl shadow-slate-900/30",
1777
+ underlined: "bg-white text-gray-900 border-b-4 border-primary/70",
1778
+ rounded: "bg-white text-gray-900 border border-gray-200 rounded-3xl shadow-md",
1779
+ sharp: "bg-white text-gray-900 border border-gray-200 rounded-none shadow"
1780
+ };
1781
+ var radiusMap = {
1782
+ solid: "rounded-2xl",
1783
+ outline: "rounded-2xl",
1784
+ text: "rounded-2xl",
1785
+ ghost: "rounded-2xl",
1786
+ filled: "rounded-3xl",
1787
+ underlined: "rounded-2xl",
1788
+ rounded: "rounded-3xl",
1789
+ sharp: "rounded-none"
1790
+ };
1791
+ var isDarkVariant = (variant) => variant === "filled";
1792
+ var SocialIcons = ({ socials = [], dark }) => {
1793
+ if (socials.length === 0) return null;
1794
+ const iconBase = tailwindMerge.twMerge(
1795
+ "flex h-10 w-10 items-center justify-center rounded-full border text-lg transition",
1796
+ dark ? "border-white/30 text-white hover:bg-white/10" : "border-gray-200 text-gray-600 hover:border-primary/50 hover:text-primary"
1797
+ );
1798
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-2", children: socials.map((link) => /* @__PURE__ */ jsxRuntime.jsx("a", { href: link.href, "aria-label": link.label ?? link.icon, className: iconBase, children: /* @__PURE__ */ jsxRuntime.jsx("i", { className: tailwindMerge.twMerge("mdi", link.icon), "aria-hidden": true }) }, link.href)) });
1799
+ };
1800
+ var Badges = ({ badges = [], dark }) => {
1801
+ if (badges.length === 0) return null;
1802
+ const badgeBase = tailwindMerge.twMerge(
1803
+ "inline-flex items-center rounded-full px-3 py-1 mb-2 text-xs font-semibold",
1804
+ dark ? "bg-white/10 text-white border border-white/20" : "bg-primary/10 text-primary border border-primary/15"
1805
+ );
1806
+ 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)) });
1807
+ };
1808
+ var AvatarFrame = ({
1809
+ avatar,
1810
+ size = "md",
1811
+ ring,
1812
+ radius
1813
+ }) => {
1814
+ const dimension = size === "lg" ? "h-28 w-28" : "h-20 w-20";
1815
+ const ringClass = ring ? "ring-4 ring-white/80 ring-offset-4 ring-offset-transparent" : "";
1816
+ return /* @__PURE__ */ jsxRuntime.jsx(
1817
+ "div",
1818
+ {
1819
+ className: tailwindMerge.twMerge(
1820
+ "overflow-hidden bg-gradient-to-br from-primary/10 to-primary/30",
1821
+ radius,
1822
+ dimension,
1823
+ ringClass
1824
+ ),
1825
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1826
+ "img",
1827
+ {
1828
+ src: avatar.src,
1829
+ alt: avatar.alt ?? "",
1830
+ className: tailwindMerge.twMerge("h-full w-full object-cover", radius),
1831
+ loading: "lazy"
1832
+ }
1833
+ )
1834
+ }
1835
+ );
1836
+ };
1837
+ var ProfileCard = ({
1838
+ name,
1839
+ role,
1840
+ description,
1841
+ avatar,
1842
+ socials,
1843
+ badges,
1844
+ layout = "classic",
1845
+ variant = "solid",
1846
+ className,
1847
+ ...rest
1848
+ }) => {
1849
+ const baseVariant = variantMap[variant] ?? variantMap.solid;
1850
+ const radius = radiusMap[variant] ?? "rounded-2xl";
1851
+ const dark = isDarkVariant(variant);
1852
+ const muted = dark ? "text-white/70" : "text-gray-600";
1853
+ const accent = dark ? "text-white" : "text-gray-900";
1854
+ const content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1855
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
1856
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
1857
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarFrame, { avatar, radius }),
1858
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1859
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: tailwindMerge.twMerge("text-xl font-semibold", accent), children: name }),
1860
+ role && /* @__PURE__ */ jsxRuntime.jsx("p", { className: tailwindMerge.twMerge("text-sm font-medium", muted), children: role })
1861
+ ] })
1862
+ ] }),
1863
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: tailwindMerge.twMerge("text-sm leading-relaxed", muted), children: description }),
1864
+ /* @__PURE__ */ jsxRuntime.jsx(Badges, { badges, dark })
1865
+ ] }),
1866
+ /* @__PURE__ */ jsxRuntime.jsx(SocialIcons, { socials, dark })
1867
+ ] });
1868
+ const spotlightContent = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative overflow-hidden", children: [
1869
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 bg-gradient-to-br from-primary/10 via-transparent to-primary/20 blur-3xl" }),
1870
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex flex-col gap-6 md:flex-row md:items-center", children: [
1871
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarFrame, { avatar, size: "lg", ring: true, radius }),
1872
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
1873
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: tailwindMerge.twMerge("text-2xl font-semibold", accent), children: name }),
1874
+ role && /* @__PURE__ */ jsxRuntime.jsx("p", { className: tailwindMerge.twMerge("text-sm font-medium uppercase tracking-wide", muted), children: role }),
1875
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: tailwindMerge.twMerge("text-sm leading-relaxed", muted), children: description }),
1876
+ /* @__PURE__ */ jsxRuntime.jsx(Badges, { badges, dark }),
1877
+ /* @__PURE__ */ jsxRuntime.jsx(SocialIcons, { socials, dark })
1878
+ ] })
1879
+ ] })
1880
+ ] });
1881
+ const splitContent = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid gap-6 md:grid-cols-[auto,1fr] md:items-center", children: [
1882
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarFrame, { avatar, size: "lg", ring: true, radius }),
1883
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
1884
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1885
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: tailwindMerge.twMerge("text-2xl font-semibold", accent), children: name }),
1886
+ role && /* @__PURE__ */ jsxRuntime.jsx("p", { className: tailwindMerge.twMerge("text-sm font-medium", muted), children: role })
1887
+ ] }),
1888
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: tailwindMerge.twMerge("text-sm leading-relaxed", muted), children: description }),
1889
+ /* @__PURE__ */ jsxRuntime.jsx(Badges, { badges, dark }),
1890
+ /* @__PURE__ */ jsxRuntime.jsx(SocialIcons, { socials, dark })
1891
+ ] })
1892
+ ] });
1893
+ const layoutMap = {
1894
+ classic: content,
1895
+ split: splitContent,
1896
+ spotlight: spotlightContent
1897
+ };
1898
+ return /* @__PURE__ */ jsxRuntime.jsx(
1899
+ "article",
1900
+ {
1901
+ ...rest,
1902
+ className: tailwindMerge.twMerge(
1903
+ "profile-card relative overflow-hidden p-6 transition duration-200 hover:-translate-y-0.5 hover:shadow-xl",
1904
+ baseVariant,
1905
+ radius,
1906
+ className
1907
+ ),
1908
+ children: layoutMap[layout] ?? layoutMap.classic
1909
+ }
1910
+ );
1911
+ };
1912
+ ProfileCard.displayName = "ProfileCard";
1913
+ var ProfileCard_default = ProfileCard;
1402
1914
 
1403
1915
  // src/Form/Input/states.input.ts
1404
1916
  var resolveIconClassName3 = (icon) => {
@@ -1426,37 +1938,49 @@ var resolveIconClassName3 = (icon) => {
1426
1938
  const classes = [...baseClasses, normalizedName];
1427
1939
  return Array.from(new Set(classes)).join(" ");
1428
1940
  };
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
1941
  var Input = ({
1441
1942
  variant = "outline",
1943
+ size = "medium",
1442
1944
  success,
1443
1945
  error,
1444
1946
  warn,
1445
1947
  icon,
1446
1948
  className,
1447
1949
  wrapperClassName,
1950
+ label,
1448
1951
  ...props
1449
1952
  }) => {
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"
1953
+ const { placeholder, onFocus, onBlur, ...inputProps } = props;
1954
+ const reactId = React3__namespace.default.useId();
1955
+ const hasLabel = Boolean(label);
1956
+ const hasProvidedPlaceholder = typeof placeholder === "string" && placeholder.trim().length > 0;
1957
+ const hidePlaceholderUntilFocus = hasLabel && hasProvidedPlaceholder;
1958
+ const [isFocused, setIsFocused] = React3__namespace.default.useState(false);
1959
+ 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";
1960
+ const variantClasses3 = {
1961
+ 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",
1962
+ 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",
1963
+ outline: "rounded border border-gray-300 bg-transparent focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30 dark:border-gray-600 dark:bg-transparent dark:focus-visible:border-primary/70 dark:focus-visible:ring-primary/40",
1964
+ 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",
1965
+ 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",
1966
+ 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",
1967
+ 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",
1968
+ 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"
1969
+ };
1970
+ const sizeClasses4 = {
1971
+ "x-small": { paddingNoIcon: "px-2 py-2", paddingWithIcon: "pl-8 pr-2 py-2", text: "text-xs" },
1972
+ small: {
1973
+ paddingNoIcon: "px-2.5 py-2.5",
1974
+ paddingWithIcon: "pl-9 pr-2.5 py-2.5",
1975
+ text: "text-sm"
1976
+ },
1977
+ medium: { paddingNoIcon: "px-3 py-3", paddingWithIcon: "pl-10 pr-3 py-3", text: "text-base" },
1978
+ large: {
1979
+ paddingNoIcon: "px-3.5 py-3.5",
1980
+ paddingWithIcon: "pl-11 pr-3.5 py-3.5",
1981
+ text: "text-lg"
1982
+ },
1983
+ "x-large": { paddingNoIcon: "px-4 py-4", paddingWithIcon: "pl-12 pr-4 py-4", text: "text-xl" }
1460
1984
  };
1461
1985
  const status = error ? { tone: "error", message: error } : warn ? { tone: "warn", message: warn } : success ? { tone: "success", message: success } : void 0;
1462
1986
  const statusClasses = {
@@ -1465,24 +1989,81 @@ var Input = ({
1465
1989
  success: "border-emerald-500 focus:border-emerald-500 focus:ring-emerald-400"
1466
1990
  };
1467
1991
  const statusMessageClasses = {
1468
- error: "text-red-600",
1469
- warn: "text-amber-600",
1470
- success: "text-emerald-600"
1992
+ error: "text-red-600 dark:text-red-300",
1993
+ warn: "text-amber-600 dark:text-amber-300",
1994
+ success: "text-emerald-600 dark:text-emerald-300"
1471
1995
  };
1472
- const variantClass = variantClasses2[variant] ?? variantClasses2.outline;
1996
+ const variantClass = variantClasses3[variant] ?? variantClasses3.outline;
1473
1997
  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();
1998
+ let prependIconClass = resolveIconClassName3(icon);
1999
+ const sizeConfig = sizeClasses4[size] ?? sizeClasses4.medium;
2000
+ const sizeClass = [
2001
+ prependIconClass ? sizeConfig.paddingWithIcon : sizeConfig.paddingNoIcon,
2002
+ sizeConfig.text
2003
+ ].join(" ");
2004
+ const inputName = inputProps.name || reactId;
2005
+ const basePlaceholder = placeholder ?? (hasLabel ? " " : void 0);
2006
+ const placeholderValue = hidePlaceholderUntilFocus ? isFocused ? placeholder : " " : basePlaceholder;
2007
+ const placeholderClass = hidePlaceholderUntilFocus ? "placeholder-transparent focus:placeholder-gray-500 focus:dark:placeholder-gray-400" : void 0;
2008
+ const labelLeftClass = prependIconClass ? "left-10" : "left-3";
2009
+ const labelBgDefault = ["outline", "text", "underlined"].includes(variant) ? "bg-transparent" : "bg-white/90 dark:bg-slate-900";
2010
+ const handleFocus = (event) => {
2011
+ if (hidePlaceholderUntilFocus) setIsFocused(true);
2012
+ onFocus?.(event);
2013
+ };
2014
+ const handleBlur = (event) => {
2015
+ if (hidePlaceholderUntilFocus) setIsFocused(false);
2016
+ onBlur?.(event);
2017
+ };
1477
2018
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: tailwindMerge.twMerge("flex flex-col gap-1", wrapperClassName), children: [
1478
2019
  /* @__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 }),
2020
+ prependIconClass && /* @__PURE__ */ jsxRuntime.jsx(
2021
+ "i",
2022
+ {
2023
+ className: tailwindMerge.twMerge(
2024
+ "pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-gray-500 dark:text-gray-400",
2025
+ status?.tone && statusMessageClasses[status?.tone] || "",
2026
+ prependIconClass
2027
+ ),
2028
+ "aria-hidden": true
2029
+ }
2030
+ ),
1480
2031
  /* @__PURE__ */ jsxRuntime.jsx(
1481
2032
  "input",
1482
2033
  {
1483
- ...props,
1484
- className: tailwindMerge.twMerge(classBase, variantClass, toneClass, prependPadding, className),
1485
- name: inputName
2034
+ ...inputProps,
2035
+ id: inputName,
2036
+ name: inputName,
2037
+ placeholder: placeholderValue,
2038
+ onFocus: handleFocus,
2039
+ onBlur: handleBlur,
2040
+ className: tailwindMerge.twMerge(
2041
+ "peer",
2042
+ classBase,
2043
+ variantClass,
2044
+ toneClass,
2045
+ sizeClass,
2046
+ placeholderClass,
2047
+ className
2048
+ )
2049
+ }
2050
+ ),
2051
+ label && /* @__PURE__ */ jsxRuntime.jsx(
2052
+ "label",
2053
+ {
2054
+ htmlFor: inputName,
2055
+ className: tailwindMerge.twMerge(
2056
+ "absolute transition-all duration-150 pointer-events-none text-gray-700 dark:text-gray-200",
2057
+ labelLeftClass,
2058
+ // Floated state: center label's vertical middle on the top border line
2059
+ "top-0 -translate-y-2/3 text-xs px-1",
2060
+ labelBgDefault,
2061
+ // focus state mirrors floated state (keeps center on border)
2062
+ "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",
2063
+ // when input is empty (placeholder shown) -> center label inside input
2064
+ "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"
2065
+ ),
2066
+ children: label
1486
2067
  }
1487
2068
  )
1488
2069
  ] }),
@@ -1490,8 +2071,170 @@ var Input = ({
1490
2071
  ] });
1491
2072
  };
1492
2073
  var Input_default = Input;
2074
+
2075
+ // src/utils/helpers/randomStr.ts
2076
+ var characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
2077
+ function generateString(length = 5) {
2078
+ let result = "";
2079
+ const charactersLength = characters.length;
2080
+ for (let i = 0; i < length; i++) {
2081
+ result += characters.charAt(Math.floor(Math.random() * charactersLength));
2082
+ }
2083
+ return result;
2084
+ }
2085
+ 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";
2086
+ var variantClasses2 = {
2087
+ solid: "rounded border border-gray-400 bg-white shadow-sm focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30",
2088
+ sharp: "rounded-none border border-gray-400 bg-white shadow-sm focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30",
2089
+ outline: "rounded border border-gray-300 bg-transparent focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30",
2090
+ 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",
2091
+ 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",
2092
+ filled: "rounded border border-gray-200 bg-gray-100 focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/25",
2093
+ 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",
2094
+ 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"
2095
+ };
2096
+ var sizeClasses2 = {
2097
+ "x-small": { padding: "pl-2 pr-8 py-2", text: "text-xs" },
2098
+ small: { padding: "pl-2.5 pr-9 py-2.5", text: "text-sm" },
2099
+ medium: { padding: "pl-3 pr-10 py-3", text: "text-base" },
2100
+ large: { padding: "pl-3.5 pr-11 py-3.5", text: "text-lg" },
2101
+ "x-large": { padding: "pl-4 pr-12 py-4", text: "text-xl" }
2102
+ };
2103
+ var normalizeOption = (option) => {
2104
+ if (typeof option === "string") {
2105
+ return { label: option, value: option };
2106
+ }
2107
+ return option;
2108
+ };
2109
+ var Select = ({
2110
+ options,
2111
+ label,
2112
+ placeholder,
2113
+ variant = "outline",
2114
+ size = "medium",
2115
+ className,
2116
+ wrapperClassName,
2117
+ id,
2118
+ name,
2119
+ multiple,
2120
+ onFocus,
2121
+ onBlur,
2122
+ onChange,
2123
+ value,
2124
+ defaultValue,
2125
+ ...props
2126
+ }) => {
2127
+ const selectId = id || name || generateString();
2128
+ const selectName = name || selectId;
2129
+ const variantClass = variantClasses2[variant] ?? variantClasses2.outline;
2130
+ const sizeConfig = sizeClasses2[size] ?? sizeClasses2.medium;
2131
+ const sizeClass = `${sizeConfig.padding} ${sizeConfig.text}`;
2132
+ const normalizedOptions = options.map(normalizeOption);
2133
+ const hasLabel = Boolean(label);
2134
+ const hasProvidedPlaceholder = typeof placeholder === "string" && placeholder.trim().length > 0;
2135
+ const hidePlaceholderUntilFocus = hasLabel && hasProvidedPlaceholder && !multiple;
2136
+ const placeholderText = placeholder ?? (hasLabel ? " " : void 0);
2137
+ const [isFocused, setIsFocused] = React3__namespace.default.useState(false);
2138
+ const [hasValue, setHasValue] = React3__namespace.default.useState(() => {
2139
+ const initial = value ?? defaultValue;
2140
+ if (initial === void 0 || initial === null) return false;
2141
+ if (multiple) {
2142
+ if (Array.isArray(initial)) return initial.length > 0;
2143
+ return String(initial).length > 0;
2144
+ }
2145
+ if (Array.isArray(initial)) {
2146
+ if (initial.length === 0) return false;
2147
+ return String(initial[0]).length > 0;
2148
+ }
2149
+ return String(initial).length > 0;
2150
+ });
2151
+ const isControlled = value !== void 0;
2152
+ React3__namespace.default.useEffect(() => {
2153
+ if (!isControlled) return;
2154
+ if (value === void 0 || value === null) {
2155
+ setHasValue(false);
2156
+ return;
2157
+ }
2158
+ if (multiple) {
2159
+ if (Array.isArray(value)) {
2160
+ setHasValue(value.length > 0);
2161
+ } else {
2162
+ setHasValue(String(value).length > 0);
2163
+ }
2164
+ return;
2165
+ }
2166
+ if (Array.isArray(value)) {
2167
+ setHasValue(value.length > 0 ? String(value[0]).length > 0 : false);
2168
+ return;
2169
+ }
2170
+ setHasValue(String(value).length > 0);
2171
+ }, [isControlled, multiple, value]);
2172
+ const placeholderOptionLabel = hidePlaceholderUntilFocus && !isFocused ? " " : placeholderText;
2173
+ const shouldRenderPlaceholder = !multiple && placeholderText !== void 0;
2174
+ const labelShouldFloat = hasValue || isFocused;
2175
+ const labelLeftClass = "left-3";
2176
+ const labelBgDefault = ["outline", "text", "underlined"].includes(variant) ? "bg-transparent" : "bg-white/90";
2177
+ const handleFocus = (event) => {
2178
+ if (hidePlaceholderUntilFocus) setIsFocused(true);
2179
+ onFocus?.(event);
2180
+ };
2181
+ const handleBlur = (event) => {
2182
+ if (hidePlaceholderUntilFocus) setIsFocused(false);
2183
+ onBlur?.(event);
2184
+ };
2185
+ const handleChange = (event) => {
2186
+ if (!isControlled) {
2187
+ const nextHasValue = multiple ? event.target.selectedOptions.length > 0 : event.target.value !== "";
2188
+ setHasValue(nextHasValue);
2189
+ }
2190
+ onChange?.(event);
2191
+ };
2192
+ 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: [
2193
+ /* @__PURE__ */ jsxRuntime.jsxs(
2194
+ "select",
2195
+ {
2196
+ ...props,
2197
+ id: selectId,
2198
+ name: selectName,
2199
+ multiple,
2200
+ value,
2201
+ defaultValue: value === void 0 ? defaultValue : void 0,
2202
+ onFocus: handleFocus,
2203
+ onBlur: handleBlur,
2204
+ onChange: handleChange,
2205
+ className: tailwindMerge.twMerge("peer", baseClass, variantClass, sizeClass, className),
2206
+ children: [
2207
+ shouldRenderPlaceholder && /* @__PURE__ */ jsxRuntime.jsx("option", { value: "", disabled: props.required, hidden: hasValue, children: placeholderOptionLabel }),
2208
+ normalizedOptions.map((option, index) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: option.value, disabled: option.disabled, children: option.label }, `${selectId}-${option.value}-${index}`))
2209
+ ]
2210
+ }
2211
+ ),
2212
+ !multiple && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "pointer-events-none absolute inset-y-0 right-3 flex items-center text-gray-500", children: /* @__PURE__ */ jsxRuntime.jsx("i", { className: "mdi mdi-chevron-down text-base leading-none", "aria-hidden": true }) }),
2213
+ label && /* @__PURE__ */ jsxRuntime.jsx(
2214
+ "label",
2215
+ {
2216
+ htmlFor: selectId,
2217
+ className: tailwindMerge.twMerge(
2218
+ "absolute transition-all duration-150 pointer-events-none text-gray-700",
2219
+ labelLeftClass,
2220
+ labelShouldFloat ? [
2221
+ "top-0 text-xs px-1",
2222
+ isFocused ? "-translate-y-1/2 text-gray-600" : "-translate-y-2/3",
2223
+ labelBgDefault
2224
+ ].join(" ") : "top-1/2 -translate-y-1/2 text-sm text-gray-500"
2225
+ ),
2226
+ children: label
2227
+ }
2228
+ )
2229
+ ] }) });
2230
+ };
2231
+ var Select_default = Select;
1493
2232
  var paletteValues = {
1494
- primary: { fill: "var(--color-primary, #6366f1)", ring: "rgba(99, 102, 241, 0.28)", thumbBorder: "#6366f1" },
2233
+ primary: {
2234
+ fill: "var(--color-primary, #6366f1)",
2235
+ ring: "rgba(99, 102, 241, 0.28)",
2236
+ thumbBorder: "#6366f1"
2237
+ },
1495
2238
  neutral: { fill: "#4b5563", ring: "rgba(75, 85, 99, 0.28)", thumbBorder: "#4b5563" },
1496
2239
  info: { fill: "#0284c7", ring: "rgba(2, 132, 199, 0.28)", thumbBorder: "#0284c7" },
1497
2240
  success: { fill: "#059669", ring: "rgba(5, 150, 105, 0.24)", thumbBorder: "#059669" },
@@ -1501,9 +2244,19 @@ var paletteValues = {
1501
2244
  bw: { fill: "#000000", ring: "rgba(0, 0, 0, 0.26)", thumbBorder: "#000000" }
1502
2245
  };
1503
2246
  var sizeTokens = {
1504
- small: { trackHeight: "0.375rem", thumbSize: "1.1rem", trackClass: "h-1.5", valueClass: "text-xs" },
2247
+ small: {
2248
+ trackHeight: "0.375rem",
2249
+ thumbSize: "1.1rem",
2250
+ trackClass: "h-1.5",
2251
+ valueClass: "text-xs"
2252
+ },
1505
2253
  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" }
2254
+ large: {
2255
+ trackHeight: "0.6rem",
2256
+ thumbSize: "1.4rem",
2257
+ trackClass: "h-[0.65rem]",
2258
+ valueClass: "text-base"
2259
+ }
1507
2260
  };
1508
2261
  var clamp = (value, min, max) => Math.min(Math.max(value, min), max);
1509
2262
  var toNumber = (value, fallback) => {
@@ -1690,57 +2443,106 @@ var Switch = React3.forwardRef(
1690
2443
  const sizeThumbClass = thumbSizes[size] ?? thumbSizes.medium;
1691
2444
  const thumbShiftClass = thumbTranslate[size] ?? thumbTranslate.medium;
1692
2445
  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
2446
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2447
+ "label",
2448
+ {
2449
+ className: tailwindMerge.twMerge("flex items-center gap-3 select-none", pointerClass, wrapperClassName),
2450
+ children: [
2451
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "relative inline-flex items-center", children: [
2452
+ /* @__PURE__ */ jsxRuntime.jsx(
2453
+ "input",
2454
+ {
2455
+ ...rest,
2456
+ type: "checkbox",
2457
+ ref,
2458
+ checked: currentChecked,
2459
+ onChange: handleChange,
2460
+ disabled,
2461
+ className: "peer sr-only"
2462
+ }
1718
2463
  ),
1719
- "aria-hidden": true,
1720
- children: /* @__PURE__ */ jsxRuntime.jsx(
2464
+ /* @__PURE__ */ jsxRuntime.jsx(
1721
2465
  "span",
1722
2466
  {
1723
2467
  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"
2468
+ "block rounded-full border border-transparent transition-all duration-200",
2469
+ sizeTrackClass,
2470
+ currentChecked ? paletteTrack.active : paletteTrack.inactive,
2471
+ disabled && "bg-gray-200",
2472
+ "peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2",
2473
+ focusClass,
2474
+ className
2475
+ ),
2476
+ "aria-hidden": true,
2477
+ children: /* @__PURE__ */ jsxRuntime.jsx(
2478
+ "span",
2479
+ {
2480
+ className: tailwindMerge.twMerge(
2481
+ "absolute left-0.5 top-0.5 rounded-full bg-white shadow-md border border-gray-200 transition-transform duration-200",
2482
+ sizeThumbClass,
2483
+ currentChecked && thumbShiftClass,
2484
+ currentChecked && thumbActive,
2485
+ disabled && "border-gray-300"
2486
+ )
2487
+ }
1729
2488
  )
1730
2489
  }
1731
2490
  )
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
- ] });
2491
+ ] }),
2492
+ (label || description) && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: tailwindMerge.twMerge("flex flex-col leading-tight", labelClassName), children: [
2493
+ label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-gray-900", children: label }),
2494
+ description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-gray-600", children: description })
2495
+ ] })
2496
+ ]
2497
+ }
2498
+ );
1740
2499
  }
1741
2500
  );
1742
2501
  Switch.displayName = "Switch";
1743
2502
  var Switch_default = Switch;
2503
+ var sizeClasses3 = {
2504
+ "x-small": "text-xs",
2505
+ small: "text-sm",
2506
+ medium: "text-base",
2507
+ large: "text-lg",
2508
+ "x-large": "text-2xl"
2509
+ };
2510
+ var colorClasses = {
2511
+ primary: "text-primary",
2512
+ neutral: "text-gray-700",
2513
+ info: "text-sky-600",
2514
+ success: "text-emerald-600",
2515
+ warning: "text-amber-600",
2516
+ danger: "text-red-600",
2517
+ surface: "text-gray-900",
2518
+ bw: "text-black"
2519
+ };
2520
+ var Icon = ({ className, icon, size, color, ...rest }) => {
2521
+ const normalizeMdiName = (value) => {
2522
+ const trimmed = value.trim();
2523
+ if (!trimmed) {
2524
+ return "";
2525
+ }
2526
+ if (trimmed.includes(" ")) {
2527
+ return trimmed;
2528
+ }
2529
+ return trimmed.startsWith("mdi-") ? trimmed : `mdi-${trimmed}`;
2530
+ };
2531
+ let iconValue = "";
2532
+ if (typeof icon === "string") {
2533
+ iconValue = normalizeMdiName(icon);
2534
+ } else if (Array.isArray(icon)) {
2535
+ const [group, name] = icon;
2536
+ if (group === "mdi") {
2537
+ iconValue = normalizeMdiName(name);
2538
+ }
2539
+ }
2540
+ const classBase = "mdi";
2541
+ const sizeClass = size ? sizeClasses3[size] ?? sizeClasses3.medium : void 0;
2542
+ const colorClass = color ? colorClasses[color] ?? colorClasses.primary : void 0;
2543
+ return /* @__PURE__ */ jsxRuntime.jsx("i", { ...rest, className: tailwindMerge.twMerge(classBase, iconValue, sizeClass, colorClass, className) });
2544
+ };
2545
+ var Icon_default = Icon;
1744
2546
 
1745
2547
  exports.Button = Button_default;
1746
2548
  exports.Card = Card_default;
@@ -1748,10 +2550,15 @@ exports.Chip = Chip_default;
1748
2550
  exports.Dialog = Dialog_default;
1749
2551
  exports.ExpansionPanel = ExpansionPanel_default;
1750
2552
  exports.ExpansionPanelItem = ExpansionPanelItem_default;
2553
+ exports.Hero = Hero_default;
2554
+ exports.Icon = Icon_default;
1751
2555
  exports.Input = Input_default;
1752
2556
  exports.List = List_default;
1753
2557
  exports.ListItem = Item_default;
2558
+ exports.Masonry = Masonry_default;
1754
2559
  exports.Menu = Menu_default;
2560
+ exports.ProfileCard = ProfileCard_default;
2561
+ exports.Select = Select_default;
1755
2562
  exports.Slider = Slider_default;
1756
2563
  exports.Switch = Switch_default;
1757
2564
  exports.ToolTip = ToolTip_default;