@espressif/dashboard-ui-components 1.4.0 → 1.6.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,9 +1,9 @@
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-KCMVLNM5.js';
2
- import { 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-UHRNPXO5.js';
3
- import { getStrictContext, buttonVariants, Separator, CollapsibleContent, Collapsible, CollapsibleTrigger, useIsMobile, useControlledState, Button as Button$1, Skeleton, Avatar, AvatarFallback } from './chunk-7BO76CNB.js';
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-ZEQNTNMW.js';
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, FileCheck, CheckCheck, TriangleAlert, CircleX, Menu, ChevronsUpDown, ChevronLeftIcon, ChevronRightIcon, ChevronDownIcon, CalendarIcon, CalendarRangeIcon, CheckIcon, ChevronLeft, Columns2, ChevronsRight, ChevronsLeft, XIcon, MoveLeft, CircleIcon, Bolt, Plus, Trash2, Clock, XCircle, CheckCircle2 } from 'lucide-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, 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
7
  import * as React10 from 'react';
8
8
  import React10__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';
@@ -24,7 +24,7 @@ import Autoplay from 'embla-carousel-autoplay';
24
24
  import useEmblaCarousel from 'embla-carousel-react';
25
25
  import { Command as Command$1 } from 'cmdk';
26
26
  import { getDefaultClassNames, DayPicker } from 'react-day-picker';
27
- import { format, endOfMonth, startOfMonth, sub, endOfDay, startOfDay, endOfYear, startOfYear, endOfWeek, startOfWeek, parse, isValid } from 'date-fns';
27
+ import { format, sub, endOfMonth, startOfMonth, endOfDay, startOfDay, endOfYear, startOfYear, endOfWeek, startOfWeek, isValid, parse, set } from 'date-fns';
28
28
  import { useReactTable, getPaginationRowModel, getCoreRowModel, flexRender } from '@tanstack/react-table';
29
29
  import { PreviewCard as PreviewCard$1 } from '@base-ui-components/react/preview-card';
30
30
  import { startCase } from 'lodash-es';
@@ -16525,7 +16525,7 @@ var create_new_group_default = '<?xml version="1.0" encoding="UTF-8"?>\n<svg id=
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
16527
  // svg-raw:/builds/app-frameworks/esp-ui-component-library/src/assets/illustrations/rm-data-download.svg
16528
- 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 <defs>\n <style>\n .st0 {\n fill: var(--color-destructive);\n }\n\n .st1 {\n fill: var(--color-error-light);\n }\n\n .st2 {\n fill: var(--color-gray);\n }\n\n .st3 {\n fill: var(--color-muted-foreground);\n }\n\n .st4 {\n fill: var(--color-card);\n }\n\n .st5 {\n fill: var(--color-muted);\n }\n\n .st6 {\n fill: var(--color-muted);\n }\n </style>\n </defs>\n <g id="rm-logo">\n <circle class="st0" cx="196.56" cy="204.3" r="8.88"/>\n <path class="st1" d="M206.56,482.35l.39-240.76c-3.35.03-6.71.05-10.06.05-1.91,0-3.82-.02-5.72-.03l-.4,241.55c5.35-.32,10.79-.62,15.78-.81Z"/>\n <path class="st1" d="M241.83,422.44l.39-178.97c-3.35.02-6.71.03-10.06.03-1.91,0-3.82-.02-5.72-.02l-.4,179.56c5.35-.24,10.79-.46,15.78-.6Z"/>\n <path class="st1" d="M277.03,361.96l.39-121.75c-3.35.01-6.71.02-10.06.02-1.91,0-3.82-.01-5.72-.02l-.4,122.15c5.35-.16,10.79-.31,15.78-.41Z"/>\n <path class="st1" d="M547.53,361.77l-286.28-.39c.03,3.35.05,6.71.05,10.06,0,1.91-.03,3.82-.04,5.72l287.22.4c-.38-5.35-.74-10.79-.96-15.78Z"/>\n <path class="st1" d="M547.41,422.43l-321.36-.39c.04,3.35.06,6.71.06,10.06,0,1.91-.03,3.82-.04,5.72l322.42.4c-.43-5.35-.83-10.79-1.08-15.78Z"/>\n <path class="st1" d="M547.29,482.55l-356.63-.39c.04,3.35.07,6.71.07,10.06,0,1.91-.03,3.82-.04,5.72l357.81.4c-.48-5.35-.92-10.79-1.2-15.78Z"/>\n <path class="st0" d="M1.45,3c1.93,0,1.93-3,0-3S-.48,3,1.45,3h0Z"/>\n <path class="st0" d="M298.29,165.07h0c-.87-28.76-24.91-51.37-53.67-50.49-27.38.84-49.44,22.73-50.48,50.11h0c-21.89,1.16-38.69,19.85-37.53,41.74,1.13,21.33,18.94,37.93,40.3,37.58h71.35c3.73-.3,7.11,2.19,7.94,5.85h0l7.35-8.63h0c1.26-1.48,1.93-3.37,1.88-5.31-.17-4.31-3.73-7.72-8.05-7.69h-80.57c-13.21.4-24.24-9.97-24.64-23.18-.4-13.21,9.97-24.24,23.18-24.64.39-.01.79-.01,1.18,0,1.44,0,2.87.13,4.29.39,2.07.38,4.22-.09,5.94-1.31,2.55-1.68,3.9-4.67,3.48-7.69-.24-1.7-.37-3.41-.37-5.12,0-20.06,16.26-36.32,36.32-36.32s36.32,16.26,36.32,36.32v1.54h0c-14.54,6.23-24.01,20.5-24.09,36.32-.04,4.39,3.47,7.99,7.86,8.06,4.36.02,7.9-3.5,7.92-7.86v-.03c-.05-13.21,10.62-23.96,23.83-24.02,13.21-.05,23.96,10.62,24.02,23.83.02,6.03-2.23,11.84-6.31,16.28l-.11.14-23.49,27.09c-2.86,3.29-2.52,8.28.77,11.14s8.28,2.52,11.14-.77h0l23.46-26.95c14.71-16.26,13.47-41.37-2.79-56.08-7.25-6.56-16.66-10.22-26.44-10.27h0s0-.01,0-.01Z"/>\n </g>\n <g id="body">\n <rect id="bezel" class="st3" x="526.77" y="310.15" width="296.41" height="203.65" rx="29.36" ry="29.36"/>\n <g id="base">\n <path id="base-2" class="st2" 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 id="trackpad" class="st5" 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 </g>\n <g id="top">\n <g id="screen-content">\n <rect id="screen" class="st4" x="539.84" y="327.23" width="270.27" height="169.5"/>\n <g id="app">\n <rect id="header" class="st3" x="539.84" y="327.23" width="270.27" height="17.44"/>\n <g id="table">\n <rect class="st6" x="549.32" y="419.94" width="250.49" height="11.81"/>\n <rect class="st6" x="549.32" y="442.43" width="250.49" height="9.31"/>\n <rect class="st6" x="549.32" y="398.14" width="250.49" height="11.81"/>\n <rect class="st6" x="549.32" y="373.58" width="250.49" height="11.81"/>\n <rect class="st6" x="549.73" y="463.97" width="250.49" height="11.81"/>\n </g>\n </g>\n </g>\n <circle id="cam" class="st4" cx="674.98" cy="318.61" r="3.7"/>\n </g>\n </g>\n</svg>\n';
16528
+ 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
16529
 
16530
16530
  // svg-raw:/builds/app-frameworks/esp-ui-component-library/src/assets/illustrations/secured-key.svg
16531
16531
  var secured_key_default = '<?xml version="1.0" encoding="UTF-8"?>\n<svg id="secured-key" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 459.75 456.99">\n <defs>\n <style>\n .st0 {\n fill: var(--color-foreground);\n }\n\n .st1 {\n fill: var(--color-card);\n }\n\n .st2 {\n fill: var(--color-muted-foreground);\n }\n </style>\n </defs>\n <g id="shield">\n <g id="background">\n <path class="st0" d="M378.05,77.43l-22.49,170.1c-8.7,65.78-44.56,124.91-98.87,163.02l-52.54,36.87c-13.4,9.4-31.36,8.97-44.28-1.07l-45.96-35.69c-49.42-38.37-81.66-94.72-89.72-156.77L1.32,77.62C-.99,59.83,10.22,43.07,27.54,38.41L141.87,7.64c33.33-8.97,68.45-8.83,101.71.41l108.55,30.16c17.21,4.78,28.27,21.51,25.93,39.22Z"/>\n <path class="st1" d="M182.73,455.25c-8.28,0-16.55-2.71-23.48-8.1l-45.96-35.69c-24.7-19.18-45.1-42.67-60.63-69.81-15.53-27.14-25.45-56.63-29.47-87.64L.31,77.75c-2.36-18.22,9.23-35.56,26.97-40.33L141.6,6.65c33.48-9.01,68.83-8.87,102.24.41l108.55,30.16c17.6,4.89,29.06,22.23,26.67,40.34l-22.49,170.1c-8.71,65.88-44.9,125.55-99.29,163.72l-52.54,36.87c-6.66,4.67-14.34,7-22.01,7ZM191.96,2.04c-16.76,0-33.52,2.19-49.83,6.58L27.81,39.4C11.05,43.91.1,60.28,2.33,77.49l22.88,176.26c8.07,62.19,39.79,117.63,89.33,156.09l45.96,35.69c12.65,9.82,29.96,10.24,43.07,1.04l52.54-36.87c53.93-37.84,89.81-97.01,98.44-162.32l22.49-170.1c2.26-17.1-8.57-33.48-25.19-38.1l-108.55-30.16c-16.78-4.66-34.06-6.99-51.33-6.99ZM378.05,77.43h0,0Z"/>\n </g>\n <g id="foreground">\n <path class="st1" d="M396.29,79.17l-22.49,170.1c-8.7,65.78-44.56,124.91-98.87,163.02l-52.54,36.87c-13.4,9.4-31.36,8.97-44.28-1.07l-45.96-35.69c-49.42-38.37-81.66-94.72-89.72-156.77L19.56,79.36c-2.31-17.79,8.9-34.55,26.22-39.21l114.32-30.77c33.33-8.97,68.45-8.83,101.71.41l108.55,30.16c17.21,4.78,28.27,21.51,25.93,39.22Z"/>\n <path class="st0" d="M200.97,456.99c-8.28,0-16.54-2.71-23.48-8.1l-45.96-35.69c-24.7-19.18-45.1-42.67-60.63-69.81-15.53-27.14-25.45-56.63-29.47-87.64L18.55,79.49c-2.37-18.22,9.23-35.56,26.97-40.33l114.33-30.77c33.48-9.01,68.84-8.87,102.24.41l108.55,30.16c17.6,4.89,29.06,22.23,26.67,40.34l-22.49,170.1c-8.71,65.88-44.9,125.55-99.29,163.72l-52.54,36.87c-6.66,4.67-14.34,7-22.01,7ZM210.21,3.78c-16.76,0-33.52,2.19-49.83,6.58l-114.33,30.77c-16.76,4.51-27.71,20.89-25.47,38.09l22.88,176.26c8.07,62.19,39.8,117.63,89.33,156.09l45.96,35.69c12.65,9.82,29.96,10.24,43.07,1.04l52.54-36.87c53.93-37.84,89.81-97.01,98.44-162.32l22.49-170.1,1.01.13-1.01-.13c2.26-17.1-8.57-33.48-25.19-38.1l-108.55-30.16c-16.78-4.66-34.06-6.99-51.33-6.99Z"/>\n </g>\n </g>\n <path id="key" class="st2" d="M98.84,294.41c6.8,19.51,26,38.63,49.43,34.99,18.52-2.87,34.5-17.68,43.24-34.13,7.26-13.66,9.55-30.84,1.61-41.75,14.44-10.8,26.96-25.03,39.69-37.72,4.59-4.57,9.21-9.08,13.89-13.54-.11.58,0,1.2.42,1.79,5.52,7.65,12.99,14.24,19.53,21.02.77.79,2.31.9,3.23-.07,3.45-3.63,6.12-7.49,8.73-11.63.07.14.15.27.26.37.94.86,2.46,1.28,3.63.07,1.33-1.37.9-2.95.09-4.21-1.47-2.27-3.31-4.26-5.18-6.2.27-.24.54-.49.58-.54.61-.63,1.22-1.26,1.83-1.89.63-.65,1.24-1.32,1.85-1.99,1.32,2.05,3.95,3.98,5.23,5.36.64.68,2.02,1.02,2.96.34,5.89-4.28,10.74-9.83,12.78-16.71.86-.22,1.59-.87,1.7-1.89.17-1.68-.94-2.89-1.72-4.18-.46-.75-.92-1.51-1.39-2.25.73-.17,1.46-.38,2.21-.66,3.15-1.18,5.47-.06,8.11,1.32.75.39,2.01.38,2.7-.42,1.98-2.31,2.81-5.07,4.74-7.4.37-.44.38-.89.22-1.25,1.09-.89,1.64-2.43.55-3.63-3.7-4.04-7.47-7.99-11.36-11.85-1.49-1.48-4.1-4.97-6.86-6.45,2.88-3.5,5.42-7.19,7.14-11.09,2.94-6.69-2.72-9.13-8.42-8.15-10.76,1.84-21.62,12.81-29.44,20.06-11.67,10.82-22.38,22.66-33.17,34.33-12.08,13.07-25.27,24.9-38.32,37.02-6.72,6.24-13.27,12.65-19.72,19.16-16.04-11.64-38.74-12.89-58.53-2.08-21.79,11.9-29.38,35.38-22.24,55.86ZM127.82,287.93c4.06-2.79,10.77-.97,11.96,3.33.85,3.11-.47,6.94-2.87,9.47-2.24,2.37-5.08,2.91-7.88,2.73-.03-.44-.18-.87-.52-1.27-2.61-3.09-5.7-10.81-.69-14.26Z"/>\n <g id="tick-circle">\n <path class="st0" d="M423.55,19.42c.37.24.75-.31.39-.56-.83-.58-1.78-.94-2.74-1.24-.75-.24-1.73-.71-2.51-.43l-.07.33c.5.59,1.47.61,2.18.8.96.26,1.92.57,2.76,1.11Z"/>\n <path class="st0" d="M412.34,16.75c.34-.28-.1-.81-.44-.53-.34.28.1.81.44.53Z"/>\n <polygon class="st0" points="368.27 60.45 368.21 60.26 367.91 60.05 367.64 60.13 367.5 60.38 367.54 60.57 367.66 60.72 367.84 60.81 368.02 60.86 368.19 60.8 368.28 60.67 368.27 60.45"/>\n <path class="st0" d="M447.17,59.37c.08-2.17-.31-4.21-.96-6.28l-.05.02c.39,2.13.53,4.32.39,6.49-.13,2-.86,3.93-.96,5.91l.38.14c.95-1.8,1.13-4.27,1.2-6.27Z"/>\n <path class="st0" d="M368.47,62.42c-.55.46.16,1.31.71.85.55-.46-.16-1.31-.71-.85Z"/>\n <path class="st0" d="M449.03,58.97c-.28,6.1-2.63,10.3-4.94,15.7-.13.3.27.54.5.35,4.34-3.43,5.68-10.7,5.76-15.93.1-6.33-1.36-12.5-4.68-17.91l-.05.02c2.37,5.59,3.68,11.68,3.41,17.77Z"/>\n <path class="st0" d="M444.08,68.61c.23-.2-.07-.56-.3-.36-.23.2.07.56.3.36Z"/>\n <polygon class="st0" points="442.85 78.76 443 78.79 443.12 78.78 443.24 78.75 443.46 78.53 443.51 78.3 443.4 78.01 442.96 77.85 442.84 77.88 442.69 78 442.57 78.27 442.57 78.42 442.64 78.65 442.85 78.76"/>\n <path class="st0" d="M392.72,90.36c-.27-.02-.5.22-.45.49.04.25.35.45.59.31l.39-.23.17-.31-.26-.24-.44-.03Z"/>\n <path class="st0" d="M453.43,30.36c-12.43-23.53-43.73-34.39-70.13-21.97-29.34,13.8-32.64,46.32-20.42,70.74,10.15,20.29,32.54,31.34,55.08,26.4,10.16-1.69,18.65-6.53,25.22-13.23,18.05-16.62,21.19-42.73,10.25-61.93ZM422.78,101.22c-35.07,11.39-63.96-19.82-62.88-52.37.62-18.74,13.77-33.73,32.19-38.79,15.33-4.21,31.37-1.67,43.6,6.5,3.51,2.35,6.71,5.16,9.49,8.41,9.12,10.66,13.87,25.53,10.96,40.13-3.32,16.55-17.13,30.85-33.36,36.12Z"/>\n <path class="st0" d="M423.19,54.17h-.17c.3.05.6.1.9.14l-.21-.05-.53-.09Z"/>\n <path class="st0" d="M417.57,10.57c-25.19-6.85-52.38,8.9-55.51,36.24-3.12,27.35,19.73,52.97,47.37,53.17,9.88.07,19.93-3.83,28.02-9.98,7.4-5.63,13.76-14.09,16.09-22.92,3.7-14.07-2.39-30.7-11.13-40.88-6.42-7.47-15.08-12.98-24.84-15.64ZM450.54,69.05c-3.35,13.1-16.77,23.25-29.48,26.82-5.15,1.45-10.49,1.92-15.65,1.37-25.13-2.7-44.79-28.08-40.56-53.31,4.66-27.84,34.6-38.82,57.87-29.06,20.14,8.45,33.56,31.72,27.82,54.17Z"/>\n <path class="st0" d="M373.93,34.82c-2.66,1.85-3.04,5.33-3.74,8.26-.68,2.87-1.97,7.06-.28,9.72.15.23.56.14.63-.11.34-1.28.1-2.43.14-3.76.04-1.57.28-3.14.57-4.68.55-2.89.83-6.83,3.05-8.98.27-.26-.07-.66-.37-.45Z"/>\n <path class="st0" d="M371.64,55.89c-.12-.2-.29-.37-.54-.38l-.48.15-.23.45c-.02.25.1.45.28.6l.19.16c.22.17.54.17.76-.01.22-.18.28-.5.15-.75l-.12-.21Z"/>\n <path class="st0" d="M409.81,94.95c-2.75.26-5.51-.14-8.15-.9-2.03-.59-3.93-1.77-6-2.15-.39-.07-.69.49-.41.78,1.63,1.62,4.34,2.13,6.51,2.58,2.69.56,5.43.76,8.15.32.41-.07.3-.66-.11-.62Z"/>\n <path class="st0" d="M392.91,17.51l.15-.22c-5.25-3.4-12.79,4.09-16.31,7.26-9.04,8.14-11.92,20.29-10.31,32.08.09.68,1.15.64,1.2-.05.82-10.48.56-20.08,8-28.58,3.07-3.51,12.28-13.22,17.26-10.49Z"/>\n <path class="st0" d="M415.04,39.52c-4.34,1.84-7.77,4.29-11.63,6.79-1.84,1.2-4.72,4.51-7.46,3.24-1.08-.5-4.65-8.38-5.44-9.55-.35-.53-1.09-.68-1.56-.2-4.49,4.5-12.73,9.41-15.4,15.41-.29.64.06,1.24.55,1.5,1.97,4.7,5.61,8.32,8.48,12.62,2.95,4.42,5.25,9.05,8.76,13.07.64.73,2.13.59,2.54-.33,7.67-17.02,28.05-43.3,48.86-42.48.81.03.91-1.14.19-1.37-9.83-3.15-18.36-2.73-27.89,1.3ZM413.72,50.78s-.09,0-.14.01c-.41.2-.8.48-1.17.79-.12,0-.25.03-.35.14-2.77,2.95-5.94,5.74-8.87,8.71.23-.3.46-.62.69-.92,3.76-4.98,8.15-8.18,12.82-11.19-1.03.79-2.02,1.6-2.98,2.45ZM388.18,44.92s0,0,0,0c0,.3-.02.61,0,.93-.33-.03-.73.24-.59.62.31.86.67,1.69,1.04,2.53.08.36.15.72.25,1.08-.44-.5-.9-.98-1.37-1.45-.07-.77-.16-1.54-.29-2.29-.08-.48-.4-.67-.76-.68.64-.37,1.2-.6,1.71-.73ZM379.52,54.86c.2.51.41,1.01.64,1.5-.03.28-.07.56-.09.84-.43-.34-.86-.69-1.3-1.01,0,0,0,0,0,0,0,0,0,0,0,0-.05-.03-.09-.07-.14-.11-.34-.25-.73-.03-.91.29-.28-.61-.41-1.09-.31-1.34.76.08,1.48.04,2.12-.16ZM382.91,58.56c.93,1.16,1.84,2.33,2.69,3.56.29.42.54.88.83,1.31-.5-.6-1-1.2-1.53-1.77-.64-1.05-1.31-2.07-1.99-3.1ZM384.39,58.04s.04-.03.05-.04c.09.14.19.29.28.43-.11-.13-.22-.26-.33-.39ZM385.74,55.68c.41.51.79,1.05,1.13,1.61.18.53.39,1.05.64,1.58.1.2.27.33.47.41.21.42.43.84.64,1.27-.95-1.43-2.17-2.84-3.09-4.36.08-.17.15-.33.22-.5ZM388.39,55.35c-.05-.17-.09-.35-.13-.53.06.12.12.24.17.36-.01.06-.03.11-.04.16ZM389.7,57.95c.23.51.45,1.03.66,1.55-.25-.45-.5-.91-.75-1.36.03-.06.06-.13.08-.19ZM385.03,47.83c-.02.15-.03.3.05.47.03.06.05.11.08.17-.11,1.27-.22,2.56-.43,3.82-.24-.16-.46-.34-.71-.48.02-.52.04-1.04.09-1.57.23-.44.43-.88.62-1.33.1-.23.07-.46-.02-.66.11-.13.22-.27.33-.42ZM391.16,65.15c.37.54.79,1.04,1.25,1.52-.09.18-.18.35-.26.53-.32-.69-.65-1.37-.98-2.05ZM390.58,55.21c.04-.19.06-.39.1-.58.49.98,1.03,1.91,1.61,2.73.64,1.21,1.26,2.45,1.87,3.68-.11.3-.26.6-.36.91-.11.35.38.52.57.24.07-.1.15-.2.22-.3.09.17.18.35.27.52-.26.39-.5.78-.74,1.18-.84-2.96-2.11-5.7-3.54-8.38ZM391.66,52.2c-.25-.61-.48-1.23-.68-1.86-.01-.45-.03-.9-.06-1.35.21.31.42.63.63.94.48,1.33.85,2.69,1.1,4.06-.33-.6-.66-1.19-.99-1.79ZM394.94,58.37c.04-.11.11-.21.11-.33-.02-1.13-.14-2.23-.33-3.32.18.35.35.69.49,1.04,0,.02.01.03.02.05.23.6.37,1.19.35,1.74,0,.09.03.2.08.3-.18.31-.36.63-.52.95-.06-.14-.12-.28-.19-.42ZM388.85,52.06c-.05-.09-.1-.18-.16-.28.06.07.1.14.16.21,0,.02,0,.05,0,.07ZM391.07,76.22c.09-.18.14-.38.13-.61.19,0,.39-.03.56-.11-.06.23-.11.46-.17.69-.17.04-.34.05-.52.03ZM392.23,73.65c-.16-.5-.35-.99-.54-1.48.07.13.15.26.22.38.14.25.33.39.52.48-.06.21-.14.41-.2.62ZM393.44,70.02c-.26-.58-.53-1.15-.8-1.73.17-.33.35-.66.53-.98.81.27,1.69-.48,1.5-1.41-.05-.27-.13-.54-.2-.81.4-.62.81-1.24,1.24-1.85.5,0,1.04-.42.84-1-.01-.04-.03-.07-.04-.11,1.64-2.23,3.44-4.35,5.22-6.31-3.51,4.24-6.34,9.05-8.29,14.2ZM408.77,48.85c.23-.19.47-.37.7-.55-.23.18-.47.37-.7.55ZM419.22,42.44c-.59.26-1.17.53-1.74.81.58-.28,1.15-.56,1.74-.81ZM416.45,43.76c-.91.48-1.81.98-2.69,1.52.88-.54,1.77-1.05,2.69-1.52ZM413.45,45.47c-.81.51-1.59,1.05-2.37,1.6.77-.57,1.57-1.09,2.37-1.6ZM403.87,51.53c-2.67,2.68-5.48,5.83-7.89,9.22-.07-.18-.13-.36-.21-.53,2.33-3.12,5.05-6.06,8.09-8.68ZM376.52,58.06c-.38-.64-.72-1.28-1.03-1.91.01-.03.03-.05.05-.08.29.67.62,1.34.98,1.99ZM392.55,75.61c.94-2.03,1.94-4.03,3-5.99-1.14,2.53-1.94,4.9-3,5.99ZM426.68,41.87c.17-.12.15-.34.03-.45.92-.27,1.87-.5,2.83-.71-1.27.53-2.5,1.1-3.71,1.74.28-.2.57-.37.85-.58ZM433.44,39.23c-.12.04-.24.08-.36.12,0-.05,0-.09,0-.14.12,0,.24.02.36.02ZM418.81,40.85c-.16.07-.31.15-.47.22-1.76.6-3.52,1.31-5.24,2.1,1.86-.9,3.76-1.69,5.71-2.32ZM397.64,54.1c.46-.27.9-.56,1.34-.85-.58.65-1.13,1.32-1.64,2-.09-.34-.17-.67-.27-1,.19,0,.38-.04.57-.15ZM393.88,75.67c.45-1.14.96-2.28,1.54-3.41.1,0,.2-.02.26-.13,1.73-3.5,4.19-6.28,6.83-8.89-1.62,2.12-3.21,4.28-4.82,6.45-.4.53-2.38,3.98-3.81,5.98ZM431.3,39.98s0-.06,0-.09c.09,0,.18,0,.27-.01-.08.03-.18.07-.26.09,0,0,0,0-.01,0Z"/>\n </g>\n</svg>\n';
@@ -16588,6 +16588,18 @@ var illustrationRegistry = [
16588
16588
  var illustrationsById = Object.fromEntries(
16589
16589
  illustrationRegistry.map((e) => [e.id, e])
16590
16590
  );
16591
+
16592
+ // src/components/illustration/illustration-variants.ts
16593
+ var STATIC_ONLY_GROUP_RE = /<g\s[^>]*data-variant="static"[^>]*>[\s\S]*?<\/g>\s*/g;
16594
+ var ANIMATED_ONLY_GROUP_RE = /<g\s[^>]*data-variant="animated"[^>]*>[\s\S]*?<\/g>\s*/g;
16595
+ var ANIMATE_MOTION_BLOCK_RE = /<animateMotion\b[^>]*>[\s\S]*?<\/animateMotion>\s*/g;
16596
+ var SMIL_ELEMENT_RE = /<(?:animate|animateTransform|animateMotion|set)\b[^>]*\/>\s*/g;
16597
+ function selectIllustrationVariant(svg, animated) {
16598
+ if (animated) {
16599
+ return svg.replace(STATIC_ONLY_GROUP_RE, "");
16600
+ }
16601
+ return svg.replace(ANIMATED_ONLY_GROUP_RE, "").replace(ANIMATE_MOTION_BLOCK_RE, "").replace(SMIL_ELEMENT_RE, "");
16602
+ }
16591
16603
  function escapeAttr(value2) {
16592
16604
  return value2.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;");
16593
16605
  }
@@ -16601,7 +16613,7 @@ function buildSvgHtml(svgSource, options) {
16601
16613
  );
16602
16614
  }
16603
16615
  var Illustration = forwardRef(
16604
- function Illustration2({ type, size, alt, className, ...rest }, ref) {
16616
+ function Illustration2({ type, size, alt, animated = false, className, ...rest }, ref) {
16605
16617
  const entry = type in illustrationsById ? illustrationsById[type] : void 0;
16606
16618
  const label = alt?.trim();
16607
16619
  const decorative = !label;
@@ -16619,13 +16631,13 @@ var Illustration = forwardRef(
16619
16631
  }
16620
16632
  const html = useMemo(() => {
16621
16633
  if (!entry) return "";
16622
- return buildSvgHtml(entry.svg, {
16634
+ return buildSvgHtml(selectIllustrationVariant(entry.svg, animated), {
16623
16635
  decorative,
16624
16636
  alt: label,
16625
16637
  pixelW,
16626
16638
  pixelH
16627
16639
  });
16628
- }, [entry, decorative, label, pixelW, pixelH]);
16640
+ }, [entry, animated, decorative, label, pixelW, pixelH]);
16629
16641
  if (!entry) return null;
16630
16642
  const fixedSquare = size != null;
16631
16643
  const fillParentWidth = !fixedSquare && entry.aspectRatio != null;
@@ -16813,7 +16825,9 @@ function SectionCard({
16813
16825
  truncateSecondaryText = true,
16814
16826
  actions,
16815
16827
  allowCollapse = true,
16828
+ hideCollapseIcon = false,
16816
16829
  defaultOpen = true,
16830
+ open: controlledOpen,
16817
16831
  size = "default",
16818
16832
  variant = "outline",
16819
16833
  color = "gray",
@@ -16829,16 +16843,20 @@ function SectionCard({
16829
16843
  const collapseButtonColor = variantStyles != null && isPresetColor(resolvedColor) ? resolvedColor : "gray";
16830
16844
  const primaryClass = variantStyles != null ? cn(s.primaryTypography, variantStyles.foreground) : s.primary;
16831
16845
  const secondaryClass = variantStyles != null ? cn(s.secondaryTypography, variantStyles.description) : s.secondary;
16832
- const [open, setOpen] = useState(defaultOpen);
16846
+ const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);
16833
16847
  useEffect(() => {
16834
- setOpen(defaultOpen);
16848
+ setUncontrolledOpen(defaultOpen);
16835
16849
  }, [defaultOpen]);
16850
+ const isOpenControlled = controlledOpen !== void 0;
16851
+ const open = isOpenControlled ? controlledOpen : uncontrolledOpen;
16836
16852
  const toggleLabel = typeof primaryText === "string" ? `Toggle ${primaryText}` : "Toggle section";
16837
16853
  const hasPrimaryText = hasRenderableContent(primaryText);
16838
16854
  const hasSecondaryText = hasRenderableContent(secondaryText);
16839
16855
  const hasHeaderText = hasPrimaryText || hasSecondaryText;
16840
16856
  const hasIcon = hasRenderableContent(icon);
16841
- const hasHeaderRight = hasRenderableContent(actions) || allowCollapse;
16857
+ const showCollapseIcon = allowCollapse && !hideCollapseIcon;
16858
+ const hasHeaderRight = hasRenderableContent(actions) || showCollapseIcon;
16859
+ const headerMainPad = hasHeaderRight ? s.headerTriggerPad : s.pad;
16842
16860
  const isHeaderRequired = hasIcon || hasHeaderText || hasHeaderRight;
16843
16861
  const hasBody = hasRenderableContent(children);
16844
16862
  const headerMain = /* @__PURE__ */ jsxs(Fragment, { children: [
@@ -16921,7 +16939,7 @@ function SectionCard({
16921
16939
  ) });
16922
16940
  const headerRight = hasHeaderRight ? /* @__PURE__ */ jsxs("div", { className: cn("flex shrink-0 items-center gap-2", s.headerRightPad), children: [
16923
16941
  actions,
16924
- allowCollapse ? chevronButton : null
16942
+ showCollapseIcon ? chevronButton : null
16925
16943
  ] }) : null;
16926
16944
  const header = allowCollapse ? /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center justify-between", children: [
16927
16945
  /* @__PURE__ */ jsx(CollapsibleTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
@@ -16931,7 +16949,7 @@ function SectionCard({
16931
16949
  className: cn(
16932
16950
  "section-card-header",
16933
16951
  "flex min-w-0 flex-1 items-center text-left rounded-md",
16934
- s.headerTriggerPad,
16952
+ headerMainPad,
16935
16953
  s.gap,
16936
16954
  "cursor-pointer outline-none transition-colors hover:bg-muted/50",
16937
16955
  "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"
@@ -16949,7 +16967,7 @@ function SectionCard({
16949
16967
  "section-card-header",
16950
16968
  "flex min-w-0 flex-1 items-center",
16951
16969
  s.gap,
16952
- s.headerTriggerPad
16970
+ headerMainPad
16953
16971
  ),
16954
16972
  children: headerMain
16955
16973
  }
@@ -16999,7 +17017,7 @@ function SectionCard({
16999
17017
  {
17000
17018
  open,
17001
17019
  onOpenChange: (next) => {
17002
- setOpen(next);
17020
+ if (!isOpenControlled) setUncontrolledOpen(next);
17003
17021
  onOpenChange?.(next);
17004
17022
  },
17005
17023
  children: [
@@ -48650,32 +48668,77 @@ var Select = SelectPrimitive.Root;
48650
48668
  var SelectGroup = SelectPrimitive.Group;
48651
48669
  var SelectValue = SelectPrimitive.Value;
48652
48670
  var triggerSizeClasses = {
48653
- sm: "h-8 px-3 text-xs [&_[data-slot=select-icon]]:size-3.5",
48654
- default: "h-10 px-3.5 py-2 text-base md:text-sm [&_[data-slot=select-icon]]:size-4",
48655
- lg: "h-12 px-5 text-lg [&_[data-slot=select-icon]]:size-5"
48671
+ sm: "h-8 px-3 text-xs",
48672
+ default: "h-10 px-3.5 py-2 text-base md:text-sm",
48673
+ lg: "h-12 px-5 text-lg"
48656
48674
  };
48657
- var SelectTrigger = React10.forwardRef(({ className, children, size = "default", ...props }, ref) => /* @__PURE__ */ jsxs(
48658
- SelectPrimitive.Trigger,
48659
- {
48660
- ref,
48661
- className: cn(
48662
- "flex w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-background ring-offset-background transition-[box-shadow,border-color] duration-200 ease-in-out data-[placeholder]:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
48663
- triggerSizeClasses[size],
48664
- className
48665
- ),
48666
- ...props,
48667
- children: [
48668
- children,
48669
- /* @__PURE__ */ jsx(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx(
48670
- ChevronDown,
48675
+ var triggerIconClassName = "size-4 shrink-0 opacity-50";
48676
+ var SelectTrigger = React10.forwardRef(
48677
+ ({
48678
+ className,
48679
+ children,
48680
+ size = "default",
48681
+ label,
48682
+ required,
48683
+ hintContent,
48684
+ error,
48685
+ errorContent,
48686
+ id,
48687
+ "aria-describedby": ariaDescribedBy,
48688
+ ...props
48689
+ }, ref) => {
48690
+ const autoId = React10.useId();
48691
+ const hasEnhancedProps = label !== void 0 || required !== void 0 || hintContent !== void 0 || error !== void 0 || errorContent !== void 0;
48692
+ const hasError = error || !!errorContent;
48693
+ const triggerId = id ?? (hasEnhancedProps ? autoId : void 0);
48694
+ const errorId = errorContent ? `${triggerId}-error` : void 0;
48695
+ const describedBy = [ariaDescribedBy, errorId].filter(Boolean).join(" ") || void 0;
48696
+ const trigger = /* @__PURE__ */ jsxs(
48697
+ SelectPrimitive.Trigger,
48698
+ {
48699
+ ref,
48700
+ id: triggerId,
48701
+ "aria-required": required || void 0,
48702
+ "aria-invalid": hasError || void 0,
48703
+ "aria-describedby": describedBy,
48704
+ className: cn(
48705
+ "flex w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-background ring-offset-background transition-[box-shadow,border-color] duration-200 ease-in-out data-[placeholder]:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
48706
+ triggerSizeClasses[size],
48707
+ hasError && "border-destructive focus-visible:ring-destructive",
48708
+ className
48709
+ ),
48710
+ ...props,
48711
+ children: [
48712
+ children,
48713
+ /* @__PURE__ */ jsx(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx(
48714
+ ChevronDown,
48715
+ {
48716
+ "data-slot": "select-icon",
48717
+ className: triggerIconClassName
48718
+ }
48719
+ ) })
48720
+ ]
48721
+ }
48722
+ );
48723
+ if (!hasEnhancedProps) {
48724
+ return trigger;
48725
+ }
48726
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-2 flex-1", children: [
48727
+ label && /* @__PURE__ */ jsx(
48728
+ FieldLabelRow,
48671
48729
  {
48672
- "data-slot": "select-icon",
48673
- className: "shrink-0 opacity-50"
48730
+ htmlFor: triggerId,
48731
+ label,
48732
+ required,
48733
+ hintContent
48674
48734
  }
48675
- ) })
48676
- ]
48735
+ ),
48736
+ !label && hintContent && /* @__PURE__ */ jsx("span", { className: fieldHintClassName, children: hintContent }),
48737
+ trigger,
48738
+ errorContent && /* @__PURE__ */ jsx("div", { id: errorId, className: "text-sm text-destructive", children: errorContent })
48739
+ ] });
48677
48740
  }
48678
- ));
48741
+ );
48679
48742
  SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
48680
48743
  var SelectScrollUpButton = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
48681
48744
  SelectPrimitive.ScrollUpButton,
@@ -49493,7 +49556,11 @@ var FormLabel = React10.forwardRef(({ className, ...props }, ref) => {
49493
49556
  Label,
49494
49557
  {
49495
49558
  ref,
49496
- className: cn(error && "text-destructive", className),
49559
+ className: cn(
49560
+ "flex items-center gap-2",
49561
+ error && "text-destructive",
49562
+ className
49563
+ ),
49497
49564
  htmlFor: formItemId,
49498
49565
  ...props
49499
49566
  }
@@ -52264,6 +52331,12 @@ var stateVisuals = {
52264
52331
  titleClass: "text-success",
52265
52332
  descriptionClass: "text-success/80"
52266
52333
  },
52334
+ warning: {
52335
+ avatarColor: "warning",
52336
+ endIconClass: "text-warning",
52337
+ titleClass: "text-warning",
52338
+ descriptionClass: "text-warning/80"
52339
+ },
52267
52340
  error: {
52268
52341
  avatarColor: "error",
52269
52342
  endIconClass: "text-error",
@@ -52285,6 +52358,7 @@ var stateVisuals = {
52285
52358
  };
52286
52359
  var stateSurfaceCssVar = {
52287
52360
  success: "--color-success",
52361
+ warning: "--color-warning",
52288
52362
  error: "--color-error",
52289
52363
  in_progress: "--color-primary",
52290
52364
  not_started: "--color-gray"
@@ -52397,6 +52471,8 @@ function StatusEndIndicator({
52397
52471
  switch (state) {
52398
52472
  case "success":
52399
52473
  return /* @__PURE__ */ jsx(CheckCircle2, { className: cls, "aria-hidden": true });
52474
+ case "warning":
52475
+ return /* @__PURE__ */ jsx(TriangleAlert, { className: cls, "aria-hidden": true });
52400
52476
  case "error":
52401
52477
  return /* @__PURE__ */ jsx(XCircle, { className: cls, "aria-hidden": true });
52402
52478
  case "in_progress":
@@ -52715,15 +52791,15 @@ var Spinner = React10.forwardRef(function Spinner2({
52715
52791
  "aria-labelledby": ariaLabelledby,
52716
52792
  ...rest
52717
52793
  }, ref) {
52718
- const resolved = color != null ? resolveColor(color, "text") : void 0;
52794
+ const resolved2 = color != null ? resolveColor(color, "text") : void 0;
52719
52795
  const ariaLabelResolved = ariaLabelledby != null ? void 0 : ariaLabel !== void 0 ? ariaLabel : "Loading";
52720
52796
  return /* @__PURE__ */ jsx(
52721
52797
  LoaderCircle,
52722
52798
  {
52723
52799
  ref,
52724
52800
  ...rest,
52725
- className: cn("animate-spin", resolved?.className, className),
52726
- style: { ...resolved?.style, ...style },
52801
+ className: cn("animate-spin", resolved2?.className, className),
52802
+ style: { ...resolved2?.style, ...style },
52727
52803
  size: size ?? "1em",
52728
52804
  "aria-label": ariaLabelResolved,
52729
52805
  "aria-labelledby": ariaLabelledby
@@ -55889,35 +55965,59 @@ function CalendarDayButton({
55889
55965
  );
55890
55966
  }
55891
55967
  Calendar.displayName = "Calendar";
55892
- function DatePicker({
55893
- value: value2,
55894
- onChange,
55895
- defaultValue,
55896
- formatDate: formatDate2,
55897
- name: name2,
55898
- trigger,
55899
- placeholder = "Pick a date",
55900
- label,
55901
- size,
55902
- hideIcon = false,
55903
- disabled = false,
55904
- required = false,
55905
- rounded = false,
55906
- error,
55907
- errorContent,
55908
- startHelperContent,
55909
- endHelperContent,
55910
- hintContent,
55911
- calendarProps,
55912
- open: controlledOpen,
55913
- onOpenChange,
55914
- className
55915
- }) {
55968
+ var FIELD_ICON_SIZE = 16;
55969
+ function FieldEndIcons({ icon, onClear, clearLabel = "Clear", className }) {
55970
+ return /* @__PURE__ */ jsxs("span", { className: cn("flex items-center gap-1.5", className), children: [
55971
+ onClear && /* @__PURE__ */ jsx(
55972
+ "button",
55973
+ {
55974
+ type: "button",
55975
+ "aria-label": clearLabel,
55976
+ onClick: onClear,
55977
+ className: "pointer-events-auto rounded-sm text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
55978
+ children: /* @__PURE__ */ jsx(XIcon, { size: FIELD_ICON_SIZE, "aria-hidden": true })
55979
+ }
55980
+ ),
55981
+ icon
55982
+ ] });
55983
+ }
55984
+ function fieldEndPaddingClassName(hasClear, hasIcon) {
55985
+ if (hasClear && hasIcon) return "pe-16";
55986
+ if (hasClear || hasIcon) return "pe-9";
55987
+ return "";
55988
+ }
55989
+ function DatePicker(props) {
55990
+ const {
55991
+ value: value2,
55992
+ onChange,
55993
+ defaultValue,
55994
+ formatDate: formatDate2,
55995
+ name: name2,
55996
+ trigger,
55997
+ placeholder = "Pick a date",
55998
+ label,
55999
+ size,
56000
+ hideIcon = false,
56001
+ disabled = false,
56002
+ required = false,
56003
+ rounded = false,
56004
+ error,
56005
+ errorContent,
56006
+ startHelperContent,
56007
+ endHelperContent,
56008
+ hintContent,
56009
+ clearable = false,
56010
+ clearLabel = "Clear",
56011
+ calendarProps,
56012
+ open: controlledOpen,
56013
+ onOpenChange,
56014
+ className
56015
+ } = props;
55916
56016
  const [uncontrolledDate, setUncontrolledDate] = useState(
55917
56017
  defaultValue
55918
56018
  );
55919
56019
  const [internalOpen, setInternalOpen] = useState(false);
55920
- const isControlled = value2 !== void 0;
56020
+ const isControlled = "value" in props;
55921
56021
  const selectedDate = isControlled ? value2 : uncontrolledDate;
55922
56022
  const isOpenControlled = controlledOpen !== void 0;
55923
56023
  const isOpen = isOpenControlled ? controlledOpen : internalOpen;
@@ -55930,6 +56030,12 @@ function DatePicker({
55930
56030
  onChange?.(date);
55931
56031
  setOpen(false);
55932
56032
  };
56033
+ const handleClear = (event) => {
56034
+ event.stopPropagation();
56035
+ if (!isControlled) setUncontrolledDate(void 0);
56036
+ onChange?.(void 0);
56037
+ };
56038
+ const showClear = clearable && !disabled && selectedDate !== void 0;
55933
56039
  const displayValue = selectedDate ? (formatDate2 ?? ((d) => format(d, "PPP")))(selectedDate) : "";
55934
56040
  const inputTrigger = /* @__PURE__ */ jsx(
55935
56041
  Input,
@@ -55947,8 +56053,19 @@ function DatePicker({
55947
56053
  startHelperContent,
55948
56054
  endHelperContent,
55949
56055
  hintContent,
55950
- className: cn("cursor-pointer read-only:bg-background", !displayValue && "text-muted-foreground"),
55951
- endIcon: hideIcon ? void 0 : /* @__PURE__ */ jsx(CalendarIcon, { size: 16, className: "text-muted-foreground" })
56056
+ className: cn(
56057
+ "cursor-pointer read-only:bg-background",
56058
+ fieldEndPaddingClassName(showClear, !hideIcon),
56059
+ !displayValue && "text-muted-foreground"
56060
+ ),
56061
+ endIcon: showClear || !hideIcon ? /* @__PURE__ */ jsx(
56062
+ FieldEndIcons,
56063
+ {
56064
+ onClear: showClear ? handleClear : void 0,
56065
+ clearLabel,
56066
+ icon: hideIcon ? void 0 : /* @__PURE__ */ jsx(CalendarIcon, { size: FIELD_ICON_SIZE, className: "text-muted-foreground" })
56067
+ }
56068
+ ) : void 0
55952
56069
  }
55953
56070
  );
55954
56071
  return /* @__PURE__ */ jsxs("div", { className: cn("flex-1", className), children: [
@@ -55966,7 +56083,7 @@ function DatePicker({
55966
56083
  PopoverContent,
55967
56084
  {
55968
56085
  align: "start",
55969
- className: "w-auto rounded-2xl p-1 shadow-lg",
56086
+ className: "w-auto overflow-hidden rounded-2xl p-1 shadow-lg",
55970
56087
  children: /* @__PURE__ */ jsx(
55971
56088
  Calendar,
55972
56089
  {
@@ -55992,7 +56109,191 @@ function DatePicker({
55992
56109
  ] });
55993
56110
  }
55994
56111
  DatePicker.displayName = "DatePicker";
56112
+ var timeInputChromeClass = "appearance-none bg-background [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none";
56113
+ var TimePicker = React10.forwardRef(
56114
+ ({ hideIcon = false, className, ...props }, ref) => {
56115
+ return /* @__PURE__ */ jsx(
56116
+ Input,
56117
+ {
56118
+ ref,
56119
+ ...props,
56120
+ type: "time",
56121
+ className: cn(timeInputChromeClass, className),
56122
+ endIcon: hideIcon ? void 0 : /* @__PURE__ */ jsx(ClockIcon, { size: 16, className: "text-muted-foreground" })
56123
+ }
56124
+ );
56125
+ }
56126
+ );
56127
+ TimePicker.displayName = "TimePicker";
56128
+ var TIME_RE = /^([01]\d|2[0-3]):([0-5]\d)(?::([0-5]\d))?$/;
56129
+ var DEFAULT_TIME = "00:00";
56130
+ var DEFAULT_TIME_STEP_SECONDS = 60;
56131
+ function isValidTimeString(time2) {
56132
+ return TIME_RE.test(time2);
56133
+ }
56134
+ function mergeDateAndTime(date, time2) {
56135
+ const match = TIME_RE.exec(time2);
56136
+ if (!match) return startOfDay(date);
56137
+ return set(startOfDay(date), {
56138
+ hours: Number(match[1]),
56139
+ minutes: Number(match[2]),
56140
+ seconds: match[3] === void 0 ? 0 : Number(match[3])
56141
+ });
56142
+ }
56143
+ function formatTimeOfDay(date, timeStep) {
56144
+ if (!isValid(date)) return "";
56145
+ return format(date, timeStep < 60 ? "HH:mm:ss" : "HH:mm");
56146
+ }
56147
+ var OPEN_KEYS = /* @__PURE__ */ new Set(["Enter", " ", "ArrowDown"]);
56148
+ function DateTimePicker(props) {
56149
+ const {
56150
+ value: value2,
56151
+ onChange,
56152
+ defaultValue,
56153
+ defaultTime = DEFAULT_TIME,
56154
+ timeStep = DEFAULT_TIME_STEP_SECONDS,
56155
+ clearable = false,
56156
+ clearLabel = "Clear",
56157
+ timeAriaLabel = "Time",
56158
+ formatDate: formatDate2,
56159
+ placeholder = "Pick date and time",
56160
+ label,
56161
+ size,
56162
+ hideIcon = false,
56163
+ disabled = false,
56164
+ required = false,
56165
+ rounded = false,
56166
+ error,
56167
+ errorContent,
56168
+ hintContent,
56169
+ calendarProps,
56170
+ open: controlledOpen,
56171
+ onOpenChange,
56172
+ name: name2,
56173
+ className
56174
+ } = props;
56175
+ const isControlled = "value" in props;
56176
+ const [uncontrolledValue, setUncontrolledValue] = React10.useState(defaultValue);
56177
+ const current = isControlled ? value2 : uncontrolledValue;
56178
+ const isOpenControlled = controlledOpen !== void 0;
56179
+ const [internalOpen, setInternalOpen] = React10.useState(false);
56180
+ const isOpen = isOpenControlled ? controlledOpen : internalOpen;
56181
+ const setOpen = (nextOpen) => {
56182
+ if (!isOpenControlled) setInternalOpen(nextOpen);
56183
+ onOpenChange?.(nextOpen);
56184
+ };
56185
+ const [draftTime, setDraftTime] = React10.useState(
56186
+ () => current ? formatTimeOfDay(current, timeStep) : ""
56187
+ );
56188
+ const currentMs = current?.getTime();
56189
+ React10.useEffect(() => {
56190
+ if (currentMs === void 0) return;
56191
+ setDraftTime(formatTimeOfDay(new Date(currentMs), timeStep));
56192
+ }, [currentMs, timeStep]);
56193
+ const commit = (next) => {
56194
+ if (!isControlled) setUncontrolledValue(next);
56195
+ onChange?.(next);
56196
+ };
56197
+ const handleDaySelect = (day) => {
56198
+ if (!day) {
56199
+ commit(void 0);
56200
+ return;
56201
+ }
56202
+ const time2 = isValidTimeString(draftTime) ? draftTime : defaultTime;
56203
+ commit(mergeDateAndTime(day, time2));
56204
+ };
56205
+ const handleTimeChange = (event) => {
56206
+ const nextTime = event.target.value;
56207
+ setDraftTime(nextTime);
56208
+ if (current && isValidTimeString(nextTime)) {
56209
+ commit(mergeDateAndTime(current, nextTime));
56210
+ }
56211
+ };
56212
+ const handleTimeBlur = () => {
56213
+ if (current && !isValidTimeString(draftTime)) {
56214
+ setDraftTime(formatTimeOfDay(current, timeStep));
56215
+ }
56216
+ };
56217
+ const handleClear = (event) => {
56218
+ event.stopPropagation();
56219
+ setDraftTime("");
56220
+ commit(void 0);
56221
+ };
56222
+ const handleTriggerKeyDown = (event) => {
56223
+ if (disabled || !OPEN_KEYS.has(event.key)) return;
56224
+ event.preventDefault();
56225
+ setOpen(true);
56226
+ };
56227
+ const displayValue = current ? (formatDate2 ?? ((d) => format(d, "PPP, p")))(current) : "";
56228
+ const showClear = clearable && !disabled && current !== void 0;
56229
+ const endIcon = /* @__PURE__ */ jsx(
56230
+ FieldEndIcons,
56231
+ {
56232
+ onClear: showClear ? handleClear : void 0,
56233
+ clearLabel,
56234
+ icon: hideIcon ? void 0 : /* @__PURE__ */ jsx(CalendarIcon, { size: FIELD_ICON_SIZE, className: "text-muted-foreground" })
56235
+ }
56236
+ );
56237
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex-1", className), children: [
56238
+ /* @__PURE__ */ jsxs(Popover, { open: isOpen, onOpenChange: setOpen, children: [
56239
+ /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, disabled, children: /* @__PURE__ */ jsx(
56240
+ Input,
56241
+ {
56242
+ type: "text",
56243
+ readOnly: true,
56244
+ value: displayValue,
56245
+ placeholder,
56246
+ label,
56247
+ size,
56248
+ disabled,
56249
+ required,
56250
+ rounded,
56251
+ error,
56252
+ errorContent,
56253
+ hintContent,
56254
+ endIcon,
56255
+ onKeyDown: handleTriggerKeyDown,
56256
+ "aria-haspopup": "dialog",
56257
+ className: cn(
56258
+ "cursor-pointer read-only:bg-background",
56259
+ fieldEndPaddingClassName(showClear, !hideIcon),
56260
+ !displayValue && "text-muted-foreground"
56261
+ )
56262
+ }
56263
+ ) }),
56264
+ /* @__PURE__ */ jsxs(PopoverContent, { align: "start", className: "w-auto overflow-hidden rounded-2xl p-1 shadow-lg", children: [
56265
+ /* @__PURE__ */ jsx(
56266
+ Calendar,
56267
+ {
56268
+ mode: "single",
56269
+ selected: current,
56270
+ onSelect: handleDaySelect,
56271
+ defaultMonth: current,
56272
+ showOutsideDays: true,
56273
+ captionLayout: "dropdown",
56274
+ ...calendarProps
56275
+ }
56276
+ ),
56277
+ /* @__PURE__ */ jsx("div", { className: "border-t border-border px-3 pb-3 pt-3", children: /* @__PURE__ */ jsx(
56278
+ TimePicker,
56279
+ {
56280
+ "aria-label": timeAriaLabel,
56281
+ value: draftTime,
56282
+ onChange: handleTimeChange,
56283
+ onBlur: handleTimeBlur,
56284
+ step: timeStep,
56285
+ size,
56286
+ disabled
56287
+ }
56288
+ ) })
56289
+ ] })
56290
+ ] }),
56291
+ name2 && /* @__PURE__ */ jsx("input", { type: "hidden", name: name2, value: current?.toISOString() ?? "" })
56292
+ ] });
56293
+ }
56294
+ DateTimePicker.displayName = "DateTimePicker";
55995
56295
  var PRESET_IDS = [
56296
+ // Calendar periods
55996
56297
  "today",
55997
56298
  "yesterday",
55998
56299
  "this-week",
@@ -56001,10 +56302,16 @@ var PRESET_IDS = [
56001
56302
  "last-month",
56002
56303
  "this-year",
56003
56304
  "last-year",
56305
+ // Trailing ranges, shortest first. A rolling preset (ends now) precedes
56306
+ // the day-snapped preset of the same length.
56307
+ "last-1-hour",
56308
+ "last-24-hours",
56004
56309
  "last-1-day",
56310
+ "past-7-days",
56005
56311
  "last-7-days",
56006
56312
  "last-14-days",
56007
56313
  "last-15-days",
56314
+ "past-30-days",
56008
56315
  "last-30-days",
56009
56316
  "last-4-weeks",
56010
56317
  "last-90-days",
@@ -56022,10 +56329,14 @@ var PRESET_LABELS = {
56022
56329
  "last-month": "Last month",
56023
56330
  "this-year": "This year",
56024
56331
  "last-year": "Last year",
56332
+ "last-1-hour": "Last 1 hour",
56333
+ "last-24-hours": "Last 24 hours",
56025
56334
  "last-1-day": "Last 1 day",
56335
+ "past-7-days": "Past 7 days",
56026
56336
  "last-7-days": "Last 7 days",
56027
56337
  "last-14-days": "Last 14 days",
56028
56338
  "last-15-days": "Last 15 days",
56339
+ "past-30-days": "Past 30 days",
56029
56340
  "last-30-days": "Last 30 days",
56030
56341
  "last-4-weeks": "Last 4 weeks",
56031
56342
  "last-90-days": "Last 90 days",
@@ -56034,6 +56345,12 @@ var PRESET_LABELS = {
56034
56345
  "last-1-year": "Last 1 year",
56035
56346
  "last-5-years": "Last 5 years"
56036
56347
  };
56348
+ var ROLLING_PRESET_IDS = [
56349
+ "last-1-hour",
56350
+ "last-24-hours",
56351
+ "past-7-days",
56352
+ "past-30-days"
56353
+ ];
56037
56354
  function computeDateRange(id) {
56038
56355
  const now = /* @__PURE__ */ new Date();
56039
56356
  switch (id) {
@@ -56110,6 +56427,14 @@ function computeDateRange(id) {
56110
56427
  return { startDate: startOfMonth(sub(now, { years: 1 })), endDate: endOfMonth(now) };
56111
56428
  case "last-5-years":
56112
56429
  return { startDate: startOfMonth(sub(now, { years: 5 })), endDate: endOfMonth(now) };
56430
+ case "last-1-hour":
56431
+ return { startDate: sub(now, { hours: 1 }), endDate: now };
56432
+ case "last-24-hours":
56433
+ return { startDate: sub(now, { hours: 24 }), endDate: now };
56434
+ case "past-7-days":
56435
+ return { startDate: sub(now, { days: 7 }), endDate: now };
56436
+ case "past-30-days":
56437
+ return { startDate: sub(now, { days: 30 }), endDate: now };
56113
56438
  }
56114
56439
  }
56115
56440
  var DEFAULT_DATE_FORMAT = "dd MMM yyyy";
@@ -56145,6 +56470,9 @@ function DateRangePicker({
56145
56470
  selectedPresetId,
56146
56471
  selectedStartDate,
56147
56472
  selectedEndDate,
56473
+ clearable = false,
56474
+ clearLabel = "Clear",
56475
+ onClear,
56148
56476
  trigger,
56149
56477
  placeholder = "Select date range",
56150
56478
  label,
@@ -56286,7 +56614,12 @@ function DateRangePicker({
56286
56614
  if (lockEndToToday) return;
56287
56615
  setEndInputValue(draftRange.endDate ? format(draftRange.endDate, dateFormat) : "");
56288
56616
  };
56617
+ const handleClear = () => {
56618
+ onClear?.();
56619
+ handleOpenChange(false);
56620
+ };
56289
56621
  const displayValue = selectedPresetId ? resolveLabel(selectedPresetId) : "";
56622
+ const hasSelection = !!(selectedPresetId || selectedStartDate);
56290
56623
  const inputTrigger = /* @__PURE__ */ jsx(
56291
56624
  Input,
56292
56625
  {
@@ -56382,6 +56715,22 @@ function DateRangePicker({
56382
56715
  ]
56383
56716
  }
56384
56717
  )
56718
+ ] }),
56719
+ clearable && hasSelection && /* @__PURE__ */ jsxs(Fragment, { children: [
56720
+ /* @__PURE__ */ jsx("div", { className: "mx-1 my-1 h-px bg-border" }),
56721
+ /* @__PURE__ */ jsxs(
56722
+ "button",
56723
+ {
56724
+ type: "button",
56725
+ onClick: handleClear,
56726
+ onMouseEnter: () => setShowCalendar(false),
56727
+ className: "flex w-full items-center justify-between gap-6 px-3 py-1.5 text-left text-sm text-muted-foreground hover:bg-accent",
56728
+ children: [
56729
+ clearLabel,
56730
+ /* @__PURE__ */ jsx(XIcon, { className: "size-4 shrink-0" })
56731
+ ]
56732
+ }
56733
+ )
56385
56734
  ] })
56386
56735
  ] }),
56387
56736
  allowCustom && showCalendar && /* @__PURE__ */ jsx(
@@ -56468,22 +56817,6 @@ function DateRangePicker({
56468
56817
  ] }) });
56469
56818
  }
56470
56819
  DateRangePicker.displayName = "DateRangePicker";
56471
- var timeInputChromeClass = "appearance-none bg-background [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none";
56472
- var TimePicker = React10.forwardRef(
56473
- ({ hideIcon = false, className, ...props }, ref) => {
56474
- return /* @__PURE__ */ jsx(
56475
- Input,
56476
- {
56477
- ref,
56478
- ...props,
56479
- type: "time",
56480
- className: cn(timeInputChromeClass, className),
56481
- endIcon: hideIcon ? void 0 : /* @__PURE__ */ jsx(ClockIcon, { size: 16, className: "text-muted-foreground" })
56482
- }
56483
- );
56484
- }
56485
- );
56486
- TimePicker.displayName = "TimePicker";
56487
56820
  var DEFAULT_DATE_FORMAT2 = "dd/MM/yyyy HH:mm:ss";
56488
56821
  var MS_THRESHOLD = 1e10;
56489
56822
  var RELATIVE_TIME_OUTER_CLASSES = "underline underline-offset-5 decoration-primary/20";
@@ -56505,7 +56838,7 @@ function computeRelativeTime(ms) {
56505
56838
  const years = Math.floor(months / 12);
56506
56839
  return `${years}y ago`;
56507
56840
  }
56508
- function formatDate(date, format4) {
56841
+ function formatDate(date, format6) {
56509
56842
  const pad = (n) => String(n).padStart(2, "0");
56510
56843
  const tokens = {
56511
56844
  dd: pad(date.getDate()),
@@ -56515,7 +56848,7 @@ function formatDate(date, format4) {
56515
56848
  mm: pad(date.getMinutes()),
56516
56849
  ss: pad(date.getSeconds())
56517
56850
  };
56518
- return format4.replace(/yyyy|MM|dd|HH|mm|ss/g, (match) => tokens[match]);
56851
+ return format6.replace(/yyyy|MM|dd|HH|mm|ss/g, (match) => tokens[match]);
56519
56852
  }
56520
56853
  function SimplifiedDate({ ts, dateFormat, className, relative = false }) {
56521
56854
  const ms = useMemo(() => ts != null ? normalizeTimestamp(ts) : null, [ts]);
@@ -57176,17 +57509,21 @@ function DataTable({
57176
57509
  () => enableRowSelection ? [selectColumn, ...columns] : columns,
57177
57510
  [enableRowSelection, selectColumn, columns]
57178
57511
  );
57512
+ const pagination = useMemo(() => ({ pageIndex: 0, pageSize }), [pageSize]);
57179
57513
  const table = useReactTable({
57180
57514
  data: data2,
57181
57515
  columns: tableColumns,
57182
57516
  state: {
57183
57517
  columnVisibility,
57184
- pagination: {
57185
- pageIndex: 0,
57186
- pageSize
57187
- },
57518
+ pagination,
57188
57519
  ...rowSelection !== void 0 && { rowSelection }
57189
57520
  },
57521
+ // With `manualPagination` unset, TanStack resets pageIndex (an internal
57522
+ // setState + re-render) whenever `data` changes identity. pageIndex is pinned
57523
+ // to 0 here, so that reset is a no-op; with consumers that pass a fresh array
57524
+ // each render (`data?.items ?? []`) it can loop into "Maximum update depth
57525
+ // exceeded".
57526
+ autoResetPageIndex: false,
57190
57527
  onColumnVisibilityChange: setColumnVisibility,
57191
57528
  enableRowSelection,
57192
57529
  enableMultiRowSelection,
@@ -57576,8 +57913,8 @@ function DeviceIcon({ type, size = 18, color, fallback: Fallback, className }) {
57576
57913
  const Matched = matchDevice(type);
57577
57914
  const Icon2 = Matched ?? Fallback;
57578
57915
  if (!Icon2) return null;
57579
- const resolved = color ? resolveColor(color, "text") : void 0;
57580
- return /* @__PURE__ */ jsx("span", { className: cn("inline-flex", resolved?.className, className), style: resolved?.style, children: /* @__PURE__ */ jsx(Icon2, { size }) });
57916
+ const resolved2 = color ? resolveColor(color, "text") : void 0;
57917
+ return /* @__PURE__ */ jsx("span", { className: cn("inline-flex", resolved2?.className, className), style: resolved2?.style, children: /* @__PURE__ */ jsx(Icon2, { size }) });
57581
57918
  }
57582
57919
  var userTypeBadgeRegistry = {
57583
57920
  admin: {
@@ -57695,7 +58032,7 @@ var StatusBadge = React10.forwardRef(
57695
58032
  ),
57696
58033
  children: [
57697
58034
  isLoading ? /* @__PURE__ */ jsx(Spinner, { size: iconPx, "aria-hidden": true }) : Icon2 ? /* @__PURE__ */ jsx(Icon2, { size: iconPx, "aria-hidden": true }) : null,
57698
- label
58035
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate", children: label })
57699
58036
  ]
57700
58037
  }
57701
58038
  ) });
@@ -59754,6 +60091,8 @@ function getHighlighter() {
59754
60091
  function normalizeLang(lang) {
59755
60092
  return LANG_ALIASES[lang.toLowerCase()] ?? lang;
59756
60093
  }
60094
+
60095
+ // src/core/animate-ui/primitives/animate/escape-html.ts
59757
60096
  function escapeHtml(input) {
59758
60097
  return input.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
59759
60098
  }
@@ -59881,6 +60220,33 @@ function CodeBlock({
59881
60220
  }
59882
60221
  );
59883
60222
  }
60223
+ function CodeHeader({ icon: Icon2, fileName, copyContent, copyLabel = "Copy", actions }) {
60224
+ const copyButton = copyContent !== void 0 && /* @__PURE__ */ jsx(
60225
+ CopyButton,
60226
+ {
60227
+ content: copyContent,
60228
+ size: "sm",
60229
+ variant: "ghost",
60230
+ "aria-label": copyLabel,
60231
+ title: copyLabel,
60232
+ className: cn(actions == null && "ml-auto", "w-auto h-auto p-2 -mr-2")
60233
+ }
60234
+ );
60235
+ return /* @__PURE__ */ jsxs(
60236
+ "div",
60237
+ {
60238
+ className: "shrink-0 gap-x-2 border-b border-border/75 dark:border-border/50 text-sm flex text-muted-foreground items-center px-4 w-full h-10 font-medium",
60239
+ children: [
60240
+ Icon2 && /* @__PURE__ */ jsx(Icon2, { className: "size-4" }),
60241
+ fileName,
60242
+ actions != null ? /* @__PURE__ */ jsxs("div", { className: "ml-auto flex items-center gap-1", children: [
60243
+ actions,
60244
+ copyButton
60245
+ ] }) : copyButton
60246
+ ]
60247
+ }
60248
+ );
60249
+ }
59884
60250
  function Code({
59885
60251
  className,
59886
60252
  code,
@@ -59907,23 +60273,12 @@ function Code({
59907
60273
  style: { height: height2, ...style },
59908
60274
  ...props,
59909
60275
  children: [
59910
- showHeader && /* @__PURE__ */ jsxs(
59911
- "div",
60276
+ showHeader && /* @__PURE__ */ jsx(
60277
+ CodeHeader,
59912
60278
  {
59913
- className: "shrink-0 gap-x-2 border-b border-border/75 dark:border-border/50 text-sm flex text-muted-foreground items-center px-4 w-full h-10 font-medium",
59914
- children: [
59915
- Icon2 && /* @__PURE__ */ jsx(Icon2, { className: "size-4" }),
59916
- fileName,
59917
- showCopyButton && /* @__PURE__ */ jsx(
59918
- CopyButton,
59919
- {
59920
- content: code,
59921
- size: "sm",
59922
- variant: "ghost",
59923
- className: "ml-auto w-auto h-auto p-2 -mr-2"
59924
- }
59925
- )
59926
- ]
60279
+ icon: Icon2,
60280
+ fileName,
60281
+ copyContent: showCopyButton ? code : void 0
59927
60282
  }
59928
60283
  ),
59929
60284
  lang && /* @__PURE__ */ jsx(
@@ -60742,14 +61097,79 @@ function DynamicList({
60742
61097
  );
60743
61098
  }) });
60744
61099
  }
61100
+ function KeyValueManagerField({
61101
+ field,
61102
+ label,
61103
+ value: value2,
61104
+ meta,
61105
+ error,
61106
+ errorMessage,
61107
+ selectPlaceholder,
61108
+ onChange
61109
+ }) {
61110
+ const errorContent = error ? errorMessage : void 0;
61111
+ if (meta?.options) {
61112
+ return (
61113
+ // Remounted when cleared: a Radix Select can't show its placeholder again once it held a value.
61114
+ /* @__PURE__ */ jsxs(
61115
+ Select,
61116
+ {
61117
+ value: value2 || void 0,
61118
+ onValueChange: onChange,
61119
+ children: [
61120
+ /* @__PURE__ */ jsx(
61121
+ SelectTrigger,
61122
+ {
61123
+ label,
61124
+ size: "sm",
61125
+ error,
61126
+ errorContent,
61127
+ children: /* @__PURE__ */ jsx(SelectValue, { placeholder: selectPlaceholder })
61128
+ }
61129
+ ),
61130
+ /* @__PURE__ */ jsx(SelectContent, { children: meta.options.map((option) => /* @__PURE__ */ jsx(SelectItem, { value: option, children: option }, option)) })
61131
+ ]
61132
+ },
61133
+ value2 ? "selected" : "empty"
61134
+ )
61135
+ );
61136
+ }
61137
+ if (field === "key") {
61138
+ return /* @__PURE__ */ jsx(
61139
+ Input,
61140
+ {
61141
+ label,
61142
+ value: value2,
61143
+ charLimit: meta?.maxLength,
61144
+ error,
61145
+ size: "sm",
61146
+ errorContent,
61147
+ onChange: (e) => onChange(e.target.value)
61148
+ }
61149
+ );
61150
+ }
61151
+ return /* @__PURE__ */ jsx(
61152
+ Textarea,
61153
+ {
61154
+ label,
61155
+ value: value2,
61156
+ charLimit: meta?.maxLength,
61157
+ error,
61158
+ errorContent,
61159
+ onChange: (e) => onChange(e.target.value),
61160
+ size: "sm"
61161
+ }
61162
+ );
61163
+ }
60745
61164
 
60746
61165
  // src/components/key-value-manager/key-value-manager.utils.ts
60747
61166
  function validateField(value2, meta) {
60748
61167
  if (!value2.trim()) return false;
60749
61168
  if (meta?.maxLength != null && value2.length > meta.maxLength) return false;
61169
+ if (meta?.options && !meta.options.includes(value2)) return false;
60750
61170
  if (meta?.regex) {
60751
61171
  try {
60752
- if (!new RegExp(meta.regex).test(value2)) return false;
61172
+ if (!new RegExp(meta.regex, meta.regexFlags).test(value2)) return false;
60753
61173
  } catch {
60754
61174
  }
60755
61175
  }
@@ -60838,27 +61258,29 @@ function KeyValueManagerAddPopover({
60838
61258
  ) }),
60839
61259
  /* @__PURE__ */ jsxs(PopoverContent, { align: "end", className: "w-80 space-y-4", children: [
60840
61260
  /* @__PURE__ */ jsx(
60841
- Input,
61261
+ KeyValueManagerField,
60842
61262
  {
61263
+ field: "key",
60843
61264
  label: labels.keyLabel,
60844
61265
  value: draftKey,
60845
- charLimit: meta?.key?.maxLength,
61266
+ meta: meta?.key,
60846
61267
  error: keyError,
60847
- size: "sm",
60848
- errorContent: keyError ? labels.keyErrorMessage : void 0,
60849
- onChange: (e) => handleFieldChange("key", e.target.value)
61268
+ errorMessage: labels.keyErrorMessage,
61269
+ selectPlaceholder: labels.selectPlaceholder,
61270
+ onChange: (value2) => handleFieldChange("key", value2)
60850
61271
  }
60851
61272
  ),
60852
61273
  /* @__PURE__ */ jsx(
60853
- Textarea,
61274
+ KeyValueManagerField,
60854
61275
  {
61276
+ field: "value",
60855
61277
  label: labels.valueLabel,
60856
61278
  value: draftValue,
60857
- charLimit: meta?.value?.maxLength,
61279
+ meta: meta?.value,
60858
61280
  error: valueError,
60859
- errorContent: valueError ? labels.valueErrorMessage : void 0,
60860
- onChange: (e) => handleFieldChange("value", e.target.value),
60861
- size: "sm"
61281
+ errorMessage: labels.valueErrorMessage,
61282
+ selectPlaceholder: labels.selectPlaceholder,
61283
+ onChange: (value2) => handleFieldChange("value", value2)
60862
61284
  }
60863
61285
  ),
60864
61286
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
@@ -61021,7 +61443,8 @@ var STATIC_DEFAULT_LABELS = {
61021
61443
  valueLabel: "Value",
61022
61444
  actionLabel: "Action",
61023
61445
  emptyItems: "No items",
61024
- emptySearch: "No matches"
61446
+ emptySearch: "No matches",
61447
+ selectPlaceholder: "Select"
61025
61448
  };
61026
61449
  function resolveKeyValueManagerLabels(labels) {
61027
61450
  const merged = { ...STATIC_DEFAULT_LABELS, ...labels };
@@ -61590,6 +62013,7 @@ function OverflowBadgeList({
61590
62013
  icon: Icon2,
61591
62014
  badgeColor,
61592
62015
  badgeVariant = "outline",
62016
+ badgeSize = "default",
61593
62017
  maxBadgesToShow = 1,
61594
62018
  noneLabel,
61595
62019
  andMoreLabel,
@@ -61603,16 +62027,15 @@ function OverflowBadgeList({
61603
62027
  const hiddenCount = items.length - visibleCount;
61604
62028
  const tooltipContent = hiddenCount > 0 ? /* @__PURE__ */ jsx("ul", { className: "max-h-48 max-w-xs list-disc space-y-1 overflow-y-auto pl-4 text-left text-sm", children: items.map((item, index2) => /* @__PURE__ */ jsx("li", { className: "break-words", children: item }, `${item}-${index2}`)) }) : null;
61605
62029
  return /* @__PURE__ */ jsxs("div", { className: cn("flex min-w-0 flex-wrap items-center gap-2", className), children: [
61606
- visibleItems.map((item, index2) => /* @__PURE__ */ jsxs(
61607
- Badge,
62030
+ visibleItems.map((item, index2) => /* @__PURE__ */ jsx(
62031
+ StatusBadge,
61608
62032
  {
62033
+ label: item,
62034
+ icon: index2 === 0 ? Icon2 : void 0,
61609
62035
  variant: badgeVariant,
61610
62036
  color: badgeColor,
61611
- className: "inline-flex max-w-[min(100%,12rem)] items-center gap-1 font-normal text-xs",
61612
- children: [
61613
- index2 === 0 && Icon2 ? /* @__PURE__ */ jsx(Icon2, { className: "h-2.5 w-2.5 shrink-0", "aria-hidden": true }) : null,
61614
- /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate", children: item })
61615
- ]
62037
+ size: badgeSize,
62038
+ className: "max-w-[12rem]"
61616
62039
  },
61617
62040
  `${item}-${index2}`
61618
62041
  )),
@@ -67833,6 +68256,506 @@ var SimpleInfoCard = React10.forwardRef(
67833
68256
  }
67834
68257
  );
67835
68258
  SimpleInfoCard.displayName = "SimpleInfoCard";
68259
+
68260
+ // src/components/code-editor/code-editor.utils.ts
68261
+ function getLineStart(value2, pos) {
68262
+ return value2.lastIndexOf("\n", pos - 1) + 1;
68263
+ }
68264
+ function getLineEnd(value2, pos) {
68265
+ const next = value2.indexOf("\n", pos);
68266
+ return next === -1 ? value2.length : next;
68267
+ }
68268
+ function getLineIndent(value2, pos) {
68269
+ const lineStart = getLineStart(value2, pos);
68270
+ return /^[ \t]*/.exec(value2.slice(lineStart, pos))[0];
68271
+ }
68272
+ function isMultiLineSelection(value2, start, end) {
68273
+ return value2.slice(start, end).includes("\n");
68274
+ }
68275
+ function getSelectedLineStarts(value2, start, end) {
68276
+ const lastPos = end > start && value2[end - 1] === "\n" ? end - 1 : end;
68277
+ const starts = [getLineStart(value2, start)];
68278
+ for (let i = value2.indexOf("\n", starts[0]); i !== -1 && i < lastPos; i = value2.indexOf("\n", i + 1)) {
68279
+ starts.push(i + 1);
68280
+ }
68281
+ return starts;
68282
+ }
68283
+ function insertTab(value2, start, end, tabSize) {
68284
+ const column = start - getLineStart(value2, start);
68285
+ const text2 = " ".repeat(tabSize - column % tabSize);
68286
+ const caret = start + text2.length;
68287
+ return { start, end, text: text2, selectionStart: caret, selectionEnd: caret };
68288
+ }
68289
+ function indentLines(value2, start, end, tabSize) {
68290
+ const lineStarts = getSelectedLineStarts(value2, start, end);
68291
+ const blockStart = lineStarts[0];
68292
+ const blockEnd = getLineEnd(value2, lineStarts[lineStarts.length - 1]);
68293
+ const indent = " ".repeat(tabSize);
68294
+ const added = lineStarts.map(
68295
+ (lineStart) => lineStart === getLineEnd(value2, lineStart) ? 0 : tabSize
68296
+ );
68297
+ const lines = value2.slice(blockStart, blockEnd).split("\n");
68298
+ const text2 = lines.map((line, i) => added[i] ? indent + line : line).join("\n");
68299
+ const mapOffset = (pos, keepAtLineStart) => {
68300
+ let shift = 0;
68301
+ lineStarts.forEach((lineStart, i) => {
68302
+ if (lineStart < pos || lineStart === pos && !keepAtLineStart) shift += added[i];
68303
+ });
68304
+ return pos + shift;
68305
+ };
68306
+ return {
68307
+ start: blockStart,
68308
+ end: blockEnd,
68309
+ text: text2,
68310
+ // A selection starting at column 0 keeps starting there, so the new indentation is selected too.
68311
+ selectionStart: mapOffset(start, true),
68312
+ selectionEnd: mapOffset(end, false)
68313
+ };
68314
+ }
68315
+ function outdentLines(value2, start, end, tabSize) {
68316
+ const lineStarts = getSelectedLineStarts(value2, start, end);
68317
+ const blockStart = lineStarts[0];
68318
+ const blockEnd = getLineEnd(value2, lineStarts[lineStarts.length - 1]);
68319
+ const lines = value2.slice(blockStart, blockEnd).split("\n");
68320
+ const removed = lines.map(
68321
+ (line) => line.startsWith(" ") ? 1 : Math.min(tabSize, /^ */.exec(line)[0].length)
68322
+ );
68323
+ const text2 = lines.map((line, i) => line.slice(removed[i])).join("\n");
68324
+ const mapOffset = (pos) => {
68325
+ let shift = 0;
68326
+ lineStarts.forEach((lineStart, i) => {
68327
+ if (lineStart <= pos) shift += Math.min(removed[i], pos - lineStart);
68328
+ });
68329
+ return pos - shift;
68330
+ };
68331
+ return {
68332
+ start: blockStart,
68333
+ end: blockEnd,
68334
+ text: text2,
68335
+ selectionStart: mapOffset(start),
68336
+ selectionEnd: mapOffset(end)
68337
+ };
68338
+ }
68339
+ function insertNewline(value2, start, end) {
68340
+ const text2 = "\n" + getLineIndent(value2, start);
68341
+ const caret = start + text2.length;
68342
+ return { start, end, text: text2, selectionStart: caret, selectionEnd: caret };
68343
+ }
68344
+ function applyTextEdit(value2, edit) {
68345
+ return value2.slice(0, edit.start) + edit.text + value2.slice(edit.end);
68346
+ }
68347
+ function formatJson(value2, tabSize) {
68348
+ return JSON.stringify(JSON.parse(value2), null, tabSize);
68349
+ }
68350
+ function getBuiltInFormatter(lang) {
68351
+ return lang.toLowerCase() === "json" ? formatJson : void 0;
68352
+ }
68353
+ function applyEdit(el, edit) {
68354
+ const current = el.value;
68355
+ const expected = applyTextEdit(current, edit);
68356
+ if (expected === current) {
68357
+ el.setSelectionRange(edit.selectionStart, edit.selectionEnd);
68358
+ return;
68359
+ }
68360
+ if (el.ownerDocument.activeElement !== el) el.focus({ preventScroll: true });
68361
+ el.setSelectionRange(edit.start, edit.end);
68362
+ let applied = false;
68363
+ try {
68364
+ applied = typeof document.execCommand === "function" && document.execCommand(edit.text ? "insertText" : "delete", false, edit.text);
68365
+ } catch {
68366
+ applied = false;
68367
+ }
68368
+ if (!applied || el.value !== expected) {
68369
+ if (el.value !== current) el.value = current;
68370
+ el.setRangeText(edit.text, edit.start, edit.end, "end");
68371
+ el.dispatchEvent(new Event("input", { bubbles: true }));
68372
+ }
68373
+ el.setSelectionRange(edit.selectionStart, edit.selectionEnd);
68374
+ }
68375
+ function useCodeEditorKeys({ tabSize, onKeyDown, onBlur }) {
68376
+ const tabReleasedRef = React10.useRef(false);
68377
+ const handleKeyDown = React10.useCallback(
68378
+ (event) => {
68379
+ onKeyDown?.(event);
68380
+ if (event.defaultPrevented) return;
68381
+ if (event.nativeEvent.isComposing || event.keyCode === 229) return;
68382
+ const el = event.currentTarget;
68383
+ if (el.readOnly || el.disabled) return;
68384
+ if (event.key === "Escape") {
68385
+ tabReleasedRef.current = true;
68386
+ return;
68387
+ }
68388
+ if (event.key === "Shift") return;
68389
+ const released = tabReleasedRef.current;
68390
+ tabReleasedRef.current = false;
68391
+ const { value: value2, selectionStart: start, selectionEnd: end } = el;
68392
+ if (event.key === "Tab") {
68393
+ if (released || event.altKey || event.ctrlKey || event.metaKey) return;
68394
+ event.preventDefault();
68395
+ if (event.shiftKey) {
68396
+ applyEdit(el, outdentLines(value2, start, end, tabSize));
68397
+ } else if (isMultiLineSelection(value2, start, end)) {
68398
+ applyEdit(el, indentLines(value2, start, end, tabSize));
68399
+ } else {
68400
+ applyEdit(el, insertTab(value2, start, end, tabSize));
68401
+ }
68402
+ return;
68403
+ }
68404
+ if (event.key === "Enter" && !event.shiftKey && !event.altKey && !event.ctrlKey && !event.metaKey) {
68405
+ event.preventDefault();
68406
+ applyEdit(el, insertNewline(value2, start, end));
68407
+ }
68408
+ },
68409
+ [onKeyDown, tabSize]
68410
+ );
68411
+ const handleBlur = React10.useCallback(
68412
+ (event) => {
68413
+ tabReleasedRef.current = false;
68414
+ onBlur?.(event);
68415
+ },
68416
+ [onBlur]
68417
+ );
68418
+ return { onKeyDown: handleKeyDown, onBlur: handleBlur };
68419
+ }
68420
+ var DEFAULT_CODE_EDITOR_THEMES = {
68421
+ light: "everforest-light",
68422
+ dark: "everforest-dark"
68423
+ };
68424
+ var PLAIN_LANGS = /* @__PURE__ */ new Set(["text", "plaintext", "txt", "plain"]);
68425
+ var TRAILING_LINE = "\u200B";
68426
+ var transformer = {
68427
+ // Shiki makes its `<pre>` focusable; this one sits in an `aria-hidden` layer.
68428
+ pre(node) {
68429
+ delete node.properties.tabindex;
68430
+ },
68431
+ code(node) {
68432
+ node.children.push({ type: "text", value: TRAILING_LINE });
68433
+ }
68434
+ };
68435
+ function plainHtml(value2) {
68436
+ return `<pre><code>${escapeHtml(value2)}${TRAILING_LINE}</code></pre>`;
68437
+ }
68438
+ var warned = /* @__PURE__ */ new Set();
68439
+ function warnOnce(key2, message, error) {
68440
+ if (warned.has(key2)) return;
68441
+ warned.add(key2);
68442
+ console.warn(`[dashboard-ui-components] ${message}`, ...error ? [error] : []);
68443
+ }
68444
+ var resolved = /* @__PURE__ */ new WeakMap();
68445
+ function useHighlightedHtml(value2, { lang, theme, themes, maxHighlightLength }) {
68446
+ const [highlighter, setHighlighter] = React10.useState(() => {
68447
+ const promise = getHighlighter();
68448
+ return resolved.get(promise) ?? null;
68449
+ });
68450
+ React10.useEffect(() => {
68451
+ if (highlighter) return;
68452
+ let active2 = true;
68453
+ const promise = getHighlighter();
68454
+ promise.then(
68455
+ (loaded) => {
68456
+ resolved.set(promise, loaded);
68457
+ if (active2) setHighlighter(loaded);
68458
+ },
68459
+ (error) => warnOnce("load", "Syntax highlighter failed to load; showing plain text.", error)
68460
+ );
68461
+ return () => {
68462
+ active2 = false;
68463
+ };
68464
+ }, [highlighter]);
68465
+ const deferredValue = React10.useDeferredValue(value2);
68466
+ const { light, dark } = themes;
68467
+ return React10.useMemo(() => {
68468
+ if (!highlighter || deferredValue.length > maxHighlightLength) {
68469
+ return plainHtml(deferredValue);
68470
+ }
68471
+ const normalizedLang = normalizeLang(lang);
68472
+ if (!PLAIN_LANGS.has(normalizedLang) && !highlighter.getLoadedLanguages().includes(normalizedLang)) {
68473
+ warnOnce(
68474
+ `lang:${lang}`,
68475
+ `Falling back to plain text for lang="${lang}"; not in the curated Shiki bundle.`
68476
+ );
68477
+ return plainHtml(deferredValue);
68478
+ }
68479
+ try {
68480
+ return highlighter.codeToHtml(deferredValue, {
68481
+ lang: normalizedLang,
68482
+ themes: { light, dark },
68483
+ defaultColor: theme,
68484
+ transformers: [transformer]
68485
+ });
68486
+ } catch (error) {
68487
+ warnOnce(
68488
+ `theme:${light}:${dark}:${lang}`,
68489
+ `Falling back to plain text for themes "${light}" / "${dark}" with lang="${lang}".`,
68490
+ error
68491
+ );
68492
+ return plainHtml(deferredValue);
68493
+ }
68494
+ }, [highlighter, deferredValue, lang, theme, light, dark, maxHighlightLength]);
68495
+ }
68496
+ var layerClassName = "col-start-1 row-start-1 m-0 box-border border-0 p-4 font-mono text-[16px] leading-normal tracking-normal [font-variant-ligatures:none] md:text-[13px]";
68497
+ var highlightClassName = "[&_pre]:m-0 [&_pre]:p-0 [&_pre]:!bg-transparent [&_pre]:[font:inherit] [&_pre]:[white-space:inherit] [&_pre]:[overflow-wrap:inherit] [&_code]:[font:inherit]";
68498
+ function observeValueWrites(node, onWrite) {
68499
+ const own = Object.getOwnPropertyDescriptor(node, "value");
68500
+ const base = own ?? Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, "value");
68501
+ if (!base?.get || !base.set || own && !own.configurable) return () => {
68502
+ };
68503
+ const { get, set: set2 } = base;
68504
+ Object.defineProperty(node, "value", {
68505
+ configurable: true,
68506
+ enumerable: base.enumerable,
68507
+ get() {
68508
+ return get.call(this);
68509
+ },
68510
+ set(next) {
68511
+ set2.call(this, next);
68512
+ onWrite(get.call(this));
68513
+ }
68514
+ });
68515
+ const form = node.form;
68516
+ const handleReset = () => setTimeout(() => onWrite(node.value));
68517
+ form?.addEventListener("reset", handleReset);
68518
+ return () => {
68519
+ form?.removeEventListener("reset", handleReset);
68520
+ if (own) Object.defineProperty(node, "value", own);
68521
+ else delete node.value;
68522
+ };
68523
+ }
68524
+ function hasContent(node) {
68525
+ return node != null && node !== false && node !== "";
68526
+ }
68527
+ function toCssSize(size) {
68528
+ return typeof size === "number" ? `${size}px` : size;
68529
+ }
68530
+ var CodeEditor = React10.forwardRef(
68531
+ ({
68532
+ className,
68533
+ style,
68534
+ lang = "json",
68535
+ theme = "light",
68536
+ themes = DEFAULT_CODE_EDITOR_THEMES,
68537
+ hideHeader = false,
68538
+ fileName,
68539
+ icon,
68540
+ copyButton = true,
68541
+ formatButton,
68542
+ formatter,
68543
+ onFormatError,
68544
+ formatLabel = "Format",
68545
+ copyLabel,
68546
+ headerActions,
68547
+ label,
68548
+ required,
68549
+ hintContent,
68550
+ error,
68551
+ errorContent,
68552
+ minHeight,
68553
+ maxHeight,
68554
+ wrap = false,
68555
+ tabSize = 2,
68556
+ maxHighlightLength = 1e4,
68557
+ id,
68558
+ value: value2,
68559
+ defaultValue,
68560
+ onChange,
68561
+ onKeyDown,
68562
+ onBlur,
68563
+ onScroll,
68564
+ disabled,
68565
+ readOnly,
68566
+ "aria-describedby": ariaDescribedBy,
68567
+ ...textareaProps
68568
+ }, forwardedRef) => {
68569
+ const autoId = React10.useId();
68570
+ const textareaId = id || autoId;
68571
+ const errorId = `${textareaId}-error`;
68572
+ const hasError = error || !!errorContent;
68573
+ const isControlled = value2 !== void 0;
68574
+ const [innerValue, setInnerValue] = React10.useState(
68575
+ () => defaultValue == null ? "" : String(defaultValue)
68576
+ );
68577
+ const currentValue = isControlled ? String(value2 ?? "") : innerValue;
68578
+ const html = useHighlightedHtml(currentValue, {
68579
+ lang,
68580
+ theme,
68581
+ themes,
68582
+ maxHighlightLength
68583
+ });
68584
+ const keys = useCodeEditorKeys({ tabSize, onKeyDown, onBlur });
68585
+ const textareaRef = React10.useRef(null);
68586
+ const stopObservingRef = React10.useRef(void 0);
68587
+ const setTextareaRef = React10.useCallback(
68588
+ (node) => {
68589
+ textareaRef.current = node;
68590
+ stopObservingRef.current?.();
68591
+ stopObservingRef.current = void 0;
68592
+ if (node && !isControlled) {
68593
+ stopObservingRef.current = observeValueWrites(node, setInnerValue);
68594
+ setInnerValue(node.value);
68595
+ }
68596
+ if (typeof forwardedRef === "function") forwardedRef(node);
68597
+ else if (forwardedRef) forwardedRef.current = node;
68598
+ },
68599
+ [forwardedRef, isControlled]
68600
+ );
68601
+ const handleChange = (event) => {
68602
+ if (!isControlled) setInnerValue(event.target.value);
68603
+ onChange?.(event);
68604
+ };
68605
+ const handleScroll = (event) => {
68606
+ const el = event.currentTarget;
68607
+ if (el.scrollTop !== 0) el.scrollTop = 0;
68608
+ if (el.scrollLeft !== 0) el.scrollLeft = 0;
68609
+ onScroll?.(event);
68610
+ };
68611
+ const builtInFormatter = getBuiltInFormatter(lang);
68612
+ const format6 = formatter ?? (builtInFormatter && ((v) => builtInFormatter(v, tabSize)));
68613
+ const showFormatButton = formatButton !== false && format6 !== void 0;
68614
+ const handleFormat = () => {
68615
+ const el = textareaRef.current;
68616
+ if (!el || !format6) return;
68617
+ let formatted;
68618
+ try {
68619
+ formatted = format6(el.value);
68620
+ } catch (formatError) {
68621
+ onFormatError?.(formatError);
68622
+ return;
68623
+ }
68624
+ applyEdit(el, {
68625
+ start: 0,
68626
+ end: el.value.length,
68627
+ text: formatted,
68628
+ selectionStart: 0,
68629
+ selectionEnd: 0
68630
+ });
68631
+ };
68632
+ const describedBy = [ariaDescribedBy, errorContent ? errorId : void 0].filter(Boolean).join(" ") || void 0;
68633
+ const wrapClassName = wrap ? "whitespace-pre-wrap [overflow-wrap:anywhere]" : "whitespace-pre [overflow-wrap:normal]";
68634
+ const showHeader = !hideHeader && (hasContent(fileName) || copyButton || showFormatButton || hasContent(headerActions));
68635
+ const actions = hasContent(headerActions) || showFormatButton ? /* @__PURE__ */ jsxs(Fragment, { children: [
68636
+ headerActions,
68637
+ showFormatButton && /* @__PURE__ */ jsx(
68638
+ "button",
68639
+ {
68640
+ type: "button",
68641
+ "data-slot": "code-editor-format",
68642
+ "aria-label": formatLabel,
68643
+ title: formatLabel,
68644
+ disabled: disabled || readOnly || currentValue.trim() === "",
68645
+ onClick: handleFormat,
68646
+ className: cn(buttonVariants$1({ variant: "ghost", size: "sm" }), "w-auto h-auto p-2"),
68647
+ children: /* @__PURE__ */ jsx(Braces, {})
68648
+ }
68649
+ )
68650
+ ] }) : void 0;
68651
+ const editor = /* @__PURE__ */ jsxs(
68652
+ "div",
68653
+ {
68654
+ "data-slot": "code-editor",
68655
+ "data-disabled": disabled ? "" : void 0,
68656
+ className: cn(
68657
+ "relative flex flex-col overflow-hidden rounded-lg border bg-background ring-offset-background transition-[box-shadow,border-color] duration-200 ease-in-out",
68658
+ "has-[textarea:focus-visible]:ring-2 has-[textarea:focus-visible]:ring-ring has-[textarea:focus-visible]:ring-offset-2",
68659
+ hasError && "border-destructive has-[textarea:focus-visible]:ring-destructive",
68660
+ className
68661
+ ),
68662
+ style,
68663
+ children: [
68664
+ showHeader && /* @__PURE__ */ jsx(
68665
+ CodeHeader,
68666
+ {
68667
+ icon,
68668
+ fileName,
68669
+ actions,
68670
+ copyContent: copyButton ? currentValue : void 0,
68671
+ copyLabel
68672
+ }
68673
+ ),
68674
+ /* @__PURE__ */ jsx(
68675
+ "div",
68676
+ {
68677
+ className: cn(
68678
+ "relative min-h-0 flex-1 overflow-auto bg-accent/10",
68679
+ disabled && "cursor-not-allowed opacity-50"
68680
+ ),
68681
+ style: { maxHeight: toCssSize(maxHeight) },
68682
+ children: /* @__PURE__ */ jsxs(
68683
+ "div",
68684
+ {
68685
+ className: cn("grid", wrap ? "w-full grid-cols-[minmax(0,1fr)]" : "w-max min-w-full"),
68686
+ style: { minHeight: toCssSize(minHeight), tabSize },
68687
+ children: [
68688
+ /* @__PURE__ */ jsxs("div", { "aria-hidden": true, className: cn(layerClassName, wrapClassName, "invisible"), children: [
68689
+ currentValue,
68690
+ "\u200B"
68691
+ ] }),
68692
+ /* @__PURE__ */ jsx(
68693
+ "div",
68694
+ {
68695
+ "aria-hidden": true,
68696
+ className: cn(layerClassName, wrapClassName, highlightClassName, "pointer-events-none"),
68697
+ dangerouslySetInnerHTML: { __html: html }
68698
+ }
68699
+ ),
68700
+ /* @__PURE__ */ jsx(
68701
+ "textarea",
68702
+ {
68703
+ id: textareaId,
68704
+ ref: setTextareaRef,
68705
+ value: value2,
68706
+ defaultValue,
68707
+ disabled,
68708
+ readOnly,
68709
+ required,
68710
+ wrap: wrap ? "soft" : "off",
68711
+ spellCheck: false,
68712
+ autoCapitalize: "off",
68713
+ autoComplete: "off",
68714
+ autoCorrect: "off",
68715
+ translate: "no",
68716
+ "data-gramm": "false",
68717
+ "aria-invalid": hasError || void 0,
68718
+ "aria-describedby": describedBy,
68719
+ ...textareaProps,
68720
+ onChange: handleChange,
68721
+ onKeyDown: keys.onKeyDown,
68722
+ onBlur: keys.onBlur,
68723
+ onScroll: handleScroll,
68724
+ style: { tabSize },
68725
+ className: cn(
68726
+ layerClassName,
68727
+ wrapClassName,
68728
+ "relative z-10 h-full w-full resize-none overflow-hidden bg-transparent text-transparent caret-foreground outline-none [-webkit-text-fill-color:transparent]",
68729
+ "placeholder:text-muted-foreground placeholder:[-webkit-text-fill-color:var(--color-muted-foreground)] selection:bg-primary/20",
68730
+ "disabled:cursor-not-allowed read-only:cursor-default"
68731
+ )
68732
+ }
68733
+ )
68734
+ ]
68735
+ }
68736
+ )
68737
+ }
68738
+ )
68739
+ ]
68740
+ }
68741
+ );
68742
+ if (label == null && hintContent == null && errorContent == null) return editor;
68743
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-2 flex-1", children: [
68744
+ label != null ? /* @__PURE__ */ jsx(
68745
+ FieldLabelRow,
68746
+ {
68747
+ htmlFor: textareaId,
68748
+ label,
68749
+ required,
68750
+ hintContent
68751
+ }
68752
+ ) : hintContent != null && /* @__PURE__ */ jsx("span", { className: fieldHintClassName, children: hintContent }),
68753
+ editor,
68754
+ errorContent != null && /* @__PURE__ */ jsx("div", { id: errorId, className: "text-sm text-destructive", children: errorContent })
68755
+ ] });
68756
+ }
68757
+ );
68758
+ CodeEditor.displayName = "CodeEditor";
67836
68759
  var maxWidthClasses = {
67837
68760
  sm: "max-w-2xl",
67838
68761
  md: "max-w-4xl",
@@ -68013,4 +68936,4 @@ lottie-react/build/index.es.js:
68013
68936
  (*! goToAndStop must be relative to the start of the current segment *)
68014
68937
  */
68015
68938
 
68016
- export { Accordion3 as Accordion, AdvancedSearchBox, Alert, AnimatedCard, AnimatedRainmakerLogo, AreaChart, AsyncCombobox, AsyncMultiSelect, BarChart, BasicDetailsCard, CHART_CATEGORY_COLORS, CHART_SERIES_COLORS, Calendar, CalendarDayButton, Carousel2 as Carousel, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox2 as Checkbox, CircularProgress, Code, CollapsibleCard, ComposedChart, ConfirmationDialog, ContentContainer, CopiableText, DEFAULT_CHART_SERIES_COLORS, DEFAULT_PAGE_SIZE_OPTIONS, DataTable, DatePicker, DateRangePicker, DeviceIcon, Dialog2 as Dialog, DialogClose2 as DialogClose, DialogContent2 as DialogContent, DialogDescription2 as DialogDescription, DialogFooter2 as DialogFooter, DialogHeader2 as DialogHeader, DialogTitle2 as DialogTitle, DialogTrigger2 as DialogTrigger, DonutChart, DynamicList, FileInput, FileUpload, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, FullSizeError, FullscreenDialog, IconAvatar, IconTextActionCard, Illustration, InlineError, InputOTP, InputOTPSeparator, KeyValueManager, LineChart, ListDetails, LottieAnimationContainer, MarkdownContent, MonospaceContent, NavBar, OverflowBadgeList, PRESET_IDS, PRESET_LABELS, PageContainer, PageContainerSkeleton, Pagination, PopCollectionItem, PreviewCard2 as PreviewCard, PreviewCardBackdrop2 as PreviewCardBackdrop, PreviewCardPanel, PreviewCardTrigger2 as PreviewCardTrigger, ProgressBar, RadioGroup3 as RadioGroup, RequirementList, ScrollableSections, SearchBox, SectionCard, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SelectableCardList, SimpleCard, SimpleClickableCard, SimpleInfoCard, SimpleList, SimplePaginatedList, SimplifiedDate, Spinner, StatCard, StatusBadge, StatusCardList, Switch2 as Switch, TYPOGRAPHY_VARIANTS, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, TableSkeleton, Tabs2 as Tabs, TabsContent2 as TabsContent, TabsContents2 as TabsContents, TabsList2 as TabsList, TabsTrigger2 as TabsTrigger, Tag, TagInput, Textarea, TimePicker, Toast, Toaster, TogglableItemsList, ToggleGroup2 as ToggleGroup, ToggleGroupItem2 as ToggleGroupItem, TransferList, TreemapChart, Typography, UserTypeBadge, VerificationInProgress, VerticalStepper, animatedCardAnimations, animatedCardTypeKeys, buildSeriesChartConfig, computeDateRange, getChartSeriesColor, illustrationRegistry, illustrationsById, no_data_card_default, parseSvgViewBoxAspectRatio, statusBadgeSizeVariants, toast, typographyDefaultElement, typographyVariantClasses, useFormField, userTypeBadgeRegistry, userTypeBadgeSizeVariants, userTypeBadgeUserTypes };
68939
+ export { Accordion3 as Accordion, AdvancedSearchBox, Alert, AnimatedCard, AnimatedRainmakerLogo, AreaChart, AsyncCombobox, AsyncMultiSelect, BarChart, BasicDetailsCard, CHART_CATEGORY_COLORS, CHART_SERIES_COLORS, Calendar, CalendarDayButton, Carousel2 as Carousel, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox2 as Checkbox, CircularProgress, Code, CodeEditor, CollapsibleCard, ComposedChart, ConfirmationDialog, ContentContainer, CopiableText, DEFAULT_CHART_SERIES_COLORS, DEFAULT_PAGE_SIZE_OPTIONS, DataTable, DatePicker, DateRangePicker, DateTimePicker, DeviceIcon, Dialog2 as Dialog, DialogClose2 as DialogClose, DialogContent2 as DialogContent, DialogDescription2 as DialogDescription, DialogFooter2 as DialogFooter, DialogHeader2 as DialogHeader, DialogTitle2 as DialogTitle, DialogTrigger2 as DialogTrigger, DonutChart, DynamicList, FileInput, FileUpload, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, FullSizeError, FullscreenDialog, IconAvatar, IconTextActionCard, Illustration, InlineError, InputOTP, InputOTPSeparator, KeyValueManager, LineChart, ListDetails, LottieAnimationContainer, MarkdownContent, MonospaceContent, NavBar, OverflowBadgeList, PRESET_IDS, PRESET_LABELS, PageContainer, PageContainerSkeleton, Pagination, PopCollectionItem, PreviewCard2 as PreviewCard, PreviewCardBackdrop2 as PreviewCardBackdrop, PreviewCardPanel, PreviewCardTrigger2 as PreviewCardTrigger, ProgressBar, ROLLING_PRESET_IDS, RadioGroup3 as RadioGroup, RequirementList, ScrollableSections, SearchBox, SectionCard, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SelectableCardList, SimpleCard, SimpleClickableCard, SimpleInfoCard, SimpleList, SimplePaginatedList, SimplifiedDate, Spinner, StatCard, StatusBadge, StatusCardList, Switch2 as Switch, TYPOGRAPHY_VARIANTS, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, TableSkeleton, Tabs2 as Tabs, TabsContent2 as TabsContent, TabsContents2 as TabsContents, TabsList2 as TabsList, TabsTrigger2 as TabsTrigger, Tag, TagInput, Textarea, TimePicker, Toast, Toaster, TogglableItemsList, ToggleGroup2 as ToggleGroup, ToggleGroupItem2 as ToggleGroupItem, TransferList, TreemapChart, Typography, UserTypeBadge, VerificationInProgress, VerticalStepper, animatedCardAnimations, animatedCardTypeKeys, buildSeriesChartConfig, computeDateRange, getChartSeriesColor, illustrationRegistry, illustrationsById, no_data_card_default, parseSvgViewBoxAspectRatio, statusBadgeSizeVariants, toast, typographyDefaultElement, typographyVariantClasses, useFormField, userTypeBadgeRegistry, userTypeBadgeSizeVariants, userTypeBadgeUserTypes };