@dnotrever2/super-kit 0.1.30 → 0.1.32

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 +1 @@
1
- {"version":3,"file":"super-kit.js","sources":["../src/hooks/useControlledState.ts","../src/Accordion/Accordion.tsx","../src/Badge/Badge.tsx","../src/Breadcrumb/Breadcrumb.tsx","../src/Scrollable/Scrollable.tsx","../src/Button/Button.tsx","../src/Card/Card.tsx","../src/DateTimeInput/DateTimeInput.tsx","../src/utils/mask.ts","../src/Input/Input.tsx","../src/Link/Link.tsx","../src/List/List.tsx","../src/Markers/Markers.tsx","../src/Menu/Menu.tsx","../src/Modal/Modal.tsx","../src/Popover/Popover.tsx","../src/Progress/Progress.tsx","../src/PushButton/PushButton.tsx","../src/Select/Select.tsx","../src/Spinner/Spinner.tsx","../src/Steps/Steps.tsx","../src/Tabs/Tabs.tsx","../src/Textarea/Textarea.tsx","../src/Toast/Toast.tsx","../src/Tooltip/Tooltip.tsx"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\nexport function useControlledState<T>(\n controlledValue: T | undefined,\n defaultValue: T,\n onChange?: (value: T) => void\n) {\n const [internalValue, setInternalValue] = useState(defaultValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : internalValue;\n\n const setValue = useCallback(\n (nextValue: T) => {\n if (!isControlled) {\n setInternalValue(nextValue);\n }\n\n onChange?.(nextValue);\n },\n [isControlled, onChange]\n );\n\n return [value, setValue, isControlled] as const;\n}\n","import { useId } from \"react\";\nimport type { ButtonHTMLAttributes, CSSProperties, HTMLAttributes, ReactNode } from \"react\";\nimport { useControlledState } from \"../hooks\";\nimport styles from \"./Accordion.module.css\";\n\nconst ChevronIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"14\" height=\"14\" aria-hidden=\"true\">\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n);\n\nconst PlusIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.9\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"13\" height=\"13\" aria-hidden=\"true\">\n <path d=\"M12 5v14M5 12h14\" />\n </svg>\n);\n\nconst MinusIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.9\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"13\" height=\"13\" aria-hidden=\"true\">\n <path d=\"M5 12h14\" />\n </svg>\n);\n\nexport type AccordionValue = string | string[];\nexport type AccordionIndicator = \"chevron\" | \"plus-minus\";\nexport type AccordionBorder = \"boxed\" | \"none\" | \"divider\";\nexport type AccordionHighlight = \"none\" | \"item\" | \"header\";\nexport type AccordionRadius = \"rounded\" | \"square\";\n\nexport type AccordionItem = {\n value: string;\n title: ReactNode;\n content: ReactNode;\n disabled?: boolean;\n icon?: ReactNode;\n className?: string;\n triggerProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n contentProps?: HTMLAttributes<HTMLDivElement>;\n};\n\nexport type AccordionProps = Omit<HTMLAttributes<HTMLDivElement>, \"defaultValue\" | \"onChange\"> & {\n items: AccordionItem[];\n multiple?: boolean;\n hideIndicator?: boolean;\n indicator?: AccordionIndicator;\n border?: AccordionBorder;\n highlight?: AccordionHighlight;\n radius?: AccordionRadius;\n hoverHighlight?: boolean;\n spacing?: number | string;\n disabled?: boolean;\n itemClassName?: string;\n headerClassName?: string;\n headerStyle?: CSSProperties;\n bodyClassName?: string;\n bodyStyle?: CSSProperties;\n triggerClassName?: string;\n contentClassName?: string;\n value?: AccordionValue;\n defaultValue?: AccordionValue;\n onValueChange?: (value: AccordionValue) => void;\n};\n\nfunction getDefaultValue(defaultValue: AccordionValue | undefined, multiple: boolean): AccordionValue {\n if (defaultValue !== undefined) return defaultValue;\n return multiple ? [] : \"\";\n}\n\nfunction isItemOpen(currentValue: AccordionValue, itemValue: string, multiple: boolean) {\n if (multiple) {\n return Array.isArray(currentValue)\n ? currentValue.includes(itemValue)\n : currentValue === itemValue;\n }\n\n return currentValue === itemValue;\n}\n\nfunction getNextValue(\n currentValue: AccordionValue,\n itemValue: string,\n multiple: boolean\n): AccordionValue {\n const open = isItemOpen(currentValue, itemValue, multiple);\n\n if (multiple) {\n const values = Array.isArray(currentValue) ? currentValue : currentValue ? [currentValue] : [];\n if (open) {\n return values.filter((value) => value !== itemValue);\n }\n\n return [...values, itemValue];\n }\n\n if (open) return \"\";\n return itemValue;\n}\n\nfunction formatSpacing(spacing: number | string | undefined) {\n if (typeof spacing === \"number\") return `${spacing}px`;\n return spacing;\n}\n\nexport function Accordion({\n items,\n multiple = true,\n hideIndicator = false,\n indicator = \"chevron\",\n border = \"boxed\",\n highlight = \"none\",\n radius = \"rounded\",\n hoverHighlight = true,\n spacing,\n disabled = false,\n itemClassName,\n headerClassName,\n headerStyle,\n bodyClassName,\n bodyStyle,\n triggerClassName,\n contentClassName,\n value,\n defaultValue,\n onValueChange,\n className,\n style,\n ...props\n}: AccordionProps) {\n const id = useId();\n const [openValue, setOpenValue] = useControlledState<AccordionValue>(\n value,\n getDefaultValue(defaultValue, multiple),\n onValueChange\n );\n\n const cls = [\n styles.accordion,\n styles[border],\n radius === \"square\" ? styles.square : null,\n highlight === \"item\" ? styles.highlightItem : null,\n highlight === \"header\" ? styles.highlightHeader : null,\n hoverHighlight ? null : styles.noHoverHighlight,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n const rootStyle = {\n ...style,\n ...(spacing !== undefined ? { \"--accordion-gap\": formatSpacing(spacing) } : null)\n } as CSSProperties;\n\n return (\n <div {...props} className={cls} style={rootStyle}>\n {items.map((item) => {\n const open = isItemOpen(openValue, item.value, multiple);\n const itemDisabled = disabled || item.disabled;\n const triggerId = `${id}-${item.value}-trigger`;\n const contentId = `${id}-${item.value}-content`;\n\n return (\n <section\n key={item.value}\n className={[styles.item, open ? styles.open : null, itemDisabled ? styles.disabled : null, itemClassName, item.className]\n .filter(Boolean)\n .join(\" \")}\n data-open={open ? \"true\" : undefined}\n >\n <button\n {...item.triggerProps}\n type=\"button\"\n id={triggerId}\n className={[styles.trigger, triggerClassName, headerClassName, item.triggerProps?.className]\n .filter(Boolean)\n .join(\" \")}\n style={{ ...headerStyle, ...item.triggerProps?.style }}\n aria-expanded={open}\n aria-controls={contentId}\n disabled={itemDisabled}\n onClick={(event) => {\n item.triggerProps?.onClick?.(event);\n if (!event.defaultPrevented) {\n setOpenValue(getNextValue(openValue, item.value, multiple));\n }\n }}\n >\n {item.icon && <span className={styles.icon}>{item.icon}</span>}\n <span className={styles.title}>{item.title}</span>\n {!hideIndicator && (\n <span className={[styles.indicator, indicator === \"plus-minus\" ? styles.plusMinus : styles.chevron]\n .filter(Boolean)\n .join(\" \")}\n >\n {indicator === \"plus-minus\" ? (open ? <MinusIcon /> : <PlusIcon />) : <ChevronIcon />}\n </span>\n )}\n </button>\n\n <div\n id={contentId}\n className={styles.contentWrap}\n role=\"region\"\n aria-labelledby={triggerId}\n aria-hidden={!open}\n >\n <div\n {...item.contentProps}\n className={[styles.content, contentClassName, bodyClassName, item.contentProps?.className]\n .filter(Boolean)\n .join(\" \")}\n style={{ ...bodyStyle, ...item.contentProps?.style }}\n >\n {item.content}\n </div>\n </div>\n </section>\n );\n })}\n </div>\n );\n}\n\nAccordion.displayName = \"Accordion\";\n","import type { HTMLAttributes, ReactNode } from \"react\";\nimport type { ColorVariant } from \"../types\";\nimport styles from \"./Badge.module.css\";\n\nconst XIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"10\" height=\"10\">\n <path d=\"M18 6 6 18M6 6l12 12\"/>\n </svg>\n);\n\nexport type BadgeVariant = ColorVariant;\n\nexport type BadgeProps = HTMLAttributes<HTMLSpanElement> & {\n variant?: BadgeVariant;\n icon?: ReactNode;\n pill?: boolean;\n outline?: boolean;\n coloredText?: boolean;\n indicator?: boolean;\n label?: boolean;\n labelDirection?: \"left\" | \"right\";\n dismissable?: boolean;\n onDismiss?: () => void;\n children?: ReactNode;\n};\n\nexport function Badge({\n variant = \"gray2\",\n icon,\n pill = false,\n outline = false,\n coloredText = false,\n indicator = false,\n label = false,\n labelDirection = \"right\",\n dismissable = false,\n onDismiss,\n children,\n className,\n ...props\n}: BadgeProps) {\n const cls = [\n styles.badge,\n styles[variant],\n outline ? styles.outline : null,\n coloredText ? styles.coloredText : null,\n indicator ? styles.indicator : null,\n pill ? styles.pill : null,\n label && !indicator ? styles.label : null,\n label && !indicator ? styles[`label-${labelDirection}`] : null,\n dismissable && !indicator ? styles.dismiss : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <span {...props} className={cls}>\n {!indicator && icon ? icon : null}\n {!indicator ? children : null}\n {dismissable && !indicator && (\n <button\n type=\"button\"\n className={styles.dismissBtn}\n aria-label=\"Remove\"\n onClick={onDismiss}\n >\n <XIcon />\n </button>\n )}\n </span>\n );\n}\n\nBadge.displayName = \"Badge\";\n","import type { AnchorHTMLAttributes, ButtonHTMLAttributes, HTMLAttributes, ReactNode } from \"react\";\nimport styles from \"./Breadcrumb.module.css\";\n\nconst ChevronRightIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"12\" height=\"12\">\n <path d=\"m9 18 6-6-6-6\"/>\n </svg>\n);\n\nexport type BreadcrumbItem = {\n label: ReactNode;\n href?: string;\n current?: boolean;\n disabled?: boolean;\n onClick?: () => void;\n linkProps?: AnchorHTMLAttributes<HTMLAnchorElement>;\n buttonProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n};\n\nexport type BreadcrumbProps = HTMLAttributes<HTMLElement> & {\n items: BreadcrumbItem[];\n separator?: ReactNode;\n label?: string;\n colorCurrent?: boolean;\n};\n\nexport function Breadcrumb({\n items,\n separator = <ChevronRightIcon />,\n label = \"Breadcrumb\",\n colorCurrent = false,\n className,\n ...props\n}: BreadcrumbProps) {\n const cls = [styles.breadcrumb, className].filter(Boolean).join(\" \");\n\n return (\n <nav {...props} className={cls} aria-label={label}>\n <ol className={styles.list}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n const isCurrent = item.current ?? isLast;\n const isDisabled = item.disabled || isCurrent;\n\n return (\n <li className={styles.item} key={index}>\n {index > 0 && (\n <span className={styles.separator} aria-hidden=\"true\">\n {separator}\n </span>\n )}\n\n {item.href && !isDisabled ? (\n <a\n {...item.linkProps}\n className={[styles.link, item.linkProps?.className]\n .filter(Boolean)\n .join(\" \")}\n href={item.href}\n >\n {item.label}\n </a>\n ) : item.onClick && !isDisabled ? (\n <button\n {...item.buttonProps}\n type=\"button\"\n className={[styles.link, styles.button, item.buttonProps?.className]\n .filter(Boolean)\n .join(\" \")}\n onClick={item.onClick}\n >\n {item.label}\n </button>\n ) : (\n <span\n className={[\n styles.current,\n colorCurrent && isCurrent && !item.disabled ? styles.coloredCurrent : null,\n item.disabled ? styles.disabled : null\n ]\n .filter(Boolean)\n .join(\" \")}\n aria-current={isCurrent ? \"page\" : undefined}\n >\n {item.label}\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n\nBreadcrumb.displayName = \"Breadcrumb\";\n\nexport const BreadCrumb = Breadcrumb;\n","import type { CSSProperties, HTMLAttributes, ReactNode } from \"react\";\n\nexport type ScrollableDirection = \"vertical\" | \"horizontal\" | \"both\";\n\nexport type ScrollableProps = HTMLAttributes<HTMLDivElement> & {\n direction?: ScrollableDirection;\n track?: boolean;\n arrows?: boolean;\n autoHide?: boolean;\n expand?: boolean;\n scrollbarSize?: number;\n height?: string | number;\n children?: ReactNode;\n};\n\nexport function Scrollable({\n direction = \"vertical\",\n track = false,\n arrows = false,\n autoHide = false,\n expand = false,\n scrollbarSize,\n height,\n children,\n className,\n style,\n ...props\n}: ScrollableProps) {\n const classes = [\n \"sb\",\n track ? \"sb-track\" : null,\n arrows ? \"sb-arrows\" : null,\n autoHide ? \"sb-auto-hide\" : null,\n expand ? \"sb-expand\" : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const overflowStyle: CSSProperties =\n direction === \"vertical\"\n ? { overflowY: \"auto\", overflowX: \"hidden\" }\n : direction === \"horizontal\"\n ? { overflowX: \"auto\", overflowY: \"hidden\" }\n : { overflow: \"auto\" };\n\n const sizeVar = scrollbarSize !== undefined\n ? { \"--sb-w\": `${scrollbarSize}px` } as CSSProperties\n : undefined;\n\n return (\n <div\n {...props}\n className={classes}\n style={{ height, ...overflowStyle, ...sizeVar, ...style }}\n >\n {children}\n </div>\n );\n}\n\nScrollable.displayName = \"Scrollable\";\n","import { forwardRef } from \"react\";\nimport type { ButtonHTMLAttributes, ReactNode } from \"react\";\nimport type { ColorName, ColorTone, ColorVariant } from \"../types\";\nimport styles from \"./Button.module.css\";\n\nexport type ButtonColor = ColorName;\nexport type ButtonTone = ColorTone;\nexport type ButtonVariant = ColorVariant;\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {\n variant?: ButtonVariant;\n size?: ButtonSize;\n icon?: ReactNode;\n outline?: boolean;\n rounded?: boolean;\n coloredText?: boolean;\n transparent?: boolean;\n children?: ReactNode;\n};\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n type = \"button\",\n variant = \"gray2\",\n size = \"md\",\n icon,\n outline = false,\n rounded = false,\n coloredText = false,\n transparent = false,\n children,\n className,\n disabled,\n ...props\n },\n ref\n ) => {\n const hasContent =\n children !== undefined &&\n children !== null &&\n (typeof children !== \"string\" || children.trim().length > 0);\n const isIconOnly = Boolean(icon) && !hasContent;\n\n const classes = [\n styles.btn,\n styles[variant],\n styles[size],\n outline ? styles.outline : null,\n rounded ? styles.rounded : null,\n rounded && isIconOnly ? styles.roundIconOnly : null,\n coloredText ? styles.coloredText : null,\n transparent ? styles.transparent : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <button\n ref={ref}\n type={type}\n disabled={disabled}\n className={classes}\n {...props}\n >\n {icon ? <span className={styles.icon}>{icon}</span> : null}\n {hasContent ? (\n <span className={styles.content}>{children}</span>\n ) : null}\n </button>\n );\n }\n);\n\nButton.displayName = \"Button\";\n","import type { ButtonHTMLAttributes, HTMLAttributes, ReactNode } from \"react\";\nimport styles from \"./Card.module.css\";\n\nexport type CardPadding = \"none\" | \"sm\" | \"md\" | \"lg\";\n\nexport type CardProps = HTMLAttributes<HTMLDivElement> & {\n padding?: CardPadding;\n tilt?: boolean;\n onClose?: () => void;\n closeBtnProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n children?: ReactNode;\n};\n\nconst PAD_MAP: Record<CardPadding, string> = {\n none: styles.padNone,\n sm: styles.padSm,\n md: styles.padMd,\n lg: styles.padLg\n};\n\nconst XIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"10\" height=\"10\">\n <path d=\"M18 6 6 18M6 6l12 12\"/>\n </svg>\n);\n\nexport function Card({\n padding = \"md\",\n tilt = false,\n onClose,\n closeBtnProps,\n children,\n className,\n ...props\n}: CardProps) {\n const cls = [styles.card, PAD_MAP[padding], tilt ? styles.tilt : null, className]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div {...props} className={cls}>\n {onClose && (\n <button\n type=\"button\"\n aria-label=\"Close\"\n {...closeBtnProps}\n className={[styles.closeBtn, closeBtnProps?.className].filter(Boolean).join(\" \")}\n onClick={onClose}\n >\n <XIcon />\n </button>\n )}\n {children}\n </div>\n );\n}\n\nCard.displayName = \"Card\";\n\n/* ---------- Sub-components for convenience ---------- */\n\nexport type CardHeaderProps = HTMLAttributes<HTMLDivElement> & {\n icon?: ReactNode;\n title: ReactNode;\n subtitle?: ReactNode;\n};\n\nexport function CardHeader({\n icon,\n title,\n subtitle,\n className,\n ...props\n}: CardHeaderProps) {\n return (\n <div {...props} className={[styles.header, className].filter(Boolean).join(\" \")}>\n {icon && <span className={styles.headerIcon}>{icon}</span>}\n <div>\n <div className={styles.title}>{title}</div>\n {subtitle && <div className={styles.subtitle}>{subtitle}</div>}\n </div>\n </div>\n );\n}\n\nCardHeader.displayName = \"CardHeader\";\n\nexport type CardStatProps = HTMLAttributes<HTMLDivElement> & {\n value: ReactNode;\n unit?: string;\n delta?: string;\n deltaDirection?: \"positive\" | \"negative\" | \"neutral\";\n};\n\nexport function CardStat({\n value,\n unit,\n delta,\n deltaDirection = \"positive\",\n className,\n ...props\n}: CardStatProps) {\n const deltaClass = [\n styles.statDelta,\n deltaDirection === \"positive\"\n ? styles.deltaPositive\n : deltaDirection === \"negative\"\n ? styles.deltaNegative\n : styles.deltaNeutral\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div {...props} className={[styles.stat, className].filter(Boolean).join(\" \")}>\n <span className={styles.statValue}>\n {value}\n {unit && <span className={styles.statUnit}> {unit}</span>}\n </span>\n {delta && <span className={deltaClass}>{delta}</span>}\n </div>\n );\n}\n\nCardStat.displayName = \"CardStat\";\n","import React, {\n useEffect,\n forwardRef,\n useImperativeHandle,\n useRef,\n useState\n} from \"react\";\nimport type {\n ButtonHTMLAttributes,\n ChangeEvent,\n HTMLAttributes,\n InputHTMLAttributes,\n ReactNode\n} from \"react\";\nimport { useControlledState } from \"../hooks\";\nimport styles from \"./DateTimeInput.module.css\";\n\nconst CalendarIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"14\" height=\"14\" aria-hidden=\"true\">\n <path d=\"M8 2v4M16 2v4\" />\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"3\" />\n <path d=\"M3 10h18\" />\n </svg>\n);\n\nconst ClockIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"14\" height=\"14\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M12 7v5l3 2\" />\n </svg>\n);\n\nconst XIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"12\" height=\"12\" aria-hidden=\"true\">\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n);\n\nexport type DateTimeInputMode = \"date\" | \"time\" | \"datetime\" | \"month\";\n\nexport type DateTimeInputProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"defaultValue\" | \"onChange\" | \"type\" | \"value\"\n> & {\n mode?: DateTimeInputMode;\n label?: string;\n helpText?: ReactNode;\n clearable?: boolean;\n clearLabel?: string;\n showIcon?: boolean;\n openPickerOnClick?: boolean;\n isInvalid?: boolean;\n clearButtonProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n value?: string;\n defaultValue?: string;\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n onValueChange?: (value: string) => void;\n fieldProps?: HTMLAttributes<HTMLDivElement>;\n wrapperProps?: HTMLAttributes<HTMLSpanElement>;\n inputProps?: InputHTMLAttributes<HTMLInputElement>;\n};\n\nconst placeholderByMode: Record<DateTimeInputMode, string> = {\n date: \"yyyy-mm-dd\",\n time: \"hh:mm\",\n datetime: \"yyyy-mm-dd hh:mm\",\n month: \"yyyy-mm\"\n};\n\nconst monthNames = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\"\n];\n\nconst dayNames = [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"];\nconst hourOptions = Array.from({ length: 24 }, (_, index) => pad(index));\nconst minuteOptions = Array.from({ length: 60 }, (_, index) => pad(index));\n\nfunction getModeIcon(mode: DateTimeInputMode) {\n return mode === \"time\" ? <ClockIcon /> : <CalendarIcon />;\n}\n\nfunction pad(value: number) {\n return String(value).padStart(2, \"0\");\n}\n\nfunction formatDateValue(date: Date) {\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;\n}\n\nfunction formatMonthValue(date: Date) {\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}`;\n}\n\nfunction parseDate(value: string, mode: DateTimeInputMode) {\n const datePart = mode === \"month\" ? `${value}-01` : value.slice(0, 10);\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(datePart)) return null;\n\n const [year, month, day] = datePart.split(\"-\").map(Number);\n const date = new Date(year, month - 1, day);\n\n if (\n date.getFullYear() !== year ||\n date.getMonth() !== month - 1 ||\n date.getDate() !== day\n ) {\n return null;\n }\n\n return date;\n}\n\nfunction getTimePart(value: string) {\n const time = value.split(\"T\")[1];\n return time?.slice(0, 5) ?? \"\";\n}\n\nfunction parseTime(value: string, mode: DateTimeInputMode) {\n const timeValue = mode === \"datetime\" ? getTimePart(value) : value.slice(0, 5);\n if (!/^\\d{2}:\\d{2}$/.test(timeValue)) return \"12:00\";\n\n const [hour, minute] = timeValue.split(\":\").map(Number);\n if (hour > 23 || minute > 59) return \"12:00\";\n\n return timeValue;\n}\n\nfunction getCalendarDays(viewDate: Date) {\n const year = viewDate.getFullYear();\n const month = viewDate.getMonth();\n const firstDay = new Date(year, month, 1);\n const start = new Date(year, month, 1 - firstDay.getDay());\n\n return Array.from({ length: 42 }, (_, index) => {\n const date = new Date(start);\n date.setDate(start.getDate() + index);\n return date;\n });\n}\n\nfunction isValueDisabled(value: string, min?: string | number, max?: string | number) {\n const minValue = typeof min === \"string\" ? min : undefined;\n const maxValue = typeof max === \"string\" ? max : undefined;\n return Boolean((minValue && value < minValue) || (maxValue && value > maxValue));\n}\n\nexport const DateTimeInput = forwardRef<HTMLInputElement, DateTimeInputProps>(\n (\n {\n mode = \"date\",\n label,\n helpText,\n clearable = false,\n clearLabel = \"Clear\",\n showIcon = true,\n openPickerOnClick = true,\n isInvalid = false,\n disabled,\n clearButtonProps,\n value,\n defaultValue = \"\",\n onChange,\n onValueChange,\n fieldProps,\n wrapperProps,\n inputProps,\n className,\n style,\n placeholder,\n min,\n max,\n step,\n ...props\n },\n ref\n ) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const wrapperRef = useRef<HTMLSpanElement>(null);\n const [pickerOpen, setPickerOpen] = useState(false);\n const [viewDate, setViewDate] = useState(() => parseDate(defaultValue, mode) ?? new Date());\n const [currentValue, setCurrentValue] = useControlledState(\n value,\n defaultValue,\n onValueChange\n );\n\n useImperativeHandle(ref, () => inputRef.current as HTMLInputElement);\n\n const isDisabled = disabled || inputProps?.disabled;\n const hasValue = currentValue.length > 0;\n const type = \"text\";\n const inputMin = min ?? inputProps?.min;\n const inputMax = max ?? inputProps?.max;\n const inputStep = step ?? inputProps?.step;\n const [selectedHour, selectedMinute] = parseTime(currentValue, mode).split(\":\");\n const pickerMin = typeof inputMin === \"string\"\n ? mode === \"month\" ? inputMin.slice(0, 7) : inputMin.slice(0, 10)\n : undefined;\n const pickerMax = typeof inputMax === \"string\"\n ? mode === \"month\" ? inputMax.slice(0, 7) : inputMax.slice(0, 10)\n : undefined;\n\n useEffect(() => {\n if (!pickerOpen) return;\n\n const selectedDate = parseDate(currentValue, mode);\n setViewDate(selectedDate ?? new Date());\n }, [currentValue, mode, pickerOpen]);\n\n useEffect(() => {\n if (!pickerOpen) return;\n\n const handlePointerDown = (event: PointerEvent) => {\n if (!wrapperRef.current?.contains(event.target as Node)) {\n setPickerOpen(false);\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") setPickerOpen(false);\n };\n\n document.addEventListener(\"pointerdown\", handlePointerDown);\n document.addEventListener(\"keydown\", handleKeyDown);\n\n return () => {\n document.removeEventListener(\"pointerdown\", handlePointerDown);\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [pickerOpen]);\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n setCurrentValue(event.target.value);\n onChange?.(event);\n inputProps?.onChange?.(event);\n };\n\n const handleClear = () => {\n setCurrentValue(\"\");\n setPickerOpen(false);\n inputRef.current?.focus();\n };\n\n const handleWrapperClick = (event: React.MouseEvent<HTMLSpanElement>) => {\n wrapperProps?.onClick?.(event);\n if (event.defaultPrevented || !openPickerOnClick || isDisabled) return;\n\n setPickerOpen(true);\n };\n\n const updateDateValue = (date: Date) => {\n const dateValue = formatDateValue(date);\n\n if (mode === \"datetime\") {\n setCurrentValue(`${dateValue}T${getTimePart(currentValue) || \"12:00\"}`);\n return;\n }\n\n setCurrentValue(dateValue);\n setPickerOpen(false);\n };\n\n const updateMonthValue = (date: Date) => {\n setCurrentValue(formatMonthValue(date));\n setPickerOpen(false);\n };\n\n const updateTimeValue = (timeValue: string) => {\n if (mode === \"time\") {\n setCurrentValue(timeValue);\n return;\n }\n\n const selectedDate = parseDate(currentValue, mode) ?? new Date();\n setCurrentValue(`${formatDateValue(selectedDate)}T${timeValue}`);\n };\n\n const updateTimePart = (part: \"hour\" | \"minute\", nextValue: string) => {\n const [currentHour, currentMinute] = parseTime(currentValue, mode).split(\":\");\n const nextTime = part === \"hour\"\n ? `${nextValue}:${currentMinute}`\n : `${currentHour}:${nextValue}`;\n\n updateTimeValue(nextTime);\n };\n\n const moveMonth = (offset: number) => {\n setViewDate((currentDate) => {\n const nextDate = new Date(currentDate);\n nextDate.setMonth(currentDate.getMonth() + offset);\n return nextDate;\n });\n };\n\n const moveYear = (offset: number) => {\n setViewDate((currentDate) => {\n const nextDate = new Date(currentDate);\n nextDate.setFullYear(currentDate.getFullYear() + offset);\n return nextDate;\n });\n };\n\n const handleToday = () => {\n const today = new Date();\n\n if (mode === \"month\") {\n updateMonthValue(today);\n return;\n }\n\n if (mode === \"time\") {\n updateTimeValue(`${pad(today.getHours())}:${pad(today.getMinutes())}`);\n return;\n }\n\n updateDateValue(today);\n };\n\n const renderTimeColumn = (\n part: \"hour\" | \"minute\",\n labelText: string,\n options: string[]\n ) => (\n <div className={styles.timeColumn} aria-label={labelText}>\n <span className={styles.timeColumnLabel}>{labelText}</span>\n <div className={styles.timeOptions}>\n {options.map((option) => {\n const selected = part === \"hour\"\n ? selectedHour === option\n : selectedMinute === option;\n const nextTime = part === \"hour\"\n ? `${option}:${selectedMinute}`\n : `${selectedHour}:${option}`;\n const timeDisabled = mode === \"time\"\n ? isValueDisabled(nextTime, inputMin, inputMax)\n : false;\n\n return (\n <button\n key={option}\n type=\"button\"\n className={[styles.timeOption, selected ? styles.selectedTime : null]\n .filter(Boolean)\n .join(\" \")}\n disabled={timeDisabled}\n onClick={() => updateTimePart(part, option)}\n >\n {option}\n </button>\n );\n })}\n </div>\n </div>\n );\n\n const inputClass = [\n styles.input,\n showIcon ? styles.hasIcon : null,\n clearable ? styles.hasClear : null,\n isInvalid ? styles.invalid : null,\n className,\n inputProps?.className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const wrapperClass = [\n styles.wrapper,\n isDisabled ? styles.disabled : null,\n wrapperProps?.className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const inputEl = (\n <span\n {...wrapperProps}\n ref={wrapperRef}\n className={wrapperClass}\n onClick={handleWrapperClick}\n >\n {showIcon ? <span className={styles.iconSlot}>{getModeIcon(mode)}</span> : null}\n <input\n {...props}\n {...inputProps}\n ref={inputRef}\n type={type}\n min={inputMin}\n max={inputMax}\n step={inputStep}\n readOnly={true}\n disabled={isDisabled}\n value={currentValue.replace(\"T\", \" \")}\n placeholder={placeholder ?? placeholderByMode[mode]}\n onChange={handleChange}\n onFocus={(event) => {\n props.onFocus?.(event);\n inputProps?.onFocus?.(event);\n if (openPickerOnClick && !isDisabled) setPickerOpen(true);\n }}\n className={inputClass}\n style={{ ...style, ...inputProps?.style }}\n />\n {clearable ? (\n <button\n type=\"button\"\n aria-label={clearLabel}\n title={clearLabel}\n disabled={isDisabled || !hasValue}\n onClick={(event) => {\n event.stopPropagation();\n clearButtonProps?.onClick?.(event);\n if (!event.defaultPrevented) handleClear();\n }}\n className={[styles.clearBtn, clearButtonProps?.className]\n .filter(Boolean)\n .join(\" \")}\n >\n {clearButtonProps?.children ?? <XIcon />}\n </button>\n ) : null}\n {pickerOpen && !isDisabled ? (\n <div\n className={styles.picker}\n role=\"dialog\"\n aria-label={label ?? \"Choose date and time\"}\n onClick={(event) => event.stopPropagation()}\n >\n {mode === \"time\" ? (\n <div className={styles.timePicker}>\n {renderTimeColumn(\"hour\", \"Hour\", hourOptions)}\n {renderTimeColumn(\"minute\", \"Minute\", minuteOptions)}\n </div>\n ) : (\n <>\n <div className={styles.pickerHeader}>\n <button type=\"button\" className={styles.navBtn} aria-label=\"Previous month\" onClick={() => mode === \"month\" ? moveYear(-1) : moveMonth(-1)}>\n <span aria-hidden=\"true\">‹</span>\n </button>\n <span className={styles.pickerTitle}>\n {mode === \"month\" ? viewDate.getFullYear() : `${monthNames[viewDate.getMonth()]} ${viewDate.getFullYear()}`}\n </span>\n <button type=\"button\" className={styles.navBtn} aria-label=\"Next month\" onClick={() => mode === \"month\" ? moveYear(1) : moveMonth(1)}>\n <span aria-hidden=\"true\">›</span>\n </button>\n </div>\n\n {mode === \"month\" ? (\n <div className={styles.monthGrid}>\n {monthNames.map((monthName, index) => {\n const monthDate = new Date(viewDate.getFullYear(), index, 1);\n const monthValue = formatMonthValue(monthDate);\n const selected = monthValue === currentValue.slice(0, 7);\n const monthDisabled = isValueDisabled(monthValue, pickerMin, pickerMax);\n\n return (\n <button\n key={monthName}\n type=\"button\"\n className={[styles.monthBtn, selected ? styles.selectedMonth : null]\n .filter(Boolean)\n .join(\" \")}\n disabled={monthDisabled}\n onClick={() => updateMonthValue(monthDate)}\n >\n {monthName.slice(0, 3)}\n </button>\n );\n })}\n </div>\n ) : (\n <>\n <div className={styles.weekDays}>\n {dayNames.map((dayName, index) => (\n <span key={`${dayName}-${index}`}>{dayName}</span>\n ))}\n </div>\n <div className={styles.dayGrid}>\n {getCalendarDays(viewDate).map((date) => {\n const dateValue = formatDateValue(date);\n const selected = dateValue === currentValue.slice(0, 10);\n const today = dateValue === formatDateValue(new Date());\n const outside = date.getMonth() !== viewDate.getMonth();\n const dateDisabled = isValueDisabled(dateValue, pickerMin, pickerMax);\n\n return (\n <button\n key={dateValue}\n type=\"button\"\n className={[\n styles.dayBtn,\n selected ? styles.selectedDay : null,\n today ? styles.today : null,\n outside ? styles.outsideDay : null\n ]\n .filter(Boolean)\n .join(\" \")}\n disabled={dateDisabled}\n onClick={() => updateDateValue(date)}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n {mode === \"datetime\" ? (\n <div className={styles.inlineTimePicker}>\n {renderTimeColumn(\"hour\", \"Hour\", hourOptions)}\n {renderTimeColumn(\"minute\", \"Minute\", minuteOptions)}\n </div>\n ) : null}\n </>\n )}\n </>\n )}\n\n <div className={styles.pickerFooter}>\n <button type=\"button\" className={styles.footerBtn} onClick={handleClear}>Clear</button>\n <button type=\"button\" className={styles.footerBtn} onClick={handleToday}>\n {mode === \"month\" ? \"This month\" : mode === \"time\" ? \"Now\" : \"Today\"}\n </button>\n </div>\n </div>\n ) : null}\n </span>\n );\n\n if (!label && !helpText && !fieldProps) {\n return inputEl;\n }\n\n return (\n <div {...fieldProps} className={[styles.field, fieldProps?.className].filter(Boolean).join(\" \")}>\n {label ? <label className={styles.label}>{label}</label> : null}\n {inputEl}\n {helpText ? <span className={styles.helpText}>{helpText}</span> : null}\n </div>\n );\n }\n);\n\nDateTimeInput.displayName = \"DateTimeInput\";\n","export type MaskValueOptions = {\n placeholder?: string;\n allowedPattern?: RegExp;\n};\n\nconst MASK_SLOTS = new Set([\"X\", \"x\"]);\nconst DEFAULT_ALLOWED_PATTERN = /[a-zA-Z0-9]/;\n\nexport function getRawMaskValue(value: string, options: MaskValueOptions = {}) {\n const allowedPattern = options.allowedPattern ?? DEFAULT_ALLOWED_PATTERN;\n\n return value\n .split(\"\")\n .filter((char) => allowedPattern.test(char))\n .join(\"\");\n}\n\nexport function applyMask(\n value: string,\n mask: string,\n options: MaskValueOptions = {}\n) {\n const placeholder = options.placeholder || undefined;\n const rawValue = getRawMaskValue(value, options);\n let rawIndex = 0;\n let maskedValue = \"\";\n\n for (const maskChar of mask) {\n if (MASK_SLOTS.has(maskChar)) {\n if (rawIndex >= rawValue.length) {\n if (placeholder) {\n maskedValue += placeholder;\n continue;\n }\n break;\n }\n\n maskedValue += rawValue[rawIndex];\n rawIndex += 1;\n continue;\n }\n\n if (rawIndex >= rawValue.length && !placeholder) {\n break;\n }\n\n maskedValue += maskChar;\n }\n\n return maskedValue;\n}\n","import React, {\n forwardRef,\n useState,\n useCallback,\n useImperativeHandle,\n useRef\n} from \"react\";\nimport type {\n ButtonHTMLAttributes,\n ChangeEvent,\n HTMLAttributes,\n InputHTMLAttributes,\n ReactNode\n} from \"react\";\nimport { useControlledState } from \"../hooks\";\nimport { applyMask, getRawMaskValue } from \"../utils\";\nimport styles from \"./Input.module.css\";\n\nconst XIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"12\" height=\"12\">\n <path d=\"M18 6 6 18M6 6l12 12\"/>\n </svg>\n);\n\nconst EyeIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"14\" height=\"14\">\n <path d=\"M2 12s3.5-6 10-6 10 6 10 6-3.5 6-10 6-10-6-10-6Z\"/>\n <circle cx=\"12\" cy=\"12\" r=\"2.5\"/>\n </svg>\n);\n\nconst EyeOffIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"14\" height=\"14\">\n <path d=\"m3 3 18 18\"/>\n <path d=\"M10.6 10.6a2 2 0 0 0 2.8 2.8\"/>\n <path d=\"M9.9 5.2A10.4 10.4 0 0 1 12 5c6.5 0 10 7 10 7a17.7 17.7 0 0 1-3.1 4.1\"/>\n <path d=\"M6.7 6.7C3.8 8.6 2 12 2 12s3.5 7 10 7c1.4 0 2.7-.3 3.8-.8\"/>\n </svg>\n);\n\nconst ChevronUpIcon = () => (\n <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"10\" height=\"10\">\n <path d=\"m4 10 4-4 4 4\"/>\n </svg>\n);\n\nconst ChevronDownIcon = () => (\n <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"10\" height=\"10\">\n <path d=\"m4 6 4 4 4-4\"/>\n </svg>\n);\n\nconst digitsOnly = (value: string) => value.replace(/\\D/g, \"\");\n\nconst toFiniteNumber = (value: unknown) => {\n if (typeof value === \"number\") return Number.isFinite(value) ? value : undefined;\n if (typeof value !== \"string\" || value.trim() === \"\" || value === \"any\") return undefined;\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n};\n\nexport type InputValueChange = {\n value: string;\n rawValue: string;\n};\n\nexport type InputProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"defaultValue\" | \"onChange\" | \"type\" | \"value\"\n> & {\n label?: string;\n helpText?: ReactNode;\n icon?: ReactNode;\n iconPosition?: \"left\" | \"right\";\n type?: InputHTMLAttributes<HTMLInputElement>[\"type\"];\n mask?: string;\n maskPlaceholder?: string;\n maskAllowedPattern?: RegExp;\n clearable?: boolean;\n clearLabel?: string;\n showNumberControls?: boolean;\n showPasswordToggle?: boolean;\n rounded?: boolean;\n selectOnFocus?: boolean;\n textAlign?: \"left\" | \"center\" | \"right\";\n isInvalid?: boolean;\n clearButtonProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n value?: string;\n defaultValue?: string;\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n onValueChange?: (change: InputValueChange) => void;\n fieldProps?: HTMLAttributes<HTMLDivElement>;\n wrapperProps?: HTMLAttributes<HTMLSpanElement>;\n inputProps?: InputHTMLAttributes<HTMLInputElement>;\n};\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n label,\n helpText,\n icon,\n iconPosition = \"left\",\n clearable = false,\n clearButtonProps,\n clearLabel,\n showNumberControls = false,\n showPasswordToggle = true,\n rounded = false,\n disabled,\n mask,\n maskAllowedPattern,\n maskPlaceholder,\n selectOnFocus = false,\n textAlign,\n isInvalid = false,\n value,\n defaultValue = \"\",\n onChange,\n onValueChange,\n type = \"text\",\n fieldProps,\n wrapperProps,\n inputProps,\n className,\n style,\n ...props\n },\n ref\n ) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const resolvedType = inputProps?.type ?? type;\n const isNumberType = resolvedType === \"number\";\n const isPasswordType = resolvedType === \"password\";\n const [isPasswordVisible, setIsPasswordVisible] = useState(false);\n const [currentValue, setCurrentValue] = useControlledState(\n value,\n defaultValue,\n (nextValue) => {\n onValueChange?.({\n value: nextValue,\n rawValue: mask\n ? getRawMaskValue(nextValue, {\n allowedPattern: maskAllowedPattern,\n placeholder: maskPlaceholder\n })\n : nextValue\n });\n }\n );\n\n useImperativeHandle(ref, () => inputRef.current as HTMLInputElement);\n\n const formatValue = useCallback(\n (nextValue: string) => {\n const filteredValue = isNumberType ? digitsOnly(nextValue) : nextValue;\n if (!mask) return filteredValue;\n return applyMask(filteredValue, mask, {\n allowedPattern: maskAllowedPattern,\n placeholder: maskPlaceholder\n });\n },\n [isNumberType, mask, maskAllowedPattern, maskPlaceholder]\n );\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n const formattedValue = formatValue(event.target.value);\n event.target.value = formattedValue;\n setCurrentValue(formattedValue);\n onChange?.(event);\n inputProps?.onChange?.(event);\n };\n\n const handleClear = () => {\n setCurrentValue(\"\");\n inputRef.current?.focus();\n };\n\n const inputMin = inputProps?.min ?? props.min;\n const inputMax = inputProps?.max ?? props.max;\n const inputStep = inputProps?.step ?? props.step;\n const numberMin = toFiniteNumber(inputMin);\n const numberMax = toFiniteNumber(inputMax);\n const parsedNumberStep = toFiniteNumber(inputStep);\n const numberStep = parsedNumberStep && parsedNumberStep > 0\n ? Math.trunc(parsedNumberStep) || 1\n : 1;\n const displayValue = formatValue(currentValue);\n const numericValue = toFiniteNumber(displayValue);\n const canDecrease = !isNumberType\n ? false\n : numericValue === undefined\n ? false\n : numberMin === undefined\n ? numericValue > 0\n : numericValue > numberMin;\n const canIncrease = !isNumberType\n ? false\n : numberMax === undefined || numericValue === undefined || numericValue < numberMax;\n\n const handleNumberStep = (direction: 1 | -1) => {\n const nextRawValue = numericValue === undefined && direction === 1\n ? numberMin ?? numberStep\n : (numericValue ?? numberMin ?? 0) + numberStep * direction;\n const nextValue = Math.max(\n numberMin ?? 0,\n Math.min(numberMax ?? Number.POSITIVE_INFINITY, nextRawValue)\n );\n\n setCurrentValue(formatValue(String(nextValue)));\n inputRef.current?.focus();\n };\n\n const iconRight = icon && iconPosition === \"right\";\n const iconLeft = icon && iconPosition === \"left\";\n const hasPasswordToggle = isPasswordType && showPasswordToggle;\n const hasNumberControls = isNumberType && showNumberControls;\n const trailingItemWidths = [\n iconRight ? 14 : 0,\n clearable ? 18 : 0,\n hasPasswordToggle ? 18 : 0,\n hasNumberControls ? 16 : 0\n ].filter(Boolean);\n const trailingPadding = trailingItemWidths.length\n ? trailingItemWidths.reduce((sum, width) => sum + width, 0) + (trailingItemWidths.length - 1) * 2 + 16\n : undefined;\n\n const inputClass = [\n styles.input,\n rounded ? styles.rounded : null,\n iconLeft ? styles.hasIcon : null,\n trailingPadding ? styles.hasTrailing : null,\n isInvalid ? styles.invalid : null,\n className,\n inputProps?.className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n if (selectOnFocus) e.target.select();\n props.onFocus?.(e);\n inputProps?.onFocus?.(e);\n };\n\n const inputStyle = {\n ...style,\n ...inputProps?.style,\n ...(textAlign ? { textAlign } : null),\n ...(trailingPadding ? { \"--input-padding-right\": `${trailingPadding}px` } : null)\n } as React.CSSProperties;\n const isDisabled = disabled || inputProps?.disabled;\n const renderedType = isPasswordType\n ? isPasswordVisible && hasPasswordToggle ? \"text\" : \"password\"\n : isNumberType ? \"text\" : resolvedType;\n const clearButtonLabel = clearLabel ?? \"Clear\";\n\n const inputEl = (\n <input\n {...props}\n {...inputProps}\n ref={inputRef}\n type={renderedType}\n disabled={isDisabled}\n value={displayValue}\n inputMode={isNumberType ? \"numeric\" : inputProps?.inputMode ?? props.inputMode}\n pattern={isNumberType ? \"[0-9]*\" : inputProps?.pattern ?? props.pattern}\n onChange={handleChange}\n onFocus={handleFocus}\n className={inputClass}\n style={inputStyle}\n />\n );\n\n const wrapperClass = [styles.wrapper, wrapperProps?.className]\n .filter(Boolean)\n .join(\" \");\n\n const inner = (\n <span {...wrapperProps} className={wrapperClass}>\n {iconLeft ? <span className={styles.iconSlot}>{icon}</span> : null}\n {inputEl}\n {trailingPadding ? (\n <span className={styles.trailingContent}>\n {iconRight ? (\n <span className={styles.trailingIcon}>{icon}</span>\n ) : null}\n {clearable ? (\n <button\n {...clearButtonProps}\n type=\"button\"\n aria-label={clearButtonProps?.[\"aria-label\"] ?? clearButtonLabel}\n title={clearButtonProps?.title ?? clearButtonLabel}\n disabled={isDisabled || displayValue.length === 0 || clearButtonProps?.disabled}\n onClick={(event) => {\n handleClear();\n clearButtonProps?.onClick?.(event);\n }}\n className={[styles.clearBtn, clearButtonProps?.className].filter(Boolean).join(\" \")}\n >\n {clearButtonProps?.children ?? <XIcon />}\n </button>\n ) : null}\n {hasPasswordToggle ? (\n <button\n type=\"button\"\n aria-label={isPasswordVisible ? \"Hide password\" : \"Show password\"}\n title={isPasswordVisible ? \"Hide password\" : \"Show password\"}\n disabled={isDisabled}\n onClick={() => {\n setIsPasswordVisible((visible) => !visible);\n inputRef.current?.focus();\n }}\n className={styles.iconButton}\n >\n {isPasswordVisible ? <EyeOffIcon /> : <EyeIcon />}\n </button>\n ) : null}\n {hasNumberControls ? (\n <span className={styles.numberControls}>\n <button\n type=\"button\"\n aria-label=\"Increase\"\n title=\"Increase\"\n disabled={isDisabled || !canIncrease}\n onClick={() => handleNumberStep(1)}\n className={styles.numberControlButton}\n >\n <ChevronUpIcon />\n </button>\n <button\n type=\"button\"\n aria-label=\"Decrease\"\n title=\"Decrease\"\n disabled={isDisabled || !canDecrease}\n onClick={() => handleNumberStep(-1)}\n className={styles.numberControlButton}\n >\n <ChevronDownIcon />\n </button>\n </span>\n ) : null}\n </span>\n ) : null}\n </span>\n );\n\n if (!label && !helpText && !fieldProps) {\n return inner;\n }\n\n return (\n <div {...fieldProps} className={[styles.field, fieldProps?.className].filter(Boolean).join(\" \")}>\n {label ? <label className={styles.label}>{label}</label> : null}\n {inner}\n {helpText ? <span className={styles.helpText}>{helpText}</span> : null}\n </div>\n );\n }\n);\n\nInput.displayName = \"Input\";\n","import { forwardRef } from \"react\";\nimport type { AnchorHTMLAttributes, CSSProperties, MouseEvent, ReactNode } from \"react\";\nimport type { ColorVariant } from \"../types\";\nimport styles from \"./Link.module.css\";\n\nexport type LinkVariant = ColorVariant;\n\nexport type LinkProps = Omit<AnchorHTMLAttributes<HTMLAnchorElement>, \"aria-disabled\"> & {\n variant?: LinkVariant;\n underlined?: boolean;\n opacity?: number;\n disabled?: boolean;\n noreferrer?: boolean;\n noopener?: boolean;\n icon?: ReactNode;\n children?: ReactNode;\n};\n\nfunction mergeRel(rel: string | undefined, values: Array<string | false>) {\n const parts = new Set((rel ?? \"\").split(/\\s+/).filter(Boolean));\n values.forEach((value) => {\n if (value) parts.add(value);\n });\n\n return parts.size > 0 ? Array.from(parts).join(\" \") : undefined;\n}\n\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>(\n (\n {\n variant = \"blue2\",\n underlined = false,\n opacity,\n disabled = false,\n noreferrer = false,\n noopener,\n icon,\n children,\n className,\n style,\n href,\n rel,\n target,\n tabIndex,\n onClick,\n ...props\n },\n ref\n ) => {\n const externalNoopener = noopener ?? target === \"_blank\";\n const cls = [\n styles.link,\n styles[variant],\n underlined ? styles.underlined : null,\n disabled ? styles.disabled : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const linkStyle = {\n ...style,\n ...(opacity !== undefined ? { \"--link-opacity\": opacity } : null)\n } as CSSProperties;\n\n const handleClick = (event: MouseEvent<HTMLAnchorElement>) => {\n onClick?.(event);\n if (disabled) event.preventDefault();\n };\n\n return (\n <a\n ref={ref}\n {...props}\n href={disabled ? undefined : href}\n target={target}\n rel={mergeRel(rel, [externalNoopener && \"noopener\", noreferrer && \"noreferrer\"])}\n aria-disabled={disabled || undefined}\n tabIndex={disabled ? -1 : tabIndex}\n className={cls}\n style={linkStyle}\n onClick={handleClick}\n >\n {icon && <span className={styles.icon}>{icon}</span>}\n {children}\n </a>\n );\n }\n);\n\nLink.displayName = \"Link\";\n","import { useEffect, useId, useRef, useState } from \"react\";\nimport type {\n ButtonHTMLAttributes,\n HTMLAttributes,\n MouseEvent as ReactMouseEvent,\n PointerEvent as ReactPointerEvent,\n ReactNode\n} from \"react\";\nimport { useControlledState } from \"../hooks\";\nimport styles from \"./List.module.css\";\n\nconst ChevronIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"14\" height=\"14\" aria-hidden=\"true\">\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n);\n\nexport type ListSpacing = \"sm\" | \"md\" | \"lg\";\nexport type ListDropPosition = \"before\" | \"after\" | \"inside\";\n\nexport type ListItem = {\n value: string;\n label: ReactNode;\n description?: ReactNode;\n meta?: ReactNode;\n icon?: ReactNode;\n active?: boolean;\n disabled?: boolean;\n className?: string;\n itemProps?: HTMLAttributes<HTMLLIElement>;\n buttonProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n onClick?: (event: ReactMouseEvent<HTMLButtonElement>, item: ListItem) => void;\n};\n\nexport type ListItemDropEvent = {\n item: ListItem;\n sourceListId: string;\n targetListId: string;\n targetItem?: ListItem;\n position: ListDropPosition;\n};\n\nexport type ListProps = Omit<HTMLAttributes<HTMLDivElement>, \"title\" | \"onChange\"> & {\n items: ListItem[];\n title?: ReactNode;\n showTitle?: boolean;\n collapsible?: boolean;\n collapsed?: boolean;\n defaultCollapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n emptyLabel?: ReactNode;\n selectable?: boolean;\n selectedValue?: string | null;\n defaultSelectedValue?: string | null;\n onSelectedValueChange?: (value: string, item: ListItem) => void;\n fullWidthBackgroup?: boolean;\n spacing?: ListSpacing;\n titleHover?: boolean;\n ariaLabel?: string;\n headerProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n listProps?: HTMLAttributes<HTMLUListElement>;\n itemClassName?: string;\n draggable?: boolean;\n dragGroup?: string;\n listId?: string;\n isItemDraggable?: (item: ListItem) => boolean;\n onItemDrop?: (event: ListItemDropEvent) => void;\n dragGhost?: (item: ListItem) => ReactNode;\n dropOutsideListId?: string;\n dropOutsideBeforeListId?: string;\n dropOutsideAfterListId?: string;\n};\n\ntype ActiveListDragTarget = {\n listId: string;\n itemValue?: string;\n position: ListDropPosition;\n};\n\ntype ActiveListDrag = {\n item: ListItem;\n sourceListId: string;\n dragGroup: string;\n pointerId: number;\n startClientX: number;\n startClientY: number;\n currentX: number;\n currentY: number;\n width: number;\n height: number;\n moved: boolean;\n target: ActiveListDragTarget | null;\n};\n\ntype ListRegistryEntry = {\n listId: string;\n dragGroup: string;\n items: ListItem[];\n onItemDrop?: (event: ListItemDropEvent) => void;\n dropOutsideListId?: string;\n dropOutsideBeforeListId?: string;\n dropOutsideAfterListId?: string;\n root: HTMLElement | null;\n};\n\nconst DEFAULT_DRAG_GROUP = \"__super-kit-list\";\nconst DRAG_START_DISTANCE = 5;\nconst DRAG_GHOST_OFFSET = 4;\nconst listRegistry = new Map<string, ListRegistryEntry>();\nconst dragListeners = new Set<() => void>();\nlet activeListDrag: ActiveListDrag | null = null;\n\nfunction emitListDragChange() {\n dragListeners.forEach((listener) => listener());\n}\n\nfunction setActiveListDrag(next: ActiveListDrag | null) {\n activeListDrag = next;\n emitListDragChange();\n}\n\nfunction updateActiveListDrag(updater: (current: ActiveListDrag) => ActiveListDrag) {\n if (!activeListDrag) return;\n setActiveListDrag(updater(activeListDrag));\n}\n\nfunction useActiveListDrag() {\n const [snapshot, setSnapshot] = useState(activeListDrag);\n\n useEffect(() => {\n const listener = () => setSnapshot(activeListDrag);\n dragListeners.add(listener);\n return () => {\n dragListeners.delete(listener);\n };\n }, []);\n\n return snapshot;\n}\n\nfunction getOutsideDropTarget(\n sourceEntry: ListRegistryEntry | undefined,\n clientY: number\n): ActiveListDragTarget | null {\n if (!sourceEntry) return null;\n\n const fallbackListId = sourceEntry.dropOutsideListId;\n const sourceRect = sourceEntry.root?.getBoundingClientRect();\n const isBeforeSource = sourceRect ? clientY < sourceRect.top + sourceRect.height / 2 : false;\n const directionalListId = isBeforeSource\n ? sourceEntry.dropOutsideBeforeListId\n : sourceEntry.dropOutsideAfterListId;\n\n if (directionalListId) {\n return { listId: directionalListId, position: \"inside\" };\n }\n\n if (!fallbackListId) return null;\n return { listId: fallbackListId, position: \"inside\" };\n}\n\nfunction getListEdgeDropTarget(\n targetRoot: HTMLElement,\n targetListId: string,\n drag: ActiveListDrag,\n clientY: number\n): ActiveListDragTarget | null {\n const itemElements = Array.from(\n targetRoot.querySelectorAll<HTMLElement>(\"[data-list-dnd-item-value]\")\n ).filter((element) => {\n const itemValue = element.dataset.listDndItemValue;\n return itemValue && !(targetListId === drag.sourceListId && itemValue === drag.item.value);\n });\n\n if (itemElements.length === 0) {\n return { listId: targetListId, position: \"inside\" };\n }\n\n for (const element of itemElements) {\n const itemValue = element.dataset.listDndItemValue;\n const rect = element.getBoundingClientRect();\n\n if (clientY < rect.top + rect.height / 2) {\n return itemValue ? { listId: targetListId, itemValue, position: \"before\" } : null;\n }\n }\n\n const lastElement = itemElements[itemElements.length - 1];\n const lastItemValue = lastElement.dataset.listDndItemValue;\n return lastItemValue\n ? { listId: targetListId, itemValue: lastItemValue, position: \"after\" }\n : null;\n}\n\nfunction getOverlappedListRoot(\n drag: ActiveListDrag,\n clientX: number,\n clientY: number\n) {\n const ghostRect = {\n left: clientX + DRAG_GHOST_OFFSET,\n top: clientY + DRAG_GHOST_OFFSET,\n right: clientX + DRAG_GHOST_OFFSET + drag.width,\n bottom: clientY + DRAG_GHOST_OFFSET + drag.height\n };\n let bestEntry: ListRegistryEntry | null = null;\n let bestOverlap = 0;\n\n for (const entry of listRegistry.values()) {\n const root = entry.root;\n if (entry.dragGroup !== drag.dragGroup || !root) continue;\n\n const rect = root.getBoundingClientRect();\n const overlapWidth = Math.min(ghostRect.right, rect.right) - Math.max(ghostRect.left, rect.left);\n const overlapHeight = Math.min(ghostRect.bottom, rect.bottom) - Math.max(ghostRect.top, rect.top);\n if (overlapWidth <= 0 || overlapHeight <= 0) continue;\n\n const overlap = overlapWidth * overlapHeight;\n if (!bestEntry || overlap > bestOverlap) {\n bestEntry = entry;\n bestOverlap = overlap;\n }\n }\n\n if (!bestEntry || !bestEntry.root) return null;\n\n return {\n root: bestEntry.root,\n listId: bestEntry.listId\n };\n}\n\nexport function List({\n items,\n title,\n showTitle = true,\n collapsible = false,\n collapsed,\n defaultCollapsed = false,\n onCollapsedChange,\n emptyLabel = \"No items\",\n selectable = false,\n selectedValue,\n defaultSelectedValue = null,\n onSelectedValueChange,\n fullWidthBackgroup = false,\n spacing = \"sm\",\n titleHover = false,\n ariaLabel,\n headerProps,\n listProps,\n itemClassName,\n draggable = false,\n dragGroup = DEFAULT_DRAG_GROUP,\n listId,\n isItemDraggable,\n onItemDrop,\n dragGhost,\n dropOutsideListId,\n dropOutsideBeforeListId,\n dropOutsideAfterListId,\n className,\n ...props\n}: ListProps) {\n const id = useId();\n const resolvedListId = listId ?? id;\n const contentId = `${id}-content`;\n const activeDrag = useActiveListDrag();\n const rootRef = useRef<HTMLDivElement>(null);\n const suppressItemClickRef = useRef(false);\n const [isCollapsed, setIsCollapsed] = useControlledState(\n collapsed,\n defaultCollapsed,\n onCollapsedChange\n );\n const [currentSelectedValue, setCurrentSelectedValue] = useControlledState(\n selectedValue,\n defaultSelectedValue,\n (nextValue) => {\n const selectedItem = items.find((item) => item.value === nextValue);\n if (selectedItem && nextValue !== null) {\n onSelectedValueChange?.(nextValue, selectedItem);\n }\n }\n );\n const hasTitle = showTitle && title !== undefined && title !== null;\n const canToggle = hasTitle && collapsible;\n\n const rootClass = [\n styles.root,\n styles[`spacing-${spacing}`],\n isCollapsed ? styles.collapsed : null,\n hasTitle ? null : styles.ungrouped,\n fullWidthBackgroup ? styles.fullWidthBackgroup : null,\n titleHover ? null : styles.noTitleHover,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const headerClass = [styles.header, canToggle ? styles.toggleHeader : null, headerProps?.className]\n .filter(Boolean)\n .join(\" \");\n const listClass = [styles.list, listProps?.className].filter(Boolean).join(\" \");\n\n const toggleCollapsed = () => setIsCollapsed(!isCollapsed);\n const canDragItem = (item: ListItem) =>\n draggable && !item.disabled && (isItemDraggable ? isItemDraggable(item) : true);\n\n useEffect(() => {\n if (!draggable) {\n listRegistry.delete(resolvedListId);\n return;\n }\n\n listRegistry.set(resolvedListId, {\n listId: resolvedListId,\n dragGroup,\n items,\n onItemDrop,\n dropOutsideListId,\n dropOutsideBeforeListId,\n dropOutsideAfterListId,\n root: rootRef.current\n });\n\n return () => {\n listRegistry.delete(resolvedListId);\n };\n }, [\n dragGroup,\n draggable,\n dropOutsideAfterListId,\n dropOutsideBeforeListId,\n dropOutsideListId,\n items,\n onItemDrop,\n resolvedListId\n ]);\n\n useEffect(() => {\n if (!activeDrag || activeDrag.sourceListId !== resolvedListId) return;\n\n const updateTarget = (clientX: number, clientY: number) => {\n const drag = activeListDrag;\n if (!drag) return;\n\n const distance = Math.hypot(clientX - drag.startClientX, clientY - drag.startClientY);\n if (!drag.moved && distance < DRAG_START_DISTANCE) {\n updateActiveListDrag((current) => ({ ...current, currentX: clientX, currentY: clientY }));\n return;\n }\n if (!drag.moved) document.body.style.cursor = \"grabbing\";\n\n const target = document.elementFromPoint(clientX, clientY) as HTMLElement | null;\n const pointedRoot = target?.closest<HTMLElement>(\"[data-list-dnd-root='true']\");\n const pointedListId = pointedRoot?.dataset.listId;\n const pointedDragGroup = pointedRoot?.dataset.listDndGroup;\n const overlappedRoot = !pointedRoot || !pointedListId || pointedDragGroup !== drag.dragGroup\n ? getOverlappedListRoot(drag, clientX, clientY)\n : null;\n const targetRoot = pointedDragGroup === drag.dragGroup ? pointedRoot : overlappedRoot?.root;\n const targetListId = pointedDragGroup === drag.dragGroup ? pointedListId : overlappedRoot?.listId;\n const targetDragGroup = targetRoot?.dataset.listDndGroup;\n\n if (!targetRoot || !targetListId || targetDragGroup !== drag.dragGroup) {\n const sourceEntry = listRegistry.get(drag.sourceListId);\n updateActiveListDrag((current) => ({\n ...current,\n currentX: clientX,\n currentY: clientY,\n moved: true,\n target: getOutsideDropTarget(sourceEntry, clientY)\n }));\n return;\n }\n\n const targetItemElement = target?.closest<HTMLElement>(\"[data-list-dnd-item-value]\");\n if (targetItemElement && targetRoot.contains(targetItemElement)) {\n const itemValue = targetItemElement.dataset.listDndItemValue;\n if (itemValue && !(targetListId === drag.sourceListId && itemValue === drag.item.value)) {\n const rect = targetItemElement.getBoundingClientRect();\n const position: ListDropPosition = clientY < rect.top + rect.height / 2 ? \"before\" : \"after\";\n updateActiveListDrag((current) => ({\n ...current,\n currentX: clientX,\n currentY: clientY,\n moved: true,\n target: { listId: targetListId, itemValue, position }\n }));\n return;\n }\n }\n\n const listEdgeTarget = getListEdgeDropTarget(targetRoot, targetListId, drag, clientY);\n if (listEdgeTarget) {\n updateActiveListDrag((current) => ({\n ...current,\n currentX: clientX,\n currentY: clientY,\n moved: true,\n target: listEdgeTarget\n }));\n return;\n }\n\n const sourceEntry = listRegistry.get(drag.sourceListId);\n if (\n targetListId === drag.sourceListId\n && (sourceEntry?.dropOutsideListId\n || sourceEntry?.dropOutsideBeforeListId\n || sourceEntry?.dropOutsideAfterListId)\n ) {\n updateActiveListDrag((current) => ({\n ...current,\n currentX: clientX,\n currentY: clientY,\n moved: true,\n target: getOutsideDropTarget(sourceEntry, clientY)\n }));\n return;\n }\n\n updateActiveListDrag((current) => ({\n ...current,\n currentX: clientX,\n currentY: clientY,\n moved: true,\n target: { listId: targetListId, position: \"inside\" }\n }));\n };\n\n const onPointerMove = (event: PointerEvent) => {\n const drag = activeListDrag;\n if (!drag || event.pointerId !== drag.pointerId) return;\n event.preventDefault();\n updateTarget(event.clientX, event.clientY);\n };\n\n const onPointerUp = (event: PointerEvent) => {\n const drag = activeListDrag;\n if (!drag || event.pointerId !== drag.pointerId) return;\n if (drag.moved) event.preventDefault();\n suppressItemClickRef.current = drag.moved;\n\n if (drag.moved && drag.target) {\n const targetEntry = listRegistry.get(drag.target.listId);\n const sourceEntry = listRegistry.get(drag.sourceListId);\n const targetItem = drag.target.itemValue\n ? targetEntry?.items.find((item) => item.value === drag.target?.itemValue)\n : undefined;\n const handler = targetEntry?.onItemDrop ?? sourceEntry?.onItemDrop;\n\n handler?.({\n item: drag.item,\n sourceListId: drag.sourceListId,\n targetListId: drag.target.listId,\n targetItem,\n position: drag.target.position\n });\n }\n\n setActiveListDrag(null);\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n };\n\n document.body.style.userSelect = \"none\";\n document.addEventListener(\"pointermove\", onPointerMove, { passive: false });\n document.addEventListener(\"pointerup\", onPointerUp, { passive: false });\n document.addEventListener(\"pointercancel\", onPointerUp, { passive: false });\n\n return () => {\n document.removeEventListener(\"pointermove\", onPointerMove);\n document.removeEventListener(\"pointerup\", onPointerUp);\n document.removeEventListener(\"pointercancel\", onPointerUp);\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n };\n }, [activeDrag?.pointerId, activeDrag?.sourceListId, resolvedListId]);\n\n const startItemDrag = (event: ReactPointerEvent<HTMLElement>, item: ListItem) => {\n if (!canDragItem(item) || event.button !== 0) return;\n\n const rect = event.currentTarget.getBoundingClientRect();\n try {\n event.currentTarget.setPointerCapture(event.pointerId);\n } catch {\n // Document listeners still handle the drag if capture is unavailable.\n }\n\n setActiveListDrag({\n item,\n sourceListId: resolvedListId,\n dragGroup,\n pointerId: event.pointerId,\n startClientX: event.clientX,\n startClientY: event.clientY,\n currentX: event.clientX,\n currentY: event.clientY,\n width: rect.width,\n height: rect.height,\n moved: false,\n target: null\n });\n };\n\n const renderItemContent = (item: ListItem) => (\n <>\n {item.icon ? <span className={styles.icon}>{item.icon}</span> : null}\n <span className={styles.itemText}>\n <span className={styles.label}>{item.label}</span>\n {item.description ? <span className={styles.description}>{item.description}</span> : null}\n </span>\n {item.meta ? <span className={styles.meta}>{item.meta}</span> : null}\n </>\n );\n\n const listDropTarget = activeDrag?.moved && activeDrag.target?.listId === resolvedListId\n ? activeDrag.target\n : null;\n const showListDropIndicator = !!listDropTarget && !listDropTarget.itemValue;\n const hideEmptyLabel = items.length === 0 && showListDropIndicator;\n const showDragGhost = !!activeDrag && activeDrag.moved && activeDrag.sourceListId === resolvedListId;\n\n return (\n <div\n {...props}\n ref={rootRef}\n className={rootClass}\n data-list-dnd-root={draggable ? \"true\" : undefined}\n data-list-id={draggable ? resolvedListId : undefined}\n data-list-dnd-group={draggable ? dragGroup : undefined}\n >\n {hasTitle ? (\n canToggle ? (\n <button\n {...headerProps}\n type=\"button\"\n className={headerClass}\n aria-expanded={!isCollapsed}\n aria-controls={contentId}\n onClick={(event) => {\n headerProps?.onClick?.(event);\n if (!event.defaultPrevented) toggleCollapsed();\n }}\n >\n <span className={styles.title}>{title}</span>\n <span className={styles.indicator}><ChevronIcon /></span>\n </button>\n ) : (\n <div className={styles.header}>\n <span className={styles.title}>{title}</span>\n </div>\n )\n ) : null}\n\n <div\n id={contentId}\n className={styles.body}\n aria-hidden={isCollapsed || undefined}\n >\n <ul\n {...listProps}\n className={listClass}\n aria-label={!hasTitle ? ariaLabel : undefined}\n >\n {items.length > 0 ? (\n items.map((item) => {\n const selected = item.active || (selectable && currentSelectedValue === item.value);\n const itemIsDraggable = canDragItem(item);\n const itemDropTarget = listDropTarget?.itemValue === item.value ? listDropTarget : null;\n const itemIsDragging = activeDrag?.sourceListId === resolvedListId && activeDrag.item.value === item.value && activeDrag.moved;\n const itemClass = [\n styles.item,\n selected ? styles.active : null,\n item.disabled ? styles.disabled : null,\n itemIsDraggable ? styles.draggableItem : null,\n itemIsDragging ? styles.draggingItem : null,\n itemClassName,\n item.className,\n item.itemProps?.className\n ]\n .filter(Boolean)\n .join(\" \");\n const content = renderItemContent(item);\n const clickable = selectable || Boolean(item.onClick || item.buttonProps?.onClick);\n\n return (\n <li\n {...item.itemProps}\n key={item.value}\n className={itemClass}\n data-active={selected ? \"true\" : undefined}\n data-list-dnd-item-value={draggable ? item.value : undefined}\n >\n {itemDropTarget ? (\n <span\n className={[\n styles.dropIndicator,\n itemDropTarget.position === \"before\" ? styles.dropIndicatorBefore : styles.dropIndicatorAfter\n ].join(\" \")}\n />\n ) : null}\n {clickable ? (\n <button\n {...item.buttonProps}\n type=\"button\"\n className={[styles.itemButton, item.buttonProps?.className].filter(Boolean).join(\" \")}\n disabled={item.disabled || item.buttonProps?.disabled}\n onPointerDown={(event) => {\n item.buttonProps?.onPointerDown?.(event);\n if (!event.defaultPrevented) startItemDrag(event, item);\n }}\n onClick={(event) => {\n if (suppressItemClickRef.current) {\n suppressItemClickRef.current = false;\n event.preventDefault();\n return;\n }\n item.buttonProps?.onClick?.(event);\n if (!event.defaultPrevented && selectable) {\n setCurrentSelectedValue(item.value);\n }\n if (!event.defaultPrevented) item.onClick?.(event, item);\n }}\n >\n {content}\n </button>\n ) : (\n <div className={styles.itemSurface} onPointerDown={(event) => startItemDrag(event, item)}>\n {content}\n </div>\n )}\n </li>\n );\n })\n ) : hasTitle && !hideEmptyLabel ? (\n <li className={styles.empty}>{emptyLabel}</li>\n ) : null}\n {showListDropIndicator ? <li className={styles.listDropIndicator} aria-hidden=\"true\" /> : null}\n </ul>\n </div>\n {showDragGhost ? (\n <div\n className={styles.dragGhost}\n style={{\n left: activeDrag.currentX + DRAG_GHOST_OFFSET,\n top: activeDrag.currentY + DRAG_GHOST_OFFSET,\n width: activeDrag.width,\n height: activeDrag.height\n }}\n >\n {dragGhost ? dragGhost(activeDrag.item) : renderItemContent(activeDrag.item)}\n </div>\n ) : null}\n </div>\n );\n}\n\nList.displayName = \"List\";\n","import type { HTMLAttributes, InputHTMLAttributes, ReactNode } from \"react\";\nimport type { ColorVariant } from \"../types\";\nimport styles from \"./Markers.module.css\";\n\nconst CheckIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M20 6 9 17l-5-5\"/>\n </svg>\n);\n\n/* ── Checkbox ── */\n\nexport type MarkerVariant = ColorVariant;\n\nexport type CheckboxProps = Omit<InputHTMLAttributes<HTMLInputElement>, \"type\" | \"onChange\"> & {\n label?: ReactNode;\n variant?: MarkerVariant;\n checked?: boolean;\n defaultChecked?: boolean;\n indeterminate?: boolean;\n isInvalid?: boolean;\n onChange?: (checked: boolean) => void;\n};\n\nexport function Checkbox({\n label,\n variant = \"blue3\",\n checked,\n defaultChecked,\n indeterminate = false,\n isInvalid = false,\n disabled = false,\n onChange,\n className,\n ...props\n}: CheckboxProps) {\n const isChecked = checked ?? defaultChecked ?? false;\n\n const cls = [\n styles.checkbox,\n styles[variant],\n isChecked && !indeterminate ? styles.checked : null,\n indeterminate ? styles.indeterminate : null,\n isInvalid ? styles.invalid : null,\n disabled ? styles.disabled : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <label className={cls}>\n <input\n {...props}\n type=\"checkbox\"\n checked={isChecked}\n disabled={disabled}\n style={{ display: \"none\" }}\n onChange={(e) => onChange?.(e.currentTarget.checked)}\n />\n <span className={styles.checkboxBox}>\n {!indeterminate && <CheckIcon />}\n </span>\n {label}\n </label>\n );\n}\n\nCheckbox.displayName = \"Checkbox\";\n\n/* ── Radio ── */\n\nexport type RadioProps = Omit<InputHTMLAttributes<HTMLInputElement>, \"type\" | \"onChange\"> & {\n label?: ReactNode;\n variant?: MarkerVariant;\n checked?: boolean;\n isInvalid?: boolean;\n onChange?: (value: string) => void;\n};\n\nexport function Radio({\n label,\n variant = \"blue3\",\n checked = false,\n isInvalid = false,\n disabled = false,\n onChange,\n value,\n className,\n ...props\n}: RadioProps) {\n const cls = [\n styles.radio,\n styles[variant],\n checked ? styles.radioChecked : null,\n isInvalid ? styles.invalid : null,\n disabled ? styles.radioDisabled : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <label className={cls}>\n <input\n {...props}\n type=\"radio\"\n checked={checked}\n disabled={disabled}\n value={value}\n style={{ display: \"none\" }}\n onChange={(e) => onChange?.(e.currentTarget.value)}\n />\n <span className={styles.radioDot} />\n {label}\n </label>\n );\n}\n\nRadio.displayName = \"Radio\";\n\nexport type RadioGroupProps = HTMLAttributes<HTMLDivElement> & {\n children?: ReactNode;\n};\n\nexport function RadioGroup({ children, className, ...props }: RadioGroupProps) {\n const cls = [styles.radioGroup, className].filter(Boolean).join(\" \");\n return (\n <div {...props} className={cls} role=\"radiogroup\">\n {children}\n </div>\n );\n}\n\nRadioGroup.displayName = \"RadioGroup\";\n\n/* ── Switch ── */\n\nexport type SwitchProps = Omit<InputHTMLAttributes<HTMLInputElement>, \"type\" | \"onChange\"> & {\n label?: ReactNode;\n variant?: MarkerVariant;\n checked?: boolean;\n defaultChecked?: boolean;\n thinTrack?: boolean;\n isInvalid?: boolean;\n onChange?: (checked: boolean) => void;\n};\n\nexport function Switch({\n label,\n variant = \"blue3\",\n checked,\n defaultChecked,\n disabled = false,\n thinTrack = false,\n isInvalid = false,\n onChange,\n className,\n ...props\n}: SwitchProps) {\n const isOn = checked ?? defaultChecked ?? false;\n\n const cls = [\n styles.switchWrap,\n styles[variant],\n isOn ? styles.switchOn : null,\n thinTrack ? styles.switchThinTrack : null,\n isInvalid ? styles.invalid : null,\n disabled ? styles.switchDisabled : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <label className={cls}>\n <input\n {...props}\n type=\"checkbox\"\n checked={isOn}\n disabled={disabled}\n style={{ display: \"none\" }}\n onChange={(e) => onChange?.(e.currentTarget.checked)}\n />\n <span className={styles.switchTrack} />\n {label}\n </label>\n );\n}\n\nSwitch.displayName = \"Switch\";\n","import { useId, useState } from \"react\";\nimport type { ButtonHTMLAttributes, HTMLAttributes, MouseEvent, ReactNode } from \"react\";\nimport styles from \"./Menu.module.css\";\n\nexport type MenuSubmenuMode = \"external\" | \"internal\";\nexport type MenuSubmenuTrigger = \"hover\" | \"click\";\n\nexport type MenuProps = HTMLAttributes<HTMLDivElement> & {\n shadow?: boolean;\n spacing?: \"sm\" | \"md\" | \"lg\";\n children?: ReactNode;\n};\n\nexport function Menu({ shadow = true, spacing = \"sm\", children, className, ...props }: MenuProps) {\n const cls = [styles.menu, styles[`spacing-${spacing}`], shadow ? styles.shadow : null, className].filter(Boolean).join(\" \");\n return (\n <div {...props} className={cls} role=\"menu\">\n {children}\n </div>\n );\n}\n\nMenu.displayName = \"Menu\";\n\nexport type MenuGroupProps = HTMLAttributes<HTMLDivElement> & {\n label: ReactNode;\n children?: ReactNode;\n labelProps?: HTMLAttributes<HTMLDivElement>;\n};\n\nexport function MenuGroup({\n label,\n children,\n labelProps,\n className,\n ...props\n}: MenuGroupProps) {\n const generatedId = useId();\n const labelId = labelProps?.id ?? `${generatedId}-label`;\n\n return (\n <div\n {...props}\n className={[styles.group, className].filter(Boolean).join(\" \")}\n role=\"group\"\n aria-labelledby={labelId}\n >\n <div\n {...labelProps}\n id={labelId}\n className={[styles.groupLabel, labelProps?.className].filter(Boolean).join(\" \")}\n >\n {label}\n </div>\n <div className={styles.groupItems}>\n {children}\n </div>\n </div>\n );\n}\n\nMenuGroup.displayName = \"MenuGroup\";\n\nexport type MenuItemProps = ButtonHTMLAttributes<HTMLButtonElement> & {\n icon?: ReactNode;\n kbd?: string;\n active?: boolean;\n danger?: boolean;\n submenu?: ReactNode;\n submenuMode?: MenuSubmenuMode;\n submenuTrigger?: MenuSubmenuTrigger;\n children?: ReactNode;\n};\n\nconst ChevronRightIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"12\" height=\"12\">\n <path d=\"m9 18 6-6-6-6\"/>\n </svg>\n);\n\nexport function MenuItem({\n icon,\n kbd,\n active = false,\n danger = false,\n submenu,\n submenuMode = \"external\",\n submenuTrigger = \"hover\",\n disabled = false,\n children,\n className,\n onClick,\n ...props\n}: MenuItemProps) {\n const [submenuOpen, setSubmenuOpen] = useState(false);\n const hasSubmenu = Boolean(submenu) && !disabled;\n const opensOnHover = hasSubmenu && submenuTrigger === \"hover\";\n\n const cls = [\n styles.item,\n active ? styles.active : null,\n danger ? styles.danger : null,\n submenuOpen ? styles.submenuOpenItem : null,\n disabled ? styles.disabled : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n if (hasSubmenu && submenuTrigger === \"click\") {\n event.preventDefault();\n setSubmenuOpen((open) => !open);\n }\n\n onClick?.(event);\n };\n\n const itemEl = (\n <button\n {...props}\n type=\"button\"\n className={cls}\n disabled={disabled}\n role=\"menuitem\"\n aria-haspopup={hasSubmenu ? \"menu\" : undefined}\n aria-expanded={hasSubmenu ? submenuOpen : undefined}\n onClick={handleClick}\n >\n {icon}\n <span className={styles.itemContent}>{children}</span>\n {kbd && <span className={styles.kbd}>{kbd}</span>}\n {hasSubmenu && <span className={styles.submenuIndicator}><ChevronRightIcon /></span>}\n </button>\n );\n\n if (!hasSubmenu) return itemEl;\n\n return (\n <div\n className={[styles.itemWrap, styles[`submenu-${submenuMode}`]].filter(Boolean).join(\" \")}\n role=\"none\"\n onMouseEnter={opensOnHover ? () => setSubmenuOpen(true) : undefined}\n onMouseLeave={opensOnHover ? () => setSubmenuOpen(false) : undefined}\n >\n {itemEl}\n {submenuOpen && (\n <div className={[styles.submenuPanel, styles[`submenuPanel-${submenuMode}`]].filter(Boolean).join(\" \")} role=\"menu\">\n {submenu}\n </div>\n )}\n </div>\n );\n}\n\nMenuItem.displayName = \"MenuItem\";\n","import {\n useEffect,\n useRef,\n useState,\n forwardRef,\n useImperativeHandle\n} from \"react\";\nimport type {\n ButtonHTMLAttributes,\n CSSProperties,\n HTMLAttributes,\n MouseEvent,\n PointerEvent as ReactPointerEvent,\n ReactNode\n} from \"react\";\nimport styles from \"./Modal.module.css\";\n\nexport type ModalOverlay = \"none\" | \"blur\" | \"dim\";\n\nconst XIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"11\" height=\"11\">\n <path d=\"M18 6 6 18M6 6l12 12\"/>\n </svg>\n);\n\nexport type ModalProps = {\n open: boolean;\n title?: ReactNode;\n subtitle?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n overlay?: ModalOverlay;\n shadow?: boolean;\n draggable?: boolean;\n closeOnBackdrop?: boolean;\n showCloseButton?: boolean;\n backdropProps?: HTMLAttributes<HTMLDivElement>;\n modalProps?: HTMLAttributes<HTMLDivElement>;\n headerProps?: HTMLAttributes<HTMLElement>;\n bodyProps?: HTMLAttributes<HTMLElement>;\n footerProps?: HTMLAttributes<HTMLElement>;\n closeButtonProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n onOpenChange?: (open: boolean) => void;\n onClose?: () => void;\n};\n\nexport const Modal = forwardRef<HTMLDivElement, ModalProps>(\n (\n {\n open,\n title,\n subtitle,\n children,\n footer,\n overlay = \"blur\",\n shadow = true,\n draggable = false,\n closeOnBackdrop = true,\n showCloseButton = true,\n backdropProps,\n modalProps,\n headerProps,\n bodyProps,\n footerProps,\n closeButtonProps,\n onOpenChange,\n onClose\n },\n ref\n ) => {\n const innerRef = useRef<HTMLDivElement>(null);\n const dragRef = useRef({\n active: false,\n pointerId: -1,\n startX: 0,\n startY: 0,\n originX: 0,\n originY: 0\n });\n const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 });\n const [isDragging, setIsDragging] = useState(false);\n\n useImperativeHandle(ref, () => innerRef.current as HTMLDivElement);\n\n useEffect(() => {\n if (!open) return;\n\n setDragOffset({ x: 0, y: 0 });\n setIsDragging(false);\n\n const handleKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") requestClose();\n };\n\n document.addEventListener(\"keydown\", handleKey);\n return () => document.removeEventListener(\"keydown\", handleKey);\n }, [open]);\n\n const requestClose = () => {\n onOpenChange?.(false);\n onClose?.();\n };\n\n const handleBackdropClick = (event: MouseEvent<HTMLDivElement>) => {\n if (closeOnBackdrop && event.target === event.currentTarget) {\n requestClose();\n }\n };\n\n const shouldSkipDrag = (target: EventTarget | null) => {\n return target instanceof HTMLElement\n ? Boolean(target.closest(\"button, a, input, textarea, select, [data-no-modal-drag]\"))\n : false;\n };\n\n const handleHeaderPointerDown = (event: ReactPointerEvent<HTMLElement>) => {\n headerProps?.onPointerDown?.(event);\n if (event.defaultPrevented || !draggable || event.button !== 0 || shouldSkipDrag(event.target)) return;\n\n dragRef.current = {\n active: true,\n pointerId: event.pointerId,\n startX: event.clientX,\n startY: event.clientY,\n originX: dragOffset.x,\n originY: dragOffset.y\n };\n setIsDragging(true);\n event.currentTarget.setPointerCapture(event.pointerId);\n };\n\n const handleHeaderPointerMove = (event: ReactPointerEvent<HTMLElement>) => {\n headerProps?.onPointerMove?.(event);\n const drag = dragRef.current;\n if (!drag.active || drag.pointerId !== event.pointerId) return;\n\n setDragOffset({\n x: drag.originX + event.clientX - drag.startX,\n y: drag.originY + event.clientY - drag.startY\n });\n };\n\n const stopDragging = (event: ReactPointerEvent<HTMLElement>) => {\n const drag = dragRef.current;\n if (drag.pointerId === event.pointerId && event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n\n dragRef.current.active = false;\n setIsDragging(false);\n };\n\n const handleHeaderPointerUp = (event: ReactPointerEvent<HTMLElement>) => {\n headerProps?.onPointerUp?.(event);\n stopDragging(event);\n };\n\n const handleHeaderPointerCancel = (event: ReactPointerEvent<HTMLElement>) => {\n headerProps?.onPointerCancel?.(event);\n stopDragging(event);\n };\n\n if (!open) return null;\n\n const backdropClass = [styles.backdrop, styles[`overlay-${overlay}`], backdropProps?.className]\n .filter(Boolean)\n .join(\" \");\n\n const modalClass = [styles.modal, shadow ? styles.shadow : null, modalProps?.className]\n .filter(Boolean)\n .join(\" \");\n\n const modalStyle = {\n ...modalProps?.style,\n \"--modal-drag-x\": `${dragOffset.x}px`,\n \"--modal-drag-y\": `${dragOffset.y}px`\n } as CSSProperties;\n\n return (\n <div\n {...backdropProps}\n className={backdropClass}\n onClick={handleBackdropClick}\n role=\"presentation\"\n >\n <div\n ref={innerRef}\n {...modalProps}\n className={modalClass}\n style={modalStyle}\n role=\"dialog\"\n aria-modal=\"true\"\n >\n {(title || showCloseButton) && (\n <header\n {...headerProps}\n className={[\n styles.header,\n draggable ? styles.draggableHeader : null,\n isDragging ? styles.draggingHeader : null,\n headerProps?.className\n ].filter(Boolean).join(\" \")}\n onPointerDown={handleHeaderPointerDown}\n onPointerMove={handleHeaderPointerMove}\n onPointerUp={handleHeaderPointerUp}\n onPointerCancel={handleHeaderPointerCancel}\n >\n <div className={styles.titleBlock}>\n {title ? <div className={styles.title}>{title}</div> : null}\n {subtitle ? <div className={styles.subtitle}>{subtitle}</div> : null}\n </div>\n {showCloseButton && (\n <button\n type=\"button\"\n aria-label=\"Close\"\n className={styles.closeBtn}\n onClick={requestClose}\n {...closeButtonProps}\n >\n {closeButtonProps?.children ?? <XIcon />}\n </button>\n )}\n </header>\n )}\n <section\n {...bodyProps}\n className={[styles.body, \"sb\", bodyProps?.className].filter(Boolean).join(\" \")}\n >\n {children}\n </section>\n {footer && (\n <footer\n {...footerProps}\n className={[styles.footer, footerProps?.className].filter(Boolean).join(\" \")}\n >\n {footer}\n </footer>\n )}\n </div>\n </div>\n );\n }\n);\n\nModal.displayName = \"Modal\";\n","import {\n useState,\n useRef,\n useEffect,\n useLayoutEffect,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode\n} from \"react\";\nimport styles from \"./Popover.module.css\";\n\nconst XIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n </svg>\n);\n\nexport type PopoverSide = \"bottom-start\" | \"bottom-end\" | \"top-start\" | \"top-end\";\nconst POPOVER_GAP = 8;\nconst VIEWPORT_PADDING = 8;\n\nexport type PopoverProps = {\n open?: boolean;\n defaultOpen?: boolean;\n title?: ReactNode;\n children?: ReactNode;\n trigger?: ReactNode;\n side?: PopoverSide;\n shadow?: boolean;\n openOnHover?: boolean;\n showCloseButton?: boolean;\n onOpenChange?: (open: boolean) => void;\n popProps?: HTMLAttributes<HTMLDivElement>;\n};\n\nexport function Popover({\n open: openProp,\n defaultOpen = false,\n title,\n children,\n trigger,\n side = \"bottom-start\",\n shadow = true,\n openOnHover = false,\n showCloseButton = true,\n onOpenChange,\n popProps\n}: PopoverProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const [renderedSide, setRenderedSide] = useState<PopoverSide>(side);\n const [popStyle, setPopStyle] = useState<CSSProperties | undefined>();\n const isControlled = openProp !== undefined;\n const isOpen = isControlled ? openProp : internalOpen;\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const popRef = useRef<HTMLDivElement>(null);\n\n function setOpen(value: boolean) {\n if (!isControlled) setInternalOpen(value);\n onOpenChange?.(value);\n }\n\n useEffect(() => {\n function handleClick(e: MouseEvent) {\n if (wrapperRef.current && !wrapperRef.current.contains(e.target as Node)) {\n setOpen(false);\n }\n }\n if (isOpen) document.addEventListener(\"mousedown\", handleClick);\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, [isOpen]);\n\n useEffect(() => {\n if (!isOpen) {\n setRenderedSide(side);\n setPopStyle(undefined);\n }\n }, [isOpen, side]);\n\n useLayoutEffect(() => {\n if (!isOpen) return;\n\n const updatePosition = () => {\n const wrapper = wrapperRef.current;\n const pop = popRef.current;\n if (!wrapper || !pop) return;\n\n const wrapperRect = wrapper.getBoundingClientRect();\n const popWidth = pop.offsetWidth;\n const popHeight = pop.offsetHeight;\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n const preferredVertical = side.startsWith(\"top\") ? \"top\" : \"bottom\";\n const alternateVertical = preferredVertical === \"top\" ? \"bottom\" : \"top\";\n const preferredAlign = side.endsWith(\"end\") ? \"end\" : \"start\";\n const alternateAlign = preferredAlign === \"end\" ? \"start\" : \"end\";\n\n const available = {\n top: wrapperRect.top - VIEWPORT_PADDING,\n bottom: viewportHeight - wrapperRect.bottom - VIEWPORT_PADDING\n };\n\n const requiredHeight = popHeight + POPOVER_GAP;\n const vertical = available[preferredVertical] >= requiredHeight || available[preferredVertical] >= available[alternateVertical]\n ? preferredVertical\n : alternateVertical;\n\n const getLeft = (align: \"start\" | \"end\") => align === \"end\"\n ? wrapperRect.right - popWidth\n : wrapperRect.left;\n\n const fitsHorizontally = (align: \"start\" | \"end\") => {\n const left = getLeft(align);\n return left >= VIEWPORT_PADDING && left + popWidth <= viewportWidth - VIEWPORT_PADDING;\n };\n\n const preferredLeft = getLeft(preferredAlign);\n const alternateLeft = getLeft(alternateAlign);\n const preferredOverflow = Math.max(VIEWPORT_PADDING - preferredLeft, 0)\n + Math.max(preferredLeft + popWidth - (viewportWidth - VIEWPORT_PADDING), 0);\n const alternateOverflow = Math.max(VIEWPORT_PADDING - alternateLeft, 0)\n + Math.max(alternateLeft + popWidth - (viewportWidth - VIEWPORT_PADDING), 0);\n\n const align = fitsHorizontally(preferredAlign) || preferredOverflow <= alternateOverflow\n ? preferredAlign\n : alternateAlign;\n\n const left = getLeft(align);\n const leftOverflow = VIEWPORT_PADDING - left;\n const rightOverflow = left + popWidth - (viewportWidth - VIEWPORT_PADDING);\n let shiftX = 0;\n\n if (leftOverflow > 0) shiftX = leftOverflow;\n if (rightOverflow > 0) shiftX = -rightOverflow;\n\n setRenderedSide(`${vertical}-${align}` as PopoverSide);\n setPopStyle({ \"--popover-shift-x\": `${shiftX}px` } as CSSProperties);\n };\n\n updatePosition();\n window.addEventListener(\"resize\", updatePosition);\n window.addEventListener(\"scroll\", updatePosition, true);\n return () => {\n window.removeEventListener(\"resize\", updatePosition);\n window.removeEventListener(\"scroll\", updatePosition, true);\n };\n }, [children, isOpen, side, title]);\n\n const isTop = renderedSide.startsWith(\"top\");\n const isEnd = renderedSide.endsWith(\"end\");\n\n const popCls = [\n styles.pop,\n shadow ? styles.shadow : null,\n isEnd ? styles.sideRight : null,\n isTop ? styles.sideTop : null,\n popProps?.className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const mergedPopStyle = {\n ...popStyle,\n ...popProps?.style\n };\n\n return (\n <div\n ref={wrapperRef}\n className={styles.wrapper}\n onMouseEnter={openOnHover ? () => setOpen(true) : undefined}\n onMouseLeave={openOnHover ? () => setOpen(false) : undefined}\n >\n {trigger && (\n <div onClick={() => setOpen(openOnHover ? true : !isOpen)} style={{ display: \"inline-flex\" }}>\n {trigger}\n </div>\n )}\n {isOpen && (\n <div {...popProps} ref={popRef} className={popCls} style={mergedPopStyle}>\n <span className={styles.arrow} />\n {(title || showCloseButton) && (\n <div className={styles.head}>\n {title && <span className={styles.title}>{title}</span>}\n {showCloseButton && (\n <button\n type=\"button\"\n className={styles.closeBtn}\n aria-label=\"Close\"\n onClick={() => setOpen(false)}\n >\n <XIcon />\n </button>\n )}\n </div>\n )}\n <div className={styles.body}>{children}</div>\n </div>\n )}\n </div>\n );\n}\n\nPopover.displayName = \"Popover\";\n","import type { CSSProperties, HTMLAttributes, ReactNode } from \"react\";\nimport type { ColorVariant } from \"../types\";\nimport styles from \"./Progress.module.css\";\n\nexport type ProgressVariant = ColorVariant;\nexport type ProgressSize = \"sm\" | \"md\" | \"lg\";\nexport type ProgressShape = \"bar\" | \"circle\";\n\nexport type ProgressProps = HTMLAttributes<HTMLDivElement> & {\n value?: number;\n max?: number;\n variant?: ProgressVariant;\n size?: ProgressSize;\n shape?: ProgressShape;\n label?: ReactNode;\n valueLabel?: string;\n showValue?: boolean;\n indeterminate?: boolean;\n};\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.min(Math.max(value, min), max);\n}\n\nexport function Progress({\n value,\n max = 100,\n variant = \"blue2\",\n size = \"md\",\n shape = \"bar\",\n label,\n valueLabel,\n showValue,\n indeterminate = false,\n className,\n ...props\n}: ProgressProps) {\n const safeMax = max > 0 ? max : 100;\n const isIndeterminate = indeterminate || typeof value !== \"number\";\n const safeValue = typeof value === \"number\" ? clamp(value, 0, safeMax) : 0;\n const percent = Math.round((safeValue / safeMax) * 100);\n const shouldShowValue = showValue ?? shape === \"circle\";\n\n const cls = [\n styles.progress,\n styles[variant],\n shape === \"circle\" ? styles.circular : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const progressbarProps = {\n role: \"progressbar\",\n \"aria-valuemin\": isIndeterminate ? undefined : 0,\n \"aria-valuemax\": isIndeterminate ? undefined : safeMax,\n \"aria-valuenow\": isIndeterminate ? undefined : safeValue,\n \"aria-valuetext\": valueLabel\n };\n\n if (shape === \"circle\") {\n const circleClass = [\n styles.circle,\n styles[`circle-${size}`],\n isIndeterminate ? styles.indeterminateCircle : null\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div {...props} className={cls}>\n {label && <span className={styles.circleLabel}>{label}</span>}\n <div\n className={circleClass}\n style={{ \"--progress-percent\": `${percent}%` } as CSSProperties}\n {...progressbarProps}\n >\n {shouldShowValue && (\n <span className={styles.circleValue}>\n {valueLabel ?? (isIndeterminate ? \"Loading\" : `${percent}%`)}\n </span>\n )}\n </div>\n </div>\n );\n }\n\n const trackClass = [\n styles.track,\n styles[`bar-${size}`],\n isIndeterminate ? styles.indeterminate : null\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div {...props} className={cls}>\n {(label || shouldShowValue) && (\n <div className={styles.header}>\n {label && <span className={styles.label}>{label}</span>}\n {shouldShowValue && (\n <span className={styles.value}>\n {valueLabel ?? (isIndeterminate ? \"Loading\" : `${percent}%`)}\n </span>\n )}\n </div>\n )}\n <div className={trackClass} {...progressbarProps}>\n <span\n className={styles.fill}\n style={isIndeterminate ? undefined : { width: `${percent}%` }}\n />\n </div>\n </div>\n );\n}\n\nProgress.displayName = \"Progress\";\n","import { useLayoutEffect, useRef, useState } from \"react\";\nimport type { ButtonHTMLAttributes, CSSProperties, HTMLAttributes, ReactNode } from \"react\";\nimport styles from \"./PushButton.module.css\";\n\nexport type PushButtonGroupProps = HTMLAttributes<HTMLDivElement> & {\n gap?: \"sm\" | \"md\" | \"lg\";\n padding?: \"sm\" | \"md\" | \"lg\";\n background?: boolean;\n rounded?: boolean;\n width?: CSSProperties[\"width\"];\n children?: ReactNode;\n};\n\nexport function PushButtonGroup({\n gap = \"sm\",\n padding = \"sm\",\n background = true,\n rounded = false,\n width,\n children,\n className,\n ...props\n}: PushButtonGroupProps) {\n const groupRef = useRef<HTMLDivElement>(null);\n const [buttonWidth, setButtonWidth] = useState<number | undefined>();\n\n useLayoutEffect(() => {\n const group = groupRef.current;\n if (!group) return;\n\n const updateButtonWidth = () => {\n const buttons = Array.from(group.querySelectorAll<HTMLButtonElement>(\"button\"));\n if (buttons.length === 0) {\n setButtonWidth(undefined);\n return;\n }\n\n const nextWidth = Math.ceil(Math.max(...buttons.map((button) => {\n const buttonStyle = window.getComputedStyle(button);\n const paddingX = parseFloat(buttonStyle.paddingLeft) + parseFloat(buttonStyle.paddingRight);\n const contentWidth = button.querySelector<HTMLElement>(`.${styles.content}`)?.getBoundingClientRect().width ?? 0;\n const badge = button.querySelector<HTMLElement>(`.${styles.badge}`);\n const badgeWidth = badge?.getBoundingClientRect().width ?? 0;\n const badgeOffset = badge ? parseFloat(window.getComputedStyle(badge).right || \"0\") || parseFloat(window.getComputedStyle(badge).left || \"0\") || 0 : 0;\n const badgeGap = badge ? 6 : 0;\n const contentWidthWithPadding = contentWidth + paddingX;\n const contentWidthWithBadge = contentWidth + (badgeWidth + badgeOffset + badgeGap) * 2;\n\n return Math.max(contentWidthWithPadding, contentWidthWithBadge);\n })));\n setButtonWidth(nextWidth);\n };\n\n updateButtonWidth();\n\n if (typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver(updateButtonWidth);\n observer.observe(group);\n Array.from(group.children).forEach((child) => observer.observe(child));\n return () => observer.disconnect();\n }, [children]);\n\n const cls = [\n styles.group,\n styles[`gap-${gap}`],\n styles[`padding-${padding}`],\n background ? null : styles.noBackground,\n rounded ? styles.rounded : null,\n width !== undefined ? styles.fixedWidth : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const style = {\n ...props.style,\n ...(width !== undefined ? { width } : null),\n ...(buttonWidth !== undefined ? { \"--push-button-width\": `${buttonWidth}px` } : null)\n } as CSSProperties;\n\n return (\n <div {...props} ref={groupRef} className={cls} style={style} role=\"group\">\n {children}\n </div>\n );\n}\n\nPushButtonGroup.displayName = \"PushButtonGroup\";\n\nexport type PushButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {\n on?: boolean;\n icon?: ReactNode;\n badge?: ReactNode;\n badgePosition?: \"left\" | \"right\";\n children?: ReactNode;\n};\n\nexport function PushButton({\n on = false,\n icon,\n badge,\n badgePosition = \"right\",\n children,\n disabled = false,\n className,\n ...props\n}: PushButtonProps) {\n const cls = [\n styles.pb,\n on ? styles.on : null,\n disabled ? styles.disabled : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <button {...props} type=\"button\" className={cls} disabled={disabled}>\n <span className={styles.content}>\n {icon}\n {children}\n </span>\n {badge ? (\n <span className={[styles.badge, styles[`badge-${badgePosition}`]].filter(Boolean).join(\" \")}>\n {badge}\n </span>\n ) : null}\n </button>\n );\n}\n\nPushButton.displayName = \"PushButton\";\n","import {\n forwardRef,\n Fragment,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState\n} from \"react\";\nimport type {\n ButtonHTMLAttributes,\n CSSProperties,\n HTMLAttributes,\n KeyboardEvent,\n MouseEvent as ReactMouseEvent,\n ReactNode\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useControlledState } from \"../hooks\";\nimport styles from \"./Select.module.css\";\n\nconst ChevronIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"14\" height=\"14\">\n <path d=\"m6 9 6 6 6-6\"/>\n </svg>\n);\n\nconst XIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"12\" height=\"12\">\n <path d=\"M18 6 6 18M6 6l12 12\"/>\n </svg>\n);\n\nconst SearchIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"11\" cy=\"11\" r=\"7\"/>\n <path d=\"m20 20-3.5-3.5\"/>\n </svg>\n);\n\nconst CheckIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"10\" height=\"10\">\n <path d=\"M20 6 9 17l-5-5\"/>\n </svg>\n);\n\nexport type SelectOption<Value extends string = string> = {\n value: Value;\n label: ReactNode;\n meta?: string;\n disabled?: boolean;\n};\n\nexport type SelectValue<Value extends string = string> =\n | Value\n | Value[]\n | null;\n\nexport type SelectOptionsPosition = \"bottom\" | \"top\";\nexport type SelectOptionsAlign = \"left\" | \"center\" | \"right\";\n\nexport type SelectProps<Value extends string = string> = Omit<\n HTMLAttributes<HTMLDivElement>,\n \"defaultValue\" | \"onChange\"\n> & {\n label?: string;\n helpText?: ReactNode;\n options: SelectOption<Value>[];\n multiple?: boolean;\n searchable?: boolean;\n clearable?: boolean;\n disabled?: boolean;\n placeholder?: string;\n searchPlaceholder?: string;\n emptyLabel?: string;\n loadingLabel?: string;\n isLoading?: boolean;\n optionsPosition?: SelectOptionsPosition;\n optionsAlign?: SelectOptionsAlign;\n showSelectedCount?: boolean;\n showClearAll?: boolean;\n showSelectedValues?: boolean;\n closeOnSelect?: boolean;\n isInvalid?: boolean;\n filterOptions?: (\n options: SelectOption<Value>[],\n searchValue: string\n ) => SelectOption<Value>[];\n onSearchChange?: (searchValue: string) => void;\n value?: SelectValue<Value>;\n defaultValue?: SelectValue<Value>;\n onValueChange?: (\n value: SelectValue<Value>,\n selectedOptions: SelectOption<Value>[]\n ) => void;\n fieldProps?: HTMLAttributes<HTMLDivElement>;\n wrapperProps?: HTMLAttributes<HTMLDivElement>;\n selectProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n};\n\nconst defaultFilterOptions = <Value extends string>(\n options: SelectOption<Value>[],\n searchValue: string\n) => {\n const norm = searchValue.trim().toLowerCase();\n if (!norm) return options;\n return options.filter((o) =>\n String(o.label).toLowerCase().includes(norm)\n );\n};\n\nconst useSafeLayoutEffect =\n typeof window === \"undefined\" ? useEffect : useLayoutEffect;\n\nexport const Select = forwardRef<HTMLDivElement, SelectProps>(\n (\n {\n label,\n helpText,\n clearable = false,\n disabled = false,\n emptyLabel = \"No options found\",\n filterOptions = defaultFilterOptions,\n isLoading = false,\n loadingLabel = \"Loading...\",\n multiple = false,\n onSearchChange,\n options,\n optionsAlign = \"left\",\n optionsPosition = \"bottom\",\n placeholder = \"Select\",\n searchable = false,\n searchPlaceholder = \"Search...\",\n showSelectedCount = true,\n showClearAll = true,\n showSelectedValues = true,\n closeOnSelect,\n isInvalid = false,\n value,\n defaultValue = null,\n onValueChange,\n fieldProps,\n wrapperProps,\n selectProps,\n className,\n ...props\n },\n ref\n ) => {\n const [open, setOpen] = useState(false);\n const [searchValue, setSearchValue] = useState(\"\");\n const [portalNode, setPortalNode] = useState<HTMLElement | null>(null);\n const [popoverStyle, setPopoverStyle] = useState<CSSProperties>({});\n const rootRef = useRef<HTMLDivElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n\n const [selectedValue, setSelectedValue] = useControlledState(\n value as SelectValue,\n defaultValue as SelectValue,\n (nextValue) => {\n const selected = options.filter((o) =>\n Array.isArray(nextValue)\n ? nextValue.includes(o.value)\n : o.value === nextValue\n );\n onValueChange?.(nextValue, selected);\n }\n );\n\n const selectedValues = useMemo(\n () =>\n Array.isArray(selectedValue)\n ? selectedValue\n : selectedValue\n ? [selectedValue]\n : [],\n [selectedValue]\n );\n\n const selectedOptions = useMemo(\n () => options.filter((o) => selectedValues.includes(o.value)),\n [options, selectedValues]\n );\n\n const filteredOptions = useMemo(\n () => filterOptions(options, searchValue),\n [filterOptions, options, searchValue]\n );\n\n useEffect(() => {\n setPortalNode(document.body);\n }, []);\n\n const isOptionsTop = optionsPosition === \"top\";\n\n const updatePopoverPosition = useCallback(() => {\n const rect = rootRef.current?.getBoundingClientRect();\n if (!rect) return;\n\n const nextStyle: CSSProperties = {\n position: \"fixed\",\n left: rect.left,\n right: \"auto\",\n width: rect.width,\n zIndex: 110\n };\n\n if (isOptionsTop) {\n nextStyle.top = \"auto\";\n nextStyle.bottom = window.innerHeight - rect.top;\n } else {\n nextStyle.top = rect.bottom;\n nextStyle.bottom = \"auto\";\n }\n\n setPopoverStyle(nextStyle);\n }, [isOptionsTop]);\n\n useSafeLayoutEffect(() => {\n if (open) updatePopoverPosition();\n }, [open, updatePopoverPosition]);\n\n useEffect(() => {\n if (!open) return;\n\n updatePopoverPosition();\n window.addEventListener(\"resize\", updatePopoverPosition);\n window.addEventListener(\"scroll\", updatePopoverPosition, true);\n\n return () => {\n window.removeEventListener(\"resize\", updatePopoverPosition);\n window.removeEventListener(\"scroll\", updatePopoverPosition, true);\n };\n }, [open, updatePopoverPosition]);\n\n // Close on outside click\n useEffect(() => {\n if (!open) return;\n const handleClick = (e: MouseEvent) => {\n const target = e.target as Node;\n const clickedTrigger = rootRef.current?.contains(target);\n const clickedPopover = popoverRef.current?.contains(target);\n\n if (!clickedTrigger && !clickedPopover) {\n setOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", handleClick);\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, [open]);\n\n const updateSearch = (next: string) => {\n setSearchValue(next);\n onSearchChange?.(next);\n };\n\n const resolvedCloseOnSelect = closeOnSelect ?? !multiple;\n\n const selectOption = (option: SelectOption) => {\n if (option.disabled) return;\n if (multiple) {\n const next = selectedValues.includes(option.value)\n ? selectedValues.filter((v) => v !== option.value)\n : [...selectedValues, option.value];\n setSelectedValue(next);\n if (resolvedCloseOnSelect) setOpen(false);\n return;\n }\n setSelectedValue(option.value);\n if (resolvedCloseOnSelect) setOpen(false);\n };\n\n const clearValue = () => {\n setSelectedValue(multiple ? [] : null);\n updateSearch(\"\");\n };\n\n const toggleAllValues = () => {\n if (selectedValues.length > 0) {\n clearValue();\n return;\n }\n\n setSelectedValue(options.filter((o) => !o.disabled).map((o) => o.value));\n };\n\n const handleTriggerClick = (e: ReactMouseEvent<HTMLButtonElement>) => {\n selectProps?.onClick?.(e);\n if (!e.defaultPrevented && !disabled) setOpen((o) => !o);\n };\n\n const handleTriggerKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n selectProps?.onKeyDown?.(e);\n if (e.defaultPrevented) return;\n\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n setOpen((o) => !o);\n }\n if (e.key === \"Escape\") setOpen(false);\n };\n\n const triggerClass = [\n styles.trigger,\n open ? styles.triggerOpen : null,\n isInvalid ? styles.invalid : null,\n open\n ? isOptionsTop\n ? styles.triggerConnectedTop\n : styles.triggerConnectedBottom\n : null,\n selectProps?.className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const showSelectedValuesInTrigger = !multiple || showSelectedValues;\n const showChips = multiple && showSelectedValues && selectedOptions.length > 0;\n const showOptionCheckbox = multiple;\n const showFooter = multiple && (selectedValues.length > 0 || showClearAll);\n const hasVisibleTriggerValue = showSelectedValuesInTrigger && selectedOptions.length > 0;\n const maxChips = 2;\n const overflowCount = selectedOptions.length - maxChips;\n const selectedLabels = selectedOptions.map((option, index) => (\n <Fragment key={option.value}>\n {index > 0 ? \", \" : null}\n {option.label}\n </Fragment>\n ));\n\n const rootClass = [styles.root, className, wrapperProps?.className]\n .filter(Boolean)\n .join(\" \");\n const fieldClass = [styles.field, fieldProps?.className]\n .filter(Boolean)\n .join(\" \");\n const optionsAlignClass = {\n left: styles.itemAlignLeft,\n center: styles.itemAlignCenter,\n right: styles.itemAlignRight\n }[optionsAlign];\n\n const popover = open ? (\n <div\n ref={popoverRef}\n className={[\n styles.popover,\n isOptionsTop ? styles.popoverTop : styles.popoverBottom\n ].join(\" \")}\n style={popoverStyle}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n >\n {searchable && (\n <div className={styles.search}>\n <span className={styles.searchIcon}><SearchIcon /></span>\n <input\n autoFocus\n value={searchValue}\n placeholder={searchPlaceholder}\n className={styles.searchInput}\n onChange={(e) => updateSearch(e.target.value)}\n />\n {searchValue && (\n <button className={styles.clearBtn} onClick={() => updateSearch(\"\")}>\n <XIcon />\n </button>\n )}\n </div>\n )}\n\n <ul className={[styles.list, \"sb\"].join(\" \")}>\n {isLoading && <li className={styles.emptyState}>{loadingLabel}</li>}\n {!isLoading && filteredOptions.length === 0 && (\n <li className={styles.emptyState}>{emptyLabel}</li>\n )}\n {!isLoading &&\n filteredOptions.map((option) => {\n const checked = selectedValues.includes(option.value);\n const itemClass = [\n styles.item,\n optionsAlignClass,\n checked ? styles.itemActive : null,\n option.disabled ? styles.itemDisabled : null\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <li\n key={option.value}\n className={itemClass}\n role=\"option\"\n aria-selected={checked}\n onClick={() => selectOption(option)}\n >\n {!showOptionCheckbox && optionsAlign === \"right\" && checked && (\n <span className={styles.checkIcon}><CheckIcon /></span>\n )}\n {showOptionCheckbox ? (\n <span className={[styles.checkbox, checked ? styles.checkboxChecked : null].filter(Boolean).join(\" \")}>\n {checked && <CheckIcon />}\n </span>\n ) : null}\n <span>{option.label}</span>\n {option.meta && <span className={styles.itemMeta}>{option.meta}</span>}\n {!showOptionCheckbox && optionsAlign !== \"right\" && checked && (\n <span className={styles.checkIcon}><CheckIcon /></span>\n )}\n </li>\n );\n })}\n </ul>\n\n {showFooter && (showSelectedCount || showClearAll) && (\n <div className={styles.popFooter}>\n {showSelectedCount && <span>{selectedValues.length} selected</span>}\n {showClearAll && (\n <button className={styles.popFooterBtn} onClick={toggleAllValues}>\n {selectedValues.length > 0 ? \"Clear all\" : \"Check all\"}\n </button>\n )}\n </div>\n )}\n </div>\n ) : null;\n\n const inner = (\n <div ref={rootRef} {...props} {...wrapperProps} className={rootClass}>\n <button\n {...selectProps}\n type=\"button\"\n className={triggerClass}\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n onClick={handleTriggerClick}\n onKeyDown={handleTriggerKeyDown}\n >\n {showChips ? (\n <div className={styles.chips}>\n {selectedOptions.slice(0, maxChips).map((o) => (\n <span key={o.value} className={styles.chip}>{o.label}</span>\n ))}\n {overflowCount > 0 && (\n <span className={[styles.chip, styles.chipOverflow].join(\" \")}>\n +{overflowCount}\n </span>\n )}\n </div>\n ) : (\n <span className={[styles.triggerValue, !hasVisibleTriggerValue ? styles.triggerPlaceholder : null].filter(Boolean).join(\" \")}>\n {hasVisibleTriggerValue\n ? selectedLabels\n : placeholder}\n </span>\n )}\n {clearable && selectedValues.length > 0 && (\n <button\n type=\"button\"\n aria-label=\"Clear\"\n className={styles.clearBtn}\n disabled={disabled}\n onClick={(e) => { e.stopPropagation(); clearValue(); }}\n >\n <XIcon />\n </button>\n )}\n <span className={[styles.chevron, open ? styles.chevronOpen : null].filter(Boolean).join(\" \")}>\n <ChevronIcon />\n </span>\n </button>\n\n {popover && portalNode ? createPortal(popover, portalNode) : popover}\n </div>\n );\n\n if (!label && !helpText && !fieldProps) return inner;\n\n return (\n <div {...fieldProps} className={fieldClass}>\n {label && (\n <label className={styles.label}>\n {label}\n {multiple && showSelectedCount && selectedValues.length > 0 && (\n <span className={styles.labelMeta}>· {selectedValues.length} selected</span>\n )}\n </label>\n )}\n {inner}\n {helpText ? <span className={styles.helpText}>{helpText}</span> : null}\n </div>\n );\n }\n);\n\nSelect.displayName = \"Select\";\n","import type { HTMLAttributes } from \"react\";\nimport type { ColorVariant } from \"../types\";\nimport styles from \"./Spinner.module.css\";\n\nexport type SpinnerType = \"ring\" | \"dots\" | \"bar\";\nexport type SpinnerVariant = ColorVariant;\nexport type SpinnerSize = \"sm\" | \"md\" | \"lg\";\ntype LegacySpinnerVariant = SpinnerType;\n\nexport type SpinnerProps = HTMLAttributes<HTMLSpanElement> & {\n variant?: SpinnerVariant | LegacySpinnerVariant;\n type?: SpinnerType;\n size?: SpinnerSize;\n muted?: boolean;\n onColor?: boolean;\n};\n\nconst spinnerTypes = new Set<SpinnerType>([\"ring\", \"dots\", \"bar\"]);\n\nfunction isSpinnerType(value: SpinnerProps[\"variant\"]): value is SpinnerType {\n return typeof value === \"string\" && spinnerTypes.has(value as SpinnerType);\n}\n\nexport function Spinner({\n variant = \"blue3\",\n type,\n size = \"md\",\n muted = false,\n onColor = false,\n className,\n ...props\n}: SpinnerProps) {\n const resolvedType = type ?? (isSpinnerType(variant) ? variant : \"ring\");\n const colorVariant = isSpinnerType(variant) ? \"blue3\" : variant;\n\n if (resolvedType === \"dots\") {\n const cls = [\n styles.dots,\n styles[colorVariant],\n muted ? styles.dotsMuted : null,\n onColor ? styles.onColor : null,\n className\n ].filter(Boolean).join(\" \");\n return (\n <span {...props} className={cls} role=\"status\" aria-label=\"Loading\">\n <span className={styles.dot} />\n <span className={styles.dot} />\n <span className={styles.dot} />\n </span>\n );\n }\n\n if (resolvedType === \"bar\") {\n const cls = [\n styles.bar,\n styles[colorVariant],\n muted ? styles.barMuted : null,\n onColor ? styles.onColor : null,\n className\n ].filter(Boolean).join(\" \");\n return (\n <span {...props} className={cls} role=\"status\" aria-label=\"Loading\">\n <span className={styles.barFill} />\n </span>\n );\n }\n\n const cls = [\n styles.ring,\n styles[colorVariant],\n styles[size],\n muted ? styles.ringMuted : null,\n onColor ? styles.onColor : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <span\n {...props}\n className={cls}\n role=\"status\"\n aria-label=\"Loading\"\n />\n );\n}\n\nSpinner.displayName = \"Spinner\";\n","import type { ButtonHTMLAttributes, HTMLAttributes, ReactNode } from \"react\";\nimport type { ColorVariant } from \"../types\";\nimport styles from \"./Steps.module.css\";\n\nexport type StepsType = \"line\" | \"arrow\";\nexport type StepsVariant = ColorVariant;\nexport type StepsSize = \"sm\" | \"md\" | \"lg\";\ntype LegacyStepsVariant = StepsType;\n\nexport type StepItem = {\n label: ReactNode;\n description?: ReactNode;\n icon?: ReactNode;\n disabled?: boolean;\n className?: string;\n stepProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n};\n\nexport type StepsProps = Omit<HTMLAttributes<HTMLOListElement>, \"onChange\"> & {\n items: StepItem[];\n currentStep?: number;\n variant?: StepsVariant | LegacyStepsVariant;\n type?: StepsType;\n size?: StepsSize;\n clickable?: boolean;\n showNumbers?: boolean;\n onStepChange?: (step: number) => void;\n stepClassName?: string;\n};\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.min(Math.max(value, min), max);\n}\n\nconst stepTypes = new Set<StepsType>([\"line\", \"arrow\"]);\n\nfunction isStepsType(value: StepsProps[\"variant\"]): value is StepsType {\n return typeof value === \"string\" && stepTypes.has(value as StepsType);\n}\n\nexport function Steps({\n items,\n currentStep = 1,\n variant = \"blue3\",\n type,\n size = \"md\",\n clickable = false,\n showNumbers = true,\n onStepChange,\n stepClassName,\n className,\n ...props\n}: StepsProps) {\n const safeStep = items.length > 0 ? clamp(currentStep, 1, items.length) : 0;\n const resolvedType = type ?? (isStepsType(variant) ? variant : \"line\");\n const colorVariant = isStepsType(variant) ? \"blue3\" : variant;\n const isArrow = resolvedType === \"arrow\";\n\n const cls = [\n styles.steps,\n styles[colorVariant],\n isArrow ? styles.arrow : styles.line,\n styles[size],\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <ol {...props} className={cls}>\n {items.map((item, index) => {\n const step = index + 1;\n const completed = step < safeStep;\n const active = step === safeStep;\n const pending = step > safeStep;\n const interactive = clickable && !item.disabled;\n const status = active ? \"current\" : completed ? \"complete\" : \"pending\";\n const showMarker = !isArrow || item.icon || showNumbers;\n const content = (\n <>\n {showMarker && (\n <span className={styles.marker}>\n {item.icon ?? (showNumbers ? step : null)}\n </span>\n )}\n <span className={styles.text}>\n <span className={styles.label}>{item.label}</span>\n {item.description && <span className={styles.description}>{item.description}</span>}\n </span>\n </>\n );\n\n return (\n <li\n key={step}\n className={[\n styles.item,\n completed ? styles.complete : null,\n active ? styles.current : null,\n pending ? styles.pending : null,\n item.disabled ? styles.disabled : null,\n stepClassName,\n item.className\n ]\n .filter(Boolean)\n .join(\" \")}\n data-status={status}\n aria-current={active ? \"step\" : undefined}\n >\n {interactive ? (\n <button\n {...item.stepProps}\n type=\"button\"\n className={[styles.stepButton, item.stepProps?.className]\n .filter(Boolean)\n .join(\" \")}\n disabled={item.disabled}\n onClick={(event) => {\n item.stepProps?.onClick?.(event);\n if (!event.defaultPrevented) onStepChange?.(step);\n }}\n >\n {content}\n </button>\n ) : (\n <span className={styles.stepButton}>{content}</span>\n )}\n </li>\n );\n })}\n </ol>\n );\n}\n\nSteps.displayName = \"Steps\";\n","import { useId, useRef } from \"react\";\nimport type { ButtonHTMLAttributes, HTMLAttributes, KeyboardEvent, ReactNode } from \"react\";\nimport { useControlledState } from \"../hooks\";\nimport styles from \"./Tabs.module.css\";\n\nexport type TabsVariant = \"raised\" | \"underline\" | \"rounded\";\n\nconst XIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"11\" height=\"11\">\n <path d=\"M18 6 6 18M6 6l12 12\"/>\n </svg>\n);\n\nexport type TabItem = {\n value: string;\n label: ReactNode;\n content?: ReactNode;\n disabled?: boolean;\n closable?: boolean;\n closeLabel?: string;\n onClose?: (value: string) => void;\n className?: string;\n tabProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n closeButtonProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n panelProps?: HTMLAttributes<HTMLDivElement>;\n};\n\nexport type TabsProps = HTMLAttributes<HTMLDivElement> & {\n items: TabItem[];\n variant?: TabsVariant;\n ariaLabel?: string;\n disabled?: boolean;\n closable?: boolean;\n closeLabel?: string;\n onTabClose?: (value: string) => void;\n tabClassName?: string;\n tabItemClassName?: string;\n transparent?: boolean;\n inactiveTransparent?: boolean;\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n};\n\nfunction getDefaultValue(items: TabItem[]) {\n return items.find((item) => !item.disabled)?.value ?? items[0]?.value ?? \"\";\n}\n\nexport function Tabs({\n items,\n variant = \"raised\",\n ariaLabel = \"Tabs\",\n disabled = false,\n closable = false,\n closeLabel = \"Close tab\",\n onTabClose,\n tabClassName,\n tabItemClassName,\n transparent = false,\n inactiveTransparent = false,\n value,\n defaultValue,\n onValueChange,\n className,\n ...props\n}: TabsProps) {\n const id = useId();\n const tabRefs = useRef<Array<HTMLButtonElement | null>>([]);\n const [selectedValue, setSelectedValue] = useControlledState(\n value,\n defaultValue ?? getDefaultValue(items),\n onValueChange\n );\n\n const selectedItem = items.find((item) => item.value === selectedValue);\n const cls = [\n styles.tabs,\n styles[variant],\n transparent ? styles.transparent : null,\n inactiveTransparent ? styles.inactiveTransparent : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const focusTab = (startIndex: number, direction: 1 | -1) => {\n if (items.length === 0) return;\n\n for (let step = 1; step <= items.length; step += 1) {\n const nextIndex = (startIndex + step * direction + items.length) % items.length;\n if (!items[nextIndex]?.disabled && !disabled) {\n tabRefs.current[nextIndex]?.focus();\n setSelectedValue(items[nextIndex].value);\n return;\n }\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>, index: number) => {\n if (event.key === \"ArrowRight\") {\n event.preventDefault();\n focusTab(index, 1);\n return;\n }\n\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n focusTab(index, -1);\n return;\n }\n\n if (event.key === \"Home\") {\n event.preventDefault();\n const firstIndex = disabled ? -1 : items.findIndex((item) => !item.disabled);\n if (firstIndex >= 0) {\n tabRefs.current[firstIndex]?.focus();\n setSelectedValue(items[firstIndex].value);\n }\n return;\n }\n\n if (event.key === \"End\") {\n event.preventDefault();\n const lastIndex = disabled ? -1 : items.map((item) => !item.disabled).lastIndexOf(true);\n if (lastIndex >= 0) {\n tabRefs.current[lastIndex]?.focus();\n setSelectedValue(items[lastIndex].value);\n }\n }\n };\n\n return (\n <div {...props} className={cls}>\n <div className={styles.list} role=\"tablist\" aria-label={ariaLabel}>\n {items.map((item, index) => {\n const selected = item.value === selectedValue;\n const isDisabled = disabled || item.disabled;\n const isClosable = !isDisabled && (item.closable ?? closable);\n const tabId = `${id}-${item.value}-tab`;\n const panelId = `${id}-${item.value}-panel`;\n\n return (\n <span\n key={item.value}\n role=\"presentation\"\n className={[\n styles.tabItem,\n isClosable ? styles.closable : null,\n isDisabled ? styles.disabled : null,\n tabItemClassName,\n item.className\n ]\n .filter(Boolean)\n .join(\" \")}\n data-selected={selected ? \"true\" : undefined}\n >\n <button\n {...item.tabProps}\n ref={(node) => {\n tabRefs.current[index] = node;\n }}\n type=\"button\"\n role=\"tab\"\n id={tabId}\n aria-selected={selected}\n aria-controls={panelId}\n tabIndex={selected ? 0 : -1}\n disabled={isDisabled}\n className={[styles.tab, tabClassName, item.tabProps?.className]\n .filter(Boolean)\n .join(\" \")}\n onClick={(event) => {\n item.tabProps?.onClick?.(event);\n if (!event.defaultPrevented) setSelectedValue(item.value);\n }}\n onKeyDown={(event) => {\n item.tabProps?.onKeyDown?.(event);\n if (!event.defaultPrevented) handleKeyDown(event, index);\n }}\n >\n {item.label}\n </button>\n\n {isClosable && (\n <button\n {...item.closeButtonProps}\n type=\"button\"\n className={[styles.closeBtn, item.closeButtonProps?.className]\n .filter(Boolean)\n .join(\" \")}\n aria-label={item.closeLabel ?? closeLabel}\n disabled={isDisabled}\n onClick={(event) => {\n item.closeButtonProps?.onClick?.(event);\n if (event.defaultPrevented) return;\n item.onClose?.(item.value);\n onTabClose?.(item.value);\n }}\n >\n {item.closeButtonProps?.children ?? <XIcon />}\n </button>\n )}\n </span>\n );\n })}\n </div>\n\n {selectedItem?.content !== undefined && (\n <div\n {...selectedItem.panelProps}\n className={[styles.panel, selectedItem.panelProps?.className]\n .filter(Boolean)\n .join(\" \")}\n role=\"tabpanel\"\n id={`${id}-${selectedItem.value}-panel`}\n aria-labelledby={`${id}-${selectedItem.value}-tab`}\n >\n {selectedItem.content}\n </div>\n )}\n </div>\n );\n}\n\nTabs.displayName = \"Tabs\";\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n type ChangeEvent,\n type ForwardedRef,\n type MutableRefObject,\n type ReactNode\n} from \"react\";\nimport type {\n ButtonHTMLAttributes,\n HTMLAttributes,\n TextareaHTMLAttributes\n} from \"react\";\nimport { useControlledState } from \"../hooks\";\nimport styles from \"./Textarea.module.css\";\n\nconst XIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"12\" height=\"12\">\n <path d=\"M18 6 6 18M6 6l12 12\"/>\n </svg>\n);\n\nconst DEFAULT_MIN_ROWS = 3;\nconst DEFAULT_MAX_ROWS = 8;\n\nconst useSafeLayoutEffect =\n typeof window === \"undefined\" ? useEffect : useLayoutEffect;\n\nconst getNormalizedRows = (rows: number | undefined, fallback: number) => {\n if (rows === undefined || Number.isNaN(rows)) return fallback;\n return Math.max(1, Math.floor(rows));\n};\n\nconst setForwardedRef = (\n ref: ForwardedRef<HTMLTextAreaElement>,\n node: HTMLTextAreaElement | null\n) => {\n if (typeof ref === \"function\") {\n ref(node);\n return;\n }\n\n if (ref) {\n (ref as MutableRefObject<HTMLTextAreaElement | null>).current = node;\n }\n};\n\nexport type TextareaProps = Omit<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n \"defaultValue\" | \"onChange\" | \"value\"\n> & {\n label?: string;\n helpText?: ReactNode;\n maxLength?: number;\n clearable?: boolean;\n minRows?: number;\n maxRows?: number;\n unlimitedRows?: boolean;\n resize?: \"horizontal\" | \"vertical\" | \"both\";\n isInvalid?: boolean;\n clearButtonProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n value?: string;\n defaultValue?: string;\n onChange?: TextareaHTMLAttributes<HTMLTextAreaElement>[\"onChange\"];\n onValueChange?: (value: string) => void;\n fieldProps?: HTMLAttributes<HTMLDivElement>;\n wrapperProps?: HTMLAttributes<HTMLDivElement>;\n textareaProps?: TextareaHTMLAttributes<HTMLTextAreaElement>;\n};\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n label,\n helpText,\n maxLength,\n clearable = false,\n minRows = DEFAULT_MIN_ROWS,\n maxRows = DEFAULT_MAX_ROWS,\n unlimitedRows = false,\n resize = \"both\",\n isInvalid = false,\n clearButtonProps,\n disabled,\n value,\n defaultValue = \"\",\n onChange,\n onValueChange,\n fieldProps,\n wrapperProps,\n textareaProps,\n className,\n style,\n ...props\n },\n ref\n ) => {\n const fieldRef = useRef<HTMLDivElement | null>(null);\n const wrapperRef = useRef<HTMLDivElement | null>(null);\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\n const [currentValue, setCurrentValue] = useControlledState(\n value,\n defaultValue,\n (next) => onValueChange?.(next)\n );\n const resolvedMinRows = getNormalizedRows(minRows, DEFAULT_MIN_ROWS);\n const resolvedMaxRows = unlimitedRows\n ? undefined\n : Math.max(resolvedMinRows, getNormalizedRows(maxRows, DEFAULT_MAX_ROWS));\n\n const setTextareaRef = useCallback(\n (node: HTMLTextAreaElement | null) => {\n textareaRef.current = node;\n setForwardedRef(ref, node);\n },\n [ref]\n );\n\n const syncTextareaHeight = useCallback(() => {\n const node = textareaRef.current;\n\n if (!node || typeof window === \"undefined\") return;\n\n const computedStyle = window.getComputedStyle(node);\n const fontSize = Number.parseFloat(computedStyle.fontSize) || 13;\n const lineHeight = Number.parseFloat(computedStyle.lineHeight) || fontSize * 1.55;\n const paddingTop = Number.parseFloat(computedStyle.paddingTop) || 0;\n const paddingBottom = Number.parseFloat(computedStyle.paddingBottom) || 0;\n const borderTop = Number.parseFloat(computedStyle.borderTopWidth) || 0;\n const borderBottom = Number.parseFloat(computedStyle.borderBottomWidth) || 0;\n const verticalChrome = paddingTop + paddingBottom + borderTop + borderBottom;\n const minHeight = lineHeight * resolvedMinRows + verticalChrome;\n const maxHeight = resolvedMaxRows\n ? lineHeight * resolvedMaxRows + verticalChrome\n : undefined;\n\n node.style.height = \"auto\";\n node.style.minHeight = `${minHeight}px`;\n node.style.maxHeight = maxHeight ? `${maxHeight}px` : \"none\";\n\n const nextHeight = Math.max(\n minHeight,\n Math.min(node.scrollHeight, maxHeight ?? Number.POSITIVE_INFINITY)\n );\n\n node.style.height = `${nextHeight}px`;\n node.style.overflowY = maxHeight && node.scrollHeight > maxHeight ? \"auto\" : \"hidden\";\n }, [resolvedMaxRows, resolvedMinRows]);\n\n useSafeLayoutEffect(() => {\n syncTextareaHeight();\n }, [currentValue, syncTextareaHeight]);\n\n useSafeLayoutEffect(() => {\n const fieldNode = fieldRef.current;\n const wrapperNode = wrapperRef.current;\n const textareaNode = textareaRef.current;\n const tracksHorizontalResize = resize === \"horizontal\" || resize === \"both\";\n\n if (!wrapperNode || !textareaNode) return;\n\n if (!tracksHorizontalResize) {\n if (fieldNode) fieldNode.style.width = \"\";\n wrapperNode.style.width = \"\";\n return;\n }\n\n const syncWrapperWidth = () => {\n const textareaWidth = textareaNode.offsetWidth;\n\n if (textareaWidth > 0 && Math.abs(textareaWidth - wrapperNode.offsetWidth) > 1) {\n wrapperNode.style.width = `${textareaWidth}px`;\n }\n\n if (fieldNode && textareaWidth > 0 && Math.abs(textareaWidth - fieldNode.offsetWidth) > 1) {\n fieldNode.style.width = `${textareaWidth}px`;\n }\n };\n\n if (typeof ResizeObserver === \"undefined\") {\n syncWrapperWidth();\n return;\n }\n\n const resizeObserver = new ResizeObserver(syncWrapperWidth);\n resizeObserver.observe(textareaNode);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [resize]);\n\n const handleChange = (e: ChangeEvent<HTMLTextAreaElement>) => {\n setCurrentValue(e.target.value);\n onChange?.(e);\n textareaProps?.onChange?.(e);\n };\n\n const handleClear = () => {\n setCurrentValue(\"\");\n };\n\n const isOver = maxLength !== undefined && currentValue.length > maxLength;\n\n const textareaClass = [\n styles.textarea,\n \"sb\",\n clearable ? styles.hasClear : null,\n isInvalid ? styles.invalid : null,\n className,\n textareaProps?.className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const wrapperClass = [styles.wrapper, wrapperProps?.className]\n .filter(Boolean)\n .join(\" \");\n const fieldClass = [styles.field, fieldProps?.className]\n .filter(Boolean)\n .join(\" \");\n const textareaStyle = useMemo(\n () => ({\n ...style,\n ...textareaProps?.style,\n resize\n }),\n [resize, style, textareaProps?.style]\n );\n const isDisabled = disabled || textareaProps?.disabled;\n\n const inner = (\n <div {...wrapperProps} ref={wrapperRef} className={wrapperClass}>\n <textarea\n {...props}\n {...textareaProps}\n ref={setTextareaRef}\n disabled={isDisabled}\n maxLength={maxLength}\n rows={resolvedMinRows}\n value={currentValue}\n onChange={handleChange}\n className={textareaClass}\n style={textareaStyle}\n />\n {clearable && (\n <button\n type=\"button\"\n className={styles.clearBtn}\n disabled={isDisabled || currentValue.length === 0}\n aria-label=\"Clear\"\n onClick={handleClear}\n {...clearButtonProps}\n >\n {clearButtonProps?.children ?? <XIcon />}\n </button>\n )}\n </div>\n );\n\n if (!label && !helpText && maxLength === undefined) return inner;\n\n return (\n <div {...fieldProps} ref={fieldRef} className={fieldClass}>\n {label && <label className={styles.label}>{label}</label>}\n {inner}\n {(helpText || maxLength !== undefined) && (\n <div className={styles.footer}>\n {helpText && <span className={styles.helpText}>{helpText}</span>}\n {maxLength !== undefined && (\n <span className={[styles.charCount, isOver ? styles.charCountOver : null].filter(Boolean).join(\" \")}>\n {currentValue.length} / {maxLength}\n </span>\n )}\n </div>\n )}\n </div>\n );\n }\n);\n\nTextarea.displayName = \"Textarea\";\n","import {\n createContext,\n useCallback,\n useContext,\n useState\n} from \"react\";\nimport type { CSSProperties, HTMLAttributes, ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Spinner } from \"../Spinner\";\nimport styles from \"./Toast.module.css\";\n\nconst CheckIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"16\" height=\"16\">\n <path d=\"M20 6 9 17l-5-5\"/>\n </svg>\n);\n\nconst XIcon = ({ size = 11 }: { size?: number }) => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width={size} height={size}>\n <path d=\"M18 6 6 18M6 6l12 12\"/>\n </svg>\n);\n\nconst AlertIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"16\" height=\"16\">\n <path d=\"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"/>\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"/>\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"/>\n </svg>\n);\n\nconst InfoIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"16\" height=\"16\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"/>\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"/>\n </svg>\n);\n\nconst LEAD_ICONS: Record<ToastVariant, ReactNode> = {\n ok: <CheckIcon />,\n error: <XIcon size={18} />,\n warning: <AlertIcon />,\n info: <InfoIcon />,\n loading: <Spinner size=\"sm\" muted />,\n neutral: null\n};\n\nconst hasRenderableContent = (node: ReactNode): boolean => {\n if (node === undefined || node === null || typeof node === \"boolean\") return false;\n if (typeof node === \"string\") return node.trim().length > 0;\n if (Array.isArray(node)) return node.some(hasRenderableContent);\n return true;\n};\n\nexport type ToastVariant = \"ok\" | \"error\" | \"warning\" | \"info\" | \"loading\" | \"neutral\";\nexport type ToastPosition =\n | \"top-left\"\n | \"top-center\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-center\"\n | \"bottom-right\";\n\nexport type ToastItem = {\n id: string;\n variant: ToastVariant;\n title: ReactNode;\n message?: ReactNode;\n duration?: number;\n overlay?: boolean;\n shadow?: boolean;\n};\n\nexport type ToastProps = Omit<HTMLAttributes<HTMLDivElement>, \"title\"> & {\n variant?: ToastVariant;\n title: ReactNode;\n message?: ReactNode;\n overlay?: boolean;\n shadow?: boolean;\n onDismiss?: () => void;\n};\n\nexport function Toast({\n variant = \"ok\",\n title,\n message,\n overlay = false,\n shadow = true,\n onDismiss,\n className,\n ...props\n}: ToastProps) {\n const isLoading = variant === \"loading\";\n const hasMessage = hasRenderableContent(message);\n const cls = [\n styles.toast,\n !hasMessage ? styles.noMessage : null,\n shadow ? styles.shadow : null,\n styles[variant],\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const toast = (\n <div {...props} className={cls} role=\"alert\">\n {LEAD_ICONS[variant] ? <span className={styles.lead}>{LEAD_ICONS[variant]}</span> : null}\n <div className={styles.body}>\n <div className={styles.title}>{title}</div>\n {hasMessage ? <div className={styles.message}>{message}</div> : null}\n </div>\n {onDismiss && !isLoading && (\n <button\n type=\"button\"\n className={styles.closeBtn}\n aria-label=\"Dismiss\"\n onClick={onDismiss}\n >\n <XIcon />\n </button>\n )}\n </div>\n );\n\n if (!overlay || !isLoading) return toast;\n\n return (\n <>\n <div className={styles.overlay} aria-hidden=\"true\" />\n {toast}\n </>\n );\n}\n\nToast.displayName = \"Toast\";\n\n/* ============================================================\n ToastProvider + useToast\n ============================================================ */\n\ntype ToastContextValue = {\n toast: (options: Omit<ToastItem, \"id\">) => string;\n dismiss: (id: string) => void;\n};\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\nexport type ToastProviderProps = {\n maxVisible?: number;\n position?: ToastPosition;\n offset?: number;\n children: ReactNode;\n};\n\nexport function ToastProvider({ maxVisible = 3, position = \"bottom-right\", offset = 24, children }: ToastProviderProps) {\n const [items, setItems] = useState<ToastItem[]>([]);\n\n const dismiss = useCallback((id: string) => {\n setItems((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n const toast = useCallback(\n (options: Omit<ToastItem, \"id\">) => {\n const id = Math.random().toString(36).slice(2);\n const duration = options.duration ?? (options.variant === \"loading\" ? 0 : 4000);\n const visibleLimit = maxVisible === undefined || !Number.isFinite(maxVisible) ? undefined : Math.max(0, Math.floor(maxVisible));\n\n setItems((prev) => {\n const next = [...prev, { ...options, id }];\n if (visibleLimit === undefined) return next;\n if (visibleLimit === 0) return [];\n return next.slice(-visibleLimit);\n });\n\n if (duration > 0) {\n setTimeout(() => dismiss(id), duration);\n }\n\n return id;\n },\n [dismiss, maxVisible]\n );\n\n const hasOverlay = items.some((item) => item.variant === \"loading\" && item.overlay);\n\n return (\n <ToastContext.Provider value={{ toast, dismiss }}>\n {children}\n {typeof document !== \"undefined\" &&\n createPortal(\n <>\n {hasOverlay && <div className={styles.overlay} aria-hidden=\"true\" />}\n <div\n className={[styles.stack, styles[`stack-${position}`]].filter(Boolean).join(\" \")}\n style={{ \"--toast-offset\": `${offset}px` } as CSSProperties}\n >\n {items.map((item) => (\n <Toast\n key={item.id}\n variant={item.variant}\n title={item.title}\n message={item.message}\n shadow={item.shadow}\n onDismiss={() => dismiss(item.id)}\n />\n ))}\n </div>\n </>,\n document.body\n )}\n </ToastContext.Provider>\n );\n}\n\nexport function useToast() {\n const ctx = useContext(ToastContext);\n if (!ctx) {\n throw new Error(\"useToast must be used within a ToastProvider\");\n }\n return ctx;\n}\n","import { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport type { CSSProperties, FocusEvent, HTMLAttributes, MouseEvent, ReactNode } from \"react\";\nimport styles from \"./Tooltip.module.css\";\n\nexport type TooltipSide = \"top\" | \"bottom\" | \"left\" | \"right\";\nconst DEFAULT_TOOLTIP_DELAY = 800;\nconst TOOLTIP_GAP = 8;\nconst DEFAULT_VIEWPORT_PADDING = 8;\n\nexport type TooltipProps = {\n content: ReactNode;\n side?: TooltipSide;\n delay?: number;\n dynamic?: boolean;\n cursor?: boolean;\n viewportPadding?: number;\n children: ReactNode;\n wrapperProps?: HTMLAttributes<HTMLSpanElement>;\n disabled?: boolean;\n};\n\nconst oppositeSide: Record<TooltipSide, TooltipSide> = {\n top: \"bottom\",\n bottom: \"top\",\n left: \"right\",\n right: \"left\"\n};\n\nexport function Tooltip({\n content,\n side = \"top\",\n delay = DEFAULT_TOOLTIP_DELAY,\n dynamic = true,\n cursor = true,\n viewportPadding = DEFAULT_VIEWPORT_PADDING,\n children,\n wrapperProps,\n disabled = false\n}: TooltipProps) {\n const [visible, setVisible] = useState(false);\n const [renderedSide, setRenderedSide] = useState<TooltipSide>(side);\n const [tooltipStyle, setTooltipStyle] = useState<CSSProperties | undefined>();\n const cursorPositionRef = useRef({ x: 0, y: 0 });\n const wrapperRef = useRef<HTMLSpanElement>(null);\n const tooltipRef = useRef<HTMLSpanElement>(null);\n const showTimerRef = useRef<number | null>(null);\n\n const clearShowTimer = () => {\n if (showTimerRef.current !== null) {\n window.clearTimeout(showTimerRef.current);\n showTimerRef.current = null;\n }\n };\n\n useEffect(() => {\n return clearShowTimer;\n }, []);\n\n useEffect(() => {\n if (!visible) {\n setRenderedSide(side);\n setTooltipStyle(undefined);\n }\n }, [side, visible]);\n\n useLayoutEffect(() => {\n if (visible && cursor) {\n const tooltip = tooltipRef.current;\n if (!tooltip) return;\n\n const tooltipWidth = tooltip.offsetWidth;\n const tooltipHeight = tooltip.offsetHeight;\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const preferredLeft = cursorPositionRef.current.x + TOOLTIP_GAP;\n const preferredTop = cursorPositionRef.current.y + TOOLTIP_GAP;\n const maxLeft = viewportWidth - tooltipWidth - viewportPadding;\n const maxTop = viewportHeight - tooltipHeight - viewportPadding;\n const left = Math.max(viewportPadding, Math.min(preferredLeft, maxLeft));\n const top = Math.max(viewportPadding, Math.min(preferredTop, maxTop));\n\n setTooltipStyle({\n \"--tooltip-cursor-x\": `${left}px`,\n \"--tooltip-cursor-y\": `${top}px`\n } as CSSProperties);\n return;\n }\n\n if (!visible || !dynamic) {\n setRenderedSide(side);\n setTooltipStyle(undefined);\n return;\n }\n\n const wrapper = wrapperRef.current;\n const tooltip = tooltipRef.current;\n if (!wrapper || !tooltip) return;\n\n const wrapperRect = wrapper.getBoundingClientRect();\n const tooltipWidth = tooltip.offsetWidth;\n const tooltipHeight = tooltip.offsetHeight;\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n const available = {\n top: wrapperRect.top - viewportPadding,\n bottom: viewportHeight - wrapperRect.bottom - viewportPadding,\n left: wrapperRect.left - viewportPadding,\n right: viewportWidth - wrapperRect.right - viewportPadding\n };\n\n const required = {\n top: tooltipHeight + TOOLTIP_GAP,\n bottom: tooltipHeight + TOOLTIP_GAP,\n left: tooltipWidth + TOOLTIP_GAP,\n right: tooltipWidth + TOOLTIP_GAP\n };\n\n const fits = (nextSide: TooltipSide) => available[nextSide] >= required[nextSide];\n const fallbackSide = oppositeSide[side];\n let nextSide = side;\n\n if (!fits(side)) {\n nextSide = fits(fallbackSide)\n ? fallbackSide\n : available[fallbackSide] > available[side]\n ? fallbackSide\n : side;\n }\n\n let shiftX = 0;\n let shiftY = 0;\n\n if (nextSide === \"top\" || nextSide === \"bottom\") {\n const centeredLeft = wrapperRect.left + wrapperRect.width / 2 - tooltipWidth / 2;\n const leftOverflow = viewportPadding - centeredLeft;\n const rightOverflow = centeredLeft + tooltipWidth - (viewportWidth - viewportPadding);\n\n if (leftOverflow > 0) shiftX = leftOverflow;\n if (rightOverflow > 0) shiftX = -rightOverflow;\n } else {\n const centeredTop = wrapperRect.top + wrapperRect.height / 2 - tooltipHeight / 2;\n const topOverflow = viewportPadding - centeredTop;\n const bottomOverflow = centeredTop + tooltipHeight - (viewportHeight - viewportPadding);\n\n if (topOverflow > 0) shiftY = topOverflow;\n if (bottomOverflow > 0) shiftY = -bottomOverflow;\n }\n\n setRenderedSide(nextSide);\n setTooltipStyle({\n \"--tooltip-shift-x\": `${shiftX}px`,\n \"--tooltip-shift-y\": `${shiftY}px`\n } as CSSProperties);\n }, [cursor, dynamic, side, viewportPadding, visible, content]);\n\n if (disabled) return <>{children}</>;\n\n const showTooltip = () => {\n clearShowTimer();\n\n if (delay <= 0) {\n setVisible(true);\n return;\n }\n\n showTimerRef.current = window.setTimeout(() => {\n setVisible(true);\n showTimerRef.current = null;\n }, delay);\n };\n\n const hideTooltip = () => {\n clearShowTimer();\n setVisible(false);\n };\n\n const handleMouseEnter = (event: MouseEvent<HTMLSpanElement>) => {\n wrapperProps?.onMouseEnter?.(event);\n cursorPositionRef.current = { x: event.clientX, y: event.clientY };\n showTooltip();\n };\n\n const handleMouseMove = (event: MouseEvent<HTMLSpanElement>) => {\n wrapperProps?.onMouseMove?.(event);\n if (!cursor) return;\n\n cursorPositionRef.current = { x: event.clientX, y: event.clientY };\n setVisible(false);\n showTooltip();\n };\n\n const handleMouseLeave = (event: MouseEvent<HTMLSpanElement>) => {\n wrapperProps?.onMouseLeave?.(event);\n hideTooltip();\n };\n\n const handleFocus = (event: FocusEvent<HTMLSpanElement>) => {\n wrapperProps?.onFocus?.(event);\n const rect = event.currentTarget.getBoundingClientRect();\n cursorPositionRef.current = { x: rect.right, y: rect.bottom };\n showTooltip();\n };\n\n const handleBlur = (event: FocusEvent<HTMLSpanElement>) => {\n wrapperProps?.onBlur?.(event);\n hideTooltip();\n };\n\n const tooltipClass = [styles.tooltip, cursor ? styles.cursor : styles[renderedSide]]\n .filter(Boolean)\n .join(\" \");\n\n const wrapperClass = [styles.wrapper, wrapperProps?.className]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <span\n {...wrapperProps}\n ref={wrapperRef}\n className={wrapperClass}\n onMouseEnter={handleMouseEnter}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n onFocus={handleFocus}\n onBlur={handleBlur}\n >\n {children}\n {visible && (\n <span ref={tooltipRef} className={tooltipClass} role=\"tooltip\" style={tooltipStyle}>\n {content}\n </span>\n )}\n </span>\n );\n}\n\nTooltip.displayName = \"Tooltip\";\n"],"names":["useControlledState","controlledValue","defaultValue","onChange","internalValue","setInternalValue","useState","isControlled","value","setValue","useCallback","nextValue","ChevronIcon","jsx","PlusIcon","MinusIcon","getDefaultValue","multiple","isItemOpen","currentValue","itemValue","getNextValue","open","values","formatSpacing","spacing","Accordion","items","hideIndicator","indicator","border","highlight","radius","hoverHighlight","disabled","itemClassName","headerClassName","headerStyle","bodyClassName","bodyStyle","triggerClassName","contentClassName","onValueChange","className","style","props","id","useId","openValue","setOpenValue","cls","styles","rootStyle","item","itemDisabled","triggerId","contentId","jsxs","_a","_b","event","_c","_d","XIcon","Badge","variant","icon","pill","outline","coloredText","label","labelDirection","dismissable","onDismiss","children","ChevronRightIcon","Breadcrumb","separator","colorCurrent","index","isLast","isCurrent","isDisabled","BreadCrumb","Scrollable","direction","track","arrows","autoHide","expand","scrollbarSize","height","classes","overflowStyle","sizeVar","Button","forwardRef","type","size","rounded","transparent","ref","hasContent","isIconOnly","PAD_MAP","Card","padding","tilt","onClose","closeBtnProps","CardHeader","title","subtitle","CardStat","unit","delta","deltaDirection","deltaClass","CalendarIcon","ClockIcon","placeholderByMode","monthNames","dayNames","hourOptions","_","pad","minuteOptions","getModeIcon","mode","formatDateValue","date","formatMonthValue","parseDate","datePart","year","month","day","getTimePart","time","parseTime","timeValue","hour","minute","getCalendarDays","viewDate","firstDay","start","isValueDisabled","min","max","minValue","maxValue","DateTimeInput","helpText","clearable","clearLabel","showIcon","openPickerOnClick","isInvalid","clearButtonProps","fieldProps","wrapperProps","inputProps","placeholder","step","inputRef","useRef","wrapperRef","pickerOpen","setPickerOpen","setViewDate","setCurrentValue","useImperativeHandle","hasValue","inputMin","inputMax","inputStep","selectedHour","selectedMinute","pickerMin","pickerMax","useEffect","selectedDate","handlePointerDown","handleKeyDown","handleChange","handleClear","handleWrapperClick","updateDateValue","dateValue","updateMonthValue","updateTimeValue","updateTimePart","part","currentHour","currentMinute","nextTime","moveMonth","offset","currentDate","nextDate","moveYear","handleToday","today","renderTimeColumn","labelText","options","option","selected","timeDisabled","inputClass","wrapperClass","inputEl","Fragment","monthName","monthDate","monthValue","monthDisabled","dayName","outside","dateDisabled","MASK_SLOTS","DEFAULT_ALLOWED_PATTERN","getRawMaskValue","allowedPattern","char","applyMask","mask","rawValue","rawIndex","maskedValue","maskChar","EyeIcon","EyeOffIcon","ChevronUpIcon","ChevronDownIcon","digitsOnly","toFiniteNumber","parsed","Input","iconPosition","showNumberControls","showPasswordToggle","maskAllowedPattern","maskPlaceholder","selectOnFocus","textAlign","resolvedType","isNumberType","isPasswordType","isPasswordVisible","setIsPasswordVisible","formatValue","filteredValue","formattedValue","numberMin","numberMax","parsedNumberStep","numberStep","displayValue","numericValue","canDecrease","canIncrease","handleNumberStep","nextRawValue","iconRight","iconLeft","hasPasswordToggle","hasNumberControls","trailingItemWidths","trailingPadding","sum","width","handleFocus","e","inputStyle","renderedType","clearButtonLabel","inner","visible","mergeRel","rel","parts","Link","underlined","opacity","noreferrer","noopener","href","target","tabIndex","onClick","externalNoopener","linkStyle","handleClick","DEFAULT_DRAG_GROUP","DRAG_START_DISTANCE","DRAG_GHOST_OFFSET","listRegistry","dragListeners","activeListDrag","emitListDragChange","listener","setActiveListDrag","next","updateActiveListDrag","updater","useActiveListDrag","snapshot","setSnapshot","getOutsideDropTarget","sourceEntry","clientY","fallbackListId","sourceRect","directionalListId","getListEdgeDropTarget","targetRoot","targetListId","drag","itemElements","element","rect","lastItemValue","getOverlappedListRoot","clientX","ghostRect","bestEntry","bestOverlap","entry","root","overlapWidth","overlapHeight","overlap","List","showTitle","collapsible","collapsed","defaultCollapsed","onCollapsedChange","emptyLabel","selectable","selectedValue","defaultSelectedValue","onSelectedValueChange","fullWidthBackgroup","titleHover","ariaLabel","headerProps","listProps","draggable","dragGroup","listId","isItemDraggable","onItemDrop","dragGhost","dropOutsideListId","dropOutsideBeforeListId","dropOutsideAfterListId","resolvedListId","activeDrag","rootRef","suppressItemClickRef","isCollapsed","setIsCollapsed","currentSelectedValue","setCurrentSelectedValue","selectedItem","hasTitle","canToggle","rootClass","headerClass","listClass","toggleCollapsed","canDragItem","updateTarget","distance","current","pointedRoot","pointedListId","pointedDragGroup","overlappedRoot","targetDragGroup","targetItemElement","position","listEdgeTarget","onPointerMove","onPointerUp","targetEntry","targetItem","handler","startItemDrag","renderItemContent","listDropTarget","showListDropIndicator","hideEmptyLabel","showDragGhost","itemIsDraggable","itemDropTarget","itemIsDragging","itemClass","content","clickable","createElement","CheckIcon","Checkbox","checked","defaultChecked","indeterminate","isChecked","Radio","RadioGroup","Switch","thinTrack","isOn","Menu","shadow","MenuGroup","labelProps","generatedId","labelId","MenuItem","kbd","active","danger","submenu","submenuMode","submenuTrigger","submenuOpen","setSubmenuOpen","hasSubmenu","opensOnHover","itemEl","Modal","footer","overlay","closeOnBackdrop","showCloseButton","backdropProps","modalProps","bodyProps","footerProps","closeButtonProps","onOpenChange","innerRef","dragRef","dragOffset","setDragOffset","isDragging","setIsDragging","handleKey","requestClose","handleBackdropClick","shouldSkipDrag","handleHeaderPointerDown","handleHeaderPointerMove","stopDragging","handleHeaderPointerUp","handleHeaderPointerCancel","backdropClass","modalClass","modalStyle","POPOVER_GAP","VIEWPORT_PADDING","Popover","openProp","defaultOpen","trigger","side","openOnHover","popProps","internalOpen","setInternalOpen","renderedSide","setRenderedSide","popStyle","setPopStyle","isOpen","popRef","setOpen","useLayoutEffect","updatePosition","wrapper","pop","wrapperRect","popWidth","popHeight","viewportWidth","viewportHeight","preferredVertical","alternateVertical","preferredAlign","alternateAlign","available","requiredHeight","vertical","getLeft","align","fitsHorizontally","left","preferredLeft","alternateLeft","preferredOverflow","alternateOverflow","leftOverflow","rightOverflow","shiftX","isTop","isEnd","popCls","mergedPopStyle","clamp","Progress","shape","valueLabel","showValue","safeMax","isIndeterminate","safeValue","percent","shouldShowValue","progressbarProps","circleClass","trackClass","PushButtonGroup","gap","background","groupRef","buttonWidth","setButtonWidth","group","updateButtonWidth","buttons","nextWidth","button","buttonStyle","paddingX","contentWidth","badge","badgeWidth","badgeOffset","badgeGap","contentWidthWithPadding","contentWidthWithBadge","observer","child","PushButton","on","badgePosition","SearchIcon","defaultFilterOptions","searchValue","norm","o","useSafeLayoutEffect","Select","filterOptions","isLoading","loadingLabel","onSearchChange","optionsAlign","optionsPosition","searchable","searchPlaceholder","showSelectedCount","showClearAll","showSelectedValues","closeOnSelect","selectProps","setSearchValue","portalNode","setPortalNode","popoverStyle","setPopoverStyle","popoverRef","setSelectedValue","selectedValues","useMemo","selectedOptions","filteredOptions","isOptionsTop","updatePopoverPosition","nextStyle","clickedTrigger","clickedPopover","updateSearch","resolvedCloseOnSelect","selectOption","v","clearValue","toggleAllValues","handleTriggerClick","handleTriggerKeyDown","triggerClass","showSelectedValuesInTrigger","showChips","showOptionCheckbox","showFooter","hasVisibleTriggerValue","maxChips","overflowCount","selectedLabels","fieldClass","optionsAlignClass","popover","createPortal","spinnerTypes","isSpinnerType","Spinner","muted","onColor","colorVariant","stepTypes","isStepsType","Steps","currentStep","showNumbers","onStepChange","stepClassName","safeStep","isArrow","completed","pending","interactive","status","showMarker","Tabs","closable","closeLabel","onTabClose","tabClassName","tabItemClassName","inactiveTransparent","tabRefs","focusTab","startIndex","nextIndex","firstIndex","lastIndex","isClosable","tabId","panelId","node","DEFAULT_MIN_ROWS","DEFAULT_MAX_ROWS","getNormalizedRows","rows","fallback","setForwardedRef","Textarea","maxLength","minRows","maxRows","unlimitedRows","resize","textareaProps","fieldRef","textareaRef","resolvedMinRows","resolvedMaxRows","setTextareaRef","syncTextareaHeight","computedStyle","fontSize","lineHeight","paddingTop","paddingBottom","borderTop","borderBottom","verticalChrome","minHeight","maxHeight","nextHeight","fieldNode","wrapperNode","textareaNode","tracksHorizontalResize","syncWrapperWidth","textareaWidth","resizeObserver","isOver","textareaClass","textareaStyle","AlertIcon","InfoIcon","LEAD_ICONS","hasRenderableContent","Toast","message","hasMessage","toast","ToastContext","createContext","ToastProvider","maxVisible","setItems","dismiss","prev","t","duration","visibleLimit","hasOverlay","useToast","ctx","useContext","DEFAULT_TOOLTIP_DELAY","TOOLTIP_GAP","DEFAULT_VIEWPORT_PADDING","oppositeSide","Tooltip","delay","dynamic","cursor","viewportPadding","setVisible","tooltipStyle","setTooltipStyle","cursorPositionRef","tooltipRef","showTimerRef","clearShowTimer","tooltip","tooltipWidth","tooltipHeight","preferredTop","maxLeft","maxTop","top","required","fits","nextSide","fallbackSide","shiftY","centeredLeft","centeredTop","topOverflow","bottomOverflow","showTooltip","hideTooltip","handleMouseEnter","handleMouseMove","handleMouseLeave","handleBlur","tooltipClass"],"mappings":"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"}
1
+ {"version":3,"file":"super-kit.js","sources":["../src/hooks/useControlledState.ts","../src/Accordion/Accordion.tsx","../src/Badge/Badge.tsx","../src/Breadcrumb/Breadcrumb.tsx","../src/Scrollable/Scrollable.tsx","../src/Button/Button.tsx","../src/Card/Card.tsx","../src/DateTimeInput/DateTimeInput.tsx","../src/FileInput/FileInput.tsx","../src/utils/mask.ts","../src/Input/Input.tsx","../src/Link/Link.tsx","../src/List/List.tsx","../src/Markers/Markers.tsx","../src/Menu/Menu.tsx","../src/Modal/Modal.tsx","../src/Popover/Popover.tsx","../src/Progress/Progress.tsx","../src/PushButton/PushButton.tsx","../src/Select/Select.tsx","../src/Spinner/Spinner.tsx","../src/Steps/Steps.tsx","../src/Tabs/Tabs.tsx","../src/Textarea/Textarea.tsx","../src/Toast/Toast.tsx","../src/Tooltip/Tooltip.tsx"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\nexport function useControlledState<T>(\n controlledValue: T | undefined,\n defaultValue: T,\n onChange?: (value: T) => void\n) {\n const [internalValue, setInternalValue] = useState(defaultValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : internalValue;\n\n const setValue = useCallback(\n (nextValue: T) => {\n if (!isControlled) {\n setInternalValue(nextValue);\n }\n\n onChange?.(nextValue);\n },\n [isControlled, onChange]\n );\n\n return [value, setValue, isControlled] as const;\n}\n","import { useId } from \"react\";\nimport type { ButtonHTMLAttributes, CSSProperties, HTMLAttributes, ReactNode } from \"react\";\nimport { useControlledState } from \"../hooks\";\nimport styles from \"./Accordion.module.css\";\n\nconst ChevronIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"14\" height=\"14\" aria-hidden=\"true\">\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n);\n\nconst PlusIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.9\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"13\" height=\"13\" aria-hidden=\"true\">\n <path d=\"M12 5v14M5 12h14\" />\n </svg>\n);\n\nconst MinusIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.9\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"13\" height=\"13\" aria-hidden=\"true\">\n <path d=\"M5 12h14\" />\n </svg>\n);\n\nexport type AccordionValue = string | string[];\nexport type AccordionIndicator = \"chevron\" | \"plus-minus\";\nexport type AccordionBorder = \"boxed\" | \"none\" | \"divider\";\nexport type AccordionHighlight = \"none\" | \"item\" | \"header\";\nexport type AccordionRadius = \"rounded\" | \"square\";\n\nexport type AccordionItem = {\n value: string;\n title: ReactNode;\n content: ReactNode;\n disabled?: boolean;\n icon?: ReactNode;\n className?: string;\n triggerProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n contentProps?: HTMLAttributes<HTMLDivElement>;\n};\n\nexport type AccordionProps = Omit<HTMLAttributes<HTMLDivElement>, \"defaultValue\" | \"onChange\"> & {\n items: AccordionItem[];\n multiple?: boolean;\n hideIndicator?: boolean;\n indicator?: AccordionIndicator;\n border?: AccordionBorder;\n highlight?: AccordionHighlight;\n radius?: AccordionRadius;\n hoverHighlight?: boolean;\n spacing?: number | string;\n disabled?: boolean;\n itemClassName?: string;\n headerClassName?: string;\n headerStyle?: CSSProperties;\n bodyClassName?: string;\n bodyStyle?: CSSProperties;\n triggerClassName?: string;\n contentClassName?: string;\n value?: AccordionValue;\n defaultValue?: AccordionValue;\n onValueChange?: (value: AccordionValue) => void;\n};\n\nfunction getDefaultValue(defaultValue: AccordionValue | undefined, multiple: boolean): AccordionValue {\n if (defaultValue !== undefined) return defaultValue;\n return multiple ? [] : \"\";\n}\n\nfunction isItemOpen(currentValue: AccordionValue, itemValue: string, multiple: boolean) {\n if (multiple) {\n return Array.isArray(currentValue)\n ? currentValue.includes(itemValue)\n : currentValue === itemValue;\n }\n\n return currentValue === itemValue;\n}\n\nfunction getNextValue(\n currentValue: AccordionValue,\n itemValue: string,\n multiple: boolean\n): AccordionValue {\n const open = isItemOpen(currentValue, itemValue, multiple);\n\n if (multiple) {\n const values = Array.isArray(currentValue) ? currentValue : currentValue ? [currentValue] : [];\n if (open) {\n return values.filter((value) => value !== itemValue);\n }\n\n return [...values, itemValue];\n }\n\n if (open) return \"\";\n return itemValue;\n}\n\nfunction formatSpacing(spacing: number | string | undefined) {\n if (typeof spacing === \"number\") return `${spacing}px`;\n return spacing;\n}\n\nexport function Accordion({\n items,\n multiple = true,\n hideIndicator = false,\n indicator = \"chevron\",\n border = \"boxed\",\n highlight = \"none\",\n radius = \"rounded\",\n hoverHighlight = true,\n spacing,\n disabled = false,\n itemClassName,\n headerClassName,\n headerStyle,\n bodyClassName,\n bodyStyle,\n triggerClassName,\n contentClassName,\n value,\n defaultValue,\n onValueChange,\n className,\n style,\n ...props\n}: AccordionProps) {\n const id = useId();\n const [openValue, setOpenValue] = useControlledState<AccordionValue>(\n value,\n getDefaultValue(defaultValue, multiple),\n onValueChange\n );\n\n const cls = [\n styles.accordion,\n styles[border],\n radius === \"square\" ? styles.square : null,\n highlight === \"item\" ? styles.highlightItem : null,\n highlight === \"header\" ? styles.highlightHeader : null,\n hoverHighlight ? null : styles.noHoverHighlight,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n const rootStyle = {\n ...style,\n ...(spacing !== undefined ? { \"--accordion-gap\": formatSpacing(spacing) } : null)\n } as CSSProperties;\n\n return (\n <div {...props} className={cls} style={rootStyle}>\n {items.map((item) => {\n const open = isItemOpen(openValue, item.value, multiple);\n const itemDisabled = disabled || item.disabled;\n const triggerId = `${id}-${item.value}-trigger`;\n const contentId = `${id}-${item.value}-content`;\n\n return (\n <section\n key={item.value}\n className={[styles.item, open ? styles.open : null, itemDisabled ? styles.disabled : null, itemClassName, item.className]\n .filter(Boolean)\n .join(\" \")}\n data-open={open ? \"true\" : undefined}\n >\n <button\n {...item.triggerProps}\n type=\"button\"\n id={triggerId}\n className={[styles.trigger, triggerClassName, headerClassName, item.triggerProps?.className]\n .filter(Boolean)\n .join(\" \")}\n style={{ ...headerStyle, ...item.triggerProps?.style }}\n aria-expanded={open}\n aria-controls={contentId}\n disabled={itemDisabled}\n onClick={(event) => {\n item.triggerProps?.onClick?.(event);\n if (!event.defaultPrevented) {\n setOpenValue(getNextValue(openValue, item.value, multiple));\n }\n }}\n >\n {item.icon && <span className={styles.icon}>{item.icon}</span>}\n <span className={styles.title}>{item.title}</span>\n {!hideIndicator && (\n <span className={[styles.indicator, indicator === \"plus-minus\" ? styles.plusMinus : styles.chevron]\n .filter(Boolean)\n .join(\" \")}\n >\n {indicator === \"plus-minus\" ? (open ? <MinusIcon /> : <PlusIcon />) : <ChevronIcon />}\n </span>\n )}\n </button>\n\n <div\n id={contentId}\n className={styles.contentWrap}\n role=\"region\"\n aria-labelledby={triggerId}\n aria-hidden={!open}\n >\n <div\n {...item.contentProps}\n className={[styles.content, contentClassName, bodyClassName, item.contentProps?.className]\n .filter(Boolean)\n .join(\" \")}\n style={{ ...bodyStyle, ...item.contentProps?.style }}\n >\n {item.content}\n </div>\n </div>\n </section>\n );\n })}\n </div>\n );\n}\n\nAccordion.displayName = \"Accordion\";\n","import type { HTMLAttributes, ReactNode } from \"react\";\nimport type { ColorVariant } from \"../types\";\nimport styles from \"./Badge.module.css\";\n\nconst XIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"10\" height=\"10\">\n <path d=\"M18 6 6 18M6 6l12 12\"/>\n </svg>\n);\n\nexport type BadgeVariant = ColorVariant;\n\nexport type BadgeProps = HTMLAttributes<HTMLSpanElement> & {\n variant?: BadgeVariant;\n icon?: ReactNode;\n pill?: boolean;\n outline?: boolean;\n coloredText?: boolean;\n indicator?: boolean;\n label?: boolean;\n labelDirection?: \"left\" | \"right\";\n dismissable?: boolean;\n onDismiss?: () => void;\n children?: ReactNode;\n};\n\nexport function Badge({\n variant = \"gray2\",\n icon,\n pill = false,\n outline = false,\n coloredText = false,\n indicator = false,\n label = false,\n labelDirection = \"right\",\n dismissable = false,\n onDismiss,\n children,\n className,\n ...props\n}: BadgeProps) {\n const cls = [\n styles.badge,\n styles[variant],\n outline ? styles.outline : null,\n coloredText ? styles.coloredText : null,\n indicator ? styles.indicator : null,\n pill ? styles.pill : null,\n label && !indicator ? styles.label : null,\n label && !indicator ? styles[`label-${labelDirection}`] : null,\n dismissable && !indicator ? styles.dismiss : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <span {...props} className={cls}>\n {!indicator && icon ? icon : null}\n {!indicator ? children : null}\n {dismissable && !indicator && (\n <button\n type=\"button\"\n className={styles.dismissBtn}\n aria-label=\"Remove\"\n onClick={onDismiss}\n >\n <XIcon />\n </button>\n )}\n </span>\n );\n}\n\nBadge.displayName = \"Badge\";\n","import type { AnchorHTMLAttributes, ButtonHTMLAttributes, HTMLAttributes, ReactNode } from \"react\";\nimport styles from \"./Breadcrumb.module.css\";\n\nconst ChevronRightIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"12\" height=\"12\">\n <path d=\"m9 18 6-6-6-6\"/>\n </svg>\n);\n\nexport type BreadcrumbItem = {\n label: ReactNode;\n href?: string;\n current?: boolean;\n disabled?: boolean;\n onClick?: () => void;\n linkProps?: AnchorHTMLAttributes<HTMLAnchorElement>;\n buttonProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n};\n\nexport type BreadcrumbProps = HTMLAttributes<HTMLElement> & {\n items: BreadcrumbItem[];\n separator?: ReactNode;\n label?: string;\n colorCurrent?: boolean;\n};\n\nexport function Breadcrumb({\n items,\n separator = <ChevronRightIcon />,\n label = \"Breadcrumb\",\n colorCurrent = false,\n className,\n ...props\n}: BreadcrumbProps) {\n const cls = [styles.breadcrumb, className].filter(Boolean).join(\" \");\n\n return (\n <nav {...props} className={cls} aria-label={label}>\n <ol className={styles.list}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n const isCurrent = item.current ?? isLast;\n const isDisabled = item.disabled || isCurrent;\n\n return (\n <li className={styles.item} key={index}>\n {index > 0 && (\n <span className={styles.separator} aria-hidden=\"true\">\n {separator}\n </span>\n )}\n\n {item.href && !isDisabled ? (\n <a\n {...item.linkProps}\n className={[styles.link, item.linkProps?.className]\n .filter(Boolean)\n .join(\" \")}\n href={item.href}\n >\n {item.label}\n </a>\n ) : item.onClick && !isDisabled ? (\n <button\n {...item.buttonProps}\n type=\"button\"\n className={[styles.link, styles.button, item.buttonProps?.className]\n .filter(Boolean)\n .join(\" \")}\n onClick={item.onClick}\n >\n {item.label}\n </button>\n ) : (\n <span\n className={[\n styles.current,\n colorCurrent && isCurrent && !item.disabled ? styles.coloredCurrent : null,\n item.disabled ? styles.disabled : null\n ]\n .filter(Boolean)\n .join(\" \")}\n aria-current={isCurrent ? \"page\" : undefined}\n >\n {item.label}\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n\nBreadcrumb.displayName = \"Breadcrumb\";\n\nexport const BreadCrumb = Breadcrumb;\n","import type { CSSProperties, HTMLAttributes, ReactNode } from \"react\";\n\nexport type ScrollableDirection = \"vertical\" | \"horizontal\" | \"both\";\n\nexport type ScrollableProps = HTMLAttributes<HTMLDivElement> & {\n direction?: ScrollableDirection;\n track?: boolean;\n arrows?: boolean;\n autoHide?: boolean;\n expand?: boolean;\n scrollbarSize?: number;\n height?: string | number;\n children?: ReactNode;\n};\n\nexport function Scrollable({\n direction = \"vertical\",\n track = false,\n arrows = false,\n autoHide = false,\n expand = false,\n scrollbarSize,\n height,\n children,\n className,\n style,\n ...props\n}: ScrollableProps) {\n const classes = [\n \"sb\",\n track ? \"sb-track\" : null,\n arrows ? \"sb-arrows\" : null,\n autoHide ? \"sb-auto-hide\" : null,\n expand ? \"sb-expand\" : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const overflowStyle: CSSProperties =\n direction === \"vertical\"\n ? { overflowY: \"auto\", overflowX: \"hidden\" }\n : direction === \"horizontal\"\n ? { overflowX: \"auto\", overflowY: \"hidden\" }\n : { overflow: \"auto\" };\n\n const sizeVar = scrollbarSize !== undefined\n ? { \"--sb-w\": `${scrollbarSize}px` } as CSSProperties\n : undefined;\n\n return (\n <div\n {...props}\n className={classes}\n style={{ height, ...overflowStyle, ...sizeVar, ...style }}\n >\n {children}\n </div>\n );\n}\n\nScrollable.displayName = \"Scrollable\";\n","import { forwardRef } from \"react\";\nimport type { ButtonHTMLAttributes, ReactNode } from \"react\";\nimport type { ColorName, ColorTone, ColorVariant } from \"../types\";\nimport styles from \"./Button.module.css\";\n\nexport type ButtonColor = ColorName;\nexport type ButtonTone = ColorTone;\nexport type ButtonVariant = ColorVariant;\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {\n variant?: ButtonVariant;\n size?: ButtonSize;\n icon?: ReactNode;\n outline?: boolean;\n rounded?: boolean;\n coloredText?: boolean;\n transparent?: boolean;\n children?: ReactNode;\n};\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n type = \"button\",\n variant = \"gray2\",\n size = \"md\",\n icon,\n outline = false,\n rounded = false,\n coloredText = false,\n transparent = false,\n children,\n className,\n disabled,\n ...props\n },\n ref\n ) => {\n const hasContent =\n children !== undefined &&\n children !== null &&\n (typeof children !== \"string\" || children.trim().length > 0);\n const isIconOnly = Boolean(icon) && !hasContent;\n\n const classes = [\n styles.btn,\n styles[variant],\n styles[size],\n outline ? styles.outline : null,\n rounded ? styles.rounded : null,\n rounded && isIconOnly ? styles.roundIconOnly : null,\n coloredText ? styles.coloredText : null,\n transparent ? styles.transparent : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <button\n ref={ref}\n type={type}\n disabled={disabled}\n className={classes}\n {...props}\n >\n {icon ? <span className={styles.icon}>{icon}</span> : null}\n {hasContent ? (\n <span className={styles.content}>{children}</span>\n ) : null}\n </button>\n );\n }\n);\n\nButton.displayName = \"Button\";\n","import type { ButtonHTMLAttributes, HTMLAttributes, ReactNode } from \"react\";\nimport styles from \"./Card.module.css\";\n\nexport type CardPadding = \"none\" | \"sm\" | \"md\" | \"lg\";\n\nexport type CardProps = HTMLAttributes<HTMLDivElement> & {\n padding?: CardPadding;\n tilt?: boolean;\n onClose?: () => void;\n closeBtnProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n children?: ReactNode;\n};\n\nconst PAD_MAP: Record<CardPadding, string> = {\n none: styles.padNone,\n sm: styles.padSm,\n md: styles.padMd,\n lg: styles.padLg\n};\n\nconst XIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"10\" height=\"10\">\n <path d=\"M18 6 6 18M6 6l12 12\"/>\n </svg>\n);\n\nexport function Card({\n padding = \"md\",\n tilt = false,\n onClose,\n closeBtnProps,\n children,\n className,\n ...props\n}: CardProps) {\n const cls = [styles.card, PAD_MAP[padding], tilt ? styles.tilt : null, className]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div {...props} className={cls}>\n {onClose && (\n <button\n type=\"button\"\n aria-label=\"Close\"\n {...closeBtnProps}\n className={[styles.closeBtn, closeBtnProps?.className].filter(Boolean).join(\" \")}\n onClick={onClose}\n >\n <XIcon />\n </button>\n )}\n {children}\n </div>\n );\n}\n\nCard.displayName = \"Card\";\n\n/* ---------- Sub-components for convenience ---------- */\n\nexport type CardHeaderProps = HTMLAttributes<HTMLDivElement> & {\n icon?: ReactNode;\n title: ReactNode;\n subtitle?: ReactNode;\n};\n\nexport function CardHeader({\n icon,\n title,\n subtitle,\n className,\n ...props\n}: CardHeaderProps) {\n return (\n <div {...props} className={[styles.header, className].filter(Boolean).join(\" \")}>\n {icon && <span className={styles.headerIcon}>{icon}</span>}\n <div>\n <div className={styles.title}>{title}</div>\n {subtitle && <div className={styles.subtitle}>{subtitle}</div>}\n </div>\n </div>\n );\n}\n\nCardHeader.displayName = \"CardHeader\";\n\nexport type CardStatProps = HTMLAttributes<HTMLDivElement> & {\n value: ReactNode;\n unit?: string;\n delta?: string;\n deltaDirection?: \"positive\" | \"negative\" | \"neutral\";\n};\n\nexport function CardStat({\n value,\n unit,\n delta,\n deltaDirection = \"positive\",\n className,\n ...props\n}: CardStatProps) {\n const deltaClass = [\n styles.statDelta,\n deltaDirection === \"positive\"\n ? styles.deltaPositive\n : deltaDirection === \"negative\"\n ? styles.deltaNegative\n : styles.deltaNeutral\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div {...props} className={[styles.stat, className].filter(Boolean).join(\" \")}>\n <span className={styles.statValue}>\n {value}\n {unit && <span className={styles.statUnit}> {unit}</span>}\n </span>\n {delta && <span className={deltaClass}>{delta}</span>}\n </div>\n );\n}\n\nCardStat.displayName = \"CardStat\";\n","import React, {\n useEffect,\n forwardRef,\n useImperativeHandle,\n useRef,\n useState\n} from \"react\";\nimport type {\n ButtonHTMLAttributes,\n ChangeEvent,\n HTMLAttributes,\n InputHTMLAttributes,\n ReactNode\n} from \"react\";\nimport { useControlledState } from \"../hooks\";\nimport styles from \"./DateTimeInput.module.css\";\n\nconst CalendarIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"14\" height=\"14\" aria-hidden=\"true\">\n <path d=\"M8 2v4M16 2v4\" />\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"3\" />\n <path d=\"M3 10h18\" />\n </svg>\n);\n\nconst ClockIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"14\" height=\"14\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M12 7v5l3 2\" />\n </svg>\n);\n\nconst XIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"12\" height=\"12\" aria-hidden=\"true\">\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n);\n\nexport type DateTimeInputMode = \"date\" | \"time\" | \"datetime\" | \"month\";\n\nexport type DateTimeInputProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"defaultValue\" | \"onChange\" | \"type\" | \"value\"\n> & {\n mode?: DateTimeInputMode;\n label?: string;\n helpText?: ReactNode;\n clearable?: boolean;\n clearLabel?: string;\n showIcon?: boolean;\n openPickerOnClick?: boolean;\n isInvalid?: boolean;\n clearButtonProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n value?: string;\n defaultValue?: string;\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n onValueChange?: (value: string) => void;\n fieldProps?: HTMLAttributes<HTMLDivElement>;\n wrapperProps?: HTMLAttributes<HTMLSpanElement>;\n inputProps?: InputHTMLAttributes<HTMLInputElement>;\n};\n\nconst placeholderByMode: Record<DateTimeInputMode, string> = {\n date: \"yyyy-mm-dd\",\n time: \"hh:mm\",\n datetime: \"yyyy-mm-dd hh:mm\",\n month: \"yyyy-mm\"\n};\n\nconst monthNames = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\"\n];\n\nconst dayNames = [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"];\nconst hourOptions = Array.from({ length: 24 }, (_, index) => pad(index));\nconst minuteOptions = Array.from({ length: 60 }, (_, index) => pad(index));\n\nfunction getModeIcon(mode: DateTimeInputMode) {\n return mode === \"time\" ? <ClockIcon /> : <CalendarIcon />;\n}\n\nfunction pad(value: number) {\n return String(value).padStart(2, \"0\");\n}\n\nfunction formatDateValue(date: Date) {\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;\n}\n\nfunction formatMonthValue(date: Date) {\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}`;\n}\n\nfunction parseDate(value: string, mode: DateTimeInputMode) {\n const datePart = mode === \"month\" ? `${value}-01` : value.slice(0, 10);\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(datePart)) return null;\n\n const [year, month, day] = datePart.split(\"-\").map(Number);\n const date = new Date(year, month - 1, day);\n\n if (\n date.getFullYear() !== year ||\n date.getMonth() !== month - 1 ||\n date.getDate() !== day\n ) {\n return null;\n }\n\n return date;\n}\n\nfunction getTimePart(value: string) {\n const time = value.split(\"T\")[1];\n return time?.slice(0, 5) ?? \"\";\n}\n\nfunction parseTime(value: string, mode: DateTimeInputMode) {\n const timeValue = mode === \"datetime\" ? getTimePart(value) : value.slice(0, 5);\n if (!/^\\d{2}:\\d{2}$/.test(timeValue)) return \"12:00\";\n\n const [hour, minute] = timeValue.split(\":\").map(Number);\n if (hour > 23 || minute > 59) return \"12:00\";\n\n return timeValue;\n}\n\nfunction getCalendarDays(viewDate: Date) {\n const year = viewDate.getFullYear();\n const month = viewDate.getMonth();\n const firstDay = new Date(year, month, 1);\n const start = new Date(year, month, 1 - firstDay.getDay());\n\n return Array.from({ length: 42 }, (_, index) => {\n const date = new Date(start);\n date.setDate(start.getDate() + index);\n return date;\n });\n}\n\nfunction isValueDisabled(value: string, min?: string | number, max?: string | number) {\n const minValue = typeof min === \"string\" ? min : undefined;\n const maxValue = typeof max === \"string\" ? max : undefined;\n return Boolean((minValue && value < minValue) || (maxValue && value > maxValue));\n}\n\nexport const DateTimeInput = forwardRef<HTMLInputElement, DateTimeInputProps>(\n (\n {\n mode = \"date\",\n label,\n helpText,\n clearable = false,\n clearLabel = \"Clear\",\n showIcon = true,\n openPickerOnClick = true,\n isInvalid = false,\n disabled,\n clearButtonProps,\n value,\n defaultValue = \"\",\n onChange,\n onValueChange,\n fieldProps,\n wrapperProps,\n inputProps,\n className,\n style,\n placeholder,\n min,\n max,\n step,\n ...props\n },\n ref\n ) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const wrapperRef = useRef<HTMLSpanElement>(null);\n const [pickerOpen, setPickerOpen] = useState(false);\n const [viewDate, setViewDate] = useState(() => parseDate(defaultValue, mode) ?? new Date());\n const [currentValue, setCurrentValue] = useControlledState(\n value,\n defaultValue,\n onValueChange\n );\n\n useImperativeHandle(ref, () => inputRef.current as HTMLInputElement);\n\n const isDisabled = disabled || inputProps?.disabled;\n const hasValue = currentValue.length > 0;\n const type = \"text\";\n const inputMin = min ?? inputProps?.min;\n const inputMax = max ?? inputProps?.max;\n const inputStep = step ?? inputProps?.step;\n const [selectedHour, selectedMinute] = parseTime(currentValue, mode).split(\":\");\n const pickerMin = typeof inputMin === \"string\"\n ? mode === \"month\" ? inputMin.slice(0, 7) : inputMin.slice(0, 10)\n : undefined;\n const pickerMax = typeof inputMax === \"string\"\n ? mode === \"month\" ? inputMax.slice(0, 7) : inputMax.slice(0, 10)\n : undefined;\n\n useEffect(() => {\n if (!pickerOpen) return;\n\n const selectedDate = parseDate(currentValue, mode);\n setViewDate(selectedDate ?? new Date());\n }, [currentValue, mode, pickerOpen]);\n\n useEffect(() => {\n if (!pickerOpen) return;\n\n const handlePointerDown = (event: PointerEvent) => {\n if (!wrapperRef.current?.contains(event.target as Node)) {\n setPickerOpen(false);\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") setPickerOpen(false);\n };\n\n document.addEventListener(\"pointerdown\", handlePointerDown);\n document.addEventListener(\"keydown\", handleKeyDown);\n\n return () => {\n document.removeEventListener(\"pointerdown\", handlePointerDown);\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [pickerOpen]);\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n setCurrentValue(event.target.value);\n onChange?.(event);\n inputProps?.onChange?.(event);\n };\n\n const handleClear = () => {\n setCurrentValue(\"\");\n setPickerOpen(false);\n inputRef.current?.focus();\n };\n\n const handleWrapperClick = (event: React.MouseEvent<HTMLSpanElement>) => {\n wrapperProps?.onClick?.(event);\n if (event.defaultPrevented || !openPickerOnClick || isDisabled) return;\n\n setPickerOpen(true);\n };\n\n const updateDateValue = (date: Date) => {\n const dateValue = formatDateValue(date);\n\n if (mode === \"datetime\") {\n setCurrentValue(`${dateValue}T${getTimePart(currentValue) || \"12:00\"}`);\n return;\n }\n\n setCurrentValue(dateValue);\n setPickerOpen(false);\n };\n\n const updateMonthValue = (date: Date) => {\n setCurrentValue(formatMonthValue(date));\n setPickerOpen(false);\n };\n\n const updateTimeValue = (timeValue: string) => {\n if (mode === \"time\") {\n setCurrentValue(timeValue);\n return;\n }\n\n const selectedDate = parseDate(currentValue, mode) ?? new Date();\n setCurrentValue(`${formatDateValue(selectedDate)}T${timeValue}`);\n };\n\n const updateTimePart = (part: \"hour\" | \"minute\", nextValue: string) => {\n const [currentHour, currentMinute] = parseTime(currentValue, mode).split(\":\");\n const nextTime = part === \"hour\"\n ? `${nextValue}:${currentMinute}`\n : `${currentHour}:${nextValue}`;\n\n updateTimeValue(nextTime);\n };\n\n const moveMonth = (offset: number) => {\n setViewDate((currentDate) => {\n const nextDate = new Date(currentDate);\n nextDate.setMonth(currentDate.getMonth() + offset);\n return nextDate;\n });\n };\n\n const moveYear = (offset: number) => {\n setViewDate((currentDate) => {\n const nextDate = new Date(currentDate);\n nextDate.setFullYear(currentDate.getFullYear() + offset);\n return nextDate;\n });\n };\n\n const handleToday = () => {\n const today = new Date();\n\n if (mode === \"month\") {\n updateMonthValue(today);\n return;\n }\n\n if (mode === \"time\") {\n updateTimeValue(`${pad(today.getHours())}:${pad(today.getMinutes())}`);\n return;\n }\n\n updateDateValue(today);\n };\n\n const renderTimeColumn = (\n part: \"hour\" | \"minute\",\n labelText: string,\n options: string[]\n ) => (\n <div className={styles.timeColumn} aria-label={labelText}>\n <span className={styles.timeColumnLabel}>{labelText}</span>\n <div className={styles.timeOptions}>\n {options.map((option) => {\n const selected = part === \"hour\"\n ? selectedHour === option\n : selectedMinute === option;\n const nextTime = part === \"hour\"\n ? `${option}:${selectedMinute}`\n : `${selectedHour}:${option}`;\n const timeDisabled = mode === \"time\"\n ? isValueDisabled(nextTime, inputMin, inputMax)\n : false;\n\n return (\n <button\n key={option}\n type=\"button\"\n className={[styles.timeOption, selected ? styles.selectedTime : null]\n .filter(Boolean)\n .join(\" \")}\n disabled={timeDisabled}\n onClick={() => updateTimePart(part, option)}\n >\n {option}\n </button>\n );\n })}\n </div>\n </div>\n );\n\n const inputClass = [\n styles.input,\n showIcon ? styles.hasIcon : null,\n clearable ? styles.hasClear : null,\n isInvalid ? styles.invalid : null,\n className,\n inputProps?.className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const wrapperClass = [\n styles.wrapper,\n isDisabled ? styles.disabled : null,\n wrapperProps?.className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const inputEl = (\n <span\n {...wrapperProps}\n ref={wrapperRef}\n className={wrapperClass}\n onClick={handleWrapperClick}\n >\n {showIcon ? <span className={styles.iconSlot}>{getModeIcon(mode)}</span> : null}\n <input\n {...props}\n {...inputProps}\n ref={inputRef}\n type={type}\n min={inputMin}\n max={inputMax}\n step={inputStep}\n readOnly={true}\n disabled={isDisabled}\n value={currentValue.replace(\"T\", \" \")}\n placeholder={placeholder ?? placeholderByMode[mode]}\n onChange={handleChange}\n onFocus={(event) => {\n props.onFocus?.(event);\n inputProps?.onFocus?.(event);\n if (openPickerOnClick && !isDisabled) setPickerOpen(true);\n }}\n className={inputClass}\n style={{ ...style, ...inputProps?.style }}\n />\n {clearable ? (\n <button\n type=\"button\"\n aria-label={clearLabel}\n title={clearLabel}\n disabled={isDisabled || !hasValue}\n onClick={(event) => {\n event.stopPropagation();\n clearButtonProps?.onClick?.(event);\n if (!event.defaultPrevented) handleClear();\n }}\n className={[styles.clearBtn, clearButtonProps?.className]\n .filter(Boolean)\n .join(\" \")}\n >\n {clearButtonProps?.children ?? <XIcon />}\n </button>\n ) : null}\n {pickerOpen && !isDisabled ? (\n <div\n className={styles.picker}\n role=\"dialog\"\n aria-label={label ?? \"Choose date and time\"}\n onClick={(event) => event.stopPropagation()}\n >\n {mode === \"time\" ? (\n <div className={styles.timePicker}>\n {renderTimeColumn(\"hour\", \"Hour\", hourOptions)}\n {renderTimeColumn(\"minute\", \"Minute\", minuteOptions)}\n </div>\n ) : (\n <>\n <div className={styles.pickerHeader}>\n <button type=\"button\" className={styles.navBtn} aria-label=\"Previous month\" onClick={() => mode === \"month\" ? moveYear(-1) : moveMonth(-1)}>\n <span aria-hidden=\"true\">‹</span>\n </button>\n <span className={styles.pickerTitle}>\n {mode === \"month\" ? viewDate.getFullYear() : `${monthNames[viewDate.getMonth()]} ${viewDate.getFullYear()}`}\n </span>\n <button type=\"button\" className={styles.navBtn} aria-label=\"Next month\" onClick={() => mode === \"month\" ? moveYear(1) : moveMonth(1)}>\n <span aria-hidden=\"true\">›</span>\n </button>\n </div>\n\n {mode === \"month\" ? (\n <div className={styles.monthGrid}>\n {monthNames.map((monthName, index) => {\n const monthDate = new Date(viewDate.getFullYear(), index, 1);\n const monthValue = formatMonthValue(monthDate);\n const selected = monthValue === currentValue.slice(0, 7);\n const monthDisabled = isValueDisabled(monthValue, pickerMin, pickerMax);\n\n return (\n <button\n key={monthName}\n type=\"button\"\n className={[styles.monthBtn, selected ? styles.selectedMonth : null]\n .filter(Boolean)\n .join(\" \")}\n disabled={monthDisabled}\n onClick={() => updateMonthValue(monthDate)}\n >\n {monthName.slice(0, 3)}\n </button>\n );\n })}\n </div>\n ) : (\n <>\n <div className={styles.weekDays}>\n {dayNames.map((dayName, index) => (\n <span key={`${dayName}-${index}`}>{dayName}</span>\n ))}\n </div>\n <div className={styles.dayGrid}>\n {getCalendarDays(viewDate).map((date) => {\n const dateValue = formatDateValue(date);\n const selected = dateValue === currentValue.slice(0, 10);\n const today = dateValue === formatDateValue(new Date());\n const outside = date.getMonth() !== viewDate.getMonth();\n const dateDisabled = isValueDisabled(dateValue, pickerMin, pickerMax);\n\n return (\n <button\n key={dateValue}\n type=\"button\"\n className={[\n styles.dayBtn,\n selected ? styles.selectedDay : null,\n today ? styles.today : null,\n outside ? styles.outsideDay : null\n ]\n .filter(Boolean)\n .join(\" \")}\n disabled={dateDisabled}\n onClick={() => updateDateValue(date)}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n {mode === \"datetime\" ? (\n <div className={styles.inlineTimePicker}>\n {renderTimeColumn(\"hour\", \"Hour\", hourOptions)}\n {renderTimeColumn(\"minute\", \"Minute\", minuteOptions)}\n </div>\n ) : null}\n </>\n )}\n </>\n )}\n\n <div className={styles.pickerFooter}>\n <button type=\"button\" className={styles.footerBtn} onClick={handleClear}>Clear</button>\n <button type=\"button\" className={styles.footerBtn} onClick={handleToday}>\n {mode === \"month\" ? \"This month\" : mode === \"time\" ? \"Now\" : \"Today\"}\n </button>\n </div>\n </div>\n ) : null}\n </span>\n );\n\n if (!label && !helpText && !fieldProps) {\n return inputEl;\n }\n\n return (\n <div {...fieldProps} className={[styles.field, fieldProps?.className].filter(Boolean).join(\" \")}>\n {label ? <label className={styles.label}>{label}</label> : null}\n {inputEl}\n {helpText ? <span className={styles.helpText}>{helpText}</span> : null}\n </div>\n );\n }\n);\n\nDateTimeInput.displayName = \"DateTimeInput\";\n","import React, {\n forwardRef,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState\n} from \"react\";\nimport type {\n ButtonHTMLAttributes,\n ChangeEvent,\n HTMLAttributes,\n InputHTMLAttributes,\n ReactNode\n} from \"react\";\nimport styles from \"./FileInput.module.css\";\n\nconst XIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"12\" height=\"12\" aria-hidden=\"true\">\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n);\n\nconst FolderIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"14\" height=\"14\" aria-hidden=\"true\">\n <path d=\"M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2Z\" />\n </svg>\n);\n\nexport type FileInputValueChange = {\n files: File[];\n fileList: FileList | null;\n};\n\nexport type FileInputProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"defaultValue\" | \"type\" | \"value\"\n> & {\n label?: string;\n helpText?: ReactNode;\n buttonLabel?: ReactNode;\n buttonPosition?: \"left\" | \"right\";\n clearable?: boolean;\n clearLabel?: string;\n fileCountLabel?: (count: number) => string;\n emptyLabel?: string;\n showFileSize?: boolean;\n isInvalid?: boolean;\n selectedFiles?: File[];\n defaultFiles?: File[];\n onFilesChange?: (change: FileInputValueChange) => void;\n clearButtonProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n fieldProps?: HTMLAttributes<HTMLDivElement>;\n wrapperProps?: HTMLAttributes<HTMLDivElement>;\n inputProps?: Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"defaultValue\" | \"type\" | \"value\"\n >;\n};\n\nconst defaultFileCountLabel = (count: number) =>\n `${count} ${count === 1 ? \"file\" : \"files\"} selected`;\n\nconst defaultButtonLabel = (\n <>\n <FolderIcon />\n Choose file\n </>\n);\n\nfunction formatFileSize(bytes: number) {\n if (bytes < 1024) return `${bytes} B`;\n\n const units = [\"KB\", \"MB\", \"GB\", \"TB\"];\n let size = bytes / 1024;\n let unitIndex = 0;\n\n while (size >= 1024 && unitIndex < units.length - 1) {\n size /= 1024;\n unitIndex += 1;\n }\n\n return `${size >= 10 ? size.toFixed(0) : size.toFixed(1)} ${units[unitIndex]}`;\n}\n\nfunction getFileLabel(file: File, showFileSize: boolean) {\n if (!showFileSize) return file.name;\n return `${file.name} (${formatFileSize(file.size)})`;\n}\n\nfunction getTotalFileSize(files: File[]) {\n return files.reduce((total, file) => total + file.size, 0);\n}\n\nexport const FileInput = forwardRef<HTMLInputElement, FileInputProps>(\n (\n {\n label,\n helpText,\n buttonLabel = defaultButtonLabel,\n buttonPosition = \"left\",\n clearable = false,\n clearLabel = \"Clear\",\n fileCountLabel = defaultFileCountLabel,\n emptyLabel = \"No file selected\",\n showFileSize = false,\n isInvalid = false,\n selectedFiles,\n defaultFiles = [],\n onChange,\n onFilesChange,\n clearButtonProps,\n fieldProps,\n wrapperProps,\n inputProps,\n disabled,\n id,\n className,\n style,\n multiple,\n ...props\n },\n ref\n ) => {\n const generatedId = useId();\n const inputRef = useRef<HTMLInputElement>(null);\n const [internalFiles, setInternalFiles] = useState<File[]>(defaultFiles);\n const isControlled = selectedFiles !== undefined;\n const files = isControlled ? selectedFiles : internalFiles;\n const inputId = inputProps?.id ?? id ?? generatedId;\n const helpTextId = helpText ? `${inputId}-help` : undefined;\n const isDisabled = disabled || inputProps?.disabled;\n const isMultiple = multiple ?? inputProps?.multiple;\n\n useImperativeHandle(ref, () => inputRef.current as HTMLInputElement);\n\n const updateFiles = (nextFiles: File[], fileList: FileList | null) => {\n if (!isControlled) {\n setInternalFiles(nextFiles);\n }\n\n onFilesChange?.({ files: nextFiles, fileList });\n };\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n const nextFiles = Array.from(event.target.files ?? []);\n updateFiles(nextFiles, event.target.files);\n onChange?.(event);\n inputProps?.onChange?.(event);\n };\n\n const handleClear = () => {\n if (inputRef.current) {\n inputRef.current.value = \"\";\n }\n\n updateFiles([], null);\n inputRef.current?.focus();\n };\n\n const displayValue = useMemo(() => {\n if (!files.length) return emptyLabel;\n\n if (files.length === 1) {\n return (\n <>\n <span className={styles.fileName}>{files[0].name}</span>\n {showFileSize ? (\n <span className={styles.fileMeta}>{formatFileSize(files[0].size)}</span>\n ) : null}\n </>\n );\n }\n\n return (\n <>\n <span className={styles.fileName}>{fileCountLabel(files.length)}</span>\n {showFileSize ? (\n <span className={styles.fileMeta}>{formatFileSize(getTotalFileSize(files))}</span>\n ) : null}\n </>\n );\n }, [emptyLabel, fileCountLabel, files, showFileSize]);\n\n const titleLabel = useMemo(() => {\n if (!files.length) return emptyLabel;\n return files.map((file) => getFileLabel(file, showFileSize)).join(\", \");\n }, [emptyLabel, files, showFileSize]);\n\n const triggerClass = [\n styles.trigger,\n buttonPosition === \"right\" ? styles.buttonRight : null,\n clearable && files.length && buttonPosition === \"right\" ? styles.hasClearLeft : null,\n clearable && files.length && buttonPosition === \"left\" ? styles.hasClear : null,\n isInvalid ? styles.invalid : null,\n files.length ? null : styles.empty,\n className,\n inputProps?.className\n ]\n .filter(Boolean)\n .join(\" \");\n const wrapperClass = [styles.wrapper, wrapperProps?.className]\n .filter(Boolean)\n .join(\" \");\n const fieldClass = [styles.field, fieldProps?.className]\n .filter(Boolean)\n .join(\" \");\n\n const buttonContent = (\n <span className={styles.buttonLabel}>\n {buttonLabel}\n </span>\n );\n const valueContent = (\n <span className={styles.value} title={titleLabel}>\n {displayValue}\n </span>\n );\n\n const inner = (\n <div {...wrapperProps} className={wrapperClass}>\n <input\n {...props}\n {...inputProps}\n ref={inputRef}\n id={inputId}\n type=\"file\"\n disabled={isDisabled}\n multiple={isMultiple}\n aria-describedby={inputProps?.[\"aria-describedby\"] ?? props[\"aria-describedby\"] ?? helpTextId}\n aria-invalid={isInvalid || inputProps?.[\"aria-invalid\"] || props[\"aria-invalid\"]}\n onChange={handleChange}\n className={styles.nativeInput}\n />\n <button\n type=\"button\"\n disabled={isDisabled}\n className={triggerClass}\n style={{ ...style, ...inputProps?.style }}\n onClick={() => inputRef.current?.click()}\n >\n {buttonPosition === \"left\" ? buttonContent : valueContent}\n {buttonPosition === \"left\" ? valueContent : buttonContent}\n </button>\n {clearable ? (\n <button\n {...clearButtonProps}\n type=\"button\"\n aria-label={clearButtonProps?.[\"aria-label\"] ?? clearLabel}\n title={clearButtonProps?.title ?? clearLabel}\n disabled={isDisabled || files.length === 0 || clearButtonProps?.disabled}\n onClick={(event) => {\n handleClear();\n clearButtonProps?.onClick?.(event);\n }}\n className={[\n styles.clearBtn,\n buttonPosition === \"right\" ? styles.clearLeft : null,\n clearButtonProps?.className\n ].filter(Boolean).join(\" \")}\n >\n {clearButtonProps?.children ?? <XIcon />}\n </button>\n ) : null}\n </div>\n );\n\n if (!label && !helpText && !fieldProps) {\n return inner;\n }\n\n return (\n <div {...fieldProps} className={fieldClass}>\n {label ? <label className={styles.label} htmlFor={inputId}>{label}</label> : null}\n {inner}\n {helpText ? <span id={helpTextId} className={styles.helpText}>{helpText}</span> : null}\n </div>\n );\n }\n);\n\nFileInput.displayName = \"FileInput\";\n","export type MaskValueOptions = {\n placeholder?: string;\n allowedPattern?: RegExp;\n};\n\nconst MASK_SLOTS = new Set([\"X\", \"x\"]);\nconst DEFAULT_ALLOWED_PATTERN = /[a-zA-Z0-9]/;\n\nexport function getRawMaskValue(value: string, options: MaskValueOptions = {}) {\n const allowedPattern = options.allowedPattern ?? DEFAULT_ALLOWED_PATTERN;\n\n return value\n .split(\"\")\n .filter((char) => allowedPattern.test(char))\n .join(\"\");\n}\n\nexport function applyMask(\n value: string,\n mask: string,\n options: MaskValueOptions = {}\n) {\n const placeholder = options.placeholder || undefined;\n const rawValue = getRawMaskValue(value, options);\n let rawIndex = 0;\n let maskedValue = \"\";\n\n for (const maskChar of mask) {\n if (MASK_SLOTS.has(maskChar)) {\n if (rawIndex >= rawValue.length) {\n if (placeholder) {\n maskedValue += placeholder;\n continue;\n }\n break;\n }\n\n maskedValue += rawValue[rawIndex];\n rawIndex += 1;\n continue;\n }\n\n if (rawIndex >= rawValue.length && !placeholder) {\n break;\n }\n\n maskedValue += maskChar;\n }\n\n return maskedValue;\n}\n","import React, {\n forwardRef,\n useState,\n useCallback,\n useImperativeHandle,\n useRef\n} from \"react\";\nimport type {\n ButtonHTMLAttributes,\n ChangeEvent,\n HTMLAttributes,\n InputHTMLAttributes,\n ReactNode\n} from \"react\";\nimport { useControlledState } from \"../hooks\";\nimport { applyMask, getRawMaskValue } from \"../utils\";\nimport styles from \"./Input.module.css\";\n\nconst XIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"12\" height=\"12\">\n <path d=\"M18 6 6 18M6 6l12 12\"/>\n </svg>\n);\n\nconst EyeIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"14\" height=\"14\">\n <path d=\"M2 12s3.5-6 10-6 10 6 10 6-3.5 6-10 6-10-6-10-6Z\"/>\n <circle cx=\"12\" cy=\"12\" r=\"2.5\"/>\n </svg>\n);\n\nconst EyeOffIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"14\" height=\"14\">\n <path d=\"m3 3 18 18\"/>\n <path d=\"M10.6 10.6a2 2 0 0 0 2.8 2.8\"/>\n <path d=\"M9.9 5.2A10.4 10.4 0 0 1 12 5c6.5 0 10 7 10 7a17.7 17.7 0 0 1-3.1 4.1\"/>\n <path d=\"M6.7 6.7C3.8 8.6 2 12 2 12s3.5 7 10 7c1.4 0 2.7-.3 3.8-.8\"/>\n </svg>\n);\n\nconst ChevronUpIcon = () => (\n <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"10\" height=\"10\">\n <path d=\"m4 10 4-4 4 4\"/>\n </svg>\n);\n\nconst ChevronDownIcon = () => (\n <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"10\" height=\"10\">\n <path d=\"m4 6 4 4 4-4\"/>\n </svg>\n);\n\nconst digitsOnly = (value: string) => value.replace(/\\D/g, \"\");\n\nconst toFiniteNumber = (value: unknown) => {\n if (typeof value === \"number\") return Number.isFinite(value) ? value : undefined;\n if (typeof value !== \"string\" || value.trim() === \"\" || value === \"any\") return undefined;\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n};\n\nexport type InputValueChange = {\n value: string;\n rawValue: string;\n};\n\nexport type InputProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"defaultValue\" | \"onChange\" | \"type\" | \"value\"\n> & {\n label?: string;\n helpText?: ReactNode;\n icon?: ReactNode;\n iconPosition?: \"left\" | \"right\";\n type?: InputHTMLAttributes<HTMLInputElement>[\"type\"];\n mask?: string;\n maskPlaceholder?: string;\n maskAllowedPattern?: RegExp;\n clearable?: boolean;\n clearLabel?: string;\n showNumberControls?: boolean;\n showPasswordToggle?: boolean;\n rounded?: boolean;\n selectOnFocus?: boolean;\n textAlign?: \"left\" | \"center\" | \"right\";\n isInvalid?: boolean;\n clearButtonProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n value?: string;\n defaultValue?: string;\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n onValueChange?: (change: InputValueChange) => void;\n fieldProps?: HTMLAttributes<HTMLDivElement>;\n wrapperProps?: HTMLAttributes<HTMLSpanElement>;\n inputProps?: InputHTMLAttributes<HTMLInputElement>;\n};\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n label,\n helpText,\n icon,\n iconPosition = \"left\",\n clearable = false,\n clearButtonProps,\n clearLabel,\n showNumberControls = false,\n showPasswordToggle = true,\n rounded = false,\n disabled,\n mask,\n maskAllowedPattern,\n maskPlaceholder,\n selectOnFocus = false,\n textAlign,\n isInvalid = false,\n value,\n defaultValue = \"\",\n onChange,\n onValueChange,\n type = \"text\",\n fieldProps,\n wrapperProps,\n inputProps,\n className,\n style,\n ...props\n },\n ref\n ) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const resolvedType = inputProps?.type ?? type;\n const isNumberType = resolvedType === \"number\";\n const isPasswordType = resolvedType === \"password\";\n const [isPasswordVisible, setIsPasswordVisible] = useState(false);\n const [currentValue, setCurrentValue] = useControlledState(\n value,\n defaultValue,\n (nextValue) => {\n onValueChange?.({\n value: nextValue,\n rawValue: mask\n ? getRawMaskValue(nextValue, {\n allowedPattern: maskAllowedPattern,\n placeholder: maskPlaceholder\n })\n : nextValue\n });\n }\n );\n\n useImperativeHandle(ref, () => inputRef.current as HTMLInputElement);\n\n const formatValue = useCallback(\n (nextValue: string) => {\n const filteredValue = isNumberType ? digitsOnly(nextValue) : nextValue;\n if (!mask) return filteredValue;\n return applyMask(filteredValue, mask, {\n allowedPattern: maskAllowedPattern,\n placeholder: maskPlaceholder\n });\n },\n [isNumberType, mask, maskAllowedPattern, maskPlaceholder]\n );\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n const formattedValue = formatValue(event.target.value);\n event.target.value = formattedValue;\n setCurrentValue(formattedValue);\n onChange?.(event);\n inputProps?.onChange?.(event);\n };\n\n const handleClear = () => {\n setCurrentValue(\"\");\n inputRef.current?.focus();\n };\n\n const inputMin = inputProps?.min ?? props.min;\n const inputMax = inputProps?.max ?? props.max;\n const inputStep = inputProps?.step ?? props.step;\n const numberMin = toFiniteNumber(inputMin);\n const numberMax = toFiniteNumber(inputMax);\n const parsedNumberStep = toFiniteNumber(inputStep);\n const numberStep = parsedNumberStep && parsedNumberStep > 0\n ? Math.trunc(parsedNumberStep) || 1\n : 1;\n const displayValue = formatValue(currentValue);\n const numericValue = toFiniteNumber(displayValue);\n const canDecrease = !isNumberType\n ? false\n : numericValue === undefined\n ? false\n : numberMin === undefined\n ? numericValue > 0\n : numericValue > numberMin;\n const canIncrease = !isNumberType\n ? false\n : numberMax === undefined || numericValue === undefined || numericValue < numberMax;\n\n const handleNumberStep = (direction: 1 | -1) => {\n const nextRawValue = numericValue === undefined && direction === 1\n ? numberMin ?? numberStep\n : (numericValue ?? numberMin ?? 0) + numberStep * direction;\n const nextValue = Math.max(\n numberMin ?? 0,\n Math.min(numberMax ?? Number.POSITIVE_INFINITY, nextRawValue)\n );\n\n setCurrentValue(formatValue(String(nextValue)));\n inputRef.current?.focus();\n };\n\n const iconRight = icon && iconPosition === \"right\";\n const iconLeft = icon && iconPosition === \"left\";\n const hasPasswordToggle = isPasswordType && showPasswordToggle;\n const hasNumberControls = isNumberType && showNumberControls;\n const trailingItemWidths = [\n iconRight ? 14 : 0,\n clearable ? 18 : 0,\n hasPasswordToggle ? 18 : 0,\n hasNumberControls ? 16 : 0\n ].filter(Boolean);\n const trailingPadding = trailingItemWidths.length\n ? trailingItemWidths.reduce((sum, width) => sum + width, 0) + (trailingItemWidths.length - 1) * 2 + 16\n : undefined;\n\n const inputClass = [\n styles.input,\n rounded ? styles.rounded : null,\n iconLeft ? styles.hasIcon : null,\n trailingPadding ? styles.hasTrailing : null,\n isInvalid ? styles.invalid : null,\n className,\n inputProps?.className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n if (selectOnFocus) e.target.select();\n props.onFocus?.(e);\n inputProps?.onFocus?.(e);\n };\n\n const inputStyle = {\n ...style,\n ...inputProps?.style,\n ...(textAlign ? { textAlign } : null),\n ...(trailingPadding ? { \"--input-padding-right\": `${trailingPadding}px` } : null)\n } as React.CSSProperties;\n const isDisabled = disabled || inputProps?.disabled;\n const renderedType = isPasswordType\n ? isPasswordVisible && hasPasswordToggle ? \"text\" : \"password\"\n : isNumberType ? \"text\" : resolvedType;\n const clearButtonLabel = clearLabel ?? \"Clear\";\n\n const inputEl = (\n <input\n {...props}\n {...inputProps}\n ref={inputRef}\n type={renderedType}\n disabled={isDisabled}\n value={displayValue}\n inputMode={isNumberType ? \"numeric\" : inputProps?.inputMode ?? props.inputMode}\n pattern={isNumberType ? \"[0-9]*\" : inputProps?.pattern ?? props.pattern}\n onChange={handleChange}\n onFocus={handleFocus}\n className={inputClass}\n style={inputStyle}\n />\n );\n\n const wrapperClass = [styles.wrapper, wrapperProps?.className]\n .filter(Boolean)\n .join(\" \");\n\n const inner = (\n <span {...wrapperProps} className={wrapperClass}>\n {iconLeft ? <span className={styles.iconSlot}>{icon}</span> : null}\n {inputEl}\n {trailingPadding ? (\n <span className={styles.trailingContent}>\n {iconRight ? (\n <span className={styles.trailingIcon}>{icon}</span>\n ) : null}\n {clearable ? (\n <button\n {...clearButtonProps}\n type=\"button\"\n aria-label={clearButtonProps?.[\"aria-label\"] ?? clearButtonLabel}\n title={clearButtonProps?.title ?? clearButtonLabel}\n disabled={isDisabled || displayValue.length === 0 || clearButtonProps?.disabled}\n onClick={(event) => {\n handleClear();\n clearButtonProps?.onClick?.(event);\n }}\n className={[styles.clearBtn, clearButtonProps?.className].filter(Boolean).join(\" \")}\n >\n {clearButtonProps?.children ?? <XIcon />}\n </button>\n ) : null}\n {hasPasswordToggle ? (\n <button\n type=\"button\"\n aria-label={isPasswordVisible ? \"Hide password\" : \"Show password\"}\n title={isPasswordVisible ? \"Hide password\" : \"Show password\"}\n disabled={isDisabled}\n onClick={() => {\n setIsPasswordVisible((visible) => !visible);\n inputRef.current?.focus();\n }}\n className={styles.iconButton}\n >\n {isPasswordVisible ? <EyeOffIcon /> : <EyeIcon />}\n </button>\n ) : null}\n {hasNumberControls ? (\n <span className={styles.numberControls}>\n <button\n type=\"button\"\n aria-label=\"Increase\"\n title=\"Increase\"\n disabled={isDisabled || !canIncrease}\n onClick={() => handleNumberStep(1)}\n className={styles.numberControlButton}\n >\n <ChevronUpIcon />\n </button>\n <button\n type=\"button\"\n aria-label=\"Decrease\"\n title=\"Decrease\"\n disabled={isDisabled || !canDecrease}\n onClick={() => handleNumberStep(-1)}\n className={styles.numberControlButton}\n >\n <ChevronDownIcon />\n </button>\n </span>\n ) : null}\n </span>\n ) : null}\n </span>\n );\n\n if (!label && !helpText && !fieldProps) {\n return inner;\n }\n\n return (\n <div {...fieldProps} className={[styles.field, fieldProps?.className].filter(Boolean).join(\" \")}>\n {label ? <label className={styles.label}>{label}</label> : null}\n {inner}\n {helpText ? <span className={styles.helpText}>{helpText}</span> : null}\n </div>\n );\n }\n);\n\nInput.displayName = \"Input\";\n","import { forwardRef } from \"react\";\nimport type { AnchorHTMLAttributes, CSSProperties, MouseEvent, ReactNode } from \"react\";\nimport type { ColorVariant } from \"../types\";\nimport styles from \"./Link.module.css\";\n\nexport type LinkVariant = ColorVariant;\n\nexport type LinkProps = Omit<AnchorHTMLAttributes<HTMLAnchorElement>, \"aria-disabled\"> & {\n variant?: LinkVariant;\n underlined?: boolean;\n opacity?: number;\n disabled?: boolean;\n noreferrer?: boolean;\n noopener?: boolean;\n icon?: ReactNode;\n children?: ReactNode;\n};\n\nfunction mergeRel(rel: string | undefined, values: Array<string | false>) {\n const parts = new Set((rel ?? \"\").split(/\\s+/).filter(Boolean));\n values.forEach((value) => {\n if (value) parts.add(value);\n });\n\n return parts.size > 0 ? Array.from(parts).join(\" \") : undefined;\n}\n\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>(\n (\n {\n variant = \"blue2\",\n underlined = false,\n opacity,\n disabled = false,\n noreferrer = false,\n noopener,\n icon,\n children,\n className,\n style,\n href,\n rel,\n target,\n tabIndex,\n onClick,\n ...props\n },\n ref\n ) => {\n const externalNoopener = noopener ?? target === \"_blank\";\n const cls = [\n styles.link,\n styles[variant],\n underlined ? styles.underlined : null,\n disabled ? styles.disabled : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const linkStyle = {\n ...style,\n ...(opacity !== undefined ? { \"--link-opacity\": opacity } : null)\n } as CSSProperties;\n\n const handleClick = (event: MouseEvent<HTMLAnchorElement>) => {\n onClick?.(event);\n if (disabled) event.preventDefault();\n };\n\n return (\n <a\n ref={ref}\n {...props}\n href={disabled ? undefined : href}\n target={target}\n rel={mergeRel(rel, [externalNoopener && \"noopener\", noreferrer && \"noreferrer\"])}\n aria-disabled={disabled || undefined}\n tabIndex={disabled ? -1 : tabIndex}\n className={cls}\n style={linkStyle}\n onClick={handleClick}\n >\n {icon && <span className={styles.icon}>{icon}</span>}\n {children}\n </a>\n );\n }\n);\n\nLink.displayName = \"Link\";\n","import { useEffect, useId, useRef, useState } from \"react\";\nimport type {\n ButtonHTMLAttributes,\n HTMLAttributes,\n MouseEvent as ReactMouseEvent,\n PointerEvent as ReactPointerEvent,\n ReactNode\n} from \"react\";\nimport { useControlledState } from \"../hooks\";\nimport styles from \"./List.module.css\";\n\nconst ChevronIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"14\" height=\"14\" aria-hidden=\"true\">\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n);\n\nexport type ListSpacing = \"sm\" | \"md\" | \"lg\";\nexport type ListDropPosition = \"before\" | \"after\" | \"inside\";\n\nexport type ListItem = {\n value: string;\n label: ReactNode;\n description?: ReactNode;\n meta?: ReactNode;\n icon?: ReactNode;\n active?: boolean;\n disabled?: boolean;\n className?: string;\n itemProps?: HTMLAttributes<HTMLLIElement>;\n buttonProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n onClick?: (event: ReactMouseEvent<HTMLButtonElement>, item: ListItem) => void;\n};\n\nexport type ListItemDropEvent = {\n item: ListItem;\n sourceListId: string;\n targetListId: string;\n targetItem?: ListItem;\n position: ListDropPosition;\n};\n\nexport type ListProps = Omit<HTMLAttributes<HTMLDivElement>, \"title\" | \"onChange\"> & {\n items: ListItem[];\n title?: ReactNode;\n showTitle?: boolean;\n collapsible?: boolean;\n collapsed?: boolean;\n defaultCollapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n emptyLabel?: ReactNode;\n selectable?: boolean;\n selectedValue?: string | null;\n defaultSelectedValue?: string | null;\n onSelectedValueChange?: (value: string, item: ListItem) => void;\n fullWidthBackgroup?: boolean;\n spacing?: ListSpacing;\n titleHover?: boolean;\n ariaLabel?: string;\n headerProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n listProps?: HTMLAttributes<HTMLUListElement>;\n itemClassName?: string;\n draggable?: boolean;\n dragGroup?: string;\n listId?: string;\n isItemDraggable?: (item: ListItem) => boolean;\n onItemDrop?: (event: ListItemDropEvent) => void;\n dragGhost?: (item: ListItem) => ReactNode;\n dropOutsideListId?: string;\n dropOutsideBeforeListId?: string;\n dropOutsideAfterListId?: string;\n};\n\ntype ActiveListDragTarget = {\n listId: string;\n itemValue?: string;\n position: ListDropPosition;\n};\n\ntype ActiveListDrag = {\n item: ListItem;\n sourceListId: string;\n dragGroup: string;\n pointerId: number;\n startClientX: number;\n startClientY: number;\n currentX: number;\n currentY: number;\n width: number;\n height: number;\n moved: boolean;\n target: ActiveListDragTarget | null;\n};\n\ntype ListRegistryEntry = {\n listId: string;\n dragGroup: string;\n items: ListItem[];\n onItemDrop?: (event: ListItemDropEvent) => void;\n dropOutsideListId?: string;\n dropOutsideBeforeListId?: string;\n dropOutsideAfterListId?: string;\n root: HTMLElement | null;\n};\n\nconst DEFAULT_DRAG_GROUP = \"__super-kit-list\";\nconst DRAG_START_DISTANCE = 5;\nconst DRAG_GHOST_OFFSET = 4;\nconst listRegistry = new Map<string, ListRegistryEntry>();\nconst dragListeners = new Set<() => void>();\nlet activeListDrag: ActiveListDrag | null = null;\n\nfunction emitListDragChange() {\n dragListeners.forEach((listener) => listener());\n}\n\nfunction setActiveListDrag(next: ActiveListDrag | null) {\n activeListDrag = next;\n emitListDragChange();\n}\n\nfunction updateActiveListDrag(updater: (current: ActiveListDrag) => ActiveListDrag) {\n if (!activeListDrag) return;\n setActiveListDrag(updater(activeListDrag));\n}\n\nfunction useActiveListDrag() {\n const [snapshot, setSnapshot] = useState(activeListDrag);\n\n useEffect(() => {\n const listener = () => setSnapshot(activeListDrag);\n dragListeners.add(listener);\n return () => {\n dragListeners.delete(listener);\n };\n }, []);\n\n return snapshot;\n}\n\nfunction getOutsideDropTarget(\n sourceEntry: ListRegistryEntry | undefined,\n clientY: number\n): ActiveListDragTarget | null {\n if (!sourceEntry) return null;\n\n const fallbackListId = sourceEntry.dropOutsideListId;\n const sourceRect = sourceEntry.root?.getBoundingClientRect();\n const isBeforeSource = sourceRect ? clientY < sourceRect.top + sourceRect.height / 2 : false;\n const directionalListId = isBeforeSource\n ? sourceEntry.dropOutsideBeforeListId\n : sourceEntry.dropOutsideAfterListId;\n\n if (directionalListId) {\n return { listId: directionalListId, position: \"inside\" };\n }\n\n if (!fallbackListId) return null;\n return { listId: fallbackListId, position: \"inside\" };\n}\n\nfunction getListEdgeDropTarget(\n targetRoot: HTMLElement,\n targetListId: string,\n drag: ActiveListDrag,\n clientY: number\n): ActiveListDragTarget | null {\n const itemElements = Array.from(\n targetRoot.querySelectorAll<HTMLElement>(\"[data-list-dnd-item-value]\")\n ).filter((element) => {\n const itemValue = element.dataset.listDndItemValue;\n return itemValue && !(targetListId === drag.sourceListId && itemValue === drag.item.value);\n });\n\n if (itemElements.length === 0) {\n return { listId: targetListId, position: \"inside\" };\n }\n\n for (const element of itemElements) {\n const itemValue = element.dataset.listDndItemValue;\n const rect = element.getBoundingClientRect();\n\n if (clientY < rect.top + rect.height / 2) {\n return itemValue ? { listId: targetListId, itemValue, position: \"before\" } : null;\n }\n }\n\n const lastElement = itemElements[itemElements.length - 1];\n const lastItemValue = lastElement.dataset.listDndItemValue;\n return lastItemValue\n ? { listId: targetListId, itemValue: lastItemValue, position: \"after\" }\n : null;\n}\n\nfunction getOverlappedListRoot(\n drag: ActiveListDrag,\n clientX: number,\n clientY: number\n) {\n const ghostRect = {\n left: clientX + DRAG_GHOST_OFFSET,\n top: clientY + DRAG_GHOST_OFFSET,\n right: clientX + DRAG_GHOST_OFFSET + drag.width,\n bottom: clientY + DRAG_GHOST_OFFSET + drag.height\n };\n let bestEntry: ListRegistryEntry | null = null;\n let bestOverlap = 0;\n\n for (const entry of listRegistry.values()) {\n const root = entry.root;\n if (entry.dragGroup !== drag.dragGroup || !root) continue;\n\n const rect = root.getBoundingClientRect();\n const overlapWidth = Math.min(ghostRect.right, rect.right) - Math.max(ghostRect.left, rect.left);\n const overlapHeight = Math.min(ghostRect.bottom, rect.bottom) - Math.max(ghostRect.top, rect.top);\n if (overlapWidth <= 0 || overlapHeight <= 0) continue;\n\n const overlap = overlapWidth * overlapHeight;\n if (!bestEntry || overlap > bestOverlap) {\n bestEntry = entry;\n bestOverlap = overlap;\n }\n }\n\n if (!bestEntry || !bestEntry.root) return null;\n\n return {\n root: bestEntry.root,\n listId: bestEntry.listId\n };\n}\n\nexport function List({\n items,\n title,\n showTitle = true,\n collapsible = false,\n collapsed,\n defaultCollapsed = false,\n onCollapsedChange,\n emptyLabel = \"No items\",\n selectable = false,\n selectedValue,\n defaultSelectedValue = null,\n onSelectedValueChange,\n fullWidthBackgroup = false,\n spacing = \"sm\",\n titleHover = false,\n ariaLabel,\n headerProps,\n listProps,\n itemClassName,\n draggable = false,\n dragGroup = DEFAULT_DRAG_GROUP,\n listId,\n isItemDraggable,\n onItemDrop,\n dragGhost,\n dropOutsideListId,\n dropOutsideBeforeListId,\n dropOutsideAfterListId,\n className,\n ...props\n}: ListProps) {\n const id = useId();\n const resolvedListId = listId ?? id;\n const contentId = `${id}-content`;\n const activeDrag = useActiveListDrag();\n const rootRef = useRef<HTMLDivElement>(null);\n const suppressItemClickRef = useRef(false);\n const [isCollapsed, setIsCollapsed] = useControlledState(\n collapsed,\n defaultCollapsed,\n onCollapsedChange\n );\n const [currentSelectedValue, setCurrentSelectedValue] = useControlledState(\n selectedValue,\n defaultSelectedValue,\n (nextValue) => {\n const selectedItem = items.find((item) => item.value === nextValue);\n if (selectedItem && nextValue !== null) {\n onSelectedValueChange?.(nextValue, selectedItem);\n }\n }\n );\n const hasTitle = showTitle && title !== undefined && title !== null;\n const canToggle = hasTitle && collapsible;\n\n const rootClass = [\n styles.root,\n styles[`spacing-${spacing}`],\n isCollapsed ? styles.collapsed : null,\n hasTitle ? null : styles.ungrouped,\n fullWidthBackgroup ? styles.fullWidthBackgroup : null,\n titleHover ? null : styles.noTitleHover,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const headerClass = [styles.header, canToggle ? styles.toggleHeader : null, headerProps?.className]\n .filter(Boolean)\n .join(\" \");\n const listClass = [styles.list, listProps?.className].filter(Boolean).join(\" \");\n\n const toggleCollapsed = () => setIsCollapsed(!isCollapsed);\n const canDragItem = (item: ListItem) =>\n draggable && !item.disabled && (isItemDraggable ? isItemDraggable(item) : true);\n\n useEffect(() => {\n if (!draggable) {\n listRegistry.delete(resolvedListId);\n return;\n }\n\n listRegistry.set(resolvedListId, {\n listId: resolvedListId,\n dragGroup,\n items,\n onItemDrop,\n dropOutsideListId,\n dropOutsideBeforeListId,\n dropOutsideAfterListId,\n root: rootRef.current\n });\n\n return () => {\n listRegistry.delete(resolvedListId);\n };\n }, [\n dragGroup,\n draggable,\n dropOutsideAfterListId,\n dropOutsideBeforeListId,\n dropOutsideListId,\n items,\n onItemDrop,\n resolvedListId\n ]);\n\n useEffect(() => {\n if (!activeDrag || activeDrag.sourceListId !== resolvedListId) return;\n\n const updateTarget = (clientX: number, clientY: number) => {\n const drag = activeListDrag;\n if (!drag) return;\n\n const distance = Math.hypot(clientX - drag.startClientX, clientY - drag.startClientY);\n if (!drag.moved && distance < DRAG_START_DISTANCE) {\n updateActiveListDrag((current) => ({ ...current, currentX: clientX, currentY: clientY }));\n return;\n }\n if (!drag.moved) document.body.style.cursor = \"grabbing\";\n\n const target = document.elementFromPoint(clientX, clientY) as HTMLElement | null;\n const pointedRoot = target?.closest<HTMLElement>(\"[data-list-dnd-root='true']\");\n const pointedListId = pointedRoot?.dataset.listId;\n const pointedDragGroup = pointedRoot?.dataset.listDndGroup;\n const overlappedRoot = !pointedRoot || !pointedListId || pointedDragGroup !== drag.dragGroup\n ? getOverlappedListRoot(drag, clientX, clientY)\n : null;\n const targetRoot = pointedDragGroup === drag.dragGroup ? pointedRoot : overlappedRoot?.root;\n const targetListId = pointedDragGroup === drag.dragGroup ? pointedListId : overlappedRoot?.listId;\n const targetDragGroup = targetRoot?.dataset.listDndGroup;\n\n if (!targetRoot || !targetListId || targetDragGroup !== drag.dragGroup) {\n const sourceEntry = listRegistry.get(drag.sourceListId);\n updateActiveListDrag((current) => ({\n ...current,\n currentX: clientX,\n currentY: clientY,\n moved: true,\n target: getOutsideDropTarget(sourceEntry, clientY)\n }));\n return;\n }\n\n const targetItemElement = target?.closest<HTMLElement>(\"[data-list-dnd-item-value]\");\n if (targetItemElement && targetRoot.contains(targetItemElement)) {\n const itemValue = targetItemElement.dataset.listDndItemValue;\n if (itemValue && !(targetListId === drag.sourceListId && itemValue === drag.item.value)) {\n const rect = targetItemElement.getBoundingClientRect();\n const position: ListDropPosition = clientY < rect.top + rect.height / 2 ? \"before\" : \"after\";\n updateActiveListDrag((current) => ({\n ...current,\n currentX: clientX,\n currentY: clientY,\n moved: true,\n target: { listId: targetListId, itemValue, position }\n }));\n return;\n }\n }\n\n const listEdgeTarget = getListEdgeDropTarget(targetRoot, targetListId, drag, clientY);\n if (listEdgeTarget) {\n updateActiveListDrag((current) => ({\n ...current,\n currentX: clientX,\n currentY: clientY,\n moved: true,\n target: listEdgeTarget\n }));\n return;\n }\n\n const sourceEntry = listRegistry.get(drag.sourceListId);\n if (\n targetListId === drag.sourceListId\n && (sourceEntry?.dropOutsideListId\n || sourceEntry?.dropOutsideBeforeListId\n || sourceEntry?.dropOutsideAfterListId)\n ) {\n updateActiveListDrag((current) => ({\n ...current,\n currentX: clientX,\n currentY: clientY,\n moved: true,\n target: getOutsideDropTarget(sourceEntry, clientY)\n }));\n return;\n }\n\n updateActiveListDrag((current) => ({\n ...current,\n currentX: clientX,\n currentY: clientY,\n moved: true,\n target: { listId: targetListId, position: \"inside\" }\n }));\n };\n\n const onPointerMove = (event: PointerEvent) => {\n const drag = activeListDrag;\n if (!drag || event.pointerId !== drag.pointerId) return;\n event.preventDefault();\n updateTarget(event.clientX, event.clientY);\n };\n\n const onPointerUp = (event: PointerEvent) => {\n const drag = activeListDrag;\n if (!drag || event.pointerId !== drag.pointerId) return;\n if (drag.moved) event.preventDefault();\n suppressItemClickRef.current = drag.moved;\n\n if (drag.moved && drag.target) {\n const targetEntry = listRegistry.get(drag.target.listId);\n const sourceEntry = listRegistry.get(drag.sourceListId);\n const targetItem = drag.target.itemValue\n ? targetEntry?.items.find((item) => item.value === drag.target?.itemValue)\n : undefined;\n const handler = targetEntry?.onItemDrop ?? sourceEntry?.onItemDrop;\n\n handler?.({\n item: drag.item,\n sourceListId: drag.sourceListId,\n targetListId: drag.target.listId,\n targetItem,\n position: drag.target.position\n });\n }\n\n setActiveListDrag(null);\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n };\n\n document.body.style.userSelect = \"none\";\n document.addEventListener(\"pointermove\", onPointerMove, { passive: false });\n document.addEventListener(\"pointerup\", onPointerUp, { passive: false });\n document.addEventListener(\"pointercancel\", onPointerUp, { passive: false });\n\n return () => {\n document.removeEventListener(\"pointermove\", onPointerMove);\n document.removeEventListener(\"pointerup\", onPointerUp);\n document.removeEventListener(\"pointercancel\", onPointerUp);\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n };\n }, [activeDrag?.pointerId, activeDrag?.sourceListId, resolvedListId]);\n\n const startItemDrag = (event: ReactPointerEvent<HTMLElement>, item: ListItem) => {\n if (!canDragItem(item) || event.button !== 0) return;\n\n const rect = event.currentTarget.getBoundingClientRect();\n try {\n event.currentTarget.setPointerCapture(event.pointerId);\n } catch {\n // Document listeners still handle the drag if capture is unavailable.\n }\n\n setActiveListDrag({\n item,\n sourceListId: resolvedListId,\n dragGroup,\n pointerId: event.pointerId,\n startClientX: event.clientX,\n startClientY: event.clientY,\n currentX: event.clientX,\n currentY: event.clientY,\n width: rect.width,\n height: rect.height,\n moved: false,\n target: null\n });\n };\n\n const renderItemContent = (item: ListItem) => (\n <>\n {item.icon ? <span className={styles.icon}>{item.icon}</span> : null}\n <span className={styles.itemText}>\n <span className={styles.label}>{item.label}</span>\n {item.description ? <span className={styles.description}>{item.description}</span> : null}\n </span>\n {item.meta ? <span className={styles.meta}>{item.meta}</span> : null}\n </>\n );\n\n const listDropTarget = activeDrag?.moved && activeDrag.target?.listId === resolvedListId\n ? activeDrag.target\n : null;\n const showListDropIndicator = !!listDropTarget && !listDropTarget.itemValue;\n const hideEmptyLabel = items.length === 0 && showListDropIndicator;\n const showDragGhost = !!activeDrag && activeDrag.moved && activeDrag.sourceListId === resolvedListId;\n\n return (\n <div\n {...props}\n ref={rootRef}\n className={rootClass}\n data-list-dnd-root={draggable ? \"true\" : undefined}\n data-list-id={draggable ? resolvedListId : undefined}\n data-list-dnd-group={draggable ? dragGroup : undefined}\n >\n {hasTitle ? (\n canToggle ? (\n <button\n {...headerProps}\n type=\"button\"\n className={headerClass}\n aria-expanded={!isCollapsed}\n aria-controls={contentId}\n onClick={(event) => {\n headerProps?.onClick?.(event);\n if (!event.defaultPrevented) toggleCollapsed();\n }}\n >\n <span className={styles.title}>{title}</span>\n <span className={styles.indicator}><ChevronIcon /></span>\n </button>\n ) : (\n <div className={styles.header}>\n <span className={styles.title}>{title}</span>\n </div>\n )\n ) : null}\n\n <div\n id={contentId}\n className={styles.body}\n aria-hidden={isCollapsed || undefined}\n >\n <ul\n {...listProps}\n className={listClass}\n aria-label={!hasTitle ? ariaLabel : undefined}\n >\n {items.length > 0 ? (\n items.map((item) => {\n const selected = item.active || (selectable && currentSelectedValue === item.value);\n const itemIsDraggable = canDragItem(item);\n const itemDropTarget = listDropTarget?.itemValue === item.value ? listDropTarget : null;\n const itemIsDragging = activeDrag?.sourceListId === resolvedListId && activeDrag.item.value === item.value && activeDrag.moved;\n const itemClass = [\n styles.item,\n selected ? styles.active : null,\n item.disabled ? styles.disabled : null,\n itemIsDraggable ? styles.draggableItem : null,\n itemIsDragging ? styles.draggingItem : null,\n itemClassName,\n item.className,\n item.itemProps?.className\n ]\n .filter(Boolean)\n .join(\" \");\n const content = renderItemContent(item);\n const clickable = selectable || Boolean(item.onClick || item.buttonProps?.onClick);\n\n return (\n <li\n {...item.itemProps}\n key={item.value}\n className={itemClass}\n data-active={selected ? \"true\" : undefined}\n data-list-dnd-item-value={draggable ? item.value : undefined}\n >\n {itemDropTarget ? (\n <span\n className={[\n styles.dropIndicator,\n itemDropTarget.position === \"before\" ? styles.dropIndicatorBefore : styles.dropIndicatorAfter\n ].join(\" \")}\n />\n ) : null}\n {clickable ? (\n <button\n {...item.buttonProps}\n type=\"button\"\n className={[styles.itemButton, item.buttonProps?.className].filter(Boolean).join(\" \")}\n disabled={item.disabled || item.buttonProps?.disabled}\n onPointerDown={(event) => {\n item.buttonProps?.onPointerDown?.(event);\n if (!event.defaultPrevented) startItemDrag(event, item);\n }}\n onClick={(event) => {\n if (suppressItemClickRef.current) {\n suppressItemClickRef.current = false;\n event.preventDefault();\n return;\n }\n item.buttonProps?.onClick?.(event);\n if (!event.defaultPrevented && selectable) {\n setCurrentSelectedValue(item.value);\n }\n if (!event.defaultPrevented) item.onClick?.(event, item);\n }}\n >\n {content}\n </button>\n ) : (\n <div className={styles.itemSurface} onPointerDown={(event) => startItemDrag(event, item)}>\n {content}\n </div>\n )}\n </li>\n );\n })\n ) : hasTitle && !hideEmptyLabel ? (\n <li className={styles.empty}>{emptyLabel}</li>\n ) : null}\n {showListDropIndicator ? <li className={styles.listDropIndicator} aria-hidden=\"true\" /> : null}\n </ul>\n </div>\n {showDragGhost ? (\n <div\n className={styles.dragGhost}\n style={{\n left: activeDrag.currentX + DRAG_GHOST_OFFSET,\n top: activeDrag.currentY + DRAG_GHOST_OFFSET,\n width: activeDrag.width,\n height: activeDrag.height\n }}\n >\n {dragGhost ? dragGhost(activeDrag.item) : renderItemContent(activeDrag.item)}\n </div>\n ) : null}\n </div>\n );\n}\n\nList.displayName = \"List\";\n","import type { HTMLAttributes, InputHTMLAttributes, ReactNode } from \"react\";\nimport type { ColorVariant } from \"../types\";\nimport styles from \"./Markers.module.css\";\n\nconst CheckIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M20 6 9 17l-5-5\"/>\n </svg>\n);\n\n/* ── Checkbox ── */\n\nexport type MarkerVariant = ColorVariant;\n\nexport type CheckboxProps = Omit<InputHTMLAttributes<HTMLInputElement>, \"type\" | \"onChange\"> & {\n label?: ReactNode;\n variant?: MarkerVariant;\n checked?: boolean;\n defaultChecked?: boolean;\n indeterminate?: boolean;\n isInvalid?: boolean;\n onChange?: (checked: boolean) => void;\n};\n\nexport function Checkbox({\n label,\n variant = \"blue3\",\n checked,\n defaultChecked,\n indeterminate = false,\n isInvalid = false,\n disabled = false,\n onChange,\n className,\n ...props\n}: CheckboxProps) {\n const isChecked = checked ?? defaultChecked ?? false;\n\n const cls = [\n styles.checkbox,\n styles[variant],\n isChecked && !indeterminate ? styles.checked : null,\n indeterminate ? styles.indeterminate : null,\n isInvalid ? styles.invalid : null,\n disabled ? styles.disabled : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <label className={cls}>\n <input\n {...props}\n type=\"checkbox\"\n checked={isChecked}\n disabled={disabled}\n style={{ display: \"none\" }}\n onChange={(e) => onChange?.(e.currentTarget.checked)}\n />\n <span className={styles.checkboxBox}>\n {!indeterminate && <CheckIcon />}\n </span>\n {label}\n </label>\n );\n}\n\nCheckbox.displayName = \"Checkbox\";\n\n/* ── Radio ── */\n\nexport type RadioProps = Omit<InputHTMLAttributes<HTMLInputElement>, \"type\" | \"onChange\"> & {\n label?: ReactNode;\n variant?: MarkerVariant;\n checked?: boolean;\n isInvalid?: boolean;\n onChange?: (value: string) => void;\n};\n\nexport function Radio({\n label,\n variant = \"blue3\",\n checked = false,\n isInvalid = false,\n disabled = false,\n onChange,\n value,\n className,\n ...props\n}: RadioProps) {\n const cls = [\n styles.radio,\n styles[variant],\n checked ? styles.radioChecked : null,\n isInvalid ? styles.invalid : null,\n disabled ? styles.radioDisabled : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <label className={cls}>\n <input\n {...props}\n type=\"radio\"\n checked={checked}\n disabled={disabled}\n value={value}\n style={{ display: \"none\" }}\n onChange={(e) => onChange?.(e.currentTarget.value)}\n />\n <span className={styles.radioDot} />\n {label}\n </label>\n );\n}\n\nRadio.displayName = \"Radio\";\n\nexport type RadioGroupProps = HTMLAttributes<HTMLDivElement> & {\n children?: ReactNode;\n};\n\nexport function RadioGroup({ children, className, ...props }: RadioGroupProps) {\n const cls = [styles.radioGroup, className].filter(Boolean).join(\" \");\n return (\n <div {...props} className={cls} role=\"radiogroup\">\n {children}\n </div>\n );\n}\n\nRadioGroup.displayName = \"RadioGroup\";\n\n/* ── Switch ── */\n\nexport type SwitchProps = Omit<InputHTMLAttributes<HTMLInputElement>, \"type\" | \"onChange\"> & {\n label?: ReactNode;\n variant?: MarkerVariant;\n checked?: boolean;\n defaultChecked?: boolean;\n thinTrack?: boolean;\n isInvalid?: boolean;\n onChange?: (checked: boolean) => void;\n};\n\nexport function Switch({\n label,\n variant = \"blue3\",\n checked,\n defaultChecked,\n disabled = false,\n thinTrack = false,\n isInvalid = false,\n onChange,\n className,\n ...props\n}: SwitchProps) {\n const isOn = checked ?? defaultChecked ?? false;\n\n const cls = [\n styles.switchWrap,\n styles[variant],\n isOn ? styles.switchOn : null,\n thinTrack ? styles.switchThinTrack : null,\n isInvalid ? styles.invalid : null,\n disabled ? styles.switchDisabled : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <label className={cls}>\n <input\n {...props}\n type=\"checkbox\"\n checked={isOn}\n disabled={disabled}\n style={{ display: \"none\" }}\n onChange={(e) => onChange?.(e.currentTarget.checked)}\n />\n <span className={styles.switchTrack} />\n {label}\n </label>\n );\n}\n\nSwitch.displayName = \"Switch\";\n","import { useId, useState } from \"react\";\nimport type { ButtonHTMLAttributes, HTMLAttributes, MouseEvent, ReactNode } from \"react\";\nimport styles from \"./Menu.module.css\";\n\nexport type MenuSubmenuMode = \"external\" | \"internal\";\nexport type MenuSubmenuTrigger = \"hover\" | \"click\";\n\nexport type MenuProps = HTMLAttributes<HTMLDivElement> & {\n shadow?: boolean;\n spacing?: \"sm\" | \"md\" | \"lg\";\n children?: ReactNode;\n};\n\nexport function Menu({ shadow = true, spacing = \"sm\", children, className, ...props }: MenuProps) {\n const cls = [styles.menu, styles[`spacing-${spacing}`], shadow ? styles.shadow : null, className].filter(Boolean).join(\" \");\n return (\n <div {...props} className={cls} role=\"menu\">\n {children}\n </div>\n );\n}\n\nMenu.displayName = \"Menu\";\n\nexport type MenuGroupProps = HTMLAttributes<HTMLDivElement> & {\n label: ReactNode;\n children?: ReactNode;\n labelProps?: HTMLAttributes<HTMLDivElement>;\n};\n\nexport function MenuGroup({\n label,\n children,\n labelProps,\n className,\n ...props\n}: MenuGroupProps) {\n const generatedId = useId();\n const labelId = labelProps?.id ?? `${generatedId}-label`;\n\n return (\n <div\n {...props}\n className={[styles.group, className].filter(Boolean).join(\" \")}\n role=\"group\"\n aria-labelledby={labelId}\n >\n <div\n {...labelProps}\n id={labelId}\n className={[styles.groupLabel, labelProps?.className].filter(Boolean).join(\" \")}\n >\n {label}\n </div>\n <div className={styles.groupItems}>\n {children}\n </div>\n </div>\n );\n}\n\nMenuGroup.displayName = \"MenuGroup\";\n\nexport type MenuItemProps = ButtonHTMLAttributes<HTMLButtonElement> & {\n icon?: ReactNode;\n kbd?: string;\n active?: boolean;\n danger?: boolean;\n submenu?: ReactNode;\n submenuMode?: MenuSubmenuMode;\n submenuTrigger?: MenuSubmenuTrigger;\n children?: ReactNode;\n};\n\nconst ChevronRightIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"12\" height=\"12\">\n <path d=\"m9 18 6-6-6-6\"/>\n </svg>\n);\n\nexport function MenuItem({\n icon,\n kbd,\n active = false,\n danger = false,\n submenu,\n submenuMode = \"external\",\n submenuTrigger = \"hover\",\n disabled = false,\n children,\n className,\n onClick,\n ...props\n}: MenuItemProps) {\n const [submenuOpen, setSubmenuOpen] = useState(false);\n const hasSubmenu = Boolean(submenu) && !disabled;\n const opensOnHover = hasSubmenu && submenuTrigger === \"hover\";\n\n const cls = [\n styles.item,\n active ? styles.active : null,\n danger ? styles.danger : null,\n submenuOpen ? styles.submenuOpenItem : null,\n disabled ? styles.disabled : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n if (hasSubmenu && submenuTrigger === \"click\") {\n event.preventDefault();\n setSubmenuOpen((open) => !open);\n }\n\n onClick?.(event);\n };\n\n const itemEl = (\n <button\n {...props}\n type=\"button\"\n className={cls}\n disabled={disabled}\n role=\"menuitem\"\n aria-haspopup={hasSubmenu ? \"menu\" : undefined}\n aria-expanded={hasSubmenu ? submenuOpen : undefined}\n onClick={handleClick}\n >\n {icon}\n <span className={styles.itemContent}>{children}</span>\n {kbd && <span className={styles.kbd}>{kbd}</span>}\n {hasSubmenu && <span className={styles.submenuIndicator}><ChevronRightIcon /></span>}\n </button>\n );\n\n if (!hasSubmenu) return itemEl;\n\n return (\n <div\n className={[styles.itemWrap, styles[`submenu-${submenuMode}`]].filter(Boolean).join(\" \")}\n role=\"none\"\n onMouseEnter={opensOnHover ? () => setSubmenuOpen(true) : undefined}\n onMouseLeave={opensOnHover ? () => setSubmenuOpen(false) : undefined}\n >\n {itemEl}\n {submenuOpen && (\n <div className={[styles.submenuPanel, styles[`submenuPanel-${submenuMode}`]].filter(Boolean).join(\" \")} role=\"menu\">\n {submenu}\n </div>\n )}\n </div>\n );\n}\n\nMenuItem.displayName = \"MenuItem\";\n","import {\n useEffect,\n useRef,\n useState,\n forwardRef,\n useImperativeHandle\n} from \"react\";\nimport type {\n ButtonHTMLAttributes,\n CSSProperties,\n HTMLAttributes,\n MouseEvent,\n PointerEvent as ReactPointerEvent,\n ReactNode\n} from \"react\";\nimport styles from \"./Modal.module.css\";\n\nexport type ModalOverlay = \"none\" | \"blur\" | \"dim\";\n\nconst XIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"11\" height=\"11\">\n <path d=\"M18 6 6 18M6 6l12 12\"/>\n </svg>\n);\n\nexport type ModalProps = {\n open: boolean;\n title?: ReactNode;\n subtitle?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n overlay?: ModalOverlay;\n shadow?: boolean;\n draggable?: boolean;\n closeOnBackdrop?: boolean;\n showCloseButton?: boolean;\n backdropProps?: HTMLAttributes<HTMLDivElement>;\n modalProps?: HTMLAttributes<HTMLDivElement>;\n headerProps?: HTMLAttributes<HTMLElement>;\n bodyProps?: HTMLAttributes<HTMLElement>;\n footerProps?: HTMLAttributes<HTMLElement>;\n closeButtonProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n onOpenChange?: (open: boolean) => void;\n onClose?: () => void;\n};\n\nexport const Modal = forwardRef<HTMLDivElement, ModalProps>(\n (\n {\n open,\n title,\n subtitle,\n children,\n footer,\n overlay = \"blur\",\n shadow = true,\n draggable = false,\n closeOnBackdrop = true,\n showCloseButton = true,\n backdropProps,\n modalProps,\n headerProps,\n bodyProps,\n footerProps,\n closeButtonProps,\n onOpenChange,\n onClose\n },\n ref\n ) => {\n const innerRef = useRef<HTMLDivElement>(null);\n const dragRef = useRef({\n active: false,\n pointerId: -1,\n startX: 0,\n startY: 0,\n originX: 0,\n originY: 0\n });\n const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 });\n const [isDragging, setIsDragging] = useState(false);\n\n useImperativeHandle(ref, () => innerRef.current as HTMLDivElement);\n\n useEffect(() => {\n if (!open) return;\n\n setDragOffset({ x: 0, y: 0 });\n setIsDragging(false);\n\n const handleKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") requestClose();\n };\n\n document.addEventListener(\"keydown\", handleKey);\n return () => document.removeEventListener(\"keydown\", handleKey);\n }, [open]);\n\n const requestClose = () => {\n onOpenChange?.(false);\n onClose?.();\n };\n\n const handleBackdropClick = (event: MouseEvent<HTMLDivElement>) => {\n if (closeOnBackdrop && event.target === event.currentTarget) {\n requestClose();\n }\n };\n\n const shouldSkipDrag = (target: EventTarget | null) => {\n return target instanceof HTMLElement\n ? Boolean(target.closest(\"button, a, input, textarea, select, [data-no-modal-drag]\"))\n : false;\n };\n\n const handleHeaderPointerDown = (event: ReactPointerEvent<HTMLElement>) => {\n headerProps?.onPointerDown?.(event);\n if (event.defaultPrevented || !draggable || event.button !== 0 || shouldSkipDrag(event.target)) return;\n\n dragRef.current = {\n active: true,\n pointerId: event.pointerId,\n startX: event.clientX,\n startY: event.clientY,\n originX: dragOffset.x,\n originY: dragOffset.y\n };\n setIsDragging(true);\n event.currentTarget.setPointerCapture(event.pointerId);\n };\n\n const handleHeaderPointerMove = (event: ReactPointerEvent<HTMLElement>) => {\n headerProps?.onPointerMove?.(event);\n const drag = dragRef.current;\n if (!drag.active || drag.pointerId !== event.pointerId) return;\n\n setDragOffset({\n x: drag.originX + event.clientX - drag.startX,\n y: drag.originY + event.clientY - drag.startY\n });\n };\n\n const stopDragging = (event: ReactPointerEvent<HTMLElement>) => {\n const drag = dragRef.current;\n if (drag.pointerId === event.pointerId && event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n\n dragRef.current.active = false;\n setIsDragging(false);\n };\n\n const handleHeaderPointerUp = (event: ReactPointerEvent<HTMLElement>) => {\n headerProps?.onPointerUp?.(event);\n stopDragging(event);\n };\n\n const handleHeaderPointerCancel = (event: ReactPointerEvent<HTMLElement>) => {\n headerProps?.onPointerCancel?.(event);\n stopDragging(event);\n };\n\n if (!open) return null;\n\n const backdropClass = [styles.backdrop, styles[`overlay-${overlay}`], backdropProps?.className]\n .filter(Boolean)\n .join(\" \");\n\n const modalClass = [styles.modal, shadow ? styles.shadow : null, modalProps?.className]\n .filter(Boolean)\n .join(\" \");\n\n const modalStyle = {\n ...modalProps?.style,\n \"--modal-drag-x\": `${dragOffset.x}px`,\n \"--modal-drag-y\": `${dragOffset.y}px`\n } as CSSProperties;\n\n return (\n <div\n {...backdropProps}\n className={backdropClass}\n onClick={handleBackdropClick}\n role=\"presentation\"\n >\n <div\n ref={innerRef}\n {...modalProps}\n className={modalClass}\n style={modalStyle}\n role=\"dialog\"\n aria-modal=\"true\"\n >\n {(title || showCloseButton) && (\n <header\n {...headerProps}\n className={[\n styles.header,\n draggable ? styles.draggableHeader : null,\n isDragging ? styles.draggingHeader : null,\n headerProps?.className\n ].filter(Boolean).join(\" \")}\n onPointerDown={handleHeaderPointerDown}\n onPointerMove={handleHeaderPointerMove}\n onPointerUp={handleHeaderPointerUp}\n onPointerCancel={handleHeaderPointerCancel}\n >\n <div className={styles.titleBlock}>\n {title ? <div className={styles.title}>{title}</div> : null}\n {subtitle ? <div className={styles.subtitle}>{subtitle}</div> : null}\n </div>\n {showCloseButton && (\n <button\n type=\"button\"\n aria-label=\"Close\"\n className={styles.closeBtn}\n onClick={requestClose}\n {...closeButtonProps}\n >\n {closeButtonProps?.children ?? <XIcon />}\n </button>\n )}\n </header>\n )}\n <section\n {...bodyProps}\n className={[styles.body, \"sb\", bodyProps?.className].filter(Boolean).join(\" \")}\n >\n {children}\n </section>\n {footer && (\n <footer\n {...footerProps}\n className={[styles.footer, footerProps?.className].filter(Boolean).join(\" \")}\n >\n {footer}\n </footer>\n )}\n </div>\n </div>\n );\n }\n);\n\nModal.displayName = \"Modal\";\n","import {\n useState,\n useRef,\n useEffect,\n useLayoutEffect,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode\n} from \"react\";\nimport styles from \"./Popover.module.css\";\n\nconst XIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n </svg>\n);\n\nexport type PopoverSide = \"bottom-start\" | \"bottom-end\" | \"top-start\" | \"top-end\";\nconst POPOVER_GAP = 8;\nconst VIEWPORT_PADDING = 8;\n\nexport type PopoverProps = {\n open?: boolean;\n defaultOpen?: boolean;\n title?: ReactNode;\n children?: ReactNode;\n trigger?: ReactNode;\n side?: PopoverSide;\n shadow?: boolean;\n openOnHover?: boolean;\n showCloseButton?: boolean;\n onOpenChange?: (open: boolean) => void;\n popProps?: HTMLAttributes<HTMLDivElement>;\n};\n\nexport function Popover({\n open: openProp,\n defaultOpen = false,\n title,\n children,\n trigger,\n side = \"bottom-start\",\n shadow = true,\n openOnHover = false,\n showCloseButton = true,\n onOpenChange,\n popProps\n}: PopoverProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const [renderedSide, setRenderedSide] = useState<PopoverSide>(side);\n const [popStyle, setPopStyle] = useState<CSSProperties | undefined>();\n const isControlled = openProp !== undefined;\n const isOpen = isControlled ? openProp : internalOpen;\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const popRef = useRef<HTMLDivElement>(null);\n\n function setOpen(value: boolean) {\n if (!isControlled) setInternalOpen(value);\n onOpenChange?.(value);\n }\n\n useEffect(() => {\n function handleClick(e: MouseEvent) {\n if (wrapperRef.current && !wrapperRef.current.contains(e.target as Node)) {\n setOpen(false);\n }\n }\n if (isOpen) document.addEventListener(\"mousedown\", handleClick);\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, [isOpen]);\n\n useEffect(() => {\n if (!isOpen) {\n setRenderedSide(side);\n setPopStyle(undefined);\n }\n }, [isOpen, side]);\n\n useLayoutEffect(() => {\n if (!isOpen) return;\n\n const updatePosition = () => {\n const wrapper = wrapperRef.current;\n const pop = popRef.current;\n if (!wrapper || !pop) return;\n\n const wrapperRect = wrapper.getBoundingClientRect();\n const popWidth = pop.offsetWidth;\n const popHeight = pop.offsetHeight;\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n const preferredVertical = side.startsWith(\"top\") ? \"top\" : \"bottom\";\n const alternateVertical = preferredVertical === \"top\" ? \"bottom\" : \"top\";\n const preferredAlign = side.endsWith(\"end\") ? \"end\" : \"start\";\n const alternateAlign = preferredAlign === \"end\" ? \"start\" : \"end\";\n\n const available = {\n top: wrapperRect.top - VIEWPORT_PADDING,\n bottom: viewportHeight - wrapperRect.bottom - VIEWPORT_PADDING\n };\n\n const requiredHeight = popHeight + POPOVER_GAP;\n const vertical = available[preferredVertical] >= requiredHeight || available[preferredVertical] >= available[alternateVertical]\n ? preferredVertical\n : alternateVertical;\n\n const getLeft = (align: \"start\" | \"end\") => align === \"end\"\n ? wrapperRect.right - popWidth\n : wrapperRect.left;\n\n const fitsHorizontally = (align: \"start\" | \"end\") => {\n const left = getLeft(align);\n return left >= VIEWPORT_PADDING && left + popWidth <= viewportWidth - VIEWPORT_PADDING;\n };\n\n const preferredLeft = getLeft(preferredAlign);\n const alternateLeft = getLeft(alternateAlign);\n const preferredOverflow = Math.max(VIEWPORT_PADDING - preferredLeft, 0)\n + Math.max(preferredLeft + popWidth - (viewportWidth - VIEWPORT_PADDING), 0);\n const alternateOverflow = Math.max(VIEWPORT_PADDING - alternateLeft, 0)\n + Math.max(alternateLeft + popWidth - (viewportWidth - VIEWPORT_PADDING), 0);\n\n const align = fitsHorizontally(preferredAlign) || preferredOverflow <= alternateOverflow\n ? preferredAlign\n : alternateAlign;\n\n const left = getLeft(align);\n const leftOverflow = VIEWPORT_PADDING - left;\n const rightOverflow = left + popWidth - (viewportWidth - VIEWPORT_PADDING);\n let shiftX = 0;\n\n if (leftOverflow > 0) shiftX = leftOverflow;\n if (rightOverflow > 0) shiftX = -rightOverflow;\n\n setRenderedSide(`${vertical}-${align}` as PopoverSide);\n setPopStyle({ \"--popover-shift-x\": `${shiftX}px` } as CSSProperties);\n };\n\n updatePosition();\n window.addEventListener(\"resize\", updatePosition);\n window.addEventListener(\"scroll\", updatePosition, true);\n return () => {\n window.removeEventListener(\"resize\", updatePosition);\n window.removeEventListener(\"scroll\", updatePosition, true);\n };\n }, [children, isOpen, side, title]);\n\n const isTop = renderedSide.startsWith(\"top\");\n const isEnd = renderedSide.endsWith(\"end\");\n\n const popCls = [\n styles.pop,\n shadow ? styles.shadow : null,\n isEnd ? styles.sideRight : null,\n isTop ? styles.sideTop : null,\n popProps?.className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const mergedPopStyle = {\n ...popStyle,\n ...popProps?.style\n };\n\n return (\n <div\n ref={wrapperRef}\n className={styles.wrapper}\n onMouseEnter={openOnHover ? () => setOpen(true) : undefined}\n onMouseLeave={openOnHover ? () => setOpen(false) : undefined}\n >\n {trigger && (\n <div onClick={() => setOpen(openOnHover ? true : !isOpen)} style={{ display: \"inline-flex\" }}>\n {trigger}\n </div>\n )}\n {isOpen && (\n <div {...popProps} ref={popRef} className={popCls} style={mergedPopStyle}>\n <span className={styles.arrow} />\n {(title || showCloseButton) && (\n <div className={styles.head}>\n {title && <span className={styles.title}>{title}</span>}\n {showCloseButton && (\n <button\n type=\"button\"\n className={styles.closeBtn}\n aria-label=\"Close\"\n onClick={() => setOpen(false)}\n >\n <XIcon />\n </button>\n )}\n </div>\n )}\n <div className={styles.body}>{children}</div>\n </div>\n )}\n </div>\n );\n}\n\nPopover.displayName = \"Popover\";\n","import type { CSSProperties, HTMLAttributes, ReactNode } from \"react\";\nimport type { ColorVariant } from \"../types\";\nimport styles from \"./Progress.module.css\";\n\nexport type ProgressVariant = ColorVariant;\nexport type ProgressSize = \"sm\" | \"md\" | \"lg\";\nexport type ProgressShape = \"bar\" | \"circle\";\n\nexport type ProgressProps = HTMLAttributes<HTMLDivElement> & {\n value?: number;\n max?: number;\n variant?: ProgressVariant;\n size?: ProgressSize;\n shape?: ProgressShape;\n label?: ReactNode;\n valueLabel?: string;\n showValue?: boolean;\n indeterminate?: boolean;\n};\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.min(Math.max(value, min), max);\n}\n\nexport function Progress({\n value,\n max = 100,\n variant = \"blue2\",\n size = \"md\",\n shape = \"bar\",\n label,\n valueLabel,\n showValue,\n indeterminate = false,\n className,\n ...props\n}: ProgressProps) {\n const safeMax = max > 0 ? max : 100;\n const isIndeterminate = indeterminate || typeof value !== \"number\";\n const safeValue = typeof value === \"number\" ? clamp(value, 0, safeMax) : 0;\n const percent = Math.round((safeValue / safeMax) * 100);\n const shouldShowValue = showValue ?? shape === \"circle\";\n\n const cls = [\n styles.progress,\n styles[variant],\n shape === \"circle\" ? styles.circular : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const progressbarProps = {\n role: \"progressbar\",\n \"aria-valuemin\": isIndeterminate ? undefined : 0,\n \"aria-valuemax\": isIndeterminate ? undefined : safeMax,\n \"aria-valuenow\": isIndeterminate ? undefined : safeValue,\n \"aria-valuetext\": valueLabel\n };\n\n if (shape === \"circle\") {\n const circleClass = [\n styles.circle,\n styles[`circle-${size}`],\n isIndeterminate ? styles.indeterminateCircle : null\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div {...props} className={cls}>\n {label && <span className={styles.circleLabel}>{label}</span>}\n <div\n className={circleClass}\n style={{ \"--progress-percent\": `${percent}%` } as CSSProperties}\n {...progressbarProps}\n >\n {shouldShowValue && (\n <span className={styles.circleValue}>\n {valueLabel ?? (isIndeterminate ? \"Loading\" : `${percent}%`)}\n </span>\n )}\n </div>\n </div>\n );\n }\n\n const trackClass = [\n styles.track,\n styles[`bar-${size}`],\n isIndeterminate ? styles.indeterminate : null\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div {...props} className={cls}>\n {(label || shouldShowValue) && (\n <div className={styles.header}>\n {label && <span className={styles.label}>{label}</span>}\n {shouldShowValue && (\n <span className={styles.value}>\n {valueLabel ?? (isIndeterminate ? \"Loading\" : `${percent}%`)}\n </span>\n )}\n </div>\n )}\n <div className={trackClass} {...progressbarProps}>\n <span\n className={styles.fill}\n style={isIndeterminate ? undefined : { width: `${percent}%` }}\n />\n </div>\n </div>\n );\n}\n\nProgress.displayName = \"Progress\";\n","import { useLayoutEffect, useRef, useState } from \"react\";\nimport type { ButtonHTMLAttributes, CSSProperties, HTMLAttributes, ReactNode } from \"react\";\nimport styles from \"./PushButton.module.css\";\n\nexport type PushButtonGroupProps = HTMLAttributes<HTMLDivElement> & {\n gap?: \"sm\" | \"md\" | \"lg\";\n padding?: \"sm\" | \"md\" | \"lg\";\n background?: boolean;\n rounded?: boolean;\n width?: CSSProperties[\"width\"];\n children?: ReactNode;\n};\n\nexport function PushButtonGroup({\n gap = \"sm\",\n padding = \"sm\",\n background = true,\n rounded = false,\n width,\n children,\n className,\n ...props\n}: PushButtonGroupProps) {\n const groupRef = useRef<HTMLDivElement>(null);\n const [buttonWidth, setButtonWidth] = useState<number | undefined>();\n\n useLayoutEffect(() => {\n const group = groupRef.current;\n if (!group) return;\n\n const updateButtonWidth = () => {\n const buttons = Array.from(group.querySelectorAll<HTMLButtonElement>(\"button\"));\n if (buttons.length === 0) {\n setButtonWidth(undefined);\n return;\n }\n\n const nextWidth = Math.ceil(Math.max(...buttons.map((button) => {\n const buttonStyle = window.getComputedStyle(button);\n const paddingX = parseFloat(buttonStyle.paddingLeft) + parseFloat(buttonStyle.paddingRight);\n const contentWidth = button.querySelector<HTMLElement>(`.${styles.content}`)?.getBoundingClientRect().width ?? 0;\n const badge = button.querySelector<HTMLElement>(`.${styles.badge}`);\n const badgeWidth = badge?.getBoundingClientRect().width ?? 0;\n const badgeOffset = badge ? parseFloat(window.getComputedStyle(badge).right || \"0\") || parseFloat(window.getComputedStyle(badge).left || \"0\") || 0 : 0;\n const badgeGap = badge ? 6 : 0;\n const contentWidthWithPadding = contentWidth + paddingX;\n const contentWidthWithBadge = contentWidth + (badgeWidth + badgeOffset + badgeGap) * 2;\n\n return Math.max(contentWidthWithPadding, contentWidthWithBadge);\n })));\n setButtonWidth(nextWidth);\n };\n\n updateButtonWidth();\n\n if (typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver(updateButtonWidth);\n observer.observe(group);\n Array.from(group.children).forEach((child) => observer.observe(child));\n return () => observer.disconnect();\n }, [children]);\n\n const cls = [\n styles.group,\n styles[`gap-${gap}`],\n styles[`padding-${padding}`],\n background ? null : styles.noBackground,\n rounded ? styles.rounded : null,\n width !== undefined ? styles.fixedWidth : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const style = {\n ...props.style,\n ...(width !== undefined ? { width } : null),\n ...(buttonWidth !== undefined ? { \"--push-button-width\": `${buttonWidth}px` } : null)\n } as CSSProperties;\n\n return (\n <div {...props} ref={groupRef} className={cls} style={style} role=\"group\">\n {children}\n </div>\n );\n}\n\nPushButtonGroup.displayName = \"PushButtonGroup\";\n\nexport type PushButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {\n on?: boolean;\n icon?: ReactNode;\n badge?: ReactNode;\n badgePosition?: \"left\" | \"right\";\n children?: ReactNode;\n};\n\nexport function PushButton({\n on = false,\n icon,\n badge,\n badgePosition = \"right\",\n children,\n disabled = false,\n className,\n ...props\n}: PushButtonProps) {\n const cls = [\n styles.pb,\n on ? styles.on : null,\n disabled ? styles.disabled : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <button {...props} type=\"button\" className={cls} disabled={disabled}>\n <span className={styles.content}>\n {icon}\n {children}\n </span>\n {badge ? (\n <span className={[styles.badge, styles[`badge-${badgePosition}`]].filter(Boolean).join(\" \")}>\n {badge}\n </span>\n ) : null}\n </button>\n );\n}\n\nPushButton.displayName = \"PushButton\";\n","import {\n forwardRef,\n Fragment,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState\n} from \"react\";\nimport type {\n ButtonHTMLAttributes,\n CSSProperties,\n HTMLAttributes,\n KeyboardEvent,\n MouseEvent as ReactMouseEvent,\n ReactNode\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useControlledState } from \"../hooks\";\nimport styles from \"./Select.module.css\";\n\nconst ChevronIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"14\" height=\"14\">\n <path d=\"m6 9 6 6 6-6\"/>\n </svg>\n);\n\nconst XIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"12\" height=\"12\">\n <path d=\"M18 6 6 18M6 6l12 12\"/>\n </svg>\n);\n\nconst SearchIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"11\" cy=\"11\" r=\"7\"/>\n <path d=\"m20 20-3.5-3.5\"/>\n </svg>\n);\n\nconst CheckIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"10\" height=\"10\">\n <path d=\"M20 6 9 17l-5-5\"/>\n </svg>\n);\n\nexport type SelectOption<Value extends string = string> = {\n value: Value;\n label: ReactNode;\n meta?: string;\n disabled?: boolean;\n};\n\nexport type SelectValue<Value extends string = string> =\n | Value\n | Value[]\n | null;\n\nexport type SelectOptionsPosition = \"bottom\" | \"top\";\nexport type SelectOptionsAlign = \"left\" | \"center\" | \"right\";\n\nexport type SelectProps<Value extends string = string> = Omit<\n HTMLAttributes<HTMLDivElement>,\n \"defaultValue\" | \"onChange\"\n> & {\n label?: string;\n helpText?: ReactNode;\n options: SelectOption<Value>[];\n multiple?: boolean;\n searchable?: boolean;\n clearable?: boolean;\n disabled?: boolean;\n placeholder?: string;\n searchPlaceholder?: string;\n emptyLabel?: string;\n loadingLabel?: string;\n isLoading?: boolean;\n optionsPosition?: SelectOptionsPosition;\n optionsAlign?: SelectOptionsAlign;\n showSelectedCount?: boolean;\n showClearAll?: boolean;\n showSelectedValues?: boolean;\n closeOnSelect?: boolean;\n isInvalid?: boolean;\n filterOptions?: (\n options: SelectOption<Value>[],\n searchValue: string\n ) => SelectOption<Value>[];\n onSearchChange?: (searchValue: string) => void;\n value?: SelectValue<Value>;\n defaultValue?: SelectValue<Value>;\n onValueChange?: (\n value: SelectValue<Value>,\n selectedOptions: SelectOption<Value>[]\n ) => void;\n fieldProps?: HTMLAttributes<HTMLDivElement>;\n wrapperProps?: HTMLAttributes<HTMLDivElement>;\n selectProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n};\n\nconst defaultFilterOptions = <Value extends string>(\n options: SelectOption<Value>[],\n searchValue: string\n) => {\n const norm = searchValue.trim().toLowerCase();\n if (!norm) return options;\n return options.filter((o) =>\n String(o.label).toLowerCase().includes(norm)\n );\n};\n\nconst useSafeLayoutEffect =\n typeof window === \"undefined\" ? useEffect : useLayoutEffect;\n\nexport const Select = forwardRef<HTMLDivElement, SelectProps>(\n (\n {\n label,\n helpText,\n clearable = false,\n disabled = false,\n emptyLabel = \"No options found\",\n filterOptions = defaultFilterOptions,\n isLoading = false,\n loadingLabel = \"Loading...\",\n multiple = false,\n onSearchChange,\n options,\n optionsAlign = \"left\",\n optionsPosition = \"bottom\",\n placeholder = \"Select\",\n searchable = false,\n searchPlaceholder = \"Search...\",\n showSelectedCount = true,\n showClearAll = true,\n showSelectedValues = true,\n closeOnSelect,\n isInvalid = false,\n value,\n defaultValue = null,\n onValueChange,\n fieldProps,\n wrapperProps,\n selectProps,\n className,\n ...props\n },\n ref\n ) => {\n const [open, setOpen] = useState(false);\n const [searchValue, setSearchValue] = useState(\"\");\n const [portalNode, setPortalNode] = useState<HTMLElement | null>(null);\n const [popoverStyle, setPopoverStyle] = useState<CSSProperties>({});\n const rootRef = useRef<HTMLDivElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n\n const [selectedValue, setSelectedValue] = useControlledState(\n value as SelectValue,\n defaultValue as SelectValue,\n (nextValue) => {\n const selected = options.filter((o) =>\n Array.isArray(nextValue)\n ? nextValue.includes(o.value)\n : o.value === nextValue\n );\n onValueChange?.(nextValue, selected);\n }\n );\n\n const selectedValues = useMemo(\n () =>\n Array.isArray(selectedValue)\n ? selectedValue\n : selectedValue\n ? [selectedValue]\n : [],\n [selectedValue]\n );\n\n const selectedOptions = useMemo(\n () => options.filter((o) => selectedValues.includes(o.value)),\n [options, selectedValues]\n );\n\n const filteredOptions = useMemo(\n () => filterOptions(options, searchValue),\n [filterOptions, options, searchValue]\n );\n\n useEffect(() => {\n setPortalNode(document.body);\n }, []);\n\n const isOptionsTop = optionsPosition === \"top\";\n\n const updatePopoverPosition = useCallback(() => {\n const rect = rootRef.current?.getBoundingClientRect();\n if (!rect) return;\n\n const nextStyle: CSSProperties = {\n position: \"fixed\",\n left: rect.left,\n right: \"auto\",\n width: rect.width,\n zIndex: 110\n };\n\n if (isOptionsTop) {\n nextStyle.top = \"auto\";\n nextStyle.bottom = window.innerHeight - rect.top;\n } else {\n nextStyle.top = rect.bottom;\n nextStyle.bottom = \"auto\";\n }\n\n setPopoverStyle(nextStyle);\n }, [isOptionsTop]);\n\n useSafeLayoutEffect(() => {\n if (open) updatePopoverPosition();\n }, [open, updatePopoverPosition]);\n\n useEffect(() => {\n if (!open) return;\n\n updatePopoverPosition();\n window.addEventListener(\"resize\", updatePopoverPosition);\n window.addEventListener(\"scroll\", updatePopoverPosition, true);\n\n return () => {\n window.removeEventListener(\"resize\", updatePopoverPosition);\n window.removeEventListener(\"scroll\", updatePopoverPosition, true);\n };\n }, [open, updatePopoverPosition]);\n\n // Close on outside click\n useEffect(() => {\n if (!open) return;\n const handleClick = (e: MouseEvent) => {\n const target = e.target as Node;\n const clickedTrigger = rootRef.current?.contains(target);\n const clickedPopover = popoverRef.current?.contains(target);\n\n if (!clickedTrigger && !clickedPopover) {\n setOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", handleClick);\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, [open]);\n\n const updateSearch = (next: string) => {\n setSearchValue(next);\n onSearchChange?.(next);\n };\n\n const resolvedCloseOnSelect = closeOnSelect ?? !multiple;\n\n const selectOption = (option: SelectOption) => {\n if (option.disabled) return;\n if (multiple) {\n const next = selectedValues.includes(option.value)\n ? selectedValues.filter((v) => v !== option.value)\n : [...selectedValues, option.value];\n setSelectedValue(next);\n if (resolvedCloseOnSelect) setOpen(false);\n return;\n }\n setSelectedValue(option.value);\n if (resolvedCloseOnSelect) setOpen(false);\n };\n\n const clearValue = () => {\n setSelectedValue(multiple ? [] : null);\n updateSearch(\"\");\n };\n\n const toggleAllValues = () => {\n if (selectedValues.length > 0) {\n clearValue();\n return;\n }\n\n setSelectedValue(options.filter((o) => !o.disabled).map((o) => o.value));\n };\n\n const handleTriggerClick = (e: ReactMouseEvent<HTMLButtonElement>) => {\n selectProps?.onClick?.(e);\n if (!e.defaultPrevented && !disabled) setOpen((o) => !o);\n };\n\n const handleTriggerKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n selectProps?.onKeyDown?.(e);\n if (e.defaultPrevented) return;\n\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n setOpen((o) => !o);\n }\n if (e.key === \"Escape\") setOpen(false);\n };\n\n const triggerClass = [\n styles.trigger,\n open ? styles.triggerOpen : null,\n isInvalid ? styles.invalid : null,\n open\n ? isOptionsTop\n ? styles.triggerConnectedTop\n : styles.triggerConnectedBottom\n : null,\n selectProps?.className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const showSelectedValuesInTrigger = !multiple || showSelectedValues;\n const showChips = multiple && showSelectedValues && selectedOptions.length > 0;\n const showOptionCheckbox = multiple;\n const showFooter = multiple && (selectedValues.length > 0 || showClearAll);\n const hasVisibleTriggerValue = showSelectedValuesInTrigger && selectedOptions.length > 0;\n const maxChips = 2;\n const overflowCount = selectedOptions.length - maxChips;\n const selectedLabels = selectedOptions.map((option, index) => (\n <Fragment key={option.value}>\n {index > 0 ? \", \" : null}\n {option.label}\n </Fragment>\n ));\n\n const rootClass = [styles.root, className, wrapperProps?.className]\n .filter(Boolean)\n .join(\" \");\n const fieldClass = [styles.field, fieldProps?.className]\n .filter(Boolean)\n .join(\" \");\n const optionsAlignClass = {\n left: styles.itemAlignLeft,\n center: styles.itemAlignCenter,\n right: styles.itemAlignRight\n }[optionsAlign];\n\n const popover = open ? (\n <div\n ref={popoverRef}\n className={[\n styles.popover,\n isOptionsTop ? styles.popoverTop : styles.popoverBottom\n ].join(\" \")}\n style={popoverStyle}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n >\n {searchable && (\n <div className={styles.search}>\n <span className={styles.searchIcon}><SearchIcon /></span>\n <input\n autoFocus\n value={searchValue}\n placeholder={searchPlaceholder}\n className={styles.searchInput}\n onChange={(e) => updateSearch(e.target.value)}\n />\n {searchValue && (\n <button className={styles.clearBtn} onClick={() => updateSearch(\"\")}>\n <XIcon />\n </button>\n )}\n </div>\n )}\n\n <ul className={[styles.list, \"sb\"].join(\" \")}>\n {isLoading && <li className={styles.emptyState}>{loadingLabel}</li>}\n {!isLoading && filteredOptions.length === 0 && (\n <li className={styles.emptyState}>{emptyLabel}</li>\n )}\n {!isLoading &&\n filteredOptions.map((option) => {\n const checked = selectedValues.includes(option.value);\n const itemClass = [\n styles.item,\n optionsAlignClass,\n checked ? styles.itemActive : null,\n option.disabled ? styles.itemDisabled : null\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <li\n key={option.value}\n className={itemClass}\n role=\"option\"\n aria-selected={checked}\n onClick={() => selectOption(option)}\n >\n {!showOptionCheckbox && optionsAlign === \"right\" && checked && (\n <span className={styles.checkIcon}><CheckIcon /></span>\n )}\n {showOptionCheckbox ? (\n <span className={[styles.checkbox, checked ? styles.checkboxChecked : null].filter(Boolean).join(\" \")}>\n {checked && <CheckIcon />}\n </span>\n ) : null}\n <span>{option.label}</span>\n {option.meta && <span className={styles.itemMeta}>{option.meta}</span>}\n {!showOptionCheckbox && optionsAlign !== \"right\" && checked && (\n <span className={styles.checkIcon}><CheckIcon /></span>\n )}\n </li>\n );\n })}\n </ul>\n\n {showFooter && (showSelectedCount || showClearAll) && (\n <div className={styles.popFooter}>\n {showSelectedCount && <span>{selectedValues.length} selected</span>}\n {showClearAll && (\n <button className={styles.popFooterBtn} onClick={toggleAllValues}>\n {selectedValues.length > 0 ? \"Clear all\" : \"Check all\"}\n </button>\n )}\n </div>\n )}\n </div>\n ) : null;\n\n const inner = (\n <div ref={rootRef} {...props} {...wrapperProps} className={rootClass}>\n <button\n {...selectProps}\n type=\"button\"\n className={triggerClass}\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n onClick={handleTriggerClick}\n onKeyDown={handleTriggerKeyDown}\n >\n {showChips ? (\n <div className={styles.chips}>\n {selectedOptions.slice(0, maxChips).map((o) => (\n <span key={o.value} className={styles.chip}>{o.label}</span>\n ))}\n {overflowCount > 0 && (\n <span className={[styles.chip, styles.chipOverflow].join(\" \")}>\n +{overflowCount}\n </span>\n )}\n </div>\n ) : (\n <span className={[styles.triggerValue, !hasVisibleTriggerValue ? styles.triggerPlaceholder : null].filter(Boolean).join(\" \")}>\n {hasVisibleTriggerValue\n ? selectedLabels\n : placeholder}\n </span>\n )}\n {clearable && selectedValues.length > 0 && (\n <button\n type=\"button\"\n aria-label=\"Clear\"\n className={styles.clearBtn}\n disabled={disabled}\n onClick={(e) => { e.stopPropagation(); clearValue(); }}\n >\n <XIcon />\n </button>\n )}\n <span className={[styles.chevron, open ? styles.chevronOpen : null].filter(Boolean).join(\" \")}>\n <ChevronIcon />\n </span>\n </button>\n\n {popover && portalNode ? createPortal(popover, portalNode) : popover}\n </div>\n );\n\n if (!label && !helpText && !fieldProps) return inner;\n\n return (\n <div {...fieldProps} className={fieldClass}>\n {label && (\n <label className={styles.label}>\n {label}\n {multiple && showSelectedCount && selectedValues.length > 0 && (\n <span className={styles.labelMeta}>· {selectedValues.length} selected</span>\n )}\n </label>\n )}\n {inner}\n {helpText ? <span className={styles.helpText}>{helpText}</span> : null}\n </div>\n );\n }\n);\n\nSelect.displayName = \"Select\";\n","import type { HTMLAttributes } from \"react\";\nimport type { ColorVariant } from \"../types\";\nimport styles from \"./Spinner.module.css\";\n\nexport type SpinnerType = \"ring\" | \"dots\" | \"bar\";\nexport type SpinnerVariant = ColorVariant;\nexport type SpinnerSize = \"sm\" | \"md\" | \"lg\";\ntype LegacySpinnerVariant = SpinnerType;\n\nexport type SpinnerProps = HTMLAttributes<HTMLSpanElement> & {\n variant?: SpinnerVariant | LegacySpinnerVariant;\n type?: SpinnerType;\n size?: SpinnerSize;\n muted?: boolean;\n onColor?: boolean;\n};\n\nconst spinnerTypes = new Set<SpinnerType>([\"ring\", \"dots\", \"bar\"]);\n\nfunction isSpinnerType(value: SpinnerProps[\"variant\"]): value is SpinnerType {\n return typeof value === \"string\" && spinnerTypes.has(value as SpinnerType);\n}\n\nexport function Spinner({\n variant = \"blue3\",\n type,\n size = \"md\",\n muted = false,\n onColor = false,\n className,\n ...props\n}: SpinnerProps) {\n const resolvedType = type ?? (isSpinnerType(variant) ? variant : \"ring\");\n const colorVariant = isSpinnerType(variant) ? \"blue3\" : variant;\n\n if (resolvedType === \"dots\") {\n const cls = [\n styles.dots,\n styles[colorVariant],\n muted ? styles.dotsMuted : null,\n onColor ? styles.onColor : null,\n className\n ].filter(Boolean).join(\" \");\n return (\n <span {...props} className={cls} role=\"status\" aria-label=\"Loading\">\n <span className={styles.dot} />\n <span className={styles.dot} />\n <span className={styles.dot} />\n </span>\n );\n }\n\n if (resolvedType === \"bar\") {\n const cls = [\n styles.bar,\n styles[colorVariant],\n muted ? styles.barMuted : null,\n onColor ? styles.onColor : null,\n className\n ].filter(Boolean).join(\" \");\n return (\n <span {...props} className={cls} role=\"status\" aria-label=\"Loading\">\n <span className={styles.barFill} />\n </span>\n );\n }\n\n const cls = [\n styles.ring,\n styles[colorVariant],\n styles[size],\n muted ? styles.ringMuted : null,\n onColor ? styles.onColor : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <span\n {...props}\n className={cls}\n role=\"status\"\n aria-label=\"Loading\"\n />\n );\n}\n\nSpinner.displayName = \"Spinner\";\n","import type { ButtonHTMLAttributes, HTMLAttributes, ReactNode } from \"react\";\nimport type { ColorVariant } from \"../types\";\nimport styles from \"./Steps.module.css\";\n\nexport type StepsType = \"line\" | \"arrow\";\nexport type StepsVariant = ColorVariant;\nexport type StepsSize = \"sm\" | \"md\" | \"lg\";\ntype LegacyStepsVariant = StepsType;\n\nexport type StepItem = {\n label: ReactNode;\n description?: ReactNode;\n icon?: ReactNode;\n disabled?: boolean;\n className?: string;\n stepProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n};\n\nexport type StepsProps = Omit<HTMLAttributes<HTMLOListElement>, \"onChange\"> & {\n items: StepItem[];\n currentStep?: number;\n variant?: StepsVariant | LegacyStepsVariant;\n type?: StepsType;\n size?: StepsSize;\n clickable?: boolean;\n showNumbers?: boolean;\n onStepChange?: (step: number) => void;\n stepClassName?: string;\n};\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.min(Math.max(value, min), max);\n}\n\nconst stepTypes = new Set<StepsType>([\"line\", \"arrow\"]);\n\nfunction isStepsType(value: StepsProps[\"variant\"]): value is StepsType {\n return typeof value === \"string\" && stepTypes.has(value as StepsType);\n}\n\nexport function Steps({\n items,\n currentStep = 1,\n variant = \"blue3\",\n type,\n size = \"md\",\n clickable = false,\n showNumbers = true,\n onStepChange,\n stepClassName,\n className,\n ...props\n}: StepsProps) {\n const safeStep = items.length > 0 ? clamp(currentStep, 1, items.length) : 0;\n const resolvedType = type ?? (isStepsType(variant) ? variant : \"line\");\n const colorVariant = isStepsType(variant) ? \"blue3\" : variant;\n const isArrow = resolvedType === \"arrow\";\n\n const cls = [\n styles.steps,\n styles[colorVariant],\n isArrow ? styles.arrow : styles.line,\n styles[size],\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <ol {...props} className={cls}>\n {items.map((item, index) => {\n const step = index + 1;\n const completed = step < safeStep;\n const active = step === safeStep;\n const pending = step > safeStep;\n const interactive = clickable && !item.disabled;\n const status = active ? \"current\" : completed ? \"complete\" : \"pending\";\n const showMarker = !isArrow || item.icon || showNumbers;\n const content = (\n <>\n {showMarker && (\n <span className={styles.marker}>\n {item.icon ?? (showNumbers ? step : null)}\n </span>\n )}\n <span className={styles.text}>\n <span className={styles.label}>{item.label}</span>\n {item.description && <span className={styles.description}>{item.description}</span>}\n </span>\n </>\n );\n\n return (\n <li\n key={step}\n className={[\n styles.item,\n completed ? styles.complete : null,\n active ? styles.current : null,\n pending ? styles.pending : null,\n item.disabled ? styles.disabled : null,\n stepClassName,\n item.className\n ]\n .filter(Boolean)\n .join(\" \")}\n data-status={status}\n aria-current={active ? \"step\" : undefined}\n >\n {interactive ? (\n <button\n {...item.stepProps}\n type=\"button\"\n className={[styles.stepButton, item.stepProps?.className]\n .filter(Boolean)\n .join(\" \")}\n disabled={item.disabled}\n onClick={(event) => {\n item.stepProps?.onClick?.(event);\n if (!event.defaultPrevented) onStepChange?.(step);\n }}\n >\n {content}\n </button>\n ) : (\n <span className={styles.stepButton}>{content}</span>\n )}\n </li>\n );\n })}\n </ol>\n );\n}\n\nSteps.displayName = \"Steps\";\n","import { useId, useRef } from \"react\";\nimport type { ButtonHTMLAttributes, HTMLAttributes, KeyboardEvent, ReactNode } from \"react\";\nimport { useControlledState } from \"../hooks\";\nimport styles from \"./Tabs.module.css\";\n\nexport type TabsVariant = \"raised\" | \"underline\" | \"rounded\";\n\nconst XIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"11\" height=\"11\">\n <path d=\"M18 6 6 18M6 6l12 12\"/>\n </svg>\n);\n\nexport type TabItem = {\n value: string;\n label: ReactNode;\n content?: ReactNode;\n disabled?: boolean;\n closable?: boolean;\n closeLabel?: string;\n onClose?: (value: string) => void;\n className?: string;\n tabProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n closeButtonProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n panelProps?: HTMLAttributes<HTMLDivElement>;\n};\n\nexport type TabsProps = HTMLAttributes<HTMLDivElement> & {\n items: TabItem[];\n variant?: TabsVariant;\n ariaLabel?: string;\n disabled?: boolean;\n closable?: boolean;\n closeLabel?: string;\n onTabClose?: (value: string) => void;\n tabClassName?: string;\n tabItemClassName?: string;\n transparent?: boolean;\n inactiveTransparent?: boolean;\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n};\n\nfunction getDefaultValue(items: TabItem[]) {\n return items.find((item) => !item.disabled)?.value ?? items[0]?.value ?? \"\";\n}\n\nexport function Tabs({\n items,\n variant = \"raised\",\n ariaLabel = \"Tabs\",\n disabled = false,\n closable = false,\n closeLabel = \"Close tab\",\n onTabClose,\n tabClassName,\n tabItemClassName,\n transparent = false,\n inactiveTransparent = false,\n value,\n defaultValue,\n onValueChange,\n className,\n ...props\n}: TabsProps) {\n const id = useId();\n const tabRefs = useRef<Array<HTMLButtonElement | null>>([]);\n const [selectedValue, setSelectedValue] = useControlledState(\n value,\n defaultValue ?? getDefaultValue(items),\n onValueChange\n );\n\n const selectedItem = items.find((item) => item.value === selectedValue);\n const cls = [\n styles.tabs,\n styles[variant],\n transparent ? styles.transparent : null,\n inactiveTransparent ? styles.inactiveTransparent : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const focusTab = (startIndex: number, direction: 1 | -1) => {\n if (items.length === 0) return;\n\n for (let step = 1; step <= items.length; step += 1) {\n const nextIndex = (startIndex + step * direction + items.length) % items.length;\n if (!items[nextIndex]?.disabled && !disabled) {\n tabRefs.current[nextIndex]?.focus();\n setSelectedValue(items[nextIndex].value);\n return;\n }\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>, index: number) => {\n if (event.key === \"ArrowRight\") {\n event.preventDefault();\n focusTab(index, 1);\n return;\n }\n\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n focusTab(index, -1);\n return;\n }\n\n if (event.key === \"Home\") {\n event.preventDefault();\n const firstIndex = disabled ? -1 : items.findIndex((item) => !item.disabled);\n if (firstIndex >= 0) {\n tabRefs.current[firstIndex]?.focus();\n setSelectedValue(items[firstIndex].value);\n }\n return;\n }\n\n if (event.key === \"End\") {\n event.preventDefault();\n const lastIndex = disabled ? -1 : items.map((item) => !item.disabled).lastIndexOf(true);\n if (lastIndex >= 0) {\n tabRefs.current[lastIndex]?.focus();\n setSelectedValue(items[lastIndex].value);\n }\n }\n };\n\n return (\n <div {...props} className={cls}>\n <div className={styles.list} role=\"tablist\" aria-label={ariaLabel}>\n {items.map((item, index) => {\n const selected = item.value === selectedValue;\n const isDisabled = disabled || item.disabled;\n const isClosable = !isDisabled && (item.closable ?? closable);\n const tabId = `${id}-${item.value}-tab`;\n const panelId = `${id}-${item.value}-panel`;\n\n return (\n <span\n key={item.value}\n role=\"presentation\"\n className={[\n styles.tabItem,\n isClosable ? styles.closable : null,\n isDisabled ? styles.disabled : null,\n tabItemClassName,\n item.className\n ]\n .filter(Boolean)\n .join(\" \")}\n data-selected={selected ? \"true\" : undefined}\n >\n <button\n {...item.tabProps}\n ref={(node) => {\n tabRefs.current[index] = node;\n }}\n type=\"button\"\n role=\"tab\"\n id={tabId}\n aria-selected={selected}\n aria-controls={panelId}\n tabIndex={selected ? 0 : -1}\n disabled={isDisabled}\n className={[styles.tab, tabClassName, item.tabProps?.className]\n .filter(Boolean)\n .join(\" \")}\n onClick={(event) => {\n item.tabProps?.onClick?.(event);\n if (!event.defaultPrevented) setSelectedValue(item.value);\n }}\n onKeyDown={(event) => {\n item.tabProps?.onKeyDown?.(event);\n if (!event.defaultPrevented) handleKeyDown(event, index);\n }}\n >\n {item.label}\n </button>\n\n {isClosable && (\n <button\n {...item.closeButtonProps}\n type=\"button\"\n className={[styles.closeBtn, item.closeButtonProps?.className]\n .filter(Boolean)\n .join(\" \")}\n aria-label={item.closeLabel ?? closeLabel}\n disabled={isDisabled}\n onClick={(event) => {\n item.closeButtonProps?.onClick?.(event);\n if (event.defaultPrevented) return;\n item.onClose?.(item.value);\n onTabClose?.(item.value);\n }}\n >\n {item.closeButtonProps?.children ?? <XIcon />}\n </button>\n )}\n </span>\n );\n })}\n </div>\n\n {selectedItem?.content !== undefined && (\n <div\n {...selectedItem.panelProps}\n className={[styles.panel, selectedItem.panelProps?.className]\n .filter(Boolean)\n .join(\" \")}\n role=\"tabpanel\"\n id={`${id}-${selectedItem.value}-panel`}\n aria-labelledby={`${id}-${selectedItem.value}-tab`}\n >\n {selectedItem.content}\n </div>\n )}\n </div>\n );\n}\n\nTabs.displayName = \"Tabs\";\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n type ChangeEvent,\n type ForwardedRef,\n type MutableRefObject,\n type ReactNode\n} from \"react\";\nimport type {\n ButtonHTMLAttributes,\n HTMLAttributes,\n TextareaHTMLAttributes\n} from \"react\";\nimport { useControlledState } from \"../hooks\";\nimport styles from \"./Textarea.module.css\";\n\nconst XIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"12\" height=\"12\">\n <path d=\"M18 6 6 18M6 6l12 12\"/>\n </svg>\n);\n\nconst DEFAULT_MIN_ROWS = 3;\nconst DEFAULT_MAX_ROWS = 8;\n\nconst useSafeLayoutEffect =\n typeof window === \"undefined\" ? useEffect : useLayoutEffect;\n\nconst getNormalizedRows = (rows: number | undefined, fallback: number) => {\n if (rows === undefined || Number.isNaN(rows)) return fallback;\n return Math.max(1, Math.floor(rows));\n};\n\nconst setForwardedRef = (\n ref: ForwardedRef<HTMLTextAreaElement>,\n node: HTMLTextAreaElement | null\n) => {\n if (typeof ref === \"function\") {\n ref(node);\n return;\n }\n\n if (ref) {\n (ref as MutableRefObject<HTMLTextAreaElement | null>).current = node;\n }\n};\n\nexport type TextareaProps = Omit<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n \"defaultValue\" | \"onChange\" | \"value\"\n> & {\n label?: string;\n helpText?: ReactNode;\n maxLength?: number;\n clearable?: boolean;\n minRows?: number;\n maxRows?: number;\n unlimitedRows?: boolean;\n resize?: \"horizontal\" | \"vertical\" | \"both\";\n isInvalid?: boolean;\n clearButtonProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n value?: string;\n defaultValue?: string;\n onChange?: TextareaHTMLAttributes<HTMLTextAreaElement>[\"onChange\"];\n onValueChange?: (value: string) => void;\n fieldProps?: HTMLAttributes<HTMLDivElement>;\n wrapperProps?: HTMLAttributes<HTMLDivElement>;\n textareaProps?: TextareaHTMLAttributes<HTMLTextAreaElement>;\n};\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n label,\n helpText,\n maxLength,\n clearable = false,\n minRows = DEFAULT_MIN_ROWS,\n maxRows = DEFAULT_MAX_ROWS,\n unlimitedRows = false,\n resize = \"both\",\n isInvalid = false,\n clearButtonProps,\n disabled,\n value,\n defaultValue = \"\",\n onChange,\n onValueChange,\n fieldProps,\n wrapperProps,\n textareaProps,\n className,\n style,\n ...props\n },\n ref\n ) => {\n const fieldRef = useRef<HTMLDivElement | null>(null);\n const wrapperRef = useRef<HTMLDivElement | null>(null);\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\n const [currentValue, setCurrentValue] = useControlledState(\n value,\n defaultValue,\n (next) => onValueChange?.(next)\n );\n const resolvedMinRows = getNormalizedRows(minRows, DEFAULT_MIN_ROWS);\n const resolvedMaxRows = unlimitedRows\n ? undefined\n : Math.max(resolvedMinRows, getNormalizedRows(maxRows, DEFAULT_MAX_ROWS));\n\n const setTextareaRef = useCallback(\n (node: HTMLTextAreaElement | null) => {\n textareaRef.current = node;\n setForwardedRef(ref, node);\n },\n [ref]\n );\n\n const syncTextareaHeight = useCallback(() => {\n const node = textareaRef.current;\n\n if (!node || typeof window === \"undefined\") return;\n\n const computedStyle = window.getComputedStyle(node);\n const fontSize = Number.parseFloat(computedStyle.fontSize) || 13;\n const lineHeight = Number.parseFloat(computedStyle.lineHeight) || fontSize * 1.55;\n const paddingTop = Number.parseFloat(computedStyle.paddingTop) || 0;\n const paddingBottom = Number.parseFloat(computedStyle.paddingBottom) || 0;\n const borderTop = Number.parseFloat(computedStyle.borderTopWidth) || 0;\n const borderBottom = Number.parseFloat(computedStyle.borderBottomWidth) || 0;\n const verticalChrome = paddingTop + paddingBottom + borderTop + borderBottom;\n const minHeight = lineHeight * resolvedMinRows + verticalChrome;\n const maxHeight = resolvedMaxRows\n ? lineHeight * resolvedMaxRows + verticalChrome\n : undefined;\n\n node.style.height = \"auto\";\n node.style.minHeight = `${minHeight}px`;\n node.style.maxHeight = maxHeight ? `${maxHeight}px` : \"none\";\n\n const nextHeight = Math.max(\n minHeight,\n Math.min(node.scrollHeight, maxHeight ?? Number.POSITIVE_INFINITY)\n );\n\n node.style.height = `${nextHeight}px`;\n node.style.overflowY = maxHeight && node.scrollHeight > maxHeight ? \"auto\" : \"hidden\";\n }, [resolvedMaxRows, resolvedMinRows]);\n\n useSafeLayoutEffect(() => {\n syncTextareaHeight();\n }, [currentValue, syncTextareaHeight]);\n\n useSafeLayoutEffect(() => {\n const fieldNode = fieldRef.current;\n const wrapperNode = wrapperRef.current;\n const textareaNode = textareaRef.current;\n const tracksHorizontalResize = resize === \"horizontal\" || resize === \"both\";\n\n if (!wrapperNode || !textareaNode) return;\n\n if (!tracksHorizontalResize) {\n if (fieldNode) fieldNode.style.width = \"\";\n wrapperNode.style.width = \"\";\n return;\n }\n\n const syncWrapperWidth = () => {\n const textareaWidth = textareaNode.offsetWidth;\n\n if (textareaWidth > 0 && Math.abs(textareaWidth - wrapperNode.offsetWidth) > 1) {\n wrapperNode.style.width = `${textareaWidth}px`;\n }\n\n if (fieldNode && textareaWidth > 0 && Math.abs(textareaWidth - fieldNode.offsetWidth) > 1) {\n fieldNode.style.width = `${textareaWidth}px`;\n }\n };\n\n if (typeof ResizeObserver === \"undefined\") {\n syncWrapperWidth();\n return;\n }\n\n const resizeObserver = new ResizeObserver(syncWrapperWidth);\n resizeObserver.observe(textareaNode);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [resize]);\n\n const handleChange = (e: ChangeEvent<HTMLTextAreaElement>) => {\n setCurrentValue(e.target.value);\n onChange?.(e);\n textareaProps?.onChange?.(e);\n };\n\n const handleClear = () => {\n setCurrentValue(\"\");\n };\n\n const isOver = maxLength !== undefined && currentValue.length > maxLength;\n\n const textareaClass = [\n styles.textarea,\n \"sb\",\n clearable ? styles.hasClear : null,\n isInvalid ? styles.invalid : null,\n className,\n textareaProps?.className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const wrapperClass = [styles.wrapper, wrapperProps?.className]\n .filter(Boolean)\n .join(\" \");\n const fieldClass = [styles.field, fieldProps?.className]\n .filter(Boolean)\n .join(\" \");\n const textareaStyle = useMemo(\n () => ({\n ...style,\n ...textareaProps?.style,\n resize\n }),\n [resize, style, textareaProps?.style]\n );\n const isDisabled = disabled || textareaProps?.disabled;\n\n const inner = (\n <div {...wrapperProps} ref={wrapperRef} className={wrapperClass}>\n <textarea\n {...props}\n {...textareaProps}\n ref={setTextareaRef}\n disabled={isDisabled}\n maxLength={maxLength}\n rows={resolvedMinRows}\n value={currentValue}\n onChange={handleChange}\n className={textareaClass}\n style={textareaStyle}\n />\n {clearable && (\n <button\n type=\"button\"\n className={styles.clearBtn}\n disabled={isDisabled || currentValue.length === 0}\n aria-label=\"Clear\"\n onClick={handleClear}\n {...clearButtonProps}\n >\n {clearButtonProps?.children ?? <XIcon />}\n </button>\n )}\n </div>\n );\n\n if (!label && !helpText && maxLength === undefined) return inner;\n\n return (\n <div {...fieldProps} ref={fieldRef} className={fieldClass}>\n {label && <label className={styles.label}>{label}</label>}\n {inner}\n {(helpText || maxLength !== undefined) && (\n <div className={styles.footer}>\n {helpText && <span className={styles.helpText}>{helpText}</span>}\n {maxLength !== undefined && (\n <span className={[styles.charCount, isOver ? styles.charCountOver : null].filter(Boolean).join(\" \")}>\n {currentValue.length} / {maxLength}\n </span>\n )}\n </div>\n )}\n </div>\n );\n }\n);\n\nTextarea.displayName = \"Textarea\";\n","import {\n createContext,\n useCallback,\n useContext,\n useState\n} from \"react\";\nimport type { CSSProperties, HTMLAttributes, ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Spinner } from \"../Spinner\";\nimport styles from \"./Toast.module.css\";\n\nconst CheckIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"16\" height=\"16\">\n <path d=\"M20 6 9 17l-5-5\"/>\n </svg>\n);\n\nconst XIcon = ({ size = 11 }: { size?: number }) => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width={size} height={size}>\n <path d=\"M18 6 6 18M6 6l12 12\"/>\n </svg>\n);\n\nconst AlertIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"16\" height=\"16\">\n <path d=\"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"/>\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"/>\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"/>\n </svg>\n);\n\nconst InfoIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" width=\"16\" height=\"16\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"/>\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"/>\n </svg>\n);\n\nconst LEAD_ICONS: Record<ToastVariant, ReactNode> = {\n ok: <CheckIcon />,\n error: <XIcon size={18} />,\n warning: <AlertIcon />,\n info: <InfoIcon />,\n loading: <Spinner size=\"sm\" muted />,\n neutral: null\n};\n\nconst hasRenderableContent = (node: ReactNode): boolean => {\n if (node === undefined || node === null || typeof node === \"boolean\") return false;\n if (typeof node === \"string\") return node.trim().length > 0;\n if (Array.isArray(node)) return node.some(hasRenderableContent);\n return true;\n};\n\nexport type ToastVariant = \"ok\" | \"error\" | \"warning\" | \"info\" | \"loading\" | \"neutral\";\nexport type ToastPosition =\n | \"top-left\"\n | \"top-center\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-center\"\n | \"bottom-right\";\n\nexport type ToastItem = {\n id: string;\n variant: ToastVariant;\n title: ReactNode;\n message?: ReactNode;\n duration?: number;\n overlay?: boolean;\n shadow?: boolean;\n};\n\nexport type ToastProps = Omit<HTMLAttributes<HTMLDivElement>, \"title\"> & {\n variant?: ToastVariant;\n title: ReactNode;\n message?: ReactNode;\n overlay?: boolean;\n shadow?: boolean;\n onDismiss?: () => void;\n};\n\nexport function Toast({\n variant = \"ok\",\n title,\n message,\n overlay = false,\n shadow = true,\n onDismiss,\n className,\n ...props\n}: ToastProps) {\n const isLoading = variant === \"loading\";\n const hasMessage = hasRenderableContent(message);\n const cls = [\n styles.toast,\n !hasMessage ? styles.noMessage : null,\n shadow ? styles.shadow : null,\n styles[variant],\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n const toast = (\n <div {...props} className={cls} role=\"alert\">\n {LEAD_ICONS[variant] ? <span className={styles.lead}>{LEAD_ICONS[variant]}</span> : null}\n <div className={styles.body}>\n <div className={styles.title}>{title}</div>\n {hasMessage ? <div className={styles.message}>{message}</div> : null}\n </div>\n {onDismiss && !isLoading && (\n <button\n type=\"button\"\n className={styles.closeBtn}\n aria-label=\"Dismiss\"\n onClick={onDismiss}\n >\n <XIcon />\n </button>\n )}\n </div>\n );\n\n if (!overlay || !isLoading) return toast;\n\n return (\n <>\n <div className={styles.overlay} aria-hidden=\"true\" />\n {toast}\n </>\n );\n}\n\nToast.displayName = \"Toast\";\n\n/* ============================================================\n ToastProvider + useToast\n ============================================================ */\n\ntype ToastContextValue = {\n toast: (options: Omit<ToastItem, \"id\">) => string;\n dismiss: (id: string) => void;\n};\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\nexport type ToastProviderProps = {\n maxVisible?: number;\n position?: ToastPosition;\n offset?: number;\n children: ReactNode;\n};\n\nexport function ToastProvider({ maxVisible = 3, position = \"bottom-right\", offset = 24, children }: ToastProviderProps) {\n const [items, setItems] = useState<ToastItem[]>([]);\n\n const dismiss = useCallback((id: string) => {\n setItems((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n const toast = useCallback(\n (options: Omit<ToastItem, \"id\">) => {\n const id = Math.random().toString(36).slice(2);\n const duration = options.duration ?? (options.variant === \"loading\" ? 0 : 4000);\n const visibleLimit = maxVisible === undefined || !Number.isFinite(maxVisible) ? undefined : Math.max(0, Math.floor(maxVisible));\n\n setItems((prev) => {\n const next = [...prev, { ...options, id }];\n if (visibleLimit === undefined) return next;\n if (visibleLimit === 0) return [];\n return next.slice(-visibleLimit);\n });\n\n if (duration > 0) {\n setTimeout(() => dismiss(id), duration);\n }\n\n return id;\n },\n [dismiss, maxVisible]\n );\n\n const hasOverlay = items.some((item) => item.variant === \"loading\" && item.overlay);\n\n return (\n <ToastContext.Provider value={{ toast, dismiss }}>\n {children}\n {typeof document !== \"undefined\" &&\n createPortal(\n <>\n {hasOverlay && <div className={styles.overlay} aria-hidden=\"true\" />}\n <div\n className={[styles.stack, styles[`stack-${position}`]].filter(Boolean).join(\" \")}\n style={{ \"--toast-offset\": `${offset}px` } as CSSProperties}\n >\n {items.map((item) => (\n <Toast\n key={item.id}\n variant={item.variant}\n title={item.title}\n message={item.message}\n shadow={item.shadow}\n onDismiss={() => dismiss(item.id)}\n />\n ))}\n </div>\n </>,\n document.body\n )}\n </ToastContext.Provider>\n );\n}\n\nexport function useToast() {\n const ctx = useContext(ToastContext);\n if (!ctx) {\n throw new Error(\"useToast must be used within a ToastProvider\");\n }\n return ctx;\n}\n","import { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport type { CSSProperties, FocusEvent, HTMLAttributes, MouseEvent, ReactNode } from \"react\";\nimport styles from \"./Tooltip.module.css\";\n\nexport type TooltipSide = \"top\" | \"bottom\" | \"left\" | \"right\";\nconst DEFAULT_TOOLTIP_DELAY = 800;\nconst TOOLTIP_GAP = 8;\nconst DEFAULT_VIEWPORT_PADDING = 8;\n\nexport type TooltipProps = {\n content: ReactNode;\n side?: TooltipSide;\n delay?: number;\n dynamic?: boolean;\n cursor?: boolean;\n viewportPadding?: number;\n children: ReactNode;\n wrapperProps?: HTMLAttributes<HTMLSpanElement>;\n disabled?: boolean;\n};\n\nconst oppositeSide: Record<TooltipSide, TooltipSide> = {\n top: \"bottom\",\n bottom: \"top\",\n left: \"right\",\n right: \"left\"\n};\n\nexport function Tooltip({\n content,\n side = \"top\",\n delay = DEFAULT_TOOLTIP_DELAY,\n dynamic = true,\n cursor = true,\n viewportPadding = DEFAULT_VIEWPORT_PADDING,\n children,\n wrapperProps,\n disabled = false\n}: TooltipProps) {\n const [visible, setVisible] = useState(false);\n const [renderedSide, setRenderedSide] = useState<TooltipSide>(side);\n const [tooltipStyle, setTooltipStyle] = useState<CSSProperties | undefined>();\n const cursorPositionRef = useRef({ x: 0, y: 0 });\n const wrapperRef = useRef<HTMLSpanElement>(null);\n const tooltipRef = useRef<HTMLSpanElement>(null);\n const showTimerRef = useRef<number | null>(null);\n\n const clearShowTimer = () => {\n if (showTimerRef.current !== null) {\n window.clearTimeout(showTimerRef.current);\n showTimerRef.current = null;\n }\n };\n\n useEffect(() => {\n return clearShowTimer;\n }, []);\n\n useEffect(() => {\n if (!visible) {\n setRenderedSide(side);\n setTooltipStyle(undefined);\n }\n }, [side, visible]);\n\n useLayoutEffect(() => {\n if (visible && cursor) {\n const tooltip = tooltipRef.current;\n if (!tooltip) return;\n\n const tooltipWidth = tooltip.offsetWidth;\n const tooltipHeight = tooltip.offsetHeight;\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const preferredLeft = cursorPositionRef.current.x + TOOLTIP_GAP;\n const preferredTop = cursorPositionRef.current.y + TOOLTIP_GAP;\n const maxLeft = viewportWidth - tooltipWidth - viewportPadding;\n const maxTop = viewportHeight - tooltipHeight - viewportPadding;\n const left = Math.max(viewportPadding, Math.min(preferredLeft, maxLeft));\n const top = Math.max(viewportPadding, Math.min(preferredTop, maxTop));\n\n setTooltipStyle({\n \"--tooltip-cursor-x\": `${left}px`,\n \"--tooltip-cursor-y\": `${top}px`\n } as CSSProperties);\n return;\n }\n\n if (!visible || !dynamic) {\n setRenderedSide(side);\n setTooltipStyle(undefined);\n return;\n }\n\n const wrapper = wrapperRef.current;\n const tooltip = tooltipRef.current;\n if (!wrapper || !tooltip) return;\n\n const wrapperRect = wrapper.getBoundingClientRect();\n const tooltipWidth = tooltip.offsetWidth;\n const tooltipHeight = tooltip.offsetHeight;\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n const available = {\n top: wrapperRect.top - viewportPadding,\n bottom: viewportHeight - wrapperRect.bottom - viewportPadding,\n left: wrapperRect.left - viewportPadding,\n right: viewportWidth - wrapperRect.right - viewportPadding\n };\n\n const required = {\n top: tooltipHeight + TOOLTIP_GAP,\n bottom: tooltipHeight + TOOLTIP_GAP,\n left: tooltipWidth + TOOLTIP_GAP,\n right: tooltipWidth + TOOLTIP_GAP\n };\n\n const fits = (nextSide: TooltipSide) => available[nextSide] >= required[nextSide];\n const fallbackSide = oppositeSide[side];\n let nextSide = side;\n\n if (!fits(side)) {\n nextSide = fits(fallbackSide)\n ? fallbackSide\n : available[fallbackSide] > available[side]\n ? fallbackSide\n : side;\n }\n\n let shiftX = 0;\n let shiftY = 0;\n\n if (nextSide === \"top\" || nextSide === \"bottom\") {\n const centeredLeft = wrapperRect.left + wrapperRect.width / 2 - tooltipWidth / 2;\n const leftOverflow = viewportPadding - centeredLeft;\n const rightOverflow = centeredLeft + tooltipWidth - (viewportWidth - viewportPadding);\n\n if (leftOverflow > 0) shiftX = leftOverflow;\n if (rightOverflow > 0) shiftX = -rightOverflow;\n } else {\n const centeredTop = wrapperRect.top + wrapperRect.height / 2 - tooltipHeight / 2;\n const topOverflow = viewportPadding - centeredTop;\n const bottomOverflow = centeredTop + tooltipHeight - (viewportHeight - viewportPadding);\n\n if (topOverflow > 0) shiftY = topOverflow;\n if (bottomOverflow > 0) shiftY = -bottomOverflow;\n }\n\n setRenderedSide(nextSide);\n setTooltipStyle({\n \"--tooltip-shift-x\": `${shiftX}px`,\n \"--tooltip-shift-y\": `${shiftY}px`\n } as CSSProperties);\n }, [cursor, dynamic, side, viewportPadding, visible, content]);\n\n if (disabled) return <>{children}</>;\n\n const showTooltip = () => {\n clearShowTimer();\n\n if (delay <= 0) {\n setVisible(true);\n return;\n }\n\n showTimerRef.current = window.setTimeout(() => {\n setVisible(true);\n showTimerRef.current = null;\n }, delay);\n };\n\n const hideTooltip = () => {\n clearShowTimer();\n setVisible(false);\n };\n\n const handleMouseEnter = (event: MouseEvent<HTMLSpanElement>) => {\n wrapperProps?.onMouseEnter?.(event);\n cursorPositionRef.current = { x: event.clientX, y: event.clientY };\n showTooltip();\n };\n\n const handleMouseMove = (event: MouseEvent<HTMLSpanElement>) => {\n wrapperProps?.onMouseMove?.(event);\n if (!cursor) return;\n\n cursorPositionRef.current = { x: event.clientX, y: event.clientY };\n setVisible(false);\n showTooltip();\n };\n\n const handleMouseLeave = (event: MouseEvent<HTMLSpanElement>) => {\n wrapperProps?.onMouseLeave?.(event);\n hideTooltip();\n };\n\n const handleFocus = (event: FocusEvent<HTMLSpanElement>) => {\n wrapperProps?.onFocus?.(event);\n const rect = event.currentTarget.getBoundingClientRect();\n cursorPositionRef.current = { x: rect.right, y: rect.bottom };\n showTooltip();\n };\n\n const handleBlur = (event: FocusEvent<HTMLSpanElement>) => {\n wrapperProps?.onBlur?.(event);\n hideTooltip();\n };\n\n const tooltipClass = [styles.tooltip, cursor ? styles.cursor : styles[renderedSide]]\n .filter(Boolean)\n .join(\" \");\n\n const wrapperClass = [styles.wrapper, wrapperProps?.className]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <span\n {...wrapperProps}\n ref={wrapperRef}\n className={wrapperClass}\n onMouseEnter={handleMouseEnter}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n onFocus={handleFocus}\n onBlur={handleBlur}\n >\n {children}\n {visible && (\n <span ref={tooltipRef} className={tooltipClass} role=\"tooltip\" style={tooltipStyle}>\n {content}\n </span>\n )}\n </span>\n );\n}\n\nTooltip.displayName = \"Tooltip\";\n"],"names":["useControlledState","controlledValue","defaultValue","onChange","internalValue","setInternalValue","useState","isControlled","value","setValue","useCallback","nextValue","ChevronIcon","jsx","PlusIcon","MinusIcon","getDefaultValue","multiple","isItemOpen","currentValue","itemValue","getNextValue","open","values","formatSpacing","spacing","Accordion","items","hideIndicator","indicator","border","highlight","radius","hoverHighlight","disabled","itemClassName","headerClassName","headerStyle","bodyClassName","bodyStyle","triggerClassName","contentClassName","onValueChange","className","style","props","id","useId","openValue","setOpenValue","cls","styles","rootStyle","item","itemDisabled","triggerId","contentId","jsxs","_a","_b","event","_c","_d","XIcon","Badge","variant","icon","pill","outline","coloredText","label","labelDirection","dismissable","onDismiss","children","ChevronRightIcon","Breadcrumb","separator","colorCurrent","index","isLast","isCurrent","isDisabled","BreadCrumb","Scrollable","direction","track","arrows","autoHide","expand","scrollbarSize","height","classes","overflowStyle","sizeVar","Button","forwardRef","type","size","rounded","transparent","ref","hasContent","isIconOnly","PAD_MAP","Card","padding","tilt","onClose","closeBtnProps","CardHeader","title","subtitle","CardStat","unit","delta","deltaDirection","deltaClass","CalendarIcon","ClockIcon","placeholderByMode","monthNames","dayNames","hourOptions","_","pad","minuteOptions","getModeIcon","mode","formatDateValue","date","formatMonthValue","parseDate","datePart","year","month","day","getTimePart","time","parseTime","timeValue","hour","minute","getCalendarDays","viewDate","firstDay","start","isValueDisabled","min","max","minValue","maxValue","DateTimeInput","helpText","clearable","clearLabel","showIcon","openPickerOnClick","isInvalid","clearButtonProps","fieldProps","wrapperProps","inputProps","placeholder","step","inputRef","useRef","wrapperRef","pickerOpen","setPickerOpen","setViewDate","setCurrentValue","useImperativeHandle","hasValue","inputMin","inputMax","inputStep","selectedHour","selectedMinute","pickerMin","pickerMax","useEffect","selectedDate","handlePointerDown","handleKeyDown","handleChange","handleClear","handleWrapperClick","updateDateValue","dateValue","updateMonthValue","updateTimeValue","updateTimePart","part","currentHour","currentMinute","nextTime","moveMonth","offset","currentDate","nextDate","moveYear","handleToday","today","renderTimeColumn","labelText","options","option","selected","timeDisabled","inputClass","wrapperClass","inputEl","Fragment","monthName","monthDate","monthValue","monthDisabled","dayName","outside","dateDisabled","FolderIcon","defaultFileCountLabel","count","defaultButtonLabel","formatFileSize","bytes","units","unitIndex","getFileLabel","file","showFileSize","getTotalFileSize","files","total","FileInput","buttonLabel","buttonPosition","fileCountLabel","emptyLabel","selectedFiles","defaultFiles","onFilesChange","generatedId","internalFiles","setInternalFiles","inputId","helpTextId","isMultiple","updateFiles","nextFiles","fileList","displayValue","useMemo","titleLabel","triggerClass","fieldClass","buttonContent","valueContent","inner","MASK_SLOTS","DEFAULT_ALLOWED_PATTERN","getRawMaskValue","allowedPattern","char","applyMask","mask","rawValue","rawIndex","maskedValue","maskChar","EyeIcon","EyeOffIcon","ChevronUpIcon","ChevronDownIcon","digitsOnly","toFiniteNumber","parsed","Input","iconPosition","showNumberControls","showPasswordToggle","maskAllowedPattern","maskPlaceholder","selectOnFocus","textAlign","resolvedType","isNumberType","isPasswordType","isPasswordVisible","setIsPasswordVisible","formatValue","filteredValue","formattedValue","numberMin","numberMax","parsedNumberStep","numberStep","numericValue","canDecrease","canIncrease","handleNumberStep","nextRawValue","iconRight","iconLeft","hasPasswordToggle","hasNumberControls","trailingItemWidths","trailingPadding","sum","width","handleFocus","e","inputStyle","renderedType","clearButtonLabel","visible","mergeRel","rel","parts","Link","underlined","opacity","noreferrer","noopener","href","target","tabIndex","onClick","externalNoopener","linkStyle","handleClick","DEFAULT_DRAG_GROUP","DRAG_START_DISTANCE","DRAG_GHOST_OFFSET","listRegistry","dragListeners","activeListDrag","emitListDragChange","listener","setActiveListDrag","next","updateActiveListDrag","updater","useActiveListDrag","snapshot","setSnapshot","getOutsideDropTarget","sourceEntry","clientY","fallbackListId","sourceRect","directionalListId","getListEdgeDropTarget","targetRoot","targetListId","drag","itemElements","element","rect","lastItemValue","getOverlappedListRoot","clientX","ghostRect","bestEntry","bestOverlap","entry","root","overlapWidth","overlapHeight","overlap","List","showTitle","collapsible","collapsed","defaultCollapsed","onCollapsedChange","selectable","selectedValue","defaultSelectedValue","onSelectedValueChange","fullWidthBackgroup","titleHover","ariaLabel","headerProps","listProps","draggable","dragGroup","listId","isItemDraggable","onItemDrop","dragGhost","dropOutsideListId","dropOutsideBeforeListId","dropOutsideAfterListId","resolvedListId","activeDrag","rootRef","suppressItemClickRef","isCollapsed","setIsCollapsed","currentSelectedValue","setCurrentSelectedValue","selectedItem","hasTitle","canToggle","rootClass","headerClass","listClass","toggleCollapsed","canDragItem","updateTarget","distance","current","pointedRoot","pointedListId","pointedDragGroup","overlappedRoot","targetDragGroup","targetItemElement","position","listEdgeTarget","onPointerMove","onPointerUp","targetEntry","targetItem","handler","startItemDrag","renderItemContent","listDropTarget","showListDropIndicator","hideEmptyLabel","showDragGhost","itemIsDraggable","itemDropTarget","itemIsDragging","itemClass","content","clickable","createElement","CheckIcon","Checkbox","checked","defaultChecked","indeterminate","isChecked","Radio","RadioGroup","Switch","thinTrack","isOn","Menu","shadow","MenuGroup","labelProps","labelId","MenuItem","kbd","active","danger","submenu","submenuMode","submenuTrigger","submenuOpen","setSubmenuOpen","hasSubmenu","opensOnHover","itemEl","Modal","footer","overlay","closeOnBackdrop","showCloseButton","backdropProps","modalProps","bodyProps","footerProps","closeButtonProps","onOpenChange","innerRef","dragRef","dragOffset","setDragOffset","isDragging","setIsDragging","handleKey","requestClose","handleBackdropClick","shouldSkipDrag","handleHeaderPointerDown","handleHeaderPointerMove","stopDragging","handleHeaderPointerUp","handleHeaderPointerCancel","backdropClass","modalClass","modalStyle","POPOVER_GAP","VIEWPORT_PADDING","Popover","openProp","defaultOpen","trigger","side","openOnHover","popProps","internalOpen","setInternalOpen","renderedSide","setRenderedSide","popStyle","setPopStyle","isOpen","popRef","setOpen","useLayoutEffect","updatePosition","wrapper","pop","wrapperRect","popWidth","popHeight","viewportWidth","viewportHeight","preferredVertical","alternateVertical","preferredAlign","alternateAlign","available","requiredHeight","vertical","getLeft","align","fitsHorizontally","left","preferredLeft","alternateLeft","preferredOverflow","alternateOverflow","leftOverflow","rightOverflow","shiftX","isTop","isEnd","popCls","mergedPopStyle","clamp","Progress","shape","valueLabel","showValue","safeMax","isIndeterminate","safeValue","percent","shouldShowValue","progressbarProps","circleClass","trackClass","PushButtonGroup","gap","background","groupRef","buttonWidth","setButtonWidth","group","updateButtonWidth","buttons","nextWidth","button","buttonStyle","paddingX","contentWidth","badge","badgeWidth","badgeOffset","badgeGap","contentWidthWithPadding","contentWidthWithBadge","observer","child","PushButton","on","badgePosition","SearchIcon","defaultFilterOptions","searchValue","norm","o","useSafeLayoutEffect","Select","filterOptions","isLoading","loadingLabel","onSearchChange","optionsAlign","optionsPosition","searchable","searchPlaceholder","showSelectedCount","showClearAll","showSelectedValues","closeOnSelect","selectProps","setSearchValue","portalNode","setPortalNode","popoverStyle","setPopoverStyle","popoverRef","setSelectedValue","selectedValues","selectedOptions","filteredOptions","isOptionsTop","updatePopoverPosition","nextStyle","clickedTrigger","clickedPopover","updateSearch","resolvedCloseOnSelect","selectOption","v","clearValue","toggleAllValues","handleTriggerClick","handleTriggerKeyDown","showSelectedValuesInTrigger","showChips","showOptionCheckbox","showFooter","hasVisibleTriggerValue","maxChips","overflowCount","selectedLabels","optionsAlignClass","popover","createPortal","spinnerTypes","isSpinnerType","Spinner","muted","onColor","colorVariant","stepTypes","isStepsType","Steps","currentStep","showNumbers","onStepChange","stepClassName","safeStep","isArrow","completed","pending","interactive","status","showMarker","Tabs","closable","closeLabel","onTabClose","tabClassName","tabItemClassName","inactiveTransparent","tabRefs","focusTab","startIndex","nextIndex","firstIndex","lastIndex","isClosable","tabId","panelId","node","DEFAULT_MIN_ROWS","DEFAULT_MAX_ROWS","getNormalizedRows","rows","fallback","setForwardedRef","Textarea","maxLength","minRows","maxRows","unlimitedRows","resize","textareaProps","fieldRef","textareaRef","resolvedMinRows","resolvedMaxRows","setTextareaRef","syncTextareaHeight","computedStyle","fontSize","lineHeight","paddingTop","paddingBottom","borderTop","borderBottom","verticalChrome","minHeight","maxHeight","nextHeight","fieldNode","wrapperNode","textareaNode","tracksHorizontalResize","syncWrapperWidth","textareaWidth","resizeObserver","isOver","textareaClass","textareaStyle","AlertIcon","InfoIcon","LEAD_ICONS","hasRenderableContent","Toast","message","hasMessage","toast","ToastContext","createContext","ToastProvider","maxVisible","setItems","dismiss","prev","t","duration","visibleLimit","hasOverlay","useToast","ctx","useContext","DEFAULT_TOOLTIP_DELAY","TOOLTIP_GAP","DEFAULT_VIEWPORT_PADDING","oppositeSide","Tooltip","delay","dynamic","cursor","viewportPadding","setVisible","tooltipStyle","setTooltipStyle","cursorPositionRef","tooltipRef","showTimerRef","clearShowTimer","tooltip","tooltipWidth","tooltipHeight","preferredTop","maxLeft","maxTop","top","required","fits","nextSide","fallbackSide","shiftY","centeredLeft","centeredTop","topOverflow","bottomOverflow","showTooltip","hideTooltip","handleMouseEnter","handleMouseMove","handleMouseLeave","handleBlur","tooltipClass"],"mappings":";;;AAEO,SAASA,GACdC,GACAC,GACAC,GACA;AACA,QAAM,CAACC,GAAeC,CAAgB,IAAIC,GAASJ,CAAY,GACzDK,IAAeN,MAAoB,QACnCO,IAAQD,IAAeN,IAAkBG,GAEzCK,IAAWC;AAAA,IACf,CAACC,MAAiB;AAChB,MAAKJ,KACHF,EAAiBM,CAAS,GAG5BR,KAAA,QAAAA,EAAWQ;AAAA,IACb;AAAA,IACA,CAACJ,GAAcJ,CAAQ;AAAA,EAAA;AAGzB,SAAO,CAACK,GAAOC,GAAUF,CAAY;AACvC;;;;;;;;;;;;;;;;;;;;;GClBMK,KAAc,MAClB,gBAAAC,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MAAK,eAAY,QAC3J,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,eAAA,CAAe,EAAA,CACzB,GAGIC,KAAW,MACf,gBAAAD,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MAAK,eAAY,QAC3J,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,mBAAA,CAAmB,EAAA,CAC7B,GAGIE,KAAY,MAChB,gBAAAF,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MAAK,eAAY,QAC3J,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,WAAA,CAAW,EAAA,CACrB;AA2CF,SAASG,GAAgBd,GAA0Ce,GAAmC;AACpG,SAAIf,MAAiB,SAAkBA,IAChCe,IAAW,CAAA,IAAK;AACzB;AAEA,SAASC,GAAWC,GAA8BC,GAAmBH,GAAmB;AACtF,SAAIA,KACK,MAAM,QAAQE,CAAY,IAC7BA,EAAa,SAASC,CAAS,IAI9BD,MAAiBC;AAC1B;AAEA,SAASC,GACPF,GACAC,GACAH,GACgB;AAChB,QAAMK,IAAOJ,GAAWC,GAAcC,GAAWH,CAAQ;AAEzD,MAAIA,GAAU;AACZ,UAAMM,IAAS,MAAM,QAAQJ,CAAY,IAAIA,IAAeA,IAAe,CAACA,CAAY,IAAI,CAAA;AAC5F,WAAIG,IACKC,EAAO,OAAO,CAACf,MAAUA,MAAUY,CAAS,IAG9C,CAAC,GAAGG,GAAQH,CAAS;AAAA,EAC9B;AAEA,SAAIE,IAAa,KACVF;AACT;AAEA,SAASI,GAAcC,GAAsC;AAC3D,SAAI,OAAOA,KAAY,WAAiB,GAAGA,CAAO,OAC3CA;AACT;AAEO,SAASC,GAAU;AAAA,EACxB,OAAAC;AAAA,EACA,UAAAV,IAAW;AAAA,EACX,eAAAW,IAAgB;AAAA,EAChB,WAAAC,IAAY;AAAA,EACZ,QAAAC,IAAS;AAAA,EACT,WAAAC,IAAY;AAAA,EACZ,QAAAC,IAAS;AAAA,EACT,gBAAAC,IAAiB;AAAA,EACjB,SAAAR;AAAA,EACA,UAAAS,IAAW;AAAA,EACX,eAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,aAAAC;AAAA,EACA,eAAAC;AAAA,EACA,WAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,OAAAjC;AAAA,EACA,cAAAN;AAAA,EACA,eAAAwC;AAAA,EACA,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,GAAGC;AACL,GAAmB;AACjB,QAAMC,IAAKC,GAAA,GACL,CAACC,GAAWC,CAAY,IAAIjD;AAAA,IAChCQ;AAAA,IACAQ,GAAgBd,GAAce,CAAQ;AAAA,IACtCyB;AAAA,EAAA,GAGIQ,IAAM;AAAA,IACVC,GAAO;AAAA,IACPA,GAAOrB,CAAM;AAAA,IACbE,MAAW,WAAWmB,GAAO,SAAS;AAAA,IACtCpB,MAAc,SAASoB,GAAO,gBAAgB;AAAA,IAC9CpB,MAAc,WAAWoB,GAAO,kBAAkB;AAAA,IAClDlB,IAAiB,OAAOkB,GAAO;AAAA,IAC/BR;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GACLS,IAAY;AAAA,IAChB,GAAGR;AAAA,IACH,GAAInB,MAAY,SAAY,EAAE,mBAAmBD,GAAcC,CAAO,MAAM;AAAA,EAAA;AAG9E,SACE,gBAAAZ,EAAC,OAAA,EAAK,GAAGgC,GAAO,WAAWK,GAAK,OAAOE,GACpC,UAAAzB,EAAM,IAAI,CAAC0B,MAAS;;AACnB,UAAM/B,IAAOJ,GAAW8B,GAAWK,EAAK,OAAOpC,CAAQ,GACjDqC,IAAepB,KAAYmB,EAAK,UAChCE,IAAY,GAAGT,CAAE,IAAIO,EAAK,KAAK,YAC/BG,IAAY,GAAGV,CAAE,IAAIO,EAAK,KAAK;AAErC,WACE,gBAAAI;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAW,CAACN,GAAO,MAAM7B,IAAO6B,GAAO,OAAO,MAAMG,IAAeH,GAAO,WAAW,MAAMhB,GAAekB,EAAK,SAAS,EACrH,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,QACX,aAAW/B,IAAO,SAAS;AAAA,QAE3B,UAAA;AAAA,UAAA,gBAAAmC;AAAA,YAAC;AAAA,YAAA;AAAA,cACE,GAAGJ,EAAK;AAAA,cACT,MAAK;AAAA,cACL,IAAIE;AAAA,cACJ,WAAW,CAACJ,GAAO,SAASX,GAAkBJ,IAAiBsB,IAAAL,EAAK,iBAAL,gBAAAK,EAAmB,SAAS,EACxF,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,cACX,OAAO,EAAE,GAAGrB,GAAa,IAAGsB,KAAAN,EAAK,iBAAL,gBAAAM,GAAmB,MAAA;AAAA,cAC/C,iBAAerC;AAAA,cACf,iBAAekC;AAAA,cACf,UAAUF;AAAA,cACV,SAAS,CAACM,MAAU;;AAClB,iBAAAD,MAAAD,IAAAL,EAAK,iBAAL,gBAAAK,EAAmB,YAAnB,QAAAC,GAAA,KAAAD,GAA6BE,IACxBA,EAAM,oBACTX,EAAa5B,GAAa2B,GAAWK,EAAK,OAAOpC,CAAQ,CAAC;AAAA,cAE9D;AAAA,cAEC,UAAA;AAAA,gBAAAoC,EAAK,QAAQ,gBAAAxC,EAAC,QAAA,EAAK,WAAWsC,GAAO,MAAO,YAAK,KAAA,CAAK;AAAA,kCACtD,QAAA,EAAK,WAAWA,GAAO,OAAQ,YAAK,OAAM;AAAA,gBAC1C,CAACvB,KACA,gBAAAf;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBAAK,WAAW,CAACsC,GAAO,WAAWtB,MAAc,eAAesB,GAAO,YAAYA,GAAO,OAAO,EAC/F,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,oBAER,UAAAtB,MAAc,eAAgBP,IAAO,gBAAAT,EAACE,IAAA,CAAA,CAAU,IAAK,gBAAAF,EAACC,IAAA,CAAA,CAAS,IAAM,gBAAAD,EAACD,IAAA,CAAA,CAAY;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACrF;AAAA,YAAA;AAAA,UAAA;AAAA,UAIJ,gBAAAC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,IAAI2C;AAAA,cACJ,WAAWL,GAAO;AAAA,cAClB,MAAK;AAAA,cACL,mBAAiBI;AAAA,cACjB,eAAa,CAACjC;AAAA,cAEd,UAAA,gBAAAT;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACE,GAAGwC,EAAK;AAAA,kBACT,WAAW,CAACF,GAAO,SAASV,GAAkBH,IAAeuB,IAAAR,EAAK,iBAAL,gBAAAQ,EAAmB,SAAS,EACtF,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,kBACX,OAAO,EAAE,GAAGtB,GAAW,IAAGuB,IAAAT,EAAK,iBAAL,gBAAAS,EAAmB,MAAA;AAAA,kBAE5C,UAAAT,EAAK;AAAA,gBAAA;AAAA,cAAA;AAAA,YACR;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,MApDKA,EAAK;AAAA,IAAA;AAAA,EAuDhB,CAAC,EAAA,CACH;AAEJ;AAEA3B,GAAU,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GCzNlBqC,KAAQ,MACZ,gBAAAlD,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MAC1I,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,uBAAA,CAAsB,EAAA,CAChC;AAmBK,SAASmD,GAAM;AAAA,EACpB,SAAAC,IAAU;AAAA,EACV,MAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,SAAAC,IAAU;AAAA,EACV,aAAAC,IAAc;AAAA,EACd,WAAAxC,IAAY;AAAA,EACZ,OAAAyC,IAAQ;AAAA,EACR,gBAAAC,IAAiB;AAAA,EACjB,aAAAC,IAAc;AAAA,EACd,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAA/B;AAAA,EACA,GAAGE;AACL,GAAe;AACb,QAAMK,IAAM;AAAA,IACVC,GAAO;AAAA,IACPA,GAAOc,CAAO;AAAA,IACdG,IAAUjB,GAAO,UAAU;AAAA,IAC3BkB,IAAclB,GAAO,cAAc;AAAA,IACnCtB,IAAYsB,GAAO,YAAY;AAAA,IAC/BgB,IAAOhB,GAAO,OAAO;AAAA,IACrBmB,KAAS,CAACzC,IAAYsB,GAAO,QAAQ;AAAA,IACrCmB,KAAS,CAACzC,IAAYsB,GAAO,SAASoB,CAAc,EAAE,IAAI;AAAA,IAC1DC,KAAe,CAAC3C,IAAYsB,GAAO,UAAU;AAAA,IAC7CR;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAc,EAAC,QAAA,EAAM,GAAGZ,GAAO,WAAWK,GACzB,UAAA;AAAA,IAAA,CAACrB,KAAaqC,IAAOA,IAAO;AAAA,IAC3BrC,IAAuB,OAAX6C;AAAA,IACbF,KAAe,CAAC3C,KACf,gBAAAhB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,WAAWsC,GAAO;AAAA,QAClB,cAAW;AAAA,QACX,SAASsB;AAAA,QAET,4BAACV,IAAA,CAAA,CAAM;AAAA,MAAA;AAAA,IAAA;AAAA,EACT,GAEJ;AAEJ;AAEAC,GAAM,cAAc;;;;;;;;;;;GCvEdW,KAAmB,MACvB,gBAAA9D,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MAC1I,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,gBAAA,CAAe,EAAA,CACzB;AAoBK,SAAS+D,GAAW;AAAA,EACzB,OAAAjD;AAAA,EACA,WAAAkD,sBAAaF,IAAA,EAAiB;AAAA,EAC9B,OAAAL,IAAQ;AAAA,EACR,cAAAQ,IAAe;AAAA,EACf,WAAAnC;AAAA,EACA,GAAGE;AACL,GAAoB;AAClB,QAAMK,IAAM,CAACC,GAAO,YAAYR,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAEnE,2BACG,OAAA,EAAK,GAAGE,GAAO,WAAWK,GAAK,cAAYoB,GAC1C,UAAA,gBAAAzD,EAAC,MAAA,EAAG,WAAWsC,GAAO,MACnB,YAAM,IAAI,CAACE,GAAM0B,MAAU;;AAC1B,UAAMC,IAASD,MAAUpD,EAAM,SAAS,GAClCsD,IAAY5B,EAAK,WAAW2B,GAC5BE,IAAa7B,EAAK,YAAY4B;AAEpC,WACE,gBAAAxB,EAAC,MAAA,EAAG,WAAWN,GAAO,MACnB,UAAA;AAAA,MAAA4B,IAAQ,uBACN,QAAA,EAAK,WAAW5B,GAAO,WAAW,eAAY,QAC5C,UAAA0B,EAAA,CACH;AAAA,MAGDxB,EAAK,QAAQ,CAAC6B,IACb,gBAAArE;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAGwC,EAAK;AAAA,UACT,WAAW,CAACF,GAAO,OAAMO,IAAAL,EAAK,cAAL,gBAAAK,EAAgB,SAAS,EAC/C,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,UACX,MAAML,EAAK;AAAA,UAEV,UAAAA,EAAK;AAAA,QAAA;AAAA,MAAA,IAENA,EAAK,WAAW,CAAC6B,IACnB,gBAAArE;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAGwC,EAAK;AAAA,UACT,MAAK;AAAA,UACL,WAAW,CAACF,GAAO,MAAMA,GAAO,SAAQQ,IAAAN,EAAK,gBAAL,gBAAAM,EAAkB,SAAS,EAChE,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,UACX,SAASN,EAAK;AAAA,UAEb,UAAAA,EAAK;AAAA,QAAA;AAAA,MAAA,IAGR,gBAAAxC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAW;AAAA,YACTsC,GAAO;AAAA,YACP2B,KAAgBG,KAAa,CAAC5B,EAAK,WAAWF,GAAO,iBAAiB;AAAA,YACtEE,EAAK,WAAWF,GAAO,WAAW;AAAA,UAAA,EAEjC,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,UACX,gBAAc8B,IAAY,SAAS;AAAA,UAElC,UAAA5B,EAAK;AAAA,QAAA;AAAA,MAAA;AAAA,IACR,EAAA,GAxC6B0B,CA0CjC;AAAA,EAEJ,CAAC,GACH,GACF;AAEJ;AAEAH,GAAW,cAAc;AAElB,MAAMO,KAAaP;AClFnB,SAASQ,GAAW;AAAA,EACzB,WAAAC,IAAY;AAAA,EACZ,OAAAC,IAAQ;AAAA,EACR,QAAAC,IAAS;AAAA,EACT,UAAAC,IAAW;AAAA,EACX,QAAAC,IAAS;AAAA,EACT,eAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAjB;AAAA,EACA,WAAA/B;AAAA,EACA,OAAAC;AAAA,EACA,GAAGC;AACL,GAAoB;AAClB,QAAM+C,IAAU;AAAA,IACd;AAAA,IACAN,IAAQ,aAAa;AAAA,IACrBC,IAAS,cAAc;AAAA,IACvBC,IAAW,iBAAiB;AAAA,IAC5BC,IAAS,cAAc;AAAA,IACvB9C;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAELkD,IACJR,MAAc,aACV,EAAE,WAAW,QAAQ,WAAW,SAAA,IAChCA,MAAc,eACZ,EAAE,WAAW,QAAQ,WAAW,aAChC,EAAE,UAAU,OAAA,GAEdS,IAAUJ,MAAkB,SAC9B,EAAE,UAAU,GAAGA,CAAa,SAC5B;AAEJ,SACE,gBAAA7E;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGgC;AAAA,MACJ,WAAW+C;AAAA,MACX,OAAO,EAAE,QAAAD,GAAQ,GAAGE,GAAe,GAAGC,GAAS,GAAGlD,EAAA;AAAA,MAEjD,UAAA8B;AAAA,IAAA;AAAA,EAAA;AAGP;AAEAU,GAAW,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GCxCZW,KAASC;AAAA,EACpB,CACE;AAAA,IACE,MAAAC,IAAO;AAAA,IACP,SAAAhC,IAAU;AAAA,IACV,MAAAiC,IAAO;AAAA,IACP,MAAAhC;AAAA,IACA,SAAAE,IAAU;AAAA,IACV,SAAA+B,IAAU;AAAA,IACV,aAAA9B,IAAc;AAAA,IACd,aAAA+B,IAAc;AAAA,IACd,UAAA1B;AAAA,IACA,WAAA/B;AAAA,IACA,UAAAT;AAAA,IACA,GAAGW;AAAA,EAAA,GAELwD,MACG;AACH,UAAMC,IAEJ5B,KAAa,SACZ,OAAOA,KAAa,YAAYA,EAAS,OAAO,SAAS,IACtD6B,IAAa,EAAQrC,KAAS,CAACoC,GAE/BV,IAAU;AAAA,MACdzC,GAAO;AAAA,MACPA,GAAOc,CAAO;AAAA,MACdd,GAAO+C,CAAI;AAAA,MACX9B,IAAUjB,GAAO,UAAU;AAAA,MAC3BgD,IAAUhD,GAAO,UAAU;AAAA,MAC3BgD,KAAWI,IAAapD,GAAO,gBAAgB;AAAA,MAC/CkB,IAAclB,GAAO,cAAc;AAAA,MACnCiD,IAAcjD,GAAO,cAAc;AAAA,MACnCR;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,WACE,gBAAAc;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA4C;AAAA,QACA,MAAAJ;AAAA,QACA,UAAA/D;AAAA,QACA,WAAW0D;AAAA,QACV,GAAG/C;AAAA,QAEH,UAAA;AAAA,UAAAqB,sBAAQ,QAAA,EAAK,WAAWf,GAAO,MAAO,aAAK,IAAU;AAAA,UACrDmD,IACC,gBAAAzF,EAAC,QAAA,EAAK,WAAWsC,GAAO,SAAU,UAAAuB,GAAS,IACzC;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF;AAEAqB,GAAO,cAAc;;;;;;;;;;;;;;;;;;;;GC/DfS,KAAuC;AAAA,EAC3C,MAAMrD,GAAO;AAAA,EACb,IAAIA,GAAO;AAAA,EACX,IAAIA,GAAO;AAAA,EACX,IAAIA,GAAO;AACb,GAEMY,KAAQ,MACZ,gBAAAlD,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MACxI,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,uBAAA,CAAsB,EAAA,CAChC;AAGK,SAAS4F,GAAK;AAAA,EACnB,SAAAC,IAAU;AAAA,EACV,MAAAC,IAAO;AAAA,EACP,SAAAC;AAAA,EACA,eAAAC;AAAA,EACA,UAAAnC;AAAA,EACA,WAAA/B;AAAA,EACA,GAAGE;AACL,GAAc;AACZ,QAAMK,IAAM,CAACC,GAAO,MAAMqD,GAAQE,CAAO,GAAGC,IAAOxD,GAAO,OAAO,MAAMR,CAAS,EAC7E,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAc,EAAC,OAAA,EAAK,GAAGZ,GAAO,WAAWK,GACxB,UAAA;AAAA,IAAA0D,KACC,gBAAA/F;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,cAAW;AAAA,QACV,GAAGgG;AAAA,QACJ,WAAW,CAAC1D,GAAO,UAAU0D,KAAA,gBAAAA,EAAe,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,QAC/E,SAASD;AAAA,QAET,4BAAC7C,IAAA,CAAA,CAAM;AAAA,MAAA;AAAA,IAAA;AAAA,IAGVW;AAAA,EAAA,GACH;AAEJ;AAEA+B,GAAK,cAAc;AAUZ,SAASK,GAAW;AAAA,EACzB,MAAA5C;AAAA,EACA,OAAA6C;AAAA,EACA,UAAAC;AAAA,EACA,WAAArE;AAAA,EACA,GAAGE;AACL,GAAoB;AAClB,SACE,gBAAAY,EAAC,OAAA,EAAK,GAAGZ,GAAO,WAAW,CAACM,GAAO,QAAQR,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAC3E,UAAA;AAAA,IAAAuB,KAAQ,gBAAArD,EAAC,QAAA,EAAK,WAAWsC,GAAO,YAAa,UAAAe,GAAK;AAAA,sBAClD,OAAA,EACC,UAAA;AAAA,MAAA,gBAAArD,EAAC,OAAA,EAAI,WAAWsC,GAAO,OAAQ,UAAA4D,GAAM;AAAA,MACpCC,KAAY,gBAAAnG,EAAC,OAAA,EAAI,WAAWsC,GAAO,UAAW,UAAA6D,EAAA,CAAS;AAAA,IAAA,EAAA,CAC1D;AAAA,EAAA,GACF;AAEJ;AAEAF,GAAW,cAAc;AASlB,SAASG,GAAS;AAAA,EACvB,OAAAzG;AAAA,EACA,MAAA0G;AAAA,EACA,OAAAC;AAAA,EACA,gBAAAC,IAAiB;AAAA,EACjB,WAAAzE;AAAA,EACA,GAAGE;AACL,GAAkB;AAChB,QAAMwE,IAAa;AAAA,IACjBlE,GAAO;AAAA,IACPiE,MAAmB,aACfjE,GAAO,gBACPiE,MAAmB,aACjBjE,GAAO,gBACPA,GAAO;AAAA,EAAA,EAEZ,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAM,EAAC,OAAA,EAAK,GAAGZ,GAAO,WAAW,CAACM,GAAO,MAAMR,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAC1E,UAAA;AAAA,IAAA,gBAAAc,EAAC,QAAA,EAAK,WAAWN,GAAO,WACrB,UAAA;AAAA,MAAA3C;AAAA,MACA0G,KAAQ,gBAAAzD,EAAC,QAAA,EAAK,WAAWN,GAAO,UAAU,UAAA;AAAA,QAAA;AAAA,QAAE+D;AAAA,MAAA,EAAA,CAAK;AAAA,IAAA,GACpD;AAAA,IACCC,KAAS,gBAAAtG,EAAC,QAAA,EAAK,WAAWwG,GAAa,UAAAF,EAAA,CAAM;AAAA,EAAA,GAChD;AAEJ;AAEAF,GAAS,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GC3GjBK,KAAe,MACnB,gBAAA7D,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MAAK,eAAY,QAC3J,UAAA;AAAA,EAAA,gBAAA5C,EAAC,QAAA,EAAK,GAAE,gBAAA,CAAgB;AAAA,EACxB,gBAAAA,EAAC,QAAA,EAAK,GAAE,KAAI,GAAE,KAAI,OAAM,MAAK,QAAO,MAAK,IAAG,IAAA,CAAI;AAAA,EAChD,gBAAAA,EAAC,QAAA,EAAK,GAAE,WAAA,CAAW;AAAA,GACrB,GAGI0G,KAAY,MAChB,gBAAA9D,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MAAK,eAAY,QAC3J,UAAA;AAAA,EAAA,gBAAA5C,EAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI;AAAA,EAC9B,gBAAAA,EAAC,QAAA,EAAK,GAAE,cAAA,CAAc;AAAA,GACxB,GAGIkD,KAAQ,MACZ,gBAAAlD,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MAAK,eAAY,QAC3J,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,uBAAA,CAAuB,EAAA,CACjC,GA2BI2G,KAAuD;AAAA,EAC3D,MAAM;AAAA,EACN,MAAM;AAAA,EACN,UAAU;AAAA,EACV,OAAO;AACT,GAEMC,KAAa;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEMC,KAAW,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,GAC7CC,KAAc,MAAM,KAAK,EAAE,QAAQ,MAAM,CAACC,GAAG7C,MAAU8C,GAAI9C,CAAK,CAAC,GACjE+C,KAAgB,MAAM,KAAK,EAAE,QAAQ,MAAM,CAACF,GAAG7C,MAAU8C,GAAI9C,CAAK,CAAC;AAEzE,SAASgD,GAAYC,GAAyB;AAC5C,SAAOA,MAAS,SAAS,gBAAAnH,EAAC0G,IAAA,CAAA,CAAU,sBAAMD,IAAA,EAAa;AACzD;AAEA,SAASO,GAAIrH,GAAe;AAC1B,SAAO,OAAOA,CAAK,EAAE,SAAS,GAAG,GAAG;AACtC;AAEA,SAASyH,GAAgBC,GAAY;AACnC,SAAO,GAAGA,EAAK,YAAA,CAAa,IAAIL,GAAIK,EAAK,SAAA,IAAa,CAAC,CAAC,IAAIL,GAAIK,EAAK,QAAA,CAAS,CAAC;AACjF;AAEA,SAASC,GAAiBD,GAAY;AACpC,SAAO,GAAGA,EAAK,YAAA,CAAa,IAAIL,GAAIK,EAAK,SAAA,IAAa,CAAC,CAAC;AAC1D;AAEA,SAASE,GAAU5H,GAAewH,GAAyB;AACzD,QAAMK,IAAWL,MAAS,UAAU,GAAGxH,CAAK,QAAQA,EAAM,MAAM,GAAG,EAAE;AACrE,MAAI,CAAC,sBAAsB,KAAK6H,CAAQ,EAAG,QAAO;AAElD,QAAM,CAACC,GAAMC,GAAOC,CAAG,IAAIH,EAAS,MAAM,GAAG,EAAE,IAAI,MAAM,GACnDH,IAAO,IAAI,KAAKI,GAAMC,IAAQ,GAAGC,CAAG;AAE1C,SACEN,EAAK,kBAAkBI,KACvBJ,EAAK,eAAeK,IAAQ,KAC5BL,EAAK,QAAA,MAAcM,IAEZ,OAGFN;AACT;AAEA,SAASO,GAAYjI,GAAe;AAClC,QAAMkI,IAAOlI,EAAM,MAAM,GAAG,EAAE,CAAC;AAC/B,UAAOkI,KAAA,gBAAAA,EAAM,MAAM,GAAG,OAAM;AAC9B;AAEA,SAASC,GAAUnI,GAAewH,GAAyB;AACzD,QAAMY,IAAYZ,MAAS,aAAaS,GAAYjI,CAAK,IAAIA,EAAM,MAAM,GAAG,CAAC;AAC7E,MAAI,CAAC,gBAAgB,KAAKoI,CAAS,EAAG,QAAO;AAE7C,QAAM,CAACC,GAAMC,CAAM,IAAIF,EAAU,MAAM,GAAG,EAAE,IAAI,MAAM;AACtD,SAAIC,IAAO,MAAMC,IAAS,KAAW,UAE9BF;AACT;AAEA,SAASG,GAAgBC,GAAgB;AACvC,QAAMV,IAAOU,EAAS,YAAA,GAChBT,IAAQS,EAAS,SAAA,GACjBC,IAAW,IAAI,KAAKX,GAAMC,GAAO,CAAC,GAClCW,IAAQ,IAAI,KAAKZ,GAAMC,GAAO,IAAIU,EAAS,QAAQ;AAEzD,SAAO,MAAM,KAAK,EAAE,QAAQ,MAAM,CAACrB,GAAG7C,MAAU;AAC9C,UAAMmD,IAAO,IAAI,KAAKgB,CAAK;AAC3B,WAAAhB,EAAK,QAAQgB,EAAM,QAAA,IAAYnE,CAAK,GAC7BmD;AAAA,EACT,CAAC;AACH;AAEA,SAASiB,GAAgB3I,GAAe4I,GAAuBC,GAAuB;AACpF,QAAMC,IAAW,OAAOF,KAAQ,WAAWA,IAAM,QAC3CG,IAAW,OAAOF,KAAQ,WAAWA,IAAM;AACjD,SAAO,GAASC,KAAY9I,IAAQ8I,KAAcC,KAAY/I,IAAQ+I;AACxE;AAEO,MAAMC,KAAgBxD;AAAA,EAC3B,CACE;AAAA,IACE,MAAAgC,IAAO;AAAA,IACP,OAAA1D;AAAA,IACA,UAAAmF;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,YAAAC,IAAa;AAAA,IACb,UAAAC,IAAW;AAAA,IACX,mBAAAC,IAAoB;AAAA,IACpB,WAAAC,IAAY;AAAA,IACZ,UAAA5H;AAAA,IACA,kBAAA6H;AAAA,IACA,OAAAvJ;AAAA,IACA,cAAAN,IAAe;AAAA,IACf,UAAAC;AAAA,IACA,eAAAuC;AAAA,IACA,YAAAsH;AAAA,IACA,cAAAC;AAAA,IACA,YAAAC;AAAA,IACA,WAAAvH;AAAA,IACA,OAAAC;AAAA,IACA,aAAAuH;AAAA,IACA,KAAAf;AAAA,IACA,KAAAC;AAAA,IACA,MAAAe;AAAA,IACA,GAAGvH;AAAA,EAAA,GAELwD,MACG;AACH,UAAMgE,IAAWC,GAAyB,IAAI,GACxCC,IAAaD,GAAwB,IAAI,GACzC,CAACE,GAAYC,CAAa,IAAInK,GAAS,EAAK,GAC5C,CAAC0I,GAAU0B,CAAW,IAAIpK,GAAS,MAAM8H,GAAUlI,GAAc8H,CAAI,KAAK,oBAAI,MAAM,GACpF,CAAC7G,GAAcwJ,CAAe,IAAI3K;AAAA,MACtCQ;AAAA,MACAN;AAAA,MACAwC;AAAA,IAAA;AAGF,IAAAkI,GAAoBvE,GAAK,MAAMgE,EAAS,OAA2B;AAEnE,UAAMnF,IAAahD,MAAYgI,KAAA,gBAAAA,EAAY,WACrCW,KAAW1J,EAAa,SAAS,GACjC8E,IAAO,QACP6E,IAAW1B,MAAOc,KAAA,gBAAAA,EAAY,MAC9Ba,IAAW1B,MAAOa,KAAA,gBAAAA,EAAY,MAC9Bc,IAAYZ,MAAQF,KAAA,gBAAAA,EAAY,OAChC,CAACe,IAAcC,CAAc,IAAIvC,GAAUxH,GAAc6G,CAAI,EAAE,MAAM,GAAG,GACxEmD,IAAY,OAAOL,KAAa,WAClC9C,MAAS,UAAU8C,EAAS,MAAM,GAAG,CAAC,IAAIA,EAAS,MAAM,GAAG,EAAE,IAC9D,QACEM,IAAY,OAAOL,KAAa,WAClC/C,MAAS,UAAU+C,EAAS,MAAM,GAAG,CAAC,IAAIA,EAAS,MAAM,GAAG,EAAE,IAC9D;AAEJ,IAAAM,GAAU,MAAM;AACd,UAAI,CAACb,EAAY;AAEjB,YAAMc,IAAelD,GAAUjH,GAAc6G,CAAI;AACjD,MAAA0C,EAAYY,KAAgB,oBAAI,MAAM;AAAA,IACxC,GAAG,CAACnK,GAAc6G,GAAMwC,CAAU,CAAC,GAEnCa,GAAU,MAAM;AACd,UAAI,CAACb,EAAY;AAEjB,YAAMe,IAAoB,CAAC3H,MAAwB;;AACjD,SAAKF,KAAA6G,EAAW,YAAX,QAAA7G,GAAoB,SAASE,EAAM,WACtC6G,EAAc,EAAK;AAAA,MAEvB,GAEMe,IAAgB,CAAC5H,MAAyB;AAC9C,QAAIA,EAAM,QAAQ,YAAU6G,EAAc,EAAK;AAAA,MACjD;AAEA,sBAAS,iBAAiB,eAAec,CAAiB,GAC1D,SAAS,iBAAiB,WAAWC,CAAa,GAE3C,MAAM;AACX,iBAAS,oBAAoB,eAAeD,CAAiB,GAC7D,SAAS,oBAAoB,WAAWC,CAAa;AAAA,MACvD;AAAA,IACF,GAAG,CAAChB,CAAU,CAAC;AAEf,UAAMiB,IAAe,CAAC7H,MAAyC;;AAC7D,MAAA+G,EAAgB/G,EAAM,OAAO,KAAK,GAClCzD,KAAA,QAAAA,EAAWyD,KACXF,IAAAwG,KAAA,gBAAAA,EAAY,aAAZ,QAAAxG,EAAA,KAAAwG,GAAuBtG;AAAA,IACzB,GAEM8H,KAAc,MAAM;;AACxB,MAAAf,EAAgB,EAAE,GAClBF,EAAc,EAAK,IACnB/G,IAAA2G,EAAS,YAAT,QAAA3G,EAAkB;AAAA,IACpB,GAEMiI,KAAqB,CAAC/H,MAA6C;;AAEvE,OADAF,IAAAuG,KAAA,gBAAAA,EAAc,YAAd,QAAAvG,EAAA,KAAAuG,GAAwBrG,IACpB,EAAAA,EAAM,oBAAoB,CAACiG,KAAqB3E,MAEpDuF,EAAc,EAAI;AAAA,IACpB,GAEMmB,IAAkB,CAAC1D,MAAe;AACtC,YAAM2D,IAAY5D,GAAgBC,CAAI;AAEtC,UAAIF,MAAS,YAAY;AACvB,QAAA2C,EAAgB,GAAGkB,CAAS,IAAIpD,GAAYtH,CAAY,KAAK,OAAO,EAAE;AACtE;AAAA,MACF;AAEA,MAAAwJ,EAAgBkB,CAAS,GACzBpB,EAAc,EAAK;AAAA,IACrB,GAEMqB,KAAmB,CAAC5D,MAAe;AACvC,MAAAyC,EAAgBxC,GAAiBD,CAAI,CAAC,GACtCuC,EAAc,EAAK;AAAA,IACrB,GAEMsB,KAAkB,CAACnD,MAAsB;AAC7C,UAAIZ,MAAS,QAAQ;AACnB,QAAA2C,EAAgB/B,CAAS;AACzB;AAAA,MACF;AAEA,YAAM0C,IAAelD,GAAUjH,GAAc6G,CAAI,yBAAS,KAAA;AAC1D,MAAA2C,EAAgB,GAAG1C,GAAgBqD,CAAY,CAAC,IAAI1C,CAAS,EAAE;AAAA,IACjE,GAEMoD,KAAiB,CAACC,GAAyBtL,MAAsB;AACrE,YAAM,CAACuL,GAAaC,EAAa,IAAIxD,GAAUxH,GAAc6G,CAAI,EAAE,MAAM,GAAG,GACtEoE,KAAWH,MAAS,SACtB,GAAGtL,CAAS,IAAIwL,EAAa,KAC7B,GAAGD,CAAW,IAAIvL,CAAS;AAE/B,MAAAoL,GAAgBK,EAAQ;AAAA,IAC1B,GAEMC,KAAY,CAACC,MAAmB;AACpC,MAAA5B,EAAY,CAAC6B,MAAgB;AAC3B,cAAMC,IAAW,IAAI,KAAKD,CAAW;AACrC,eAAAC,EAAS,SAASD,EAAY,SAAA,IAAaD,CAAM,GAC1CE;AAAA,MACT,CAAC;AAAA,IACH,GAEMC,KAAW,CAACH,MAAmB;AACnC,MAAA5B,EAAY,CAAC6B,MAAgB;AAC3B,cAAMC,IAAW,IAAI,KAAKD,CAAW;AACrC,eAAAC,EAAS,YAAYD,EAAY,YAAA,IAAgBD,CAAM,GAChDE;AAAA,MACT,CAAC;AAAA,IACH,GAEME,KAAc,MAAM;AACxB,YAAMC,wBAAY,KAAA;AAElB,UAAI3E,MAAS,SAAS;AACpB,QAAA8D,GAAiBa,CAAK;AACtB;AAAA,MACF;AAEA,UAAI3E,MAAS,QAAQ;AACnB,QAAA+D,GAAgB,GAAGlE,GAAI8E,EAAM,SAAA,CAAU,CAAC,IAAI9E,GAAI8E,EAAM,WAAA,CAAY,CAAC,EAAE;AACrE;AAAA,MACF;AAEA,MAAAf,EAAgBe,CAAK;AAAA,IACvB,GAEMC,KAAmB,CACvBX,GACAY,GACAC,MAEA,gBAAArJ,EAAC,OAAA,EAAI,WAAWN,EAAO,YAAY,cAAY0J,GAC7C,UAAA;AAAA,MAAA,gBAAAhM,EAAC,QAAA,EAAK,WAAWsC,EAAO,iBAAkB,UAAA0J,GAAU;AAAA,MACpD,gBAAAhM,EAAC,SAAI,WAAWsC,EAAO,aACpB,UAAA2J,EAAQ,IAAI,CAACC,OAAW;AACvB,cAAMC,KAAWf,MAAS,SACtBhB,OAAiB8B,KACjB7B,MAAmB6B,IACjBX,KAAWH,MAAS,SACtB,GAAGc,EAAM,IAAI7B,CAAc,KAC3B,GAAGD,EAAY,IAAI8B,EAAM,IACvBE,KAAejF,MAAS,SAC1BmB,GAAgBiD,IAAUtB,GAAUC,CAAQ,IAC5C;AAEJ,eACE,gBAAAlK;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,MAAK;AAAA,YACL,WAAW,CAACsC,EAAO,YAAY6J,KAAW7J,EAAO,eAAe,IAAI,EACjE,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,YACX,UAAU8J;AAAA,YACV,SAAS,MAAMjB,GAAeC,GAAMc,EAAM;AAAA,YAEzC,UAAAA;AAAA,UAAA;AAAA,UARIA;AAAA,QAAA;AAAA,MAWX,CAAC,EAAA,CACH;AAAA,IAAA,GACF,GAGIG,IAAa;AAAA,MACjB/J,EAAO;AAAA,MACPyG,IAAWzG,EAAO,UAAU;AAAA,MAC5BuG,IAAYvG,EAAO,WAAW;AAAA,MAC9B2G,IAAY3G,EAAO,UAAU;AAAA,MAC7BR;AAAA,MACAuH,KAAA,gBAAAA,EAAY;AAAA,IAAA,EAEX,OAAO,OAAO,EACd,KAAK,GAAG,GAELiD,KAAe;AAAA,MACnBhK,EAAO;AAAA,MACP+B,IAAa/B,EAAO,WAAW;AAAA,MAC/B8G,KAAA,gBAAAA,EAAc;AAAA,IAAA,EAEb,OAAO,OAAO,EACd,KAAK,GAAG,GAELmD,KACJ,gBAAA3J;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAGwG;AAAA,QACJ,KAAKM;AAAA,QACL,WAAW4C;AAAA,QACX,SAASxB;AAAA,QAER,UAAA;AAAA,UAAA/B,IAAW,gBAAA/I,EAAC,UAAK,WAAWsC,EAAO,UAAW,UAAA4E,GAAYC,CAAI,GAAE,IAAU;AAAA,UAC3E,gBAAAnH;AAAA,YAAC;AAAA,YAAA;AAAA,cACE,GAAGgC;AAAA,cACH,GAAGqH;AAAA,cACJ,KAAKG;AAAA,cACL,MAAApE;AAAA,cACA,KAAK6E;AAAA,cACL,KAAKC;AAAA,cACL,MAAMC;AAAA,cACN,UAAU;AAAA,cACV,UAAU9F;AAAA,cACV,OAAO/D,EAAa,QAAQ,KAAK,GAAG;AAAA,cACpC,aAAagJ,KAAe3C,GAAkBQ,CAAI;AAAA,cAClD,UAAUyD;AAAA,cACV,SAAS,CAAC7H,MAAU;;AAClB,iBAAAF,IAAAb,EAAM,YAAN,QAAAa,EAAA,KAAAb,GAAgBe,KAChBD,IAAAuG,KAAA,gBAAAA,EAAY,YAAZ,QAAAvG,EAAA,KAAAuG,GAAsBtG,IAClBiG,KAAqB,CAAC3E,KAAYuF,EAAc,EAAI;AAAA,cAC1D;AAAA,cACA,WAAWyC;AAAA,cACX,OAAO,EAAE,GAAGtK,GAAO,GAAGsH,KAAA,gBAAAA,EAAY,MAAA;AAAA,YAAM;AAAA,UAAA;AAAA,UAEzCR,IACC,gBAAA7I;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,cAAY8I;AAAA,cACZ,OAAOA;AAAA,cACP,UAAUzE,KAAc,CAAC2F;AAAA,cACzB,SAAS,CAACjH,MAAU;;AAClB,gBAAAA,EAAM,gBAAA,IACNF,IAAAqG,KAAA,gBAAAA,EAAkB,YAAlB,QAAArG,EAAA,KAAAqG,GAA4BnG,IACvBA,EAAM,oBAAkB8H,GAAA;AAAA,cAC/B;AAAA,cACA,WAAW,CAACvI,EAAO,UAAU4G,KAAA,gBAAAA,EAAkB,SAAS,EACrD,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,cAEV,WAAAA,KAAA,gBAAAA,EAAkB,aAAY,gBAAAlJ,EAACkD,IAAA,CAAA,CAAM;AAAA,YAAA;AAAA,UAAA,IAEtC;AAAA,UACHyG,KAAc,CAACtF,IACd,gBAAAzB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWN,EAAO;AAAA,cAClB,MAAK;AAAA,cACL,cAAYmB,KAAS;AAAA,cACrB,SAAS,CAACV,MAAUA,EAAM,gBAAA;AAAA,cAEzB,UAAA;AAAA,gBAAAoE,MAAS,SACR,gBAAAvE,EAAC,OAAA,EAAI,WAAWN,EAAO,YACpB,UAAA;AAAA,kBAAAyJ,GAAiB,QAAQ,QAAQjF,EAAW;AAAA,kBAC5CiF,GAAiB,UAAU,UAAU9E,EAAa;AAAA,gBAAA,EAAA,CACrD,IAEA,gBAAArE,EAAA4J,IAAA,EACE,UAAA;AAAA,kBAAA,gBAAA5J,EAAC,OAAA,EAAI,WAAWN,EAAO,cACrB,UAAA;AAAA,oBAAA,gBAAAtC,EAAC,UAAA,EAAO,MAAK,UAAS,WAAWsC,EAAO,QAAQ,cAAW,kBAAiB,SAAS,MAAM6E,MAAS,UAAUyE,GAAS,EAAE,IAAIJ,GAAU,EAAE,GACvI,4BAAC,QAAA,EAAK,eAAY,QAAO,UAAA,IAAA,CAAC,EAAA,CAC5B;AAAA,oBACA,gBAAAxL,EAAC,UAAK,WAAWsC,EAAO,aACrB,UAAA6E,MAAS,UAAUgB,EAAS,YAAA,IAAgB,GAAGvB,GAAWuB,EAAS,UAAU,CAAC,IAAIA,EAAS,aAAa,IAC3G;AAAA,oBACA,gBAAAnI,EAAC,UAAA,EAAO,MAAK,UAAS,WAAWsC,EAAO,QAAQ,cAAW,cAAa,SAAS,MAAM6E,MAAS,UAAUyE,GAAS,CAAC,IAAIJ,GAAU,CAAC,GACjI,4BAAC,QAAA,EAAK,eAAY,QAAO,UAAA,IAAA,CAAC,EAAA,CAC5B;AAAA,kBAAA,GACF;AAAA,kBAECrE,MAAS,UACZ,gBAAAnH,EAAC,OAAA,EAAI,WAAWsC,EAAO,WACpB,UAAAsE,GAAW,IAAI,CAAC6F,GAAWvI,MAAU;AACpC,0BAAMwI,IAAY,IAAI,KAAKvE,EAAS,YAAA,GAAejE,GAAO,CAAC,GACrDyI,KAAarF,GAAiBoF,CAAS,GACvCP,KAAWQ,OAAerM,EAAa,MAAM,GAAG,CAAC,GACjDsM,KAAgBtE,GAAgBqE,IAAYrC,GAAWC,CAAS;AAEtE,2BACE,gBAAAvK;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBAEC,MAAK;AAAA,wBACL,WAAW,CAACsC,EAAO,UAAU6J,KAAW7J,EAAO,gBAAgB,IAAI,EAChE,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,wBACX,UAAUsK;AAAA,wBACV,SAAS,MAAM3B,GAAiByB,CAAS;AAAA,wBAExC,UAAAD,EAAU,MAAM,GAAG,CAAC;AAAA,sBAAA;AAAA,sBARhBA;AAAA,oBAAA;AAAA,kBAWX,CAAC,EAAA,CACH,IAEI,gBAAA7J,EAAA4J,IAAA,EACF,UAAA;AAAA,oBAAA,gBAAAxM,EAAC,SAAI,WAAWsC,EAAO,UACpB,UAAAuE,GAAS,IAAI,CAACgG,GAAS3I,MACtB,gBAAAlE,EAAC,QAAA,EAAkC,eAAxB,GAAG6M,CAAO,IAAI3I,CAAK,EAAa,CAC5C,GACH;AAAA,oBACA,gBAAAlE,EAAC,OAAA,EAAI,WAAWsC,EAAO,SACpB,aAAgB6F,CAAQ,EAAE,IAAI,CAACd,MAAS;AACvC,4BAAM2D,IAAY5D,GAAgBC,CAAI,GAChC8E,IAAWnB,MAAc1K,EAAa,MAAM,GAAG,EAAE,GACjDwL,KAAQd,MAAc5D,GAAgB,oBAAI,MAAM,GAChD0F,KAAUzF,EAAK,SAAA,MAAec,EAAS,SAAA,GACvC4E,KAAezE,GAAgB0C,GAAWV,GAAWC,CAAS;AAEpE,6BACE,gBAAAvK;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BAEC,MAAK;AAAA,0BACL,WAAW;AAAA,4BACTsC,EAAO;AAAA,4BACP6J,IAAW7J,EAAO,cAAc;AAAA,4BAChCwJ,KAAQxJ,EAAO,QAAQ;AAAA,4BACvBwK,KAAUxK,EAAO,aAAa;AAAA,0BAAA,EAE7B,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,0BACX,UAAUyK;AAAA,0BACV,SAAS,MAAMhC,EAAgB1D,CAAI;AAAA,0BAElC,YAAK,QAAA;AAAA,wBAAQ;AAAA,wBAbT2D;AAAA,sBAAA;AAAA,oBAgBX,CAAC,EAAA,CACH;AAAA,oBACC7D,MAAS,aACR,gBAAAvE,EAAC,OAAA,EAAI,WAAWN,EAAO,kBACpB,UAAA;AAAA,sBAAAyJ,GAAiB,QAAQ,QAAQjF,EAAW;AAAA,sBAC5CiF,GAAiB,UAAU,UAAU9E,EAAa;AAAA,oBAAA,EAAA,CACrD,IACE;AAAA,kBAAA,EAAA,CACF;AAAA,gBAAA,GAEJ;AAAA,gBAGF,gBAAArE,EAAC,OAAA,EAAI,WAAWN,EAAO,cACrB,UAAA;AAAA,kBAAA,gBAAAtC,EAAC,UAAA,EAAO,MAAK,UAAS,WAAWsC,EAAO,WAAW,SAASuI,IAAa,UAAA,QAAA,CAAK;AAAA,kBAC9E,gBAAA7K,EAAC,UAAA,EAAO,MAAK,UAAS,WAAWsC,EAAO,WAAW,SAASuJ,IACzD,gBAAS,UAAU,eAAe1E,MAAS,SAAS,QAAQ,QAAA,CAC/D;AAAA,gBAAA,EAAA,CACF;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA,IAEA;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAIR,WAAI,CAAC1D,KAAS,CAACmF,KAAY,CAACO,IACnBoD,uBAIN,OAAA,EAAK,GAAGpD,GAAY,WAAW,CAAC7G,EAAO,OAAO6G,KAAA,gBAAAA,EAAY,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAC3F,UAAA;AAAA,MAAA1F,sBAAS,SAAA,EAAM,WAAWnB,EAAO,OAAQ,aAAM,IAAW;AAAA,MAC1DiK;AAAA,MACA3D,IAAW,gBAAA5I,EAAC,QAAA,EAAK,WAAWsC,EAAO,UAAW,aAAS,IAAU;AAAA,IAAA,GACpE;AAAA,EAEJ;AACF;AAEAqG,GAAc,cAAc;;;;;;;;;;;;;;;;;;;GCthBtBzF,KAAQ,MACZ,gBAAAlD,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MAAK,eAAY,QAC3J,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,uBAAA,CAAuB,EAAA,CACjC,GAGIgN,KAAa,MACjB,gBAAAhN,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MAAK,eAAY,QAC3J,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,4EAAA,CAA4E,EAAA,CACtF,GAkCIiN,KAAwB,CAACC,MAC7B,GAAGA,CAAK,IAAIA,MAAU,IAAI,SAAS,OAAO,aAEtCC,KACJ,gBAAAvK,EAAA4J,IAAA,EACE,UAAA;AAAA,EAAA,gBAAAxM,EAACgN,IAAA,EAAW;AAAA,EAAE;AAAA,GAEhB;AAGF,SAASI,GAAeC,GAAe;AACrC,MAAIA,IAAQ,KAAM,QAAO,GAAGA,CAAK;AAEjC,QAAMC,IAAQ,CAAC,MAAM,MAAM,MAAM,IAAI;AACrC,MAAIjI,IAAOgI,IAAQ,MACfE,IAAY;AAEhB,SAAOlI,KAAQ,QAAQkI,IAAYD,EAAM,SAAS;AAChD,IAAAjI,KAAQ,MACRkI,KAAa;AAGf,SAAO,GAAGlI,KAAQ,KAAKA,EAAK,QAAQ,CAAC,IAAIA,EAAK,QAAQ,CAAC,CAAC,IAAIiI,EAAMC,CAAS,CAAC;AAC9E;AAEA,SAASC,GAAaC,GAAYC,GAAuB;AACvD,SAAKA,IACE,GAAGD,EAAK,IAAI,KAAKL,GAAeK,EAAK,IAAI,CAAC,MADvBA,EAAK;AAEjC;AAEA,SAASE,GAAiBC,GAAe;AACvC,SAAOA,EAAM,OAAO,CAACC,GAAOJ,MAASI,IAAQJ,EAAK,MAAM,CAAC;AAC3D;AAEO,MAAMK,KAAY3I;AAAA,EACvB,CACE;AAAA,IACE,OAAA1B;AAAA,IACA,UAAAmF;AAAA,IACA,aAAAmF,IAAcZ;AAAA,IACd,gBAAAa,IAAiB;AAAA,IACjB,WAAAnF,IAAY;AAAA,IACZ,YAAAC,IAAa;AAAA,IACb,gBAAAmF,IAAiBhB;AAAA,IACjB,YAAAiB,IAAa;AAAA,IACb,cAAAR,IAAe;AAAA,IACf,WAAAzE,IAAY;AAAA,IACZ,eAAAkF;AAAA,IACA,cAAAC,IAAe,CAAA;AAAA,IACf,UAAA9O;AAAA,IACA,eAAA+O;AAAA,IACA,kBAAAnF;AAAA,IACA,YAAAC;AAAA,IACA,cAAAC;AAAA,IACA,YAAAC;AAAA,IACA,UAAAhI;AAAA,IACA,IAAAY;AAAA,IACA,WAAAH;AAAA,IACA,OAAAC;AAAA,IACA,UAAA3B;AAAA,IACA,GAAG4B;AAAA,EAAA,GAELwD,MACG;AACH,UAAM8I,IAAcpM,GAAA,GACdsH,IAAWC,GAAyB,IAAI,GACxC,CAAC8E,GAAeC,CAAgB,IAAI/O,GAAiB2O,CAAY,GACjE1O,IAAeyO,MAAkB,QACjCP,IAAQlO,IAAeyO,IAAgBI,GACvCE,KAAUpF,KAAA,gBAAAA,EAAY,OAAMpH,KAAMqM,GAClCI,IAAa9F,IAAW,GAAG6F,CAAO,UAAU,QAC5CpK,IAAahD,MAAYgI,KAAA,gBAAAA,EAAY,WACrCsF,KAAavO,MAAYiJ,KAAA,gBAAAA,EAAY;AAE3C,IAAAU,GAAoBvE,GAAK,MAAMgE,EAAS,OAA2B;AAEnE,UAAMoF,IAAc,CAACC,GAAmBC,OAA8B;AACpE,MAAKpP,KACH8O,EAAiBK,CAAS,GAG5BR,KAAA,QAAAA,EAAgB,EAAE,OAAOQ,GAAW,UAAAC,GAAA;AAAA,IACtC,GAEMlE,IAAe,CAAC7H,MAAyC;;AAC7D,YAAM8L,KAAY,MAAM,KAAK9L,EAAM,OAAO,SAAS,EAAE;AACrD,MAAA6L,EAAYC,IAAW9L,EAAM,OAAO,KAAK,GACzCzD,KAAA,QAAAA,EAAWyD,KACXF,KAAAwG,KAAA,gBAAAA,EAAY,aAAZ,QAAAxG,GAAA,KAAAwG,GAAuBtG;AAAA,IACzB,GAEM8H,IAAc,MAAM;;AACxB,MAAIrB,EAAS,YACXA,EAAS,QAAQ,QAAQ,KAG3BoF,EAAY,CAAA,GAAI,IAAI,IACpB/L,IAAA2G,EAAS,YAAT,QAAA3G,EAAkB;AAAA,IACpB,GAEMkM,IAAeC,GAAQ,MACtBpB,EAAM,SAEPA,EAAM,WAAW,IAEjB,gBAAAhL,EAAA4J,IAAA,EACE,UAAA;AAAA,MAAA,gBAAAxM,EAAC,UAAK,WAAWsC,GAAO,UAAW,UAAAsL,EAAM,CAAC,EAAE,MAAK;AAAA,MAChDF,IACC,gBAAA1N,EAAC,QAAA,EAAK,WAAWsC,GAAO,UAAW,UAAA8K,GAAeQ,EAAM,CAAC,EAAE,IAAI,EAAA,CAAE,IAC/D;AAAA,IAAA,GACN,IAKF,gBAAAhL,EAAA4J,IAAA,EACE,UAAA;AAAA,MAAA,gBAAAxM,EAAC,UAAK,WAAWsC,GAAO,UAAW,UAAA2L,EAAeL,EAAM,MAAM,GAAE;AAAA,MAC/DF,IACC,gBAAA1N,EAAC,QAAA,EAAK,WAAWsC,GAAO,UAAW,UAAA8K,GAAeO,GAAiBC,CAAK,CAAC,EAAA,CAAE,IACzE;AAAA,IAAA,GACN,IAnBwBM,GAqBzB,CAACA,GAAYD,GAAgBL,GAAOF,CAAY,CAAC,GAE9CuB,KAAaD,GAAQ,MACpBpB,EAAM,SACJA,EAAM,IAAI,CAACH,MAASD,GAAaC,GAAMC,CAAY,CAAC,EAAE,KAAK,IAAI,IAD5CQ,GAEzB,CAACA,GAAYN,GAAOF,CAAY,CAAC,GAE9BwB,IAAe;AAAA,MACnB5M,GAAO;AAAA,MACP0L,MAAmB,UAAU1L,GAAO,cAAc;AAAA,MAClDuG,KAAa+E,EAAM,UAAUI,MAAmB,UAAU1L,GAAO,eAAe;AAAA,MAChFuG,KAAa+E,EAAM,UAAUI,MAAmB,SAAS1L,GAAO,WAAW;AAAA,MAC3E2G,IAAY3G,GAAO,UAAU;AAAA,MAC7BsL,EAAM,SAAS,OAAOtL,GAAO;AAAA,MAC7BR;AAAA,MACAuH,KAAA,gBAAAA,EAAY;AAAA,IAAA,EAEX,OAAO,OAAO,EACd,KAAK,GAAG,GACLiD,IAAe,CAAChK,GAAO,SAAS8G,KAAA,gBAAAA,EAAc,SAAS,EAC1D,OAAO,OAAO,EACd,KAAK,GAAG,GACL+F,IAAa,CAAC7M,GAAO,OAAO6G,KAAA,gBAAAA,EAAY,SAAS,EACpD,OAAO,OAAO,EACd,KAAK,GAAG,GAELiG,IACJ,gBAAApP,EAAC,QAAA,EAAK,WAAWsC,GAAO,aACrB,UAAAyL,GACH,GAEIsB,uBACH,QAAA,EAAK,WAAW/M,GAAO,OAAO,OAAO2M,IACnC,UAAAF,EAAA,CACH,GAGIO,KACJ,gBAAA1M,EAAC,OAAA,EAAK,GAAGwG,GAAc,WAAWkD,GAChC,UAAA;AAAA,MAAA,gBAAAtM;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAGgC;AAAA,UACH,GAAGqH;AAAA,UACJ,KAAKG;AAAA,UACL,IAAIiF;AAAA,UACJ,MAAK;AAAA,UACL,UAAUpK;AAAA,UACV,UAAUsK;AAAA,UACV,qBAAkBtF,KAAA,gBAAAA,EAAa,wBAAuBrH,EAAM,kBAAkB,KAAK0M;AAAA,UACnF,gBAAczF,MAAaI,KAAA,gBAAAA,EAAa,oBAAmBrH,EAAM,cAAc;AAAA,UAC/E,UAAU4I;AAAA,UACV,WAAWtI,GAAO;AAAA,QAAA;AAAA,MAAA;AAAA,MAEpB,gBAAAM;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,UAAUyB;AAAA,UACV,WAAW6K;AAAA,UACX,OAAO,EAAE,GAAGnN,GAAO,GAAGsH,KAAA,gBAAAA,EAAY,MAAA;AAAA,UAClC,SAAS,MAAA;;AAAM,oBAAAxG,IAAA2G,EAAS,YAAT,gBAAA3G,EAAkB;AAAA;AAAA,UAEhC,UAAA;AAAA,YAAAmL,MAAmB,SAASoB,IAAgBC;AAAA,YAC5CrB,MAAmB,SAASqB,KAAeD;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAE7CvG,IACC,gBAAA7I;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAGkJ;AAAA,UACJ,MAAK;AAAA,UACL,eAAYA,KAAA,gBAAAA,EAAmB,kBAAiBJ;AAAA,UAChD,QAAOI,KAAA,gBAAAA,EAAkB,UAASJ;AAAA,UAClC,UAAUzE,KAAcuJ,EAAM,WAAW,MAAK1E,KAAA,gBAAAA,EAAkB;AAAA,UAChE,SAAS,CAACnG,MAAU;;AAClB,YAAA8H,EAAA,IACAhI,KAAAqG,KAAA,gBAAAA,EAAkB,YAAlB,QAAArG,GAAA,KAAAqG,GAA4BnG;AAAA,UAC9B;AAAA,UACA,WAAW;AAAA,YACTT,GAAO;AAAA,YACP0L,MAAmB,UAAU1L,GAAO,YAAY;AAAA,YAChD4G,KAAA,gBAAAA,EAAkB;AAAA,UAAA,EAClB,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,UAEzB,WAAAA,KAAA,gBAAAA,EAAkB,aAAY,gBAAAlJ,EAACkD,IAAA,CAAA,CAAM;AAAA,QAAA;AAAA,MAAA,IAEtC;AAAA,IAAA,GACN;AAGF,WAAI,CAACO,KAAS,CAACmF,KAAY,CAACO,IACnBmG,KAIP,gBAAA1M,EAAC,OAAA,EAAK,GAAGuG,GAAY,WAAWgG,GAC7B,UAAA;AAAA,MAAA1L,IAAQ,gBAAAzD,EAAC,WAAM,WAAWsC,GAAO,OAAO,SAASmM,GAAU,aAAM,IAAW;AAAA,MAC5Ea;AAAA,MACA1G,sBAAY,QAAA,EAAK,IAAI8F,GAAY,WAAWpM,GAAO,UAAW,UAAAsG,EAAA,CAAS,IAAU;AAAA,IAAA,GACpF;AAAA,EAEJ;AACF;AAEAkF,GAAU,cAAc;ACpRxB,MAAMyB,KAAa,oBAAI,IAAI,CAAC,KAAK,GAAG,CAAC,GAC/BC,KAA0B;AAEzB,SAASC,GAAgB9P,GAAesM,IAA4B,IAAI;AAC7E,QAAMyD,IAAiBzD,EAAQ,kBAAkBuD;AAEjD,SAAO7P,EACJ,MAAM,EAAE,EACR,OAAO,CAACgQ,MAASD,EAAe,KAAKC,CAAI,CAAC,EAC1C,KAAK,EAAE;AACZ;AAEO,SAASC,GACdjQ,GACAkQ,GACA5D,IAA4B,CAAA,GAC5B;AACA,QAAM3C,IAAc2C,EAAQ,eAAe,QACrC6D,IAAWL,GAAgB9P,GAAOsM,CAAO;AAC/C,MAAI8D,IAAW,GACXC,IAAc;AAElB,aAAWC,KAAYJ,GAAM;AAC3B,QAAIN,GAAW,IAAIU,CAAQ,GAAG;AAC5B,UAAIF,KAAYD,EAAS,QAAQ;AAC/B,YAAIxG,GAAa;AACf,UAAA0G,KAAe1G;AACf;AAAA,QACF;AACA;AAAA,MACF;AAEA,MAAA0G,KAAeF,EAASC,CAAQ,GAChCA,KAAY;AACZ;AAAA,IACF;AAEA,QAAIA,KAAYD,EAAS,UAAU,CAACxG;AAClC;AAGF,IAAA0G,KAAeC;AAAA,EACjB;AAEA,SAAOD;AACT;;;;;;;;;;;;;;;;;;GChCM9M,KAAQ,MACZ,gBAAAlD,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MAC1I,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,uBAAA,CAAsB,EAAA,CAChC,GAGIkQ,KAAU,MACd,gBAAAtN,EAAC,SAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MAC1I,UAAA;AAAA,EAAA,gBAAA5C,EAAC,QAAA,EAAK,GAAE,mDAAA,CAAkD;AAAA,oBACzD,UAAA,EAAO,IAAG,MAAK,IAAG,MAAK,GAAE,MAAA,CAAK;AAAA,GACjC,GAGImQ,KAAa,MACjB,gBAAAvN,EAAC,SAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MAC1I,UAAA;AAAA,EAAA,gBAAA5C,EAAC,QAAA,EAAK,GAAE,aAAA,CAAY;AAAA,EACpB,gBAAAA,EAAC,QAAA,EAAK,GAAE,+BAAA,CAA8B;AAAA,EACtC,gBAAAA,EAAC,QAAA,EAAK,GAAE,wEAAA,CAAuE;AAAA,EAC/E,gBAAAA,EAAC,QAAA,EAAK,GAAE,4DAAA,CAA2D;AAAA,GACrE,GAGIoQ,KAAgB,MACpB,gBAAApQ,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MAC1I,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,gBAAA,CAAe,EAAA,CACzB,GAGIqQ,KAAkB,MACtB,gBAAArQ,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MAC1I,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,eAAA,CAAc,EAAA,CACxB,GAGIsQ,KAAa,CAAC3Q,MAAkBA,EAAM,QAAQ,OAAO,EAAE,GAEvD4Q,KAAiB,CAAC5Q,MAAmB;AACzC,MAAI,OAAOA,KAAU,SAAU,QAAO,OAAO,SAASA,CAAK,IAAIA,IAAQ;AACvE,MAAI,OAAOA,KAAU,YAAYA,EAAM,WAAW,MAAMA,MAAU,MAAO;AACzE,QAAM6Q,IAAS,OAAO7Q,CAAK;AAC3B,SAAO,OAAO,SAAS6Q,CAAM,IAAIA,IAAS;AAC5C,GAqCaC,KAAQtL;AAAA,EACnB,CACE;AAAA,IACE,OAAA1B;AAAA,IACA,UAAAmF;AAAA,IACA,MAAAvF;AAAA,IACA,cAAAqN,IAAe;AAAA,IACf,WAAA7H,IAAY;AAAA,IACZ,kBAAAK;AAAA,IACA,YAAAJ;AAAA,IACA,oBAAA6H,IAAqB;AAAA,IACrB,oBAAAC,IAAqB;AAAA,IACrB,SAAAtL,IAAU;AAAA,IACV,UAAAjE;AAAA,IACA,MAAAwO;AAAA,IACA,oBAAAgB;AAAA,IACA,iBAAAC;AAAA,IACA,eAAAC,IAAgB;AAAA,IAChB,WAAAC;AAAA,IACA,WAAA/H,IAAY;AAAA,IACZ,OAAAtJ;AAAA,IACA,cAAAN,IAAe;AAAA,IACf,UAAAC;AAAA,IACA,eAAAuC;AAAA,IACA,MAAAuD,IAAO;AAAA,IACP,YAAA+D;AAAA,IACA,cAAAC;AAAA,IACA,YAAAC;AAAA,IACA,WAAAvH;AAAA,IACA,OAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELwD,MACG;AACH,UAAMgE,IAAWC,GAAyB,IAAI,GACxCwH,KAAe5H,KAAA,gBAAAA,EAAY,SAAQjE,GACnC8L,IAAeD,MAAiB,UAChCE,IAAiBF,MAAiB,YAClC,CAACG,GAAmBC,EAAoB,IAAI5R,GAAS,EAAK,GAC1D,CAACa,GAAcwJ,CAAe,IAAI3K;AAAA,MACtCQ;AAAA,MACAN;AAAA,MACA,CAACS,MAAc;AACb,QAAA+B,KAAA,QAAAA,EAAgB;AAAA,UACd,OAAO/B;AAAA,UACP,UAAU+P,IACNJ,GAAgB3P,GAAW;AAAA,YACzB,gBAAgB+Q;AAAA,UAElB,CAAC,IACD/Q;AAAA,QAAA;AAAA,MAER;AAAA,IAAA;AAGF,IAAAiK,GAAoBvE,GAAK,MAAMgE,EAAS,OAA2B;AAEnE,UAAM8H,IAAczR;AAAA,MAClB,CAACC,MAAsB;AACrB,cAAMyR,IAAgBL,IAAeZ,GAAWxQ,CAAS,IAAIA;AAC7D,eAAK+P,IACED,GAAU2B,GAAe1B,GAAM;AAAA,UACpC,gBAAgBgB;AAAA,UAChB,aAAaC;AAAA,QAAA,CACd,IAJiBS;AAAA,MAKpB;AAAA,MACA,CAACL,GAAcrB,GAAMgB,GAAoBC,CAAe;AAAA,IAAA,GAGpDlG,IAAe,CAAC7H,MAAyC;;AAC7D,YAAMyO,IAAiBF,EAAYvO,EAAM,OAAO,KAAK;AACrD,MAAAA,EAAM,OAAO,QAAQyO,GACrB1H,EAAgB0H,CAAc,GAC9BlS,KAAA,QAAAA,EAAWyD,KACXF,IAAAwG,KAAA,gBAAAA,EAAY,aAAZ,QAAAxG,EAAA,KAAAwG,GAAuBtG;AAAA,IACzB,GAEM8H,KAAc,MAAM;;AACxB,MAAAf,EAAgB,EAAE,IAClBjH,IAAA2G,EAAS,YAAT,QAAA3G,EAAkB;AAAA,IACpB,GAEMoH,KAAWZ,KAAA,gBAAAA,EAAY,QAAOrH,EAAM,KACpCkI,KAAWb,KAAA,gBAAAA,EAAY,QAAOrH,EAAM,KACpCmI,KAAYd,KAAA,gBAAAA,EAAY,SAAQrH,EAAM,MACtCyP,IAAYlB,GAAetG,CAAQ,GACnCyH,KAAYnB,GAAerG,CAAQ,GACnCyH,KAAmBpB,GAAepG,CAAS,GAC3CyH,IAAaD,MAAoBA,KAAmB,KACtD,KAAK,MAAMA,EAAgB,KAAK,GAE9B5C,KAAeuC,EAAYhR,CAAY,GACvCuR,KAAetB,GAAexB,EAAY,GAC1C+C,KAAeZ,IAEjBW,OAAiB,SACf,KACAJ,MAAc,SACZI,KAAe,IACfA,KAAeJ,IALnB,IAMEM,KAAeb,IAEjBQ,OAAc,UAAaG,OAAiB,UAAaA,KAAeH,KADxE,IAGEM,KAAmB,CAACxN,MAAsB;;AAC9C,YAAMyN,IAAeJ,OAAiB,UAAarN,MAAc,IAC7DiN,KAAaG,KACZC,MAAgBJ,KAAa,KAAKG,IAAapN,GAC9C1E,IAAY,KAAK;AAAA,QACrB2R,KAAa;AAAA,QACb,KAAK,IAAIC,MAAa,OAAO,mBAAmBO,CAAY;AAAA,MAAA;AAG9D,MAAAnI,EAAgBwH,EAAY,OAAOxR,CAAS,CAAC,CAAC,IAC9C+C,KAAA2G,EAAS,YAAT,QAAA3G,GAAkB;AAAA,IACpB,GAEMqP,KAAY7O,KAAQqN,MAAiB,SACrCyB,KAAW9O,KAAQqN,MAAiB,QACpC0B,IAAoBjB,KAAkBP,GACtCyB,KAAoBnB,KAAgBP,GACpC2B,KAAqB;AAAA,MACzBJ,KAAY,KAAK;AAAA,MACjBrJ,IAAY,KAAK;AAAA,MACjBuJ,IAAoB,KAAK;AAAA,MACzBC,KAAoB,KAAK;AAAA,IAAA,EACzB,OAAO,OAAO,GACVE,IAAkBD,GAAmB,SACvCA,GAAmB,OAAO,CAACE,GAAKC,MAAUD,IAAMC,GAAO,CAAC,KAAKH,GAAmB,SAAS,KAAK,IAAI,KAClG,QAEEjG,IAAa;AAAA,MACjB/J,GAAO;AAAA,MACPgD,IAAUhD,GAAO,UAAU;AAAA,MAC3B6P,KAAW7P,GAAO,UAAU;AAAA,MAC5BiQ,IAAkBjQ,GAAO,cAAc;AAAA,MACvC2G,IAAY3G,GAAO,UAAU;AAAA,MAC7BR;AAAA,MACAuH,KAAA,gBAAAA,EAAY;AAAA,IAAA,EAEX,OAAO,OAAO,EACd,KAAK,GAAG,GAELqJ,IAAc,CAACC,MAA0C;;AAC7D,MAAI5B,KAAe4B,EAAE,OAAO,OAAA,IAC5B9P,IAAAb,EAAM,YAAN,QAAAa,EAAA,KAAAb,GAAgB2Q,KAChB7P,IAAAuG,KAAA,gBAAAA,EAAY,YAAZ,QAAAvG,EAAA,KAAAuG,GAAsBsJ;AAAA,IACxB,GAEMC,KAAa;AAAA,MACjB,GAAG7Q;AAAA,MACH,GAAGsH,KAAA,gBAAAA,EAAY;AAAA,MACf,GAAI2H,IAAY,EAAE,WAAAA,EAAA,IAAc;AAAA,MAChC,GAAIuB,IAAkB,EAAE,yBAAyB,GAAGA,CAAe,SAAS;AAAA,IAAA,GAExElO,KAAahD,MAAYgI,KAAA,gBAAAA,EAAY,WACrCwJ,KAAe1B,IACjBC,KAAqBgB,IAAoB,SAAS,aAClDlB,IAAe,SAASD,GACtB6B,KAAmBhK,KAAc,SAEjCyD,KACJ,gBAAAvM;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAGgC;AAAA,QACH,GAAGqH;AAAA,QACJ,KAAKG;AAAA,QACL,MAAMqJ;AAAA,QACN,UAAUxO;AAAA,QACV,OAAO0K;AAAA,QACP,WAAWmC,IAAe,aAAY7H,KAAA,gBAAAA,EAAY,cAAarH,EAAM;AAAA,QACrE,SAASkP,IAAe,YAAW7H,KAAA,gBAAAA,EAAY,YAAWrH,EAAM;AAAA,QAChE,UAAU4I;AAAA,QACV,SAAS8H;AAAA,QACT,WAAWrG;AAAA,QACX,OAAOuG;AAAA,MAAA;AAAA,IAAA,GAILtG,KAAe,CAAChK,GAAO,SAAS8G,KAAA,gBAAAA,EAAc,SAAS,EAC1D,OAAO,OAAO,EACd,KAAK,GAAG,GAELkG,KACJ,gBAAA1M,EAAC,QAAA,EAAM,GAAGwG,GAAc,WAAWkD,IAChC,UAAA;AAAA,MAAA6F,uBAAY,QAAA,EAAK,WAAW7P,GAAO,UAAW,aAAK,IAAU;AAAA,MAC7DiK;AAAA,MACAgG,IACC,gBAAA3P,EAAC,QAAA,EAAK,WAAWN,GAAO,iBACrB,UAAA;AAAA,QAAA4P,uBACE,QAAA,EAAK,WAAW5P,GAAO,cAAe,aAAK,IAC1C;AAAA,QACHuG,IACC,gBAAA7I;AAAA,UAAC;AAAA,UAAA;AAAA,YACE,GAAGkJ;AAAA,YACJ,MAAK;AAAA,YACL,eAAYA,KAAA,gBAAAA,EAAmB,kBAAiB4J;AAAA,YAChD,QAAO5J,KAAA,gBAAAA,EAAkB,UAAS4J;AAAA,YAClC,UAAUzO,MAAc0K,GAAa,WAAW,MAAK7F,KAAA,gBAAAA,EAAkB;AAAA,YACvE,SAAS,CAACnG,MAAU;;AAClB,cAAA8H,GAAA,IACAhI,IAAAqG,KAAA,gBAAAA,EAAkB,YAAlB,QAAArG,EAAA,KAAAqG,GAA4BnG;AAAA,YAC9B;AAAA,YACA,WAAW,CAACT,GAAO,UAAU4G,KAAA,gBAAAA,EAAkB,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,YAEjF,WAAAA,KAAA,gBAAAA,EAAkB,aAAY,gBAAAlJ,EAACkD,IAAA,CAAA,CAAM;AAAA,UAAA;AAAA,QAAA,IAEtC;AAAA,QACHkP,IACC,gBAAApS;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,cAAYoR,IAAoB,kBAAkB;AAAA,YAClD,OAAOA,IAAoB,kBAAkB;AAAA,YAC7C,UAAU/M;AAAA,YACV,SAAS,MAAM;;AACb,cAAAgN,GAAqB,CAAC0B,MAAY,CAACA,CAAO,IAC1ClQ,IAAA2G,EAAS,YAAT,QAAA3G,EAAkB;AAAA,YACpB;AAAA,YACA,WAAWP,GAAO;AAAA,YAEjB,UAAA8O,IAAoB,gBAAApR,EAACmQ,IAAA,CAAA,CAAW,sBAAMD,IAAA,CAAA,CAAQ;AAAA,UAAA;AAAA,QAAA,IAE/C;AAAA,QACHmC,KACC,gBAAAzP,EAAC,QAAA,EAAK,WAAWN,GAAO,gBACtB,UAAA;AAAA,UAAA,gBAAAtC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,cAAW;AAAA,cACX,OAAM;AAAA,cACN,UAAUqE,MAAc,CAAC0N;AAAA,cACzB,SAAS,MAAMC,GAAiB,CAAC;AAAA,cACjC,WAAW1P,GAAO;AAAA,cAElB,4BAAC8N,IAAA,CAAA,CAAc;AAAA,YAAA;AAAA,UAAA;AAAA,UAEjB,gBAAApQ;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,cAAW;AAAA,cACX,OAAM;AAAA,cACN,UAAUqE,MAAc,CAACyN;AAAA,cACzB,SAAS,MAAME,GAAiB,EAAE;AAAA,cAClC,WAAW1P,GAAO;AAAA,cAElB,4BAAC+N,IAAA,CAAA,CAAgB;AAAA,YAAA;AAAA,UAAA;AAAA,QACnB,EAAA,CACF,IACE;AAAA,MAAA,EAAA,CACN,IACE;AAAA,IAAA,GACN;AAGF,WAAI,CAAC5M,KAAS,CAACmF,KAAY,CAACO,IACnBmG,uBAIN,OAAA,EAAK,GAAGnG,GAAY,WAAW,CAAC7G,GAAO,OAAO6G,KAAA,gBAAAA,EAAY,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAC3F,UAAA;AAAA,MAAA1F,sBAAS,SAAA,EAAM,WAAWnB,GAAO,OAAQ,aAAM,IAAW;AAAA,MAC1DgN;AAAA,MACA1G,IAAW,gBAAA5I,EAAC,QAAA,EAAK,WAAWsC,GAAO,UAAW,aAAS,IAAU;AAAA,IAAA,GACpE;AAAA,EAEJ;AACF;AAEAmO,GAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvVpB,SAASuC,GAASC,GAAyBvS,GAA+B;AACxE,QAAMwS,IAAQ,IAAI,KAAKD,KAAO,IAAI,MAAM,KAAK,EAAE,OAAO,OAAO,CAAC;AAC9D,SAAAvS,EAAO,QAAQ,CAACf,MAAU;AACxB,IAAIA,KAAOuT,EAAM,IAAIvT,CAAK;AAAA,EAC5B,CAAC,GAEMuT,EAAM,OAAO,IAAI,MAAM,KAAKA,CAAK,EAAE,KAAK,GAAG,IAAI;AACxD;AAEO,MAAMC,KAAOhO;AAAA,EAClB,CACE;AAAA,IACE,SAAA/B,IAAU;AAAA,IACV,YAAAgQ,IAAa;AAAA,IACb,SAAAC;AAAA,IACA,UAAAhS,IAAW;AAAA,IACX,YAAAiS,IAAa;AAAA,IACb,UAAAC;AAAA,IACA,MAAAlQ;AAAA,IACA,UAAAQ;AAAA,IACA,WAAA/B;AAAA,IACA,OAAAC;AAAA,IACA,MAAAyR;AAAA,IACA,KAAAP;AAAA,IACA,QAAAQ;AAAA,IACA,UAAAC;AAAA,IACA,SAAAC;AAAA,IACA,GAAG3R;AAAA,EAAA,GAELwD,MACG;AACH,UAAMoO,IAAmBL,KAAYE,MAAW,UAC1CpR,IAAM;AAAA,MACVC,GAAO;AAAA,MACPA,GAAOc,CAAO;AAAA,MACdgQ,IAAa9Q,GAAO,aAAa;AAAA,MACjCjB,IAAWiB,GAAO,WAAW;AAAA,MAC7BR;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAEL+R,IAAY;AAAA,MAChB,GAAG9R;AAAA,MACH,GAAIsR,MAAY,SAAY,EAAE,kBAAkBA,MAAY;AAAA,IAAA,GAGxDS,IAAc,CAAC/Q,MAAyC;AAC5D,MAAA4Q,KAAA,QAAAA,EAAU5Q,IACN1B,OAAgB,eAAA;AAAA,IACtB;AAEA,WACE,gBAAAuB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA4C;AAAA,QACC,GAAGxD;AAAA,QACJ,MAAMX,IAAW,SAAYmS;AAAA,QAC7B,QAAAC;AAAA,QACA,KAAKT,GAASC,GAAK,CAACW,KAAoB,YAAYN,KAAc,YAAY,CAAC;AAAA,QAC/E,iBAAejS,KAAY;AAAA,QAC3B,UAAUA,IAAW,KAAKqS;AAAA,QAC1B,WAAWrR;AAAA,QACX,OAAOwR;AAAA,QACP,SAASC;AAAA,QAER,UAAA;AAAA,UAAAzQ,KAAQ,gBAAArD,EAAC,QAAA,EAAK,WAAWsC,GAAO,MAAO,UAAAe,GAAK;AAAA,UAC5CQ;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AAEAsP,GAAK,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GC/EbpT,KAAc,MAClB,gBAAAC,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MAAK,eAAY,QAC3J,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,eAAA,CAAe,EAAA,CACzB,GA2FI+T,KAAqB,oBACrBC,KAAsB,GACtBC,KAAoB,GACpBC,yBAAmB,IAAA,GACnBC,yBAAoB,IAAA;AAC1B,IAAIC,KAAwC;AAE5C,SAASC,KAAqB;AAC5B,EAAAF,GAAc,QAAQ,CAACG,MAAaA,EAAA,CAAU;AAChD;AAEA,SAASC,GAAkBC,GAA6B;AACtD,EAAAJ,KAAiBI,GACjBH,GAAA;AACF;AAEA,SAASI,GAAqBC,GAAsD;AAClF,EAAKN,MACLG,GAAkBG,EAAQN,EAAc,CAAC;AAC3C;AAEA,SAASO,KAAoB;AAC3B,QAAM,CAACC,GAAUC,CAAW,IAAIpV,GAAS2U,EAAc;AAEvD,SAAA5J,GAAU,MAAM;AACd,UAAM8J,IAAW,MAAMO,EAAYT,EAAc;AACjD,WAAAD,GAAc,IAAIG,CAAQ,GACnB,MAAM;AACX,MAAAH,GAAc,OAAOG,CAAQ;AAAA,IAC/B;AAAA,EACF,GAAG,CAAA,CAAE,GAEEM;AACT;AAEA,SAASE,GACPC,GACAC,GAC6B;;AAC7B,MAAI,CAACD,EAAa,QAAO;AAEzB,QAAME,IAAiBF,EAAY,mBAC7BG,KAAarS,IAAAkS,EAAY,SAAZ,gBAAAlS,EAAkB,yBAE/BsS,KADiBD,IAAaF,IAAUE,EAAW,MAAMA,EAAW,SAAS,IAAI,MAEnFH,EAAY,0BACZA,EAAY;AAEhB,SAAII,IACK,EAAE,QAAQA,GAAmB,UAAU,SAAA,IAG3CF,IACE,EAAE,QAAQA,GAAgB,UAAU,SAAA,IADf;AAE9B;AAEA,SAASG,GACPC,GACAC,GACAC,GACAP,GAC6B;AAC7B,QAAMQ,IAAe,MAAM;AAAA,IACzBH,EAAW,iBAA8B,4BAA4B;AAAA,EAAA,EACrE,OAAO,CAACI,MAAY;AACpB,UAAMlV,IAAYkV,EAAQ,QAAQ;AAClC,WAAOlV,KAAa,EAAE+U,MAAiBC,EAAK,gBAAgBhV,MAAcgV,EAAK,KAAK;AAAA,EACtF,CAAC;AAED,MAAIC,EAAa,WAAW;AAC1B,WAAO,EAAE,QAAQF,GAAc,UAAU,SAAA;AAG3C,aAAWG,KAAWD,GAAc;AAClC,UAAMjV,IAAYkV,EAAQ,QAAQ,kBAC5BC,IAAOD,EAAQ,sBAAA;AAErB,QAAIT,IAAUU,EAAK,MAAMA,EAAK,SAAS;AACrC,aAAOnV,IAAY,EAAE,QAAQ+U,GAAc,WAAA/U,GAAW,UAAU,aAAa;AAAA,EAEjF;AAGA,QAAMoV,IADcH,EAAaA,EAAa,SAAS,CAAC,EACtB,QAAQ;AAC1C,SAAOG,IACH,EAAE,QAAQL,GAAc,WAAWK,GAAe,UAAU,YAC5D;AACN;AAEA,SAASC,GACPL,GACAM,GACAb,GACA;AACA,QAAMc,IAAY;AAAA,IAChB,MAAMD,IAAU5B;AAAA,IAChB,KAAKe,IAAUf;AAAA,IACf,OAAO4B,IAAU5B,KAAoBsB,EAAK;AAAA,IAC1C,QAAQP,IAAUf,KAAoBsB,EAAK;AAAA,EAAA;AAE7C,MAAIQ,IAAsC,MACtCC,IAAc;AAElB,aAAWC,KAAS/B,GAAa,UAAU;AACzC,UAAMgC,IAAOD,EAAM;AACnB,QAAIA,EAAM,cAAcV,EAAK,aAAa,CAACW,EAAM;AAEjD,UAAMR,IAAOQ,EAAK,sBAAA,GACZC,IAAe,KAAK,IAAIL,EAAU,OAAOJ,EAAK,KAAK,IAAI,KAAK,IAAII,EAAU,MAAMJ,EAAK,IAAI,GACzFU,IAAgB,KAAK,IAAIN,EAAU,QAAQJ,EAAK,MAAM,IAAI,KAAK,IAAII,EAAU,KAAKJ,EAAK,GAAG;AAChG,QAAIS,KAAgB,KAAKC,KAAiB,EAAG;AAE7C,UAAMC,IAAUF,IAAeC;AAC/B,KAAI,CAACL,KAAaM,IAAUL,OAC1BD,IAAYE,GACZD,IAAcK;AAAA,EAElB;AAEA,SAAI,CAACN,KAAa,CAACA,EAAU,OAAa,OAEnC;AAAA,IACL,MAAMA,EAAU;AAAA,IAChB,QAAQA,EAAU;AAAA,EAAA;AAEtB;AAEO,SAASO,GAAK;AAAA,EACnB,OAAAxV;AAAA,EACA,OAAAoF;AAAA,EACA,WAAAqQ,IAAY;AAAA,EACZ,aAAAC,IAAc;AAAA,EACd,WAAAC;AAAA,EACA,kBAAAC,IAAmB;AAAA,EACnB,mBAAAC;AAAA,EACA,YAAAzI,IAAa;AAAA,EACb,YAAA0I,IAAa;AAAA,EACb,eAAAC;AAAA,EACA,sBAAAC,IAAuB;AAAA,EACvB,uBAAAC;AAAA,EACA,oBAAAC,IAAqB;AAAA,EACrB,SAAApW,IAAU;AAAA,EACV,YAAAqW,IAAa;AAAA,EACb,WAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,eAAA9V;AAAA,EACA,WAAA+V,IAAY;AAAA,EACZ,WAAAC,IAAYvD;AAAA,EACZ,QAAAwD;AAAA,EACA,iBAAAC;AAAA,EACA,YAAAC;AAAA,EACA,WAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,yBAAAC;AAAA,EACA,wBAAAC;AAAA,EACA,WAAA/V;AAAA,EACA,GAAGE;AACL,GAAc;;AACZ,QAAMC,IAAKC,GAAA,GACL4V,IAAiBP,KAAUtV,GAC3BU,IAAY,GAAGV,CAAE,YACjB8V,IAAapD,GAAA,GACbqD,KAAUvO,GAAuB,IAAI,GACrCwO,IAAuBxO,GAAO,EAAK,GACnC,CAACyO,GAAaC,CAAc,IAAIhZ;AAAA,IACpCsX;AAAA,IACAC;AAAA,IACAC;AAAA,EAAA,GAEI,CAACyB,GAAsBC,EAAuB,IAAIlZ;AAAA,IACtD0X;AAAA,IACAC;AAAA,IACA,CAAChX,MAAc;AACb,YAAMwY,KAAexX,EAAM,KAAK,CAAC0B,OAASA,GAAK,UAAU1C,CAAS;AAClE,MAAIwY,MAAgBxY,MAAc,SAChCiX,KAAA,QAAAA,EAAwBjX,GAAWwY;AAAA,IAEvC;AAAA,EAAA,GAEIC,IAAWhC,KAAarQ,MAAU,UAAaA,MAAU,MACzDsS,IAAYD,KAAY/B,GAExBiC,IAAY;AAAA,IAChBnW,GAAO;AAAA,IACPA,GAAO,WAAW1B,CAAO,EAAE;AAAA,IAC3BsX,IAAc5V,GAAO,YAAY;AAAA,IACjCiW,IAAW,OAAOjW,GAAO;AAAA,IACzB0U,IAAqB1U,GAAO,qBAAqB;AAAA,IACjD2U,IAAa,OAAO3U,GAAO;AAAA,IAC3BR;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAEL4W,IAAc,CAACpW,GAAO,QAAQkW,IAAYlW,GAAO,eAAe,MAAM6U,KAAA,gBAAAA,EAAa,SAAS,EAC/F,OAAO,OAAO,EACd,KAAK,GAAG,GACLwB,KAAY,CAACrW,GAAO,MAAM8U,KAAA,gBAAAA,EAAW,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAExEwB,KAAkB,MAAMT,EAAe,CAACD,CAAW,GACnDW,IAAc,CAACrW,MACnB6U,KAAa,CAAC7U,EAAK,aAAagV,IAAkBA,EAAgBhV,CAAI,IAAI;AAE5E,EAAAgI,GAAU,MAAM;AACd,QAAI,CAAC6M,GAAW;AACd,MAAAnD,GAAa,OAAO4D,CAAc;AAClC;AAAA,IACF;AAEA,WAAA5D,GAAa,IAAI4D,GAAgB;AAAA,MAC/B,QAAQA;AAAA,MACR,WAAAR;AAAA,MACA,OAAAxW;AAAA,MACA,YAAA2W;AAAA,MACA,mBAAAE;AAAA,MACA,yBAAAC;AAAA,MACA,wBAAAC;AAAA,MACA,MAAMG,GAAQ;AAAA,IAAA,CACf,GAEM,MAAM;AACX,MAAA9D,GAAa,OAAO4D,CAAc;AAAA,IACpC;AAAA,EACF,GAAG;AAAA,IACDR;AAAA,IACAD;AAAA,IACAQ;AAAA,IACAD;AAAA,IACAD;AAAA,IACA7W;AAAA,IACA2W;AAAA,IACAK;AAAA,EAAA,CACD,GAEDtN,GAAU,MAAM;AACd,QAAI,CAACuN,KAAcA,EAAW,iBAAiBD,EAAgB;AAE/D,UAAMgB,IAAe,CAACjD,GAAiBb,MAAoB;AACzD,YAAMO,IAAOnB;AACb,UAAI,CAACmB,EAAM;AAEX,YAAMwD,KAAW,KAAK,MAAMlD,IAAUN,EAAK,cAAcP,IAAUO,EAAK,YAAY;AACpF,UAAI,CAACA,EAAK,SAASwD,KAAW/E,IAAqB;AACjD,QAAAS,GAAqB,CAACuE,QAAa,EAAE,GAAGA,IAAS,UAAUnD,GAAS,UAAUb,EAAA,EAAU;AACxF;AAAA,MACF;AACA,MAAKO,EAAK,UAAO,SAAS,KAAK,MAAM,SAAS;AAE9C,YAAM9B,KAAS,SAAS,iBAAiBoC,GAASb,CAAO,GACnDiE,KAAcxF,MAAA,gBAAAA,GAAQ,QAAqB,gCAC3CyF,KAAgBD,MAAA,gBAAAA,GAAa,QAAQ,QACrCE,KAAmBF,MAAA,gBAAAA,GAAa,QAAQ,cACxCG,KAAiB,CAACH,MAAe,CAACC,MAAiBC,OAAqB5D,EAAK,YAC/EK,GAAsBL,GAAMM,GAASb,CAAO,IAC5C,MACEK,KAAa8D,OAAqB5D,EAAK,YAAY0D,KAAcG,MAAA,gBAAAA,GAAgB,MACjF9D,IAAe6D,OAAqB5D,EAAK,YAAY2D,KAAgBE,MAAA,gBAAAA,GAAgB,QACrFC,IAAkBhE,MAAA,gBAAAA,GAAY,QAAQ;AAE5C,UAAI,CAACA,MAAc,CAACC,KAAgB+D,MAAoB9D,EAAK,WAAW;AACtE,cAAMR,KAAcb,GAAa,IAAIqB,EAAK,YAAY;AACtD,QAAAd,GAAqB,CAACuE,QAAa;AAAA,UACjC,GAAGA;AAAA,UACH,UAAUnD;AAAA,UACV,UAAUb;AAAA,UACV,OAAO;AAAA,UACP,QAAQF,GAAqBC,IAAaC,CAAO;AAAA,QAAA,EACjD;AACF;AAAA,MACF;AAEA,YAAMsE,IAAoB7F,MAAA,gBAAAA,GAAQ,QAAqB;AACvD,UAAI6F,KAAqBjE,GAAW,SAASiE,CAAiB,GAAG;AAC/D,cAAM/Y,KAAY+Y,EAAkB,QAAQ;AAC5C,YAAI/Y,MAAa,EAAE+U,MAAiBC,EAAK,gBAAgBhV,OAAcgV,EAAK,KAAK,QAAQ;AACvF,gBAAMG,KAAO4D,EAAkB,sBAAA,GACzBC,KAA6BvE,IAAUU,GAAK,MAAMA,GAAK,SAAS,IAAI,WAAW;AACrF,UAAAjB,GAAqB,CAACuE,QAAa;AAAA,YACjC,GAAGA;AAAA,YACH,UAAUnD;AAAA,YACV,UAAUb;AAAA,YACV,OAAO;AAAA,YACP,QAAQ,EAAE,QAAQM,GAAc,WAAA/U,IAAW,UAAAgZ,GAAA;AAAA,UAAS,EACpD;AACF;AAAA,QACF;AAAA,MACF;AAEA,YAAMC,KAAiBpE,GAAsBC,IAAYC,GAAcC,GAAMP,CAAO;AACpF,UAAIwE,IAAgB;AAClB,QAAA/E,GAAqB,CAACuE,QAAa;AAAA,UACjC,GAAGA;AAAA,UACH,UAAUnD;AAAA,UACV,UAAUb;AAAA,UACV,OAAO;AAAA,UACP,QAAQwE;AAAA,QAAA,EACR;AACF;AAAA,MACF;AAEA,YAAMzE,KAAcb,GAAa,IAAIqB,EAAK,YAAY;AACtD,UACED,MAAiBC,EAAK,iBAClBR,MAAA,QAAAA,GAAa,qBACZA,MAAA,QAAAA,GAAa,2BACbA,MAAA,QAAAA,GAAa,yBAClB;AACA,QAAAN,GAAqB,CAACuE,QAAa;AAAA,UACjC,GAAGA;AAAA,UACH,UAAUnD;AAAA,UACV,UAAUb;AAAA,UACV,OAAO;AAAA,UACP,QAAQF,GAAqBC,IAAaC,CAAO;AAAA,QAAA,EACjD;AACF;AAAA,MACF;AAEA,MAAAP,GAAqB,CAACuE,QAAa;AAAA,QACjC,GAAGA;AAAA,QACH,UAAUnD;AAAA,QACV,UAAUb;AAAA,QACV,OAAO;AAAA,QACP,QAAQ,EAAE,QAAQM,GAAc,UAAU,SAAA;AAAA,MAAS,EACnD;AAAA,IACJ,GAEMmE,KAAgB,CAAC1W,MAAwB;AAC7C,YAAMwS,IAAOnB;AACb,MAAI,CAACmB,KAAQxS,EAAM,cAAcwS,EAAK,cACtCxS,EAAM,eAAA,GACN+V,EAAa/V,EAAM,SAASA,EAAM,OAAO;AAAA,IAC3C,GAEM2W,KAAc,CAAC3W,MAAwB;AAC3C,YAAMwS,IAAOnB;AACb,UAAI,GAACmB,KAAQxS,EAAM,cAAcwS,EAAK,YAItC;AAAA,YAHIA,EAAK,SAAOxS,EAAM,eAAA,GACtBkV,EAAqB,UAAU1C,EAAK,OAEhCA,EAAK,SAASA,EAAK,QAAQ;AAC7B,gBAAMoE,IAAczF,GAAa,IAAIqB,EAAK,OAAO,MAAM,GACjDR,KAAcb,GAAa,IAAIqB,EAAK,YAAY,GAChDqE,KAAarE,EAAK,OAAO,YAC3BoE,KAAA,gBAAAA,EAAa,MAAM,KAAK,CAACnX,OAAA;;AAAS,mBAAAA,GAAK,YAAUK,KAAA0S,EAAK,WAAL,gBAAA1S,GAAa;AAAA,eAC9D,QACEgX,MAAUF,KAAA,gBAAAA,EAAa,gBAAc5E,MAAA,gBAAAA,GAAa;AAExD,UAAA8E,MAAA,QAAAA,GAAU;AAAA,YACR,MAAMtE,EAAK;AAAA,YACX,cAAcA,EAAK;AAAA,YACnB,cAAcA,EAAK,OAAO;AAAA,YAC1B,YAAAqE;AAAA,YACA,UAAUrE,EAAK,OAAO;AAAA,UAAA;AAAA,QAE1B;AAEA,QAAAhB,GAAkB,IAAI,GACtB,SAAS,KAAK,MAAM,SAAS,IAC7B,SAAS,KAAK,MAAM,aAAa;AAAA;AAAA,IACnC;AAEA,oBAAS,KAAK,MAAM,aAAa,QACjC,SAAS,iBAAiB,eAAekF,IAAe,EAAE,SAAS,IAAO,GAC1E,SAAS,iBAAiB,aAAaC,IAAa,EAAE,SAAS,IAAO,GACtE,SAAS,iBAAiB,iBAAiBA,IAAa,EAAE,SAAS,IAAO,GAEnE,MAAM;AACX,eAAS,oBAAoB,eAAeD,EAAa,GACzD,SAAS,oBAAoB,aAAaC,EAAW,GACrD,SAAS,oBAAoB,iBAAiBA,EAAW,GACzD,SAAS,KAAK,MAAM,SAAS,IAC7B,SAAS,KAAK,MAAM,aAAa;AAAA,IACnC;AAAA,EACF,GAAG,CAAC3B,KAAA,gBAAAA,EAAY,WAAWA,KAAA,gBAAAA,EAAY,cAAcD,CAAc,CAAC;AAEpE,QAAMgC,KAAgB,CAAC/W,GAAuCP,OAAmB;AAC/E,QAAI,CAACqW,EAAYrW,EAAI,KAAKO,EAAM,WAAW,EAAG;AAE9C,UAAM2S,KAAO3S,EAAM,cAAc,sBAAA;AACjC,QAAI;AACF,MAAAA,EAAM,cAAc,kBAAkBA,EAAM,SAAS;AAAA,IACvD,QAAQ;AAAA,IAER;AAEA,IAAAwR,GAAkB;AAAA,MAChB,MAAA/R;AAAA,MACA,cAAcsV;AAAA,MACd,WAAAR;AAAA,MACA,WAAWvU,EAAM;AAAA,MACjB,cAAcA,EAAM;AAAA,MACpB,cAAcA,EAAM;AAAA,MACpB,UAAUA,EAAM;AAAA,MAChB,UAAUA,EAAM;AAAA,MAChB,OAAO2S,GAAK;AAAA,MACZ,QAAQA,GAAK;AAAA,MACb,OAAO;AAAA,MACP,QAAQ;AAAA,IAAA,CACT;AAAA,EACH,GAEMqE,KAAoB,CAACvX,MACzB,gBAAAI,EAAA4J,IAAA,EACG,UAAA;AAAA,IAAAhK,EAAK,yBAAQ,QAAA,EAAK,WAAWF,GAAO,MAAO,UAAAE,EAAK,MAAK,IAAU;AAAA,IAChE,gBAAAI,EAAC,QAAA,EAAK,WAAWN,GAAO,UACtB,UAAA;AAAA,MAAA,gBAAAtC,EAAC,QAAA,EAAK,WAAWsC,GAAO,OAAQ,YAAK,OAAM;AAAA,MAC1CE,EAAK,cAAc,gBAAAxC,EAAC,QAAA,EAAK,WAAWsC,GAAO,aAAc,UAAAE,EAAK,YAAA,CAAY,IAAU;AAAA,IAAA,GACvF;AAAA,IACCA,EAAK,OAAO,gBAAAxC,EAAC,QAAA,EAAK,WAAWsC,GAAO,MAAO,UAAAE,EAAK,KAAA,CAAK,IAAU;AAAA,EAAA,GAClE,GAGIwX,KAAiBjC,KAAA,QAAAA,EAAY,WAASlV,KAAAkV,EAAW,WAAX,gBAAAlV,GAAmB,YAAWiV,IACtEC,EAAW,SACX,MACEkC,KAAwB,CAAC,CAACD,MAAkB,CAACA,GAAe,WAC5DE,KAAiBpZ,EAAM,WAAW,KAAKmZ,IACvCE,KAAgB,CAAC,CAACpC,KAAcA,EAAW,SAASA,EAAW,iBAAiBD;AAEtF,SACE,gBAAAlV;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGZ;AAAA,MACJ,KAAKgW;AAAA,MACL,WAAWS;AAAA,MACX,sBAAoBpB,IAAY,SAAS;AAAA,MACzC,gBAAcA,IAAYS,IAAiB;AAAA,MAC3C,uBAAqBT,IAAYC,IAAY;AAAA,MAE5C,UAAA;AAAA,QAAAiB,IACCC,IACE,gBAAA5V;AAAA,UAAC;AAAA,UAAA;AAAA,YACE,GAAGuU;AAAA,YACJ,MAAK;AAAA,YACL,WAAWuB;AAAA,YACX,iBAAe,CAACR;AAAA,YAChB,iBAAevV;AAAA,YACf,SAAS,CAACI,MAAU;;AAClB,eAAAF,KAAAsU,KAAA,gBAAAA,EAAa,YAAb,QAAAtU,GAAA,KAAAsU,GAAuBpU,IAClBA,EAAM,oBAAkB6V,GAAA;AAAA,YAC/B;AAAA,YAEA,UAAA;AAAA,cAAA,gBAAA5Y,EAAC,QAAA,EAAK,WAAWsC,GAAO,OAAQ,UAAA4D,GAAM;AAAA,gCACrC,QAAA,EAAK,WAAW5D,GAAO,WAAW,UAAA,gBAAAtC,EAACD,MAAY,EAAA,CAAE;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA,IAGpD,gBAAAC,EAAC,OAAA,EAAI,WAAWsC,GAAO,QACrB,UAAA,gBAAAtC,EAAC,QAAA,EAAK,WAAWsC,GAAO,OAAQ,UAAA4D,EAAA,CAAM,GACxC,IAEA;AAAA,QAEJ,gBAAAlG;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAI2C;AAAA,YACJ,WAAWL,GAAO;AAAA,YAClB,eAAa4V,KAAe;AAAA,YAE5B,UAAA,gBAAAtV;AAAA,cAAC;AAAA,cAAA;AAAA,gBACE,GAAGwU;AAAA,gBACJ,WAAWuB;AAAA,gBACX,cAAaJ,IAAuB,SAAZrB;AAAA,gBAEvB,UAAA;AAAA,kBAAApW,EAAM,SAAS,IACdA,EAAM,IAAI,CAAC0B,MAAS;;AAClB,0BAAM2J,KAAW3J,EAAK,UAAWoU,KAAcwB,MAAyB5V,EAAK,OACvE4X,KAAkBvB,EAAYrW,CAAI,GAClC6X,KAAiBL,MAAA,gBAAAA,GAAgB,eAAcxX,EAAK,QAAQwX,KAAiB,MAC7EM,KAAiBvC,KAAA,gBAAAA,EAAY,kBAAiBD,KAAkBC,EAAW,KAAK,UAAUvV,EAAK,SAASuV,EAAW,OACnHwC,IAAY;AAAA,sBAChBjY,GAAO;AAAA,sBACP6J,KAAW7J,GAAO,SAAS;AAAA,sBAC3BE,EAAK,WAAWF,GAAO,WAAW;AAAA,sBAClC8X,KAAkB9X,GAAO,gBAAgB;AAAA,sBACzCgY,IAAiBhY,GAAO,eAAe;AAAA,sBACvChB;AAAA,sBACAkB,EAAK;AAAA,uBACLK,KAAAL,EAAK,cAAL,gBAAAK,GAAgB;AAAA,oBAAA,EAEf,OAAO,OAAO,EACd,KAAK,GAAG,GACL2X,KAAUT,GAAkBvX,CAAI,GAChCiY,KAAY7D,KAAc,GAAQpU,EAAK,YAAWM,KAAAN,EAAK,gBAAL,QAAAM,GAAkB;AAE1E,2BACE,gBAAA4X;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACE,GAAGlY,EAAK;AAAA,wBACT,KAAKA,EAAK;AAAA,wBACV,WAAW+X;AAAA,wBACX,eAAapO,KAAW,SAAS;AAAA,wBACjC,4BAA0BkL,IAAY7U,EAAK,QAAQ;AAAA,sBAAA;AAAA,sBAElD6X,IACC,gBAAAra;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,WAAW;AAAA,4BACTsC,GAAO;AAAA,4BACP+X,EAAe,aAAa,WAAW/X,GAAO,sBAAsBA,GAAO;AAAA,0BAAA,EAC3E,KAAK,GAAG;AAAA,wBAAA;AAAA,sBAAA,IAEV;AAAA,sBACHmY,KACC,gBAAAza;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACE,GAAGwC,EAAK;AAAA,0BACT,MAAK;AAAA,0BACL,WAAW,CAACF,GAAO,aAAYU,KAAAR,EAAK,gBAAL,gBAAAQ,GAAkB,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,0BACpF,UAAUR,EAAK,cAAYS,KAAAT,EAAK,gBAAL,gBAAAS,GAAkB;AAAA,0BAC7C,eAAe,CAACF,OAAU;;AACxB,6BAAAD,KAAAD,IAAAL,EAAK,gBAAL,gBAAAK,EAAkB,kBAAlB,QAAAC,EAAA,KAAAD,GAAkCE,KAC7BA,GAAM,oBAAkB+W,GAAc/W,IAAOP,CAAI;AAAA,0BACxD;AAAA,0BACA,SAAS,CAACO,OAAU;;AAClB,gCAAIkV,EAAqB,SAAS;AAChC,8BAAAA,EAAqB,UAAU,IAC/BlV,GAAM,eAAA;AACN;AAAA,4BACF;AACA,6BAAAD,KAAAD,IAAAL,EAAK,gBAAL,gBAAAK,EAAkB,YAAlB,QAAAC,EAAA,KAAAD,GAA4BE,KACxB,CAACA,GAAM,oBAAoB6T,KAC7ByB,GAAwB7V,EAAK,KAAK,GAE/BO,GAAM,qBAAkBC,IAAAR,EAAK,YAAL,QAAAQ,EAAA,KAAAR,GAAeO,IAAOP;AAAA,0BACrD;AAAA,0BAEC,UAAAgY;AAAA,wBAAA;AAAA,sBAAA,IAGH,gBAAAxa,EAAC,OAAA,EAAI,WAAWsC,GAAO,aAAa,eAAe,CAACS,OAAU+W,GAAc/W,IAAOP,CAAI,GACpF,UAAAgY,GAAA,CACH;AAAA,oBAAA;AAAA,kBAIR,CAAC,IACCjC,KAAY,CAAC2B,KACf,gBAAAla,EAAC,MAAA,EAAG,WAAWsC,GAAO,OAAQ,UAAA4L,EAAA,CAAW,IACvC;AAAA,kBACH+L,uBAAyB,MAAA,EAAG,WAAW3X,GAAO,mBAAmB,eAAY,QAAO,IAAK;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAC5F;AAAA,QAAA;AAAA,QAED6X,KACC,gBAAAna;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWsC,GAAO;AAAA,YAClB,OAAO;AAAA,cACL,MAAMyV,EAAW,WAAW9D;AAAA,cAC5B,KAAK8D,EAAW,WAAW9D;AAAA,cAC3B,OAAO8D,EAAW;AAAA,cAClB,QAAQA,EAAW;AAAA,YAAA;AAAA,YAGpB,cAAYL,EAAUK,EAAW,IAAI,IAAIgC,GAAkBhC,EAAW,IAAI;AAAA,UAAA;AAAA,QAAA,IAE3E;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGV;AAEAzB,GAAK,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GChpBbqE,KAAY,MAChB,gBAAA3a,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SAC9G,4BAAC,QAAA,EAAK,GAAE,mBAAiB,EAAA,CAC3B;AAiBK,SAAS4a,GAAS;AAAA,EACvB,OAAAnX;AAAA,EACA,SAAAL,IAAU;AAAA,EACV,SAAAyX;AAAA,EACA,gBAAAC;AAAA,EACA,eAAAC,IAAgB;AAAA,EAChB,WAAA9R,IAAY;AAAA,EACZ,UAAA5H,IAAW;AAAA,EACX,UAAA/B;AAAA,EACA,WAAAwC;AAAA,EACA,GAAGE;AACL,GAAkB;AAChB,QAAMgZ,IAAYH,KAAWC,KAAkB,IAEzCzY,IAAM;AAAA,IACVC,GAAO;AAAA,IACPA,GAAOc,CAAO;AAAA,IACd4X,KAAa,CAACD,IAAgBzY,GAAO,UAAU;AAAA,IAC/CyY,IAAgBzY,GAAO,gBAAgB;AAAA,IACvC2G,IAAY3G,GAAO,UAAU;AAAA,IAC7BjB,IAAWiB,GAAO,WAAW;AAAA,IAC7BR;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAc,EAAC,SAAA,EAAM,WAAWP,GAChB,UAAA;AAAA,IAAA,gBAAArC;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAGgC;AAAA,QACJ,MAAK;AAAA,QACL,SAASgZ;AAAA,QACT,UAAA3Z;AAAA,QACA,OAAO,EAAE,SAAS,OAAA;AAAA,QAClB,UAAU,CAACsR,MAAMrT,KAAA,gBAAAA,EAAWqT,EAAE,cAAc;AAAA,MAAO;AAAA,IAAA;AAAA,IAErD,gBAAA3S,EAAC,UAAK,WAAWsC,GAAO,aACrB,UAAA,CAACyY,KAAiB,gBAAA/a,EAAC2a,IAAA,CAAA,CAAU,EAAA,CAChC;AAAA,IACClX;AAAA,EAAA,GACH;AAEJ;AAEAmX,GAAS,cAAc;AAYhB,SAASK,GAAM;AAAA,EACpB,OAAAxX;AAAA,EACA,SAAAL,IAAU;AAAA,EACV,SAAAyX,IAAU;AAAA,EACV,WAAA5R,IAAY;AAAA,EACZ,UAAA5H,IAAW;AAAA,EACX,UAAA/B;AAAA,EACA,OAAAK;AAAA,EACA,WAAAmC;AAAA,EACA,GAAGE;AACL,GAAe;AACb,QAAMK,IAAM;AAAA,IACVC,GAAO;AAAA,IACPA,GAAOc,CAAO;AAAA,IACdyX,IAAUvY,GAAO,eAAe;AAAA,IAChC2G,IAAY3G,GAAO,UAAU;AAAA,IAC7BjB,IAAWiB,GAAO,gBAAgB;AAAA,IAClCR;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAc,EAAC,SAAA,EAAM,WAAWP,GAChB,UAAA;AAAA,IAAA,gBAAArC;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAGgC;AAAA,QACJ,MAAK;AAAA,QACL,SAAA6Y;AAAA,QACA,UAAAxZ;AAAA,QACA,OAAA1B;AAAA,QACA,OAAO,EAAE,SAAS,OAAA;AAAA,QAClB,UAAU,CAACgT,MAAMrT,KAAA,gBAAAA,EAAWqT,EAAE,cAAc;AAAA,MAAK;AAAA,IAAA;AAAA,IAEnD,gBAAA3S,EAAC,QAAA,EAAK,WAAWsC,GAAO,SAAA,CAAU;AAAA,IACjCmB;AAAA,EAAA,GACH;AAEJ;AAEAwX,GAAM,cAAc;AAMb,SAASC,GAAW,EAAE,UAAArX,GAAU,WAAA/B,GAAW,GAAGE,KAA0B;AAC7E,QAAMK,IAAM,CAACC,GAAO,YAAYR,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACnE,SACE,gBAAA9B,EAAC,SAAK,GAAGgC,GAAO,WAAWK,GAAK,MAAK,cAClC,UAAAwB,GACH;AAEJ;AAEAqX,GAAW,cAAc;AAclB,SAASC,GAAO;AAAA,EACrB,OAAA1X;AAAA,EACA,SAAAL,IAAU;AAAA,EACV,SAAAyX;AAAA,EACA,gBAAAC;AAAA,EACA,UAAAzZ,IAAW;AAAA,EACX,WAAA+Z,IAAY;AAAA,EACZ,WAAAnS,IAAY;AAAA,EACZ,UAAA3J;AAAA,EACA,WAAAwC;AAAA,EACA,GAAGE;AACL,GAAgB;AACd,QAAMqZ,IAAOR,KAAWC,KAAkB,IAEpCzY,IAAM;AAAA,IACVC,GAAO;AAAA,IACPA,GAAOc,CAAO;AAAA,IACdiY,IAAO/Y,GAAO,WAAW;AAAA,IACzB8Y,IAAY9Y,GAAO,kBAAkB;AAAA,IACrC2G,IAAY3G,GAAO,UAAU;AAAA,IAC7BjB,IAAWiB,GAAO,iBAAiB;AAAA,IACnCR;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAc,EAAC,SAAA,EAAM,WAAWP,GAChB,UAAA;AAAA,IAAA,gBAAArC;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAGgC;AAAA,QACJ,MAAK;AAAA,QACL,SAASqZ;AAAA,QACT,UAAAha;AAAA,QACA,OAAO,EAAE,SAAS,OAAA;AAAA,QAClB,UAAU,CAACsR,MAAMrT,KAAA,gBAAAA,EAAWqT,EAAE,cAAc;AAAA,MAAO;AAAA,IAAA;AAAA,IAErD,gBAAA3S,EAAC,QAAA,EAAK,WAAWsC,GAAO,YAAA,CAAa;AAAA,IACpCmB;AAAA,EAAA,GACH;AAEJ;AAEA0X,GAAO,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;ACjLd,SAASG,GAAK,EAAE,QAAAC,IAAS,IAAM,SAAA3a,IAAU,MAAM,UAAAiD,GAAU,WAAA/B,GAAW,GAAGE,KAAoB;AAChG,QAAMK,IAAM,CAACC,GAAO,MAAMA,GAAO,WAAW1B,CAAO,EAAE,GAAG2a,IAASjZ,GAAO,SAAS,MAAMR,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAC1H,SACE,gBAAA9B,EAAC,SAAK,GAAGgC,GAAO,WAAWK,GAAK,MAAK,QAClC,UAAAwB,GACH;AAEJ;AAEAyX,GAAK,cAAc;AAQZ,SAASE,GAAU;AAAA,EACxB,OAAA/X;AAAA,EACA,UAAAI;AAAA,EACA,YAAA4X;AAAA,EACA,WAAA3Z;AAAA,EACA,GAAGE;AACL,GAAmB;AACjB,QAAMsM,IAAcpM,GAAA,GACdwZ,KAAUD,KAAA,gBAAAA,EAAY,OAAM,GAAGnN,CAAW;AAEhD,SACE,gBAAA1L;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGZ;AAAA,MACJ,WAAW,CAACM,GAAO,OAAOR,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MAC7D,MAAK;AAAA,MACL,mBAAiB4Z;AAAA,MAEjB,UAAA;AAAA,QAAA,gBAAA1b;AAAA,UAAC;AAAA,UAAA;AAAA,YACE,GAAGyb;AAAA,YACJ,IAAIC;AAAA,YACJ,WAAW,CAACpZ,GAAO,YAAYmZ,KAAA,gBAAAA,EAAY,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,YAE7E,UAAAhY;AAAA,UAAA;AAAA,QAAA;AAAA,QAEH,gBAAAzD,EAAC,OAAA,EAAI,WAAWsC,GAAO,YACpB,UAAAuB,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA2X,GAAU,cAAc;AAaxB,MAAM1X,KAAmB,MACvB,gBAAA9D,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MAC1I,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,gBAAA,CAAe,EAAA,CACzB;AAGK,SAAS2b,GAAS;AAAA,EACvB,MAAAtY;AAAA,EACA,KAAAuY;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,QAAAC,IAAS;AAAA,EACT,SAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,gBAAAC,IAAiB;AAAA,EACjB,UAAA5a,IAAW;AAAA,EACX,UAAAwC;AAAA,EACA,WAAA/B;AAAA,EACA,SAAA6R;AAAA,EACA,GAAG3R;AACL,GAAkB;AAChB,QAAM,CAACka,GAAaC,CAAc,IAAI1c,GAAS,EAAK,GAC9C2c,IAAa,EAAQL,KAAY,CAAC1a,GAClCgb,IAAeD,KAAcH,MAAmB,SAEhD5Z,IAAM;AAAA,IACVC,GAAO;AAAA,IACPuZ,IAASvZ,GAAO,SAAS;AAAA,IACzBwZ,IAASxZ,GAAO,SAAS;AAAA,IACzB4Z,IAAc5Z,GAAO,kBAAkB;AAAA,IACvCjB,IAAWiB,GAAO,WAAW;AAAA,IAC7BR;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAWLwa,IACJ,gBAAA1Z;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGZ;AAAA,MACJ,MAAK;AAAA,MACL,WAAWK;AAAA,MACX,UAAAhB;AAAA,MACA,MAAK;AAAA,MACL,iBAAe+a,IAAa,SAAS;AAAA,MACrC,iBAAeA,IAAaF,IAAc;AAAA,MAC1C,SAlBgB,CAACnZ,MAAyC;AAC5D,QAAIqZ,KAAcH,MAAmB,YACnClZ,EAAM,eAAA,GACNoZ,EAAe,CAAC1b,MAAS,CAACA,CAAI,IAGhCkT,KAAA,QAAAA,EAAU5Q;AAAA,MACZ;AAAA,MAaK,UAAA;AAAA,QAAAM;AAAA,QACD,gBAAArD,EAAC,QAAA,EAAK,WAAWsC,GAAO,aAAc,UAAAuB,GAAS;AAAA,QAC9C+X,KAAO,gBAAA5b,EAAC,QAAA,EAAK,WAAWsC,GAAO,KAAM,UAAAsZ,GAAI;AAAA,QACzCQ,uBAAe,QAAA,EAAK,WAAW9Z,GAAO,kBAAkB,UAAA,gBAAAtC,EAAC8D,MAAiB,EAAA,CAAE;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIjF,SAAKsY,IAGH,gBAAAxZ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,CAACN,GAAO,UAAUA,GAAO,WAAW0Z,CAAW,EAAE,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MACvF,MAAK;AAAA,MACL,cAAcK,IAAe,MAAMF,EAAe,EAAI,IAAI;AAAA,MAC1D,cAAcE,IAAe,MAAMF,EAAe,EAAK,IAAI;AAAA,MAE1D,UAAA;AAAA,QAAAG;AAAA,QACAJ,uBACE,OAAA,EAAI,WAAW,CAAC5Z,GAAO,cAAcA,GAAO,gBAAgB0Z,CAAW,EAAE,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAG,MAAK,QAC1G,UAAAD,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAbkBO;AAiB1B;AAEAX,GAAS,cAAc;;;;;;;;;;;;;;;;;;;GCxIjBzY,KAAQ,MACZ,gBAAAlD,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MAC1I,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,uBAAA,CAAsB,EAAA,CAChC,GAwBWuc,KAAQpX;AAAA,EACnB,CACE;AAAA,IACE,MAAA1E;AAAA,IACA,OAAAyF;AAAA,IACA,UAAAC;AAAA,IACA,UAAAtC;AAAA,IACA,QAAA2Y;AAAA,IACA,SAAAC,IAAU;AAAA,IACV,QAAAlB,IAAS;AAAA,IACT,WAAAlE,IAAY;AAAA,IACZ,iBAAAqF,IAAkB;AAAA,IAClB,iBAAAC,IAAkB;AAAA,IAClB,eAAAC;AAAA,IACA,YAAAC;AAAA,IACA,aAAA1F;AAAA,IACA,WAAA2F;AAAA,IACA,aAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,SAAAlX;AAAA,EAAA,GAEFP,MACG;AACH,UAAM0X,IAAWzT,GAAuB,IAAI,GACtC0T,IAAU1T,GAAO;AAAA,MACrB,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,SAAS;AAAA,IAAA,CACV,GACK,CAAC2T,GAAYC,CAAa,IAAI5d,GAAS,EAAE,GAAG,GAAG,GAAG,GAAG,GACrD,CAAC6d,GAAYC,CAAa,IAAI9d,GAAS,EAAK;AAElD,IAAAsK,GAAoBvE,GAAK,MAAM0X,EAAS,OAAyB,GAEjE1S,GAAU,MAAM;AACd,UAAI,CAAC/J,EAAM;AAEX,MAAA4c,EAAc,EAAE,GAAG,GAAG,GAAG,GAAG,GAC5BE,EAAc,EAAK;AAEnB,YAAMC,IAAY,CAAC7K,MAAqB;AACtC,QAAIA,EAAE,QAAQ,YAAU8K,EAAA;AAAA,MAC1B;AAEA,sBAAS,iBAAiB,WAAWD,CAAS,GACvC,MAAM,SAAS,oBAAoB,WAAWA,CAAS;AAAA,IAChE,GAAG,CAAC/c,CAAI,CAAC;AAET,UAAMgd,IAAe,MAAM;AACzB,MAAAR,KAAA,QAAAA,EAAe,KACflX,KAAA,QAAAA;AAAA,IACF,GAEM2X,IAAsB,CAAC3a,MAAsC;AACjE,MAAI2Z,KAAmB3Z,EAAM,WAAWA,EAAM,iBAC5C0a,EAAA;AAAA,IAEJ,GAEME,IAAiB,CAAClK,MACfA,aAAkB,cACrB,EAAQA,EAAO,QAAQ,0DAA0D,IACjF,IAGAmK,IAA0B,CAAC7a,MAA0C;;AAEzE,OADAF,IAAAsU,KAAA,gBAAAA,EAAa,kBAAb,QAAAtU,EAAA,KAAAsU,GAA6BpU,IACzB,EAAAA,EAAM,oBAAoB,CAACsU,KAAatU,EAAM,WAAW,KAAK4a,EAAe5a,EAAM,MAAM,OAE7Foa,EAAQ,UAAU;AAAA,QAChB,QAAQ;AAAA,QACR,WAAWpa,EAAM;AAAA,QACjB,QAAQA,EAAM;AAAA,QACd,QAAQA,EAAM;AAAA,QACd,SAASqa,EAAW;AAAA,QACpB,SAASA,EAAW;AAAA,MAAA,GAEtBG,EAAc,EAAI,GAClBxa,EAAM,cAAc,kBAAkBA,EAAM,SAAS;AAAA,IACvD,GAEM8a,IAA0B,CAAC9a,MAA0C;;AACzE,OAAAF,IAAAsU,KAAA,gBAAAA,EAAa,kBAAb,QAAAtU,EAAA,KAAAsU,GAA6BpU;AAC7B,YAAMwS,IAAO4H,EAAQ;AACrB,MAAI,CAAC5H,EAAK,UAAUA,EAAK,cAAcxS,EAAM,aAE7Csa,EAAc;AAAA,QACZ,GAAG9H,EAAK,UAAUxS,EAAM,UAAUwS,EAAK;AAAA,QACvC,GAAGA,EAAK,UAAUxS,EAAM,UAAUwS,EAAK;AAAA,MAAA,CACxC;AAAA,IACH,GAEMuI,IAAe,CAAC/a,MAA0C;AAE9D,MADaoa,EAAQ,QACZ,cAAcpa,EAAM,aAAaA,EAAM,cAAc,kBAAkBA,EAAM,SAAS,KAC7FA,EAAM,cAAc,sBAAsBA,EAAM,SAAS,GAG3Doa,EAAQ,QAAQ,SAAS,IACzBI,EAAc,EAAK;AAAA,IACrB,GAEMQ,IAAwB,CAAChb,MAA0C;;AACvE,OAAAF,IAAAsU,KAAA,gBAAAA,EAAa,gBAAb,QAAAtU,EAAA,KAAAsU,GAA2BpU,IAC3B+a,EAAa/a,CAAK;AAAA,IACpB,GAEMib,IAA4B,CAACjb,MAA0C;;AAC3E,OAAAF,IAAAsU,KAAA,gBAAAA,EAAa,oBAAb,QAAAtU,EAAA,KAAAsU,GAA+BpU,IAC/B+a,EAAa/a,CAAK;AAAA,IACpB;AAEA,QAAI,CAACtC,EAAM,QAAO;AAElB,UAAMwd,IAAgB,CAAC3b,GAAO,UAAUA,GAAO,WAAWma,CAAO,EAAE,GAAGG,KAAA,gBAAAA,EAAe,SAAS,EAC3F,OAAO,OAAO,EACd,KAAK,GAAG,GAELsB,KAAa,CAAC5b,GAAO,OAAOiZ,IAASjZ,GAAO,SAAS,MAAMua,KAAA,gBAAAA,EAAY,SAAS,EACnF,OAAO,OAAO,EACd,KAAK,GAAG,GAELsB,IAAa;AAAA,MACjB,GAAGtB,KAAA,gBAAAA,EAAY;AAAA,MACf,kBAAkB,GAAGO,EAAW,CAAC;AAAA,MACjC,kBAAkB,GAAGA,EAAW,CAAC;AAAA,IAAA;AAGnC,WACE,gBAAApd;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAG4c;AAAA,QACJ,WAAWqB;AAAA,QACX,SAASP;AAAA,QACT,MAAK;AAAA,QAEL,UAAA,gBAAA9a;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAKsa;AAAA,YACJ,GAAGL;AAAA,YACJ,WAAWqB;AAAA,YACX,OAAOC;AAAA,YACP,MAAK;AAAA,YACL,cAAW;AAAA,YAET,UAAA;AAAA,eAAAjY,KAASyW,MACT,gBAAA/Z;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACE,GAAGuU;AAAA,kBACJ,WAAW;AAAA,oBACT7U,GAAO;AAAA,oBACP+U,IAAY/U,GAAO,kBAAkB;AAAA,oBACrCgb,IAAahb,GAAO,iBAAiB;AAAA,oBACrC6U,KAAA,gBAAAA,EAAa;AAAA,kBAAA,EACb,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,kBAC1B,eAAeyG;AAAA,kBACf,eAAeC;AAAA,kBACf,aAAaE;AAAA,kBACb,iBAAiBC;AAAA,kBAEjB,UAAA;AAAA,oBAAA,gBAAApb,EAAC,OAAA,EAAI,WAAWN,GAAO,YACpB,UAAA;AAAA,sBAAA4D,sBAAS,OAAA,EAAI,WAAW5D,GAAO,OAAQ,aAAM,IAAS;AAAA,sBACtD6D,IAAW,gBAAAnG,EAAC,OAAA,EAAI,WAAWsC,GAAO,UAAW,aAAS,IAAS;AAAA,oBAAA,GAClE;AAAA,oBACCqa,KACC,gBAAA3c;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,cAAW;AAAA,wBACX,WAAWsC,GAAO;AAAA,wBAClB,SAASmb;AAAA,wBACR,GAAGT;AAAA,wBAEH,WAAAA,KAAA,gBAAAA,EAAkB,aAAY,gBAAAhd,EAACkD,IAAA,CAAA,CAAM;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACxC;AAAA,gBAAA;AAAA,cAAA;AAAA,cAIN,gBAAAlD;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACE,GAAG8c;AAAA,kBACJ,WAAW,CAACxa,GAAO,MAAM,MAAMwa,KAAA,gBAAAA,EAAW,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,kBAE5E,UAAAjZ;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEF2Y,KACC,gBAAAxc;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACE,GAAG+c;AAAA,kBACJ,WAAW,CAACza,GAAO,QAAQya,KAAA,gBAAAA,EAAa,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,kBAE1E,UAAAP;AAAA,gBAAA;AAAA,cAAA;AAAA,YACH;AAAA,UAAA;AAAA,QAAA;AAAA,MAEJ;AAAA,IAAA;AAAA,EAGN;AACF;AAEAD,GAAM,cAAc;;;;;;;;;;;;GCzOdrZ,KAAQ,MACZ,gBAAAN,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SAC9G,UAAA;AAAA,EAAA,gBAAA5C,EAAC,QAAA,EAAK,IAAG,MAAK,IAAG,KAAI,IAAG,KAAI,IAAG,KAAA,CAAI;AAAA,EACnC,gBAAAA,EAAC,UAAK,IAAG,KAAI,IAAG,KAAI,IAAG,MAAK,IAAG,KAAA,CAAI;AAAA,GACrC,GAIIoe,KAAc,GACdC,KAAmB;AAgBlB,SAASC,GAAQ;AAAA,EACtB,MAAMC;AAAA,EACN,aAAAC,IAAc;AAAA,EACd,OAAAtY;AAAA,EACA,UAAArC;AAAA,EACA,SAAA4a;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,QAAAnD,IAAS;AAAA,EACT,aAAAoD,IAAc;AAAA,EACd,iBAAAhC,IAAkB;AAAA,EAClB,cAAAM;AAAA,EACA,UAAA2B;AACF,GAAiB;AACf,QAAM,CAACC,GAAcC,CAAe,IAAIrf,GAAS+e,CAAW,GACtD,CAACO,GAAcC,CAAe,IAAIvf,GAAsBif,CAAI,GAC5D,CAACO,GAAUC,CAAW,IAAIzf,GAAA,GAC1BC,IAAe6e,MAAa,QAC5BY,IAASzf,IAAe6e,IAAWM,GAEnCnV,IAAaD,GAAuB,IAAI,GACxC2V,IAAS3V,GAAuB,IAAI;AAE1C,WAAS4V,EAAQ1f,GAAgB;AAC/B,IAAKD,KAAcof,EAAgBnf,CAAK,GACxCsd,KAAA,QAAAA,EAAetd;AAAA,EACjB;AAEA,EAAA6K,GAAU,MAAM;AACd,aAASsJ,EAAYnB,GAAe;AAClC,MAAIjJ,EAAW,WAAW,CAACA,EAAW,QAAQ,SAASiJ,EAAE,MAAc,KACrE0M,EAAQ,EAAK;AAAA,IAEjB;AACA,WAAIF,KAAQ,SAAS,iBAAiB,aAAarL,CAAW,GACvD,MAAM,SAAS,oBAAoB,aAAaA,CAAW;AAAA,EACpE,GAAG,CAACqL,CAAM,CAAC,GAEX3U,GAAU,MAAM;AACd,IAAK2U,MACHH,EAAgBN,CAAI,GACpBQ,EAAY,MAAS;AAAA,EAEzB,GAAG,CAACC,GAAQT,CAAI,CAAC,GAEjBY,GAAgB,MAAM;AACpB,QAAI,CAACH,EAAQ;AAEb,UAAMI,IAAiB,MAAM;AAC3B,YAAMC,IAAU9V,EAAW,SACrB+V,IAAML,EAAO;AACnB,UAAI,CAACI,KAAW,CAACC,EAAK;AAEtB,YAAMC,IAAcF,EAAQ,sBAAA,GACtBG,IAAWF,EAAI,aACfG,IAAYH,EAAI,cAChBI,IAAgB,OAAO,YACvBC,IAAiB,OAAO,aAExBC,KAAoBrB,EAAK,WAAW,KAAK,IAAI,QAAQ,UACrDsB,IAAoBD,OAAsB,QAAQ,WAAW,OAC7DE,IAAiBvB,EAAK,SAAS,KAAK,IAAI,QAAQ,SAChDwB,IAAiBD,MAAmB,QAAQ,UAAU,OAEtDE,IAAY;AAAA,QAChB,KAAKT,EAAY,MAAMrB;AAAA,QACvB,QAAQyB,IAAiBJ,EAAY,SAASrB;AAAA,MAAA,GAG1C+B,KAAiBR,IAAYxB,IAC7BiC,IAAWF,EAAUJ,EAAiB,KAAKK,MAAkBD,EAAUJ,EAAiB,KAAKI,EAAUH,CAAiB,IAC1HD,KACAC,GAEEM,IAAU,CAACC,OAA2BA,OAAU,QAClDb,EAAY,QAAQC,IACpBD,EAAY,MAEVc,IAAmB,CAACD,OAA2B;AACnD,cAAME,KAAOH,EAAQC,EAAK;AAC1B,eAAOE,MAAQpC,MAAoBoC,KAAOd,KAAYE,IAAgBxB;AAAA,MACxE,GAEMqC,IAAgBJ,EAAQL,CAAc,GACtCU,KAAgBL,EAAQJ,CAAc,GACtCU,KAAoB,KAAK,IAAIvC,KAAmBqC,GAAe,CAAC,IAClE,KAAK,IAAIA,IAAgBf,KAAYE,IAAgBxB,KAAmB,CAAC,GACvEwC,IAAoB,KAAK,IAAIxC,KAAmBsC,IAAe,CAAC,IAClE,KAAK,IAAIA,KAAgBhB,KAAYE,IAAgBxB,KAAmB,CAAC,GAEvEkC,KAAQC,EAAiBP,CAAc,KAAKW,MAAqBC,IACnEZ,IACAC,GAEEO,KAAOH,EAAQC,EAAK,GACpBO,KAAezC,KAAmBoC,IAClCM,KAAgBN,KAAOd,KAAYE,IAAgBxB;AACzD,UAAI2C,KAAS;AAEb,MAAIF,KAAe,MAAGE,KAASF,KAC3BC,KAAgB,MAAGC,KAAS,CAACD,KAEjC/B,EAAgB,GAAGqB,CAAQ,IAAIE,EAAK,EAAiB,GACrDrB,EAAY,EAAE,qBAAqB,GAAG8B,EAAM,MAAuB;AAAA,IACrE;AAEA,WAAAzB,EAAA,GACA,OAAO,iBAAiB,UAAUA,CAAc,GAChD,OAAO,iBAAiB,UAAUA,GAAgB,EAAI,GAC/C,MAAM;AACX,aAAO,oBAAoB,UAAUA,CAAc,GACnD,OAAO,oBAAoB,UAAUA,GAAgB,EAAI;AAAA,IAC3D;AAAA,EACF,GAAG,CAAC1b,GAAUsb,GAAQT,GAAMxY,CAAK,CAAC;AAElC,QAAM+a,IAAQlC,EAAa,WAAW,KAAK,GACrCmC,IAAQnC,EAAa,SAAS,KAAK,GAEnCoC,IAAS;AAAA,IACb7e,GAAO;AAAA,IACPiZ,IAASjZ,GAAO,SAAS;AAAA,IACzB4e,IAAQ5e,GAAO,YAAY;AAAA,IAC3B2e,IAAQ3e,GAAO,UAAU;AAAA,IACzBsc,KAAA,gBAAAA,EAAU;AAAA,EAAA,EAET,OAAO,OAAO,EACd,KAAK,GAAG,GAELwC,IAAiB;AAAA,IACrB,GAAGnC;AAAA,IACH,GAAGL,KAAA,gBAAAA,EAAU;AAAA,EAAA;AAGf,SACE,gBAAAhc;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK8G;AAAA,MACL,WAAWpH,GAAO;AAAA,MAClB,cAAcqc,IAAc,MAAMU,EAAQ,EAAI,IAAI;AAAA,MAClD,cAAcV,IAAc,MAAMU,EAAQ,EAAK,IAAI;AAAA,MAElD,UAAA;AAAA,QAAAZ,KACC,gBAAAze,EAAC,OAAA,EAAI,SAAS,MAAMqf,EAAQV,IAAc,KAAO,CAACQ,CAAM,GAAG,OAAO,EAAE,SAAS,cAAA,GAC1E,UAAAV,GACH;AAAA,QAEDU,KACC,gBAAAvc,EAAC,OAAA,EAAK,GAAGgc,GAAU,KAAKQ,GAAQ,WAAW+B,GAAQ,OAAOC,GACxD,UAAA;AAAA,UAAA,gBAAAphB,EAAC,QAAA,EAAK,WAAWsC,GAAO,MAAA,CAAO;AAAA,WAC7B4D,KAASyW,MACT,gBAAA/Z,EAAC,OAAA,EAAI,WAAWN,GAAO,MACpB,UAAA;AAAA,YAAA4D,KAAS,gBAAAlG,EAAC,QAAA,EAAK,WAAWsC,GAAO,OAAQ,UAAA4D,GAAM;AAAA,YAC/CyW,KACC,gBAAA3c;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,WAAWsC,GAAO;AAAA,gBAClB,cAAW;AAAA,gBACX,SAAS,MAAM+c,EAAQ,EAAK;AAAA,gBAE5B,4BAACnc,IAAA,CAAA,CAAM;AAAA,cAAA;AAAA,YAAA;AAAA,UACT,GAEJ;AAAA,UAEF,gBAAAlD,EAAC,OAAA,EAAI,WAAWsC,GAAO,MAAO,UAAAuB,EAAA,CAAS;AAAA,QAAA,EAAA,CACzC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;AAEAya,GAAQ,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzLtB,SAAS+C,GAAM1hB,GAAe4I,GAAaC,GAAa;AACtD,SAAO,KAAK,IAAI,KAAK,IAAI7I,GAAO4I,CAAG,GAAGC,CAAG;AAC3C;AAEO,SAAS8Y,GAAS;AAAA,EACvB,OAAA3hB;AAAA,EACA,KAAA6I,IAAM;AAAA,EACN,SAAApF,IAAU;AAAA,EACV,MAAAiC,IAAO;AAAA,EACP,OAAAkc,IAAQ;AAAA,EACR,OAAA9d;AAAA,EACA,YAAA+d;AAAA,EACA,WAAAC;AAAA,EACA,eAAA1G,IAAgB;AAAA,EAChB,WAAAjZ;AAAA,EACA,GAAGE;AACL,GAAkB;AAChB,QAAM0f,IAAUlZ,IAAM,IAAIA,IAAM,KAC1BmZ,IAAkB5G,KAAiB,OAAOpb,KAAU,UACpDiiB,IAAY,OAAOjiB,KAAU,WAAW0hB,GAAM1hB,GAAO,GAAG+hB,CAAO,IAAI,GACnEG,IAAU,KAAK,MAAOD,IAAYF,IAAW,GAAG,GAChDI,IAAkBL,KAAaF,MAAU,UAEzClf,IAAM;AAAA,IACVC,GAAO;AAAA,IACPA,GAAOc,CAAO;AAAA,IACdme,MAAU,WAAWjf,GAAO,WAAW;AAAA,IACvCR;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAELigB,IAAmB;AAAA,IACvB,MAAM;AAAA,IACN,iBAAiBJ,IAAkB,SAAY;AAAA,IAC/C,iBAAiBA,IAAkB,SAAYD;AAAA,IAC/C,iBAAiBC,IAAkB,SAAYC;AAAA,IAC/C,kBAAkBJ;AAAA,EAAA;AAGpB,MAAID,MAAU,UAAU;AACtB,UAAMS,IAAc;AAAA,MAClB1f,GAAO;AAAA,MACPA,GAAO,UAAU+C,CAAI,EAAE;AAAA,MACvBsc,IAAkBrf,GAAO,sBAAsB;AAAA,IAAA,EAE9C,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,WACE,gBAAAM,EAAC,OAAA,EAAK,GAAGZ,GAAO,WAAWK,GACxB,UAAA;AAAA,MAAAoB,KAAS,gBAAAzD,EAAC,QAAA,EAAK,WAAWsC,GAAO,aAAc,UAAAmB,GAAM;AAAA,MACtD,gBAAAzD;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWgiB;AAAA,UACX,OAAO,EAAE,sBAAsB,GAAGH,CAAO,IAAA;AAAA,UACxC,GAAGE;AAAA,UAEH,UAAAD,KACC,gBAAA9hB,EAAC,QAAA,EAAK,WAAWsC,GAAO,aACrB,UAAAkf,MAAeG,IAAkB,YAAY,GAAGE,CAAO,KAAA,CAC1D;AAAA,QAAA;AAAA,MAAA;AAAA,IAEJ,GACF;AAAA,EAEJ;AAEA,QAAMI,IAAa;AAAA,IACjB3f,GAAO;AAAA,IACPA,GAAO,OAAO+C,CAAI,EAAE;AAAA,IACpBsc,IAAkBrf,GAAO,gBAAgB;AAAA,EAAA,EAExC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAM,EAAC,OAAA,EAAK,GAAGZ,GAAO,WAAWK,GACvB,UAAA;AAAA,KAAAoB,KAASqe,MACT,gBAAAlf,EAAC,OAAA,EAAI,WAAWN,GAAO,QACpB,UAAA;AAAA,MAAAmB,KAAS,gBAAAzD,EAAC,QAAA,EAAK,WAAWsC,GAAO,OAAQ,UAAAmB,GAAM;AAAA,MAC/Cqe,KACC,gBAAA9hB,EAAC,QAAA,EAAK,WAAWsC,GAAO,OACrB,UAAAkf,MAAeG,IAAkB,YAAY,GAAGE,CAAO,KAAA,CAC1D;AAAA,IAAA,GAEJ;AAAA,IAEF,gBAAA7hB,EAAC,OAAA,EAAI,WAAWiiB,GAAa,GAAGF,GAC9B,UAAA,gBAAA/hB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWsC,GAAO;AAAA,QAClB,OAAOqf,IAAkB,SAAY,EAAE,OAAO,GAAGE,CAAO,IAAA;AAAA,MAAI;AAAA,IAAA,EAC9D,CACF;AAAA,EAAA,GACF;AAEJ;AAEAP,GAAS,cAAc;;;;;;;;;;;;;;;;;;;;ACxGhB,SAASY,GAAgB;AAAA,EAC9B,KAAAC,IAAM;AAAA,EACN,SAAAtc,IAAU;AAAA,EACV,YAAAuc,IAAa;AAAA,EACb,SAAA9c,IAAU;AAAA,EACV,OAAAmN;AAAA,EACA,UAAA5O;AAAA,EACA,WAAA/B;AAAA,EACA,GAAGE;AACL,GAAyB;AACvB,QAAMqgB,IAAW5Y,GAAuB,IAAI,GACtC,CAAC6Y,GAAaC,CAAc,IAAI9iB,GAAA;AAEtC,EAAA6f,GAAgB,MAAM;AACpB,UAAMkD,IAAQH,EAAS;AACvB,QAAI,CAACG,EAAO;AAEZ,UAAMC,IAAoB,MAAM;AAC9B,YAAMC,IAAU,MAAM,KAAKF,EAAM,iBAAoC,QAAQ,CAAC;AAC9E,UAAIE,EAAQ,WAAW,GAAG;AACxB,QAAAH,EAAe,MAAS;AACxB;AAAA,MACF;AAEA,YAAMI,IAAY,KAAK,KAAK,KAAK,IAAI,GAAGD,EAAQ,IAAI,CAACE,MAAW;;AAC9D,cAAMC,IAAc,OAAO,iBAAiBD,CAAM,GAC5CE,IAAW,WAAWD,EAAY,WAAW,IAAI,WAAWA,EAAY,YAAY,GACpFE,MAAelgB,IAAA+f,EAAO,cAA2B,IAAItgB,GAAO,OAAO,EAAE,MAAtD,gBAAAO,EAAyD,wBAAwB,UAAS,GACzGmgB,IAAQJ,EAAO,cAA2B,IAAItgB,GAAO,KAAK,EAAE,GAC5D2gB,KAAaD,KAAA,gBAAAA,EAAO,wBAAwB,UAAS,GACrDE,IAAcF,MAAQ,WAAW,OAAO,iBAAiBA,CAAK,EAAE,SAAS,GAAG,KAAK,WAAW,OAAO,iBAAiBA,CAAK,EAAE,QAAQ,GAAG,MAAK,GAC3IG,IAAWH,IAAQ,IAAI,GACvBI,IAA0BL,IAAeD,GACzCO,IAAwBN,KAAgBE,IAAaC,IAAcC,KAAY;AAErF,eAAO,KAAK,IAAIC,GAAyBC,CAAqB;AAAA,MAChE,CAAC,CAAC,CAAC;AACH,MAAAd,EAAeI,CAAS;AAAA,IAC1B;AAIA,QAFAF,EAAA,GAEI,OAAO,iBAAmB,IAAa;AAC3C,UAAMa,IAAW,IAAI,eAAeb,CAAiB;AACrD,WAAAa,EAAS,QAAQd,CAAK,GACtB,MAAM,KAAKA,EAAM,QAAQ,EAAE,QAAQ,CAACe,MAAUD,EAAS,QAAQC,CAAK,CAAC,GAC9D,MAAMD,EAAS,WAAA;AAAA,EACxB,GAAG,CAACzf,CAAQ,CAAC;AAEb,QAAMxB,IAAM;AAAA,IACVC,GAAO;AAAA,IACPA,GAAO,OAAO6f,CAAG,EAAE;AAAA,IACnB7f,GAAO,WAAWuD,CAAO,EAAE;AAAA,IAC3Buc,IAAa,OAAO9f,GAAO;AAAA,IAC3BgD,IAAUhD,GAAO,UAAU;AAAA,IAC3BmQ,MAAU,SAAYnQ,GAAO,aAAa;AAAA,IAC1CR;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAELC,IAAQ;AAAA,IACZ,GAAGC,EAAM;AAAA,IACT,GAAIyQ,MAAU,SAAY,EAAE,OAAAA,MAAU;AAAA,IACtC,GAAI6P,MAAgB,SAAY,EAAE,uBAAuB,GAAGA,CAAW,SAAS;AAAA,EAAA;AAGlF,SACE,gBAAAtiB,EAAC,OAAA,EAAK,GAAGgC,GAAO,KAAKqgB,GAAU,WAAWhgB,GAAK,OAAAN,GAAc,MAAK,SAC/D,UAAA8B,EAAA,CACH;AAEJ;AAEAqe,GAAgB,cAAc;AAUvB,SAASsB,GAAW;AAAA,EACzB,IAAAC,IAAK;AAAA,EACL,MAAApgB;AAAA,EACA,OAAA2f;AAAA,EACA,eAAAU,IAAgB;AAAA,EAChB,UAAA7f;AAAA,EACA,UAAAxC,IAAW;AAAA,EACX,WAAAS;AAAA,EACA,GAAGE;AACL,GAAoB;AAClB,QAAMK,IAAM;AAAA,IACVC,GAAO;AAAA,IACPmhB,IAAKnhB,GAAO,KAAK;AAAA,IACjBjB,IAAWiB,GAAO,WAAW;AAAA,IAC7BR;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAc,EAAC,YAAQ,GAAGZ,GAAO,MAAK,UAAS,WAAWK,GAAK,UAAAhB,GAC/C,UAAA;AAAA,IAAA,gBAAAuB,EAAC,QAAA,EAAK,WAAWN,GAAO,SACrB,UAAA;AAAA,MAAAe;AAAA,MACAQ;AAAA,IAAA,GACH;AAAA,IACCmf,sBACE,QAAA,EAAK,WAAW,CAAC1gB,GAAO,OAAOA,GAAO,SAASohB,CAAa,EAAE,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GACvF,aACH,IACE;AAAA,EAAA,GACN;AAEJ;AAEAF,GAAW,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GC7GnBzjB,KAAc,MAClB,gBAAAC,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MAC1I,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,eAAA,CAAc,EAAA,CACxB,GAGIkD,KAAQ,MACZ,gBAAAlD,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MAC1I,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,uBAAA,CAAsB,EAAA,CAChC,GAGI2jB,KAAa,MACjB,gBAAA/gB,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAChH,UAAA;AAAA,EAAA,gBAAA5C,EAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAG;AAAA,EAC7B,gBAAAA,EAAC,QAAA,EAAK,GAAE,iBAAA,CAAgB;AAAA,GAC1B,GAGI2a,KAAY,MAChB,gBAAA3a,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MAC1I,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,kBAAA,CAAiB,EAAA,CAC3B,GAyDI4jB,KAAuB,CAC3B3X,GACA4X,MACG;AACH,QAAMC,IAAOD,EAAY,KAAA,EAAO,YAAA;AAChC,SAAKC,IACE7X,EAAQ;AAAA,IAAO,CAAC8X,MACrB,OAAOA,EAAE,KAAK,EAAE,YAAA,EAAc,SAASD,CAAI;AAAA,EAAA,IAF3B7X;AAIpB,GAEM+X,KACJ,OAAO,SAAW,MAAcxZ,KAAY8U,IAEjC2E,KAAS9e;AAAA,EACpB,CACE;AAAA,IACE,OAAA1B;AAAA,IACA,UAAAmF;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,UAAAxH,IAAW;AAAA,IACX,YAAA6M,IAAa;AAAA,IACb,eAAAgW,IAAgBN;AAAA,IAChB,WAAAO,IAAY;AAAA,IACZ,cAAAC,IAAe;AAAA,IACf,UAAAhkB,IAAW;AAAA,IACX,gBAAAikB;AAAA,IACA,SAAApY;AAAA,IACA,cAAAqY,IAAe;AAAA,IACf,iBAAAC,IAAkB;AAAA,IAClB,aAAAjb,IAAc;AAAA,IACd,YAAAkb,IAAa;AAAA,IACb,mBAAAC,IAAoB;AAAA,IACpB,mBAAAC,IAAoB;AAAA,IACpB,cAAAC,IAAe;AAAA,IACf,oBAAAC,IAAqB;AAAA,IACrB,eAAAC;AAAA,IACA,WAAA5b,IAAY;AAAA,IACZ,OAAAtJ;AAAA,IACA,cAAAN,IAAe;AAAA,IACf,eAAAwC;AAAA,IACA,YAAAsH;AAAA,IACA,cAAAC;AAAA,IACA,aAAA0b;AAAA,IACA,WAAAhjB;AAAA,IACA,GAAGE;AAAA,EAAA,GAELwD,MACG;AACH,UAAM,CAAC/E,GAAM4e,CAAO,IAAI5f,GAAS,EAAK,GAChC,CAACokB,GAAakB,CAAc,IAAItlB,GAAS,EAAE,GAC3C,CAACulB,IAAYC,CAAa,IAAIxlB,GAA6B,IAAI,GAC/D,CAACylB,GAAcC,CAAe,IAAI1lB,GAAwB,CAAA,CAAE,GAC5DuY,IAAUvO,GAAuB,IAAI,GACrC2b,KAAa3b,GAAuB,IAAI,GAExC,CAACoN,GAAewO,CAAgB,IAAIlmB;AAAA,MACxCQ;AAAA,MACAN;AAAA,MACA,CAACS,MAAc;AACb,cAAMqM,IAAWF,EAAQ;AAAA,UAAO,CAAC8X,OAC/B,MAAM,QAAQjkB,CAAS,IACnBA,EAAU,SAASikB,GAAE,KAAK,IAC1BA,GAAE,UAAUjkB;AAAA,QAAA;AAElB,QAAA+B,KAAA,QAAAA,EAAgB/B,GAAWqM;AAAA,MAC7B;AAAA,IAAA,GAGImZ,IAAiBtW;AAAA,MACrB,MACE,MAAM,QAAQ6H,CAAa,IACvBA,IACAA,IACE,CAACA,CAAa,IACd,CAAA;AAAA,MACR,CAACA,CAAa;AAAA,IAAA,GAGV0O,IAAkBvW;AAAA,MACtB,MAAM/C,EAAQ,OAAO,CAAC8X,MAAMuB,EAAe,SAASvB,EAAE,KAAK,CAAC;AAAA,MAC5D,CAAC9X,GAASqZ,CAAc;AAAA,IAAA,GAGpBE,KAAkBxW;AAAA,MACtB,MAAMkV,EAAcjY,GAAS4X,CAAW;AAAA,MACxC,CAACK,GAAejY,GAAS4X,CAAW;AAAA,IAAA;AAGtC,IAAArZ,GAAU,MAAM;AACd,MAAAya,EAAc,SAAS,IAAI;AAAA,IAC7B,GAAG,CAAA,CAAE;AAEL,UAAMQ,KAAelB,MAAoB,OAEnCmB,IAAwB7lB,GAAY,MAAM;;AAC9C,YAAM6V,KAAO7S,KAAAmV,EAAQ,YAAR,gBAAAnV,GAAiB;AAC9B,UAAI,CAAC6S,EAAM;AAEX,YAAMiQ,IAA2B;AAAA,QAC/B,UAAU;AAAA,QACV,MAAMjQ,EAAK;AAAA,QACX,OAAO;AAAA,QACP,OAAOA,EAAK;AAAA,QACZ,QAAQ;AAAA,MAAA;AAGV,MAAI+P,MACFE,EAAU,MAAM,QAChBA,EAAU,SAAS,OAAO,cAAcjQ,EAAK,QAE7CiQ,EAAU,MAAMjQ,EAAK,QACrBiQ,EAAU,SAAS,SAGrBR,EAAgBQ,CAAS;AAAA,IAC3B,GAAG,CAACF,EAAY,CAAC;AAEjBzB,IAAAA,GAAoB,MAAM;AACxB,MAAIvjB,KAAMilB,EAAA;AAAA,IACZ,GAAG,CAACjlB,GAAMilB,CAAqB,CAAC,GAEhClb,GAAU,MAAM;AACd,UAAK/J;AAEL,eAAAilB,EAAA,GACA,OAAO,iBAAiB,UAAUA,CAAqB,GACvD,OAAO,iBAAiB,UAAUA,GAAuB,EAAI,GAEtD,MAAM;AACX,iBAAO,oBAAoB,UAAUA,CAAqB,GAC1D,OAAO,oBAAoB,UAAUA,GAAuB,EAAI;AAAA,QAClE;AAAA,IACF,GAAG,CAACjlB,GAAMilB,CAAqB,CAAC,GAGhClb,GAAU,MAAM;AACd,UAAI,CAAC/J,EAAM;AACX,YAAMqT,IAAc,CAACnB,MAAkB;;AACrC,cAAMc,KAASd,EAAE,QACXiT,MAAiB/iB,KAAAmV,EAAQ,YAAR,gBAAAnV,GAAiB,SAAS4Q,KAC3CoS,MAAiB/iB,KAAAsiB,GAAW,YAAX,gBAAAtiB,GAAoB,SAAS2Q;AAEpD,QAAI,CAACmS,MAAkB,CAACC,MACtBxG,EAAQ,EAAK;AAAA,MAEjB;AACA,sBAAS,iBAAiB,aAAavL,CAAW,GAC3C,MAAM,SAAS,oBAAoB,aAAaA,CAAW;AAAA,IACpE,GAAG,CAACrT,CAAI,CAAC;AAET,UAAMqlB,KAAe,CAACtR,MAAiB;AACrC,MAAAuQ,EAAevQ,CAAI,GACnB6P,KAAA,QAAAA,EAAiB7P;AAAA,IACnB,GAEMuR,KAAwBlB,KAAiB,CAACzkB,GAE1C4lB,KAAe,CAAC9Z,MAAyB;AAC7C,UAAI,CAAAA,EAAO,UACX;AAAA,YAAI9L,GAAU;AACZ,gBAAMoU,IAAO8Q,EAAe,SAASpZ,EAAO,KAAK,IAC7CoZ,EAAe,OAAO,CAACW,OAAMA,OAAM/Z,EAAO,KAAK,IAC/C,CAAC,GAAGoZ,GAAgBpZ,EAAO,KAAK;AACpC,UAAAmZ,EAAiB7Q,CAAI,GACjBuR,QAA+B,EAAK;AACxC;AAAA,QACF;AACA,QAAAV,EAAiBnZ,EAAO,KAAK,GACzB6Z,QAA+B,EAAK;AAAA;AAAA,IAC1C,GAEMG,KAAa,MAAM;AACvB,MAAAb,EAAiBjlB,IAAW,CAAA,IAAK,IAAI,GACrC0lB,GAAa,EAAE;AAAA,IACjB,GAEMK,KAAkB,MAAM;AAC5B,UAAIb,EAAe,SAAS,GAAG;AAC7B,QAAAY,GAAA;AACA;AAAA,MACF;AAEA,MAAAb,EAAiBpZ,EAAQ,OAAO,CAAC8X,MAAM,CAACA,EAAE,QAAQ,EAAE,IAAI,CAACA,MAAMA,EAAE,KAAK,CAAC;AAAA,IACzE,GAEMqC,KAAqB,CAACzT,MAA0C;;AACpE,OAAA9P,IAAAiiB,KAAA,gBAAAA,EAAa,YAAb,QAAAjiB,EAAA,KAAAiiB,GAAuBnS,IACnB,CAACA,EAAE,oBAAoB,CAACtR,KAAUge,EAAQ,CAAC0E,OAAM,CAACA,EAAC;AAAA,IACzD,GAEMsC,KAAuB,CAAC1T,MAAwC;;AAEpE,OADA9P,IAAAiiB,KAAA,gBAAAA,EAAa,cAAb,QAAAjiB,EAAA,KAAAiiB,GAAyBnS,IACrB,CAAAA,EAAE,sBAEFA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SACjCA,EAAE,eAAA,GACF0M,EAAQ,CAAC0E,OAAM,CAACA,EAAC,IAEfpR,EAAE,QAAQ,YAAU0M,EAAQ,EAAK;AAAA,IACvC,GAEMnQ,IAAe;AAAA,MACnB5M,EAAO;AAAA,MACP7B,IAAO6B,EAAO,cAAc;AAAA,MAC5B2G,IAAY3G,EAAO,UAAU;AAAA,MAC7B7B,IACIglB,KACEnjB,EAAO,sBACPA,EAAO,yBACT;AAAA,MACJwiB,KAAA,gBAAAA,EAAa;AAAA,IAAA,EAEZ,OAAO,OAAO,EACd,KAAK,GAAG,GAELwB,KAA8B,CAAClmB,KAAYwkB,GAC3C2B,KAAYnmB,KAAYwkB,KAAsBW,EAAgB,SAAS,GACvEiB,IAAqBpmB,GACrBqmB,IAAarmB,MAAaklB,EAAe,SAAS,KAAKX,IACvD+B,IAAyBJ,MAA+Bf,EAAgB,SAAS,GACjFoB,KAAW,GACXC,KAAgBrB,EAAgB,SAASoB,IACzCE,KAAiBtB,EAAgB,IAAI,CAACrZ,GAAQhI,wBACjDsI,IAAA,EACE,UAAA;AAAA,MAAAtI,IAAQ,IAAI,OAAO;AAAA,MACnBgI,EAAO;AAAA,IAAA,KAFKA,EAAO,KAGtB,CACD,GAEKuM,KAAY,CAACnW,EAAO,MAAMR,GAAWsH,KAAA,gBAAAA,EAAc,SAAS,EAC/D,OAAO,OAAO,EACd,KAAK,GAAG,GACL+F,KAAa,CAAC7M,EAAO,OAAO6G,KAAA,gBAAAA,EAAY,SAAS,EACpD,OAAO,OAAO,EACd,KAAK,GAAG,GACL2d,KAAoB;AAAA,MACxB,MAAMxkB,EAAO;AAAA,MACb,QAAQA,EAAO;AAAA,MACf,OAAOA,EAAO;AAAA,IAAA,EACdgiB,CAAY,GAERyC,KAAUtmB,IACd,gBAAAmC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKwiB;AAAA,QACL,WAAW;AAAA,UACT9iB,EAAO;AAAA,UACPmjB,KAAenjB,EAAO,aAAaA,EAAO;AAAA,QAAA,EAC1C,KAAK,GAAG;AAAA,QACV,OAAO4iB;AAAA,QACP,MAAK;AAAA,QACL,wBAAsB9kB,KAAY;AAAA,QAEjC,UAAA;AAAA,UAAAokB,KACC,gBAAA5hB,EAAC,OAAA,EAAI,WAAWN,EAAO,QACrB,UAAA;AAAA,YAAA,gBAAAtC,EAAC,UAAK,WAAWsC,EAAO,YAAY,UAAA,gBAAAtC,EAAC2jB,MAAW,GAAE;AAAA,YAClD,gBAAA3jB;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAS;AAAA,gBACT,OAAO6jB;AAAA,gBACP,aAAaY;AAAA,gBACb,WAAWniB,EAAO;AAAA,gBAClB,UAAU,CAACqQ,MAAMmT,GAAanT,EAAE,OAAO,KAAK;AAAA,cAAA;AAAA,YAAA;AAAA,YAE7CkR,KACC,gBAAA7jB,EAAC,UAAA,EAAO,WAAWsC,EAAO,UAAU,SAAS,MAAMwjB,GAAa,EAAE,GAChE,UAAA,gBAAA9lB,EAACkD,MAAM,EAAA,CACT;AAAA,UAAA,GAEJ;AAAA,UAGF,gBAAAN,EAAC,MAAA,EAAG,WAAW,CAACN,EAAO,MAAM,IAAI,EAAE,KAAK,GAAG,GACxC,UAAA;AAAA,YAAA6hB,KAAa,gBAAAnkB,EAAC,MAAA,EAAG,WAAWsC,EAAO,YAAa,UAAA8hB,GAAa;AAAA,YAC7D,CAACD,KAAaqB,GAAgB,WAAW,uBACvC,MAAA,EAAG,WAAWljB,EAAO,YAAa,UAAA4L,EAAA,CAAW;AAAA,YAE/C,CAACiW,KACAqB,GAAgB,IAAI,CAACtZ,MAAW;AAC9B,oBAAM2O,IAAUyK,EAAe,SAASpZ,EAAO,KAAK,GAC9CqO,KAAY;AAAA,gBAChBjY,EAAO;AAAA,gBACPwkB;AAAA,gBACAjM,IAAUvY,EAAO,aAAa;AAAA,gBAC9B4J,EAAO,WAAW5J,EAAO,eAAe;AAAA,cAAA,EAEvC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,qBACE,gBAAAM;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,WAAW2X;AAAA,kBACX,MAAK;AAAA,kBACL,iBAAeM;AAAA,kBACf,SAAS,MAAMmL,GAAa9Z,CAAM;AAAA,kBAEjC,UAAA;AAAA,oBAAA,CAACsa,KAAsBlC,MAAiB,WAAWzJ,KAClD,gBAAA7a,EAAC,QAAA,EAAK,WAAWsC,EAAO,WAAW,UAAA,gBAAAtC,EAAC2a,IAAA,CAAA,CAAU,GAAE;AAAA,oBAEjD6L,sBACE,QAAA,EAAK,WAAW,CAAClkB,EAAO,UAAUuY,IAAUvY,EAAO,kBAAkB,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GACjG,UAAAuY,KAAW,gBAAA7a,EAAC2a,IAAA,EAAU,EAAA,CACzB,IACE;AAAA,oBACJ,gBAAA3a,EAAC,QAAA,EAAM,UAAAkM,EAAO,MAAA,CAAM;AAAA,oBACnBA,EAAO,QAAQ,gBAAAlM,EAAC,QAAA,EAAK,WAAWsC,EAAO,UAAW,YAAO,KAAA,CAAK;AAAA,oBAC9D,CAACkkB,KAAsBlC,MAAiB,WAAWzJ,KAClD,gBAAA7a,EAAC,QAAA,EAAK,WAAWsC,EAAO,WAAW,UAAA,gBAAAtC,EAAC2a,IAAA,CAAA,CAAU,EAAA,CAAE;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAjB7CzO,EAAO;AAAA,cAAA;AAAA,YAqBlB,CAAC;AAAA,UAAA,GACL;AAAA,UAECua,MAAe/B,KAAqBC,wBAClC,OAAA,EAAI,WAAWriB,EAAO,WACpB,UAAA;AAAA,YAAAoiB,uBAAsB,QAAA,EAAM,UAAA;AAAA,cAAAY,EAAe;AAAA,cAAO;AAAA,YAAA,GAAS;AAAA,YAC3DX,KACC,gBAAA3kB,EAAC,UAAA,EAAO,WAAWsC,EAAO,cAAc,SAAS6jB,IAC9C,UAAAb,EAAe,SAAS,IAAI,cAAc,YAAA,CAC7C;AAAA,UAAA,EAAA,CAEJ;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,IAGF,MAEEhW,IACJ,gBAAA1M,EAAC,OAAA,EAAI,KAAKoV,GAAU,GAAGhW,GAAQ,GAAGoH,GAAc,WAAWqP,IACzD,UAAA;AAAA,MAAA,gBAAA7V;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAGkiB;AAAA,UACJ,MAAK;AAAA,UACL,WAAW5V;AAAA,UACX,UAAA7N;AAAA,UACA,iBAAc;AAAA,UACd,iBAAeZ;AAAA,UACf,SAAS2lB;AAAA,UACT,WAAWC;AAAA,UAEV,UAAA;AAAA,YAAAE,KACC,gBAAA3jB,EAAC,OAAA,EAAI,WAAWN,EAAO,OACpB,UAAA;AAAA,cAAAijB,EAAgB,MAAM,GAAGoB,EAAQ,EAAE,IAAI,CAAC5C,MACvC,gBAAA/jB,EAAC,QAAA,EAAmB,WAAWsC,EAAO,MAAO,UAAAyhB,EAAE,SAApCA,EAAE,KAAwC,CACtD;AAAA,cACA6C,KAAgB,KACf,gBAAAhkB,EAAC,QAAA,EAAK,WAAW,CAACN,EAAO,MAAMA,EAAO,YAAY,EAAE,KAAK,GAAG,GAAG,UAAA;AAAA,gBAAA;AAAA,gBAC3DskB;AAAA,cAAA,EAAA,CACJ;AAAA,YAAA,GAEJ,sBAEC,QAAA,EAAK,WAAW,CAACtkB,EAAO,cAAeokB,IAAqD,OAA5BpkB,EAAO,kBAAyB,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GACxH,UAAAokB,IACGG,KACAvd,GACN;AAAA,YAEDT,KAAayc,EAAe,SAAS,KACpC,gBAAAtlB;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,cAAW;AAAA,gBACX,WAAWsC,EAAO;AAAA,gBAClB,UAAAjB;AAAA,gBACA,SAAS,CAACsR,MAAM;AAAE,kBAAAA,EAAE,gBAAA,GAAmBuT,GAAA;AAAA,gBAAc;AAAA,gBAErD,4BAAChjB,IAAA,CAAA,CAAM;AAAA,cAAA;AAAA,YAAA;AAAA,8BAGV,QAAA,EAAK,WAAW,CAACZ,EAAO,SAAS7B,IAAO6B,EAAO,cAAc,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAC1F,UAAA,gBAAAtC,EAACD,MAAY,EAAA,CACf;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGDgnB,MAAW/B,KAAagC,GAAaD,IAAS/B,EAAU,IAAI+B;AAAA,IAAA,GAC/D;AAGF,WAAI,CAACtjB,KAAS,CAACmF,KAAY,CAACO,IAAmBmG,IAG7C,gBAAA1M,EAAC,OAAA,EAAK,GAAGuG,GAAY,WAAWgG,IAC7B,UAAA;AAAA,MAAA1L,KACC,gBAAAb,EAAC,SAAA,EAAM,WAAWN,EAAO,OACtB,UAAA;AAAA,QAAAmB;AAAA,QACArD,KAAYskB,KAAqBY,EAAe,SAAS,KACxD,gBAAA1iB,EAAC,QAAA,EAAK,WAAWN,EAAO,WAAW,UAAA;AAAA,UAAA;AAAA,UAAGgjB,EAAe;AAAA,UAAO;AAAA,QAAA,EAAA,CAAS;AAAA,MAAA,GAEzE;AAAA,MAEDhW;AAAA,MACA1G,IAAW,gBAAA5I,EAAC,QAAA,EAAK,WAAWsC,EAAO,UAAW,aAAS,IAAU;AAAA,IAAA,GACpE;AAAA,EAEJ;AACF;AAEA2hB,GAAO,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GChefgD,KAAe,oBAAI,IAAiB,CAAC,QAAQ,QAAQ,KAAK,CAAC;AAEjE,SAASC,GAAcvnB,GAAsD;AAC3E,SAAO,OAAOA,KAAU,YAAYsnB,GAAa,IAAItnB,CAAoB;AAC3E;AAEO,SAASwnB,GAAQ;AAAA,EACtB,SAAA/jB,IAAU;AAAA,EACV,MAAAgC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,OAAA+hB,IAAQ;AAAA,EACR,SAAAC,IAAU;AAAA,EACV,WAAAvlB;AAAA,EACA,GAAGE;AACL,GAAiB;AACf,QAAMiP,IAAe7L,MAAS8hB,GAAc9jB,CAAO,IAAIA,IAAU,SAC3DkkB,IAAeJ,GAAc9jB,CAAO,IAAI,UAAUA;AAExD,MAAI6N,MAAiB,QAAQ;AAC3B,UAAM5O,IAAM;AAAA,MACVC,GAAO;AAAA,MACPA,GAAOglB,CAAY;AAAA,MACnBF,IAAQ9kB,GAAO,YAAY;AAAA,MAC3B+kB,IAAU/kB,GAAO,UAAU;AAAA,MAC3BR;AAAA,IAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG;AAC1B,WACE,gBAAAc,EAAC,UAAM,GAAGZ,GAAO,WAAWK,GAAK,MAAK,UAAS,cAAW,WACxD,UAAA;AAAA,MAAA,gBAAArC,EAAC,QAAA,EAAK,WAAWsC,GAAO,IAAA,CAAK;AAAA,MAC7B,gBAAAtC,EAAC,QAAA,EAAK,WAAWsC,GAAO,IAAA,CAAK;AAAA,MAC7B,gBAAAtC,EAAC,QAAA,EAAK,WAAWsC,GAAO,IAAA,CAAK;AAAA,IAAA,GAC/B;AAAA,EAEJ;AAEA,MAAI2O,MAAiB,OAAO;AAC1B,UAAM5O,IAAM;AAAA,MACVC,GAAO;AAAA,MACPA,GAAOglB,CAAY;AAAA,MACnBF,IAAQ9kB,GAAO,WAAW;AAAA,MAC1B+kB,IAAU/kB,GAAO,UAAU;AAAA,MAC3BR;AAAA,IAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG;AAC1B,WACE,gBAAA9B,EAAC,QAAA,EAAM,GAAGgC,GAAO,WAAWK,GAAK,MAAK,UAAS,cAAW,WACxD,UAAA,gBAAArC,EAAC,QAAA,EAAK,WAAWsC,GAAO,SAAS,GACnC;AAAA,EAEJ;AAEA,QAAMD,IAAM;AAAA,IACVC,GAAO;AAAA,IACPA,GAAOglB,CAAY;AAAA,IACnBhlB,GAAO+C,CAAI;AAAA,IACX+hB,IAAQ9kB,GAAO,YAAY;AAAA,IAC3B+kB,IAAU/kB,GAAO,UAAU;AAAA,IAC3BR;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAA9B;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGgC;AAAA,MACJ,WAAWK;AAAA,MACX,MAAK;AAAA,MACL,cAAW;AAAA,IAAA;AAAA,EAAA;AAGjB;AAEA8kB,GAAQ,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1DtB,SAAS9F,GAAM1hB,GAAe4I,GAAaC,GAAa;AACtD,SAAO,KAAK,IAAI,KAAK,IAAI7I,GAAO4I,CAAG,GAAGC,CAAG;AAC3C;AAEA,MAAM+e,KAAY,oBAAI,IAAe,CAAC,QAAQ,OAAO,CAAC;AAEtD,SAASC,GAAY7nB,GAAkD;AACrE,SAAO,OAAOA,KAAU,YAAY4nB,GAAU,IAAI5nB,CAAkB;AACtE;AAEO,SAAS8nB,GAAM;AAAA,EACpB,OAAA3mB;AAAA,EACA,aAAA4mB,IAAc;AAAA,EACd,SAAAtkB,IAAU;AAAA,EACV,MAAAgC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,WAAAoV,IAAY;AAAA,EACZ,aAAAkN,IAAc;AAAA,EACd,cAAAC;AAAA,EACA,eAAAC;AAAA,EACA,WAAA/lB;AAAA,EACA,GAAGE;AACL,GAAe;AACb,QAAM8lB,IAAWhnB,EAAM,SAAS,IAAIugB,GAAMqG,GAAa,GAAG5mB,EAAM,MAAM,IAAI,GACpEmQ,IAAe7L,MAASoiB,GAAYpkB,CAAO,IAAIA,IAAU,SACzDkkB,IAAeE,GAAYpkB,CAAO,IAAI,UAAUA,GAChD2kB,IAAU9W,MAAiB,SAE3B5O,IAAM;AAAA,IACVC,GAAO;AAAA,IACPA,GAAOglB,CAAY;AAAA,IACnBS,IAAUzlB,GAAO,QAAQA,GAAO;AAAA,IAChCA,GAAO+C,CAAI;AAAA,IACXvD;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAA9B,EAAC,MAAA,EAAI,GAAGgC,GAAO,WAAWK,GACvB,UAAAvB,EAAM,IAAI,CAAC0B,GAAM0B,MAAU;;AAC1B,UAAMqF,IAAOrF,IAAQ,GACf8jB,IAAYze,IAAOue,GACnBjM,IAAStS,MAASue,GAClBG,IAAU1e,IAAOue,GACjBI,IAAczN,KAAa,CAACjY,EAAK,UACjC2lB,IAAStM,IAAS,YAAYmM,IAAY,aAAa,WACvDI,IAAa,CAACL,KAAWvlB,EAAK,QAAQmlB,GACtCnN,IACJ,gBAAA5X,EAAA4J,IAAA,EACG,UAAA;AAAA,MAAA4b,KACC,gBAAApoB,EAAC,UAAK,WAAWsC,GAAO,QACrB,UAAAE,EAAK,SAASmlB,IAAcpe,IAAO,MAAA,CACtC;AAAA,MAEF,gBAAA3G,EAAC,QAAA,EAAK,WAAWN,GAAO,MACtB,UAAA;AAAA,QAAA,gBAAAtC,EAAC,QAAA,EAAK,WAAWsC,GAAO,OAAQ,YAAK,OAAM;AAAA,QAC1CE,EAAK,eAAe,gBAAAxC,EAAC,QAAA,EAAK,WAAWsC,GAAO,aAAc,YAAK,YAAA,CAAY;AAAA,MAAA,EAAA,CAC9E;AAAA,IAAA,GACF;AAGF,WACE,gBAAAtC;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAW;AAAA,UACTsC,GAAO;AAAA,UACP0lB,IAAY1lB,GAAO,WAAW;AAAA,UAC9BuZ,IAASvZ,GAAO,UAAU;AAAA,UAC1B2lB,IAAU3lB,GAAO,UAAU;AAAA,UAC3BE,EAAK,WAAWF,GAAO,WAAW;AAAA,UAClCulB;AAAA,UACArlB,EAAK;AAAA,QAAA,EAEJ,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,QACX,eAAa2lB;AAAA,QACb,gBAActM,IAAS,SAAS;AAAA,QAE/B,UAAAqM,IACC,gBAAAloB;AAAA,UAAC;AAAA,UAAA;AAAA,YACE,GAAGwC,EAAK;AAAA,YACT,MAAK;AAAA,YACL,WAAW,CAACF,GAAO,aAAYO,IAAAL,EAAK,cAAL,gBAAAK,EAAgB,SAAS,EACrD,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,YACX,UAAUL,EAAK;AAAA,YACf,SAAS,CAACO,MAAU;;AAClB,eAAAD,KAAAD,IAAAL,EAAK,cAAL,gBAAAK,EAAgB,YAAhB,QAAAC,EAAA,KAAAD,GAA0BE,IACrBA,EAAM,oBAAkB6kB,KAAA,QAAAA,EAAere;AAAA,YAC9C;AAAA,YAEC,UAAAiR;AAAA,UAAA;AAAA,QAAA,IAGH,gBAAAxa,EAAC,QAAA,EAAK,WAAWsC,GAAO,YAAa,UAAAkY,EAAA,CAAQ;AAAA,MAAA;AAAA,MA/B1CjR;AAAA,IAAA;AAAA,EAmCX,CAAC,EAAA,CACH;AAEJ;AAEAke,GAAM,cAAc;;;;;;;;;;;;;;;GC/HdvkB,KAAQ,MACZ,gBAAAlD,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MAC1I,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,uBAAA,CAAsB,EAAA,CAChC;AAkCF,SAASG,GAAgBW,GAAkB;;AACzC,WAAO+B,IAAA/B,EAAM,KAAK,CAAC0B,MAAS,CAACA,EAAK,QAAQ,MAAnC,gBAAAK,EAAsC,YAASC,IAAAhC,EAAM,CAAC,MAAP,gBAAAgC,EAAU,UAAS;AAC3E;AAEO,SAASulB,GAAK;AAAA,EACnB,OAAAvnB;AAAA,EACA,SAAAsC,IAAU;AAAA,EACV,WAAA8T,IAAY;AAAA,EACZ,UAAA7V,IAAW;AAAA,EACX,UAAAinB,IAAW;AAAA,EACX,YAAAC,IAAa;AAAA,EACb,YAAAC;AAAA,EACA,cAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,aAAAnjB,IAAc;AAAA,EACd,qBAAAojB,IAAsB;AAAA,EACtB,OAAAhpB;AAAA,EACA,cAAAN;AAAA,EACA,eAAAwC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGE;AACL,GAAc;;AACZ,QAAMC,IAAKC,GAAA,GACL0mB,IAAUnf,GAAwC,EAAE,GACpD,CAACoN,GAAewO,CAAgB,IAAIlmB;AAAA,IACxCQ;AAAA,IACAN,KAAgBc,GAAgBW,CAAK;AAAA,IACrCe;AAAA,EAAA,GAGIyW,IAAexX,EAAM,KAAK,CAAC0B,MAASA,EAAK,UAAUqU,CAAa,GAChExU,IAAM;AAAA,IACVC,GAAO;AAAA,IACPA,GAAOc,CAAO;AAAA,IACdmC,IAAcjD,GAAO,cAAc;AAAA,IACnCqmB,IAAsBrmB,GAAO,sBAAsB;AAAA,IACnDR;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAEL+mB,IAAW,CAACC,GAAoBtkB,MAAsB;;AAC1D,QAAI1D,EAAM,WAAW;AAErB,eAASyI,IAAO,GAAGA,KAAQzI,EAAM,QAAQyI,KAAQ,GAAG;AAClD,cAAMwf,KAAaD,IAAavf,IAAO/E,IAAY1D,EAAM,UAAUA,EAAM;AACzE,YAAI,GAAC+B,IAAA/B,EAAMioB,CAAS,MAAf,QAAAlmB,EAAkB,aAAY,CAACxB,GAAU;AAC5C,WAAAyB,IAAA8lB,EAAQ,QAAQG,CAAS,MAAzB,QAAAjmB,EAA4B,SAC5BuiB,EAAiBvkB,EAAMioB,CAAS,EAAE,KAAK;AACvC;AAAA,QACF;AAAA,MACF;AAAA,EACF,GAEMpe,IAAgB,CAAC5H,GAAyCmB,MAAkB;;AAChF,QAAInB,EAAM,QAAQ,cAAc;AAC9B,MAAAA,EAAM,eAAA,GACN8lB,EAAS3kB,GAAO,CAAC;AACjB;AAAA,IACF;AAEA,QAAInB,EAAM,QAAQ,aAAa;AAC7B,MAAAA,EAAM,eAAA,GACN8lB,EAAS3kB,GAAO,EAAE;AAClB;AAAA,IACF;AAEA,QAAInB,EAAM,QAAQ,QAAQ;AACxB,MAAAA,EAAM,eAAA;AACN,YAAMimB,IAAa3nB,IAAW,KAAKP,EAAM,UAAU,CAAC0B,MAAS,CAACA,EAAK,QAAQ;AAC3E,MAAIwmB,KAAc,OAChBnmB,IAAA+lB,EAAQ,QAAQI,CAAU,MAA1B,QAAAnmB,EAA6B,SAC7BwiB,EAAiBvkB,EAAMkoB,CAAU,EAAE,KAAK;AAE1C;AAAA,IACF;AAEA,QAAIjmB,EAAM,QAAQ,OAAO;AACvB,MAAAA,EAAM,eAAA;AACN,YAAMkmB,IAAY5nB,IAAW,KAAKP,EAAM,IAAI,CAAC0B,MAAS,CAACA,EAAK,QAAQ,EAAE,YAAY,EAAI;AACtF,MAAIymB,KAAa,OACfnmB,IAAA8lB,EAAQ,QAAQK,CAAS,MAAzB,QAAAnmB,EAA4B,SAC5BuiB,EAAiBvkB,EAAMmoB,CAAS,EAAE,KAAK;AAAA,IAE3C;AAAA,EACF;AAEA,SACE,gBAAArmB,EAAC,OAAA,EAAK,GAAGZ,GAAO,WAAWK,GACzB,UAAA;AAAA,IAAA,gBAAArC,EAAC,OAAA,EAAI,WAAWsC,GAAO,MAAM,MAAK,WAAU,cAAY4U,GACrD,UAAApW,EAAM,IAAI,CAAC0B,GAAM0B,MAAU;;AAC1B,YAAMiI,IAAW3J,EAAK,UAAUqU,GAC1BxS,IAAahD,KAAYmB,EAAK,UAC9B0mB,IAAa,CAAC7kB,MAAe7B,EAAK,YAAY8lB,IAC9Ca,IAAQ,GAAGlnB,CAAE,IAAIO,EAAK,KAAK,QAC3B4mB,IAAU,GAAGnnB,CAAE,IAAIO,EAAK,KAAK;AAEnC,aACE,gBAAAI;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,MAAK;AAAA,UACL,WAAW;AAAA,YACTN,GAAO;AAAA,YACP4mB,IAAa5mB,GAAO,WAAW;AAAA,YAC/B+B,IAAa/B,GAAO,WAAW;AAAA,YAC/BomB;AAAA,YACAlmB,EAAK;AAAA,UAAA,EAEJ,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,UACX,iBAAe2J,IAAW,SAAS;AAAA,UAEnC,UAAA;AAAA,YAAA,gBAAAnM;AAAA,cAAC;AAAA,cAAA;AAAA,gBACE,GAAGwC,EAAK;AAAA,gBACT,KAAK,CAAC6mB,MAAS;AACb,kBAAAT,EAAQ,QAAQ1kB,CAAK,IAAImlB;AAAA,gBAC3B;AAAA,gBACA,MAAK;AAAA,gBACL,MAAK;AAAA,gBACL,IAAIF;AAAA,gBACJ,iBAAehd;AAAA,gBACf,iBAAeid;AAAA,gBACf,UAAUjd,IAAW,IAAI;AAAA,gBACzB,UAAU9H;AAAA,gBACV,WAAW,CAAC/B,GAAO,KAAKmmB,IAAc5lB,IAAAL,EAAK,aAAL,gBAAAK,EAAe,SAAS,EAC3D,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,gBACX,SAAS,CAACE,MAAU;;AAClB,mBAAAD,KAAAD,IAAAL,EAAK,aAAL,gBAAAK,EAAe,YAAf,QAAAC,EAAA,KAAAD,GAAyBE,IACpBA,EAAM,oBAAkBsiB,EAAiB7iB,EAAK,KAAK;AAAA,gBAC1D;AAAA,gBACA,WAAW,CAACO,MAAU;;AACpB,mBAAAD,KAAAD,IAAAL,EAAK,aAAL,gBAAAK,EAAe,cAAf,QAAAC,EAAA,KAAAD,GAA2BE,IACtBA,EAAM,oBAAkB4H,EAAc5H,GAAOmB,CAAK;AAAA,gBACzD;AAAA,gBAEC,UAAA1B,EAAK;AAAA,cAAA;AAAA,YAAA;AAAA,YAGP0mB,KACC,gBAAAlpB;AAAA,cAAC;AAAA,cAAA;AAAA,gBACE,GAAGwC,EAAK;AAAA,gBACT,MAAK;AAAA,gBACL,WAAW,CAACF,GAAO,WAAUQ,IAAAN,EAAK,qBAAL,gBAAAM,EAAuB,SAAS,EAC1D,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,gBACX,cAAYN,EAAK,cAAc+lB;AAAA,gBAC/B,UAAUlkB;AAAA,gBACV,SAAS,CAACtB,MAAU;;AAElB,mBADAD,KAAAD,IAAAL,EAAK,qBAAL,gBAAAK,EAAuB,YAAvB,QAAAC,EAAA,KAAAD,GAAiCE,IAC7B,CAAAA,EAAM,sBACVC,IAAAR,EAAK,YAAL,QAAAQ,EAAA,KAAAR,GAAeA,EAAK,QACpBgmB,KAAA,QAAAA,EAAahmB,EAAK;AAAA,gBACpB;AAAA,gBAEC,YAAAQ,KAAAR,EAAK,qBAAL,gBAAAQ,GAAuB,aAAY,gBAAAhD,EAACkD,IAAA,CAAA,CAAM;AAAA,cAAA;AAAA,YAAA;AAAA,UAC7C;AAAA,QAAA;AAAA,QAzDGV,EAAK;AAAA,MAAA;AAAA,IA6DhB,CAAC,EAAA,CACH;AAAA,KAEC8V,KAAA,gBAAAA,EAAc,aAAY,UACzB,gBAAAtY;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAGsY,EAAa;AAAA,QACjB,WAAW,CAAChW,GAAO,QAAOO,IAAAyV,EAAa,eAAb,gBAAAzV,EAAyB,SAAS,EACzD,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,QACX,MAAK;AAAA,QACL,IAAI,GAAGZ,CAAE,IAAIqW,EAAa,KAAK;AAAA,QAC/B,mBAAiB,GAAGrW,CAAE,IAAIqW,EAAa,KAAK;AAAA,QAE3C,UAAAA,EAAa;AAAA,MAAA;AAAA,IAAA;AAAA,EAChB,GAEJ;AAEJ;AAEA+P,GAAK,cAAc;;;;;;;;;;;;;GC5MbnlB,KAAQ,MACZ,gBAAAlD,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MAC1I,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,uBAAA,CAAsB,EAAA,CAChC,GAGIspB,KAAmB,GACnBC,KAAmB,GAEnBvF,KACJ,OAAO,SAAW,MAAcxZ,KAAY8U,IAExCkK,KAAoB,CAACC,GAA0BC,MAC/CD,MAAS,UAAa,OAAO,MAAMA,CAAI,IAAUC,IAC9C,KAAK,IAAI,GAAG,KAAK,MAAMD,CAAI,CAAC,GAG/BE,KAAkB,CACtBnkB,GACA6jB,MACG;AACH,MAAI,OAAO7jB,KAAQ,YAAY;AAC7B,IAAAA,EAAI6jB,CAAI;AACR;AAAA,EACF;AAEA,EAAI7jB,MACDA,EAAqD,UAAU6jB;AAEpE,GAyBaO,KAAWzkB;AAAA,EACtB,CACE;AAAA,IACE,OAAA1B;AAAA,IACA,UAAAmF;AAAA,IACA,WAAAihB;AAAA,IACA,WAAAhhB,IAAY;AAAA,IACZ,SAAAihB,IAAUR;AAAA,IACV,SAAAS,IAAUR;AAAA,IACV,eAAAS,IAAgB;AAAA,IAChB,QAAAC,IAAS;AAAA,IACT,WAAAhhB,IAAY;AAAA,IACZ,kBAAAC;AAAA,IACA,UAAA7H;AAAA,IACA,OAAA1B;AAAA,IACA,cAAAN,IAAe;AAAA,IACf,UAAAC;AAAA,IACA,eAAAuC;AAAA,IACA,YAAAsH;AAAA,IACA,cAAAC;AAAA,IACA,eAAA8gB;AAAA,IACA,WAAApoB;AAAA,IACA,OAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELwD,MACG;AACH,UAAM2kB,IAAW1gB,GAA8B,IAAI,GAC7CC,IAAaD,GAA8B,IAAI,GAC/C2gB,IAAc3gB,GAAmC,IAAI,GACrD,CAACnJ,GAAcwJ,CAAe,IAAI3K;AAAA,MACtCQ;AAAA,MACAN;AAAA,MACA,CAACmV,MAAS3S,KAAA,gBAAAA,EAAgB2S;AAAA,IAAI,GAE1B6V,IAAkBb,GAAkBM,GAASR,EAAgB,GAC7DgB,IAAkBN,IACpB,SACA,KAAK,IAAIK,GAAiBb,GAAkBO,GAASR,EAAgB,CAAC,GAEpEgB,IAAiB1qB;AAAA,MACrB,CAACwpB,MAAqC;AACpC,QAAAe,EAAY,UAAUf,GACtBM,GAAgBnkB,GAAK6jB,CAAI;AAAA,MAC3B;AAAA,MACA,CAAC7jB,CAAG;AAAA,IAAA,GAGAglB,IAAqB3qB,GAAY,MAAM;AAC3C,YAAMwpB,IAAOe,EAAY;AAEzB,UAAI,CAACf,KAAQ,OAAO,SAAW,IAAa;AAE5C,YAAMoB,IAAgB,OAAO,iBAAiBpB,CAAI,GAC5CqB,IAAW,OAAO,WAAWD,EAAc,QAAQ,KAAK,IACxDE,IAAa,OAAO,WAAWF,EAAc,UAAU,KAAKC,IAAW,MACvEE,KAAa,OAAO,WAAWH,EAAc,UAAU,KAAK,GAC5DI,KAAgB,OAAO,WAAWJ,EAAc,aAAa,KAAK,GAClEK,IAAY,OAAO,WAAWL,EAAc,cAAc,KAAK,GAC/DM,KAAe,OAAO,WAAWN,EAAc,iBAAiB,KAAK,GACrEO,KAAiBJ,KAAaC,KAAgBC,IAAYC,IAC1DE,KAAYN,IAAaN,IAAkBW,IAC3CE,KAAYZ,IACdK,IAAaL,IAAkBU,KAC/B;AAEJ,MAAA3B,EAAK,MAAM,SAAS,QACpBA,EAAK,MAAM,YAAY,GAAG4B,EAAS,MACnC5B,EAAK,MAAM,YAAY6B,KAAY,GAAGA,EAAS,OAAO;AAEtD,YAAMC,KAAa,KAAK;AAAA,QACtBF;AAAA,QACA,KAAK,IAAI5B,EAAK,cAAc6B,MAAa,OAAO,iBAAiB;AAAA,MAAA;AAGnE,MAAA7B,EAAK,MAAM,SAAS,GAAG8B,EAAU,MACjC9B,EAAK,MAAM,YAAY6B,MAAa7B,EAAK,eAAe6B,KAAY,SAAS;AAAA,IAC/E,GAAG,CAACZ,GAAiBD,CAAe,CAAC;AAErC,IAAArG,GAAoB,MAAM;AACxB,MAAAwG,EAAA;AAAA,IACF,GAAG,CAAClqB,GAAckqB,CAAkB,CAAC,GAErCxG,GAAoB,MAAM;AACxB,YAAMoH,IAAYjB,EAAS,SACrBkB,IAAc3hB,EAAW,SACzB4hB,IAAelB,EAAY,SAC3BmB,IAAyBtB,MAAW,gBAAgBA,MAAW;AAErE,UAAI,CAACoB,KAAe,CAACC,EAAc;AAEnC,UAAI,CAACC,GAAwB;AAC3B,QAAIH,MAAWA,EAAU,MAAM,QAAQ,KACvCC,EAAY,MAAM,QAAQ;AAC1B;AAAA,MACF;AAEA,YAAMG,KAAmB,MAAM;AAC7B,cAAMC,IAAgBH,EAAa;AAEnC,QAAIG,IAAgB,KAAK,KAAK,IAAIA,IAAgBJ,EAAY,WAAW,IAAI,MAC3EA,EAAY,MAAM,QAAQ,GAAGI,CAAa,OAGxCL,KAAaK,IAAgB,KAAK,KAAK,IAAIA,IAAgBL,EAAU,WAAW,IAAI,MACtFA,EAAU,MAAM,QAAQ,GAAGK,CAAa;AAAA,MAE5C;AAEA,UAAI,OAAO,iBAAmB,KAAa;AACzC,QAAAD,GAAA;AACA;AAAA,MACF;AAEA,YAAME,KAAiB,IAAI,eAAeF,EAAgB;AAC1D,aAAAE,GAAe,QAAQJ,CAAY,GAE5B,MAAM;AACX,QAAAI,GAAe,WAAA;AAAA,MACjB;AAAA,IACF,GAAG,CAACzB,CAAM,CAAC;AAEX,UAAMrf,IAAe,CAAC+H,MAAwC;;AAC5D,MAAA7I,EAAgB6I,EAAE,OAAO,KAAK,GAC9BrT,KAAA,QAAAA,EAAWqT,KACX9P,IAAAqnB,KAAA,gBAAAA,EAAe,aAAf,QAAArnB,EAAA,KAAAqnB,GAA0BvX;AAAA,IAC5B,GAEM9H,IAAc,MAAM;AACxB,MAAAf,EAAgB,EAAE;AAAA,IACpB,GAEM6hB,IAAS9B,MAAc,UAAavpB,EAAa,SAASupB,GAE1D+B,KAAgB;AAAA,MACpBtpB,GAAO;AAAA,MACP;AAAA,MACAuG,IAAYvG,GAAO,WAAW;AAAA,MAC9B2G,IAAY3G,GAAO,UAAU;AAAA,MAC7BR;AAAA,MACAooB,KAAA,gBAAAA,EAAe;AAAA,IAAA,EAEd,OAAO,OAAO,EACd,KAAK,GAAG,GAEL5d,IAAe,CAAChK,GAAO,SAAS8G,KAAA,gBAAAA,EAAc,SAAS,EAC1D,OAAO,OAAO,EACd,KAAK,GAAG,GACL+F,IAAa,CAAC7M,GAAO,OAAO6G,KAAA,gBAAAA,EAAY,SAAS,EACpD,OAAO,OAAO,EACd,KAAK,GAAG,GACL0iB,IAAgB7c;AAAA,MACpB,OAAO;AAAA,QACL,GAAGjN;AAAA,QACH,GAAGmoB,KAAA,gBAAAA,EAAe;AAAA,QAClB,QAAAD;AAAA,MAAA;AAAA,MAEF,CAACA,GAAQloB,GAAOmoB,KAAA,gBAAAA,EAAe,KAAK;AAAA,IAAA,GAEhC7lB,IAAahD,MAAY6oB,KAAA,gBAAAA,EAAe,WAExC5a,uBACH,OAAA,EAAK,GAAGlG,GAAc,KAAKM,GAAY,WAAW4C,GACjD,UAAA;AAAA,MAAA,gBAAAtM;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAGgC;AAAA,UACH,GAAGkoB;AAAA,UACJ,KAAKK;AAAA,UACL,UAAUlmB;AAAA,UACV,WAAAwlB;AAAA,UACA,MAAMQ;AAAA,UACN,OAAO/pB;AAAA,UACP,UAAUsK;AAAA,UACV,WAAWghB;AAAA,UACX,OAAOC;AAAA,QAAA;AAAA,MAAA;AAAA,MAERhjB,KACC,gBAAA7I;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAWsC,GAAO;AAAA,UAClB,UAAU+B,KAAc/D,EAAa,WAAW;AAAA,UAChD,cAAW;AAAA,UACX,SAASuK;AAAA,UACR,GAAG3B;AAAA,UAEH,WAAAA,KAAA,gBAAAA,EAAkB,aAAY,gBAAAlJ,EAACkD,IAAA,CAAA,CAAM;AAAA,QAAA;AAAA,MAAA;AAAA,IACxC,GAEJ;AAGF,WAAI,CAACO,KAAS,CAACmF,KAAYihB,MAAc,SAAkBva,uBAGxD,OAAA,EAAK,GAAGnG,GAAY,KAAKghB,GAAU,WAAWhb,GAC5C,UAAA;AAAA,MAAA1L,KAAS,gBAAAzD,EAAC,SAAA,EAAM,WAAWsC,GAAO,OAAQ,UAAAmB,GAAM;AAAA,MAChD6L;AAAA,OACC1G,KAAYihB,MAAc,6BACzB,OAAA,EAAI,WAAWvnB,GAAO,QACpB,UAAA;AAAA,QAAAsG,KAAY,gBAAA5I,EAAC,QAAA,EAAK,WAAWsC,GAAO,UAAW,UAAAsG,GAAS;AAAA,QACxDihB,MAAc,UACb,gBAAAjnB,EAAC,UAAK,WAAW,CAACN,GAAO,WAAWqpB,IAASrpB,GAAO,gBAAgB,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAC/F,UAAA;AAAA,UAAAhC,EAAa;AAAA,UAAO;AAAA,UAAIupB;AAAA,QAAA,EAAA,CAC3B;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA,GAEJ;AAAA,EAEJ;AACF;AAEAD,GAAS,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;GClRjBjP,KAAY,MAChB,gBAAA3a,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MACxI,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,kBAAA,CAAiB,EAAA,CAC3B,GAGIkD,KAAQ,CAAC,EAAE,MAAAmC,IAAO,GAAA,MACtB,gBAAArF,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAOqF,GAAM,QAAQA,GAC7I,UAAA,gBAAArF,EAAC,QAAA,EAAK,GAAE,uBAAA,CAAsB,EAAA,CAChC,GAGI8rB,KAAY,MAChB,gBAAAlpB,EAAC,SAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MAC1I,UAAA;AAAA,EAAA,gBAAA5C,EAAC,QAAA,EAAK,GAAE,2FAAA,CAA0F;AAAA,EAClG,gBAAAA,EAAC,UAAK,IAAG,MAAK,IAAG,KAAI,IAAG,MAAK,IAAG,KAAA,CAAI;AAAA,EACpC,gBAAAA,EAAC,UAAK,IAAG,MAAK,IAAG,MAAK,IAAG,SAAQ,IAAG,KAAA,CAAI;AAAA,GAC1C,GAGI+rB,KAAW,MACf,gBAAAnpB,EAAC,SAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,OAAM,MAAK,QAAO,MAC1I,UAAA;AAAA,EAAA,gBAAA5C,EAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,MAAI;AAAA,EAC9B,gBAAAA,EAAC,UAAK,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAA,CAAI;AAAA,EACrC,gBAAAA,EAAC,UAAK,IAAG,MAAK,IAAG,KAAI,IAAG,SAAQ,IAAG,IAAA,CAAG;AAAA,GACxC,GAGIgsB,KAA8C;AAAA,EAClD,sBAAKrR,IAAA,EAAU;AAAA,EACf,OAAO,gBAAA3a,EAACkD,IAAA,EAAM,MAAM,GAAA,CAAI;AAAA,EACxB,2BAAU4oB,IAAA,EAAU;AAAA,EACpB,wBAAOC,IAAA,EAAS;AAAA,EAChB,SAAS,gBAAA/rB,EAACmnB,IAAA,EAAQ,MAAK,MAAK,OAAK,IAAC;AAAA,EAClC,SAAS;AACX,GAEM8E,KAAuB,CAAC5C,MACFA,KAAS,QAAQ,OAAOA,KAAS,YAAkB,KACzE,OAAOA,KAAS,WAAiBA,EAAK,KAAA,EAAO,SAAS,IACtD,MAAM,QAAQA,CAAI,IAAUA,EAAK,KAAK4C,EAAoB,IACvD;AA+BF,SAASC,GAAM;AAAA,EACpB,SAAA9oB,IAAU;AAAA,EACV,OAAA8C;AAAA,EACA,SAAAimB;AAAA,EACA,SAAA1P,IAAU;AAAA,EACV,QAAAlB,IAAS;AAAA,EACT,WAAA3X;AAAA,EACA,WAAA9B;AAAA,EACA,GAAGE;AACL,GAAe;AACb,QAAMmiB,IAAY/gB,MAAY,WACxBgpB,IAAaH,GAAqBE,CAAO,GACzC9pB,IAAM;AAAA,IACVC,GAAO;AAAA,IACN8pB,IAAgC,OAAnB9pB,GAAO;AAAA,IACrBiZ,IAASjZ,GAAO,SAAS;AAAA,IACzBA,GAAOc,CAAO;AAAA,IACdtB;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAELuqB,sBACH,OAAA,EAAK,GAAGrqB,GAAO,WAAWK,GAAK,MAAK,SAClC,UAAA;AAAA,IAAA2pB,GAAW5oB,CAAO,IAAI,gBAAApD,EAAC,QAAA,EAAK,WAAWsC,GAAO,MAAO,UAAA0pB,GAAW5oB,CAAO,EAAA,CAAE,IAAU;AAAA,IACpF,gBAAAR,EAAC,OAAA,EAAI,WAAWN,GAAO,MACrB,UAAA;AAAA,MAAA,gBAAAtC,EAAC,OAAA,EAAI,WAAWsC,GAAO,OAAQ,UAAA4D,GAAM;AAAA,MACpCkmB,IAAa,gBAAApsB,EAAC,OAAA,EAAI,WAAWsC,GAAO,SAAU,aAAQ,IAAS;AAAA,IAAA,GAClE;AAAA,IACCsB,KAAa,CAACugB,KACb,gBAAAnkB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,WAAWsC,GAAO;AAAA,QAClB,cAAW;AAAA,QACX,SAASsB;AAAA,QAET,4BAACV,IAAA,CAAA,CAAM;AAAA,MAAA;AAAA,IAAA;AAAA,EACT,GAEJ;AAGF,SAAI,CAACuZ,KAAW,CAAC0H,IAAkBkI,IAGjC,gBAAAzpB,EAAA4J,IAAA,EACE,UAAA;AAAA,IAAA,gBAAAxM,EAAC,OAAA,EAAI,WAAWsC,GAAO,SAAS,eAAY,QAAO;AAAA,IAClD+pB;AAAA,EAAA,GACH;AAEJ;AAEAH,GAAM,cAAc;AAWpB,MAAMI,KAAeC,GAAwC,IAAI;AAS1D,SAASC,GAAc,EAAE,YAAAC,IAAa,GAAG,UAAAlT,IAAW,gBAAgB,QAAA9N,IAAS,IAAI,UAAA5H,KAAgC;AACtH,QAAM,CAAC/C,GAAO4rB,CAAQ,IAAIjtB,GAAsB,CAAA,CAAE,GAE5CktB,IAAU9sB,GAAY,CAACoC,MAAe;AAC1C,IAAAyqB,EAAS,CAACE,MAASA,EAAK,OAAO,CAACC,MAAMA,EAAE,OAAO5qB,CAAE,CAAC;AAAA,EACpD,GAAG,CAAA,CAAE,GAECoqB,IAAQxsB;AAAA,IACZ,CAACoM,MAAmC;AAClC,YAAMhK,IAAK,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,MAAM,CAAC,GACvC6qB,IAAW7gB,EAAQ,aAAaA,EAAQ,YAAY,YAAY,IAAI,MACpE8gB,IAAeN,MAAe,UAAa,CAAC,OAAO,SAASA,CAAU,IAAI,SAAY,KAAK,IAAI,GAAG,KAAK,MAAMA,CAAU,CAAC;AAE9H,aAAAC,EAAS,CAACE,MAAS;AACjB,cAAMpY,IAAO,CAAC,GAAGoY,GAAM,EAAE,GAAG3gB,GAAS,IAAAhK,GAAI;AACzC,eAAI8qB,MAAiB,SAAkBvY,IACnCuY,MAAiB,IAAU,CAAA,IACxBvY,EAAK,MAAM,CAACuY,CAAY;AAAA,MACjC,CAAC,GAEGD,IAAW,KACb,WAAW,MAAMH,EAAQ1qB,CAAE,GAAG6qB,CAAQ,GAGjC7qB;AAAA,IACT;AAAA,IACA,CAAC0qB,GAASF,CAAU;AAAA,EAAA,GAGhBO,IAAalsB,EAAM,KAAK,CAAC0B,MAASA,EAAK,YAAY,aAAaA,EAAK,OAAO;AAElF,SACE,gBAAAI,EAAC0pB,GAAa,UAAb,EAAsB,OAAO,EAAE,OAAAD,GAAO,SAAAM,KACpC,UAAA;AAAA,IAAA9oB;AAAA,IACA,OAAO,WAAa,OACnBmjB;AAAA,MACE,gBAAApkB,EAAA4J,IAAA,EACG,UAAA;AAAA,QAAAwgB,uBAAe,OAAA,EAAI,WAAW1qB,GAAO,SAAS,eAAY,QAAO;AAAA,QAClE,gBAAAtC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW,CAACsC,GAAO,OAAOA,GAAO,SAASiX,CAAQ,EAAE,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,YAC/E,OAAO,EAAE,kBAAkB,GAAG9N,CAAM,KAAA;AAAA,YAEnC,UAAA3K,EAAM,IAAI,CAAC0B,MACV,gBAAAxC;AAAA,cAACksB;AAAA,cAAA;AAAA,gBAEC,SAAS1pB,EAAK;AAAA,gBACd,OAAOA,EAAK;AAAA,gBACZ,SAASA,EAAK;AAAA,gBACd,QAAQA,EAAK;AAAA,gBACb,WAAW,MAAMmqB,EAAQnqB,EAAK,EAAE;AAAA,cAAA;AAAA,cAL3BA,EAAK;AAAA,YAAA,CAOb;AAAA,UAAA;AAAA,QAAA;AAAA,MACH,GACF;AAAA,MACA,SAAS;AAAA,IAAA;AAAA,EACX,GACJ;AAEJ;AAEO,SAASyqB,KAAW;AACzB,QAAMC,IAAMC,GAAWb,EAAY;AACnC,MAAI,CAACY;AACH,UAAM,IAAI,MAAM,8CAA8C;AAEhE,SAAOA;AACT;;;;;;;;;;;GCxNME,KAAwB,KACxBC,KAAc,GACdC,KAA2B,GAc3BC,KAAiD;AAAA,EACrD,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AACT;AAEO,SAASC,GAAQ;AAAA,EACtB,SAAAhT;AAAA,EACA,MAAAkE,IAAO;AAAA,EACP,OAAA+O,IAAQL;AAAA,EACR,SAAAM,IAAU;AAAA,EACV,QAAAC,IAAS;AAAA,EACT,iBAAAC,IAAkBN;AAAA,EAClB,UAAAzpB;AAAA,EACA,cAAAuF;AAAA,EACA,UAAA/H,IAAW;AACb,GAAiB;AACf,QAAM,CAAC0R,GAAS8a,CAAU,IAAIpuB,GAAS,EAAK,GACtC,CAACsf,GAAcC,CAAe,IAAIvf,GAAsBif,CAAI,GAC5D,CAACoP,GAAcC,CAAe,IAAItuB,GAAA,GAClCuuB,IAAoBvkB,GAAO,EAAE,GAAG,GAAG,GAAG,GAAG,GACzCC,IAAaD,GAAwB,IAAI,GACzCwkB,IAAaxkB,GAAwB,IAAI,GACzCykB,IAAezkB,GAAsB,IAAI,GAEzC0kB,IAAiB,MAAM;AAC3B,IAAID,EAAa,YAAY,SAC3B,OAAO,aAAaA,EAAa,OAAO,GACxCA,EAAa,UAAU;AAAA,EAE3B;AAwGA,MAtGA1jB,GAAU,MACD2jB,GACN,CAAA,CAAE,GAEL3jB,GAAU,MAAM;AACd,IAAKuI,MACHiM,EAAgBN,CAAI,GACpBqP,EAAgB,MAAS;AAAA,EAE7B,GAAG,CAACrP,GAAM3L,CAAO,CAAC,GAElBuM,GAAgB,MAAM;AACpB,QAAIvM,KAAW4a,GAAQ;AACrB,YAAMS,IAAUH,EAAW;AAC3B,UAAI,CAACG,EAAS;AAEd,YAAMC,KAAeD,EAAQ,aACvBE,KAAgBF,EAAQ,cACxBvO,IAAgB,OAAO,YACvBC,KAAiB,OAAO,aACxBY,KAAgBsN,EAAkB,QAAQ,IAAIX,IAC9CkB,KAAeP,EAAkB,QAAQ,IAAIX,IAC7CmB,KAAU3O,IAAgBwO,KAAeT,GACzCa,KAAS3O,KAAiBwO,KAAgBV,GAC1CnN,KAAO,KAAK,IAAImN,GAAiB,KAAK,IAAIlN,IAAe8N,EAAO,CAAC,GACjEE,KAAM,KAAK,IAAId,GAAiB,KAAK,IAAIW,IAAcE,EAAM,CAAC;AAEpE,MAAAV,EAAgB;AAAA,QACd,sBAAsB,GAAGtN,EAAI;AAAA,QAC7B,sBAAsB,GAAGiO,EAAG;AAAA,MAAA,CACZ;AAClB;AAAA,IACF;AAEA,QAAI,CAAC3b,KAAW,CAAC2a,GAAS;AACxB,MAAA1O,EAAgBN,CAAI,GACpBqP,EAAgB,MAAS;AACzB;AAAA,IACF;AAEA,UAAMvO,IAAU9V,EAAW,SACrB0kB,IAAUH,EAAW;AAC3B,QAAI,CAACzO,KAAW,CAAC4O,EAAS;AAE1B,UAAM1O,IAAcF,EAAQ,sBAAA,GACtB6O,IAAeD,EAAQ,aACvBE,IAAgBF,EAAQ,cACxBvO,KAAgB,OAAO,YACvBC,IAAiB,OAAO,aAExBK,IAAY;AAAA,MAChB,KAAKT,EAAY,MAAMkO;AAAA,MACvB,QAAQ9N,IAAiBJ,EAAY,SAASkO;AAAA,MAC9C,MAAMlO,EAAY,OAAOkO;AAAA,MACzB,OAAO/N,KAAgBH,EAAY,QAAQkO;AAAA,IAAA,GAGvCe,IAAW;AAAA,MACf,KAAKL,IAAgBjB;AAAA,MACrB,QAAQiB,IAAgBjB;AAAA,MACxB,MAAMgB,IAAehB;AAAA,MACrB,OAAOgB,IAAehB;AAAA,IAAA,GAGlBuB,IAAO,CAACC,MAA0B1O,EAAU0O,CAAQ,KAAKF,EAASE,CAAQ,GAC1EC,KAAevB,GAAa7O,CAAI;AACtC,QAAImQ,IAAWnQ;AAEf,IAAKkQ,EAAKlQ,CAAI,MACZmQ,IAAWD,EAAKE,EAAY,KAExB3O,EAAU2O,EAAY,IAAI3O,EAAUzB,CAAI,IADxCoQ,KAGEpQ;AAGR,QAAIsC,IAAS,GACT+N,IAAS;AAEb,QAAIF,MAAa,SAASA,MAAa,UAAU;AAC/C,YAAMG,IAAetP,EAAY,OAAOA,EAAY,QAAQ,IAAI2O,IAAe,GACzEvN,KAAe8M,IAAkBoB,GACjCjO,KAAgBiO,IAAeX,KAAgBxO,KAAgB+N;AAErE,MAAI9M,KAAe,MAAGE,IAASF,KAC3BC,KAAgB,MAAGC,IAAS,CAACD;AAAA,IACnC,OAAO;AACL,YAAMkO,IAAcvP,EAAY,MAAMA,EAAY,SAAS,IAAI4O,IAAgB,GACzEY,KAActB,IAAkBqB,GAChCE,KAAiBF,IAAcX,KAAiBxO,IAAiB8N;AAEvE,MAAIsB,KAAc,MAAGH,IAASG,KAC1BC,KAAiB,MAAGJ,IAAS,CAACI;AAAA,IACpC;AAEA,IAAAnQ,EAAgB6P,CAAQ,GACxBd,EAAgB;AAAA,MACd,qBAAqB,GAAG/M,CAAM;AAAA,MAC9B,qBAAqB,GAAG+N,CAAM;AAAA,IAAA,CACd;AAAA,EACpB,GAAG,CAACpB,GAAQD,GAAShP,GAAMkP,GAAiB7a,GAASyH,CAAO,CAAC,GAEzDnZ,EAAU,QAAO,gBAAArB,EAAAwM,IAAA,EAAG,UAAA3I,EAAA,CAAS;AAEjC,QAAMurB,IAAc,MAAM;AAGxB,QAFAjB,EAAA,GAEIV,KAAS,GAAG;AACd,MAAAI,EAAW,EAAI;AACf;AAAA,IACF;AAEA,IAAAK,EAAa,UAAU,OAAO,WAAW,MAAM;AAC7C,MAAAL,EAAW,EAAI,GACfK,EAAa,UAAU;AAAA,IACzB,GAAGT,CAAK;AAAA,EACV,GAEM4B,IAAc,MAAM;AACxB,IAAAlB,EAAA,GACAN,EAAW,EAAK;AAAA,EAClB,GAEMyB,IAAmB,CAACvsB,MAAuC;;AAC/D,KAAAF,IAAAuG,KAAA,gBAAAA,EAAc,iBAAd,QAAAvG,EAAA,KAAAuG,GAA6BrG,IAC7BirB,EAAkB,UAAU,EAAE,GAAGjrB,EAAM,SAAS,GAAGA,EAAM,QAAA,GACzDqsB,EAAA;AAAA,EACF,GAEMG,IAAkB,CAACxsB,MAAuC;;AAE9D,KADAF,IAAAuG,KAAA,gBAAAA,EAAc,gBAAd,QAAAvG,EAAA,KAAAuG,GAA4BrG,IACvB4qB,MAELK,EAAkB,UAAU,EAAE,GAAGjrB,EAAM,SAAS,GAAGA,EAAM,QAAA,GACzD8qB,EAAW,EAAK,GAChBuB,EAAA;AAAA,EACF,GAEMI,IAAmB,CAACzsB,MAAuC;;AAC/D,KAAAF,IAAAuG,KAAA,gBAAAA,EAAc,iBAAd,QAAAvG,EAAA,KAAAuG,GAA6BrG,IAC7BssB,EAAA;AAAA,EACF,GAEM3c,IAAc,CAAC3P,MAAuC;;AAC1D,KAAAF,IAAAuG,KAAA,gBAAAA,EAAc,YAAd,QAAAvG,EAAA,KAAAuG,GAAwBrG;AACxB,UAAM2S,IAAO3S,EAAM,cAAc,sBAAA;AACjC,IAAAirB,EAAkB,UAAU,EAAE,GAAGtY,EAAK,OAAO,GAAGA,EAAK,OAAA,GACrD0Z,EAAA;AAAA,EACF,GAEMK,IAAa,CAAC1sB,MAAuC;;AACzD,KAAAF,IAAAuG,KAAA,gBAAAA,EAAc,WAAd,QAAAvG,EAAA,KAAAuG,GAAuBrG,IACvBssB,EAAA;AAAA,EACF,GAEMK,IAAe,CAACptB,GAAO,SAASqrB,IAASrrB,GAAO,SAASA,GAAOyc,CAAY,CAAC,EAChF,OAAO,OAAO,EACd,KAAK,GAAG,GAELzS,IAAe,CAAChK,GAAO,SAAS8G,KAAA,gBAAAA,EAAc,SAAS,EAC1D,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAxG;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGwG;AAAA,MACJ,KAAKM;AAAA,MACL,WAAW4C;AAAA,MACX,cAAcgjB;AAAA,MACd,aAAaC;AAAA,MACb,cAAcC;AAAA,MACd,SAAS9c;AAAA,MACT,QAAQ+c;AAAA,MAEP,UAAA;AAAA,QAAA5rB;AAAA,QACAkP,KACC,gBAAA/S,EAAC,QAAA,EAAK,KAAKiuB,GAAY,WAAWyB,GAAc,MAAK,WAAU,OAAO5B,GACnE,UAAAtT,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;AAEAgT,GAAQ,cAAc;"}