@moondreamsdev/dreamer-ui 1.7.7-test.2 → 1.7.7-test.21

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.
Files changed (75) hide show
  1. package/README.md +13 -0
  2. package/dist/QuestionMarkCircled-BaSE7iv0.cjs +2 -0
  3. package/dist/QuestionMarkCircled-BaSE7iv0.cjs.map +1 -0
  4. package/dist/{QuestionMarkCircled-BVBF3skB.js → QuestionMarkCircled-CY81euqP.js} +119 -7
  5. package/dist/QuestionMarkCircled-CY81euqP.js.map +1 -0
  6. package/dist/Toast-B-Zu6Kp_.cjs +2 -0
  7. package/dist/Toast-B-Zu6Kp_.cjs.map +1 -0
  8. package/dist/{Toast-C5BwqBkw.js → Toast-BFQrI1bB.js} +129 -100
  9. package/dist/Toast-BFQrI1bB.js.map +1 -0
  10. package/dist/components.cjs.js +1 -1
  11. package/dist/components.cjs.js.map +1 -1
  12. package/dist/components.esm.js +2117 -684
  13. package/dist/components.esm.js.map +1 -1
  14. package/dist/providers.cjs.js +1 -1
  15. package/dist/providers.esm.js +1 -1
  16. package/dist/src/components/accordion/AccordionItem.d.ts +0 -1
  17. package/dist/src/components/carousel/Carousel.d.ts +46 -0
  18. package/dist/src/components/carousel/hooks.d.ts +20 -0
  19. package/dist/src/components/carousel/index.d.ts +2 -0
  20. package/dist/src/components/carousel/useScreenSize.d.ts +15 -0
  21. package/dist/src/components/carousel/variants.d.ts +36 -0
  22. package/dist/src/components/clickable/Clickable.d.ts +0 -1
  23. package/dist/src/components/index.d.ts +9 -0
  24. package/dist/src/components/label/Label.d.ts +2 -1
  25. package/dist/src/components/pagination/Pagination.d.ts +24 -0
  26. package/dist/src/components/pagination/index.d.ts +1 -0
  27. package/dist/src/components/pagination/variants.d.ts +15 -0
  28. package/dist/src/components/panel/Panel.d.ts +36 -0
  29. package/dist/src/components/panel/hooks.d.ts +6 -0
  30. package/dist/src/components/panel/index.d.ts +3 -0
  31. package/dist/src/components/panel/variants.d.ts +12 -0
  32. package/dist/src/components/radiogroup/RadioGroupItem.d.ts +0 -1
  33. package/dist/src/components/scroll-area/ScrollArea.d.ts +20 -0
  34. package/dist/src/components/scroll-area/hooks.d.ts +12 -0
  35. package/dist/src/components/scroll-area/index.d.ts +2 -0
  36. package/dist/src/components/select/Select.d.ts +22 -0
  37. package/dist/src/components/select/hooks.d.ts +35 -0
  38. package/dist/src/components/select/index.d.ts +2 -0
  39. package/dist/src/components/select/variants.d.ts +15 -0
  40. package/dist/src/components/separator/Separator.d.ts +15 -0
  41. package/dist/src/components/separator/index.d.ts +2 -0
  42. package/dist/src/components/separator/variants.d.ts +7 -0
  43. package/dist/src/components/skeleton/Skeleton.d.ts +13 -0
  44. package/dist/src/components/skeleton/index.d.ts +1 -0
  45. package/dist/src/components/skeleton/variants.d.ts +18 -0
  46. package/dist/src/components/slider/Slider.d.ts +33 -0
  47. package/dist/src/components/slider/hooks.d.ts +30 -0
  48. package/dist/src/components/slider/index.d.ts +2 -0
  49. package/dist/src/components/slider/variants.d.ts +49 -0
  50. package/dist/src/components/tabs/Tabs.d.ts +26 -0
  51. package/dist/src/components/tabs/TabsContent.d.ts +10 -0
  52. package/dist/src/components/tabs/TabsContext.d.ts +11 -0
  53. package/dist/src/components/tabs/TabsList.d.ts +7 -0
  54. package/dist/src/components/tabs/TabsTrigger.d.ts +15 -0
  55. package/dist/src/components/tabs/hooks.d.ts +9 -0
  56. package/dist/src/components/tabs/index.d.ts +4 -0
  57. package/dist/src/components/tabs/variants.d.ts +18 -0
  58. package/dist/src/components/tooltip/hooks.d.ts +0 -1
  59. package/dist/src/hooks/useActionModal.d.ts +0 -1
  60. package/dist/src/hooks/useToast.d.ts +0 -1
  61. package/dist/src/symbols/ChevronDoubleLeft.d.ts +2 -0
  62. package/dist/src/symbols/ChevronDoubleRight.d.ts +2 -0
  63. package/dist/src/symbols/ChevronLeft.d.ts +2 -0
  64. package/dist/src/symbols/ChevronRight.d.ts +2 -0
  65. package/dist/src/symbols/index.d.ts +4 -1
  66. package/dist/symbols.cjs.js +1 -1
  67. package/dist/symbols.esm.js +14 -10
  68. package/dist/theme.css +4 -0
  69. package/package.json +3 -3
  70. package/dist/QuestionMarkCircled-BVBF3skB.js.map +0 -1
  71. package/dist/QuestionMarkCircled-D5cHmQp1.cjs +0 -2
  72. package/dist/QuestionMarkCircled-D5cHmQp1.cjs.map +0 -1
  73. package/dist/Toast-C5BwqBkw.js.map +0 -1
  74. package/dist/Toast-FzI16Fnl.cjs +0 -2
  75. package/dist/Toast-FzI16Fnl.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"components.esm.js","sources":["../src/components/accordion/AccordionItem.tsx","../src/components/accordion/Accordion.tsx","../src/components/button/LoadingDots.tsx","../src/components/button/variants.ts","../src/components/button/Button.tsx","../src/components/checkbox/hooks.ts","../src/components/checkbox/Checkbox.tsx","../src/components/clickable/Clickable.tsx","../src/shared/forms/StatusHelpMessage.tsx","../src/components/input/variants.ts","../src/components/input/Input.tsx","../src/components/label/Label.tsx","../src/components/modal/hooks.ts","../src/components/modal/Modal.tsx","../src/components/radiogroup/RadioInput.tsx","../src/components/radiogroup/RadioGroupItem.tsx","../src/components/radiogroup/hooks.ts","../src/components/radiogroup/RadioGroup.tsx","../src/components/slot/Slot.tsx","../src/components/textarea/CharacterCount.tsx","../src/components/textarea/hooks.ts","../src/components/textarea/variants.ts","../src/components/textarea/Textarea.tsx","../src/components/toggle/variants.ts","../src/components/toggle/Toggle.tsx","../src/components/tooltip/hooks.ts","../src/components/tooltip/Tooltip.tsx"],"sourcesContent":["import { useId } from 'react';\nimport { ChevronDown } from '../../symbols';\nimport { join } from '../../utils';\nimport { AccordionOption } from './Accordion';\n\nexport interface AccordionItemProps extends Omit<AccordionOption, 'defaultOpen'> {\n children?: React.ReactNode;\n className?: string;\n isOpen?: boolean;\n onToggle?: () => void;\n triggerClassName?: string;\n bodyClassName?: string;\n}\n\nexport function AccordionItem({\n id,\n title,\n content,\n children,\n className = '',\n disabled = false,\n isOpen = false,\n onToggle,\n triggerClassName = '',\n bodyClassName = '',\n}: AccordionItemProps) {\n const fallbackId = useId();\n const itemId = id || `accordion-item-${fallbackId}`;\n const headerId = `${itemId}-header`;\n const panelId = `${itemId}-panel`;\n\n const handleToggle = () => {\n if (!disabled && onToggle) {\n onToggle();\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleToggle();\n }\n };\n\n return (\n <div className={join('border-b border-gray-200', disabled && 'opacity-60 cursor-not-allowed', className)}>\n <button\n id={headerId}\n type='button'\n className={join(\n 'w-full text-left py-3 px-4 flex justify-between items-center focus:outline focus:outline-secondary',\n disabled ? 'cursor-not-allowed' : 'hover:bg-gray-50/10 cursor-pointer',\n triggerClassName\n )}\n aria-expanded={isOpen}\n aria-controls={panelId}\n disabled={disabled}\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n >\n <span>{title}</span>\n <span\n className={join(\n 'transform transition-transform duration-300 ease-linear',\n isOpen ? 'rotate-180' : 'rotate-0'\n )}\n aria-hidden='true'\n >\n <ChevronDown size={18} />\n </span>\n </button>\n\n <div\n id={panelId}\n role='region'\n aria-labelledby={headerId}\n className={join(\n 'transition-all duration-300 ease-linear px-4',\n isOpen ? 'max-h-96 opacity-100 overflow-auto py-3' : 'max-h-0 opacity-0 overflow-hidden',\n bodyClassName\n )}\n >\n {isOpen && (children || content)}\n </div>\n </div>\n );\n}\n","import React, { useId, useState } from 'react';\nimport { join } from '../../utils';\nimport { AccordionItem, AccordionItemProps } from './AccordionItem';\n\nexport interface AccordionOption {\n id?: string;\n title: React.ReactNode;\n content: React.ReactNode;\n disabled?: boolean;\n defaultOpen?: boolean;\n}\n\nexport interface AccordionProps {\n id?: string;\n items?: AccordionOption[];\n children?: React.ReactElement<AccordionItemProps>[] | React.ReactElement<AccordionItemProps>;\n className?: string;\n itemClassName?: string;\n allowMultiple?: boolean;\n defaultOpenItems?: string[];\n triggersClassName?: string;\n bodiesClassName?: string;\n}\n\nexport function Accordion({\n id,\n items = [],\n children,\n className = '',\n itemClassName = '',\n allowMultiple = false,\n defaultOpenItems = [],\n triggersClassName = '',\n bodiesClassName = '',\n}: AccordionProps) {\n const groupId = useId();\n const groupName = id || `accordion-group-${groupId}`;\n const [openItems, setOpenItems] = useState<Set<string>>(new Set(defaultOpenItems));\n\n const toggleItem = (itemId: string) => {\n setOpenItems((prev) => {\n const newOpenItems = new Set(prev);\n\n if (newOpenItems.has(itemId)) {\n newOpenItems.delete(itemId);\n } else {\n if (!allowMultiple) {\n newOpenItems.clear();\n }\n newOpenItems.add(itemId);\n }\n\n return newOpenItems;\n });\n };\n\n const getItemId = (index: number) => `${groupId}-item-${index}`;\n const isItemOpen = (itemId: string) => openItems.has(itemId);\n\n return (\n <div id={groupName} className={className}>\n {/* Render from items prop */}\n {items.length > 0 &&\n items.map((item, index) => {\n const itemId = item.id || getItemId(index);\n return (\n <AccordionItem\n key={itemId}\n id={itemId}\n title={item.title}\n content={item.content}\n disabled={item.disabled}\n isOpen={isItemOpen(itemId)}\n onToggle={() => toggleItem(itemId)}\n className={itemClassName}\n triggerClassName={triggersClassName}\n bodyClassName={bodiesClassName}\n />\n );\n })}\n\n {/* Render AccordionItem components */}\n {items.length === 0 &&\n children &&\n React.Children.map(children, (child, index) => {\n if (React.isValidElement<AccordionItemProps>(child) && child.type === AccordionItem) {\n const itemId = child.props.id || getItemId(index);\n return (\n <AccordionItem\n {...child.props}\n key={itemId}\n id={itemId}\n className={join(itemClassName, child.props.className)}\n isOpen={isItemOpen(itemId)}\n onToggle={() => toggleItem(itemId)}\n triggerClassName={join(triggersClassName, child.props.triggerClassName)}\n bodyClassName={join(bodiesClassName, child.props.bodyClassName)}\n />\n );\n }\n return null;\n })}\n </div>\n );\n}\n","import { useEffect, useState } from 'react';\nimport { join } from '../../utils';\n\nexport default function LoadingDots() {\n const [activeIndex, setActiveIndex] = useState(0);\n\n useEffect(() => {\n const interval = setInterval(() => {\n setActiveIndex((prevIndex) => (prevIndex + 1) % 3);\n }, 500);\n\n return () => clearInterval(interval);\n }, []);\n\n return (\n <div className='absolute inset-0 inline-flex items-center justify-center gap-x-2 align-middle'>\n {[0, 1, 2].map((index) => (\n <div\n key={index}\n className={join(\n 'rounded-full transition-all duration-500 ease-in-out size-[0.35em] bg-current',\n activeIndex === index && 'transform -translate-y-1'\n )}\n />\n ))}\n </div>\n );\n}\n","export const buttonVariants = {\n base: '',\n primary: 'bg-primary text-primary-foreground hover:bg-primary/85 disabled:bg-muted disabled:text-muted-foreground',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/85 disabled:bg-muted/80 disabled:text-muted-foreground/80',\n tertiary: 'text-primary hover:text-primary-foreground disabled:text-muted',\n outline: 'border border-primary text-primary hover:border-primary-foreground hover:text-primary-foreground disabled:border-muted disabled:text-muted',\n link: 'underline-offset-4 hover:underline disabled:underline disabled:text-muted',\n destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/85 disabled:bg-muted disabled:text-muted-foreground',\n} as const;\nexport type ButtonVariant = keyof typeof buttonVariants;\n\nexport const sizeVariants = {\n stripped: '',\n fitted: 'size-fit',\n sm: 'px-2 py-1 text-sm',\n md: 'px-4 py-2 text-base',\n lg: 'px-6 py-3 text-lg',\n icon: 'p-1 w-fit aspect-square',\n full: 'p-2 w-full',\n} as const;\nexport type ButtonSize = keyof typeof sizeVariants;\n\nexport const roundedVariants = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'rounded-full',\n} as const;\nexport type ButtonRounded = keyof typeof roundedVariants;\n\nexport interface ButtonVariants {\n variant: ButtonVariant;\n size: ButtonSize;\n rounded: ButtonRounded;\n}\n\nexport const buttonDefaults: ButtonVariants = {\n variant: 'primary',\n size: 'md',\n rounded: 'md',\n} as const;\n","// Button.tsx\nimport { ButtonHTMLAttributes, Ref } from 'react';\nimport { join } from '../../utils';\nimport LoadingDots from './LoadingDots';\nimport { ButtonSize, ButtonVariants, buttonDefaults, buttonVariants, roundedVariants, sizeVariants } from './variants';\n\nexport interface ButtonProps extends Partial<ButtonVariants>, ButtonHTMLAttributes<HTMLButtonElement> {\n ref?: Ref<HTMLButtonElement>;\n loading?: boolean;\n linkTo?: string;\n linkProps?: Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'href'>;\n}\n\nexport default function Button({\n variant = buttonDefaults.variant,\n size,\n rounded = buttonDefaults.rounded,\n loading,\n linkTo,\n linkProps,\n type = 'button',\n className,\n ...rest\n}: ButtonProps) {\n let adjustedSize: ButtonSize;\n if (variant === 'link' && !size) {\n // default links to fitted size\n adjustedSize = 'fitted';\n } else {\n adjustedSize = size || buttonDefaults.size;\n }\n\n const baseClasses =\n 'appearance-none focus:outline-none focus:ring not-disabled:hover:cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed transition-all';\n\n const buttonClasses = join(\n baseClasses,\n buttonVariants[variant],\n sizeVariants[adjustedSize],\n roundedVariants[rounded],\n loading && 'relative pointer-events-none',\n linkTo && 'relative',\n className\n );\n\n return (\n <button\n {...rest}\n role={linkTo ? 'link' : rest.role}\n aria-label={rest['aria-label'] || linkProps?.['aria-label']}\n aria-description={rest['aria-description'] || linkProps?.['aria-description']}\n aria-disabled={rest.disabled || loading}\n aria-busy={loading}\n type={type}\n className={buttonClasses}\n >\n {loading && <LoadingDots />}\n <span className={join(loading && 'invisible')}>{rest.children}</span>\n\n {linkTo && !rest.disabled && (\n <a\n {...linkProps}\n aria-hidden={true} // Hide from screen readers since the button is already accessible\n href={linkTo}\n rel={linkProps?.rel || 'noreferrer'}\n className='absolute inset-0'\n />\n )}\n </button>\n );\n}\n","import { useCallback, useEffect, useState } from 'react';\n\nexport function useFilledBackgroundColor(id: string) {\n const [filledBackgroundColor, setFilledBackgroundColor] = useState<string>('');\n\n const getFirstNonTransparentBackgroundColor = useCallback((element: Element | null): string => {\n let currentElement = element;\n let color = '';\n while (currentElement && !color) {\n const backgroundColor = window.getComputedStyle(currentElement).backgroundColor;\n if (backgroundColor && backgroundColor !== 'transparent' && backgroundColor !== 'rgba(0, 0, 0, 0)') {\n color = backgroundColor;\n }\n currentElement = currentElement.parentElement;\n }\n return color || 'transparent';\n }, []);\n\n useEffect(() => {\n const checkbox = document.getElementById(id);\n if (checkbox) {\n const backgroundColor = getFirstNonTransparentBackgroundColor(checkbox.parentElement);\n setFilledBackgroundColor(backgroundColor);\n }\n }, [id, getFirstNonTransparentBackgroundColor]);\n\n return filledBackgroundColor;\n}\n","import React, { Ref, useEffect, useId, useMemo, useState } from 'react';\nimport Check from '../../symbols/Check';\nimport { join } from '../../utils';\nimport { useFilledBackgroundColor } from './hooks';\n\nexport interface CheckboxProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n ref?: Ref<HTMLButtonElement>;\n size?: number;\n color?: string; // can be adjusted with tailwindcss by using `text-<color>`\n filled?: boolean;\n rounded?: boolean;\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nexport default function Checkbox({\n ref,\n id,\n size = 20,\n color,\n filled = false,\n rounded = true,\n checked = false,\n onCheckedChange,\n disabled,\n className = '',\n ...props\n}: CheckboxProps) {\n const generatedId = useId();\n const checkboxId = useMemo(() => id || `checkbox-${generatedId}`, [id, generatedId]);\n const parentBackgroundColor = useFilledBackgroundColor(checkboxId);\n const [isChecked, setIsChecked] = useState(checked);\n\n useEffect(() => {\n setIsChecked(checked);\n }, [checked]);\n\n const handleChange = () => {\n if (!disabled) {\n setIsChecked(!isChecked);\n onCheckedChange?.(!isChecked);\n }\n };\n\n const handleOnKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === ' ') {\n e.preventDefault();\n handleChange();\n }\n };\n\n const checkboxClasses = join(\n 'flex items-center justify-center border outline outline-transparent focus:outline-current focus:outline-offset-2',\n rounded && 'rounded',\n disabled && 'opacity-40 cursor-not-allowed',\n !disabled && 'cursor-pointer',\n className\n );\n\n return (\n <button\n id={checkboxId}\n type='button'\n ref={ref}\n tabIndex={0}\n role='checkbox'\n onClick={handleChange}\n aria-checked={isChecked}\n aria-disabled={disabled}\n onKeyDownCapture={handleOnKeyDown}\n style={{\n width: size,\n height: size,\n color: color,\n backgroundColor: isChecked && filled ? 'currentcolor' : 'transparent',\n }}\n className={checkboxClasses}\n {...props}\n >\n {isChecked && <Check size={size} color={filled ? parentBackgroundColor : undefined} />}\n </button>\n );\n}\n","import { join } from '../../utils';\n\ninterface ClickableProps extends Omit<React.HTMLProps<HTMLDivElement>, 'onClick'> {\n children: React.ReactNode;\n linkTo?: React.HTMLProps<HTMLAnchorElement>['href'];\n linkProps?: Omit<React.HTMLProps<HTMLAnchorElement>, 'href'>;\n onButtonClick?: React.HTMLProps<HTMLButtonElement>['onClick'];\n buttonProps?: Omit<React.HTMLProps<HTMLButtonElement>, 'onClick'>;\n}\n\nexport default function Clickable({\n children,\n className,\n linkTo,\n linkProps,\n onButtonClick,\n buttonProps,\n ...props\n}: ClickableProps) {\n if (linkTo && onButtonClick) {\n console.warn('Clickable: Both \"linkTo\" and \"onButtonClick\" props are provided. Only \"linkTo\" will be used.');\n }\n\n return (\n <div className={join('relative w-fit', className)} {...props}>\n {children}\n\n {/* Link */}\n {linkTo && (\n <a\n {...linkProps}\n rel={linkProps?.rel || 'noreferrer'}\n href={linkTo}\n className={join('absolute inset-0', linkProps?.className)}\n />\n )}\n\n {/* Button */}\n {!linkTo && onButtonClick && (\n <button\n {...buttonProps}\n type='button'\n onClick={onButtonClick}\n className={join('absolute inset-0 cursor-pointer', buttonProps?.className)}\n />\n )}\n </div>\n );\n}\n","import { useEffect } from 'react';\nimport { CheckCircled, ExclamationTriangle } from '../../symbols';\nimport { join } from '../../utils';\n\ninterface StatusHelpMessageProps {\n elementId: string;\n type: 'error' | 'success';\n message?: string;\n}\n\nexport default function StatusHelpMessage({ elementId, type, message }: StatusHelpMessageProps) {\n useEffect(() => {\n const element = document.getElementById(elementId) as HTMLElement;\n if (!element) {\n return;\n }\n if (!message && type === 'error') {\n element.removeAttribute('data-error');\n return;\n }\n if (!message && type === 'success') {\n element.removeAttribute('data-success');\n return;\n }\n\n element.setAttribute('aria-describedby', `${elementId}-${type}-message`);\n element.setAttribute('aria-invalid', type === 'error' ? 'true' : 'false');\n\n if (type === 'error') {\n element.setAttribute('data-error', 'true');\n }\n if (type === 'success') {\n element.setAttribute('data-success', 'true');\n }\n\n return () => {\n element.removeAttribute('aria-describedby');\n element.removeAttribute('aria-invalid');\n element.removeAttribute('data-error');\n element.removeAttribute('data-success');\n };\n }, [elementId, type, message]);\n\n if (!message) {\n return null;\n }\n\n return (\n <small\n className={join(\n 'mt-0.5 text-sm inline-flex items-center gap-1 w-full justify-start',\n type === 'error' && 'text-destructive',\n type === 'success' && 'text-success'\n )}\n role='status'\n >\n {type === 'error' ? <ExclamationTriangle /> : <CheckCircled />}\n <span id={`${elementId}-${type}-message`}>{message}</span>\n </small>\n );\n}\n","export const inputVariants = {\n base: '',\n default:\n 'ring ring-transparent focus:ring-primary-foreground not-disabled:data-error:ring-destructive not-disabled:data-success:ring-success',\n underline:\n 'border-b border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-destructive not-disabled:data-success:border-success',\n outline:\n 'border border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-destructive not-disabled:data-success:border-success',\n} as const;\nexport type InputVariant = keyof typeof inputVariants;\n\nexport const roundedVariants = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'px-3 rounded-full',\n} as const;\nexport type InputRounded = keyof typeof roundedVariants;\n\nexport interface InputVariants {\n variant: InputVariant;\n rounded: InputRounded;\n}\n\nexport const inputDefaults: InputVariants = {\n variant: 'default',\n rounded: 'none',\n} as const;\n","import { Ref, useId, useState } from 'react';\nimport { StatusHelpMessage } from '../../shared/forms';\nimport { EyeClosed, EyeOpened } from '../../symbols';\nimport { join } from '../../utils';\nimport './styles.css';\nimport { inputDefaults, inputVariants, InputVariants, roundedVariants } from './variants';\n\ninterface InputProps extends Partial<InputVariants>, React.InputHTMLAttributes<HTMLInputElement> {\n ref?: Ref<HTMLInputElement>;\n displayOnlyMode?: boolean;\n errorMessage?: string;\n successMessage?: string;\n}\n\nexport default function Input({\n variant = inputDefaults.variant,\n rounded,\n displayOnlyMode = false,\n errorMessage,\n successMessage,\n type = 'text',\n className,\n ...rest\n}: InputProps) {\n const id = useId();\n const [showPassword, setShowPassword] = useState(false);\n\n // Default `round` of `md` for `outline` variant\n let adjustedRound = rounded;\n if (variant === 'outline' && !rounded) {\n adjustedRound = 'md';\n }\n adjustedRound = adjustedRound || inputDefaults.rounded;\n\n const baseClasses =\n 'appearance-none w-full focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed placeholder:text-muted/70 hide-number-input-arrows transition-all';\n const fileClasses =\n 'file:mr-2 file:border-0 file:rounded-md file:px-1.5 file:py-1 file:bg-primary hover:file:bg-primary/85 file:text-sm file:font-medium file:text-foreground file:transition-colors';\n\n const inputClasses = join(\n baseClasses,\n fileClasses,\n !displayOnlyMode && inputVariants[variant],\n !displayOnlyMode && roundedVariants[adjustedRound],\n type === 'password' && 'pr-10',\n !displayOnlyMode && 'px-2 py-1',\n displayOnlyMode && 'pointer-events-none',\n className\n );\n\n return (\n <div className={join(displayOnlyMode && 'cursor-text')} style={{ height: rest.height, width: rest.width }}>\n <div className={join(type === 'password' && 'relative')}>\n <input\n {...rest}\n id={id}\n type={type === 'password' && showPassword ? 'text' : type}\n aria-disabled={rest.disabled}\n readOnly={displayOnlyMode}\n aria-readonly={displayOnlyMode || rest['aria-readonly']}\n data-error={errorMessage ? true : undefined}\n data-success={successMessage ? true : undefined}\n className={inputClasses}\n />\n {type === 'password' && (\n <button\n onClick={() => setShowPassword(!showPassword)}\n className='absolute inset-y-0 right-0 px-2 hover:cursor-pointer'\n aria-label='Toggle password visibility'\n data-state={showPassword ? 'visible' : 'hidden'}\n >\n {showPassword ? <EyeOpened size={20} /> : <EyeClosed size={20} />}\n </button>\n )}\n </div>\n {!displayOnlyMode && <StatusHelpMessage elementId={id} type='error' message={errorMessage} />}\n {!displayOnlyMode && <StatusHelpMessage elementId={id} type='success' message={successMessage} />}\n </div>\n );\n}\n","import React, { useId } from 'react';\nimport { QuestionMarkCircled } from '../../symbols';\nimport { join } from '../../utils';\n\nexport interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n display?: 'block' | 'inline';\n width?: React.CSSProperties['width'];\n required?: boolean;\n helpMessage?: string;\n suffix?: React.ReactNode;\n}\n\nexport function Label({\n display = 'inline',\n width = 'fit-content',\n className = '',\n required,\n helpMessage,\n suffix,\n htmlFor,\n children,\n ...props\n}: LabelProps) {\n const id = useId();\n const labelClasses = join('font-medium', display, className);\n const helpId = helpMessage ? `${htmlFor ?? id}-help` : undefined;\n\n return (\n <div style={{ display: display === 'inline' ? 'inline-flex' : 'flex', width }} className='relative'>\n <label className={labelClasses} htmlFor={htmlFor} {...props}>\n {children}\n {required && (\n <span className='text-red-500 font-medium ml-1' aria-label='required'>\n *\n </span>\n )}\n </label>\n {helpMessage && (\n <span\n className='text-gray-500 ml-1 size-fit -translate-y-1/3'\n aria-describedby={helpId}\n aria-label='Help information'\n title={helpMessage}\n >\n <QuestionMarkCircled />\n </span>\n )}\n {helpMessage && (\n <div id={helpId} className='sr-only'>\n {helpMessage}\n </div>\n )}\n {suffix && <span className='ml-1'>{suffix}</span>}\n </div>\n );\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport function useAnimationOpenClose(isOpen: boolean) {\n const [show, setShow] = useState(false);\n const [shouldRender, setShouldRender] = useState(false);\n\n useEffect(() => {\n if (isOpen) {\n setShouldRender(true);\n setTimeout(() => setShow(true), 10);\n } else {\n setShow(false);\n setTimeout(() => setShouldRender(false), 150);\n }\n }, [isOpen]);\n\n return { show, shouldRender };\n}\n\nexport function useDocumentChanges(isOpen: boolean, onClose: () => void) {\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose();\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n // Prevent background scrolling when modal is open\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscape);\n document.body.style.overflow = 'auto';\n };\n }, [isOpen, onClose]);\n}\n\nexport function useHandleFocus(modalId: string, isOpen: boolean) {\n const previousActiveElement = useRef<Element | null>(null);\n\n const focusAppropriateElement = useCallback(() => {\n const modalElement = document.getElementById(modalId);\n if (!modalElement) return;\n\n // 1. First, try to focus on the first action button, if available\n const modalActions = modalElement.querySelectorAll('[data-modal-action=\"true\"]');\n if (modalActions.length > 0) {\n (modalActions[0] as HTMLElement).focus();\n return;\n }\n\n // 2. Then try first focusable element in content (giving preference to non-close button)\n const focusableElements = modalElement.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n\n if (focusableElements.length > 0) {\n const allBesidesCloseButton = Array.from(focusableElements).filter((el) => {\n return !(el instanceof HTMLButtonElement && el.getAttribute('data-modal-close-button') === 'true');\n });\n\n if (allBesidesCloseButton.length > 0) {\n (allBesidesCloseButton[0] as HTMLElement).focus();\n return;\n }\n\n (focusableElements[0] as HTMLElement).focus();\n return;\n }\n\n // 3. Fallback to modal container\n modalElement.focus();\n }, [modalId]);\n\n useEffect(() => {\n if (isOpen) {\n // Store the currently focused element to restore focus later\n previousActiveElement.current = document.activeElement;\n\n focusAppropriateElement();\n }\n\n return () => {\n document.body.style.overflow = 'auto';\n\n // Restore focus to the previously focused element when modal closes\n if (previousActiveElement.current instanceof HTMLElement) {\n previousActiveElement.current.focus();\n }\n };\n }, [isOpen, focusAppropriateElement]);\n}\n","import { join } from '@moondreamsdev/dreamer-ui/utils';\nimport React, { useId } from 'react';\nimport { createPortal } from 'react-dom';\nimport { X } from '../../symbols';\nimport { Button, ButtonProps } from '../button';\nimport { useAnimationOpenClose, useDocumentChanges, useHandleFocus } from './hooks';\n\ninterface ModalAction extends Omit<ButtonProps, 'children'> {\n label: string;\n}\n\nexport interface ModalProps {\n id?: string;\n isOpen: boolean;\n onClose: () => void;\n title?: React.ReactNode;\n children: React.ReactNode;\n contentOnly?: boolean;\n className?: string;\n overlayClassName?: string;\n hideCloseButton?: boolean;\n actions?: ModalAction[];\n disableCloseOnOverlayClick?: boolean;\n ariaLabelledBy?: string;\n ariaDescribedBy?: string;\n}\n\nexport function Modal({\n id,\n isOpen,\n onClose,\n title,\n children,\n contentOnly = false,\n className,\n overlayClassName,\n hideCloseButton = false,\n actions = [],\n disableCloseOnOverlayClick = false,\n ariaLabelledBy,\n ariaDescribedBy,\n}: ModalProps) {\n const generatedId = useId();\n const modalId = id || `modal-${generatedId}`;\n const titleId = id ? `${id}-title` : `modal-title-${generatedId}`;\n\n const { show, shouldRender } = useAnimationOpenClose(isOpen);\n useHandleFocus(modalId, shouldRender);\n useDocumentChanges(shouldRender, onClose);\n\n if (!shouldRender) return null;\n\n const renderTitle = () => {\n if (!title) return null;\n\n if (React.isValidElement(title)) {\n return <div className='mb-4'>{title}</div>;\n }\n\n return (\n <h2 className='mb-4 text-xl font-semibold' id={titleId}>\n {title}\n </h2>\n );\n };\n\n const renderActions = () => {\n if (actions.length === 0) return null;\n\n return (\n <div className='mt-6 not-sm:grid gap-y-2 sm:flex sm:justify-start sm:flex-row-reverse sm:gap-x-3'>\n {actions.map((action, index) => {\n const { label, className, ...buttonProps } = action;\n return (\n <Button key={index} className={className} type='button' {...buttonProps} data-modal-action='true'>\n {label}\n </Button>\n );\n })}\n </div>\n );\n };\n\n return (\n <>\n {createPortal(\n <div\n aria-labelledby={ariaLabelledBy ?? title ? titleId : undefined}\n aria-describedby={ariaDescribedBy}\n role='dialog'\n aria-modal='true'\n className='fixed inset-0 z-[100] overflow-y-auto'\n >\n <div className='flex min-h-screen items-center justify-center p-4'>\n <div\n className={join('fixed inset-0 bg-black/20 transition-all', overlayClassName)}\n onClick={() => {\n if (!disableCloseOnOverlayClick) {\n onClose();\n }\n }}\n />\n\n {contentOnly && <div className={join('relative w-fit', className)}>{children}</div>}\n\n {!contentOnly && (\n <div\n id={modalId}\n tabIndex={-1}\n className={join(\n 'relative w-full max-w-xl transform rounded-lg shadow-xl transition-all p-6 bg-inherit focus:ring ease-in duration-75',\n show ? 'opacity-100 scale-100' : 'opacity-0 scale-90',\n className\n )}\n >\n {!hideCloseButton && (\n <button\n type='button'\n onClick={onClose}\n data-modal-close-button='true'\n className='rounded-md p-0.5 top-2.5 right-2.5 absolute opacity-80 hover:opacity-100 transition-opacity focus:outline-none focus:ring-2 focus:ring-gray-500 leading-0'\n >\n <X size={18} />\n </button>\n )}\n\n {renderTitle()}\n\n {children}\n\n {renderActions()}\n </div>\n )}\n </div>\n </div>,\n document.body\n )}\n </>\n );\n}\n","import { join } from '../../utils';\n\nexport type RadioInputProps = {\n itemId: string;\n checked: boolean;\n onChange: () => void;\n name: string;\n disabled?: boolean;\n className?: string;\n};\n\n// Custom RadioInput Component\nexport function RadioInput({ itemId, checked, onChange, name, disabled = false, className = '' }: RadioInputProps) {\n const baseClasses = 'relative inline-flex items-center justify-center rounded-full';\n\n const handleClick = () => {\n if (disabled) return;\n onChange();\n };\n\n const radioClasses = join(\n baseClasses,\n !checked && 'hover:border-current/60',\n !disabled && 'border-current cursor-pointer',\n disabled && 'border-muted/60 cursor-not-allowed',\n className\n );\n return (\n <div\n id={itemId}\n role='radio'\n tabIndex={-1} // necessary so that the radio button can be focused as div is not a focusable element\n aria-checked={checked}\n aria-disabled={disabled}\n aria-description={`Radio button for ${name}`}\n aria-labelledby={`${itemId}-label`}\n onClick={handleClick}\n className={radioClasses}\n style={{\n width: '1em',\n height: '1em',\n padding: '0.1em',\n borderWidth: '0.06em',\n }}\n >\n {checked && (\n <div\n className={join(`size-full aspect-square rounded-full`, disabled && 'bg-muted/60', !disabled && 'bg-current')}\n />\n )}\n </div>\n );\n}\n","import { useId } from 'react';\nimport { join } from '../../utils';\nimport { RadioInput } from './RadioInput';\n\nexport interface RadioGroupItemProps {\n value: string;\n children: React.ReactNode;\n className?: string;\n isSelected?: boolean;\n onChange?: (value: string) => void;\n disabled?: boolean;\n name?: string;\n hideInput?: boolean;\n description?: string;\n}\n\nexport function RadioGroupItem({\n value,\n children,\n className = '',\n isSelected = false,\n onChange,\n disabled = false,\n hideInput = false,\n description,\n name,\n}: RadioGroupItemProps) {\n const id = useId();\n const itemId = `radio-${id}-${value}`;\n\n const handleChange = () => {\n if (!disabled) {\n onChange?.(value);\n }\n };\n\n return (\n <div\n title={description}\n className={join(\n 'relative flex items-center',\n className,\n // Uses text color for borders\n hideInput &&\n `p-2 border-2 focus-within:border-dashed focus-within:${\n disabled ? 'border-current/50' : 'border-current/80'\n }`,\n hideInput && !isSelected && `border-transparent ${disabled ? '' : 'not-focus-within:hover:border-border/60'}`,\n hideInput && isSelected && 'border-border',\n disabled && 'opacity-60 cursor-not-allowed'\n )}\n style={{\n gap: '0.5em',\n }}\n >\n {!hideInput && (\n <RadioInput\n itemId={itemId}\n name={name || ''}\n checked={isSelected}\n onChange={handleChange}\n disabled={disabled}\n className={join(hideInput && '')}\n />\n )}\n <div\n id={hideInput ? itemId : undefined}\n tabIndex={hideInput ? -1 : undefined}\n role={hideInput ? 'radio' : undefined}\n onClick={hideInput ? handleChange : undefined}\n aria-checked={!hideInput ? undefined : isSelected ? 'true' : 'false'}\n aria-disabled={hideInput ? disabled : undefined}\n aria-description={!hideInput ? undefined : description || `Radio button for ${name}`}\n aria-labelledby={hideInput ? `${itemId}-label` : undefined}\n className={join(hideInput && 'size-full', typeof children === 'object' && 'grow focus:outline-none')}\n >\n <label\n id={`${itemId}-label`}\n onClick={hideInput ? undefined : handleChange}\n className={join(disabled && 'cursor-not-allowed', !disabled && 'cursor-pointer')}\n >\n {children}\n </label>\n </div>\n </div>\n );\n}\n","import { useCallback, useEffect, useState } from 'react';\n\nexport function useRadioFocus(id: string, selectedOptionIndex: number) {\n // Manage state locally to avoid race conditions, which can result in\n // the an option failing to be selected or incorrectly selected\n const [focusedIndex, setFocusedIndex] = useState<number>(selectedOptionIndex);\n const [clickedIndex, setClickedIndex] = useState<number>(-1);\n // Prevent onClicks from triggering focus events and automatically selecting the first option\n const [isMouseDown, setIsMouseDown] = useState<boolean>(false);\n\n const handleClicked = useCallback((options: HTMLElement[], index: number) => {\n const target = options[index] as HTMLElement;\n\n // Check if the target element is disabled\n const isDisabled = target.hasAttribute('disabled') || target.getAttribute('aria-disabled') === 'true';\n if (isDisabled) return;\n\n // Update the selected index\n options[index]?.click();\n setClickedIndex(index);\n }, []);\n\n const setInitialFocus = useCallback(\n (e: Event, options: HTMLElement[]) => {\n e.preventDefault();\n if (isMouseDown) return;\n if (!options.length) return;\n\n const indexToFocus = selectedOptionIndex !== -1 ? selectedOptionIndex : 0;\n options[indexToFocus]?.focus();\n setFocusedIndex(indexToFocus);\n\n // Only update the selected index if one is already set\n if (selectedOptionIndex !== -1) {\n handleClicked(options, indexToFocus);\n }\n },\n [selectedOptionIndex, isMouseDown, handleClicked]\n );\n\n /* Focus preceding element when Shift + Tab is pressed */\n const handleFocusPreceding = useCallback(\n (e: KeyboardEvent) => {\n // If the Shift key is not pressed while tab is entered, do nothing\n if (!e.shiftKey) {\n return;\n }\n\n e.preventDefault();\n const focusableElements = Array.from(\n document.querySelectorAll<HTMLElement>(\n 'a, button, input, textarea, select, details, [tabindex]:not([tabindex=\"-1\"])'\n )\n ).filter((el) => !el.hasAttribute('disabled') && el.tabIndex >= 0);\n const currentIndex = focusableElements.findIndex((el) => el.id === id);\n const previousIndex = currentIndex > 0 ? currentIndex - 1 : focusableElements.length - 1;\n focusableElements[previousIndex]?.focus();\n },\n [id]\n );\n\n const handleKeyboardNavigation = useCallback(\n (e: KeyboardEvent, options: HTMLElement[]) => {\n if (!options.length) return;\n\n // Ensure we only toggle options part of radio group\n const target = e.target as HTMLElement;\n const isGroupOption = options.some((option) => option.id === target.id);\n if (!isGroupOption) return;\n\n const currentIndex = focusedIndex !== -1 ? focusedIndex : 0;\n let newIndex = currentIndex;\n\n switch (e.key) {\n case 'ArrowUp':\n case 'ArrowLeft':\n e.preventDefault();\n newIndex = currentIndex > 0 ? currentIndex - 1 : options.length - 1;\n break;\n\n case 'ArrowDown':\n case 'ArrowRight':\n e.preventDefault();\n newIndex = (currentIndex + 1) % options.length;\n break;\n\n // Select the option when the space key is pressed\n case ' ':\n e.preventDefault();\n handleClicked(options, currentIndex);\n return;\n\n case 'Tab':\n handleFocusPreceding(e);\n return;\n\n default:\n return;\n }\n\n options[newIndex]?.focus();\n setFocusedIndex(newIndex);\n // Only update the selected index if one is already set\n if (clickedIndex !== -1) {\n handleClicked(options, newIndex);\n }\n },\n [focusedIndex, clickedIndex, handleFocusPreceding, handleClicked]\n );\n\n const getRadioOptions = useCallback((): HTMLElement[] => {\n const radioGroup = document.querySelector(`[id=\"${id}\"][role=\"radiogroup\"]`);\n if (!radioGroup) return [];\n\n return Array.from(radioGroup.querySelectorAll('[role=\"radio\"]'));\n }, [id]);\n\n useEffect(() => {\n const radioGroup = document.querySelector(`[id=\"${id}\"][role=\"radiogroup\"]`);\n if (!radioGroup) return;\n\n const options = getRadioOptions();\n const handleFocus = (e: Event) => setInitialFocus(e, options);\n const handleKeyDown = (e: KeyboardEvent) => handleKeyboardNavigation(e, options);\n const handleMouseDown = () => setIsMouseDown(true);\n const handleMouseUp = () => setIsMouseDown(false);\n\n document.addEventListener('keydown', handleKeyDown);\n radioGroup.addEventListener('focus', handleFocus);\n radioGroup.addEventListener('mousedown', handleMouseDown);\n document.addEventListener('mouseup', handleMouseUp); // place on document since mouseup event can occur outside of radio group\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n radioGroup.removeEventListener('focus', handleFocus);\n radioGroup.removeEventListener('mousedown', handleMouseDown);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [id, getRadioOptions, setInitialFocus, handleKeyboardNavigation]);\n}\n","import React, { useId, useMemo } from 'react';\nimport { join } from '../../utils';\nimport { RadioGroupItem, RadioGroupItemProps } from './RadioGroupItem';\nimport { useRadioFocus } from './hooks';\n\nexport type RadioOption = { label: string; value: string; disabled?: boolean; description?: string };\n\nexport type RadioGroupProps = {\n options?: (string | RadioOption)[];\n value: string | undefined;\n onChange: (value: string) => void;\n id?: string;\n children?: React.ReactElement<RadioGroupItemProps>[] | React.ReactElement<RadioGroupItemProps>;\n className?: string;\n childrenClassName?: string;\n hideInputs?: boolean;\n};\n\nexport function RadioGroup({\n options = [],\n value,\n onChange,\n id,\n children,\n className = '',\n childrenClassName = '',\n hideInputs = false,\n}: RadioGroupProps) {\n const groupId = useId();\n const groupName = id || `radio-group-${groupId}`;\n useRadioFocus(\n groupName,\n options.findIndex((option) => option === value)\n );\n\n // Check for duplicates if string options are provided\n const processedOptions = useMemo(() => {\n return options.reduce<RadioOption[]>((acc, option) => {\n if (typeof option === 'string') {\n // Check if we already have this string option\n if (!acc.some((item) => item.value === option)) {\n acc.push({ label: option, value: option });\n }\n } else {\n acc.push(option);\n }\n return acc;\n }, []);\n }, [options]);\n\n return (\n <div id={groupName} role='radiogroup' tabIndex={0} className={join(className, 'focus:outline-none')}>\n {/* Render from options prop */}\n {processedOptions.length > 0 &&\n processedOptions.map((option, index) => (\n <RadioGroupItem\n key={`${option.value}-${index}`}\n value={option.value}\n isSelected={value === option.value}\n onChange={onChange}\n name={groupName}\n disabled={option.disabled}\n description={option.description}\n hideInput={hideInputs}\n className={childrenClassName}\n >\n {option.label}\n </RadioGroupItem>\n ))}\n\n {/* Render RadioGroupItem components */}\n {processedOptions.length === 0 &&\n children &&\n React.Children.map(children, (child) => {\n // TypeScript enforces that child is a RadioGroupItem\n if (React.isValidElement(child) && child.type === RadioGroupItem) {\n return (\n <RadioGroupItem\n {...child.props}\n className={join(childrenClassName, child.props.className)}\n hideInput={child.props.hideInput || hideInputs}\n isSelected={value === child.props.value}\n onChange={onChange}\n name={groupName}\n >\n {child.props.children}\n </RadioGroupItem>\n );\n }\n return null;\n })}\n </div>\n );\n}\n","import React, {\n cloneElement,\n createElement,\n HTMLAttributes,\n isValidElement,\n ReactElement,\n ReactNode,\n Ref,\n} from 'react';\n\ninterface SlotProps<T> extends HTMLAttributes<T> {\n children?: ReactNode;\n ref?: Ref<T>;\n}\n\nexport function Slot<T = HTMLElement>({ children, ref, ...props }: SlotProps<T>) {\n\n if (isValidElement(children)) {\n let allProps = { ...props };\n if (children.props) {\n allProps = { ...allProps, ...children.props };\n }\n return cloneElement(children, {\n ...allProps,\n ref: (node: T) => {\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as React.RefObject<T>).current = node;\n }\n },\n } as unknown as ReactElement);\n }\n\n // If not asChild or no valid child, render as div\n return createElement('div', { ...props, ref }, children);\n}\n","import { useEffect, useState } from 'react';\nimport { join } from '../../utils';\n\ninterface CharacterCountProps {\n elementId: string;\n maxLength: number;\n}\n\nexport default function CharacterCount({ elementId, maxLength }: CharacterCountProps) {\n const [characterCount, setCharacterCount] = useState(0);\n\n useEffect(() => {\n const textarea = document.getElementById(elementId) as HTMLTextAreaElement;\n if (!textarea) {\n return;\n }\n\n const updateCharacterCount = () => {\n const updatedCharacterCount = textarea.value.length;\n setCharacterCount(updatedCharacterCount);\n const isError = updatedCharacterCount >= maxLength;\n textarea.setAttribute('aria-describedby', `${elementId}-character-count`);\n textarea.setAttribute('aria-invalid', isError ? 'true' : 'false');\n\n if (isError) {\n textarea.setAttribute('data-error', 'true');\n } else {\n textarea.removeAttribute('data-error');\n }\n };\n\n updateCharacterCount();\n textarea.addEventListener('input', updateCharacterCount);\n textarea.setAttribute('maxlength', String(maxLength));\n\n return () => {\n textarea.removeEventListener('input', updateCharacterCount);\n textarea.removeAttribute('maxlength');\n textarea.removeAttribute('aria-describedby');\n textarea.removeAttribute('aria-invalid');\n textarea.removeAttribute('data-error');\n };\n }, [elementId, maxLength]);\n\n return (\n <small\n className={join(\n 'mt-0.5 text-sm inline-flex items-center gap-1 w-full justify-end',\n characterCount >= maxLength && 'text-destructive',\n characterCount < maxLength && 'text-current'\n )}\n role='status'\n >\n <span id={`${elementId}-character-count`}>\n {characterCount} / {maxLength} characters\n </span>\n </small>\n );\n}\n","import { useEffect } from 'react';\n\nexport function useAutoExpand(id: string, autoExpand: boolean) {\n useEffect(() => {\n const textarea = document.getElementById(id) as HTMLTextAreaElement;\n if (!textarea) {\n return;\n }\n\n if (!autoExpand) {\n textarea.style.height = 'auto';\n return;\n }\n\n const adjustHeight = () => {\n // necessary to reset the height to `auto` before calculating the new height\n textarea.style.height = 'auto';\n textarea.style.height = `${textarea.scrollHeight}px`;\n };\n\n adjustHeight();\n textarea.addEventListener('input', adjustHeight);\n textarea.addEventListener('resize', adjustHeight);\n window.addEventListener('resize', adjustHeight);\n\n return () => {\n textarea.removeEventListener('input', adjustHeight);\n textarea.removeEventListener('resize', adjustHeight);\n window.removeEventListener('resize', adjustHeight);\n };\n }, [id, autoExpand]);\n}\n","export const textareaVariants = {\n base: '',\n 'left-line':\n 'border-l border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-destructive not-disabled:data-success:border-success',\n outline:\n 'border border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-destructive not-disabled:data-success:border-success',\n} as const;\nexport type TextareaVariant = keyof typeof textareaVariants;\n\nexport const roundedVariants = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'px-3 rounded-full',\n} as const;\nexport type TextareaRounded = keyof typeof roundedVariants;\n\nexport interface TextareaVariants {\n variant: TextareaVariant;\n rounded: TextareaRounded;\n}\n\nexport const textareaDefaults: TextareaVariants = {\n variant: 'outline',\n rounded: 'none',\n} as const;\n","import { Ref, useId } from 'react';\nimport { StatusHelpMessage } from '../../shared/forms';\nimport { join } from '../../utils';\nimport CharacterCount from './CharacterCount';\nimport { useAutoExpand } from './hooks';\nimport './styles.css';\nimport { roundedVariants, textareaDefaults, textareaVariants, TextareaVariants } from './variants';\n\ninterface TextareaProps extends Partial<TextareaVariants>, React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n ref?: Ref<HTMLTextAreaElement>;\n displayOnlyMode?: boolean;\n errorMessage?: string;\n successMessage?: string;\n hideResizeHandle?: boolean; // only works for Webkit browsers\n autoExpand?: boolean;\n characterLimit?: number;\n}\n\nexport default function Textarea({\n variant = textareaDefaults.variant,\n rounded,\n displayOnlyMode = false,\n errorMessage,\n successMessage,\n hideResizeHandle = false,\n autoExpand = false,\n characterLimit = 0,\n className,\n ...rest\n}: TextareaProps) {\n const id = useId();\n useAutoExpand(id, autoExpand || displayOnlyMode);\n\n // Default `round` of `md` for `outline` variant\n let adjustedRound = rounded;\n if (variant === 'outline' && !rounded) {\n adjustedRound = 'md';\n }\n adjustedRound = adjustedRound || textareaDefaults.rounded;\n\n let adjustedHideResizeHandle = hideResizeHandle;\n if (displayOnlyMode || (variant === 'left-line' && !hideResizeHandle)) {\n adjustedHideResizeHandle = true;\n }\n\n const baseClasses =\n 'appearance-none w-full focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed placeholder:text-muted/70 hide-number-input-arrows transition-all';\n\n const inputClasses = join(\n baseClasses,\n !displayOnlyMode && textareaVariants[variant],\n !displayOnlyMode && roundedVariants[adjustedRound],\n !displayOnlyMode && 'px-2 py-1',\n displayOnlyMode && 'pointer-events-none',\n adjustedHideResizeHandle && 'no-resize-handle',\n\n className\n );\n\n return (\n <div className={join('-space-y-1.5', displayOnlyMode && 'cursor-text')}>\n <textarea\n {...rest}\n id={id}\n aria-disabled={rest.disabled}\n readOnly={displayOnlyMode}\n aria-readonly={displayOnlyMode || rest['aria-readonly']}\n style={{\n resize: autoExpand ? 'none' : undefined,\n }}\n className={inputClasses}\n />\n {characterLimit > 0 && <CharacterCount elementId={id} maxLength={characterLimit} />}\n {!displayOnlyMode && <StatusHelpMessage elementId={id} type='error' message={errorMessage} />}\n {!displayOnlyMode && <StatusHelpMessage elementId={id} type='success' message={successMessage} />}\n </div>\n );\n}\n","export const sizeVariants = {\n sm: {\n container: 'h-5 min-w-9 w-9',\n thumb: 'h-4 w-4',\n translate: 'translate-x-4',\n },\n md: {\n container: 'h-6 min-w-11 w-11',\n thumb: 'h-5 w-5',\n translate: 'translate-x-5',\n },\n lg: {\n container: 'h-7 min-w-13 w-13',\n thumb: 'h-6 w-6',\n translate: 'translate-x-6',\n },\n};\nexport type ToggleSize = keyof typeof sizeVariants;\n\nexport interface ToggleBackgroundClasses {\n unchecked?: string;\n checked?: string;\n}\n\nexport const variantStyles: Record<ToggleVariant, ToggleBackgroundClasses> = {\n default: {\n unchecked: 'bg-muted',\n checked: 'bg-primary',\n },\n success: {\n unchecked: 'bg-muted',\n checked: 'bg-success',\n },\n destructive: {\n unchecked: 'bg-muted',\n checked: 'bg-destructive',\n },\n};\nexport type ToggleVariant = 'default' | 'success' | 'destructive';\n\nexport interface ToggleVariants {\n variant: ToggleVariant;\n size: ToggleSize;\n}\n\nexport const toggleDefaults: ToggleVariants = {\n variant: 'default',\n size: 'md',\n} as const;\n","import React, { Ref, useEffect, useId, useMemo, useState } from 'react';\nimport { join } from '../../utils';\nimport {\n sizeVariants,\n ToggleBackgroundClasses,\n toggleDefaults,\n ToggleSize,\n ToggleVariant,\n variantStyles,\n} from './variants';\n\nexport interface ToggleProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n ref?: Ref<HTMLButtonElement>;\n size?: ToggleSize;\n variant?: ToggleVariant;\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n disabled?: boolean;\n thumbClassName?: string;\n backgroundClassNames?: ToggleBackgroundClasses;\n}\n\nexport default function Toggle({\n ref,\n id,\n size = toggleDefaults.size,\n variant = toggleDefaults.variant,\n checked,\n onCheckedChange,\n disabled = false,\n className,\n thumbClassName,\n backgroundClassNames,\n ...props\n}: ToggleProps) {\n const generatedId = useId();\n const toggleId = useMemo(() => id || `toggle-${generatedId}`, [id, generatedId]);\n const [isChecked, setIsChecked] = useState(checked);\n\n useEffect(() => {\n setIsChecked(checked);\n }, [checked]);\n\n const handleToggle = () => {\n if (!disabled) {\n const newChecked = !isChecked;\n\n if (checked === undefined) {\n // Only update state if the toggle is uncontrolled\n setIsChecked(newChecked);\n }\n onCheckedChange?.(newChecked);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n handleToggle();\n }\n };\n\n const sizeConfig = sizeVariants[size];\n const variantConfig = variantStyles[variant];\n\n const toggleClasses = join(\n // Base styles\n 'relative inline-flex items-center rounded-full transition-all duration-200 ease-in-out',\n 'focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2',\n // Size\n sizeConfig.container,\n // Variant and state\n isChecked\n ? backgroundClassNames?.checked || variantConfig.checked\n : backgroundClassNames?.unchecked || variantConfig.unchecked,\n // Disabled state\n disabled && 'opacity-50 cursor-not-allowed',\n !disabled && 'cursor-pointer',\n className\n );\n\n const thumbClasses = join(\n // Base thumb styles\n 'absolute left-0.5 top-1/2 -translate-y-1/2 rounded-full bg-white shadow-sm transition-transform duration-200 ease-in-out',\n // Size\n sizeConfig.thumb,\n // Position based on state\n isChecked && sizeConfig.translate,\n thumbClassName\n );\n\n return (\n <button\n ref={ref}\n id={toggleId}\n type='button'\n role='switch'\n tabIndex={0}\n aria-checked={isChecked}\n aria-disabled={disabled}\n disabled={disabled}\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n className={toggleClasses}\n {...props}\n >\n <span className={thumbClasses} />\n <span className='sr-only'>{isChecked ? 'Enabled' : 'Disabled'}</span>\n </button>\n );\n}\n","import { useCallback, useEffect, useRef } from 'react';\nimport { TooltipPlacement, TooltipPosition } from './Tooltip';\n\nexport const VIEWPORT_PADDING = 8; // Padding from viewport edges\nexport const TOOLTIP_OFFSET = 4; // Distance from target element\nexport const ARROW_SIZE = 6; // Size of the arrow\n\n/**\n * Calculates the optimal position for a tooltip based on the target element and viewport constraints.\n * Automatically adjusts placement if the preferred position would be out of bounds.\n */\nexport function useCalculatePosition(placement: TooltipPlacement) {\n const calculatePosition = useCallback(\n (targetElement: HTMLElement, tooltipElement: HTMLElement): TooltipPosition => {\n const targetRect = targetElement.getBoundingClientRect();\n const tooltipRect = tooltipElement.getBoundingClientRect();\n const viewport = {\n width: window.innerWidth,\n height: window.innerHeight,\n };\n\n const isOutOfBounds = (x: number, y: number, width: number, height: number) => {\n return x < 0 || y < 0 || x + width > viewport.width || y + height > viewport.height;\n };\n\n // Calculate positions for all placements\n const positions = {\n top: {\n x: targetRect.left + targetRect.width / 2 - tooltipRect.width / 2,\n y: targetRect.top - tooltipRect.height - TOOLTIP_OFFSET,\n arrow: {\n x: tooltipRect.width / 2 - ARROW_SIZE,\n y: tooltipRect.height,\n },\n },\n bottom: {\n x: targetRect.left + targetRect.width / 2 - tooltipRect.width / 2,\n y: targetRect.bottom + TOOLTIP_OFFSET,\n arrow: {\n x: tooltipRect.width / 2 - ARROW_SIZE,\n y: -ARROW_SIZE,\n },\n },\n left: {\n x: targetRect.left - tooltipRect.width - TOOLTIP_OFFSET,\n y: targetRect.top + targetRect.height / 2 - tooltipRect.height / 2,\n arrow: {\n x: tooltipRect.width,\n y: tooltipRect.height / 2 - ARROW_SIZE,\n },\n },\n right: {\n x: targetRect.right + TOOLTIP_OFFSET,\n y: targetRect.top + targetRect.height / 2 - tooltipRect.height / 2,\n arrow: {\n x: -ARROW_SIZE,\n y: tooltipRect.height / 2 - ARROW_SIZE,\n },\n },\n };\n\n // Determine the best placement, starting with the preferred one\n let bestPlacement = placement;\n let bestPosition = positions[placement];\n\n // Check if preferred placement is out of bounds\n if (isOutOfBounds(bestPosition.x, bestPosition.y, tooltipRect.width, tooltipRect.height)) {\n // Try opposite placement first\n const oppositePlacement: Record<TooltipPlacement, TooltipPlacement> = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n };\n\n const oppositePos = positions[oppositePlacement[placement]];\n if (!isOutOfBounds(oppositePos.x, oppositePos.y, tooltipRect.width, tooltipRect.height)) {\n bestPlacement = oppositePlacement[placement];\n bestPosition = oppositePos;\n } else {\n // Try all other placements\n const otherPlacements = (['top', 'bottom', 'left', 'right'] as TooltipPlacement[]).filter(\n (p) => p !== placement && p !== oppositePlacement[placement]\n );\n\n for (const p of otherPlacements) {\n const pos = positions[p];\n if (!isOutOfBounds(pos.x, pos.y, tooltipRect.width, tooltipRect.height)) {\n bestPlacement = p;\n bestPosition = pos;\n break;\n }\n }\n }\n }\n\n // Adjust position to stay within viewport bounds\n bestPosition.x = Math.max(\n VIEWPORT_PADDING,\n Math.min(bestPosition.x, viewport.width - tooltipRect.width - VIEWPORT_PADDING)\n );\n bestPosition.y = Math.max(\n VIEWPORT_PADDING,\n Math.min(bestPosition.y, viewport.height - tooltipRect.height - VIEWPORT_PADDING)\n );\n\n // Adjust arrow position based on the tooltip adjustment\n const targetCenter = {\n x: targetRect.left + targetRect.width / 2,\n y: targetRect.top + targetRect.height / 2,\n };\n\n if (bestPlacement === 'top' || bestPlacement === 'bottom') {\n bestPosition.arrow.x = Math.max(\n ARROW_SIZE,\n Math.min(targetCenter.x - bestPosition.x - ARROW_SIZE, tooltipRect.width - ARROW_SIZE * 2)\n );\n } else {\n bestPosition.arrow.y = Math.max(\n ARROW_SIZE,\n Math.min(targetCenter.y - bestPosition.y - ARROW_SIZE, tooltipRect.height - ARROW_SIZE * 2)\n );\n }\n\n return {\n ...bestPosition,\n placement: bestPlacement,\n };\n },\n [placement]\n );\n\n return { calculatePosition };\n}\n\n/**\n * Manages tooltip positioning logic including refs, position updates, and resize handling.\n * Automatically updates position when the window is resized.\n */\nexport function useTooltipPosition(\n calculatePosition: (target: HTMLElement, tooltip: HTMLElement) => TooltipPosition,\n shouldRender: boolean,\n setPosition: (position: TooltipPosition | null) => void\n) {\n const triggerRef = useRef<HTMLElement>(null);\n const tooltipRef = useRef<HTMLDivElement>(null);\n\n const updatePosition = useCallback(() => {\n if (!triggerRef.current || !tooltipRef.current) return;\n\n const newPosition = calculatePosition(triggerRef.current, tooltipRef.current);\n setPosition(newPosition);\n }, [calculatePosition, setPosition]);\n\n // Update position on resize\n useEffect(() => {\n if (!shouldRender) return;\n\n const handleUpdate = () => updatePosition();\n\n window.addEventListener('resize', handleUpdate);\n\n return () => {\n window.removeEventListener('resize', handleUpdate);\n };\n }, [shouldRender, updatePosition]);\n\n return {\n triggerRef,\n tooltipRef,\n updatePosition,\n };\n}\n\n/**\n * Manages tooltip show/hide events with delay handling and hover state coordination.\n * Handles timeout cleanup, delayed showing/hiding, and hover state transitions to prevent\n * flickering when moving between trigger and tooltip elements.\n */\nexport function useTooltipEvents(\n disabled: boolean,\n delay: number,\n setShouldRender: (shouldRender: boolean) => void,\n setIsVisible: (isVisible: boolean) => void,\n updatePosition: () => void,\n isHoveringTrigger: boolean,\n isHoveringTooltip: boolean,\n isFocused: boolean,\n isVisible: boolean\n) {\n const timeoutRef = useRef<number | null>(null);\n\n const showTooltip = useCallback(() => {\n if (disabled) return;\n\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = window.setTimeout(() => {\n setShouldRender(true);\n // Small delay to ensure DOM is updated before calculating position\n requestAnimationFrame(() => {\n updatePosition();\n setIsVisible(true);\n });\n }, delay);\n }, [disabled, delay, setShouldRender, updatePosition, setIsVisible]);\n\n const hideTooltip = useCallback(\n (forceHide = false) => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n if (forceHide) {\n setIsVisible(false);\n setTimeout(() => setShouldRender(false), 150);\n return;\n }\n\n // Small delay to allow moving from trigger to tooltip\n timeoutRef.current = window.setTimeout(() => {\n setIsVisible(false);\n setTimeout(() => setShouldRender(false), 150);\n }, 100);\n },\n [setIsVisible, setShouldRender]\n );\n\n // Handle hover state changes\n useEffect(() => {\n if (!isHoveringTrigger && !isHoveringTooltip && !isFocused && isVisible) {\n // Neither trigger nor tooltip is being hovered/focused, hide the tooltip\n hideTooltip();\n }\n }, [isHoveringTrigger, isHoveringTooltip, isFocused, isVisible, hideTooltip]);\n\n // Cleanup timeout on unmount\n useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n return {\n showTooltip,\n hideTooltip,\n timeoutRef,\n };\n}\n","import React, { useId, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { join } from '../../utils';\nimport { useCalculatePosition, useTooltipEvents, useTooltipPosition } from './hooks';\n\nexport type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right';\n\nexport interface TooltipProps {\n id?: string;\n children: React.ReactElement;\n message: React.ReactNode;\n placement?: TooltipPlacement;\n disabled?: boolean;\n delay?: number;\n className?: string;\n arrowClassName?: string;\n}\n\nexport interface TooltipPosition {\n x: number;\n y: number;\n placement: TooltipPlacement;\n arrow: {\n x: number;\n y: number;\n };\n}\n\nexport function Tooltip({\n id,\n children,\n message,\n placement = 'top',\n disabled = false,\n delay = 200,\n className,\n}: TooltipProps) {\n const [isVisible, setIsVisible] = useState(false); // Controls visibility of the tooltip\n const [shouldRender, setShouldRender] = useState(false); // Controls whether the tooltip is rendered in the DOM\n const [position, setPosition] = useState<TooltipPosition | null>(null);\n const [isHoveringTrigger, setIsHoveringTrigger] = useState(false);\n const [isHoveringTooltip, setIsHoveringTooltip] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n const { calculatePosition } = useCalculatePosition(placement);\n const { triggerRef, tooltipRef, updatePosition } = useTooltipPosition(calculatePosition, shouldRender, setPosition);\n const { showTooltip, hideTooltip, timeoutRef } = useTooltipEvents(\n disabled,\n delay,\n setShouldRender,\n setIsVisible,\n updatePosition,\n isHoveringTrigger,\n isHoveringTooltip,\n isFocused,\n isVisible\n );\n\n const reactId = useId();\n const tooltipId = id ?? reactId;\n\n // const getArrowClasses = (arrowPlacement: TooltipPlacement) => {\n // const baseArrow = 'absolute w-0 h-0';\n // const arrowClasses = {\n // top: 'border-l-[6px] border-r-[6px] border-t-[6px] border-l-transparent border-r-transparent border-t-border',\n // bottom: 'border-l-[6px] border-r-[6px] border-b-[6px] border-l-transparent border-r-transparent border-b-border',\n // left: 'border-t-[6px] border-b-[6px] border-l-[6px] border-t-transparent border-b-transparent border-l-border',\n // right: 'border-t-[6px] border-b-[6px] border-r-[6px] border-t-transparent border-b-transparent border-r-border',\n // };\n\n // return join(baseArrow, arrowClasses[arrowPlacement], arrowClassName);\n // };\n\n return (\n <>\n {React.cloneElement(children, {\n ref: (node: HTMLElement | null) => {\n triggerRef.current = node;\n },\n onMouseEnter: () => {\n setIsHoveringTrigger(true);\n showTooltip();\n },\n onMouseLeave: () => {\n setIsHoveringTrigger(false);\n },\n onFocus: () => {\n setIsFocused(true);\n showTooltip();\n },\n onBlur: () => {\n setIsFocused(false);\n hideTooltip(true);\n },\n onKeyDown: (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n hideTooltip(true);\n }\n },\n 'aria-describedby': disabled ? undefined : tooltipId,\n } as Record<string, unknown>)}\n {shouldRender &&\n createPortal(\n <div\n ref={tooltipRef}\n id={tooltipId}\n role='tooltip'\n className={join(\n 'fixed z-50 px-2 py-1 text-sm rounded shadow-lg pointer-events-auto transition-all duration-150 ease-out',\n isVisible ? 'opacity-100' : 'opacity-0',\n className\n )}\n style={position ? { left: position.x, top: position.y } : { opacity: 0 }}\n onMouseEnter={() => {\n setIsHoveringTooltip(true);\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n }}\n onMouseLeave={() => {\n setIsHoveringTooltip(false);\n }}\n >\n {message}\n {/* {position && (\n <div\n className={getArrowClasses(position.placement)}\n style={{ left: position.arrow.x, top: position.arrow.y }}\n />\n )} */}\n </div>,\n document.body\n )}\n </>\n );\n}\n\nexport default Tooltip;\n"],"names":["AccordionItem","id","title","content","children","className","disabled","isOpen","onToggle","triggerClassName","bodyClassName","fallbackId","useId","itemId","headerId","panelId","handleToggle","handleKeyDown","e","jsxs","join","jsx","ChevronDown","Accordion","items","itemClassName","allowMultiple","defaultOpenItems","triggersClassName","bodiesClassName","groupId","groupName","openItems","setOpenItems","useState","toggleItem","prev","newOpenItems","getItemId","index","isItemOpen","item","React","child","createElement","LoadingDots","activeIndex","setActiveIndex","useEffect","interval","prevIndex","buttonVariants","sizeVariants","roundedVariants","buttonDefaults","Button","variant","size","rounded","loading","linkTo","linkProps","type","rest","adjustedSize","buttonClasses","useFilledBackgroundColor","filledBackgroundColor","setFilledBackgroundColor","getFirstNonTransparentBackgroundColor","useCallback","element","currentElement","color","backgroundColor","checkbox","Checkbox","ref","filled","checked","onCheckedChange","props","generatedId","checkboxId","useMemo","parentBackgroundColor","isChecked","setIsChecked","handleChange","handleOnKeyDown","checkboxClasses","Check","Clickable","onButtonClick","buttonProps","StatusHelpMessage","elementId","message","ExclamationTriangle","CheckCircled","inputVariants","inputDefaults","Input","displayOnlyMode","errorMessage","successMessage","showPassword","setShowPassword","adjustedRound","inputClasses","EyeOpened","EyeClosed","Label","display","width","required","helpMessage","suffix","htmlFor","labelClasses","helpId","QuestionMarkCircled","useAnimationOpenClose","show","setShow","shouldRender","setShouldRender","useDocumentChanges","onClose","handleEscape","useHandleFocus","modalId","previousActiveElement","useRef","focusAppropriateElement","modalElement","modalActions","focusableElements","allBesidesCloseButton","el","Modal","contentOnly","overlayClassName","hideCloseButton","actions","disableCloseOnOverlayClick","ariaLabelledBy","ariaDescribedBy","titleId","renderTitle","renderActions","action","label","Fragment","createPortal","X","RadioInput","onChange","name","baseClasses","handleClick","radioClasses","RadioGroupItem","value","isSelected","hideInput","description","useRadioFocus","selectedOptionIndex","focusedIndex","setFocusedIndex","clickedIndex","setClickedIndex","isMouseDown","setIsMouseDown","handleClicked","options","target","_a","setInitialFocus","indexToFocus","handleFocusPreceding","currentIndex","previousIndex","handleKeyboardNavigation","option","newIndex","getRadioOptions","radioGroup","handleFocus","handleMouseDown","handleMouseUp","RadioGroup","childrenClassName","hideInputs","processedOptions","acc","Slot","isValidElement","allProps","cloneElement","node","CharacterCount","maxLength","characterCount","setCharacterCount","textarea","updateCharacterCount","updatedCharacterCount","isError","useAutoExpand","autoExpand","adjustHeight","textareaVariants","textareaDefaults","Textarea","hideResizeHandle","characterLimit","adjustedHideResizeHandle","variantStyles","toggleDefaults","Toggle","thumbClassName","backgroundClassNames","toggleId","newChecked","sizeConfig","variantConfig","toggleClasses","thumbClasses","VIEWPORT_PADDING","TOOLTIP_OFFSET","ARROW_SIZE","useCalculatePosition","placement","targetElement","tooltipElement","targetRect","tooltipRect","viewport","isOutOfBounds","x","y","height","positions","bestPlacement","bestPosition","oppositePlacement","oppositePos","otherPlacements","pos","targetCenter","useTooltipPosition","calculatePosition","setPosition","triggerRef","tooltipRef","updatePosition","newPosition","handleUpdate","useTooltipEvents","delay","setIsVisible","isHoveringTrigger","isHoveringTooltip","isFocused","isVisible","timeoutRef","showTooltip","hideTooltip","forceHide","Tooltip","position","setIsHoveringTrigger","setIsHoveringTooltip","setIsFocused","reactId","tooltipId"],"mappings":"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"}
1
+ {"version":3,"file":"components.esm.js","sources":["../src/components/accordion/AccordionItem.tsx","../src/components/accordion/Accordion.tsx","../src/components/button/LoadingDots.tsx","../src/components/button/variants.ts","../src/components/button/Button.tsx","../src/components/carousel/hooks.ts","../src/components/carousel/useScreenSize.ts","../src/components/carousel/variants.ts","../src/components/carousel/Carousel.tsx","../src/components/checkbox/hooks.ts","../src/components/checkbox/Checkbox.tsx","../src/components/clickable/Clickable.tsx","../src/shared/forms/StatusHelpMessage.tsx","../src/components/input/variants.ts","../src/components/input/Input.tsx","../src/components/label/Label.tsx","../src/components/modal/hooks.ts","../src/components/modal/Modal.tsx","../src/components/pagination/variants.ts","../src/components/pagination/Pagination.tsx","../src/components/panel/hooks.ts","../src/components/panel/variants.ts","../src/components/panel/Panel.tsx","../src/components/radiogroup/RadioInput.tsx","../src/components/radiogroup/RadioGroupItem.tsx","../src/components/radiogroup/hooks.ts","../src/components/radiogroup/RadioGroup.tsx","../src/components/scroll-area/hooks.ts","../src/components/scroll-area/ScrollArea.tsx","../src/components/select/hooks.ts","../src/components/select/variants.ts","../src/components/select/Select.tsx","../src/components/separator/variants.ts","../src/components/separator/Separator.tsx","../src/components/skeleton/variants.ts","../src/components/skeleton/Skeleton.tsx","../src/components/slider/Slider.tsx","../src/components/slot/Slot.tsx","../src/components/tabs/hooks.ts","../src/components/tabs/Tabs.tsx","../src/components/tabs/TabsContent.tsx","../src/components/tabs/variants.ts","../src/components/tabs/TabsList.tsx","../src/components/tabs/TabsTrigger.tsx","../src/components/textarea/CharacterCount.tsx","../src/components/textarea/hooks.ts","../src/components/textarea/variants.ts","../src/components/textarea/Textarea.tsx","../src/components/toggle/variants.ts","../src/components/toggle/Toggle.tsx","../src/components/tooltip/hooks.ts","../src/components/tooltip/Tooltip.tsx"],"sourcesContent":["import { useId } from 'react';\nimport { ChevronDown } from '../../symbols';\nimport { join } from '../../utils';\nimport { AccordionOption } from './Accordion';\n\nexport interface AccordionItemProps extends Omit<AccordionOption, 'defaultOpen'> {\n children?: React.ReactNode;\n className?: string;\n isOpen?: boolean;\n onToggle?: () => void;\n triggerClassName?: string;\n bodyClassName?: string;\n}\n\nexport function AccordionItem({\n id,\n title,\n content,\n children,\n className = '',\n disabled = false,\n isOpen = false,\n onToggle,\n triggerClassName = '',\n bodyClassName = '',\n}: AccordionItemProps) {\n const fallbackId = useId();\n const itemId = id || `accordion-item-${fallbackId}`;\n const headerId = `${itemId}-header`;\n const panelId = `${itemId}-panel`;\n\n const handleToggle = () => {\n if (!disabled && onToggle) {\n onToggle();\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleToggle();\n }\n };\n\n return (\n <div className={join('border-b border-gray-200', disabled && 'opacity-60 cursor-not-allowed', className)}>\n <button\n id={headerId}\n type='button'\n className={join(\n 'w-full text-left py-3 px-4 flex justify-between items-center focus:outline focus:outline-secondary',\n disabled ? 'cursor-not-allowed' : 'hover:bg-gray-50/10 cursor-pointer',\n triggerClassName\n )}\n aria-expanded={isOpen}\n aria-controls={panelId}\n disabled={disabled}\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n >\n <span>{title}</span>\n <span\n className={join(\n 'transform transition-transform duration-300 ease-linear',\n isOpen ? 'rotate-180' : 'rotate-0'\n )}\n aria-hidden='true'\n >\n <ChevronDown size={18} />\n </span>\n </button>\n\n <div\n id={panelId}\n role='region'\n aria-labelledby={headerId}\n className={join(\n 'transition-all duration-300 ease-linear px-4',\n isOpen ? 'max-h-96 opacity-100 overflow-auto py-3' : 'max-h-0 opacity-0 overflow-hidden',\n bodyClassName\n )}\n >\n {isOpen && (children || content)}\n </div>\n </div>\n );\n}\n","import React, { useId, useState } from 'react';\nimport { join } from '../../utils';\nimport { AccordionItem, AccordionItemProps } from './AccordionItem';\n\nexport interface AccordionOption {\n id?: string;\n title: React.ReactNode;\n content: React.ReactNode;\n disabled?: boolean;\n defaultOpen?: boolean;\n}\n\nexport interface AccordionProps {\n id?: string;\n items?: AccordionOption[];\n children?: React.ReactElement<AccordionItemProps>[] | React.ReactElement<AccordionItemProps>;\n className?: string;\n itemClassName?: string;\n allowMultiple?: boolean;\n defaultOpenItems?: string[];\n triggersClassName?: string;\n bodiesClassName?: string;\n}\n\nexport function Accordion({\n id,\n items = [],\n children,\n className = '',\n itemClassName = '',\n allowMultiple = false,\n defaultOpenItems = [],\n triggersClassName = '',\n bodiesClassName = '',\n}: AccordionProps) {\n const groupId = useId();\n const groupName = id || `accordion-group-${groupId}`;\n const [openItems, setOpenItems] = useState<Set<string>>(new Set(defaultOpenItems));\n\n const toggleItem = (itemId: string) => {\n setOpenItems((prev) => {\n const newOpenItems = new Set(prev);\n\n if (newOpenItems.has(itemId)) {\n newOpenItems.delete(itemId);\n } else {\n if (!allowMultiple) {\n newOpenItems.clear();\n }\n newOpenItems.add(itemId);\n }\n\n return newOpenItems;\n });\n };\n\n const getItemId = (index: number) => `${groupId}-item-${index}`;\n const isItemOpen = (itemId: string) => openItems.has(itemId);\n\n return (\n <div id={groupName} className={className}>\n {/* Render from items prop */}\n {items.length > 0 &&\n items.map((item, index) => {\n const itemId = item.id || getItemId(index);\n return (\n <AccordionItem\n key={itemId}\n id={itemId}\n title={item.title}\n content={item.content}\n disabled={item.disabled}\n isOpen={isItemOpen(itemId)}\n onToggle={() => toggleItem(itemId)}\n className={itemClassName}\n triggerClassName={triggersClassName}\n bodyClassName={bodiesClassName}\n />\n );\n })}\n\n {/* Render AccordionItem components */}\n {items.length === 0 &&\n children &&\n React.Children.map(children, (child, index) => {\n if (React.isValidElement<AccordionItemProps>(child) && child.type === AccordionItem) {\n const itemId = child.props.id || getItemId(index);\n return (\n <AccordionItem\n {...child.props}\n key={itemId}\n id={itemId}\n className={join(itemClassName, child.props.className)}\n isOpen={isItemOpen(itemId)}\n onToggle={() => toggleItem(itemId)}\n triggerClassName={join(triggersClassName, child.props.triggerClassName)}\n bodyClassName={join(bodiesClassName, child.props.bodyClassName)}\n />\n );\n }\n return null;\n })}\n </div>\n );\n}\n","import { useEffect, useState } from 'react';\nimport { join } from '../../utils';\n\nexport default function LoadingDots() {\n const [activeIndex, setActiveIndex] = useState(0);\n\n useEffect(() => {\n const interval = setInterval(() => {\n setActiveIndex((prevIndex) => (prevIndex + 1) % 3);\n }, 500);\n\n return () => clearInterval(interval);\n }, []);\n\n return (\n <div className='absolute inset-0 inline-flex items-center justify-center gap-x-2 align-middle'>\n {[0, 1, 2].map((index) => (\n <div\n key={index}\n className={join(\n 'rounded-full transition-all duration-500 ease-in-out size-[0.35em] bg-current',\n activeIndex === index && 'transform -translate-y-1'\n )}\n />\n ))}\n </div>\n );\n}\n","export const buttonVariants = {\n base: '',\n primary: 'bg-primary text-primary-foreground hover:bg-primary/85 disabled:bg-muted disabled:text-muted-foreground',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/85 disabled:bg-muted/80 disabled:text-muted-foreground/80',\n tertiary: 'text-primary hover:text-primary-foreground disabled:text-muted',\n outline: 'border border-primary text-primary hover:border-primary-foreground hover:text-primary-foreground disabled:border-muted disabled:text-muted',\n link: 'underline-offset-4 hover:underline disabled:underline disabled:text-muted',\n destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/85 disabled:bg-muted disabled:text-muted-foreground',\n} as const;\nexport type ButtonVariant = keyof typeof buttonVariants;\n\nexport const sizeVariants = {\n stripped: '',\n fitted: 'size-fit',\n sm: 'px-2 py-1 text-sm',\n md: 'px-4 py-2 text-base',\n lg: 'px-6 py-3 text-lg',\n icon: 'p-1 w-fit aspect-square',\n full: 'p-2 w-full',\n} as const;\nexport type ButtonSize = keyof typeof sizeVariants;\n\nexport const roundedVariants = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'rounded-full',\n} as const;\nexport type ButtonRounded = keyof typeof roundedVariants;\n\nexport interface ButtonVariants {\n variant: ButtonVariant;\n size: ButtonSize;\n rounded: ButtonRounded;\n}\n\nexport const buttonDefaults: ButtonVariants = {\n variant: 'primary',\n size: 'md',\n rounded: 'md',\n} as const;\n","// Button.tsx\nimport { ButtonHTMLAttributes, Ref } from 'react';\nimport { join } from '../../utils';\nimport LoadingDots from './LoadingDots';\nimport { ButtonSize, ButtonVariants, buttonDefaults, buttonVariants, roundedVariants, sizeVariants } from './variants';\n\nexport interface ButtonProps extends Partial<ButtonVariants>, ButtonHTMLAttributes<HTMLButtonElement> {\n ref?: Ref<HTMLButtonElement>;\n loading?: boolean;\n linkTo?: string;\n linkProps?: Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'href'>;\n}\n\nexport default function Button({\n variant = buttonDefaults.variant,\n size,\n rounded = buttonDefaults.rounded,\n loading,\n linkTo,\n linkProps,\n type = 'button',\n className,\n ...rest\n}: ButtonProps) {\n let adjustedSize: ButtonSize;\n if (variant === 'link' && !size) {\n // default links to fitted size\n adjustedSize = 'fitted';\n } else {\n adjustedSize = size || buttonDefaults.size;\n }\n\n const baseClasses =\n 'appearance-none focus:outline-none focus:ring not-disabled:hover:cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed transition-all';\n\n const buttonClasses = join(\n baseClasses,\n buttonVariants[variant],\n sizeVariants[adjustedSize],\n roundedVariants[rounded],\n loading && 'relative pointer-events-none',\n linkTo && 'relative',\n className\n );\n\n return (\n <button\n {...rest}\n role={linkTo ? 'link' : rest.role}\n aria-label={rest['aria-label'] || linkProps?.['aria-label']}\n aria-description={rest['aria-description'] || linkProps?.['aria-description']}\n aria-disabled={rest.disabled || loading}\n aria-busy={loading}\n type={type}\n className={buttonClasses}\n >\n {loading && <LoadingDots />}\n <span className={join(loading && 'invisible')}>{rest.children}</span>\n\n {linkTo && !rest.disabled && (\n <a\n {...linkProps}\n aria-hidden={true} // Hide from screen readers since the button is already accessible\n href={linkTo}\n rel={linkProps?.rel || 'noreferrer'}\n className='absolute inset-0'\n />\n )}\n </button>\n );\n}\n","import { useState, useEffect, useRef, useCallback } from 'react';\n\nexport interface UseCarouselProps {\n totalItems: number;\n itemsToShow: number;\n infinite: boolean;\n autoScroll: boolean;\n scrollInterval: number;\n pauseScrollOnHover: boolean;\n currentIndex?: number;\n onIndexChange?: (index: number) => void;\n}\n\nexport function useCarousel({\n totalItems,\n itemsToShow,\n infinite,\n autoScroll,\n scrollInterval,\n pauseScrollOnHover,\n currentIndex,\n onIndexChange,\n}: UseCarouselProps) {\n const [currentSlide, setCurrentSlide] = useState(currentIndex || 0);\n const [isHovered, setIsHovered] = useState(false);\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n const maxSlides = Math.ceil(totalItems / itemsToShow);\n const canGoPrev = infinite || currentSlide > 0;\n const canGoNext = infinite || currentSlide < maxSlides - 1;\n\n const goToSlide = useCallback(\n (index: number) => {\n const clampedIndex = Math.max(0, Math.min(index, maxSlides - 1));\n setCurrentSlide(clampedIndex);\n onIndexChange?.(clampedIndex);\n },\n [maxSlides, onIndexChange]\n );\n\n const goToPrev = useCallback(() => {\n if (canGoPrev) {\n const newIndex = currentSlide === 0 && infinite ? maxSlides - 1 : currentSlide - 1;\n goToSlide(newIndex);\n }\n }, [currentSlide, canGoPrev, infinite, maxSlides, goToSlide]);\n\n const goToNext = useCallback(() => {\n if (canGoNext) {\n const newIndex = currentSlide === maxSlides - 1 && infinite ? 0 : currentSlide + 1;\n goToSlide(newIndex);\n }\n }, [currentSlide, canGoNext, infinite, maxSlides, goToSlide]);\n\n // Handle controlled mode\n useEffect(() => {\n if (currentIndex !== undefined && currentIndex !== currentSlide) {\n setCurrentSlide(currentIndex);\n }\n }, [currentIndex, currentSlide]);\n\n // Auto scroll functionality\n useEffect(() => {\n if (!autoScroll) return;\n\n const startInterval = () => {\n intervalRef.current = setInterval(() => {\n if (pauseScrollOnHover && isHovered) return;\n\n goToNext();\n }, scrollInterval);\n };\n\n const stopInterval = () => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n };\n\n if (!isHovered || !pauseScrollOnHover) {\n startInterval();\n } else {\n stopInterval();\n }\n\n return stopInterval;\n }, [autoScroll, scrollInterval, pauseScrollOnHover, isHovered, goToNext]);\n\n // Reset to first slide when # of items to show changes\n useEffect(() => {\n setCurrentSlide(0);\n }, [itemsToShow]);\n\n return {\n currentSlide,\n canGoPrev,\n canGoNext,\n goToPrev,\n goToNext,\n goToSlide,\n isHovered,\n setIsHovered,\n };\n}\n","import { useEffect, useState } from 'react';\n\n// Define Tailwind CSS breakpoints\nconst breakpoints = {\n xs: 0, // Smaller than `sm`\n sm: 640, // Tailwind's `sm` breakpoint: `@media (min-width: 640px)`\n md: 768, // Tailwind's `md` breakpoint: `@media (min-width: 768px)`\n lg: 1024, // Tailwind's `lg` breakpoint: `@media (min-width: 1024px)`\n xl: 1280, // Tailwind's `xl` breakpoint: `@media (min-width: 1280px)`\n '2xl': 1536, // Tailwind's `2xl` breakpoint: `@media (min-width: 1536px)`\n};\n\nexport type ScreenSize = keyof typeof breakpoints;\n\nexport default function useScreenSize() {\n const [screenSize, setScreenSize] = useState<ScreenSize>();\n const [screenWidth, setScreenWidth] = useState<number>(0);\n\n const getBreakpoint = (size: ScreenSize) => breakpoints[size];\n\n useEffect(() => {\n const getScreenSize = (width: number): ScreenSize => {\n if (width >= breakpoints['2xl']) return '2xl';\n if (width >= breakpoints['xl']) return 'xl';\n if (width >= breakpoints['lg']) return 'lg';\n if (width >= breakpoints['md']) return 'md';\n if (width >= breakpoints['sm']) return 'sm';\n return 'xs';\n };\n\n setScreenSize(getScreenSize(window.innerWidth));\n setScreenWidth(window.innerWidth);\n\n const handleResize = () => {\n setScreenSize(getScreenSize(window.innerWidth));\n setScreenWidth(window.innerWidth);\n };\n\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n }, []);\n\n return { screenSize, screenWidth, getBreakpoint };\n}\n","export const buttonSizeVariants = {\n sm: {\n button: 'h-6 w-6 text-xs',\n icon: 'size-3',\n },\n md: {\n button: 'h-8 w-8 text-sm',\n icon: 'size-4',\n },\n lg: {\n button: 'h-10 w-10 text-lg',\n icon: 'size-5',\n },\n};\n\nexport type ButtonSize = keyof typeof buttonSizeVariants;\n\nexport const buttonStyleVariants = {\n default: 'bg-accent text-accent-foreground hover:bg-accent-foreground hover:text-accent',\n outline: 'border border-border bg-background hover:bg-accent hover:text-accent-foreground hover:border-accent',\n ghost: 'hover:text-accent',\n};\n\nexport type ButtonStyle = keyof typeof buttonStyleVariants;\n\nexport const buttonPositionVariants = {\n aligned: {\n prev: 'absolute top-1/2 -translate-x-1/2 -translate-y-1/2 z-10',\n next: 'absolute right-0 top-1/2 translate-x-1/2 -translate-y-1/2 z-10',\n },\n exterior: {\n prev: 'absolute -left-10 top-1/2 -translate-y-1/2 z-10',\n next: 'absolute -right-10 top-1/2 -translate-y-1/2 z-10',\n },\n interior: {\n prev: 'absolute left-2 top-1/2 -translate-y-1/2 z-10',\n next: 'absolute right-2 top-1/2 -translate-y-1/2 z-10',\n },\n};\n\nexport type ButtonPosition = keyof typeof buttonPositionVariants;\n","import React, { useCallback, useMemo, useRef } from 'react';\nimport { join } from '../../utils';\nimport { useCarousel } from './hooks';\nimport useScreenSize, { ScreenSize } from './useScreenSize';\nimport {\n ButtonPosition,\n buttonPositionVariants,\n ButtonSize,\n buttonSizeVariants,\n ButtonStyle,\n buttonStyleVariants,\n} from './variants';\nimport { ChevronLeft, ChevronRight } from '../../symbols';\n\ninterface ButtonElementProps {\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n disabled?: boolean;\n className?: string;\n 'aria-label'?: string;\n 'data-carousel-prev'?: string;\n 'data-carousel-next'?: string;\n}\n\nexport interface CarouselProps {\n children: React.ReactNode;\n id?: string;\n ref?: React.Ref<HTMLDivElement>;\n className?: string;\n /** Enable automatic scrolling */\n autoScroll?: boolean;\n /** Interval in milliseconds for auto scroll */\n scrollInterval?: number;\n /** Pause auto scroll on hover */\n pauseScrollOnHover?: boolean;\n /** Manually control the current index */\n currentIndex?: number;\n /** Callback when index changes */\n onIndexChange?: (index: number) => void;\n /** Hide previous/next navigation buttons */\n hidePrevNext?: boolean;\n /** Hide dot indicators */\n hideDots?: boolean;\n /** Number of items to show at once, or breakpoint object mapping screen sizes to item counts */\n itemsToShow?: number | Partial<Record<ScreenSize, number>>;\n /** Size variant for navigation buttons */\n buttonSize?: ButtonSize;\n /** Style variant for navigation buttons */\n buttonVariant?: ButtonStyle;\n /** Position of navigation buttons relative to carousel */\n buttonPosition?: ButtonPosition;\n /** Enable infinite scrolling */\n infinite?: boolean;\n /** Custom previous button content */\n prevButton?: React.ReactNode;\n /** Custom next button content */\n nextButton?: React.ReactNode;\n /** Additional class names for carousel items */\n itemsClassName?: string;\n /** Additional class names for the carousel container */\n containerClassName?: string;\n /** Additional class names for the dot indicators */\n dotsClassName?: string;\n /** Gap between carousel items in pixels */\n gap?: number;\n}\n\nexport default function Carousel({\n children,\n id,\n ref,\n className,\n autoScroll = false,\n scrollInterval = 3000,\n pauseScrollOnHover = true,\n currentIndex,\n onIndexChange,\n hidePrevNext = false,\n hideDots = false,\n itemsToShow = 1,\n buttonSize = 'md',\n buttonVariant = 'default',\n buttonPosition = 'exterior',\n infinite = true,\n prevButton,\n nextButton,\n itemsClassName,\n containerClassName,\n dotsClassName,\n gap = 8,\n}: CarouselProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const childrenArray = React.Children.toArray(children).filter(React.isValidElement);\n const totalItems = childrenArray.length;\n const { screenSize } = useScreenSize();\n\n // Resolve the current itemsToShow based on screen size or use the number value\n const currentItemsToShow = useMemo(() => {\n if (typeof itemsToShow === 'number') {\n return itemsToShow;\n }\n\n if (typeof itemsToShow === 'object' && itemsToShow && screenSize) {\n // Start from current screen size and work down to find a defined value\n const breakpointOrder: Array<ScreenSize> = ['2xl', 'xl', 'lg', 'md', 'sm', 'xs'];\n const currentIndex = breakpointOrder.indexOf(screenSize);\n\n for (let i = currentIndex; i < breakpointOrder.length; i++) {\n const breakpoint = breakpointOrder[i];\n if (itemsToShow[breakpoint] !== undefined) {\n return itemsToShow[breakpoint]!;\n }\n }\n }\n\n return 1; // Default fallback\n }, [itemsToShow, screenSize]);\n\n const { currentSlide, canGoPrev, canGoNext, goToPrev, goToNext, goToSlide, setIsHovered } = useCarousel({\n totalItems,\n itemsToShow: currentItemsToShow,\n infinite,\n autoScroll,\n scrollInterval,\n pauseScrollOnHover,\n currentIndex,\n onIndexChange,\n });\n\n const getSlideItemStyles = useCallback(\n (pos: number) => {\n // If only showing one item\n if (currentItemsToShow === 1) {\n return { leftWidth: 0, rightWidth: 0, widthReduction: 0 };\n }\n\n const widthReduction = (gap * (currentItemsToShow - 1)) / currentItemsToShow;\n // If item is first element of a slide\n if (pos % currentItemsToShow === 0) {\n return { leftWidth: 0, rightWidth: gap / 2, widthReduction };\n }\n\n // If item is last element of a slide\n if (pos % currentItemsToShow === currentItemsToShow - 1) {\n return { leftWidth: gap / 2, rightWidth: 0, widthReduction };\n }\n\n // If item is a middle element of a slide\n return { leftWidth: gap / 2, rightWidth: gap / 2, widthReduction };\n },\n [currentItemsToShow, gap]\n );\n\n const handlePrevClick = () => {\n goToPrev();\n };\n\n const handleNextClick = () => {\n goToNext();\n };\n\n const handleMouseEnter = () => {\n if (pauseScrollOnHover) {\n setIsHovered(true);\n }\n };\n\n const handleMouseLeave = () => {\n if (pauseScrollOnHover) {\n setIsHovered(false);\n }\n };\n\n const translateX = -(currentSlide * (100 / totalItems) * currentItemsToShow);\n\n // Base styles for carousel buttons\n const baseButtonStyles = join(\n 'inline-flex items-center justify-center rounded-md font-medium transition-all focus-visible:outline-none focus-visible:ring focus-visible:ring-ring disabled:pointer-events-none',\n buttonPosition === 'aligned' ? 'disabled:opacity-90' : 'disabled:opacity-50'\n );\n\n return (\n <div className={join('relative', className)} data-carousel-wrapper='true'>\n {/* Navigation Buttons - Previous */}\n {!hidePrevNext && (\n <>\n {prevButton ? (\n React.cloneElement(\n prevButton as React.ReactElement,\n {\n onClick: handlePrevClick,\n disabled: !canGoPrev,\n className: join(\n (prevButton as React.ReactElement<{ className?: string }>).props?.className || '',\n buttonPositionVariants[buttonPosition].prev\n ),\n role: 'button',\n 'aria-disabled': !canGoPrev,\n 'aria-label': 'Previous slide',\n 'data-carousel-prev': 'true',\n } as ButtonElementProps\n )\n ) : (\n <button\n type='button'\n onClick={handlePrevClick}\n disabled={!canGoPrev}\n className={join(\n baseButtonStyles,\n buttonSizeVariants[buttonSize].button,\n buttonStyleVariants[buttonVariant],\n buttonPositionVariants[buttonPosition].prev\n )}\n aria-disabled={!canGoPrev}\n aria-label='Previous slide'\n data-carousel-prev='true'\n >\n <ChevronLeft className={buttonSizeVariants[buttonSize].icon} />\n </button>\n )}\n </>\n )}\n\n <div\n id={id}\n ref={ref}\n className={join('relative overflow-hidden', containerClassName)}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n data-carousel='true'\n data-current-index={currentSlide}\n data-items-to-show={currentItemsToShow}\n data-auto-scroll={autoScroll}\n data-button-position={buttonPosition}\n >\n {/* Carousel Track */}\n <div\n ref={containerRef}\n className='flex transition-transform duration-300 ease-in-out'\n style={{\n transform: `translateX(${translateX}%)`,\n width: `${(totalItems / currentItemsToShow) * 100}%`,\n }}\n >\n {childrenArray.map((child, index) => {\n const { leftWidth, rightWidth, widthReduction } = getSlideItemStyles(index);\n return (\n <div\n key={index}\n className={join('flex-shrink-0', itemsClassName)}\n style={{\n width: `calc(${100 / totalItems}% - ${widthReduction}px)`,\n marginRight: rightWidth > 0 ? `${rightWidth}px` : undefined,\n marginLeft: leftWidth > 0 ? `${leftWidth}px` : undefined,\n }}\n data-slide-index={index}\n >\n {child}\n </div>\n );\n })}\n </div>\n\n {/* Dots Indicator */}\n {!hideDots && (\n <div className='absolute bottom-4 left-1/2 -translate-x-1/2 flex space-x-2'>\n {Array.from({ length: Math.ceil(totalItems / currentItemsToShow) }).map((_, index) => (\n <button\n key={index}\n type='button'\n onClick={() => goToSlide(index)}\n className={join(\n 'w-2 h-2 rounded-full transition-colors duration-200',\n index === currentSlide ? 'bg-accent' : 'bg-muted hover:bg-muted-foreground/50',\n dotsClassName\n )}\n aria-label={`Go to slide ${index + 1}`}\n data-carousel-dot={index}\n />\n ))}\n </div>\n )}\n </div>\n\n {/* Navigation Buttons - Next */}\n {!hidePrevNext && (\n <>\n {nextButton ? (\n React.cloneElement(\n nextButton as React.ReactElement,\n {\n onClick: handleNextClick,\n disabled: !canGoNext,\n className: join(\n (nextButton as React.ReactElement<{ className?: string }>).props?.className || '',\n buttonPositionVariants[buttonPosition].next\n ),\n role: 'button',\n 'aria-disabled': !canGoNext,\n 'aria-label': 'Next slide',\n 'data-carousel-next': 'true',\n } as ButtonElementProps\n )\n ) : (\n <button\n type='button'\n onClick={handleNextClick}\n disabled={!canGoNext}\n className={join(\n baseButtonStyles,\n buttonSizeVariants[buttonSize].button,\n buttonStyleVariants[buttonVariant],\n buttonPositionVariants[buttonPosition].next\n )}\n aria-disabled={!canGoNext}\n aria-label='Next slide'\n data-carousel-next='true'\n >\n <ChevronRight className={buttonSizeVariants[buttonSize].icon} />\n </button>\n )}\n </>\n )}\n </div>\n );\n}\n","import { useCallback, useEffect, useState } from 'react';\n\nexport function useFilledBackgroundColor(id: string) {\n const [filledBackgroundColor, setFilledBackgroundColor] = useState<string>('');\n\n const getFirstNonTransparentBackgroundColor = useCallback((element: Element | null): string => {\n let currentElement = element;\n let color = '';\n while (currentElement && !color) {\n const backgroundColor = window.getComputedStyle(currentElement).backgroundColor;\n if (backgroundColor && backgroundColor !== 'transparent' && backgroundColor !== 'rgba(0, 0, 0, 0)') {\n color = backgroundColor;\n }\n currentElement = currentElement.parentElement;\n }\n return color || 'transparent';\n }, []);\n\n useEffect(() => {\n const checkbox = document.getElementById(id);\n if (checkbox) {\n const backgroundColor = getFirstNonTransparentBackgroundColor(checkbox.parentElement);\n setFilledBackgroundColor(backgroundColor);\n }\n }, [id, getFirstNonTransparentBackgroundColor]);\n\n return filledBackgroundColor;\n}\n","import React, { Ref, useEffect, useId, useMemo, useState } from 'react';\nimport Check from '../../symbols/Check';\nimport { join } from '../../utils';\nimport { useFilledBackgroundColor } from './hooks';\n\nexport interface CheckboxProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n ref?: Ref<HTMLButtonElement>;\n size?: number;\n color?: string; // can be adjusted with tailwindcss by using `text-<color>`\n filled?: boolean;\n rounded?: boolean;\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nexport default function Checkbox({\n ref,\n id,\n size = 20,\n color,\n filled = false,\n rounded = true,\n checked = false,\n onCheckedChange,\n disabled,\n className = '',\n ...props\n}: CheckboxProps) {\n const generatedId = useId();\n const checkboxId = useMemo(() => id || `checkbox-${generatedId}`, [id, generatedId]);\n const parentBackgroundColor = useFilledBackgroundColor(checkboxId);\n const [isChecked, setIsChecked] = useState(checked);\n\n useEffect(() => {\n setIsChecked(checked);\n }, [checked]);\n\n const handleChange = () => {\n if (!disabled) {\n setIsChecked(!isChecked);\n onCheckedChange?.(!isChecked);\n }\n };\n\n const handleOnKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === ' ') {\n e.preventDefault();\n handleChange();\n }\n };\n\n const checkboxClasses = join(\n 'flex items-center justify-center border outline outline-transparent focus:outline-current focus:outline-offset-2',\n rounded && 'rounded',\n disabled && 'opacity-40 cursor-not-allowed',\n !disabled && 'cursor-pointer',\n className\n );\n\n return (\n <button\n id={checkboxId}\n type='button'\n ref={ref}\n tabIndex={0}\n role='checkbox'\n onClick={handleChange}\n aria-checked={isChecked}\n aria-disabled={disabled}\n onKeyDownCapture={handleOnKeyDown}\n style={{\n width: size,\n height: size,\n color: color,\n backgroundColor: isChecked && filled ? 'currentcolor' : 'transparent',\n }}\n className={checkboxClasses}\n {...props}\n >\n {isChecked && <Check size={size} color={filled ? parentBackgroundColor : undefined} />}\n </button>\n );\n}\n","import { join } from '../../utils';\n\ninterface ClickableProps extends Omit<React.HTMLProps<HTMLDivElement>, 'onClick'> {\n children: React.ReactNode;\n linkTo?: React.HTMLProps<HTMLAnchorElement>['href'];\n linkProps?: Omit<React.HTMLProps<HTMLAnchorElement>, 'href'>;\n onButtonClick?: React.HTMLProps<HTMLButtonElement>['onClick'];\n buttonProps?: Omit<React.HTMLProps<HTMLButtonElement>, 'onClick'>;\n}\n\nexport default function Clickable({\n children,\n className,\n linkTo,\n linkProps,\n onButtonClick,\n buttonProps,\n ...props\n}: ClickableProps) {\n if (linkTo && onButtonClick) {\n console.warn('Clickable: Both \"linkTo\" and \"onButtonClick\" props are provided. Only \"linkTo\" will be used.');\n }\n\n return (\n <div className={join('relative w-fit', className)} {...props}>\n {children}\n\n {/* Link */}\n {linkTo && (\n <a\n {...linkProps}\n rel={linkProps?.rel || 'noreferrer'}\n href={linkTo}\n className={join('absolute inset-0', linkProps?.className)}\n />\n )}\n\n {/* Button */}\n {!linkTo && onButtonClick && (\n <button\n {...buttonProps}\n type='button'\n onClick={onButtonClick}\n className={join('absolute inset-0 cursor-pointer', buttonProps?.className)}\n />\n )}\n </div>\n );\n}\n","import { useEffect } from 'react';\nimport { CheckCircled, ExclamationTriangle } from '../../symbols';\nimport { join } from '../../utils';\n\ninterface StatusHelpMessageProps {\n elementId: string;\n type: 'error' | 'success';\n message?: string;\n}\n\nexport default function StatusHelpMessage({ elementId, type, message }: StatusHelpMessageProps) {\n useEffect(() => {\n const element = document.getElementById(elementId) as HTMLElement;\n if (!element) {\n return;\n }\n if (!message && type === 'error') {\n element.removeAttribute('data-error');\n return;\n }\n if (!message && type === 'success') {\n element.removeAttribute('data-success');\n return;\n }\n\n element.setAttribute('aria-describedby', `${elementId}-${type}-message`);\n element.setAttribute('aria-invalid', type === 'error' ? 'true' : 'false');\n\n if (type === 'error') {\n element.setAttribute('data-error', 'true');\n }\n if (type === 'success') {\n element.setAttribute('data-success', 'true');\n }\n\n return () => {\n element.removeAttribute('aria-describedby');\n element.removeAttribute('aria-invalid');\n element.removeAttribute('data-error');\n element.removeAttribute('data-success');\n };\n }, [elementId, type, message]);\n\n if (!message) {\n return null;\n }\n\n return (\n <small\n className={join(\n 'mt-0.5 text-sm inline-flex items-center gap-1 w-full justify-start',\n type === 'error' && 'text-destructive',\n type === 'success' && 'text-success'\n )}\n role='status'\n >\n {type === 'error' ? <ExclamationTriangle /> : <CheckCircled />}\n <span id={`${elementId}-${type}-message`}>{message}</span>\n </small>\n );\n}\n","export const inputVariants = {\n base: '',\n default:\n 'ring ring-transparent focus:ring-primary-foreground not-disabled:data-error:ring-destructive not-disabled:data-success:ring-success',\n underline:\n 'border-b border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-destructive not-disabled:data-success:border-success',\n outline:\n 'border border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-destructive not-disabled:data-success:border-success',\n} as const;\nexport type InputVariant = keyof typeof inputVariants;\n\nexport const roundedVariants = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'px-3 rounded-full',\n} as const;\nexport type InputRounded = keyof typeof roundedVariants;\n\nexport interface InputVariants {\n variant: InputVariant;\n rounded: InputRounded;\n}\n\nexport const inputDefaults: InputVariants = {\n variant: 'default',\n rounded: 'none',\n} as const;\n","import { Ref, useId, useState } from 'react';\nimport { StatusHelpMessage } from '../../shared/forms';\nimport { EyeClosed, EyeOpened } from '../../symbols';\nimport { join } from '../../utils';\nimport './styles.css';\nimport { inputDefaults, inputVariants, InputVariants, roundedVariants } from './variants';\n\ninterface InputProps extends Partial<InputVariants>, React.InputHTMLAttributes<HTMLInputElement> {\n ref?: Ref<HTMLInputElement>;\n displayOnlyMode?: boolean;\n errorMessage?: string;\n successMessage?: string;\n}\n\nexport default function Input({\n variant = inputDefaults.variant,\n rounded,\n displayOnlyMode = false,\n errorMessage,\n successMessage,\n type = 'text',\n className,\n ...rest\n}: InputProps) {\n const id = useId();\n const [showPassword, setShowPassword] = useState(false);\n\n // Default `round` of `md` for `outline` variant\n let adjustedRound = rounded;\n if (variant === 'outline' && !rounded) {\n adjustedRound = 'md';\n }\n adjustedRound = adjustedRound || inputDefaults.rounded;\n\n const baseClasses =\n 'appearance-none w-full focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed placeholder:text-muted/70 hide-number-input-arrows transition-all';\n const fileClasses =\n 'file:mr-2 file:border-0 file:rounded-md file:px-1.5 file:py-1 file:bg-primary hover:file:bg-primary/85 file:text-sm file:font-medium file:text-foreground file:transition-colors';\n\n const inputClasses = join(\n baseClasses,\n fileClasses,\n !displayOnlyMode && inputVariants[variant],\n !displayOnlyMode && roundedVariants[adjustedRound],\n type === 'password' && 'pr-10',\n !displayOnlyMode && 'px-2 py-1',\n displayOnlyMode && 'pointer-events-none',\n className\n );\n\n return (\n <div className={join(displayOnlyMode && 'cursor-text')} style={{ height: rest.height, width: rest.width }}>\n <div className={join(type === 'password' && 'relative')}>\n <input\n {...rest}\n id={id}\n type={type === 'password' && showPassword ? 'text' : type}\n aria-disabled={rest.disabled}\n readOnly={displayOnlyMode}\n aria-readonly={displayOnlyMode || rest['aria-readonly']}\n data-error={errorMessage ? true : undefined}\n data-success={successMessage ? true : undefined}\n className={inputClasses}\n />\n {type === 'password' && (\n <button\n onClick={() => setShowPassword(!showPassword)}\n className='absolute inset-y-0 right-0 px-2 hover:cursor-pointer'\n aria-label='Toggle password visibility'\n data-state={showPassword ? 'visible' : 'hidden'}\n >\n {showPassword ? <EyeOpened size={20} /> : <EyeClosed size={20} />}\n </button>\n )}\n </div>\n {!displayOnlyMode && <StatusHelpMessage elementId={id} type='error' message={errorMessage} />}\n {!displayOnlyMode && <StatusHelpMessage elementId={id} type='success' message={successMessage} />}\n </div>\n );\n}\n","import React, { useId } from 'react';\nimport { QuestionMarkCircled } from '../../symbols';\nimport { join } from '../../utils';\n\nexport interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n display?: 'block' | 'inline';\n width?: React.CSSProperties['width'];\n required?: boolean;\n helpMessage?: string;\n suffix?: React.ReactNode;\n description?: string;\n}\n\nexport function Label({\n display = 'inline',\n width = 'fit-content',\n className = '',\n required,\n helpMessage,\n suffix,\n htmlFor,\n children,\n description,\n ...props\n}: LabelProps) {\n const id = useId();\n const showHelp = (helpMessage?.trim()?.length || 0) > 0;\n const showDescription = (description?.trim()?.length || 0) > 0;\n const helpId = showHelp ? `${htmlFor ?? id}-help` : undefined;\n const descriptionId = showDescription ? `${htmlFor ?? id}-description` : undefined;\n\n return (\n <div\n style={{ display: display === 'inline' ? 'inline-block' : 'block', width }}\n className={join('mb-0.5', className)}\n >\n <div className='relative flex'>\n <label className='font-medium' htmlFor={htmlFor} {...props}>\n {children}\n {required && (\n <span className='text-red-500 font-medium ml-1' aria-label='required'>\n *\n </span>\n )}\n </label>\n {showHelp && (\n <span\n className='text-gray-500 ml-1 size-fit -translate-y-1/3'\n aria-describedby={helpId}\n aria-label='Help information'\n title={helpMessage}\n >\n <QuestionMarkCircled />\n </span>\n )}\n {showHelp && (\n <div id={helpId} className='sr-only'>\n {helpMessage}\n </div>\n )}\n {suffix && <span className='ml-1'>{suffix}</span>}\n </div>\n {showDescription && (\n <small id={descriptionId} className='block opacity-80 mt-0.5' role='note'>\n {description}\n </small>\n )}\n </div>\n );\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport function useAnimationOpenClose(isOpen: boolean) {\n const [show, setShow] = useState(false);\n const [shouldRender, setShouldRender] = useState(false);\n\n useEffect(() => {\n if (isOpen) {\n setShouldRender(true);\n setTimeout(() => setShow(true), 10);\n } else {\n setShow(false);\n setTimeout(() => setShouldRender(false), 150);\n }\n }, [isOpen]);\n\n return { show, shouldRender };\n}\n\nexport function useDocumentChanges(isOpen: boolean, onClose: () => void) {\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose();\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n // Prevent background scrolling when modal is open\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscape);\n document.body.style.overflow = 'auto';\n };\n }, [isOpen, onClose]);\n}\n\nexport function useHandleFocus(modalId: string, isOpen: boolean) {\n const previousActiveElement = useRef<Element | null>(null);\n\n const focusAppropriateElement = useCallback(() => {\n const modalElement = document.getElementById(modalId);\n if (!modalElement) return;\n\n // 1. First, try to focus on the first action button, if available\n const modalActions = modalElement.querySelectorAll('[data-modal-action=\"true\"]');\n if (modalActions.length > 0) {\n (modalActions[0] as HTMLElement).focus();\n return;\n }\n\n // 2. Then try first focusable element in content (giving preference to non-close button)\n const focusableElements = modalElement.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n\n if (focusableElements.length > 0) {\n const allBesidesCloseButton = Array.from(focusableElements).filter((el) => {\n return !(el instanceof HTMLButtonElement && el.getAttribute('data-modal-close-button') === 'true');\n });\n\n if (allBesidesCloseButton.length > 0) {\n (allBesidesCloseButton[0] as HTMLElement).focus();\n return;\n }\n\n (focusableElements[0] as HTMLElement).focus();\n return;\n }\n\n // 3. Fallback to modal container\n modalElement.focus();\n }, [modalId]);\n\n useEffect(() => {\n if (isOpen) {\n // Store the currently focused element to restore focus later\n previousActiveElement.current = document.activeElement;\n\n focusAppropriateElement();\n }\n\n return () => {\n document.body.style.overflow = 'auto';\n\n // Restore focus to the previously focused element when modal closes\n if (previousActiveElement.current instanceof HTMLElement) {\n previousActiveElement.current.focus();\n }\n };\n }, [isOpen, focusAppropriateElement]);\n}\n","import { join } from '@moondreamsdev/dreamer-ui/utils';\nimport React, { useId } from 'react';\nimport { createPortal } from 'react-dom';\nimport { X } from '../../symbols';\nimport { Button, ButtonProps } from '../button';\nimport { useAnimationOpenClose, useDocumentChanges, useHandleFocus } from './hooks';\n\ninterface ModalAction extends Omit<ButtonProps, 'children'> {\n label: string;\n}\n\nexport interface ModalProps {\n id?: string;\n isOpen: boolean;\n onClose: () => void;\n title?: React.ReactNode;\n children: React.ReactNode;\n contentOnly?: boolean;\n className?: string;\n overlayClassName?: string;\n hideCloseButton?: boolean;\n actions?: ModalAction[];\n disableCloseOnOverlayClick?: boolean;\n ariaLabelledBy?: string;\n ariaDescribedBy?: string;\n}\n\nexport function Modal({\n id,\n isOpen,\n onClose,\n title,\n children,\n contentOnly = false,\n className,\n overlayClassName,\n hideCloseButton = false,\n actions = [],\n disableCloseOnOverlayClick = false,\n ariaLabelledBy,\n ariaDescribedBy,\n}: ModalProps) {\n const generatedId = useId();\n const modalId = id || `modal-${generatedId}`;\n const titleId = id ? `${id}-title` : `modal-title-${generatedId}`;\n\n const { show, shouldRender } = useAnimationOpenClose(isOpen);\n useHandleFocus(modalId, shouldRender);\n useDocumentChanges(shouldRender, onClose);\n\n if (!shouldRender) return null;\n\n const renderTitle = () => {\n if (!title) return null;\n\n if (React.isValidElement(title)) {\n return <div className='mb-4'>{title}</div>;\n }\n\n return (\n <h2 className='mb-4 text-xl font-semibold' id={titleId}>\n {title}\n </h2>\n );\n };\n\n const renderActions = () => {\n if (actions.length === 0) return null;\n\n return (\n <div className='mt-6 not-sm:grid gap-y-2 sm:flex sm:justify-start sm:flex-row-reverse sm:gap-x-3'>\n {actions.map((action, index) => {\n const { label, className, ...buttonProps } = action;\n return (\n <Button key={index} className={className} type='button' {...buttonProps} data-modal-action='true'>\n {label}\n </Button>\n );\n })}\n </div>\n );\n };\n\n return (\n <>\n {createPortal(\n <div\n aria-labelledby={ariaLabelledBy ?? title ? titleId : undefined}\n aria-describedby={ariaDescribedBy}\n role='dialog'\n aria-modal='true'\n className='fixed inset-0 z-[100] overflow-y-auto'\n >\n <div className='flex min-h-screen items-center justify-center p-4'>\n <div\n className={join('fixed inset-0 bg-black/20 transition-all', overlayClassName)}\n onClick={() => {\n if (!disableCloseOnOverlayClick) {\n onClose();\n }\n }}\n />\n\n {contentOnly && <div className={join('relative w-fit', className)}>{children}</div>}\n\n {!contentOnly && (\n <div\n id={modalId}\n tabIndex={-1}\n className={join(\n 'relative w-full max-w-xl transform rounded-lg shadow-xl bg-popover transition-all p-6 focus:ring ease-in duration-75',\n show ? 'opacity-100 scale-100' : 'opacity-0 scale-90',\n className\n )}\n >\n {!hideCloseButton && (\n <button\n type='button'\n onClick={onClose}\n data-modal-close-button='true'\n className='rounded-md p-0.5 top-2.5 right-2.5 absolute opacity-80 hover:opacity-100 transition-opacity focus:outline-none focus:ring-2 focus:ring-gray-500 leading-0'\n >\n <X size={18} />\n </button>\n )}\n\n {renderTitle()}\n\n {children}\n\n {renderActions()}\n </div>\n )}\n </div>\n </div>,\n document.body\n )}\n </>\n );\n}\n","export const paginationVariants = {\n link: 'text-primary hover:text-primary-foreground hover:bg-primary/10 aria-current:text-primary-foreground aria-current:bg-primary',\n outline: 'border border-primary text-primary hover:bg-primary hover:text-primary-foreground aria-current:bg-primary aria-current:text-primary-foreground aria-current:border-primary',\n filled: 'bg-secondary text-secondary-foreground hover:bg-primary hover:text-primary-foreground aria-current:bg-primary aria-current:text-primary-foreground',\n} as const;\n\nexport type PaginationVariant = keyof typeof paginationVariants;\n\nexport const paginationSizes = {\n sm: 'px-2 py-1 text-sm min-w-[32px] min-h-8',\n md: 'px-2 py-1 text-base min-w-[40px] min-h-10',\n} as const;\n\nexport type PaginationSize = keyof typeof paginationSizes;\n\nexport interface PaginationVariants {\n variant: PaginationVariant;\n size: PaginationSize;\n}\n","import { join } from '@moondreamsdev/dreamer-ui/utils';\nimport React, { useCallback } from 'react';\nimport { ChevronDoubleLeft, ChevronDoubleRight, ChevronLeft, ChevronRight } from '../../symbols';\nimport { PaginationSize, paginationSizes, PaginationVariant, paginationVariants } from './variants';\n\ninterface PaginationProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The current page number (1-indexed) */\n page: number;\n /** Total number of pages. Use Infinity for infinite pagination */\n pageCount?: number;\n /** Maximum number of page buttons to show */\n maxVisiblePages?: number;\n /** Show first and last page buttons */\n showFirstLast?: boolean;\n /** Button variant style */\n variant?: PaginationVariant;\n /** Button size */\n size?: PaginationSize;\n /** Callback when page changes */\n onPageChange: (page: number) => void;\n /** Ref for the pagination container */\n ref?: React.Ref<HTMLDivElement>;\n /** Additional class names for the button elements */\n buttonsClassName?: string;\n}\n\nexport default function Pagination({\n page,\n pageCount = 5,\n maxVisiblePages = 5,\n showFirstLast = true,\n onPageChange,\n size = 'md',\n variant = 'link',\n className,\n ref,\n buttonsClassName,\n ...rest\n}: PaginationProps) {\n const isInfinite = pageCount === Infinity;\n\n // Generate page numbers to display\n const getVisiblePages = useCallback((): number[] => {\n if (isInfinite) return [];\n\n const totalPages = pageCount;\n const maxPages = Math.min(maxVisiblePages, totalPages);\n\n // If we have fewer pages than maxVisiblePages, show all\n if (totalPages <= maxPages) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n // Calculate the range of pages to show\n const half = Math.floor(maxPages / 2);\n let start = Math.max(1, page - half);\n let end = Math.min(totalPages, start + maxPages - 1);\n\n // Adjust start if we're near the end\n if (end - start + 1 < maxPages) {\n start = Math.max(1, end - maxPages + 1);\n end = Math.min(totalPages, start + maxPages - 1);\n }\n\n return Array.from({ length: end - start + 1 }, (_, i) => start + i);\n }, [isInfinite, maxVisiblePages, page, pageCount]);\n\n const visiblePages = getVisiblePages();\n const canGoPrevious = page > 1;\n const canGoNext = isInfinite || page < pageCount;\n const showFirstButton = showFirstLast && !isInfinite;\n const showLastButton = showFirstLast && !isInfinite;\n\n const handlePageChange = (newPage: number) => {\n if (newPage >= 1 && (isInfinite || newPage <= pageCount)) {\n onPageChange(newPage);\n }\n };\n\n // Helper function to get button classes based on variant and state\n const getButtonClasses = useCallback(() => {\n const baseClasses = join(\n 'flex items-center justify-center min-w-fit',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n paginationSizes[size],\n 'rounded-md'\n );\n\n return join(baseClasses, paginationVariants[variant], buttonsClassName);\n }, [variant, size, buttonsClassName]);\n\n return (\n <nav\n ref={ref}\n className={join('flex items-center justify-center gap-1', className)}\n role='navigation'\n aria-label='Pagination'\n data-page={page}\n data-page-count={isInfinite ? 'infinite' : pageCount}\n {...rest}\n >\n {/* First page button */}\n {showFirstButton && (\n <button\n onClick={() => handlePageChange(1)}\n className={getButtonClasses()}\n disabled={page === 1}\n aria-label='Go to first page'\n >\n <ChevronDoubleLeft size={size === 'sm' ? 12 : 15} />\n <span className='ml-1'>First</span>\n </button>\n )}\n\n {/* Previous button */}\n <button\n onClick={() => handlePageChange(page - 1)}\n className={getButtonClasses()}\n disabled={!canGoPrevious}\n aria-label='Go to previous page'\n >\n <ChevronLeft size={size === 'sm' ? 12 : 15} />\n <span className='ml-1'>Previous</span>\n </button>\n\n {/* Page number buttons (only for finite pagination) */}\n {!isInfinite &&\n visiblePages.map((pageNum) => (\n <button\n key={pageNum}\n onClick={() => handlePageChange(pageNum)}\n className={join(getButtonClasses(), 'aspect-square')}\n aria-label={`Go to page ${pageNum}`}\n aria-current={pageNum === page ? true : undefined}\n >\n {pageNum}\n </button>\n ))}\n\n {/* Next button */}\n <button\n onClick={() => handlePageChange(page + 1)}\n className={getButtonClasses()}\n disabled={!canGoNext}\n aria-label='Go to next page'\n >\n <span className='mr-1'>Next</span>\n <ChevronRight size={size === 'sm' ? 12 : 15} />\n </button>\n\n {/* Last page button */}\n {showLastButton && (\n <button\n onClick={() => handlePageChange(pageCount)}\n className={getButtonClasses()}\n disabled={page === pageCount}\n aria-label='Go to last page'\n >\n <span className='mr-1'>Last</span>\n <ChevronDoubleRight size={size === 'sm' ? 12 : 15} />\n </button>\n )}\n </nav>\n );\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport function useAnimationSlideIn(isOpen: boolean) {\n const [show, setShow] = useState(false);\n const [shouldRender, setShouldRender] = useState(false);\n\n useEffect(() => {\n if (isOpen) {\n setShouldRender(true);\n setTimeout(() => setShow(true), 10);\n } else {\n setShow(false);\n setTimeout(() => setShouldRender(false), 300);\n }\n }, [isOpen]);\n\n return { show, shouldRender };\n}\n\nexport function usePanelDocumentChanges(isOpen: boolean, onClose: () => void) {\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose();\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n // Prevent background scrolling when panel is open\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscape);\n document.body.style.overflow = 'auto';\n };\n }, [isOpen, onClose]);\n}\n\nexport function usePanelFocus(panelId: string, isOpen: boolean) {\n const previousActiveElement = useRef<Element | null>(null);\n\n const focusAppropriateElement = useCallback(() => {\n const panelElement = document.getElementById(panelId);\n if (!panelElement) return;\n\n // 1. First, try to focus on the first action button, if available\n const panelActions = panelElement.querySelectorAll('[data-panel-action=\"true\"]');\n if (panelActions.length > 0) {\n (panelActions[0] as HTMLElement).focus();\n return;\n }\n\n // 2. Then try first focusable element in content (giving preference to non-close button)\n const focusableElements = panelElement.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n\n if (focusableElements.length > 0) {\n const allBesidesCloseButton = Array.from(focusableElements).filter((el) => {\n return !(el instanceof HTMLButtonElement && el.getAttribute('data-panel-close-button') === 'true');\n });\n\n if (allBesidesCloseButton.length > 0) {\n (allBesidesCloseButton[0] as HTMLElement).focus();\n return;\n }\n\n (focusableElements[0] as HTMLElement).focus();\n return;\n }\n\n // 3. Fallback to panel container\n panelElement.focus();\n }, [panelId]);\n\n useEffect(() => {\n if (isOpen) {\n // Store the currently focused element to restore focus later\n previousActiveElement.current = document.activeElement;\n\n focusAppropriateElement();\n }\n\n return () => {\n document.body.style.overflow = 'auto';\n\n // Restore focus to the previously focused element when panel closes\n if (previousActiveElement.current instanceof HTMLElement) {\n previousActiveElement.current.focus();\n }\n };\n }, [isOpen, focusAppropriateElement]);\n}\n","export const panelVariants = {\n size: {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg',\n xl: 'max-w-xl',\n '2xl': 'max-w-2xl',\n full: 'w-full',\n screen: 'w-screen',\n },\n} as const;\n\nexport type PanelSize = keyof typeof panelVariants.size;\n","import { join } from '@moondreamsdev/dreamer-ui/utils';\nimport React, { useId } from 'react';\nimport { createPortal } from 'react-dom';\nimport { X } from '../../symbols';\nimport { useAnimationSlideIn, usePanelDocumentChanges, usePanelFocus } from './hooks';\nimport { PanelSize, panelVariants } from './variants';\n\nexport interface PanelProps {\n ref?: React.Ref<HTMLDivElement>;\n /** Unique identifier for the panel */\n id?: string;\n /** Whether the panel is open */\n isOpen: boolean;\n /** Callback when panel should close */\n onClose: () => void;\n /** Panel title - can be a string or React node */\n title?: React.ReactNode;\n /** Panel content */\n children: React.ReactNode;\n /** Panel footer - can be a string or React node */\n footer?: React.ReactNode;\n /** Panel size variant */\n size?: PanelSize;\n /** Additional CSS classes for the panel */\n className?: string;\n /** Additional CSS classes for the overlay */\n overlayClassName?: string;\n /** Whether to hide the close button */\n hideCloseButton?: boolean;\n /** Whether to disable closing when clicking the overlay */\n disableCloseOnOverlayClick?: boolean;\n /** ARIA labelledby attribute */\n ariaLabelledBy?: string;\n /** ARIA describedby attribute */\n ariaDescribedBy?: string;\n}\n\n/**\n * Panel component that slides in from the right side of the screen.\n * Provides an overlay and slide-in animation for side content display.\n */\nexport default function Panel({\n ref,\n id,\n isOpen,\n onClose,\n title,\n children,\n footer,\n size = 'md',\n className,\n overlayClassName,\n hideCloseButton = false,\n disableCloseOnOverlayClick = false,\n ariaLabelledBy,\n ariaDescribedBy,\n}: PanelProps) {\n const generatedId = useId();\n const panelId = id || `panel-${generatedId}`;\n const titleId = id ? `${id}-title` : `panel-title-${generatedId}`;\n\n const { show, shouldRender } = useAnimationSlideIn(isOpen);\n usePanelFocus(panelId, shouldRender);\n usePanelDocumentChanges(shouldRender, onClose);\n\n if (!shouldRender) return null;\n\n const renderTitle = () => {\n if (!title) return null;\n\n if (React.isValidElement(title)) {\n return <div>{title}</div>;\n }\n\n return (\n <h2 className='text-2xl font-semibold' id={titleId}>\n {title}\n </h2>\n );\n };\n\n const renderFooter = () => {\n if (!footer) return null;\n\n if (React.isValidElement(footer)) {\n const footerElement = footer as React.ReactElement<{ className?: string }>;\n const existingClassName = footerElement.props.className || '';\n return React.cloneElement(footerElement, { className: join('px-6 py-4', existingClassName) } as Record<\n string,\n unknown\n >);\n }\n\n return <div className='px-6 py-4'>{footer}</div>;\n };\n\n return (\n <>\n {createPortal(\n <div\n aria-labelledby={ariaLabelledBy ?? title ? titleId : undefined}\n aria-describedby={ariaDescribedBy}\n role='dialog'\n aria-modal='true'\n className='fixed inset-0 z-[100] overflow-hidden'\n data-panel-open={isOpen}\n >\n <div\n className={join(\n 'fixed inset-0 bg-black/40 transition-opacity duration-300',\n show ? 'opacity-100' : 'opacity-0',\n overlayClassName\n )}\n onClick={() => {\n if (!disableCloseOnOverlayClick) {\n onClose();\n }\n }}\n />\n\n <div className='fixed inset-y-0 right-0 flex max-w-full'>\n <div\n id={panelId}\n ref={ref}\n tabIndex={-1}\n className={join(\n 'relative h-full transform shadow-xl bg-popover transition-transform duration-300 ease-in-out',\n size !== 'screen' && 'border-l border-border',\n panelVariants.size[size],\n show ? 'translate-x-0' : 'translate-x-full',\n className\n )}\n data-panel-size={size}\n >\n <div className='flex h-full flex-col'>\n {title && <div className='px-6 pt-6'>{renderTitle()}</div>}\n\n {!hideCloseButton && (\n <button\n type='button'\n onClick={onClose}\n data-panel-close-button='true'\n aria-label='Close panel'\n className='rounded-md p-0.5 top-3 right-3 absolute opacity-80 hover:opacity-100 transition-opacity focus:outline-none focus:ring-2 focus:ring-gray-500 leading-0'\n >\n <X size={18} />\n </button>\n )}\n\n <div className={join('flex-1 overflow-y-auto px-6 pb-6', title ? 'pt-6' : 'pt-10')}>{children}</div>\n\n {renderFooter()}\n </div>\n </div>\n </div>\n </div>,\n document.body\n )}\n </>\n );\n}\n","import { join } from '../../utils';\n\nexport type RadioInputProps = {\n itemId: string;\n checked: boolean;\n onChange: () => void;\n name: string;\n disabled?: boolean;\n className?: string;\n};\n\n// Custom RadioInput Component\nexport function RadioInput({ itemId, checked, onChange, name, disabled = false, className = '' }: RadioInputProps) {\n const baseClasses = 'relative inline-flex items-center justify-center rounded-full';\n\n const handleClick = () => {\n if (disabled) return;\n onChange();\n };\n\n const radioClasses = join(\n baseClasses,\n !checked && 'hover:border-current/60',\n !disabled && 'border-current cursor-pointer',\n disabled && 'border-muted/60 cursor-not-allowed',\n className\n );\n return (\n <div\n id={itemId}\n role='radio'\n tabIndex={-1} // necessary so that the radio button can be focused as div is not a focusable element\n aria-checked={checked}\n aria-disabled={disabled}\n aria-description={`Radio button for ${name}`}\n aria-labelledby={`${itemId}-label`}\n onClick={handleClick}\n className={radioClasses}\n style={{\n width: '1em',\n height: '1em',\n padding: '0.1em',\n borderWidth: '0.06em',\n }}\n >\n {checked && (\n <div\n className={join(`size-full aspect-square rounded-full`, disabled && 'bg-muted/60', !disabled && 'bg-current')}\n />\n )}\n </div>\n );\n}\n","import { useId } from 'react';\nimport { join } from '../../utils';\nimport { RadioInput } from './RadioInput';\n\nexport interface RadioGroupItemProps {\n value: string;\n children: React.ReactNode;\n className?: string;\n isSelected?: boolean;\n onChange?: (value: string) => void;\n disabled?: boolean;\n name?: string;\n hideInput?: boolean;\n description?: string;\n}\n\nexport function RadioGroupItem({\n value,\n children,\n className = '',\n isSelected = false,\n onChange,\n disabled = false,\n hideInput = false,\n description,\n name,\n}: RadioGroupItemProps) {\n const id = useId();\n const itemId = `radio-${id}-${value}`;\n\n const handleChange = () => {\n if (!disabled) {\n onChange?.(value);\n }\n };\n\n return (\n <div\n title={description}\n className={join(\n 'relative flex items-center',\n className,\n // Uses text color for borders\n hideInput &&\n `p-2 border-2 focus-within:border-dashed focus-within:${\n disabled ? 'border-current/50' : 'border-current/80'\n }`,\n hideInput && !isSelected && `border-transparent ${disabled ? '' : 'not-focus-within:hover:border-border/60'}`,\n hideInput && isSelected && 'border-border',\n disabled && 'opacity-60 cursor-not-allowed'\n )}\n style={{\n gap: '0.5em',\n }}\n >\n {!hideInput && (\n <RadioInput\n itemId={itemId}\n name={name || ''}\n checked={isSelected}\n onChange={handleChange}\n disabled={disabled}\n className={join(hideInput && '')}\n />\n )}\n <div\n id={hideInput ? itemId : undefined}\n tabIndex={hideInput ? -1 : undefined}\n role={hideInput ? 'radio' : undefined}\n onClick={hideInput ? handleChange : undefined}\n aria-checked={!hideInput ? undefined : isSelected ? 'true' : 'false'}\n aria-disabled={hideInput ? disabled : undefined}\n aria-description={!hideInput ? undefined : description || `Radio button for ${name}`}\n aria-labelledby={hideInput ? `${itemId}-label` : undefined}\n className={join(hideInput && 'size-full', typeof children === 'object' && 'grow focus:outline-none')}\n >\n <label\n id={`${itemId}-label`}\n onClick={hideInput ? undefined : handleChange}\n className={join(disabled && 'cursor-not-allowed', !disabled && 'cursor-pointer')}\n >\n {children}\n </label>\n </div>\n </div>\n );\n}\n","import { useCallback, useEffect, useState } from 'react';\n\nexport function useRadioFocus(id: string, selectedOptionIndex: number) {\n // Manage state locally to avoid race conditions, which can result in\n // the an option failing to be selected or incorrectly selected\n const [focusedIndex, setFocusedIndex] = useState<number>(selectedOptionIndex);\n const [clickedIndex, setClickedIndex] = useState<number>(-1);\n // Prevent onClicks from triggering focus events and automatically selecting the first option\n const [isMouseDown, setIsMouseDown] = useState<boolean>(false);\n\n const handleClicked = useCallback((options: HTMLElement[], index: number) => {\n const target = options[index] as HTMLElement;\n\n // Check if the target element is disabled\n const isDisabled = target.hasAttribute('disabled') || target.getAttribute('aria-disabled') === 'true';\n if (isDisabled) return;\n\n // Update the selected index\n options[index]?.click();\n setClickedIndex(index);\n }, []);\n\n const setInitialFocus = useCallback(\n (e: Event, options: HTMLElement[]) => {\n e.preventDefault();\n if (isMouseDown) return;\n if (!options.length) return;\n\n const indexToFocus = selectedOptionIndex !== -1 ? selectedOptionIndex : 0;\n options[indexToFocus]?.focus();\n setFocusedIndex(indexToFocus);\n\n // Only update the selected index if one is already set\n if (selectedOptionIndex !== -1) {\n handleClicked(options, indexToFocus);\n }\n },\n [selectedOptionIndex, isMouseDown, handleClicked]\n );\n\n /* Focus preceding element when Shift + Tab is pressed */\n const handleFocusPreceding = useCallback(\n (e: KeyboardEvent) => {\n // If the Shift key is not pressed while tab is entered, do nothing\n if (!e.shiftKey) {\n return;\n }\n\n e.preventDefault();\n const focusableElements = Array.from(\n document.querySelectorAll<HTMLElement>(\n 'a, button, input, textarea, select, details, [tabindex]:not([tabindex=\"-1\"])'\n )\n ).filter((el) => !el.hasAttribute('disabled') && el.tabIndex >= 0);\n const currentIndex = focusableElements.findIndex((el) => el.id === id);\n const previousIndex = currentIndex > 0 ? currentIndex - 1 : focusableElements.length - 1;\n focusableElements[previousIndex]?.focus();\n },\n [id]\n );\n\n const handleKeyboardNavigation = useCallback(\n (e: KeyboardEvent, options: HTMLElement[]) => {\n if (!options.length) return;\n\n // Ensure we only toggle options part of radio group\n const target = e.target as HTMLElement;\n const isGroupOption = options.some((option) => option.id === target.id);\n if (!isGroupOption) return;\n\n const currentIndex = focusedIndex !== -1 ? focusedIndex : 0;\n let newIndex = currentIndex;\n\n switch (e.key) {\n case 'ArrowUp':\n case 'ArrowLeft':\n e.preventDefault();\n newIndex = currentIndex > 0 ? currentIndex - 1 : options.length - 1;\n break;\n\n case 'ArrowDown':\n case 'ArrowRight':\n e.preventDefault();\n newIndex = (currentIndex + 1) % options.length;\n break;\n\n // Select the option when the space key is pressed\n case ' ':\n e.preventDefault();\n handleClicked(options, currentIndex);\n return;\n\n case 'Tab':\n handleFocusPreceding(e);\n return;\n\n default:\n return;\n }\n\n options[newIndex]?.focus();\n setFocusedIndex(newIndex);\n // Only update the selected index if one is already set\n if (clickedIndex !== -1) {\n handleClicked(options, newIndex);\n }\n },\n [focusedIndex, clickedIndex, handleFocusPreceding, handleClicked]\n );\n\n const getRadioOptions = useCallback((): HTMLElement[] => {\n const radioGroup = document.querySelector(`[id=\"${id}\"][role=\"radiogroup\"]`);\n if (!radioGroup) return [];\n\n return Array.from(radioGroup.querySelectorAll('[role=\"radio\"]'));\n }, [id]);\n\n useEffect(() => {\n const radioGroup = document.querySelector(`[id=\"${id}\"][role=\"radiogroup\"]`);\n if (!radioGroup) return;\n\n const options = getRadioOptions();\n const handleFocus = (e: Event) => setInitialFocus(e, options);\n const handleKeyDown = (e: KeyboardEvent) => handleKeyboardNavigation(e, options);\n const handleMouseDown = () => setIsMouseDown(true);\n const handleMouseUp = () => setIsMouseDown(false);\n\n document.addEventListener('keydown', handleKeyDown);\n radioGroup.addEventListener('focus', handleFocus);\n radioGroup.addEventListener('mousedown', handleMouseDown);\n document.addEventListener('mouseup', handleMouseUp); // place on document since mouseup event can occur outside of radio group\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n radioGroup.removeEventListener('focus', handleFocus);\n radioGroup.removeEventListener('mousedown', handleMouseDown);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [id, getRadioOptions, setInitialFocus, handleKeyboardNavigation]);\n}\n","import React, { useId, useMemo } from 'react';\nimport { join } from '../../utils';\nimport { RadioGroupItem, RadioGroupItemProps } from './RadioGroupItem';\nimport { useRadioFocus } from './hooks';\n\nexport type RadioOption = { label: string; value: string; disabled?: boolean; description?: string };\n\nexport type RadioGroupProps = {\n options?: (string | RadioOption)[];\n value: string | undefined;\n onChange: (value: string) => void;\n id?: string;\n children?: React.ReactElement<RadioGroupItemProps>[] | React.ReactElement<RadioGroupItemProps>;\n className?: string;\n childrenClassName?: string;\n hideInputs?: boolean;\n};\n\nexport function RadioGroup({\n options = [],\n value,\n onChange,\n id,\n children,\n className = '',\n childrenClassName = '',\n hideInputs = false,\n}: RadioGroupProps) {\n const groupId = useId();\n const groupName = id || `radio-group-${groupId}`;\n useRadioFocus(\n groupName,\n options.findIndex((option) => option === value)\n );\n\n // Check for duplicates if string options are provided\n const processedOptions = useMemo(() => {\n return options.reduce<RadioOption[]>((acc, option) => {\n if (typeof option === 'string') {\n // Check if we already have this string option\n if (!acc.some((item) => item.value === option)) {\n acc.push({ label: option, value: option });\n }\n } else {\n acc.push(option);\n }\n return acc;\n }, []);\n }, [options]);\n\n return (\n <div id={groupName} role='radiogroup' tabIndex={0} className={join(className, 'focus:outline-none')}>\n {/* Render from options prop */}\n {processedOptions.length > 0 &&\n processedOptions.map((option, index) => (\n <RadioGroupItem\n key={`${option.value}-${index}`}\n value={option.value}\n isSelected={value === option.value}\n onChange={onChange}\n name={groupName}\n disabled={option.disabled}\n description={option.description}\n hideInput={hideInputs}\n className={childrenClassName}\n >\n {option.label}\n </RadioGroupItem>\n ))}\n\n {/* Render RadioGroupItem components */}\n {processedOptions.length === 0 &&\n children &&\n React.Children.map(children, (child) => {\n // TypeScript enforces that child is a RadioGroupItem\n if (React.isValidElement(child) && child.type === RadioGroupItem) {\n return (\n <RadioGroupItem\n {...child.props}\n className={join(childrenClassName, child.props.className)}\n hideInput={child.props.hideInput || hideInputs}\n isSelected={value === child.props.value}\n onChange={onChange}\n name={groupName}\n >\n {child.props.children}\n </RadioGroupItem>\n );\n }\n return null;\n })}\n </div>\n );\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport function useScrollArea(scrollbarThickness: number) {\n const viewportRef = useRef<HTMLDivElement>(null);\n const verticalThumbRef = useRef<HTMLDivElement>(null);\n const horizontalThumbRef = useRef<HTMLDivElement>(null);\n const [isScrolling, setIsScrolling] = useState(false);\n const [isFadingOut, setIsFadingOut] = useState(false);\n const [scrollbarVisible, setScrollbarVisible] = useState({\n vertical: false,\n horizontal: false,\n });\n const scrollTimeout = useRef<number | null>(null);\n const fadeTimeout = useRef<number | null>(null);\n\n // Check if content overflows and update scrollbar visibility\n const checkOverflow = useCallback(() => {\n const viewport = viewportRef.current;\n if (!viewport) return;\n\n const hasVerticalScroll = viewport.scrollHeight > viewport.clientHeight;\n const hasHorizontalScroll = viewport.scrollWidth > viewport.clientWidth;\n\n setScrollbarVisible({\n vertical: hasVerticalScroll,\n horizontal: hasHorizontalScroll,\n });\n }, []);\n\n // Update thumb sizes and positions based on scroll state\n const updateThumbSizes = useCallback(() => {\n const viewport = viewportRef.current;\n const verticalThumb = verticalThumbRef.current;\n const horizontalThumb = horizontalThumbRef.current;\n\n if (!viewport) return;\n\n if (verticalThumb && scrollbarVisible.vertical) {\n // Calculate available height (subtract horizontal scrollbar thickness if present)\n const availableHeight = scrollbarVisible.horizontal \n ? viewport.clientHeight - scrollbarThickness \n : viewport.clientHeight;\n \n const scrollRatio = availableHeight / viewport.scrollHeight;\n const thumbHeight = Math.max(scrollRatio * 100, 10); // Minimum 10% height\n\n // Calculate scroll percentage (0 to 1)\n const maxScrollTop = viewport.scrollHeight - viewport.clientHeight;\n const scrollPercentage = maxScrollTop > 0 ? viewport.scrollTop / maxScrollTop : 0;\n\n // The thumb should move from 0% to (100% - thumbHeight%) of the available track\n const maxThumbPosition = 100 - thumbHeight;\n const thumbTop = scrollPercentage * maxThumbPosition;\n\n verticalThumb.style.height = `${thumbHeight}%`;\n verticalThumb.style.top = `${thumbTop}%`;\n verticalThumb.style.transform = 'none';\n }\n\n if (horizontalThumb && scrollbarVisible.horizontal) {\n // Calculate available width (subtract vertical scrollbar thickness if present)\n const availableWidth = scrollbarVisible.vertical \n ? viewport.clientWidth - scrollbarThickness \n : viewport.clientWidth;\n \n const scrollRatio = availableWidth / viewport.scrollWidth;\n const thumbWidth = Math.max(scrollRatio * 100, 10); // Minimum 10% width\n\n // Calculate scroll percentage (0 to 1)\n const maxScrollLeft = viewport.scrollWidth - viewport.clientWidth;\n const scrollPercentage = maxScrollLeft > 0 ? viewport.scrollLeft / maxScrollLeft : 0;\n\n // The thumb should move from 0% to (100% - thumbWidth%) of the available track\n const maxThumbPosition = 100 - thumbWidth;\n const thumbLeft = scrollPercentage * maxThumbPosition;\n\n horizontalThumb.style.width = `${thumbWidth}%`;\n horizontalThumb.style.left = `${thumbLeft}%`;\n horizontalThumb.style.transform = 'none';\n }\n }, [scrollbarVisible, scrollbarThickness]);\n\n // Handle scroll events\n const handleScroll = useCallback(() => {\n // Clear any existing timeouts\n if (scrollTimeout.current) {\n clearTimeout(scrollTimeout.current);\n }\n if (fadeTimeout.current) {\n clearTimeout(fadeTimeout.current);\n }\n\n setIsScrolling(true);\n setIsFadingOut(false);\n updateThumbSizes();\n\n // Start fade-out process after scroll stops\n scrollTimeout.current = setTimeout(() => {\n setIsFadingOut(true);\n \n // Remove scrollbars after fade animation completes\n fadeTimeout.current = setTimeout(() => {\n setIsScrolling(false);\n setIsFadingOut(false);\n }, 300); // 300ms for fade-out animation\n }, 1000); // 1s delay before fade starts\n }, [updateThumbSizes]);\n\n // Set up observers for content and size changes\n useEffect(() => {\n const viewport = viewportRef.current;\n if (!viewport) return;\n\n checkOverflow();\n\n // Use ResizeObserver to watch for size changes\n const resizeObserver = new ResizeObserver(checkOverflow);\n resizeObserver.observe(viewport);\n\n // Also check on content changes\n const mutationObserver = new MutationObserver(checkOverflow);\n mutationObserver.observe(viewport, {\n childList: true,\n subtree: true,\n attributes: true,\n });\n\n return () => {\n resizeObserver.disconnect();\n mutationObserver.disconnect();\n };\n }, [checkOverflow]);\n\n // Update thumb sizes when scrollbar visibility changes\n useEffect(() => {\n updateThumbSizes();\n }, [scrollbarVisible, updateThumbSizes]);\n\n // Cleanup timeouts on unmount\n useEffect(() => {\n return () => {\n if (scrollTimeout.current) {\n clearTimeout(scrollTimeout.current);\n }\n if (fadeTimeout.current) {\n clearTimeout(fadeTimeout.current);\n }\n };\n }, []);\n\n return {\n viewportRef,\n verticalThumbRef,\n horizontalThumbRef,\n isScrolling,\n isFadingOut,\n scrollbarVisible,\n handleScroll,\n };\n}\n","import { join } from '@moondreamsdev/dreamer-ui/utils';\nimport React from 'react';\nimport { useScrollArea } from './hooks';\n\nexport interface ScrollAreaProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Custom CSS classes for the root container. Use this to set width/height */\n className?: string;\n /** Custom CSS classes for the scroll thumb */\n thumbClassName?: string;\n /** Custom CSS classes for the viewport (scrollable content area) */\n viewportClassName?: string;\n /** Custom CSS classes for the scrollbar track */\n scrollbarClassName?: string;\n /** Scrollbar thickness in pixels. Defaults to 10px */\n scrollbarThickness?: number;\n /** Children content to be scrolled */\n children: React.ReactNode;\n /** HTML id attribute */\n id?: string;\n /** Reference to the root element */\n ref?: React.Ref<HTMLDivElement>;\n}\n\nexport default function ScrollArea({\n className,\n thumbClassName,\n viewportClassName,\n scrollbarClassName,\n scrollbarThickness = 10,\n children,\n id,\n ref,\n ...props\n}: ScrollAreaProps) {\n const { viewportRef, verticalThumbRef, horizontalThumbRef, isScrolling, isFadingOut, scrollbarVisible, handleScroll } =\n useScrollArea(scrollbarThickness);\n\n const thumbsClassName = join(\n 'relative flex-1 rounded-full bg-slate-400/60 hover:bg-slate-400/80 active:bg-slate-400',\n thumbClassName\n );\n\n return (\n <div ref={ref} id={id} className={join('relative overflow-hidden', className)} data-scroll-area-root='' {...props}>\n <div\n ref={viewportRef}\n className={join(\n 'h-full w-full overflow-auto rounded-[inherit] [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden',\n viewportClassName\n )}\n onScroll={handleScroll}\n data-scroll-area-viewport=''\n >\n {children}\n </div>\n\n {/* Vertical Scrollbar */}\n {scrollbarVisible.vertical && (isScrolling || isFadingOut) && (\n <div\n className={join(\n 'touch-none select-none transition-all duration-300',\n 'p-[1px]',\n 'absolute right-0 top-0',\n isFadingOut ? 'opacity-0' : 'opacity-100',\n scrollbarClassName\n )}\n data-scroll-area-scrollbar='vertical'\n data-state={isScrolling ? 'visible' : 'hidden'}\n style={{ \n width: `${scrollbarThickness}px`,\n height: scrollbarVisible.horizontal \n ? `calc(100% - ${scrollbarThickness}px)` \n : '100%'\n }}\n >\n <div\n ref={verticalThumbRef}\n className={join('absolute rounded-full', thumbsClassName)}\n data-scroll-area-thumb=''\n style={{ height: '20%', top: '0%', width: '100%' }}\n />\n </div>\n )}\n\n {/* Horizontal Scrollbar */}\n {scrollbarVisible.horizontal && (isScrolling || isFadingOut) && (\n <div\n className={join(\n 'touch-none select-none transition-all duration-300',\n 'p-[1px]',\n 'absolute bottom-0 left-0',\n isFadingOut ? 'opacity-0' : 'opacity-100',\n scrollbarClassName\n )}\n data-scroll-area-scrollbar='horizontal'\n data-state={isScrolling ? 'visible' : 'hidden'}\n style={{ \n height: `${scrollbarThickness}px`,\n width: scrollbarVisible.vertical \n ? `calc(100% - ${scrollbarThickness}px)` \n : '100%'\n }}\n >\n <div\n ref={horizontalThumbRef}\n className={join('absolute rounded-full', thumbsClassName)}\n data-scroll-area-thumb=''\n style={{ width: '20%', left: '0%', height: '100%' }}\n />\n </div>\n )}\n\n {/* Corner */}\n {scrollbarVisible.vertical && scrollbarVisible.horizontal && (\n <div \n className={join('bg-transparent', 'absolute bottom-0 right-0')} \n data-scroll-area-corner=''\n style={{ \n height: `${scrollbarThickness}px`, \n width: `${scrollbarThickness}px` \n }}\n />\n )}\n </div>\n );\n}\n","import { RefObject, useCallback, useEffect, useMemo, useState } from 'react';\n\nexport interface SelectOption {\n text: string;\n value: string;\n description?: string;\n disabled?: boolean;\n}\n\nexport function useSelectDropdown(isOpen: boolean) {\n const [show, setShow] = useState(false);\n const [shouldRender, setShouldRender] = useState(false);\n\n useEffect(() => {\n if (isOpen) {\n setShouldRender(true);\n setTimeout(() => setShow(true), 10);\n } else {\n setShow(false);\n setTimeout(() => setShouldRender(false), 150);\n }\n }, [isOpen]);\n\n return { show, shouldRender };\n}\n\ninterface UseSelectKeyboardNavigationProps {\n isOpen: boolean;\n setIsOpen: (open: boolean) => void;\n filteredOptions: SelectOption[];\n highlightedIndex: number;\n setHighlightedIndex: (index: number) => void;\n onSelect: (option: SelectOption) => void;\n triggerRef: RefObject<HTMLButtonElement | null>;\n}\n\nexport function useSelectKeyboardNavigation({\n isOpen,\n setIsOpen,\n filteredOptions,\n highlightedIndex,\n setHighlightedIndex,\n onSelect,\n triggerRef,\n}: UseSelectKeyboardNavigationProps) {\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n const nextIndex = highlightedIndex < filteredOptions.length - 1 ? highlightedIndex + 1 : 0;\n // Skip disabled options\n let finalIndex = nextIndex;\n for (let i = 0; i < filteredOptions.length; i++) {\n const checkIndex = (nextIndex + i) % filteredOptions.length;\n if (!filteredOptions[checkIndex].disabled) {\n finalIndex = checkIndex;\n break;\n }\n }\n setHighlightedIndex(finalIndex);\n }\n break;\n\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n const prevIndex = highlightedIndex > 0 ? highlightedIndex - 1 : filteredOptions.length - 1;\n // Skip disabled options\n let finalIndex = prevIndex;\n for (let i = 0; i < filteredOptions.length; i++) {\n const checkIndex = (prevIndex - i + filteredOptions.length) % filteredOptions.length;\n if (!filteredOptions[checkIndex].disabled) {\n finalIndex = checkIndex;\n break;\n }\n }\n setHighlightedIndex(finalIndex);\n }\n break;\n\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else if (highlightedIndex >= 0 && highlightedIndex < filteredOptions.length) {\n const selectedOption = filteredOptions[highlightedIndex];\n if (!selectedOption.disabled) {\n onSelect(selectedOption);\n }\n }\n break;\n\n case 'Escape':\n e.preventDefault();\n if (isOpen) {\n setIsOpen(false);\n triggerRef.current?.focus();\n }\n break;\n\n case 'Tab':\n if (isOpen) {\n setIsOpen(false);\n }\n break;\n }\n },\n [isOpen, setIsOpen, filteredOptions, highlightedIndex, setHighlightedIndex, onSelect, triggerRef]\n );\n\n return { handleKeyDown };\n}\n\ninterface UseSelectHighlightProps {\n isOpen: boolean;\n filteredOptions: SelectOption[];\n selectedOption?: SelectOption;\n shouldRender: boolean;\n optionsContainerRef: RefObject<HTMLDivElement | null>;\n}\n\nexport function useSelectHighlight({\n isOpen,\n filteredOptions,\n selectedOption,\n shouldRender,\n optionsContainerRef,\n}: UseSelectHighlightProps) {\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n\n const selectedIndex = useMemo(() => {\n if (selectedOption) {\n return filteredOptions.findIndex((option) => option.value === selectedOption.value);\n }\n return -1;\n }, [filteredOptions, selectedOption]);\n\n // Set highlighted index when dropdown opens or options change\n useEffect(() => {\n if (isOpen && filteredOptions.length > 0) {\n if (selectedOption) {\n // Find the index of the selected option in filtered options\n setHighlightedIndex(selectedIndex >= 0 ? selectedIndex : 0);\n } else {\n // No selection, start from the first option\n setHighlightedIndex(0);\n }\n } else {\n // Reset highlighted index when dropdown closes\n setHighlightedIndex(-1);\n }\n }, [filteredOptions, isOpen, selectedOption, selectedIndex]);\n\n // Auto-scroll to highlighted option\n useEffect(() => {\n if (highlightedIndex >= 0 && optionsContainerRef.current && shouldRender) {\n const scrollToOption = () => {\n const container = optionsContainerRef.current;\n const highlightedOption = container?.querySelector(`[data-option-index=\"${highlightedIndex}\"]`) as HTMLElement;\n\n if (highlightedOption) {\n // Use immediate scroll when dropdown first opens with selected option, smooth scroll for keyboard navigation\n const behavior = isOpen && selectedOption && highlightedIndex === selectedIndex ? 'auto' : 'smooth';\n highlightedOption.scrollIntoView({\n behavior,\n block: 'nearest',\n });\n }\n };\n\n // Small delay to ensure DOM is rendered when dropdown opens\n if (isOpen && shouldRender && selectedOption) {\n setTimeout(scrollToOption, 10);\n } else {\n scrollToOption();\n }\n }\n }, [highlightedIndex, shouldRender, isOpen, selectedOption, filteredOptions, optionsContainerRef, selectedIndex]);\n\n return { highlightedIndex, setHighlightedIndex };\n}\n","export const sizeVariants = {\n sm: {\n trigger: 'px-2 py-1 text-sm',\n options: 'px-2 py-2 text-xs',\n },\n md: {\n trigger: 'px-3 py-2 text-base',\n options: 'px-3 py-2.5 text-sm',\n },\n lg: {\n trigger: 'px-4 py-3 text-lg',\n options: 'px-4 py-3 text-base',\n },\n} as const;\n\nexport type SelectSize = keyof typeof sizeVariants;\n","import React, { useState, useRef, useEffect, useMemo, useCallback, useId } from 'react';\nimport { useSelectDropdown, useSelectKeyboardNavigation, useSelectHighlight, SelectOption } from './hooks';\nimport { sizeVariants, SelectSize } from './variants';\nimport { join } from '../../utils';\nimport { Check, ChevronDown, X } from '../../symbols';\n\nexport type { SelectOption };\n\nexport interface SelectProps {\n options: SelectOption[];\n value?: string;\n placeholder?: string;\n searchable?: boolean;\n disabled?: boolean;\n clearable?: boolean;\n size?: SelectSize;\n className?: string;\n triggerClassName?: string;\n dropdownClassName?: string;\n id?: string;\n ref?: React.Ref<HTMLDivElement>;\n onChange?: (value: string) => void;\n onSearch?: (searchTerm: string) => void;\n searchPlaceholder?: string;\n}\n\nexport default function Select({\n options,\n value,\n placeholder = 'Select an option...',\n searchable = false,\n disabled = false,\n clearable = false,\n size = 'md',\n className,\n triggerClassName,\n dropdownClassName,\n id,\n ref,\n onChange,\n onSearch,\n searchPlaceholder = 'Search options...',\n}: SelectProps) {\n const generatedId = useId();\n const activeId = id ?? generatedId;\n const listboxId = `${activeId}-listbox`;\n\n const getOptionId = (index: number) => `${listboxId}-option-${index}`;\n\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState('');\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const optionsContainerRef = useRef<HTMLDivElement>(null);\n\n const { show, shouldRender } = useSelectDropdown(isOpen);\n\n // Filter options based on search term\n const filteredOptions = useMemo(() => {\n if (!searchable || !searchTerm) return options;\n return options.filter(\n (option) =>\n option.text.toLowerCase().includes(searchTerm.toLowerCase()) ||\n option.description?.toLowerCase().includes(searchTerm.toLowerCase())\n );\n }, [options, searchable, searchTerm]);\n\n const selectedOption = useMemo(() => options.find((option) => option.value === value), [options, value]);\n\n // Use the highlight hook\n const { highlightedIndex, setHighlightedIndex } = useSelectHighlight({\n isOpen,\n filteredOptions,\n selectedOption,\n shouldRender,\n optionsContainerRef,\n });\n\n const activeDescendantId = highlightedIndex >= 0 ? getOptionId(highlightedIndex) : undefined;\n\n // Focus search input when dropdown opens\n useEffect(() => {\n if (isOpen && shouldRender && searchable && searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }, [isOpen, searchable, shouldRender]);\n\n const keyboardOnSelect = useCallback(\n (option: SelectOption) => {\n if (!option.disabled) {\n onChange?.(option.value);\n setIsOpen(false);\n setSearchTerm('');\n triggerRef.current?.focus();\n }\n },\n [onChange]\n );\n\n const { handleKeyDown } = useSelectKeyboardNavigation({\n isOpen,\n setIsOpen,\n filteredOptions,\n highlightedIndex,\n setHighlightedIndex,\n onSelect: keyboardOnSelect,\n triggerRef,\n });\n\n // Close dropdown when clicking outside\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node) &&\n !triggerRef.current?.contains(event.target as Node)\n ) {\n setIsOpen(false);\n setSearchTerm('');\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen]);\n\n const handleToggle = () => {\n if (!disabled) {\n setIsOpen(!isOpen);\n if (!isOpen) {\n setSearchTerm('');\n setHighlightedIndex(-1);\n }\n }\n };\n\n const handleOptionClick = (option: SelectOption) => {\n if (!option.disabled) {\n onChange?.(option.value);\n setIsOpen(false);\n setSearchTerm('');\n }\n };\n\n const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const term = e.target.value;\n setSearchTerm(term);\n onSearch?.(term);\n setHighlightedIndex(-1);\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n onChange?.('');\n };\n\n return (\n <div\n className={join('relative', className)}\n id={id}\n ref={ref}\n data-select='true'\n data-value={value}\n data-searchable={searchable}\n data-disabled={disabled}\n data-clearable={clearable}\n >\n {/* Trigger Button */}\n <div className='relative'>\n <button\n ref={triggerRef}\n type='button'\n className={join(\n 'flex items-center justify-between w-full text-left bg-inherit border border-border rounded-md transition-colors',\n 'hover:border-primary focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary',\n disabled && 'opacity-50 cursor-not-allowed hover:border-border',\n isOpen && 'border-primary ring-1 ring-primary',\n sizeVariants[size].trigger,\n triggerClassName\n )}\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n aria-disabled={disabled}\n aria-haspopup='listbox'\n aria-expanded={isOpen}\n aria-controls={isOpen ? listboxId : undefined}\n aria-activedescendant={isOpen && !searchable ? activeDescendantId : undefined}\n aria-label={selectedOption ? selectedOption.text : placeholder}\n data-select-trigger='true'\n >\n <span className={join('block truncate', !selectedOption && 'opacity-70')}>\n {selectedOption ? selectedOption.text : placeholder}\n </span>\n <div className='flex items-center ml-2'>\n <ChevronDown size={16} className={join('transition-transform duration-200', isOpen && 'rotate-180')} />\n </div>\n </button>\n {clearable && selectedOption && (\n <button\n type='button'\n onClick={handleClear}\n className='absolute right-8 top-1/2 -translate-y-1/2 p-0.5 rounded hover:bg-accent/20 transition-colors group z-10'\n aria-label='Clear selection'\n data-select-clear='true'\n >\n <X size={14} className='opacity-70 group-hover:opacity-100 transition-opacity' />\n </button>\n )}\n </div>\n\n {/* Dropdown */}\n {shouldRender && (\n <div\n ref={dropdownRef}\n className={join(\n 'absolute z-50 w-full mt-1 bg-popover border border-border rounded-md shadow-lg transition-all duration-150',\n show ? 'opacity-100 translate-y-0' : 'opacity-0 -translate-y-2',\n dropdownClassName\n )}\n id={listboxId}\n role='listbox'\n data-select-content='true'\n >\n {/* Search Input */}\n {searchable && (\n <div className='border-b border-border'>\n <input\n ref={searchInputRef}\n type='text'\n value={searchTerm}\n onChange={handleSearchChange}\n onKeyDown={handleKeyDown}\n placeholder={searchPlaceholder}\n className='w-full px-2 py-2 text-inherit focus:outline-none'\n aria-autocomplete='list'\n aria-controls={listboxId}\n aria-activedescendant={activeDescendantId}\n data-select-search='true'\n />\n </div>\n )}\n\n {/* Options */}\n <div ref={optionsContainerRef} className='max-h-60 overflow-auto'>\n {filteredOptions.length > 0 ? (\n filteredOptions.map((option, index) => (\n <div\n key={option.value}\n id={getOptionId(index)}\n className={join(\n 'flex items-center cursor-pointer transition-colors',\n 'hover:bg-accent/10 focus:bg-accent/10',\n sizeVariants[size].options,\n option.disabled && 'opacity-50 cursor-not-allowed',\n index === highlightedIndex && 'bg-accent/20',\n value === option.value && 'bg-accent/30'\n )}\n onClick={() => handleOptionClick(option)}\n role='option'\n aria-selected={value === option.value}\n aria-disabled={option.disabled}\n data-select-option='true'\n data-value={option.value}\n data-highlighted={index === highlightedIndex}\n data-option-index={index}\n >\n <div className='flex-1 min-w-0'>\n <div className='font-medium'>{option.text}</div>\n {option.description && <div className='text-xs opacity-70 mt-0.5'>{option.description}</div>}\n </div>\n {value === option.value && <Check size={16} className='ml-2 text-primary flex-shrink-0' />}\n </div>\n ))\n ) : (\n <div className='px-3 py-2 text-sm opacity-70 text-center'>\n {searchable && searchTerm ? 'No results found' : 'No options available'}\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n","import { Orientation } from './Separator';\n\nexport const thicknessVariants: Record<Thickness, Record<Orientation, string>> = {\n thin: {\n horizontal: 'h-px',\n vertical: 'w-px',\n },\n medium: {\n horizontal: 'h-0.5',\n vertical: 'w-0.5',\n },\n thick: {\n horizontal: 'h-1',\n vertical: 'w-1',\n },\n 'extra-thick': {\n horizontal: 'h-2',\n vertical: 'w-2',\n },\n} as const;\n\nexport type Thickness = 'thin' | 'medium' | 'thick' | 'extra-thick';\n\nexport const sizeVariants: Record<Orientation, string> = {\n horizontal: 'w-full',\n vertical: 'min-h-4 h-full',\n} as const;\n\nexport const defaultVariants = {\n thickness: 'thin',\n};\n","import React, { Ref } from 'react';\nimport { join } from '../../utils';\nimport { sizeVariants, Thickness, thicknessVariants } from './variants';\n\nexport type Orientation = 'horizontal' | 'vertical';\n\nexport interface SeparatorProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'role'> {\n ref?: Ref<HTMLDivElement>;\n orientation?: Orientation;\n /**\n * Whether the separator is decorative only or serves a semantic purpose.\n * When decorative=true, it's hidden from screen readers.\n * @default false\n */\n decorative?: boolean;\n thickness?: Thickness;\n}\n\nexport default function Separator({\n orientation = 'horizontal',\n decorative = false,\n thickness = 'thin',\n className,\n ...props\n}: SeparatorProps) {\n const separatorClasses = join(\n 'shrink-0 bg-border',\n sizeVariants[orientation],\n thicknessVariants[thickness][orientation],\n className\n );\n\n return (\n <div\n {...props}\n className={separatorClasses}\n role={decorative ? 'presentation' : 'separator'}\n aria-orientation={decorative ? undefined : orientation}\n aria-hidden={decorative}\n data-orientation={orientation}\n data-thickness={thickness}\n />\n );\n}\n","export const skeletonVariants = {\n shape: {\n rectangle: 'rounded-md min-h-1',\n circle: 'rounded-full aspect-square min-h-1',\n text: 'rounded-sm min-h-1 h-4',\n },\n lineSpacing: {\n xs: 'space-y-1',\n sm: 'space-y-2',\n md: 'space-y-3',\n lg: 'space-y-4',\n xl: 'space-y-6',\n },\n} as const;\n\nexport interface SkeletonVariants {\n shape?: keyof typeof skeletonVariants.shape;\n lineSpacing?: keyof typeof skeletonVariants.lineSpacing;\n}\n","import React from 'react';\nimport { join } from '../../utils';\nimport { skeletonVariants, type SkeletonVariants } from './variants';\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement>, SkeletonVariants {\n /** Custom class name for additional styling */\n className?: string;\n /** Number of skeleton lines to render (for text-like skeletons) */\n lines?: number;\n /** Whether the skeleton should animate */\n animate?: boolean;\n /** Ref to be passed to the skeleton element */\n ref?: React.Ref<HTMLDivElement>;\n}\n\nexport default function Skeleton({\n shape = 'rectangle',\n lineSpacing = 'sm',\n className,\n lines = 1,\n animate = true,\n ref,\n ...props\n}: SkeletonProps) {\n const baseClasses = join('bg-muted/70', animate && 'animate-pulse', skeletonVariants.shape[shape], className);\n\n // If lines is greater than 1, render multiple skeleton lines\n if (lines > 1) {\n return (\n <div\n ref={ref}\n className={skeletonVariants.lineSpacing[lineSpacing]}\n role='presentation'\n aria-hidden='true'\n data-testid='skeleton-container'\n data-lines={lines}\n data-shape={shape}\n data-animate={animate}\n {...props}\n >\n {Array.from({ length: lines }, (_, index) => (\n <div\n key={index}\n className={join(\n baseClasses,\n // Make last line shorter for a more natural text appearance\n index === lines - 1 && 'w-3/4'\n )}\n role='presentation'\n aria-hidden='true'\n data-testid='skeleton-line'\n data-line-index={index}\n />\n ))}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={baseClasses}\n role='presentation'\n aria-hidden='true'\n data-testid='skeleton'\n data-shape={shape}\n data-animate={animate}\n {...props}\n />\n );\n}\n","import React, { useState, useRef, useCallback } from 'react';\nimport { join } from '@moondreamsdev/dreamer-ui/utils';\n\nexport interface SliderProps {\n id?: string;\n /** Current value of the slider */\n value?: number;\n /** Default value when uncontrolled */\n defaultValue?: number;\n /** Callback fired when the value changes */\n onValueChange?: (value: number) => void;\n /** Minimum value */\n min?: number;\n /** Maximum value */\n max?: number;\n /** Step increment */\n step?: number;\n /** Whether the slider is disabled */\n disabled?: boolean;\n /** Custom class name for the track element */\n trackClassName?: string;\n /** Custom class name for the range element */\n rangeClassName?: string;\n /** Custom class name for the thumb element */\n thumbClassName?: string;\n /** Custom class name for the root element */\n className?: string;\n /** Ref to the root element */\n ref?: React.Ref<HTMLDivElement>;\n /** ARIA label for accessibility */\n ariaLabel?: string;\n /** ARIA labelledby for accessibility */\n ariaLabelledBy?: string;\n}\n\nexport default function Slider({\n id,\n value,\n defaultValue = 0,\n onValueChange,\n min = 0,\n max = 100,\n step = 1,\n disabled = false,\n trackClassName,\n rangeClassName,\n thumbClassName,\n className,\n ref,\n ariaLabel,\n ariaLabelledBy,\n ...props\n}: SliderProps) {\n const [internalValue, setInternalValue] = useState(defaultValue);\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : internalValue;\n\n const trackRef = useRef<HTMLDivElement>(null);\n const isDraggingRef = useRef(false);\n const dragOffsetRef = useRef(0);\n\n const updateValue = useCallback(\n (newValue: number) => {\n const clampedValue = Math.max(min, Math.min(max, newValue));\n const steppedValue = Math.round(clampedValue / step) * step;\n\n if (!isControlled) {\n setInternalValue(steppedValue);\n }\n onValueChange?.(steppedValue);\n },\n [min, max, step, isControlled, onValueChange]\n );\n\n const getValueFromPointerEvent = useCallback(\n (event: PointerEvent | React.PointerEvent, isDragging = false) => {\n const rect = trackRef.current?.getBoundingClientRect();\n if (!rect) return currentValue;\n\n let clientX = event.clientX;\n\n // If we're dragging, account for the offset from where the user initially clicked on the thumb\n if (isDragging) {\n clientX = clientX - dragOffsetRef.current;\n }\n\n const percentage = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));\n return min + (max - min) * percentage;\n },\n [min, max, currentValue]\n );\n\n const handleTrackPointerDown = useCallback(\n (event: React.PointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n\n // Only handle track clicks, not thumb clicks\n if (event.target !== event.currentTarget) return;\n\n const newValue = getValueFromPointerEvent(event);\n updateValue(newValue);\n },\n [disabled, getValueFromPointerEvent, updateValue]\n );\n\n const handleThumbPointerDown = useCallback(\n (event: React.PointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n\n // Prevent the track click handler from firing\n event.stopPropagation();\n\n isDraggingRef.current = true;\n\n // Calculate the offset from the click position to the center of the thumb\n const trackRect = trackRef.current?.getBoundingClientRect();\n const thumbRect = event.currentTarget.getBoundingClientRect();\n\n if (trackRect && thumbRect) {\n const thumbCenter = thumbRect.left + thumbRect.width / 2;\n dragOffsetRef.current = event.clientX - thumbCenter;\n }\n\n // Set pointer capture on the thumb element for better tracking\n event.currentTarget.setPointerCapture(event.pointerId);\n\n // Add global event listeners for smooth dragging\n const handleGlobalPointerMove = (e: PointerEvent) => {\n if (!isDraggingRef.current) return;\n const newValue = getValueFromPointerEvent(e, true);\n updateValue(newValue);\n };\n\n const handleGlobalPointerUp = (e: PointerEvent) => {\n if (e.pointerId !== event.pointerId) return;\n isDraggingRef.current = false;\n dragOffsetRef.current = 0;\n\n // Try to release capture from both the thumb and document\n try {\n event.currentTarget.releasePointerCapture(e.pointerId);\n } catch {\n // Ignore errors if element is no longer available\n }\n\n document.removeEventListener('pointermove', handleGlobalPointerMove);\n document.removeEventListener('pointerup', handleGlobalPointerUp);\n };\n\n document.addEventListener('pointermove', handleGlobalPointerMove);\n document.addEventListener('pointerup', handleGlobalPointerUp);\n },\n [disabled, getValueFromPointerEvent, updateValue]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n\n let newValue = currentValue;\n\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n newValue = currentValue + step;\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n newValue = currentValue - step;\n break;\n case 'Home':\n newValue = min;\n break;\n case 'End':\n newValue = max;\n break;\n case 'PageUp':\n newValue = currentValue + step * 10;\n break;\n case 'PageDown':\n newValue = currentValue - step * 10;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n updateValue(newValue);\n },\n [disabled, currentValue, step, min, max, updateValue]\n );\n\n // Calculate percentage for positioning\n const percentage = max === min ? 0 : ((currentValue - min) / (max - min)) * 100;\n\n return (\n <div\n id={id}\n ref={ref}\n className={join(\n 'relative flex items-center w-full touch-none select-none',\n disabled && 'opacity-50 cursor-not-allowed',\n className\n )}\n data-disabled={disabled}\n data-value={currentValue}\n data-min={min}\n data-max={max}\n data-step={step}\n {...props}\n >\n <div\n ref={trackRef}\n className={join(\n 'relative h-1.5 w-full rounded-full bg-muted cursor-pointer',\n disabled && 'cursor-not-allowed',\n trackClassName\n )}\n onPointerDown={handleTrackPointerDown}\n >\n {/* Range (filled portion) */}\n <div\n className={join(\n 'absolute h-full rounded-full pointer-events-none', // pointer-events are disabled so that user interactions are handled by the track element, enabling correct slider behavior\n !isDraggingRef.current && 'transition-all',\n rangeClassName\n )}\n style={{ width: `${percentage}%` }}\n />\n\n {/* Thumb */}\n <div\n className={join(\n 'absolute size-5 -top-2 rounded-full shadow-md cursor-grab',\n disabled && 'cursor-not-allowed',\n !disabled && 'cursor-grab focus:outline-none focus:ring-2',\n isDraggingRef.current ? 'cursor-grabbing scale-110' : 'transition-all',\n thumbClassName\n )}\n style={{ left: `calc(${percentage}% - 10px)` }}\n tabIndex={disabled ? -1 : 0}\n role='slider'\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={currentValue}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-disabled={disabled}\n onKeyDown={handleKeyDown}\n onPointerDown={handleThumbPointerDown}\n />\n </div>\n </div>\n );\n}\n","import React, {\n cloneElement,\n createElement,\n HTMLAttributes,\n isValidElement,\n ReactElement,\n ReactNode,\n Ref,\n} from 'react';\n\ninterface SlotProps<T> extends HTMLAttributes<T> {\n children?: ReactNode;\n ref?: Ref<T>;\n}\n\nexport function Slot<T = HTMLElement>({ children, ref, ...props }: SlotProps<T>) {\n\n if (isValidElement(children)) {\n let allProps = { ...props };\n if (children.props) {\n allProps = { ...allProps, ...children.props };\n }\n return cloneElement(children, {\n ...allProps,\n ref: (node: T) => {\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as React.RefObject<T>).current = node;\n }\n },\n } as unknown as ReactElement);\n }\n\n // If not asChild or no valid child, render as div\n return createElement('div', { ...props, ref }, children);\n}\n","import { useState, useCallback } from 'react';\n\nexport interface UseTabsProps {\n defaultValue?: string;\n value?: string;\n onValueChange?: (value: string) => void;\n}\n\nexport const useTabs = ({ defaultValue, value, onValueChange }: UseTabsProps = {}) => {\n const [internalValue, setInternalValue] = useState<string>(defaultValue || '');\n \n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : internalValue;\n \n const handleValueChange = useCallback((newValue: string) => {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n }, [isControlled, onValueChange]);\n\n return {\n value: currentValue,\n onValueChange: handleValueChange\n };\n};\n","import React from 'react';\nimport { useTabs } from './hooks';\nimport { TabsContext, TabsContextValue } from './TabsContext';\nimport { TabsVariant, TabsWidth } from './variants';\n\nexport interface TabsProps {\n id?: string;\n /** The default selected tab value (uncontrolled) */\n defaultValue?: string;\n /** The selected tab value (controlled) */\n value?: string;\n /** Callback fired when the tab selection changes */\n onValueChange?: (value: string) => void;\n /** How the tabs should be sized */\n tabsWidth?: TabsWidth;\n /** The visual style variant */\n variant?: TabsVariant;\n /** Additional class names for the tabs container */\n className?: string;\n /** The tab content and triggers */\n children?: React.ReactNode;\n /** Ref to the tabs container */\n ref?: React.Ref<HTMLDivElement>;\n /** Additional class names for the tab triggers */\n triggersClassName?: string;\n /** Additional class names for the tab content */\n contentClassName?: string;\n}\n\nexport function Tabs({\n defaultValue,\n value,\n onValueChange,\n tabsWidth = 'fit',\n variant = 'underline',\n className,\n children,\n ref,\n id,\n triggersClassName,\n contentClassName,\n}: TabsProps) {\n const { value: selectedValue, onValueChange: handleValueChange } = useTabs({\n defaultValue,\n value,\n onValueChange,\n });\n\n const contextValue: TabsContextValue = {\n selectedValue,\n onValueChange: handleValueChange,\n tabsWidth,\n variant,\n triggersClassName,\n contentClassName,\n };\n\n return (\n <TabsContext.Provider value={contextValue}>\n <div id={id} ref={ref} className={className} data-tabs-width={tabsWidth} data-variant={variant}>\n {children}\n </div>\n </TabsContext.Provider>\n );\n}\n","import { join } from '../../utils';\nimport { useTabsContext } from './TabsContext';\n\nexport interface TabsContentProps {\n ref?: React.Ref<HTMLDivElement>;\n /** The value that identifies this tab content */\n value: string;\n /** Additional class names */\n className?: string;\n /** Tab content */\n children?: React.ReactNode;\n}\n\nexport function TabsContent({ value, className, children, ref }: TabsContentProps) {\n const { selectedValue, contentClassName } = useTabsContext();\n const isActive = selectedValue === value;\n\n if (!isActive) {\n return null;\n }\n\n const baseClassName =\n 'mt-4 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2';\n\n return (\n <div\n ref={ref}\n role='tabpanel'\n id={`tabs-content-${value}`}\n aria-labelledby={`tabs-trigger-${value}`}\n data-state={isActive ? 'active' : 'inactive'}\n data-value={value}\n className={join(baseClassName, contentClassName, className)}\n tabIndex={0}\n >\n {children}\n </div>\n );\n}\n","export type TabsWidth = 'fit' | 'full';\nexport type TabsVariant = 'underline' | 'pills' | 'bordered';\n\nexport const tabsListVariants = {\n width: {\n fit: 'w-fit',\n full: 'w-full *:flex-1',\n },\n variant: {\n underline: 'border-b border-border',\n pills: '',\n bordered: 'border border-border rounded-lg p-1',\n },\n};\n\nexport const tabTriggerVariants = {\n underline:\n 'border-b-2 border-transparent data-[state=active]:border-accent data-[state=active]:text-accent hover:text-accent-foreground',\n pills: 'rounded-md data-[state=active]:bg-accent data-[state=active]:text-accent-foreground hover:bg-accent/30',\n bordered: 'rounded data-[state=active]:bg-accent data-[state=active]:text-accent-foreground hover:bg-accent/30',\n};\n","import { join } from '../../utils';\nimport { useTabsContext } from './TabsContext';\nimport { tabsListVariants } from './variants';\n\nexport interface TabsListProps {\n id?: string;\n ref?: React.Ref<HTMLDivElement>;\n children?: React.ReactNode;\n className?: string;\n}\n\nexport function TabsList({ children, className, id, ref }: TabsListProps) {\n const { tabsWidth, variant } = useTabsContext();\n\n return (\n <div\n id={id}\n ref={ref}\n role='tablist'\n className={join('flex', tabsListVariants.width[tabsWidth], tabsListVariants.variant[variant], className)}\n data-tabs-width={tabsWidth}\n data-variant={variant}\n >\n {children}\n </div>\n );\n}\n","import { join } from '../../utils';\nimport { useTabsContext } from './TabsContext';\nimport { tabTriggerVariants } from './variants';\n\nexport interface TabsTriggerProps {\n id?: string;\n ref?: React.Ref<HTMLButtonElement>;\n /** The value that identifies this tab */\n value: string;\n /** Whether this trigger is disabled */\n disabled?: boolean;\n /** Additional class names */\n className?: string;\n /** Tab trigger content */\n children?: React.ReactNode;\n /** Click handler */\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n}\n\nexport function TabsTrigger({ value, disabled = false, className, children, onClick, id, ref }: TabsTriggerProps) {\n const { selectedValue, onValueChange, variant, triggersClassName } = useTabsContext();\n const isActive = selectedValue === value;\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n if (!disabled) {\n onValueChange(value);\n }\n onClick?.(event);\n };\n\n const baseClassName =\n 'inline-flex items-center justify-center whitespace-nowrap px-3 py-2 text-sm ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50';\n\n return (\n <button\n id={id}\n ref={ref}\n role='tab'\n type='button'\n aria-selected={isActive}\n aria-controls={`tabs-content-${value}`}\n data-state={isActive ? 'active' : 'inactive'}\n data-value={value}\n disabled={disabled}\n className={join(\n baseClassName,\n isActive ? 'font-medium' : 'font-light',\n tabTriggerVariants[variant],\n triggersClassName,\n className\n )}\n onClick={handleClick}\n >\n {children}\n </button>\n );\n}\n","import { useEffect, useState } from 'react';\nimport { join } from '../../utils';\n\ninterface CharacterCountProps {\n elementId: string;\n maxLength: number;\n}\n\nexport default function CharacterCount({ elementId, maxLength }: CharacterCountProps) {\n const [characterCount, setCharacterCount] = useState(0);\n\n useEffect(() => {\n const textarea = document.getElementById(elementId) as HTMLTextAreaElement;\n if (!textarea) {\n return;\n }\n\n const updateCharacterCount = () => {\n const updatedCharacterCount = textarea.value.length;\n setCharacterCount(updatedCharacterCount);\n const isError = updatedCharacterCount >= maxLength;\n textarea.setAttribute('aria-describedby', `${elementId}-character-count`);\n textarea.setAttribute('aria-invalid', isError ? 'true' : 'false');\n\n if (isError) {\n textarea.setAttribute('data-error', 'true');\n } else {\n textarea.removeAttribute('data-error');\n }\n };\n\n updateCharacterCount();\n textarea.addEventListener('input', updateCharacterCount);\n textarea.setAttribute('maxlength', String(maxLength));\n\n return () => {\n textarea.removeEventListener('input', updateCharacterCount);\n textarea.removeAttribute('maxlength');\n textarea.removeAttribute('aria-describedby');\n textarea.removeAttribute('aria-invalid');\n textarea.removeAttribute('data-error');\n };\n }, [elementId, maxLength]);\n\n return (\n <small\n className={join(\n 'mt-0.5 text-sm inline-flex items-center gap-1 w-full justify-end',\n characterCount >= maxLength && 'text-destructive',\n characterCount < maxLength && 'text-current'\n )}\n role='status'\n >\n <span id={`${elementId}-character-count`}>\n {characterCount} / {maxLength} characters\n </span>\n </small>\n );\n}\n","import { useEffect } from 'react';\n\nexport function useAutoExpand(id: string, autoExpand: boolean) {\n useEffect(() => {\n const textarea = document.getElementById(id) as HTMLTextAreaElement;\n if (!textarea) {\n return;\n }\n\n if (!autoExpand) {\n textarea.style.height = 'auto';\n return;\n }\n\n const adjustHeight = () => {\n // necessary to reset the height to `auto` before calculating the new height\n textarea.style.height = 'auto';\n textarea.style.height = `${textarea.scrollHeight}px`;\n };\n\n adjustHeight();\n textarea.addEventListener('input', adjustHeight);\n textarea.addEventListener('resize', adjustHeight);\n window.addEventListener('resize', adjustHeight);\n\n return () => {\n textarea.removeEventListener('input', adjustHeight);\n textarea.removeEventListener('resize', adjustHeight);\n window.removeEventListener('resize', adjustHeight);\n };\n }, [id, autoExpand]);\n}\n","export const textareaVariants = {\n base: '',\n 'left-line':\n 'border-l border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-destructive not-disabled:data-success:border-success',\n outline:\n 'border border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-destructive not-disabled:data-success:border-success',\n} as const;\nexport type TextareaVariant = keyof typeof textareaVariants;\n\nexport const roundedVariants = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'px-3 rounded-full',\n} as const;\nexport type TextareaRounded = keyof typeof roundedVariants;\n\nexport interface TextareaVariants {\n variant: TextareaVariant;\n rounded: TextareaRounded;\n}\n\nexport const textareaDefaults: TextareaVariants = {\n variant: 'outline',\n rounded: 'none',\n} as const;\n","import { Ref, useId } from 'react';\nimport { StatusHelpMessage } from '../../shared/forms';\nimport { join } from '../../utils';\nimport CharacterCount from './CharacterCount';\nimport { useAutoExpand } from './hooks';\nimport './styles.css';\nimport { roundedVariants, textareaDefaults, textareaVariants, TextareaVariants } from './variants';\n\ninterface TextareaProps extends Partial<TextareaVariants>, React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n ref?: Ref<HTMLTextAreaElement>;\n displayOnlyMode?: boolean;\n errorMessage?: string;\n successMessage?: string;\n hideResizeHandle?: boolean; // only works for Webkit browsers\n autoExpand?: boolean;\n characterLimit?: number;\n}\n\nexport default function Textarea({\n variant = textareaDefaults.variant,\n rounded,\n displayOnlyMode = false,\n errorMessage,\n successMessage,\n hideResizeHandle = false,\n autoExpand = false,\n characterLimit = 0,\n className,\n ...rest\n}: TextareaProps) {\n const id = useId();\n useAutoExpand(id, autoExpand || displayOnlyMode);\n\n // Default `round` of `md` for `outline` variant\n let adjustedRound = rounded;\n if (variant === 'outline' && !rounded) {\n adjustedRound = 'md';\n }\n adjustedRound = adjustedRound || textareaDefaults.rounded;\n\n let adjustedHideResizeHandle = hideResizeHandle;\n if (displayOnlyMode || (variant === 'left-line' && !hideResizeHandle)) {\n adjustedHideResizeHandle = true;\n }\n\n const baseClasses =\n 'appearance-none w-full focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed placeholder:text-muted/70 hide-number-input-arrows transition-all';\n\n const inputClasses = join(\n baseClasses,\n !displayOnlyMode && textareaVariants[variant],\n !displayOnlyMode && roundedVariants[adjustedRound],\n !displayOnlyMode && 'px-2 py-1',\n displayOnlyMode && 'pointer-events-none',\n adjustedHideResizeHandle && 'no-resize-handle',\n\n className\n );\n\n return (\n <div className={join('-space-y-1.5', displayOnlyMode && 'cursor-text')}>\n <textarea\n {...rest}\n id={id}\n aria-disabled={rest.disabled}\n readOnly={displayOnlyMode}\n aria-readonly={displayOnlyMode || rest['aria-readonly']}\n style={{\n resize: autoExpand ? 'none' : undefined,\n }}\n className={inputClasses}\n />\n {characterLimit > 0 && <CharacterCount elementId={id} maxLength={characterLimit} />}\n {!displayOnlyMode && <StatusHelpMessage elementId={id} type='error' message={errorMessage} />}\n {!displayOnlyMode && <StatusHelpMessage elementId={id} type='success' message={successMessage} />}\n </div>\n );\n}\n","export const sizeVariants = {\n sm: {\n container: 'h-5 min-w-9 w-9',\n thumb: 'h-4 w-4',\n translate: 'translate-x-4',\n },\n md: {\n container: 'h-6 min-w-11 w-11',\n thumb: 'h-5 w-5',\n translate: 'translate-x-5',\n },\n lg: {\n container: 'h-7 min-w-13 w-13',\n thumb: 'h-6 w-6',\n translate: 'translate-x-6',\n },\n};\nexport type ToggleSize = keyof typeof sizeVariants;\n\nexport interface ToggleBackgroundClasses {\n unchecked?: string;\n checked?: string;\n}\n\nexport const variantStyles: Record<ToggleVariant, ToggleBackgroundClasses> = {\n default: {\n unchecked: 'bg-muted',\n checked: 'bg-primary',\n },\n success: {\n unchecked: 'bg-muted',\n checked: 'bg-success',\n },\n destructive: {\n unchecked: 'bg-muted',\n checked: 'bg-destructive',\n },\n};\nexport type ToggleVariant = 'default' | 'success' | 'destructive';\n\nexport interface ToggleVariants {\n variant: ToggleVariant;\n size: ToggleSize;\n}\n\nexport const toggleDefaults: ToggleVariants = {\n variant: 'default',\n size: 'md',\n} as const;\n","import React, { Ref, useEffect, useId, useMemo, useState } from 'react';\nimport { join } from '../../utils';\nimport {\n sizeVariants,\n ToggleBackgroundClasses,\n toggleDefaults,\n ToggleSize,\n ToggleVariant,\n variantStyles,\n} from './variants';\n\nexport interface ToggleProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n ref?: Ref<HTMLButtonElement>;\n size?: ToggleSize;\n variant?: ToggleVariant;\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n disabled?: boolean;\n thumbClassName?: string;\n backgroundClassNames?: ToggleBackgroundClasses;\n}\n\nexport default function Toggle({\n ref,\n id,\n size = toggleDefaults.size,\n variant = toggleDefaults.variant,\n checked,\n onCheckedChange,\n disabled = false,\n className,\n thumbClassName,\n backgroundClassNames,\n ...props\n}: ToggleProps) {\n const generatedId = useId();\n const toggleId = useMemo(() => id || `toggle-${generatedId}`, [id, generatedId]);\n const [isChecked, setIsChecked] = useState(checked);\n\n useEffect(() => {\n setIsChecked(checked);\n }, [checked]);\n\n const handleToggle = () => {\n if (!disabled) {\n const newChecked = !isChecked;\n\n if (checked === undefined) {\n // Only update state if the toggle is uncontrolled\n setIsChecked(newChecked);\n }\n onCheckedChange?.(newChecked);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n handleToggle();\n }\n };\n\n const sizeConfig = sizeVariants[size];\n const variantConfig = variantStyles[variant];\n\n const toggleClasses = join(\n // Base styles\n 'relative inline-flex items-center rounded-full transition-all duration-200 ease-in-out',\n 'focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2',\n // Size\n sizeConfig.container,\n // Variant and state\n isChecked\n ? backgroundClassNames?.checked || variantConfig.checked\n : backgroundClassNames?.unchecked || variantConfig.unchecked,\n // Disabled state\n disabled && 'opacity-50 cursor-not-allowed',\n !disabled && 'cursor-pointer',\n className\n );\n\n const thumbClasses = join(\n // Base thumb styles\n 'absolute left-0.5 top-1/2 -translate-y-1/2 rounded-full bg-white shadow-sm transition-transform duration-200 ease-in-out',\n // Size\n sizeConfig.thumb,\n // Position based on state\n isChecked && sizeConfig.translate,\n thumbClassName\n );\n\n return (\n <button\n ref={ref}\n id={toggleId}\n type='button'\n role='switch'\n tabIndex={0}\n aria-checked={isChecked}\n aria-disabled={disabled}\n disabled={disabled}\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n className={toggleClasses}\n {...props}\n >\n <span className={thumbClasses} />\n <span className='sr-only'>{isChecked ? 'Enabled' : 'Disabled'}</span>\n </button>\n );\n}\n","import { useCallback, useEffect, useRef } from 'react';\nimport { TooltipPlacement, TooltipPosition } from './Tooltip';\n\nexport const VIEWPORT_PADDING = 8; // Padding from viewport edges\nexport const TOOLTIP_OFFSET = 4; // Distance from target element\nexport const ARROW_SIZE = 6; // Size of the arrow\n\n/**\n * Calculates the optimal position for a tooltip based on the target element and viewport constraints.\n * Automatically adjusts placement if the preferred position would be out of bounds.\n */\nexport function useCalculatePosition(placement: TooltipPlacement) {\n const calculatePosition = useCallback(\n (targetElement: HTMLElement, tooltipElement: HTMLElement): TooltipPosition => {\n const targetRect = targetElement.getBoundingClientRect();\n const tooltipRect = tooltipElement.getBoundingClientRect();\n const viewport = {\n width: window.innerWidth,\n height: window.innerHeight,\n };\n\n const isOutOfBounds = (x: number, y: number, width: number, height: number) => {\n return x < 0 || y < 0 || x + width > viewport.width || y + height > viewport.height;\n };\n\n // Calculate positions for all placements\n const positions = {\n top: {\n x: targetRect.left + targetRect.width / 2 - tooltipRect.width / 2,\n y: targetRect.top - tooltipRect.height - TOOLTIP_OFFSET,\n arrow: {\n x: tooltipRect.width / 2 - ARROW_SIZE,\n y: tooltipRect.height,\n },\n },\n bottom: {\n x: targetRect.left + targetRect.width / 2 - tooltipRect.width / 2,\n y: targetRect.bottom + TOOLTIP_OFFSET,\n arrow: {\n x: tooltipRect.width / 2 - ARROW_SIZE,\n y: -ARROW_SIZE,\n },\n },\n left: {\n x: targetRect.left - tooltipRect.width - TOOLTIP_OFFSET,\n y: targetRect.top + targetRect.height / 2 - tooltipRect.height / 2,\n arrow: {\n x: tooltipRect.width,\n y: tooltipRect.height / 2 - ARROW_SIZE,\n },\n },\n right: {\n x: targetRect.right + TOOLTIP_OFFSET,\n y: targetRect.top + targetRect.height / 2 - tooltipRect.height / 2,\n arrow: {\n x: -ARROW_SIZE,\n y: tooltipRect.height / 2 - ARROW_SIZE,\n },\n },\n };\n\n // Determine the best placement, starting with the preferred one\n let bestPlacement = placement;\n let bestPosition = positions[placement];\n\n // Check if preferred placement is out of bounds\n if (isOutOfBounds(bestPosition.x, bestPosition.y, tooltipRect.width, tooltipRect.height)) {\n // Try opposite placement first\n const oppositePlacement: Record<TooltipPlacement, TooltipPlacement> = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n };\n\n const oppositePos = positions[oppositePlacement[placement]];\n if (!isOutOfBounds(oppositePos.x, oppositePos.y, tooltipRect.width, tooltipRect.height)) {\n bestPlacement = oppositePlacement[placement];\n bestPosition = oppositePos;\n } else {\n // Try all other placements\n const otherPlacements = (['top', 'bottom', 'left', 'right'] as TooltipPlacement[]).filter(\n (p) => p !== placement && p !== oppositePlacement[placement]\n );\n\n for (const p of otherPlacements) {\n const pos = positions[p];\n if (!isOutOfBounds(pos.x, pos.y, tooltipRect.width, tooltipRect.height)) {\n bestPlacement = p;\n bestPosition = pos;\n break;\n }\n }\n }\n }\n\n // Adjust position to stay within viewport bounds\n bestPosition.x = Math.max(\n VIEWPORT_PADDING,\n Math.min(bestPosition.x, viewport.width - tooltipRect.width - VIEWPORT_PADDING)\n );\n bestPosition.y = Math.max(\n VIEWPORT_PADDING,\n Math.min(bestPosition.y, viewport.height - tooltipRect.height - VIEWPORT_PADDING)\n );\n\n // Adjust arrow position based on the tooltip adjustment\n const targetCenter = {\n x: targetRect.left + targetRect.width / 2,\n y: targetRect.top + targetRect.height / 2,\n };\n\n if (bestPlacement === 'top' || bestPlacement === 'bottom') {\n bestPosition.arrow.x = Math.max(\n ARROW_SIZE,\n Math.min(targetCenter.x - bestPosition.x - ARROW_SIZE, tooltipRect.width - ARROW_SIZE * 2)\n );\n } else {\n bestPosition.arrow.y = Math.max(\n ARROW_SIZE,\n Math.min(targetCenter.y - bestPosition.y - ARROW_SIZE, tooltipRect.height - ARROW_SIZE * 2)\n );\n }\n\n return {\n ...bestPosition,\n placement: bestPlacement,\n };\n },\n [placement]\n );\n\n return { calculatePosition };\n}\n\n/**\n * Manages tooltip positioning logic including refs, position updates, and resize handling.\n * Automatically updates position when the window is resized.\n */\nexport function useTooltipPosition(\n calculatePosition: (target: HTMLElement, tooltip: HTMLElement) => TooltipPosition,\n shouldRender: boolean,\n setPosition: (position: TooltipPosition | null) => void\n) {\n const triggerRef = useRef<HTMLElement>(null);\n const tooltipRef = useRef<HTMLDivElement>(null);\n\n const updatePosition = useCallback(() => {\n if (!triggerRef.current || !tooltipRef.current) return;\n\n const newPosition = calculatePosition(triggerRef.current, tooltipRef.current);\n setPosition(newPosition);\n }, [calculatePosition, setPosition]);\n\n // Update position on resize\n useEffect(() => {\n if (!shouldRender) return;\n\n const handleUpdate = () => updatePosition();\n\n window.addEventListener('resize', handleUpdate);\n\n return () => {\n window.removeEventListener('resize', handleUpdate);\n };\n }, [shouldRender, updatePosition]);\n\n return {\n triggerRef,\n tooltipRef,\n updatePosition,\n };\n}\n\n/**\n * Manages tooltip show/hide events with delay handling and hover state coordination.\n * Handles timeout cleanup, delayed showing/hiding, and hover state transitions to prevent\n * flickering when moving between trigger and tooltip elements.\n */\nexport function useTooltipEvents(\n disabled: boolean,\n delay: number,\n setShouldRender: (shouldRender: boolean) => void,\n setIsVisible: (isVisible: boolean) => void,\n updatePosition: () => void,\n isHoveringTrigger: boolean,\n isHoveringTooltip: boolean,\n isFocused: boolean,\n isVisible: boolean\n) {\n const timeoutRef = useRef<number | null>(null);\n\n const showTooltip = useCallback(() => {\n if (disabled) return;\n\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = window.setTimeout(() => {\n setShouldRender(true);\n // Small delay to ensure DOM is updated before calculating position\n requestAnimationFrame(() => {\n updatePosition();\n setIsVisible(true);\n });\n }, delay);\n }, [disabled, delay, setShouldRender, updatePosition, setIsVisible]);\n\n const hideTooltip = useCallback(\n (forceHide = false) => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n if (forceHide) {\n setIsVisible(false);\n setTimeout(() => setShouldRender(false), 150);\n return;\n }\n\n // Small delay to allow moving from trigger to tooltip\n timeoutRef.current = window.setTimeout(() => {\n setIsVisible(false);\n setTimeout(() => setShouldRender(false), 150);\n }, 100);\n },\n [setIsVisible, setShouldRender]\n );\n\n // Handle hover state changes\n useEffect(() => {\n if (!isHoveringTrigger && !isHoveringTooltip && !isFocused && isVisible) {\n // Neither trigger nor tooltip is being hovered/focused, hide the tooltip\n hideTooltip();\n }\n }, [isHoveringTrigger, isHoveringTooltip, isFocused, isVisible, hideTooltip]);\n\n // Cleanup timeout on unmount\n useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n return {\n showTooltip,\n hideTooltip,\n timeoutRef,\n };\n}\n","import React, { useId, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { join } from '../../utils';\nimport { useCalculatePosition, useTooltipEvents, useTooltipPosition } from './hooks';\n\nexport type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right';\n\nexport interface TooltipProps {\n id?: string;\n children: React.ReactElement;\n message: React.ReactNode;\n placement?: TooltipPlacement;\n disabled?: boolean;\n delay?: number;\n className?: string;\n arrowClassName?: string;\n}\n\nexport interface TooltipPosition {\n x: number;\n y: number;\n placement: TooltipPlacement;\n arrow: {\n x: number;\n y: number;\n };\n}\n\nexport function Tooltip({\n id,\n children,\n message,\n placement = 'top',\n disabled = false,\n delay = 200,\n className,\n}: TooltipProps) {\n const [isVisible, setIsVisible] = useState(false); // Controls visibility of the tooltip\n const [shouldRender, setShouldRender] = useState(false); // Controls whether the tooltip is rendered in the DOM\n const [position, setPosition] = useState<TooltipPosition | null>(null);\n const [isHoveringTrigger, setIsHoveringTrigger] = useState(false);\n const [isHoveringTooltip, setIsHoveringTooltip] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n const { calculatePosition } = useCalculatePosition(placement);\n const { triggerRef, tooltipRef, updatePosition } = useTooltipPosition(calculatePosition, shouldRender, setPosition);\n const { showTooltip, hideTooltip, timeoutRef } = useTooltipEvents(\n disabled,\n delay,\n setShouldRender,\n setIsVisible,\n updatePosition,\n isHoveringTrigger,\n isHoveringTooltip,\n isFocused,\n isVisible\n );\n\n const reactId = useId();\n const tooltipId = id ?? reactId;\n\n // const getArrowClasses = (arrowPlacement: TooltipPlacement) => {\n // const baseArrow = 'absolute w-0 h-0';\n // const arrowClasses = {\n // top: 'border-l-[6px] border-r-[6px] border-t-[6px] border-l-transparent border-r-transparent border-t-border',\n // bottom: 'border-l-[6px] border-r-[6px] border-b-[6px] border-l-transparent border-r-transparent border-b-border',\n // left: 'border-t-[6px] border-b-[6px] border-l-[6px] border-t-transparent border-b-transparent border-l-border',\n // right: 'border-t-[6px] border-b-[6px] border-r-[6px] border-t-transparent border-b-transparent border-r-border',\n // };\n\n // return join(baseArrow, arrowClasses[arrowPlacement], arrowClassName);\n // };\n\n return (\n <>\n {React.cloneElement(children, {\n ref: (node: HTMLElement | null) => {\n triggerRef.current = node;\n },\n onMouseEnter: () => {\n setIsHoveringTrigger(true);\n showTooltip();\n },\n onMouseLeave: () => {\n setIsHoveringTrigger(false);\n },\n onFocus: () => {\n setIsFocused(true);\n showTooltip();\n },\n onBlur: () => {\n setIsFocused(false);\n hideTooltip(true);\n },\n onKeyDown: (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n hideTooltip(true);\n }\n },\n 'aria-describedby': disabled ? undefined : tooltipId,\n } as Record<string, unknown>)}\n {shouldRender &&\n createPortal(\n <div\n ref={tooltipRef}\n id={tooltipId}\n role='tooltip'\n className={join(\n 'fixed z-50 px-2 py-1 text-sm rounded shadow-lg bg-popover pointer-events-auto transition-all duration-150 ease-out',\n isVisible ? 'opacity-100' : 'opacity-0',\n className\n )}\n style={position ? { left: position.x, top: position.y } : { opacity: 0 }}\n onMouseEnter={() => {\n setIsHoveringTooltip(true);\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n }}\n onMouseLeave={() => {\n setIsHoveringTooltip(false);\n }}\n >\n {message}\n {/* {position && (\n <div\n className={getArrowClasses(position.placement)}\n style={{ left: position.arrow.x, top: position.arrow.y }}\n />\n )} */}\n </div>,\n document.body\n )}\n </>\n );\n}\n\nexport default Tooltip;\n"],"names":["AccordionItem","id","title","content","children","className","disabled","isOpen","onToggle","triggerClassName","bodyClassName","fallbackId","useId","itemId","headerId","panelId","handleToggle","handleKeyDown","e","jsxs","join","jsx","ChevronDown","Accordion","items","itemClassName","allowMultiple","defaultOpenItems","triggersClassName","bodiesClassName","groupId","groupName","openItems","setOpenItems","useState","toggleItem","prev","newOpenItems","getItemId","index","isItemOpen","item","React","child","createElement","LoadingDots","activeIndex","setActiveIndex","useEffect","interval","prevIndex","buttonVariants","sizeVariants","roundedVariants","buttonDefaults","Button","variant","size","rounded","loading","linkTo","linkProps","type","rest","adjustedSize","buttonClasses","useCarousel","totalItems","itemsToShow","infinite","autoScroll","scrollInterval","pauseScrollOnHover","currentIndex","onIndexChange","currentSlide","setCurrentSlide","isHovered","setIsHovered","intervalRef","useRef","maxSlides","canGoPrev","canGoNext","goToSlide","useCallback","clampedIndex","goToPrev","newIndex","goToNext","startInterval","stopInterval","breakpoints","useScreenSize","screenSize","setScreenSize","screenWidth","setScreenWidth","getBreakpoint","getScreenSize","width","handleResize","buttonSizeVariants","buttonStyleVariants","buttonPositionVariants","Carousel","ref","hidePrevNext","hideDots","buttonSize","buttonVariant","buttonPosition","prevButton","nextButton","itemsClassName","containerClassName","dotsClassName","gap","containerRef","childrenArray","currentItemsToShow","useMemo","breakpointOrder","i","breakpoint","getSlideItemStyles","pos","widthReduction","handlePrevClick","handleNextClick","handleMouseEnter","handleMouseLeave","translateX","baseButtonStyles","Fragment","_a","ChevronLeft","leftWidth","rightWidth","_","_b","ChevronRight","useFilledBackgroundColor","filledBackgroundColor","setFilledBackgroundColor","getFirstNonTransparentBackgroundColor","element","currentElement","color","backgroundColor","checkbox","Checkbox","filled","checked","onCheckedChange","props","generatedId","checkboxId","parentBackgroundColor","isChecked","setIsChecked","handleChange","handleOnKeyDown","checkboxClasses","Check","Clickable","onButtonClick","buttonProps","StatusHelpMessage","elementId","message","ExclamationTriangle","CheckCircled","inputVariants","inputDefaults","Input","displayOnlyMode","errorMessage","successMessage","showPassword","setShowPassword","adjustedRound","inputClasses","EyeOpened","EyeClosed","Label","display","required","helpMessage","suffix","htmlFor","description","showHelp","showDescription","helpId","descriptionId","QuestionMarkCircled","useAnimationOpenClose","show","setShow","shouldRender","setShouldRender","useDocumentChanges","onClose","handleEscape","useHandleFocus","modalId","previousActiveElement","focusAppropriateElement","modalElement","modalActions","focusableElements","allBesidesCloseButton","el","Modal","contentOnly","overlayClassName","hideCloseButton","actions","disableCloseOnOverlayClick","ariaLabelledBy","ariaDescribedBy","titleId","renderTitle","renderActions","action","label","createPortal","X","paginationVariants","paginationSizes","Pagination","page","pageCount","maxVisiblePages","showFirstLast","onPageChange","buttonsClassName","isInfinite","visiblePages","totalPages","maxPages","half","start","end","canGoPrevious","showFirstButton","showLastButton","handlePageChange","newPage","getButtonClasses","baseClasses","ChevronDoubleLeft","pageNum","ChevronDoubleRight","useAnimationSlideIn","usePanelDocumentChanges","usePanelFocus","panelElement","panelActions","panelVariants","Panel","footer","renderFooter","footerElement","existingClassName","RadioInput","onChange","name","handleClick","radioClasses","RadioGroupItem","value","isSelected","hideInput","useRadioFocus","selectedOptionIndex","focusedIndex","setFocusedIndex","clickedIndex","setClickedIndex","isMouseDown","setIsMouseDown","handleClicked","options","target","setInitialFocus","indexToFocus","handleFocusPreceding","previousIndex","handleKeyboardNavigation","option","getRadioOptions","radioGroup","handleFocus","handleMouseDown","handleMouseUp","RadioGroup","childrenClassName","hideInputs","processedOptions","acc","useScrollArea","scrollbarThickness","viewportRef","verticalThumbRef","horizontalThumbRef","isScrolling","setIsScrolling","isFadingOut","setIsFadingOut","scrollbarVisible","setScrollbarVisible","scrollTimeout","fadeTimeout","checkOverflow","viewport","hasVerticalScroll","hasHorizontalScroll","updateThumbSizes","verticalThumb","horizontalThumb","scrollRatio","thumbHeight","maxScrollTop","scrollPercentage","maxThumbPosition","thumbTop","thumbWidth","maxScrollLeft","thumbLeft","handleScroll","resizeObserver","mutationObserver","ScrollArea","thumbClassName","viewportClassName","scrollbarClassName","thumbsClassName","useSelectDropdown","useSelectKeyboardNavigation","setIsOpen","filteredOptions","highlightedIndex","setHighlightedIndex","onSelect","triggerRef","nextIndex","finalIndex","checkIndex","selectedOption","useSelectHighlight","optionsContainerRef","selectedIndex","scrollToOption","container","highlightedOption","behavior","Select","placeholder","searchable","clearable","dropdownClassName","onSearch","searchPlaceholder","listboxId","getOptionId","searchTerm","setSearchTerm","searchInputRef","dropdownRef","activeDescendantId","keyboardOnSelect","handleClickOutside","event","handleOptionClick","handleSearchChange","term","handleClear","thicknessVariants","Separator","orientation","decorative","thickness","separatorClasses","skeletonVariants","Skeleton","shape","lineSpacing","lines","animate","Slider","defaultValue","onValueChange","min","max","step","trackClassName","rangeClassName","ariaLabel","internalValue","setInternalValue","isControlled","currentValue","trackRef","isDraggingRef","dragOffsetRef","updateValue","newValue","clampedValue","steppedValue","getValueFromPointerEvent","isDragging","rect","clientX","percentage","handleTrackPointerDown","handleThumbPointerDown","trackRect","thumbRect","thumbCenter","handleGlobalPointerMove","handleGlobalPointerUp","Slot","isValidElement","allProps","cloneElement","node","useTabs","handleValueChange","Tabs","tabsWidth","contentClassName","selectedValue","contextValue","TabsContext","TabsContent","useTabsContext","isActive","tabsListVariants","tabTriggerVariants","TabsList","TabsTrigger","onClick","CharacterCount","maxLength","characterCount","setCharacterCount","textarea","updateCharacterCount","updatedCharacterCount","isError","useAutoExpand","autoExpand","adjustHeight","textareaVariants","textareaDefaults","Textarea","hideResizeHandle","characterLimit","adjustedHideResizeHandle","variantStyles","toggleDefaults","Toggle","backgroundClassNames","toggleId","newChecked","sizeConfig","variantConfig","toggleClasses","thumbClasses","VIEWPORT_PADDING","TOOLTIP_OFFSET","ARROW_SIZE","useCalculatePosition","placement","targetElement","tooltipElement","targetRect","tooltipRect","isOutOfBounds","x","y","height","positions","bestPlacement","bestPosition","oppositePlacement","oppositePos","otherPlacements","p","targetCenter","useTooltipPosition","calculatePosition","setPosition","tooltipRef","updatePosition","newPosition","handleUpdate","useTooltipEvents","delay","setIsVisible","isHoveringTrigger","isHoveringTooltip","isFocused","isVisible","timeoutRef","showTooltip","hideTooltip","forceHide","Tooltip","position","setIsHoveringTrigger","setIsHoveringTooltip","setIsFocused","reactId","tooltipId"],"mappings":";;;;;;;;AAcO,SAASA,GAAc;AAAA,EAC5B,IAAAC;AAAA,EACA,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,UAAAC,IAAW;AAAA,EACX,QAAAC,IAAS;AAAA,EACT,UAAAC;AAAA,EACA,kBAAAC,IAAmB;AAAA,EACnB,eAAAC,IAAgB;AAClB,GAAuB;AACrB,QAAMC,IAAaC,EAAM,GACnBC,IAASZ,KAAM,kBAAkBU,CAAU,IAC3CG,IAAW,GAAGD,CAAM,WACpBE,IAAU,GAAGF,CAAM,UAEnBG,IAAe,MAAM;AACrB,IAAA,CAACV,KAAYE,KACNA,EAAA;AAAA,EAEb,GAEMS,IAAgB,CAACC,MAA2B;AAChD,KAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SACjCA,EAAE,eAAe,GACJF,EAAA;AAAA,EAEjB;AAGE,SAAA,gBAAAG,EAAC,SAAI,WAAWC,EAAK,4BAA4Bd,KAAY,iCAAiCD,CAAS,GACrG,UAAA;AAAA,IAAA,gBAAAc;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAIL;AAAA,QACJ,MAAK;AAAA,QACL,WAAWM;AAAA,UACT;AAAA,UACAd,IAAW,uBAAuB;AAAA,UAClCG;AAAA,QACF;AAAA,QACA,iBAAeF;AAAA,QACf,iBAAeQ;AAAA,QACf,UAAAT;AAAA,QACA,SAASU;AAAA,QACT,WAAWC;AAAA,QAEX,UAAA;AAAA,UAAA,gBAAAI,EAAC,UAAM,UAAMnB,EAAA,CAAA;AAAA,UACb,gBAAAmB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWD;AAAA,gBACT;AAAA,gBACAb,IAAS,eAAe;AAAA,cAC1B;AAAA,cACA,eAAY;AAAA,cAEZ,UAAA,gBAAAc,EAACC,IAAY,EAAA,MAAM,GAAI,CAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACzB;AAAA,MAAA;AAAA,IACF;AAAA,IAEA,gBAAAD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAIN;AAAA,QACJ,MAAK;AAAA,QACL,mBAAiBD;AAAA,QACjB,WAAWM;AAAA,UACT;AAAA,UACAb,IAAS,4CAA4C;AAAA,UACrDG;AAAA,QACF;AAAA,QAEC,gBAAWN,KAAYD;AAAA,MAAA;AAAA,IAAA;AAAA,EAC1B,GACF;AAEJ;AC9DO,SAASoB,GAAU;AAAA,EACxB,IAAAtB;AAAA,EACA,OAAAuB,IAAQ,CAAC;AAAA,EACT,UAAApB;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,eAAAoB,IAAgB;AAAA,EAChB,eAAAC,IAAgB;AAAA,EAChB,kBAAAC,IAAmB,CAAC;AAAA,EACpB,mBAAAC,IAAoB;AAAA,EACpB,iBAAAC,IAAkB;AACpB,GAAmB;AACjB,QAAMC,IAAUlB,EAAM,GAChBmB,IAAY9B,KAAM,mBAAmB6B,CAAO,IAC5C,CAACE,GAAWC,CAAY,IAAIC,EAAsB,IAAI,IAAIP,CAAgB,CAAC,GAE3EQ,IAAa,CAACtB,MAAmB;AACrC,IAAAoB,EAAa,CAACG,MAAS;AACf,YAAAC,IAAe,IAAI,IAAID,CAAI;AAE7B,aAAAC,EAAa,IAAIxB,CAAM,IACzBwB,EAAa,OAAOxB,CAAM,KAErBa,KACHW,EAAa,MAAM,GAErBA,EAAa,IAAIxB,CAAM,IAGlBwB;AAAA,IAAA,CACR;AAAA,EACH,GAEMC,IAAY,CAACC,MAAkB,GAAGT,CAAO,SAASS,CAAK,IACvDC,IAAa,CAAC3B,MAAmBmB,EAAU,IAAInB,CAAM;AAE3D,SACG,gBAAAM,EAAA,OAAA,EAAI,IAAIY,GAAW,WAAA1B,GAEjB,UAAA;AAAA,IAAAmB,EAAM,SAAS,KACdA,EAAM,IAAI,CAACiB,GAAMF,MAAU;AACzB,YAAM1B,IAAS4B,EAAK,MAAMH,EAAUC,CAAK;AAEvC,aAAA,gBAAAlB;AAAA,QAACrB;AAAA,QAAA;AAAA,UAEC,IAAIa;AAAA,UACJ,OAAO4B,EAAK;AAAA,UACZ,SAASA,EAAK;AAAA,UACd,UAAUA,EAAK;AAAA,UACf,QAAQD,EAAW3B,CAAM;AAAA,UACzB,UAAU,MAAMsB,EAAWtB,CAAM;AAAA,UACjC,WAAWY;AAAA,UACX,kBAAkBG;AAAA,UAClB,eAAeC;AAAA,QAAA;AAAA,QATVhB;AAAA,MAUP;AAAA,IAAA,CAEH;AAAA,IAGFW,EAAM,WAAW,KAChBpB,KACAsC,EAAM,SAAS,IAAItC,GAAU,CAACuC,GAAOJ,MAAU;AAC7C,UAAIG,EAAM,eAAmCC,CAAK,KAAKA,EAAM,SAAS3C,IAAe;AACnF,cAAMa,IAAS8B,EAAM,MAAM,MAAML,EAAUC,CAAK;AAE9C,eAAA,gBAAAK;AAAA,UAAC5C;AAAA,UAAA;AAAA,YACE,GAAG2C,EAAM;AAAA,YACV,KAAK9B;AAAA,YACL,IAAIA;AAAA,YACJ,WAAWO,EAAKK,GAAekB,EAAM,MAAM,SAAS;AAAA,YACpD,QAAQH,EAAW3B,CAAM;AAAA,YACzB,UAAU,MAAMsB,EAAWtB,CAAM;AAAA,YACjC,kBAAkBO,EAAKQ,GAAmBe,EAAM,MAAM,gBAAgB;AAAA,YACtE,eAAevB,EAAKS,GAAiBc,EAAM,MAAM,aAAa;AAAA,UAAA;AAAA,QAChE;AAAA,MAAA;AAGG,aAAA;AAAA,IACR,CAAA;AAAA,EAAA,GACL;AAEJ;ACrGA,SAAwBE,KAAc;AACpC,QAAM,CAACC,GAAaC,CAAc,IAAIb,EAAS,CAAC;AAEhD,SAAAc,EAAU,MAAM;AACR,UAAAC,IAAW,YAAY,MAAM;AACjC,MAAAF,EAAe,CAACG,OAAeA,IAAY,KAAK,CAAC;AAAA,OAChD,GAAG;AAEC,WAAA,MAAM,cAAcD,CAAQ;AAAA,EACrC,GAAG,EAAE,GAGH,gBAAA5B,EAAC,OAAI,EAAA,WAAU,iFACZ,UAAA,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAACkB,MACd,gBAAAlB;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,WAAWD;AAAA,QACT;AAAA,QACA0B,MAAgBP,KAAS;AAAA,MAAA;AAAA,IAC3B;AAAA,IAJKA;AAAA,EAMR,CAAA,GACH;AAEJ;AC3BO,MAAMY,KAAiB;AAAA,EAC5B,MAAM;AAAA,EACN,SAAS;AAAA,EACT,WAAW;AAAA,EACX,UAAU;AAAA,EACV,SAAS;AAAA,EACT,MAAM;AAAA,EACN,aAAa;AACf,GAGaC,KAAe;AAAA,EAC1B,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,MAAM;AACR,GAGaC,KAAkB;AAAA,EAC7B,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AACR,GASaC,KAAiC;AAAA,EAC5C,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AACX;AC5BA,SAAwBC,GAAO;AAAA,EAC7B,SAAAC,IAAUF,GAAe;AAAA,EACzB,MAAAG;AAAA,EACA,SAAAC,IAAUJ,GAAe;AAAA,EACzB,SAAAK;AAAA,EACA,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,WAAAzD;AAAA,EACA,GAAG0D;AACL,GAAgB;AACV,MAAAC;AACA,EAAAR,MAAY,UAAU,CAACC,IAEVO,IAAA,WAEfA,IAAeP,KAAQH,GAAe;AAMxC,QAAMW,IAAgB7C;AAAA,IAFpB;AAAA,IAIA+B,GAAeK,CAAO;AAAA,IACtBJ,GAAaY,CAAY;AAAA,IACzBX,GAAgBK,CAAO;AAAA,IACvBC,KAAW;AAAA,IACXC,KAAU;AAAA,IACVvD;AAAA,EACF;AAGE,SAAA,gBAAAc;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAG4C;AAAA,MACJ,MAAMH,IAAS,SAASG,EAAK;AAAA,MAC7B,cAAYA,EAAK,YAAY,MAAKF,KAAA,gBAAAA,EAAY;AAAA,MAC9C,oBAAkBE,EAAK,kBAAkB,MAAKF,KAAA,gBAAAA,EAAY;AAAA,MAC1D,iBAAeE,EAAK,YAAYJ;AAAA,MAChC,aAAWA;AAAA,MACX,MAAAG;AAAA,MACA,WAAWG;AAAA,MAEV,UAAA;AAAA,QAAAN,uBAAYd,IAAY,EAAA;AAAA,QACzB,gBAAAxB,EAAC,UAAK,WAAWD,EAAKuC,KAAW,WAAW,GAAI,YAAK,UAAS;AAAA,QAE7DC,KAAU,CAACG,EAAK,YACf,gBAAA1C;AAAA,UAAC;AAAA,UAAA;AAAA,YACE,GAAGwC;AAAA,YACJ,eAAa;AAAA,YACb,MAAMD;AAAA,YACN,MAAKC,KAAA,gBAAAA,EAAW,QAAO;AAAA,YACvB,WAAU;AAAA,UAAA;AAAA,QAAA;AAAA,MACZ;AAAA,IAAA;AAAA,EAEJ;AAEJ;ACzDO,SAASK,GAAY;AAAA,EAC1B,YAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,eAAAC;AACF,GAAqB;AACnB,QAAM,CAACC,GAAcC,CAAe,IAAI1C,EAASuC,KAAgB,CAAC,GAC5D,CAACI,GAAWC,CAAY,IAAI5C,EAAS,EAAK,GAC1C6C,IAAcC,EAA8C,IAAI,GAEhEC,IAAY,KAAK,KAAKd,IAAaC,CAAW,GAC9Cc,IAAYb,KAAYM,IAAe,GACvCQ,IAAYd,KAAYM,IAAeM,IAAY,GAEnDG,IAAYC;AAAA,IAChB,CAAC9C,MAAkB;AACX,YAAA+C,IAAe,KAAK,IAAI,GAAG,KAAK,IAAI/C,GAAO0C,IAAY,CAAC,CAAC;AAC/D,MAAAL,EAAgBU,CAAY,GAC5BZ,KAAA,QAAAA,EAAgBY;AAAA,IAClB;AAAA,IACA,CAACL,GAAWP,CAAa;AAAA,EAC3B,GAEMa,IAAWF,EAAY,MAAM;AACjC,QAAIH,GAAW;AACb,YAAMM,IAAWb,MAAiB,KAAKN,IAAWY,IAAY,IAAIN,IAAe;AACjF,MAAAS,EAAUI,CAAQ;AAAA,IAAA;AAAA,EACpB,GACC,CAACb,GAAcO,GAAWb,GAAUY,GAAWG,CAAS,CAAC,GAEtDK,IAAWJ,EAAY,MAAM;AACjC,QAAIF,GAAW;AACb,YAAMK,IAAWb,MAAiBM,IAAY,KAAKZ,IAAW,IAAIM,IAAe;AACjF,MAAAS,EAAUI,CAAQ;AAAA,IAAA;AAAA,EACpB,GACC,CAACb,GAAcQ,GAAWd,GAAUY,GAAWG,CAAS,CAAC;AAG5D,SAAApC,EAAU,MAAM;AACV,IAAAyB,MAAiB,UAAaA,MAAiBE,KACjDC,EAAgBH,CAAY;AAAA,EAC9B,GACC,CAACA,GAAcE,CAAY,CAAC,GAG/B3B,EAAU,MAAM;AACd,QAAI,CAACsB,EAAY;AAEjB,UAAMoB,IAAgB,MAAM;AACd,MAAAX,EAAA,UAAU,YAAY,MAAM;AACtC,QAAIP,KAAsBK,KAEjBY,EAAA;AAAA,SACRlB,CAAc;AAAA,IACnB,GAEMoB,IAAe,MAAM;AACzB,MAAIZ,EAAY,YACd,cAAcA,EAAY,OAAO,GACjCA,EAAY,UAAU;AAAA,IAE1B;AAEI,WAAA,CAACF,KAAa,CAACL,IACHkB,EAAA,IAEDC,EAAA,GAGRA;AAAA,EAAA,GACN,CAACrB,GAAYC,GAAgBC,GAAoBK,GAAWY,CAAQ,CAAC,GAGxEzC,EAAU,MAAM;AACd,IAAA4B,EAAgB,CAAC;AAAA,EAAA,GAChB,CAACR,CAAW,CAAC,GAET;AAAA,IACL,cAAAO;AAAA,IACA,WAAAO;AAAA,IACA,WAAAC;AAAA,IACA,UAAAI;AAAA,IACA,UAAAE;AAAA,IACA,WAAAL;AAAA,IACA,WAAAP;AAAA,IACA,cAAAC;AAAA,EACF;AACF;ACrGA,MAAMc,KAAc;AAAA,EAClB,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,OAAO;AAAA;AACT;AAIA,SAAwBC,KAAgB;AACtC,QAAM,CAACC,GAAYC,CAAa,IAAI7D,EAAqB,GACnD,CAAC8D,GAAaC,CAAc,IAAI/D,EAAiB,CAAC,GAElDgE,IAAgB,CAACzC,MAAqBmC,GAAYnC,CAAI;AAE5D,SAAAT,EAAU,MAAM;AACR,UAAAmD,IAAgB,CAACC,MACjBA,KAASR,GAAY,KAAK,IAAU,QACpCQ,KAASR,GAAY,KAAc,OACnCQ,KAASR,GAAY,KAAc,OACnCQ,KAASR,GAAY,KAAc,OACnCQ,KAASR,GAAY,KAAc,OAChC;AAGK,IAAAG,EAAAI,EAAc,OAAO,UAAU,CAAC,GAC9CF,EAAe,OAAO,UAAU;AAEhC,UAAMI,IAAe,MAAM;AACX,MAAAN,EAAAI,EAAc,OAAO,UAAU,CAAC,GAC9CF,EAAe,OAAO,UAAU;AAAA,IAClC;AAEO,kBAAA,iBAAiB,UAAUI,CAAY,GAEvC,MAAM;AACJ,aAAA,oBAAoB,UAAUA,CAAY;AAAA,IACnD;AAAA,EACF,GAAG,EAAE,GAEE,EAAE,YAAAP,GAAY,aAAAE,GAAa,eAAAE,EAAc;AAClD;AC9CO,MAAMI,KAAqB;AAAA,EAChC,IAAI;AAAA,IACF,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACA,IAAI;AAAA,IACF,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACA,IAAI;AAAA,IACF,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA;AAEV,GAIaC,KAAsB;AAAA,EACjC,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AACT,GAIaC,KAAyB;AAAA,EACpC,SAAS;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,EAAA;AAEV;AC4BA,SAAwBC,GAAS;AAAA,EAC/B,UAAArG;AAAA,EACA,IAAAH;AAAA,EACA,KAAAyG;AAAA,EACA,WAAArG;AAAA,EACA,YAAAiE,IAAa;AAAA,EACb,gBAAAC,IAAiB;AAAA,EACjB,oBAAAC,IAAqB;AAAA,EACrB,cAAAC;AAAA,EACA,eAAAC;AAAA,EACA,cAAAiC,IAAe;AAAA,EACf,UAAAC,IAAW;AAAA,EACX,aAAAxC,IAAc;AAAA,EACd,YAAAyC,IAAa;AAAA,EACb,eAAAC,IAAgB;AAAA,EAChB,gBAAAC,IAAiB;AAAA,EACjB,UAAA1C,IAAW;AAAA,EACX,YAAA2C;AAAA,EACA,YAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,KAAAC,IAAM;AACR,GAAkB;;AACV,QAAAC,IAAetC,EAAuB,IAAI,GAC1CuC,IAAgB7E,EAAM,SAAS,QAAQtC,CAAQ,EAAE,OAAOsC,EAAM,cAAc,GAC5EyB,IAAaoD,EAAc,QAC3B,EAAE,YAAAzB,EAAW,IAAID,GAAc,GAG/B2B,IAAqBC,EAAQ,MAAM;AACnC,QAAA,OAAOrD,KAAgB;AAClB,aAAAA;AAGT,QAAI,OAAOA,KAAgB,YAAYA,KAAe0B,GAAY;AAEhE,YAAM4B,IAAqC,CAAC,OAAO,MAAM,MAAM,MAAM,MAAM,IAAI,GACzEjD,IAAeiD,EAAgB,QAAQ5B,CAAU;AAEvD,eAAS6B,IAAIlD,GAAckD,IAAID,EAAgB,QAAQC,KAAK;AACpD,cAAAC,KAAaF,EAAgBC,CAAC;AAChC,YAAAvD,EAAYwD,EAAU,MAAM;AAC9B,iBAAOxD,EAAYwD,EAAU;AAAA,MAC/B;AAAA,IACF;AAGK,WAAA;AAAA,EAAA,GACN,CAACxD,GAAa0B,CAAU,CAAC,GAEtB,EAAE,cAAAnB,GAAc,WAAAO,GAAW,WAAAC,GAAW,UAAAI,GAAU,UAAAE,GAAU,WAAAL,GAAW,cAAAN,EAAa,IAAIZ,GAAY;AAAA,IACtG,YAAAC;AAAA,IACA,aAAaqD;AAAA,IACb,UAAAnD;AAAA,IACA,YAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,eAAAC;AAAA,EAAA,CACD,GAEKmD,IAAqBxC;AAAA,IACzB,CAACyC,MAAgB;AAEf,UAAIN,MAAuB;AACzB,eAAO,EAAE,WAAW,GAAG,YAAY,GAAG,gBAAgB,EAAE;AAGpD,YAAAO,IAAkBV,KAAOG,IAAqB,KAAMA;AAEtD,aAAAM,IAAMN,MAAuB,IACxB,EAAE,WAAW,GAAG,YAAYH,IAAM,GAAG,gBAAAU,EAAe,IAIzDD,IAAMN,MAAuBA,IAAqB,IAC7C,EAAE,WAAWH,IAAM,GAAG,YAAY,GAAG,gBAAAU,EAAe,IAItD,EAAE,WAAWV,IAAM,GAAG,YAAYA,IAAM,GAAG,gBAAAU,EAAe;AAAA,IACnE;AAAA,IACA,CAACP,GAAoBH,CAAG;AAAA,EAC1B,GAEMW,IAAkB,MAAM;AACnB,IAAAzC,EAAA;AAAA,EACX,GAEM0C,IAAkB,MAAM;AACnB,IAAAxC,EAAA;AAAA,EACX,GAEMyC,KAAmB,MAAM;AAC7B,IAAI1D,KACFM,EAAa,EAAI;AAAA,EAErB,GAEMqD,KAAmB,MAAM;AAC7B,IAAI3D,KACFM,EAAa,EAAK;AAAA,EAEtB,GAEMsD,KAAa,EAAEzD,KAAgB,MAAMR,KAAcqD,IAGnDa,IAAmBjH;AAAA,IACvB;AAAA,IACA2F,MAAmB,YAAY,wBAAwB;AAAA,EACzD;AAGE,SAAA,gBAAA5F,EAAC,SAAI,WAAWC,EAAK,YAAYf,CAAS,GAAG,yBAAsB,QAEhE,UAAA;AAAA,IAAC,CAAAsG,KAEG,gBAAAtF,EAAAiH,IAAA,EAAA,UAAAtB,IACCtE,EAAM;AAAA,MACJsE;AAAA,MACA;AAAA,QACE,SAASgB;AAAA,QACT,UAAU,CAAC9C;AAAA,QACX,WAAW9D;AAAA,YACRmH,IAAAvB,EAA0D,UAA1D,gBAAAuB,EAAiE,cAAa;AAAA,UAC/E/B,GAAuBO,CAAc,EAAE;AAAA,QACzC;AAAA,QACA,MAAM;AAAA,QACN,iBAAiB,CAAC7B;AAAA,QAClB,cAAc;AAAA,QACd,sBAAsB;AAAA,MAAA;AAAA,IACxB,IAGF,gBAAA7D;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS2G;AAAA,QACT,UAAU,CAAC9C;AAAA,QACX,WAAW9D;AAAA,UACTiH;AAAA,UACA/B,GAAmBO,CAAU,EAAE;AAAA,UAC/BN,GAAoBO,CAAa;AAAA,UACjCN,GAAuBO,CAAc,EAAE;AAAA,QACzC;AAAA,QACA,iBAAe,CAAC7B;AAAA,QAChB,cAAW;AAAA,QACX,sBAAmB;AAAA,QAEnB,4BAACsD,IAAY,EAAA,WAAWlC,GAAmBO,CAAU,EAAE,KAAM,CAAA;AAAA,MAAA;AAAA,IAAA,GAGnE;AAAA,IAGF,gBAAA1F;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAAlB;AAAA,QACA,KAAAyG;AAAA,QACA,WAAWtF,EAAK,4BAA4B+F,CAAkB;AAAA,QAC9D,cAAce;AAAA,QACd,cAAcC;AAAA,QACd,iBAAc;AAAA,QACd,sBAAoBxD;AAAA,QACpB,sBAAoB6C;AAAA,QACpB,oBAAkBlD;AAAA,QAClB,wBAAsByC;AAAA,QAGtB,UAAA;AAAA,UAAA,gBAAA1F;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAKiG;AAAA,cACL,WAAU;AAAA,cACV,OAAO;AAAA,gBACL,WAAW,cAAcc,EAAU;AAAA,gBACnC,OAAO,GAAIjE,IAAaqD,IAAsB,GAAG;AAAA,cACnD;AAAA,cAEC,UAAcD,EAAA,IAAI,CAAC5E,GAAOJ,MAAU;AACnC,sBAAM,EAAE,WAAAkG,GAAW,YAAAC,IAAY,gBAAAX,GAAe,IAAIF,EAAmBtF,CAAK;AAExE,uBAAA,gBAAAlB;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBAEC,WAAWD,EAAK,iBAAiB8F,CAAc;AAAA,oBAC/C,OAAO;AAAA,sBACL,OAAO,QAAQ,MAAM/C,CAAU,OAAO4D,EAAc;AAAA,sBACpD,aAAaW,KAAa,IAAI,GAAGA,EAAU,OAAO;AAAA,sBAClD,YAAYD,IAAY,IAAI,GAAGA,CAAS,OAAO;AAAA,oBACjD;AAAA,oBACA,oBAAkBlG;AAAA,oBAEjB,UAAAI;AAAA,kBAAA;AAAA,kBATIJ;AAAA,gBAUP;AAAA,cAEH,CAAA;AAAA,YAAA;AAAA,UACH;AAAA,UAGC,CAACqE,KACC,gBAAAvF,EAAA,OAAA,EAAI,WAAU,8DACZ,UAAA,MAAM,KAAK,EAAE,QAAQ,KAAK,KAAK8C,IAAaqD,CAAkB,EAAE,CAAC,EAAE,IAAI,CAACmB,GAAGpG,MAC1E,gBAAAlB;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,MAAK;AAAA,cACL,SAAS,MAAM+D,EAAU7C,CAAK;AAAA,cAC9B,WAAWnB;AAAA,gBACT;AAAA,gBACAmB,MAAUoC,IAAe,cAAc;AAAA,gBACvCyC;AAAA,cACF;AAAA,cACA,cAAY,eAAe7E,IAAQ,CAAC;AAAA,cACpC,qBAAmBA;AAAA,YAAA;AAAA,YATdA;AAAA,UAAA,CAWR,EACH,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAEJ;AAAA,IAGC,CAACoE,KAEG,gBAAAtF,EAAAiH,IAAA,EAAA,UAAArB,IACCvE,EAAM;AAAA,MACJuE;AAAA,MACA;AAAA,QACE,SAASgB;AAAA,QACT,UAAU,CAAC9C;AAAA,QACX,WAAW/D;AAAA,YACRwH,KAAA3B,EAA0D,UAA1D,gBAAA2B,GAAiE,cAAa;AAAA,UAC/EpC,GAAuBO,CAAc,EAAE;AAAA,QACzC;AAAA,QACA,MAAM;AAAA,QACN,iBAAiB,CAAC5B;AAAA,QAClB,cAAc;AAAA,QACd,sBAAsB;AAAA,MAAA;AAAA,IACxB,IAGF,gBAAA9D;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS4G;AAAA,QACT,UAAU,CAAC9C;AAAA,QACX,WAAW/D;AAAA,UACTiH;AAAA,UACA/B,GAAmBO,CAAU,EAAE;AAAA,UAC/BN,GAAoBO,CAAa;AAAA,UACjCN,GAAuBO,CAAc,EAAE;AAAA,QACzC;AAAA,QACA,iBAAe,CAAC5B;AAAA,QAChB,cAAW;AAAA,QACX,sBAAmB;AAAA,QAEnB,4BAAC0D,IAAa,EAAA,WAAWvC,GAAmBO,CAAU,EAAE,KAAM,CAAA;AAAA,MAAA;AAAA,IAAA,EAGpE,CAAA;AAAA,EAAA,GAEJ;AAEJ;AClUO,SAASiC,GAAyB7I,GAAY;AACnD,QAAM,CAAC8I,GAAuBC,CAAwB,IAAI9G,EAAiB,EAAE,GAEvE+G,IAAwC5D,EAAY,CAAC6D,MAAoC;AAC7F,QAAIC,IAAiBD,GACjBE,IAAQ;AACL,WAAAD,KAAkB,CAACC,KAAO;AAC/B,YAAMC,IAAkB,OAAO,iBAAiBF,CAAc,EAAE;AAChE,MAAIE,KAAmBA,MAAoB,iBAAiBA,MAAoB,uBACtED,IAAAC,IAEVF,IAAiBA,EAAe;AAAA,IAAA;AAElC,WAAOC,KAAS;AAAA,EAClB,GAAG,EAAE;AAEL,SAAApG,EAAU,MAAM;AACR,UAAAsG,IAAW,SAAS,eAAerJ,CAAE;AAC3C,QAAIqJ,GAAU;AACN,YAAAD,IAAkBJ,EAAsCK,EAAS,aAAa;AACpF,MAAAN,EAAyBK,CAAe;AAAA,IAAA;AAAA,EAC1C,GACC,CAACpJ,GAAIgJ,CAAqC,CAAC,GAEvCF;AACT;ACZA,SAAwBQ,GAAS;AAAA,EAC/B,KAAA7C;AAAA,EACA,IAAAzG;AAAA,EACA,MAAAwD,IAAO;AAAA,EACP,OAAA2F;AAAA,EACA,QAAAI,IAAS;AAAA,EACT,SAAA9F,IAAU;AAAA,EACV,SAAA+F,IAAU;AAAA,EACV,iBAAAC;AAAA,EACA,UAAApJ;AAAA,EACA,WAAAD,IAAY;AAAA,EACZ,GAAGsJ;AACL,GAAkB;AAChB,QAAMC,IAAchJ,EAAM,GACpBiJ,IAAapC,EAAQ,MAAMxH,KAAM,YAAY2J,CAAW,IAAI,CAAC3J,GAAI2J,CAAW,CAAC,GAC7EE,IAAwBhB,GAAyBe,CAAU,GAC3D,CAACE,GAAWC,CAAY,IAAI9H,EAASuH,CAAO;AAElD,EAAAzG,EAAU,MAAM;AACd,IAAAgH,EAAaP,CAAO;AAAA,EAAA,GACnB,CAACA,CAAO,CAAC;AAEZ,QAAMQ,IAAe,MAAM;AACzB,IAAK3J,MACH0J,EAAa,CAACD,CAAS,GACvBL,KAAA,QAAAA,EAAkB,CAACK;AAAA,EAEvB,GAEMG,IAAkB,CAAChJ,MAA8C;AACjE,IAAAA,EAAE,QAAQ,QACZA,EAAE,eAAe,GACJ+I,EAAA;AAAA,EAEjB,GAEME,IAAkB/I;AAAA,IACtB;AAAA,IACAsC,KAAW;AAAA,IACXpD,KAAY;AAAA,IACZ,CAACA,KAAY;AAAA,IACbD;AAAA,EACF;AAGE,SAAA,gBAAAgB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,IAAIwI;AAAA,MACJ,MAAK;AAAA,MACL,KAAAnD;AAAA,MACA,UAAU;AAAA,MACV,MAAK;AAAA,MACL,SAASuD;AAAA,MACT,gBAAcF;AAAA,MACd,iBAAezJ;AAAA,MACf,kBAAkB4J;AAAA,MAClB,OAAO;AAAA,QACL,OAAOzG;AAAA,QACP,QAAQA;AAAA,QACR,OAAA2F;AAAA,QACA,iBAAiBW,KAAaP,IAAS,iBAAiB;AAAA,MAC1D;AAAA,MACA,WAAWW;AAAA,MACV,GAAGR;AAAA,MAEH,eAAc,gBAAAtI,EAAA+I,IAAA,EAAM,MAAA3G,GAAY,OAAO+F,IAASM,IAAwB,OAAW,CAAA;AAAA,IAAA;AAAA,EACtF;AAEJ;ACxEA,SAAwBO,GAAU;AAAA,EAChC,UAAAjK;AAAA,EACA,WAAAC;AAAA,EACA,QAAAuD;AAAA,EACA,WAAAC;AAAA,EACA,eAAAyG;AAAA,EACA,aAAAC;AAAA,EACA,GAAGZ;AACL,GAAmB;AACjB,SAAI/F,KAAU0G,KACZ,QAAQ,KAAK,8FAA8F,GAI3G,gBAAAnJ,EAAC,SAAI,WAAWC,EAAK,kBAAkBf,CAAS,GAAI,GAAGsJ,GACpD,UAAA;AAAA,IAAAvJ;AAAA,IAGAwD,KACC,gBAAAvC;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAGwC;AAAA,QACJ,MAAKA,KAAA,gBAAAA,EAAW,QAAO;AAAA,QACvB,MAAMD;AAAA,QACN,WAAWxC,EAAK,oBAAoByC,KAAA,gBAAAA,EAAW,SAAS;AAAA,MAAA;AAAA,IAC1D;AAAA,IAID,CAACD,KAAU0G,KACV,gBAAAjJ;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAGkJ;AAAA,QACJ,MAAK;AAAA,QACL,SAASD;AAAA,QACT,WAAWlJ,EAAK,mCAAmCmJ,KAAA,gBAAAA,EAAa,SAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAC3E,GAEJ;AAEJ;ACtCA,SAAwBC,GAAkB,EAAE,WAAAC,GAAW,MAAA3G,GAAM,SAAA4G,KAAmC;AAiC9F,SAhCA1H,EAAU,MAAM;AACR,UAAAkG,IAAU,SAAS,eAAeuB,CAAS;AACjD,QAAKvB,GAGD;AAAA,UAAA,CAACwB,KAAW5G,MAAS,SAAS;AAChC,QAAAoF,EAAQ,gBAAgB,YAAY;AACpC;AAAA,MAAA;AAEE,UAAA,CAACwB,KAAW5G,MAAS,WAAW;AAClC,QAAAoF,EAAQ,gBAAgB,cAAc;AACtC;AAAA,MAAA;AAGF,aAAAA,EAAQ,aAAa,oBAAoB,GAAGuB,CAAS,IAAI3G,CAAI,UAAU,GACvEoF,EAAQ,aAAa,gBAAgBpF,MAAS,UAAU,SAAS,OAAO,GAEpEA,MAAS,WACHoF,EAAA,aAAa,cAAc,MAAM,GAEvCpF,MAAS,aACHoF,EAAA,aAAa,gBAAgB,MAAM,GAGtC,MAAM;AACX,QAAAA,EAAQ,gBAAgB,kBAAkB,GAC1CA,EAAQ,gBAAgB,cAAc,GACtCA,EAAQ,gBAAgB,YAAY,GACpCA,EAAQ,gBAAgB,cAAc;AAAA,MACxC;AAAA;AAAA,EACC,GAAA,CAACuB,GAAW3G,GAAM4G,CAAO,CAAC,GAExBA,IAKH,gBAAAvJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACA0C,MAAS,WAAW;AAAA,QACpBA,MAAS,aAAa;AAAA,MACxB;AAAA,MACA,MAAK;AAAA,MAEJ,UAAA;AAAA,QAAAA,MAAS,UAAU,gBAAAzC,EAACsJ,IAAoB,CAAA,CAAA,sBAAMC,IAAa,EAAA;AAAA,QAC5D,gBAAAvJ,EAAC,UAAK,IAAI,GAAGoJ,CAAS,IAAI3G,CAAI,YAAa,UAAQ4G,EAAA,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACrD,IAdO;AAgBX;AC5DO,MAAMG,KAAgB;AAAA,EAC3B,MAAM;AAAA,EACN,SACE;AAAA,EACF,WACE;AAAA,EACF,SACE;AACJ,GAGaxH,KAAkB;AAAA,EAC7B,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AACR,GAQayH,KAA+B;AAAA,EAC1C,SAAS;AAAA,EACT,SAAS;AACX;ACdA,SAAwBC,GAAM;AAAA,EAC5B,SAAAvH,IAAUsH,GAAc;AAAA,EACxB,SAAApH;AAAA,EACA,iBAAAsH,IAAkB;AAAA,EAClB,cAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,MAAApH,IAAO;AAAA,EACP,WAAAzD;AAAA,EACA,GAAG0D;AACL,GAAe;AACb,QAAM9D,IAAKW,EAAM,GACX,CAACuK,GAAcC,CAAe,IAAIlJ,EAAS,EAAK;AAGtD,MAAImJ,IAAgB3H;AAChB,EAAAF,MAAY,aAAa,CAACE,MACZ2H,IAAA,OAElBA,IAAgBA,KAAiBP,GAAc;AAO/C,QAAMQ,IAAelK;AAAA,IAJnB;AAAA,IAEA;AAAA,IAKA,CAAC4J,KAAmBH,GAAcrH,CAAO;AAAA,IACzC,CAACwH,KAAmB3H,GAAgBgI,CAAa;AAAA,IACjDvH,MAAS,cAAc;AAAA,IACvB,CAACkH,KAAmB;AAAA,IACpBA,KAAmB;AAAA,IACnB3K;AAAA,EACF;AAEA,SACG,gBAAAc,EAAA,OAAA,EAAI,WAAWC,EAAK4J,KAAmB,aAAa,GAAG,OAAO,EAAE,QAAQjH,EAAK,QAAQ,OAAOA,EAAK,MAChG,GAAA,UAAA;AAAA,IAAA,gBAAA5C,EAAC,SAAI,WAAWC,EAAK0C,MAAS,cAAc,UAAU,GACpD,UAAA;AAAA,MAAA,gBAAAzC;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAG0C;AAAA,UACJ,IAAA9D;AAAA,UACA,MAAM6D,MAAS,cAAcqH,IAAe,SAASrH;AAAA,UACrD,iBAAeC,EAAK;AAAA,UACpB,UAAUiH;AAAA,UACV,iBAAeA,KAAmBjH,EAAK,eAAe;AAAA,UACtD,cAAYkH,IAAe,KAAO;AAAA,UAClC,gBAAcC,IAAiB,KAAO;AAAA,UACtC,WAAWI;AAAA,QAAA;AAAA,MACb;AAAA,MACCxH,MAAS,cACR,gBAAAzC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAS,MAAM+J,EAAgB,CAACD,CAAY;AAAA,UAC5C,WAAU;AAAA,UACV,cAAW;AAAA,UACX,cAAYA,IAAe,YAAY;AAAA,UAEtC,UAAAA,sBAAgBI,IAAU,EAAA,MAAM,GAAI,CAAA,IAAK,gBAAAlK,EAACmK,IAAU,EAAA,MAAM,GAAI,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACjE,GAEJ;AAAA,IACC,CAACR,KAAoB,gBAAA3J,EAAAmJ,IAAA,EAAkB,WAAWvK,GAAI,MAAK,SAAQ,SAASgL,GAAc;AAAA,IAC1F,CAACD,KAAoB,gBAAA3J,EAAAmJ,IAAA,EAAkB,WAAWvK,GAAI,MAAK,WAAU,SAASiL,EAAgB,CAAA;AAAA,EAAA,GACjG;AAEJ;AClEO,SAASO,GAAM;AAAA,EACpB,SAAAC,IAAU;AAAA,EACV,OAAAtF,IAAQ;AAAA,EACR,WAAA/F,IAAY;AAAA,EACZ,UAAAsL;AAAA,EACA,aAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAA1L;AAAA,EACA,aAAA2L;AAAA,EACA,GAAGpC;AACL,GAAe;;AACb,QAAM1J,IAAKW,EAAM,GACXoL,OAAYzD,IAAAqD,KAAA,gBAAAA,EAAa,WAAb,gBAAArD,EAAqB,WAAU,KAAK,GAChD0D,OAAmBrD,IAAAmD,KAAA,gBAAAA,EAAa,WAAb,gBAAAnD,EAAqB,WAAU,KAAK,GACvDsD,IAASF,IAAW,GAAGF,KAAW7L,CAAE,UAAU,QAC9CkM,IAAgBF,IAAkB,GAAGH,KAAW7L,CAAE,iBAAiB;AAGvE,SAAA,gBAAAkB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO,EAAE,SAASuK,MAAY,WAAW,iBAAiB,SAAS,OAAAtF,EAAM;AAAA,MACzE,WAAWhF,EAAK,UAAUf,CAAS;AAAA,MAEnC,UAAA;AAAA,QAAC,gBAAAc,EAAA,OAAA,EAAI,WAAU,iBACb,UAAA;AAAA,UAAA,gBAAAA,EAAC,SAAM,EAAA,WAAU,eAAc,SAAA2K,GAAmB,GAAGnC,GAClD,UAAA;AAAA,YAAAvJ;AAAA,YACAuL,KACE,gBAAAtK,EAAA,QAAA,EAAK,WAAU,iCAAgC,cAAW,YAAW,UAEtE,IAAA,CAAA;AAAA,UAAA,GAEJ;AAAA,UACC2K,KACC,gBAAA3K;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,oBAAkB6K;AAAA,cAClB,cAAW;AAAA,cACX,OAAON;AAAA,cAEP,4BAACQ,IAAoB,CAAA,CAAA;AAAA,YAAA;AAAA,UACvB;AAAA,UAEDJ,KACE,gBAAA3K,EAAA,OAAA,EAAI,IAAI6K,GAAQ,WAAU,WACxB,UACHN,GAAA;AAAA,UAEDC,KAAU,gBAAAxK,EAAC,QAAK,EAAA,WAAU,QAAQ,UAAOwK,EAAA,CAAA;AAAA,QAAA,GAC5C;AAAA,QACCI,uBACE,SAAM,EAAA,IAAIE,GAAe,WAAU,2BAA0B,MAAK,QAChE,UACHJ,EAAA,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAEJ;AAEJ;ACnEO,SAASM,GAAsB9L,GAAiB;AACrD,QAAM,CAAC+L,GAAMC,CAAO,IAAIrK,EAAS,EAAK,GAChC,CAACsK,GAAcC,CAAe,IAAIvK,EAAS,EAAK;AAEtD,SAAAc,EAAU,MAAM;AACd,IAAIzC,KACFkM,EAAgB,EAAI,GACpB,WAAW,MAAMF,EAAQ,EAAI,GAAG,EAAE,MAElCA,EAAQ,EAAK,GACb,WAAW,MAAME,EAAgB,EAAK,GAAG,GAAG;AAAA,EAC9C,GACC,CAAClM,CAAM,CAAC,GAEJ,EAAE,MAAA+L,GAAM,cAAAE,EAAa;AAC9B;AAEgB,SAAAE,GAAmBnM,GAAiBoM,GAAqB;AACvE,EAAA3J,EAAU,MAAM;AACR,UAAA4J,IAAe,CAAC1L,MAAqB;AACrC,MAAAA,EAAE,QAAQ,YAAYX,KAChBoM,EAAA;AAAA,IAEZ;AAES,oBAAA,iBAAiB,WAAWC,CAAY,GAE7CrM,MACO,SAAA,KAAK,MAAM,WAAW,WAG1B,MAAM;AACF,eAAA,oBAAoB,WAAWqM,CAAY,GAC3C,SAAA,KAAK,MAAM,WAAW;AAAA,IACjC;AAAA,EAAA,GACC,CAACrM,GAAQoM,CAAO,CAAC;AACtB;AAEgB,SAAAE,GAAeC,GAAiBvM,GAAiB;AACzD,QAAAwM,IAAwB/H,EAAuB,IAAI,GAEnDgI,IAA0B3H,EAAY,MAAM;AAC1C,UAAA4H,IAAe,SAAS,eAAeH,CAAO;AACpD,QAAI,CAACG,EAAc;AAGb,UAAAC,IAAeD,EAAa,iBAAiB,4BAA4B;AAC3E,QAAAC,EAAa,SAAS,GAAG;AAC1B,MAAAA,EAAa,CAAC,EAAkB,MAAM;AACvC;AAAA,IAAA;AAIF,UAAMC,IAAoBF,EAAa;AAAA,MACrC;AAAA,IACF;AAEI,QAAAE,EAAkB,SAAS,GAAG;AAChC,YAAMC,IAAwB,MAAM,KAAKD,CAAiB,EAAE,OAAO,CAACE,MAC3D,EAAEA,aAAc,qBAAqBA,EAAG,aAAa,yBAAyB,MAAM,OAC5F;AAEG,UAAAD,EAAsB,SAAS,GAAG;AACnC,QAAAA,EAAsB,CAAC,EAAkB,MAAM;AAChD;AAAA,MAAA;AAGD,MAAAD,EAAkB,CAAC,EAAkB,MAAM;AAC5C;AAAA,IAAA;AAIF,IAAAF,EAAa,MAAM;AAAA,EAAA,GAClB,CAACH,CAAO,CAAC;AAEZ,EAAA9J,EAAU,OACJzC,MAEFwM,EAAsB,UAAU,SAAS,eAEjBC,EAAA,IAGnB,MAAM;AACF,aAAA,KAAK,MAAM,WAAW,QAG3BD,EAAsB,mBAAmB,eAC3CA,EAAsB,QAAQ,MAAM;AAAA,EAExC,IACC,CAACxM,GAAQyM,CAAuB,CAAC;AACtC;ACnEO,SAASM,GAAM;AAAA,EACpB,IAAArN;AAAA,EACA,QAAAM;AAAA,EACA,SAAAoM;AAAA,EACA,OAAAzM;AAAA,EACA,UAAAE;AAAA,EACA,aAAAmN,IAAc;AAAA,EACd,WAAAlN;AAAA,EACA,kBAAAmN;AAAA,EACA,iBAAAC,IAAkB;AAAA,EAClB,SAAAC,IAAU,CAAC;AAAA,EACX,4BAAAC,IAA6B;AAAA,EAC7B,gBAAAC;AAAA,EACA,iBAAAC;AACF,GAAe;AACb,QAAMjE,IAAchJ,EAAM,GACpBkM,IAAU7M,KAAM,SAAS2J,CAAW,IACpCkE,IAAU7N,IAAK,GAAGA,CAAE,WAAW,eAAe2J,CAAW,IAEzD,EAAE,MAAA0C,GAAM,cAAAE,MAAiBH,GAAsB9L,CAAM;AAIvD,MAHJsM,GAAeC,GAASN,CAAY,GACpCE,GAAmBF,GAAcG,CAAO,GAEpC,CAACH,EAAqB,QAAA;AAE1B,QAAMuB,IAAc,MACb7N,IAEDwC,EAAM,eAAexC,CAAK,IACpB,gBAAAmB,EAAA,OAAA,EAAI,WAAU,QAAQ,UAAMnB,GAAA,sBAInC,MAAG,EAAA,WAAU,8BAA6B,IAAI4N,GAC5C,UACH5N,GAAA,IATiB,MAaf8N,IAAgB,MAChBN,EAAQ,WAAW,IAAU,OAG/B,gBAAArM,EAAC,SAAI,WAAU,oFACZ,YAAQ,IAAI,CAAC4M,GAAQ1L,MAAU;AAC9B,UAAM,EAAE,OAAA2L,GAAO,WAAA7N,GAAW,GAAGkK,EAAgB,IAAA0D;AAE3C,WAAA,gBAAA5M,EAACkC,IAAmB,EAAA,WAAWlD,GAAW,MAAK,UAAU,GAAGkK,GAAa,qBAAkB,QACxF,UAAA2D,EAAA,GADU3L,CAEb;AAAA,EAEH,CAAA,GACH;AAIJ,SAEK,gBAAAlB,EAAAiH,IAAA,EAAA,UAAA6F;AAAA,IACC,gBAAA9M;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,mBAAiBuM,KAAkB1N,IAAQ4N,IAAU;AAAA,QACrD,oBAAkBD;AAAA,QAClB,MAAK;AAAA,QACL,cAAW;AAAA,QACX,WAAU;AAAA,QAEV,UAAA,gBAAA1M,EAAC,OAAI,EAAA,WAAU,qDACb,UAAA;AAAA,UAAA,gBAAAE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWD,EAAK,4CAA4CoM,CAAgB;AAAA,cAC5E,SAAS,MAAM;AACb,gBAAKG,KACKhB,EAAA;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,UAECY,uBAAgB,OAAI,EAAA,WAAWnM,EAAK,kBAAkBf,CAAS,GAAI,UAAAD,GAAS;AAAA,UAE5E,CAACmN,KACA,gBAAApM;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,IAAI2L;AAAA,cACJ,UAAU;AAAA,cACV,WAAW1L;AAAAA,gBACT;AAAA,gBACAkL,IAAO,0BAA0B;AAAA,gBACjCjM;AAAA,cACF;AAAA,cAEC,UAAA;AAAA,gBAAA,CAACoN,KACA,gBAAApM;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,SAASsL;AAAA,oBACT,2BAAwB;AAAA,oBACxB,WAAU;AAAA,oBAEV,UAAA,gBAAAtL,EAAC+M,IAAE,EAAA,MAAM,GAAI,CAAA;AAAA,kBAAA;AAAA,gBACf;AAAA,gBAGDL,EAAY;AAAA,gBAEZ3N;AAAA,gBAEA4N,EAAc;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACjB,EAEJ,CAAA;AAAA,MAAA;AAAA,IACF;AAAA,IACA,SAAS;AAAA,EAAA,GAEb;AAEJ;AC3IO,MAAMK,KAAqB;AAAA,EAChC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ;AACV,GAIaC,KAAkB;AAAA,EAC7B,IAAI;AAAA,EACJ,IAAI;AACN;ACeA,SAAwBC,GAAW;AAAA,EACjC,MAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,iBAAAC,IAAkB;AAAA,EAClB,eAAAC,IAAgB;AAAA,EAChB,cAAAC;AAAA,EACA,MAAAnL,IAAO;AAAA,EACP,SAAAD,IAAU;AAAA,EACV,WAAAnD;AAAA,EACA,KAAAqG;AAAA,EACA,kBAAAmI;AAAA,EACA,GAAG9K;AACL,GAAoB;AAClB,QAAM+K,IAAaL,MAAc,OA4B3BM,IAzBkB1J,EAAY,MAAgB;AAC9C,QAAAyJ,UAAmB,CAAC;AAExB,UAAME,IAAaP,GACbQ,IAAW,KAAK,IAAIP,GAAiBM,CAAU;AAGrD,QAAIA,KAAcC;AACT,aAAA,MAAM,KAAK,EAAE,QAAQD,KAAc,CAACrG,GAAGhB,MAAMA,IAAI,CAAC;AAI3D,UAAMuH,IAAO,KAAK,MAAMD,IAAW,CAAC;AACpC,QAAIE,IAAQ,KAAK,IAAI,GAAGX,IAAOU,CAAI,GAC/BE,IAAM,KAAK,IAAIJ,GAAYG,IAAQF,IAAW,CAAC;AAG/C,WAAAG,IAAMD,IAAQ,IAAIF,MACpBE,IAAQ,KAAK,IAAI,GAAGC,IAAMH,IAAW,CAAC,GACtCG,IAAM,KAAK,IAAIJ,GAAYG,IAAQF,IAAW,CAAC,IAG1C,MAAM,KAAK,EAAE,QAAQG,IAAMD,IAAQ,EAAE,GAAG,CAACxG,GAAGhB,MAAMwH,IAAQxH,CAAC;AAAA,KACjE,CAACmH,GAAYJ,GAAiBF,GAAMC,CAAS,CAAC,EAEZ,GAC/BY,IAAgBb,IAAO,GACvBrJ,IAAY2J,KAAcN,IAAOC,GACjCa,IAAkBX,KAAiB,CAACG,GACpCS,IAAiBZ,KAAiB,CAACG,GAEnCU,IAAmB,CAACC,MAAoB;AAC5C,IAAIA,KAAW,MAAMX,KAAcW,KAAWhB,MAC5CG,EAAaa,CAAO;AAAA,EAExB,GAGMC,IAAmBrK,EAAY,MAAM;AACzC,UAAMsK,IAAcvO;AAAAA,MAClB;AAAA,MACA;AAAA,MACAkN,GAAgB7K,CAAI;AAAA,MACpB;AAAA,IACF;AAEA,WAAOrC,EAAKuO,GAAatB,GAAmB7K,CAAO,GAAGqL,CAAgB;AAAA,EACrE,GAAA,CAACrL,GAASC,GAAMoL,CAAgB,CAAC;AAGlC,SAAA,gBAAA1N;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAuF;AAAA,MACA,WAAWtF,EAAK,0CAA0Cf,CAAS;AAAA,MACnE,MAAK;AAAA,MACL,cAAW;AAAA,MACX,aAAWmO;AAAA,MACX,mBAAiBM,IAAa,aAAaL;AAAA,MAC1C,GAAG1K;AAAA,MAGH,UAAA;AAAA,QACCuL,KAAA,gBAAAnO;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAS,MAAMqO,EAAiB,CAAC;AAAA,YACjC,WAAWE,EAAiB;AAAA,YAC5B,UAAUlB,MAAS;AAAA,YACnB,cAAW;AAAA,YAEX,UAAA;AAAA,cAAA,gBAAAnN,EAACuO,IAAkB,EAAA,MAAMnM,MAAS,OAAO,KAAK,IAAI;AAAA,cACjD,gBAAApC,EAAA,QAAA,EAAK,WAAU,QAAO,UAAK,QAAA,CAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAC9B;AAAA,QAIF,gBAAAF;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAS,MAAMqO,EAAiBhB,IAAO,CAAC;AAAA,YACxC,WAAWkB,EAAiB;AAAA,YAC5B,UAAU,CAACL;AAAA,YACX,cAAW;AAAA,YAEX,UAAA;AAAA,cAAA,gBAAAhO,EAACmH,IAAY,EAAA,MAAM/E,MAAS,OAAO,KAAK,IAAI;AAAA,cAC3C,gBAAApC,EAAA,QAAA,EAAK,WAAU,QAAO,UAAQ,WAAA,CAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACjC;AAAA,QAGC,CAACyN,KACAC,EAAa,IAAI,CAACc,MAChB,gBAAAxO;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,SAAS,MAAMmO,EAAiBK,CAAO;AAAA,YACvC,WAAWzO,EAAKsO,EAAiB,GAAG,eAAe;AAAA,YACnD,cAAY,cAAcG,CAAO;AAAA,YACjC,gBAAcA,MAAYrB,IAAO,KAAO;AAAA,YAEvC,UAAAqB;AAAA,UAAA;AAAA,UANIA;AAAA,QAAA,CAQR;AAAA,QAGH,gBAAA1O;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAS,MAAMqO,EAAiBhB,IAAO,CAAC;AAAA,YACxC,WAAWkB,EAAiB;AAAA,YAC5B,UAAU,CAACvK;AAAA,YACX,cAAW;AAAA,YAEX,UAAA;AAAA,cAAC,gBAAA9D,EAAA,QAAA,EAAK,WAAU,QAAO,UAAI,QAAA;AAAA,gCAC1BwH,IAAa,EAAA,MAAMpF,MAAS,OAAO,KAAK,GAAI,CAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAC/C;AAAA,QAGC8L,KACC,gBAAApO;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAS,MAAMqO,EAAiBf,CAAS;AAAA,YACzC,WAAWiB,EAAiB;AAAA,YAC5B,UAAUlB,MAASC;AAAA,YACnB,cAAW;AAAA,YAEX,UAAA;AAAA,cAAC,gBAAApN,EAAA,QAAA,EAAK,WAAU,QAAO,UAAI,QAAA;AAAA,gCAC1ByO,IAAmB,EAAA,MAAMrM,MAAS,OAAO,KAAK,GAAI,CAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACrD;AAAA,IAAA;AAAA,EAEJ;AAEJ;AClKO,SAASsM,GAAoBxP,GAAiB;AACnD,QAAM,CAAC+L,GAAMC,CAAO,IAAIrK,EAAS,EAAK,GAChC,CAACsK,GAAcC,CAAe,IAAIvK,EAAS,EAAK;AAEtD,SAAAc,EAAU,MAAM;AACd,IAAIzC,KACFkM,EAAgB,EAAI,GACpB,WAAW,MAAMF,EAAQ,EAAI,GAAG,EAAE,MAElCA,EAAQ,EAAK,GACb,WAAW,MAAME,EAAgB,EAAK,GAAG,GAAG;AAAA,EAC9C,GACC,CAAClM,CAAM,CAAC,GAEJ,EAAE,MAAA+L,GAAM,cAAAE,EAAa;AAC9B;AAEgB,SAAAwD,GAAwBzP,GAAiBoM,GAAqB;AAC5E,EAAA3J,EAAU,MAAM;AACR,UAAA4J,IAAe,CAAC1L,MAAqB;AACrC,MAAAA,EAAE,QAAQ,YAAYX,KAChBoM,EAAA;AAAA,IAEZ;AAES,oBAAA,iBAAiB,WAAWC,CAAY,GAE7CrM,MACO,SAAA,KAAK,MAAM,WAAW,WAG1B,MAAM;AACF,eAAA,oBAAoB,WAAWqM,CAAY,GAC3C,SAAA,KAAK,MAAM,WAAW;AAAA,IACjC;AAAA,EAAA,GACC,CAACrM,GAAQoM,CAAO,CAAC;AACtB;AAEgB,SAAAsD,GAAclP,GAAiBR,GAAiB;AACxD,QAAAwM,IAAwB/H,EAAuB,IAAI,GAEnDgI,IAA0B3H,EAAY,MAAM;AAC1C,UAAA6K,IAAe,SAAS,eAAenP,CAAO;AACpD,QAAI,CAACmP,EAAc;AAGb,UAAAC,IAAeD,EAAa,iBAAiB,4BAA4B;AAC3E,QAAAC,EAAa,SAAS,GAAG;AAC1B,MAAAA,EAAa,CAAC,EAAkB,MAAM;AACvC;AAAA,IAAA;AAIF,UAAMhD,IAAoB+C,EAAa;AAAA,MACrC;AAAA,IACF;AAEI,QAAA/C,EAAkB,SAAS,GAAG;AAChC,YAAMC,IAAwB,MAAM,KAAKD,CAAiB,EAAE,OAAO,CAACE,MAC3D,EAAEA,aAAc,qBAAqBA,EAAG,aAAa,yBAAyB,MAAM,OAC5F;AAEG,UAAAD,EAAsB,SAAS,GAAG;AACnC,QAAAA,EAAsB,CAAC,EAAkB,MAAM;AAChD;AAAA,MAAA;AAGD,MAAAD,EAAkB,CAAC,EAAkB,MAAM;AAC5C;AAAA,IAAA;AAIF,IAAA+C,EAAa,MAAM;AAAA,EAAA,GAClB,CAACnP,CAAO,CAAC;AAEZ,EAAAiC,EAAU,OACJzC,MAEFwM,EAAsB,UAAU,SAAS,eAEjBC,EAAA,IAGnB,MAAM;AACF,aAAA,KAAK,MAAM,WAAW,QAG3BD,EAAsB,mBAAmB,eAC3CA,EAAsB,QAAQ,MAAM;AAAA,EAExC,IACC,CAACxM,GAAQyM,CAAuB,CAAC;AACtC;AC9FO,MAAMoD,KAAgB;AAAA,EAC3B,MAAM;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAEZ;AC+BA,SAAwBC,GAAM;AAAA,EAC5B,KAAA3J;AAAA,EACA,IAAAzG;AAAA,EACA,QAAAM;AAAA,EACA,SAAAoM;AAAA,EACA,OAAAzM;AAAA,EACA,UAAAE;AAAA,EACA,QAAAkQ;AAAA,EACA,MAAA7M,IAAO;AAAA,EACP,WAAApD;AAAA,EACA,kBAAAmN;AAAA,EACA,iBAAAC,IAAkB;AAAA,EAClB,4BAAAE,IAA6B;AAAA,EAC7B,gBAAAC;AAAA,EACA,iBAAAC;AACF,GAAe;AACb,QAAMjE,IAAchJ,EAAM,GACpBG,IAAUd,KAAM,SAAS2J,CAAW,IACpCkE,IAAU7N,IAAK,GAAGA,CAAE,WAAW,eAAe2J,CAAW,IAEzD,EAAE,MAAA0C,GAAM,cAAAE,MAAiBuD,GAAoBxP,CAAM;AAIrD,MAHJ0P,GAAclP,GAASyL,CAAY,GACnCwD,GAAwBxD,GAAcG,CAAO,GAEzC,CAACH,EAAqB,QAAA;AAE1B,QAAMuB,IAAc,MACb7N,IAEDwC,EAAM,eAAexC,CAAK,IACrB,gBAAAmB,EAAC,SAAK,UAAMnB,EAAA,CAAA,sBAIlB,MAAG,EAAA,WAAU,0BAAyB,IAAI4N,GACxC,UACH5N,GAAA,IATiB,MAafqQ,IAAe,MAAM;AACrB,QAAA,CAACD,EAAe,QAAA;AAEhB,QAAA5N,EAAM,eAAe4N,CAAM,GAAG;AAChC,YAAME,IAAgBF,GAChBG,IAAoBD,EAAc,MAAM,aAAa;AACpD,aAAA9N,EAAM,aAAa8N,GAAe,EAAE,WAAWpP,EAAK,aAAaqP,CAAiB,GAGxF;AAAA,IAAA;AAGH,WAAQ,gBAAApP,EAAA,OAAA,EAAI,WAAU,aAAa,UAAOiP,GAAA;AAAA,EAC5C;AAEA,SAEK,gBAAAjP,EAAAiH,IAAA,EAAA,UAAA6F;AAAA,IACC,gBAAAhN;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,mBAAiByM,KAAkB1N,IAAQ4N,IAAU;AAAA,QACrD,oBAAkBD;AAAA,QAClB,MAAK;AAAA,QACL,cAAW;AAAA,QACX,WAAU;AAAA,QACV,mBAAiBtN;AAAA,QAEjB,UAAA;AAAA,UAAA,gBAAAc;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWD;AAAAA,gBACT;AAAA,gBACAkL,IAAO,gBAAgB;AAAA,gBACvBkB;AAAA,cACF;AAAA,cACA,SAAS,MAAM;AACb,gBAAKG,KACKhB,EAAA;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,UAEA,gBAAAtL,EAAC,OAAI,EAAA,WAAU,2CACb,UAAA,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,IAAIN;AAAA,cACJ,KAAA2F;AAAA,cACA,UAAU;AAAA,cACV,WAAWtF;AAAAA,gBACT;AAAA,gBACAqC,MAAS,YAAY;AAAA,gBACrB2M,GAAc,KAAK3M,CAAI;AAAA,gBACvB6I,IAAO,kBAAkB;AAAA,gBACzBjM;AAAA,cACF;AAAA,cACA,mBAAiBoD;AAAA,cAEjB,UAAA,gBAAAtC,EAAC,OAAI,EAAA,WAAU,wBACZ,UAAA;AAAA,gBAAAjB,KAAU,gBAAAmB,EAAA,OAAA,EAAI,WAAU,aAAa,eAAc;AAAA,gBAEnD,CAACoM,KACA,gBAAApM;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,SAASsL;AAAA,oBACT,2BAAwB;AAAA,oBACxB,cAAW;AAAA,oBACX,WAAU;AAAA,oBAEV,UAAA,gBAAAtL,EAAC+M,IAAE,EAAA,MAAM,GAAI,CAAA;AAAA,kBAAA;AAAA,gBACf;AAAA,gBAGF,gBAAA/M,EAAC,SAAI,WAAWD,EAAK,oCAAoClB,IAAQ,SAAS,OAAO,GAAI,UAAAE,GAAS;AAAA,gBAE7FmQ,EAAa;AAAA,cAAA,EAChB,CAAA;AAAA,YAAA;AAAA,UAAA,EAEJ,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,IACA,SAAS;AAAA,EAAA,GAEb;AAEJ;ACpJgB,SAAAG,GAAW,EAAE,QAAA7P,GAAQ,SAAA4I,GAAS,UAAAkH,GAAU,MAAAC,GAAM,UAAAtQ,IAAW,IAAO,WAAAD,IAAY,MAAuB;AACjH,QAAMsP,IAAc,iEAEdkB,IAAc,MAAM;AACxB,IAAIvQ,KACKqQ,EAAA;AAAA,EACX,GAEMG,IAAe1P;AAAA,IACnBuO;AAAA,IACA,CAAClG,KAAW;AAAA,IACZ,CAACnJ,KAAY;AAAA,IACbA,KAAY;AAAA,IACZD;AAAA,EACF;AAEE,SAAA,gBAAAgB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,IAAIR;AAAA,MACJ,MAAK;AAAA,MACL,UAAU;AAAA,MACV,gBAAc4I;AAAA,MACd,iBAAenJ;AAAA,MACf,oBAAkB,oBAAoBsQ,CAAI;AAAA,MAC1C,mBAAiB,GAAG/P,CAAM;AAAA,MAC1B,SAASgQ;AAAA,MACT,WAAWC;AAAA,MACX,OAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,aAAa;AAAA,MACf;AAAA,MAEC,UACCrH,KAAA,gBAAApI;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWD,EAAK,wCAAwCd,KAAY,eAAe,CAACA,KAAY,YAAY;AAAA,QAAA;AAAA,MAAA;AAAA,IAC9G;AAAA,EAEJ;AAEJ;ACpCO,SAASyQ,GAAe;AAAA,EAC7B,OAAAC;AAAA,EACA,UAAA5Q;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,YAAA4Q,IAAa;AAAA,EACb,UAAAN;AAAA,EACA,UAAArQ,IAAW;AAAA,EACX,WAAA4Q,IAAY;AAAA,EACZ,aAAAnF;AAAA,EACA,MAAA6E;AACF,GAAwB;AAEtB,QAAM/P,IAAS,SADJD,EAAM,CACS,IAAIoQ,CAAK,IAE7B/G,IAAe,MAAM;AACzB,IAAK3J,KACHqQ,KAAA,QAAAA,EAAWK;AAAA,EAEf;AAGE,SAAA,gBAAA7P;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO4K;AAAA,MACP,WAAW3K;AAAA,QACT;AAAA,QACAf;AAAA;AAAA,QAEA6Q,KACE,wDACE5Q,IAAW,sBAAsB,mBACnC;AAAA,QACF4Q,KAAa,CAACD,KAAc,sBAAsB3Q,IAAW,KAAK,yCAAyC;AAAA,QAC3G4Q,KAAaD,KAAc;AAAA,QAC3B3Q,KAAY;AAAA,MACd;AAAA,MACA,OAAO;AAAA,QACL,KAAK;AAAA,MACP;AAAA,MAEC,UAAA;AAAA,QAAA,CAAC4Q,KACA,gBAAA7P;AAAA,UAACqP;AAAA,UAAA;AAAA,YACC,QAAA7P;AAAA,YACA,MAAM+P,KAAQ;AAAA,YACd,SAASK;AAAA,YACT,UAAUhH;AAAA,YACV,UAAA3J;AAAA,YACA,WAAWc,EAAK8P,KAAa,EAAE;AAAA,UAAA;AAAA,QACjC;AAAA,QAEF,gBAAA7P;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAI6P,IAAYrQ,IAAS;AAAA,YACzB,UAAUqQ,IAAY,KAAK;AAAA,YAC3B,MAAMA,IAAY,UAAU;AAAA,YAC5B,SAASA,IAAYjH,IAAe;AAAA,YACpC,gBAAeiH,IAAwBD,IAAa,SAAS,UAAlC;AAAA,YAC3B,iBAAeC,IAAY5Q,IAAW;AAAA,YACtC,oBAAmB4Q,IAAwBnF,KAAe,oBAAoB6E,CAAI,KAAnD;AAAA,YAC/B,mBAAiBM,IAAY,GAAGrQ,CAAM,WAAW;AAAA,YACjD,WAAWO,EAAK8P,KAAa,aAAa,OAAO9Q,KAAa,YAAY,yBAAyB;AAAA,YAEnG,UAAA,gBAAAiB;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,IAAI,GAAGR,CAAM;AAAA,gBACb,SAASqQ,IAAY,SAAYjH;AAAA,gBACjC,WAAW7I,EAAKd,KAAY,sBAAsB,CAACA,KAAY,gBAAgB;AAAA,gBAE9E,UAAAF;AAAA,cAAA;AAAA,YAAA;AAAA,UACH;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EACF;AAEJ;ACpFgB,SAAA+Q,GAAclR,GAAYmR,GAA6B;AAGrE,QAAM,CAACC,GAAcC,CAAe,IAAIpP,EAAiBkP,CAAmB,GACtE,CAACG,GAAcC,CAAe,IAAItP,EAAiB,EAAE,GAErD,CAACuP,GAAaC,CAAc,IAAIxP,EAAkB,EAAK,GAEvDyP,IAAgBtM,EAAY,CAACuM,GAAwBrP,MAAkB;;AACrE,UAAAsP,IAASD,EAAQrP,CAAK;AAI5B,IADmBsP,EAAO,aAAa,UAAU,KAAKA,EAAO,aAAa,eAAe,MAAM,YAIvFtJ,IAAAqJ,EAAArP,CAAK,MAAL,QAAAgG,EAAQ,SAChBiJ,EAAgBjP,CAAK;AAAA,EACvB,GAAG,EAAE,GAECuP,IAAkBzM;AAAA,IACtB,CAACnE,GAAU0Q,MAA2B;;AAGhC,UAFJ1Q,EAAE,eAAe,GACbuQ,KACA,CAACG,EAAQ,OAAQ;AAEf,YAAAG,IAAeX,MAAwB,KAAKA,IAAsB;AAChE,OAAA7I,IAAAqJ,EAAAG,CAAY,MAAZ,QAAAxJ,EAAe,SACvB+I,EAAgBS,CAAY,GAGxBX,MAAwB,MAC1BO,EAAcC,GAASG,CAAY;AAAA,IAEvC;AAAA,IACA,CAACX,GAAqBK,GAAaE,CAAa;AAAA,EAClD,GAGMK,IAAuB3M;AAAA,IAC3B,CAACnE,MAAqB;;AAEhB,UAAA,CAACA,EAAE;AACL;AAGF,MAAAA,EAAE,eAAe;AACjB,YAAMiM,IAAoB,MAAM;AAAA,QAC9B,SAAS;AAAA,UACP;AAAA,QAAA;AAAA,MACF,EACA,OAAO,CAACE,MAAO,CAACA,EAAG,aAAa,UAAU,KAAKA,EAAG,YAAY,CAAC,GAC3D5I,IAAe0I,EAAkB,UAAU,CAACE,MAAOA,EAAG,OAAOpN,CAAE,GAC/DgS,IAAgBxN,IAAe,IAAIA,IAAe,IAAI0I,EAAkB,SAAS;AACrE,OAAA5E,IAAA4E,EAAA8E,CAAa,MAAb,QAAA1J,EAAgB;AAAA,IACpC;AAAA,IACA,CAACtI,CAAE;AAAA,EACL,GAEMiS,IAA2B7M;AAAA,IAC/B,CAACnE,GAAkB0Q,MAA2B;;AACxC,UAAA,CAACA,EAAQ,OAAQ;AAGrB,YAAMC,IAAS3Q,EAAE;AAEjB,UAAI,CADkB0Q,EAAQ,KAAK,CAACO,MAAWA,EAAO,OAAON,EAAO,EAAE,EAClD;AAEd,YAAApN,IAAe4M,MAAiB,KAAKA,IAAe;AAC1D,UAAI7L,IAAWf;AAEf,cAAQvD,EAAE,KAAK;AAAA,QACb,KAAK;AAAA,QACL,KAAK;AACH,UAAAA,EAAE,eAAe,GACjBsE,IAAWf,IAAe,IAAIA,IAAe,IAAImN,EAAQ,SAAS;AAClE;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AACH,UAAA1Q,EAAE,eAAe,GACLsE,KAAAf,IAAe,KAAKmN,EAAQ;AACxC;AAAA;AAAA,QAGF,KAAK;AACH,UAAA1Q,EAAE,eAAe,GACjByQ,EAAcC,GAASnN,CAAY;AACnC;AAAA,QAEF,KAAK;AACH,UAAAuN,EAAqB9Q,CAAC;AACtB;AAAA,QAEF;AACE;AAAA,MAAA;AAGI,OAAAqH,IAAAqJ,EAAApM,CAAQ,MAAR,QAAA+C,EAAW,SACnB+I,EAAgB9L,CAAQ,GAEpB+L,MAAiB,MACnBI,EAAcC,GAASpM,CAAQ;AAAA,IAEnC;AAAA,IACA,CAAC6L,GAAcE,GAAcS,GAAsBL,CAAa;AAAA,EAClE,GAEMS,IAAkB/M,EAAY,MAAqB;AACvD,UAAMgN,IAAa,SAAS,cAAc,QAAQpS,CAAE,uBAAuB;AACvE,WAACoS,IAEE,MAAM,KAAKA,EAAW,iBAAiB,gBAAgB,CAAC,IAFvC,CAAC;AAAA,EAEsC,GAC9D,CAACpS,CAAE,CAAC;AAEP,EAAA+C,EAAU,MAAM;AACd,UAAMqP,IAAa,SAAS,cAAc,QAAQpS,CAAE,uBAAuB;AAC3E,QAAI,CAACoS,EAAY;AAEjB,UAAMT,IAAUQ,EAAgB,GAC1BE,IAAc,CAACpR,MAAa4Q,EAAgB5Q,GAAG0Q,CAAO,GACtD3Q,IAAgB,CAACC,MAAqBgR,EAAyBhR,GAAG0Q,CAAO,GACzEW,IAAkB,MAAMb,EAAe,EAAI,GAC3Cc,IAAgB,MAAMd,EAAe,EAAK;AAEvC,oBAAA,iBAAiB,WAAWzQ,CAAa,GACvCoR,EAAA,iBAAiB,SAASC,CAAW,GACrCD,EAAA,iBAAiB,aAAaE,CAAe,GAC/C,SAAA,iBAAiB,WAAWC,CAAa,GAC3C,MAAM;AACF,eAAA,oBAAoB,WAAWvR,CAAa,GAC1CoR,EAAA,oBAAoB,SAASC,CAAW,GACxCD,EAAA,oBAAoB,aAAaE,CAAe,GAClD,SAAA,oBAAoB,WAAWC,CAAa;AAAA,IACvD;AAAA,KACC,CAACvS,GAAImS,GAAiBN,GAAiBI,CAAwB,CAAC;AACrE;ACxHO,SAASO,GAAW;AAAA,EACzB,SAAAb,IAAU,CAAC;AAAA,EACX,OAAAZ;AAAA,EACA,UAAAL;AAAA,EACA,IAAA1Q;AAAA,EACA,UAAAG;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,mBAAAqS,IAAoB;AAAA,EACpB,YAAAC,IAAa;AACf,GAAoB;AAClB,QAAM7Q,IAAUlB,EAAM,GAChBmB,IAAY9B,KAAM,eAAe6B,CAAO;AAC9C,EAAAqP;AAAA,IACEpP;AAAA,IACA6P,EAAQ,UAAU,CAACO,MAAWA,MAAWnB,CAAK;AAAA,EAChD;AAGM,QAAA4B,IAAmBnL,EAAQ,MACxBmK,EAAQ,OAAsB,CAACiB,GAAKV,OACrC,OAAOA,KAAW,WAEfU,EAAI,KAAK,CAACpQ,MAASA,EAAK,UAAU0P,CAAM,KAC3CU,EAAI,KAAK,EAAE,OAAOV,GAAQ,OAAOA,GAAQ,IAG3CU,EAAI,KAAKV,CAAM,GAEVU,IACN,EAAE,GACJ,CAACjB,CAAO,CAAC;AAEZ,SACG,gBAAAzQ,EAAA,OAAA,EAAI,IAAIY,GAAW,MAAK,cAAa,UAAU,GAAG,WAAWX,EAAKf,GAAW,oBAAoB,GAE/F,UAAA;AAAA,IAAAuS,EAAiB,SAAS,KACzBA,EAAiB,IAAI,CAACT,GAAQ5P,MAC5B,gBAAAlB;AAAA,MAAC0P;AAAA,MAAA;AAAA,QAEC,OAAOoB,EAAO;AAAA,QACd,YAAYnB,MAAUmB,EAAO;AAAA,QAC7B,UAAAxB;AAAA,QACA,MAAM5O;AAAA,QACN,UAAUoQ,EAAO;AAAA,QACjB,aAAaA,EAAO;AAAA,QACpB,WAAWQ;AAAA,QACX,WAAWD;AAAA,QAEV,UAAOP,EAAA;AAAA,MAAA;AAAA,MAVH,GAAGA,EAAO,KAAK,IAAI5P,CAAK;AAAA,IAAA,CAYhC;AAAA,IAGFqQ,EAAiB,WAAW,KAC3BxS,KACAsC,EAAM,SAAS,IAAItC,GAAU,CAACuC,MAExBD,EAAM,eAAeC,CAAK,KAAKA,EAAM,SAASoO,KAE9C,gBAAA1P;AAAA,MAAC0P;AAAA,MAAA;AAAA,QACE,GAAGpO,EAAM;AAAA,QACV,WAAWvB,EAAKsR,GAAmB/P,EAAM,MAAM,SAAS;AAAA,QACxD,WAAWA,EAAM,MAAM,aAAagQ;AAAA,QACpC,YAAY3B,MAAUrO,EAAM,MAAM;AAAA,QAClC,UAAAgO;AAAA,QACA,MAAM5O;AAAA,QAEL,YAAM,MAAM;AAAA,MAAA;AAAA,IACf,IAGG,IACR;AAAA,EAAA,GACL;AAEJ;AC3FO,SAAS+Q,GAAcC,GAA4B;AAClD,QAAAC,IAAchO,EAAuB,IAAI,GACzCiO,IAAmBjO,EAAuB,IAAI,GAC9CkO,IAAqBlO,EAAuB,IAAI,GAChD,CAACmO,GAAaC,CAAc,IAAIlR,EAAS,EAAK,GAC9C,CAACmR,GAAaC,CAAc,IAAIpR,EAAS,EAAK,GAC9C,CAACqR,GAAkBC,CAAmB,IAAItR,EAAS;AAAA,IACvD,UAAU;AAAA,IACV,YAAY;AAAA,EAAA,CACb,GACKuR,IAAgBzO,EAAsB,IAAI,GAC1C0O,IAAc1O,EAAsB,IAAI,GAGxC2O,IAAgBtO,EAAY,MAAM;AACtC,UAAMuO,IAAWZ,EAAY;AAC7B,QAAI,CAACY,EAAU;AAET,UAAAC,IAAoBD,EAAS,eAAeA,EAAS,cACrDE,IAAsBF,EAAS,cAAcA,EAAS;AAExC,IAAAJ,EAAA;AAAA,MAClB,UAAUK;AAAA,MACV,YAAYC;AAAA,IAAA,CACb;AAAA,EACH,GAAG,EAAE,GAGCC,IAAmB1O,EAAY,MAAM;AACzC,UAAMuO,IAAWZ,EAAY,SACvBgB,IAAgBf,EAAiB,SACjCgB,IAAkBf,EAAmB;AAE3C,QAAKU,GAED;AAAA,UAAAI,KAAiBT,EAAiB,UAAU;AAMxC,cAAAW,KAJkBX,EAAiB,aACrCK,EAAS,eAAeb,IACxBa,EAAS,gBAEyBA,EAAS,cACzCO,IAAc,KAAK,IAAID,IAAc,KAAK,EAAE,GAG5CE,IAAeR,EAAS,eAAeA,EAAS,cAChDS,IAAmBD,IAAe,IAAIR,EAAS,YAAYQ,IAAe,GAG1EE,IAAmB,MAAMH,GACzBI,IAAWF,IAAmBC;AAEtB,QAAAN,EAAA,MAAM,SAAS,GAAGG,CAAW,KAC7BH,EAAA,MAAM,MAAM,GAAGO,CAAQ,KACrCP,EAAc,MAAM,YAAY;AAAA,MAAA;AAG9B,UAAAC,KAAmBV,EAAiB,YAAY;AAM5C,cAAAW,KAJiBX,EAAiB,WACpCK,EAAS,cAAcb,IACvBa,EAAS,eAEwBA,EAAS,aACxCY,IAAa,KAAK,IAAIN,IAAc,KAAK,EAAE,GAG3CO,IAAgBb,EAAS,cAAcA,EAAS,aAChDS,IAAmBI,IAAgB,IAAIb,EAAS,aAAaa,IAAgB,GAG7EH,IAAmB,MAAME,GACzBE,IAAYL,IAAmBC;AAErB,QAAAL,EAAA,MAAM,QAAQ,GAAGO,CAAU,KAC3BP,EAAA,MAAM,OAAO,GAAGS,CAAS,KACzCT,EAAgB,MAAM,YAAY;AAAA,MAAA;AAAA;AAAA,EACpC,GACC,CAACV,GAAkBR,CAAkB,CAAC,GAGnC4B,IAAetP,EAAY,MAAM;AAErC,IAAIoO,EAAc,WAChB,aAAaA,EAAc,OAAO,GAEhCC,EAAY,WACd,aAAaA,EAAY,OAAO,GAGlCN,EAAe,EAAI,GACnBE,EAAe,EAAK,GACHS,EAAA,GAGHN,EAAA,UAAU,WAAW,MAAM;AACvC,MAAAH,EAAe,EAAI,GAGPI,EAAA,UAAU,WAAW,MAAM;AACrC,QAAAN,EAAe,EAAK,GACpBE,EAAe,EAAK;AAAA,SACnB,GAAG;AAAA,OACL,GAAI;AAAA,EAAA,GACN,CAACS,CAAgB,CAAC;AAGrB,SAAA/Q,EAAU,MAAM;AACd,UAAM4Q,IAAWZ,EAAY;AAC7B,QAAI,CAACY,EAAU;AAED,IAAAD,EAAA;AAGR,UAAAiB,IAAiB,IAAI,eAAejB,CAAa;AACvD,IAAAiB,EAAe,QAAQhB,CAAQ;AAGzB,UAAAiB,IAAmB,IAAI,iBAAiBlB,CAAa;AAC3D,WAAAkB,EAAiB,QAAQjB,GAAU;AAAA,MACjC,WAAW;AAAA,MACX,SAAS;AAAA,MACT,YAAY;AAAA,IAAA,CACb,GAEM,MAAM;AACX,MAAAgB,EAAe,WAAW,GAC1BC,EAAiB,WAAW;AAAA,IAC9B;AAAA,EAAA,GACC,CAAClB,CAAa,CAAC,GAGlB3Q,EAAU,MAAM;AACG,IAAA+Q,EAAA;AAAA,EAAA,GAChB,CAACR,GAAkBQ,CAAgB,CAAC,GAGvC/Q,EAAU,MACD,MAAM;AACX,IAAIyQ,EAAc,WAChB,aAAaA,EAAc,OAAO,GAEhCC,EAAY,WACd,aAAaA,EAAY,OAAO;AAAA,EAEpC,GACC,EAAE,GAEE;AAAA,IACL,aAAAV;AAAA,IACA,kBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,aAAAE;AAAA,IACA,kBAAAE;AAAA,IACA,cAAAoB;AAAA,EACF;AACF;ACxIA,SAAwBG,GAAW;AAAA,EACjC,WAAAzU;AAAA,EACA,gBAAA0U;AAAA,EACA,mBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,oBAAAlC,IAAqB;AAAA,EACrB,UAAA3S;AAAA,EACA,IAAAH;AAAA,EACA,KAAAyG;AAAA,EACA,GAAGiD;AACL,GAAoB;AACZ,QAAA,EAAE,aAAAqJ,GAAa,kBAAAC,GAAkB,oBAAAC,GAAoB,aAAAC,GAAa,aAAAE,GAAa,kBAAAE,GAAkB,cAAAoB,EAAA,IACrG7B,GAAcC,CAAkB,GAE5BmC,IAAkB9T;AAAAA,IACtB;AAAA,IACA2T;AAAA,EACF;AAEA,SACG,gBAAA5T,EAAA,OAAA,EAAI,KAAAuF,GAAU,IAAAzG,GAAQ,WAAWmB,EAAK,4BAA4Bf,CAAS,GAAG,yBAAsB,IAAI,GAAGsJ,GAC1G,UAAA;AAAA,IAAA,gBAAAtI;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK2R;AAAA,QACL,WAAW5R;AAAAA,UACT;AAAA,UACA4T;AAAA,QACF;AAAA,QACA,UAAUL;AAAA,QACV,6BAA0B;AAAA,QAEzB,UAAAvU;AAAA,MAAA;AAAA,IACH;AAAA,IAGCmT,EAAiB,aAAaJ,KAAeE,MAC5C,gBAAAhS;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWD;AAAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACAiS,IAAc,cAAc;AAAA,UAC5B4B;AAAA,QACF;AAAA,QACA,8BAA2B;AAAA,QAC3B,cAAY9B,IAAc,YAAY;AAAA,QACtC,OAAO;AAAA,UACL,OAAO,GAAGJ,CAAkB;AAAA,UAC5B,QAAQQ,EAAiB,aACrB,eAAeR,CAAkB,QACjC;AAAA,QACN;AAAA,QAEA,UAAA,gBAAA1R;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAK4R;AAAA,YACL,WAAW7R,EAAK,yBAAyB8T,CAAe;AAAA,YACxD,0BAAuB;AAAA,YACvB,OAAO,EAAE,QAAQ,OAAO,KAAK,MAAM,OAAO,OAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MACnD;AAAA,IACF;AAAA,IAID3B,EAAiB,eAAeJ,KAAeE,MAC9C,gBAAAhS;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWD;AAAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACAiS,IAAc,cAAc;AAAA,UAC5B4B;AAAA,QACF;AAAA,QACA,8BAA2B;AAAA,QAC3B,cAAY9B,IAAc,YAAY;AAAA,QACtC,OAAO;AAAA,UACL,QAAQ,GAAGJ,CAAkB;AAAA,UAC7B,OAAOQ,EAAiB,WACpB,eAAeR,CAAkB,QACjC;AAAA,QACN;AAAA,QAEA,UAAA,gBAAA1R;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAK6R;AAAA,YACL,WAAW9R,EAAK,yBAAyB8T,CAAe;AAAA,YACxD,0BAAuB;AAAA,YACvB,OAAO,EAAE,OAAO,OAAO,MAAM,MAAM,QAAQ,OAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MACpD;AAAA,IACF;AAAA,IAID3B,EAAiB,YAAYA,EAAiB,cAC7C,gBAAAlS;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWD,EAAK,kBAAkB,2BAA2B;AAAA,QAC7D,2BAAwB;AAAA,QACxB,OAAO;AAAA,UACL,QAAQ,GAAG2R,CAAkB;AAAA,UAC7B,OAAO,GAAGA,CAAkB;AAAA,QAAA;AAAA,MAC9B;AAAA,IAAA;AAAA,EACF,GAEJ;AAEJ;ACpHO,SAASoC,GAAkB5U,GAAiB;AACjD,QAAM,CAAC+L,GAAMC,CAAO,IAAIrK,EAAS,EAAK,GAChC,CAACsK,GAAcC,CAAe,IAAIvK,EAAS,EAAK;AAEtD,SAAAc,EAAU,MAAM;AACd,IAAIzC,KACFkM,EAAgB,EAAI,GACpB,WAAW,MAAMF,EAAQ,EAAI,GAAG,EAAE,MAElCA,EAAQ,EAAK,GACb,WAAW,MAAME,EAAgB,EAAK,GAAG,GAAG;AAAA,EAC9C,GACC,CAAClM,CAAM,CAAC,GAEJ,EAAE,MAAA+L,GAAM,cAAAE,EAAa;AAC9B;AAYO,SAAS4I,GAA4B;AAAA,EAC1C,QAAA7U;AAAA,EACA,WAAA8U;AAAA,EACA,iBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AACF,GAAqC;AAyEnC,SAAO,EAAE,eAxEarQ;AAAA,IACpB,CAACnE,MAA2B;;AAC1B,cAAQA,EAAE,KAAK;AAAA,QACb,KAAK;AAEH,cADAA,EAAE,eAAe,GACb,CAACX;AACH,YAAA8U,EAAU,EAAI;AAAA,eACT;AACL,kBAAMM,IAAYJ,IAAmBD,EAAgB,SAAS,IAAIC,IAAmB,IAAI;AAEzF,gBAAIK,IAAaD;AACjB,qBAAShO,IAAI,GAAGA,IAAI2N,EAAgB,QAAQ3N,KAAK;AACzC,oBAAAkO,KAAcF,IAAYhO,KAAK2N,EAAgB;AACrD,kBAAI,CAACA,EAAgBO,CAAU,EAAE,UAAU;AAC5B,gBAAAD,IAAAC;AACb;AAAA,cAAA;AAAA,YACF;AAEF,YAAAL,EAAoBI,CAAU;AAAA,UAAA;AAEhC;AAAA,QAEF,KAAK;AAEH,cADA1U,EAAE,eAAe,GACb,CAACX;AACH,YAAA8U,EAAU,EAAI;AAAA,eACT;AACL,kBAAMnS,IAAYqS,IAAmB,IAAIA,IAAmB,IAAID,EAAgB,SAAS;AAEzF,gBAAIM,IAAa1S;AACjB,qBAASyE,IAAI,GAAGA,IAAI2N,EAAgB,QAAQ3N,KAAK;AAC/C,oBAAMkO,KAAc3S,IAAYyE,IAAI2N,EAAgB,UAAUA,EAAgB;AAC9E,kBAAI,CAACA,EAAgBO,CAAU,EAAE,UAAU;AAC5B,gBAAAD,IAAAC;AACb;AAAA,cAAA;AAAA,YACF;AAEF,YAAAL,EAAoBI,CAAU;AAAA,UAAA;AAEhC;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAEH,cADA1U,EAAE,eAAe,GACb,CAACX;AACH,YAAA8U,EAAU,EAAI;AAAA,mBACLE,KAAoB,KAAKA,IAAmBD,EAAgB,QAAQ;AACvE,kBAAAQ,IAAiBR,EAAgBC,CAAgB;AACnD,YAACO,EAAe,YAClBL,EAASK,CAAc;AAAA,UACzB;AAEF;AAAA,QAEF,KAAK;AACH,UAAA5U,EAAE,eAAe,GACbX,MACF8U,EAAU,EAAK,IACf9M,IAAAmN,EAAW,YAAX,QAAAnN,EAAoB;AAEtB;AAAA,QAEF,KAAK;AACH,UAAIhI,KACF8U,EAAU,EAAK;AAEjB;AAAA,MAAA;AAAA,IAEN;AAAA,IACA,CAAC9U,GAAQ8U,GAAWC,GAAiBC,GAAkBC,GAAqBC,GAAUC,CAAU;AAAA,EAClG,EAEuB;AACzB;AAUO,SAASK,GAAmB;AAAA,EACjC,QAAAxV;AAAA,EACA,iBAAA+U;AAAA,EACA,gBAAAQ;AAAA,EACA,cAAAtJ;AAAA,EACA,qBAAAwJ;AACF,GAA4B;AAC1B,QAAM,CAACT,GAAkBC,CAAmB,IAAItT,EAAS,EAAE,GAErD+T,IAAgBxO,EAAQ,MACxBqO,IACKR,EAAgB,UAAU,CAACnD,MAAWA,EAAO,UAAU2D,EAAe,KAAK,IAE7E,IACN,CAACR,GAAiBQ,CAAc,CAAC;AAGpC,SAAA9S,EAAU,MAAM;AACV,IAAAzC,KAAU+U,EAAgB,SAAS,IAGfE,EAFlBM,KAEkBG,KAAiB,IAAIA,IAGrB,CAHsC,IAO5DT,EAAoB,EAAE;AAAA,KAEvB,CAACF,GAAiB/U,GAAQuV,GAAgBG,CAAa,CAAC,GAG3DjT,EAAU,MAAM;AACd,QAAIuS,KAAoB,KAAKS,EAAoB,WAAWxJ,GAAc;AACxE,YAAM0J,IAAiB,MAAM;AAC3B,cAAMC,IAAYH,EAAoB,SAChCI,IAAoBD,KAAA,gBAAAA,EAAW,cAAc,uBAAuBZ,CAAgB;AAE1F,YAAIa,GAAmB;AAErB,gBAAMC,IAAW9V,KAAUuV,KAAkBP,MAAqBU,IAAgB,SAAS;AAC3F,UAAAG,EAAkB,eAAe;AAAA,YAC/B,UAAAC;AAAA,YACA,OAAO;AAAA,UAAA,CACR;AAAA,QAAA;AAAA,MAEL;AAGI,MAAA9V,KAAUiM,KAAgBsJ,IAC5B,WAAWI,GAAgB,EAAE,IAEdA,EAAA;AAAA,IACjB;AAAA,EACF,GACC,CAACX,GAAkB/I,GAAcjM,GAAQuV,GAAgBR,GAAiBU,GAAqBC,CAAa,CAAC,GAEzG,EAAE,kBAAAV,GAAkB,qBAAAC,EAAoB;AACjD;AC3LO,MAAMpS,KAAe;AAAA,EAC1B,IAAI;AAAA,IACF,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AAAA,EACA,IAAI;AAAA,IACF,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AAAA,EACA,IAAI;AAAA,IACF,SAAS;AAAA,IACT,SAAS;AAAA,EAAA;AAEb;ACaA,SAAwBkT,GAAO;AAAA,EAC7B,SAAA1E;AAAA,EACA,OAAAZ;AAAA,EACA,aAAAuF,IAAc;AAAA,EACd,YAAAC,IAAa;AAAA,EACb,UAAAlW,IAAW;AAAA,EACX,WAAAmW,IAAY;AAAA,EACZ,MAAAhT,IAAO;AAAA,EACP,WAAApD;AAAA,EACA,kBAAAI;AAAA,EACA,mBAAAiW;AAAA,EACA,IAAAzW;AAAA,EACA,KAAAyG;AAAA,EACA,UAAAiK;AAAA,EACA,UAAAgG;AAAA,EACA,mBAAAC,IAAoB;AACtB,GAAgB;AACd,QAAMhN,IAAchJ,EAAM,GAEpBiW,IAAY,GADD5W,KAAM2J,CACM,YAEvBkN,IAAc,CAACvU,MAAkB,GAAGsU,CAAS,WAAWtU,CAAK,IAE7D,CAAChC,GAAQ8U,CAAS,IAAInT,EAAS,EAAK,GACpC,CAAC6U,GAAYC,CAAa,IAAI9U,EAAS,EAAE,GAEzCwT,IAAa1Q,EAA0B,IAAI,GAC3CiS,IAAiBjS,EAAyB,IAAI,GAC9CkS,IAAclS,EAAuB,IAAI,GACzCgR,IAAsBhR,EAAuB,IAAI,GAEjD,EAAE,MAAAsH,GAAM,cAAAE,MAAiB2I,GAAkB5U,CAAM,GAGjD+U,IAAkB7N,EAAQ,MAC1B,CAAC+O,KAAc,CAACO,IAAmBnF,IAChCA,EAAQ;AAAA,IACb,CAACO,MACC;;AAAA,aAAAA,EAAO,KAAK,YAAY,EAAE,SAAS4E,EAAW,YAAa,CAAA,OAC3DxO,IAAA4J,EAAO,gBAAP,gBAAA5J,EAAoB,cAAc,SAASwO,EAAW,YAAa;AAAA;AAAA,EACvE,GACC,CAACnF,GAAS4E,GAAYO,CAAU,CAAC,GAE9BjB,IAAiBrO,EAAQ,MAAMmK,EAAQ,KAAK,CAACO,MAAWA,EAAO,UAAUnB,CAAK,GAAG,CAACY,GAASZ,CAAK,CAAC,GAGjG,EAAE,kBAAAuE,GAAkB,qBAAAC,EAAoB,IAAIO,GAAmB;AAAA,IACnE,QAAAxV;AAAA,IACA,iBAAA+U;AAAA,IACA,gBAAAQ;AAAA,IACA,cAAAtJ;AAAA,IACA,qBAAAwJ;AAAA,EAAA,CACD,GAEKmB,IAAqB5B,KAAoB,IAAIuB,EAAYvB,CAAgB,IAAI;AAGnF,EAAAvS,EAAU,MAAM;AACd,IAAIzC,KAAUiM,KAAgBgK,KAAcS,EAAe,WACzDA,EAAe,QAAQ,MAAM;AAAA,EAE9B,GAAA,CAAC1W,GAAQiW,GAAYhK,CAAY,CAAC;AAErC,QAAM4K,IAAmB/R;AAAA,IACvB,CAAC8M,MAAyB;;AACpB,MAACA,EAAO,aACVxB,KAAA,QAAAA,EAAWwB,EAAO,QAClBkD,EAAU,EAAK,GACf2B,EAAc,EAAE,IAChBzO,IAAAmN,EAAW,YAAX,QAAAnN,EAAoB;AAAA,IAExB;AAAA,IACA,CAACoI,CAAQ;AAAA,EACX,GAEM,EAAE,eAAA1P,EAAc,IAAImU,GAA4B;AAAA,IACpD,QAAA7U;AAAA,IACA,WAAA8U;AAAA,IACA,iBAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,UAAU4B;AAAA,IACV,YAAA1B;AAAA,EAAA,CACD;AAGD,EAAA1S,EAAU,MAAM;AACd,QAAI,CAACzC;AACH;AAGI,UAAA8W,IAAqB,CAACC,MAAsB;;AAChD,MACEJ,EAAY,WACZ,CAACA,EAAY,QAAQ,SAASI,EAAM,MAAc,KAClD,GAAC/O,KAAAmN,EAAW,YAAX,QAAAnN,GAAoB,SAAS+O,EAAM,aAEpCjC,EAAU,EAAK,GACf2B,EAAc,EAAE;AAAA,IAEpB;AAES,oBAAA,iBAAiB,aAAaK,CAAkB,GAClD,MAAM,SAAS,oBAAoB,aAAaA,CAAkB;AAAA,EAAA,GACxE,CAAC9W,CAAM,CAAC;AAEX,QAAMS,IAAe,MAAM;AACzB,IAAKV,MACH+U,EAAU,CAAC9U,CAAM,GACZA,MACHyW,EAAc,EAAE,GAChBxB,EAAoB,EAAE;AAAA,EAG5B,GAEM+B,KAAoB,CAACpF,MAAyB;AAC9C,IAACA,EAAO,aACVxB,KAAA,QAAAA,EAAWwB,EAAO,QAClBkD,EAAU,EAAK,GACf2B,EAAc,EAAE;AAAA,EAEpB,GAEMQ,KAAqB,CAACtW,MAA2C;AAC/D,UAAAuW,IAAOvW,EAAE,OAAO;AACtB,IAAA8V,EAAcS,CAAI,GAClBd,KAAA,QAAAA,EAAWc,IACXjC,EAAoB,EAAE;AAAA,EACxB,GAEMkC,KAAc,CAACxW,MAAwB;AAC3C,IAAAA,EAAE,eAAe,GACjBA,EAAE,gBAAgB,GAClByP,KAAA,QAAAA,EAAW;AAAA,EACb;AAGE,SAAA,gBAAAxP;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAK,YAAYf,CAAS;AAAA,MACrC,IAAAJ;AAAA,MACA,KAAAyG;AAAA,MACA,eAAY;AAAA,MACZ,cAAYsK;AAAA,MACZ,mBAAiBwF;AAAA,MACjB,iBAAelW;AAAA,MACf,kBAAgBmW;AAAA,MAGhB,UAAA;AAAA,QAAC,gBAAAtV,EAAA,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,UAAA,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAKuU;AAAA,cACL,MAAK;AAAA,cACL,WAAWtU;AAAA,gBACT;AAAA,gBACA;AAAA,gBACAd,KAAY;AAAA,gBACZC,KAAU;AAAA,gBACV6C,GAAaK,CAAI,EAAE;AAAA,gBACnBhD;AAAA,cACF;AAAA,cACA,SAASO;AAAA,cACT,WAAWC;AAAA,cACX,UAAAX;AAAA,cACA,iBAAeA;AAAA,cACf,iBAAc;AAAA,cACd,iBAAeC;AAAA,cACf,iBAAeA,IAASsW,IAAY;AAAA,cACpC,yBAAuBtW,KAAU,CAACiW,IAAaW,IAAqB;AAAA,cACpE,cAAYrB,IAAiBA,EAAe,OAAOS;AAAA,cACnD,uBAAoB;AAAA,cAEpB,UAAA;AAAA,gBAAC,gBAAAlV,EAAA,QAAA,EAAK,WAAWD,EAAK,kBAAkB,CAAC0U,KAAkB,YAAY,GACpE,UAAAA,IAAiBA,EAAe,OAAOS,EAC1C,CAAA;AAAA,gBACC,gBAAAlV,EAAA,OAAA,EAAI,WAAU,0BACb,4BAACC,IAAY,EAAA,MAAM,IAAI,WAAWF,EAAK,qCAAqCb,KAAU,YAAY,GAAG,EACvG,CAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACF;AAAA,UACCkW,KAAaX,KACZ,gBAAAzU;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAASqW;AAAA,cACT,WAAU;AAAA,cACV,cAAW;AAAA,cACX,qBAAkB;AAAA,cAElB,UAAC,gBAAArW,EAAA+M,IAAA,EAAE,MAAM,IAAI,WAAU,wDAAwD,CAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACjF,GAEJ;AAAA,QAGC5B,KACC,gBAAArL;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAK+V;AAAA,YACL,WAAW9V;AAAA,cACT;AAAA,cACAkL,IAAO,8BAA8B;AAAA,cACrCoK;AAAA,YACF;AAAA,YACA,IAAIG;AAAA,YACJ,MAAK;AAAA,YACL,uBAAoB;AAAA,YAGnB,UAAA;AAAA,cACCL,KAAA,gBAAAnV,EAAC,OAAI,EAAA,WAAU,0BACb,UAAA,gBAAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,KAAK4V;AAAA,kBACL,MAAK;AAAA,kBACL,OAAOF;AAAA,kBACP,UAAUS;AAAA,kBACV,WAAWvW;AAAA,kBACX,aAAa2V;AAAA,kBACb,WAAU;AAAA,kBACV,qBAAkB;AAAA,kBAClB,iBAAeC;AAAA,kBACf,yBAAuBM;AAAA,kBACvB,sBAAmB;AAAA,gBAAA;AAAA,cAAA,GAEvB;AAAA,cAID,gBAAA9V,EAAA,OAAA,EAAI,KAAK2U,GAAqB,WAAU,0BACtC,UAAgBV,EAAA,SAAS,IACxBA,EAAgB,IAAI,CAACnD,GAAQ5P,MAC3B,gBAAApB;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,IAAI2V,EAAYvU,CAAK;AAAA,kBACrB,WAAWnB;AAAA,oBACT;AAAA,oBACA;AAAA,oBACAgC,GAAaK,CAAI,EAAE;AAAA,oBACnB0O,EAAO,YAAY;AAAA,oBACnB5P,MAAUgT,KAAoB;AAAA,oBAC9BvE,MAAUmB,EAAO,SAAS;AAAA,kBAC5B;AAAA,kBACA,SAAS,MAAMoF,GAAkBpF,CAAM;AAAA,kBACvC,MAAK;AAAA,kBACL,iBAAenB,MAAUmB,EAAO;AAAA,kBAChC,iBAAeA,EAAO;AAAA,kBACtB,sBAAmB;AAAA,kBACnB,cAAYA,EAAO;AAAA,kBACnB,oBAAkB5P,MAAUgT;AAAA,kBAC5B,qBAAmBhT;AAAA,kBAEnB,UAAA;AAAA,oBAAC,gBAAApB,EAAA,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,sBAAA,gBAAAE,EAAC,OAAI,EAAA,WAAU,eAAe,UAAA8Q,EAAO,MAAK;AAAA,sBACzCA,EAAO,eAAe,gBAAA9Q,EAAC,SAAI,WAAU,6BAA6B,YAAO,YAAY,CAAA;AAAA,oBAAA,GACxF;AAAA,oBACC2P,MAAUmB,EAAO,SAAS,gBAAA9Q,EAAC+I,MAAM,MAAM,IAAI,WAAU,kCAAkC,CAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAvBnF+H,EAAO;AAAA,cAyBf,CAAA,IAED,gBAAA9Q,EAAC,OAAI,EAAA,WAAU,4CACZ,UAAcmV,KAAAO,IAAa,qBAAqB,uBACnD,CAAA,EAEJ,CAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAEJ;AAEJ;ACjSO,MAAMY,KAAoE;AAAA,EAC/E,MAAM;AAAA,IACJ,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA,QAAQ;AAAA,IACN,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA,eAAe;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,EAAA;AAEd,GAIavU,KAA4C;AAAA,EACvD,YAAY;AAAA,EACZ,UAAU;AACZ;ACRA,SAAwBwU,GAAU;AAAA,EAChC,aAAAC,IAAc;AAAA,EACd,YAAAC,IAAa;AAAA,EACb,WAAAC,IAAY;AAAA,EACZ,WAAA1X;AAAA,EACA,GAAGsJ;AACL,GAAmB;AACjB,QAAMqO,IAAmB5W;AAAA,IACvB;AAAA,IACAgC,GAAayU,CAAW;AAAA,IACxBF,GAAkBI,CAAS,EAAEF,CAAW;AAAA,IACxCxX;AAAA,EACF;AAGE,SAAA,gBAAAgB;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGsI;AAAA,MACJ,WAAWqO;AAAA,MACX,MAAMF,IAAa,iBAAiB;AAAA,MACpC,oBAAkBA,IAAa,SAAYD;AAAA,MAC3C,eAAaC;AAAA,MACb,oBAAkBD;AAAA,MAClB,kBAAgBE;AAAA,IAAA;AAAA,EAClB;AAEJ;AC3CO,MAAME,KAAmB;AAAA,EAC9B,OAAO;AAAA,IACL,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACA,aAAa;AAAA,IACX,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAER;ACEA,SAAwBC,GAAS;AAAA,EAC/B,OAAAC,IAAQ;AAAA,EACR,aAAAC,IAAc;AAAA,EACd,WAAA/X;AAAA,EACA,OAAAgY,IAAQ;AAAA,EACR,SAAAC,IAAU;AAAA,EACV,KAAA5R;AAAA,EACA,GAAGiD;AACL,GAAkB;AACV,QAAAgG,IAAcvO,EAAK,eAAekX,KAAW,iBAAiBL,GAAiB,MAAME,CAAK,GAAG9X,CAAS;AAG5G,SAAIgY,IAAQ,IAER,gBAAAhX;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAqF;AAAA,MACA,WAAWuR,GAAiB,YAAYG,CAAW;AAAA,MACnD,MAAK;AAAA,MACL,eAAY;AAAA,MACZ,eAAY;AAAA,MACZ,cAAYC;AAAA,MACZ,cAAYF;AAAA,MACZ,gBAAcG;AAAA,MACb,GAAG3O;AAAA,MAEH,UAAA,MAAM,KAAK,EAAE,QAAQ0O,KAAS,CAAC1P,GAAGpG,MACjC,gBAAAlB;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAWD;AAAA,YACTuO;AAAA;AAAA,YAEApN,MAAU8V,IAAQ,KAAK;AAAA,UACzB;AAAA,UACA,MAAK;AAAA,UACL,eAAY;AAAA,UACZ,eAAY;AAAA,UACZ,mBAAiB9V;AAAA,QAAA;AAAA,QATZA;AAAA,MAWR,CAAA;AAAA,IAAA;AAAA,EACH,IAKF,gBAAAlB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAqF;AAAA,MACA,WAAWiJ;AAAA,MACX,MAAK;AAAA,MACL,eAAY;AAAA,MACZ,eAAY;AAAA,MACZ,cAAYwI;AAAA,MACZ,gBAAcG;AAAA,MACb,GAAG3O;AAAA,IAAA;AAAA,EACN;AAEJ;ACnCA,SAAwB4O,GAAO;AAAA,EAC7B,IAAAtY;AAAA,EACA,OAAA+Q;AAAA,EACA,cAAAwH,IAAe;AAAA,EACf,eAAAC;AAAA,EACA,KAAAC,IAAM;AAAA,EACN,KAAAC,IAAM;AAAA,EACN,MAAAC,IAAO;AAAA,EACP,UAAAtY,IAAW;AAAA,EACX,gBAAAuY;AAAA,EACA,gBAAAC;AAAA,EACA,gBAAA/D;AAAA,EACA,WAAA1U;AAAA,EACA,KAAAqG;AAAA,EACA,WAAAqS;AAAA,EACA,gBAAAnL;AAAA,EACA,GAAGjE;AACL,GAAgB;AACd,QAAM,CAACqP,GAAeC,CAAgB,IAAI/W,EAASsW,CAAY,GACzDU,IAAelI,MAAU,QACzBmI,IAAeD,IAAelI,IAAQgI,GAEtCI,IAAWpU,EAAuB,IAAI,GACtCqU,IAAgBrU,EAAO,EAAK,GAC5BsU,IAAgBtU,EAAO,CAAC,GAExBuU,IAAclU;AAAA,IAClB,CAACmU,MAAqB;AACd,YAAAC,IAAe,KAAK,IAAIf,GAAK,KAAK,IAAIC,GAAKa,CAAQ,CAAC,GACpDE,IAAe,KAAK,MAAMD,IAAeb,CAAI,IAAIA;AAEvD,MAAKM,KACHD,EAAiBS,CAAY,GAE/BjB,KAAA,QAAAA,EAAgBiB;AAAA,IAClB;AAAA,IACA,CAAChB,GAAKC,GAAKC,GAAMM,GAAcT,CAAa;AAAA,EAC9C,GAEMkB,IAA2BtU;AAAA,IAC/B,CAACiS,GAA0CsC,IAAa,OAAU;;AAC1D,YAAAC,KAAOtR,IAAA6Q,EAAS,YAAT,gBAAA7Q,EAAkB;AAC3B,UAAA,CAACsR,EAAa,QAAAV;AAElB,UAAIW,IAAUxC,EAAM;AAGpB,MAAIsC,MACFE,IAAUA,IAAUR,EAAc;AAGpC,YAAMS,IAAa,KAAK,IAAI,GAAG,KAAK,IAAI,IAAID,IAAUD,EAAK,QAAQA,EAAK,KAAK,CAAC;AACvE,aAAAnB,KAAOC,IAAMD,KAAOqB;AAAAA,IAC7B;AAAA,IACA,CAACrB,GAAKC,GAAKQ,CAAY;AAAA,EACzB,GAEMa,IAAyB3U;AAAA,IAC7B,CAACiS,MAA8C;AAIzC,UAHAhX,KAGAgX,EAAM,WAAWA,EAAM,cAAe;AAEpC,YAAAkC,IAAWG,EAAyBrC,CAAK;AAC/C,MAAAiC,EAAYC,CAAQ;AAAA,IACtB;AAAA,IACA,CAAClZ,GAAUqZ,GAA0BJ,CAAW;AAAA,EAClD,GAEMU,IAAyB5U;AAAA,IAC7B,CAACiS,MAA8C;;AAC7C,UAAIhX,EAAU;AAGd,MAAAgX,EAAM,gBAAgB,GAEtB+B,EAAc,UAAU;AAGlB,YAAAa,KAAY3R,IAAA6Q,EAAS,YAAT,gBAAA7Q,EAAkB,yBAC9B4R,IAAY7C,EAAM,cAAc,sBAAsB;AAE5D,UAAI4C,KAAaC,GAAW;AAC1B,cAAMC,IAAcD,EAAU,OAAOA,EAAU,QAAQ;AACzC,QAAAb,EAAA,UAAUhC,EAAM,UAAU8C;AAAA,MAAA;AAIpC,MAAA9C,EAAA,cAAc,kBAAkBA,EAAM,SAAS;AAG/C,YAAA+C,IAA0B,CAACnZ,MAAoB;AAC/C,YAAA,CAACmY,EAAc,QAAS;AACtB,cAAAG,IAAWG,EAAyBzY,GAAG,EAAI;AACjD,QAAAqY,EAAYC,CAAQ;AAAA,MACtB,GAEMc,IAAwB,CAACpZ,MAAoB;AAC7C,YAAAA,EAAE,cAAcoW,EAAM,WAC1B;AAAA,UAAA+B,EAAc,UAAU,IACxBC,EAAc,UAAU;AAGpB,cAAA;AACI,YAAAhC,EAAA,cAAc,sBAAsBpW,EAAE,SAAS;AAAA,UAAA,QAC/C;AAAA,UAAA;AAIC,mBAAA,oBAAoB,eAAemZ,CAAuB,GAC1D,SAAA,oBAAoB,aAAaC,CAAqB;AAAA;AAAA,MACjE;AAES,eAAA,iBAAiB,eAAeD,CAAuB,GACvD,SAAA,iBAAiB,aAAaC,CAAqB;AAAA,IAC9D;AAAA,IACA,CAACha,GAAUqZ,GAA0BJ,CAAW;AAAA,EAClD,GAEMtY,IAAgBoE;AAAA,IACpB,CAACiS,MAA+C;AAC9C,UAAIhX,EAAU;AAEd,UAAIkZ,IAAWL;AAEf,cAAQ7B,EAAM,KAAK;AAAA,QACjB,KAAK;AAAA,QACL,KAAK;AACH,UAAAkC,IAAWL,IAAeP;AAC1B;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AACH,UAAAY,IAAWL,IAAeP;AAC1B;AAAA,QACF,KAAK;AACQ,UAAAY,IAAAd;AACX;AAAA,QACF,KAAK;AACQ,UAAAc,IAAAb;AACX;AAAA,QACF,KAAK;AACH,UAAAa,IAAWL,IAAeP,IAAO;AACjC;AAAA,QACF,KAAK;AACH,UAAAY,IAAWL,IAAeP,IAAO;AACjC;AAAA,QACF;AACE;AAAA,MAAA;AAGJ,MAAAtB,EAAM,eAAe,GACrBiC,EAAYC,CAAQ;AAAA,IACtB;AAAA,IACA,CAAClZ,GAAU6Y,GAAcP,GAAMF,GAAKC,GAAKY,CAAW;AAAA,EACtD,GAGMQ,IAAapB,MAAQD,IAAM,KAAMS,IAAeT,MAAQC,IAAMD,KAAQ;AAG1E,SAAA,gBAAArX;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,IAAApB;AAAA,MACA,KAAAyG;AAAA,MACA,WAAWtF;AAAAA,QACT;AAAA,QACAd,KAAY;AAAA,QACZD;AAAA,MACF;AAAA,MACA,iBAAeC;AAAA,MACf,cAAY6Y;AAAA,MACZ,YAAUT;AAAA,MACV,YAAUC;AAAA,MACV,aAAWC;AAAA,MACV,GAAGjP;AAAA,MAEJ,UAAA,gBAAAxI;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAKiY;AAAA,UACL,WAAWhY;AAAAA,YACT;AAAA,YACAd,KAAY;AAAA,YACZuY;AAAA,UACF;AAAA,UACA,eAAemB;AAAA,UAGf,UAAA;AAAA,YAAA,gBAAA3Y;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWD;AAAAA,kBACT;AAAA;AAAA,kBACA,CAACiY,EAAc,WAAW;AAAA,kBAC1BP;AAAA,gBACF;AAAA,gBACA,OAAO,EAAE,OAAO,GAAGiB,CAAU,IAAI;AAAA,cAAA;AAAA,YACnC;AAAA,YAGA,gBAAA1Y;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWD;AAAAA,kBACT;AAAA,kBACAd,KAAY;AAAA,kBACZ,CAACA,KAAY;AAAA,kBACb+Y,EAAc,UAAU,8BAA8B;AAAA,kBACtDtE;AAAA,gBACF;AAAA,gBACA,OAAO,EAAE,MAAM,QAAQgF,CAAU,YAAY;AAAA,gBAC7C,UAAUzZ,IAAW,KAAK;AAAA,gBAC1B,MAAK;AAAA,gBACL,iBAAeoY;AAAA,gBACf,iBAAeC;AAAA,gBACf,iBAAeQ;AAAA,gBACf,cAAYJ;AAAA,gBACZ,mBAAiBnL;AAAA,gBACjB,iBAAetN;AAAA,gBACf,WAAWW;AAAA,gBACX,eAAegZ;AAAA,cAAA;AAAA,YAAA;AAAA,UACjB;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAEJ;AC/OO,SAASM,GAAsB,EAAE,UAAAna,GAAU,KAAAsG,GAAK,GAAGiD,KAAuB;AAE3E,MAAA6Q,GAAepa,CAAQ,GAAG;AACxB,QAAAqa,IAAW,EAAE,GAAG9Q,EAAM;AAC1B,WAAIvJ,EAAS,UACXqa,IAAW,EAAE,GAAGA,GAAU,GAAGra,EAAS,MAAM,IAEvCsa,GAAata,GAAU;AAAA,MAC5B,GAAGqa;AAAA,MACH,KAAK,CAACE,MAAY;AACZ,QAAA,OAAOjU,KAAQ,aACjBA,EAAIiU,CAAI,IACCjU,MACRA,EAA2B,UAAUiU;AAAA,MACxC;AAAA,IACF,CAC0B;AAAA,EAAA;AAI9B,SAAO/X,GAAc,OAAO,EAAE,GAAG+G,GAAO,KAAAjD,KAAOtG,CAAQ;AACzD;AC5Ba,MAAAwa,KAAU,CAAC,EAAE,cAAApC,GAAc,OAAAxH,GAAO,eAAAyH,EAAc,IAAkB,CAAA,MAAO;AACpF,QAAM,CAACO,GAAeC,CAAgB,IAAI/W,EAAiBsW,KAAgB,EAAE,GAEvEU,IAAelI,MAAU,QACzBmI,IAAeD,IAAelI,IAAQgI,GAEtC6B,IAAoBxV,EAAY,CAACmU,MAAqB;AAC1D,IAAKN,KACHD,EAAiBO,CAAQ,GAE3Bf,KAAA,QAAAA,EAAgBe;AAAA,EAAQ,GACvB,CAACN,GAAcT,CAAa,CAAC;AAEzB,SAAA;AAAA,IACL,OAAOU;AAAA,IACP,eAAe0B;AAAA,EACjB;AACF;ACIO,SAASC,GAAK;AAAA,EACnB,cAAAtC;AAAA,EACA,OAAAxH;AAAA,EACA,eAAAyH;AAAA,EACA,WAAAsC,IAAY;AAAA,EACZ,SAAAvX,IAAU;AAAA,EACV,WAAAnD;AAAA,EACA,UAAAD;AAAA,EACA,KAAAsG;AAAA,EACA,IAAAzG;AAAA,EACA,mBAAA2B;AAAA,EACA,kBAAAoZ;AACF,GAAc;AACZ,QAAM,EAAE,OAAOC,GAAe,eAAeJ,EAAA,IAAsBD,GAAQ;AAAA,IACzE,cAAApC;AAAA,IACA,OAAAxH;AAAA,IACA,eAAAyH;AAAA,EAAA,CACD,GAEKyC,IAAiC;AAAA,IACrC,eAAAD;AAAA,IACA,eAAeJ;AAAA,IACf,WAAAE;AAAA,IACA,SAAAvX;AAAA,IACA,mBAAA5B;AAAA,IACA,kBAAAoZ;AAAA,EACF;AAEA,2BACGG,GAAY,UAAZ,EAAqB,OAAOD,GAC3B,UAAC,gBAAA7Z,EAAA,OAAA,EAAI,IAAApB,GAAQ,KAAAyG,GAAU,WAAArG,GAAsB,mBAAiB0a,GAAW,gBAAcvX,GACpF,UAAApD,EACH,CAAA,GACF;AAEJ;ACnDO,SAASgb,GAAY,EAAE,OAAApK,GAAO,WAAA3Q,GAAW,UAAAD,GAAU,KAAAsG,KAAyB;AACjF,QAAM,EAAE,eAAAuU,GAAe,kBAAAD,EAAiB,IAAIK,GAAe,GACrDC,IAAWL,MAAkBjK;AAEnC,SAAKsK,IAQH,gBAAAja;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAqF;AAAA,MACA,MAAK;AAAA,MACL,IAAI,gBAAgBsK,CAAK;AAAA,MACzB,mBAAiB,gBAAgBA,CAAK;AAAA,MACtC,cAAYsK,IAAW,WAAW;AAAA,MAClC,cAAYtK;AAAA,MACZ,WAAW5P,EAVb,qIAUiC4Z,GAAkB3a,CAAS;AAAA,MAC1D,UAAU;AAAA,MAET,UAAAD;AAAA,IAAA;AAAA,EACH,IAlBO;AAoBX;ACnCO,MAAMmb,KAAmB;AAAA,EAC9B,OAAO;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,EACR;AAAA,EACA,SAAS;AAAA,IACP,WAAW;AAAA,IACX,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAEd,GAEaC,KAAqB;AAAA,EAChC,WACE;AAAA,EACF,OAAO;AAAA,EACP,UAAU;AACZ;ACTO,SAASC,GAAS,EAAE,UAAArb,GAAU,WAAAC,GAAW,IAAAJ,GAAI,KAAAyG,KAAsB;AACxE,QAAM,EAAE,WAAAqU,GAAW,SAAAvX,EAAQ,IAAI6X,GAAe;AAG5C,SAAA,gBAAAha;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,IAAApB;AAAA,MACA,KAAAyG;AAAA,MACA,MAAK;AAAA,MACL,WAAWtF,EAAK,QAAQma,GAAiB,MAAMR,CAAS,GAAGQ,GAAiB,QAAQ/X,CAAO,GAAGnD,CAAS;AAAA,MACvG,mBAAiB0a;AAAA,MACjB,gBAAcvX;AAAA,MAEb,UAAApD;AAAA,IAAA;AAAA,EACH;AAEJ;ACPgB,SAAAsb,GAAY,EAAE,OAAA1K,GAAO,UAAA1Q,IAAW,IAAO,WAAAD,GAAW,UAAAD,GAAU,SAAAub,GAAS,IAAA1b,GAAI,KAAAyG,KAAyB;AAChH,QAAM,EAAE,eAAAuU,GAAe,eAAAxC,GAAe,SAAAjV,GAAS,mBAAA5B,EAAA,IAAsByZ,GAAe,GAC9EC,IAAWL,MAAkBjK,GAE7BH,IAAc,CAACyG,MAA+C;AAClE,IAAKhX,KACHmY,EAAczH,CAAK,GAErB2K,KAAA,QAAAA,EAAUrE;AAAA,EACZ;AAME,SAAA,gBAAAjW;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,IAAApB;AAAA,MACA,KAAAyG;AAAA,MACA,MAAK;AAAA,MACL,MAAK;AAAA,MACL,iBAAe4U;AAAA,MACf,iBAAe,gBAAgBtK,CAAK;AAAA,MACpC,cAAYsK,IAAW,WAAW;AAAA,MAClC,cAAYtK;AAAA,MACZ,UAAA1Q;AAAA,MACA,WAAWc;AAAA,QAbb;AAAA,QAeIka,IAAW,gBAAgB;AAAA,QAC3BE,GAAmBhY,CAAO;AAAA,QAC1B5B;AAAA,QACAvB;AAAA,MACF;AAAA,MACA,SAASwQ;AAAA,MAER,UAAAzQ;AAAA,IAAA;AAAA,EACH;AAEJ;AChDA,SAAwBwb,GAAe,EAAE,WAAAnR,GAAW,WAAAoR,KAAkC;AACpF,QAAM,CAACC,GAAgBC,CAAiB,IAAI7Z,EAAS,CAAC;AAEtD,SAAAc,EAAU,MAAM;AACR,UAAAgZ,IAAW,SAAS,eAAevR,CAAS;AAClD,QAAI,CAACuR;AACH;AAGF,UAAMC,IAAuB,MAAM;AAC3B,YAAAC,IAAwBF,EAAS,MAAM;AAC7C,MAAAD,EAAkBG,CAAqB;AACvC,YAAMC,IAAUD,KAAyBL;AACzC,MAAAG,EAAS,aAAa,oBAAoB,GAAGvR,CAAS,kBAAkB,GACxEuR,EAAS,aAAa,gBAAgBG,IAAU,SAAS,OAAO,GAE5DA,IACOH,EAAA,aAAa,cAAc,MAAM,IAE1CA,EAAS,gBAAgB,YAAY;AAAA,IAEzC;AAEqB,WAAAC,EAAA,GACZD,EAAA,iBAAiB,SAASC,CAAoB,GACvDD,EAAS,aAAa,aAAa,OAAOH,CAAS,CAAC,GAE7C,MAAM;AACF,MAAAG,EAAA,oBAAoB,SAASC,CAAoB,GAC1DD,EAAS,gBAAgB,WAAW,GACpCA,EAAS,gBAAgB,kBAAkB,GAC3CA,EAAS,gBAAgB,cAAc,GACvCA,EAAS,gBAAgB,YAAY;AAAA,IACvC;AAAA,EAAA,GACC,CAACvR,GAAWoR,CAAS,CAAC,GAGvB,gBAAAxa;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWD;AAAA,QACT;AAAA,QACA0a,KAAkBD,KAAa;AAAA,QAC/BC,IAAiBD,KAAa;AAAA,MAChC;AAAA,MACA,MAAK;AAAA,MAEL,UAAC,gBAAA1a,EAAA,QAAA,EAAK,IAAI,GAAGsJ,CAAS,oBACnB,UAAA;AAAA,QAAAqR;AAAA,QAAe;AAAA,QAAID;AAAA,QAAU;AAAA,MAAA,EAChC,CAAA;AAAA,IAAA;AAAA,EACF;AAEJ;ACxDgB,SAAAO,GAAcnc,GAAYoc,GAAqB;AAC7D,EAAArZ,EAAU,MAAM;AACR,UAAAgZ,IAAW,SAAS,eAAe/b,CAAE;AAC3C,QAAI,CAAC+b;AACH;AAGF,QAAI,CAACK,GAAY;AACf,MAAAL,EAAS,MAAM,SAAS;AACxB;AAAA,IAAA;AAGF,UAAMM,IAAe,MAAM;AAEzB,MAAAN,EAAS,MAAM,SAAS,QACxBA,EAAS,MAAM,SAAS,GAAGA,EAAS,YAAY;AAAA,IAClD;AAEa,WAAAM,EAAA,GACJN,EAAA,iBAAiB,SAASM,CAAY,GACtCN,EAAA,iBAAiB,UAAUM,CAAY,GACzC,OAAA,iBAAiB,UAAUA,CAAY,GAEvC,MAAM;AACF,MAAAN,EAAA,oBAAoB,SAASM,CAAY,GACzCN,EAAA,oBAAoB,UAAUM,CAAY,GAC5C,OAAA,oBAAoB,UAAUA,CAAY;AAAA,IACnD;AAAA,EAAA,GACC,CAACrc,GAAIoc,CAAU,CAAC;AACrB;AC/BO,MAAME,KAAmB;AAAA,EAC9B,MAAM;AAAA,EACN,aACE;AAAA,EACF,SACE;AACJ,GAGalZ,KAAkB;AAAA,EAC7B,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AACR,GAQamZ,KAAqC;AAAA,EAChD,SAAS;AAAA,EACT,SAAS;AACX;ACRA,SAAwBC,GAAS;AAAA,EAC/B,SAAAjZ,IAAUgZ,GAAiB;AAAA,EAC3B,SAAA9Y;AAAA,EACA,iBAAAsH,IAAkB;AAAA,EAClB,cAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,kBAAAwR,IAAmB;AAAA,EACnB,YAAAL,IAAa;AAAA,EACb,gBAAAM,IAAiB;AAAA,EACjB,WAAAtc;AAAA,EACA,GAAG0D;AACL,GAAkB;AAChB,QAAM9D,IAAKW,EAAM;AACH,EAAAwb,GAAAnc,GAAIoc,KAAcrR,CAAe;AAG/C,MAAIK,IAAgB3H;AAChB,EAAAF,MAAY,aAAa,CAACE,MACZ2H,IAAA,OAElBA,IAAgBA,KAAiBmR,GAAiB;AAElD,MAAII,IAA2BF;AAC/B,GAAI1R,KAAoBxH,MAAY,eAAe,CAACkZ,OACvBE,IAAA;AAM7B,QAAMtR,IAAelK;AAAA,IAFnB;AAAA,IAIA,CAAC4J,KAAmBuR,GAAiB/Y,CAAO;AAAA,IAC5C,CAACwH,KAAmB3H,GAAgBgI,CAAa;AAAA,IACjD,CAACL,KAAmB;AAAA,IACpBA,KAAmB;AAAA,IACnB4R,KAA4B;AAAA,IAE5Bvc;AAAA,EACF;AAEA,2BACG,OAAI,EAAA,WAAWe,EAAK,gBAAgB4J,KAAmB,aAAa,GACnE,UAAA;AAAA,IAAA,gBAAA3J;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAG0C;AAAA,QACJ,IAAA9D;AAAA,QACA,iBAAe8D,EAAK;AAAA,QACpB,UAAUiH;AAAA,QACV,iBAAeA,KAAmBjH,EAAK,eAAe;AAAA,QACtD,OAAO;AAAA,UACL,QAAQsY,IAAa,SAAS;AAAA,QAChC;AAAA,QACA,WAAW/Q;AAAA,MAAA;AAAA,IACb;AAAA,IACCqR,IAAiB,KAAK,gBAAAtb,EAACua,MAAe,WAAW3b,GAAI,WAAW0c,GAAgB;AAAA,IAChF,CAAC3R,KAAoB,gBAAA3J,EAAAmJ,IAAA,EAAkB,WAAWvK,GAAI,MAAK,SAAQ,SAASgL,GAAc;AAAA,IAC1F,CAACD,KAAoB,gBAAA3J,EAAAmJ,IAAA,EAAkB,WAAWvK,GAAI,MAAK,WAAU,SAASiL,EAAgB,CAAA;AAAA,EAAA,GACjG;AAEJ;AC7EO,MAAM9H,KAAe;AAAA,EAC1B,IAAI;AAAA,IACF,WAAW;AAAA,IACX,OAAO;AAAA,IACP,WAAW;AAAA,EACb;AAAA,EACA,IAAI;AAAA,IACF,WAAW;AAAA,IACX,OAAO;AAAA,IACP,WAAW;AAAA,EACb;AAAA,EACA,IAAI;AAAA,IACF,WAAW;AAAA,IACX,OAAO;AAAA,IACP,WAAW;AAAA,EAAA;AAEf,GAQayZ,KAAgE;AAAA,EAC3E,SAAS;AAAA,IACP,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,SAAS;AAAA,IACP,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,aAAa;AAAA,IACX,WAAW;AAAA,IACX,SAAS;AAAA,EAAA;AAEb,GAQaC,KAAiC;AAAA,EAC5C,SAAS;AAAA,EACT,MAAM;AACR;AC1BA,SAAwBC,GAAO;AAAA,EAC7B,KAAArW;AAAA,EACA,IAAAzG;AAAA,EACA,MAAAwD,IAAOqZ,GAAe;AAAA,EACtB,SAAAtZ,IAAUsZ,GAAe;AAAA,EACzB,SAAArT;AAAA,EACA,iBAAAC;AAAA,EACA,UAAApJ,IAAW;AAAA,EACX,WAAAD;AAAA,EACA,gBAAA0U;AAAA,EACA,sBAAAiI;AAAA,EACA,GAAGrT;AACL,GAAgB;AACd,QAAMC,IAAchJ,EAAM,GACpBqc,IAAWxV,EAAQ,MAAMxH,KAAM,UAAU2J,CAAW,IAAI,CAAC3J,GAAI2J,CAAW,CAAC,GACzE,CAACG,GAAWC,CAAY,IAAI9H,EAASuH,CAAO;AAElD,EAAAzG,EAAU,MAAM;AACd,IAAAgH,EAAaP,CAAO;AAAA,EAAA,GACnB,CAACA,CAAO,CAAC;AAEZ,QAAMzI,IAAe,MAAM;AACzB,QAAI,CAACV,GAAU;AACb,YAAM4c,IAAa,CAACnT;AAEpB,MAAIN,MAAY,UAEdO,EAAakT,CAAU,GAEzBxT,KAAA,QAAAA,EAAkBwT;AAAA,IAAU;AAAA,EAEhC,GAEMjc,IAAgB,CAACC,MAA8C;AACnE,KAAIA,EAAE,QAAQ,OAAOA,EAAE,QAAQ,aAC7BA,EAAE,eAAe,GACJF,EAAA;AAAA,EAEjB,GAEMmc,IAAa/Z,GAAaK,CAAI,GAC9B2Z,IAAgBP,GAAcrZ,CAAO,GAErC6Z,IAAgBjc;AAAA;AAAA,IAEpB;AAAA,IACA;AAAA;AAAA,IAEA+b,EAAW;AAAA;AAAA,IAEXpT,KACIiT,KAAA,gBAAAA,EAAsB,YAAWI,EAAc,WAC/CJ,KAAA,gBAAAA,EAAsB,cAAaI,EAAc;AAAA;AAAA,IAErD9c,KAAY;AAAA,IACZ,CAACA,KAAY;AAAA,IACbD;AAAA,EACF,GAEMid,IAAelc;AAAA;AAAA,IAEnB;AAAA;AAAA,IAEA+b,EAAW;AAAA;AAAA,IAEXpT,KAAaoT,EAAW;AAAA,IACxBpI;AAAA,EACF;AAGE,SAAA,gBAAA5T;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAuF;AAAA,MACA,IAAIuW;AAAA,MACJ,MAAK;AAAA,MACL,MAAK;AAAA,MACL,UAAU;AAAA,MACV,gBAAclT;AAAA,MACd,iBAAezJ;AAAA,MACf,UAAAA;AAAA,MACA,SAASU;AAAA,MACT,WAAWC;AAAA,MACX,WAAWoc;AAAA,MACV,GAAG1T;AAAA,MAEJ,UAAA;AAAA,QAAC,gBAAAtI,EAAA,QAAA,EAAK,WAAWic,EAAc,CAAA;AAAA,0BAC9B,QAAK,EAAA,WAAU,WAAW,UAAAvT,IAAY,YAAY,WAAW,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAChE;AAEJ;AC3GO,MAAMwT,KAAmB,GACnBC,KAAiB,GACjBC,IAAa;AAMnB,SAASC,GAAqBC,GAA6B;AAyHhE,SAAO,EAAE,mBAxHiBtY;AAAA,IACxB,CAACuY,GAA4BC,MAAiD;AACtE,YAAAC,IAAaF,EAAc,sBAAsB,GACjDG,IAAcF,EAAe,sBAAsB,GACnDjK,IAAW;AAAA,QACf,OAAO,OAAO;AAAA,QACd,QAAQ,OAAO;AAAA,MACjB,GAEMoK,IAAgB,CAACC,GAAWC,GAAW9X,GAAe+X,MACnDF,IAAI,KAAKC,IAAI,KAAKD,IAAI7X,IAAQwN,EAAS,SAASsK,IAAIC,IAASvK,EAAS,QAIzEwK,IAAY;AAAA,QAChB,KAAK;AAAA,UACH,GAAGN,EAAW,OAAOA,EAAW,QAAQ,IAAIC,EAAY,QAAQ;AAAA,UAChE,GAAGD,EAAW,MAAMC,EAAY,SAASP;AAAA,UACzC,OAAO;AAAA,YACL,GAAGO,EAAY,QAAQ,IAAIN;AAAA,YAC3B,GAAGM,EAAY;AAAA,UAAA;AAAA,QAEnB;AAAA,QACA,QAAQ;AAAA,UACN,GAAGD,EAAW,OAAOA,EAAW,QAAQ,IAAIC,EAAY,QAAQ;AAAA,UAChE,GAAGD,EAAW,SAASN;AAAA,UACvB,OAAO;AAAA,YACL,GAAGO,EAAY,QAAQ,IAAIN;AAAA,YAC3B,GAAG;AAAA,UAAC;AAAA,QAER;AAAA,QACA,MAAM;AAAA,UACJ,GAAGK,EAAW,OAAOC,EAAY,QAAQP;AAAA,UACzC,GAAGM,EAAW,MAAMA,EAAW,SAAS,IAAIC,EAAY,SAAS;AAAA,UACjE,OAAO;AAAA,YACL,GAAGA,EAAY;AAAA,YACf,GAAGA,EAAY,SAAS,IAAIN;AAAA,UAAA;AAAA,QAEhC;AAAA,QACA,OAAO;AAAA,UACL,GAAGK,EAAW,QAAQN;AAAA,UACtB,GAAGM,EAAW,MAAMA,EAAW,SAAS,IAAIC,EAAY,SAAS;AAAA,UACjE,OAAO;AAAA,YACL,GAAG;AAAA,YACH,GAAGA,EAAY,SAAS,IAAIN;AAAA,UAAA;AAAA,QAC9B;AAAA,MAEJ;AAGA,UAAIY,IAAgBV,GAChBW,IAAeF,EAAUT,CAAS;AAGlC,UAAAK,EAAcM,EAAa,GAAGA,EAAa,GAAGP,EAAY,OAAOA,EAAY,MAAM,GAAG;AAExF,cAAMQ,IAAgE;AAAA,UACpE,KAAK;AAAA,UACL,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,OAAO;AAAA,QACT,GAEMC,IAAcJ,EAAUG,EAAkBZ,CAAS,CAAC;AACtD,YAAA,CAACK,EAAcQ,EAAY,GAAGA,EAAY,GAAGT,EAAY,OAAOA,EAAY,MAAM;AACpF,UAAAM,IAAgBE,EAAkBZ,CAAS,GAC5BW,IAAAE;AAAA,aACV;AAEL,gBAAMC,IAAmB,CAAC,OAAO,UAAU,QAAQ,OAAO,EAAyB;AAAA,YACjF,CAACC,MAAMA,MAAMf,KAAae,MAAMH,EAAkBZ,CAAS;AAAA,UAC7D;AAEA,qBAAWe,KAAKD,GAAiB;AACzB,kBAAA3W,IAAMsW,EAAUM,CAAC;AACnB,gBAAA,CAACV,EAAclW,EAAI,GAAGA,EAAI,GAAGiW,EAAY,OAAOA,EAAY,MAAM,GAAG;AACvD,cAAAM,IAAAK,GACDJ,IAAAxW;AACf;AAAA,YAAA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAIF,MAAAwW,EAAa,IAAI,KAAK;AAAA,QACpBf;AAAA,QACA,KAAK,IAAIe,EAAa,GAAG1K,EAAS,QAAQmK,EAAY,QAAQR,EAAgB;AAAA,MAChF,GACAe,EAAa,IAAI,KAAK;AAAA,QACpBf;AAAA,QACA,KAAK,IAAIe,EAAa,GAAG1K,EAAS,SAASmK,EAAY,SAASR,EAAgB;AAAA,MAClF;AAGA,YAAMoB,IAAe;AAAA,QACnB,GAAGb,EAAW,OAAOA,EAAW,QAAQ;AAAA,QACxC,GAAGA,EAAW,MAAMA,EAAW,SAAS;AAAA,MAC1C;AAEI,aAAAO,MAAkB,SAASA,MAAkB,WAClCC,EAAA,MAAM,IAAI,KAAK;AAAA,QAC1Bb;AAAA,QACA,KAAK,IAAIkB,EAAa,IAAIL,EAAa,IAAIb,GAAYM,EAAY,QAAQN,IAAa,CAAC;AAAA,MAC3F,IAEaa,EAAA,MAAM,IAAI,KAAK;AAAA,QAC1Bb;AAAA,QACA,KAAK,IAAIkB,EAAa,IAAIL,EAAa,IAAIb,GAAYM,EAAY,SAASN,IAAa,CAAC;AAAA,MAC5F,GAGK;AAAA,QACL,GAAGa;AAAA,QACH,WAAWD;AAAA,MACb;AAAA,IACF;AAAA,IACA,CAACV,CAAS;AAAA,EACZ,EAE2B;AAC7B;AAMgB,SAAAiB,GACdC,GACArS,GACAsS,GACA;AACM,QAAApJ,IAAa1Q,EAAoB,IAAI,GACrC+Z,IAAa/Z,EAAuB,IAAI,GAExCga,IAAiB3Z,EAAY,MAAM;AACvC,QAAI,CAACqQ,EAAW,WAAW,CAACqJ,EAAW,QAAS;AAEhD,UAAME,IAAcJ,EAAkBnJ,EAAW,SAASqJ,EAAW,OAAO;AAC5E,IAAAD,EAAYG,CAAW;AAAA,EAAA,GACtB,CAACJ,GAAmBC,CAAW,CAAC;AAGnC,SAAA9b,EAAU,MAAM;AACd,QAAI,CAACwJ,EAAc;AAEb,UAAA0S,IAAe,MAAMF,EAAe;AAEnC,kBAAA,iBAAiB,UAAUE,CAAY,GAEvC,MAAM;AACJ,aAAA,oBAAoB,UAAUA,CAAY;AAAA,IACnD;AAAA,EAAA,GACC,CAAC1S,GAAcwS,CAAc,CAAC,GAE1B;AAAA,IACL,YAAAtJ;AAAA,IACA,YAAAqJ;AAAA,IACA,gBAAAC;AAAA,EACF;AACF;AAOgB,SAAAG,GACd7e,GACA8e,GACA3S,GACA4S,GACAL,GACAM,GACAC,GACAC,GACAC,GACA;AACM,QAAAC,IAAa1a,EAAsB,IAAI,GAEvC2a,IAActa,EAAY,MAAM;AACpC,IAAI/E,MAEAof,EAAW,WACb,aAAaA,EAAW,OAAO,GAGtBA,EAAA,UAAU,OAAO,WAAW,MAAM;AAC3C,MAAAjT,EAAgB,EAAI,GAEpB,sBAAsB,MAAM;AACX,QAAAuS,EAAA,GACfK,EAAa,EAAI;AAAA,MAAA,CAClB;AAAA,OACAD,CAAK;AAAA,EAAA,GACP,CAAC9e,GAAU8e,GAAO3S,GAAiBuS,GAAgBK,CAAY,CAAC,GAE7DO,IAAcva;AAAA,IAClB,CAACwa,IAAY,OAAU;AAKrB,UAJIH,EAAW,WACb,aAAaA,EAAW,OAAO,GAG7BG,GAAW;AACb,QAAAR,EAAa,EAAK,GAClB,WAAW,MAAM5S,EAAgB,EAAK,GAAG,GAAG;AAC5C;AAAA,MAAA;AAIS,MAAAiT,EAAA,UAAU,OAAO,WAAW,MAAM;AAC3C,QAAAL,EAAa,EAAK,GAClB,WAAW,MAAM5S,EAAgB,EAAK,GAAG,GAAG;AAAA,SAC3C,GAAG;AAAA,IACR;AAAA,IACA,CAAC4S,GAAc5S,CAAe;AAAA,EAChC;AAGA,SAAAzJ,EAAU,MAAM;AACd,IAAI,CAACsc,KAAqB,CAACC,KAAqB,CAACC,KAAaC,KAEhDG,EAAA;AAAA,EACd,GACC,CAACN,GAAmBC,GAAmBC,GAAWC,GAAWG,CAAW,CAAC,GAG5E5c,EAAU,MACD,MAAM;AACX,IAAI0c,EAAW,WACb,aAAaA,EAAW,OAAO;AAAA,EAEnC,GACC,EAAE,GAEE;AAAA,IACL,aAAAC;AAAA,IACA,aAAAC;AAAA,IACA,YAAAF;AAAA,EACF;AACF;AChOO,SAASI,GAAQ;AAAA,EACtB,IAAA7f;AAAA,EACA,UAAAG;AAAA,EACA,SAAAsK;AAAA,EACA,WAAAiT,IAAY;AAAA,EACZ,UAAArd,IAAW;AAAA,EACX,OAAA8e,IAAQ;AAAA,EACR,WAAA/e;AACF,GAAiB;AACf,QAAM,CAACof,GAAWJ,CAAY,IAAInd,EAAS,EAAK,GAC1C,CAACsK,GAAcC,CAAe,IAAIvK,EAAS,EAAK,GAChD,CAAC6d,GAAUjB,CAAW,IAAI5c,EAAiC,IAAI,GAC/D,CAACod,GAAmBU,CAAoB,IAAI9d,EAAS,EAAK,GAC1D,CAACqd,GAAmBU,CAAoB,IAAI/d,EAAS,EAAK,GAC1D,CAACsd,GAAWU,CAAY,IAAIhe,EAAS,EAAK,GAE1C,EAAE,mBAAA2c,EAAA,IAAsBnB,GAAqBC,CAAS,GACtD,EAAE,YAAAjI,GAAY,YAAAqJ,GAAY,gBAAAC,EAAA,IAAmBJ,GAAmBC,GAAmBrS,GAAcsS,CAAW,GAC5G,EAAE,aAAAa,GAAa,aAAAC,GAAa,YAAAF,EAAe,IAAAP;AAAA,IAC/C7e;AAAA,IACA8e;AAAA,IACA3S;AAAA,IACA4S;AAAA,IACAL;AAAA,IACAM;AAAA,IACAC;AAAA,IACAC;AAAA,IACAC;AAAA,EACF,GAEMU,IAAUvf,EAAM,GAChBwf,IAAYngB,KAAMkgB;AAcxB,SAEK,gBAAAhf,EAAAmH,IAAA,EAAA,UAAA;AAAA,IAAA5F,EAAM,aAAatC,GAAU;AAAA,MAC5B,KAAK,CAACua,MAA6B;AACjC,QAAAjF,EAAW,UAAUiF;AAAA,MACvB;AAAA,MACA,cAAc,MAAM;AAClB,QAAAqF,EAAqB,EAAI,GACbL,EAAA;AAAA,MACd;AAAA,MACA,cAAc,MAAM;AAClB,QAAAK,EAAqB,EAAK;AAAA,MAC5B;AAAA,MACA,SAAS,MAAM;AACb,QAAAE,EAAa,EAAI,GACLP,EAAA;AAAA,MACd;AAAA,MACA,QAAQ,MAAM;AACZ,QAAAO,EAAa,EAAK,GAClBN,EAAY,EAAI;AAAA,MAClB;AAAA,MACA,WAAW,CAAC1e,MAA2B;AACjC,QAAAA,EAAE,QAAQ,YACZ0e,EAAY,EAAI;AAAA,MAEpB;AAAA,MACA,oBAAoBtf,IAAW,SAAY8f;AAAA,IAAA,CACjB;AAAA,IAC3B5T,KACC2B;AAAA,MACE,gBAAA9M;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAK0d;AAAA,UACL,IAAIqB;AAAA,UACJ,MAAK;AAAA,UACL,WAAWhf;AAAA,YACT;AAAA,YACAqe,IAAY,gBAAgB;AAAA,YAC5Bpf;AAAA,UACF;AAAA,UACA,OAAO0f,IAAW,EAAE,MAAMA,EAAS,GAAG,KAAKA,EAAS,EAAE,IAAI,EAAE,SAAS,EAAE;AAAA,UACvE,cAAc,MAAM;AAClB,YAAAE,EAAqB,EAAI,GACrBP,EAAW,WACb,aAAaA,EAAW,OAAO;AAAA,UAEnC;AAAA,UACA,cAAc,MAAM;AAClB,YAAAO,EAAqB,EAAK;AAAA,UAC5B;AAAA,UAEC,UAAAvV;AAAA,QAAA;AAAA,MAOH;AAAA,MACA,SAAS;AAAA,IAAA;AAAA,EACX,GACJ;AAEJ;"}