@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.
@@ -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-400 dark:placeholder:text-slate-500
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-400 dark:placeholder:text-slate-500
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-1 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",
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-1 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",
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-500 dark:text-slate-400", children: helperText })
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
- absolute left-3.5 pointer-events-none
1088
- text-slate-500 dark:text-slate-400
1089
- transition-all duration-200
1090
- ${icon ? "left-11" : ""}
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-400", children: selectedOption?.label || placeholder }),
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-400 transition-transform duration-200
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-400 pointer-events-none"
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-400", children: selectedOption?.label || placeholder }),
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-400" })
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("div", { className: "liquid-surface overflow-hidden rounded-2xl", children: [
1989
- gradient && /* @__PURE__ */ jsx("div", { className: `h-1.5 w-full bg-gradient-to-r ${gradient}` }),
1990
- /* @__PURE__ */ jsxs("div", { className: "p-5 sm:p-8", children: [
1991
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-slate-600 dark:text-white/70", children: [
1992
- icon,
1993
- /* @__PURE__ */ jsx("span", { className: "text-sm font-medium", children: label }),
1994
- labelExtra
1995
- ] }),
1996
- /* @__PURE__ */ jsxs("div", { className: "mt-2 flex flex-wrap items-center justify-between gap-4", children: [
1997
- /* @__PURE__ */ jsx("h1", { className: "text-2xl font-bold tracking-tight text-slate-900 dark:text-white sm:text-4xl", children: title }),
1998
- actions && /* @__PURE__ */ jsx("div", { className: "flex items-center gap-3", children: actions })
1999
- ] }),
2000
- /* @__PURE__ */ jsx("p", { className: "mt-2 max-w-xl text-sm text-slate-500 dark:text-white/60 sm:mt-3 sm:text-lg", children: subtitle }),
2001
- toolbar && /* @__PURE__ */ jsx("div", { className: "mt-4", children: toolbar }),
2002
- badges && /* @__PURE__ */ jsx("div", { className: "mt-6 flex flex-wrap items-center gap-4", children: badges }),
2003
- children
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-400 truncate", children: message })
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-400 mt-0.5 truncate", children: message })
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
- return /* @__PURE__ */ jsxs(Dialog, { open, onClose, className: `relative ${zIndex}`, children: [
5390
- /* @__PURE__ */ jsx(DialogBackdrop, { className: "fixed inset-0 bg-slate-900/40 backdrop-blur-md dark:bg-black/50" }),
5391
- /* @__PURE__ */ jsx("div", { className: contentClassName, children: /* @__PURE__ */ jsx(DialogPanel, { className: panelClassName, children }) })
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
- 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",
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
- className: `mt-1.5 text-xs ${error ? "text-red-500" : "text-gray-500 dark:text-gray-400"}`,
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
- return /* @__PURE__ */ jsxs("div", { children: [
6645
- label ? /* @__PURE__ */ jsxs("label", { className: `mb-1.5 block font-medium text-gray-500 dark:text-gray-400 ${labelClasses[inputSize]}`, children: [
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
- className: "w-full bg-transparent text-gray-900 placeholder:text-gray-400 focus:outline-none dark:text-white dark:placeholder:text-gray-500",
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
- return /* @__PURE__ */ jsxs("div", { children: [
6674
- label ? /* @__PURE__ */ jsxs("label", { className: `mb-1.5 block font-medium text-gray-500 dark:text-gray-400 ${labelClasses[inputSize]}`, children: [
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
- className: `w-full resize-y bg-transparent px-3.5 py-2.5 text-gray-900 placeholder:text-gray-400 focus:outline-none dark:text-white dark:placeholder:text-gray-500 ${className}`,
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
- className: `w-full bg-transparent tabular-nums ${sizes3.input} ${sizes3.padding} text-gray-900 placeholder:text-gray-400 focus:outline-none dark:text-white dark:placeholder:text-gray-500 ${colorClass ?? ""} ${className}`
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
- return /* @__PURE__ */ jsxs("div", { children: [
6763
- label ? /* @__PURE__ */ jsxs("label", { className: `mb-1.5 block font-medium text-gray-500 dark:text-gray-400 ${labelClasses[inputSize]}`, children: [
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
- className: "min-w-[100px] flex-1 bg-transparent py-1 text-base text-gray-900 outline-none placeholder:text-slate-400 dark:text-white dark:placeholder:text-slate-500"
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-400", children: appName }),
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-2 text-sm font-medium hover:bg-white/15",
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-2 text-sm font-semibold text-white hover:bg-ios-red-hover",
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
- return /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center py-20", children: /* @__PURE__ */ jsxs(
9435
- motion.div,
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
- initial: { opacity: 0, scale: 0.95 },
9438
- animate: { opacity: 1, scale: 1 },
9439
- transition: springPresets.gentle,
9440
- className: "liquid-surface w-full max-w-lg rounded-2xl px-8 py-14 text-center",
9441
- children: [
9442
- /* @__PURE__ */ jsx(
9443
- motion.div,
9444
- {
9445
- initial: { scale: 0.6, opacity: 0 },
9446
- animate: { scale: 1, opacity: 1 },
9447
- transition: springPresets.bouncy,
9448
- className: "mx-auto mb-6",
9449
- 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}` }) })
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: { ...springPresets.bouncy, delay: 0.35 + i * 0.08 },
9485
- className: "h-1.5 w-1.5 rounded-full bg-gray-300 dark:bg-gray-600"
9486
- },
9487
- i
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-400",
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-3OGFL5RQ.mjs.map
13854
- //# sourceMappingURL=chunk-3OGFL5RQ.mjs.map
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