@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.
- package/dist/card.cjs +81 -19
- package/dist/card.cjs.map +1 -1
- package/dist/card.d.cts +8 -1
- package/dist/card.d.ts +8 -1
- package/dist/card.js +1 -1
- package/dist/chip.cjs +9 -1
- package/dist/chip.cjs.map +1 -1
- package/dist/chip.d.cts +3 -0
- package/dist/chip.d.ts +3 -0
- package/dist/chip.js +1 -1
- package/dist/chunk-36T6I3XH.js +167 -0
- package/dist/chunk-36T6I3XH.js.map +1 -0
- package/dist/{chunk-N65GNKRG.js → chunk-5LWU5T2C.js} +48 -42
- package/dist/chunk-5LWU5T2C.js.map +1 -0
- package/dist/{chunk-PWK6MLZT.js → chunk-5PBPURGP.js} +11 -3
- package/dist/chunk-5PBPURGP.js.map +1 -0
- package/dist/{chunk-XFPBICJG.js → chunk-5WQW6YSJ.js} +12 -3
- package/dist/chunk-5WQW6YSJ.js.map +1 -0
- package/dist/{chunk-5GY2JCBO.js → chunk-AK7LFJI4.js} +16 -5
- package/dist/chunk-AK7LFJI4.js.map +1 -0
- package/dist/chunk-B5FW33K3.js +147 -0
- package/dist/chunk-B5FW33K3.js.map +1 -0
- package/dist/{chunk-AOHXZ7OM.js → chunk-GMDNSU26.js} +19 -5
- package/dist/chunk-GMDNSU26.js.map +1 -0
- package/dist/chunk-HAXGOTZO.js +94 -0
- package/dist/chunk-HAXGOTZO.js.map +1 -0
- package/dist/chunk-HEXJCQRO.js +51 -0
- package/dist/chunk-HEXJCQRO.js.map +1 -0
- package/dist/{chunk-GA6HSRN6.js → chunk-KRYWWWXR.js} +20 -7
- package/dist/chunk-KRYWWWXR.js.map +1 -0
- package/dist/{chunk-U6NAIIDI.js → chunk-LIEBZOLG.js} +42 -20
- package/dist/chunk-LIEBZOLG.js.map +1 -0
- package/dist/{chunk-E32P5AHO.js → chunk-LYP7V32H.js} +10 -4
- package/dist/chunk-LYP7V32H.js.map +1 -0
- package/dist/chunk-MFLH36XK.js +168 -0
- package/dist/chunk-MFLH36XK.js.map +1 -0
- package/dist/{chunk-QGQ66FJD.js → chunk-T37VPLS4.js} +2 -2
- package/dist/chunk-T37VPLS4.js.map +1 -0
- package/dist/{chunk-32KFNI6K.js → chunk-U2AL7XFY.js} +48 -28
- package/dist/chunk-U2AL7XFY.js.map +1 -0
- package/dist/dialog.cjs +40 -18
- package/dist/dialog.cjs.map +1 -1
- package/dist/dialog.d.cts +3 -0
- package/dist/dialog.d.ts +3 -0
- package/dist/dialog.js +1 -1
- package/dist/expansion-panel/item.cjs +11 -2
- package/dist/expansion-panel/item.cjs.map +1 -1
- package/dist/expansion-panel/item.js +1 -1
- package/dist/expansion-panel.cjs +25 -6
- package/dist/expansion-panel.cjs.map +1 -1
- package/dist/expansion-panel.js +2 -2
- package/dist/icon.cjs +53 -0
- package/dist/icon.cjs.map +1 -0
- package/dist/icon.d.cts +15 -0
- package/dist/icon.d.ts +15 -0
- package/dist/icon.js +3 -0
- package/dist/icon.js.map +1 -0
- package/dist/{index-Md3BuoGM.d.cts → index-B5n8tN2G.d.cts} +3 -0
- package/dist/{index-d_JuI06O.d.ts → index-D4-O-oJt.d.ts} +3 -0
- package/dist/index.cjs +956 -149
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +64 -3
- package/dist/index.d.ts +64 -3
- package/dist/index.js +296 -12
- package/dist/index.js.map +1 -1
- package/dist/input.cjs +104 -30
- package/dist/input.cjs.map +1 -1
- package/dist/input.d.cts +8 -19
- package/dist/input.d.ts +8 -19
- package/dist/input.js +1 -1
- package/dist/list/item.cjs +10 -1
- package/dist/list/item.cjs.map +1 -1
- package/dist/list/item.d.cts +1 -1
- package/dist/list/item.d.ts +1 -1
- package/dist/list/item.js +1 -1
- package/dist/list.cjs +23 -3
- package/dist/list.cjs.map +1 -1
- package/dist/list.d.cts +5 -2
- package/dist/list.d.ts +5 -2
- package/dist/list.js +2 -2
- package/dist/masonry.cjs +116 -0
- package/dist/masonry.cjs.map +1 -0
- package/dist/masonry.d.cts +45 -0
- package/dist/masonry.d.ts +45 -0
- package/dist/masonry.js +3 -0
- package/dist/masonry.js.map +1 -0
- package/dist/menu.cjs.map +1 -1
- package/dist/menu.d.cts +3 -0
- package/dist/menu.d.ts +3 -0
- package/dist/menu.js +1 -1
- package/dist/select.cjs +173 -0
- package/dist/select.cjs.map +1 -0
- package/dist/select.d.cts +29 -0
- package/dist/select.d.ts +29 -0
- package/dist/select.js +3 -0
- package/dist/select.js.map +1 -0
- package/dist/slider.cjs +17 -3
- package/dist/slider.cjs.map +1 -1
- package/dist/slider.d.cts +3 -0
- package/dist/slider.d.ts +3 -0
- package/dist/slider.js +1 -1
- package/dist/styles.css +1096 -8
- package/dist/switch.cjs +46 -40
- package/dist/switch.cjs.map +1 -1
- package/dist/switch.d.cts +3 -0
- package/dist/switch.d.ts +3 -0
- package/dist/switch.js +1 -1
- package/dist/tooltip.cjs +46 -26
- package/dist/tooltip.cjs.map +1 -1
- package/dist/tooltip.d.cts +3 -0
- package/dist/tooltip.d.ts +3 -0
- package/dist/tooltip.js +1 -1
- package/dist/types-BCqIOkp1.d.cts +24 -0
- package/dist/types-ChXN4u7x.d.ts +24 -0
- package/package.json +29 -7
- package/readme.md +1 -0
- package/dist/chunk-32KFNI6K.js.map +0 -1
- package/dist/chunk-5GY2JCBO.js.map +0 -1
- package/dist/chunk-AOHXZ7OM.js.map +0 -1
- package/dist/chunk-E32P5AHO.js.map +0 -1
- package/dist/chunk-GA6HSRN6.js.map +0 -1
- package/dist/chunk-N65GNKRG.js.map +0 -1
- package/dist/chunk-PWK6MLZT.js.map +0 -1
- package/dist/chunk-PYG5SDNO.js +0 -98
- package/dist/chunk-PYG5SDNO.js.map +0 -1
- package/dist/chunk-QGQ66FJD.js.map +0 -1
- package/dist/chunk-U6NAIIDI.js.map +0 -1
- package/dist/chunk-V4BVJOSC.js +0 -85
- package/dist/chunk-V4BVJOSC.js.map +0 -1
- 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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
823
|
-
const
|
|
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(
|
|
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(
|
|
920
|
-
|
|
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(
|
|
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(
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
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: "
|
|
1252
|
-
"left-start": "
|
|
1253
|
-
"left-end": "
|
|
1254
|
-
right: "
|
|
1255
|
-
"right-start": "
|
|
1256
|
-
"right-end": "
|
|
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 =
|
|
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(
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
"
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
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({
|
|
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(
|
|
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(
|
|
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
|
|
1451
|
-
const
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
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 =
|
|
1996
|
+
const variantClass = variantClasses3[variant] ?? variantClasses3.outline;
|
|
1473
1997
|
const toneClass = status ? statusClasses[status.tone] : void 0;
|
|
1474
|
-
|
|
1475
|
-
const
|
|
1476
|
-
const
|
|
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(
|
|
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
|
-
...
|
|
1484
|
-
|
|
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: {
|
|
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: {
|
|
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: {
|
|
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(
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
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
|
-
|
|
1720
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2464
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1721
2465
|
"span",
|
|
1722
2466
|
{
|
|
1723
2467
|
className: tailwindMerge.twMerge(
|
|
1724
|
-
"
|
|
1725
|
-
|
|
1726
|
-
currentChecked
|
|
1727
|
-
|
|
1728
|
-
|
|
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
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
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;
|