@datatechsolutions/ui 2.7.138 → 2.7.140
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/{chunk-6Y3DK5EC.js → chunk-27M5YIVF.js} +68 -61
- package/dist/chunk-27M5YIVF.js.map +1 -0
- package/dist/{chunk-WURM4JVE.mjs → chunk-7VN2V7CT.mjs} +13 -6
- package/dist/chunk-7VN2V7CT.mjs.map +1 -0
- package/dist/{chunk-6KYBGBI4.mjs → chunk-BTJP5QCD.mjs} +13 -2
- package/dist/{chunk-6KYBGBI4.mjs.map → chunk-BTJP5QCD.mjs.map} +1 -1
- package/dist/{chunk-3OGFL5RQ.mjs → chunk-SCGWR7XZ.mjs} +356 -162
- package/dist/chunk-SCGWR7XZ.mjs.map +1 -0
- package/dist/{chunk-F4FMGGHO.js → chunk-ULPKAD4A.js} +13 -2
- package/dist/{chunk-F4FMGGHO.js.map → chunk-ULPKAD4A.js.map} +1 -1
- package/dist/{chunk-5IE2FIWT.js → chunk-WXI7OCNY.js} +355 -160
- package/dist/chunk-WXI7OCNY.js.map +1 -0
- package/dist/index.d.mts +30 -4
- package/dist/index.d.ts +30 -4
- package/dist/index.js +341 -337
- package/dist/index.mjs +1 -1
- package/dist/workflow/contracts.d.mts +13 -3
- package/dist/workflow/contracts.d.ts +13 -3
- package/dist/workflow/index.js +126 -125
- package/dist/workflow/index.js.map +1 -1
- package/dist/workflow/index.mjs +6 -5
- package/dist/workflow/index.mjs.map +1 -1
- package/dist/workflow/utils.js +4 -4
- package/dist/workflow/utils.mjs +1 -1
- package/dist/workflow/workflow-canvas.js +4 -4
- package/dist/workflow/workflow-canvas.mjs +3 -3
- package/package.json +1 -1
- package/dist/chunk-3OGFL5RQ.mjs.map +0 -1
- package/dist/chunk-5IE2FIWT.js.map +0 -1
- package/dist/chunk-6Y3DK5EC.js.map +0 -1
- package/dist/chunk-WURM4JVE.mjs.map +0 -1
|
@@ -656,7 +656,7 @@ function LoadingSpinner({ className }) {
|
|
|
656
656
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
657
657
|
"svg",
|
|
658
658
|
{
|
|
659
|
-
className: clsx__default.default("h-4 w-4 animate-spin", className),
|
|
659
|
+
className: clsx__default.default("h-4 w-4 animate-spin motion-reduce:animate-none", className),
|
|
660
660
|
xmlns: "http://www.w3.org/2000/svg",
|
|
661
661
|
fill: "none",
|
|
662
662
|
viewBox: "0 0 24 24",
|
|
@@ -766,7 +766,8 @@ function IconButton({
|
|
|
766
766
|
isIosColor && finalColor === "ios-red" && "text-[#FF3B30] dark:text-[#FF453A]",
|
|
767
767
|
isIosColor && finalColor === "ios-green" && "text-[#34C759] dark:text-[#30D158]",
|
|
768
768
|
isIosColor && finalColor === "ios-orange" && "text-[#FF9500] dark:text-[#FF9F0A]",
|
|
769
|
-
isIosColor && finalColor === "ios-purple" && "text-[#AF52DE] dark:text-[#BF5AF2]"
|
|
769
|
+
isIosColor && finalColor === "ios-purple" && "text-[#AF52DE] dark:text-[#BF5AF2]",
|
|
770
|
+
!isIosColor && "text-slate-700 dark:text-slate-300"
|
|
770
771
|
),
|
|
771
772
|
outline: clsx__default.default(
|
|
772
773
|
"bg-transparent border",
|
|
@@ -954,6 +955,7 @@ var Input = React11.forwardRef(
|
|
|
954
955
|
const helperId = `${inputId}-helper`;
|
|
955
956
|
const [isFocused, setIsFocused] = React11.useState(false);
|
|
956
957
|
const [showPassword, setShowPassword] = React11.useState(false);
|
|
958
|
+
const prefersReducedMotion2 = framerMotion.useReducedMotion();
|
|
957
959
|
const hasValue = value !== void 0 && value !== "";
|
|
958
960
|
const characterCount = typeof value === "string" ? value.length : 0;
|
|
959
961
|
const isOverLimit = maxCharacters ? characterCount > maxCharacters : false;
|
|
@@ -988,14 +990,14 @@ var Input = React11.forwardRef(
|
|
|
988
990
|
liquid-surface h-12 w-full rounded-xl border-0
|
|
989
991
|
px-4 py-3 text-base
|
|
990
992
|
text-slate-900 dark:text-white
|
|
991
|
-
placeholder:text-slate-
|
|
993
|
+
placeholder:text-slate-500 dark:placeholder:text-slate-500
|
|
992
994
|
transition-all duration-200
|
|
993
995
|
disabled:cursor-not-allowed disabled:opacity-50
|
|
994
996
|
` : `
|
|
995
997
|
liquid-surface h-11 w-full rounded-xl
|
|
996
998
|
px-3.5 py-2.5 text-base
|
|
997
999
|
text-slate-900 dark:text-white
|
|
998
|
-
placeholder:text-slate-
|
|
1000
|
+
placeholder:text-slate-500 dark:placeholder:text-slate-500
|
|
999
1001
|
transition-all duration-200
|
|
1000
1002
|
disabled:cursor-not-allowed disabled:opacity-50
|
|
1001
1003
|
`;
|
|
@@ -1023,7 +1025,7 @@ var Input = React11.forwardRef(
|
|
|
1023
1025
|
exit: { opacity: 0, scale: 0.8 },
|
|
1024
1026
|
transition: { duration: 0.15 },
|
|
1025
1027
|
onClick: togglePassword,
|
|
1026
|
-
className: "p-
|
|
1028
|
+
className: "p-2 min-h-[44px] min-w-[44px] flex items-center justify-center rounded-full text-slate-400 hover:text-slate-600 dark:hover:text-slate-300 hover:bg-white/40 dark:hover:bg-white/[0.08] transition-colors",
|
|
1027
1029
|
"aria-label": showPassword ? t("hidePassword") : t("showPassword"),
|
|
1028
1030
|
children: showPassword ? /* @__PURE__ */ jsxRuntime.jsx(solid.EyeSlashIcon, { className: "h-5 w-5" }) : /* @__PURE__ */ jsxRuntime.jsx(solid.EyeIcon, { className: "h-5 w-5" })
|
|
1029
1031
|
}
|
|
@@ -1037,7 +1039,8 @@ var Input = React11.forwardRef(
|
|
|
1037
1039
|
exit: { opacity: 0, scale: 0.8 },
|
|
1038
1040
|
transition: { duration: 0.15 },
|
|
1039
1041
|
onClick: handleClear,
|
|
1040
|
-
className: "p-
|
|
1042
|
+
className: "p-2 min-h-[44px] min-w-[44px] flex items-center justify-center rounded-full text-slate-400 hover:text-slate-600 dark:hover:text-slate-300 hover:bg-white/40 dark:hover:bg-white/[0.08] transition-colors",
|
|
1043
|
+
"aria-label": "Clear input",
|
|
1041
1044
|
children: /* @__PURE__ */ jsxRuntime.jsx(solid.XMarkIcon, { className: "h-5 w-5" })
|
|
1042
1045
|
}
|
|
1043
1046
|
) })
|
|
@@ -1065,7 +1068,7 @@ var Input = React11.forwardRef(
|
|
|
1065
1068
|
children: successMessage
|
|
1066
1069
|
}
|
|
1067
1070
|
),
|
|
1068
|
-
!error && !successMessage && helperText && /* @__PURE__ */ jsxRuntime.jsx("p", { id: helperId, className: "text-sm text-slate-
|
|
1071
|
+
!error && !successMessage && helperText && /* @__PURE__ */ jsxRuntime.jsx("p", { id: helperId, className: "text-sm text-slate-600 dark:text-slate-400", children: helperText })
|
|
1069
1072
|
] }),
|
|
1070
1073
|
showCharacterCount && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1071
1074
|
"span",
|
|
@@ -1108,16 +1111,33 @@ var Input = React11.forwardRef(
|
|
|
1108
1111
|
...props
|
|
1109
1112
|
}
|
|
1110
1113
|
),
|
|
1111
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1114
|
+
prefersReducedMotion2 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1115
|
+
"label",
|
|
1116
|
+
{
|
|
1117
|
+
htmlFor: inputId,
|
|
1118
|
+
className: `
|
|
1119
|
+
absolute left-3.5 pointer-events-none
|
|
1120
|
+
text-slate-500 dark:text-slate-400
|
|
1121
|
+
transition-all duration-200
|
|
1122
|
+
${icon ? "left-11" : ""}
|
|
1123
|
+
`,
|
|
1124
|
+
style: {
|
|
1125
|
+
top: hasValue || isFocused ? "0.5rem" : "50%",
|
|
1126
|
+
transform: hasValue || isFocused ? "none" : "translateY(-50%)",
|
|
1127
|
+
fontSize: hasValue || isFocused ? "0.75rem" : "1rem"
|
|
1128
|
+
},
|
|
1129
|
+
children: label
|
|
1130
|
+
}
|
|
1131
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1112
1132
|
framerMotion.motion.label,
|
|
1113
1133
|
{
|
|
1114
1134
|
htmlFor: inputId,
|
|
1115
1135
|
className: `
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1136
|
+
absolute left-3.5 pointer-events-none
|
|
1137
|
+
text-slate-500 dark:text-slate-400
|
|
1138
|
+
transition-all duration-200
|
|
1139
|
+
${icon ? "left-11" : ""}
|
|
1140
|
+
`,
|
|
1121
1141
|
initial: false,
|
|
1122
1142
|
animate: {
|
|
1123
1143
|
top: hasValue || isFocused ? "0.5rem" : "50%",
|
|
@@ -1589,11 +1609,11 @@ var Select = React11.forwardRef(
|
|
|
1589
1609
|
cursor-pointer
|
|
1590
1610
|
`,
|
|
1591
1611
|
children: [
|
|
1592
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: selectedOption ? "" : "text-slate-
|
|
1612
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: selectedOption ? "" : "text-slate-500", children: selectedOption?.label || placeholder }),
|
|
1593
1613
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1594
1614
|
solid.ChevronDownIcon,
|
|
1595
1615
|
{
|
|
1596
|
-
className: `h-5 w-5 text-slate-
|
|
1616
|
+
className: `h-5 w-5 text-slate-500 transition-transform duration-200
|
|
1597
1617
|
${isOpen ? "rotate-180" : ""}`
|
|
1598
1618
|
}
|
|
1599
1619
|
)
|
|
@@ -1630,7 +1650,7 @@ var Select = React11.forwardRef(
|
|
|
1630
1650
|
}
|
|
1631
1651
|
) })
|
|
1632
1652
|
] }),
|
|
1633
|
-
error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-ios-red", children: error })
|
|
1653
|
+
error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-ios-red", role: "alert", "aria-live": "polite", children: error })
|
|
1634
1654
|
] });
|
|
1635
1655
|
}
|
|
1636
1656
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
|
|
@@ -1662,11 +1682,11 @@ var Select = React11.forwardRef(
|
|
|
1662
1682
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1663
1683
|
solid.ChevronDownIcon,
|
|
1664
1684
|
{
|
|
1665
|
-
className: "absolute right-3 top-1/2 -translate-y-1/2 h-5 w-5 text-slate-
|
|
1685
|
+
className: "absolute right-3 top-1/2 -translate-y-1/2 h-5 w-5 text-slate-500 pointer-events-none"
|
|
1666
1686
|
}
|
|
1667
1687
|
)
|
|
1668
1688
|
] }),
|
|
1669
|
-
error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-ios-red", children: error })
|
|
1689
|
+
error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-ios-red", role: "alert", "aria-live": "polite", children: error })
|
|
1670
1690
|
] });
|
|
1671
1691
|
}
|
|
1672
1692
|
);
|
|
@@ -1714,13 +1734,13 @@ function DropdownSelect({
|
|
|
1714
1734
|
${error ? "border-ios-red ring-4 ring-ios-red/10" : ""}
|
|
1715
1735
|
`,
|
|
1716
1736
|
children: [
|
|
1717
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: selectedOption ? "" : "text-slate-
|
|
1737
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: selectedOption ? "" : "text-slate-500", children: selectedOption?.label || placeholder }),
|
|
1718
1738
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1719
1739
|
framerMotion.motion.div,
|
|
1720
1740
|
{
|
|
1721
1741
|
animate: { rotate: isOpen ? 180 : 0 },
|
|
1722
1742
|
transition: { duration: 0.2 },
|
|
1723
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(solid.ChevronDownIcon, { className: "h-5 w-5 text-slate-
|
|
1743
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(solid.ChevronDownIcon, { className: "h-5 w-5 text-slate-500" })
|
|
1724
1744
|
}
|
|
1725
1745
|
)
|
|
1726
1746
|
]
|
|
@@ -1764,7 +1784,7 @@ function DropdownSelect({
|
|
|
1764
1784
|
}
|
|
1765
1785
|
)
|
|
1766
1786
|
] }) }),
|
|
1767
|
-
error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-ios-red", children: error })
|
|
1787
|
+
error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-ios-red", role: "alert", "aria-live": "polite", children: error })
|
|
1768
1788
|
] });
|
|
1769
1789
|
}
|
|
1770
1790
|
var sizes = {
|
|
@@ -2014,24 +2034,46 @@ function HeroSection({
|
|
|
2014
2034
|
labelExtra,
|
|
2015
2035
|
children
|
|
2016
2036
|
}) {
|
|
2017
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2037
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2038
|
+
"div",
|
|
2039
|
+
{
|
|
2040
|
+
role: "banner",
|
|
2041
|
+
"data-testid": "hero-section",
|
|
2042
|
+
className: "liquid-surface overflow-hidden rounded-2xl",
|
|
2043
|
+
children: [
|
|
2044
|
+
gradient && /* @__PURE__ */ jsxRuntime.jsx("div", { className: `h-1.5 w-full bg-gradient-to-r ${gradient}` }),
|
|
2045
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-5 sm:p-8", children: [
|
|
2046
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-slate-600 dark:text-white/70", children: [
|
|
2047
|
+
icon,
|
|
2048
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium", children: label }),
|
|
2049
|
+
labelExtra
|
|
2050
|
+
] }),
|
|
2051
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2 flex flex-wrap items-center justify-between gap-4", children: [
|
|
2052
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2053
|
+
"h1",
|
|
2054
|
+
{
|
|
2055
|
+
"data-testid": "hero-title",
|
|
2056
|
+
className: "text-2xl font-bold tracking-tight text-slate-900 dark:text-white sm:text-4xl",
|
|
2057
|
+
children: title
|
|
2058
|
+
}
|
|
2059
|
+
),
|
|
2060
|
+
actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-3", children: actions })
|
|
2061
|
+
] }),
|
|
2062
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2063
|
+
"p",
|
|
2064
|
+
{
|
|
2065
|
+
"data-testid": "hero-subtitle",
|
|
2066
|
+
className: "mt-2 max-w-xl text-sm text-slate-500 dark:text-white/60 sm:mt-3 sm:text-lg",
|
|
2067
|
+
children: subtitle
|
|
2068
|
+
}
|
|
2069
|
+
),
|
|
2070
|
+
toolbar && /* @__PURE__ */ jsxRuntime.jsx("div", { "data-testid": "hero-toolbar", className: "mt-4", children: toolbar }),
|
|
2071
|
+
badges && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-6 flex flex-wrap items-center gap-4", children: badges }),
|
|
2072
|
+
children
|
|
2073
|
+
] })
|
|
2074
|
+
]
|
|
2075
|
+
}
|
|
2076
|
+
);
|
|
2035
2077
|
}
|
|
2036
2078
|
var DEFAULT_STYLE_CONFIG = {
|
|
2037
2079
|
default: {
|
|
@@ -2304,6 +2346,9 @@ function StatCard({
|
|
|
2304
2346
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2305
2347
|
"div",
|
|
2306
2348
|
{
|
|
2349
|
+
role: "status",
|
|
2350
|
+
"aria-label": label,
|
|
2351
|
+
"data-testid": label ? `stat-card-${label.toLowerCase().replace(/\s+/g, "-")}` : "stat-card",
|
|
2307
2352
|
onClick,
|
|
2308
2353
|
className: `group relative overflow-hidden rounded-xl p-5 transition-all duration-200 ${isClickable ? "cursor-pointer" : ""} ${isActive ? `bg-gradient-to-br ${colorConfig.activeGradient} ring-2 ring-offset-2 ${colorConfig.activeRing} shadow-xl` : `liquid-surface hover:shadow-md ${isFiltered ? "ring-indigo-300 dark:ring-indigo-500/50" : isUrgent ? "ring-amber-300 dark:ring-amber-500/50" : ""}`} ${className}`,
|
|
2309
2354
|
children: [
|
|
@@ -2335,6 +2380,7 @@ function StatCard({
|
|
|
2335
2380
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2336
2381
|
"p",
|
|
2337
2382
|
{
|
|
2383
|
+
"data-testid": "stat-card-value",
|
|
2338
2384
|
className: `mt-4 text-3xl font-bold ${isActive ? "text-white" : isUrgent ? colorConfig.urgentValueColor || colorConfig.valueColor : colorConfig.valueColor}`,
|
|
2339
2385
|
children: value
|
|
2340
2386
|
}
|
|
@@ -2342,6 +2388,7 @@ function StatCard({
|
|
|
2342
2388
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2343
2389
|
"p",
|
|
2344
2390
|
{
|
|
2391
|
+
"data-testid": "stat-card-label",
|
|
2345
2392
|
className: `mt-1 text-sm ${isActive ? "text-white/75" : "text-slate-500 dark:text-slate-400"}`,
|
|
2346
2393
|
children: label
|
|
2347
2394
|
}
|
|
@@ -2645,7 +2692,7 @@ function CircleSpinner({ size, color, className, ariaLabel }) {
|
|
|
2645
2692
|
"div",
|
|
2646
2693
|
{
|
|
2647
2694
|
className: clsx.clsx(
|
|
2648
|
-
"rounded-full animate-spin",
|
|
2695
|
+
"rounded-full animate-spin motion-reduce:animate-none",
|
|
2649
2696
|
config.size,
|
|
2650
2697
|
config.border,
|
|
2651
2698
|
colors3.track,
|
|
@@ -2660,9 +2707,10 @@ function CircleSpinner({ size, color, className, ariaLabel }) {
|
|
|
2660
2707
|
function DotsSpinner({ size, color, className, ariaLabel }) {
|
|
2661
2708
|
const config = sizeConfig[size];
|
|
2662
2709
|
const colors3 = colorClasses2[color];
|
|
2710
|
+
const prefersReducedMotion2 = framerMotion.useReducedMotion();
|
|
2663
2711
|
const dotVariants = {
|
|
2664
2712
|
initial: { scale: 0.8, opacity: 0.4 },
|
|
2665
|
-
animate: { scale: 1, opacity: 1 }
|
|
2713
|
+
animate: prefersReducedMotion2 ? { scale: 1, opacity: 1 } : { scale: 1, opacity: 1 }
|
|
2666
2714
|
};
|
|
2667
2715
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: clsx.clsx("flex items-center gap-1", className), role: "status", "aria-label": ariaLabel, children: [0, 1, 2].map((index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2668
2716
|
framerMotion.motion.div,
|
|
@@ -2675,7 +2723,7 @@ function DotsSpinner({ size, color, className, ariaLabel }) {
|
|
|
2675
2723
|
variants: dotVariants,
|
|
2676
2724
|
initial: "initial",
|
|
2677
2725
|
animate: "animate",
|
|
2678
|
-
transition: {
|
|
2726
|
+
transition: prefersReducedMotion2 ? { duration: 0 } : {
|
|
2679
2727
|
duration: 0.5,
|
|
2680
2728
|
repeat: Infinity,
|
|
2681
2729
|
repeatType: "reverse",
|
|
@@ -2688,16 +2736,17 @@ function DotsSpinner({ size, color, className, ariaLabel }) {
|
|
|
2688
2736
|
function PulseSpinner({ size, color, className, ariaLabel }) {
|
|
2689
2737
|
const config = sizeConfig[size];
|
|
2690
2738
|
const colors3 = colorClasses2[color];
|
|
2739
|
+
const prefersReducedMotion2 = framerMotion.useReducedMotion();
|
|
2691
2740
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: clsx.clsx("relative", config.size, className), role: "status", "aria-label": ariaLabel, children: [
|
|
2692
2741
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2693
2742
|
framerMotion.motion.div,
|
|
2694
2743
|
{
|
|
2695
2744
|
className: clsx.clsx("absolute inset-0 rounded-full", colors3.dot),
|
|
2696
|
-
animate: {
|
|
2745
|
+
animate: prefersReducedMotion2 ? {} : {
|
|
2697
2746
|
scale: [1, 1.5, 1],
|
|
2698
2747
|
opacity: [0.7, 0, 0.7]
|
|
2699
2748
|
},
|
|
2700
|
-
transition: {
|
|
2749
|
+
transition: prefersReducedMotion2 ? { duration: 0 } : {
|
|
2701
2750
|
duration: 1.5,
|
|
2702
2751
|
repeat: Infinity,
|
|
2703
2752
|
ease: "easeInOut"
|
|
@@ -2732,7 +2781,8 @@ function Spinner({
|
|
|
2732
2781
|
{
|
|
2733
2782
|
size,
|
|
2734
2783
|
color,
|
|
2735
|
-
className
|
|
2784
|
+
className,
|
|
2785
|
+
ariaLabel
|
|
2736
2786
|
}
|
|
2737
2787
|
);
|
|
2738
2788
|
}
|
|
@@ -3037,10 +3087,42 @@ function SegmentedControl({
|
|
|
3037
3087
|
chunkUZ3CMNUJ_js.triggerHaptic("light");
|
|
3038
3088
|
onChange(segmentValue);
|
|
3039
3089
|
};
|
|
3090
|
+
const handleKeyDown = React11.useCallback(
|
|
3091
|
+
(event) => {
|
|
3092
|
+
if (disabled) return;
|
|
3093
|
+
const currentIndex = normalizedSegments.findIndex((seg) => seg.value === value);
|
|
3094
|
+
let nextIndex = -1;
|
|
3095
|
+
if (event.key === "ArrowRight" || event.key === "ArrowDown") {
|
|
3096
|
+
event.preventDefault();
|
|
3097
|
+
nextIndex = (currentIndex + 1) % normalizedSegments.length;
|
|
3098
|
+
} else if (event.key === "ArrowLeft" || event.key === "ArrowUp") {
|
|
3099
|
+
event.preventDefault();
|
|
3100
|
+
nextIndex = (currentIndex - 1 + normalizedSegments.length) % normalizedSegments.length;
|
|
3101
|
+
} else if (event.key === "Home") {
|
|
3102
|
+
event.preventDefault();
|
|
3103
|
+
nextIndex = 0;
|
|
3104
|
+
} else if (event.key === "End") {
|
|
3105
|
+
event.preventDefault();
|
|
3106
|
+
nextIndex = normalizedSegments.length - 1;
|
|
3107
|
+
}
|
|
3108
|
+
if (nextIndex >= 0) {
|
|
3109
|
+
const nextSegment = normalizedSegments[nextIndex];
|
|
3110
|
+
onChange(nextSegment.value);
|
|
3111
|
+
chunkUZ3CMNUJ_js.triggerHaptic("light");
|
|
3112
|
+
const buttons = containerRef.current?.querySelectorAll("button");
|
|
3113
|
+
buttons?.[nextIndex]?.focus();
|
|
3114
|
+
}
|
|
3115
|
+
},
|
|
3116
|
+
[disabled, normalizedSegments, value, onChange]
|
|
3117
|
+
);
|
|
3040
3118
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3041
3119
|
"div",
|
|
3042
3120
|
{
|
|
3043
3121
|
ref: containerRef,
|
|
3122
|
+
role: "tablist",
|
|
3123
|
+
"aria-live": "polite",
|
|
3124
|
+
"data-testid": "segmented-control",
|
|
3125
|
+
onKeyDown: handleKeyDown,
|
|
3044
3126
|
className: `
|
|
3045
3127
|
relative inline-flex items-center rounded-xl
|
|
3046
3128
|
bg-white/40 dark:bg-white/[0.08]
|
|
@@ -3067,6 +3149,11 @@ function SegmentedControl({
|
|
|
3067
3149
|
"button",
|
|
3068
3150
|
{
|
|
3069
3151
|
type: "button",
|
|
3152
|
+
role: "tab",
|
|
3153
|
+
"aria-selected": isSelected,
|
|
3154
|
+
"aria-label": segment.label,
|
|
3155
|
+
tabIndex: isSelected ? 0 : -1,
|
|
3156
|
+
"data-testid": `tab-${segment.value}`,
|
|
3070
3157
|
onClick: () => handleSelect(segment.value),
|
|
3071
3158
|
className: `
|
|
3072
3159
|
relative z-10 flex items-center justify-center gap-1.5
|
|
@@ -4262,7 +4349,7 @@ function TableSkeletonRow({
|
|
|
4262
4349
|
"div",
|
|
4263
4350
|
{
|
|
4264
4351
|
className: clsx__default.default(
|
|
4265
|
-
"h-4 rounded bg-slate-200 dark:bg-slate-700 animate-pulse",
|
|
4352
|
+
"h-4 rounded bg-slate-200 dark:bg-slate-700 animate-pulse motion-reduce:animate-none",
|
|
4266
4353
|
i === 0 ? "w-32" : i === columns - 1 ? "w-16" : "w-24"
|
|
4267
4354
|
)
|
|
4268
4355
|
}
|
|
@@ -4943,7 +5030,7 @@ function DynamicIslandNotification({
|
|
|
4943
5030
|
icon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: `h-8 w-8 rounded-full ${styles2.iconBg} flex items-center justify-center shrink-0`, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-5 w-5 text-white", children: icon }) }),
|
|
4944
5031
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
4945
5032
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-semibold truncate", children: title }),
|
|
4946
|
-
message && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-gray-
|
|
5033
|
+
message && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-gray-500 truncate", children: message })
|
|
4947
5034
|
] })
|
|
4948
5035
|
] })
|
|
4949
5036
|
),
|
|
@@ -4954,7 +5041,7 @@ function DynamicIslandNotification({
|
|
|
4954
5041
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
4955
5042
|
appName && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `text-[11px] uppercase tracking-wide font-medium ${styles2.accentColor}`, children: appName }),
|
|
4956
5043
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[15px] font-semibold leading-tight", children: title }),
|
|
4957
|
-
message && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[13px] text-gray-
|
|
5044
|
+
message && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[13px] text-gray-500 mt-0.5 truncate", children: message })
|
|
4958
5045
|
] })
|
|
4959
5046
|
] })
|
|
4960
5047
|
)
|
|
@@ -5071,7 +5158,7 @@ function NotificationBellButton() {
|
|
|
5071
5158
|
children: [
|
|
5072
5159
|
/* @__PURE__ */ jsxRuntime.jsx(HeroIcons.BellIcon, { className: "h-5 w-5" }),
|
|
5073
5160
|
totalCount > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "absolute top-1 right-1 flex h-2 w-2", children: [
|
|
5074
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "animate-ping absolute inline-flex h-full w-full rounded-full bg-indigo-400 opacity-75" }),
|
|
5161
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "animate-ping motion-reduce:animate-none absolute inline-flex h-full w-full rounded-full bg-indigo-400 opacity-75" }),
|
|
5075
5162
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "relative inline-flex rounded-full h-2 w-2 bg-indigo-500" })
|
|
5076
5163
|
] }) : null
|
|
5077
5164
|
]
|
|
@@ -5178,7 +5265,7 @@ function NotificationDrawer({
|
|
|
5178
5265
|
{
|
|
5179
5266
|
type: "button",
|
|
5180
5267
|
onClick: () => onRemove(item.id),
|
|
5181
|
-
className: "absolute right-2.5 top-2.5 rounded-lg p-1 text-gray-300 opacity-0 transition-all group-hover:opacity-100 hover:text-gray-500 active:scale-95 dark:text-gray-600 dark:hover:text-gray-400",
|
|
5268
|
+
className: "absolute right-2.5 top-2.5 rounded-lg p-1 text-gray-300 opacity-0 transition-all group-hover:opacity-100 group-focus-within:opacity-100 hover:text-gray-500 active:scale-95 dark:text-gray-600 dark:hover:text-gray-400",
|
|
5182
5269
|
"aria-label": t("dismiss"),
|
|
5183
5270
|
children: /* @__PURE__ */ jsxRuntime.jsx(HeroIcons.XMarkIcon, { className: "h-3.5 w-3.5" })
|
|
5184
5271
|
}
|
|
@@ -5383,7 +5470,7 @@ var StatusBadge = React11.forwardRef(function StatusBadge2({ status, label, size
|
|
|
5383
5470
|
"data-testid": `status-badge-${status}`,
|
|
5384
5471
|
className: `inline-flex items-center gap-1.5 rounded-full border font-semibold backdrop-blur-sm ${SIZE_STYLES[size]} ${toneStyle.container} ${className}`,
|
|
5385
5472
|
children: [
|
|
5386
|
-
IconComponent ? /* @__PURE__ */ jsxRuntime.jsx(IconComponent, { className: `h-3 w-3 ${configuredStatus.animateIcon ? "animate-spin" : ""}` }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: `h-2 w-2 rounded-full ${toneStyle.dot}` }),
|
|
5473
|
+
IconComponent ? /* @__PURE__ */ jsxRuntime.jsx(IconComponent, { className: `h-3 w-3 ${configuredStatus.animateIcon ? "animate-spin motion-reduce:animate-none" : ""}` }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: `h-2 w-2 rounded-full ${toneStyle.dot}` }),
|
|
5387
5474
|
resolvedLabel2
|
|
5388
5475
|
]
|
|
5389
5476
|
}
|
|
@@ -5413,11 +5500,14 @@ function GlassModal({
|
|
|
5413
5500
|
children,
|
|
5414
5501
|
panelClassName = "rounded-[2rem]",
|
|
5415
5502
|
contentClassName = "fixed inset-0 flex items-center justify-center overflow-y-auto p-3 sm:p-5 lg:p-6",
|
|
5416
|
-
zIndex = "z-50"
|
|
5417
|
-
|
|
5418
|
-
|
|
5419
|
-
|
|
5420
|
-
|
|
5503
|
+
zIndex = "z-50",
|
|
5504
|
+
overlayTestId,
|
|
5505
|
+
panelTestId,
|
|
5506
|
+
ariaLabelledBy
|
|
5507
|
+
}) {
|
|
5508
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(Headless6.Dialog, { open, onClose, className: `relative ${zIndex}`, "aria-labelledby": ariaLabelledBy, children: [
|
|
5509
|
+
/* @__PURE__ */ jsxRuntime.jsx(Headless6.DialogBackdrop, { className: "fixed inset-0 bg-slate-900/40 backdrop-blur-md dark:bg-black/50", "data-testid": overlayTestId }),
|
|
5510
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: contentClassName, children: /* @__PURE__ */ jsxRuntime.jsx(Headless6.DialogPanel, { className: panelClassName, "data-testid": panelTestId, children }) })
|
|
5421
5511
|
] });
|
|
5422
5512
|
}
|
|
5423
5513
|
function Text({ className, ...props }) {
|
|
@@ -5920,7 +6010,8 @@ function GlassModalShell({
|
|
|
5920
6010
|
type: "button",
|
|
5921
6011
|
onClick: onClose,
|
|
5922
6012
|
"aria-label": closeLabel,
|
|
5923
|
-
|
|
6013
|
+
"data-testid": "modal-close",
|
|
6014
|
+
className: "absolute right-4 top-4 inline-flex h-9 w-9 items-center justify-center rounded-xl text-slate-400 transition hover:bg-white/40 hover:text-slate-700 dark:hover:bg-white/[0.08] dark:hover:text-white focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2",
|
|
5924
6015
|
children: /* @__PURE__ */ jsxRuntime.jsx(HeroIcons.XMarkIcon, { className: "h-5 w-5" })
|
|
5925
6016
|
}
|
|
5926
6017
|
),
|
|
@@ -5930,14 +6021,14 @@ function GlassModalShell({
|
|
|
5930
6021
|
] }),
|
|
5931
6022
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-start justify-between gap-3 pr-10", children: [
|
|
5932
6023
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
5933
|
-
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-xl font-bold text-slate-900 dark:text-white sm:text-2xl", children: title }),
|
|
6024
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { id: "modal-title", "data-testid": "modal-title", className: "text-xl font-bold text-slate-900 dark:text-white sm:text-2xl", children: title }),
|
|
5934
6025
|
subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-sm text-slate-500 dark:text-slate-400", children: subtitle })
|
|
5935
6026
|
] }),
|
|
5936
6027
|
headerActions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2", children: headerActions })
|
|
5937
6028
|
] })
|
|
5938
6029
|
] }),
|
|
5939
6030
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-h-[72vh] overflow-y-auto px-5 pb-5 sm:px-8 sm:pb-8", children }),
|
|
5940
|
-
footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-t border-white/20 px-5 py-4 dark:border-white/10 sm:px-8", children: footer })
|
|
6031
|
+
footer && /* @__PURE__ */ jsxRuntime.jsx("div", { "data-testid": "modal-footer", className: "border-t border-white/20 px-5 py-4 dark:border-white/10 sm:px-8", children: footer })
|
|
5941
6032
|
] });
|
|
5942
6033
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5943
6034
|
GlassModal,
|
|
@@ -5946,7 +6037,10 @@ function GlassModalShell({
|
|
|
5946
6037
|
onClose,
|
|
5947
6038
|
contentClassName: "fixed inset-0 overflow-y-auto p-3 sm:p-6",
|
|
5948
6039
|
panelClassName: `liquid-surface-strong w-full overflow-hidden rounded-2xl mx-auto mt-[4vh] sm:mt-[8vh] ${SIZE_CLASSES2[maxWidth]} ${className}`,
|
|
6040
|
+
ariaLabelledBy: "modal-title",
|
|
5949
6041
|
zIndex,
|
|
6042
|
+
overlayTestId: "modal-overlay",
|
|
6043
|
+
panelTestId: "modal-panel",
|
|
5950
6044
|
children: onSubmit ? /* @__PURE__ */ jsxRuntime.jsx("form", { onSubmit: handleSubmit, children: inner }) : inner
|
|
5951
6045
|
}
|
|
5952
6046
|
);
|
|
@@ -5977,6 +6071,7 @@ function GlassFormModal({
|
|
|
5977
6071
|
disabled: isLoading,
|
|
5978
6072
|
outline: true,
|
|
5979
6073
|
className: "w-full sm:w-auto",
|
|
6074
|
+
"data-testid": "form-modal-cancel",
|
|
5980
6075
|
children: cancelLabel
|
|
5981
6076
|
}
|
|
5982
6077
|
),
|
|
@@ -5989,11 +6084,12 @@ function GlassFormModal({
|
|
|
5989
6084
|
loadingText: submitLabel,
|
|
5990
6085
|
color: "ios-glass-blue",
|
|
5991
6086
|
className: "w-full sm:w-auto",
|
|
6087
|
+
"data-testid": "form-modal-submit",
|
|
5992
6088
|
children: submitLabel
|
|
5993
6089
|
}
|
|
5994
6090
|
)
|
|
5995
6091
|
] }) }) : void 0;
|
|
5996
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
6092
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-testid": "form-modal", role: "dialog", "aria-modal": "true", "aria-label": title, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
5997
6093
|
GlassModalShell,
|
|
5998
6094
|
{
|
|
5999
6095
|
open,
|
|
@@ -6007,7 +6103,7 @@ function GlassFormModal({
|
|
|
6007
6103
|
footer: defaultFooter,
|
|
6008
6104
|
children
|
|
6009
6105
|
}
|
|
6010
|
-
);
|
|
6106
|
+
) });
|
|
6011
6107
|
}
|
|
6012
6108
|
function ContextMenu({
|
|
6013
6109
|
position,
|
|
@@ -6648,12 +6744,13 @@ function wrapperClass(error) {
|
|
|
6648
6744
|
error ? "focus-within:ring-2 focus-within:ring-offset-2 focus-within:ring-red-400/30" : "focus-within:ring-2 focus-within:ring-offset-2 focus-within:ring-indigo-500 dark:focus-within:ring-offset-gray-900"
|
|
6649
6745
|
].join(" ");
|
|
6650
6746
|
}
|
|
6651
|
-
function FieldMeta({ hint, error }) {
|
|
6747
|
+
function FieldMeta({ hint, error, errorId, hintId }) {
|
|
6652
6748
|
if (!hint && !error) return null;
|
|
6653
6749
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
6654
6750
|
"p",
|
|
6655
6751
|
{
|
|
6656
|
-
|
|
6752
|
+
id: error ? errorId : hintId,
|
|
6753
|
+
className: `mt-1.5 text-xs ${error ? "text-red-500" : "text-slate-600 dark:text-gray-400"}`,
|
|
6657
6754
|
...error ? { role: "alert", "aria-live": "polite" } : {},
|
|
6658
6755
|
children: error ?? hint
|
|
6659
6756
|
}
|
|
@@ -6670,23 +6767,32 @@ function FormInput({
|
|
|
6670
6767
|
onValueChange,
|
|
6671
6768
|
...props
|
|
6672
6769
|
}) {
|
|
6673
|
-
|
|
6674
|
-
|
|
6770
|
+
const autoId = React11.useId();
|
|
6771
|
+
const inputId = props.id ?? autoId;
|
|
6772
|
+
const errorId = `${inputId}-error`;
|
|
6773
|
+
const hintId = `${inputId}-hint`;
|
|
6774
|
+
const describedBy = error ? errorId : hint ? hintId : void 0;
|
|
6775
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-testid": label ? `field-${label.toLowerCase().replace(/\s+/g, "-")}` : "form-field", children: [
|
|
6776
|
+
label ? /* @__PURE__ */ jsxRuntime.jsxs("label", { htmlFor: inputId, className: `mb-1.5 block font-medium text-gray-500 dark:text-gray-400 ${labelClasses[inputSize]}`, children: [
|
|
6675
6777
|
label,
|
|
6676
6778
|
required ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-0.5 text-red-500", children: "*" }) : null
|
|
6677
6779
|
] }) : null,
|
|
6678
6780
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: wrapperClass(error), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `relative flex items-center ${sizeClasses3[inputSize]} ${className}`, children: [
|
|
6679
|
-
icon ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mr-2 text-gray-400 dark:text-gray-500", children: icon }) : null,
|
|
6781
|
+
icon ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mr-2 text-gray-400 dark:text-gray-500", "aria-hidden": "true", children: icon }) : null,
|
|
6680
6782
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6681
6783
|
"input",
|
|
6682
6784
|
{
|
|
6683
6785
|
...props,
|
|
6684
|
-
|
|
6786
|
+
id: inputId,
|
|
6787
|
+
required,
|
|
6788
|
+
"aria-invalid": error ? true : void 0,
|
|
6789
|
+
"aria-describedby": describedBy,
|
|
6790
|
+
className: "w-full bg-transparent text-gray-900 placeholder:text-slate-500 focus:outline-none dark:text-white dark:placeholder:text-gray-500",
|
|
6685
6791
|
onChange: (event) => onValueChange?.(event.target.value)
|
|
6686
6792
|
}
|
|
6687
6793
|
)
|
|
6688
6794
|
] }) }),
|
|
6689
|
-
/* @__PURE__ */ jsxRuntime.jsx(FieldMeta, { hint, error })
|
|
6795
|
+
/* @__PURE__ */ jsxRuntime.jsx(FieldMeta, { hint, error, errorId, hintId })
|
|
6690
6796
|
] });
|
|
6691
6797
|
}
|
|
6692
6798
|
function FormTextarea({
|
|
@@ -6699,8 +6805,13 @@ function FormTextarea({
|
|
|
6699
6805
|
onValueChange,
|
|
6700
6806
|
...props
|
|
6701
6807
|
}) {
|
|
6702
|
-
|
|
6703
|
-
|
|
6808
|
+
const autoId = React11.useId();
|
|
6809
|
+
const inputId = props.id ?? autoId;
|
|
6810
|
+
const errorId = `${inputId}-error`;
|
|
6811
|
+
const hintId = `${inputId}-hint`;
|
|
6812
|
+
const describedBy = error ? errorId : hint ? hintId : void 0;
|
|
6813
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-testid": label ? `field-${label.toLowerCase().replace(/\s+/g, "-")}` : "form-field", children: [
|
|
6814
|
+
label ? /* @__PURE__ */ jsxRuntime.jsxs("label", { htmlFor: inputId, className: `mb-1.5 block font-medium text-gray-500 dark:text-gray-400 ${labelClasses[inputSize]}`, children: [
|
|
6704
6815
|
label,
|
|
6705
6816
|
required ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-0.5 text-red-500", children: "*" }) : null
|
|
6706
6817
|
] }) : null,
|
|
@@ -6708,11 +6819,15 @@ function FormTextarea({
|
|
|
6708
6819
|
"textarea",
|
|
6709
6820
|
{
|
|
6710
6821
|
...props,
|
|
6711
|
-
|
|
6822
|
+
id: inputId,
|
|
6823
|
+
required,
|
|
6824
|
+
"aria-invalid": error ? true : void 0,
|
|
6825
|
+
"aria-describedby": describedBy,
|
|
6826
|
+
className: `w-full resize-y bg-transparent px-3.5 py-2.5 text-gray-900 placeholder:text-slate-500 focus:outline-none dark:text-white dark:placeholder:text-gray-500 ${className}`,
|
|
6712
6827
|
onChange: (event) => onValueChange?.(event.target.value)
|
|
6713
6828
|
}
|
|
6714
6829
|
) }),
|
|
6715
|
-
/* @__PURE__ */ jsxRuntime.jsx(FieldMeta, { hint, error })
|
|
6830
|
+
/* @__PURE__ */ jsxRuntime.jsx(FieldMeta, { hint, error, errorId, hintId })
|
|
6716
6831
|
] });
|
|
6717
6832
|
}
|
|
6718
6833
|
var priceSizeConfig = {
|
|
@@ -6744,9 +6859,14 @@ function FormPriceInput({
|
|
|
6744
6859
|
max,
|
|
6745
6860
|
className = ""
|
|
6746
6861
|
}) {
|
|
6862
|
+
const autoId = React11.useId();
|
|
6863
|
+
const inputId = autoId;
|
|
6864
|
+
const errorId = `${inputId}-error`;
|
|
6865
|
+
const hintId = `${inputId}-hint`;
|
|
6866
|
+
const describedBy = error ? errorId : hint ? hintId : void 0;
|
|
6747
6867
|
const sizes3 = priceSizeConfig[priceSize ?? defaultPriceSize(inputSize)];
|
|
6748
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
6749
|
-
label ? /* @__PURE__ */ jsxRuntime.jsxs("label", { className: `mb-1.5 block font-medium text-gray-500 dark:text-gray-400 ${labelClasses[inputSize]}`, children: [
|
|
6868
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-testid": label ? `field-${label.toLowerCase().replace(/\s+/g, "-")}` : "form-field", children: [
|
|
6869
|
+
label ? /* @__PURE__ */ jsxRuntime.jsxs("label", { htmlFor: inputId, className: `mb-1.5 block font-medium text-gray-500 dark:text-gray-400 ${labelClasses[inputSize]}`, children: [
|
|
6750
6870
|
label,
|
|
6751
6871
|
required ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-0.5 text-red-500", children: "*" }) : null
|
|
6752
6872
|
] }) : null,
|
|
@@ -6762,19 +6882,24 @@ function FormPriceInput({
|
|
|
6762
6882
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6763
6883
|
"input",
|
|
6764
6884
|
{
|
|
6885
|
+
id: inputId,
|
|
6765
6886
|
type: "number",
|
|
6766
6887
|
step,
|
|
6767
6888
|
value,
|
|
6768
6889
|
onChange: (event) => onValueChange?.(event.target.value),
|
|
6769
6890
|
placeholder,
|
|
6770
6891
|
disabled,
|
|
6892
|
+
required,
|
|
6771
6893
|
min,
|
|
6772
6894
|
max,
|
|
6773
|
-
|
|
6895
|
+
"aria-invalid": error ? true : void 0,
|
|
6896
|
+
"aria-describedby": describedBy,
|
|
6897
|
+
"aria-label": label ? `${label} in ${currencySymbol}` : void 0,
|
|
6898
|
+
className: `w-full bg-transparent tabular-nums ${sizes3.input} ${sizes3.padding} text-gray-900 placeholder:text-slate-500 focus:outline-none dark:text-white dark:placeholder:text-gray-500 ${colorClass ?? ""} ${className}`
|
|
6774
6899
|
}
|
|
6775
6900
|
)
|
|
6776
6901
|
] }) }),
|
|
6777
|
-
/* @__PURE__ */ jsxRuntime.jsx(FieldMeta, { hint, error })
|
|
6902
|
+
/* @__PURE__ */ jsxRuntime.jsx(FieldMeta, { hint, error, errorId, hintId })
|
|
6778
6903
|
] });
|
|
6779
6904
|
}
|
|
6780
6905
|
function FormSelect({
|
|
@@ -6788,8 +6913,13 @@ function FormSelect({
|
|
|
6788
6913
|
options,
|
|
6789
6914
|
...props
|
|
6790
6915
|
}) {
|
|
6791
|
-
|
|
6792
|
-
|
|
6916
|
+
const autoId = React11.useId();
|
|
6917
|
+
const inputId = props.id ?? autoId;
|
|
6918
|
+
const errorId = `${inputId}-error`;
|
|
6919
|
+
const hintId = `${inputId}-hint`;
|
|
6920
|
+
const describedBy = error ? errorId : hint ? hintId : void 0;
|
|
6921
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-testid": label ? `field-${label.toLowerCase().replace(/\s+/g, "-")}` : "form-field", children: [
|
|
6922
|
+
label ? /* @__PURE__ */ jsxRuntime.jsxs("label", { htmlFor: inputId, className: `mb-1.5 block font-medium text-gray-500 dark:text-gray-400 ${labelClasses[inputSize]}`, children: [
|
|
6793
6923
|
label,
|
|
6794
6924
|
required ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-0.5 text-red-500", children: "*" }) : null
|
|
6795
6925
|
] }) : null,
|
|
@@ -6797,12 +6927,16 @@ function FormSelect({
|
|
|
6797
6927
|
"select",
|
|
6798
6928
|
{
|
|
6799
6929
|
...props,
|
|
6930
|
+
id: inputId,
|
|
6931
|
+
required,
|
|
6932
|
+
"aria-invalid": error ? true : void 0,
|
|
6933
|
+
"aria-describedby": describedBy,
|
|
6800
6934
|
className: `w-full bg-transparent ${sizeClasses3[inputSize]} text-gray-900 focus:outline-none dark:text-white ${className}`,
|
|
6801
6935
|
onChange: (event) => onValueChange?.(event.target.value),
|
|
6802
6936
|
children: options.map((option) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: option.value, children: option.label }, option.value))
|
|
6803
6937
|
}
|
|
6804
6938
|
) }),
|
|
6805
|
-
/* @__PURE__ */ jsxRuntime.jsx(FieldMeta, { hint, error })
|
|
6939
|
+
/* @__PURE__ */ jsxRuntime.jsx(FieldMeta, { hint, error, errorId, hintId })
|
|
6806
6940
|
] });
|
|
6807
6941
|
}
|
|
6808
6942
|
var Form = React11__namespace.default.forwardRef(
|
|
@@ -6984,7 +7118,7 @@ function BaseForm({
|
|
|
6984
7118
|
color: "ios-glass-blue",
|
|
6985
7119
|
disabled: isLoading || submitDisabled,
|
|
6986
7120
|
children: [
|
|
6987
|
-
isLoading && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "h-4 w-4 animate-spin rounded-full border-2 border-white border-t-transparent" }),
|
|
7121
|
+
isLoading && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "h-4 w-4 animate-spin motion-reduce:animate-none rounded-full border-2 border-white border-t-transparent" }),
|
|
6988
7122
|
submitLabel
|
|
6989
7123
|
]
|
|
6990
7124
|
}
|
|
@@ -7305,7 +7439,7 @@ function StepNavigationButtons({
|
|
|
7305
7439
|
onClick: onContinue,
|
|
7306
7440
|
className: `${CONTINUE_BUTTON_CLASSES}${!onBack ? " w-full" : ""}`,
|
|
7307
7441
|
children: isLoading && showSpinner ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center justify-center gap-2", children: [
|
|
7308
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "h-4 w-4 animate-spin rounded-full border-2 border-white border-t-transparent" }),
|
|
7442
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "h-4 w-4 animate-spin motion-reduce:animate-none rounded-full border-2 border-white border-t-transparent" }),
|
|
7309
7443
|
displayLabel
|
|
7310
7444
|
] }) : displayLabel
|
|
7311
7445
|
}
|
|
@@ -7336,7 +7470,7 @@ function SearchFilterToolbar({
|
|
|
7336
7470
|
label
|
|
7337
7471
|
};
|
|
7338
7472
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
7339
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
7473
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { role: "search", "data-testid": "search-toolbar", className: "flex items-center gap-3", children: [
|
|
7340
7474
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "liquid-surface flex flex-1 items-center gap-2 flex-wrap min-h-12 rounded-xl px-3.5 py-1.5 transition-colors duration-200 focus-within:ring-2 focus-within:ring-offset-2 focus-within:ring-blue-500 dark:focus-within:ring-offset-gray-900", children: [
|
|
7341
7475
|
/* @__PURE__ */ jsxRuntime.jsx(HeroIcons.MagnifyingGlassIcon, { className: "h-5 w-5 shrink-0 text-slate-400 dark:text-slate-500" }),
|
|
7342
7476
|
filterPills,
|
|
@@ -7347,7 +7481,9 @@ function SearchFilterToolbar({
|
|
|
7347
7481
|
value: query,
|
|
7348
7482
|
onChange: (event) => onQueryChange(event.target.value),
|
|
7349
7483
|
placeholder,
|
|
7350
|
-
|
|
7484
|
+
"aria-label": label,
|
|
7485
|
+
"data-testid": "search-input",
|
|
7486
|
+
className: "min-w-[100px] flex-1 bg-transparent py-1 text-base text-gray-900 outline-none focus-visible:ring-2 focus-visible:ring-blue-500 placeholder:text-slate-400 dark:text-white dark:placeholder:text-slate-500"
|
|
7351
7487
|
}
|
|
7352
7488
|
)
|
|
7353
7489
|
] }),
|
|
@@ -7435,6 +7571,12 @@ function SearchFilterToolbar({
|
|
|
7435
7571
|
function isPlainTextTitle(title) {
|
|
7436
7572
|
return typeof title === "string" || typeof title === "number";
|
|
7437
7573
|
}
|
|
7574
|
+
function getTestIdFromTitle(title) {
|
|
7575
|
+
if (isPlainTextTitle(title)) {
|
|
7576
|
+
return `entity-card-${String(title).toLowerCase().replace(/\s+/g, "-")}`;
|
|
7577
|
+
}
|
|
7578
|
+
return "entity-card";
|
|
7579
|
+
}
|
|
7438
7580
|
function StatusBadgeInternal({ status }) {
|
|
7439
7581
|
const tCommon = nextIntl.useTranslations("common");
|
|
7440
7582
|
if (typeof status !== "boolean") {
|
|
@@ -7461,9 +7603,24 @@ function EntityCard({
|
|
|
7461
7603
|
dragProps
|
|
7462
7604
|
}) {
|
|
7463
7605
|
const isInteractive = Boolean(onClick);
|
|
7606
|
+
const plainTextTitle = isPlainTextTitle(title) ? String(title) : void 0;
|
|
7607
|
+
const handleKeyDown = React11.useCallback(
|
|
7608
|
+
(event) => {
|
|
7609
|
+
if (onClick && (event.key === "Enter" || event.key === " ")) {
|
|
7610
|
+
event.preventDefault();
|
|
7611
|
+
onClick();
|
|
7612
|
+
}
|
|
7613
|
+
},
|
|
7614
|
+
[onClick]
|
|
7615
|
+
);
|
|
7464
7616
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
7465
7617
|
Card,
|
|
7466
7618
|
{
|
|
7619
|
+
role: isInteractive ? "article" : "listitem",
|
|
7620
|
+
"aria-label": isInteractive ? plainTextTitle : void 0,
|
|
7621
|
+
"data-testid": getTestIdFromTitle(title),
|
|
7622
|
+
tabIndex: isInteractive ? 0 : void 0,
|
|
7623
|
+
onKeyDown: isInteractive ? handleKeyDown : void 0,
|
|
7467
7624
|
className: `group overflow-hidden transition-all duration-200 hover:-translate-y-0.5 hover:shadow-md ${isInteractive ? "cursor-pointer" : ""} ${className}`,
|
|
7468
7625
|
onPress: onClick,
|
|
7469
7626
|
pressable: isInteractive,
|
|
@@ -7472,21 +7629,21 @@ function EntityCard({
|
|
|
7472
7629
|
accentGradient && /* @__PURE__ */ jsxRuntime.jsx("div", { className: `h-1.5 w-full bg-gradient-to-r ${accentGradient}` }),
|
|
7473
7630
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-4", children: [
|
|
7474
7631
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-3", children: [
|
|
7475
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7632
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { "data-testid": "entity-card-title", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
7476
7633
|
ItemSummary,
|
|
7477
7634
|
{
|
|
7478
7635
|
icon,
|
|
7479
7636
|
title,
|
|
7480
|
-
subtitle,
|
|
7637
|
+
subtitle: subtitle ? /* @__PURE__ */ jsxRuntime.jsx("span", { "data-testid": "entity-card-subtitle", children: subtitle }) : void 0,
|
|
7481
7638
|
iconContainerClassName: "shrink-0",
|
|
7482
7639
|
titleClassName: isPlainTextTitle(title) ? "truncate font-semibold text-slate-900 dark:text-white" : "font-semibold text-slate-900 dark:text-white",
|
|
7483
7640
|
subtitleClassName: "mt-0.5 text-xs text-slate-500 dark:text-slate-400"
|
|
7484
7641
|
}
|
|
7485
|
-
),
|
|
7642
|
+
) }),
|
|
7486
7643
|
status !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(StatusBadgeInternal, { status })
|
|
7487
7644
|
] }),
|
|
7488
7645
|
children && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3", children }),
|
|
7489
|
-
footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3 border-t border-white/30 pt-3 dark:border-white/10 flex gap-2 justify-end opacity-0 transition-opacity duration-200 group-hover:opacity-100", children: footer })
|
|
7646
|
+
footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3 border-t border-white/30 pt-3 dark:border-white/10 flex gap-2 justify-end opacity-0 transition-opacity duration-200 group-hover:opacity-100 group-focus-within:opacity-100", children: footer })
|
|
7490
7647
|
] })
|
|
7491
7648
|
]
|
|
7492
7649
|
}
|
|
@@ -7635,6 +7792,10 @@ function FilterTileButton({
|
|
|
7635
7792
|
{
|
|
7636
7793
|
type: "button",
|
|
7637
7794
|
onClick,
|
|
7795
|
+
role: "checkbox",
|
|
7796
|
+
"aria-checked": isActive,
|
|
7797
|
+
"aria-label": label,
|
|
7798
|
+
"data-testid": `filter-tile-${label.toLowerCase().replace(/\s+/g, "-")}`,
|
|
7638
7799
|
className: `relative overflow-hidden rounded-2xl p-4 text-left transition-all duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 ${tokens.focusRing} dark:ring-offset-gray-900 ${isActive ? tokens.activeGradient : INACTIVE_CLASSES}`,
|
|
7639
7800
|
children: [
|
|
7640
7801
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -8073,8 +8234,8 @@ function AnalysisSkeleton() {
|
|
|
8073
8234
|
}
|
|
8074
8235
|
|
|
8075
8236
|
// src/components/skeletons/shimmer.tsx
|
|
8076
|
-
var shimmerClass = "bg-gradient-to-r from-gray-200 via-gray-100 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700 animate-shimmer bg-[length:200%_100%]";
|
|
8077
|
-
var shimmerWhiteClass = "bg-white/20 animate-pulse";
|
|
8237
|
+
var shimmerClass = "bg-gradient-to-r from-gray-200 via-gray-100 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700 animate-shimmer motion-reduce:animate-none bg-[length:200%_100%]";
|
|
8238
|
+
var shimmerWhiteClass = "bg-white/20 animate-pulse motion-reduce:animate-none";
|
|
8078
8239
|
function SectionHeaderSkeleton() {
|
|
8079
8240
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
8080
8241
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `h-10 w-10 rounded-lg ${shimmerClass}` }),
|
|
@@ -8669,6 +8830,7 @@ function Badge({ color = "zinc", className, ...props }) {
|
|
|
8669
8830
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
8670
8831
|
"span",
|
|
8671
8832
|
{
|
|
8833
|
+
"data-testid": "badge",
|
|
8672
8834
|
...props,
|
|
8673
8835
|
className: clsx__default.default(
|
|
8674
8836
|
className,
|
|
@@ -8883,14 +9045,14 @@ function DynamicIslandConfirm({
|
|
|
8883
9045
|
chunkUZ3CMNUJ_js.triggerHaptic("warning");
|
|
8884
9046
|
}
|
|
8885
9047
|
}, [open]);
|
|
8886
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(Headless6.Dialog, { open, onClose, className: "relative z-[120]", children: [
|
|
9048
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(Headless6.Dialog, { open, onClose, className: "relative z-[120]", "aria-labelledby": "dynamic-island-title", children: [
|
|
8887
9049
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed inset-0 bg-black/10 backdrop-blur-[2px]" }),
|
|
8888
9050
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed inset-0 flex items-start justify-center pt-3 px-4", children: /* @__PURE__ */ jsxRuntime.jsxs(Headless6.DialogPanel, { className: "w-full max-w-sm rounded-[28px] bg-black/95 p-3 text-white shadow-2xl", children: [
|
|
8889
9051
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 px-2 py-1", children: [
|
|
8890
9052
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `h-9 w-9 shrink-0 rounded-xl ${iconBackground} flex items-center justify-center`, children: icon ?? /* @__PURE__ */ jsxRuntime.jsx(HeroIcons.TrashIcon, { className: "h-5 w-5 text-white" }) }),
|
|
8891
9053
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
|
|
8892
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[11px] uppercase tracking-wide text-gray-
|
|
8893
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-semibold", children: title })
|
|
9054
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[11px] uppercase tracking-wide text-gray-500", children: appName }),
|
|
9055
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { id: "dynamic-island-title", className: "text-sm font-semibold", children: title })
|
|
8894
9056
|
] })
|
|
8895
9057
|
] }),
|
|
8896
9058
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2 grid grid-cols-2 gap-2", children: [
|
|
@@ -8899,7 +9061,7 @@ function DynamicIslandConfirm({
|
|
|
8899
9061
|
{
|
|
8900
9062
|
type: "button",
|
|
8901
9063
|
onClick: onClose,
|
|
8902
|
-
className: "rounded-xl bg-white/10 px-3 py-
|
|
9064
|
+
className: "rounded-xl bg-white/10 px-3 py-3 text-sm font-medium hover:bg-white/15 focus-visible:ring-2 focus-visible:ring-white/70",
|
|
8903
9065
|
children: resolvedCancelLabel
|
|
8904
9066
|
}
|
|
8905
9067
|
),
|
|
@@ -8908,7 +9070,7 @@ function DynamicIslandConfirm({
|
|
|
8908
9070
|
{
|
|
8909
9071
|
type: "button",
|
|
8910
9072
|
onClick: onConfirm,
|
|
8911
|
-
className: "rounded-xl bg-ios-red px-3 py-
|
|
9073
|
+
className: "rounded-xl bg-ios-red px-3 py-3 text-sm font-semibold text-white hover:bg-ios-red-hover focus-visible:ring-2 focus-visible:ring-white/70",
|
|
8912
9074
|
children: resolvedConfirmLabel
|
|
8913
9075
|
}
|
|
8914
9076
|
)
|
|
@@ -9460,66 +9622,80 @@ var ACCENT_MAP = {
|
|
|
9460
9622
|
function PageEmptyState({ title, message, iconName }) {
|
|
9461
9623
|
const Icon = ICON_MAP[iconName] || FallbackIcon;
|
|
9462
9624
|
const accent = ACCENT_MAP[iconName] || ACCENT_MAP["folder-open"];
|
|
9463
|
-
|
|
9464
|
-
|
|
9625
|
+
const prefersReducedMotion2 = framerMotion.useReducedMotion();
|
|
9626
|
+
const noMotion = { opacity: 1, scale: 1, y: 0 };
|
|
9627
|
+
const noTransition = { duration: 0 };
|
|
9628
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
9629
|
+
"div",
|
|
9465
9630
|
{
|
|
9466
|
-
|
|
9467
|
-
|
|
9468
|
-
|
|
9469
|
-
className: "
|
|
9470
|
-
children:
|
|
9471
|
-
|
|
9472
|
-
|
|
9473
|
-
{
|
|
9474
|
-
|
|
9475
|
-
|
|
9476
|
-
|
|
9477
|
-
|
|
9478
|
-
|
|
9479
|
-
}
|
|
9480
|
-
),
|
|
9481
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9482
|
-
framerMotion.motion.h3,
|
|
9483
|
-
{
|
|
9484
|
-
initial: { y: 12, opacity: 0 },
|
|
9485
|
-
animate: { y: 0, opacity: 1 },
|
|
9486
|
-
transition: { ...springPresets.default, delay: 0.1 },
|
|
9487
|
-
className: "text-xl font-semibold text-gray-900 dark:text-white",
|
|
9488
|
-
children: title
|
|
9489
|
-
}
|
|
9490
|
-
),
|
|
9491
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9492
|
-
framerMotion.motion.p,
|
|
9493
|
-
{
|
|
9494
|
-
initial: { y: 12, opacity: 0 },
|
|
9495
|
-
animate: { y: 0, opacity: 1 },
|
|
9496
|
-
transition: { ...springPresets.default, delay: 0.15 },
|
|
9497
|
-
className: "mt-3 text-sm text-gray-500 dark:text-gray-400 max-w-sm mx-auto leading-relaxed",
|
|
9498
|
-
children: message
|
|
9499
|
-
}
|
|
9500
|
-
),
|
|
9501
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9502
|
-
framerMotion.motion.div,
|
|
9503
|
-
{
|
|
9504
|
-
initial: { opacity: 0 },
|
|
9505
|
-
animate: { opacity: 1 },
|
|
9506
|
-
transition: { delay: 0.3 },
|
|
9507
|
-
className: "mt-8 flex items-center justify-center gap-1.5",
|
|
9508
|
-
children: [0, 1, 2].map((i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
9631
|
+
role: "region",
|
|
9632
|
+
"aria-label": title,
|
|
9633
|
+
"data-testid": "empty-state",
|
|
9634
|
+
className: "flex items-center justify-center py-20",
|
|
9635
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
9636
|
+
framerMotion.motion.div,
|
|
9637
|
+
{
|
|
9638
|
+
initial: prefersReducedMotion2 ? false : { opacity: 0, scale: 0.95 },
|
|
9639
|
+
animate: prefersReducedMotion2 ? noMotion : { opacity: 1, scale: 1 },
|
|
9640
|
+
transition: prefersReducedMotion2 ? noTransition : springPresets.gentle,
|
|
9641
|
+
className: "liquid-surface w-full max-w-lg rounded-2xl px-8 py-14 text-center",
|
|
9642
|
+
children: [
|
|
9643
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9509
9644
|
framerMotion.motion.div,
|
|
9510
9645
|
{
|
|
9511
|
-
initial: { scale: 0 },
|
|
9512
|
-
animate: { scale: 1 },
|
|
9513
|
-
transition:
|
|
9514
|
-
className: "
|
|
9515
|
-
|
|
9516
|
-
|
|
9517
|
-
)
|
|
9518
|
-
|
|
9519
|
-
|
|
9520
|
-
|
|
9646
|
+
initial: prefersReducedMotion2 ? false : { scale: 0.6, opacity: 0 },
|
|
9647
|
+
animate: prefersReducedMotion2 ? noMotion : { scale: 1, opacity: 1 },
|
|
9648
|
+
transition: prefersReducedMotion2 ? noTransition : springPresets.bouncy,
|
|
9649
|
+
className: "mx-auto mb-6",
|
|
9650
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: `inline-flex h-20 w-20 items-center justify-center rounded-full backdrop-blur-md border ${accent.container}`, children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: `h-10 w-10 ${accent.icon}` }) })
|
|
9651
|
+
}
|
|
9652
|
+
),
|
|
9653
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9654
|
+
framerMotion.motion.h3,
|
|
9655
|
+
{
|
|
9656
|
+
"data-testid": "empty-state-title",
|
|
9657
|
+
initial: prefersReducedMotion2 ? false : { y: 12, opacity: 0 },
|
|
9658
|
+
animate: prefersReducedMotion2 ? noMotion : { y: 0, opacity: 1 },
|
|
9659
|
+
transition: prefersReducedMotion2 ? noTransition : { ...springPresets.default, delay: 0.1 },
|
|
9660
|
+
className: "text-xl font-semibold text-gray-900 dark:text-white",
|
|
9661
|
+
children: title
|
|
9662
|
+
}
|
|
9663
|
+
),
|
|
9664
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9665
|
+
framerMotion.motion.p,
|
|
9666
|
+
{
|
|
9667
|
+
"data-testid": "empty-state-message",
|
|
9668
|
+
initial: prefersReducedMotion2 ? false : { y: 12, opacity: 0 },
|
|
9669
|
+
animate: prefersReducedMotion2 ? noMotion : { y: 0, opacity: 1 },
|
|
9670
|
+
transition: prefersReducedMotion2 ? noTransition : { ...springPresets.default, delay: 0.15 },
|
|
9671
|
+
className: "mt-3 text-sm text-gray-500 dark:text-gray-400 max-w-sm mx-auto leading-relaxed",
|
|
9672
|
+
children: message
|
|
9673
|
+
}
|
|
9674
|
+
),
|
|
9675
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9676
|
+
framerMotion.motion.div,
|
|
9677
|
+
{
|
|
9678
|
+
initial: prefersReducedMotion2 ? false : { opacity: 0 },
|
|
9679
|
+
animate: prefersReducedMotion2 ? noMotion : { opacity: 1 },
|
|
9680
|
+
transition: prefersReducedMotion2 ? noTransition : { delay: 0.3 },
|
|
9681
|
+
className: "mt-8 flex items-center justify-center gap-1.5",
|
|
9682
|
+
children: [0, 1, 2].map((i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
9683
|
+
framerMotion.motion.div,
|
|
9684
|
+
{
|
|
9685
|
+
initial: prefersReducedMotion2 ? false : { scale: 0 },
|
|
9686
|
+
animate: prefersReducedMotion2 ? noMotion : { scale: 1 },
|
|
9687
|
+
transition: prefersReducedMotion2 ? noTransition : { ...springPresets.bouncy, delay: 0.35 + i * 0.08 },
|
|
9688
|
+
className: "h-1.5 w-1.5 rounded-full bg-gray-300 dark:bg-gray-600"
|
|
9689
|
+
},
|
|
9690
|
+
i
|
|
9691
|
+
))
|
|
9692
|
+
}
|
|
9693
|
+
)
|
|
9694
|
+
]
|
|
9695
|
+
}
|
|
9696
|
+
)
|
|
9521
9697
|
}
|
|
9522
|
-
)
|
|
9698
|
+
);
|
|
9523
9699
|
}
|
|
9524
9700
|
var WINDSOCK_LOADER = { gradient: "from-emerald-500 to-teal-600", accentRing: "ring-emerald-500/30" };
|
|
9525
9701
|
var FUEL_PRICE_LOADER = { gradient: "from-blue-500 to-indigo-600", accentRing: "ring-blue-500/30" };
|
|
@@ -9548,7 +9724,7 @@ function BrandedLoader({
|
|
|
9548
9724
|
"div",
|
|
9549
9725
|
{
|
|
9550
9726
|
className: clsx__default.default(
|
|
9551
|
-
"absolute -inset-3 animate-ping rounded-3xl opacity-20",
|
|
9727
|
+
"absolute -inset-3 animate-ping motion-reduce:animate-none rounded-3xl opacity-20",
|
|
9552
9728
|
`bg-gradient-to-br ${gradient}`
|
|
9553
9729
|
),
|
|
9554
9730
|
style: { animationDuration: "2s" }
|
|
@@ -9560,7 +9736,7 @@ function BrandedLoader({
|
|
|
9560
9736
|
className: clsx__default.default(
|
|
9561
9737
|
"absolute -inset-1.5 rounded-[22px] ring-2",
|
|
9562
9738
|
accentRing,
|
|
9563
|
-
"animate-pulse"
|
|
9739
|
+
"animate-pulse motion-reduce:animate-none"
|
|
9564
9740
|
),
|
|
9565
9741
|
style: { animationDuration: "1.5s" }
|
|
9566
9742
|
}
|
|
@@ -9597,7 +9773,7 @@ function BrandedLoader({
|
|
|
9597
9773
|
className: clsx__default.default(
|
|
9598
9774
|
"h-1.5 w-1.5 rounded-full",
|
|
9599
9775
|
`bg-gradient-to-br ${gradient}`,
|
|
9600
|
-
"animate-bounce"
|
|
9776
|
+
"animate-bounce motion-reduce:animate-none"
|
|
9601
9777
|
),
|
|
9602
9778
|
style: { animationDelay: `${i * 150}ms`, animationDuration: "0.8s" }
|
|
9603
9779
|
},
|
|
@@ -9612,7 +9788,7 @@ function BrandedLoader({
|
|
|
9612
9788
|
className: clsx__default.default(
|
|
9613
9789
|
"h-2 w-2 rounded-full",
|
|
9614
9790
|
`bg-gradient-to-br ${gradient}`,
|
|
9615
|
-
"animate-bounce"
|
|
9791
|
+
"animate-bounce motion-reduce:animate-none"
|
|
9616
9792
|
),
|
|
9617
9793
|
style: { animationDelay: `${i * 150}ms`, animationDuration: "0.8s" }
|
|
9618
9794
|
},
|
|
@@ -11159,7 +11335,7 @@ function NotificationBadge({ count, className = "" }) {
|
|
|
11159
11335
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
11160
11336
|
"span",
|
|
11161
11337
|
{
|
|
11162
|
-
className: `absolute -top-1 -right-1 flex items-center justify-center min-w-[18px] h-[18px] px-1 text-[10px] font-bold text-white bg-red-500 rounded-full ring-2 ring-white dark:ring-gray-800 ${count > 0 ? "animate-pulse" : ""} ${className}`,
|
|
11338
|
+
className: `absolute -top-1 -right-1 flex items-center justify-center min-w-[18px] h-[18px] px-1 text-[10px] font-bold text-white bg-red-500 rounded-full ring-2 ring-white dark:ring-gray-800 ${count > 0 ? "animate-pulse motion-reduce:animate-none" : ""} ${className}`,
|
|
11163
11339
|
children: displayCount
|
|
11164
11340
|
}
|
|
11165
11341
|
);
|
|
@@ -12389,11 +12565,15 @@ function FilterPill({ icon, label, variant, onRemove }) {
|
|
|
12389
12565
|
{
|
|
12390
12566
|
type: "button",
|
|
12391
12567
|
onClick: onRemove,
|
|
12568
|
+
role: "option",
|
|
12569
|
+
"aria-selected": true,
|
|
12570
|
+
"aria-label": typeof label === "string" ? label : void 0,
|
|
12571
|
+
"data-testid": "filter-pill",
|
|
12392
12572
|
className: `liquid-pill liquid-pill-${variant}`,
|
|
12393
12573
|
children: [
|
|
12394
12574
|
icon,
|
|
12395
12575
|
label,
|
|
12396
|
-
/* @__PURE__ */ jsxRuntime.jsx(HeroIcons.XMarkIcon, { className: "liquid-pill-dismiss" })
|
|
12576
|
+
/* @__PURE__ */ jsxRuntime.jsx(HeroIcons.XMarkIcon, { className: "liquid-pill-dismiss", "data-testid": "filter-pill-remove" })
|
|
12397
12577
|
]
|
|
12398
12578
|
}
|
|
12399
12579
|
);
|
|
@@ -12658,7 +12838,7 @@ function DataPagination({
|
|
|
12658
12838
|
value: params?.limit ?? effectivePageSize,
|
|
12659
12839
|
onChange: (event) => handlePageSizeChange(event.target.value),
|
|
12660
12840
|
disabled: loading,
|
|
12661
|
-
className: "rounded-xl liquid-surface px-2 py-1.5 text-xs font-medium text-slate-700 outline-none dark:text-slate-300",
|
|
12841
|
+
className: "rounded-xl liquid-surface px-2 py-1.5 text-xs font-medium text-slate-700 outline-none focus-visible:ring-2 focus-visible:ring-blue-500 dark:text-slate-300",
|
|
12662
12842
|
children: pageSizeOptions.map((size) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: size, children: size }, size))
|
|
12663
12843
|
}
|
|
12664
12844
|
),
|
|
@@ -12677,7 +12857,7 @@ function DataPagination({
|
|
|
12677
12857
|
(page, index) => page === "..." ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
12678
12858
|
"span",
|
|
12679
12859
|
{
|
|
12680
|
-
className: "inline-flex h-9 w-6 items-center justify-center text-xs text-slate-
|
|
12860
|
+
className: "inline-flex h-9 w-6 items-center justify-center text-xs text-slate-500",
|
|
12681
12861
|
children: "\u2026"
|
|
12682
12862
|
},
|
|
12683
12863
|
`ellipsis-${index}`
|
|
@@ -13877,6 +14057,20 @@ function PlatformShell({
|
|
|
13877
14057
|
extras
|
|
13878
14058
|
] });
|
|
13879
14059
|
}
|
|
14060
|
+
function SkipToContent({
|
|
14061
|
+
targetId = "main-content",
|
|
14062
|
+
label = "Skip to main content"
|
|
14063
|
+
}) {
|
|
14064
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
14065
|
+
"a",
|
|
14066
|
+
{
|
|
14067
|
+
href: `#${targetId}`,
|
|
14068
|
+
className: "sr-only focus:not-sr-only focus:fixed focus:top-4 focus:left-4 focus:z-[9999] focus:rounded-lg focus:bg-white focus:px-4 focus:py-2 focus:text-sm focus:font-semibold focus:text-indigo-600 focus:shadow-lg focus:ring-2 focus:ring-indigo-500 focus:outline-none dark:focus:bg-gray-800 dark:focus:text-indigo-400",
|
|
14069
|
+
"data-testid": "skip-to-content",
|
|
14070
|
+
children: label
|
|
14071
|
+
}
|
|
14072
|
+
);
|
|
14073
|
+
}
|
|
13880
14074
|
|
|
13881
14075
|
Object.defineProperty(exports, "LOCALE_FLAGS", {
|
|
13882
14076
|
enumerable: true,
|
|
@@ -14096,6 +14290,7 @@ exports.ServerErrorPage = ServerErrorPage;
|
|
|
14096
14290
|
exports.SettingsDialog = SettingsDialog;
|
|
14097
14291
|
exports.SettingsModal = SettingsModal;
|
|
14098
14292
|
exports.Sheet = Sheet;
|
|
14293
|
+
exports.SkipToContent = SkipToContent;
|
|
14099
14294
|
exports.SocialLoginButtons = SocialLoginButtons;
|
|
14100
14295
|
exports.SortableTableHeader = SortableTableHeader;
|
|
14101
14296
|
exports.Spinner = Spinner;
|
|
@@ -14216,5 +14411,5 @@ exports.useGeoMapState = useGeoMapState;
|
|
|
14216
14411
|
exports.useNotifications = useNotifications;
|
|
14217
14412
|
exports.usePlatformShellStore = usePlatformShellStore;
|
|
14218
14413
|
exports.usePullToRefresh = usePullToRefresh;
|
|
14219
|
-
//# sourceMappingURL=chunk-
|
|
14220
|
-
//# sourceMappingURL=chunk-
|
|
14414
|
+
//# sourceMappingURL=chunk-WXI7OCNY.js.map
|
|
14415
|
+
//# sourceMappingURL=chunk-WXI7OCNY.js.map
|