@espressif/dashboard-ui-components 1.7.0 → 1.8.0

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.
@@ -1,11 +1,11 @@
1
1
  import { Card, CardHeader, CardTitle, CardDescription, CardContent, Label, Badge, Popover, PopoverTrigger, PopoverContent, resolveVariantStyles, VariantGradientUnderlay, PRESET_GRADIENT_BACKDROP, PRESET_GRADIENT_FRAME, VARIANT_GRADIENT_BACKDROP_BASE, SILVER_GRADIENT_BACKDROP, VARIANT_GRADIENT_HOVER_OVERLAY_CLASS, arbitraryGradientBackgroundImage, SilverShineOverlay, SilverMetallicBorderOverlay, buttonGroupVariants, useIsInView } from './chunk-ABBHGIFI.js';
2
- import { FieldLabelRow, fieldHintClassName, Button, inputLabelClassName, Input, Tooltip2, TooltipProvider, buttonVariants as buttonVariants$1, CopyButton, Link, Tooltip, TooltipTrigger, TooltipContent, HighlightItem, Slot as Slot$1, Highlight, ScrollArea, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuCheckboxItem, Sheet, SheetContent, SheetHeader, SheetTitle } from './chunk-3PO2SF7T.js';
2
+ import { FieldLabelRow, fieldHintClassName, Button, inputLabelClassName, Input, Tooltip2, TooltipProvider, buttonVariants as buttonVariants$1, CopyButton, Link, Tooltip, TooltipTrigger, TooltipContent, HighlightItem, Slot as Slot$1, Highlight, ScrollArea, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuCheckboxItem, Sheet, SheetContent, SheetHeader, SheetTitle } from './chunk-ZFYUONPY.js';
3
3
  import { getStrictContext, buttonVariants, Separator, CollapsibleContent, Collapsible, CollapsibleTrigger, useIsMobile, useControlledState, Button as Button$1, Skeleton, Avatar, AvatarFallback } from './chunk-OKB2WTX7.js';
4
4
  import { cn, resolveColor, isPresetColor } from './chunk-VU4CZ76T.js';
5
5
  import { __commonJS, __toESM } from './chunk-TRTQSARU.js';
6
- import { ChevronDown, ChevronUp, Check, Upload, X, RefreshCw, LoaderCircle, Triangle, Info, MinusIcon, ArrowLeft, ArrowRight, Search, ClockIcon, Crown, ShieldCheck, Tag as Tag$1, ChevronRight, CircleAlert, Eye, EyeOff, Circle, Braces, FileCheck, CheckCheck, TriangleAlert, CircleX, Menu, ChevronsUpDown, ChevronLeftIcon, ChevronRightIcon, ChevronDownIcon, CalendarIcon, CalendarRangeIcon, CheckIcon, XIcon, ChevronLeft, Columns2, ChevronsRight, ChevronsLeft, MoveLeft, CircleIcon, Bolt, Plus, Trash2, Clock, XCircle, CheckCircle2 } from 'lucide-react';
7
- import * as React10 from 'react';
8
- import React10__default, { forwardRef, useMemo, isValidElement, useRef, useState, useCallback, useLayoutEffect, useEffect, useId, Fragment as Fragment$1, Children, cloneElement, createElement } from 'react';
6
+ import { ChevronDown, ChevronUp, Check, Upload, X, RefreshCw, LoaderCircle, Triangle, Info, MinusIcon, ArrowLeft, ArrowRight, Search, ClockIcon, Crown, ShieldCheck, Tag as Tag$1, ChevronRight, CircleAlert, Eye, EyeOff, Circle, Braces, FileCheck, CheckCheck, TriangleAlert, CircleX, ChevronLeft, Menu, ChevronsUpDown, ChevronLeftIcon, ChevronRightIcon, ChevronDownIcon, CalendarIcon, CalendarRangeIcon, CheckIcon, XIcon, Columns2, ChevronsRight, ChevronsLeft, MoveLeft, CircleIcon, Bolt, Plus, Clock, XCircle, CheckCircle2, Trash2 } from 'lucide-react';
7
+ import * as React11 from 'react';
8
+ import React11__default, { forwardRef, useMemo, isValidElement, useRef, useState, useCallback, useLayoutEffect, useEffect, useId, Fragment as Fragment$1, Children, cloneElement, createElement } from 'react';
9
9
  import { Switch as Switch$1, ToggleGroup as ToggleGroup$1, Dialog as Dialog$1, Accordion as Accordion$1 } from 'radix-ui';
10
10
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
11
11
  import { AnimatePresence, motion, useAnimate, useReducedMotion } from 'framer-motion';
@@ -16302,10 +16302,10 @@ function Accordion(props) {
16302
16302
  }
16303
16303
  function AccordionItem(props) {
16304
16304
  const { value: value2 } = useAccordion();
16305
- const [isOpen, setIsOpen] = React10.useState(
16305
+ const [isOpen, setIsOpen] = React11.useState(
16306
16306
  value2?.includes(props?.value) ?? false
16307
16307
  );
16308
- React10.useEffect(() => {
16308
+ React11.useEffect(() => {
16309
16309
  setIsOpen(value2?.includes(props?.value) ?? false);
16310
16310
  }, [value2, props?.value]);
16311
16311
  return /* @__PURE__ */ jsx(AccordionItemProvider, { value: { value: props.value, isOpen, setIsOpen }, children: /* @__PURE__ */ jsx(
@@ -16439,7 +16439,7 @@ function Accordion3({
16439
16439
  }
16440
16440
  );
16441
16441
  }
16442
- var SimpleCard = React10.forwardRef(
16442
+ var SimpleCard = React11.forwardRef(
16443
16443
  ({ noShadow, noBorder, transparent, title, description, children, className }, ref) => {
16444
16444
  return /* @__PURE__ */ jsxs(
16445
16445
  Card,
@@ -16465,7 +16465,7 @@ var SimpleCard = React10.forwardRef(
16465
16465
  SimpleCard.displayName = "SimpleCard";
16466
16466
  var content2 = (icon, primaryText, secondaryText) => /* @__PURE__ */ jsxs(Fragment, { children: [
16467
16467
  icon != null && /* @__PURE__ */ jsx(Avatar, { children: /* @__PURE__ */ jsx(AvatarFallback, { className: "text-xs flex items-center justify-center gap-1 border", children: icon }) }),
16468
- /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [
16468
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
16469
16469
  primaryText != null && /* @__PURE__ */ jsx("span", { className: "text-sm font-semibold", children: primaryText }),
16470
16470
  secondaryText != null && /* @__PURE__ */ jsx("span", { className: "truncate text-sm text-muted-foreground", children: secondaryText })
16471
16471
  ] })
@@ -16524,6 +16524,9 @@ var create_new_group_default = '<?xml version="1.0" encoding="UTF-8"?>\n<svg id=
16524
16524
  // svg-raw:/builds/app-frameworks/esp-ui-component-library/src/assets/illustrations/new-ota.svg
16525
16525
  var new_ota_default = '<?xml version="1.0" encoding="UTF-8"?>\n<svg id="new-ota" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 95 72.9">\n <defs>\n <style>\n .cls-1 {\n fill: var(--color-muted-foreground);\n }\n\n .cls-2 {\n fill: var(--color-foreground);\n }\n </style>\n </defs>\n <path id="cloud" class="cls-2" d="M80.36,27.71c-2.1-2.61-4.41-5-8.22-4.81-.89.04-1.54-.49-1.82-1.34-.85-2.64-2.9-4.15-5.06-5.63-2.71-1.85-5.48-2.1-8.49-.88-1.59.64-1.71.45-2.88-.77-1.33-1.39-2.67-2.88-4.29-3.84-3.63-2.13-7.5-2.38-11.29-.27-2.4,1.34-4.6,2.97-6.36,5.14-.54.67-1.23,1.22-1.86,1.83-.53-.19-.69-.23-.83-.31-3.16-1.91-6.43-1.62-9.82-.67-2.48.7-3.39,2.82-4.73,4.59-.1.13-.15.29-.22.43-.41.79-1.03,1.01-1.81.58-1.42-.77-2.99-.91-4.48-.64-2.37.42-4.77.95-6.17,3.29-2.28,3.83-2.29,8-1.72,12.21.2,1.46,1.07,2.47,2.69,2.68,1.03.13,2.04.55,3.07.65,3.93.38,7.86.79,11.81.99,5.16.27,10.32.31,15.48.52.89.04,1.78.09,2.66.13,0-.34.02-.68.08-1-1.16-.05-2.31-.11-3.47-.16-3.46-.15-6.93-.26-10.39-.4-5.72-.23-11.4-.84-17.03-1.96-2.26-.45-3.35-1.59-3.77-3.99-.44-2.53-.05-4.77.7-7.1.8-2.47,2.62-3.66,5.01-3.94,2-.24,4.04-.11,5.8,1.17.19.13.44.18,1,.4.72-1.2,1.37-2.29,2.05-3.38,2.72-4.38,8.4-5.45,12.53-2.36.31.24.66.43,1.17.75.58-.6,1.09-1.19,1.66-1.72,1.8-1.72,3.48-3.61,5.45-5.1,5.98-4.55,11.82-2.02,15.67,2.27.27.3.46.66.7.98,1.11,1.51,1.16,1.54,2.97.76,5.02-2.17,9.87.68,12.14,4.25.37.59.45,1.36.66,2.05.18.59.35,1.19.51,1.75,5.51-.32,6.23.05,9.84,4.31,2.83,3.34,3.77,7.21,3.52,11.47,0,.16-.04.32-.09.47-.05.15-.14.28-.35.68-.71.05-1.57.23-2.42.16-5.97-.54-11.93.05-17.89.09-.64,0-1.31.08-1.93-.06-2.56-.58-5.15-.73-7.74-.79.22.41.38.85.49,1.31,4.11.32,8.21.79,12.36.5,2.01-.14,4.03-.03,6.05.04,3.14.11,6.28.32,9.42.42,2.61.09,3.42-.76,3.61-3.38.35-4.67-1.1-8.78-3.98-12.36Z"/>\n <g id="upload">\n <g>\n <path class="cls-2" d="M28.78,51.42c2.89.18,5.74.86,8.64.89,1.05.02,1.27.26,1.35,1.36.04.59,0,1.19,0,1.79.01,1.41-.02,2.83.04,4.25.1,2.3.25,4.6.39,6.91h-.17c0,.82.01,1.64,0,2.46-.01.9-.03,1.79-.04,2.69-.01.37-.03.85.43.89,1.48.13,2.96.23,4.44.24,1.11,0,2.22-.15,3.33-.26,1.18-.11,2.39-.14,3.54-.41,2.93-.71,3.34-.42,3-4.22-.26-2.97-.52-5.94-.78-8.9-.08-.89-.17-1.78-.22-2.67-.08-1.42-.19-2.83-.19-4.25,0-1.13.28-1.39,1.43-1.62,1.24-.24,2.5-.44,3.73-.7.58-.13,1.16-.31,1.7-.55.53-.24.64-.88.25-1.31-.35-.38-.77-.7-1.15-1.06-1.5-1.45-3.09-2.82-4.49-4.36-2.4-2.64-4.85-5.23-7.61-7.52-.67-.56-1.32-.7-2.03-.29-1.49.87-3.08,1.06-4.75.85-.92-.11-1.57.34-2.05,1.08-.24.38-.43.79-.68,1.16-1.96,2.9-3.89,5.81-5.91,8.67-.81,1.14-1.84,2.14-2.71,3.24-.24.32-.4.8-.37,1.18.01.18.56.44.88.46ZM41.93,63.44c-.05,1.85-.03,3.71-.07,5.57-.02,1.02-.3,1.58-.64,1.41-.56-.28-.55-.83-.61-1.34-.02-.15-.04-.3-.01-.45.55-3.19-.32-6.37-.16-9.56,0-1.71-.05-3.42.03-5.13.03-.63.32-1.27.59-1.86.08-.17.5-.26.76-.26.13.01.27.3.36.49.07.12.06.29.06.44-.11,3.56-.23,7.12-.31,10.69ZM44.89,37.83c.31-.59.76-.75,1.29-.41.75.47,1.52.96,2.14,1.59,2.73,2.75,5.41,5.55,8.1,8.33.16.16.39.34.39.52.01.25-.1.65-.27.72-.4.18-.86.21-1.3.27-.88.12-1.78.17-2.66.34-1.21.23-1.65.77-1.73,1.96-.02.37-.01.75.02,1.12.25,4.01.49,8.03.77,12.05.1,1.33.36,2.66.42,3.99.07,1.36-.21,1.86-1.52,2.04-1.99.25-4,.26-6.01.33-.61.02-.92-.44-.95-1.03-.06-1.34-.12-2.68-.15-4.02-.02-1.57,0-3.14,0-4.7h.13c0-2.24-.03-4.48.01-6.71.02-1.11-.03-2.23.53-3.28.16-.3.05-.89-.16-1.21-.34-.51-.93-.44-1.41-.15-1.33.83-2.79,1.01-4.3.96-.59-.02-.8-.4-.46-.89,1.23-1.78,2.5-3.52,3.72-5.31.49-.73.9-1.52,1.3-2.31.71-1.39,1.37-2.81,2.1-4.2ZM31.23,48.83c.15-.26.31-.51.48-.76,1.96-2.78,4.05-5.48,5.86-8.37,1.28-2.05,3.15-2.53,5.26-2.75.1,0,.25.27.35.42.03.04-.02.15-.05.21-1.09,2.35-1.97,4.81-3.54,6.91-1.15,1.55-2.33,3.07-3.51,4.6-.77.98-.98,1.07-1.99,1.01-.87-.12-1.68-.21-2.49-.34-.61-.11-.7-.37-.37-.93Z"/>\n <path class="cls-2" d="M31.23,48.83c.15-.26.31-.51.48-.76,1.96-2.78,4.05-5.48,5.86-8.37,1.28-2.05,3.15-2.53,5.26-2.75.1,0,.25.27.35.42.03.04-.02.15-.05.21-1.09,2.35-1.97,4.81-3.54,6.91-1.15,1.55-2.33,3.07-3.51,4.6-.77.98-.98,1.07-1.99,1.01-.87-.12-1.68-.21-2.49-.34-.61-.11-.7-.37-.37-.93Z"/>\n <path class="cls-2" d="M40.44,59.07c0-1.71-.05-3.42.03-5.13.03-.63.32-1.27.59-1.86.08-.17.5-.26.76-.26.13.01.27.3.36.49.07.12.06.29.06.44-.11,3.56-.23,7.12-.31,10.69-.05,1.85-.03,3.71-.07,5.57-.02,1.02-.3,1.58-.64,1.41-.56-.28-.55-.83-.61-1.34-.02-.15-.04-.3-.01-.45.55-3.19-.32-6.37-.16-9.56Z"/>\n <path class="cls-2" d="M23.44,35.71c-.02,1.39.28,1.75,1.62,1.88,1.11.11,2.23.16,3.35.21,1.17.05,1.66-.45,1.55-1.61-.08-.89-.28-1.77-.36-2.66-.09-.96.1-1.2,1.09-1.26,3.5-.19,7-.36,10.51-.49,4.02-.14,8.04-.22,12.07-.31.89-.03,1.79-.06,2.68-.02,1.27.06,1.36.19,1.59,1.4.18.95.37,1.9.63,2.83.35,1.29.5,1.4,1.87,1.33.9-.04,1.79-.15,2.67-.3,1.12-.18,1.56-.67,1.54-1.82-.03-2.01-.05-4.03-.27-6.03-.35-3.29-.58-3.46-3.86-3.38-2.91.07-5.81.23-8.72.34-1.41.05-2.83.05-4.25.12-2.75.15-5.5.34-8.25.52,0-.04-.01-.08-.01-.11-1.86.15-3.71.32-5.56.45-1.79.13-3.58.19-5.36.35-1.03.1-2.08.23-3.06.53-1.18.37-1.42.8-1.25,2.02.22,1.65.19,3.27-.12,4.89-.07.37-.1.75-.1,1.12ZM25.29,30.06c.05-1.2.36-1.63,1.56-1.78,1.1-.13,2.22-.03,3.34-.03v-.04c.67,0,1.34.04,2.01-.01,5.11-.4,10.22-.81,15.33-1.22.6-.04,1.19-.03,1.79-.04,3.57-.05,7.14-.1,10.71-.15.3,0,.6,0,.9,0,.69.03,1.13.43,1.22,1.08.33,2.16.23,4.31-.21,6.44-.12.61-.59.82-1.16.82s-1.13-.11-1.25-.71c-.18-.86-.22-1.76-.29-2.65-.09-1.19-.27-1.46-1.47-1.47-3.5,0-7,.06-10.5.1-1.34.01-2.68.09-4.02.02-3.58-.2-7.14.07-10.7.37-.89.08-1.79.01-2.68.07-1.37.08-2.01.84-1.9,2.19.05.59.21,1.17.23,1.77.04.9-.3,1.24-1.15,1.27-1.46.04-1.9-.34-1.89-1.79,0-1.41.06-2.83.13-4.24Z"/>\n <path class="cls-2" d="M25.16,34.3c0-1.41.06-2.83.13-4.24.05-1.2.36-1.63,1.56-1.78,1.1-.13,2.22-.03,3.34-.03v-.04c.67,0,1.34.04,2.01-.01,5.11-.4,10.22-.81,15.33-1.22.6-.04,1.19-.03,1.79-.04,3.57-.05,7.14-.1,10.71-.15.3,0,.6,0,.9,0,.69.03,1.13.43,1.22,1.08.33,2.16.23,4.31-.21,6.44-.12.61-.59.82-1.16.82s-1.13-.11-1.25-.71c-.18-.86-.22-1.76-.29-2.65-.09-1.19-.27-1.46-1.47-1.47-3.5,0-7,.06-10.5.1-1.34.01-2.68.09-4.02.02-3.58-.2-7.14.07-10.7.37-.89.08-1.79.01-2.68.07-1.37.08-2.01.84-1.9,2.19.05.59.21,1.17.23,1.77.04.9-.3,1.24-1.15,1.27-1.46.04-1.9-.34-1.89-1.79Z"/>\n </g>\n </g>\n <g id="cog-filled">\n <g>\n <path class="cls-2" d="M64.67,5.7c-.82-.1-1.34-.44-1.39-1.36.07-.08.15-.19.25-.3.83-.91.77-1.88-.19-2.64-.33-.26-.72-.49-1.12-.61-.99-.29-1.31-.43-1.79.67-.04.1-.09.22-.17.27-.23.13-.5.34-.71.29-.2-.05-.37-.35-.49-.58-.07-.14-.01-.35-.03-.53-.09-.8-.33-1.01-1.12-.88-.67.11-1.35.23-1.98.43-.43.13-.88.37-1.15.7-.13.17.11.65.21.98.26.95-.23,1.66-1.23,1.72-.37.02-.61.15-.73.51-.14.44-.3.88-.41,1.33-.29,1.19,0,1.65,1.19,1.96.13.04.29.07.4.14.4.23.44.79.08,1.08-.11.09-.25.13-.38.2-.72.41-.82.69-.29,1.33.42.51.95.96,1.47,1.37.66.52.95.47,1.55-.11.13-.12.21-.31.35-.4.21-.14.49-.32.71-.29.34.03.55.31.53.69,0,.21,0,.43,0,.65-.01.58.3.88.85.88.68,0,1.37.03,2.02-.11,1.15-.23,1.33-.65.84-1.7-.13-.29-.35-.61-.03-.87.32-.25.77-.65,1.05-.57.65.19,1.11.02,1.58-.36.49-.4.83-.88.94-1.51.06-.39.12-.78.17-1.17.11-.99.05-1.1-.95-1.22ZM64.5,8.66c-.27.64-.66.71-1.27.37-.15-.09-.31-.25-.46-.26-.22,0-.55.05-.64.19-.34.57-.69,1.04-1.4,1.23-.38.1-.31.5-.1.8.26.37.51.75.79,1.15-.73.6-1.42.52-2.1.31-.18-.05-.43-.38-.4-.54.23-1.5-.94-1.58-1.89-2-.24.36-.44.69-.67,1-.28.36-.64.46-1.03.19-.43-.29-.98-.49-1.04-1.18.19-.09.41-.15.55-.29.17-.14.41-.36.41-.53-.03-.6-.12-1.2-.25-1.78-.03-.14-.31-.27-.49-.32-1.26-.29-1.37-.46-1.05-1.7.03-.1.1-.19.19-.34.79.17,1.3-.23,1.61-.95.09-.19.21-.38.37-.52.41-.35.47-.71.26-1.23-.29-.71-.19-.86.54-1.09.57-.18,1.16-.29,1.86-.45,0,.5.03.85,0,1.18-.04.46.09.76.58.86.38.08.75.21,1.23.35.26-.39.53-.81.81-1.2.12-.17.27-.37.44-.43.73-.26,2.1.75,1.99,1.5-.03.26-.32.53-.55.72-.7.59-.71.57-.19,1.35.06.09.15.17.17.27.11.81.59,1.13,1.39,1.11.47,0,.74.29.67.77-.07.49-.12,1.01-.31,1.45Z"/>\n <path class="cls-2" d="M64.15,6.44c-.79.01-1.27-.3-1.39-1.11-.01-.09-.11-.18-.17-.27-.51-.78-.51-.77.19-1.35.23-.19.51-.46.55-.72.11-.75-1.26-1.76-1.99-1.5-.17.06-.32.27-.44.43-.29.39-.55.81-.81,1.2-.48-.14-.85-.27-1.23-.35-.49-.1-.62-.4-.58-.86.03-.33,0-.68,0-1.18-.71.16-1.3.27-1.86.45-.73.23-.83.38-.54,1.09.21.52.15.87-.26,1.23-.16.14-.29.33-.37.52-.31.72-.83,1.11-1.61.95-.09.15-.16.24-.19.34-.32,1.25-.21,1.41,1.05,1.7.19.05.47.18.49.32.13.59.23,1.19.25,1.78,0,.17-.23.39-.41.53-.15.13-.36.19-.55.29.06.69.61.89,1.04,1.18.39.27.75.17,1.03-.19.23-.31.43-.64.67-1,.95.41,2.12.5,1.89,2-.03.16.22.49.4.54.68.21,1.38.29,2.1-.31-.28-.41-.53-.78-.79-1.15-.21-.3-.28-.7.1-.8.71-.19,1.06-.66,1.4-1.23.09-.15.42-.19.64-.19.15,0,.31.17.46.26.61.35.99.27,1.27-.37.19-.45.25-.96.31-1.45.07-.48-.2-.77-.67-.77ZM59.59,8.49c-1.18,1.03-2.8.49-3.13-1.04-.05-.25-.07-.49-.1-.66,0-1.1.51-1.84,1.28-2.43.41-.31.87-.3,1.31-.11,1.58.69,1.94,3.1.64,4.23Z"/>\n <path class="cls-2" d="M58.95,4.25c-.45-.19-.9-.21-1.31.11-.77.59-1.28,1.33-1.28,2.43.03.17.05.41.1.66.33,1.52,1.95,2.06,3.13,1.04,1.31-1.13.95-3.54-.64-4.23ZM58.41,8.31c-.74-.06-1.21-.55-1.29-1.33-.01-.11,0-.21,0-.56,0-.01,0-.27.08-.51.17-.56.56-.9,1.15-.99.54-.08.87.23,1.15.63.34.5.44,1.05.29,1.64-.19.74-.72,1.16-1.37,1.11Z"/>\n </g>\n </g>\n <g id="cog-outlined">\n <g>\n <path class="cls-2" d="M6.45,48.97c.46.02.82.01,1.18.06,1.22.15,1.99-.61,1.8-1.8-.18-1.17-.15-1.24,1.07-1.39.57-.07,1.15-.07,1.77-.1.22.59.41,1.11.67,1.82.4-.33.75-.54,1-.83.4-.47.84-.51,1.32-.24.54.3,1.09.61,1.56.99.89.72.92,1.19.26,2.11-.65.89-.62,1.12.22,1.63,1,.61,1.16.87.91,1.98-.11.51-.39,1-.65,1.46-.22.38-.53.53-1.04.45-.96-.15-1.07.06-.66.99.07.15.11.31.16.44-.62.75-2.19,1.24-3.01.88-.24-.11-.4-.48-.53-.76-.45-.98-.85-1.08-1.64-.36-.72.66-.77.67-1.58.12-.54-.37-1.09-.75-1.58-1.2-.47-.42-.43-.72.11-1.08.35-.24.75-.39.6-.93-.15-.53-.52-.66-1.02-.72-1.14-.15-1.23-.29-1.14-1.44.05-.65.14-1.3.22-2.06ZM14.74,56.35c-.04-.24-.06-.41-.09-.57-.21-1.1.56-1.93,1.64-1.77.76.11,1-.04,1.13-.71.13-.69-.06-.99-.76-1.18-.27-.07-.55-.12-.78-.18-.17-.71-.33-1.35-.49-2.04.39-.35.81-.71,1.21-1.06-1.12-1.77-1.68-1.8-3.22-.19-.37-.13-.93-.15-1.18-.44-.32-.37-.39-.96-.59-1.52-.38-.04-.77-.08-1.35-.13.13.82.24,1.47.33,2.03-.62.38-1.16.61-1.57.98-.53.47-1.05.77-1.74.48-.39,1.35-.31,1.45.83,1.61.29.04.66.2.81.43.62.94.52,2.07-.17,2.93.95.84.95.85,1.88.07.56-.47,2.01-.12,2.33.56q.48,1,1.78.69Z"/>\n <path class="cls-2" d="M12.66,50.18c.86,0,1.45.74,1.44,1.8-.01,1.08-.85,1.98-1.82,1.96-.97-.03-1.91-1.05-1.91-2.09,0-1.06.84-1.68,2.29-1.67ZM12.51,51.01c-.73,0-1.2.31-1.18.8.02.55.68,1.21,1.21,1.21.47,0,.79-.35.81-.89.03-.65-.32-1.11-.84-1.11Z"/>\n </g>\n </g>\n <g id="chip">\n <g id="chip-body">\n <g>\n <path class="cls-2" d="M88.23,55.12c.13-.58.22-1.17.31-1.77.03-.18.06-.4-.21-.52-.34-.15-.68-.35-1.04-.44-1.73-.41-3.46-.8-5.2-1.18-.36-.08-.72-.15-1.08-.2-1.03-.14-2.07-.26-3.1-.38-.44-.05-.46-.06-.6.29-.26.66-.47,1.33-.6,2.03-.22,1.22-.55,2.41-.84,3.61t0,0c-.28,1.16-.56,2.33-.83,3.49-.05.2-.09.4-.08.61.02.36.14.46.56.54.63.12,1.28.22,1.91.35,1.01.21,2.02.39,3.02.66.63.17,1.25.31,1.9.39.26.03.52.07.79.12.74.12,1.47.23,2.21.36.34.06.53-.06.66-.27.06-.09.11-.19.14-.3.37-1.12.77-2.24,1.09-3.38.37-1.32.68-2.66.98-4ZM86.83,59.79c-.03.12-.09.22-.13.34-.04,0-.07,0-.1,0-.01.12-.04.24-.08.35.01,0,.03,0,.05,0-.12.76-.36,1.42-.68,2.05-.12.24-.35.28-.64.23-.65-.11-1.31-.23-1.96-.35-.1-.02-.2-.05-.29-.06-1.12-.04-2.18-.42-3.27-.65-1.23-.27-2.47-.5-3.71-.73-.55-.1-.71-.19-.64-.63.08-.51.26-1,.4-1.49.01-.04.03-.06.05-.09,0-.1.02-.2.06-.31.03-.1.07-.18.11-.27,0-.16.05-.32.11-.47-.02,0-.04-.02-.06-.03.09-.47.16-.93.26-1.39.25-1.17.56-2.33.76-3.51.11-.66.36-1.25.68-1.83.02-.04.05-.06.11-.12.19.02.4.05.61.07.36.03.72.05,1.08.07.22.01.43.01.64.05,1.39.26,2.78.49,4.16.8,1.05.23,2.08.56,3.12.85.13.03.24.1.36.16.33.15.46.36.41.66-.15.77-.28,1.55-.45,2.32-.3,1.33-.63,2.64-.95,3.97Z"/>\n <path class="cls-2" d="M83.98,60.73c-2.12-.13-4.08-.41-6.1-1.02.32-2.15.62-4.21.95-6.27.08-.54.49-.75.97-.66,1.68.31,3.35.67,5.01,1.03.53.11.91.49.81,1.05-.35,1.96-.58,3.95-1.63,5.86Z"/>\n </g>\n </g>\n <g id="chip_leg-middle" data-name="chip=leg-middle">\n <path class="cls-1" d="M81.09,69.95s-.07-.03-.09-.06l-1.98-3.22,1.01-4.25c.02-.07.09-.12.17-.1s.12.09.1.17l-.98,4.14,1.92,3.12c.04.06.02.15-.05.19-.03.02-.07.02-.1.02Z"/>\n <path class="cls-1" d="M81.41,71.86c-.61-.14-.98-.75-.84-1.36s.75-.98,1.36-.84.98.75.84,1.36-.75.98-1.36.84ZM81.78,70.32c-.24-.06-.48.09-.54.33s.09.48.33.54.48-.09.54-.33-.09-.48-.33-.54Z"/>\n </g>\n <g id="chip-leg-left">\n <path class="cls-1" d="M78.42,70.13s-.07-.03-.1-.07l-2.2-3.57,1.12-4.72c.02-.08.1-.13.18-.11s.13.1.11.18l-1.09,4.6,2.13,3.47c.04.07.02.17-.05.21-.04.02-.08.03-.12.02Z"/>\n <path class="cls-1" d="M78.54,71.87c-.61-.14-.98-.75-.84-1.36s.75-.98,1.36-.84.98.75.84,1.36-.75.98-1.36.84ZM78.91,70.34c-.24-.06-.48.09-.54.33s.09.48.33.54.48-.09.54-.33-.09-.48-.33-.54Z"/>\n </g>\n <g id="chip-leg-right">\n <path class="cls-1" d="M82.83,65.87c-.07-.02-.1-.14-.07-.27l.62-2.59c.03-.13.11-.23.18-.21s.1.14.07.27l-.62,2.59c-.03.13-.11.23-.18.21Z"/>\n <path class="cls-1" d="M82.43,68.12c-.61-.14-.98-.75-.84-1.36s.75-.98,1.36-.84.98.75.84,1.36-.75.98-1.36.84ZM82.8,66.58c-.24-.06-.48.09-.54.33s.09.48.33.54.48-.09.54-.33-.09-.48-.33-.54Z"/>\n </g>\n </g>\n <g id="arrow">\n <path class="cls-2" d="M94.99,43.03v-.5s-.05-.5-.05-.5l-.08-.99-.15-.99-.08-.49c-.03-.16-.07-.32-.11-.49l-.22-.97c-.09-.32-.19-.64-.28-.96l-.14-.48c-.05-.16-.12-.31-.17-.47l-.35-.93c-.13-.31-.28-.61-.41-.91l-.21-.45c-.07-.15-.16-.29-.23-.44l-.48-.88c-.17-.29-.36-.56-.53-.84l-.27-.42c-.09-.14-.2-.27-.29-.4l-.6-.8-.89-1.03s-.03-.03-.07-.07c-.04-.05-.11-.11-.2-.18-.17-.15-.39-.34-.61-.53-.43-.39-.9-.71-.87-.68-.79-.54-1.35-.77-.32.33.14.17.32.34.47.53.15.19.31.37.44.53.14.16.26.3.34.4.09.1.13.16.13.16l.63.72c.22.24.41.5.61.76.19.26.4.51.58.79.35.55.72,1.08,1.02,1.66.65,1.13,1.14,2.34,1.56,3.57.19.62.39,1.24.52,1.88l.11.48c.04.16.07.32.09.48l.15.96c.15,1.29.23,2.6.13,3.89-.02.65-.12,1.29-.21,1.94-.02.16-.05.32-.09.48l-.1.48c-.07.32-.13.64-.21.95-.32,1.27-.73,2.51-1.28,3.68-.28.58-.59,1.15-.94,1.69-.35.53-.76,1.03-1.2,1.48-.16.15-.31.31-.48.44l-.25.21c-.09.06-.18.12-.27.19-.01.01-.03.05-.03.06-.15.54.21.66.44.64.03,0,.04,0,.06-.02.1-.07.2-.14.3-.21l.28-.23c.19-.15.36-.32.54-.49.48-.48.91-1.02,1.29-1.58.37-.56.7-1.15.99-1.76.57-1.21.99-2.48,1.32-3.76.09-.32.15-.64.22-.97.07-.33.14-.65.2-.98l.13-.99c.02-.17.05-.33.06-.5l.03-.5.06-1v-1Z"/>\n <path class="cls-2" d="M86.9,26.88c.18-.05.44-.09.7-.1.53-.02,1.09.04,1.04.02.46.02.86.01.95-.06.09-.07-.12-.19-.85-.39-.43-.13-.98-.25-1.45-.26-.23-.01-.44,0-.6.03-.15.02-.24.05-.24.05-.05,0-.14.05-.2.08l-.21.09-.42.2.22.55.06.15.03.07.05.14c.03.1.06.19.08.29.11.41.19.85.17,1.22,0,.02.02.05.03.05.16.19.29.29.44.29.14,0,.27-.11.34-.22.02-.03.03-.04.03-.06.03-.55-.07-1.03-.19-1.5-.03-.11-.06-.22-.1-.32l-.05-.16-.03-.08h0s-.01,0,0,0c.05-.01.12-.05.21-.07Z"/>\n </g>\n</svg>';
16526
16526
 
16527
+ // svg-raw:/builds/app-frameworks/esp-ui-component-library/src/assets/illustrations/rm-dashboard-update.svg
16528
+ var rm_dashboard_update_default = '<?xml version="1.0" encoding="UTF-8"?>\n<svg id="rm-dashboard-update" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 845.67 533.92">\n <!--\n RainMaker cloud (taken from the product logo) delivering an update to a\n dashboard on a laptop. Companion to rm-data-download: same canvas, cloud\n and connector, so the two read as one family.\n\n One source, two variants (see illustration-variants.ts):\n - static: every SMIL element is stripped and `data-variant="animated"`\n groups are dropped, so the base attribute values below ARE the resting\n frame (chart bars up, progress two thirds full, two packages in flight).\n - animated: `data-variant="static"` groups are dropped. Packages arrive\n 1.5s apart (package k lands at 3s + 1.5s * k); each landing refreshes\n one stat card, while the chart regrows and the sync badge spins.\n Variant groups must not contain nested <g> elements: the selector is a\n non-greedy regex up to the first closing tag.\n\n Theme colours come from the design tokens; the cloud keeps the logo\'s own\n reds on purpose. Ids are prefixed "rmdu-" because the markup is inlined.\n -->\n <defs>\n <style>\n .rmdu-card { fill: var(--color-card); }\n .rmdu-muted { fill: var(--color-muted); }\n .rmdu-muted-fg { fill: var(--color-muted-foreground); }\n .rmdu-gray { fill: var(--color-gray); }\n .rmdu-primary { fill: var(--color-primary); }\n .rmdu-primary-light { fill: var(--color-primary-light); }\n .rmdu-highlight { fill: var(--color-primary-light); }\n .rmdu-flow { fill: none; stroke: var(--color-primary); stroke-width: 3; stroke-linecap: round; stroke-dasharray: 9 9; opacity: .55; }\n .rmdu-pkg-frame { fill: var(--color-card); stroke: var(--color-primary); stroke-width: 2.5; }\n .rmdu-glyph { fill: none; stroke: var(--color-primary-foreground); stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }\n </style>\n\n <linearGradient id="rmdu-cloud" x1=".83" y1="92.99" x2="512.02" y2="92.99" gradientTransform="translate(0 114.01)" gradientUnits="userSpaceOnUse">\n <stop offset="0" stop-color="#fc4c3b"/>\n <stop offset=".5" stop-color="#d43129"/>\n <stop offset="1" stop-color="#f94939"/>\n </linearGradient>\n <linearGradient id="rmdu-cloud-top" x1="340.71" y1="86.7" x2="166.21" y2="-87.76" gradientTransform="translate(0 114.01)" gradientUnits="userSpaceOnUse">\n <stop offset="0" stop-color="#d43129"/>\n <stop offset="1" stop-color="#f94939"/>\n </linearGradient>\n <linearGradient id="rmdu-cloud-band" x1="43.64" y1="194.71" x2="364.07" y2="194.71" gradientTransform="translate(0 114.01)" gradientUnits="userSpaceOnUse">\n <stop offset="0" stop-color="#d43129"/>\n <stop offset="1" stop-color="#f94939"/>\n </linearGradient>\n <linearGradient id="rmdu-cloud-sweep" x1="377.59" y1="200.5" x2="479.34" y2="200.5" gradientTransform="translate(0 114.01)" gradientUnits="userSpaceOnUse">\n <stop offset="0" stop-color="#f94939"/>\n <stop offset="1" stop-color="#d43129"/>\n </linearGradient>\n <linearGradient id="rmdu-dot" x1="130.74" y1="157.26" x2="95.26" y2="121.82" gradientTransform="translate(0 114.01)" gradientUnits="userSpaceOnUse">\n <stop offset="0" stop-color="#d43129"/>\n <stop offset=".17" stop-color="#dd372d"/>\n <stop offset=".67" stop-color="#f14436"/>\n <stop offset="1" stop-color="#f94939"/>\n </linearGradient>\n <linearGradient id="rmdu-drop" x1="0" y1="0" x2="1" y2="0">\n <stop offset="0" stop-color="#fc4c3b"/>\n <stop offset=".57" stop-color="#eb3b30"/>\n <stop offset="1" stop-color="#e5352c"/>\n </linearGradient>\n\n <!-- The three rain dashes of the logo, reused for the static logo and the falling copies. -->\n <g id="rmdu-rain">\n <path fill="url(#rmdu-drop)" d="M295.41,420.01c-12.31,0-22.29-9.99-22.29-22.31,0-5.3,1.89-10.43,5.34-14.46l46.37-54.33c7.99-9.37,22.07-10.49,31.44-2.5s10.49,22.07,2.5,31.44h0l-46.37,54.33c-4.24,4.97-10.46,7.83-16.99,7.82h0Z"/>\n <path fill="url(#rmdu-drop)" d="M195.75,420.01c-5.3,0-10.42-1.89-14.43-5.35-9.37-7.95-10.52-21.99-2.57-31.36.02-.02.03-.04.05-.06l46.42-54.33c7.75-9.57,21.79-11.05,31.36-3.3s11.05,21.79,3.3,31.36c-.24.3-.5.6-.76.89l-46.37,54.33c-4.24,4.97-10.46,7.83-16.99,7.82h0Z"/>\n <path fill="url(#rmdu-drop)" d="M96.14,420.01c-12.31,0-22.29-9.99-22.29-22.31,0-5.3,1.89-10.43,5.34-14.46l46.37-54.33c7.75-9.57,21.79-11.05,31.36-3.3s11.05,21.79,3.3,31.36c-.24.3-.5.6-.76.89l-46.37,54.33c-4.22,4.98-10.42,7.84-16.95,7.82h0Z"/>\n </g>\n\n\n <!-- One update package travelling from the cloud to the dashboard: an up-arrow chip and a version label. -->\n <g id="rmdu-package">\n <rect class="rmdu-pkg-frame" x="-31" y="-13" width="62" height="26" rx="7"/>\n <circle class="rmdu-primary" cx="-17" cy="0" r="7"/>\n <path class="rmdu-glyph" d="M-17 3.5 V-3.5 M-20 -0.8 L-17 -3.8 L-14 -0.8"/>\n <rect class="rmdu-muted-fg" x="-5" y="-5" width="26" height="5" rx="2.5"/>\n <rect class="rmdu-muted-fg" x="-5" y="3" width="16" height="4" rx="2" opacity=".6"/>\n </g>\n\n <path id="rmdu-flow-path" d="M338 178 C 440 178, 462 402, 560 402"/>\n </defs>\n\n <!-- Ground -->\n <ellipse class="rmdu-muted" cx="440" cy="526" rx="380" ry="7.5"/>\n\n <!-- RainMaker cloud, straight from the logo (viewBox 512 x 420), scaled down. -->\n <g transform="translate(48 30) scale(0.58)">\n <!-- Falling copies of the logo\'s rain, emitted continuously. -->\n <g data-variant="animated" opacity=".55">\n <use href="#rmdu-rain">\n <animateTransform attributeName="transform" type="translate" values="0 0; 0 160" dur="2.4s" begin="0s" repeatCount="indefinite"/>\n <animate attributeName="opacity" values="0;1;1;0" keyTimes="0;.12;.5;1" dur="2.4s" begin="0s" repeatCount="indefinite"/>\n </use>\n <use href="#rmdu-rain">\n <animateTransform attributeName="transform" type="translate" values="0 0; 0 160" dur="2.4s" begin="1.2s" repeatCount="indefinite"/>\n <animate attributeName="opacity" values="0;1;1;0" keyTimes="0;.12;.5;1" dur="2.4s" begin="1.2s" repeatCount="indefinite"/>\n </use>\n </g>\n\n <use href="#rmdu-rain"/>\n <circle fill="url(#rmdu-dot)" cx="113" cy="253.55" r="25.08">\n <animate attributeName="r" values="25.08;27.5;25.08" dur="2.4s" repeatCount="indefinite"/>\n </circle>\n <path fill="url(#rmdu-cloud)" d="M400.41,142.72h0C397.94,61.46,330.05-2.41,248.79.07,171.43,2.43,109.11,64.29,106.18,141.63h0C44.34,144.92-3.13,197.72.16,259.56c3.2,60.25,53.51,107.16,113.84,106.16h201.58c10.54-.84,20.1,6.2,22.43,16.52h0l20.77-24.38h0c3.57-4.17,5.45-9.51,5.3-14.99-.47-12.19-10.53-21.81-22.73-21.73H113.74c-37.31,1.14-68.47-28.18-69.61-65.49s28.18-68.47,65.49-69.61c1.11-.03,2.23-.04,3.34-.02,4.07,0,8.12.37,12.13,1.09,5.86,1.08,11.91-.25,16.78-3.69,7.2-4.74,11.02-13.2,9.82-21.73-.69-4.79-1.04-9.63-1.04-14.47,0-56.67,45.94-102.61,102.61-102.61s102.61,45.94,102.61,102.61v4.35h0c-41.09,17.61-67.82,57.91-68.06,102.61-.1,12.4,9.81,22.56,22.21,22.77,12.31.05,22.33-9.9,22.38-22.21v-.09c-.15-37.32,29.99-67.7,67.32-67.85,37.32-.15,67.7,29.99,67.85,67.32.07,17.03-6.3,33.45-17.82,45.99l-.3.39-66.37,76.54c-8.09,9.29-7.12,23.38,2.17,31.47s23.38,7.12,31.47-2.17h0l66.28-76.14c41.57-45.93,38.04-116.87-7.89-158.44-20.48-18.53-47.07-28.86-74.69-29.01h0v-.03Z"/>\n <path fill="url(#rmdu-cloud-top)" d="M253.21,20.42c71.54-.01,133.13,50.5,147.12,120.65C396.84,59.85,328.17-3.17,246.95.31c-76.06,3.26-137.08,63.98-140.73,140.02,14.27-69.82,75.72-119.95,146.99-119.91Z"/>\n <path fill="url(#rmdu-cloud-band)" d="M358.78,357.9h0c7.97-9.42,6.79-23.51-2.62-31.48-4.02-3.4-9.11-5.27-14.37-5.29H113c-37.3-.02-67.53-30.24-67.58-67.54,0-6.2.86-12.37,2.52-18.34,0,0-43.46,130.38,145.86,130.38h121.69c10.56-.84,20.12,6.22,22.43,16.56l20.86-24.3h0Z"/>\n <path fill="url(#rmdu-cloud-sweep)" d="M454.44,215.04c18.93,25.91,17,61.56-4.61,85.27l-.3.39-66.45,76.32c-8.09,9.29-7.12,23.38,2.17,31.47s23.38,7.12,31.47-2.17h0l17.38-19.99h0c88.14-101.83,20.34-171.28,20.34-171.28h0Z"/>\n </g>\n\n <!-- Connector: dashes flow from the cloud towards the laptop. -->\n <use href="#rmdu-flow-path" class="rmdu-flow">\n <animate attributeName="stroke-dashoffset" from="0" to="-18" dur="0.9s" repeatCount="indefinite"/>\n </use>\n\n <!-- Laptop -->\n <g id="rmdu-laptop">\n <rect class="rmdu-muted-fg" x="526.77" y="310.15" width="296.41" height="203.65" rx="29.36"/>\n <path class="rmdu-gray" d="M504.29,513.81h341.38c0,11.1-9.01,20.11-20.11,20.11h-301.15c-11.1,0-20.11-9.01-20.11-20.11h0Z"/>\n <path class="rmdu-muted" d="M649.88,513.81h50.2v.15c0,2.95-2.4,5.35-5.35,5.35h-39.51c-2.95,0-5.35-2.4-5.35-5.35v-.15h0Z"/>\n <circle class="rmdu-card" cx="674.98" cy="318.61" r="3.7"/>\n\n <rect class="rmdu-card" x="539.84" y="327.23" width="270.27" height="169.5"/>\n <rect class="rmdu-primary" x="539.84" y="327.23" width="270.27" height="17.44"/>\n <circle class="rmdu-card" cx="551" cy="335.95" r="2.6" opacity=".85"/>\n <circle class="rmdu-card" cx="560" cy="335.95" r="2.6" opacity=".85"/>\n <circle class="rmdu-card" cx="569" cy="335.95" r="2.6" opacity=".85"/>\n\n <!-- Dashboard sidebar -->\n <rect class="rmdu-muted" x="551" y="355" width="50" height="103" rx="4"/>\n <rect class="rmdu-primary" x="558" y="364" width="34" height="5" rx="2.5"/>\n <rect class="rmdu-muted-fg" x="558" y="377" width="28" height="4" rx="2" opacity=".7"/>\n <rect class="rmdu-muted-fg" x="558" y="389" width="32" height="4" rx="2" opacity=".7"/>\n <rect class="rmdu-muted-fg" x="558" y="401" width="24" height="4" rx="2" opacity=".7"/>\n\n <!-- Stat cards: each flashes as a package lands. The highlight rests at opacity 0, so the static frame is unaffected. -->\n <g>\n <rect class="rmdu-muted" x="609" y="355" width="58" height="34" rx="4"/>\n <rect class="rmdu-highlight" x="609" y="355" width="58" height="34" rx="4" opacity="0">\n <animate attributeName="opacity" values="0;.45;0;0" keyTimes="0;.08;.35;1" dur="4.5s" begin="3s" repeatCount="indefinite"/>\n </rect>\n <rect class="rmdu-primary" x="616" y="363" width="16" height="4" rx="2"/>\n <rect class="rmdu-muted-fg" x="616" y="373" width="30" height="7" rx="3.5"/>\n </g>\n <g>\n <rect class="rmdu-muted" x="675" y="355" width="58" height="34" rx="4"/>\n <rect class="rmdu-highlight" x="675" y="355" width="58" height="34" rx="4" opacity="0">\n <animate attributeName="opacity" values="0;.45;0;0" keyTimes="0;.08;.35;1" dur="4.5s" begin="4.5s" repeatCount="indefinite"/>\n </rect>\n <rect class="rmdu-primary" x="682" y="363" width="16" height="4" rx="2"/>\n <rect class="rmdu-muted-fg" x="682" y="373" width="26" height="7" rx="3.5"/>\n </g>\n <g>\n <rect class="rmdu-muted" x="741" y="355" width="58" height="34" rx="4"/>\n <rect class="rmdu-highlight" x="741" y="355" width="58" height="34" rx="4" opacity="0">\n <animate attributeName="opacity" values="0;.45;0;0" keyTimes="0;.08;.35;1" dur="4.5s" begin="6s" repeatCount="indefinite"/>\n </rect>\n <rect class="rmdu-primary" x="748" y="363" width="16" height="4" rx="2"/>\n <rect class="rmdu-muted-fg" x="748" y="373" width="22" height="7" rx="3.5"/>\n </g>\n\n <!-- Chart: bars at full height at rest; when animated they shrink and regrow with each cycle. -->\n <rect class="rmdu-muted" x="609" y="397" width="190" height="61" rx="4" opacity=".6"/>\n <rect class="rmdu-primary-light" x="615" y="424" width="22" height="28" rx="3">\n <animate attributeName="height" values="14;28;28;14" keyTimes="0;.3;.85;1" dur="4.5s" begin="0s" repeatCount="indefinite"/>\n <animate attributeName="y" values="438;424;424;438" keyTimes="0;.3;.85;1" dur="4.5s" begin="0s" repeatCount="indefinite"/>\n </rect>\n <rect class="rmdu-primary-light" x="651" y="412" width="22" height="40" rx="3">\n <animate attributeName="height" values="22;40;40;22" keyTimes="0;.3;.85;1" dur="4.5s" begin="0.2s" repeatCount="indefinite"/>\n <animate attributeName="y" values="430;412;412;430" keyTimes="0;.3;.85;1" dur="4.5s" begin="0.2s" repeatCount="indefinite"/>\n </rect>\n <rect class="rmdu-primary-light" x="687" y="430" width="22" height="22" rx="3">\n <animate attributeName="height" values="12;22;22;12" keyTimes="0;.3;.85;1" dur="4.5s" begin="0.4s" repeatCount="indefinite"/>\n <animate attributeName="y" values="440;430;430;440" keyTimes="0;.3;.85;1" dur="4.5s" begin="0.4s" repeatCount="indefinite"/>\n </rect>\n <rect class="rmdu-primary" x="723" y="406" width="22" height="46" rx="3">\n <animate attributeName="height" values="26;46;46;26" keyTimes="0;.3;.85;1" dur="4.5s" begin="0.6s" repeatCount="indefinite"/>\n <animate attributeName="y" values="426;406;406;426" keyTimes="0;.3;.85;1" dur="4.5s" begin="0.6s" repeatCount="indefinite"/>\n </rect>\n <rect class="rmdu-primary-light" x="759" y="418" width="22" height="34" rx="3">\n <animate attributeName="height" values="18;34;34;18" keyTimes="0;.3;.85;1" dur="4.5s" begin="0.8s" repeatCount="indefinite"/>\n <animate attributeName="y" values="434;418;418;434" keyTimes="0;.3;.85;1" dur="4.5s" begin="0.8s" repeatCount="indefinite"/>\n </rect>\n\n <!-- Update progress: two thirds full at rest, filling over the cycle when animated. -->\n <rect class="rmdu-muted" x="551" y="470" width="216" height="8" rx="4"/>\n <rect class="rmdu-primary" x="551" y="470" width="144" height="8" rx="4">\n <animate attributeName="width" values="0;216;216" keyTimes="0;.92;1" dur="4.5s" repeatCount="indefinite"/>\n </rect>\n\n <!-- Sync badge -->\n <g transform="translate(786 474)">\n <circle class="rmdu-primary" r="11"/>\n <g class="rmdu-glyph">\n <path d="M-5.17 -1.88 A5.5 5.5 0 0 1 5.17 -1.88 M6.44 -4.6 L5.17 -1.88 L2.45 -3.15"/>\n <path d="M5.17 1.88 A5.5 5.5 0 0 1 -5.17 1.88 M-6.44 4.6 L-5.17 1.88 L-2.45 3.15"/>\n <animateTransform attributeName="transform" type="rotate" values="0;360" dur="2s" repeatCount="indefinite"/>\n </g>\n </g>\n </g>\n\n <!-- Static frame: two packages frozen part-way along the connector. -->\n <g data-variant="static">\n <use href="#rmdu-package" x="422" y="241"/>\n <use href="#rmdu-package" x="492" y="359"/>\n </g>\n\n <!-- Animated: three packages in flight, arriving 1.5s apart. -->\n <g data-variant="animated">\n <use href="#rmdu-package" opacity="0">\n <animateMotion dur="4.5s" begin="0s" repeatCount="indefinite" keyPoints="0;1;1" keyTimes="0;.667;1" calcMode="linear">\n <mpath href="#rmdu-flow-path"/>\n </animateMotion>\n <animate attributeName="opacity" values="0;1;1;0;0" keyTimes="0;.06;.6;.667;1" dur="4.5s" begin="0s" repeatCount="indefinite"/>\n </use>\n <use href="#rmdu-package" opacity="0">\n <animateMotion dur="4.5s" begin="1.5s" repeatCount="indefinite" keyPoints="0;1;1" keyTimes="0;.667;1" calcMode="linear">\n <mpath href="#rmdu-flow-path"/>\n </animateMotion>\n <animate attributeName="opacity" values="0;1;1;0;0" keyTimes="0;.06;.6;.667;1" dur="4.5s" begin="1.5s" repeatCount="indefinite"/>\n </use>\n <use href="#rmdu-package" opacity="0">\n <animateMotion dur="4.5s" begin="3s" repeatCount="indefinite" keyPoints="0;1;1" keyTimes="0;.667;1" calcMode="linear">\n <mpath href="#rmdu-flow-path"/>\n </animateMotion>\n <animate attributeName="opacity" values="0;1;1;0;0" keyTimes="0;.06;.6;.667;1" dur="4.5s" begin="3s" repeatCount="indefinite"/>\n </use>\n </g>\n</svg>\n';
16529
+
16527
16530
  // svg-raw:/builds/app-frameworks/esp-ui-component-library/src/assets/illustrations/rm-data-download.svg
16528
16531
  var rm_data_download_default = '<?xml version="1.0" encoding="UTF-8"?>\n<svg id="rm-data-download" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 845.67 533.92">\n <!--\n RainMaker cloud (taken from the product logo) raining data into a laptop.\n\n One source, two variants (see illustration-variants.ts):\n - static: every SMIL element is stripped and `data-variant="animated"`\n groups are dropped, so the base attribute values below ARE the resting\n frame (rows visible, progress two thirds full, two records in flight).\n - animated: `data-variant="static"` groups are dropped; `<set>` elements\n hide what the animations then bring in, so nothing flashes before its\n first `begin`.\n Variant groups must not contain nested <g> elements: the selector is a\n non-greedy regex up to the first closing tag.\n\n Theme colours come from the design tokens; the cloud keeps the logo\'s own\n reds on purpose. Ids are prefixed "rmdd-" because the markup is inlined.\n -->\n <defs>\n <style>\n .rmdd-card { fill: var(--color-card); }\n .rmdd-muted { fill: var(--color-muted); }\n .rmdd-muted-fg { fill: var(--color-muted-foreground); }\n .rmdd-gray { fill: var(--color-gray); }\n .rmdd-primary { fill: var(--color-primary); }\n .rmdd-primary-light { fill: var(--color-primary-light); }\n .rmdd-flow { fill: none; stroke: var(--color-primary); stroke-width: 3; stroke-linecap: round; stroke-dasharray: 9 9; opacity: .55; }\n .rmdd-pkt-frame { fill: var(--color-card); stroke: var(--color-primary); stroke-width: 2.5; }\n </style>\n\n <linearGradient id="rmdd-cloud" x1=".83" y1="92.99" x2="512.02" y2="92.99" gradientTransform="translate(0 114.01)" gradientUnits="userSpaceOnUse">\n <stop offset="0" stop-color="#fc4c3b"/>\n <stop offset=".5" stop-color="#d43129"/>\n <stop offset="1" stop-color="#f94939"/>\n </linearGradient>\n <linearGradient id="rmdd-cloud-top" x1="340.71" y1="86.7" x2="166.21" y2="-87.76" gradientTransform="translate(0 114.01)" gradientUnits="userSpaceOnUse">\n <stop offset="0" stop-color="#d43129"/>\n <stop offset="1" stop-color="#f94939"/>\n </linearGradient>\n <linearGradient id="rmdd-cloud-band" x1="43.64" y1="194.71" x2="364.07" y2="194.71" gradientTransform="translate(0 114.01)" gradientUnits="userSpaceOnUse">\n <stop offset="0" stop-color="#d43129"/>\n <stop offset="1" stop-color="#f94939"/>\n </linearGradient>\n <linearGradient id="rmdd-cloud-sweep" x1="377.59" y1="200.5" x2="479.34" y2="200.5" gradientTransform="translate(0 114.01)" gradientUnits="userSpaceOnUse">\n <stop offset="0" stop-color="#f94939"/>\n <stop offset="1" stop-color="#d43129"/>\n </linearGradient>\n <linearGradient id="rmdd-dot" x1="130.74" y1="157.26" x2="95.26" y2="121.82" gradientTransform="translate(0 114.01)" gradientUnits="userSpaceOnUse">\n <stop offset="0" stop-color="#d43129"/>\n <stop offset=".17" stop-color="#dd372d"/>\n <stop offset=".67" stop-color="#f14436"/>\n <stop offset="1" stop-color="#f94939"/>\n </linearGradient>\n <linearGradient id="rmdd-drop" x1="0" y1="0" x2="1" y2="0">\n <stop offset="0" stop-color="#fc4c3b"/>\n <stop offset=".57" stop-color="#eb3b30"/>\n <stop offset="1" stop-color="#e5352c"/>\n </linearGradient>\n\n <!-- The three rain dashes of the logo, reused for the static logo and the falling copies. -->\n <g id="rmdd-rain">\n <path fill="url(#rmdd-drop)" d="M295.41,420.01c-12.31,0-22.29-9.99-22.29-22.31,0-5.3,1.89-10.43,5.34-14.46l46.37-54.33c7.99-9.37,22.07-10.49,31.44-2.5s10.49,22.07,2.5,31.44h0l-46.37,54.33c-4.24,4.97-10.46,7.83-16.99,7.82h0Z"/>\n <path fill="url(#rmdd-drop)" d="M195.75,420.01c-5.3,0-10.42-1.89-14.43-5.35-9.37-7.95-10.52-21.99-2.57-31.36.02-.02.03-.04.05-.06l46.42-54.33c7.75-9.57,21.79-11.05,31.36-3.3s11.05,21.79,3.3,31.36c-.24.3-.5.6-.76.89l-46.37,54.33c-4.24,4.97-10.46,7.83-16.99,7.82h0Z"/>\n <path fill="url(#rmdd-drop)" d="M96.14,420.01c-12.31,0-22.29-9.99-22.29-22.31,0-5.3,1.89-10.43,5.34-14.46l46.37-54.33c7.75-9.57,21.79-11.05,31.36-3.3s11.05,21.79,3.3,31.36c-.24.3-.5.6-.76.89l-46.37,54.33c-4.22,4.98-10.42,7.84-16.95,7.82h0Z"/>\n </g>\n\n <!-- One exported record travelling from the cloud to the laptop. -->\n <g id="rmdd-packet">\n <rect class="rmdd-pkt-frame" x="-31" y="-13" width="62" height="26" rx="7"/>\n <rect class="rmdd-primary" x="-22" y="-5" width="12" height="5" rx="2.5"/>\n <rect class="rmdd-muted-fg" x="-6" y="-5" width="27" height="5" rx="2.5"/>\n <rect class="rmdd-muted-fg" x="-22" y="3" width="17" height="4" rx="2" opacity=".6"/>\n <rect class="rmdd-muted-fg" x="0" y="3" width="15" height="4" rx="2" opacity=".6"/>\n </g>\n\n <path id="rmdd-flow-path" d="M338 178 C 440 178, 462 402, 560 402"/>\n </defs>\n\n <!-- Ground -->\n <ellipse class="rmdd-muted" cx="440" cy="526" rx="380" ry="7.5"/>\n\n <!-- RainMaker cloud, straight from the logo (viewBox 512 x 420), scaled down. -->\n <g transform="translate(48 30) scale(0.58)">\n <!-- Falling copies of the logo\'s rain, emitted continuously. -->\n <g data-variant="animated" opacity=".55">\n <use href="#rmdd-rain">\n <animateTransform attributeName="transform" type="translate" values="0 0; 0 160" dur="2.4s" begin="0s" repeatCount="indefinite"/>\n <animate attributeName="opacity" values="0;1;1;0" keyTimes="0;.12;.5;1" dur="2.4s" begin="0s" repeatCount="indefinite"/>\n </use>\n <use href="#rmdd-rain">\n <animateTransform attributeName="transform" type="translate" values="0 0; 0 160" dur="2.4s" begin="1.2s" repeatCount="indefinite"/>\n <animate attributeName="opacity" values="0;1;1;0" keyTimes="0;.12;.5;1" dur="2.4s" begin="1.2s" repeatCount="indefinite"/>\n </use>\n </g>\n\n <use href="#rmdd-rain"/>\n <circle fill="url(#rmdd-dot)" cx="113" cy="253.55" r="25.08">\n <animate attributeName="r" values="25.08;27.5;25.08" dur="2.4s" repeatCount="indefinite"/>\n </circle>\n <path fill="url(#rmdd-cloud)" d="M400.41,142.72h0C397.94,61.46,330.05-2.41,248.79.07,171.43,2.43,109.11,64.29,106.18,141.63h0C44.34,144.92-3.13,197.72.16,259.56c3.2,60.25,53.51,107.16,113.84,106.16h201.58c10.54-.84,20.1,6.2,22.43,16.52h0l20.77-24.38h0c3.57-4.17,5.45-9.51,5.3-14.99-.47-12.19-10.53-21.81-22.73-21.73H113.74c-37.31,1.14-68.47-28.18-69.61-65.49s28.18-68.47,65.49-69.61c1.11-.03,2.23-.04,3.34-.02,4.07,0,8.12.37,12.13,1.09,5.86,1.08,11.91-.25,16.78-3.69,7.2-4.74,11.02-13.2,9.82-21.73-.69-4.79-1.04-9.63-1.04-14.47,0-56.67,45.94-102.61,102.61-102.61s102.61,45.94,102.61,102.61v4.35h0c-41.09,17.61-67.82,57.91-68.06,102.61-.1,12.4,9.81,22.56,22.21,22.77,12.31.05,22.33-9.9,22.38-22.21v-.09c-.15-37.32,29.99-67.7,67.32-67.85,37.32-.15,67.7,29.99,67.85,67.32.07,17.03-6.3,33.45-17.82,45.99l-.3.39-66.37,76.54c-8.09,9.29-7.12,23.38,2.17,31.47s23.38,7.12,31.47-2.17h0l66.28-76.14c41.57-45.93,38.04-116.87-7.89-158.44-20.48-18.53-47.07-28.86-74.69-29.01h0v-.03Z"/>\n <path fill="url(#rmdd-cloud-top)" d="M253.21,20.42c71.54-.01,133.13,50.5,147.12,120.65C396.84,59.85,328.17-3.17,246.95.31c-76.06,3.26-137.08,63.98-140.73,140.02,14.27-69.82,75.72-119.95,146.99-119.91Z"/>\n <path fill="url(#rmdd-cloud-band)" d="M358.78,357.9h0c7.97-9.42,6.79-23.51-2.62-31.48-4.02-3.4-9.11-5.27-14.37-5.29H113c-37.3-.02-67.53-30.24-67.58-67.54,0-6.2.86-12.37,2.52-18.34,0,0-43.46,130.38,145.86,130.38h121.69c10.56-.84,20.12,6.22,22.43,16.56l20.86-24.3h0Z"/>\n <path fill="url(#rmdd-cloud-sweep)" d="M454.44,215.04c18.93,25.91,17,61.56-4.61,85.27l-.3.39-66.45,76.32c-8.09,9.29-7.12,23.38,2.17,31.47s23.38,7.12,31.47-2.17h0l17.38-19.99h0c88.14-101.83,20.34-171.28,20.34-171.28h0Z"/>\n </g>\n\n <!-- Connector: dashes flow from the cloud towards the laptop. -->\n <use href="#rmdd-flow-path" class="rmdd-flow">\n <animate attributeName="stroke-dashoffset" from="0" to="-18" dur="0.9s" repeatCount="indefinite"/>\n </use>\n\n <!-- Laptop -->\n <g id="rmdd-laptop">\n <rect class="rmdd-muted-fg" x="526.77" y="310.15" width="296.41" height="203.65" rx="29.36"/>\n <path class="rmdd-gray" d="M504.29,513.81h341.38c0,11.1-9.01,20.11-20.11,20.11h-301.15c-11.1,0-20.11-9.01-20.11-20.11h0Z"/>\n <path class="rmdd-muted" d="M649.88,513.81h50.2v.15c0,2.95-2.4,5.35-5.35,5.35h-39.51c-2.95,0-5.35-2.4-5.35-5.35v-.15h0Z"/>\n <circle class="rmdd-card" cx="674.98" cy="318.61" r="3.7"/>\n\n <rect class="rmdd-card" x="539.84" y="327.23" width="270.27" height="169.5"/>\n <rect class="rmdd-primary" x="539.84" y="327.23" width="270.27" height="17.44"/>\n <circle class="rmdd-card" cx="551" cy="335.95" r="2.6" opacity=".85"/>\n <circle class="rmdd-card" cx="560" cy="335.95" r="2.6" opacity=".85"/>\n <circle class="rmdd-card" cx="569" cy="335.95" r="2.6" opacity=".85"/>\n\n <!-- Table header -->\n <rect class="rmdd-muted" x="551" y="355" width="248" height="16" rx="3"/>\n <rect class="rmdd-muted-fg" x="558" y="361" width="34" height="4" rx="2"/>\n <rect class="rmdd-muted-fg" x="606" y="361" width="58" height="4" rx="2"/>\n <rect class="rmdd-muted-fg" x="682" y="361" width="42" height="4" rx="2"/>\n <rect class="rmdd-muted-fg" x="746" y="361" width="30" height="4" rx="2"/>\n\n <!--\n Rows: visible in the static frame. When animated, `set` hides them from\n t=0 and each lights up as a packet arrives (packet k lands at 3s + 1.5s * k).\n -->\n <g>\n <rect class="rmdd-primary-light" x="551" y="378" width="248" height="16" rx="3" opacity=".45"/>\n <rect class="rmdd-primary" x="558" y="384" width="34" height="4" rx="2"/>\n <rect class="rmdd-muted-fg" x="606" y="384" width="50" height="4" rx="2"/>\n <rect class="rmdd-muted-fg" x="682" y="384" width="36" height="4" rx="2"/>\n <rect class="rmdd-muted-fg" x="746" y="384" width="24" height="4" rx="2"/>\n <set attributeName="opacity" to="0" begin="0s" dur="indefinite"/>\n <animate attributeName="opacity" values="0;1;1;0" keyTimes="0;.06;.82;1" dur="4.5s" begin="3s" repeatCount="indefinite"/>\n </g>\n <g>\n <rect class="rmdd-primary-light" x="551" y="400" width="248" height="16" rx="3" opacity=".45"/>\n <rect class="rmdd-primary" x="558" y="406" width="34" height="4" rx="2"/>\n <rect class="rmdd-muted-fg" x="606" y="406" width="44" height="4" rx="2"/>\n <rect class="rmdd-muted-fg" x="682" y="406" width="40" height="4" rx="2"/>\n <rect class="rmdd-muted-fg" x="746" y="406" width="18" height="4" rx="2"/>\n <set attributeName="opacity" to="0" begin="0s" dur="indefinite"/>\n <animate attributeName="opacity" values="0;1;1;0" keyTimes="0;.06;.82;1" dur="4.5s" begin="4.5s" repeatCount="indefinite"/>\n </g>\n <g>\n <rect class="rmdd-primary-light" x="551" y="422" width="248" height="16" rx="3" opacity=".45"/>\n <rect class="rmdd-primary" x="558" y="428" width="34" height="4" rx="2"/>\n <rect class="rmdd-muted-fg" x="606" y="428" width="56" height="4" rx="2"/>\n <rect class="rmdd-muted-fg" x="682" y="428" width="30" height="4" rx="2"/>\n <rect class="rmdd-muted-fg" x="746" y="428" width="28" height="4" rx="2"/>\n <set attributeName="opacity" to="0" begin="0s" dur="indefinite"/>\n <animate attributeName="opacity" values="0;1;1;0" keyTimes="0;.06;.82;1" dur="4.5s" begin="6s" repeatCount="indefinite"/>\n </g>\n\n <!-- Download progress: two thirds full at rest, filling over the cycle when animated. -->\n <rect class="rmdd-muted" x="551" y="470" width="248" height="8" rx="4"/>\n <rect class="rmdd-primary" x="551" y="470" width="168" height="8" rx="4">\n <animate attributeName="width" values="0;248;248" keyTimes="0;.92;1" dur="4.5s" repeatCount="indefinite"/>\n </rect>\n\n <!-- Download badge -->\n <g transform="translate(786 452)">\n <circle class="rmdd-primary" r="11"/>\n <g fill="none" stroke="var(--color-primary-foreground)" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round">\n <path d="M0 -5.5 V3.5"/>\n <path d="M-3.8 0 L0 3.8 L3.8 0"/>\n <path d="M-5 6.5 H5"/>\n <animateTransform attributeName="transform" type="translate" values="0 -1.2; 0 1.2; 0 -1.2" dur="1.2s" repeatCount="indefinite"/>\n </g>\n </g>\n </g>\n\n <!-- Static frame: two records frozen part-way along the connector. -->\n <g data-variant="static">\n <use href="#rmdd-packet" x="422" y="241"/>\n <use href="#rmdd-packet" x="492" y="359"/>\n </g>\n\n <!-- Animated: three records in flight, arriving 1.5s apart. -->\n <g data-variant="animated">\n <use href="#rmdd-packet" opacity="0">\n <animateMotion dur="4.5s" begin="0s" repeatCount="indefinite" keyPoints="0;1;1" keyTimes="0;.667;1" calcMode="linear">\n <mpath href="#rmdd-flow-path"/>\n </animateMotion>\n <animate attributeName="opacity" values="0;1;1;0;0" keyTimes="0;.06;.6;.667;1" dur="4.5s" begin="0s" repeatCount="indefinite"/>\n </use>\n <use href="#rmdd-packet" opacity="0">\n <animateMotion dur="4.5s" begin="1.5s" repeatCount="indefinite" keyPoints="0;1;1" keyTimes="0;.667;1" calcMode="linear">\n <mpath href="#rmdd-flow-path"/>\n </animateMotion>\n <animate attributeName="opacity" values="0;1;1;0;0" keyTimes="0;.06;.6;.667;1" dur="4.5s" begin="1.5s" repeatCount="indefinite"/>\n </use>\n <use href="#rmdd-packet" opacity="0">\n <animateMotion dur="4.5s" begin="3s" repeatCount="indefinite" keyPoints="0;1;1" keyTimes="0;.667;1" calcMode="linear">\n <mpath href="#rmdd-flow-path"/>\n </animateMotion>\n <animate attributeName="opacity" values="0;1;1;0;0" keyTimes="0;.06;.6;.667;1" dur="4.5s" begin="3s" repeatCount="indefinite"/>\n </use>\n </g>\n</svg>\n';
16529
16532
 
@@ -16548,6 +16551,7 @@ var chipAspect = parseSvgViewBoxAspectRatio(chip_default) ?? 141.99 / 103.44;
16548
16551
  var newOtaAspect = parseSvgViewBoxAspectRatio(new_ota_default) ?? 95 / 72.9;
16549
16552
  var securedKeyAspect = parseSvgViewBoxAspectRatio(secured_key_default) ?? 459.75 / 456.99;
16550
16553
  var rmDataDownloadAspect = parseSvgViewBoxAspectRatio(rm_data_download_default) ?? 845.67 / 533.92;
16554
+ var rmDashboardUpdateAspect = parseSvgViewBoxAspectRatio(rm_dashboard_update_default) ?? 845.67 / 533.92;
16551
16555
  var illustrationRegistry = [
16552
16556
  {
16553
16557
  id: "no-search-results",
@@ -16583,6 +16587,11 @@ var illustrationRegistry = [
16583
16587
  id: "rm-data-download",
16584
16588
  svg: rm_data_download_default,
16585
16589
  aspectRatio: rmDataDownloadAspect
16590
+ },
16591
+ {
16592
+ id: "rm-dashboard-update",
16593
+ svg: rm_dashboard_update_default,
16594
+ aspectRatio: rmDashboardUpdateAspect
16586
16595
  }
16587
16596
  ];
16588
16597
  var illustrationsById = Object.fromEntries(
@@ -16685,12 +16694,12 @@ function CollapsibleCard({
16685
16694
  className,
16686
16695
  defaultOpen = false
16687
16696
  }) {
16688
- const childArray = React10.Children.toArray(children);
16697
+ const childArray = React11.Children.toArray(children);
16689
16698
  const contentChild = childArray.find(
16690
- (child) => React10.isValidElement(child) && child.type === CollapsibleContent
16699
+ (child) => React11.isValidElement(child) && child.type === CollapsibleContent
16691
16700
  );
16692
16701
  const titleChild = childArray.find(
16693
- (child) => React10.isValidElement(child) && child.type !== CollapsibleContent
16702
+ (child) => React11.isValidElement(child) && child.type !== CollapsibleContent
16694
16703
  );
16695
16704
  return /* @__PURE__ */ jsx(Card, { className: cn("bg-transparent shadow-none rounded-md", className), children: /* @__PURE__ */ jsxs(Collapsible, { defaultOpen, className: "group", children: [
16696
16705
  /* @__PURE__ */ jsx(CardHeader, { className: "p-3 border-b border-transparent group-data-[state=open]:border-border", children: /* @__PURE__ */ jsx(CollapsibleTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
@@ -16707,7 +16716,7 @@ function CollapsibleCard({
16707
16716
  ]
16708
16717
  }
16709
16718
  ) }) }),
16710
- contentChild && React10.cloneElement(contentChild, {
16719
+ contentChild && React11.cloneElement(contentChild, {
16711
16720
  className: cn(
16712
16721
  "px-4 pb-6 pt-4",
16713
16722
  contentChild.props.className
@@ -17299,7 +17308,7 @@ var useLottie = function useLottie2(props, style) {
17299
17308
  });
17300
17309
  };
17301
17310
  }, [onComplete, onLoopComplete, onEnterFrame, onSegmentStart, onConfigReady, onDataReady, onDataFailed, onLoadedImages, onDOMLoaded, onDestroy]);
17302
- var View = /* @__PURE__ */ React10__default.createElement("div", _objectSpread2({
17311
+ var View = /* @__PURE__ */ React11__default.createElement("div", _objectSpread2({
17303
17312
  style,
17304
17313
  ref: animationContainer
17305
17314
  }, rest));
@@ -47627,32 +47636,208 @@ function AnimatedCard({
47627
47636
  }
47628
47637
  );
47629
47638
  }
47639
+ var NO_OVERFLOW = { start: false, end: false };
47640
+ function useScrollOverflow(ref, { enabled = true, getContent, onResize } = {}) {
47641
+ const [overflow, setOverflow] = React11.useState(NO_OVERFLOW);
47642
+ const getContentRef = React11.useRef(getContent);
47643
+ const onResizeRef = React11.useRef(onResize);
47644
+ React11.useEffect(() => {
47645
+ getContentRef.current = getContent;
47646
+ onResizeRef.current = onResize;
47647
+ });
47648
+ React11.useEffect(() => {
47649
+ const scroller = ref.current;
47650
+ if (!enabled || !scroller) {
47651
+ setOverflow(NO_OVERFLOW);
47652
+ return;
47653
+ }
47654
+ const update = () => {
47655
+ const max = scroller.scrollWidth - scroller.clientWidth;
47656
+ const pos = Math.abs(scroller.scrollLeft);
47657
+ const start = pos > 1;
47658
+ const end = pos < max - 1;
47659
+ setOverflow(
47660
+ (prev) => prev.start === start && prev.end === end ? prev : { start, end }
47661
+ );
47662
+ };
47663
+ update();
47664
+ scroller.addEventListener("scroll", update, { passive: true });
47665
+ if (typeof ResizeObserver === "undefined") {
47666
+ return () => scroller.removeEventListener("scroll", update);
47667
+ }
47668
+ const observer = new ResizeObserver(() => {
47669
+ update();
47670
+ onResizeRef.current?.();
47671
+ });
47672
+ observer.observe(scroller);
47673
+ const content3 = getContentRef.current?.(scroller);
47674
+ if (content3) observer.observe(content3);
47675
+ return () => {
47676
+ scroller.removeEventListener("scroll", update);
47677
+ observer.disconnect();
47678
+ };
47679
+ }, [ref, enabled]);
47680
+ return overflow;
47681
+ }
47682
+ var EDGE_SIZE = 24;
47683
+ function prefersReducedMotion() {
47684
+ return typeof window !== "undefined" && window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;
47685
+ }
47686
+ function fadeMask(start, end) {
47687
+ if (!start && !end) return {};
47688
+ const from = start ? `transparent, #000 ${EDGE_SIZE}px` : "#000";
47689
+ const to = end ? `#000 calc(100% - ${EDGE_SIZE}px), transparent` : "#000";
47690
+ const image = `linear-gradient(to right, ${from}, ${to})`;
47691
+ return { maskImage: image, WebkitMaskImage: image };
47692
+ }
47693
+ var arrowButtonClass = "inline-flex size-8 shrink-0 items-center justify-center rounded-full border border-border bg-background text-muted-foreground transition-colors hover:text-foreground disabled:pointer-events-none disabled:opacity-40";
47694
+ function ListDetailsItemStrip({
47695
+ data: data2,
47696
+ selectedId,
47697
+ onSelect,
47698
+ className
47699
+ }) {
47700
+ const scrollerRef = useRef(null);
47701
+ const overflow = useScrollOverflow(scrollerRef, {
47702
+ getContent: (scroller) => scroller.firstElementChild
47703
+ });
47704
+ const hasOverflow = overflow.start || overflow.end;
47705
+ const mountedRef = useRef(false);
47706
+ useEffect(() => {
47707
+ const scroller = scrollerRef.current;
47708
+ const selected = scroller?.querySelector('[aria-pressed="true"]');
47709
+ if (!scroller || !selected) return;
47710
+ const scrollerRect = scroller.getBoundingClientRect();
47711
+ if (scrollerRect.width === 0) return;
47712
+ const itemRect = selected.getBoundingClientRect();
47713
+ const overStart = itemRect.left - (scrollerRect.left + EDGE_SIZE);
47714
+ const overEnd = itemRect.right - (scrollerRect.right - EDGE_SIZE);
47715
+ let delta = 0;
47716
+ if (overStart < 0) delta = overStart;
47717
+ else if (overEnd > 0) delta = Math.min(overEnd, overStart);
47718
+ const instant = !mountedRef.current || prefersReducedMotion();
47719
+ mountedRef.current = true;
47720
+ if (Math.abs(delta) >= 1) {
47721
+ scroller.scrollBy({ left: delta, behavior: instant ? "auto" : "smooth" });
47722
+ }
47723
+ }, [selectedId, hasOverflow]);
47724
+ const scrollByPage = (direction) => {
47725
+ const scroller = scrollerRef.current;
47726
+ if (!scroller) return;
47727
+ scroller.scrollBy({
47728
+ left: direction * scroller.clientWidth * 0.8,
47729
+ behavior: prefersReducedMotion() ? "auto" : "smooth"
47730
+ });
47731
+ };
47732
+ return /* @__PURE__ */ jsxs(
47733
+ "div",
47734
+ {
47735
+ "data-slot": "list-details-item-strip",
47736
+ className: cn("flex items-center gap-1", className),
47737
+ children: [
47738
+ hasOverflow && // Arrows duplicate scrolling, which keyboard users get by tabbing
47739
+ // through the items, so they are hidden from assistive technology.
47740
+ /* @__PURE__ */ jsx(
47741
+ "button",
47742
+ {
47743
+ type: "button",
47744
+ tabIndex: -1,
47745
+ "aria-hidden": true,
47746
+ disabled: !overflow.start,
47747
+ className: arrowButtonClass,
47748
+ onClick: () => scrollByPage(-1),
47749
+ children: /* @__PURE__ */ jsx(ChevronLeft, { className: "size-4" })
47750
+ }
47751
+ ),
47752
+ /* @__PURE__ */ jsx(
47753
+ "div",
47754
+ {
47755
+ ref: scrollerRef,
47756
+ className: "min-w-0 flex-1 overflow-x-auto overscroll-x-contain [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
47757
+ style: fadeMask(overflow.start, overflow.end),
47758
+ children: /* @__PURE__ */ jsx("div", { className: "flex w-max gap-2 p-1", children: data2.map((item) => {
47759
+ const isSelected = selectedId === item.id;
47760
+ if (typeof item.title !== "string") {
47761
+ return /* @__PURE__ */ jsxs(
47762
+ "button",
47763
+ {
47764
+ type: "button",
47765
+ onClick: () => onSelect(item.id),
47766
+ "aria-pressed": isSelected,
47767
+ className: cn(
47768
+ "flex shrink-0 items-center gap-2 rounded-md px-3 py-2 text-left",
47769
+ "border-0 bg-transparent shadow-none",
47770
+ "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
47771
+ ),
47772
+ children: [
47773
+ /* @__PURE__ */ jsx("span", { className: "flex items-center", children: item.title }),
47774
+ item.endIcon != null && /* @__PURE__ */ jsx("span", { className: "shrink-0", children: item.endIcon })
47775
+ ]
47776
+ },
47777
+ item.id
47778
+ );
47779
+ }
47780
+ return /* @__PURE__ */ jsx(
47781
+ Button,
47782
+ {
47783
+ type: "button",
47784
+ fullWidth: false,
47785
+ variant: isSelected ? "outline" : "ghost",
47786
+ color: isSelected ? "primary" : "gray",
47787
+ onClick: () => onSelect(item.id),
47788
+ "aria-pressed": isSelected,
47789
+ className: cn("shrink-0", !isSelected && "border border-transparent"),
47790
+ endIcon: item.endIcon,
47791
+ hideRingOnHover: true,
47792
+ children: /* @__PURE__ */ jsx("span", { className: "max-w-48 truncate", title: item.title, children: item.title })
47793
+ },
47794
+ item.id
47795
+ );
47796
+ }) })
47797
+ }
47798
+ ),
47799
+ hasOverflow && /* @__PURE__ */ jsx(
47800
+ "button",
47801
+ {
47802
+ type: "button",
47803
+ tabIndex: -1,
47804
+ "aria-hidden": true,
47805
+ disabled: !overflow.end,
47806
+ className: arrowButtonClass,
47807
+ onClick: () => scrollByPage(1),
47808
+ children: /* @__PURE__ */ jsx(ChevronRight, { className: "size-4" })
47809
+ }
47810
+ )
47811
+ ]
47812
+ }
47813
+ );
47814
+ }
47630
47815
  var panelColSpanClass = {
47631
- 1: "col-span-1",
47632
- 2: "col-span-2",
47633
- 3: "col-span-3",
47634
- 4: "col-span-4",
47635
- 5: "col-span-5",
47636
- 6: "col-span-6",
47637
- 7: "col-span-7",
47638
- 8: "col-span-8",
47639
- 9: "col-span-9",
47640
- 10: "col-span-10",
47641
- 12: "col-span-12"
47816
+ 1: "md:col-span-1",
47817
+ 2: "md:col-span-2",
47818
+ 3: "md:col-span-3",
47819
+ 4: "md:col-span-4",
47820
+ 5: "md:col-span-5",
47821
+ 6: "md:col-span-6",
47822
+ 7: "md:col-span-7",
47823
+ 8: "md:col-span-8",
47824
+ 9: "md:col-span-9",
47825
+ 10: "md:col-span-10",
47826
+ 12: "md:col-span-12"
47642
47827
  };
47643
47828
  var detailsColSpanClass = {
47644
- 1: "col-span-1",
47645
- 2: "col-span-2",
47646
- 3: "col-span-3",
47647
- 4: "col-span-4",
47648
- 5: "col-span-5",
47649
- 6: "col-span-6",
47650
- 7: "col-span-7",
47651
- 8: "col-span-8",
47652
- 9: "col-span-9",
47653
- 10: "col-span-10",
47654
- 11: "col-span-11",
47655
- 12: "col-span-12"
47829
+ 1: "md:col-span-1",
47830
+ 2: "md:col-span-2",
47831
+ 3: "md:col-span-3",
47832
+ 4: "md:col-span-4",
47833
+ 5: "md:col-span-5",
47834
+ 6: "md:col-span-6",
47835
+ 7: "md:col-span-7",
47836
+ 8: "md:col-span-8",
47837
+ 9: "md:col-span-9",
47838
+ 10: "md:col-span-10",
47839
+ 11: "md:col-span-11",
47840
+ 12: "md:col-span-12"
47656
47841
  };
47657
47842
  function pickSelectedId({
47658
47843
  data: data2,
@@ -47738,8 +47923,9 @@ function ListDetails({
47738
47923
  "div",
47739
47924
  {
47740
47925
  className: cn(
47741
- "grid grid-cols-12 gap-4",
47742
- isFixedHeight ? "h-full min-h-0 grid-rows-[minmax(0,1fr)]" : "min-h-[16rem]"
47926
+ // Below `md`: one column, the item strip above the details.
47927
+ "grid grid-cols-1 gap-4 md:grid-cols-12",
47928
+ isFixedHeight ? "h-full min-h-0 grid-rows-[auto_minmax(0,1fr)] md:grid-rows-[minmax(0,1fr)]" : "md:min-h-[16rem]"
47743
47929
  ),
47744
47930
  children: [
47745
47931
  /* @__PURE__ */ jsxs(
@@ -47747,11 +47933,20 @@ function ListDetails({
47747
47933
  {
47748
47934
  className: cn(
47749
47935
  "items-list-wrapper flex min-h-0 flex-col gap-3",
47750
- isFixedHeight && "h-full",
47936
+ isFixedHeight && "md:h-full",
47751
47937
  panelColSpanClass[titleListPanelColumnWidth]
47752
47938
  ),
47753
47939
  children: [
47754
- /* @__PURE__ */ jsx(ScrollArea, { className: "items-list-container min-h-0 flex-1 rounded-md border border-border", children: /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-2 p-2", children: data2.map((item) => {
47940
+ /* @__PURE__ */ jsx(
47941
+ ListDetailsItemStrip,
47942
+ {
47943
+ data: data2,
47944
+ selectedId,
47945
+ onSelect: handleSelect,
47946
+ className: "md:hidden"
47947
+ }
47948
+ ),
47949
+ /* @__PURE__ */ jsx(ScrollArea, { className: "items-list-container hidden min-h-0 flex-1 rounded-md border border-border md:block", children: /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-2 p-2", children: data2.map((item) => {
47755
47950
  const isSelected = selectedId === item.id;
47756
47951
  const isStringTitle = typeof item.title === "string";
47757
47952
  if (!isStringTitle) {
@@ -47790,7 +47985,10 @@ function ListDetails({
47790
47985
  item.id
47791
47986
  );
47792
47987
  }) }) }),
47793
- footer != null ? /* @__PURE__ */ jsx("div", { className: "items-list-footer shrink-0", children: footer }) : null
47988
+ footer != null ? (
47989
+ // Hidden on small screens, where the strip leaves no room for it.
47990
+ /* @__PURE__ */ jsx("div", { className: "items-list-footer hidden shrink-0 md:block", children: footer })
47991
+ ) : null
47794
47992
  ]
47795
47993
  }
47796
47994
  ),
@@ -47983,8 +48181,8 @@ function NavBarMobileMenu({
47983
48181
  title,
47984
48182
  colorClasses
47985
48183
  }) {
47986
- const [expandedId, setExpandedId] = React10.useState(null);
47987
- React10.useEffect(() => {
48184
+ const [expandedId, setExpandedId] = React11.useState(null);
48185
+ React11.useEffect(() => {
47988
48186
  if (!open) setExpandedId(null);
47989
48187
  }, [open]);
47990
48188
  const handleItemClick = (item) => {
@@ -48166,7 +48364,7 @@ function NavBar({
48166
48364
  }) {
48167
48365
  const isMobile = useIsMobile();
48168
48366
  const resolvedColor = resolveNavColor(color);
48169
- const navRef = React10.useRef(null);
48367
+ const navRef = React11.useRef(null);
48170
48368
  const [activeId, setActiveId] = useControlledState({
48171
48369
  value: activeIdProp,
48172
48370
  defaultValue: defaultActiveId,
@@ -48177,8 +48375,8 @@ function NavBar({
48177
48375
  defaultValue: null,
48178
48376
  onChange: onDetailsPanelChange
48179
48377
  });
48180
- const [mobileMenuOpen, setMobileMenuOpen] = React10.useState(false);
48181
- const [navRect, setNavRect] = React10.useState({ bottom: 0, width: 0, left: 0 });
48378
+ const [mobileMenuOpen, setMobileMenuOpen] = React11.useState(false);
48379
+ const [navRect, setNavRect] = React11.useState({ bottom: 0, width: 0, left: 0 });
48182
48380
  const {
48183
48381
  containerRef,
48184
48382
  measureRef,
@@ -48193,7 +48391,7 @@ function NavBar({
48193
48391
  threshold: morphScrollThreshold,
48194
48392
  scrollContainerRef: morphScrollContainer
48195
48393
  });
48196
- React10.useEffect(() => {
48394
+ React11.useEffect(() => {
48197
48395
  if (!openDetailsId || !navRef.current) return;
48198
48396
  const updateRect = () => {
48199
48397
  if (navRef.current) {
@@ -48209,7 +48407,7 @@ function NavBar({
48209
48407
  window.removeEventListener("resize", updateRect);
48210
48408
  };
48211
48409
  }, [openDetailsId]);
48212
- React10.useEffect(() => {
48410
+ React11.useEffect(() => {
48213
48411
  if (!openDetailsId) return;
48214
48412
  const handleKeyDown = (e) => {
48215
48413
  if (e.key === "Escape") {
@@ -48219,7 +48417,7 @@ function NavBar({
48219
48417
  document.addEventListener("keydown", handleKeyDown);
48220
48418
  return () => document.removeEventListener("keydown", handleKeyDown);
48221
48419
  }, [openDetailsId, setOpenDetailsId]);
48222
- React10.useEffect(() => {
48420
+ React11.useEffect(() => {
48223
48421
  if (!openDetailsId) return;
48224
48422
  const handleMouseDown = (e) => {
48225
48423
  if (navRef.current && !navRef.current.contains(e.target)) {
@@ -48229,7 +48427,7 @@ function NavBar({
48229
48427
  document.addEventListener("mousedown", handleMouseDown);
48230
48428
  return () => document.removeEventListener("mousedown", handleMouseDown);
48231
48429
  }, [openDetailsId, setOpenDetailsId]);
48232
- const handleItemClick = React10.useCallback(
48430
+ const handleItemClick = React11.useCallback(
48233
48431
  (item) => {
48234
48432
  item.onClick?.();
48235
48433
  setActiveId(item.id);
@@ -48241,16 +48439,16 @@ function NavBar({
48241
48439
  },
48242
48440
  [openDetailsId, setActiveId, setOpenDetailsId]
48243
48441
  );
48244
- React10.useEffect(() => {
48442
+ React11.useEffect(() => {
48245
48443
  if (isMobile) setOpenDetailsId(null);
48246
48444
  }, [isMobile, setOpenDetailsId]);
48247
48445
  const resolvedHeight = height2 ?? "var(--espd-navbar-height)";
48248
48446
  const activeDetailsItem = openDetailsId ? items.find((i) => i.id === openDetailsId) : void 0;
48249
- const [overflowDetailsItem, setOverflowDetailsItem] = React10.useState(null);
48250
- const overflowDetailsRef = React10.useRef(null);
48251
- const moreButtonRef = React10.useRef(null);
48252
- const [overflowPanelPos, setOverflowPanelPos] = React10.useState({ top: 0, right: 0 });
48253
- React10.useEffect(() => {
48447
+ const [overflowDetailsItem, setOverflowDetailsItem] = React11.useState(null);
48448
+ const overflowDetailsRef = React11.useRef(null);
48449
+ const moreButtonRef = React11.useRef(null);
48450
+ const [overflowPanelPos, setOverflowPanelPos] = React11.useState({ top: 0, right: 0 });
48451
+ React11.useEffect(() => {
48254
48452
  if (!overflowDetailsItem || !moreButtonRef.current) return;
48255
48453
  const rect = moreButtonRef.current.getBoundingClientRect();
48256
48454
  setOverflowPanelPos({
@@ -48258,7 +48456,7 @@ function NavBar({
48258
48456
  right: window.innerWidth - rect.right
48259
48457
  });
48260
48458
  }, [overflowDetailsItem]);
48261
- React10.useEffect(() => {
48459
+ React11.useEffect(() => {
48262
48460
  if (!overflowDetailsItem) return;
48263
48461
  const handleMouseDown = (e) => {
48264
48462
  if (overflowDetailsRef.current && !overflowDetailsRef.current.contains(e.target) && moreButtonRef.current && !moreButtonRef.current.contains(e.target)) {
@@ -48539,7 +48737,7 @@ function NavBar({
48539
48737
  }
48540
48738
  );
48541
48739
  }
48542
- var MoreButton = React10.forwardRef(function MoreButton2({ label, hasActiveOverflowItem, resolvedColor, ...props }, ref) {
48740
+ var MoreButton = React11.forwardRef(function MoreButton2({ label, hasActiveOverflowItem, resolvedColor, ...props }, ref) {
48543
48741
  return /* @__PURE__ */ jsxs(
48544
48742
  "button",
48545
48743
  {
@@ -48673,7 +48871,7 @@ var triggerSizeClasses = {
48673
48871
  lg: "h-12 px-5 text-lg"
48674
48872
  };
48675
48873
  var triggerIconClassName = "size-4 shrink-0 opacity-50";
48676
- var SelectTrigger = React10.forwardRef(
48874
+ var SelectTrigger = React11.forwardRef(
48677
48875
  ({
48678
48876
  className,
48679
48877
  children,
@@ -48687,7 +48885,7 @@ var SelectTrigger = React10.forwardRef(
48687
48885
  "aria-describedby": ariaDescribedBy,
48688
48886
  ...props
48689
48887
  }, ref) => {
48690
- const autoId = React10.useId();
48888
+ const autoId = React11.useId();
48691
48889
  const hasEnhancedProps = label !== void 0 || required !== void 0 || hintContent !== void 0 || error !== void 0 || errorContent !== void 0;
48692
48890
  const hasError = error || !!errorContent;
48693
48891
  const triggerId = id ?? (hasEnhancedProps ? autoId : void 0);
@@ -48740,7 +48938,7 @@ var SelectTrigger = React10.forwardRef(
48740
48938
  }
48741
48939
  );
48742
48940
  SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
48743
- var SelectScrollUpButton = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
48941
+ var SelectScrollUpButton = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
48744
48942
  SelectPrimitive.ScrollUpButton,
48745
48943
  {
48746
48944
  ref,
@@ -48753,7 +48951,7 @@ var SelectScrollUpButton = React10.forwardRef(({ className, ...props }, ref) =>
48753
48951
  }
48754
48952
  ));
48755
48953
  SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
48756
- var SelectScrollDownButton = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
48954
+ var SelectScrollDownButton = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
48757
48955
  SelectPrimitive.ScrollDownButton,
48758
48956
  {
48759
48957
  ref,
@@ -48766,7 +48964,7 @@ var SelectScrollDownButton = React10.forwardRef(({ className, ...props }, ref) =
48766
48964
  }
48767
48965
  ));
48768
48966
  SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
48769
- var SelectContent = React10.forwardRef(({ className, children, position: position2 = "popper", ...props }, ref) => /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
48967
+ var SelectContent = React11.forwardRef(({ className, children, position: position2 = "popper", ...props }, ref) => /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
48770
48968
  SelectPrimitive.Content,
48771
48969
  {
48772
48970
  ref,
@@ -48794,7 +48992,7 @@ var SelectContent = React10.forwardRef(({ className, children, position: positio
48794
48992
  }
48795
48993
  ) }));
48796
48994
  SelectContent.displayName = SelectPrimitive.Content.displayName;
48797
- var SelectLabel = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
48995
+ var SelectLabel = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
48798
48996
  SelectPrimitive.Label,
48799
48997
  {
48800
48998
  ref,
@@ -48803,7 +49001,7 @@ var SelectLabel = React10.forwardRef(({ className, ...props }, ref) => /* @__PUR
48803
49001
  }
48804
49002
  ));
48805
49003
  SelectLabel.displayName = SelectPrimitive.Label.displayName;
48806
- var SelectItem = React10.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
49004
+ var SelectItem = React11.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
48807
49005
  SelectPrimitive.Item,
48808
49006
  {
48809
49007
  ref,
@@ -48819,7 +49017,7 @@ var SelectItem = React10.forwardRef(({ className, children, ...props }, ref) =>
48819
49017
  }
48820
49018
  ));
48821
49019
  SelectItem.displayName = SelectPrimitive.Item.displayName;
48822
- var SelectSeparator = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
49020
+ var SelectSeparator = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
48823
49021
  SelectPrimitive.Separator,
48824
49022
  {
48825
49023
  ref,
@@ -48836,13 +49034,13 @@ function Tabs({
48836
49034
  children,
48837
49035
  ...props
48838
49036
  }) {
48839
- const [activeValue, setActiveValue] = React10.useState(
49037
+ const [activeValue, setActiveValue] = React11.useState(
48840
49038
  defaultValue
48841
49039
  );
48842
- const triggersRef = React10.useRef(/* @__PURE__ */ new Map());
48843
- const initialSet = React10.useRef(false);
49040
+ const triggersRef = React11.useRef(/* @__PURE__ */ new Map());
49041
+ const initialSet = React11.useRef(false);
48844
49042
  const isControlled = value2 !== void 0;
48845
- React10.useEffect(() => {
49043
+ React11.useEffect(() => {
48846
49044
  if (!isControlled && activeValue === void 0 && triggersRef.current.size > 0 && !initialSet.current) {
48847
49045
  const firstTab = triggersRef.current.keys().next().value;
48848
49046
  if (firstTab !== void 0) {
@@ -48851,7 +49049,7 @@ function Tabs({
48851
49049
  }
48852
49050
  }
48853
49051
  }, [activeValue, isControlled]);
48854
- const registerTrigger = React10.useCallback(
49052
+ const registerTrigger = React11.useCallback(
48855
49053
  (val2, node) => {
48856
49054
  if (node) {
48857
49055
  triggersRef.current.set(val2, node);
@@ -48865,7 +49063,7 @@ function Tabs({
48865
49063
  },
48866
49064
  [activeValue, isControlled]
48867
49065
  );
48868
- const handleValueChange = React10.useCallback(
49066
+ const handleValueChange = React11.useCallback(
48869
49067
  (val2) => {
48870
49068
  if (!isControlled) setActiveValue(val2);
48871
49069
  else onValueChange?.(val2);
@@ -48914,9 +49112,9 @@ function TabsTrigger({
48914
49112
  ...props
48915
49113
  }) {
48916
49114
  const { activeValue, handleValueChange, registerTrigger } = useTabs();
48917
- const localRef = React10.useRef(null);
48918
- React10.useImperativeHandle(ref, () => localRef.current);
48919
- React10.useEffect(() => {
49115
+ const localRef = React11.useRef(null);
49116
+ React11.useImperativeHandle(ref, () => localRef.current);
49117
+ React11.useEffect(() => {
48920
49118
  registerTrigger(value2, localRef.current);
48921
49119
  return () => registerTrigger(value2, null);
48922
49120
  }, [value2, registerTrigger]);
@@ -48945,15 +49143,15 @@ function TabsContents({
48945
49143
  ...props
48946
49144
  }) {
48947
49145
  const { activeValue } = useTabs();
48948
- const childrenArray = React10.Children.toArray(children);
49146
+ const childrenArray = React11.Children.toArray(children);
48949
49147
  const activeIndex = childrenArray.findIndex(
48950
- (child) => React10.isValidElement(child) && typeof child.props === "object" && child.props !== null && "value" in child.props && child.props.value === activeValue
49148
+ (child) => React11.isValidElement(child) && typeof child.props === "object" && child.props !== null && "value" in child.props && child.props.value === activeValue
48951
49149
  );
48952
- const containerRef = React10.useRef(null);
48953
- const itemRefs = React10.useRef([]);
48954
- const [height2, setHeight] = React10.useState(0);
48955
- const roRef = React10.useRef(null);
48956
- const measure = React10.useCallback((index2) => {
49150
+ const containerRef = React11.useRef(null);
49151
+ const itemRefs = React11.useRef([]);
49152
+ const [height2, setHeight] = React11.useState(0);
49153
+ const roRef = React11.useRef(null);
49154
+ const measure = React11.useCallback((index2) => {
48957
49155
  const pane = itemRefs.current[index2];
48958
49156
  const container = containerRef.current;
48959
49157
  if (!pane || !container) return 0;
@@ -48967,7 +49165,7 @@ function TabsContents({
48967
49165
  total = Math.ceil(total * dpr) / dpr;
48968
49166
  return total;
48969
49167
  }, []);
48970
- React10.useEffect(() => {
49168
+ React11.useEffect(() => {
48971
49169
  if (roRef.current) {
48972
49170
  roRef.current.disconnect();
48973
49171
  roRef.current = null;
@@ -48988,7 +49186,7 @@ function TabsContents({
48988
49186
  roRef.current = null;
48989
49187
  };
48990
49188
  }, [activeIndex, childrenArray.length, measure]);
48991
- React10.useLayoutEffect(() => {
49189
+ React11.useLayoutEffect(() => {
48992
49190
  if (height2 === 0 && activeIndex >= 0) {
48993
49191
  const next = measure(activeIndex);
48994
49192
  if (next !== 0) setHeight(next);
@@ -49049,40 +49247,117 @@ function TabsContent({
49049
49247
  }
49050
49248
  );
49051
49249
  }
49052
- var TabsListVariantContext = React10.createContext(void 0);
49053
- function LineTabsListContent({ className, ...props }) {
49054
- return /* @__PURE__ */ jsx(
49055
- TabsHighlight,
49056
- {
49250
+ var TabsListVariantContext = React11.createContext(void 0);
49251
+ var TABS_LIST_VARIANTS = {
49252
+ default: {
49253
+ highlight: {
49254
+ mode: "parent",
49255
+ className: "absolute z-0 inset-0 rounded-md bg-primary/10"
49256
+ },
49257
+ list: "bg-transparent text-muted-foreground inline-flex h-auto w-fit items-center justify-center rounded-md p-1 border border-primary/30"
49258
+ },
49259
+ line: {
49260
+ highlight: {
49057
49261
  mode: "parent",
49058
49262
  variant: "line",
49059
49263
  lineHeight: 2,
49060
49264
  boundsOffset: { top: 2 },
49061
- className: "absolute z-0 bg-primary rounded-none",
49062
- children: /* @__PURE__ */ jsx(
49063
- TabsList,
49064
- {
49065
- className: cn(
49066
- "text-muted-foreground inline-flex h-auto w-fit items-center justify-center gap-1 border-b border-border",
49067
- className
49068
- ),
49069
- ...props
49070
- }
49071
- )
49072
- }
49265
+ className: "absolute z-0 bg-primary rounded-none"
49266
+ },
49267
+ list: "text-muted-foreground inline-flex h-auto w-fit items-center justify-center gap-1 border-b border-border"
49268
+ },
49269
+ rounded: {
49270
+ highlight: {
49271
+ mode: "parent",
49272
+ className: "absolute z-0 inset-0 rounded-full bg-primary/10"
49273
+ },
49274
+ list: "bg-transparent text-muted-foreground inline-flex h-auto w-fit items-center justify-center rounded-full p-1 border border-primary/30"
49275
+ }
49276
+ };
49277
+ var EDGE_SIZE2 = 40;
49278
+ function prefersReducedMotion2() {
49279
+ return typeof window !== "undefined" && window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;
49280
+ }
49281
+ function useTabsOverflow(scrollerRef, enabled) {
49282
+ const { activeValue } = useTabs();
49283
+ const revealActive = React11.useCallback(
49284
+ (behavior) => {
49285
+ const scroller = scrollerRef.current;
49286
+ if (!scroller) return;
49287
+ const trigger = scroller.querySelector(
49288
+ '[role="tab"][data-state="active"]'
49289
+ );
49290
+ if (!trigger) return;
49291
+ const scrollerRect = scroller.getBoundingClientRect();
49292
+ const triggerRect = trigger.getBoundingClientRect();
49293
+ const overStart = triggerRect.left - (scrollerRect.left + EDGE_SIZE2);
49294
+ const overEnd = triggerRect.right - (scrollerRect.right - EDGE_SIZE2);
49295
+ let delta = 0;
49296
+ if (overStart < 0) delta = overStart;
49297
+ else if (overEnd > 0) delta = Math.min(overEnd, overStart);
49298
+ if (Math.abs(delta) >= 1) scroller.scrollBy({ left: delta, behavior });
49299
+ },
49300
+ [scrollerRef]
49073
49301
  );
49302
+ const overflow = useScrollOverflow(scrollerRef, {
49303
+ enabled,
49304
+ // Not the highlight: it resizes while animating and would cancel smooth scrolls.
49305
+ getContent: (scroller) => scroller.querySelector('[data-slot="tabs-list"]'),
49306
+ onResize: () => revealActive("auto")
49307
+ });
49308
+ const mountedRef = React11.useRef(false);
49309
+ React11.useEffect(() => {
49310
+ if (!enabled || activeValue === void 0) return;
49311
+ const instant = !mountedRef.current || prefersReducedMotion2();
49312
+ mountedRef.current = true;
49313
+ revealActive(instant ? "auto" : "smooth");
49314
+ }, [enabled, activeValue, revealActive]);
49315
+ const scrollByPage = React11.useCallback(
49316
+ (direction) => {
49317
+ const scroller = scrollerRef.current;
49318
+ if (!scroller) return;
49319
+ scroller.scrollBy({
49320
+ left: direction * scroller.clientWidth * 0.8,
49321
+ behavior: prefersReducedMotion2() ? "auto" : "smooth"
49322
+ });
49323
+ },
49324
+ [scrollerRef]
49325
+ );
49326
+ return { overflow, scrollByPage };
49074
49327
  }
49075
- function DefaultTabsListContent({ className, ...props }) {
49076
- return /* @__PURE__ */ jsx(
49328
+ function fadeMask2(start, end) {
49329
+ if (!start && !end) return {};
49330
+ const from = start ? `transparent, #000 ${EDGE_SIZE2}px` : "#000";
49331
+ const to = end ? `#000 calc(100% - ${EDGE_SIZE2}px), transparent` : "#000";
49332
+ const image = `linear-gradient(to right, ${from}, ${to})`;
49333
+ return { maskImage: image, WebkitMaskImage: image };
49334
+ }
49335
+ var scrollButtonClass = "absolute top-1/2 z-10 -translate-y-1/2 inline-flex size-7 items-center justify-center rounded-full border border-border bg-background text-muted-foreground shadow-sm transition-colors hover:text-foreground [@media(pointer:coarse)]:hidden";
49336
+ function TabsListContent({
49337
+ variant,
49338
+ className,
49339
+ ...props
49340
+ }) {
49341
+ const config = TABS_LIST_VARIANTS[variant];
49342
+ const scrollerRef = React11.useRef(null);
49343
+ const scrollable = props["aria-orientation"] !== "vertical";
49344
+ const { overflow, scrollByPage } = useTabsOverflow(scrollerRef, scrollable);
49345
+ const list = /* @__PURE__ */ jsx(
49077
49346
  TabsHighlight,
49078
49347
  {
49079
- mode: "parent",
49080
- className: "absolute z-0 inset-0 rounded-md bg-primary/10",
49348
+ ref: scrollerRef,
49349
+ containerClassName: scrollable ? (
49350
+ // Vertical padding (offset by negative margin) keeps focus rings and the
49351
+ // line indicator from being clipped by the scroll container.
49352
+ "flex -my-1 py-1 overflow-x-auto overscroll-x-contain [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"
49353
+ ) : void 0,
49354
+ ...config.highlight,
49081
49355
  children: /* @__PURE__ */ jsx(
49082
49356
  TabsList,
49083
49357
  {
49084
49358
  className: cn(
49085
- "bg-transparent text-muted-foreground inline-flex h-auto w-fit items-center justify-center rounded-md p-1 border border-primary/30",
49359
+ config.list,
49360
+ scrollable && "shrink-0 min-w-fit",
49086
49361
  className
49087
49362
  ),
49088
49363
  ...props
@@ -49090,31 +49365,42 @@ function DefaultTabsListContent({ className, ...props }) {
49090
49365
  )
49091
49366
  }
49092
49367
  );
49093
- }
49094
- function RoundedTabsListContent({ className, ...props }) {
49095
- return /* @__PURE__ */ jsx(
49096
- TabsHighlight,
49368
+ if (!scrollable) return list;
49369
+ return /* @__PURE__ */ jsxs(
49370
+ "div",
49097
49371
  {
49098
- mode: "parent",
49099
- className: "absolute z-0 inset-0 rounded-full bg-primary/10",
49100
- children: /* @__PURE__ */ jsx(
49101
- TabsList,
49102
- {
49103
- className: cn(
49104
- "bg-transparent text-muted-foreground inline-flex h-auto w-fit items-center justify-center rounded-full p-1 border border-primary/30",
49105
- className
49106
- ),
49107
- ...props
49108
- }
49109
- )
49372
+ "data-slot": "tabs-list-scroller",
49373
+ "data-overflow-start": overflow.start || void 0,
49374
+ "data-overflow-end": overflow.end || void 0,
49375
+ className: "relative min-w-0 max-w-full",
49376
+ children: [
49377
+ /* @__PURE__ */ jsx("div", { style: fadeMask2(overflow.start, overflow.end), children: list }),
49378
+ overflow.start && /* @__PURE__ */ jsx(
49379
+ "button",
49380
+ {
49381
+ type: "button",
49382
+ tabIndex: -1,
49383
+ "aria-hidden": true,
49384
+ className: cn(scrollButtonClass, "left-0"),
49385
+ onClick: () => scrollByPage(-1),
49386
+ children: /* @__PURE__ */ jsx(ChevronLeft, { className: "size-4" })
49387
+ }
49388
+ ),
49389
+ overflow.end && /* @__PURE__ */ jsx(
49390
+ "button",
49391
+ {
49392
+ type: "button",
49393
+ tabIndex: -1,
49394
+ "aria-hidden": true,
49395
+ className: cn(scrollButtonClass, "right-0"),
49396
+ onClick: () => scrollByPage(1),
49397
+ children: /* @__PURE__ */ jsx(ChevronRight, { className: "size-4" })
49398
+ }
49399
+ )
49400
+ ]
49110
49401
  }
49111
49402
  );
49112
49403
  }
49113
- var TABS_LIST_VARIANTS = {
49114
- default: DefaultTabsListContent,
49115
- line: LineTabsListContent,
49116
- rounded: RoundedTabsListContent
49117
- };
49118
49404
  function Tabs2({ className, ...props }) {
49119
49405
  return /* @__PURE__ */ jsx(
49120
49406
  Tabs,
@@ -49124,13 +49410,12 @@ function Tabs2({ className, ...props }) {
49124
49410
  }
49125
49411
  );
49126
49412
  }
49127
- function TabsList2({ className, variant, ...props }) {
49128
- const Content2 = TABS_LIST_VARIANTS[variant ?? "default"];
49129
- return /* @__PURE__ */ jsx(TabsListVariantContext.Provider, { value: variant, children: /* @__PURE__ */ jsx(Content2, { className, ...props }) });
49413
+ function TabsList2({ variant, ...props }) {
49414
+ return /* @__PURE__ */ jsx(TabsListVariantContext.Provider, { value: variant, children: /* @__PURE__ */ jsx(TabsListContent, { variant: variant ?? "default", ...props }) });
49130
49415
  }
49131
49416
  var tabsTriggerBaseClass = "data-[state=active]:text-primary tracking-wide focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring inline-flex flex-1 items-center justify-center gap-1.5 rounded-md w-full px-2 text-sm font-medium whitespace-nowrap transition-colors duration-500 ease-in-out focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4";
49132
49417
  function TabsTrigger2({ className, ...props }) {
49133
- const listVariant = React10.useContext(TabsListVariantContext);
49418
+ const listVariant = React11.useContext(TabsListVariantContext);
49134
49419
  const isLine = listVariant === "line";
49135
49420
  return /* @__PURE__ */ jsx(TabsHighlightItem, { value: props.value, className: "flex-1", children: /* @__PURE__ */ jsx(
49136
49421
  TabsTrigger,
@@ -49163,7 +49448,7 @@ function extractTextLabel(children) {
49163
49448
  if (Array.isArray(children)) {
49164
49449
  return children.map(extractTextLabel).join("");
49165
49450
  }
49166
- if (React10.isValidElement(children) && children.props && typeof children.props === "object" && children.props !== null && "children" in children.props) {
49451
+ if (React11.isValidElement(children) && children.props && typeof children.props === "object" && children.props !== null && "children" in children.props) {
49167
49452
  return extractTextLabel(
49168
49453
  children.props.children
49169
49454
  );
@@ -49171,13 +49456,13 @@ function extractTextLabel(children) {
49171
49456
  return "";
49172
49457
  }
49173
49458
  function isTabElement(node) {
49174
- return React10.isValidElement(node) && node.type === ScrollableSectionsTab;
49459
+ return React11.isValidElement(node) && node.type === ScrollableSectionsTab;
49175
49460
  }
49176
49461
  function partitionChildren(children) {
49177
49462
  let tabsEl = null;
49178
49463
  const contentEls = [];
49179
- React10.Children.forEach(children, (child) => {
49180
- if (!React10.isValidElement(child)) return;
49464
+ React11.Children.forEach(children, (child) => {
49465
+ if (!React11.isValidElement(child)) return;
49181
49466
  if (child.type === ScrollableSectionsTabs) {
49182
49467
  tabsEl = child;
49183
49468
  } else if (child.type === ScrollableSectionsContent) {
@@ -49188,9 +49473,9 @@ function partitionChildren(children) {
49188
49473
  });
49189
49474
  return { tabsEl, contentEls };
49190
49475
  }
49191
- var ScrollableSectionsContext = React10.createContext(null);
49476
+ var ScrollableSectionsContext = React11.createContext(null);
49192
49477
  function useScrollableSections() {
49193
- const ctx = React10.useContext(ScrollableSectionsContext);
49478
+ const ctx = React11.useContext(ScrollableSectionsContext);
49194
49479
  if (!ctx) {
49195
49480
  throw new Error(
49196
49481
  "ScrollableSections subcomponents must be used within ScrollableSections."
@@ -49237,19 +49522,19 @@ function ScrollableSectionsRoot({
49237
49522
  ...rest
49238
49523
  }) {
49239
49524
  const { tabsEl, contentEls } = partitionChildren(children);
49240
- const [tabsItems, setTabsItems] = React10.useState([]);
49241
- const [sectionsVersion, bumpSections] = React10.useReducer(
49525
+ const [tabsItems, setTabsItems] = React11.useState([]);
49526
+ const [sectionsVersion, bumpSections] = React11.useReducer(
49242
49527
  (n) => n + 1,
49243
49528
  0
49244
49529
  );
49245
- const sectionsRef = React10.useRef(/* @__PURE__ */ new Map());
49246
- const containerRef = React10.useRef(null);
49247
- const mobileNavRef = React10.useRef(null);
49248
- const ignoreSpyUntil = React10.useRef(0);
49249
- const prefersReducedMotionRef = React10.useRef(false);
49250
- const didDefaultScrollRef = React10.useRef(false);
49251
- const [activeId, setActiveId] = React10.useState(() => defaultValue ?? "");
49252
- React10.useEffect(() => {
49530
+ const sectionsRef = React11.useRef(/* @__PURE__ */ new Map());
49531
+ const containerRef = React11.useRef(null);
49532
+ const mobileNavRef = React11.useRef(null);
49533
+ const ignoreSpyUntil = React11.useRef(0);
49534
+ const prefersReducedMotionRef = React11.useRef(false);
49535
+ const didDefaultScrollRef = React11.useRef(false);
49536
+ const [activeId, setActiveId] = React11.useState(() => defaultValue ?? "");
49537
+ React11.useEffect(() => {
49253
49538
  const mq = window.matchMedia("(prefers-reduced-motion: reduce)");
49254
49539
  prefersReducedMotionRef.current = mq.matches;
49255
49540
  const onChange = () => {
@@ -49259,7 +49544,7 @@ function ScrollableSectionsRoot({
49259
49544
  return () => mq.removeEventListener("change", onChange);
49260
49545
  }, []);
49261
49546
  const safeActiveId = activeId && tabsItems.some((t) => t.id === activeId) ? activeId : tabsItems[0]?.id ?? "";
49262
- const selectSection = React10.useCallback(
49547
+ const selectSection = React11.useCallback(
49263
49548
  (id) => {
49264
49549
  const el = sectionsRef.current.get(id);
49265
49550
  if (!el) return;
@@ -49273,7 +49558,7 @@ function ScrollableSectionsRoot({
49273
49558
  },
49274
49559
  []
49275
49560
  );
49276
- const registerSection = React10.useCallback(
49561
+ const registerSection = React11.useCallback(
49277
49562
  (id, el) => {
49278
49563
  if (el) sectionsRef.current.set(id, el);
49279
49564
  else sectionsRef.current.delete(id);
@@ -49281,7 +49566,7 @@ function ScrollableSectionsRoot({
49281
49566
  },
49282
49567
  []
49283
49568
  );
49284
- const setTabsItemsStable = React10.useCallback(
49569
+ const setTabsItemsStable = React11.useCallback(
49285
49570
  (items) => {
49286
49571
  setTabsItems(items);
49287
49572
  setActiveId((prev) => {
@@ -49295,7 +49580,7 @@ function ScrollableSectionsRoot({
49295
49580
  },
49296
49581
  [defaultValue]
49297
49582
  );
49298
- React10.useLayoutEffect(() => {
49583
+ React11.useLayoutEffect(() => {
49299
49584
  if (!defaultValue || didDefaultScrollRef.current) return;
49300
49585
  const el = sectionsRef.current.get(defaultValue);
49301
49586
  if (!el) return;
@@ -49305,7 +49590,7 @@ function ScrollableSectionsRoot({
49305
49590
  setActiveId(defaultValue);
49306
49591
  });
49307
49592
  }, [defaultValue, sectionsVersion]);
49308
- React10.useEffect(() => {
49593
+ React11.useEffect(() => {
49309
49594
  const orderedIds = tabsItems.map((t) => t.id);
49310
49595
  if (orderedIds.length === 0) return;
49311
49596
  const updateActive = () => {
@@ -49338,7 +49623,7 @@ function ScrollableSectionsRoot({
49338
49623
  window.removeEventListener("resize", updateActive);
49339
49624
  };
49340
49625
  }, [tabsItems, scrollRootRef, sectionsVersion]);
49341
- const contextValue = React10.useMemo(
49626
+ const contextValue = React11.useMemo(
49342
49627
  () => ({
49343
49628
  activeId: safeActiveId,
49344
49629
  selectSection,
@@ -49407,11 +49692,11 @@ function ScrollableSectionsTabs({
49407
49692
  ...rest
49408
49693
  }) {
49409
49694
  const { activeId, selectSection, setTabsItems } = useScrollableSections();
49410
- const tabNodes = React10.useMemo(
49411
- () => React10.Children.toArray(children).filter(isTabElement),
49695
+ const tabNodes = React11.useMemo(
49696
+ () => React11.Children.toArray(children).filter(isTabElement),
49412
49697
  [children]
49413
49698
  );
49414
- const items = React10.useMemo(
49699
+ const items = React11.useMemo(
49415
49700
  () => tabNodes.map((node) => {
49416
49701
  const { id, label, children: tabChildren } = node.props;
49417
49702
  const text2 = label?.trim() || extractTextLabel(tabChildren).trim() || id;
@@ -49419,7 +49704,7 @@ function ScrollableSectionsTabs({
49419
49704
  }),
49420
49705
  [tabNodes]
49421
49706
  );
49422
- React10.useLayoutEffect(() => {
49707
+ React11.useLayoutEffect(() => {
49423
49708
  setTabsItems(items);
49424
49709
  }, [items, setTabsItems]);
49425
49710
  if (tabNodes.length === 0) {
@@ -49486,7 +49771,7 @@ function ScrollableSectionsContent({
49486
49771
  ...rest
49487
49772
  }) {
49488
49773
  const { registerSection } = useScrollableSections();
49489
- const ref = React10.useCallback(
49774
+ const ref = React11.useCallback(
49490
49775
  (node) => {
49491
49776
  registerSection(id, node);
49492
49777
  },
@@ -49517,15 +49802,15 @@ var ScrollableSections = Object.assign(ScrollableSectionsRoot, {
49517
49802
  Content: ScrollableSectionsContent
49518
49803
  });
49519
49804
  var Form = FormProvider;
49520
- var FormFieldContext = React10.createContext(null);
49805
+ var FormFieldContext = React11.createContext(null);
49521
49806
  var FormField = ({
49522
49807
  ...props
49523
49808
  }) => {
49524
49809
  return /* @__PURE__ */ jsx(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsx(Controller, { ...props }) });
49525
49810
  };
49526
49811
  var useFormField = () => {
49527
- const fieldContext = React10.useContext(FormFieldContext);
49528
- const itemContext = React10.useContext(FormItemContext);
49812
+ const fieldContext = React11.useContext(FormFieldContext);
49813
+ const itemContext = React11.useContext(FormItemContext);
49529
49814
  const { getFieldState, formState } = useFormContext();
49530
49815
  if (!fieldContext) {
49531
49816
  throw new Error("useFormField should be used within <FormField>");
@@ -49544,13 +49829,13 @@ var useFormField = () => {
49544
49829
  ...fieldState
49545
49830
  };
49546
49831
  };
49547
- var FormItemContext = React10.createContext(null);
49548
- var FormItem = React10.forwardRef(({ className, ...props }, ref) => {
49549
- const id = React10.useId();
49832
+ var FormItemContext = React11.createContext(null);
49833
+ var FormItem = React11.forwardRef(({ className, ...props }, ref) => {
49834
+ const id = React11.useId();
49550
49835
  return /* @__PURE__ */ jsx(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsx("div", { ref, className: cn("space-y-2", className), ...props }) });
49551
49836
  });
49552
49837
  FormItem.displayName = "FormItem";
49553
- var FormLabel = React10.forwardRef(({ className, ...props }, ref) => {
49838
+ var FormLabel = React11.forwardRef(({ className, ...props }, ref) => {
49554
49839
  const { error, formItemId } = useFormField();
49555
49840
  return /* @__PURE__ */ jsx(
49556
49841
  Label,
@@ -49567,7 +49852,7 @@ var FormLabel = React10.forwardRef(({ className, ...props }, ref) => {
49567
49852
  );
49568
49853
  });
49569
49854
  FormLabel.displayName = "FormLabel";
49570
- var FormControl = React10.forwardRef(({ ...props }, ref) => {
49855
+ var FormControl = React11.forwardRef(({ ...props }, ref) => {
49571
49856
  const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
49572
49857
  return /* @__PURE__ */ jsx(
49573
49858
  Slot,
@@ -49581,7 +49866,7 @@ var FormControl = React10.forwardRef(({ ...props }, ref) => {
49581
49866
  );
49582
49867
  });
49583
49868
  FormControl.displayName = "FormControl";
49584
- var FormDescription = React10.forwardRef(({ className, ...props }, ref) => {
49869
+ var FormDescription = React11.forwardRef(({ className, ...props }, ref) => {
49585
49870
  const { formDescriptionId } = useFormField();
49586
49871
  return /* @__PURE__ */ jsx(
49587
49872
  "p",
@@ -49594,7 +49879,7 @@ var FormDescription = React10.forwardRef(({ className, ...props }, ref) => {
49594
49879
  );
49595
49880
  });
49596
49881
  FormDescription.displayName = "FormDescription";
49597
- var FormMessage = React10.forwardRef(({ className, children, ...props }, ref) => {
49882
+ var FormMessage = React11.forwardRef(({ className, children, ...props }, ref) => {
49598
49883
  const { error, formMessageId } = useFormField();
49599
49884
  const body = error ? String(error?.message ?? "") : children;
49600
49885
  if (!body) {
@@ -49844,10 +50129,10 @@ var typographyDefaultElement = {
49844
50129
  };
49845
50130
 
49846
50131
  // src/components/typography/typography.tsx
49847
- var Typography = React10.forwardRef(
50132
+ var Typography = React11.forwardRef(
49848
50133
  function Typography2({ variant = "body1", as, className, children, ...rest }, ref) {
49849
50134
  const Component = as ?? typographyDefaultElement[variant];
49850
- return React10.createElement(
50135
+ return React11.createElement(
49851
50136
  Component,
49852
50137
  {
49853
50138
  ref,
@@ -49920,7 +50205,7 @@ function mergeFiles(existing, incoming, multiple) {
49920
50205
  }
49921
50206
  return next;
49922
50207
  }
49923
- var FileUpload = React10.forwardRef(
50208
+ var FileUpload = React11.forwardRef(
49924
50209
  function FileUpload2({
49925
50210
  className,
49926
50211
  title = "Drag & drop files here",
@@ -49935,24 +50220,24 @@ var FileUpload = React10.forwardRef(
49935
50220
  id,
49936
50221
  ...inputPropsRest
49937
50222
  }, ref) {
49938
- const autoId = React10.useId();
50223
+ const autoId = React11.useId();
49939
50224
  const inputId = id ?? autoId;
49940
50225
  const descriptionId = `${inputId}-description`;
49941
50226
  const { ref: refFromRegister, ...inputAttrs } = inputPropsRest;
49942
50227
  const isControlled = filesProp !== void 0;
49943
- const innerRef = React10.useRef(null);
49944
- const filesRef = React10.useRef([]);
49945
- const dragDepthRef = React10.useRef(0);
49946
- const [internalFiles, setInternalFiles] = React10.useState([]);
49947
- const [isDragging, setIsDragging] = React10.useState(false);
50228
+ const innerRef = React11.useRef(null);
50229
+ const filesRef = React11.useRef([]);
50230
+ const dragDepthRef = React11.useRef(0);
50231
+ const [internalFiles, setInternalFiles] = React11.useState([]);
50232
+ const [isDragging, setIsDragging] = React11.useState(false);
49948
50233
  const listFiles = isControlled ? filesProp ?? [] : internalFiles;
49949
50234
  filesRef.current = listFiles;
49950
- React10.useLayoutEffect(() => {
50235
+ React11.useLayoutEffect(() => {
49951
50236
  const input = innerRef.current;
49952
50237
  if (!input) return;
49953
50238
  syncInputFiles(input, listFiles);
49954
50239
  }, [listFiles]);
49955
- const setRefs = React10.useCallback(
50240
+ const setRefs = React11.useCallback(
49956
50241
  (node) => {
49957
50242
  innerRef.current = node;
49958
50243
  assignRef(ref, node);
@@ -49960,7 +50245,7 @@ var FileUpload = React10.forwardRef(
49960
50245
  },
49961
50246
  [ref, refFromRegister]
49962
50247
  );
49963
- const applyFiles = React10.useCallback(
50248
+ const applyFiles = React11.useCallback(
49964
50249
  (incoming) => {
49965
50250
  const input = innerRef.current;
49966
50251
  if (!input) return;
@@ -49979,7 +50264,7 @@ var FileUpload = React10.forwardRef(
49979
50264
  },
49980
50265
  [multiple, onChange, onFilesChange, isControlled]
49981
50266
  );
49982
- const handleInputChange = React10.useCallback(
50267
+ const handleInputChange = React11.useCallback(
49983
50268
  (event) => {
49984
50269
  const input = event.target;
49985
50270
  const picked = filesFromList(input.files);
@@ -49999,7 +50284,7 @@ var FileUpload = React10.forwardRef(
49999
50284
  },
50000
50285
  [multiple, onChange, onFilesChange, isControlled]
50001
50286
  );
50002
- const removeAt = React10.useCallback(
50287
+ const removeAt = React11.useCallback(
50003
50288
  (index2) => {
50004
50289
  const input = innerRef.current;
50005
50290
  if (!input) return;
@@ -50017,7 +50302,7 @@ var FileUpload = React10.forwardRef(
50017
50302
  },
50018
50303
  [onChange, onFilesChange, isControlled]
50019
50304
  );
50020
- const onDragEnter = React10.useCallback(
50305
+ const onDragEnter = React11.useCallback(
50021
50306
  (e) => {
50022
50307
  e.preventDefault();
50023
50308
  e.stopPropagation();
@@ -50027,7 +50312,7 @@ var FileUpload = React10.forwardRef(
50027
50312
  },
50028
50313
  [disabled]
50029
50314
  );
50030
- const onDragLeave = React10.useCallback(
50315
+ const onDragLeave = React11.useCallback(
50031
50316
  (e) => {
50032
50317
  e.preventDefault();
50033
50318
  e.stopPropagation();
@@ -50040,11 +50325,11 @@ var FileUpload = React10.forwardRef(
50040
50325
  },
50041
50326
  [disabled]
50042
50327
  );
50043
- const onDragOver = React10.useCallback((e) => {
50328
+ const onDragOver = React11.useCallback((e) => {
50044
50329
  e.preventDefault();
50045
50330
  e.stopPropagation();
50046
50331
  }, []);
50047
- const onDrop = React10.useCallback(
50332
+ const onDrop = React11.useCallback(
50048
50333
  (e) => {
50049
50334
  e.preventDefault();
50050
50335
  e.stopPropagation();
@@ -50057,11 +50342,11 @@ var FileUpload = React10.forwardRef(
50057
50342
  },
50058
50343
  [applyFiles, disabled]
50059
50344
  );
50060
- const openFileDialog = React10.useCallback(() => {
50345
+ const openFileDialog = React11.useCallback(() => {
50061
50346
  if (disabled) return;
50062
50347
  innerRef.current?.click();
50063
50348
  }, [disabled]);
50064
- const onDropZoneKeyDown = React10.useCallback(
50349
+ const onDropZoneKeyDown = React11.useCallback(
50065
50350
  (e) => {
50066
50351
  if (disabled) return;
50067
50352
  if (e.key === "Enter" || e.key === " ") {
@@ -50272,7 +50557,7 @@ function resolveBrowseTokens(color) {
50272
50557
  style: { "--fi-accent": color }
50273
50558
  };
50274
50559
  }
50275
- var FileInput = React10.forwardRef(
50560
+ var FileInput = React11.forwardRef(
50276
50561
  function FileInput2({
50277
50562
  label,
50278
50563
  required,
@@ -50302,25 +50587,25 @@ var FileInput = React10.forwardRef(
50302
50587
  andMoreLabel = (n) => `and ${n} more`,
50303
50588
  ...restProps
50304
50589
  }, ref) {
50305
- const autoId = React10.useId();
50590
+ const autoId = React11.useId();
50306
50591
  const inputId = id ?? autoId;
50307
50592
  const effectiveSize = size ?? "default";
50308
50593
  const hasError = error || !!errorContent;
50309
50594
  const browseTokens = resolveBrowseTokens(color);
50310
50595
  const { ref: refFromRegister, ...inputAttrs } = restProps;
50311
50596
  const isControlled = filesProp !== void 0;
50312
- const innerRef = React10.useRef(null);
50313
- const filesRef = React10.useRef([]);
50314
- const [internalFiles, setInternalFiles] = React10.useState([]);
50597
+ const innerRef = React11.useRef(null);
50598
+ const filesRef = React11.useRef([]);
50599
+ const [internalFiles, setInternalFiles] = React11.useState([]);
50315
50600
  const listFiles = isControlled ? filesProp ?? [] : internalFiles;
50316
50601
  filesRef.current = listFiles;
50317
50602
  const hasFiles = listFiles.length > 0;
50318
- React10.useLayoutEffect(() => {
50603
+ React11.useLayoutEffect(() => {
50319
50604
  const input = innerRef.current;
50320
50605
  if (!input) return;
50321
50606
  syncInputFiles2(input, listFiles);
50322
50607
  }, [listFiles]);
50323
- const setRefs = React10.useCallback(
50608
+ const setRefs = React11.useCallback(
50324
50609
  (node) => {
50325
50610
  innerRef.current = node;
50326
50611
  assignRef2(ref, node);
@@ -50328,7 +50613,7 @@ var FileInput = React10.forwardRef(
50328
50613
  },
50329
50614
  [ref, refFromRegister]
50330
50615
  );
50331
- const fireSyntheticChange = React10.useCallback(
50616
+ const fireSyntheticChange = React11.useCallback(
50332
50617
  (input) => {
50333
50618
  const synthetic = {
50334
50619
  target: input,
@@ -50338,7 +50623,7 @@ var FileInput = React10.forwardRef(
50338
50623
  },
50339
50624
  [onChange]
50340
50625
  );
50341
- const handleInputChange = React10.useCallback(
50626
+ const handleInputChange = React11.useCallback(
50342
50627
  (event) => {
50343
50628
  const input = event.target;
50344
50629
  const picked = filesFromList2(input.files);
@@ -50358,7 +50643,7 @@ var FileInput = React10.forwardRef(
50358
50643
  },
50359
50644
  [multiple, onChange, onFilesChange, isControlled]
50360
50645
  );
50361
- const clearFiles = React10.useCallback(() => {
50646
+ const clearFiles = React11.useCallback(() => {
50362
50647
  const input = innerRef.current;
50363
50648
  if (!input) return;
50364
50649
  syncInputFiles2(input, []);
@@ -50368,11 +50653,11 @@ var FileInput = React10.forwardRef(
50368
50653
  onFilesChange?.([]);
50369
50654
  fireSyntheticChange(input);
50370
50655
  }, [isControlled, onFilesChange, fireSyntheticChange]);
50371
- const openFileDialog = React10.useCallback(() => {
50656
+ const openFileDialog = React11.useCallback(() => {
50372
50657
  if (disabled || readOnly) return;
50373
50658
  innerRef.current?.click();
50374
50659
  }, [disabled, readOnly]);
50375
- const onDisplayKeyDown = React10.useCallback(
50660
+ const onDisplayKeyDown = React11.useCallback(
50376
50661
  (e) => {
50377
50662
  if (disabled || readOnly) return;
50378
50663
  if (e.key === "Enter" || e.key === " ") {
@@ -50563,25 +50848,25 @@ function composeRefs(...refs) {
50563
50848
  };
50564
50849
  }
50565
50850
  function useComposedRefs(...refs) {
50566
- return React10.useCallback(composeRefs(...refs), refs);
50851
+ return React11.useCallback(composeRefs(...refs), refs);
50567
50852
  }
50568
50853
  function createContextScope(scopeName, createContextScopeDeps = []) {
50569
50854
  let defaultContexts = [];
50570
50855
  function createContext32(rootComponentName, defaultContext) {
50571
- const BaseContext = React10.createContext(defaultContext);
50856
+ const BaseContext = React11.createContext(defaultContext);
50572
50857
  BaseContext.displayName = rootComponentName + "Context";
50573
50858
  const index2 = defaultContexts.length;
50574
50859
  defaultContexts = [...defaultContexts, defaultContext];
50575
50860
  const Provider = (props) => {
50576
50861
  const { scope, children, ...context } = props;
50577
50862
  const Context = scope?.[scopeName]?.[index2] || BaseContext;
50578
- const value2 = React10.useMemo(() => context, Object.values(context));
50863
+ const value2 = React11.useMemo(() => context, Object.values(context));
50579
50864
  return /* @__PURE__ */ jsx(Context.Provider, { value: value2, children });
50580
50865
  };
50581
50866
  Provider.displayName = rootComponentName + "Provider";
50582
50867
  function useContext22(consumerName, scope) {
50583
50868
  const Context = scope?.[scopeName]?.[index2] || BaseContext;
50584
- const context = React10.useContext(Context);
50869
+ const context = React11.useContext(Context);
50585
50870
  if (context) return context;
50586
50871
  if (defaultContext !== void 0) return defaultContext;
50587
50872
  throw new Error(`\`${consumerName}\` must be used within \`${rootComponentName}\``);
@@ -50590,11 +50875,11 @@ function createContextScope(scopeName, createContextScopeDeps = []) {
50590
50875
  }
50591
50876
  const createScope = () => {
50592
50877
  const scopeContexts = defaultContexts.map((defaultContext) => {
50593
- return React10.createContext(defaultContext);
50878
+ return React11.createContext(defaultContext);
50594
50879
  });
50595
50880
  return function useScope(scope) {
50596
50881
  const contexts = scope?.[scopeName] || scopeContexts;
50597
- return React10.useMemo(
50882
+ return React11.useMemo(
50598
50883
  () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),
50599
50884
  [scope, contexts]
50600
50885
  );
@@ -50617,7 +50902,7 @@ function composeContextScopes(...scopes) {
50617
50902
  const currentScope = scopeProps[`__scope${scopeName}`];
50618
50903
  return { ...nextScopes2, ...currentScope };
50619
50904
  }, {});
50620
- return React10.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);
50905
+ return React11.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);
50621
50906
  };
50622
50907
  };
50623
50908
  createScope.scopeName = baseScope.scopeName;
@@ -50631,9 +50916,9 @@ function composeEventHandlers(originalEventHandler, ourEventHandler, { checkForD
50631
50916
  }
50632
50917
  };
50633
50918
  }
50634
- var useLayoutEffect22 = globalThis?.document ? React10.useLayoutEffect : () => {
50919
+ var useLayoutEffect22 = globalThis?.document ? React11.useLayoutEffect : () => {
50635
50920
  };
50636
- var useInsertionEffect = React10[" useInsertionEffect ".trim().toString()] || useLayoutEffect22;
50921
+ var useInsertionEffect = React11[" useInsertionEffect ".trim().toString()] || useLayoutEffect22;
50637
50922
  function useControllableState({
50638
50923
  prop,
50639
50924
  defaultProp,
@@ -50648,8 +50933,8 @@ function useControllableState({
50648
50933
  const isControlled = prop !== void 0;
50649
50934
  const value2 = isControlled ? prop : uncontrolledProp;
50650
50935
  {
50651
- const isControlledRef = React10.useRef(prop !== void 0);
50652
- React10.useEffect(() => {
50936
+ const isControlledRef = React11.useRef(prop !== void 0);
50937
+ React11.useEffect(() => {
50653
50938
  const wasControlled = isControlledRef.current;
50654
50939
  if (wasControlled !== isControlled) {
50655
50940
  const from = wasControlled ? "controlled" : "uncontrolled";
@@ -50661,7 +50946,7 @@ function useControllableState({
50661
50946
  isControlledRef.current = isControlled;
50662
50947
  }, [isControlled, caller]);
50663
50948
  }
50664
- const setValue = React10.useCallback(
50949
+ const setValue = React11.useCallback(
50665
50950
  (nextValue) => {
50666
50951
  if (isControlled) {
50667
50952
  const value22 = isFunction(nextValue) ? nextValue(prop) : nextValue;
@@ -50680,13 +50965,13 @@ function useUncontrolledState({
50680
50965
  defaultProp,
50681
50966
  onChange
50682
50967
  }) {
50683
- const [value2, setValue] = React10.useState(defaultProp);
50684
- const prevValueRef = React10.useRef(value2);
50685
- const onChangeRef = React10.useRef(onChange);
50968
+ const [value2, setValue] = React11.useState(defaultProp);
50969
+ const prevValueRef = React11.useRef(value2);
50970
+ const onChangeRef = React11.useRef(onChange);
50686
50971
  useInsertionEffect(() => {
50687
50972
  onChangeRef.current = onChange;
50688
50973
  }, [onChange]);
50689
- React10.useEffect(() => {
50974
+ React11.useEffect(() => {
50690
50975
  if (prevValueRef.current !== value2) {
50691
50976
  onChangeRef.current?.(value2);
50692
50977
  prevValueRef.current = value2;
@@ -50698,8 +50983,8 @@ function isFunction(value2) {
50698
50983
  return typeof value2 === "function";
50699
50984
  }
50700
50985
  function usePrevious(value2) {
50701
- const ref = React10.useRef({ value: value2, previous: value2 });
50702
- return React10.useMemo(() => {
50986
+ const ref = React11.useRef({ value: value2, previous: value2 });
50987
+ return React11.useMemo(() => {
50703
50988
  if (ref.current.value !== value2) {
50704
50989
  ref.current.previous = ref.current.value;
50705
50990
  ref.current.value = value2;
@@ -50708,7 +50993,7 @@ function usePrevious(value2) {
50708
50993
  }, [value2]);
50709
50994
  }
50710
50995
  function useSize(element) {
50711
- const [size, setSize] = React10.useState(void 0);
50996
+ const [size, setSize] = React11.useState(void 0);
50712
50997
  useLayoutEffect22(() => {
50713
50998
  if (element) {
50714
50999
  setSize({ width: element.offsetWidth, height: element.offsetHeight });
@@ -50742,7 +51027,7 @@ function useSize(element) {
50742
51027
  return size;
50743
51028
  }
50744
51029
  function useStateMachine(initialState, machine) {
50745
- return React10.useReducer((state, event) => {
51030
+ return React11.useReducer((state, event) => {
50746
51031
  const nextState = machine[state][event];
50747
51032
  return nextState ?? state;
50748
51033
  }, initialState);
@@ -50750,17 +51035,17 @@ function useStateMachine(initialState, machine) {
50750
51035
  var Presence = (props) => {
50751
51036
  const { present, children } = props;
50752
51037
  const presence = usePresence(present);
50753
- const child = typeof children === "function" ? children({ present: presence.isPresent }) : React10.Children.only(children);
51038
+ const child = typeof children === "function" ? children({ present: presence.isPresent }) : React11.Children.only(children);
50754
51039
  const ref = useStableComposedRefs(presence.ref, getElementRef(child));
50755
51040
  const forceMount = typeof children === "function";
50756
- return forceMount || presence.isPresent ? React10.cloneElement(child, { ref }) : null;
51041
+ return forceMount || presence.isPresent ? React11.cloneElement(child, { ref }) : null;
50757
51042
  };
50758
51043
  Presence.displayName = "Presence";
50759
51044
  function usePresence(present) {
50760
- const [node, setNode] = React10.useState();
50761
- const stylesRef = React10.useRef(null);
50762
- const prevPresentRef = React10.useRef(present);
50763
- const prevAnimationNameRef = React10.useRef("none");
51045
+ const [node, setNode] = React11.useState();
51046
+ const stylesRef = React11.useRef(null);
51047
+ const prevPresentRef = React11.useRef(present);
51048
+ const prevAnimationNameRef = React11.useRef("none");
50764
51049
  const initialState = present ? "mounted" : "unmounted";
50765
51050
  const [state, send] = useStateMachine(initialState, {
50766
51051
  mounted: {
@@ -50775,7 +51060,7 @@ function usePresence(present) {
50775
51060
  MOUNT: "mounted"
50776
51061
  }
50777
51062
  });
50778
- React10.useEffect(() => {
51063
+ React11.useEffect(() => {
50779
51064
  const currentAnimationName = getAnimationName(stylesRef.current);
50780
51065
  prevAnimationNameRef.current = state === "mounted" ? currentAnimationName : "none";
50781
51066
  }, [state]);
@@ -50841,7 +51126,7 @@ function usePresence(present) {
50841
51126
  }, [node, send]);
50842
51127
  return {
50843
51128
  isPresent: ["mounted", "unmountSuspended"].includes(state),
50844
- ref: React10.useCallback((node2) => {
51129
+ ref: React11.useCallback((node2) => {
50845
51130
  stylesRef.current = node2 ? getComputedStyle(node2) : null;
50846
51131
  setNode(node2);
50847
51132
  }, [])
@@ -50855,9 +51140,9 @@ function setRef2(ref, value2) {
50855
51140
  }
50856
51141
  }
50857
51142
  function useStableComposedRefs(...refs) {
50858
- const refsRef = React10.useRef(refs);
51143
+ const refsRef = React11.useRef(refs);
50859
51144
  refsRef.current = refs;
50860
- return React10.useCallback((node) => {
51145
+ return React11.useCallback((node) => {
50861
51146
  const currentRefs = refsRef.current;
50862
51147
  let hasCleanup = false;
50863
51148
  const cleanups = currentRefs.map((ref) => {
@@ -50918,7 +51203,7 @@ var NODES = [
50918
51203
  ];
50919
51204
  var Primitive = NODES.reduce((primitive, node) => {
50920
51205
  const Slot3 = createSlot(`Primitive.${node}`);
50921
- const Node2 = React10.forwardRef((props, forwardedRef) => {
51206
+ const Node2 = React11.forwardRef((props, forwardedRef) => {
50922
51207
  const { asChild, ...primitiveProps } = props;
50923
51208
  const Comp = asChild ? Slot3 : node;
50924
51209
  if (typeof window !== "undefined") {
@@ -50953,9 +51238,9 @@ function CheckboxProvider(props) {
50953
51238
  onChange: onCheckedChange,
50954
51239
  caller: CHECKBOX_NAME
50955
51240
  });
50956
- const [control, setControl] = React10.useState(null);
50957
- const [bubbleInput, setBubbleInput] = React10.useState(null);
50958
- const hasConsumerStoppedPropagationRef = React10.useRef(false);
51241
+ const [control, setControl] = React11.useState(null);
51242
+ const [bubbleInput, setBubbleInput] = React11.useState(null);
51243
+ const hasConsumerStoppedPropagationRef = React11.useRef(false);
50959
51244
  const isFormControl = control ? !!form || !!control.closest("form") : (
50960
51245
  // We set this to true by default so that events bubble to forms without JS (SSR)
50961
51246
  true
@@ -50986,7 +51271,7 @@ function CheckboxProvider(props) {
50986
51271
  );
50987
51272
  }
50988
51273
  var TRIGGER_NAME = "CheckboxTrigger";
50989
- var CheckboxTrigger = React10.forwardRef(
51274
+ var CheckboxTrigger = React11.forwardRef(
50990
51275
  ({ __scopeCheckbox, onKeyDown, onClick, ...checkboxProps }, forwardedRef) => {
50991
51276
  const {
50992
51277
  control,
@@ -51001,8 +51286,8 @@ var CheckboxTrigger = React10.forwardRef(
51001
51286
  bubbleInput
51002
51287
  } = useCheckboxContext(TRIGGER_NAME, __scopeCheckbox);
51003
51288
  const composedRefs = useComposedRefs(forwardedRef, setControl);
51004
- const initialCheckedStateRef = React10.useRef(checked);
51005
- React10.useEffect(() => {
51289
+ const initialCheckedStateRef = React11.useRef(checked);
51290
+ React11.useEffect(() => {
51006
51291
  const form = control?.form;
51007
51292
  if (form) {
51008
51293
  const reset = () => setChecked(initialCheckedStateRef.current);
@@ -51038,7 +51323,7 @@ var CheckboxTrigger = React10.forwardRef(
51038
51323
  }
51039
51324
  );
51040
51325
  CheckboxTrigger.displayName = TRIGGER_NAME;
51041
- var Checkbox = React10.forwardRef(
51326
+ var Checkbox = React11.forwardRef(
51042
51327
  (props, forwardedRef) => {
51043
51328
  const {
51044
51329
  __scopeCheckbox,
@@ -51086,7 +51371,7 @@ var Checkbox = React10.forwardRef(
51086
51371
  );
51087
51372
  Checkbox.displayName = CHECKBOX_NAME;
51088
51373
  var INDICATOR_NAME = "CheckboxIndicator";
51089
- var CheckboxIndicator = React10.forwardRef(
51374
+ var CheckboxIndicator = React11.forwardRef(
51090
51375
  (props, forwardedRef) => {
51091
51376
  const { __scopeCheckbox, forceMount, ...indicatorProps } = props;
51092
51377
  const context = useCheckboxContext(INDICATOR_NAME, __scopeCheckbox);
@@ -51110,7 +51395,7 @@ var CheckboxIndicator = React10.forwardRef(
51110
51395
  );
51111
51396
  CheckboxIndicator.displayName = INDICATOR_NAME;
51112
51397
  var BUBBLE_INPUT_NAME = "CheckboxBubbleInput";
51113
- var CheckboxBubbleInput = React10.forwardRef(
51398
+ var CheckboxBubbleInput = React11.forwardRef(
51114
51399
  ({ __scopeCheckbox, ...props }, forwardedRef) => {
51115
51400
  const {
51116
51401
  control,
@@ -51128,7 +51413,7 @@ var CheckboxBubbleInput = React10.forwardRef(
51128
51413
  const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);
51129
51414
  const prevChecked = usePrevious(checked);
51130
51415
  const controlSize = useSize(control);
51131
- React10.useEffect(() => {
51416
+ React11.useEffect(() => {
51132
51417
  const input = bubbleInput;
51133
51418
  if (!input) return;
51134
51419
  const inputProto = window.HTMLInputElement.prototype;
@@ -51145,7 +51430,7 @@ var CheckboxBubbleInput = React10.forwardRef(
51145
51430
  input.dispatchEvent(event);
51146
51431
  }
51147
51432
  }, [bubbleInput, prevChecked, checked, hasConsumerStoppedPropagationRef]);
51148
- const defaultCheckedRef = React10.useRef(isIndeterminate(checked) ? false : checked);
51433
+ const defaultCheckedRef = React11.useRef(isIndeterminate(checked) ? false : checked);
51149
51434
  return /* @__PURE__ */ jsx(
51150
51435
  Primitive.input,
51151
51436
  {
@@ -51191,13 +51476,13 @@ function getAnimateState(checked) {
51191
51476
  return checked ? "checked" : "unchecked";
51192
51477
  }
51193
51478
  function Checkbox2({ className, onCheckedChange, ...props }) {
51194
- const [checkedState, setCheckedState] = React10.useState(
51479
+ const [checkedState, setCheckedState] = React11.useState(
51195
51480
  props?.checked ?? props?.defaultChecked ?? false
51196
51481
  );
51197
- React10.useEffect(() => {
51482
+ React11.useEffect(() => {
51198
51483
  if (props?.checked !== void 0) setCheckedState(props.checked);
51199
51484
  }, [props?.checked]);
51200
- const handleCheckedChange = React10.useCallback(
51485
+ const handleCheckedChange = React11.useCallback(
51201
51486
  (checked) => {
51202
51487
  setCheckedState(checked);
51203
51488
  onCheckedChange?.(checked);
@@ -51291,7 +51576,7 @@ function Checkbox2({ className, onCheckedChange, ...props }) {
51291
51576
  }
51292
51577
  var [SwitchProvider, useSwitch] = getStrictContext("SwitchContext");
51293
51578
  function Switch(props) {
51294
- const [isPressed, setIsPressed] = React10.useState(false);
51579
+ const [isPressed, setIsPressed] = React11.useState(false);
51295
51580
  const {
51296
51581
  checked,
51297
51582
  defaultChecked,
@@ -51357,7 +51642,7 @@ function SwitchIcon({
51357
51642
  ...props
51358
51643
  }) {
51359
51644
  const { isChecked } = useSwitch();
51360
- const isAnimated = React10.useMemo(() => {
51645
+ const isAnimated = React11.useMemo(() => {
51361
51646
  if (position2 === "right") return !isChecked;
51362
51647
  if (position2 === "left") return isChecked;
51363
51648
  if (position2 === "thumb") return true;
@@ -51488,10 +51773,10 @@ function ToggleGroupHighlightItem({
51488
51773
  }
51489
51774
  );
51490
51775
  }
51491
- if (type === "multiple" && React10.isValidElement(children)) {
51776
+ if (type === "multiple" && React11.isValidElement(children)) {
51492
51777
  const isActive = props.value && value2 && value2.includes(props.value);
51493
51778
  const element = children;
51494
- return React10.cloneElement(
51779
+ return React11.cloneElement(
51495
51780
  children,
51496
51781
  {
51497
51782
  style: {
@@ -51630,7 +51915,7 @@ function ToggleGroup2({
51630
51915
  style,
51631
51916
  ...props
51632
51917
  }) {
51633
- const colorTokens = React10.useMemo(
51918
+ const colorTokens = React11.useMemo(
51634
51919
  () => resolveToggleGroupColorTokens(color),
51635
51920
  [color]
51636
51921
  );
@@ -51743,8 +52028,8 @@ function Radio({
51743
52028
  ...props
51744
52029
  }) {
51745
52030
  const { value: value2 } = useRadioGroup();
51746
- const [isChecked, setIsChecked] = React10.useState(value2 === valueProps);
51747
- React10.useEffect(() => {
52031
+ const [isChecked, setIsChecked] = React11.useState(value2 === valueProps);
52032
+ React11.useEffect(() => {
51748
52033
  setIsChecked(value2 === valueProps);
51749
52034
  }, [value2, valueProps]);
51750
52035
  return /* @__PURE__ */ jsx(RadioProvider, { value: { isChecked, setIsChecked }, children: /* @__PURE__ */ jsx(
@@ -52782,7 +53067,7 @@ function VerticalStepper({
52782
53067
  step.id
52783
53068
  )) }) });
52784
53069
  }
52785
- var Spinner = React10.forwardRef(function Spinner2({
53070
+ var Spinner = React11.forwardRef(function Spinner2({
52786
53071
  color,
52787
53072
  size,
52788
53073
  className,
@@ -52891,9 +53176,9 @@ function resolveSurface(color) {
52891
53176
  }
52892
53177
  function renderSizedIcon(icon, iconClassName) {
52893
53178
  if (icon == null) return null;
52894
- if (React10.isValidElement(icon)) {
53179
+ if (React11.isValidElement(icon)) {
52895
53180
  const el = icon;
52896
- return React10.cloneElement(el, {
53181
+ return React11.cloneElement(el, {
52897
53182
  className: cn(el.props.className, "shrink-0", iconClassName)
52898
53183
  });
52899
53184
  }
@@ -52927,7 +53212,7 @@ function getTrend(value2, previousValue) {
52927
53212
  })}%`;
52928
53213
  return { direction, label };
52929
53214
  }
52930
- var StatCard = React10.forwardRef(
53215
+ var StatCard = React11.forwardRef(
52931
53216
  ({
52932
53217
  color,
52933
53218
  size = "default",
@@ -53058,15 +53343,15 @@ StatCard.displayName = "StatCard";
53058
53343
  // src/components/chart/chart.types.ts
53059
53344
  var THEMES = { light: "", dark: ".dark" };
53060
53345
  var INITIAL_DIMENSION = { width: 320, height: 200 };
53061
- var ChartContext = React10.createContext(null);
53346
+ var ChartContext = React11.createContext(null);
53062
53347
  function useChart() {
53063
- const context = React10.useContext(ChartContext);
53348
+ const context = React11.useContext(ChartContext);
53064
53349
  if (!context) {
53065
53350
  throw new Error("useChart must be used within a <ChartContainer />");
53066
53351
  }
53067
53352
  return context;
53068
53353
  }
53069
- var ChartContainer = React10.forwardRef(function ChartContainer2({
53354
+ var ChartContainer = React11.forwardRef(function ChartContainer2({
53070
53355
  id,
53071
53356
  className,
53072
53357
  children,
@@ -53074,7 +53359,7 @@ var ChartContainer = React10.forwardRef(function ChartContainer2({
53074
53359
  initialDimension = INITIAL_DIMENSION,
53075
53360
  ...props
53076
53361
  }, ref) {
53077
- const uniqueId = React10.useId();
53362
+ const uniqueId = React11.useId();
53078
53363
  const chartId = `chart-${id ?? uniqueId.replace(/:/g, "")}`;
53079
53364
  return /* @__PURE__ */ jsx(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs(
53080
53365
  "div",
@@ -53143,7 +53428,7 @@ function ChartTooltipContent({
53143
53428
  labelKey
53144
53429
  }) {
53145
53430
  const { config } = useChart();
53146
- const tooltipLabel = React10.useMemo(() => {
53431
+ const tooltipLabel = React11.useMemo(() => {
53147
53432
  if (hideLabel || !payload?.length) {
53148
53433
  return null;
53149
53434
  }
@@ -53446,7 +53731,7 @@ function getBarRadius(index2, total, stacked, rounded, layout) {
53446
53731
  if (isFirst) return [0, 0, 0, 0];
53447
53732
  return [0, 0, 0, 0];
53448
53733
  }
53449
- var BarChart = React10.forwardRef(
53734
+ var BarChart = React11.forwardRef(
53450
53735
  function BarChart2({
53451
53736
  data: data2,
53452
53737
  config: explicitConfig,
@@ -53470,16 +53755,16 @@ var BarChart = React10.forwardRef(
53470
53755
  className,
53471
53756
  margin
53472
53757
  }, ref) {
53473
- const resolvedCategoryKey = React10.useMemo(
53758
+ const resolvedCategoryKey = React11.useMemo(
53474
53759
  () => categoryKey ?? inferCategoryKey(data2[0]),
53475
53760
  [categoryKey, data2]
53476
53761
  );
53477
- const config = React10.useMemo(
53762
+ const config = React11.useMemo(
53478
53763
  () => buildAutoSeriesConfig(data2, resolvedCategoryKey, explicitConfig),
53479
53764
  [data2, resolvedCategoryKey, explicitConfig]
53480
53765
  );
53481
- const barKeys = React10.useMemo(() => Object.keys(config), [config]);
53482
- const chartData = React10.useMemo(
53766
+ const barKeys = React11.useMemo(() => Object.keys(config), [config]);
53767
+ const chartData = React11.useMemo(
53483
53768
  () => coerceSeriesValuesToNumbers(data2, barKeys),
53484
53769
  [data2, barKeys]
53485
53770
  );
@@ -53550,7 +53835,7 @@ var BarChart = React10.forwardRef(
53550
53835
  );
53551
53836
  var DEFAULT_MARGIN = { top: 0, right: 0, bottom: 0, left: 0 };
53552
53837
  var DEFAULT_X_AXIS_PADDING = { left: 0, right: 0 };
53553
- var AreaChart = React10.forwardRef(
53838
+ var AreaChart = React11.forwardRef(
53554
53839
  function AreaChart2({
53555
53840
  data: data2,
53556
53841
  config: explicitConfig,
@@ -53570,20 +53855,20 @@ var AreaChart = React10.forwardRef(
53570
53855
  }, ref) {
53571
53856
  const resolvedMargin = { ...DEFAULT_MARGIN, ...margin };
53572
53857
  const resolvedXAxisPadding = { ...DEFAULT_X_AXIS_PADDING, ...xAxisPadding };
53573
- const resolvedCategoryKey = React10.useMemo(
53858
+ const resolvedCategoryKey = React11.useMemo(
53574
53859
  () => categoryKey ?? inferCategoryKey(data2[0]),
53575
53860
  [categoryKey, data2]
53576
53861
  );
53577
- const config = React10.useMemo(
53862
+ const config = React11.useMemo(
53578
53863
  () => buildAutoSeriesConfig(data2, resolvedCategoryKey, explicitConfig),
53579
53864
  [data2, resolvedCategoryKey, explicitConfig]
53580
53865
  );
53581
- const seriesKeys = React10.useMemo(() => Object.keys(config), [config]);
53582
- const chartData = React10.useMemo(
53866
+ const seriesKeys = React11.useMemo(() => Object.keys(config), [config]);
53867
+ const chartData = React11.useMemo(
53583
53868
  () => coerceSeriesValuesToNumbers(data2, seriesKeys),
53584
53869
  [data2, seriesKeys]
53585
53870
  );
53586
- const reactId = React10.useId();
53871
+ const reactId = React11.useId();
53587
53872
  const gradientPrefix = `area-fill-${reactId.replace(/:/g, "")}`;
53588
53873
  const gradientStops = stacked ? { peak: 0.42, highlight: 0.32, mid: 0.18, soft: 0.06 } : { peak: 0.28, highlight: 0.22, mid: 0.1, soft: 0.03 };
53589
53874
  return /* @__PURE__ */ jsx(ChartContainer, { ref, config, className: cn("w-full", className), children: /* @__PURE__ */ jsxs(
@@ -53711,7 +53996,7 @@ function resolveStrokeWidth(width2) {
53711
53996
  if (typeof width2 === "number") return width2;
53712
53997
  return STROKE_WIDTH_MAP[width2];
53713
53998
  }
53714
- var LineChart = React10.forwardRef(
53999
+ var LineChart = React11.forwardRef(
53715
54000
  function LineChart2({
53716
54001
  data: data2,
53717
54002
  config: explicitConfig,
@@ -53734,17 +54019,17 @@ var LineChart = React10.forwardRef(
53734
54019
  className,
53735
54020
  margin
53736
54021
  }, ref) {
53737
- const resolvedCategoryKey = React10.useMemo(
54022
+ const resolvedCategoryKey = React11.useMemo(
53738
54023
  () => categoryKey ?? inferCategoryKey(data2[0]),
53739
54024
  [categoryKey, data2]
53740
54025
  );
53741
- const config = React10.useMemo(
54026
+ const config = React11.useMemo(
53742
54027
  () => buildAutoSeriesConfig(data2, resolvedCategoryKey, explicitConfig),
53743
54028
  [data2, resolvedCategoryKey, explicitConfig]
53744
54029
  );
53745
- const seriesKeys = React10.useMemo(() => Object.keys(config), [config]);
54030
+ const seriesKeys = React11.useMemo(() => Object.keys(config), [config]);
53746
54031
  const resolvedStrokeWidth = resolveStrokeWidth(strokeWidth);
53747
- const processedData = React10.useMemo(() => {
54032
+ const processedData = React11.useMemo(() => {
53748
54033
  const base = coerceSeriesValuesToNumbers(data2, seriesKeys);
53749
54034
  if (!stacked) return base;
53750
54035
  return base.map((row) => {
@@ -53760,11 +54045,11 @@ var LineChart = React10.forwardRef(
53760
54045
  return out;
53761
54046
  });
53762
54047
  }, [data2, seriesKeys, stacked]);
53763
- const glowOrderKeys = React10.useMemo(
54048
+ const glowOrderKeys = React11.useMemo(
53764
54049
  () => stacked ? [...seriesKeys].reverse() : seriesKeys,
53765
54050
  [seriesKeys, stacked]
53766
54051
  );
53767
- const reactId = React10.useId();
54052
+ const reactId = React11.useId();
53768
54053
  const idPrefix2 = `line-${reactId.replace(/:/g, "")}`;
53769
54054
  const glowGradientId = (key2) => `${idPrefix2}-glow-${key2}`;
53770
54055
  return /* @__PURE__ */ jsx(
@@ -53919,7 +54204,7 @@ function getBarRadius2(index2, total, stacked, rounded) {
53919
54204
  function buildDefaultSeries(config) {
53920
54205
  return Object.keys(config).map((dataKey) => ({ dataKey, type: "bar" }));
53921
54206
  }
53922
- var ComposedChart = React10.forwardRef(
54207
+ var ComposedChart = React11.forwardRef(
53923
54208
  function ComposedChart2({
53924
54209
  data: data2,
53925
54210
  config: explicitConfig,
@@ -53948,27 +54233,27 @@ var ComposedChart = React10.forwardRef(
53948
54233
  className,
53949
54234
  margin
53950
54235
  }, ref) {
53951
- const resolvedCategoryKey = React10.useMemo(
54236
+ const resolvedCategoryKey = React11.useMemo(
53952
54237
  () => categoryKey ?? inferCategoryKey(data2[0]),
53953
54238
  [categoryKey, data2]
53954
54239
  );
53955
- const config = React10.useMemo(
54240
+ const config = React11.useMemo(
53956
54241
  () => buildAutoSeriesConfig(data2, resolvedCategoryKey, explicitConfig),
53957
54242
  [data2, resolvedCategoryKey, explicitConfig]
53958
54243
  );
53959
- const series = React10.useMemo(
54244
+ const series = React11.useMemo(
53960
54245
  () => explicitSeries ?? buildDefaultSeries(config),
53961
54246
  [explicitSeries, config]
53962
54247
  );
53963
- const seriesKeys = React10.useMemo(
54248
+ const seriesKeys = React11.useMemo(
53964
54249
  () => series.map((item) => item.dataKey),
53965
54250
  [series]
53966
54251
  );
53967
- const chartData = React10.useMemo(
54252
+ const chartData = React11.useMemo(
53968
54253
  () => coerceSeriesValuesToNumbers(data2, seriesKeys),
53969
54254
  [data2, seriesKeys]
53970
54255
  );
53971
- const barSeries = React10.useMemo(
54256
+ const barSeries = React11.useMemo(
53972
54257
  () => series.filter((item) => item.type === "bar"),
53973
54258
  [series]
53974
54259
  );
@@ -54187,7 +54472,7 @@ function DonutLegend({
54187
54472
  ] }, key2);
54188
54473
  }) });
54189
54474
  }
54190
- var DonutChart = React10.forwardRef(
54475
+ var DonutChart = React11.forwardRef(
54191
54476
  function DonutChart2({
54192
54477
  data: data2,
54193
54478
  config: explicitConfig,
@@ -54205,18 +54490,18 @@ var DonutChart = React10.forwardRef(
54205
54490
  className,
54206
54491
  margin
54207
54492
  }, ref) {
54208
- const rawId = React10.useId();
54493
+ const rawId = React11.useId();
54209
54494
  const gradientScope = rawId.replace(/:/g, "");
54210
- const config = React10.useMemo(
54495
+ const config = React11.useMemo(
54211
54496
  () => deriveConfig(data2, explicitConfig),
54212
54497
  [data2, explicitConfig]
54213
54498
  );
54214
- const twoRing = React10.useMemo(() => hasChildren(data2), [data2]);
54215
- const outerRing = React10.useMemo(
54499
+ const twoRing = React11.useMemo(() => hasChildren(data2), [data2]);
54500
+ const outerRing = React11.useMemo(
54216
54501
  () => twoRing ? buildOuterRing(data2) : null,
54217
54502
  [data2, twoRing]
54218
54503
  );
54219
- React10.useEffect(() => {
54504
+ React11.useEffect(() => {
54220
54505
  validateChildren(data2);
54221
54506
  }, [data2]);
54222
54507
  const inner = parseRadius(innerRadius);
@@ -54225,8 +54510,8 @@ var DonutChart = React10.forwardRef(
54225
54510
  const gapHalf = ringGap / 2;
54226
54511
  const innerRingOuterRadius = twoRing ? formatRadius(mid - gapHalf, inner.isPct) : outerRadius;
54227
54512
  const outerRingInnerRadius = formatRadius(mid + gapHalf, outer.isPct);
54228
- const legendOrder = React10.useMemo(() => flattenKeys(data2), [data2]);
54229
- const uniqueKeys = React10.useMemo(
54513
+ const legendOrder = React11.useMemo(() => flattenKeys(data2), [data2]);
54514
+ const uniqueKeys = React11.useMemo(
54230
54515
  () => Array.from(new Set(flattenKeys(data2))),
54231
54516
  [data2]
54232
54517
  );
@@ -54483,7 +54768,7 @@ function TreemapLegend({
54483
54768
  ] }, key2);
54484
54769
  }) });
54485
54770
  }
54486
- var TreemapChart = React10.forwardRef(
54771
+ var TreemapChart = React11.forwardRef(
54487
54772
  function TreemapChart2({
54488
54773
  data: data2,
54489
54774
  config: explicitConfig,
@@ -54503,28 +54788,28 @@ var TreemapChart = React10.forwardRef(
54503
54788
  isUpdateAnimationActive
54504
54789
  }, ref) {
54505
54790
  const resolvedUpdateAnimationActive = isUpdateAnimationActive ?? isAnimationActive;
54506
- const rawId = React10.useId();
54791
+ const rawId = React11.useId();
54507
54792
  const gradientScope = rawId.replace(/:/g, "");
54508
- const resolvedLabelStyle = React10.useMemo(
54793
+ const resolvedLabelStyle = React11.useMemo(
54509
54794
  () => ({ ...DEFAULT_LABEL_STYLE, ...labelStyle }),
54510
54795
  [labelStyle]
54511
54796
  );
54512
- const sortedData = React10.useMemo(() => {
54797
+ const sortedData = React11.useMemo(() => {
54513
54798
  const sorted = [...data2].sort((a, b) => b.value - a.value);
54514
54799
  if (typeof maxDataPoints === "number" && maxDataPoints > 0) {
54515
54800
  return sorted.slice(0, maxDataPoints);
54516
54801
  }
54517
54802
  return sorted;
54518
54803
  }, [data2, maxDataPoints]);
54519
- const config = React10.useMemo(
54804
+ const config = React11.useMemo(
54520
54805
  () => deriveConfig2(sortedData, explicitConfig),
54521
54806
  [sortedData, explicitConfig]
54522
54807
  );
54523
- const uniqueKeys = React10.useMemo(
54808
+ const uniqueKeys = React11.useMemo(
54524
54809
  () => Array.from(new Set(sortedData.map((d) => d.key))),
54525
54810
  [sortedData]
54526
54811
  );
54527
- const colorByKey = React10.useMemo(() => {
54812
+ const colorByKey = React11.useMemo(() => {
54528
54813
  const map = /* @__PURE__ */ new Map();
54529
54814
  if (typeof color === "string" && color.length > 0) {
54530
54815
  const base = resolveBaseColor(color);
@@ -54540,7 +54825,7 @@ var TreemapChart = React10.forwardRef(
54540
54825
  }
54541
54826
  return map;
54542
54827
  }, [config, uniqueKeys, color, sortedData]);
54543
- const textColorByKey = React10.useMemo(() => {
54828
+ const textColorByKey = React11.useMemo(() => {
54544
54829
  const map = /* @__PURE__ */ new Map();
54545
54830
  if (typeof color === "string" && color.length > 0) {
54546
54831
  sortedData.forEach((d, i) => {
@@ -54552,7 +54837,7 @@ var TreemapChart = React10.forwardRef(
54552
54837
  return map;
54553
54838
  }, [color, sortedData]);
54554
54839
  const autoTextColor = labelStyle?.color === void 0;
54555
- const treemapData = React10.useMemo(
54840
+ const treemapData = React11.useMemo(
54556
54841
  () => sortedData.map((d) => ({
54557
54842
  ...d,
54558
54843
  name: d.key,
@@ -54654,7 +54939,7 @@ var slotExpandedSizeClasses = {
54654
54939
  default: "h-10 text-base md:text-sm",
54655
54940
  lg: "h-12 text-lg"
54656
54941
  };
54657
- var InputOTPSeparator = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
54942
+ var InputOTPSeparator = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
54658
54943
  "div",
54659
54944
  {
54660
54945
  ref,
@@ -54674,7 +54959,7 @@ var SlotBox = ({
54674
54959
  hasError,
54675
54960
  cornerClass
54676
54961
  }) => {
54677
- const context = React10.useContext(OTPInputContext);
54962
+ const context = React11.useContext(OTPInputContext);
54678
54963
  const slot = context.slots[index2];
54679
54964
  if (!slot) return null;
54680
54965
  const { char, hasFakeCaret, isActive } = slot;
@@ -54739,7 +55024,7 @@ function clampLength(raw) {
54739
55024
  }
54740
55025
  return rounded;
54741
55026
  }
54742
- var InputOTP = React10.forwardRef(
55027
+ var InputOTP = React11.forwardRef(
54743
55028
  ({
54744
55029
  length: length2,
54745
55030
  allowAlphaNumeric,
@@ -54768,17 +55053,17 @@ var InputOTP = React10.forwardRef(
54768
55053
  containerClassName,
54769
55054
  ...restProps
54770
55055
  }, ref) => {
54771
- const autoId = React10.useId();
55056
+ const autoId = React11.useId();
54772
55057
  const inputId = id || autoId;
54773
- const effectiveLength = React10.useMemo(() => clampLength(length2), [length2]);
55058
+ const effectiveLength = React11.useMemo(() => clampLength(length2), [length2]);
54774
55059
  const effectiveSize = size || "default";
54775
55060
  const hasError = !!error || !!errorContent;
54776
55061
  const isControlled = value2 !== void 0;
54777
- const [uncontrolledValue, setUncontrolledValue] = React10.useState(
55062
+ const [uncontrolledValue, setUncontrolledValue] = React11.useState(
54778
55063
  typeof defaultValue === "string" ? defaultValue : ""
54779
55064
  );
54780
55065
  const effectiveValue = isControlled ? value2 : uncontrolledValue;
54781
- const handleChange = React10.useCallback(
55066
+ const handleChange = React11.useCallback(
54782
55067
  (next) => {
54783
55068
  if (!isControlled) setUncontrolledValue(next);
54784
55069
  onChange?.(next);
@@ -54786,7 +55071,7 @@ var InputOTP = React10.forwardRef(
54786
55071
  [isControlled, onChange]
54787
55072
  );
54788
55073
  const pattern = regex && regex.length > 0 ? regex : allowAlphaNumeric ? REGEXP_ONLY_DIGITS_AND_CHARS : REGEXP_ONLY_DIGITS;
54789
- const groups = React10.useMemo(
55074
+ const groups = React11.useMemo(
54790
55075
  () => buildGroups(effectiveLength, separators),
54791
55076
  [effectiveLength, separators]
54792
55077
  );
@@ -54829,7 +55114,7 @@ var InputOTP = React10.forwardRef(
54829
55114
  containerClassName
54830
55115
  ),
54831
55116
  ...restProps,
54832
- children: groups.map((group, groupIndex) => /* @__PURE__ */ jsxs(React10.Fragment, { children: [
55117
+ children: groups.map((group, groupIndex) => /* @__PURE__ */ jsxs(React11.Fragment, { children: [
54833
55118
  groupIndex > 0 && /* @__PURE__ */ jsx(InputOTPSeparator, {}),
54834
55119
  /* @__PURE__ */ jsx(
54835
55120
  "div",
@@ -54875,15 +55160,15 @@ var InputOTP = React10.forwardRef(
54875
55160
  }
54876
55161
  );
54877
55162
  InputOTP.displayName = "InputOTP";
54878
- var CarouselContext = React10.createContext(null);
55163
+ var CarouselContext = React11.createContext(null);
54879
55164
  function useCarousel() {
54880
- const context = React10.useContext(CarouselContext);
55165
+ const context = React11.useContext(CarouselContext);
54881
55166
  if (!context) {
54882
55167
  throw new Error("useCarousel must be used within a <Carousel />");
54883
55168
  }
54884
55169
  return context;
54885
55170
  }
54886
- var Carousel = React10.forwardRef(
55171
+ var Carousel = React11.forwardRef(
54887
55172
  ({
54888
55173
  orientation = "horizontal",
54889
55174
  opts,
@@ -54900,20 +55185,20 @@ var Carousel = React10.forwardRef(
54900
55185
  },
54901
55186
  plugins
54902
55187
  );
54903
- const [canScrollPrev, setCanScrollPrev] = React10.useState(false);
54904
- const [canScrollNext, setCanScrollNext] = React10.useState(false);
54905
- const onSelect = React10.useCallback((api2) => {
55188
+ const [canScrollPrev, setCanScrollPrev] = React11.useState(false);
55189
+ const [canScrollNext, setCanScrollNext] = React11.useState(false);
55190
+ const onSelect = React11.useCallback((api2) => {
54906
55191
  if (!api2) return;
54907
55192
  setCanScrollPrev(api2.canScrollPrev());
54908
55193
  setCanScrollNext(api2.canScrollNext());
54909
55194
  }, []);
54910
- const scrollPrev = React10.useCallback(() => {
55195
+ const scrollPrev = React11.useCallback(() => {
54911
55196
  api?.scrollPrev();
54912
55197
  }, [api]);
54913
- const scrollNext = React10.useCallback(() => {
55198
+ const scrollNext = React11.useCallback(() => {
54914
55199
  api?.scrollNext();
54915
55200
  }, [api]);
54916
- const handleKeyDown = React10.useCallback(
55201
+ const handleKeyDown = React11.useCallback(
54917
55202
  (event) => {
54918
55203
  const isHorizontal = orientation === "horizontal";
54919
55204
  const prevKey = isHorizontal ? "ArrowLeft" : "ArrowUp";
@@ -54928,11 +55213,11 @@ var Carousel = React10.forwardRef(
54928
55213
  },
54929
55214
  [scrollPrev, scrollNext, orientation]
54930
55215
  );
54931
- React10.useEffect(() => {
55216
+ React11.useEffect(() => {
54932
55217
  if (!api || !setApi) return;
54933
55218
  setApi(api);
54934
55219
  }, [api, setApi]);
54935
- React10.useEffect(() => {
55220
+ React11.useEffect(() => {
54936
55221
  if (!api) return;
54937
55222
  onSelect(api);
54938
55223
  api.on("reInit", onSelect);
@@ -54972,7 +55257,7 @@ var Carousel = React10.forwardRef(
54972
55257
  }
54973
55258
  );
54974
55259
  Carousel.displayName = "Carousel";
54975
- var CarouselContent = React10.forwardRef(({ className, ...props }, ref) => {
55260
+ var CarouselContent = React11.forwardRef(({ className, ...props }, ref) => {
54976
55261
  const { carouselRef, orientation } = useCarousel();
54977
55262
  return (
54978
55263
  // Vertical carousels need an explicit viewport height so overflow clips at
@@ -55003,7 +55288,7 @@ var CarouselContent = React10.forwardRef(({ className, ...props }, ref) => {
55003
55288
  );
55004
55289
  });
55005
55290
  CarouselContent.displayName = "CarouselContent";
55006
- var CarouselItem = React10.forwardRef(({ className, ...props }, ref) => {
55291
+ var CarouselItem = React11.forwardRef(({ className, ...props }, ref) => {
55007
55292
  const { orientation } = useCarousel();
55008
55293
  return /* @__PURE__ */ jsx(
55009
55294
  "div",
@@ -55021,7 +55306,7 @@ var CarouselItem = React10.forwardRef(({ className, ...props }, ref) => {
55021
55306
  );
55022
55307
  });
55023
55308
  CarouselItem.displayName = "CarouselItem";
55024
- var CarouselPrevious = React10.forwardRef(({ className, ...props }, ref) => {
55309
+ var CarouselPrevious = React11.forwardRef(({ className, ...props }, ref) => {
55025
55310
  const { orientation, scrollPrev, canScrollPrev } = useCarousel();
55026
55311
  return /* @__PURE__ */ jsxs(
55027
55312
  "button",
@@ -55045,7 +55330,7 @@ var CarouselPrevious = React10.forwardRef(({ className, ...props }, ref) => {
55045
55330
  );
55046
55331
  });
55047
55332
  CarouselPrevious.displayName = "CarouselPrevious";
55048
- var CarouselNext = React10.forwardRef(({ className, ...props }, ref) => {
55333
+ var CarouselNext = React11.forwardRef(({ className, ...props }, ref) => {
55049
55334
  const { orientation, scrollNext, canScrollNext } = useCarousel();
55050
55335
  return /* @__PURE__ */ jsxs(
55051
55336
  "button",
@@ -55149,10 +55434,10 @@ function Carousel2({
55149
55434
  MAX_DOTS_DEFAULT
55150
55435
  );
55151
55436
  const clampedDelay = clamp2(delay2, DELAY_MIN, DELAY_MAX, DELAY_DEFAULT);
55152
- const autoplayPlugin = React10.useRef(
55437
+ const autoplayPlugin = React11.useRef(
55153
55438
  autoplay ? Autoplay({ delay: clampedDelay, stopOnInteraction: true }) : null
55154
55439
  );
55155
- React10.useEffect(() => {
55440
+ React11.useEffect(() => {
55156
55441
  const plugin = autoplayPlugin.current;
55157
55442
  if (!plugin || !autoplay) return;
55158
55443
  autoplayPlugin.current = Autoplay({
@@ -55160,17 +55445,17 @@ function Carousel2({
55160
55445
  stopOnInteraction: true
55161
55446
  });
55162
55447
  }, [autoplay, clampedDelay]);
55163
- const plugins = React10.useMemo(
55448
+ const plugins = React11.useMemo(
55164
55449
  () => autoplay && autoplayPlugin.current ? [autoplayPlugin.current] : [],
55165
55450
  [autoplay, clampedDelay]
55166
55451
  );
55167
- const [api, setApi] = React10.useState();
55168
- const [selectedIndex, setSelectedIndex] = React10.useState(0);
55169
- const [scrollSnaps, setScrollSnaps] = React10.useState([]);
55170
- const [canScrollPrev, setCanScrollPrev] = React10.useState(false);
55171
- const [canScrollNext, setCanScrollNext] = React10.useState(false);
55172
- const prevIndexRef = React10.useRef(0);
55173
- React10.useEffect(() => {
55452
+ const [api, setApi] = React11.useState();
55453
+ const [selectedIndex, setSelectedIndex] = React11.useState(0);
55454
+ const [scrollSnaps, setScrollSnaps] = React11.useState([]);
55455
+ const [canScrollPrev, setCanScrollPrev] = React11.useState(false);
55456
+ const [canScrollNext, setCanScrollNext] = React11.useState(false);
55457
+ const prevIndexRef = React11.useRef(0);
55458
+ React11.useEffect(() => {
55174
55459
  if (!api) return;
55175
55460
  setScrollSnaps(api.scrollSnapList());
55176
55461
  setSelectedIndex(api.selectedScrollSnap());
@@ -55207,12 +55492,12 @@ function Carousel2({
55207
55492
  api.off("reInit", handleReInit);
55208
55493
  };
55209
55494
  }, [api, loop, onNext, onPrevious]);
55210
- const scrollTo = React10.useCallback(
55495
+ const scrollTo = React11.useCallback(
55211
55496
  (index2) => api?.scrollTo(index2),
55212
55497
  [api]
55213
55498
  );
55214
- const scrollPrev = React10.useCallback(() => api?.scrollPrev(), [api]);
55215
- const scrollNext = React10.useCallback(() => api?.scrollNext(), [api]);
55499
+ const scrollPrev = React11.useCallback(() => api?.scrollPrev(), [api]);
55500
+ const scrollNext = React11.useCallback(() => api?.scrollNext(), [api]);
55216
55501
  const navigationState = {
55217
55502
  canScrollPrev,
55218
55503
  canScrollNext,
@@ -55276,7 +55561,7 @@ var sizeClasses2 = {
55276
55561
  default: "min-h-[80px] px-3 py-2 text-base md:text-sm",
55277
55562
  lg: "min-h-[100px] px-4 py-3 text-lg"
55278
55563
  };
55279
- var Textarea = React10.forwardRef(
55564
+ var Textarea = React11.forwardRef(
55280
55565
  ({
55281
55566
  className,
55282
55567
  label,
@@ -55293,15 +55578,15 @@ var Textarea = React10.forwardRef(
55293
55578
  placeholder,
55294
55579
  ...restProps
55295
55580
  }, ref) => {
55296
- const autoId = React10.useId();
55581
+ const autoId = React11.useId();
55297
55582
  const textareaId = id || autoId;
55298
- const [charCount, setCharCount] = React10.useState(() => {
55583
+ const [charCount, setCharCount] = React11.useState(() => {
55299
55584
  if (charLimit === void 0) return 0;
55300
55585
  if (typeof value2 === "string") return value2.length;
55301
55586
  if (typeof defaultValue === "string") return defaultValue.length;
55302
55587
  return 0;
55303
55588
  });
55304
- React10.useEffect(() => {
55589
+ React11.useEffect(() => {
55305
55590
  if (charLimit !== void 0 && typeof value2 === "string") {
55306
55591
  setCharCount(value2.length);
55307
55592
  }
@@ -55379,7 +55664,7 @@ var Textarea = React10.forwardRef(
55379
55664
  }
55380
55665
  );
55381
55666
  Textarea.displayName = "Textarea";
55382
- var Command = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
55667
+ var Command = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
55383
55668
  Command$1,
55384
55669
  {
55385
55670
  ref,
@@ -55391,7 +55676,7 @@ var Command = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__
55391
55676
  }
55392
55677
  ));
55393
55678
  Command.displayName = Command$1.displayName;
55394
- var CommandInput = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs("div", { className: "flex items-center border-b px-3", "cmdk-input-wrapper": "", children: [
55679
+ var CommandInput = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs("div", { className: "flex items-center border-b px-3", "cmdk-input-wrapper": "", children: [
55395
55680
  /* @__PURE__ */ jsx(Search, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
55396
55681
  /* @__PURE__ */ jsx(
55397
55682
  Command$1.Input,
@@ -55406,7 +55691,7 @@ var CommandInput = React10.forwardRef(({ className, ...props }, ref) => /* @__PU
55406
55691
  )
55407
55692
  ] }));
55408
55693
  CommandInput.displayName = Command$1.Input.displayName;
55409
- var CommandList = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
55694
+ var CommandList = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
55410
55695
  Command$1.List,
55411
55696
  {
55412
55697
  ref,
@@ -55415,7 +55700,7 @@ var CommandList = React10.forwardRef(({ className, ...props }, ref) => /* @__PUR
55415
55700
  }
55416
55701
  ));
55417
55702
  CommandList.displayName = Command$1.List.displayName;
55418
- var CommandEmpty = React10.forwardRef((props, ref) => /* @__PURE__ */ jsx(
55703
+ var CommandEmpty = React11.forwardRef((props, ref) => /* @__PURE__ */ jsx(
55419
55704
  Command$1.Empty,
55420
55705
  {
55421
55706
  ref,
@@ -55424,7 +55709,7 @@ var CommandEmpty = React10.forwardRef((props, ref) => /* @__PURE__ */ jsx(
55424
55709
  }
55425
55710
  ));
55426
55711
  CommandEmpty.displayName = Command$1.Empty.displayName;
55427
- var CommandGroup = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
55712
+ var CommandGroup = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
55428
55713
  Command$1.Group,
55429
55714
  {
55430
55715
  ref,
@@ -55436,7 +55721,7 @@ var CommandGroup = React10.forwardRef(({ className, ...props }, ref) => /* @__PU
55436
55721
  }
55437
55722
  ));
55438
55723
  CommandGroup.displayName = Command$1.Group.displayName;
55439
- var CommandSeparator = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
55724
+ var CommandSeparator = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
55440
55725
  Command$1.Separator,
55441
55726
  {
55442
55727
  ref,
@@ -55445,7 +55730,7 @@ var CommandSeparator = React10.forwardRef(({ className, ...props }, ref) => /* @
55445
55730
  }
55446
55731
  ));
55447
55732
  CommandSeparator.displayName = Command$1.Separator.displayName;
55448
- var CommandItem = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
55733
+ var CommandItem = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
55449
55734
  Command$1.Item,
55450
55735
  {
55451
55736
  ref,
@@ -55474,8 +55759,8 @@ function AsyncCombobox({
55474
55759
  hasMore = false,
55475
55760
  onLoadMore
55476
55761
  }) {
55477
- const [open, setOpen] = React10.useState(false);
55478
- const [inputValue, setInputValue] = React10.useState("");
55762
+ const [open, setOpen] = React11.useState(false);
55763
+ const [inputValue, setInputValue] = React11.useState("");
55479
55764
  const selectedOption = options.find((o) => o.value === value2);
55480
55765
  const displayValue = selectedOption?.label ?? (value2 || "");
55481
55766
  const handleSelect = (selected) => {
@@ -55483,7 +55768,7 @@ function AsyncCombobox({
55483
55768
  onValueChange?.(next);
55484
55769
  if (!clearable) setOpen(false);
55485
55770
  };
55486
- const handleSearchChange = React10.useCallback(
55771
+ const handleSearchChange = React11.useCallback(
55487
55772
  (q) => {
55488
55773
  setInputValue(q);
55489
55774
  onSearchChange?.(q);
@@ -55598,17 +55883,17 @@ function AsyncMultiSelect({
55598
55883
  portal = true,
55599
55884
  renderOption
55600
55885
  }) {
55601
- const [open, setOpen] = React10.useState(false);
55602
- const [inputValue, setInputValue] = React10.useState("");
55603
- const listRef = React10.useRef(null);
55604
- const sentinelRef = React10.useRef(null);
55886
+ const [open, setOpen] = React11.useState(false);
55887
+ const [inputValue, setInputValue] = React11.useState("");
55888
+ const listRef = React11.useRef(null);
55889
+ const sentinelRef = React11.useRef(null);
55605
55890
  const selected = normalizeValue(value2, multiple);
55606
- const selectedOptions = React10.useMemo(() => {
55891
+ const selectedOptions = React11.useMemo(() => {
55607
55892
  const map = /* @__PURE__ */ new Map();
55608
55893
  for (const opt of options) map.set(opt.value, opt);
55609
55894
  return selected.map((v) => map.get(v) ?? { value: v, label: v });
55610
55895
  }, [options, selected]);
55611
- React10.useEffect(() => {
55896
+ React11.useEffect(() => {
55612
55897
  const sentinel = sentinelRef.current;
55613
55898
  if (!open || !hasMore || !onLoadMore || !sentinel) return;
55614
55899
  const observer = new IntersectionObserver(
@@ -55635,7 +55920,7 @@ function AsyncMultiSelect({
55635
55920
  const next = selected.filter((v) => v !== optionValue);
55636
55921
  onValueChange?.(multiple ? next.length > 0 ? next : void 0 : void 0);
55637
55922
  };
55638
- const handleSearchChange = React10.useCallback(
55923
+ const handleSearchChange = React11.useCallback(
55639
55924
  (q) => {
55640
55925
  setInputValue(q);
55641
55926
  onSearchChange?.(q);
@@ -55936,8 +56221,8 @@ function CalendarDayButton({
55936
56221
  modifiers,
55937
56222
  ...props
55938
56223
  }) {
55939
- const ref = React10.useRef(null);
55940
- React10.useEffect(() => {
56224
+ const ref = React11.useRef(null);
56225
+ React11.useEffect(() => {
55941
56226
  if (modifiers.focused) ref.current?.focus();
55942
56227
  }, [modifiers.focused]);
55943
56228
  return /* @__PURE__ */ jsx(
@@ -56110,7 +56395,7 @@ function DatePicker(props) {
56110
56395
  }
56111
56396
  DatePicker.displayName = "DatePicker";
56112
56397
  var timeInputChromeClass = "appearance-none bg-background [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none";
56113
- var TimePicker = React10.forwardRef(
56398
+ var TimePicker = React11.forwardRef(
56114
56399
  ({ hideIcon = false, className, ...props }, ref) => {
56115
56400
  return /* @__PURE__ */ jsx(
56116
56401
  Input,
@@ -56173,20 +56458,20 @@ function DateTimePicker(props) {
56173
56458
  className
56174
56459
  } = props;
56175
56460
  const isControlled = "value" in props;
56176
- const [uncontrolledValue, setUncontrolledValue] = React10.useState(defaultValue);
56461
+ const [uncontrolledValue, setUncontrolledValue] = React11.useState(defaultValue);
56177
56462
  const current = isControlled ? value2 : uncontrolledValue;
56178
56463
  const isOpenControlled = controlledOpen !== void 0;
56179
- const [internalOpen, setInternalOpen] = React10.useState(false);
56464
+ const [internalOpen, setInternalOpen] = React11.useState(false);
56180
56465
  const isOpen = isOpenControlled ? controlledOpen : internalOpen;
56181
56466
  const setOpen = (nextOpen) => {
56182
56467
  if (!isOpenControlled) setInternalOpen(nextOpen);
56183
56468
  onOpenChange?.(nextOpen);
56184
56469
  };
56185
- const [draftTime, setDraftTime] = React10.useState(
56470
+ const [draftTime, setDraftTime] = React11.useState(
56186
56471
  () => current ? formatTimeOfDay(current, timeStep) : ""
56187
56472
  );
56188
56473
  const currentMs = current?.getTime();
56189
- React10.useEffect(() => {
56474
+ React11.useEffect(() => {
56190
56475
  if (currentMs === void 0) return;
56191
56476
  setDraftTime(formatTimeOfDay(new Date(currentMs), timeStep));
56192
56477
  }, [currentMs, timeStep]);
@@ -56490,17 +56775,17 @@ function DateRangePicker({
56490
56775
  side = "bottom",
56491
56776
  className
56492
56777
  }) {
56493
- const [open, setOpen] = React10.useState(false);
56494
- const [showCalendar, setShowCalendar] = React10.useState(false);
56495
- const [draftRange, setDraftRange] = React10.useState(
56778
+ const [open, setOpen] = React11.useState(false);
56779
+ const [showCalendar, setShowCalendar] = React11.useState(false);
56780
+ const [draftRange, setDraftRange] = React11.useState(
56496
56781
  EMPTY_DRAFT_RANGE
56497
56782
  );
56498
- const [calendarMonth, setCalendarMonth] = React10.useState(/* @__PURE__ */ new Date());
56499
- const [flyoutSide, setFlyoutSide] = React10.useState("right");
56500
- const calendarRef = React10.useRef(null);
56501
- const [startInputValue, setStartInputValue] = React10.useState("");
56502
- const [endInputValue, setEndInputValue] = React10.useState("");
56503
- React10.useLayoutEffect(() => {
56783
+ const [calendarMonth, setCalendarMonth] = React11.useState(/* @__PURE__ */ new Date());
56784
+ const [flyoutSide, setFlyoutSide] = React11.useState("right");
56785
+ const calendarRef = React11.useRef(null);
56786
+ const [startInputValue, setStartInputValue] = React11.useState("");
56787
+ const [endInputValue, setEndInputValue] = React11.useState("");
56788
+ React11.useLayoutEffect(() => {
56504
56789
  if (!showCalendar || !calendarRef.current) return;
56505
56790
  const rect = calendarRef.current.getBoundingClientRect();
56506
56791
  if (rect.right > window.innerWidth) {
@@ -56509,14 +56794,14 @@ function DateRangePicker({
56509
56794
  }, [showCalendar]);
56510
56795
  const activePresets = presets ?? [...PRESET_IDS];
56511
56796
  const resolveLabel = (id) => presetLabels?.[id] ?? (id === "custom" ? "Custom" : PRESET_LABELS[id]);
56512
- const updateDraftRange = React10.useCallback(
56797
+ const updateDraftRange = React11.useCallback(
56513
56798
  (nextRange) => {
56514
56799
  setDraftRange(nextRange);
56515
56800
  onDraftChange?.(nextRange);
56516
56801
  },
56517
56802
  [onDraftChange]
56518
56803
  );
56519
- const syncInputsFromDraft = React10.useCallback(
56804
+ const syncInputsFromDraft = React11.useCallback(
56520
56805
  (range) => {
56521
56806
  setStartInputValue(range.startDate ? format(range.startDate, dateFormat) : "");
56522
56807
  if (lockEndToToday) {
@@ -56543,7 +56828,7 @@ function DateRangePicker({
56543
56828
  onChange?.({ presetId: id, ...range });
56544
56829
  setOpen(false);
56545
56830
  };
56546
- const handleRangeChange = React10.useCallback(
56831
+ const handleRangeChange = React11.useCallback(
56547
56832
  (range) => {
56548
56833
  const nextDraft = toDraftRange(range);
56549
56834
  if (lockEndToToday && nextDraft.startDate) {
@@ -56859,18 +57144,28 @@ function SimplifiedDate({ ts, dateFormat, className, relative = false }) {
56859
57144
  }
56860
57145
  return /* @__PURE__ */ jsx("span", { className: cn(className), children: detailedDate });
56861
57146
  }
56862
- var Table = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { className: "relative w-full overflow-auto", children: /* @__PURE__ */ jsx(
56863
- "table",
56864
- {
56865
- ref,
56866
- className: cn("w-full caption-bottom text-sm", className),
56867
- ...props
56868
- }
56869
- ) }));
57147
+ var Table = React11.forwardRef(
57148
+ ({ className, containerRef, containerClassName, ...props }, ref) => /* @__PURE__ */ jsx(
57149
+ "div",
57150
+ {
57151
+ ref: containerRef,
57152
+ "data-slot": "table-container",
57153
+ className: cn("relative w-full overflow-auto", containerClassName),
57154
+ children: /* @__PURE__ */ jsx(
57155
+ "table",
57156
+ {
57157
+ ref,
57158
+ className: cn("w-full caption-bottom text-sm", className),
57159
+ ...props
57160
+ }
57161
+ )
57162
+ }
57163
+ )
57164
+ );
56870
57165
  Table.displayName = "Table";
56871
- var TableHeader = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("thead", { ref, className: cn("[&_tr]:border-b", className), ...props }));
57166
+ var TableHeader = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("thead", { ref, className: cn("[&_tr]:border-b", className), ...props }));
56872
57167
  TableHeader.displayName = "TableHeader";
56873
- var TableBody = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
57168
+ var TableBody = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
56874
57169
  "tbody",
56875
57170
  {
56876
57171
  ref,
@@ -56879,7 +57174,7 @@ var TableBody = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE_
56879
57174
  }
56880
57175
  ));
56881
57176
  TableBody.displayName = "TableBody";
56882
- var TableFooter = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
57177
+ var TableFooter = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
56883
57178
  "tfoot",
56884
57179
  {
56885
57180
  ref,
@@ -56891,7 +57186,7 @@ var TableFooter = React10.forwardRef(({ className, ...props }, ref) => /* @__PUR
56891
57186
  }
56892
57187
  ));
56893
57188
  TableFooter.displayName = "TableFooter";
56894
- var TableRow = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
57189
+ var TableRow = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
56895
57190
  "tr",
56896
57191
  {
56897
57192
  ref,
@@ -56903,7 +57198,7 @@ var TableRow = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__
56903
57198
  }
56904
57199
  ));
56905
57200
  TableRow.displayName = "TableRow";
56906
- var TableHead = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
57201
+ var TableHead = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
56907
57202
  "th",
56908
57203
  {
56909
57204
  ref,
@@ -56915,7 +57210,7 @@ var TableHead = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE_
56915
57210
  }
56916
57211
  ));
56917
57212
  TableHead.displayName = "TableHead";
56918
- var TableCell = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
57213
+ var TableCell = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
56919
57214
  "td",
56920
57215
  {
56921
57216
  ref,
@@ -56927,7 +57222,7 @@ var TableCell = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE_
56927
57222
  }
56928
57223
  ));
56929
57224
  TableCell.displayName = "TableCell";
56930
- var TableCaption = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
57225
+ var TableCaption = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
56931
57226
  "caption",
56932
57227
  {
56933
57228
  ref,
@@ -57201,53 +57496,67 @@ function Pagination({
57201
57496
  const handlePageSizeChange = (value2) => {
57202
57497
  onPageSizeChange(Number(value2));
57203
57498
  };
57204
- return /* @__PURE__ */ jsxs("div", { className: cn("flex items-center border-t", s.container), children: [
57205
- pageLabel !== void 0 ? /* @__PURE__ */ jsx("span", { className: "flex-1 text-sm text-muted-foreground", children: pageLabel }) : /* @__PURE__ */ jsx("span", { className: "flex-1" }),
57206
- /* @__PURE__ */ jsxs("div", { className: cn("flex items-center", s.buttonGroupGap), children: [
57207
- /* @__PURE__ */ jsx(
57208
- Button,
57209
- {
57210
- fullWidth: false,
57211
- variant: "outline",
57212
- color: "gray",
57213
- usePrimaryColorOnHover: true,
57214
- size,
57215
- onClick: onPrevPage,
57216
- disabled: !hasPrevPage || disabled,
57217
- startIcon: /* @__PURE__ */ jsx(ChevronLeft, { className: s.icon }),
57218
- children: previousLabel
57219
- }
57220
- ),
57221
- /* @__PURE__ */ jsx(
57222
- Button,
57223
- {
57224
- fullWidth: false,
57225
- variant: "outline",
57226
- color: "gray",
57227
- usePrimaryColorOnHover: true,
57228
- size,
57229
- onClick: onNextPage,
57230
- disabled: !hasNextPage || disabled,
57231
- endIcon: /* @__PURE__ */ jsx(ChevronRight, { className: s.icon }),
57232
- children: nextLabel
57233
- }
57234
- )
57235
- ] }),
57236
- showPageSizeSelector ? /* @__PURE__ */ jsx("div", { className: "flex flex-1 justify-end", children: /* @__PURE__ */ jsxs(DropdownMenu, { children: [
57237
- /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(Button, { fullWidth: false, variant: "outline", color: "gray", usePrimaryColorOnHover: true, size, children: [
57238
- pageSizeOptionLabel(currentPageSize),
57239
- /* @__PURE__ */ jsx(ChevronDown, { className: cn(s.icon, "opacity-50") })
57240
- ] }) }),
57241
- /* @__PURE__ */ jsx(DropdownMenuContent, { align: "end", children: /* @__PURE__ */ jsx(
57242
- DropdownMenuRadioGroup,
57243
- {
57244
- value: String(currentPageSize),
57245
- onValueChange: handlePageSizeChange,
57246
- children: pageSizeOptions.map((size2) => /* @__PURE__ */ jsx(DropdownMenuRadioItem, { value: String(size2), children: pageSizeOptionLabel(size2) }, size2))
57247
- }
57248
- ) })
57249
- ] }) }) : /* @__PURE__ */ jsx("div", { className: "flex flex-1" })
57250
- ] });
57499
+ return (
57500
+ // A size container: below 28rem the Previous/Next labels collapse to
57501
+ // icon-only buttons (still named for screen readers) so the row fits; in
57502
+ // very narrow containers the page-size selector wraps onto its own line.
57503
+ /* @__PURE__ */ jsxs(
57504
+ "div",
57505
+ {
57506
+ className: cn(
57507
+ "@container flex flex-wrap items-center gap-x-2 gap-y-3 border-t",
57508
+ s.container
57509
+ ),
57510
+ children: [
57511
+ pageLabel !== void 0 ? /* @__PURE__ */ jsx("span", { className: "flex-1 text-sm whitespace-nowrap text-muted-foreground", children: pageLabel }) : /* @__PURE__ */ jsx("span", { className: "flex-1" }),
57512
+ /* @__PURE__ */ jsxs("div", { className: cn("flex items-center", s.buttonGroupGap), children: [
57513
+ /* @__PURE__ */ jsx(
57514
+ Button,
57515
+ {
57516
+ fullWidth: false,
57517
+ variant: "outline",
57518
+ color: "gray",
57519
+ usePrimaryColorOnHover: true,
57520
+ size,
57521
+ onClick: onPrevPage,
57522
+ disabled: !hasPrevPage || disabled,
57523
+ startIcon: /* @__PURE__ */ jsx(ChevronLeft, { className: s.icon }),
57524
+ children: /* @__PURE__ */ jsx("span", { className: "@max-md:sr-only", children: previousLabel })
57525
+ }
57526
+ ),
57527
+ /* @__PURE__ */ jsx(
57528
+ Button,
57529
+ {
57530
+ fullWidth: false,
57531
+ variant: "outline",
57532
+ color: "gray",
57533
+ usePrimaryColorOnHover: true,
57534
+ size,
57535
+ onClick: onNextPage,
57536
+ disabled: !hasNextPage || disabled,
57537
+ endIcon: /* @__PURE__ */ jsx(ChevronRight, { className: s.icon }),
57538
+ children: /* @__PURE__ */ jsx("span", { className: "@max-md:sr-only", children: nextLabel })
57539
+ }
57540
+ )
57541
+ ] }),
57542
+ showPageSizeSelector ? /* @__PURE__ */ jsx("div", { className: "flex flex-1 justify-end", children: /* @__PURE__ */ jsxs(DropdownMenu, { children: [
57543
+ /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(Button, { fullWidth: false, variant: "outline", color: "gray", usePrimaryColorOnHover: true, size, children: [
57544
+ pageSizeOptionLabel(currentPageSize),
57545
+ /* @__PURE__ */ jsx(ChevronDown, { className: cn(s.icon, "opacity-50") })
57546
+ ] }) }),
57547
+ /* @__PURE__ */ jsx(DropdownMenuContent, { align: "end", children: /* @__PURE__ */ jsx(
57548
+ DropdownMenuRadioGroup,
57549
+ {
57550
+ value: String(currentPageSize),
57551
+ onValueChange: handlePageSizeChange,
57552
+ children: pageSizeOptions.map((size2) => /* @__PURE__ */ jsx(DropdownMenuRadioItem, { value: String(size2), children: pageSizeOptionLabel(size2) }, size2))
57553
+ }
57554
+ ) })
57555
+ ] }) }) : /* @__PURE__ */ jsx("div", { className: "flex flex-1" })
57556
+ ]
57557
+ }
57558
+ )
57559
+ );
57251
57560
  }
57252
57561
 
57253
57562
  // src/components/pagination/pagination.props.ts
@@ -57332,9 +57641,79 @@ function TableSkeleton({
57332
57641
  rowIndex
57333
57642
  )) });
57334
57643
  }
57644
+ function getColumnMeta(column) {
57645
+ return column.columnDef.meta;
57646
+ }
57647
+ var SELECT_COLUMN_ID = "__select";
57648
+ function countStickyColumns(columns) {
57649
+ let count = 0;
57650
+ for (let i = 0; i < columns.length; i++) {
57651
+ const column = columns[i];
57652
+ const pinned = column.id === SELECT_COLUMN_ID ? Boolean(columns[i + 1] && getColumnMeta(columns[i + 1])?.sticky) : Boolean(getColumnMeta(column)?.sticky);
57653
+ if (!pinned) break;
57654
+ count++;
57655
+ }
57656
+ return count;
57657
+ }
57658
+ function useStickyOffsets(tableRef, count) {
57659
+ const [offsets, setOffsets] = useState([]);
57660
+ useLayoutEffect(() => {
57661
+ const table = tableRef.current;
57662
+ if (!table || count === 0) {
57663
+ setOffsets((prev) => prev.length === 0 ? prev : []);
57664
+ return;
57665
+ }
57666
+ const measure = () => {
57667
+ const cells = table.querySelectorAll(
57668
+ "thead tr:last-child > th"
57669
+ );
57670
+ const next = [];
57671
+ let left = 0;
57672
+ for (let i = 0; i < count && i < cells.length; i++) {
57673
+ next.push(left);
57674
+ left += cells[i].getBoundingClientRect().width;
57675
+ }
57676
+ setOffsets(
57677
+ (prev) => prev.length === next.length && prev.every((v, i) => v === next[i]) ? prev : next
57678
+ );
57679
+ };
57680
+ measure();
57681
+ if (typeof ResizeObserver === "undefined") return;
57682
+ const observer = new ResizeObserver(measure);
57683
+ observer.observe(table);
57684
+ return () => observer.disconnect();
57685
+ }, [tableRef, count]);
57686
+ return offsets;
57687
+ }
57688
+ function buildStickyColumns(columns, offsets) {
57689
+ const map = /* @__PURE__ */ new Map();
57690
+ const count = Math.min(offsets.length, columns.length);
57691
+ for (let i = 0; i < count; i++) {
57692
+ map.set(columns[i].id, { left: offsets[i], isLast: i === count - 1 });
57693
+ }
57694
+ return map;
57695
+ }
57696
+ var stickyBase = "sticky";
57697
+ var stickyHeadBg = "z-[2] bg-[var(--data-table-sticky-bg,var(--color-background))]";
57698
+ var stickyHeadBorderedBg = "z-[2] bg-[color-mix(in_oklab,var(--color-muted)_50%,var(--data-table-sticky-bg,var(--color-background)))]";
57699
+ var stickyCellBg = "z-[1] bg-[var(--data-table-sticky-bg,var(--color-background))] [tr:hover>&]:bg-[color-mix(in_oklab,var(--color-muted)_50%,var(--data-table-sticky-bg,var(--color-background)))] [tr[data-state=selected]>&]:bg-muted";
57700
+ var stickyEdge = "after:pointer-events-none after:absolute after:inset-y-0 after:-right-4 after:w-4 after:bg-linear-to-r after:from-black/10 after:to-transparent after:opacity-0 after:transition-opacity group-data-[overflow-start]/data-table:after:opacity-100 dark:after:from-black/40";
57701
+ function stickyCellProps(stickyColumns, columnId, kind) {
57702
+ const sticky = stickyColumns?.get(columnId);
57703
+ if (!sticky) return {};
57704
+ return {
57705
+ className: cn(
57706
+ stickyBase,
57707
+ kind === "head" ? stickyHeadBg : kind === "headBordered" ? stickyHeadBorderedBg : stickyCellBg,
57708
+ sticky.isLast && stickyEdge
57709
+ ),
57710
+ style: { left: sticky.left }
57711
+ };
57712
+ }
57335
57713
  function DataTableHeader({
57336
57714
  headerGroups,
57337
- showBorder = false
57715
+ showBorder = false,
57716
+ stickyColumns
57338
57717
  }) {
57339
57718
  return /* @__PURE__ */ jsx(
57340
57719
  TableHeader,
@@ -57342,20 +57721,29 @@ function DataTableHeader({
57342
57721
  className: cn(
57343
57722
  showBorder && "bg-muted/50 [&_tr]:border-border/50"
57344
57723
  ),
57345
- children: headerGroups.map((headerGroup) => /* @__PURE__ */ jsx(TableRow, { children: headerGroup.headers.map((header, headerIndex) => /* @__PURE__ */ jsx(
57346
- TableHead,
57347
- {
57348
- className: cn(
57349
- "text-sm text-gray-500 font-medium whitespace-nowrap",
57350
- showBorder && headerIndex === 0 && "pl-4"
57351
- ),
57352
- children: header.isPlaceholder ? null : flexRender(
57353
- header.column.columnDef.header,
57354
- header.getContext()
57355
- )
57356
- },
57357
- header.id
57358
- )) }, headerGroup.id))
57724
+ children: headerGroups.map((headerGroup) => /* @__PURE__ */ jsx(TableRow, { children: headerGroup.headers.map((header, headerIndex) => {
57725
+ const sticky = stickyCellProps(
57726
+ stickyColumns,
57727
+ header.column.id,
57728
+ showBorder ? "headBordered" : "head"
57729
+ );
57730
+ return /* @__PURE__ */ jsx(
57731
+ TableHead,
57732
+ {
57733
+ className: cn(
57734
+ "text-sm text-gray-500 font-medium whitespace-nowrap",
57735
+ showBorder && headerIndex === 0 && "pl-4",
57736
+ sticky.className
57737
+ ),
57738
+ style: sticky.style,
57739
+ children: header.isPlaceholder ? null : flexRender(
57740
+ header.column.columnDef.header,
57741
+ header.getContext()
57742
+ )
57743
+ },
57744
+ header.id
57745
+ );
57746
+ }) }, headerGroup.id))
57359
57747
  }
57360
57748
  );
57361
57749
  }
@@ -57372,7 +57760,8 @@ function DataTableBody({
57372
57760
  onRowClick,
57373
57761
  showBorder = false,
57374
57762
  tableRowClassName,
57375
- getRowClassName
57763
+ getRowClassName,
57764
+ stickyColumns
57376
57765
  }) {
57377
57766
  if (isFetching) {
57378
57767
  return /* @__PURE__ */ jsx(
@@ -57417,21 +57806,85 @@ function DataTableBody({
57417
57806
  onRowClick(row.original);
57418
57807
  }
57419
57808
  } : void 0,
57420
- children: row.getVisibleCells().map((cell, cellIndex) => /* @__PURE__ */ jsx(
57421
- TableCell,
57422
- {
57423
- className: cn(
57424
- "px-2 py-4",
57425
- showBorder && cellIndex === 0 && "pl-4"
57426
- ),
57427
- children: flexRender(cell.column.columnDef.cell, cell.getContext())
57428
- },
57429
- cell.id
57430
- ))
57809
+ children: row.getVisibleCells().map((cell, cellIndex) => {
57810
+ const sticky = stickyCellProps(
57811
+ stickyColumns,
57812
+ cell.column.id,
57813
+ "cell"
57814
+ );
57815
+ return /* @__PURE__ */ jsx(
57816
+ TableCell,
57817
+ {
57818
+ className: cn(
57819
+ "px-2 py-4",
57820
+ // One line by default: narrow screens scroll the table rather
57821
+ // than squashing every column into a stack of words.
57822
+ getColumnMeta(cell.column)?.wrap ? "min-w-64 whitespace-normal" : "whitespace-nowrap",
57823
+ showBorder && cellIndex === 0 && "pl-4",
57824
+ sticky.className
57825
+ ),
57826
+ style: sticky.style,
57827
+ children: flexRender(cell.column.columnDef.cell, cell.getContext())
57828
+ },
57829
+ cell.id
57830
+ );
57831
+ })
57431
57832
  },
57432
57833
  row.id
57433
57834
  )) });
57434
57835
  }
57836
+ var BREAKPOINTS = {
57837
+ sm: 384,
57838
+ md: 448,
57839
+ lg: 512,
57840
+ xl: 576,
57841
+ "2xl": 672,
57842
+ "3xl": 768,
57843
+ "4xl": 896,
57844
+ "5xl": 1024,
57845
+ "6xl": 1152,
57846
+ "7xl": 1280
57847
+ };
57848
+ function minWidth(hideBelow) {
57849
+ return typeof hideBelow === "number" ? hideBelow : hideBelow && BREAKPOINTS[hideBelow];
57850
+ }
57851
+ function useElementWidth(ref, enabled) {
57852
+ const [width2, setWidth] = useState(null);
57853
+ useLayoutEffect(() => {
57854
+ const el = ref.current;
57855
+ if (!enabled || !el) return;
57856
+ const measure = () => setWidth(el.getBoundingClientRect().width);
57857
+ measure();
57858
+ if (typeof ResizeObserver === "undefined") return;
57859
+ const observer = new ResizeObserver(measure);
57860
+ observer.observe(el);
57861
+ return () => observer.disconnect();
57862
+ }, [ref, enabled]);
57863
+ return enabled ? width2 : null;
57864
+ }
57865
+ function useResponsiveColumnVisibility(ref, columns, setColumnVisibility) {
57866
+ const responsive = columns.filter(
57867
+ (column) => minWidth(getColumnMeta(column)?.hideBelow) !== void 0
57868
+ );
57869
+ const width2 = useElementWidth(ref, responsive.length > 0);
57870
+ const hiddenKey = width2 === null ? null : responsive.filter((column) => width2 < minWidth(getColumnMeta(column)?.hideBelow)).map((column) => column.id).join("\0");
57871
+ useLayoutEffect(() => {
57872
+ if (hiddenKey === null) return;
57873
+ const hidden = new Set(hiddenKey.split("\0"));
57874
+ setColumnVisibility((prev) => {
57875
+ let next = null;
57876
+ for (const column of responsive) {
57877
+ const visible = !hidden.has(column.id) && !getColumnMeta(column)?.defaultHidden;
57878
+ if ((prev[column.id] ?? true) !== visible) {
57879
+ next ?? (next = { ...prev });
57880
+ next[column.id] = visible;
57881
+ }
57882
+ }
57883
+ return next ?? prev;
57884
+ });
57885
+ }, [hiddenKey, setColumnVisibility]);
57886
+ }
57887
+ var edgeShadowClass = "pointer-events-none absolute inset-y-0 z-[3] w-4 from-black/10 to-transparent opacity-0 transition-opacity dark:from-black/40";
57435
57888
  function DataTable({
57436
57889
  columns,
57437
57890
  data: data2,
@@ -57482,7 +57935,7 @@ function DataTable({
57482
57935
  }
57483
57936
  );
57484
57937
  const selectColumn = useMemo(() => ({
57485
- id: "__select",
57938
+ id: SELECT_COLUMN_ID,
57486
57939
  enableHiding: false,
57487
57940
  enableSorting: false,
57488
57941
  size: 40,
@@ -57532,6 +57985,27 @@ function DataTable({
57532
57985
  getCoreRowModel: getCoreRowModel(),
57533
57986
  getPaginationRowModel: getPaginationRowModel()
57534
57987
  });
57988
+ const rootRef = useRef(null);
57989
+ useResponsiveColumnVisibility(
57990
+ rootRef,
57991
+ table.getAllLeafColumns(),
57992
+ setColumnVisibility
57993
+ );
57994
+ const tableRef = useRef(null);
57995
+ const scrollerRef = useRef(null);
57996
+ const overflow = useScrollOverflow(scrollerRef, {
57997
+ getContent: (scroller) => scroller.querySelector("table")
57998
+ });
57999
+ const visibleColumns = table.getVisibleLeafColumns();
58000
+ const stickyOffsets = useStickyOffsets(
58001
+ tableRef,
58002
+ countStickyColumns(visibleColumns)
58003
+ );
58004
+ const stickyColumns = useMemo(
58005
+ () => buildStickyColumns(visibleColumns, stickyOffsets),
58006
+ [visibleColumns, stickyOffsets]
58007
+ );
58008
+ const hasStickyColumns = stickyColumns.size > 0;
57535
58009
  const { columnVisibilityItems, columnVisibilityCheckedState } = useMemo(() => {
57536
58010
  const def = (c) => c;
57537
58011
  const hideableDefs = columns.filter((col) => def(col).enableHiding !== false);
@@ -57555,9 +58029,11 @@ function DataTable({
57555
58029
  return pageSizeOptions.includes(pageSize) ? pageSizeOptions : [...pageSizeOptions, pageSize].sort((a, b) => a - b);
57556
58030
  }, [canChangePageSize, pageSizeOptions, pageSize]);
57557
58031
  const showToolbar = tableActionsContent || showColumnVisibilitySelector;
57558
- return /* @__PURE__ */ jsxs("div", { className: cn("space-y-3", className), children: [
57559
- showToolbar && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 data-table-toolbar", children: [
57560
- tableActionsContent && /* @__PURE__ */ jsx("div", { className: "flex-1", children: tableActionsContent }),
58032
+ return /* @__PURE__ */ jsxs("div", { ref: rootRef, className: cn("space-y-3", className), children: [
58033
+ showToolbar && /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-3 data-table-toolbar", children: [
58034
+ tableActionsContent && // Grows to fill the row, and wraps above the Columns button once
58035
+ // it would get narrower than 16rem.
58036
+ /* @__PURE__ */ jsx("div", { className: "min-w-0 flex-[1_1_16rem]", children: tableActionsContent }),
57561
58037
  showColumnVisibilitySelector && /* @__PURE__ */ jsx("div", { className: "ml-auto", children: /* @__PURE__ */ jsx(
57562
58038
  TogglableItemsList,
57563
58039
  {
@@ -57570,41 +58046,69 @@ function DataTable({
57570
58046
  }
57571
58047
  ) })
57572
58048
  ] }),
57573
- /* @__PURE__ */ jsx(
58049
+ /* @__PURE__ */ jsxs(
57574
58050
  "div",
57575
58051
  {
58052
+ "data-overflow-start": overflow.start || void 0,
58053
+ "data-overflow-end": overflow.end || void 0,
57576
58054
  className: cn(
57577
- "overflow-hidden rounded-md data-table-container",
58055
+ "group/data-table relative overflow-hidden rounded-md data-table-container",
57578
58056
  showToolbar && "mt-6",
57579
58057
  showBorder && "border border-border/50"
57580
58058
  ),
57581
- children: /* @__PURE__ */ jsxs(Table, { children: [
58059
+ children: [
58060
+ /* @__PURE__ */ jsxs(Table, { ref: tableRef, containerRef: scrollerRef, children: [
58061
+ /* @__PURE__ */ jsx(
58062
+ DataTableHeader,
58063
+ {
58064
+ headerGroups: table.getHeaderGroups(),
58065
+ showBorder,
58066
+ stickyColumns
58067
+ }
58068
+ ),
58069
+ /* @__PURE__ */ jsx(
58070
+ DataTableBody,
58071
+ {
58072
+ rows: table.getRowModel().rows,
58073
+ columnCount: tableColumns.length,
58074
+ isFetching,
58075
+ pageSize,
58076
+ noResultsHeading,
58077
+ noResultsDescription,
58078
+ noResultsAction,
58079
+ noResultsIllustration,
58080
+ hideNoResultsIllustration,
58081
+ onRowClick,
58082
+ showBorder,
58083
+ tableRowClassName,
58084
+ getRowClassName,
58085
+ stickyColumns
58086
+ }
58087
+ )
58088
+ ] }),
57582
58089
  /* @__PURE__ */ jsx(
57583
- DataTableHeader,
58090
+ "div",
57584
58091
  {
57585
- headerGroups: table.getHeaderGroups(),
57586
- showBorder
58092
+ "aria-hidden": true,
58093
+ className: cn(
58094
+ edgeShadowClass,
58095
+ "left-0 bg-linear-to-r",
58096
+ overflow.start && !hasStickyColumns && "opacity-100"
58097
+ )
57587
58098
  }
57588
58099
  ),
57589
58100
  /* @__PURE__ */ jsx(
57590
- DataTableBody,
57591
- {
57592
- rows: table.getRowModel().rows,
57593
- columnCount: tableColumns.length,
57594
- isFetching,
57595
- pageSize,
57596
- noResultsHeading,
57597
- noResultsDescription,
57598
- noResultsAction,
57599
- noResultsIllustration,
57600
- hideNoResultsIllustration,
57601
- onRowClick,
57602
- showBorder,
57603
- tableRowClassName,
57604
- getRowClassName
58101
+ "div",
58102
+ {
58103
+ "aria-hidden": true,
58104
+ className: cn(
58105
+ edgeShadowClass,
58106
+ "right-0 bg-linear-to-l",
58107
+ overflow.end && "opacity-100"
58108
+ )
57605
58109
  }
57606
58110
  )
57607
- ] })
58111
+ ]
57608
58112
  }
57609
58113
  ),
57610
58114
  !hidePaginationControls && /* @__PURE__ */ jsx(
@@ -57953,7 +58457,7 @@ var userTypeBadgeMetallicClasses = cn(
57953
58457
  "after:bg-[linear-gradient(315deg,rgba(255,255,255,0.24)_0%,rgba(255,255,255,0.04)_36%,rgba(0,0,0,0.16)_72%,rgba(255,255,255,0.12)_100%)]",
57954
58458
  "after:opacity-0 after:transition-opacity after:duration-[1800ms] after:ease-in-out hover:after:opacity-100"
57955
58459
  );
57956
- var UserTypeBadge = React10.forwardRef(
58460
+ var UserTypeBadge = React11.forwardRef(
57957
58461
  ({ userType, size = "default", className, ...props }, ref) => {
57958
58462
  const { color, icon: Icon2, label } = userTypeBadgeRegistry[userType];
57959
58463
  return /* @__PURE__ */ jsx("div", { ref, className: "inline-block", ...props, children: /* @__PURE__ */ jsxs(
@@ -57977,7 +58481,7 @@ var UserTypeBadge = React10.forwardRef(
57977
58481
  UserTypeBadge.displayName = "UserTypeBadge";
57978
58482
  function renderStatusBadgeIcon(icon, px) {
57979
58483
  if (!icon) return null;
57980
- if (React10.isValidElement(icon)) return icon;
58484
+ if (React11.isValidElement(icon)) return icon;
57981
58485
  const Icon2 = icon;
57982
58486
  return /* @__PURE__ */ jsx(Icon2, { size: px, "aria-hidden": true });
57983
58487
  }
@@ -58014,7 +58518,7 @@ var statusBadgeSizeVariants = cva(
58014
58518
  }
58015
58519
  }
58016
58520
  );
58017
- var StatusBadge = React10.forwardRef(
58521
+ var StatusBadge = React11.forwardRef(
58018
58522
  ({
58019
58523
  label,
58020
58524
  icon: Icon2,
@@ -58127,7 +58631,7 @@ var deleteButtonVariantClasses = {
58127
58631
  gradient: "bg-error/10 text-error hover:bg-error/15 hover:text-error",
58128
58632
  solid: "bg-error/20 text-error-foreground hover:bg-error/30 hover:text-error-foreground"
58129
58633
  };
58130
- var Tag = React10.forwardRef(
58634
+ var Tag = React11.forwardRef(
58131
58635
  ({
58132
58636
  name: name2,
58133
58637
  value: value2,
@@ -58206,7 +58710,7 @@ function parseNameValueTag(tag) {
58206
58710
  if (i <= 0 || i >= tag.length - 1) return null;
58207
58711
  return { name: tag.slice(0, i), value: tag.slice(i + 1) };
58208
58712
  }
58209
- var TagInput = React10.forwardRef(
58713
+ var TagInput = React11.forwardRef(
58210
58714
  ({
58211
58715
  tags,
58212
58716
  onTagsChange,
@@ -58233,13 +58737,13 @@ var TagInput = React10.forwardRef(
58233
58737
  onBlur,
58234
58738
  ...restInputProps
58235
58739
  }, ref) => {
58236
- const autoId = React10.useId();
58740
+ const autoId = React11.useId();
58237
58741
  const inputId = id ?? autoId;
58238
- const rootRef = React10.useRef(null);
58239
- const [draft, setDraft] = React10.useState("");
58742
+ const rootRef = React11.useRef(null);
58743
+ const [draft, setDraft] = React11.useState("");
58240
58744
  const effectiveSize = size ?? "default";
58241
58745
  const hasError = error || !!errorContent;
58242
- const tryCommitDraft = React10.useCallback(() => {
58746
+ const tryCommitDraft = React11.useCallback(() => {
58243
58747
  if (disabled || readOnly) return;
58244
58748
  const trimmed = draft.trim();
58245
58749
  if (!trimmed) return;
@@ -59070,9 +59574,9 @@ var SIZE_STYLES2 = {
59070
59574
  function iconSized4(icon, iconPx) {
59071
59575
  if (icon == null) return null;
59072
59576
  const dim = { width: iconPx, height: iconPx };
59073
- if (React10.isValidElement(icon)) {
59577
+ if (React11.isValidElement(icon)) {
59074
59578
  const el = icon;
59075
- return React10.cloneElement(el, {
59579
+ return React11.cloneElement(el, {
59076
59580
  className: cn(el.props.className, "shrink-0"),
59077
59581
  style: { ...el.props.style, ...dim }
59078
59582
  });
@@ -59151,7 +59655,7 @@ function useSimpleClickableCardSurface(options) {
59151
59655
  const s = SIZE_STYLES2[size];
59152
59656
  const styles = resolveVariantStyles(variant, color);
59153
59657
  const isArbitraryGradient = variant === "gradient" && !isPresetColor(color);
59154
- const surfaceStyleWithoutGradientBg = React10.useMemo(() => {
59658
+ const surfaceStyleWithoutGradientBg = React11.useMemo(() => {
59155
59659
  if (!isArbitraryGradient || typeof color !== "string")
59156
59660
  return styles.containerStyle;
59157
59661
  const cs = styles.containerStyle;
@@ -59162,7 +59666,7 @@ function useSimpleClickableCardSurface(options) {
59162
59666
  const presetGradientPair = variant === "gradient" && isPresetColor(color) ? PRESET_GRADIENT_BACKDROP[color] : void 0;
59163
59667
  const surfaceContainerClass = variant === "gradient" && isPresetColor(color) ? PRESET_GRADIENT_FRAME[color] : styles.container;
59164
59668
  const presetRingClasses = isPresetColor(color) ? PRESET_RING_CLASSES_FOCUS_VISIBLE[color] : "";
59165
- const ringAccentStyle = React10.useMemo(() => {
59669
+ const ringAccentStyle = React11.useMemo(() => {
59166
59670
  if (isPresetColor(color)) return void 0;
59167
59671
  if (typeof color !== "string") return void 0;
59168
59672
  return {
@@ -59456,7 +59960,7 @@ function shellPresetRing(color) {
59456
59960
  const c = color ?? "gray";
59457
59961
  return isPresetColor(c) ? PRESET_RING_CLASSES[c] : "";
59458
59962
  }
59459
- var IconTextActionCard = React10.forwardRef(
59963
+ var IconTextActionCard = React11.forwardRef(
59460
59964
  ({
59461
59965
  icon,
59462
59966
  title,
@@ -59744,7 +60248,7 @@ var dismissButtonSizeClasses = {
59744
60248
  default: "size-7 [&_svg]:size-4",
59745
60249
  lg: "size-8 [&_svg]:size-4"
59746
60250
  };
59747
- var Alert = React10.forwardRef(
60251
+ var Alert = React11.forwardRef(
59748
60252
  ({
59749
60253
  icon,
59750
60254
  title,
@@ -59763,8 +60267,8 @@ var Alert = React10.forwardRef(
59763
60267
  dismissLabel = "Close alert",
59764
60268
  className
59765
60269
  }, ref) => {
59766
- const [dismissed, setDismissed] = React10.useState(false);
59767
- const handleDismiss = React10.useCallback(() => {
60270
+ const [dismissed, setDismissed] = React11.useState(false);
60271
+ const handleDismiss = React11.useCallback(() => {
59768
60272
  setDismissed(true);
59769
60273
  onDismiss?.();
59770
60274
  }, [onDismiss]);
@@ -60139,10 +60643,10 @@ function CodeBlock({
60139
60643
  inViewMargin
60140
60644
  }
60141
60645
  );
60142
- const [visibleCode, setVisibleCode] = React10.useState("");
60143
- const [highlightedCode, setHighlightedCode] = React10.useState("");
60144
- const [isDone, setIsDone] = React10.useState(false);
60145
- React10.useEffect(() => {
60646
+ const [visibleCode, setVisibleCode] = React11.useState("");
60647
+ const [highlightedCode, setHighlightedCode] = React11.useState("");
60648
+ const [isDone, setIsDone] = React11.useState(false);
60649
+ React11.useEffect(() => {
60146
60650
  if (!visibleCode.length || !isInView) return;
60147
60651
  const loadHighlightedCode = async () => {
60148
60652
  const normalizedLang = normalizeLang(lang);
@@ -60166,7 +60670,7 @@ function CodeBlock({
60166
60670
  };
60167
60671
  loadHighlightedCode();
60168
60672
  }, [lang, themes, writing, isInView, duration, delay2, visibleCode, theme]);
60169
- React10.useEffect(() => {
60673
+ React11.useEffect(() => {
60170
60674
  if (!writing) {
60171
60675
  setVisibleCode(code);
60172
60676
  onDone?.();
@@ -60213,7 +60717,7 @@ function CodeBlock({
60213
60717
  clearInterval(intervalId);
60214
60718
  };
60215
60719
  }, [code, duration, delay2, isInView, writing, onDone, onWrite, localRef]);
60216
- React10.useEffect(() => {
60720
+ React11.useEffect(() => {
60217
60721
  if (!writing || !isInView) return;
60218
60722
  const el = scrollContainerRef?.current ?? localRef.current?.parentElement ?? localRef.current;
60219
60723
  if (!el) return;
@@ -60277,7 +60781,7 @@ function Code({
60277
60781
  }) {
60278
60782
  const showCopyButton = copyButton !== false && (copyButton === true || copyButton === void 0 && Boolean(lang));
60279
60783
  const showHeader = fileName !== void 0 || showCopyButton;
60280
- const scrollRef = React10.useRef(null);
60784
+ const scrollRef = React11.useRef(null);
60281
60785
  return /* @__PURE__ */ jsxs(
60282
60786
  "div",
60283
60787
  {
@@ -60320,9 +60824,9 @@ var MONOSPACE_SIZE_STYLES = {
60320
60824
  default: { title: "text-sm", value: "text-sm", action: "size-6", gap: "gap-2" },
60321
60825
  lg: { title: "text-base", value: "text-base", action: "size-7", gap: "gap-2.5" }
60322
60826
  };
60323
- var MonospaceContent = React10.forwardRef(
60827
+ var MonospaceContent = React11.forwardRef(
60324
60828
  function MonospaceContent2({ title, value: value2, color = "info", mask: mask2 = false, allowUnmask = true, size = "default", className }, ref) {
60325
- const [revealed, setRevealed] = React10.useState(false);
60829
+ const [revealed, setRevealed] = React11.useState(false);
60326
60830
  const canUnmask = mask2 && allowUnmask;
60327
60831
  const masked = mask2 && !(canUnmask && revealed);
60328
60832
  const sizeStyles9 = MONOSPACE_SIZE_STYLES[size];
@@ -60378,6 +60882,7 @@ var LIST_SIZE_STYLES = {
60378
60882
  sm: {
60379
60883
  listGap: "gap-4",
60380
60884
  rowGap: "gap-3",
60885
+ rowGapFromSm: "sm:gap-3",
60381
60886
  itemGap: "gap-1.5",
60382
60887
  labelTypography: "text-xs font-medium",
60383
60888
  rowValueTypography: "text-xs",
@@ -60387,6 +60892,7 @@ var LIST_SIZE_STYLES = {
60387
60892
  default: {
60388
60893
  listGap: "gap-5",
60389
60894
  rowGap: "gap-4",
60895
+ rowGapFromSm: "sm:gap-4",
60390
60896
  itemGap: "gap-2",
60391
60897
  labelTypography: "text-sm font-medium",
60392
60898
  rowValueTypography: "text-sm",
@@ -60396,6 +60902,7 @@ var LIST_SIZE_STYLES = {
60396
60902
  lg: {
60397
60903
  listGap: "gap-6",
60398
60904
  rowGap: "gap-5",
60905
+ rowGapFromSm: "sm:gap-5",
60399
60906
  itemGap: "gap-3",
60400
60907
  labelTypography: "text-base font-medium",
60401
60908
  rowValueTypography: "text-base",
@@ -60485,21 +60992,33 @@ function ItemRow({
60485
60992
  "div",
60486
60993
  {
60487
60994
  className: cn(
60488
- "flex flex-row items-center min-w-0",
60995
+ "flex flex-row items-start sm:items-center min-w-0",
60489
60996
  listSizeStyles.rowGap,
60490
60997
  item.className
60491
60998
  ),
60492
60999
  children: [
60493
61000
  avatarNode,
60494
- /* @__PURE__ */ jsx("div", { className: "shrink-0", children: labelNode }),
60495
- /* @__PURE__ */ jsx(
61001
+ /* @__PURE__ */ jsxs(
60496
61002
  "div",
60497
61003
  {
60498
61004
  className: cn(
60499
- "min-w-0 flex-1 flex justify-end",
60500
- listSizeStyles.rowValueTypography
61005
+ "flex min-w-0 flex-1 flex-col sm:flex-row sm:items-center",
61006
+ listSizeStyles.itemGap,
61007
+ listSizeStyles.rowGapFromSm
60501
61008
  ),
60502
- children: item.content
61009
+ children: [
61010
+ /* @__PURE__ */ jsx("div", { className: "shrink-0", children: labelNode }),
61011
+ /* @__PURE__ */ jsx(
61012
+ "div",
61013
+ {
61014
+ className: cn(
61015
+ "min-w-0 flex sm:flex-1 sm:justify-end",
61016
+ listSizeStyles.rowValueTypography
61017
+ ),
61018
+ children: item.content
61019
+ }
61020
+ )
61021
+ ]
60503
61022
  }
60504
61023
  )
60505
61024
  ]
@@ -61001,10 +61520,17 @@ function DynamicList({
61001
61520
  const valueRowAlignStart = usesBadgeArrayLayout;
61002
61521
  const needsBlockValueLayout = hasTypedOrEffectiveMetaLayout || usesDefaultStructuredCode || usesBadgeArrayLayout;
61003
61522
  if (rowDir === "row") {
61523
+ const splitStyle = {
61524
+ "--dynamic-list-key-width": `${keyWidthPct}%`,
61525
+ "--dynamic-list-value-width": `${valueWidthPct}%`
61526
+ };
61004
61527
  return /* @__PURE__ */ jsxs(
61005
61528
  "div",
61006
61529
  {
61007
- className: cn("flex w-full min-w-0 items-center", sizeStyles9.rowGap),
61530
+ className: cn(
61531
+ "flex w-full min-w-0 items-start sm:items-center",
61532
+ sizeStyles9.rowGap
61533
+ ),
61008
61534
  children: [
61009
61535
  !hideIcon && /* @__PURE__ */ jsx(Avatar, { className: sizeStyles9.avatarSize, children: /* @__PURE__ */ jsx(
61010
61536
  AvatarFallback,
@@ -61020,19 +61546,20 @@ function DynamicList({
61020
61546
  "div",
61021
61547
  {
61022
61548
  className: cn(
61023
- "flex min-w-0 flex-1 flex-row",
61024
- valueRowAlignStart ? "items-start" : "items-center"
61549
+ "flex min-w-0 flex-1 flex-col sm:flex-row sm:gap-0",
61550
+ sizeStyles9.itemGap,
61551
+ valueRowAlignStart ? "sm:items-start" : "sm:items-center"
61025
61552
  ),
61553
+ style: splitStyle,
61026
61554
  children: [
61027
61555
  /* @__PURE__ */ jsx(
61028
61556
  "span",
61029
61557
  {
61030
61558
  className: cn(
61031
- "truncate",
61559
+ "truncate sm:flex-none sm:basis-[var(--dynamic-list-key-width)]",
61032
61560
  sizeStyles9.labelTypography,
61033
61561
  labelClassName
61034
61562
  ),
61035
- style: { flex: `0 0 ${keyWidthPct}%` },
61036
61563
  children: labelText
61037
61564
  }
61038
61565
  ),
@@ -61040,17 +61567,16 @@ function DynamicList({
61040
61567
  "div",
61041
61568
  {
61042
61569
  className: cn(
61043
- "flex min-w-0 justify-end text-muted-foreground",
61570
+ "flex min-w-0 text-muted-foreground sm:flex-none sm:basis-[var(--dynamic-list-value-width)] sm:justify-end",
61044
61571
  sizeStyles9.valueTypography,
61045
- usesBadgeArrayLayout ? "flex-1 items-start pt-0.5 text-start" : "items-center"
61572
+ usesBadgeArrayLayout ? "items-start sm:pt-0.5 text-start" : "items-center"
61046
61573
  ),
61047
- style: { flex: `0 0 ${valueWidthPct}%` },
61048
61574
  children: /* @__PURE__ */ jsx(
61049
61575
  "div",
61050
61576
  {
61051
61577
  className: cn(
61052
61578
  "min-w-0 max-w-full",
61053
- !usesBadgeArrayLayout && "truncate text-end",
61579
+ !usesBadgeArrayLayout && "sm:truncate sm:text-end",
61054
61580
  valueClassName
61055
61581
  ),
61056
61582
  children: valueDisplay
@@ -61203,7 +61729,8 @@ function KeyValueManagerAddPopover({
61203
61729
  meta,
61204
61730
  labels,
61205
61731
  maxAllowed,
61206
- onUpdate
61732
+ onUpdate,
61733
+ triggerClassName
61207
61734
  }) {
61208
61735
  const [open, setOpen] = useState(false);
61209
61736
  const [draftKey, setDraftKey] = useState("");
@@ -61266,9 +61793,9 @@ function KeyValueManagerAddPopover({
61266
61793
  color: "primary",
61267
61794
  fullWidth: false,
61268
61795
  disabled: atLimit,
61269
- className: "shrink-0",
61796
+ className: cn("shrink-0 max-sm:size-9 max-sm:gap-0 max-sm:px-0", triggerClassName),
61270
61797
  startIcon: /* @__PURE__ */ jsx(Plus, {}),
61271
- children: labels.add
61798
+ children: /* @__PURE__ */ jsx("span", { className: "max-sm:sr-only", children: labels.add })
61272
61799
  }
61273
61800
  ) }),
61274
61801
  /* @__PURE__ */ jsxs(PopoverContent, { align: "end", className: "w-80 space-y-4", children: [
@@ -61366,8 +61893,44 @@ function KeyValueManagerTable({
61366
61893
  setDirection(1);
61367
61894
  setPage((current) => current + 1);
61368
61895
  };
61896
+ const deleteButton = (item, sourceIndex, className) => /* @__PURE__ */ jsx(
61897
+ Button,
61898
+ {
61899
+ type: "button",
61900
+ variant: "ghost",
61901
+ color: "error",
61902
+ size: "icon",
61903
+ fullWidth: false,
61904
+ "aria-label": `Delete ${item.key}`,
61905
+ className,
61906
+ onClick: () => onDelete(sourceIndex),
61907
+ children: /* @__PURE__ */ jsx(Trash2, { className: "h-4 w-4", "aria-hidden": true })
61908
+ }
61909
+ );
61910
+ const emptyMessage = hasSearchQuery ? emptySearch : emptyItems;
61369
61911
  return /* @__PURE__ */ jsxs("div", { className: "w-full", children: [
61370
- /* @__PURE__ */ jsxs(Table, { children: [
61912
+ /* @__PURE__ */ jsx("div", { className: "overflow-hidden sm:hidden", children: noRows ? /* @__PURE__ */ jsx("p", { className: "py-8 text-center text-sm text-muted-foreground", children: emptyMessage }) : /* @__PURE__ */ jsx(AnimatePresence, { mode: "wait", custom: direction, initial: false, children: /* @__PURE__ */ jsx(
61913
+ motion.ul,
61914
+ {
61915
+ custom: direction,
61916
+ variants: slideVariants,
61917
+ initial: "enter",
61918
+ animate: "center",
61919
+ exit: "exit",
61920
+ transition: slideTransition,
61921
+ className: "divide-y divide-border",
61922
+ children: pageRows.map(({ item, sourceIndex }) => /* @__PURE__ */ jsx("li", { className: "py-3", children: /* @__PURE__ */ jsx(
61923
+ BasicDetailsCard,
61924
+ {
61925
+ primaryText: /* @__PURE__ */ jsx("span", { className: "block truncate", children: item.key }),
61926
+ secondaryText: item.value,
61927
+ action: deleteButton(item, sourceIndex)
61928
+ }
61929
+ ) }, `${sourceIndex}-${item.key}`))
61930
+ },
61931
+ page
61932
+ ) }) }),
61933
+ /* @__PURE__ */ jsxs(Table, { containerClassName: "hidden sm:block", children: [
61371
61934
  /* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
61372
61935
  /* @__PURE__ */ jsx(TableHead, { children: keyLabel }),
61373
61936
  /* @__PURE__ */ jsx(TableHead, { children: valueLabel }),
@@ -61378,7 +61941,7 @@ function KeyValueManagerTable({
61378
61941
  {
61379
61942
  colSpan: 3,
61380
61943
  className: "py-8 text-center text-muted-foreground",
61381
- children: hasSearchQuery ? emptySearch : emptyItems
61944
+ children: emptyMessage
61382
61945
  }
61383
61946
  ) }) : /* @__PURE__ */ jsx(AnimatePresence, { mode: "wait", custom: direction, children: /* @__PURE__ */ jsx(
61384
61947
  motion.tr,
@@ -61393,22 +61956,15 @@ function KeyValueManagerTable({
61393
61956
  children: pageRows.map(({ item, sourceIndex }) => /* @__PURE__ */ jsxs(TableRow, { className: "group", children: [
61394
61957
  /* @__PURE__ */ jsx(TableCell, { className: "max-w-[200px] truncate font-medium", children: item.key }),
61395
61958
  /* @__PURE__ */ jsx(TableCell, { className: "max-w-[300px] truncate", children: item.value }),
61396
- /* @__PURE__ */ jsx(TableCell, { className: "text-right", children: /* @__PURE__ */ jsx(
61397
- Button,
61398
- {
61399
- type: "button",
61400
- variant: "ghost",
61401
- color: "error",
61402
- size: "icon",
61403
- fullWidth: false,
61404
- "aria-label": `Delete ${item.key}`,
61405
- className: cn(
61406
- "pointer-events-none opacity-0 transition-opacity",
61407
- "group-hover:pointer-events-auto group-hover:opacity-100"
61408
- ),
61409
- onClick: () => onDelete(sourceIndex),
61410
- children: /* @__PURE__ */ jsx(Trash2, { className: "h-4 w-4", "aria-hidden": true })
61411
- }
61959
+ /* @__PURE__ */ jsx(TableCell, { className: "text-right", children: deleteButton(
61960
+ item,
61961
+ sourceIndex,
61962
+ cn(
61963
+ "pointer-events-none opacity-0 transition-opacity",
61964
+ "group-hover:pointer-events-auto group-hover:opacity-100",
61965
+ // Keyboard users tab to it, so show it when focused.
61966
+ "focus-visible:opacity-100"
61967
+ )
61412
61968
  ) })
61413
61969
  ] }, `${sourceIndex}-${item.key}`))
61414
61970
  },
@@ -61451,6 +62007,7 @@ function KeyValueManagerTable({
61451
62007
  // src/components/key-value-manager/key-value-manager.props.ts
61452
62008
  var STATIC_DEFAULT_LABELS = {
61453
62009
  add: "Add",
62010
+ closeSearch: "Close search",
61454
62011
  keyErrorMessage: "Invalid key",
61455
62012
  valueErrorMessage: "Invalid value",
61456
62013
  successMessage: "Added successfully",
@@ -61477,6 +62034,27 @@ function KeyValueManager({
61477
62034
  }) {
61478
62035
  const labels = resolveKeyValueManagerLabels(labelsProp);
61479
62036
  const [searchQuery, setSearchQuery] = useState("");
62037
+ const [searchOpen, setSearchOpen] = useState(false);
62038
+ const [searchBoxKey, setSearchBoxKey] = useState(0);
62039
+ const toolbarRef = useRef(null);
62040
+ const searchButtonRef = useRef(null);
62041
+ const returnFocusRef = useRef(false);
62042
+ const searchExpanded = searchOpen || searchQuery !== "";
62043
+ useEffect(() => {
62044
+ if (searchOpen) toolbarRef.current?.querySelector("input")?.focus();
62045
+ }, [searchOpen]);
62046
+ useEffect(() => {
62047
+ if (!searchExpanded && returnFocusRef.current) {
62048
+ returnFocusRef.current = false;
62049
+ searchButtonRef.current?.focus();
62050
+ }
62051
+ }, [searchExpanded]);
62052
+ const closeSearch = () => {
62053
+ returnFocusRef.current = true;
62054
+ setSearchOpen(false);
62055
+ setSearchQuery("");
62056
+ setSearchBoxKey((key2) => key2 + 1);
62057
+ };
61480
62058
  const filteredRows = useMemo(
61481
62059
  () => filterKeyValueRows(items, searchQuery),
61482
62060
  [items, searchQuery]
@@ -61485,28 +62063,71 @@ function KeyValueManager({
61485
62063
  onUpdate(items.filter((_, index2) => index2 !== sourceIndex));
61486
62064
  };
61487
62065
  return /* @__PURE__ */ jsxs("div", { className: cn("flex w-full flex-col gap-4", className), children: [
61488
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
61489
- /* @__PURE__ */ jsx(
61490
- SearchBox,
61491
- {
61492
- className: "min-w-0 flex-1",
61493
- placeholder: labels.search,
61494
- onSearch: setSearchQuery,
61495
- onClear: () => setSearchQuery(""),
61496
- onValueChange: setSearchQuery
61497
- }
61498
- ),
61499
- /* @__PURE__ */ jsx(
61500
- KeyValueManagerAddPopover,
61501
- {
61502
- items,
61503
- meta,
61504
- labels,
61505
- maxAllowed,
61506
- onUpdate
61507
- }
61508
- )
61509
- ] }),
62066
+ /* @__PURE__ */ jsxs(
62067
+ "div",
62068
+ {
62069
+ ref: toolbarRef,
62070
+ className: "flex items-center gap-3 max-sm:gap-1",
62071
+ onKeyDown: (e) => {
62072
+ const inToolbar = toolbarRef.current?.contains(e.target);
62073
+ if (e.key === "Escape" && searchOpen && inToolbar) closeSearch();
62074
+ },
62075
+ children: [
62076
+ /* @__PURE__ */ jsx("div", { className: cn("flex-1 sm:hidden", searchExpanded && "hidden") }),
62077
+ /* @__PURE__ */ jsx(
62078
+ Button,
62079
+ {
62080
+ type: "button",
62081
+ variant: "ghost",
62082
+ color: "primary",
62083
+ size: "icon",
62084
+ fullWidth: false,
62085
+ ref: searchButtonRef,
62086
+ "aria-label": labels.search,
62087
+ className: cn("sm:hidden", searchExpanded && "hidden"),
62088
+ onClick: () => setSearchOpen(true),
62089
+ children: /* @__PURE__ */ jsx(Search, { className: "h-4 w-4", "aria-hidden": true })
62090
+ }
62091
+ ),
62092
+ /* @__PURE__ */ jsx(
62093
+ SearchBox,
62094
+ {
62095
+ className: cn("min-w-0 flex-1", !searchExpanded && "max-sm:hidden"),
62096
+ placeholder: labels.search,
62097
+ onSearch: setSearchQuery,
62098
+ onClear: () => setSearchQuery(""),
62099
+ onValueChange: setSearchQuery
62100
+ },
62101
+ searchBoxKey
62102
+ ),
62103
+ /* @__PURE__ */ jsx(
62104
+ Button,
62105
+ {
62106
+ type: "button",
62107
+ variant: "ghost",
62108
+ color: "gray",
62109
+ size: "icon",
62110
+ fullWidth: false,
62111
+ "aria-label": labels.closeSearch,
62112
+ className: cn("shrink-0 sm:hidden", !searchExpanded && "hidden"),
62113
+ onClick: closeSearch,
62114
+ children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4", "aria-hidden": true })
62115
+ }
62116
+ ),
62117
+ /* @__PURE__ */ jsx(
62118
+ KeyValueManagerAddPopover,
62119
+ {
62120
+ items,
62121
+ meta,
62122
+ labels,
62123
+ maxAllowed,
62124
+ onUpdate,
62125
+ triggerClassName: cn(searchExpanded && "max-sm:hidden")
62126
+ }
62127
+ )
62128
+ ]
62129
+ }
62130
+ ),
61510
62131
  /* @__PURE__ */ jsx(
61511
62132
  KeyValueManagerTable,
61512
62133
  {
@@ -61774,7 +62395,7 @@ function SimplePaginatedList({
61774
62395
  ] }) : null
61775
62396
  ] });
61776
62397
  }
61777
- var ToastDefaultVariantContext = React10.createContext(void 0);
62398
+ var ToastDefaultVariantContext = React11.createContext(void 0);
61778
62399
  var typeIconMap2 = {
61779
62400
  error: /* @__PURE__ */ jsx(CircleX, { className: "h-4 w-4" }),
61780
62401
  info: /* @__PURE__ */ jsx(Info, { className: "h-4 w-4" }),
@@ -61793,7 +62414,7 @@ function defaultIconFromColor2(color) {
61793
62414
  return type != null ? typeIconMap2[type] : void 0;
61794
62415
  }
61795
62416
  function isToastProps(input) {
61796
- return input != null && typeof input === "object" && !React10.isValidElement(input) && ("title" in input || "children" in input || "type" in input || "color" in input || "icon" in input || "hideIcon" in input || "action" in input || "variant" in input);
62417
+ return input != null && typeof input === "object" && !React11.isValidElement(input) && ("title" in input || "children" in input || "type" in input || "color" in input || "icon" in input || "hideIcon" in input || "action" in input || "variant" in input);
61797
62418
  }
61798
62419
  function normalizeToastInput(input, type) {
61799
62420
  if (isToastProps(input)) {
@@ -61817,7 +62438,7 @@ function resolveToastOptions(props, options) {
61817
62438
  closeButton: options?.closeButton
61818
62439
  };
61819
62440
  }
61820
- var Toast = React10.forwardRef(
62441
+ var Toast = React11.forwardRef(
61821
62442
  ({
61822
62443
  icon,
61823
62444
  title,
@@ -61829,7 +62450,7 @@ var Toast = React10.forwardRef(
61829
62450
  action,
61830
62451
  className
61831
62452
  }, ref) => {
61832
- const defaultVariantFromToaster = React10.useContext(
62453
+ const defaultVariantFromToaster = React11.useContext(
61833
62454
  ToastDefaultVariantContext
61834
62455
  );
61835
62456
  const resolvedVariant = variant ?? defaultVariantFromToaster ?? "soft";
@@ -61876,7 +62497,7 @@ var Toast = React10.forwardRef(
61876
62497
  }
61877
62498
  );
61878
62499
  Toast.displayName = "Toast";
61879
- var Toaster = React10.forwardRef(
62500
+ var Toaster = React11.forwardRef(
61880
62501
  ({
61881
62502
  position: position2 = "top-right",
61882
62503
  closeButton = true,
@@ -62005,9 +62626,9 @@ function createMarkdownComponents({
62005
62626
  }
62006
62627
  var REMARK_PLUGINS = [remarkGfm];
62007
62628
  var REHYPE_PLUGINS = [rehypeSlug];
62008
- var MarkdownContent = React10.forwardRef(
62629
+ var MarkdownContent = React11.forwardRef(
62009
62630
  function MarkdownContent2({ content: content3, linkComponent, colorTheme, className }, ref) {
62010
- const components = React10.useMemo(
62631
+ const components = React11.useMemo(
62011
62632
  () => createMarkdownComponents({ linkComponent, colorTheme }),
62012
62633
  [linkComponent, colorTheme]
62013
62634
  );
@@ -67588,7 +68209,7 @@ function strokeResolvedStyle(color, opacity) {
67588
68209
  return { stroke: mix };
67589
68210
  }
67590
68211
  var labelTypographyClass = "whitespace-nowrap text-center leading-none font-semibold tracking-tight tabular-nums";
67591
- var CircularProgress = React10.forwardRef(
68212
+ var CircularProgress = React11.forwardRef(
67592
68213
  function CircularProgress2({
67593
68214
  value: value2,
67594
68215
  showPercentage = false,
@@ -67716,13 +68337,13 @@ function CountingNumber({
67716
68337
  const decimals = typeof decimalPlaces === "number" ? decimalPlaces : numberStr.includes(".") ? numberStr.split(".")[1]?.length ?? 0 : 0;
67717
68338
  const motionVal = useMotionValue(initiallyStable ? number : fromNumber);
67718
68339
  const springVal = useSpring(motionVal, transition);
67719
- React10.useEffect(() => {
68340
+ React11.useEffect(() => {
67720
68341
  const timeoutId = setTimeout(() => {
67721
68342
  if (isInView) motionVal.set(number);
67722
68343
  }, delay2);
67723
68344
  return () => clearTimeout(timeoutId);
67724
68345
  }, [isInView, number, motionVal, delay2]);
67725
- React10.useEffect(() => {
68346
+ React11.useEffect(() => {
67726
68347
  const unsubscribe = springVal.on("change", (latest) => {
67727
68348
  if (localRef.current) {
67728
68349
  let formatted = decimals > 0 ? latest.toFixed(decimals) : Math.round(latest).toString();
@@ -67866,9 +68487,9 @@ function ProgressBar({
67866
68487
  className,
67867
68488
  ...props
67868
68489
  }) {
67869
- const [fakeValue, setFakeValue] = React10.useState(FAKE_PROGRESS_MIN);
67870
- const intervalRef = React10.useRef(null);
67871
- React10.useEffect(() => {
68490
+ const [fakeValue, setFakeValue] = React11.useState(FAKE_PROGRESS_MIN);
68491
+ const intervalRef = React11.useRef(null);
68492
+ React11.useEffect(() => {
67872
68493
  if (!showFakeProgress) return;
67873
68494
  if (intervalRef.current) clearInterval(intervalRef.current);
67874
68495
  setFakeValue(FAKE_PROGRESS_MIN);
@@ -68000,7 +68621,7 @@ function trailingChevronRow(options) {
68000
68621
  }
68001
68622
  );
68002
68623
  }
68003
- var SimpleClickableCard = React10.forwardRef(
68624
+ var SimpleClickableCard = React11.forwardRef(
68004
68625
  ({
68005
68626
  icon,
68006
68627
  leadingIcon,
@@ -68156,7 +68777,7 @@ function infoTriggerIconFgClass(variant, cardColor, infoButtonColor) {
68156
68777
  }
68157
68778
  return INFO_ICON_FG_CLASS[infoButtonColor];
68158
68779
  }
68159
- var SimpleInfoCard = React10.forwardRef(
68780
+ var SimpleInfoCard = React11.forwardRef(
68160
68781
  ({
68161
68782
  icon,
68162
68783
  title,
@@ -68407,8 +69028,8 @@ function applyEdit(el, edit) {
68407
69028
  el.setSelectionRange(edit.selectionStart, edit.selectionEnd);
68408
69029
  }
68409
69030
  function useCodeEditorKeys({ tabSize, onKeyDown, onBlur }) {
68410
- const tabReleasedRef = React10.useRef(false);
68411
- const handleKeyDown = React10.useCallback(
69031
+ const tabReleasedRef = React11.useRef(false);
69032
+ const handleKeyDown = React11.useCallback(
68412
69033
  (event) => {
68413
69034
  onKeyDown?.(event);
68414
69035
  if (event.defaultPrevented) return;
@@ -68442,7 +69063,7 @@ function useCodeEditorKeys({ tabSize, onKeyDown, onBlur }) {
68442
69063
  },
68443
69064
  [onKeyDown, tabSize]
68444
69065
  );
68445
- const handleBlur = React10.useCallback(
69066
+ const handleBlur = React11.useCallback(
68446
69067
  (event) => {
68447
69068
  tabReleasedRef.current = false;
68448
69069
  onBlur?.(event);
@@ -68477,11 +69098,11 @@ function warnOnce(key2, message, error) {
68477
69098
  }
68478
69099
  var resolved = /* @__PURE__ */ new WeakMap();
68479
69100
  function useHighlightedHtml(value2, { lang, theme, themes, maxHighlightLength }) {
68480
- const [highlighter, setHighlighter] = React10.useState(() => {
69101
+ const [highlighter, setHighlighter] = React11.useState(() => {
68481
69102
  const promise = getHighlighter();
68482
69103
  return resolved.get(promise) ?? null;
68483
69104
  });
68484
- React10.useEffect(() => {
69105
+ React11.useEffect(() => {
68485
69106
  if (highlighter) return;
68486
69107
  let active2 = true;
68487
69108
  const promise = getHighlighter();
@@ -68496,9 +69117,9 @@ function useHighlightedHtml(value2, { lang, theme, themes, maxHighlightLength })
68496
69117
  active2 = false;
68497
69118
  };
68498
69119
  }, [highlighter]);
68499
- const deferredValue = React10.useDeferredValue(value2);
69120
+ const deferredValue = React11.useDeferredValue(value2);
68500
69121
  const { light, dark } = themes;
68501
- return React10.useMemo(() => {
69122
+ return React11.useMemo(() => {
68502
69123
  if (!highlighter || deferredValue.length > maxHighlightLength) {
68503
69124
  return plainHtml(deferredValue);
68504
69125
  }
@@ -68561,7 +69182,7 @@ function hasContent(node) {
68561
69182
  function toCssSize(size) {
68562
69183
  return typeof size === "number" ? `${size}px` : size;
68563
69184
  }
68564
- var CodeEditor = React10.forwardRef(
69185
+ var CodeEditor = React11.forwardRef(
68565
69186
  ({
68566
69187
  className,
68567
69188
  style,
@@ -68600,12 +69221,12 @@ var CodeEditor = React10.forwardRef(
68600
69221
  "aria-describedby": ariaDescribedBy,
68601
69222
  ...textareaProps
68602
69223
  }, forwardedRef) => {
68603
- const autoId = React10.useId();
69224
+ const autoId = React11.useId();
68604
69225
  const textareaId = id || autoId;
68605
69226
  const errorId = `${textareaId}-error`;
68606
69227
  const hasError = error || !!errorContent;
68607
69228
  const isControlled = value2 !== void 0;
68608
- const [innerValue, setInnerValue] = React10.useState(
69229
+ const [innerValue, setInnerValue] = React11.useState(
68609
69230
  () => defaultValue == null ? "" : String(defaultValue)
68610
69231
  );
68611
69232
  const currentValue = isControlled ? String(value2 ?? "") : innerValue;
@@ -68616,9 +69237,9 @@ var CodeEditor = React10.forwardRef(
68616
69237
  maxHighlightLength
68617
69238
  });
68618
69239
  const keys = useCodeEditorKeys({ tabSize, onKeyDown, onBlur });
68619
- const textareaRef = React10.useRef(null);
68620
- const stopObservingRef = React10.useRef(void 0);
68621
- const setTextareaRef = React10.useCallback(
69240
+ const textareaRef = React11.useRef(null);
69241
+ const stopObservingRef = React11.useRef(void 0);
69242
+ const setTextareaRef = React11.useCallback(
68622
69243
  (node) => {
68623
69244
  textareaRef.current = node;
68624
69245
  stopObservingRef.current?.();
@@ -68796,7 +69417,7 @@ var maxWidthClasses = {
68796
69417
  lg: "max-w-5xl",
68797
69418
  xl: "max-w-7xl"
68798
69419
  };
68799
- var ContentContainer = React10.forwardRef(
69420
+ var ContentContainer = React11.forwardRef(
68800
69421
  function ContentContainer2({ maxWidth, children, className, noGutters = false }, ref) {
68801
69422
  return /* @__PURE__ */ jsx(
68802
69423
  "div",