@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
|
@@ -5,7 +5,7 @@ import { Button as Button$1, Transition, Dialog, TransitionChild, DialogPanel, D
|
|
|
5
5
|
import clsx, { clsx as clsx$1 } from 'clsx';
|
|
6
6
|
import * as React11 from 'react';
|
|
7
7
|
import React11__default, { forwardRef, useId, useState, useCallback, createContext, memo, useRef, useEffect, Fragment as Fragment$1, useMemo, useContext, Suspense } from 'react';
|
|
8
|
-
import { AnimatePresence, motion, useMotionValue, useTransform, animate, useInView, useSpring } from 'framer-motion';
|
|
8
|
+
import { AnimatePresence, motion, useReducedMotion, useMotionValue, useTransform, animate, useInView, useSpring } from 'framer-motion';
|
|
9
9
|
import NextLink from 'next/link';
|
|
10
10
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
11
11
|
import { useTranslations, useLocale } from 'next-intl';
|
|
@@ -627,7 +627,7 @@ function LoadingSpinner({ className }) {
|
|
|
627
627
|
return /* @__PURE__ */ jsxs(
|
|
628
628
|
"svg",
|
|
629
629
|
{
|
|
630
|
-
className: clsx("h-4 w-4 animate-spin", className),
|
|
630
|
+
className: clsx("h-4 w-4 animate-spin motion-reduce:animate-none", className),
|
|
631
631
|
xmlns: "http://www.w3.org/2000/svg",
|
|
632
632
|
fill: "none",
|
|
633
633
|
viewBox: "0 0 24 24",
|
|
@@ -737,7 +737,8 @@ function IconButton({
|
|
|
737
737
|
isIosColor && finalColor === "ios-red" && "text-[#FF3B30] dark:text-[#FF453A]",
|
|
738
738
|
isIosColor && finalColor === "ios-green" && "text-[#34C759] dark:text-[#30D158]",
|
|
739
739
|
isIosColor && finalColor === "ios-orange" && "text-[#FF9500] dark:text-[#FF9F0A]",
|
|
740
|
-
isIosColor && finalColor === "ios-purple" && "text-[#AF52DE] dark:text-[#BF5AF2]"
|
|
740
|
+
isIosColor && finalColor === "ios-purple" && "text-[#AF52DE] dark:text-[#BF5AF2]",
|
|
741
|
+
!isIosColor && "text-slate-700 dark:text-slate-300"
|
|
741
742
|
),
|
|
742
743
|
outline: clsx(
|
|
743
744
|
"bg-transparent border",
|
|
@@ -925,6 +926,7 @@ var Input = forwardRef(
|
|
|
925
926
|
const helperId = `${inputId}-helper`;
|
|
926
927
|
const [isFocused, setIsFocused] = useState(false);
|
|
927
928
|
const [showPassword, setShowPassword] = useState(false);
|
|
929
|
+
const prefersReducedMotion2 = useReducedMotion();
|
|
928
930
|
const hasValue = value !== void 0 && value !== "";
|
|
929
931
|
const characterCount = typeof value === "string" ? value.length : 0;
|
|
930
932
|
const isOverLimit = maxCharacters ? characterCount > maxCharacters : false;
|
|
@@ -959,14 +961,14 @@ var Input = forwardRef(
|
|
|
959
961
|
liquid-surface h-12 w-full rounded-xl border-0
|
|
960
962
|
px-4 py-3 text-base
|
|
961
963
|
text-slate-900 dark:text-white
|
|
962
|
-
placeholder:text-slate-
|
|
964
|
+
placeholder:text-slate-500 dark:placeholder:text-slate-500
|
|
963
965
|
transition-all duration-200
|
|
964
966
|
disabled:cursor-not-allowed disabled:opacity-50
|
|
965
967
|
` : `
|
|
966
968
|
liquid-surface h-11 w-full rounded-xl
|
|
967
969
|
px-3.5 py-2.5 text-base
|
|
968
970
|
text-slate-900 dark:text-white
|
|
969
|
-
placeholder:text-slate-
|
|
971
|
+
placeholder:text-slate-500 dark:placeholder:text-slate-500
|
|
970
972
|
transition-all duration-200
|
|
971
973
|
disabled:cursor-not-allowed disabled:opacity-50
|
|
972
974
|
`;
|
|
@@ -994,7 +996,7 @@ var Input = forwardRef(
|
|
|
994
996
|
exit: { opacity: 0, scale: 0.8 },
|
|
995
997
|
transition: { duration: 0.15 },
|
|
996
998
|
onClick: togglePassword,
|
|
997
|
-
className: "p-
|
|
999
|
+
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",
|
|
998
1000
|
"aria-label": showPassword ? t("hidePassword") : t("showPassword"),
|
|
999
1001
|
children: showPassword ? /* @__PURE__ */ jsx(EyeSlashIcon, { className: "h-5 w-5" }) : /* @__PURE__ */ jsx(EyeIcon, { className: "h-5 w-5" })
|
|
1000
1002
|
}
|
|
@@ -1008,7 +1010,8 @@ var Input = forwardRef(
|
|
|
1008
1010
|
exit: { opacity: 0, scale: 0.8 },
|
|
1009
1011
|
transition: { duration: 0.15 },
|
|
1010
1012
|
onClick: handleClear,
|
|
1011
|
-
className: "p-
|
|
1013
|
+
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",
|
|
1014
|
+
"aria-label": "Clear input",
|
|
1012
1015
|
children: /* @__PURE__ */ jsx(XMarkIcon, { className: "h-5 w-5" })
|
|
1013
1016
|
}
|
|
1014
1017
|
) })
|
|
@@ -1036,7 +1039,7 @@ var Input = forwardRef(
|
|
|
1036
1039
|
children: successMessage
|
|
1037
1040
|
}
|
|
1038
1041
|
),
|
|
1039
|
-
!error && !successMessage && helperText && /* @__PURE__ */ jsx("p", { id: helperId, className: "text-sm text-slate-
|
|
1042
|
+
!error && !successMessage && helperText && /* @__PURE__ */ jsx("p", { id: helperId, className: "text-sm text-slate-600 dark:text-slate-400", children: helperText })
|
|
1040
1043
|
] }),
|
|
1041
1044
|
showCharacterCount && /* @__PURE__ */ jsxs(
|
|
1042
1045
|
"span",
|
|
@@ -1079,16 +1082,33 @@ var Input = forwardRef(
|
|
|
1079
1082
|
...props
|
|
1080
1083
|
}
|
|
1081
1084
|
),
|
|
1082
|
-
/* @__PURE__ */ jsx(
|
|
1085
|
+
prefersReducedMotion2 ? /* @__PURE__ */ jsx(
|
|
1086
|
+
"label",
|
|
1087
|
+
{
|
|
1088
|
+
htmlFor: inputId,
|
|
1089
|
+
className: `
|
|
1090
|
+
absolute left-3.5 pointer-events-none
|
|
1091
|
+
text-slate-500 dark:text-slate-400
|
|
1092
|
+
transition-all duration-200
|
|
1093
|
+
${icon ? "left-11" : ""}
|
|
1094
|
+
`,
|
|
1095
|
+
style: {
|
|
1096
|
+
top: hasValue || isFocused ? "0.5rem" : "50%",
|
|
1097
|
+
transform: hasValue || isFocused ? "none" : "translateY(-50%)",
|
|
1098
|
+
fontSize: hasValue || isFocused ? "0.75rem" : "1rem"
|
|
1099
|
+
},
|
|
1100
|
+
children: label
|
|
1101
|
+
}
|
|
1102
|
+
) : /* @__PURE__ */ jsx(
|
|
1083
1103
|
motion.label,
|
|
1084
1104
|
{
|
|
1085
1105
|
htmlFor: inputId,
|
|
1086
1106
|
className: `
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1107
|
+
absolute left-3.5 pointer-events-none
|
|
1108
|
+
text-slate-500 dark:text-slate-400
|
|
1109
|
+
transition-all duration-200
|
|
1110
|
+
${icon ? "left-11" : ""}
|
|
1111
|
+
`,
|
|
1092
1112
|
initial: false,
|
|
1093
1113
|
animate: {
|
|
1094
1114
|
top: hasValue || isFocused ? "0.5rem" : "50%",
|
|
@@ -1560,11 +1580,11 @@ var Select = forwardRef(
|
|
|
1560
1580
|
cursor-pointer
|
|
1561
1581
|
`,
|
|
1562
1582
|
children: [
|
|
1563
|
-
/* @__PURE__ */ jsx("span", { className: selectedOption ? "" : "text-slate-
|
|
1583
|
+
/* @__PURE__ */ jsx("span", { className: selectedOption ? "" : "text-slate-500", children: selectedOption?.label || placeholder }),
|
|
1564
1584
|
/* @__PURE__ */ jsx(
|
|
1565
1585
|
ChevronDownIcon,
|
|
1566
1586
|
{
|
|
1567
|
-
className: `h-5 w-5 text-slate-
|
|
1587
|
+
className: `h-5 w-5 text-slate-500 transition-transform duration-200
|
|
1568
1588
|
${isOpen ? "rotate-180" : ""}`
|
|
1569
1589
|
}
|
|
1570
1590
|
)
|
|
@@ -1601,7 +1621,7 @@ var Select = forwardRef(
|
|
|
1601
1621
|
}
|
|
1602
1622
|
) })
|
|
1603
1623
|
] }),
|
|
1604
|
-
error && /* @__PURE__ */ jsx("p", { className: "text-sm text-ios-red", children: error })
|
|
1624
|
+
error && /* @__PURE__ */ jsx("p", { className: "text-sm text-ios-red", role: "alert", "aria-live": "polite", children: error })
|
|
1605
1625
|
] });
|
|
1606
1626
|
}
|
|
1607
1627
|
return /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
@@ -1633,11 +1653,11 @@ var Select = forwardRef(
|
|
|
1633
1653
|
/* @__PURE__ */ jsx(
|
|
1634
1654
|
ChevronDownIcon,
|
|
1635
1655
|
{
|
|
1636
|
-
className: "absolute right-3 top-1/2 -translate-y-1/2 h-5 w-5 text-slate-
|
|
1656
|
+
className: "absolute right-3 top-1/2 -translate-y-1/2 h-5 w-5 text-slate-500 pointer-events-none"
|
|
1637
1657
|
}
|
|
1638
1658
|
)
|
|
1639
1659
|
] }),
|
|
1640
|
-
error && /* @__PURE__ */ jsx("p", { className: "text-sm text-ios-red", children: error })
|
|
1660
|
+
error && /* @__PURE__ */ jsx("p", { className: "text-sm text-ios-red", role: "alert", "aria-live": "polite", children: error })
|
|
1641
1661
|
] });
|
|
1642
1662
|
}
|
|
1643
1663
|
);
|
|
@@ -1685,13 +1705,13 @@ function DropdownSelect({
|
|
|
1685
1705
|
${error ? "border-ios-red ring-4 ring-ios-red/10" : ""}
|
|
1686
1706
|
`,
|
|
1687
1707
|
children: [
|
|
1688
|
-
/* @__PURE__ */ jsx("span", { className: selectedOption ? "" : "text-slate-
|
|
1708
|
+
/* @__PURE__ */ jsx("span", { className: selectedOption ? "" : "text-slate-500", children: selectedOption?.label || placeholder }),
|
|
1689
1709
|
/* @__PURE__ */ jsx(
|
|
1690
1710
|
motion.div,
|
|
1691
1711
|
{
|
|
1692
1712
|
animate: { rotate: isOpen ? 180 : 0 },
|
|
1693
1713
|
transition: { duration: 0.2 },
|
|
1694
|
-
children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "h-5 w-5 text-slate-
|
|
1714
|
+
children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "h-5 w-5 text-slate-500" })
|
|
1695
1715
|
}
|
|
1696
1716
|
)
|
|
1697
1717
|
]
|
|
@@ -1735,7 +1755,7 @@ function DropdownSelect({
|
|
|
1735
1755
|
}
|
|
1736
1756
|
)
|
|
1737
1757
|
] }) }),
|
|
1738
|
-
error && /* @__PURE__ */ jsx("p", { className: "text-sm text-ios-red", children: error })
|
|
1758
|
+
error && /* @__PURE__ */ jsx("p", { className: "text-sm text-ios-red", role: "alert", "aria-live": "polite", children: error })
|
|
1739
1759
|
] });
|
|
1740
1760
|
}
|
|
1741
1761
|
var sizes = {
|
|
@@ -1985,24 +2005,46 @@ function HeroSection({
|
|
|
1985
2005
|
labelExtra,
|
|
1986
2006
|
children
|
|
1987
2007
|
}) {
|
|
1988
|
-
return /* @__PURE__ */ jsxs(
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
1992
|
-
|
|
1993
|
-
|
|
1994
|
-
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
|
|
2002
|
-
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
|
|
2008
|
+
return /* @__PURE__ */ jsxs(
|
|
2009
|
+
"div",
|
|
2010
|
+
{
|
|
2011
|
+
role: "banner",
|
|
2012
|
+
"data-testid": "hero-section",
|
|
2013
|
+
className: "liquid-surface overflow-hidden rounded-2xl",
|
|
2014
|
+
children: [
|
|
2015
|
+
gradient && /* @__PURE__ */ jsx("div", { className: `h-1.5 w-full bg-gradient-to-r ${gradient}` }),
|
|
2016
|
+
/* @__PURE__ */ jsxs("div", { className: "p-5 sm:p-8", children: [
|
|
2017
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-slate-600 dark:text-white/70", children: [
|
|
2018
|
+
icon,
|
|
2019
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm font-medium", children: label }),
|
|
2020
|
+
labelExtra
|
|
2021
|
+
] }),
|
|
2022
|
+
/* @__PURE__ */ jsxs("div", { className: "mt-2 flex flex-wrap items-center justify-between gap-4", children: [
|
|
2023
|
+
/* @__PURE__ */ jsx(
|
|
2024
|
+
"h1",
|
|
2025
|
+
{
|
|
2026
|
+
"data-testid": "hero-title",
|
|
2027
|
+
className: "text-2xl font-bold tracking-tight text-slate-900 dark:text-white sm:text-4xl",
|
|
2028
|
+
children: title
|
|
2029
|
+
}
|
|
2030
|
+
),
|
|
2031
|
+
actions && /* @__PURE__ */ jsx("div", { className: "flex items-center gap-3", children: actions })
|
|
2032
|
+
] }),
|
|
2033
|
+
/* @__PURE__ */ jsx(
|
|
2034
|
+
"p",
|
|
2035
|
+
{
|
|
2036
|
+
"data-testid": "hero-subtitle",
|
|
2037
|
+
className: "mt-2 max-w-xl text-sm text-slate-500 dark:text-white/60 sm:mt-3 sm:text-lg",
|
|
2038
|
+
children: subtitle
|
|
2039
|
+
}
|
|
2040
|
+
),
|
|
2041
|
+
toolbar && /* @__PURE__ */ jsx("div", { "data-testid": "hero-toolbar", className: "mt-4", children: toolbar }),
|
|
2042
|
+
badges && /* @__PURE__ */ jsx("div", { className: "mt-6 flex flex-wrap items-center gap-4", children: badges }),
|
|
2043
|
+
children
|
|
2044
|
+
] })
|
|
2045
|
+
]
|
|
2046
|
+
}
|
|
2047
|
+
);
|
|
2006
2048
|
}
|
|
2007
2049
|
var DEFAULT_STYLE_CONFIG = {
|
|
2008
2050
|
default: {
|
|
@@ -2275,6 +2317,9 @@ function StatCard({
|
|
|
2275
2317
|
return /* @__PURE__ */ jsxs(
|
|
2276
2318
|
"div",
|
|
2277
2319
|
{
|
|
2320
|
+
role: "status",
|
|
2321
|
+
"aria-label": label,
|
|
2322
|
+
"data-testid": label ? `stat-card-${label.toLowerCase().replace(/\s+/g, "-")}` : "stat-card",
|
|
2278
2323
|
onClick,
|
|
2279
2324
|
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}`,
|
|
2280
2325
|
children: [
|
|
@@ -2306,6 +2351,7 @@ function StatCard({
|
|
|
2306
2351
|
/* @__PURE__ */ jsx(
|
|
2307
2352
|
"p",
|
|
2308
2353
|
{
|
|
2354
|
+
"data-testid": "stat-card-value",
|
|
2309
2355
|
className: `mt-4 text-3xl font-bold ${isActive ? "text-white" : isUrgent ? colorConfig.urgentValueColor || colorConfig.valueColor : colorConfig.valueColor}`,
|
|
2310
2356
|
children: value
|
|
2311
2357
|
}
|
|
@@ -2313,6 +2359,7 @@ function StatCard({
|
|
|
2313
2359
|
/* @__PURE__ */ jsx(
|
|
2314
2360
|
"p",
|
|
2315
2361
|
{
|
|
2362
|
+
"data-testid": "stat-card-label",
|
|
2316
2363
|
className: `mt-1 text-sm ${isActive ? "text-white/75" : "text-slate-500 dark:text-slate-400"}`,
|
|
2317
2364
|
children: label
|
|
2318
2365
|
}
|
|
@@ -2616,7 +2663,7 @@ function CircleSpinner({ size, color, className, ariaLabel }) {
|
|
|
2616
2663
|
"div",
|
|
2617
2664
|
{
|
|
2618
2665
|
className: clsx$1(
|
|
2619
|
-
"rounded-full animate-spin",
|
|
2666
|
+
"rounded-full animate-spin motion-reduce:animate-none",
|
|
2620
2667
|
config.size,
|
|
2621
2668
|
config.border,
|
|
2622
2669
|
colors3.track,
|
|
@@ -2631,9 +2678,10 @@ function CircleSpinner({ size, color, className, ariaLabel }) {
|
|
|
2631
2678
|
function DotsSpinner({ size, color, className, ariaLabel }) {
|
|
2632
2679
|
const config = sizeConfig[size];
|
|
2633
2680
|
const colors3 = colorClasses2[color];
|
|
2681
|
+
const prefersReducedMotion2 = useReducedMotion();
|
|
2634
2682
|
const dotVariants = {
|
|
2635
2683
|
initial: { scale: 0.8, opacity: 0.4 },
|
|
2636
|
-
animate: { scale: 1, opacity: 1 }
|
|
2684
|
+
animate: prefersReducedMotion2 ? { scale: 1, opacity: 1 } : { scale: 1, opacity: 1 }
|
|
2637
2685
|
};
|
|
2638
2686
|
return /* @__PURE__ */ jsx("div", { className: clsx$1("flex items-center gap-1", className), role: "status", "aria-label": ariaLabel, children: [0, 1, 2].map((index) => /* @__PURE__ */ jsx(
|
|
2639
2687
|
motion.div,
|
|
@@ -2646,7 +2694,7 @@ function DotsSpinner({ size, color, className, ariaLabel }) {
|
|
|
2646
2694
|
variants: dotVariants,
|
|
2647
2695
|
initial: "initial",
|
|
2648
2696
|
animate: "animate",
|
|
2649
|
-
transition: {
|
|
2697
|
+
transition: prefersReducedMotion2 ? { duration: 0 } : {
|
|
2650
2698
|
duration: 0.5,
|
|
2651
2699
|
repeat: Infinity,
|
|
2652
2700
|
repeatType: "reverse",
|
|
@@ -2659,16 +2707,17 @@ function DotsSpinner({ size, color, className, ariaLabel }) {
|
|
|
2659
2707
|
function PulseSpinner({ size, color, className, ariaLabel }) {
|
|
2660
2708
|
const config = sizeConfig[size];
|
|
2661
2709
|
const colors3 = colorClasses2[color];
|
|
2710
|
+
const prefersReducedMotion2 = useReducedMotion();
|
|
2662
2711
|
return /* @__PURE__ */ jsxs("div", { className: clsx$1("relative", config.size, className), role: "status", "aria-label": ariaLabel, children: [
|
|
2663
2712
|
/* @__PURE__ */ jsx(
|
|
2664
2713
|
motion.div,
|
|
2665
2714
|
{
|
|
2666
2715
|
className: clsx$1("absolute inset-0 rounded-full", colors3.dot),
|
|
2667
|
-
animate: {
|
|
2716
|
+
animate: prefersReducedMotion2 ? {} : {
|
|
2668
2717
|
scale: [1, 1.5, 1],
|
|
2669
2718
|
opacity: [0.7, 0, 0.7]
|
|
2670
2719
|
},
|
|
2671
|
-
transition: {
|
|
2720
|
+
transition: prefersReducedMotion2 ? { duration: 0 } : {
|
|
2672
2721
|
duration: 1.5,
|
|
2673
2722
|
repeat: Infinity,
|
|
2674
2723
|
ease: "easeInOut"
|
|
@@ -2703,7 +2752,8 @@ function Spinner({
|
|
|
2703
2752
|
{
|
|
2704
2753
|
size,
|
|
2705
2754
|
color,
|
|
2706
|
-
className
|
|
2755
|
+
className,
|
|
2756
|
+
ariaLabel
|
|
2707
2757
|
}
|
|
2708
2758
|
);
|
|
2709
2759
|
}
|
|
@@ -3008,10 +3058,42 @@ function SegmentedControl({
|
|
|
3008
3058
|
triggerHaptic("light");
|
|
3009
3059
|
onChange(segmentValue);
|
|
3010
3060
|
};
|
|
3061
|
+
const handleKeyDown = useCallback(
|
|
3062
|
+
(event) => {
|
|
3063
|
+
if (disabled) return;
|
|
3064
|
+
const currentIndex = normalizedSegments.findIndex((seg) => seg.value === value);
|
|
3065
|
+
let nextIndex = -1;
|
|
3066
|
+
if (event.key === "ArrowRight" || event.key === "ArrowDown") {
|
|
3067
|
+
event.preventDefault();
|
|
3068
|
+
nextIndex = (currentIndex + 1) % normalizedSegments.length;
|
|
3069
|
+
} else if (event.key === "ArrowLeft" || event.key === "ArrowUp") {
|
|
3070
|
+
event.preventDefault();
|
|
3071
|
+
nextIndex = (currentIndex - 1 + normalizedSegments.length) % normalizedSegments.length;
|
|
3072
|
+
} else if (event.key === "Home") {
|
|
3073
|
+
event.preventDefault();
|
|
3074
|
+
nextIndex = 0;
|
|
3075
|
+
} else if (event.key === "End") {
|
|
3076
|
+
event.preventDefault();
|
|
3077
|
+
nextIndex = normalizedSegments.length - 1;
|
|
3078
|
+
}
|
|
3079
|
+
if (nextIndex >= 0) {
|
|
3080
|
+
const nextSegment = normalizedSegments[nextIndex];
|
|
3081
|
+
onChange(nextSegment.value);
|
|
3082
|
+
triggerHaptic("light");
|
|
3083
|
+
const buttons = containerRef.current?.querySelectorAll("button");
|
|
3084
|
+
buttons?.[nextIndex]?.focus();
|
|
3085
|
+
}
|
|
3086
|
+
},
|
|
3087
|
+
[disabled, normalizedSegments, value, onChange]
|
|
3088
|
+
);
|
|
3011
3089
|
return /* @__PURE__ */ jsxs(
|
|
3012
3090
|
"div",
|
|
3013
3091
|
{
|
|
3014
3092
|
ref: containerRef,
|
|
3093
|
+
role: "tablist",
|
|
3094
|
+
"aria-live": "polite",
|
|
3095
|
+
"data-testid": "segmented-control",
|
|
3096
|
+
onKeyDown: handleKeyDown,
|
|
3015
3097
|
className: `
|
|
3016
3098
|
relative inline-flex items-center rounded-xl
|
|
3017
3099
|
bg-white/40 dark:bg-white/[0.08]
|
|
@@ -3038,6 +3120,11 @@ function SegmentedControl({
|
|
|
3038
3120
|
"button",
|
|
3039
3121
|
{
|
|
3040
3122
|
type: "button",
|
|
3123
|
+
role: "tab",
|
|
3124
|
+
"aria-selected": isSelected,
|
|
3125
|
+
"aria-label": segment.label,
|
|
3126
|
+
tabIndex: isSelected ? 0 : -1,
|
|
3127
|
+
"data-testid": `tab-${segment.value}`,
|
|
3041
3128
|
onClick: () => handleSelect(segment.value),
|
|
3042
3129
|
className: `
|
|
3043
3130
|
relative z-10 flex items-center justify-center gap-1.5
|
|
@@ -4233,7 +4320,7 @@ function TableSkeletonRow({
|
|
|
4233
4320
|
"div",
|
|
4234
4321
|
{
|
|
4235
4322
|
className: clsx(
|
|
4236
|
-
"h-4 rounded bg-slate-200 dark:bg-slate-700 animate-pulse",
|
|
4323
|
+
"h-4 rounded bg-slate-200 dark:bg-slate-700 animate-pulse motion-reduce:animate-none",
|
|
4237
4324
|
i === 0 ? "w-32" : i === columns - 1 ? "w-16" : "w-24"
|
|
4238
4325
|
)
|
|
4239
4326
|
}
|
|
@@ -4914,7 +5001,7 @@ function DynamicIslandNotification({
|
|
|
4914
5001
|
icon && /* @__PURE__ */ jsx("div", { className: `h-8 w-8 rounded-full ${styles2.iconBg} flex items-center justify-center shrink-0`, children: /* @__PURE__ */ jsx("div", { className: "h-5 w-5 text-white", children: icon }) }),
|
|
4915
5002
|
/* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
4916
5003
|
/* @__PURE__ */ jsx("p", { className: "text-sm font-semibold truncate", children: title }),
|
|
4917
|
-
message && /* @__PURE__ */ jsx("p", { className: "text-xs text-gray-
|
|
5004
|
+
message && /* @__PURE__ */ jsx("p", { className: "text-xs text-gray-500 truncate", children: message })
|
|
4918
5005
|
] })
|
|
4919
5006
|
] })
|
|
4920
5007
|
),
|
|
@@ -4925,7 +5012,7 @@ function DynamicIslandNotification({
|
|
|
4925
5012
|
/* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
4926
5013
|
appName && /* @__PURE__ */ jsx("p", { className: `text-[11px] uppercase tracking-wide font-medium ${styles2.accentColor}`, children: appName }),
|
|
4927
5014
|
/* @__PURE__ */ jsx("p", { className: "text-[15px] font-semibold leading-tight", children: title }),
|
|
4928
|
-
message && /* @__PURE__ */ jsx("p", { className: "text-[13px] text-gray-
|
|
5015
|
+
message && /* @__PURE__ */ jsx("p", { className: "text-[13px] text-gray-500 mt-0.5 truncate", children: message })
|
|
4929
5016
|
] })
|
|
4930
5017
|
] })
|
|
4931
5018
|
)
|
|
@@ -5042,7 +5129,7 @@ function NotificationBellButton() {
|
|
|
5042
5129
|
children: [
|
|
5043
5130
|
/* @__PURE__ */ jsx(BellIcon, { className: "h-5 w-5" }),
|
|
5044
5131
|
totalCount > 0 ? /* @__PURE__ */ jsxs("span", { className: "absolute top-1 right-1 flex h-2 w-2", children: [
|
|
5045
|
-
/* @__PURE__ */ jsx("span", { className: "animate-ping absolute inline-flex h-full w-full rounded-full bg-indigo-400 opacity-75" }),
|
|
5132
|
+
/* @__PURE__ */ jsx("span", { className: "animate-ping motion-reduce:animate-none absolute inline-flex h-full w-full rounded-full bg-indigo-400 opacity-75" }),
|
|
5046
5133
|
/* @__PURE__ */ jsx("span", { className: "relative inline-flex rounded-full h-2 w-2 bg-indigo-500" })
|
|
5047
5134
|
] }) : null
|
|
5048
5135
|
]
|
|
@@ -5149,7 +5236,7 @@ function NotificationDrawer({
|
|
|
5149
5236
|
{
|
|
5150
5237
|
type: "button",
|
|
5151
5238
|
onClick: () => onRemove(item.id),
|
|
5152
|
-
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",
|
|
5239
|
+
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",
|
|
5153
5240
|
"aria-label": t("dismiss"),
|
|
5154
5241
|
children: /* @__PURE__ */ jsx(XMarkIcon$1, { className: "h-3.5 w-3.5" })
|
|
5155
5242
|
}
|
|
@@ -5354,7 +5441,7 @@ var StatusBadge = forwardRef(function StatusBadge2({ status, label, size = "md",
|
|
|
5354
5441
|
"data-testid": `status-badge-${status}`,
|
|
5355
5442
|
className: `inline-flex items-center gap-1.5 rounded-full border font-semibold backdrop-blur-sm ${SIZE_STYLES[size]} ${toneStyle.container} ${className}`,
|
|
5356
5443
|
children: [
|
|
5357
|
-
IconComponent ? /* @__PURE__ */ jsx(IconComponent, { className: `h-3 w-3 ${configuredStatus.animateIcon ? "animate-spin" : ""}` }) : /* @__PURE__ */ jsx("span", { className: `h-2 w-2 rounded-full ${toneStyle.dot}` }),
|
|
5444
|
+
IconComponent ? /* @__PURE__ */ jsx(IconComponent, { className: `h-3 w-3 ${configuredStatus.animateIcon ? "animate-spin motion-reduce:animate-none" : ""}` }) : /* @__PURE__ */ jsx("span", { className: `h-2 w-2 rounded-full ${toneStyle.dot}` }),
|
|
5358
5445
|
resolvedLabel2
|
|
5359
5446
|
]
|
|
5360
5447
|
}
|
|
@@ -5384,11 +5471,14 @@ function GlassModal({
|
|
|
5384
5471
|
children,
|
|
5385
5472
|
panelClassName = "rounded-[2rem]",
|
|
5386
5473
|
contentClassName = "fixed inset-0 flex items-center justify-center overflow-y-auto p-3 sm:p-5 lg:p-6",
|
|
5387
|
-
zIndex = "z-50"
|
|
5388
|
-
|
|
5389
|
-
|
|
5390
|
-
|
|
5391
|
-
|
|
5474
|
+
zIndex = "z-50",
|
|
5475
|
+
overlayTestId,
|
|
5476
|
+
panelTestId,
|
|
5477
|
+
ariaLabelledBy
|
|
5478
|
+
}) {
|
|
5479
|
+
return /* @__PURE__ */ jsxs(Dialog, { open, onClose, className: `relative ${zIndex}`, "aria-labelledby": ariaLabelledBy, children: [
|
|
5480
|
+
/* @__PURE__ */ jsx(DialogBackdrop, { className: "fixed inset-0 bg-slate-900/40 backdrop-blur-md dark:bg-black/50", "data-testid": overlayTestId }),
|
|
5481
|
+
/* @__PURE__ */ jsx("div", { className: contentClassName, children: /* @__PURE__ */ jsx(DialogPanel, { className: panelClassName, "data-testid": panelTestId, children }) })
|
|
5392
5482
|
] });
|
|
5393
5483
|
}
|
|
5394
5484
|
function Text({ className, ...props }) {
|
|
@@ -5891,7 +5981,8 @@ function GlassModalShell({
|
|
|
5891
5981
|
type: "button",
|
|
5892
5982
|
onClick: onClose,
|
|
5893
5983
|
"aria-label": closeLabel,
|
|
5894
|
-
|
|
5984
|
+
"data-testid": "modal-close",
|
|
5985
|
+
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",
|
|
5895
5986
|
children: /* @__PURE__ */ jsx(XMarkIcon$1, { className: "h-5 w-5" })
|
|
5896
5987
|
}
|
|
5897
5988
|
),
|
|
@@ -5901,14 +5992,14 @@ function GlassModalShell({
|
|
|
5901
5992
|
] }),
|
|
5902
5993
|
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-start justify-between gap-3 pr-10", children: [
|
|
5903
5994
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
5904
|
-
/* @__PURE__ */ jsx("h2", { className: "text-xl font-bold text-slate-900 dark:text-white sm:text-2xl", children: title }),
|
|
5995
|
+
/* @__PURE__ */ 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 }),
|
|
5905
5996
|
subtitle && /* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-slate-500 dark:text-slate-400", children: subtitle })
|
|
5906
5997
|
] }),
|
|
5907
5998
|
headerActions && /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: headerActions })
|
|
5908
5999
|
] })
|
|
5909
6000
|
] }),
|
|
5910
6001
|
/* @__PURE__ */ jsx("div", { className: "max-h-[72vh] overflow-y-auto px-5 pb-5 sm:px-8 sm:pb-8", children }),
|
|
5911
|
-
footer && /* @__PURE__ */ jsx("div", { className: "border-t border-white/20 px-5 py-4 dark:border-white/10 sm:px-8", children: footer })
|
|
6002
|
+
footer && /* @__PURE__ */ 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 })
|
|
5912
6003
|
] });
|
|
5913
6004
|
return /* @__PURE__ */ jsx(
|
|
5914
6005
|
GlassModal,
|
|
@@ -5917,7 +6008,10 @@ function GlassModalShell({
|
|
|
5917
6008
|
onClose,
|
|
5918
6009
|
contentClassName: "fixed inset-0 overflow-y-auto p-3 sm:p-6",
|
|
5919
6010
|
panelClassName: `liquid-surface-strong w-full overflow-hidden rounded-2xl mx-auto mt-[4vh] sm:mt-[8vh] ${SIZE_CLASSES2[maxWidth]} ${className}`,
|
|
6011
|
+
ariaLabelledBy: "modal-title",
|
|
5920
6012
|
zIndex,
|
|
6013
|
+
overlayTestId: "modal-overlay",
|
|
6014
|
+
panelTestId: "modal-panel",
|
|
5921
6015
|
children: onSubmit ? /* @__PURE__ */ jsx("form", { onSubmit: handleSubmit, children: inner }) : inner
|
|
5922
6016
|
}
|
|
5923
6017
|
);
|
|
@@ -5948,6 +6042,7 @@ function GlassFormModal({
|
|
|
5948
6042
|
disabled: isLoading,
|
|
5949
6043
|
outline: true,
|
|
5950
6044
|
className: "w-full sm:w-auto",
|
|
6045
|
+
"data-testid": "form-modal-cancel",
|
|
5951
6046
|
children: cancelLabel
|
|
5952
6047
|
}
|
|
5953
6048
|
),
|
|
@@ -5960,11 +6055,12 @@ function GlassFormModal({
|
|
|
5960
6055
|
loadingText: submitLabel,
|
|
5961
6056
|
color: "ios-glass-blue",
|
|
5962
6057
|
className: "w-full sm:w-auto",
|
|
6058
|
+
"data-testid": "form-modal-submit",
|
|
5963
6059
|
children: submitLabel
|
|
5964
6060
|
}
|
|
5965
6061
|
)
|
|
5966
6062
|
] }) }) : void 0;
|
|
5967
|
-
return /* @__PURE__ */ jsx(
|
|
6063
|
+
return /* @__PURE__ */ jsx("div", { "data-testid": "form-modal", role: "dialog", "aria-modal": "true", "aria-label": title, children: /* @__PURE__ */ jsx(
|
|
5968
6064
|
GlassModalShell,
|
|
5969
6065
|
{
|
|
5970
6066
|
open,
|
|
@@ -5978,7 +6074,7 @@ function GlassFormModal({
|
|
|
5978
6074
|
footer: defaultFooter,
|
|
5979
6075
|
children
|
|
5980
6076
|
}
|
|
5981
|
-
);
|
|
6077
|
+
) });
|
|
5982
6078
|
}
|
|
5983
6079
|
function ContextMenu({
|
|
5984
6080
|
position,
|
|
@@ -6619,12 +6715,13 @@ function wrapperClass(error) {
|
|
|
6619
6715
|
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"
|
|
6620
6716
|
].join(" ");
|
|
6621
6717
|
}
|
|
6622
|
-
function FieldMeta({ hint, error }) {
|
|
6718
|
+
function FieldMeta({ hint, error, errorId, hintId }) {
|
|
6623
6719
|
if (!hint && !error) return null;
|
|
6624
6720
|
return /* @__PURE__ */ jsx(
|
|
6625
6721
|
"p",
|
|
6626
6722
|
{
|
|
6627
|
-
|
|
6723
|
+
id: error ? errorId : hintId,
|
|
6724
|
+
className: `mt-1.5 text-xs ${error ? "text-red-500" : "text-slate-600 dark:text-gray-400"}`,
|
|
6628
6725
|
...error ? { role: "alert", "aria-live": "polite" } : {},
|
|
6629
6726
|
children: error ?? hint
|
|
6630
6727
|
}
|
|
@@ -6641,23 +6738,32 @@ function FormInput({
|
|
|
6641
6738
|
onValueChange,
|
|
6642
6739
|
...props
|
|
6643
6740
|
}) {
|
|
6644
|
-
|
|
6645
|
-
|
|
6741
|
+
const autoId = useId();
|
|
6742
|
+
const inputId = props.id ?? autoId;
|
|
6743
|
+
const errorId = `${inputId}-error`;
|
|
6744
|
+
const hintId = `${inputId}-hint`;
|
|
6745
|
+
const describedBy = error ? errorId : hint ? hintId : void 0;
|
|
6746
|
+
return /* @__PURE__ */ jsxs("div", { "data-testid": label ? `field-${label.toLowerCase().replace(/\s+/g, "-")}` : "form-field", children: [
|
|
6747
|
+
label ? /* @__PURE__ */ jsxs("label", { htmlFor: inputId, className: `mb-1.5 block font-medium text-gray-500 dark:text-gray-400 ${labelClasses[inputSize]}`, children: [
|
|
6646
6748
|
label,
|
|
6647
6749
|
required ? /* @__PURE__ */ jsx("span", { className: "ml-0.5 text-red-500", children: "*" }) : null
|
|
6648
6750
|
] }) : null,
|
|
6649
6751
|
/* @__PURE__ */ jsx("div", { className: wrapperClass(error), children: /* @__PURE__ */ jsxs("div", { className: `relative flex items-center ${sizeClasses3[inputSize]} ${className}`, children: [
|
|
6650
|
-
icon ? /* @__PURE__ */ jsx("span", { className: "mr-2 text-gray-400 dark:text-gray-500", children: icon }) : null,
|
|
6752
|
+
icon ? /* @__PURE__ */ jsx("span", { className: "mr-2 text-gray-400 dark:text-gray-500", "aria-hidden": "true", children: icon }) : null,
|
|
6651
6753
|
/* @__PURE__ */ jsx(
|
|
6652
6754
|
"input",
|
|
6653
6755
|
{
|
|
6654
6756
|
...props,
|
|
6655
|
-
|
|
6757
|
+
id: inputId,
|
|
6758
|
+
required,
|
|
6759
|
+
"aria-invalid": error ? true : void 0,
|
|
6760
|
+
"aria-describedby": describedBy,
|
|
6761
|
+
className: "w-full bg-transparent text-gray-900 placeholder:text-slate-500 focus:outline-none dark:text-white dark:placeholder:text-gray-500",
|
|
6656
6762
|
onChange: (event) => onValueChange?.(event.target.value)
|
|
6657
6763
|
}
|
|
6658
6764
|
)
|
|
6659
6765
|
] }) }),
|
|
6660
|
-
/* @__PURE__ */ jsx(FieldMeta, { hint, error })
|
|
6766
|
+
/* @__PURE__ */ jsx(FieldMeta, { hint, error, errorId, hintId })
|
|
6661
6767
|
] });
|
|
6662
6768
|
}
|
|
6663
6769
|
function FormTextarea({
|
|
@@ -6670,8 +6776,13 @@ function FormTextarea({
|
|
|
6670
6776
|
onValueChange,
|
|
6671
6777
|
...props
|
|
6672
6778
|
}) {
|
|
6673
|
-
|
|
6674
|
-
|
|
6779
|
+
const autoId = useId();
|
|
6780
|
+
const inputId = props.id ?? autoId;
|
|
6781
|
+
const errorId = `${inputId}-error`;
|
|
6782
|
+
const hintId = `${inputId}-hint`;
|
|
6783
|
+
const describedBy = error ? errorId : hint ? hintId : void 0;
|
|
6784
|
+
return /* @__PURE__ */ jsxs("div", { "data-testid": label ? `field-${label.toLowerCase().replace(/\s+/g, "-")}` : "form-field", children: [
|
|
6785
|
+
label ? /* @__PURE__ */ jsxs("label", { htmlFor: inputId, className: `mb-1.5 block font-medium text-gray-500 dark:text-gray-400 ${labelClasses[inputSize]}`, children: [
|
|
6675
6786
|
label,
|
|
6676
6787
|
required ? /* @__PURE__ */ jsx("span", { className: "ml-0.5 text-red-500", children: "*" }) : null
|
|
6677
6788
|
] }) : null,
|
|
@@ -6679,11 +6790,15 @@ function FormTextarea({
|
|
|
6679
6790
|
"textarea",
|
|
6680
6791
|
{
|
|
6681
6792
|
...props,
|
|
6682
|
-
|
|
6793
|
+
id: inputId,
|
|
6794
|
+
required,
|
|
6795
|
+
"aria-invalid": error ? true : void 0,
|
|
6796
|
+
"aria-describedby": describedBy,
|
|
6797
|
+
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}`,
|
|
6683
6798
|
onChange: (event) => onValueChange?.(event.target.value)
|
|
6684
6799
|
}
|
|
6685
6800
|
) }),
|
|
6686
|
-
/* @__PURE__ */ jsx(FieldMeta, { hint, error })
|
|
6801
|
+
/* @__PURE__ */ jsx(FieldMeta, { hint, error, errorId, hintId })
|
|
6687
6802
|
] });
|
|
6688
6803
|
}
|
|
6689
6804
|
var priceSizeConfig = {
|
|
@@ -6715,9 +6830,14 @@ function FormPriceInput({
|
|
|
6715
6830
|
max,
|
|
6716
6831
|
className = ""
|
|
6717
6832
|
}) {
|
|
6833
|
+
const autoId = useId();
|
|
6834
|
+
const inputId = autoId;
|
|
6835
|
+
const errorId = `${inputId}-error`;
|
|
6836
|
+
const hintId = `${inputId}-hint`;
|
|
6837
|
+
const describedBy = error ? errorId : hint ? hintId : void 0;
|
|
6718
6838
|
const sizes3 = priceSizeConfig[priceSize ?? defaultPriceSize(inputSize)];
|
|
6719
|
-
return /* @__PURE__ */ jsxs("div", { children: [
|
|
6720
|
-
label ? /* @__PURE__ */ jsxs("label", { className: `mb-1.5 block font-medium text-gray-500 dark:text-gray-400 ${labelClasses[inputSize]}`, children: [
|
|
6839
|
+
return /* @__PURE__ */ jsxs("div", { "data-testid": label ? `field-${label.toLowerCase().replace(/\s+/g, "-")}` : "form-field", children: [
|
|
6840
|
+
label ? /* @__PURE__ */ jsxs("label", { htmlFor: inputId, className: `mb-1.5 block font-medium text-gray-500 dark:text-gray-400 ${labelClasses[inputSize]}`, children: [
|
|
6721
6841
|
label,
|
|
6722
6842
|
required ? /* @__PURE__ */ jsx("span", { className: "ml-0.5 text-red-500", children: "*" }) : null
|
|
6723
6843
|
] }) : null,
|
|
@@ -6733,19 +6853,24 @@ function FormPriceInput({
|
|
|
6733
6853
|
/* @__PURE__ */ jsx(
|
|
6734
6854
|
"input",
|
|
6735
6855
|
{
|
|
6856
|
+
id: inputId,
|
|
6736
6857
|
type: "number",
|
|
6737
6858
|
step,
|
|
6738
6859
|
value,
|
|
6739
6860
|
onChange: (event) => onValueChange?.(event.target.value),
|
|
6740
6861
|
placeholder,
|
|
6741
6862
|
disabled,
|
|
6863
|
+
required,
|
|
6742
6864
|
min,
|
|
6743
6865
|
max,
|
|
6744
|
-
|
|
6866
|
+
"aria-invalid": error ? true : void 0,
|
|
6867
|
+
"aria-describedby": describedBy,
|
|
6868
|
+
"aria-label": label ? `${label} in ${currencySymbol}` : void 0,
|
|
6869
|
+
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}`
|
|
6745
6870
|
}
|
|
6746
6871
|
)
|
|
6747
6872
|
] }) }),
|
|
6748
|
-
/* @__PURE__ */ jsx(FieldMeta, { hint, error })
|
|
6873
|
+
/* @__PURE__ */ jsx(FieldMeta, { hint, error, errorId, hintId })
|
|
6749
6874
|
] });
|
|
6750
6875
|
}
|
|
6751
6876
|
function FormSelect({
|
|
@@ -6759,8 +6884,13 @@ function FormSelect({
|
|
|
6759
6884
|
options,
|
|
6760
6885
|
...props
|
|
6761
6886
|
}) {
|
|
6762
|
-
|
|
6763
|
-
|
|
6887
|
+
const autoId = useId();
|
|
6888
|
+
const inputId = props.id ?? autoId;
|
|
6889
|
+
const errorId = `${inputId}-error`;
|
|
6890
|
+
const hintId = `${inputId}-hint`;
|
|
6891
|
+
const describedBy = error ? errorId : hint ? hintId : void 0;
|
|
6892
|
+
return /* @__PURE__ */ jsxs("div", { "data-testid": label ? `field-${label.toLowerCase().replace(/\s+/g, "-")}` : "form-field", children: [
|
|
6893
|
+
label ? /* @__PURE__ */ jsxs("label", { htmlFor: inputId, className: `mb-1.5 block font-medium text-gray-500 dark:text-gray-400 ${labelClasses[inputSize]}`, children: [
|
|
6764
6894
|
label,
|
|
6765
6895
|
required ? /* @__PURE__ */ jsx("span", { className: "ml-0.5 text-red-500", children: "*" }) : null
|
|
6766
6896
|
] }) : null,
|
|
@@ -6768,12 +6898,16 @@ function FormSelect({
|
|
|
6768
6898
|
"select",
|
|
6769
6899
|
{
|
|
6770
6900
|
...props,
|
|
6901
|
+
id: inputId,
|
|
6902
|
+
required,
|
|
6903
|
+
"aria-invalid": error ? true : void 0,
|
|
6904
|
+
"aria-describedby": describedBy,
|
|
6771
6905
|
className: `w-full bg-transparent ${sizeClasses3[inputSize]} text-gray-900 focus:outline-none dark:text-white ${className}`,
|
|
6772
6906
|
onChange: (event) => onValueChange?.(event.target.value),
|
|
6773
6907
|
children: options.map((option) => /* @__PURE__ */ jsx("option", { value: option.value, children: option.label }, option.value))
|
|
6774
6908
|
}
|
|
6775
6909
|
) }),
|
|
6776
|
-
/* @__PURE__ */ jsx(FieldMeta, { hint, error })
|
|
6910
|
+
/* @__PURE__ */ jsx(FieldMeta, { hint, error, errorId, hintId })
|
|
6777
6911
|
] });
|
|
6778
6912
|
}
|
|
6779
6913
|
var Form = React11__default.forwardRef(
|
|
@@ -6955,7 +7089,7 @@ function BaseForm({
|
|
|
6955
7089
|
color: "ios-glass-blue",
|
|
6956
7090
|
disabled: isLoading || submitDisabled,
|
|
6957
7091
|
children: [
|
|
6958
|
-
isLoading && /* @__PURE__ */ jsx("span", { className: "h-4 w-4 animate-spin rounded-full border-2 border-white border-t-transparent" }),
|
|
7092
|
+
isLoading && /* @__PURE__ */ jsx("span", { className: "h-4 w-4 animate-spin motion-reduce:animate-none rounded-full border-2 border-white border-t-transparent" }),
|
|
6959
7093
|
submitLabel
|
|
6960
7094
|
]
|
|
6961
7095
|
}
|
|
@@ -7276,7 +7410,7 @@ function StepNavigationButtons({
|
|
|
7276
7410
|
onClick: onContinue,
|
|
7277
7411
|
className: `${CONTINUE_BUTTON_CLASSES}${!onBack ? " w-full" : ""}`,
|
|
7278
7412
|
children: isLoading && showSpinner ? /* @__PURE__ */ jsxs("span", { className: "flex items-center justify-center gap-2", children: [
|
|
7279
|
-
/* @__PURE__ */ jsx("span", { className: "h-4 w-4 animate-spin rounded-full border-2 border-white border-t-transparent" }),
|
|
7413
|
+
/* @__PURE__ */ jsx("span", { className: "h-4 w-4 animate-spin motion-reduce:animate-none rounded-full border-2 border-white border-t-transparent" }),
|
|
7280
7414
|
displayLabel
|
|
7281
7415
|
] }) : displayLabel
|
|
7282
7416
|
}
|
|
@@ -7307,7 +7441,7 @@ function SearchFilterToolbar({
|
|
|
7307
7441
|
label
|
|
7308
7442
|
};
|
|
7309
7443
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
7310
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
|
|
7444
|
+
/* @__PURE__ */ jsxs("div", { role: "search", "data-testid": "search-toolbar", className: "flex items-center gap-3", children: [
|
|
7311
7445
|
/* @__PURE__ */ 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: [
|
|
7312
7446
|
/* @__PURE__ */ jsx(MagnifyingGlassIcon, { className: "h-5 w-5 shrink-0 text-slate-400 dark:text-slate-500" }),
|
|
7313
7447
|
filterPills,
|
|
@@ -7318,7 +7452,9 @@ function SearchFilterToolbar({
|
|
|
7318
7452
|
value: query,
|
|
7319
7453
|
onChange: (event) => onQueryChange(event.target.value),
|
|
7320
7454
|
placeholder,
|
|
7321
|
-
|
|
7455
|
+
"aria-label": label,
|
|
7456
|
+
"data-testid": "search-input",
|
|
7457
|
+
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"
|
|
7322
7458
|
}
|
|
7323
7459
|
)
|
|
7324
7460
|
] }),
|
|
@@ -7406,6 +7542,12 @@ function SearchFilterToolbar({
|
|
|
7406
7542
|
function isPlainTextTitle(title) {
|
|
7407
7543
|
return typeof title === "string" || typeof title === "number";
|
|
7408
7544
|
}
|
|
7545
|
+
function getTestIdFromTitle(title) {
|
|
7546
|
+
if (isPlainTextTitle(title)) {
|
|
7547
|
+
return `entity-card-${String(title).toLowerCase().replace(/\s+/g, "-")}`;
|
|
7548
|
+
}
|
|
7549
|
+
return "entity-card";
|
|
7550
|
+
}
|
|
7409
7551
|
function StatusBadgeInternal({ status }) {
|
|
7410
7552
|
const tCommon = useTranslations("common");
|
|
7411
7553
|
if (typeof status !== "boolean") {
|
|
@@ -7432,9 +7574,24 @@ function EntityCard({
|
|
|
7432
7574
|
dragProps
|
|
7433
7575
|
}) {
|
|
7434
7576
|
const isInteractive = Boolean(onClick);
|
|
7577
|
+
const plainTextTitle = isPlainTextTitle(title) ? String(title) : void 0;
|
|
7578
|
+
const handleKeyDown = useCallback(
|
|
7579
|
+
(event) => {
|
|
7580
|
+
if (onClick && (event.key === "Enter" || event.key === " ")) {
|
|
7581
|
+
event.preventDefault();
|
|
7582
|
+
onClick();
|
|
7583
|
+
}
|
|
7584
|
+
},
|
|
7585
|
+
[onClick]
|
|
7586
|
+
);
|
|
7435
7587
|
return /* @__PURE__ */ jsxs(
|
|
7436
7588
|
Card,
|
|
7437
7589
|
{
|
|
7590
|
+
role: isInteractive ? "article" : "listitem",
|
|
7591
|
+
"aria-label": isInteractive ? plainTextTitle : void 0,
|
|
7592
|
+
"data-testid": getTestIdFromTitle(title),
|
|
7593
|
+
tabIndex: isInteractive ? 0 : void 0,
|
|
7594
|
+
onKeyDown: isInteractive ? handleKeyDown : void 0,
|
|
7438
7595
|
className: `group overflow-hidden transition-all duration-200 hover:-translate-y-0.5 hover:shadow-md ${isInteractive ? "cursor-pointer" : ""} ${className}`,
|
|
7439
7596
|
onPress: onClick,
|
|
7440
7597
|
pressable: isInteractive,
|
|
@@ -7443,21 +7600,21 @@ function EntityCard({
|
|
|
7443
7600
|
accentGradient && /* @__PURE__ */ jsx("div", { className: `h-1.5 w-full bg-gradient-to-r ${accentGradient}` }),
|
|
7444
7601
|
/* @__PURE__ */ jsxs("div", { className: "p-4", children: [
|
|
7445
7602
|
/* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-3", children: [
|
|
7446
|
-
/* @__PURE__ */ jsx(
|
|
7603
|
+
/* @__PURE__ */ jsx("div", { "data-testid": "entity-card-title", children: /* @__PURE__ */ jsx(
|
|
7447
7604
|
ItemSummary,
|
|
7448
7605
|
{
|
|
7449
7606
|
icon,
|
|
7450
7607
|
title,
|
|
7451
|
-
subtitle,
|
|
7608
|
+
subtitle: subtitle ? /* @__PURE__ */ jsx("span", { "data-testid": "entity-card-subtitle", children: subtitle }) : void 0,
|
|
7452
7609
|
iconContainerClassName: "shrink-0",
|
|
7453
7610
|
titleClassName: isPlainTextTitle(title) ? "truncate font-semibold text-slate-900 dark:text-white" : "font-semibold text-slate-900 dark:text-white",
|
|
7454
7611
|
subtitleClassName: "mt-0.5 text-xs text-slate-500 dark:text-slate-400"
|
|
7455
7612
|
}
|
|
7456
|
-
),
|
|
7613
|
+
) }),
|
|
7457
7614
|
status !== void 0 && /* @__PURE__ */ jsx(StatusBadgeInternal, { status })
|
|
7458
7615
|
] }),
|
|
7459
7616
|
children && /* @__PURE__ */ jsx("div", { className: "mt-3", children }),
|
|
7460
|
-
footer && /* @__PURE__ */ 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 })
|
|
7617
|
+
footer && /* @__PURE__ */ 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 })
|
|
7461
7618
|
] })
|
|
7462
7619
|
]
|
|
7463
7620
|
}
|
|
@@ -7606,6 +7763,10 @@ function FilterTileButton({
|
|
|
7606
7763
|
{
|
|
7607
7764
|
type: "button",
|
|
7608
7765
|
onClick,
|
|
7766
|
+
role: "checkbox",
|
|
7767
|
+
"aria-checked": isActive,
|
|
7768
|
+
"aria-label": label,
|
|
7769
|
+
"data-testid": `filter-tile-${label.toLowerCase().replace(/\s+/g, "-")}`,
|
|
7609
7770
|
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}`,
|
|
7610
7771
|
children: [
|
|
7611
7772
|
/* @__PURE__ */ jsx(
|
|
@@ -8044,8 +8205,8 @@ function AnalysisSkeleton() {
|
|
|
8044
8205
|
}
|
|
8045
8206
|
|
|
8046
8207
|
// src/components/skeletons/shimmer.tsx
|
|
8047
|
-
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%]";
|
|
8048
|
-
var shimmerWhiteClass = "bg-white/20 animate-pulse";
|
|
8208
|
+
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%]";
|
|
8209
|
+
var shimmerWhiteClass = "bg-white/20 animate-pulse motion-reduce:animate-none";
|
|
8049
8210
|
function SectionHeaderSkeleton() {
|
|
8050
8211
|
return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
|
|
8051
8212
|
/* @__PURE__ */ jsx("div", { className: `h-10 w-10 rounded-lg ${shimmerClass}` }),
|
|
@@ -8640,6 +8801,7 @@ function Badge({ color = "zinc", className, ...props }) {
|
|
|
8640
8801
|
return /* @__PURE__ */ jsx(
|
|
8641
8802
|
"span",
|
|
8642
8803
|
{
|
|
8804
|
+
"data-testid": "badge",
|
|
8643
8805
|
...props,
|
|
8644
8806
|
className: clsx(
|
|
8645
8807
|
className,
|
|
@@ -8854,14 +9016,14 @@ function DynamicIslandConfirm({
|
|
|
8854
9016
|
triggerHaptic("warning");
|
|
8855
9017
|
}
|
|
8856
9018
|
}, [open]);
|
|
8857
|
-
return /* @__PURE__ */ jsxs(Dialog, { open, onClose, className: "relative z-[120]", children: [
|
|
9019
|
+
return /* @__PURE__ */ jsxs(Dialog, { open, onClose, className: "relative z-[120]", "aria-labelledby": "dynamic-island-title", children: [
|
|
8858
9020
|
/* @__PURE__ */ jsx("div", { className: "fixed inset-0 bg-black/10 backdrop-blur-[2px]" }),
|
|
8859
9021
|
/* @__PURE__ */ jsx("div", { className: "fixed inset-0 flex items-start justify-center pt-3 px-4", children: /* @__PURE__ */ jsxs(DialogPanel, { className: "w-full max-w-sm rounded-[28px] bg-black/95 p-3 text-white shadow-2xl", children: [
|
|
8860
9022
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 px-2 py-1", children: [
|
|
8861
9023
|
/* @__PURE__ */ jsx("div", { className: `h-9 w-9 shrink-0 rounded-xl ${iconBackground} flex items-center justify-center`, children: icon ?? /* @__PURE__ */ jsx(TrashIcon, { className: "h-5 w-5 text-white" }) }),
|
|
8862
9024
|
/* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
|
|
8863
|
-
/* @__PURE__ */ jsx("p", { className: "text-[11px] uppercase tracking-wide text-gray-
|
|
8864
|
-
/* @__PURE__ */ jsx("p", { className: "text-sm font-semibold", children: title })
|
|
9025
|
+
/* @__PURE__ */ jsx("p", { className: "text-[11px] uppercase tracking-wide text-gray-500", children: appName }),
|
|
9026
|
+
/* @__PURE__ */ jsx("p", { id: "dynamic-island-title", className: "text-sm font-semibold", children: title })
|
|
8865
9027
|
] })
|
|
8866
9028
|
] }),
|
|
8867
9029
|
/* @__PURE__ */ jsxs("div", { className: "mt-2 grid grid-cols-2 gap-2", children: [
|
|
@@ -8870,7 +9032,7 @@ function DynamicIslandConfirm({
|
|
|
8870
9032
|
{
|
|
8871
9033
|
type: "button",
|
|
8872
9034
|
onClick: onClose,
|
|
8873
|
-
className: "rounded-xl bg-white/10 px-3 py-
|
|
9035
|
+
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",
|
|
8874
9036
|
children: resolvedCancelLabel
|
|
8875
9037
|
}
|
|
8876
9038
|
),
|
|
@@ -8879,7 +9041,7 @@ function DynamicIslandConfirm({
|
|
|
8879
9041
|
{
|
|
8880
9042
|
type: "button",
|
|
8881
9043
|
onClick: onConfirm,
|
|
8882
|
-
className: "rounded-xl bg-ios-red px-3 py-
|
|
9044
|
+
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",
|
|
8883
9045
|
children: resolvedConfirmLabel
|
|
8884
9046
|
}
|
|
8885
9047
|
)
|
|
@@ -9431,66 +9593,80 @@ var ACCENT_MAP = {
|
|
|
9431
9593
|
function PageEmptyState({ title, message, iconName }) {
|
|
9432
9594
|
const Icon = ICON_MAP[iconName] || FallbackIcon;
|
|
9433
9595
|
const accent = ACCENT_MAP[iconName] || ACCENT_MAP["folder-open"];
|
|
9434
|
-
|
|
9435
|
-
|
|
9596
|
+
const prefersReducedMotion2 = useReducedMotion();
|
|
9597
|
+
const noMotion = { opacity: 1, scale: 1, y: 0 };
|
|
9598
|
+
const noTransition = { duration: 0 };
|
|
9599
|
+
return /* @__PURE__ */ jsx(
|
|
9600
|
+
"div",
|
|
9436
9601
|
{
|
|
9437
|
-
|
|
9438
|
-
|
|
9439
|
-
|
|
9440
|
-
className: "
|
|
9441
|
-
children:
|
|
9442
|
-
|
|
9443
|
-
|
|
9444
|
-
{
|
|
9445
|
-
|
|
9446
|
-
|
|
9447
|
-
|
|
9448
|
-
|
|
9449
|
-
|
|
9450
|
-
}
|
|
9451
|
-
),
|
|
9452
|
-
/* @__PURE__ */ jsx(
|
|
9453
|
-
motion.h3,
|
|
9454
|
-
{
|
|
9455
|
-
initial: { y: 12, opacity: 0 },
|
|
9456
|
-
animate: { y: 0, opacity: 1 },
|
|
9457
|
-
transition: { ...springPresets.default, delay: 0.1 },
|
|
9458
|
-
className: "text-xl font-semibold text-gray-900 dark:text-white",
|
|
9459
|
-
children: title
|
|
9460
|
-
}
|
|
9461
|
-
),
|
|
9462
|
-
/* @__PURE__ */ jsx(
|
|
9463
|
-
motion.p,
|
|
9464
|
-
{
|
|
9465
|
-
initial: { y: 12, opacity: 0 },
|
|
9466
|
-
animate: { y: 0, opacity: 1 },
|
|
9467
|
-
transition: { ...springPresets.default, delay: 0.15 },
|
|
9468
|
-
className: "mt-3 text-sm text-gray-500 dark:text-gray-400 max-w-sm mx-auto leading-relaxed",
|
|
9469
|
-
children: message
|
|
9470
|
-
}
|
|
9471
|
-
),
|
|
9472
|
-
/* @__PURE__ */ jsx(
|
|
9473
|
-
motion.div,
|
|
9474
|
-
{
|
|
9475
|
-
initial: { opacity: 0 },
|
|
9476
|
-
animate: { opacity: 1 },
|
|
9477
|
-
transition: { delay: 0.3 },
|
|
9478
|
-
className: "mt-8 flex items-center justify-center gap-1.5",
|
|
9479
|
-
children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx(
|
|
9602
|
+
role: "region",
|
|
9603
|
+
"aria-label": title,
|
|
9604
|
+
"data-testid": "empty-state",
|
|
9605
|
+
className: "flex items-center justify-center py-20",
|
|
9606
|
+
children: /* @__PURE__ */ jsxs(
|
|
9607
|
+
motion.div,
|
|
9608
|
+
{
|
|
9609
|
+
initial: prefersReducedMotion2 ? false : { opacity: 0, scale: 0.95 },
|
|
9610
|
+
animate: prefersReducedMotion2 ? noMotion : { opacity: 1, scale: 1 },
|
|
9611
|
+
transition: prefersReducedMotion2 ? noTransition : springPresets.gentle,
|
|
9612
|
+
className: "liquid-surface w-full max-w-lg rounded-2xl px-8 py-14 text-center",
|
|
9613
|
+
children: [
|
|
9614
|
+
/* @__PURE__ */ jsx(
|
|
9480
9615
|
motion.div,
|
|
9481
9616
|
{
|
|
9482
|
-
initial: { scale: 0 },
|
|
9483
|
-
animate: { scale: 1 },
|
|
9484
|
-
transition:
|
|
9485
|
-
className: "
|
|
9486
|
-
|
|
9487
|
-
|
|
9488
|
-
)
|
|
9489
|
-
|
|
9490
|
-
|
|
9491
|
-
|
|
9617
|
+
initial: prefersReducedMotion2 ? false : { scale: 0.6, opacity: 0 },
|
|
9618
|
+
animate: prefersReducedMotion2 ? noMotion : { scale: 1, opacity: 1 },
|
|
9619
|
+
transition: prefersReducedMotion2 ? noTransition : springPresets.bouncy,
|
|
9620
|
+
className: "mx-auto mb-6",
|
|
9621
|
+
children: /* @__PURE__ */ jsx("div", { className: `inline-flex h-20 w-20 items-center justify-center rounded-full backdrop-blur-md border ${accent.container}`, children: /* @__PURE__ */ jsx(Icon, { className: `h-10 w-10 ${accent.icon}` }) })
|
|
9622
|
+
}
|
|
9623
|
+
),
|
|
9624
|
+
/* @__PURE__ */ jsx(
|
|
9625
|
+
motion.h3,
|
|
9626
|
+
{
|
|
9627
|
+
"data-testid": "empty-state-title",
|
|
9628
|
+
initial: prefersReducedMotion2 ? false : { y: 12, opacity: 0 },
|
|
9629
|
+
animate: prefersReducedMotion2 ? noMotion : { y: 0, opacity: 1 },
|
|
9630
|
+
transition: prefersReducedMotion2 ? noTransition : { ...springPresets.default, delay: 0.1 },
|
|
9631
|
+
className: "text-xl font-semibold text-gray-900 dark:text-white",
|
|
9632
|
+
children: title
|
|
9633
|
+
}
|
|
9634
|
+
),
|
|
9635
|
+
/* @__PURE__ */ jsx(
|
|
9636
|
+
motion.p,
|
|
9637
|
+
{
|
|
9638
|
+
"data-testid": "empty-state-message",
|
|
9639
|
+
initial: prefersReducedMotion2 ? false : { y: 12, opacity: 0 },
|
|
9640
|
+
animate: prefersReducedMotion2 ? noMotion : { y: 0, opacity: 1 },
|
|
9641
|
+
transition: prefersReducedMotion2 ? noTransition : { ...springPresets.default, delay: 0.15 },
|
|
9642
|
+
className: "mt-3 text-sm text-gray-500 dark:text-gray-400 max-w-sm mx-auto leading-relaxed",
|
|
9643
|
+
children: message
|
|
9644
|
+
}
|
|
9645
|
+
),
|
|
9646
|
+
/* @__PURE__ */ jsx(
|
|
9647
|
+
motion.div,
|
|
9648
|
+
{
|
|
9649
|
+
initial: prefersReducedMotion2 ? false : { opacity: 0 },
|
|
9650
|
+
animate: prefersReducedMotion2 ? noMotion : { opacity: 1 },
|
|
9651
|
+
transition: prefersReducedMotion2 ? noTransition : { delay: 0.3 },
|
|
9652
|
+
className: "mt-8 flex items-center justify-center gap-1.5",
|
|
9653
|
+
children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx(
|
|
9654
|
+
motion.div,
|
|
9655
|
+
{
|
|
9656
|
+
initial: prefersReducedMotion2 ? false : { scale: 0 },
|
|
9657
|
+
animate: prefersReducedMotion2 ? noMotion : { scale: 1 },
|
|
9658
|
+
transition: prefersReducedMotion2 ? noTransition : { ...springPresets.bouncy, delay: 0.35 + i * 0.08 },
|
|
9659
|
+
className: "h-1.5 w-1.5 rounded-full bg-gray-300 dark:bg-gray-600"
|
|
9660
|
+
},
|
|
9661
|
+
i
|
|
9662
|
+
))
|
|
9663
|
+
}
|
|
9664
|
+
)
|
|
9665
|
+
]
|
|
9666
|
+
}
|
|
9667
|
+
)
|
|
9492
9668
|
}
|
|
9493
|
-
)
|
|
9669
|
+
);
|
|
9494
9670
|
}
|
|
9495
9671
|
var WINDSOCK_LOADER = { gradient: "from-emerald-500 to-teal-600", accentRing: "ring-emerald-500/30" };
|
|
9496
9672
|
var FUEL_PRICE_LOADER = { gradient: "from-blue-500 to-indigo-600", accentRing: "ring-blue-500/30" };
|
|
@@ -9519,7 +9695,7 @@ function BrandedLoader({
|
|
|
9519
9695
|
"div",
|
|
9520
9696
|
{
|
|
9521
9697
|
className: clsx(
|
|
9522
|
-
"absolute -inset-3 animate-ping rounded-3xl opacity-20",
|
|
9698
|
+
"absolute -inset-3 animate-ping motion-reduce:animate-none rounded-3xl opacity-20",
|
|
9523
9699
|
`bg-gradient-to-br ${gradient}`
|
|
9524
9700
|
),
|
|
9525
9701
|
style: { animationDuration: "2s" }
|
|
@@ -9531,7 +9707,7 @@ function BrandedLoader({
|
|
|
9531
9707
|
className: clsx(
|
|
9532
9708
|
"absolute -inset-1.5 rounded-[22px] ring-2",
|
|
9533
9709
|
accentRing,
|
|
9534
|
-
"animate-pulse"
|
|
9710
|
+
"animate-pulse motion-reduce:animate-none"
|
|
9535
9711
|
),
|
|
9536
9712
|
style: { animationDuration: "1.5s" }
|
|
9537
9713
|
}
|
|
@@ -9568,7 +9744,7 @@ function BrandedLoader({
|
|
|
9568
9744
|
className: clsx(
|
|
9569
9745
|
"h-1.5 w-1.5 rounded-full",
|
|
9570
9746
|
`bg-gradient-to-br ${gradient}`,
|
|
9571
|
-
"animate-bounce"
|
|
9747
|
+
"animate-bounce motion-reduce:animate-none"
|
|
9572
9748
|
),
|
|
9573
9749
|
style: { animationDelay: `${i * 150}ms`, animationDuration: "0.8s" }
|
|
9574
9750
|
},
|
|
@@ -9583,7 +9759,7 @@ function BrandedLoader({
|
|
|
9583
9759
|
className: clsx(
|
|
9584
9760
|
"h-2 w-2 rounded-full",
|
|
9585
9761
|
`bg-gradient-to-br ${gradient}`,
|
|
9586
|
-
"animate-bounce"
|
|
9762
|
+
"animate-bounce motion-reduce:animate-none"
|
|
9587
9763
|
),
|
|
9588
9764
|
style: { animationDelay: `${i * 150}ms`, animationDuration: "0.8s" }
|
|
9589
9765
|
},
|
|
@@ -11130,7 +11306,7 @@ function NotificationBadge({ count, className = "" }) {
|
|
|
11130
11306
|
return /* @__PURE__ */ jsx(
|
|
11131
11307
|
"span",
|
|
11132
11308
|
{
|
|
11133
|
-
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}`,
|
|
11309
|
+
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}`,
|
|
11134
11310
|
children: displayCount
|
|
11135
11311
|
}
|
|
11136
11312
|
);
|
|
@@ -12360,11 +12536,15 @@ function FilterPill({ icon, label, variant, onRemove }) {
|
|
|
12360
12536
|
{
|
|
12361
12537
|
type: "button",
|
|
12362
12538
|
onClick: onRemove,
|
|
12539
|
+
role: "option",
|
|
12540
|
+
"aria-selected": true,
|
|
12541
|
+
"aria-label": typeof label === "string" ? label : void 0,
|
|
12542
|
+
"data-testid": "filter-pill",
|
|
12363
12543
|
className: `liquid-pill liquid-pill-${variant}`,
|
|
12364
12544
|
children: [
|
|
12365
12545
|
icon,
|
|
12366
12546
|
label,
|
|
12367
|
-
/* @__PURE__ */ jsx(XMarkIcon$1, { className: "liquid-pill-dismiss" })
|
|
12547
|
+
/* @__PURE__ */ jsx(XMarkIcon$1, { className: "liquid-pill-dismiss", "data-testid": "filter-pill-remove" })
|
|
12368
12548
|
]
|
|
12369
12549
|
}
|
|
12370
12550
|
);
|
|
@@ -12629,7 +12809,7 @@ function DataPagination({
|
|
|
12629
12809
|
value: params?.limit ?? effectivePageSize,
|
|
12630
12810
|
onChange: (event) => handlePageSizeChange(event.target.value),
|
|
12631
12811
|
disabled: loading,
|
|
12632
|
-
className: "rounded-xl liquid-surface px-2 py-1.5 text-xs font-medium text-slate-700 outline-none dark:text-slate-300",
|
|
12812
|
+
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",
|
|
12633
12813
|
children: pageSizeOptions.map((size) => /* @__PURE__ */ jsx("option", { value: size, children: size }, size))
|
|
12634
12814
|
}
|
|
12635
12815
|
),
|
|
@@ -12648,7 +12828,7 @@ function DataPagination({
|
|
|
12648
12828
|
(page, index) => page === "..." ? /* @__PURE__ */ jsx(
|
|
12649
12829
|
"span",
|
|
12650
12830
|
{
|
|
12651
|
-
className: "inline-flex h-9 w-6 items-center justify-center text-xs text-slate-
|
|
12831
|
+
className: "inline-flex h-9 w-6 items-center justify-center text-xs text-slate-500",
|
|
12652
12832
|
children: "\u2026"
|
|
12653
12833
|
},
|
|
12654
12834
|
`ellipsis-${index}`
|
|
@@ -13848,7 +14028,21 @@ function PlatformShell({
|
|
|
13848
14028
|
extras
|
|
13849
14029
|
] });
|
|
13850
14030
|
}
|
|
14031
|
+
function SkipToContent({
|
|
14032
|
+
targetId = "main-content",
|
|
14033
|
+
label = "Skip to main content"
|
|
14034
|
+
}) {
|
|
14035
|
+
return /* @__PURE__ */ jsx(
|
|
14036
|
+
"a",
|
|
14037
|
+
{
|
|
14038
|
+
href: `#${targetId}`,
|
|
14039
|
+
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",
|
|
14040
|
+
"data-testid": "skip-to-content",
|
|
14041
|
+
children: label
|
|
14042
|
+
}
|
|
14043
|
+
);
|
|
14044
|
+
}
|
|
13851
14045
|
|
|
13852
|
-
export { ActionMenu, ActionSheet, ActiveFilterChips, AnalysisSkeleton, AnimatedNumber, AnimatedTableRow, AppLogo, AppNavigation, AppShell, ArchiveSwipeAction, AuthLayout, Avatar, AvatarButton, BRAZIL_ACCENT_MAP, BRAZIL_MACRO_REGIONS, BRAZIL_MAP_CENTER, BRAZIL_STATE_COORDINATES, BRAZIL_STATE_PALETTES, BR_THEME_CONFIG, BackupCodeGrid, BadRequestPage, Badge, BaseForm, BentoCard, BooleanFlagsPicker, BottomSafeArea, BrandFilterSkeleton, BrandedLoader, Breadcrumb, Button, Card, CardActionMenu, CardContent, CardDescription, CardDivider, CardFooter, CardGridSkeleton, CardHeader, CardSectionHeader, CardTitle, CategoryBadge, CategoryTab, CategoryTabs, ChipPicker, CircularRefreshIndicator, Code, CollapsibleGroupedList, CompactSegmentedControl, ContactCard, ContactSection, Container, ContextMenu, CookieConsent, CopyableId, CountPill, CreateActionButton, DashboardProgressShell, DataPagination, DatePicker, DeleteSwipeAction, Description4 as Description, DetailsPopover, DevModeBanner, Dialog4 as Dialog, DialogActions, DialogBody, DialogDescription, DialogTitle3 as DialogTitle, Divider, Dock, DockContainer, DockSkeleton, DotRefreshIndicator, Dropdown, DropdownButton, DropdownDivider, DropdownItem, DropdownLabel, DropdownMenu, DropdownSelect, DynamicIsland, DynamicIslandConfirm, DynamicIslandNotification, EdgeSwipeIndicator, EdgeSwipeProvider, EditSwipeAction, EmptyState, EntityCard, EntityDrawer, ErrorMessage, ErrorState, ExpandableHistoryList, ExpandingPageIndicator, FUEL_PRICE_LOADER, FavoriteSwipeAction, FeatureCard, FeedItemCard, Field2 as Field, FieldGroup, Fieldset2 as Fieldset, FilterBadge, FilterPill, FilterSectionHeader, FilterTileButton, FloatingActionButton, FlyoutMenu, FlyoutNavGrid, FlyoutQuickActions, ForceTouchMenu, Form, FormActions, FormActionsRow, FormCheckbox, FormField, FormGrid, FormInput, FormPriceInput, FormSection, FormSelect, FormTextarea, FormToggle, GeoMapCanvas, GeoMapLegend, GlassFormModal, GlassModal, GlassModalShell, Gradient, GradientBackground, GrowthIndicator, Heading, HeroPanel, HeroSection, IconButton, InfoPopover, InlineForm, InlineSpinner, Input, InteractiveGeoMap, ItemSummary, KORI_ERP_LOADER, Label2 as Label, LabeledToggle, LanguageSwitcher, LaunchpadGrid, Lead, Legend2 as Legend, LiquidFilterInput, ListCard, ListCardItem, ListItem, LoadingOverlay, ManagementPageLayout, ManagementSurface, MapZoomControls, MetricCard, MonthPicker, MultiColumnPicker, NavigationProgress, NoDataState, NoResultsState, NotFoundPage, NotificationBadge, NotificationBellButton, NotificationProvider, OfficeCard, OfflineState, OptionGrid, OtpInput, PageEmptyState, PageHeader, PageHeading, PageIndicator, PageLoadingState, PageSectionHeader, Pagination, PasswordInput, PasswordStrengthMeter, Pill, PlatformShell, PlusGrid, PlusGridItem, PlusGridRow, PreferenceSection, PriceChangeBadge, ProfileIdentityCard, Progress, ProgressIndicator, PullToRefreshContainer, PullToRefreshIndicator, RadiantHeading, RadiantStatCard, RadiantSubheading, RegionFilterSkeleton, RoleBadge, SafeArea, SafeAreaSpacer, SafeAreaView, SearchBar, SearchFilterToolbar, SearchInput, SectionCard, SectionHeader, SectionHeaderSkeleton, SegmentedControl, Select, SelectableChipPicker, SelectableListPicker, SelectableOptionsGrid, SelectableTableRow, SelectionCard, ServerErrorPage, SettingsDialog, SettingsModal, Sheet, SocialLoginButtons, SortableTableHeader, Spinner, Stat, StatCard, StatCardSkeleton, StatusBadge, StatusToggle, StepFormPage, StepNavigationButtons, StepTimeline, Strong, Subheading, SwipeableRow, Switch2 as Switch, Table, TableBody, TableCell, TableEmptyState, TableHead, TableHeader, TableRow, TableSkeleton, TableSkeletonRow, Tabs, TabsContent, TabsList, TabsTrigger, TagBadge, Text, TextLink, Textarea, ThemeSwitch, ThemeToggle, ThemeToggleCompact, TimePicker, ToggleSwitch, TouchTarget, US_ACCENT_MAP, US_MACRO_REGIONS, US_MAP_CENTER, US_STATE_COORDINATES, US_STATE_PALETTES, US_THEME_CONFIG, UserAvatar, UserMobileInfo, WINDSOCK_LOADER, WIRE_LOADER, WheelPicker, WindsockIcon, buildDockActions, buildFlyoutNavItems, buildLaunchpadItems, buttonPress, buttonPressReduced, buttonTap, cardHover, cardHoverReduced, cardPress, createMotionProps, durations, durationsReduced, easings, fadeOnly, fadeScale, filterByPermission, formatCurrency, formatDate, formatPercentage, getBrazilAccent, getBrazilColors, getBrazilFlagUrl, getBrazilGradient, getBrazilHexColor, getBrazilPalette, getStatusColor, getSubdivisionAccent, getSubdivisionColors, getSubdivisionFlagUrl, getSubdivisionGradient, getSubdivisionHexColor, getSubdivisionPalette, getTransition, getUsAccent, getUsColors, getUsFlagUrl, getUsGradient, getUsHexColor, getUsPalette, getVariants, iosColors, isValidBrazilState, isValidSubdivision, isValidUsState, listItem, listItemReduced, notificationBanner, notificationBannerReduced, pageControlDot, prefersReducedMotion, registerSubdivisionTheme, resolveGlassAccentRgb, selectIsAuthenticated, selectShowShellChrome, selectUserInitial, selectUserName, shimmerClass, shimmerWhiteClass, slideDown, slideRight, slideUp, springPresets, springPresetsReduced, staggerContainer, swipeActionThreshold, swipeConstraints, useGeoMapState, useNotifications, usePlatformShellStore, usePullToRefresh };
|
|
13853
|
-
//# sourceMappingURL=chunk-
|
|
13854
|
-
//# sourceMappingURL=chunk-
|
|
14046
|
+
export { ActionMenu, ActionSheet, ActiveFilterChips, AnalysisSkeleton, AnimatedNumber, AnimatedTableRow, AppLogo, AppNavigation, AppShell, ArchiveSwipeAction, AuthLayout, Avatar, AvatarButton, BRAZIL_ACCENT_MAP, BRAZIL_MACRO_REGIONS, BRAZIL_MAP_CENTER, BRAZIL_STATE_COORDINATES, BRAZIL_STATE_PALETTES, BR_THEME_CONFIG, BackupCodeGrid, BadRequestPage, Badge, BaseForm, BentoCard, BooleanFlagsPicker, BottomSafeArea, BrandFilterSkeleton, BrandedLoader, Breadcrumb, Button, Card, CardActionMenu, CardContent, CardDescription, CardDivider, CardFooter, CardGridSkeleton, CardHeader, CardSectionHeader, CardTitle, CategoryBadge, CategoryTab, CategoryTabs, ChipPicker, CircularRefreshIndicator, Code, CollapsibleGroupedList, CompactSegmentedControl, ContactCard, ContactSection, Container, ContextMenu, CookieConsent, CopyableId, CountPill, CreateActionButton, DashboardProgressShell, DataPagination, DatePicker, DeleteSwipeAction, Description4 as Description, DetailsPopover, DevModeBanner, Dialog4 as Dialog, DialogActions, DialogBody, DialogDescription, DialogTitle3 as DialogTitle, Divider, Dock, DockContainer, DockSkeleton, DotRefreshIndicator, Dropdown, DropdownButton, DropdownDivider, DropdownItem, DropdownLabel, DropdownMenu, DropdownSelect, DynamicIsland, DynamicIslandConfirm, DynamicIslandNotification, EdgeSwipeIndicator, EdgeSwipeProvider, EditSwipeAction, EmptyState, EntityCard, EntityDrawer, ErrorMessage, ErrorState, ExpandableHistoryList, ExpandingPageIndicator, FUEL_PRICE_LOADER, FavoriteSwipeAction, FeatureCard, FeedItemCard, Field2 as Field, FieldGroup, Fieldset2 as Fieldset, FilterBadge, FilterPill, FilterSectionHeader, FilterTileButton, FloatingActionButton, FlyoutMenu, FlyoutNavGrid, FlyoutQuickActions, ForceTouchMenu, Form, FormActions, FormActionsRow, FormCheckbox, FormField, FormGrid, FormInput, FormPriceInput, FormSection, FormSelect, FormTextarea, FormToggle, GeoMapCanvas, GeoMapLegend, GlassFormModal, GlassModal, GlassModalShell, Gradient, GradientBackground, GrowthIndicator, Heading, HeroPanel, HeroSection, IconButton, InfoPopover, InlineForm, InlineSpinner, Input, InteractiveGeoMap, ItemSummary, KORI_ERP_LOADER, Label2 as Label, LabeledToggle, LanguageSwitcher, LaunchpadGrid, Lead, Legend2 as Legend, LiquidFilterInput, ListCard, ListCardItem, ListItem, LoadingOverlay, ManagementPageLayout, ManagementSurface, MapZoomControls, MetricCard, MonthPicker, MultiColumnPicker, NavigationProgress, NoDataState, NoResultsState, NotFoundPage, NotificationBadge, NotificationBellButton, NotificationProvider, OfficeCard, OfflineState, OptionGrid, OtpInput, PageEmptyState, PageHeader, PageHeading, PageIndicator, PageLoadingState, PageSectionHeader, Pagination, PasswordInput, PasswordStrengthMeter, Pill, PlatformShell, PlusGrid, PlusGridItem, PlusGridRow, PreferenceSection, PriceChangeBadge, ProfileIdentityCard, Progress, ProgressIndicator, PullToRefreshContainer, PullToRefreshIndicator, RadiantHeading, RadiantStatCard, RadiantSubheading, RegionFilterSkeleton, RoleBadge, SafeArea, SafeAreaSpacer, SafeAreaView, SearchBar, SearchFilterToolbar, SearchInput, SectionCard, SectionHeader, SectionHeaderSkeleton, SegmentedControl, Select, SelectableChipPicker, SelectableListPicker, SelectableOptionsGrid, SelectableTableRow, SelectionCard, ServerErrorPage, SettingsDialog, SettingsModal, Sheet, SkipToContent, SocialLoginButtons, SortableTableHeader, Spinner, Stat, StatCard, StatCardSkeleton, StatusBadge, StatusToggle, StepFormPage, StepNavigationButtons, StepTimeline, Strong, Subheading, SwipeableRow, Switch2 as Switch, Table, TableBody, TableCell, TableEmptyState, TableHead, TableHeader, TableRow, TableSkeleton, TableSkeletonRow, Tabs, TabsContent, TabsList, TabsTrigger, TagBadge, Text, TextLink, Textarea, ThemeSwitch, ThemeToggle, ThemeToggleCompact, TimePicker, ToggleSwitch, TouchTarget, US_ACCENT_MAP, US_MACRO_REGIONS, US_MAP_CENTER, US_STATE_COORDINATES, US_STATE_PALETTES, US_THEME_CONFIG, UserAvatar, UserMobileInfo, WINDSOCK_LOADER, WIRE_LOADER, WheelPicker, WindsockIcon, buildDockActions, buildFlyoutNavItems, buildLaunchpadItems, buttonPress, buttonPressReduced, buttonTap, cardHover, cardHoverReduced, cardPress, createMotionProps, durations, durationsReduced, easings, fadeOnly, fadeScale, filterByPermission, formatCurrency, formatDate, formatPercentage, getBrazilAccent, getBrazilColors, getBrazilFlagUrl, getBrazilGradient, getBrazilHexColor, getBrazilPalette, getStatusColor, getSubdivisionAccent, getSubdivisionColors, getSubdivisionFlagUrl, getSubdivisionGradient, getSubdivisionHexColor, getSubdivisionPalette, getTransition, getUsAccent, getUsColors, getUsFlagUrl, getUsGradient, getUsHexColor, getUsPalette, getVariants, iosColors, isValidBrazilState, isValidSubdivision, isValidUsState, listItem, listItemReduced, notificationBanner, notificationBannerReduced, pageControlDot, prefersReducedMotion, registerSubdivisionTheme, resolveGlassAccentRgb, selectIsAuthenticated, selectShowShellChrome, selectUserInitial, selectUserName, shimmerClass, shimmerWhiteClass, slideDown, slideRight, slideUp, springPresets, springPresetsReduced, staggerContainer, swipeActionThreshold, swipeConstraints, useGeoMapState, useNotifications, usePlatformShellStore, usePullToRefresh };
|
|
14047
|
+
//# sourceMappingURL=chunk-SCGWR7XZ.mjs.map
|
|
14048
|
+
//# sourceMappingURL=chunk-SCGWR7XZ.mjs.map
|