@exsto/ds 0.0.1-rc.4 → 0.0.1-rc.5
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.
- package/README.md +8 -27
- package/dist/ds/src/index.d.ts +2 -3
- package/dist/index.js +5042 -2
- package/dist/index.js.map +1 -0
- package/dist/styles.css +491 -273
- package/dist/theme.css +58 -1
- package/dist/ui/src/components/edyn/animated-number/animated-number.d.ts +30 -0
- package/dist/ui/src/components/edyn/animated-number/animated-number.test.d.ts +9 -0
- package/dist/ui/src/components/edyn/animated-number/index.d.ts +1 -0
- package/dist/ui/src/components/edyn/date-range-picker/date-range-picker.d.ts +20 -0
- package/dist/ui/src/components/edyn/date-range-picker/date-range-picker.test.d.ts +9 -0
- package/dist/ui/src/components/edyn/date-range-picker/index.d.ts +1 -0
- package/dist/ui/src/components/edyn/initials-avatar/index.d.ts +1 -0
- package/dist/ui/src/components/edyn/initials-avatar/initials-avatar.d.ts +53 -0
- package/dist/ui/src/components/edyn/initials-avatar/initials-avatar.test.d.ts +10 -0
- package/dist/ui/src/components/edyn/multi-select/index.d.ts +1 -0
- package/dist/ui/src/components/edyn/multi-select/multi-select.d.ts +88 -0
- package/dist/ui/src/components/edyn/multi-select/multi-select.test.d.ts +9 -0
- package/dist/ui/src/components/edyn/progress-line/index.d.ts +1 -0
- package/dist/ui/src/components/edyn/progress-line/progress-line.d.ts +23 -0
- package/dist/ui/src/components/edyn/progress-line/progress-line.test.d.ts +9 -0
- package/dist/ui/src/components/ui/attachment/attachment.d.ts +1 -1
- package/dist/ui/src/components/ui/button/button.behavior.test.d.ts +8 -0
- package/dist/ui/src/components/ui/dropdown-menu/dropdown-menu.d.ts +9 -10
- package/dist/ui/src/components/ui/input-group/input-group.d.ts +1 -1
- package/dist/ui/src/components/ui/item/item.d.ts +1 -1
- package/dist/ui/src/components/ui/progress/progress.behavior.test.d.ts +8 -0
- package/dist/ui/src/components/ui/progress/progress.d.ts +9 -1
- package/dist/ui/src/components/ui/scroll-area/scroll-area.behavior.test.d.ts +7 -6
- package/dist/ui/src/components/ui/scroll-area/scroll-area.d.ts +27 -8
- package/dist/ui/src/components/ui/table/table.behavior.test.d.ts +4 -5
- package/dist/ui/src/index.d.ts +5 -0
- package/dist/ui/src/lib/focus-ring.test.d.ts +8 -0
- package/dist/ui/src/lib/popup-list.d.ts +47 -0
- package/dist/ui/src/lib/popup-list.test.d.ts +10 -0
- package/package.json +4 -9
- package/dist/chunks/toggle-group-CTTjTe-K.js +0 -4371
- package/dist/chunks/toggle-group-CTTjTe-K.js.map +0 -1
- package/dist/dom/src/context.d.ts +0 -34
- package/dist/dom/src/define-element.d.ts +0 -11
- package/dist/dom/src/define-element.test.d.ts +0 -1
- package/dist/dom/src/field-control.d.ts +0 -5
- package/dist/dom/src/index.d.ts +0 -6
- package/dist/dom/src/mode.d.ts +0 -8
- package/dist/dom/src/native-slot.test.d.ts +0 -1
- package/dist/dom/src/styles.d.ts +0 -6
- package/dist/dom/src/theme-state.d.ts +0 -1
- package/dist/dom/src/types.d.ts +0 -65
- package/dist/ds/src/elements.d.ts +0 -12
- package/dist/elements/src/edx-accordion.d.ts +0 -14
- package/dist/elements/src/edx-accordion.test.d.ts +0 -1
- package/dist/elements/src/edx-alert.d.ts +0 -14
- package/dist/elements/src/edx-audio-player.d.ts +0 -11
- package/dist/elements/src/edx-avatar.d.ts +0 -10
- package/dist/elements/src/edx-badge.d.ts +0 -12
- package/dist/elements/src/edx-breadcrumb.d.ts +0 -11
- package/dist/elements/src/edx-button-group.d.ts +0 -7
- package/dist/elements/src/edx-button.d.ts +0 -20
- package/dist/elements/src/edx-calendar.d.ts +0 -21
- package/dist/elements/src/edx-card.d.ts +0 -8
- package/dist/elements/src/edx-checkbox.d.ts +0 -18
- package/dist/elements/src/edx-combobox.d.ts +0 -28
- package/dist/elements/src/edx-content-components.d.ts +0 -2
- package/dist/elements/src/edx-dialog.d.ts +0 -20
- package/dist/elements/src/edx-drawer.d.ts +0 -21
- package/dist/elements/src/edx-dropdown-menu.d.ts +0 -29
- package/dist/elements/src/edx-field.d.ts +0 -9
- package/dist/elements/src/edx-field.test.d.ts +0 -1
- package/dist/elements/src/edx-indicator.d.ts +0 -14
- package/dist/elements/src/edx-input-group.d.ts +0 -32
- package/dist/elements/src/edx-input-otp.d.ts +0 -19
- package/dist/elements/src/edx-input.d.ts +0 -31
- package/dist/elements/src/edx-interactive-components.d.ts +0 -2
- package/dist/elements/src/edx-label.d.ts +0 -6
- package/dist/elements/src/edx-pagination.d.ts +0 -8
- package/dist/elements/src/edx-popover.d.ts +0 -24
- package/dist/elements/src/edx-progress.d.ts +0 -10
- package/dist/elements/src/edx-radio-group.d.ts +0 -22
- package/dist/elements/src/edx-radio-group.test.d.ts +0 -1
- package/dist/elements/src/edx-scroll-area.d.ts +0 -20
- package/dist/elements/src/edx-scroll-area.test.d.ts +0 -1
- package/dist/elements/src/edx-select.d.ts +0 -34
- package/dist/elements/src/edx-separator.d.ts +0 -10
- package/dist/elements/src/edx-skeleton.d.ts +0 -8
- package/dist/elements/src/edx-slider.d.ts +0 -17
- package/dist/elements/src/edx-slider.test.d.ts +0 -1
- package/dist/elements/src/edx-switch.d.ts +0 -18
- package/dist/elements/src/edx-table.d.ts +0 -13
- package/dist/elements/src/edx-table.test.d.ts +0 -1
- package/dist/elements/src/edx-tabs.d.ts +0 -15
- package/dist/elements/src/edx-tabs.test.d.ts +0 -1
- package/dist/elements/src/edx-textarea.d.ts +0 -25
- package/dist/elements/src/edx-toggle-group.d.ts +0 -27
- package/dist/elements/src/edx-toggle-group.test.d.ts +0 -1
- package/dist/elements/src/edx-toggle.d.ts +0 -18
- package/dist/elements/src/edx-tooltip.d.ts +0 -28
- package/dist/elements/src/edx-video-player.d.ts +0 -16
- package/dist/elements/src/field-control-bridge.d.ts +0 -7
- package/dist/elements/src/index.d.ts +0 -14
- package/dist/elements/src/projected-content.test.d.ts +0 -1
- package/dist/elements/src/registry.d.ts +0 -39
- package/dist/elements/src/registry.test.d.ts +0 -1
- package/dist/elements.js +0 -4026
- package/dist/elements.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../ui/src/components/edyn/animated-number/animated-number.tsx","../../ui/src/lib/utils.ts","../../ui/src/components/ui/button/button.tsx","../../ui/src/components/ui/slider/slider.tsx","../../ui/src/hooks/use-media-player.ts","../../ui/src/components/edyn/audio-player/audio-player.tsx","../../ui/src/components/ui/calendar/calendar.tsx","../../ui/src/components/ui/popover/popover.tsx","../../ui/src/hooks/use-mobile.ts","../../ui/src/components/edyn/date-range-picker/date-range-picker.tsx","../../ui/src/components/ui/avatar/avatar.tsx","../../ui/src/components/edyn/initials-avatar/initials-avatar.tsx","../../ui/src/hooks/use-merged-refs.ts","../../ui/src/components/ui/scroll-area/scroll-area.tsx","../../ui/src/lib/popup-list.ts","../../ui/src/components/edyn/multi-select/multi-select.tsx","../../ui/src/components/edyn/progress-line/progress-line.tsx","../../ui/src/components/edyn/video-player/video-player.tsx","../../ui/src/components/ui/accordion/accordion.tsx","../../ui/src/components/ui/alert/alert.tsx","../../ui/src/components/ui/alert-dialog/alert-dialog.tsx","../../ui/src/components/ui/aspect-ratio/aspect-ratio.tsx","../../ui/src/components/ui/attachment/attachment.tsx","../../ui/src/components/ui/badge/badge.tsx","../../ui/src/components/ui/breadcrumb/breadcrumb.tsx","../../ui/src/components/ui/bubble/bubble.tsx","../../ui/src/components/ui/button-group/button-group.tsx","../../ui/src/components/ui/card/card.tsx","../../ui/src/components/ui/carousel/carousel.tsx","../../ui/src/components/ui/chart/chart.tsx","../../ui/src/components/ui/checkbox/checkbox.tsx","../../ui/src/components/ui/collapsible/collapsible.tsx","../../ui/src/components/ui/combobox/combobox.tsx","../../ui/src/components/ui/dialog/dialog.tsx","../../ui/src/components/ui/input/input.tsx","../../ui/src/components/ui/textarea/textarea.tsx","../../ui/src/components/ui/input-group/input-group.tsx","../../ui/src/components/ui/command/command.tsx","../../ui/src/components/ui/context-menu/context-menu.tsx","../../ui/src/components/ui/drawer/drawer.tsx","../../ui/src/components/ui/dropdown-menu/dropdown-menu.tsx","../../ui/src/components/ui/empty/empty.tsx","../../ui/src/components/ui/field/field.tsx","../../ui/src/components/ui/hover-card/hover-card.tsx","../../ui/src/components/ui/indicator/indicator.tsx","../../ui/src/components/ui/input-otp/input-otp.tsx","../../ui/src/components/ui/separator/separator.tsx","../../ui/src/components/ui/item/item.tsx","../../ui/src/components/ui/kbd/kbd.tsx","../../ui/src/components/ui/label/label.tsx","../../ui/src/components/ui/marker/marker.tsx","../../ui/src/components/ui/menubar/menubar.tsx","../../ui/src/components/ui/message/message.tsx","../../ui/src/components/ui/message-scroller/message-scroller.tsx","../../ui/src/components/ui/native-select/native-select.tsx","../../ui/src/components/ui/navigation-menu/navigation-menu.tsx","../../ui/src/components/ui/pagination/pagination.tsx","../../ui/src/components/ui/progress/progress.tsx","../../ui/src/components/ui/questionnaire/questionnaire.tsx","../../ui/src/components/ui/radio-group/radio-group.tsx","../../ui/src/components/ui/resizable/resizable.tsx","../../ui/src/components/ui/select/select.tsx","../../ui/src/components/ui/sheet/sheet.tsx","../../ui/src/components/ui/skeleton/skeleton.tsx","../../ui/src/components/ui/tooltip/tooltip.tsx","../../ui/src/components/ui/sidebar/sidebar.tsx","../../ui/src/components/ui/spinner/spinner.tsx","../../ui/src/components/ui/switch/switch.tsx","../../ui/src/components/ui/table/table.tsx","../../ui/src/components/ui/tabs/tabs.tsx","../../ui/src/components/ui/toast/toast.tsx","../../ui/src/components/ui/toggle/toggle.tsx","../../ui/src/components/ui/toggle-group/toggle-group.tsx"],"sourcesContent":["import { type RefObject, useEffect, useRef, useState } from 'react';\n\n// Numbers that move instead of jumping when a tab or a filter changes them: from the\n// value shown to the new one over 800ms, easing in and out; the first time, from 0\n// once it scrolls into view. Interrupted by another change, it carries on from where\n// it is, never back. With reduced motion, or when the value has not changed (a refetch\n// with the same answer), nothing moves.\n\nconst DURATION = 800;\n\nconst easeInOutCubic = (t: number): number => (t < 0.5 ? 4 * t ** 3 : 1 - (-2 * t + 2) ** 3 / 2);\n\nconst reducedMotion = (): boolean => window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\nconst NUMBER = new Intl.NumberFormat('en-GB');\n\n/** Thousands separated, rounded to a whole number: the default way a count reads. */\nexport const formatCount = (value: number): string => NUMBER.format(Math.round(value) || 0);\n\n// Whether the element has been on screen yet; once it has, it stays counted as seen.\nconst useSeen = (element: RefObject<Element | null>): boolean => {\n const [seen, setSeen] = useState(() => typeof IntersectionObserver === 'undefined');\n useEffect(() => {\n const target = element.current;\n if (seen || target === null) {\n return;\n }\n const observer = new IntersectionObserver((entries) => {\n if (entries.some((entry) => entry.isIntersecting)) {\n setSeen(true);\n observer.disconnect();\n }\n });\n observer.observe(target);\n return () => observer.disconnect();\n }, [element, seen]);\n return seen;\n};\n\n/**\n * The values to show for `targets` this frame, all on one clock and one curve, so a\n * count and its bar move together. They start from 0 and move once `element` has\n * been on screen.\n */\nexport const useAnimatedValues = (targets: number[], element: RefObject<Element | null>): number[] => {\n const seen = useSeen(element);\n const [shown, setShown] = useState<number[]>(() => targets.map(() => 0));\n const refCurrent = useRef(shown);\n const key = targets.join(',');\n useEffect(() => {\n if (!seen) {\n return;\n }\n const goal = key.split(',').map(Number);\n const from = goal.map((_, index) => refCurrent.current[index] ?? 0);\n if (from.every((value, index) => value === goal[index])) {\n return;\n }\n if (reducedMotion()) {\n refCurrent.current = goal;\n setShown(goal);\n return;\n }\n const start = performance.now();\n let frame = 0;\n const tick = (now: number): void => {\n const progress = Math.min(1, (now - start) / DURATION);\n const eased = easeInOutCubic(progress);\n // Exactly the goal at the end, never a float a hair beside it.\n const next = progress === 1 ? goal : goal.map((value, index) => (from[index] ?? 0) + (value - (from[index] ?? 0)) * eased);\n refCurrent.current = next;\n setShown(next);\n if (progress < 1) {\n frame = requestAnimationFrame(tick);\n }\n };\n frame = requestAnimationFrame(tick);\n return () => cancelAnimationFrame(frame);\n }, [key, seen]);\n return shown;\n};\n\nexport interface IAnimatedNumberProps {\n value: number;\n /** What it shows while it moves and once there (formatCount by default; a percentage formatter for shares). */\n format?: (value: number) => string;\n className?: string;\n}\n\n/**\n * A number that moves to its new value. Its width holds the widest of where it starts\n * and where it lands, in tabular figures, so nothing beside it moves while the digits\n * change. Assistive technology reads only the final value.\n */\nexport const AnimatedNumber = ({ value, format = formatCount, className }: IAnimatedNumberProps) => {\n const refElement = useRef<HTMLSpanElement>(null);\n const [shown = 0] = useAnimatedValues([value], refElement);\n return <NumberText element={refElement} shown={shown} value={value} format={format} className={className} />;\n};\n\nexport interface INumberTextProps {\n element?: RefObject<HTMLSpanElement | null>;\n shown: number;\n value: number;\n format?: (value: number) => string;\n className?: string;\n}\n\n/** The text of a moving number: what it shows now, held at its widest, with the final value for assistive technology. */\nexport const NumberText = ({ element, shown, value, format = formatCount, className }: INumberTextProps) => {\n const now = format(shown);\n const final = format(value);\n // The widest of the two, laid invisibly under the number: it holds the width of the\n // real figures (tabular digits are not exactly 1ch), so the number grows or shrinks\n // only once it has landed.\n const widest = now.length > final.length ? now : final;\n return (\n <span data-slot=\"animated-number\" ref={element} className={className}>\n <span aria-hidden=\"true\" className=\"inline-grid tabular-nums\">\n <span data-ghost={widest} className=\"invisible col-start-1 row-start-1 ghost-text\" />\n <span data-slot=\"animated-number-value\" className=\"col-start-1 row-start-1\">\n {now}\n </span>\n </span>\n <span className=\"sr-only\">{final}</span>\n </span>\n );\n};\n","import type { ClassValue } from 'clsx';\nimport { clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport const cn = (...inputs: ClassValue[]): string => twMerge(clsx(inputs));\n\n/** A CSS length as a component prop: a number is px, a string is used verbatim. */\nexport type TCssLength = number | string;\n\n/**\n * Normalise a size prop to a CSS length.\n *\n * Bare numbers become px, which is also what a bare numeric *string* means: an\n * element attribute arrives as a string, so `width=\"480\"` and `width={480}` have\n * to land on the same value. Anything with a unit, a percentage or a keyword\n * passes through untouched.\n */\nexport const cssLength = (value: TCssLength | null | undefined): string | undefined => {\n if (value == null || value === '') {\n return undefined;\n }\n\n if (typeof value === 'number') {\n return Number.isFinite(value) ? `${value}px` : undefined;\n }\n\n return /^-?\\d*\\.?\\d+$/.test(value.trim()) ? `${value.trim()}px` : value;\n};\n","import { Button as ButtonPrimitive } from '@base-ui/react/button';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { isValidElement } from 'react';\n\nexport const buttonVariants = cva(\n \"group/button inline-flex shrink-0 cursor-pointer items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all motion-reduce:transition-none motion-reduce:transform-none outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/80',\n outline:\n 'border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50',\n secondary:\n 'bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground',\n ghost: 'hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50',\n destructive:\n 'bg-destructive/10 text-destructive hover:bg-destructive/15 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/15 dark:hover:bg-destructive/20 dark:focus-visible:ring-destructive/40',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2',\n xs: \"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5\",\n lg: 'h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2',\n icon: 'size-8',\n 'icon-xs': \"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3\",\n 'icon-sm': 'size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg',\n 'icon-lg': 'size-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\n/**\n * Whether this Button is rendering a link rather than a button, so it can keep\n * link semantics. Covers `render={<a href=\"...\" />}` and a routing component\n * that takes an `href` (Next's Link). A component with a different prop for its\n * destination (react-router's `to`) cannot be recognised from here: give those\n * `nativeButton={false} role={undefined}` directly.\n */\nconst rendersALink = (render: ButtonPrimitive.Props['render']): boolean =>\n isValidElement(render) && (render.type === 'a' || typeof (render.props as { href?: unknown }).href === 'string');\n\n/**\n * A link that looks like a button is still a link, and has to be announced as\n * one: it opens in a new tab, it has an address, Enter follows it and Space\n * scrolls the page.\n *\n * Base UI needs telling, in two steps. Rendering an anchor while `nativeButton`\n * is true (its default) warns in development and puts `type=\"button\"` on the\n * anchor; following the warning and passing `nativeButton={false}` then adds\n * `role=\"button\"`, which is what takes the link semantics away. So this does\n * both: non-native, with the role and the tabindex Base UI would add cleared\n * again. An explicit prop from the caller still wins over either.\n */\nconst LINK_PROPS = { nativeButton: false, role: undefined, tabIndex: undefined } as const;\n\nexport const Button = ({\n className,\n variant = 'default',\n size = 'default',\n ...props\n}: ButtonPrimitive.Props & VariantProps<typeof buttonVariants>) => {\n return (\n <ButtonPrimitive\n data-slot=\"button\"\n {...(rendersALink(props.render) ? LINK_PROPS : {})}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n};\n","import { Slider as SliderPrimitive } from '@base-ui/react/slider';\n\nimport { cn } from '@edyn/ui/lib/utils';\n\nexport type TSliderValue = number | readonly number[];\n\nexport interface ISliderProps<TValue extends TSliderValue = number> {\n value?: TValue;\n defaultValue?: TValue;\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n onValueChange?: (value: TValue extends number ? number : TValue, eventDetails: SliderPrimitive.Root.ChangeEventDetails) => void;\n onValueCommitted?: (value: TValue extends number ? number : TValue, eventDetails: SliderPrimitive.Root.CommitEventDetails) => void;\n className?: string;\n name?: string;\n minStepsBetweenValues?: number;\n 'aria-label'?: string;\n}\n\nexport const Slider = <TValue extends TSliderValue = number>({\n className,\n value,\n defaultValue,\n min,\n max,\n step,\n disabled,\n onValueChange,\n onValueCommitted,\n name,\n minStepsBetweenValues,\n 'aria-label': ariaLabel,\n ...props\n}: ISliderProps<TValue>) => {\n const thumbValues = Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [value ?? defaultValue ?? min ?? 0];\n const thumbs = Array.from({ length: thumbValues.length }, (_, index) => ({ id: `thumb-${index}`, index }));\n\n return (\n <SliderPrimitive.Root\n data-slot=\"slider\"\n className={cn('relative flex w-full touch-none items-center', className)}\n value={value as never}\n defaultValue={defaultValue as never}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n onValueChange={onValueChange as never}\n onValueCommitted={onValueCommitted as never}\n name={name}\n minStepsBetweenValues={minStepsBetweenValues}\n thumbAlignment=\"edge\"\n aria-label={ariaLabel}\n {...(props as object)}\n >\n <SliderPrimitive.Control\n data-slot=\"slider-control\"\n className=\"relative flex w-full cursor-pointer touch-none items-center py-3 data-disabled:cursor-not-allowed data-disabled:opacity-50\"\n >\n <SliderPrimitive.Track data-slot=\"slider-track\" className=\"relative h-1.5 w-full grow overflow-hidden rounded-full bg-muted\">\n <SliderPrimitive.Indicator data-slot=\"slider-indicator\" className=\"absolute h-full bg-primary\" />\n </SliderPrimitive.Track>\n {thumbs.map((thumb) => (\n <SliderPrimitive.Thumb\n key={thumb.id}\n index={thumb.index}\n getAriaLabel={ariaLabel ? () => (thumbValues.length > 1 ? `${ariaLabel} ${thumb.index + 1}` : ariaLabel) : undefined}\n data-slot=\"slider-thumb\"\n className=\"relative block size-4 shrink-0 rounded-full border border-primary/50 bg-background shadow-sm outline-none transition-colors after:absolute after:-inset-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 data-disabled:pointer-events-none data-disabled:opacity-50\"\n />\n ))}\n </SliderPrimitive.Control>\n </SliderPrimitive.Root>\n );\n};\n","import * as React from 'react';\n\nexport interface IMediaPlayerState {\n playing: boolean;\n currentTime: number;\n duration: number;\n volume: number;\n muted: boolean;\n}\n\nexport interface IUseMediaPlayerOptions {\n onPlay?: () => void;\n onPause?: () => void;\n onEnded?: () => void;\n onTimeUpdate?: (currentTime: number, duration: number) => void;\n}\n\nexport interface IUseMediaPlayerResult<TElement extends HTMLMediaElement> extends IMediaPlayerState {\n refMedia: React.RefObject<TElement | null>;\n toggle: () => void;\n seek: (seconds: number) => void;\n changeVolume: (volume: number) => void;\n toggleMute: () => void;\n}\n\n/** `0:00` for anything that is not a finite, non-negative number, so a loading or errored source still renders. */\nexport const formatMediaTime = (seconds: number): string => {\n if (!Number.isFinite(seconds) || seconds < 0) {\n return '0:00';\n }\n const whole = Math.floor(seconds);\n const hours = Math.floor(whole / 3600);\n const minutes = Math.floor((whole % 3600) / 60);\n const rest = whole % 60;\n const padded = `${String(rest).padStart(2, '0')}`;\n if (hours > 0) {\n return `${hours}:${String(minutes).padStart(2, '0')}:${padded}`;\n }\n return `${minutes}:${padded}`;\n};\n\n/**\n * Shared playback engine for the Audio and Video players. Both wrap the same\n * HTMLMediaElement API, so the state machine lives here once and each component\n * owns only its own layout and controls.\n */\nexport const useMediaPlayer = <TElement extends HTMLMediaElement>(options: IUseMediaPlayerOptions = {}): IUseMediaPlayerResult<TElement> => {\n const { onPlay, onPause, onEnded, onTimeUpdate } = options;\n const refMedia = React.useRef<TElement | null>(null);\n const [state, setState] = React.useState<IMediaPlayerState>({\n playing: false,\n currentTime: 0,\n duration: 0,\n volume: 1,\n muted: false,\n });\n\n React.useEffect(() => {\n const media = refMedia.current;\n if (!media) {\n return;\n }\n\n const syncMeta = () => {\n setState((previous) => ({\n ...previous,\n duration: Number.isFinite(media.duration) ? media.duration : 0,\n volume: media.volume,\n muted: media.muted,\n }));\n };\n const handlePlay = () => {\n setState((previous) => ({ ...previous, playing: true }));\n onPlay?.();\n };\n const handlePause = () => {\n setState((previous) => ({ ...previous, playing: false }));\n onPause?.();\n };\n const handleEnded = () => {\n setState((previous) => ({ ...previous, playing: false }));\n onEnded?.();\n };\n const handleTimeUpdate = () => {\n setState((previous) => ({ ...previous, currentTime: media.currentTime }));\n onTimeUpdate?.(media.currentTime, Number.isFinite(media.duration) ? media.duration : 0);\n };\n const handleVolumeChange = () => {\n setState((previous) => ({ ...previous, volume: media.volume, muted: media.muted }));\n };\n\n syncMeta();\n media.addEventListener('loadedmetadata', syncMeta);\n media.addEventListener('durationchange', syncMeta);\n media.addEventListener('play', handlePlay);\n media.addEventListener('pause', handlePause);\n media.addEventListener('ended', handleEnded);\n media.addEventListener('timeupdate', handleTimeUpdate);\n media.addEventListener('volumechange', handleVolumeChange);\n\n return () => {\n media.removeEventListener('loadedmetadata', syncMeta);\n media.removeEventListener('durationchange', syncMeta);\n media.removeEventListener('play', handlePlay);\n media.removeEventListener('pause', handlePause);\n media.removeEventListener('ended', handleEnded);\n media.removeEventListener('timeupdate', handleTimeUpdate);\n media.removeEventListener('volumechange', handleVolumeChange);\n };\n }, [onPlay, onPause, onEnded, onTimeUpdate]);\n\n const toggle = React.useCallback(() => {\n const media = refMedia.current;\n if (!media) {\n return;\n }\n if (media.paused) {\n // Autoplay policies reject this when the gesture is not trusted; the pause\n // state is already correct, so swallowing keeps the UI truthful.\n void media.play().catch(() => undefined);\n return;\n }\n media.pause();\n }, []);\n\n const seek = React.useCallback((seconds: number) => {\n const media = refMedia.current;\n if (!media || !Number.isFinite(seconds)) {\n return;\n }\n media.currentTime = seconds;\n setState((previous) => ({ ...previous, currentTime: seconds }));\n }, []);\n\n const changeVolume = React.useCallback((volume: number) => {\n const media = refMedia.current;\n if (!media || !Number.isFinite(volume)) {\n return;\n }\n const next = Math.min(1, Math.max(0, volume));\n media.volume = next;\n media.muted = next === 0;\n }, []);\n\n const toggleMute = React.useCallback(() => {\n const media = refMedia.current;\n if (!media) {\n return;\n }\n media.muted = !media.muted;\n }, []);\n\n return { ...state, refMedia, toggle, seek, changeVolume, toggleMute };\n};\n","import { Button } from '@edyn/ui/components/ui/button';\nimport { Slider } from '@edyn/ui/components/ui/slider';\nimport { formatMediaTime, useMediaPlayer } from '@edyn/ui/hooks/use-media-player';\nimport type { TCssLength } from '@edyn/ui/lib/utils';\nimport { cn, cssLength } from '@edyn/ui/lib/utils';\nimport { IconPlayerPauseFilled, IconPlayerPlayFilled, IconVolume, IconVolumeOff } from '@tabler/icons-react';\n\nexport interface IAudioPlayerProps {\n /** Audio source URL. */\n src?: string;\n /** Start muted. The volume control still works from here. */\n muted?: boolean;\n /** Loop playback when the track ends. */\n loop?: boolean;\n /** Disable every control without hiding the player. */\n disabled?: boolean;\n /**\n * Bar width. A number is px, a string is any CSS length (`'100%'`, `'34rem'`).\n * Omitted, the bar fills the width it is given. The height is fixed at 48px by\n * the design: the row has to line up with the other form-height controls.\n */\n width?: TCssLength;\n className?: string;\n 'aria-label'?: string;\n onPlay?: () => void;\n onPause?: () => void;\n onEnded?: () => void;\n onTimeUpdate?: (currentTime: number, duration: number) => void;\n}\n\n/**\n * Compact inline media control for audio content: play/pause, elapsed and total\n * time, a seekable timeline, and volume. Four elements in one rounded row, per\n * the design-system anatomy.\n */\nexport const AudioPlayer = ({\n src,\n muted = false,\n loop = false,\n disabled = false,\n width,\n className,\n 'aria-label': ariaLabel = 'Audio player',\n onPlay,\n onPause,\n onEnded,\n onTimeUpdate,\n}: IAudioPlayerProps) => {\n const {\n refMedia,\n playing,\n currentTime,\n duration,\n muted: isMuted,\n toggle,\n seek,\n toggleMute,\n } = useMediaPlayer<HTMLAudioElement>({\n onPlay,\n onPause,\n onEnded,\n onTimeUpdate,\n });\n\n const PlaybackIcon = playing ? IconPlayerPauseFilled : IconPlayerPlayFilled;\n const VolumeIcon = isMuted ? IconVolumeOff : IconVolume;\n\n return (\n // biome-ignore lint/a11y/useSemanticElements: <fieldset> carries form semantics and UA styling this player does not want; role=\"group\" is the correct ARIA for a labelled set of related controls.\n <div\n data-slot=\"audio-player\"\n data-playing={playing || undefined}\n role=\"group\"\n aria-label={ariaLabel}\n style={{ width: cssLength(width) }}\n className={cn('flex h-12 w-full items-center gap-2 rounded-lg bg-muted px-3 py-1.5', className)}\n >\n <Button type=\"button\" variant=\"ghost\" size=\"icon\" disabled={disabled} aria-label={playing ? 'Pause' : 'Play'} onClick={toggle}>\n <PlaybackIcon />\n </Button>\n\n {/* `text-foreground/70` not `text-muted-foreground`: the latter on `bg-muted` is only 4.34:1, below AA. */}\n <span data-slot=\"audio-player-time\" className=\"shrink-0 text-xs tabular-nums text-foreground/70\">\n {formatMediaTime(currentTime)} / {formatMediaTime(duration)}\n </span>\n\n {/* Scope the form-sized Slider down to a timeline: thinner track, smaller thumb, and a track tint that\n reads against this bar (the Slider's default `bg-muted` track is invisible on a `bg-muted` container). */}\n <Slider\n className=\"flex-1 [&_[data-slot=slider-control]]:py-1.5 [&_[data-slot=slider-thumb]]:size-3 [&_[data-slot=slider-track]]:h-1 [&_[data-slot=slider-track]]:bg-foreground/15\"\n value={Math.min(currentTime, duration || 0)}\n min={0}\n max={duration || 0}\n step={1}\n disabled={disabled || duration === 0}\n aria-label=\"Seek\"\n onValueChange={(next) => {\n seek(next);\n }}\n />\n\n <Button type=\"button\" variant=\"ghost\" size=\"icon\" disabled={disabled} aria-label={isMuted ? 'Unmute' : 'Mute'} onClick={toggleMute}>\n <VolumeIcon />\n </Button>\n\n {/* Visually hidden: the row above is the entire control surface. */}\n {/* No class needed: the UA stylesheet already hides `audio:not([controls])`, and that rule is `!important` so author CSS cannot change it either way. */}\n <audio ref={refMedia} src={src} muted={muted} loop={loop} preload=\"metadata\" />\n </div>\n );\n};\n","import { cn } from '@edyn/ui/lib/utils';\nimport { IconChevronDown, IconChevronLeft, IconChevronRight } from '@tabler/icons-react';\nimport * as React from 'react';\nimport { type DayButton, DayPicker, getDefaultClassNames, type Locale } from 'react-day-picker';\nimport { Button, buttonVariants } from '../button';\n\nexport const Calendar = ({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = 'label',\n buttonVariant = 'ghost',\n locale,\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>['variant'];\n}) => {\n const defaultClassNames = getDefaultClassNames();\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n 'group/calendar bg-background p-2 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent',\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className,\n )}\n captionLayout={captionLayout}\n locale={locale}\n formatters={{\n formatMonthDropdown: (date) => date.toLocaleString(locale?.code, { month: 'short' }),\n ...formatters,\n }}\n classNames={{\n root: cn('w-fit', defaultClassNames.root),\n months: cn('relative flex flex-col gap-4 md:flex-row', defaultClassNames.months),\n month: cn('flex w-full flex-col gap-4', defaultClassNames.month),\n nav: cn('absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1', defaultClassNames.nav),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n 'size-(--cell-size) p-0 select-none aria-disabled:opacity-50',\n defaultClassNames.button_previous,\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n 'size-(--cell-size) p-0 select-none aria-disabled:opacity-50',\n defaultClassNames.button_next,\n ),\n month_caption: cn('flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)', defaultClassNames.month_caption),\n dropdowns: cn('flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium', defaultClassNames.dropdowns),\n dropdown_root: cn('relative rounded-(--cell-radius)', defaultClassNames.dropdown_root),\n dropdown: cn('absolute inset-0 bg-popover opacity-0', defaultClassNames.dropdown),\n caption_label: cn(\n 'font-medium select-none',\n captionLayout === 'label'\n ? 'text-sm'\n : 'flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground',\n defaultClassNames.caption_label,\n ),\n month_grid: cn('w-full border-collapse', defaultClassNames.month_grid),\n weekdays: cn('flex', defaultClassNames.weekdays),\n weekday: cn('flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-muted-foreground select-none', defaultClassNames.weekday),\n week: cn('mt-2 flex w-full', defaultClassNames.week),\n week_number_header: cn('w-(--cell-size) select-none', defaultClassNames.week_number_header),\n week_number: cn('text-[0.8rem] text-muted-foreground select-none', defaultClassNames.week_number),\n day: cn(\n 'group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)',\n props.showWeekNumber\n ? '[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)'\n : '[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)',\n defaultClassNames.day,\n ),\n range_start: cn(\n 'relative isolate z-0 rounded-l-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:right-0 after:w-4 after:bg-muted',\n defaultClassNames.range_start,\n ),\n range_middle: cn('rounded-none', defaultClassNames.range_middle),\n range_end: cn(\n 'relative isolate z-0 rounded-r-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:left-0 after:w-4 after:bg-muted',\n defaultClassNames.range_end,\n ),\n today: cn('rounded-(--cell-radius) bg-muted text-foreground data-[selected=true]:rounded-none', defaultClassNames.today),\n outside: cn('text-muted-foreground aria-selected:text-muted-foreground', defaultClassNames.outside),\n disabled: cn('text-muted-foreground opacity-50', defaultClassNames.disabled),\n hidden: cn('invisible', defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return <div data-slot=\"calendar\" ref={rootRef} className={cn(className)} {...props} />;\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === 'left') {\n return <IconChevronLeft className={cn('size-4', className)} {...props} />;\n }\n\n if (orientation === 'right') {\n return <IconChevronRight className={cn('size-4', className)} {...props} />;\n }\n\n return <IconChevronDown className={cn('size-4', className)} {...props} />;\n },\n DayButton: ({ ...props }) => <CalendarDayButton locale={locale} {...props} />,\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"flex size-(--cell-size) items-center justify-center text-center\">{children}</div>\n </td>\n );\n },\n ...components,\n }}\n {...props}\n />\n );\n};\n\nexport const CalendarDayButton = ({\n className,\n day,\n modifiers,\n locale,\n ...props\n}: React.ComponentProps<typeof DayButton> & { locale?: Partial<Locale> }) => {\n const defaultClassNames = getDefaultClassNames();\n\n const refButton = React.useRef<HTMLButtonElement>(null);\n React.useEffect(() => {\n if (modifiers.focused) {\n refButton.current?.focus();\n }\n }, [modifiers.focused]);\n\n return (\n <Button\n ref={refButton}\n variant=\"ghost\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString(locale?.code)}\n data-selected-single={modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle}\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n 'relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 border-0 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50 data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-r-(--cell-radius) data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-muted data-[range-middle=true]:text-foreground data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-l-(--cell-radius) data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground dark:hover:text-foreground [&>span]:text-xs [&>span]:opacity-70',\n defaultClassNames.day,\n className,\n )}\n {...props}\n />\n );\n};\n","import { Popover as PopoverPrimitive } from '@base-ui/react/popover';\nimport { cn } from '@edyn/ui/lib/utils';\nimport type * as React from 'react';\n\nexport const Popover = ({ ...props }: PopoverPrimitive.Root.Props) => {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n};\n\nexport const PopoverTrigger = ({ ...props }: PopoverPrimitive.Trigger.Props) => {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n};\n\nexport const PopoverContent = ({\n className,\n align = 'center',\n alignOffset = 0,\n side = 'bottom',\n sideOffset = 4,\n ...props\n}: PopoverPrimitive.Popup.Props & Pick<PopoverPrimitive.Positioner.Props, 'align' | 'alignOffset' | 'side' | 'sideOffset'>) => {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Positioner align={align} alignOffset={alignOffset} side={side} sideOffset={sideOffset} className=\"isolate z-50\">\n <PopoverPrimitive.Popup\n data-slot=\"popover-content\"\n className={cn(\n 'z-50 flex w-72 origin-(--transform-origin) flex-col gap-2.5 rounded-lg bg-popover p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 motion-reduce:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95',\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Positioner>\n </PopoverPrimitive.Portal>\n );\n};\n\nexport const PopoverHeader = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"popover-header\" className={cn('flex flex-col gap-0.5 text-sm', className)} {...props} />;\n};\n\nexport const PopoverTitle = ({ className, ...props }: PopoverPrimitive.Title.Props) => {\n return <PopoverPrimitive.Title data-slot=\"popover-title\" className={cn('font-medium', className)} {...props} />;\n};\n\nexport const PopoverDescription = ({ className, ...props }: PopoverPrimitive.Description.Props) => {\n return <PopoverPrimitive.Description data-slot=\"popover-description\" className={cn('text-muted-foreground', className)} {...props} />;\n};\n","import * as React from 'react';\n\nconst MOBILE_BREAKPOINT = 768;\n\nexport const useIsMobile = () => {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined);\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n };\n mql.addEventListener('change', onChange);\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n return () => mql.removeEventListener('change', onChange);\n }, []);\n\n return !!isMobile;\n};\n","import { Button } from '@edyn/ui/components/ui/button';\nimport { Calendar } from '@edyn/ui/components/ui/calendar';\nimport { Popover, PopoverContent, PopoverTrigger } from '@edyn/ui/components/ui/popover';\nimport { useIsMobile } from '@edyn/ui/hooks/use-mobile';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { IconCalendar } from '@tabler/icons-react';\n\n/** A range of calendar days as yyyy-mm-dd, either end optional. */\nexport type TDateRange = { from?: string; to?: string };\n\n// A calendar day is read and written at midday local time, so no time zone or daylight\n// saving change can move it onto the day before or after.\nexport const dayToDate = (value: string | undefined): Date | undefined => (value === undefined ? undefined : new Date(`${value}T12:00:00`));\n\nexport const dateToDay = (date: Date | undefined): string | undefined =>\n date === undefined ? undefined : `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;\n\nexport interface IDateRangePickerProps {\n id?: string;\n value: TDateRange;\n onValueChange: (value: TDateRange) => void;\n placeholder?: string;\n /** How the ends are written on the trigger (BCP 47); en-GB reads 05 Mar 2026. */\n locale?: string;\n /** An accessible name for the trigger, when there is no visible label to point at. */\n 'aria-label'?: string;\n className?: string;\n}\n\n/** A range of calendar days, either end optional; two months side by side, one on a phone. */\nexport const DateRangePicker = ({\n id,\n value,\n onValueChange,\n placeholder = 'Select date range',\n locale = 'en-GB',\n 'aria-label': ariaLabel,\n className,\n}: IDateRangePickerProps) => {\n const isMobile = useIsMobile();\n const from = dayToDate(value.from);\n const to = dayToDate(value.to);\n const format = new Intl.DateTimeFormat(locale, { day: '2-digit', month: 'short', year: 'numeric' });\n const ends = [from, to].filter((date) => date !== undefined).map((date) => format.format(date));\n return (\n <Popover>\n <PopoverTrigger\n render={\n <Button\n id={id}\n aria-label={ariaLabel}\n data-slot=\"date-range-picker-trigger\"\n variant=\"outline\"\n className={cn('w-full min-w-0 justify-start font-normal', ends.length === 0 && 'text-muted-foreground', className)}\n />\n }\n >\n <IconCalendar aria-hidden=\"true\" />\n <span className=\"truncate\">{ends.length === 0 ? placeholder : ends.join(' – ')}</span>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-auto p-0\">\n <Calendar\n mode=\"range\"\n defaultMonth={from}\n numberOfMonths={isMobile ? 1 : 2}\n selected={{ from, to }}\n onSelect={(range) => onValueChange({ from: dateToDay(range?.from), to: dateToDay(range?.to) })}\n />\n </PopoverContent>\n </Popover>\n );\n};\n","import { Avatar as AvatarPrimitive } from '@base-ui/react/avatar';\nimport { cn } from '@edyn/ui/lib/utils';\nimport type * as React from 'react';\n\nexport const Avatar = ({\n className,\n size = 'default',\n ...props\n}: AvatarPrimitive.Root.Props & {\n size?: 'default' | 'sm' | 'lg';\n}) => {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n data-size={size}\n className={cn(\n 'group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const AvatarImage = ({ className, ...props }: AvatarPrimitive.Image.Props) => {\n return <AvatarPrimitive.Image data-slot=\"avatar-image\" className={cn('aspect-square size-full rounded-full object-cover', className)} {...props} />;\n};\n\nexport const AvatarFallback = ({ className, ...props }: AvatarPrimitive.Fallback.Props) => {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n 'flex size-full items-center justify-center rounded-full bg-muted text-sm text-foreground/70 group-data-[size=sm]/avatar:text-xs',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const AvatarBadge = ({ className, ...props }: React.ComponentProps<'span'>) => {\n return (\n <span\n data-slot=\"avatar-badge\"\n className={cn(\n 'absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground bg-blend-color ring-2 ring-background select-none',\n 'group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden',\n 'group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2',\n 'group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const AvatarGroup = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"avatar-group\"\n className={cn('group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background', className)}\n {...props}\n />\n );\n};\n\nexport const AvatarGroupCount = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"avatar-group-count\"\n className={cn(\n 'relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-foreground/70 ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3',\n className,\n )}\n {...props}\n />\n );\n};\n","import { Avatar, AvatarFallback, AvatarImage } from '@edyn/ui/components/ui/avatar';\nimport { cn } from '@edyn/ui/lib/utils';\nimport type { CSSProperties } from 'react';\n\n/** How many colour pairs the theme defines (--avatar-1-bg, --avatar-1-fg ... in @edyn/theme tokens.css). */\nexport const AVATAR_TONES = 12;\n\n/**\n * The palette entry the text gets, from 1: the same text always gets the same one.\n * FNV-1a, because a plain multiply-and-add hash puts two letters on a few entries\n * only (it reduces to 7 x first + second, modulo 12).\n */\nexport const avatarTone = (text: string): number => {\n let hash = 2166136261;\n for (const character of text) {\n hash ^= character.codePointAt(0) ?? 0;\n hash = Math.imul(hash, 16777619);\n }\n // murmur3's finaliser mixes every bit into the low ones the modulo keeps; without\n // it AB, CD, EF share an entry.\n hash ^= hash >>> 16;\n hash = Math.imul(hash, 0x85ebca6b);\n hash ^= hash >>> 13;\n hash = Math.imul(hash, 0xc2b2ae35);\n hash ^= hash >>> 16;\n return ((hash >>> 0) % AVATAR_TONES) + 1;\n};\n\n/** Up to two initials, upper-cased: the first letter of the first two words. */\nexport const initialsOf = (name: string): string =>\n name\n .split(/\\s+/)\n .filter((part) => part !== '')\n .slice(0, 2)\n .map((part) => Array.from(part)[0]?.toUpperCase() ?? '')\n .join('');\n\n/**\n * The circle and its letters together, so the initials always fit. The font size\n * is inline rather than a class on purpose: 9px and 15px are not on Tailwind's\n * type scale, a custom `text-*` token would be read by tailwind-merge as a colour\n * and could drop the wrong class, and an inline size cannot be fought by the\n * fallback's own `text-sm`.\n */\nconst SIZES = {\n xs: { box: 'size-5', fontSize: 9 },\n sm: { box: 'size-6', fontSize: 10 },\n md: { box: 'size-8', fontSize: 12 },\n lg: { box: 'size-10', fontSize: 15 },\n} as const;\n\nexport type TInitialsAvatarSize = keyof typeof SIZES;\n\nexport interface IInitialsAvatarProps {\n name: string;\n photoUrl?: string | null;\n /** xs 20px, sm 24px in table rows, md 32px in a sidebar, lg 40px in a menu's header. */\n size?: TInitialsAvatarSize;\n className?: string;\n /** Colour the initials from the palette (on by default); off, they take the muted look. */\n autoColor?: boolean;\n /**\n * An accessible name. Left out, the avatar is decoration, which is right beside\n * the person's name; give one when it stands alone.\n */\n label?: string;\n}\n\n/** A person's photo, or their initials on a circle in the palette colour they pick; both themes switch by themselves. */\nexport const InitialsAvatar = ({ name, photoUrl, size = 'md', className, autoColor = true, label }: IInitialsAvatarProps) => {\n const initials = initialsOf(name);\n const tone = avatarTone(initials);\n const { box, fontSize } = SIZES[size];\n const style: CSSProperties = autoColor\n ? { fontSize, backgroundColor: `var(--avatar-${tone}-bg)`, color: `var(--avatar-${tone}-fg)` }\n : { fontSize };\n const a11y = label === undefined ? ({ 'aria-hidden': true } as const) : ({ role: 'img', 'aria-label': label } as const);\n return (\n <Avatar data-slot=\"initials-avatar\" data-tone={autoColor ? tone : undefined} className={cn(box, className)} {...a11y}>\n {photoUrl != null && <AvatarImage src={photoUrl} alt=\"\" />}\n <AvatarFallback style={style} className=\"leading-none font-semibold tracking-tight\">\n {initials}\n </AvatarFallback>\n </Avatar>\n );\n};\n","import { type Ref, type RefCallback, useCallback } from 'react';\n\ntype TPossibleRef<T> = Ref<T> | undefined;\n\nconst assignRef = <T>(ref: TPossibleRef<T>, value: T) => {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref !== null) {\n // Using type assertion to RefObject since we know it's not null\n (ref as { current: T }).current = value;\n }\n};\n\nconst mergeRefs = <T>(...refs: TPossibleRef<T>[]) => {\n return (node: T) => {\n for (const ref of refs) {\n if (ref) {\n assignRef(ref, node);\n }\n }\n };\n};\n\nexport const useMergedRefs = <T>(...refs: TPossibleRef<T>[]) => {\n return useCallback(mergeRefs(...refs), [...refs]) as RefCallback<T>;\n};\n","import { ScrollArea as BaseScrollArea } from '@base-ui/react/scroll-area';\nimport { useMergedRefs } from '@edyn/ui/hooks/use-merged-refs';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { type ComponentProps, type RefObject, useEffect, useRef } from 'react';\n\n/**\n * When the bar shows: 'hover' on area hover or while scrolling (default),\n * 'scroll' only while scrolling, 'always' permanent. In every mode the bar is\n * mounted only while that axis actually overflows, so 'always' means \"always\n * when there is something to scroll\", never a bar on a list that fits.\n */\nexport type TScrollbarVisibility = 'hover' | 'scroll' | 'always';\n\n/**\n * Surface the edge fades blended into, back when they were painted.\n *\n * @deprecated The fades are cut into the content by a mask, so they match any\n * surface without being told which one. Still accepted, and ignored.\n */\nexport type TScrollAreaFadeFrom = 'card' | 'background' | 'sidebar' | 'popover';\n\nexport interface IScrollBarProps extends ComponentProps<typeof BaseScrollArea.Scrollbar> {\n visibility?: TScrollbarVisibility;\n}\n\nexport const ScrollBar = ({ className, orientation = 'vertical', visibility = 'hover', ...props }: IScrollBarProps) => {\n return (\n <BaseScrollArea.Scrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n 'peer/scrollbar z-100 flex touch-none select-none motion-safe:transition-opacity motion-safe:duration-150',\n orientation === 'vertical' && 'h-full w-2 border-l border-l-transparent p-px',\n orientation === 'horizontal' && 'h-2 flex-col border-t border-t-transparent p-px',\n visibility !== 'always' && 'opacity-0 data-scrolling:opacity-100',\n visibility === 'hover' && 'data-hovering:opacity-100 group-hover/scroll-area:opacity-100',\n className,\n )}\n {...props}\n >\n <BaseScrollArea.Thumb className=\"relative flex-1 rounded-full bg-muted-foreground/50 transition-colors hover:bg-muted-foreground/70 data-scrolling:bg-muted-foreground/70\" />\n </BaseScrollArea.Scrollbar>\n );\n};\n\nexport interface IScrollAreaProps extends ComponentProps<typeof BaseScrollArea.Root> {\n /** Which axes get a styled scrollbar; content decides what actually overflows. */\n orientation?: 'horizontal' | 'vertical' | 'both';\n /** Scrollbar reveal behavior (mirrors the Radix ScrollArea `type` prop). */\n type?: TScrollbarVisibility;\n /** Edge fades hinting at clipped content; each one shows only while its own edge hides something. */\n fade?: boolean;\n /**\n * @deprecated No longer read. The fades mask the content, so they sit correctly\n * on any surface; passing this does nothing and is safe to delete.\n */\n fadeFrom?: TScrollAreaFadeFrom;\n /** Places both bars, for a host that gives them a gutter of their own (a sidebar menu). */\n scrollbarClassName?: string;\n viewportId?: string;\n /** Access to the scrollable viewport (e.g. to reset scroll position on route changes). */\n viewportRef?: RefObject<HTMLDivElement | null>;\n viewportClassName?: string;\n /** Published on the viewport as data-scroll-restoration-id, for a router that restores scroll position. */\n scrollRestorationId?: string;\n /**\n * Whether the viewport is a tab stop of its own (default). Turn it off inside a\n * widget that already owns focus, a menu above all: its items are the tab\n * stops, and a focusable wrapper between the role and its items is both\n * redundant and an aria-required-children violation.\n */\n focusable?: boolean;\n /** @deprecated Use `viewportId`. */\n viewPortId?: string;\n /** @deprecated Use `viewportRef`. */\n viewPortRef?: RefObject<HTMLDivElement | null>;\n /** @deprecated Use `viewportClassName`. */\n viewPortClassName?: string;\n /** Places the vertical bar only; `scrollbarClassName` covers both. */\n scrollVerticalClassName?: string;\n /** Places the horizontal bar only; `scrollbarClassName` covers both. */\n scrollHorizontalClassName?: string;\n}\n\n/**\n * Which axes fade, published for scroll-fade.css to key its mask off. The\n * stylesheet reaches this element's own viewport through a child combinator, so a\n * ScrollArea nested in another one cannot pick up its ancestor's edges.\n */\n/**\n * Base UI gives the root, the viewport and the content `role=\"presentation\"`. On\n * a div that changes nothing for a screen reader, but it is an EXPLICIT role, and\n * axe treats explicit presentation children as foreign to a parent that owns\n * required children. A ScrollArea inside `role=\"menu\"` or `role=\"listbox\"` then\n * fails as a critical aria-required-children violation, while the same div with\n * no role passes straight through. Clearing it is what makes a ScrollArea legal\n * in a popup list. A spread because the literal `role={undefined}` is flagged by\n * the a11y lint rule, which cannot tell it from an invalid role.\n */\nconst NO_ROLE = { role: undefined } as const;\n\n/** Base UI makes the viewport a tab stop (0, or -1 with nothing to scroll); undefined takes that away. */\nconst NO_TAB_STOP = { tabIndex: undefined } as const;\n\nconst FADE_AXIS = {\n vertical: 'block',\n horizontal: 'inline',\n both: 'both',\n} as const;\n\n/**\n * Themed scroll container (Base UI): overflowing content scrolls INSIDE the component\n * with a slim overlay scrollbar instead of exposing a native browser scrollbar. House\n * rule: wide/tall content (tables, lists, code) always goes through this, never a bare\n * overflow-* utility.\n *\n * Cap the height with a plain class on the component itself, e.g.\n * `<ScrollArea className=\"max-h-88\">`. The viewport picks the cap up through\n * `max-h-inherit`, which matters because the viewport is the element that actually\n * scrolls: a cap that lands only on the root leaves tall content spilling out\n * underneath with no scrollbar, and that reads as a working height right up until the\n * content outgrows it.\n *\n * `fade` fades out each edge that is currently hiding content, rather than always\n * fading one: a permanent fade is a lie half the time, dimming the last row that fits\n * and promising more below when the reader is already at the end. It is cut into the\n * content by a mask (@edyn/theme/scroll-fade.css), so it needs no surface colour and\n * reads correctly over a tint, a gradient or a glow. A host that keeps something\n * unscrolled at the top, such as a sticky table header, exempts that band by setting\n * --scroll-fade-offset on the ScrollArea. The static faded-* utilities in\n * @edyn/theme/utilities.css are the other tool, for DECORATIVE edges that do not\n * track scroll position.\n *\n * The viewport publishes its size as --scroll-area-width/--scroll-area-height CSS vars\n * so children can size against the visible area.\n */\nexport const ScrollArea = ({\n className,\n children,\n orientation = 'vertical',\n type = 'hover',\n fade = false,\n fadeFrom = 'card',\n scrollbarClassName,\n viewportId,\n viewportRef,\n viewportClassName,\n scrollRestorationId,\n focusable = true,\n viewPortId,\n viewPortRef,\n viewPortClassName,\n scrollVerticalClassName,\n scrollHorizontalClassName,\n ...props\n}: IScrollAreaProps) => {\n const refInner = useRef<HTMLDivElement | null>(null);\n // The viewPort* spellings are the pre-rc.4 names, kept so existing callers\n // keep working; the viewport* ones match the rest of the ecosystem.\n const refsViewport = useMergedRefs(refInner, viewportRef ?? viewPortRef);\n\n useEffect(() => {\n const el = refInner.current;\n if (!el) {\n return;\n }\n const observer = new ResizeObserver(() => {\n el.style.setProperty('--scroll-area-width', `${el.clientWidth}px`);\n el.style.setProperty('--scroll-area-height', `${el.clientHeight}px`);\n });\n observer.observe(el);\n return () => {\n observer.disconnect();\n };\n }, []);\n\n return (\n <BaseScrollArea.Root\n data-slot=\"scroll-area\"\n // Everything inside clips at this box, so a focus ring drawn outside an\n // element at the edge would be cut off; see @edyn/theme/focus.css.\n data-focus=\"inset\"\n // The single-row grid is load-bearing rather than tidying. `h-full` on the viewport\n // cannot be trusted to size it: a percentage height only resolves against a definite\n // containing block, and a host that sizes this by flex inside a max-height column\n // (`min-h-0 flex-1`) is not definite, so the viewport fell back to auto and grew to\n // its content instead of scrolling. A grid item stretches to its track, and the track\n // is sized from the root's used height, which flex has already settled. `grid-rows-1`\n // is `repeat(1, minmax(0, 1fr))`: one track that may shrink below its content.\n className={cn('group/scroll-area relative grid min-w-0 grid-rows-1 overflow-hidden', className)}\n data-fade={fade ? FADE_AXIS[orientation] : undefined}\n {...NO_ROLE}\n {...props}\n >\n {(orientation === 'vertical' || orientation === 'both') && (\n <ScrollBar orientation=\"vertical\" visibility={type} className={cn(scrollbarClassName, scrollVerticalClassName)} />\n )}\n {(orientation === 'horizontal' || orientation === 'both') && (\n <ScrollBar orientation=\"horizontal\" visibility={type} className={cn(scrollbarClassName, scrollHorizontalClassName)} />\n )}\n <BaseScrollArea.Corner />\n <BaseScrollArea.Viewport\n data-slot=\"scroll-area-viewport\"\n id={viewportId ?? viewPortId}\n ref={refsViewport}\n data-scroll-restoration-id={scrollRestorationId}\n {...NO_ROLE}\n {...(focusable ? null : NO_TAB_STOP)}\n // One axis means one axis. Base UI leaves both axes scrollable, so a\n // vertical list could still be dragged sideways, and anything that put a\n // row in view (focus moving, scrollIntoView with inline: nearest) slid\n // the whole list across. The clamp is marked important because Base UI\n // sets the viewport's overflow itself.\n className={cn(\n 'max-h-inherit w-full rounded-[inherit]',\n orientation === 'vertical' && 'overflow-x-hidden!',\n orientation === 'horizontal' && 'overflow-y-hidden!',\n viewportClassName ?? viewPortClassName,\n )}\n >\n {/* Content is NOT optional: it carries the ResizeObserver that recomputes the\n thumb when the CONTENT resizes without the viewport resizing (e.g. a route\n swap to a shorter page). Without it the thumb keeps the previous page's\n geometry and a fully-visible page still shows a scrollbar.\n\n A vertical scroller also pins its content to the viewport's width, so a\n long label truncates instead of widening the list and inventing a\n horizontal scroll. Base UI sets min-width: fit-content inline, which is\n what makes that happen and why this is an inline style too. */}\n <BaseScrollArea.Content {...NO_ROLE} style={orientation === 'vertical' ? { minWidth: 0 } : undefined}>\n {children}\n </BaseScrollArea.Content>\n </BaseScrollArea.Viewport>\n </BaseScrollArea.Root>\n );\n};\n","import { cn } from '@edyn/ui/lib/utils';\n\n/**\n * The one look for a list in a popup or a menu: the command palette, Select,\n * Combobox, MultiSelect and the dropdown menus.\n *\n * These lists used to disagree with each other in every detail that shows:\n * three different radii, two different paddings, a grey fill for the highlight\n * in one and the accent in another, and the chosen item marked by a check on\n * the left in Select and on the right in the menus. Picking something from one\n * list then felt like a different product from picking something in the next.\n *\n * It lives here as classes rather than as a stylesheet so a caller's own\n * className still wins: an unlayered rule would beat every utility, including\n * the one someone passes for a single list.\n *\n * ONE ITEM: transparent at rest, 32px tall, 6px radius (--radius-sm), 6px by\n * 8px of padding, text-sm, its own icons 16px and muted. Under the pointer or\n * the keyboard it takes one translucent fill of the text colour, and its icons\n * the text colour. Chosen is medium weight with a check at the END, never a\n * fill, so \"where I am\" and \"what I picked\" can be told apart at a glance.\n */\n\n/**\n * Which primitive renders the item, because the two disagree about the same\n * attribute names in a way that silently breaks the styling:\n *\n * - cmdk writes `data-selected=\"false\"` and `data-disabled=\"false\"` on items\n * that are neither, so a bare `data-selected:` variant matches EVERY item and\n * highlights the whole list. Its states have to be matched by value.\n * - Base UI omits the attribute instead, so presence is the test there. That\n * needs the BRACKET form for `selected`: shadcn redefines the bare\n * `data-selected:` variant to match only data-selected=\"true\" (for the\n * calendar), and Base UI writes it as an empty string, so the bare form\n * compiles and silently never applies. `highlighted` and `disabled` have no\n * such override, so those stay bare.\n * - And the same name means different things: cmdk's `data-selected` is the\n * keyboard cursor, Base UI's is the chosen value. In cmdk the chosen state is\n * `data-checked`, which the DS's own CommandItem sets.\n */\nexport type TPopupItemFlavor = 'base-ui' | 'cmdk';\n\nconst ITEM_BASE =\n \"relative flex min-h-8 cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-foreground outline-none select-none [&>svg]:pointer-events-none [&>svg]:shrink-0 [&>svg]:text-muted-foreground [&>svg:not([class*='size-'])]:size-4\";\n\nconst ITEM_STATES: Record<TPopupItemFlavor, string> = {\n 'base-ui':\n 'data-highlighted:bg-foreground/6 data-highlighted:[&>svg]:text-foreground data-[selected]:font-medium data-disabled:pointer-events-none data-disabled:opacity-50',\n cmdk: 'data-[selected=true]:bg-foreground/6 data-[selected=true]:[&>svg]:text-foreground data-[checked=true]:font-medium data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50',\n};\n\n/** The shared item look. `checkable` leaves room at the end for the check. */\nexport const popupItemClass = (flavor: TPopupItemFlavor = 'base-ui', checkable = false): string =>\n cn(ITEM_BASE, ITEM_STATES[flavor], checkable && 'pr-8');\n\n/**\n * The check's slot, at the end of the item and the same size whether or not the\n * check is in it, so a list does not shift as the choice moves.\n */\nexport const POPUP_ITEM_INDICATOR_CLASS = 'pointer-events-none absolute right-2 flex size-4 items-center justify-center text-foreground';\n\n/** A group's heading in any of these lists. */\nexport const POPUP_GROUP_LABEL_CLASS = 'px-2 py-1.5 text-xs font-medium text-muted-foreground';\n","import { Combobox } from '@base-ui/react/combobox';\nimport { ScrollArea } from '@edyn/ui/components/ui/scroll-area';\nimport { popupItemClass } from '@edyn/ui/lib/popup-list';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { IconCheck, IconChevronDown, IconSearch } from '@tabler/icons-react';\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport { type CSSProperties, type ReactNode, type RefObject, useEffect, useMemo, useRef, useState } from 'react';\n\n/** An option: `leading` goes before its label (an avatar, a status dot), `count` after it (how many it would show). */\nexport type TMultiSelectOption = { value: string; label: string; count?: number; leading?: ReactNode };\n\n/** Every word the component prints, so a product can translate it. */\nexport interface IMultiSelectLabels {\n noMatches: string;\n loading: string;\n /** Shown when `error` is `true`; a string `error` replaces it. */\n error: string;\n retry: string;\n loadMore: string;\n loadingMore: string;\n clear: string;\n selectedCount: (count: number) => string;\n}\n\nexport const DEFAULT_MULTI_SELECT_LABELS: IMultiSelectLabels = {\n noMatches: 'No matches.',\n loading: 'Loading…',\n error: 'Could not load the options.',\n retry: 'Try again',\n loadMore: 'Load more',\n loadingMore: 'Loading…',\n clear: 'Clear',\n selectedCount: (count) => `${count} selected`,\n};\n\n/** Above this many options a list draws only the rows on screen. */\nexport const VIRTUALIZE_FROM = 100;\n\nconst ITEM_HEIGHT = 32;\n\nexport interface IMultiSelectProps {\n /** The trigger's text with nothing picked, which means no filter (\"All dealer groups\"). */\n placeholder: string;\n /** The search field's prompt (\"Search dealer groups…\"). */\n searchPlaceholder: string;\n /** The options to show now: all of a short fixed list, or in async mode the ones for the typed text. */\n options: readonly TMultiSelectOption[];\n value: readonly string[];\n onValueChange: (value: string[]) => void;\n /** For a Label's htmlFor. */\n id?: string;\n 'aria-label'?: string;\n /** Shown but not changeable (a read-only form). */\n disabled?: boolean;\n /** Layout only (a width); the look is the kit's. */\n className?: string;\n /**\n * Passing this turns on ASYNC MODE, for lists that grow (people, dealer groups) and must\n * be searched by the API rather than loaded whole and filtered in the browser. The\n * component then never filters: it reports the typed text (after `searchDelay`) and shows\n * whatever `options` the caller supplies for it. It is also called with '' each time the\n * list opens, so the first page is fetched on demand, not at page load.\n */\n onSearchChange?: (text: string) => void;\n /** How long typing must pause before `onSearchChange` is called. Async mode only. */\n searchDelay?: number;\n /**\n * The options behind the chosen values, for the ones not in the current `options`. A\n * search that no longer returns a chosen value must not make it vanish from the trigger\n * or the count, so the caller says what it is called. Without a label a value shows as\n * itself.\n */\n selectedOptions?: readonly TMultiSelectOption[];\n /** The options for the typed text are on their way. The old ones stay until they arrive. */\n loading?: boolean;\n /** The request failed: `true` for the default message, or the message itself. */\n error?: boolean | string;\n onRetry?: () => void;\n /** There is another page after `options`. */\n hasMore?: boolean;\n onLoadMore?: () => void;\n /** The next page is on its way. */\n loadingMore?: boolean;\n labels?: Partial<IMultiSelectLabels>;\n}\n\n/**\n * The options behind the chosen values, in the order they were chosen. A value with no\n * known option is kept and shown as itself rather than dropped: a selection must never\n * change just because a list did.\n */\nexport const resolveChosen = (\n value: readonly string[],\n options: readonly TMultiSelectOption[],\n selectedOptions: readonly TMultiSelectOption[] = [],\n): TMultiSelectOption[] => {\n const known = new Map<string, TMultiSelectOption>();\n for (const option of [...selectedOptions, ...options]) {\n known.set(option.value, option);\n }\n return value.map((entry) => known.get(entry) ?? { value: entry, label: entry });\n};\n\n/** What the trigger says: the placeholder, the one picked, or a count. */\nexport const summarize = (chosen: readonly TMultiSelectOption[], placeholder: string, labels: IMultiSelectLabels): string => {\n if (chosen.length === 0) {\n return placeholder;\n }\n return chosen.length === 1 ? (chosen[0]?.label ?? '') : labels.selectedCount(chosen.length);\n};\n\nconst POPUP =\n 'flex max-h-(--available-height) w-(--anchor-width) min-w-64 max-w-sm origin-(--transform-origin) flex-col overflow-hidden rounded-lg border border-border bg-popover text-popover-foreground shadow-md outline-none duration-100 motion-reduce:animate-none data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95';\n\nconst TRIGGER =\n 'flex h-8 w-full min-w-0 cursor-pointer items-center justify-between gap-2 rounded-lg border border-input bg-transparent px-2.5 text-sm text-foreground transition-colors outline-none focus-visible:border-ring disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive data-popup-open:border-ring dark:bg-input/30';\n\nconst Option = ({\n option,\n index,\n style,\n measure,\n}: {\n option: TMultiSelectOption;\n index: number;\n style?: CSSProperties;\n measure?: (node: Element | null) => void;\n}) => (\n <Combobox.Item\n value={option}\n index={index}\n ref={measure}\n data-index={index}\n style={style}\n data-slot=\"multi-select-item\"\n className={cn(popupItemClass('base-ui'), 'group')}\n >\n {/* A checkbox, filled when chosen: a set of toggles reads as one. */}\n <span\n data-slot=\"multi-select-item-indicator\"\n aria-hidden=\"true\"\n className=\"flex size-4 shrink-0 items-center justify-center rounded-sm border border-input text-primary-foreground transition-colors group-data-[selected]:border-primary group-data-[selected]:bg-primary\"\n >\n <IconCheck className=\"size-3 opacity-0 group-data-[selected]:opacity-100\" stroke={3} />\n </span>\n {option.leading}\n <span className=\"min-w-0 flex-1 truncate\">{option.label}</span>\n {option.count !== undefined && <span className=\"text-xs text-muted-foreground tabular-nums\">{option.count}</span>}\n </Combobox.Item>\n);\n\n// The options on offer, every one drawn, or past VIRTUALIZE_FROM only those on screen. The\n// list is the listbox itself (the options its direct children), sized to the whole list\n// when virtualized; the ScrollArea wraps it.\nconst Options = ({\n scroller,\n scrollTo,\n busy,\n}: {\n scroller: RefObject<HTMLDivElement | null>;\n scrollTo: RefObject<(index: number) => void>;\n busy: boolean;\n}) => {\n const items = Combobox.useFilteredItems<TMultiSelectOption>();\n const virtual = items.length > VIRTUALIZE_FROM;\n // The scroller is an ancestor, so its ref is set only after this list's own effects:\n // one more render once mounted gives the virtualizer its element.\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n const virtualizer = useVirtualizer({\n count: items.length,\n getScrollElement: () => scroller.current,\n estimateSize: () => ITEM_HEIGHT,\n overscan: 12,\n enabled: virtual && mounted,\n });\n useEffect(() => {\n scrollTo.current = virtual ? (index) => virtualizer.scrollToIndex(index, { align: 'auto' }) : () => undefined;\n }, [scrollTo, virtual, virtualizer]);\n if (!virtual) {\n return (\n <Combobox.List aria-busy={busy || undefined} className=\"p-1 outline-none\">\n {items.map((option, index) => (\n <Option key={option.value} option={option} index={index} />\n ))}\n </Combobox.List>\n );\n }\n return (\n <Combobox.List\n data-virtualized=\"\"\n aria-busy={busy || undefined}\n className=\"relative m-1 outline-none\"\n style={{ height: virtualizer.getTotalSize() }}\n >\n {virtualizer.getVirtualItems().map((row) => {\n const option = items[row.index];\n return option === undefined ? null : (\n <Option\n key={option.value}\n option={option}\n index={row.index}\n measure={virtualizer.measureElement}\n style={{ position: 'absolute', top: 0, left: 0, right: 0, transform: `translateY(${row.start}px)` }}\n />\n );\n })}\n </Combobox.List>\n );\n};\n\n/**\n * A choice of several from a list: a trigger shaped like a Select that says what is picked\n * (the placeholder, the one picked, or a count), and a popup with a search field and checkbox\n * options, with the shared popup list style, the ScrollArea's bar and fades, and virtualization\n * past VIRTUALIZE_FROM options. Nothing chosen means no filter.\n *\n * For a short fixed list pass `options` and nothing else: the component filters them as the\n * user types. For a list that grows, pass `onSearchChange` and it becomes a window onto a\n * server: the caller fetches the options for the typed text, and says when they are loading,\n * failed, or have another page.\n */\nexport const MultiSelect = ({\n placeholder,\n searchPlaceholder,\n options,\n value,\n onValueChange,\n id,\n disabled = false,\n className,\n onSearchChange,\n searchDelay = 250,\n selectedOptions,\n loading = false,\n error = false,\n onRetry,\n hasMore = false,\n onLoadMore,\n loadingMore = false,\n labels: labelOverrides,\n ...rest\n}: IMultiSelectProps) => {\n const labels = useMemo(() => ({ ...DEFAULT_MULTI_SELECT_LABELS, ...labelOverrides }), [labelOverrides]);\n const isAsync = onSearchChange !== undefined;\n const chosen = useMemo(() => resolveChosen(value, options, selectedOptions), [value, options, selectedOptions]);\n // Chosen options the current page does not contain stay on offer at the top, so they can\n // still be unchecked after a search has moved on.\n const items = useMemo(() => {\n const offered = new Set(options.map((option) => option.value));\n return [...chosen.filter((option) => !offered.has(option.value)), ...options];\n }, [chosen, options]);\n const refScroller = useRef<HTMLDivElement | null>(null);\n const refScrollTo = useRef<(index: number) => void>(() => undefined);\n const refTimer = useRef<number | undefined>(undefined);\n // The text last reported through onSearchChange, and whether the popup is open. Base UI\n // reports the input as empty when the popup opens and again when it closes; reporting\n // those would fetch the first page twice on every open, and again while closed.\n const refReported = useRef<string | undefined>(undefined);\n const refOpen = useRef(false);\n const errorMessage = typeof error === 'string' ? error : labels.error;\n const failed = error !== false;\n\n useEffect(() => () => window.clearTimeout(refTimer.current), []);\n\n return (\n <Combobox.Root\n multiple\n disabled={disabled}\n items={items}\n filter={isAsync ? null : undefined}\n value={chosen}\n onValueChange={(next: TMultiSelectOption[]) => onValueChange(next.map((option) => option.value))}\n onInputValueChange={(text) => {\n if (onSearchChange === undefined || !refOpen.current) {\n return;\n }\n window.clearTimeout(refTimer.current);\n if (text === refReported.current) {\n return;\n }\n refTimer.current = window.setTimeout(() => {\n refReported.current = text;\n onSearchChange(text);\n }, searchDelay);\n }}\n onOpenChange={(open) => {\n window.clearTimeout(refTimer.current);\n refOpen.current = open;\n refReported.current = open ? '' : undefined;\n if (open && onSearchChange !== undefined) {\n onSearchChange('');\n }\n }}\n itemToStringLabel={(option: TMultiSelectOption) => option.label}\n isItemEqualToValue={(a: TMultiSelectOption, b: TMultiSelectOption) => a.value === b.value}\n virtualized={items.length > VIRTUALIZE_FROM}\n onItemHighlighted={(_, details) => {\n if (details.reason === 'keyboard' && details.index >= 0) {\n refScrollTo.current(details.index);\n }\n }}\n >\n <Combobox.Trigger id={id} aria-label={rest['aria-label']} data-slot=\"multi-select-trigger\" className={cn(TRIGGER, className)}>\n <span className={cn('min-w-0 flex-1 truncate text-left', chosen.length === 0 && 'text-muted-foreground')}>\n {summarize(chosen, placeholder, labels)}\n </span>\n <IconChevronDown aria-hidden=\"true\" className=\"size-4 shrink-0 text-muted-foreground\" />\n </Combobox.Trigger>\n <Combobox.Portal>\n <Combobox.Positioner sideOffset={4} align=\"start\" className=\"z-50\">\n <Combobox.Popup data-slot=\"multi-select-content\" className={POPUP}>\n <div className=\"flex shrink-0 items-center gap-2 border-b border-border px-3\">\n <IconSearch aria-hidden=\"true\" className=\"size-4 shrink-0 text-muted-foreground\" />\n <Combobox.Input\n placeholder={searchPlaceholder}\n aria-label={searchPlaceholder.replace(/…$/, '')}\n className=\"h-10 w-full min-w-0 bg-transparent text-sm outline-none placeholder:text-muted-foreground\"\n />\n </div>\n {/* The live region stays mounted and only its words change, which is what makes a\n screen reader announce them. */}\n <Combobox.Status data-slot=\"multi-select-status\" className=\"px-3 py-2 text-sm text-muted-foreground empty:p-0\">\n {failed ? (\n <span className=\"flex items-center justify-between gap-2 text-destructive\">\n {errorMessage}\n {onRetry !== undefined && (\n <button type=\"button\" onClick={onRetry} className=\"rounded-md px-2 py-1 font-medium text-foreground hover:bg-foreground/6\">\n {labels.retry}\n </button>\n )}\n </span>\n ) : loading ? (\n labels.loading\n ) : null}\n </Combobox.Status>\n <Combobox.Empty className=\"px-3 py-6 text-center text-sm text-muted-foreground empty:p-0\">\n {loading || failed ? null : labels.noMatches}\n </Combobox.Empty>\n <ScrollArea type=\"always\" fade viewportRef={refScroller} className=\"max-h-72 min-h-0\">\n <Options scroller={refScroller} scrollTo={refScrollTo} busy={loading} />\n </ScrollArea>\n {hasMore && onLoadMore !== undefined && (\n <div className=\"shrink-0 border-t border-border p-1\">\n <button\n type=\"button\"\n disabled={loadingMore}\n onClick={onLoadMore}\n className=\"h-8 w-full rounded-md px-2 text-sm font-medium text-foreground hover:bg-foreground/6 disabled:pointer-events-none disabled:opacity-50\"\n >\n {loadingMore ? labels.loadingMore : labels.loadMore}\n </button>\n </div>\n )}\n {chosen.length > 0 && (\n <div className=\"flex shrink-0 items-center justify-between gap-2 border-t border-border py-1 pr-1 pl-3 text-xs text-muted-foreground\">\n <span className=\"tabular-nums\">{labels.selectedCount(chosen.length)}</span>\n <button\n type=\"button\"\n onClick={() => onValueChange([])}\n className=\"rounded-md px-2 py-1 font-medium text-foreground hover:bg-foreground/6\"\n >\n {labels.clear}\n </button>\n </div>\n )}\n </Combobox.Popup>\n </Combobox.Positioner>\n </Combobox.Portal>\n </Combobox.Root>\n );\n};\n","import { cn } from '@edyn/ui/lib/utils';\nimport { type CSSProperties, useEffect, useRef, useState } from 'react';\n\ntype TPhase = 'idle' | 'waiting' | 'running' | 'finishing' | 'fading';\n\n/** Work quicker than this shows no line at all. */\nconst START_DELAY = 150;\nconst FINISH = 150;\nconst FADE = 200;\n/** How far an ordinary run eases towards the end without reaching it. */\nconst RUN_TARGET = 0.85;\n\n/**\n * The line's colour: an app sets --progress-line (on :root, or on any element above the\n * line) to match its accent. The fallback is read where the line is, so it follows the\n * theme, which a default declared once on :root would not.\n */\nexport const PROGRESS_LINE_COLOR = 'var(--progress-line, var(--primary))';\n\nconst reducedMotion = (): boolean => window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n// How far the line has got: its scale along x, read from the transform it is drawn with right now.\nconst scaleOf = (line: HTMLElement | null): number => {\n const transform = line === null ? 'none' : getComputedStyle(line).transform;\n return transform === 'none' ? 0 : new DOMMatrixReadOnly(transform).a;\n};\n\nexport interface IProgressLineProps {\n /** Work is under way. */\n active: boolean;\n label?: string;\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * A thin line in the accent (--progress-line, by default --primary) that runs along the top of what is loading (a table's rows\n * under its header, a page under the top bar). It waits a moment before it shows, so\n * quick work never flashes it; it eases towards the end without reaching it while the\n * work runs; when the work is done it runs to the end and only then fades. More work\n * before it has gone carries on from where it is. With reduced motion it is a\n * full-width line that fades.\n */\nexport const ProgressLine = ({ active, label = 'Loading', className, style }: IProgressLineProps) => {\n const [phase, setPhase] = useState<TPhase>('idle');\n const [target, setTarget] = useState(RUN_TARGET);\n const refPhase = useRef<TPhase>('idle');\n const refLine = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n let timer: number | undefined;\n const go = (next: TPhase): void => {\n refPhase.current = next;\n setPhase(next);\n };\n const later = (milliseconds: number, run: () => void): void => {\n timer = window.setTimeout(run, milliseconds);\n };\n const fade = (): void => {\n go('fading');\n later(FADE, () => go('idle'));\n };\n const phaseNow = refPhase.current;\n if (active) {\n if (phaseNow === 'idle' || phaseNow === 'waiting') {\n go('waiting');\n later(START_DELAY, () => {\n setTarget(RUN_TARGET);\n go('running');\n });\n } else if (phaseNow === 'finishing' || phaseNow === 'fading') {\n // More work before the line has gone: on from where it is, never back to the start.\n const reached = scaleOf(refLine.current);\n setTarget(reached > 0.8 ? Math.min(0.97, reached + 0.04) : RUN_TARGET);\n go('running');\n }\n } else if (phaseNow === 'waiting') {\n go('idle');\n } else if (phaseNow === 'running' || phaseNow === 'finishing') {\n if (reducedMotion()) {\n fade();\n } else {\n go('finishing');\n later(FINISH, fade);\n }\n } else if (phaseNow === 'fading') {\n later(FADE, () => go('idle'));\n }\n return () => window.clearTimeout(timer);\n }, [active]);\n\n const reduced = phase !== 'idle' && reducedMotion();\n const scale = phase === 'idle' || phase === 'waiting' ? 0 : phase === 'running' && !reduced ? target : 1;\n const transition =\n phase === 'running' && !reduced\n ? 'transform 8s cubic-bezier(0.1, 0.7, 0.15, 1), opacity 120ms ease-out'\n : phase === 'finishing'\n ? `transform ${FINISH}ms ease-out`\n : phase === 'fading'\n ? `opacity ${FADE}ms ease-out`\n : 'none';\n const shown = phase === 'running' || phase === 'finishing' || phase === 'fading';\n return (\n <div\n data-slot=\"progress-line\"\n role=\"progressbar\"\n aria-label={label}\n aria-hidden={shown && phase !== 'fading' ? undefined : true}\n data-phase={phase}\n className={cn('pointer-events-none h-0.5 overflow-hidden', className)}\n style={style}\n >\n <div\n ref={refLine}\n data-slot=\"progress-line-bar\"\n className=\"h-full origin-left\"\n style={{\n backgroundColor: PROGRESS_LINE_COLOR,\n transform: `scaleX(${scale})`,\n opacity: phase === 'fading' || !shown ? 0 : 1,\n transition,\n }}\n />\n </div>\n );\n};\n","import { Button } from '@edyn/ui/components/ui/button';\nimport { Slider } from '@edyn/ui/components/ui/slider';\nimport { formatMediaTime, useMediaPlayer } from '@edyn/ui/hooks/use-media-player';\nimport type { TCssLength } from '@edyn/ui/lib/utils';\nimport { cn, cssLength } from '@edyn/ui/lib/utils';\nimport { IconMaximize, IconPlayerPauseFilled, IconPlayerPlayFilled, IconVolume, IconVolumeOff } from '@tabler/icons-react';\nimport * as React from 'react';\n\nexport interface IVideoPlayerProps {\n /** Video source URL. */\n src?: string;\n /** Still frame shown before playback starts. */\n poster?: string;\n /** Primary label rendered in the control overlay. */\n title?: string;\n /** Secondary label rendered under the title. */\n description?: string;\n /** Start muted. Required by browsers for unattended autoplay. */\n muted?: boolean;\n /** Loop playback when the video ends. */\n loop?: boolean;\n /** Disable every control without hiding the player. */\n disabled?: boolean;\n /**\n * Box width. A number is px, a string is any CSS length (`'100%'`, `'34rem'`).\n * Omitted, the player fills the width it is given.\n */\n width?: TCssLength;\n /**\n * Box height. A number is px, a string is any CSS length. Omitted, the height\n * comes from `ratio`. Setting this letterboxes a source that does not match.\n */\n height?: TCssLength;\n /**\n * Aspect ratio of the media box, as a CSS `aspect-ratio` value (`'16/9'`).\n *\n * Defaults to `auto`, so the height follows the source's own dimensions and a\n * portrait or 4:3 clip is shown whole rather than letterboxed. Pair `auto`\n * with a `poster`: a `<video>` reports a 300x150 intrinsic size until metadata\n * arrives, and the poster's dimensions stand in for it, which is what stops\n * the box from resizing when the first frame lands.\n *\n * Ignored when `height` is set.\n */\n ratio?: string;\n className?: string;\n 'aria-label'?: string;\n onPlay?: () => void;\n onPause?: () => void;\n onEnded?: () => void;\n onTimeUpdate?: (currentTime: number, duration: number) => void;\n}\n\n/**\n * Media surface with an overlaid control bar: title and description, elapsed and\n * total time, a seekable scrubber, play/pause, volume, and fullscreen.\n *\n * The root carries the `dark` class so its tokens resolve to the dark palette in\n * both themes. Video is dark, so the letterbox and controls must stay dark and\n * light-on-dark; this re-scopes existing tokens rather than hardcoding a colour.\n */\nexport const VideoPlayer = ({\n src,\n poster,\n title,\n description,\n muted = false,\n loop = false,\n disabled = false,\n width,\n height,\n ratio = 'auto',\n className,\n 'aria-label': ariaLabel = 'Video player',\n onPlay,\n onPause,\n onEnded,\n onTimeUpdate,\n}: IVideoPlayerProps) => {\n const {\n refMedia,\n playing,\n currentTime,\n duration,\n muted: isMuted,\n toggle,\n seek,\n toggleMute,\n } = useMediaPlayer<HTMLVideoElement>({ onPlay, onPause, onEnded, onTimeUpdate });\n const refContainer = React.useRef<HTMLDivElement>(null);\n\n const PlaybackIcon = playing ? IconPlayerPauseFilled : IconPlayerPlayFilled;\n const VolumeIcon = isMuted ? IconVolumeOff : IconVolume;\n\n // An explicit height wins over the ratio, and either one turns the root into\n // the sized box with the media fitted inside it. Without both, the media is\n // the only thing in flow and the root takes its height.\n const isSizedBox = height != null || ratio !== 'auto';\n\n const requestFullscreen = () => {\n const container = refContainer.current;\n if (!container) {\n return;\n }\n if (document.fullscreenElement) {\n void document.exitFullscreen().catch(() => undefined);\n return;\n }\n void container.requestFullscreen?.().catch(() => undefined);\n };\n\n return (\n <div\n ref={refContainer}\n data-slot=\"video-player\"\n data-playing={playing || undefined}\n style={{\n width: cssLength(width),\n height: cssLength(height),\n aspectRatio: height == null && ratio !== 'auto' ? ratio : undefined,\n }}\n className={cn('dark relative isolate w-full overflow-hidden rounded-lg bg-background', className)}\n >\n <video\n ref={refMedia}\n src={src}\n poster={poster}\n muted={muted}\n loop={loop}\n playsInline\n preload=\"metadata\"\n aria-label={ariaLabel}\n className={cn('w-full bg-background', isSizedBox ? 'h-full object-contain' : 'h-auto')}\n />\n\n {/* The scrim must carry the controls over arbitrarily bright footage, so it ramps to a solid base rather than fading to 90%. */}\n {/* `text-foreground` is explicit: the `dark` class re-scopes the token VALUES, but `color` itself\n still inherits from the surrounding page, so without this the controls stay page-dark on video. */}\n <div className=\"pointer-events-none absolute inset-x-0 bottom-0 flex flex-col gap-0.5 bg-gradient-to-t from-background via-background/75 to-transparent px-3 pt-12 pb-2 text-foreground\">\n <div className=\"pointer-events-auto flex items-end justify-between gap-4\">\n <div className=\"min-w-0\">\n {title ? <p className=\"truncate text-sm font-medium text-foreground\">{title}</p> : null}\n {description ? <p className=\"truncate text-xs text-foreground/70\">{description}</p> : null}\n </div>\n <span className=\"shrink-0 text-xs tabular-nums text-foreground/70\">\n {formatMediaTime(currentTime)} / {formatMediaTime(duration)}\n </span>\n </div>\n\n {/* Scope the form-sized Slider down to a scrubber: thinner track, smaller thumb, less vertical padding. */}\n <Slider\n className=\"pointer-events-auto [&_[data-slot=slider-control]]:py-1.5 [&_[data-slot=slider-thumb]]:size-3 [&_[data-slot=slider-track]]:h-1\"\n value={Math.min(currentTime, duration || 0)}\n min={0}\n max={duration || 0}\n step={1}\n disabled={disabled || duration === 0}\n aria-label=\"Seek\"\n onValueChange={(next) => {\n seek(next);\n }}\n />\n\n <div className=\"pointer-events-auto flex items-center justify-between\">\n <div className=\"flex items-center gap-1\">\n <Button type=\"button\" variant=\"ghost\" size=\"icon\" disabled={disabled} aria-label={playing ? 'Pause' : 'Play'} onClick={toggle}>\n <PlaybackIcon />\n </Button>\n <Button type=\"button\" variant=\"ghost\" size=\"icon\" disabled={disabled} aria-label={isMuted ? 'Unmute' : 'Mute'} onClick={toggleMute}>\n <VolumeIcon />\n </Button>\n </div>\n <Button type=\"button\" variant=\"ghost\" size=\"icon\" disabled={disabled} aria-label=\"Fullscreen\" onClick={requestFullscreen}>\n <IconMaximize />\n </Button>\n </div>\n </div>\n </div>\n );\n};\n","import { Accordion as BaseAccordion } from '@base-ui/react/accordion';\nimport { cn } from '@edyn/ui/lib/utils';\nimport type * as React from 'react';\n\nexport interface IAccordionProps {\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (value: string[]) => void;\n multiple?: boolean;\n className?: string;\n children: React.ReactNode;\n}\n\nexport const Accordion = ({ value, defaultValue, onValueChange, multiple = false, className, children }: IAccordionProps) => (\n <BaseAccordion.Root\n data-slot=\"accordion\"\n value={value}\n defaultValue={defaultValue}\n onValueChange={(next) => {\n onValueChange?.(next as string[]);\n }}\n multiple={multiple}\n className={cn('w-full', className)}\n >\n {children}\n </BaseAccordion.Root>\n);\n\nexport interface IAccordionItemProps {\n value: string;\n disabled?: boolean;\n className?: string;\n children: React.ReactNode;\n}\n\nexport const AccordionItem = ({ value, disabled, className, children }: IAccordionItemProps) => (\n <BaseAccordion.Item data-slot=\"accordion-item\" value={value} disabled={disabled} className={cn('border-b border-border', className)}>\n {children}\n </BaseAccordion.Item>\n);\n\nexport interface IAccordionTriggerProps {\n className?: string;\n children: React.ReactNode;\n}\n\nconst focusSiblingTrigger = (event: React.KeyboardEvent<HTMLButtonElement>): void => {\n const keys = ['ArrowDown', 'ArrowUp', 'Home', 'End'];\n if (!keys.includes(event.key)) {\n return;\n }\n\n const root = event.currentTarget.closest('[data-slot=\"accordion\"]');\n const triggers = Array.from(root?.querySelectorAll<HTMLButtonElement>('[data-slot=\"accordion-trigger\"]:not(:disabled)') ?? []);\n const currentIndex = triggers.indexOf(event.currentTarget);\n if (currentIndex < 0 || triggers.length === 0) {\n return;\n }\n\n event.preventDefault();\n let nextIndex = currentIndex;\n if (event.key === 'Home') {\n nextIndex = 0;\n } else if (event.key === 'End') {\n nextIndex = triggers.length - 1;\n } else if (event.key === 'ArrowDown') {\n nextIndex = (currentIndex + 1) % triggers.length;\n } else if (event.key === 'ArrowUp') {\n nextIndex = (currentIndex - 1 + triggers.length) % triggers.length;\n }\n triggers[nextIndex]?.focus();\n};\n\nexport const AccordionTrigger = ({ className, children }: IAccordionTriggerProps) => (\n <BaseAccordion.Header data-slot=\"accordion-header\" className=\"flex\">\n <BaseAccordion.Trigger\n data-slot=\"accordion-trigger\"\n onKeyDown={focusSiblingTrigger}\n className={cn('flex flex-1 items-center justify-between py-4 text-sm font-medium transition-all hover:underline', className)}\n >\n {children}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"size-4 shrink-0 text-muted-foreground\"\n data-expand-chevron=\"flip\"\n aria-hidden=\"true\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </BaseAccordion.Trigger>\n </BaseAccordion.Header>\n);\n\nexport interface IAccordionContentProps {\n className?: string;\n children: React.ReactNode;\n}\n\nexport const AccordionContent = ({ className, children }: IAccordionContentProps) => (\n <BaseAccordion.Panel\n keepMounted\n data-slot=\"accordion-content\"\n data-focus=\"inset\"\n // The height transition between Base UI's measured --accordion-panel-height\n // and 0 is what it detects and orchestrates; it lives in @edyn/theme/motion.css\n // so Collapsible and Accordion share one motion.\n className={cn('text-sm', className)}\n >\n <div className=\"pb-4 pt-0\">{children}</div>\n </BaseAccordion.Panel>\n);\n","import { cn } from '@edyn/ui/lib/utils';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport type * as React from 'react';\n\nconst alertVariants = cva(\n \"group/alert relative grid w-full gap-0.5 rounded-lg border px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: 'bg-card text-card-foreground',\n destructive: 'bg-card text-destructive *:data-[slot=alert-description]:text-destructive *:[svg]:text-current',\n success: 'bg-card text-success *:data-[slot=alert-description]:text-success *:[svg]:text-current',\n warning: 'bg-card text-warning *:data-[slot=alert-description]:text-warning *:[svg]:text-current',\n info: 'bg-card text-info *:data-[slot=alert-description]:text-info *:[svg]:text-current',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nexport const Alert = ({ className, variant, ...props }: React.ComponentProps<'div'> & VariantProps<typeof alertVariants>) => {\n return <div data-slot=\"alert\" role=\"alert\" className={cn(alertVariants({ variant }), className)} {...props} />;\n};\n\nexport const AlertTitle = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn('font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground', className)}\n {...props}\n />\n );\n};\n\nexport const AlertDescription = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n 'text-sm text-balance text-muted-foreground md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const AlertAction = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"alert-action\" className={cn('absolute top-2.5 right-2', className)} {...props} />;\n};\n","import { AlertDialog as AlertDialogPrimitive } from '@base-ui/react/alert-dialog';\nimport { cn } from '@edyn/ui/lib/utils';\nimport type * as React from 'react';\n\nimport { Button } from '../button';\n\nexport const AlertDialog = ({ ...props }: AlertDialogPrimitive.Root.Props) => {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />;\n};\n\nexport const AlertDialogTrigger = ({ ...props }: AlertDialogPrimitive.Trigger.Props) => {\n return <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />;\n};\n\nexport const AlertDialogPortal = ({ ...props }: AlertDialogPrimitive.Portal.Props) => {\n return <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />;\n};\n\nexport const AlertDialogOverlay = ({ className, ...props }: AlertDialogPrimitive.Backdrop.Props) => {\n return (\n <AlertDialogPrimitive.Backdrop\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n 'fixed inset-0 isolate z-50 bg-overlay duration-100 motion-reduce:animate-none supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const AlertDialogContent = ({\n className,\n size = 'default',\n ...props\n}: AlertDialogPrimitive.Popup.Props & {\n size?: 'default' | 'sm';\n}) => {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Popup\n data-slot=\"alert-dialog-content\"\n data-size={size}\n className={cn(\n 'group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-popover-foreground ring-1 ring-foreground/10 duration-100 motion-reduce:animate-none outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95',\n className,\n )}\n {...props}\n />\n </AlertDialogPortal>\n );\n};\n\nexport const AlertDialogHeader = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\n 'grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const AlertDialogFooter = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n '-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const AlertDialogMedia = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"alert-dialog-media\"\n className={cn(\n \"mb-2 inline-flex size-10 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-6\",\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const AlertDialogTitle = ({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Title>) => {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\n 'font-heading text-base font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const AlertDialogDescription = ({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Description>) => {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\n 'text-sm text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const AlertDialogAction = ({ className, ...props }: React.ComponentProps<typeof Button>) => {\n return <Button data-slot=\"alert-dialog-action\" className={cn(className)} {...props} />;\n};\n\nexport const AlertDialogCancel = ({\n className,\n variant = 'outline',\n size = 'default',\n ...props\n}: AlertDialogPrimitive.Close.Props & Pick<React.ComponentProps<typeof Button>, 'variant' | 'size'>) => {\n return (\n <AlertDialogPrimitive.Close\n data-slot=\"alert-dialog-cancel\"\n className={cn(className)}\n render={<Button variant={variant} size={size} />}\n {...props}\n />\n );\n};\n","import { cn } from '@edyn/ui/lib/utils';\n\nexport const AspectRatio = ({ ratio, className, ...props }: React.ComponentProps<'div'> & { ratio: number }) => {\n return (\n <div\n data-slot=\"aspect-ratio\"\n style={\n {\n '--ratio': ratio,\n } as React.CSSProperties\n }\n className={cn('relative aspect-(--ratio)', className)}\n {...props}\n />\n );\n};\n","import { mergeProps } from '@base-ui/react/merge-props';\nimport { useRender } from '@base-ui/react/use-render';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport type * as React from 'react';\n\nimport { Button } from '../button';\n\nconst attachmentVariants = cva(\n 'group/attachment relative flex w-fit max-w-full min-w-0 shrink-0 flex-wrap rounded-xl border bg-card text-card-foreground transition-colors focus-within:ring-1 focus-within:ring-ring/50 has-[>a,>button]:hover:bg-muted/50 data-[state=error]:border-destructive/30 data-[state=idle]:border-dashed',\n {\n variants: {\n size: {\n default:\n 'gap-2 text-sm has-data-[slot=attachment-content]:px-2.5 has-data-[slot=attachment-content]:py-2 has-data-[slot=attachment-media]:p-2',\n sm: 'gap-2.5 text-xs has-data-[slot=attachment-content]:px-2 has-data-[slot=attachment-content]:py-1.5 has-data-[slot=attachment-media]:p-1.5',\n xs: 'gap-1.5 rounded-lg text-xs has-data-[slot=attachment-content]:px-1.5 has-data-[slot=attachment-content]:py-1 has-data-[slot=attachment-media]:p-1',\n },\n orientation: {\n horizontal: 'min-w-40 items-center',\n vertical: 'w-24 flex-col has-data-[slot=attachment-content]:w-30',\n },\n },\n },\n);\n\nexport const Attachment = ({\n className,\n state = 'done',\n size = 'default',\n orientation = 'horizontal',\n ...props\n}: React.ComponentProps<'div'> &\n VariantProps<typeof attachmentVariants> & {\n state?: 'idle' | 'uploading' | 'processing' | 'error' | 'done';\n }) => {\n return (\n <div\n data-slot=\"attachment\"\n data-state={state}\n data-size={size}\n data-orientation={orientation}\n className={cn(attachmentVariants({ size, orientation }), className)}\n {...props}\n />\n );\n};\n\nconst attachmentMediaVariants = cva(\n \"relative flex aspect-square w-10 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-muted text-foreground group-data-[orientation=vertical]/attachment:w-full group-data-[size=sm]/attachment:w-8 group-data-[size=xs]/attachment:w-7 group-data-[size=xs]/attachment:rounded-md group-data-[state=error]/attachment:bg-destructive/10 group-data-[state=error]/attachment:text-destructive group-data-[orientation=vertical]/attachment:*:data-[slot=spinner]:size-6! [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 group-data-[orientation=vertical]/attachment:[&_svg:not([class*='size-'])]:size-6 group-data-[size=xs]/attachment:[&_svg:not([class*='size-'])]:size-3.5\",\n {\n variants: {\n variant: {\n icon: '',\n image:\n 'opacity-60 group-data-[state=done]/attachment:opacity-100 group-data-[state=idle]/attachment:opacity-100 *:[img]:aspect-square *:[img]:w-full *:[img]:object-cover',\n },\n },\n defaultVariants: {\n variant: 'icon',\n },\n },\n);\n\nexport const AttachmentMedia = ({\n className,\n variant = 'icon',\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof attachmentMediaVariants>) => {\n return <div data-slot=\"attachment-media\" data-variant={variant} className={cn(attachmentMediaVariants({ variant }), className)} {...props} />;\n};\n\nexport const AttachmentContent = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"attachment-content\"\n className={cn('max-w-full min-w-0 flex-1 leading-tight group-data-[orientation=vertical]/attachment:px-1', className)}\n {...props}\n />\n );\n};\n\nexport const AttachmentTitle = ({ className, ...props }: React.ComponentProps<'span'>) => {\n return (\n <span\n data-slot=\"attachment-title\"\n className={cn(\n 'block max-w-full min-w-0 truncate font-medium group-data-[state=processing]/attachment:shimmer group-data-[state=uploading]/attachment:shimmer',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const AttachmentDescription = ({ className, ...props }: React.ComponentProps<'span'>) => {\n return (\n <span\n data-slot=\"attachment-description\"\n className={cn(\n 'mt-0.5 block min-w-0 truncate text-xs text-muted-foreground group-data-[state=error]/attachment:text-destructive',\n 'max-w-full',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const AttachmentActions = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"attachment-actions\"\n className={cn(\n 'relative z-20 flex shrink-0 items-center group-data-[orientation=vertical]/attachment:absolute group-data-[orientation=vertical]/attachment:top-3 group-data-[orientation=vertical]/attachment:right-3 group-data-[orientation=vertical]/attachment:gap-1',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const AttachmentAction = ({ className, variant, size = 'icon-xs', ...props }: React.ComponentProps<typeof Button>) => {\n return <Button data-slot=\"attachment-action\" variant={variant ?? 'ghost'} size={size} className={cn(className)} {...props} />;\n};\n\nexport const AttachmentTrigger = ({ className, render, type, ...props }: useRender.ComponentProps<'button'>) => {\n return useRender({\n defaultTagName: 'button',\n props: mergeProps<'button'>(\n {\n type: render ? type : (type ?? 'button'),\n className: cn('absolute inset-0 z-10 outline-none', className),\n },\n props,\n ),\n render,\n state: {\n slot: 'attachment-trigger',\n },\n });\n};\n\nexport const AttachmentGroup = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"attachment-group\"\n className={cn(\n 'flex min-w-0 scroll-fade-x snap-x snap-mandatory scroll-px-1 scrollbar-none gap-3 overflow-x-auto overscroll-x-contain py-1 *:data-[slot=attachment]:flex-none *:data-[slot=attachment]:snap-start',\n className,\n )}\n {...props}\n />\n );\n};\n","import { mergeProps } from '@base-ui/react/merge-props';\nimport { useRender } from '@base-ui/react/use-render';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nexport const badgeVariants = cva(\n 'group/badge inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent text-xs font-medium whitespace-nowrap transition-all motion-reduce:transition-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground [a]:hover:bg-primary/80',\n secondary: 'bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80',\n destructive:\n 'bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20',\n success: 'bg-success-ring/40 text-success focus-visible:ring-success/20 [a]:hover:bg-success-ring/60 dark:bg-success-ring/30',\n warning: 'bg-warning-ring/40 text-warning focus-visible:ring-warning/20 [a]:hover:bg-warning-ring/60 dark:bg-warning-ring/30',\n info: 'bg-info-ring/40 text-info focus-visible:ring-info/20 [a]:hover:bg-info-ring/60 dark:bg-info-ring/30',\n outline: 'border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground',\n ghost: 'hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-5 rounded-4xl px-2 py-0.5',\n lg: 'h-7 rounded-md px-2 py-1',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nexport const Badge = ({\n className,\n variant = 'default',\n size = 'default',\n render,\n ...props\n}: useRender.ComponentProps<'span'> & VariantProps<typeof badgeVariants>) => {\n return useRender({\n defaultTagName: 'span',\n props: mergeProps<'span'>(\n {\n className: cn(badgeVariants({ variant, size }), className),\n },\n props,\n ),\n render,\n state: {\n slot: 'badge',\n variant,\n size,\n },\n });\n};\n","import { mergeProps } from '@base-ui/react/merge-props';\nimport { useRender } from '@base-ui/react/use-render';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { IconChevronRight, IconDots } from '@tabler/icons-react';\nimport type * as React from 'react';\n\nexport const Breadcrumb = ({ className, ...props }: React.ComponentProps<'nav'>) => {\n return <nav aria-label=\"breadcrumb\" data-slot=\"breadcrumb\" className={cn(className)} {...props} />;\n};\n\nexport const BreadcrumbList = ({ className, ...props }: React.ComponentProps<'ol'>) => {\n return (\n <ol\n data-slot=\"breadcrumb-list\"\n className={cn('flex flex-wrap items-center gap-1.5 text-sm wrap-break-word text-muted-foreground', className)}\n {...props}\n />\n );\n};\n\nexport const BreadcrumbItem = ({ className, ...props }: React.ComponentProps<'li'>) => {\n return <li data-slot=\"breadcrumb-item\" className={cn('inline-flex items-center gap-1', className)} {...props} />;\n};\n\nexport const BreadcrumbLink = ({ className, render, ...props }: useRender.ComponentProps<'a'>) => {\n return useRender({\n defaultTagName: 'a',\n props: mergeProps<'a'>(\n {\n className: cn('transition-colors hover:text-foreground', className),\n },\n props,\n ),\n render,\n state: {\n slot: 'breadcrumb-link',\n },\n });\n};\n\nexport const BreadcrumbPage = ({ className, ...props }: React.ComponentProps<'span'>) => {\n return (\n // biome-ignore lint/a11y/useFocusableInteractive: matches shadcn pattern; the current page is not an interactive target\n // biome-ignore lint/a11y/useSemanticElements: <span> is intentional; role=\"link\" here only conveys visual/semantic context, not an actual navigable link\n <span\n data-slot=\"breadcrumb-page\"\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn('font-normal text-foreground', className)}\n {...props}\n />\n );\n};\n\nexport const BreadcrumbSeparator = ({ children, className, ...props }: React.ComponentProps<'li'>) => {\n return (\n <li data-slot=\"breadcrumb-separator\" role=\"presentation\" aria-hidden=\"true\" className={cn('[&>svg]:size-3.5', className)} {...props}>\n {children ?? <IconChevronRight />}\n </li>\n );\n};\n\nexport const BreadcrumbEllipsis = ({ className, ...props }: React.ComponentProps<'span'>) => {\n return (\n <span\n data-slot=\"breadcrumb-ellipsis\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('flex size-5 items-center justify-center [&>svg]:size-4', className)}\n {...props}\n >\n <IconDots />\n <span className=\"sr-only\">More</span>\n </span>\n );\n};\n","import { mergeProps } from '@base-ui/react/merge-props';\nimport { useRender } from '@base-ui/react/use-render';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport type * as React from 'react';\n\nexport const BubbleGroup = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"bubble-group\" className={cn('flex min-w-0 flex-col gap-2', className)} {...props} />;\n};\n\nconst bubbleVariants = cva(\n 'group/bubble relative flex w-fit max-w-[80%] min-w-0 flex-col gap-1 group-data-[align=end]/message:self-end data-[align=end]:self-end data-[variant=ghost]:max-w-full',\n {\n variants: {\n variant: {\n default:\n '*:data-[slot=bubble-content]:bg-primary *:data-[slot=bubble-content]:text-primary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-primary/80',\n secondary:\n '*:data-[slot=bubble-content]:bg-secondary *:data-[slot=bubble-content]:text-secondary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)]',\n muted:\n '*:data-[slot=bubble-content]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--muted),var(--foreground)_5%)]',\n tinted:\n '*:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.93_calc(c*0.4)_h)] *:data-[slot=bubble-content]:text-foreground dark:*:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.3_calc(c*0.4)_h)] [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.88_calc(c*0.5)_h)] dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.35_calc(c*0.5)_h)]',\n outline:\n '*:data-[slot=bubble-content]:border-border *:data-[slot=bubble-content]:bg-background [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-input/30',\n ghost:\n 'border-none *:data-[slot=bubble-content]:rounded-none *:data-[slot=bubble-content]:bg-transparent *:data-[slot=bubble-content]:p-0 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted/50',\n destructive:\n '*:data-[slot=bubble-content]:bg-destructive/10 *:data-[slot=bubble-content]:text-destructive dark:*:data-[slot=bubble-content]:bg-destructive/20 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/20 dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/30',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nexport const Bubble = ({\n variant = 'default',\n align = 'start',\n className,\n ...props\n}: React.ComponentProps<'div'> &\n VariantProps<typeof bubbleVariants> & {\n align?: 'start' | 'end';\n }) => {\n return <div data-slot=\"bubble\" data-variant={variant} data-align={align} className={cn(bubbleVariants({ variant }), className)} {...props} />;\n};\n\nexport const BubbleContent = ({ className, render, ...props }: useRender.ComponentProps<'div'>) => {\n return useRender({\n defaultTagName: 'div',\n props: mergeProps<'div'>(\n {\n className: cn(\n 'w-fit max-w-full min-w-0 overflow-hidden rounded-xl border border-transparent px-3 py-2 text-sm leading-relaxed wrap-break-word group-data-[align=end]/bubble:self-end [button]:text-left [button,a]:transition-colors [button,a]:outline-none [button,a]:focus-visible:border-ring [button,a]:focus-visible:ring-3 [button,a]:focus-visible:ring-ring/50',\n className,\n ),\n },\n props,\n ),\n render,\n state: {\n slot: 'bubble-content',\n },\n });\n};\n\nconst bubbleReactionsVariants = cva(\n 'absolute z-10 flex w-fit shrink-0 items-center justify-center gap-1 rounded-full bg-muted px-1.5 py-0.5 text-sm ring-3 ring-card has-[button]:p-0',\n {\n variants: {\n side: {\n top: 'top-0 -translate-y-3/4',\n bottom: 'bottom-0 translate-y-3/4',\n },\n align: {\n start: 'left-3',\n end: 'right-3',\n },\n },\n defaultVariants: {\n side: 'bottom',\n align: 'end',\n },\n },\n);\n\nexport const BubbleReactions = ({\n side = 'bottom',\n align = 'end',\n className,\n ...props\n}: React.ComponentProps<'div'> & {\n align?: 'start' | 'end';\n side?: 'top' | 'bottom';\n}) => {\n return (\n <div\n data-slot=\"bubble-reactions\"\n data-align={align}\n data-side={side}\n className={cn(bubbleReactionsVariants({ side, align }), className)}\n {...props}\n />\n );\n};\n","import { cn } from '@edyn/ui/lib/utils';\nimport * as React from 'react';\n\nexport type TButtonGroupOrientation = 'horizontal' | 'vertical';\n\nexport interface IButtonGroupProps extends React.ComponentProps<'div'> {\n orientation?: TButtonGroupOrientation;\n}\n\nconst ButtonGroupContext = React.createContext<TButtonGroupOrientation>('horizontal');\n\nexport const ButtonGroup = ({ className, orientation = 'horizontal', ...props }: IButtonGroupProps) => {\n return (\n <ButtonGroupContext.Provider value={orientation}>\n <div\n data-slot=\"button-group\"\n data-orientation={orientation}\n className={cn(\n 'inline-flex items-center',\n '[&>*:not(:first-child):not(:last-child)]:rounded-none',\n 'data-[orientation=horizontal]:[&>*:first-child]:rounded-r-none',\n 'data-[orientation=horizontal]:[&>*:last-child]:rounded-l-none',\n 'data-[orientation=horizontal]:[&>*:not(:first-child)]:-ml-px',\n 'data-[orientation=vertical]:flex-col',\n 'data-[orientation=vertical]:[&>*:first-child]:rounded-b-none',\n 'data-[orientation=vertical]:[&>*:last-child]:rounded-t-none',\n 'data-[orientation=vertical]:[&>*:not(:first-child)]:-mt-px',\n '[&>*]:relative [&>*]:z-0 [&>*:focus-visible]:z-10 [&>*:hover]:z-10',\n className,\n )}\n {...props}\n />\n </ButtonGroupContext.Provider>\n );\n};\n\nexport interface IButtonGroupSeparatorProps extends React.ComponentProps<'span'> {}\n\nexport const ButtonGroupSeparator = ({ className, ...props }: IButtonGroupSeparatorProps) => {\n const orientation = React.useContext(ButtonGroupContext);\n\n return (\n // biome-ignore lint/a11y/useFocusableInteractive: decorative visual divider between buttons; not an interactive widget\n // biome-ignore lint/a11y/useSemanticElements: <span> is intentional; no semantic HTML equivalent for an inline button-group separator\n <span\n data-slot=\"button-group-separator\"\n // biome-ignore lint/a11y/useAriaPropsForRole: aria-valuenow applies only when separator acts as a range slider; this is a static divider\n role=\"separator\"\n // The separator runs perpendicular to the group's axis.\n aria-orientation={orientation === 'horizontal' ? 'vertical' : 'horizontal'}\n className={cn(\n 'inline-flex shrink-0 self-stretch bg-border',\n 'in-data-[orientation=horizontal]:w-px',\n 'in-data-[orientation=vertical]:h-px in-data-[orientation=vertical]:self-auto in-data-[orientation=vertical]:w-full',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport interface IButtonGroupTextProps extends React.ComponentProps<'span'> {}\n\nexport const ButtonGroupText = ({ className, ...props }: IButtonGroupTextProps) => {\n return (\n <span\n data-slot=\"button-group-text\"\n className={cn(\n 'inline-flex shrink-0 items-center justify-center rounded-none border border-border bg-muted px-2.5 text-sm text-muted-foreground select-none',\n className,\n )}\n {...props}\n />\n );\n};\n","import { cn } from '@edyn/ui/lib/utils';\nimport type * as React from 'react';\n\nexport const Card = ({ className, size = 'default', ...props }: React.ComponentProps<'div'> & { size?: 'default' | 'sm' }) => {\n return (\n <div\n data-slot=\"card\"\n data-size={size}\n className={cn(\n 'group/card flex flex-col gap-4 overflow-hidden rounded-xl bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const CardHeader = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n 'group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const CardTitle = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"card-title\" className={cn('text-base leading-snug font-medium group-data-[size=sm]/card:text-sm', className)} {...props} />;\n};\n\nexport const CardDescription = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"card-description\" className={cn('text-sm text-muted-foreground', className)} {...props} />;\n};\n\nexport const CardAction = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"card-action\" className={cn('col-start-2 row-span-2 row-start-1 self-start justify-self-end', className)} {...props} />;\n};\n\nexport const CardContent = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"card-content\" className={cn('px-4 group-data-[size=sm]/card:px-3', className)} {...props} />;\n};\n\nexport const CardFooter = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn('flex items-center rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/card:p-3', className)}\n {...props}\n />\n );\n};\n","'use client';\n\nimport { cn } from '@edyn/ui/lib/utils';\nimport { IconChevronLeft, IconChevronRight } from '@tabler/icons-react';\nimport useEmblaCarousel, { type UseEmblaCarouselType } from 'embla-carousel-react';\nimport * as React from 'react';\nimport { Button } from '../button';\n\nexport type TCarouselApi = UseEmblaCarouselType[1];\ntype TUseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype TCarouselOptions = TUseCarouselParameters[0];\ntype TCarouselPlugin = TUseCarouselParameters[1];\n\ntype TCarouselProps = {\n opts?: TCarouselOptions;\n plugins?: TCarouselPlugin;\n orientation?: 'horizontal' | 'vertical';\n setApi?: (api: TCarouselApi) => void;\n};\n\ntype TCarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n} & TCarouselProps;\n\nconst CarouselContext = React.createContext<TCarouselContextProps | null>(null);\n\nexport const useCarousel = () => {\n const context = React.useContext(CarouselContext);\n\n if (!context) {\n throw new Error('useCarousel must be used within a <Carousel />');\n }\n\n return context;\n};\n\nexport const Carousel = ({\n orientation = 'horizontal',\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: React.ComponentProps<'div'> & TCarouselProps) => {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === 'horizontal' ? 'x' : 'y',\n },\n plugins,\n );\n const [canScrollPrev, setCanScrollPrev] = React.useState(false);\n const [canScrollNext, setCanScrollNext] = React.useState(false);\n\n const onSelect = React.useCallback((api: TCarouselApi) => {\n if (!api) {\n return;\n }\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\n }, []);\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev();\n }, [api]);\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext();\n }, [api]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === 'ArrowRight') {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext],\n );\n\n React.useEffect(() => {\n if (!api || !setApi) {\n return;\n }\n setApi(api);\n }, [api, setApi]);\n\n React.useEffect(() => {\n if (!api) {\n return;\n }\n onSelect(api);\n api.on('reInit', onSelect);\n api.on('select', onSelect);\n\n return () => {\n api.off('reInit', onSelect);\n api.off('select', onSelect);\n };\n }, [api, onSelect]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation: orientation || (opts?.axis === 'y' ? 'vertical' : 'horizontal'),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n {/* The generated shadcn carousel deliberately uses ARIA carousel semantics on a div. */}\n {/* biome-ignore lint/a11y/useSemanticElements: section would change the public root element. */}\n <div\n onKeyDownCapture={handleKeyDown}\n className={cn('relative', className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n data-slot=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n};\n\nexport const CarouselContent = ({ className, ...props }: React.ComponentProps<'div'>) => {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div ref={carouselRef} className=\"overflow-hidden\" data-slot=\"carousel-content\" data-focus=\"inset\">\n <div className={cn('flex', orientation === 'horizontal' ? '-ml-4' : '-mt-4 flex-col', className)} {...props} />\n </div>\n );\n};\n\nexport const CarouselItem = ({ className, ...props }: React.ComponentProps<'div'>) => {\n const { orientation } = useCarousel();\n\n return (\n // The generated shadcn carousel deliberately uses the ARIA group role for each slide.\n // biome-ignore lint/a11y/useSemanticElements: fieldset is not an equivalent carousel slide element.\n <div\n role=\"group\"\n aria-roledescription=\"slide\"\n data-slot=\"carousel-item\"\n className={cn('min-w-0 shrink-0 grow-0 basis-full', orientation === 'horizontal' ? 'pl-4' : 'pt-4', className)}\n {...props}\n />\n );\n};\n\nexport const CarouselPrevious = ({ className, variant = 'outline', size = 'icon-sm', ...props }: React.ComponentProps<typeof Button>) => {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n data-slot=\"carousel-previous\"\n variant={variant}\n size={size}\n className={cn(\n 'absolute touch-manipulation rounded-full',\n orientation === 'horizontal' ? 'inset-y-0 -left-12 my-auto' : '-top-12 left-1/2 -translate-x-1/2 rotate-90',\n className,\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <IconChevronLeft />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n );\n};\n\nexport const CarouselNext = ({ className, variant = 'outline', size = 'icon-sm', ...props }: React.ComponentProps<typeof Button>) => {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n data-slot=\"carousel-next\"\n variant={variant}\n size={size}\n className={cn(\n 'absolute touch-manipulation rounded-full',\n orientation === 'horizontal' ? 'inset-y-0 -right-12 my-auto' : '-bottom-12 left-1/2 -translate-x-1/2 rotate-90',\n className,\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <IconChevronRight />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n );\n};\n","'use client';\n\nimport { cn } from '@edyn/ui/lib/utils';\nimport * as React from 'react';\nimport type { TooltipValueType } from 'recharts';\nimport * as RechartsPrimitive from 'recharts';\n\n// Format: { THEME_NAME: CSS_SELECTOR }\nconst THEMES = { light: '', dark: '.dark' } as const;\n\nconst INITIAL_DIMENSION = { width: 320, height: 200 } as const;\ntype TTooltipName = number | string;\n\nexport type TChartConfig = Record<\n string,\n {\n label?: React.ReactNode;\n icon?: React.ComponentType;\n } & ({ color?: string; theme?: never } | { color?: never; theme: Record<keyof typeof THEMES, string> })\n>;\n\ntype TChartContextProps = {\n config: TChartConfig;\n};\n\nconst ChartContext = React.createContext<TChartContextProps | null>(null);\n\nconst useChart = () => {\n const context = React.useContext(ChartContext);\n\n if (!context) {\n throw new Error('useChart must be used within a <ChartContainer />');\n }\n\n return context;\n};\n\nexport const ChartContainer = ({\n id,\n className,\n children,\n config,\n initialDimension = INITIAL_DIMENSION,\n ...props\n}: React.ComponentProps<'div'> & {\n config: TChartConfig;\n children: React.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>['children'];\n initialDimension?: {\n width: number;\n height: number;\n };\n}) => {\n const uniqueId = React.useId();\n const chartId = `chart-${id ?? uniqueId.replace(/:/g, '')}`;\n const refContainer = React.useRef<HTMLDivElement>(null);\n const [hasSize, setHasSize] = React.useState(false);\n\n React.useLayoutEffect(() => {\n const element = refContainer.current;\n if (!element) {\n return;\n }\n\n const update = () => {\n const { width, height } = element.getBoundingClientRect();\n setHasSize(width > 0 && height > 0);\n };\n\n update();\n const observer = new ResizeObserver(update);\n observer.observe(element);\n return () => observer.disconnect();\n }, []);\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n ref={refContainer}\n data-slot=\"chart\"\n data-chart={chartId}\n className={cn(\n \"flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden\",\n className,\n )}\n {...props}\n >\n <ChartStyle id={chartId} config={config} />\n {hasSize && <RechartsPrimitive.ResponsiveContainer initialDimension={initialDimension}>{children}</RechartsPrimitive.ResponsiveContainer>}\n </div>\n </ChartContext.Provider>\n );\n};\n\nexport const ChartStyle = ({ id, config }: { id: string; config: TChartConfig }) => {\n const colorConfig = Object.entries(config).filter(([, config]) => config.theme ?? config.color);\n\n if (!colorConfig.length) {\n return null;\n }\n\n const css = Object.entries(THEMES)\n .map(\n ([theme, prefix]) => `\n${prefix} [data-chart=${id}] {\n${colorConfig\n .map(([key, itemConfig]) => {\n const color = itemConfig.theme?.[theme as keyof typeof itemConfig.theme] ?? itemConfig.color;\n return color ? ` --color-${key}: ${color};` : null;\n })\n .join('\\n')}\n}\n`,\n )\n .join('\\n');\n\n return <style>{css}</style>;\n};\n\nexport const ChartTooltip = RechartsPrimitive.Tooltip;\n\nexport const ChartTooltipContent = ({\n active,\n payload,\n className,\n indicator = 'dot',\n hideLabel = false,\n hideIndicator = false,\n label,\n labelFormatter,\n labelClassName,\n formatter,\n color,\n nameKey,\n labelKey,\n}: React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\n React.ComponentProps<'div'> & {\n hideLabel?: boolean;\n hideIndicator?: boolean;\n indicator?: 'line' | 'dot' | 'dashed';\n nameKey?: string;\n labelKey?: string;\n } & Omit<RechartsPrimitive.DefaultTooltipContentProps<TooltipValueType, TTooltipName>, 'accessibilityLayer'>) => {\n const { config } = useChart();\n\n const tooltipLabel = React.useMemo(() => {\n if (hideLabel || !payload?.length) {\n return null;\n }\n\n const [item] = payload;\n const key = `${labelKey ?? item?.dataKey ?? item?.name ?? 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const value = !labelKey && typeof label === 'string' ? (config[label]?.label ?? label) : itemConfig?.label;\n\n if (labelFormatter) {\n return <div className={cn('font-medium', labelClassName)}>{labelFormatter(value, payload)}</div>;\n }\n\n if (!value) {\n return null;\n }\n\n return <div className={cn('font-medium', labelClassName)}>{value}</div>;\n }, [label, labelFormatter, payload, hideLabel, labelClassName, config, labelKey]);\n\n if (!active || !payload?.length) {\n return null;\n }\n\n const nestLabel = payload.length === 1 && indicator !== 'dot';\n\n return (\n <div\n className={cn('grid min-w-32 items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl', className)}\n >\n {!nestLabel ? tooltipLabel : null}\n <div className=\"grid gap-1.5\">\n {payload\n .filter((item) => item.type !== 'none')\n .map((item, index) => {\n const key = `${nameKey ?? item.name ?? item.dataKey ?? 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const indicatorColor = color ?? item.payload?.fill ?? item.color;\n\n return (\n <div\n key={`${key}-${String(item.value ?? '')}`}\n className={cn(\n 'flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground',\n indicator === 'dot' && 'items-center',\n )}\n >\n {formatter && item?.value !== undefined && item.name ? (\n formatter(item.value, item.name, item, index, item.payload)\n ) : (\n <>\n {itemConfig?.icon ? (\n <itemConfig.icon />\n ) : (\n !hideIndicator && (\n <div\n className={cn('shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)', {\n 'h-2.5 w-2.5': indicator === 'dot',\n 'w-1': indicator === 'line',\n 'w-0 border-[1.5px] border-dashed bg-transparent': indicator === 'dashed',\n 'my-0.5': nestLabel && indicator === 'dashed',\n })}\n style={\n {\n '--color-bg': indicatorColor,\n '--color-border': indicatorColor,\n } as React.CSSProperties\n }\n />\n )\n )}\n <div className={cn('flex flex-1 justify-between leading-none', nestLabel ? 'items-end' : 'items-center')}>\n <div className=\"grid gap-1.5\">\n {nestLabel ? tooltipLabel : null}\n <span className=\"text-muted-foreground\">{itemConfig?.label ?? item.name}</span>\n </div>\n {item.value != null && (\n <span className=\"font-mono font-medium text-foreground tabular-nums\">\n {typeof item.value === 'number' ? item.value.toLocaleString() : String(item.value)}\n </span>\n )}\n </div>\n </>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n};\n\nexport const ChartLegend = RechartsPrimitive.Legend;\n\nexport const ChartLegendContent = ({\n className,\n hideIcon = false,\n payload,\n verticalAlign = 'bottom',\n nameKey,\n}: React.ComponentProps<'div'> & {\n hideIcon?: boolean;\n nameKey?: string;\n} & RechartsPrimitive.DefaultLegendContentProps) => {\n const { config } = useChart();\n\n if (!payload?.length) {\n return null;\n }\n\n return (\n <div className={cn('flex items-center justify-center gap-4', verticalAlign === 'top' ? 'pb-3' : 'pt-3', className)}>\n {payload\n .filter((item) => item.type !== 'none')\n .map((item) => {\n const key = `${nameKey ?? item.dataKey ?? 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n\n return (\n <div\n key={`${key}-${String(item.value ?? '')}`}\n className={cn('flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground')}\n >\n {itemConfig?.icon && !hideIcon ? (\n <itemConfig.icon />\n ) : (\n <div\n className=\"h-2 w-2 shrink-0 rounded-[2px]\"\n style={{\n backgroundColor: item.color,\n }}\n />\n )}\n {itemConfig?.label}\n </div>\n );\n })}\n </div>\n );\n};\n\nconst getPayloadConfigFromPayload = (config: TChartConfig, payload: unknown, key: string) => {\n if (typeof payload !== 'object' || payload === null) {\n return undefined;\n }\n\n const payloadPayload = 'payload' in payload && typeof payload.payload === 'object' && payload.payload !== null ? payload.payload : undefined;\n\n let configLabelKey: string = key;\n\n if (key in payload && typeof payload[key as keyof typeof payload] === 'string') {\n configLabelKey = payload[key as keyof typeof payload] as string;\n } else if (payloadPayload && key in payloadPayload && typeof payloadPayload[key as keyof typeof payloadPayload] === 'string') {\n configLabelKey = payloadPayload[key as keyof typeof payloadPayload] as string;\n }\n\n return configLabelKey in config ? config[configLabelKey] : config[key];\n};\n","import { Checkbox as CheckboxPrimitive } from '@base-ui/react/checkbox';\n\nimport { cn } from '@edyn/ui/lib/utils';\nimport { IconCheck, IconMinus } from '@tabler/icons-react';\n\nexport const Checkbox = ({ className, ...props }: CheckboxPrimitive.Root.Props) => {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n 'peer relative flex size-4 shrink-0 items-center justify-center rounded-sm border border-input transition-colors outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary',\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"group/checkbox-indicator grid place-content-center text-current transition-none [&>svg]:size-3.5\"\n >\n <IconCheck className=\"group-data-indeterminate/checkbox-indicator:hidden\" />\n <IconMinus className=\"hidden group-data-indeterminate/checkbox-indicator:block\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n};\n","import { Collapsible as CollapsiblePrimitive } from '@base-ui/react/collapsible';\n\nexport const Collapsible = ({ ...props }: CollapsiblePrimitive.Root.Props) => {\n return <CollapsiblePrimitive.Root data-slot=\"collapsible\" {...props} />;\n};\n\nexport const CollapsibleTrigger = ({ ...props }: CollapsiblePrimitive.Trigger.Props) => {\n return <CollapsiblePrimitive.Trigger data-slot=\"collapsible-trigger\" {...props} />;\n};\n\nexport const CollapsibleContent = ({ ...props }: CollapsiblePrimitive.Panel.Props) => {\n return <CollapsiblePrimitive.Panel data-slot=\"collapsible-content\" data-focus=\"inset\" {...props} />;\n};\n","import { Combobox as ComboboxPrimitive } from '@base-ui/react/combobox';\nimport { POPUP_ITEM_INDICATOR_CLASS, popupItemClass } from '@edyn/ui/lib/popup-list';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { IconCheck, IconChevronDown } from '@tabler/icons-react';\nimport type { ReactNode } from 'react';\nimport { ScrollArea } from '../scroll-area';\n\nexport const Combobox = <TValue,>({ ...props }: ComboboxPrimitive.Root.Props<TValue>) => {\n return <ComboboxPrimitive.Root data-slot=\"combobox\" {...props} />;\n};\n\nexport const ComboboxInput = ({ className, ...props }: ComboboxPrimitive.Input.Props) => {\n return (\n <ComboboxPrimitive.InputGroup data-slot=\"combobox-input-group\" className=\"relative flex w-full items-center\">\n <ComboboxPrimitive.Input\n data-slot=\"combobox-input\"\n className={cn(\n 'h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 pr-8 text-base transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40',\n className,\n )}\n {...props}\n />\n <ComboboxPrimitive.Trigger\n data-slot=\"combobox-trigger\"\n className=\"absolute right-2 flex items-center text-muted-foreground disabled:pointer-events-none disabled:opacity-50\"\n tabIndex={-1}\n aria-hidden\n >\n <IconChevronDown className=\"size-4\" />\n </ComboboxPrimitive.Trigger>\n </ComboboxPrimitive.InputGroup>\n );\n};\n\nexport interface IComboboxContentProps extends Omit<ComboboxPrimitive.Popup.Props, 'children'> {\n /** Item nodes, or the Base UI function form `(item, index) => node` (requires `items` on the root). */\n children?: ComboboxPrimitive.List.Props['children'];\n /** Empty-state content; rendered (with the default text) only when the filtered list is empty. */\n empty?: ReactNode;\n /** Optional portal destination, used by shadow-DOM element wrappers. */\n portalContainer?: ComboboxPrimitive.Portal.Props['container'];\n}\n\nexport const ComboboxContent = ({ className, children, empty, portalContainer, ...props }: IComboboxContentProps) => {\n return (\n <ComboboxPrimitive.Portal data-slot=\"combobox-portal\" container={portalContainer}>\n <ComboboxPrimitive.Positioner data-slot=\"combobox-positioner\" sideOffset={4} className=\"z-50\">\n <ComboboxPrimitive.Popup\n data-slot=\"combobox-content\"\n className={cn(\n 'min-w-[var(--anchor-width)] overflow-hidden rounded-lg border border-border bg-popover text-popover-foreground shadow-md outline-none motion-reduce:animate-none data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95',\n className,\n )}\n {...props}\n >\n <ComboboxEmpty>{empty}</ComboboxEmpty>\n {/* The ScrollArea, not the List, is the scroll container: a filtered list\n that runs past the fold needs a bar and a fade to say so. Base UI\n keeps the highlighted item in view through the nearest scrollable\n ancestor, which is now the viewport. */}\n <ScrollArea type=\"always\" fade fadeFrom=\"popover\" className=\"max-h-60\">\n <ComboboxPrimitive.List data-slot=\"combobox-list\" className=\"p-1\">\n {children}\n </ComboboxPrimitive.List>\n </ScrollArea>\n </ComboboxPrimitive.Popup>\n </ComboboxPrimitive.Positioner>\n </ComboboxPrimitive.Portal>\n );\n};\n\nexport const ComboboxItem = ({ className, children, ...props }: ComboboxPrimitive.Item.Props) => {\n return (\n <ComboboxPrimitive.Item data-slot=\"combobox-item\" className={cn(popupItemClass('base-ui', true), className)} {...props}>\n <span className=\"flex-1\">{children}</span>\n <ComboboxPrimitive.ItemIndicator data-slot=\"combobox-item-indicator\" className={POPUP_ITEM_INDICATOR_CLASS}>\n <IconCheck className=\"size-3.5\" />\n </ComboboxPrimitive.ItemIndicator>\n </ComboboxPrimitive.Item>\n );\n};\n\nexport const ComboboxEmpty = ({ className, children, ...props }: ComboboxPrimitive.Empty.Props) => {\n return (\n <ComboboxPrimitive.Empty\n data-slot=\"combobox-empty\"\n // empty:py-0 collapses the padding while the list has results: Base UI\n // keeps this status element mounted and only fills it when the list is\n // empty (and only when the root has `items` to derive emptiness from).\n className={cn('py-4 text-center text-sm text-muted-foreground empty:py-0', className)}\n {...props}\n >\n {children ?? 'No results found.'}\n </ComboboxPrimitive.Empty>\n );\n};\n","import { Dialog as DialogPrimitive } from '@base-ui/react/dialog';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { IconX } from '@tabler/icons-react';\nimport type * as React from 'react';\nimport { Button } from '../button';\n\nexport const Dialog = ({ ...props }: DialogPrimitive.Root.Props) => {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n};\n\nexport const DialogTrigger = ({ ...props }: DialogPrimitive.Trigger.Props) => {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n};\n\nexport const DialogPortal = ({ ...props }: DialogPrimitive.Portal.Props) => {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n};\n\nexport const DialogClose = ({ ...props }: DialogPrimitive.Close.Props) => {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n};\n\nexport const DialogOverlay = ({ className, ...props }: DialogPrimitive.Backdrop.Props) => {\n return (\n <DialogPrimitive.Backdrop\n data-slot=\"dialog-overlay\"\n className={cn(\n 'fixed inset-0 isolate z-50 bg-overlay duration-100 motion-reduce:animate-none supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const DialogContent = ({\n className,\n children,\n showCloseButton = true,\n ...props\n}: DialogPrimitive.Popup.Props & {\n showCloseButton?: boolean;\n}) => {\n return (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Popup\n data-slot=\"dialog-content\"\n className={cn(\n 'fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 motion-reduce:animate-none outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95',\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close data-slot=\"dialog-close\" render={<Button variant=\"ghost\" className=\"absolute top-2 right-2\" size=\"icon-sm\" />}>\n <IconX />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Popup>\n </DialogPortal>\n );\n};\n\nexport const DialogHeader = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"dialog-header\" className={cn('flex flex-col gap-2', className)} {...props} />;\n};\n\nexport const DialogFooter = ({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n showCloseButton?: boolean;\n}) => {\n return (\n <div data-slot=\"dialog-footer\" className={cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end', className)} {...props}>\n {children}\n {showCloseButton && <DialogPrimitive.Close render={<Button variant=\"outline\" />}>Close</DialogPrimitive.Close>}\n </div>\n );\n};\n\nexport const DialogTitle = ({ className, ...props }: DialogPrimitive.Title.Props) => {\n return <DialogPrimitive.Title data-slot=\"dialog-title\" className={cn('text-base leading-none font-medium', className)} {...props} />;\n};\n\nexport const DialogDescription = ({ className, ...props }: DialogPrimitive.Description.Props) => {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn('text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground', className)}\n {...props}\n />\n );\n};\n","import { Input as InputPrimitive } from '@base-ui/react/input';\nimport { cn } from '@edyn/ui/lib/utils';\nimport type * as React from 'react';\n\nexport const Input = ({ className, type, ...props }: React.ComponentProps<'input'>) => {\n return (\n <InputPrimitive\n type={type}\n data-slot=\"input\"\n className={cn(\n 'h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40',\n className,\n )}\n {...props}\n />\n );\n};\n","import { cn } from '@edyn/ui/lib/utils';\nimport type * as React from 'react';\n\nexport const Textarea = ({ className, ...props }: React.ComponentProps<'textarea'>) => {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n 'block min-h-16 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1.5 text-base transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 field-sizing-content resize-y md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40',\n className,\n )}\n {...props}\n />\n );\n};\n","import { cn } from '@edyn/ui/lib/utils';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport type * as React from 'react';\nimport { Button } from '../button/button';\nimport { Input } from '../input/input';\nimport { Textarea } from '../textarea/textarea';\n\nexport interface IInputGroupProps extends React.ComponentProps<'div'> {}\n\nexport const InputGroup = ({ className, ...props }: IInputGroupProps) => {\n return (\n <div\n data-slot=\"input-group\"\n className={cn(\n 'group/input-group relative flex h-8 w-full min-w-0 items-center rounded-lg border border-input transition-colors outline-none',\n 'has-disabled:bg-input/50 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50',\n 'has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 dark:bg-input/30 dark:has-disabled:bg-input/80 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40',\n 'has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto',\n 'has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport type TInputGroupAddonAlign = 'inline-start' | 'inline-end' | 'block-start' | 'block-end';\n\nconst inputGroupAddonVariants = cva(\n \"flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-foreground/70 select-none [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n align: {\n 'inline-start': 'order-first pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem]',\n 'inline-end': 'order-last pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem]',\n 'block-start': 'order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2',\n 'block-end': 'order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2',\n },\n },\n defaultVariants: {\n align: 'inline-start',\n },\n },\n);\n\nexport interface IInputGroupAddonProps extends React.ComponentProps<'div'>, VariantProps<typeof inputGroupAddonVariants> {}\n\nexport const InputGroupAddon = ({ className, align = 'inline-start', ...props }: IInputGroupAddonProps) => {\n return (\n <div\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onPointerDown={(event) => {\n if ((event.target as HTMLElement).closest('button')) {\n return;\n }\n event.currentTarget.parentElement?.querySelector('input')?.focus();\n }}\n {...props}\n />\n );\n};\n\nconst inputGroupButtonVariants = cva('flex items-center gap-2 text-sm shadow-none', {\n variants: {\n size: {\n xs: \"h-6 gap-1 rounded-[calc(var(--radius)-3px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5\",\n sm: '',\n 'icon-xs': 'size-6 rounded-[calc(var(--radius)-3px)] p-0 has-[>svg]:p-0',\n 'icon-sm': 'size-8 p-0 has-[>svg]:p-0',\n },\n },\n defaultVariants: {\n size: 'xs',\n },\n});\n\nexport type TInputGroupButtonProps = Omit<React.ComponentProps<typeof Button>, 'size' | 'type'> &\n VariantProps<typeof inputGroupButtonVariants> & {\n type?: 'button' | 'submit' | 'reset';\n };\n\nexport const InputGroupButton = ({ className, type = 'button', variant = 'ghost', size = 'xs', ...props }: TInputGroupButtonProps) => {\n return <Button type={type} data-size={size} variant={variant} className={cn(inputGroupButtonVariants({ size }), className)} {...props} />;\n};\n\nexport const InputGroupText = ({ className, ...props }: React.ComponentProps<'span'>) => {\n return (\n <span\n className={cn(\"flex items-center gap-2 text-sm text-foreground/70 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\", className)}\n {...props}\n />\n );\n};\n\nexport interface IInputGroupInputProps extends React.ComponentProps<'input'> {}\n\nexport const InputGroupInput = ({ className, ...props }: IInputGroupInputProps) => {\n return (\n <Input\n data-slot=\"input-group-control\"\n className={cn(\n 'flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const InputGroupTextarea = ({ className, ...props }: React.ComponentProps<'textarea'>) => {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(\n 'flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent',\n className,\n )}\n {...props}\n />\n );\n};\n","'use client';\n\nimport { popupItemClass } from '@edyn/ui/lib/popup-list';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { IconCheck, IconSearch } from '@tabler/icons-react';\nimport { Command as CommandPrimitive } from 'cmdk';\nimport type * as React from 'react';\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '../dialog';\nimport { InputGroup, InputGroupAddon } from '../input-group';\nimport { ScrollArea } from '../scroll-area';\n\nexport const Command = ({ className, ...props }: React.ComponentProps<typeof CommandPrimitive>) => {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn('flex size-full flex-col overflow-hidden rounded-xl! bg-popover p-1 text-popover-foreground', className)}\n {...props}\n />\n );\n};\n\nexport const CommandDialog = ({\n title = 'Command Palette',\n description = 'Search for a command to run...',\n children,\n className,\n showCloseButton = false,\n ...props\n}: Omit<React.ComponentProps<typeof Dialog>, 'children'> & {\n title?: string;\n description?: string;\n className?: string;\n showCloseButton?: boolean;\n children: React.ReactNode;\n}) => {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent className={cn('top-1/3 translate-y-0 overflow-hidden rounded-xl! p-0', className)} showCloseButton={showCloseButton}>\n {children}\n </DialogContent>\n </Dialog>\n );\n};\n\nexport const CommandInput = ({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Input>) => {\n return (\n // Borderless, with a hairline under it: a grey block around the search field\n // reads as a second surface inside the popup, and the caret already says\n // where typing goes.\n <div data-slot=\"command-input-wrapper\" className=\"border-b border-border p-1\">\n <InputGroup className=\"h-8 border-transparent bg-transparent shadow-none *:data-[slot=input-group-addon]:pl-2\">\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn('w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50', className)}\n {...props}\n />\n <InputGroupAddon>\n <IconSearch className=\"size-4 shrink-0 opacity-50\" />\n </InputGroupAddon>\n </InputGroup>\n </div>\n );\n};\n\n/**\n * The palette's results list. The scroll container is the DS ScrollArea rather\n * than the primitive's own `overflow-y-auto`, because a list of results that\n * continues past the fold with no bar and no fade reads as a complete list. The\n * cap stays overridable: `cn` lets a caller's own `max-h-*` replace the default.\n *\n * The ScrollArea wraps the list from OUTSIDE rather than lining it: cmdk's list\n * carries `role=\"listbox\"`, and a listbox may not contain presentation wrappers\n * (axe flags that as a critical aria-required-children violation). The options\n * have to stay direct children of the element that holds the role.\n *\n * cmdk keeps the active item in view with `scrollIntoView({ block: 'nearest' })`\n * on the item, which acts on the nearest scrollable ancestor, so that keeps\n * working now that the viewport is the one that scrolls. `scroll-py-1` goes on\n * the viewport for the same reason: it is what pads that scroll.\n */\nexport const CommandList = ({ className, children, ...props }: React.ComponentProps<typeof CommandPrimitive.List>) => {\n return (\n <ScrollArea type=\"always\" fade fadeFrom=\"popover\" className={cn('max-h-72', className)} viewPortClassName=\"scroll-py-1\">\n <CommandPrimitive.List data-slot=\"command-list\" className=\"outline-none\" {...props}>\n {children}\n </CommandPrimitive.List>\n </ScrollArea>\n );\n};\n\nexport const CommandEmpty = ({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Empty>) => {\n return <CommandPrimitive.Empty data-slot=\"command-empty\" className={cn('py-6 text-center text-sm', className)} {...props} />;\n};\n\nexport const CommandGroup = ({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Group>) => {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n 'overflow-hidden p-1 text-foreground **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:text-muted-foreground',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const CommandSeparator = ({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Separator>) => {\n return <CommandPrimitive.Separator data-slot=\"command-separator\" className={cn('-mx-1 h-px bg-border', className)} {...props} />;\n};\n\nexport const CommandItem = ({ className, children, ...props }: React.ComponentProps<typeof CommandPrimitive.Item>) => {\n return (\n <CommandPrimitive.Item data-slot=\"command-item\" className={cn('group/command-item', popupItemClass('cmdk'), className)} {...props}>\n {children}\n {/* The check keeps the end of the item whether it is shown or not, except\n where a shortcut has it, so the list does not shift as the choice moves. */}\n <IconCheck\n data-slot=\"command-item-indicator\"\n className=\"ml-auto size-4 shrink-0 opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100\"\n />\n </CommandPrimitive.Item>\n );\n};\n\nexport const CommandShortcut = ({ className, ...props }: React.ComponentProps<'span'>) => {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn('ml-auto text-xs tracking-widest text-muted-foreground group-data-selected/command-item:text-foreground', className)}\n {...props}\n />\n );\n};\n","'use client';\n\nimport { ContextMenu as ContextMenuPrimitive } from '@base-ui/react/context-menu';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { IconCheck, IconChevronRight } from '@tabler/icons-react';\nimport type * as React from 'react';\n\nexport const ContextMenu = ({ ...props }: ContextMenuPrimitive.Root.Props) => {\n return <ContextMenuPrimitive.Root data-slot=\"context-menu\" {...props} />;\n};\n\nexport const ContextMenuPortal = ({ ...props }: ContextMenuPrimitive.Portal.Props) => {\n return <ContextMenuPrimitive.Portal data-slot=\"context-menu-portal\" {...props} />;\n};\n\nexport const ContextMenuTrigger = ({ className, ...props }: ContextMenuPrimitive.Trigger.Props) => {\n return <ContextMenuPrimitive.Trigger data-slot=\"context-menu-trigger\" className={cn('select-none', className)} {...props} />;\n};\n\nexport const ContextMenuContent = ({\n className,\n align = 'start',\n alignOffset = 4,\n side = 'right',\n sideOffset = 0,\n ...props\n}: ContextMenuPrimitive.Popup.Props & Pick<ContextMenuPrimitive.Positioner.Props, 'align' | 'alignOffset' | 'side' | 'sideOffset'>) => {\n return (\n <ContextMenuPrimitive.Portal>\n <ContextMenuPrimitive.Positioner\n className=\"isolate z-50 outline-none\"\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n >\n <ContextMenuPrimitive.Popup\n data-slot=\"context-menu-content\"\n className={cn(\n 'z-50 max-h-(--available-height) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95',\n 'motion-reduce:animate-none',\n className,\n )}\n {...props}\n />\n </ContextMenuPrimitive.Positioner>\n </ContextMenuPrimitive.Portal>\n );\n};\n\nexport const ContextMenuGroup = ({ ...props }: ContextMenuPrimitive.Group.Props) => {\n return <ContextMenuPrimitive.Group data-slot=\"context-menu-group\" {...props} />;\n};\n\nexport const ContextMenuLabel = ({\n className,\n inset,\n ...props\n}: ContextMenuPrimitive.GroupLabel.Props & {\n inset?: boolean;\n}) => {\n return (\n <ContextMenuPrimitive.GroupLabel\n data-slot=\"context-menu-label\"\n data-inset={inset}\n className={cn('px-1.5 py-1 text-xs font-medium text-muted-foreground data-[inset=true]:pl-7', className)}\n {...props}\n />\n );\n};\n\nexport const ContextMenuItem = ({\n className,\n inset,\n variant = 'default',\n ...props\n}: ContextMenuPrimitive.Item.Props & {\n inset?: boolean;\n variant?: 'default' | 'destructive';\n}) => {\n return (\n <ContextMenuPrimitive.Item\n data-slot=\"context-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"group/context-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset=true]:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 focus:*:[svg]:text-accent-foreground data-[variant=destructive]:*:[svg]:text-destructive\",\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const ContextMenuSub = ({ ...props }: ContextMenuPrimitive.SubmenuRoot.Props) => {\n return <ContextMenuPrimitive.SubmenuRoot data-slot=\"context-menu-sub\" {...props} />;\n};\n\nexport const ContextMenuSubTrigger = ({\n className,\n inset,\n children,\n ...props\n}: ContextMenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean;\n}) => {\n return (\n <ContextMenuPrimitive.SubmenuTrigger\n data-slot=\"context-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset=true]:pl-7 data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n {children}\n <IconChevronRight className=\"ml-auto\" />\n </ContextMenuPrimitive.SubmenuTrigger>\n );\n};\n\nexport const ContextMenuSubContent = ({ ...props }: React.ComponentProps<typeof ContextMenuContent>) => {\n return <ContextMenuContent data-slot=\"context-menu-sub-content\" className=\"shadow-lg\" side=\"right\" {...props} />;\n};\n\nexport const ContextMenuCheckboxItem = ({\n className,\n children,\n checked,\n inset,\n ...props\n}: ContextMenuPrimitive.CheckboxItem.Props & {\n inset?: boolean;\n}) => {\n return (\n <ContextMenuPrimitive.CheckboxItem\n data-slot=\"context-menu-checkbox-item\"\n data-inset={inset}\n className={cn(\n \"relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset=true]:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute right-2\">\n <ContextMenuPrimitive.CheckboxItemIndicator>\n <IconCheck />\n </ContextMenuPrimitive.CheckboxItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.CheckboxItem>\n );\n};\n\nexport const ContextMenuRadioGroup = ({ ...props }: ContextMenuPrimitive.RadioGroup.Props) => {\n return <ContextMenuPrimitive.RadioGroup data-slot=\"context-menu-radio-group\" {...props} />;\n};\n\nexport const ContextMenuRadioItem = ({\n className,\n children,\n inset,\n ...props\n}: ContextMenuPrimitive.RadioItem.Props & {\n inset?: boolean;\n}) => {\n return (\n <ContextMenuPrimitive.RadioItem\n data-slot=\"context-menu-radio-item\"\n data-inset={inset}\n className={cn(\n \"relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset=true]:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute right-2\">\n <ContextMenuPrimitive.RadioItemIndicator>\n <IconCheck />\n </ContextMenuPrimitive.RadioItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.RadioItem>\n );\n};\n\nexport const ContextMenuSeparator = ({ className, ...props }: ContextMenuPrimitive.Separator.Props) => {\n return <ContextMenuPrimitive.Separator data-slot=\"context-menu-separator\" className={cn('-mx-1 my-1 h-px bg-border', className)} {...props} />;\n};\n\nexport const ContextMenuShortcut = ({ className, ...props }: React.ComponentProps<'span'>) => {\n return (\n <span\n data-slot=\"context-menu-shortcut\"\n className={cn('ml-auto text-xs tracking-widest text-muted-foreground group-focus/context-menu-item:text-accent-foreground', className)}\n {...props}\n />\n );\n};\n","import { Dialog as DialogPrimitive } from '@base-ui/react/dialog';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { IconX } from '@tabler/icons-react';\nimport type * as React from 'react';\nimport { Button } from '../button';\n\n// A Drawer is a side-anchored overlay (a \"sheet\"): the same Base UI Dialog\n// primitive as Dialog, positioned against an edge with a slide animation. It is\n// click-triggered (no swipe). The swipe-gesture Drawer (Base UI's dedicated\n// drawer primitive) is a deferred enhancement.\n\nexport const Drawer = ({ ...props }: DialogPrimitive.Root.Props) => {\n return <DialogPrimitive.Root data-slot=\"drawer\" {...props} />;\n};\n\nexport const DrawerTrigger = ({ ...props }: DialogPrimitive.Trigger.Props) => {\n return <DialogPrimitive.Trigger data-slot=\"drawer-trigger\" {...props} />;\n};\n\nexport const DrawerClose = ({ ...props }: DialogPrimitive.Close.Props) => {\n return <DialogPrimitive.Close data-slot=\"drawer-close\" {...props} />;\n};\n\nconst DrawerOverlay = ({ className, ...props }: DialogPrimitive.Backdrop.Props) => {\n return (\n <DialogPrimitive.Backdrop\n data-slot=\"drawer-overlay\"\n className={cn(\n 'fixed inset-0 isolate z-50 bg-overlay duration-100 motion-reduce:animate-none supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0',\n className,\n )}\n {...props}\n />\n );\n};\n\ntype TDrawerSide = 'left' | 'right' | 'top' | 'bottom';\n\nexport const DrawerContent = ({\n className,\n children,\n side = 'right',\n showCloseButton = true,\n ...props\n}: DialogPrimitive.Popup.Props & {\n side?: TDrawerSide;\n showCloseButton?: boolean;\n}) => {\n return (\n <DialogPrimitive.Portal data-slot=\"drawer-portal\">\n <DrawerOverlay />\n <DialogPrimitive.Popup\n data-slot=\"drawer-content\"\n data-side={side}\n className={cn(\n // duration-100 matches the overlay's duration so both exit animations finish\n // together; a longer content animation leaves the overlay mounted after its\n // fade-out ends, reverting it to full opacity (a visible flash on close).\n // border-border is explicit because the portal renders outside .edx-root,\n // where the scoped reset's default border color does not reach.\n 'fixed z-50 flex flex-col gap-4 border-border bg-popover p-4 text-sm text-popover-foreground shadow-lg outline-none duration-100 motion-reduce:animate-none data-open:animate-in data-closed:animate-out',\n side === 'right' && 'inset-y-0 right-0 h-full w-3/4 max-w-sm border-l data-open:slide-in-from-right data-closed:slide-out-to-right',\n side === 'left' && 'inset-y-0 left-0 h-full w-3/4 max-w-sm border-r data-open:slide-in-from-left data-closed:slide-out-to-left',\n side === 'top' && 'inset-x-0 top-0 h-auto border-b data-open:slide-in-from-top data-closed:slide-out-to-top',\n side === 'bottom' && 'inset-x-0 bottom-0 h-auto border-t data-open:slide-in-from-bottom data-closed:slide-out-to-bottom',\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close data-slot=\"drawer-close\" render={<Button variant=\"ghost\" className=\"absolute top-2 right-2\" size=\"icon-sm\" />}>\n <IconX />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Popup>\n </DialogPrimitive.Portal>\n );\n};\n\nexport const DrawerHeader = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"drawer-header\" className={cn('flex flex-col gap-2', className)} {...props} />;\n};\n\nexport const DrawerFooter = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"drawer-footer\" className={cn('mt-auto flex flex-col gap-2', className)} {...props} />;\n};\n\nexport const DrawerTitle = ({ className, ...props }: DialogPrimitive.Title.Props) => {\n return <DialogPrimitive.Title data-slot=\"drawer-title\" className={cn('text-base leading-none font-medium', className)} {...props} />;\n};\n\nexport const DrawerDescription = ({ className, ...props }: DialogPrimitive.Description.Props) => {\n return <DialogPrimitive.Description data-slot=\"drawer-description\" className={cn('text-sm text-muted-foreground', className)} {...props} />;\n};\n","import { Menu as MenuPrimitive } from '@base-ui/react/menu';\nimport { POPUP_GROUP_LABEL_CLASS, POPUP_ITEM_INDICATOR_CLASS, popupItemClass } from '@edyn/ui/lib/popup-list';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { IconCheck, IconChevronRight } from '@tabler/icons-react';\nimport type * as React from 'react';\nimport { ScrollArea } from '../scroll-area';\n\nexport const DropdownMenu = ({ ...props }: MenuPrimitive.Root.Props) => {\n return <MenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />;\n};\n\nexport const DropdownMenuPortal = ({ ...props }: MenuPrimitive.Portal.Props) => {\n return <MenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />;\n};\n\nexport const DropdownMenuTrigger = ({ ...props }: MenuPrimitive.Trigger.Props) => {\n return <MenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />;\n};\n\n/**\n * Scrolls inside a DS ScrollArea like the other popup lists, with the bar shown\n * for as long as the menu overflows and a fade on whichever end is cut off.\n *\n * Base UI puts `role=\"menu\"` on this popup itself and offers no inner list part\n * to move it onto, so the ScrollArea sits INSIDE the role. That is only legal\n * because ScrollArea drops the `role=\"presentation\"` Base UI gives its root,\n * viewport and content: a menu may not own presentation wrappers (axe reports\n * a critical aria-required-children violation), but it may own plain divs.\n * e2e/a11y.spec.ts scans the open menu in both themes to keep it that way.\n */\nexport const DropdownMenuContent = ({\n align = 'start',\n alignOffset = 0,\n side = 'bottom',\n sideOffset = 4,\n className,\n children,\n ...props\n}: MenuPrimitive.Popup.Props & Pick<MenuPrimitive.Positioner.Props, 'align' | 'alignOffset' | 'side' | 'sideOffset'>) => {\n return (\n <MenuPrimitive.Portal>\n <MenuPrimitive.Positioner className=\"isolate z-50 outline-none\" align={align} alignOffset={alignOffset} side={side} sideOffset={sideOffset}>\n <MenuPrimitive.Popup\n data-slot=\"dropdown-menu-content\"\n className={cn(\n 'z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-hidden rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95',\n 'motion-reduce:animate-none',\n className,\n )}\n {...props}\n >\n {/* max-h-inherit hands the positioner's measured height to the element that\n scrolls; the padding sits on the content so the cap is the popup's exactly. */}\n <ScrollArea type=\"always\" fade focusable={false} className=\"max-h-inherit\">\n <div className=\"p-1\">{children}</div>\n </ScrollArea>\n </MenuPrimitive.Popup>\n </MenuPrimitive.Positioner>\n </MenuPrimitive.Portal>\n );\n};\n\nexport const DropdownMenuGroup = ({ ...props }: MenuPrimitive.Group.Props) => {\n return <MenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />;\n};\n\nexport const DropdownMenuLabel = ({\n className,\n inset,\n ...props\n}: MenuPrimitive.GroupLabel.Props & {\n inset?: boolean;\n}) => {\n return (\n <MenuPrimitive.GroupLabel\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(POPUP_GROUP_LABEL_CLASS, 'data-[inset=true]:pl-7', className)}\n {...props}\n />\n );\n};\n\nexport const DropdownMenuItem = ({\n className,\n inset,\n variant = 'default',\n ...props\n}: MenuPrimitive.Item.Props & {\n inset?: boolean;\n variant?: 'default' | 'destructive';\n}) => {\n return (\n <MenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n 'group/dropdown-menu-item',\n popupItemClass(),\n 'data-[inset=true]:pl-7',\n // A destructive item keeps its own colour, and its own highlight with it:\n // the shared translucent one would make it read like any other item.\n 'data-[variant=destructive]:text-destructive data-[variant=destructive]:[&>svg]:text-destructive',\n 'data-[variant=destructive]:data-highlighted:bg-destructive/10 data-[variant=destructive]:data-highlighted:text-destructive',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const DropdownMenuSub = ({ ...props }: MenuPrimitive.SubmenuRoot.Props) => {\n return <MenuPrimitive.SubmenuRoot data-slot=\"dropdown-menu-sub\" {...props} />;\n};\n\nexport const DropdownMenuSubTrigger = ({\n className,\n inset,\n children,\n ...props\n}: MenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean;\n}) => {\n return (\n <MenuPrimitive.SubmenuTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n popupItemClass(),\n // An open submenu holds its trigger in the highlight while the pointer is\n // down in its panel.\n 'data-[inset=true]:pl-7 data-popup-open:bg-foreground/6 data-popup-open:[&>svg]:text-foreground',\n className,\n )}\n {...props}\n >\n {children}\n <IconChevronRight className=\"ml-auto\" />\n </MenuPrimitive.SubmenuTrigger>\n );\n};\n\nexport const DropdownMenuSubContent = ({\n align = 'start',\n alignOffset = -3,\n side = 'right',\n sideOffset = 0,\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuContent>) => {\n return (\n <DropdownMenuContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n 'w-auto min-w-[96px] rounded-lg bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95',\n 'motion-reduce:animate-none',\n className,\n )}\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n {...props}\n />\n );\n};\n\nexport const DropdownMenuCheckboxItem = ({\n className,\n children,\n checked,\n inset,\n ...props\n}: MenuPrimitive.CheckboxItem.Props & {\n inset?: boolean;\n}) => {\n return (\n <MenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n data-inset={inset}\n className={cn(popupItemClass('base-ui', true), 'data-checked:font-medium data-[inset=true]:pl-7', className)}\n checked={checked}\n {...props}\n >\n <span className={POPUP_ITEM_INDICATOR_CLASS} data-slot=\"dropdown-menu-checkbox-item-indicator\">\n <MenuPrimitive.CheckboxItemIndicator>\n <IconCheck />\n </MenuPrimitive.CheckboxItemIndicator>\n </span>\n {children}\n </MenuPrimitive.CheckboxItem>\n );\n};\n\nexport const DropdownMenuRadioGroup = ({ ...props }: MenuPrimitive.RadioGroup.Props) => {\n return <MenuPrimitive.RadioGroup data-slot=\"dropdown-menu-radio-group\" {...props} />;\n};\n\nexport const DropdownMenuRadioItem = ({\n className,\n children,\n inset,\n ...props\n}: MenuPrimitive.RadioItem.Props & {\n inset?: boolean;\n}) => {\n return (\n <MenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n data-inset={inset}\n className={cn(popupItemClass('base-ui', true), 'data-checked:font-medium data-[inset=true]:pl-7', className)}\n {...props}\n >\n <span className={POPUP_ITEM_INDICATOR_CLASS} data-slot=\"dropdown-menu-radio-item-indicator\">\n <MenuPrimitive.RadioItemIndicator>\n <IconCheck />\n </MenuPrimitive.RadioItemIndicator>\n </span>\n {children}\n </MenuPrimitive.RadioItem>\n );\n};\n\nexport const DropdownMenuSeparator = ({ className, ...props }: MenuPrimitive.Separator.Props) => {\n return <MenuPrimitive.Separator data-slot=\"dropdown-menu-separator\" className={cn('-mx-1 my-1 h-px bg-border', className)} {...props} />;\n};\n\nexport const DropdownMenuShortcut = ({ className, ...props }: React.ComponentProps<'span'>) => {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn('ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground', className)}\n {...props}\n />\n );\n};\n","import { cn } from '@edyn/ui/lib/utils';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nexport const Empty = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"empty\"\n className={cn(\n 'flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-xl border-dashed p-6 text-center text-balance',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const EmptyHeader = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"empty-header\" className={cn('flex max-w-sm flex-col items-center gap-2', className)} {...props} />;\n};\n\nconst emptyMediaVariants = cva('mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0', {\n variants: {\n variant: {\n default: 'bg-transparent',\n icon: \"flex size-8 shrink-0 items-center justify-center rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-4\",\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\nexport const EmptyMedia = ({ className, variant = 'default', ...props }: React.ComponentProps<'div'> & VariantProps<typeof emptyMediaVariants>) => {\n return <div data-slot=\"empty-icon\" data-variant={variant} className={cn(emptyMediaVariants({ variant, className }))} {...props} />;\n};\n\nexport const EmptyTitle = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"empty-title\" className={cn('font-heading text-sm font-medium tracking-tight', className)} {...props} />;\n};\n\nexport const EmptyDescription = ({ className, ...props }: React.ComponentProps<'p'>) => {\n return (\n <div\n data-slot=\"empty-description\"\n className={cn('text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary', className)}\n {...props}\n />\n );\n};\n\nexport const EmptyContent = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"empty-content\"\n className={cn('flex w-full max-w-sm min-w-0 flex-col items-center gap-2.5 text-sm text-balance', className)}\n {...props}\n />\n );\n};\n","import { Field as FieldPrimitive } from '@base-ui/react/field';\nimport { cn } from '@edyn/ui/lib/utils';\n\nexport const Field = ({ className, ...props }: FieldPrimitive.Root.Props) => {\n return <FieldPrimitive.Root data-slot=\"field\" className={cn('group/field flex flex-col gap-1.5', className)} {...props} />;\n};\n\nexport const FieldLabel = ({ className, ...props }: FieldPrimitive.Label.Props) => {\n return (\n <FieldPrimitive.Label\n data-slot=\"field-label\"\n className={cn(\n 'flex items-center gap-2 text-sm leading-none font-medium select-none group-has-disabled/field:pointer-events-none group-has-disabled/field:opacity-50',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const FieldDescription = ({ className, ...props }: FieldPrimitive.Description.Props) => {\n return <FieldPrimitive.Description data-slot=\"field-description\" className={cn('text-sm text-muted-foreground', className)} {...props} />;\n};\n\nexport const FieldError = ({ className, ...props }: FieldPrimitive.Error.Props) => {\n return <FieldPrimitive.Error data-slot=\"field-error\" className={cn('text-sm text-destructive', className)} {...props} />;\n};\n","'use client';\n\nimport { PreviewCard as PreviewCardPrimitive } from '@base-ui/react/preview-card';\nimport { cn } from '@edyn/ui/lib/utils';\n\nexport const HoverCard = ({ ...props }: PreviewCardPrimitive.Root.Props) => {\n return <PreviewCardPrimitive.Root data-slot=\"hover-card\" {...props} />;\n};\n\nexport const HoverCardTrigger = ({ ...props }: PreviewCardPrimitive.Trigger.Props) => {\n return <PreviewCardPrimitive.Trigger data-slot=\"hover-card-trigger\" {...props} />;\n};\n\nexport const HoverCardContent = ({\n className,\n side = 'bottom',\n sideOffset = 4,\n align = 'center',\n alignOffset = 4,\n ...props\n}: PreviewCardPrimitive.Popup.Props & Pick<PreviewCardPrimitive.Positioner.Props, 'align' | 'alignOffset' | 'side' | 'sideOffset'>) => {\n return (\n <PreviewCardPrimitive.Portal data-slot=\"hover-card-portal\">\n <PreviewCardPrimitive.Positioner align={align} alignOffset={alignOffset} side={side} sideOffset={sideOffset} className=\"isolate z-50\">\n <PreviewCardPrimitive.Popup\n data-slot=\"hover-card-content\"\n className={cn(\n 'z-50 w-64 origin-(--transform-origin) rounded-lg bg-popover p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 motion-reduce:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95',\n className,\n )}\n {...props}\n />\n </PreviewCardPrimitive.Positioner>\n </PreviewCardPrimitive.Portal>\n );\n};\n","/**\n * Indicator: notification count-bubble or status-dot that attaches to a corner\n * of another element (the Material/Angular \"badge\" concept; our Badge is the\n * label chip). The parent element must be position-relative (e.g. `relative`).\n *\n * Legacy mapping: `edynBadge` directive -> `Indicator` default/destructive;\n * `edyn-dot` -> `Indicator` dot variant.\n * Positioning uses Radix vocabulary: side (top|bottom) + align (start|end).\n */\nimport { cn } from '@edyn/ui/lib/utils';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport type { ComponentProps } from 'react';\n\nexport const indicatorVariants = cva(\n 'absolute z-10 inline-flex shrink-0 items-center justify-center font-medium leading-none ring-2 ring-background',\n {\n variants: {\n variant: {\n /** Count bubble: primary colors, shows children as the count/text. */\n default: 'h-4 min-w-4 rounded-full bg-primary px-1 text-xs tabular-nums text-primary-foreground',\n /** Status dot: solid circle, no children rendered. */\n dot: 'size-2 rounded-full bg-primary',\n /** Count bubble in destructive (error/alert) colors. */\n destructive: 'h-4 min-w-4 rounded-full bg-destructive px-1 text-xs text-destructive-foreground tabular-nums dark:text-background',\n },\n side: {\n top: 'top-0',\n bottom: 'bottom-0',\n },\n align: {\n start: 'left-0',\n end: 'right-0',\n },\n },\n compoundVariants: [\n {\n side: 'top',\n align: 'start',\n class: '-translate-x-1/2 -translate-y-1/2',\n },\n {\n side: 'top',\n align: 'end',\n class: 'translate-x-1/2 -translate-y-1/2',\n },\n {\n side: 'bottom',\n align: 'start',\n class: '-translate-x-1/2 translate-y-1/2',\n },\n {\n side: 'bottom',\n align: 'end',\n class: 'translate-x-1/2 translate-y-1/2',\n },\n ],\n defaultVariants: {\n variant: 'default',\n side: 'top',\n align: 'end',\n },\n },\n);\n\nexport type TIndicatorVariantProps = VariantProps<typeof indicatorVariants>;\n\nexport type TIndicatorProps = ComponentProps<'span'> & TIndicatorVariantProps;\n\nexport const Indicator = ({ className, variant = 'default', side = 'top', align = 'end', children, ...props }: TIndicatorProps) => {\n return (\n <span\n data-slot=\"indicator\"\n data-variant={variant}\n data-side={side}\n data-align={align}\n className={cn(indicatorVariants({ variant, side, align }), className)}\n {...props}\n >\n {variant !== 'dot' ? children : null}\n </span>\n );\n};\n","import { cn } from '@edyn/ui/lib/utils';\nimport { IconMinus } from '@tabler/icons-react';\nimport { OTPInput, OTPInputContext } from 'input-otp';\nimport * as React from 'react';\n\nexport const InputOTP = ({\n className,\n containerClassName,\n ...props\n}: React.ComponentProps<typeof OTPInput> & {\n containerClassName?: string;\n}) => {\n return (\n <OTPInput\n data-slot=\"input-otp\"\n containerClassName={cn('cn-input-otp flex items-center has-disabled:opacity-50', containerClassName)}\n spellCheck={false}\n className={cn('disabled:cursor-not-allowed', className)}\n {...props}\n />\n );\n};\n\nexport const InputOTPGroup = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"input-otp-group\"\n className={cn(\n 'flex items-center rounded-lg has-aria-invalid:border-destructive has-aria-invalid:ring-3 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const InputOTPSlot = ({\n index,\n className,\n ...props\n}: React.ComponentProps<'div'> & {\n index: number;\n}) => {\n const inputOTPContext = React.useContext(OTPInputContext);\n const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};\n\n return (\n <div\n data-slot=\"input-otp-slot\"\n data-active={isActive}\n className={cn(\n 'relative flex size-8 items-center justify-center border-y border-r border-input text-sm transition-all outline-none first:rounded-l-lg first:border-l last:rounded-r-lg aria-invalid:border-destructive data-[active=true]:z-10 data-[active=true]:border-ring data-[active=true]:ring-3 data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:border-destructive data-[active=true]:aria-invalid:ring-destructive/20 dark:bg-input/30 dark:data-[active=true]:aria-invalid:ring-destructive/40',\n className,\n )}\n {...props}\n >\n {char}\n {hasFakeCaret && (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n <div className=\"h-4 w-px animate-caret-blink bg-foreground duration-1000 motion-reduce:animate-none\" />\n </div>\n )}\n </div>\n );\n};\n\nexport const InputOTPSeparator = ({ ...props }: React.ComponentProps<'div'>) => {\n return (\n <div data-slot=\"input-otp-separator\" className=\"flex items-center [&_svg:not([class*='size-'])]:size-4\" aria-hidden=\"true\" {...props}>\n <IconMinus />\n </div>\n );\n};\n","import { Separator as SeparatorPrimitive } from '@base-ui/react/separator';\n\nimport { cn } from '@edyn/ui/lib/utils';\n\n/**\n * Hairline rule between content, announced as `role=\"separator\"`.\n *\n * The orientation styles are branched in TS rather than written as\n * `data-[orientation=*]:` variants on purpose. A variant carries two\n * selectors' worth of specificity, so it would outrank a plain class passed in\n * by the caller: the sidebar's own `w-auto` lost to `w-full` that way. Branching\n * emits one plain class per axis, which `cn` can dedupe and a caller can\n * override.\n *\n * Vertical uses `self-stretch` instead of `h-full`: a percentage height needs a\n * definite parent, and the usual host is an `items-center` row whose height\n * comes from its content.\n */\nexport const Separator = ({ className, orientation = 'horizontal', ...props }: SeparatorPrimitive.Props) => {\n return (\n <SeparatorPrimitive\n data-slot=\"separator\"\n orientation={orientation}\n className={cn('shrink-0 bg-border', orientation === 'horizontal' ? 'h-px w-full' : 'w-px self-stretch', className)}\n {...props}\n />\n );\n};\n","import { mergeProps } from '@base-ui/react/merge-props';\nimport { useRender } from '@base-ui/react/use-render';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport type * as React from 'react';\n\nimport { Separator } from '../separator';\n\nexport const ItemGroup = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n // biome-ignore lint/a11y/useSemanticElements: preserve shadcn's polymorphic div API for item groups.\n <div\n role=\"list\"\n data-slot=\"item-group\"\n className={cn('group/item-group flex w-full flex-col gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2', className)}\n {...props}\n />\n );\n};\n\nexport const ItemSeparator = ({ className, ...props }: React.ComponentProps<typeof Separator>) => {\n return <Separator data-slot=\"item-separator\" orientation=\"horizontal\" className={cn('my-2', className)} {...props} />;\n};\n\nconst itemVariants = cva(\n 'group/item flex w-full flex-wrap items-center rounded-lg border text-sm transition-colors duration-100 outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 [a]:transition-colors [a]:hover:bg-muted',\n {\n variants: {\n variant: {\n default: 'border-transparent',\n outline: 'border-border',\n muted: 'border-transparent bg-muted/50',\n },\n size: {\n default: 'gap-2.5 px-3 py-2.5',\n sm: 'gap-2.5 px-3 py-2.5',\n xs: 'gap-2 px-2.5 py-2 in-data-[slot=dropdown-menu-content]:p-0',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nexport const Item = ({\n className,\n variant = 'default',\n size = 'default',\n render,\n ...props\n}: useRender.ComponentProps<'div'> & VariantProps<typeof itemVariants>) => {\n return useRender({\n defaultTagName: 'div',\n props: mergeProps<'div'>(\n {\n className: cn(itemVariants({ variant, size, className })),\n },\n props,\n ),\n render,\n state: {\n slot: 'item',\n variant,\n size,\n },\n });\n};\n\nconst itemMediaVariants = cva(\n 'flex shrink-0 items-center justify-center gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start [&_svg]:pointer-events-none',\n {\n variants: {\n variant: {\n default: 'bg-transparent',\n icon: \"[&_svg:not([class*='size-'])]:size-4\",\n image:\n 'size-10 overflow-hidden rounded-sm group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 [&_img]:size-full [&_img]:object-cover',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nexport const ItemMedia = ({ className, variant = 'default', ...props }: React.ComponentProps<'div'> & VariantProps<typeof itemMediaVariants>) => {\n return <div data-slot=\"item-media\" data-variant={variant} className={cn(itemMediaVariants({ variant, className }))} {...props} />;\n};\n\nexport const ItemContent = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"item-content\"\n className={cn('flex flex-1 flex-col gap-1 group-data-[size=xs]/item:gap-0 [&+[data-slot=item-content]]:flex-none', className)}\n {...props}\n />\n );\n};\n\nexport const ItemTitle = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"item-title\"\n className={cn('line-clamp-1 flex w-fit items-center gap-2 text-sm leading-snug font-medium underline-offset-4', className)}\n {...props}\n />\n );\n};\n\nexport const ItemDescription = ({ className, ...props }: React.ComponentProps<'p'>) => {\n return (\n <p\n data-slot=\"item-description\"\n className={cn(\n 'line-clamp-2 text-left text-sm leading-normal font-normal text-muted-foreground group-data-[size=xs]/item:text-xs [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const ItemActions = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"item-actions\" className={cn('flex items-center gap-2', className)} {...props} />;\n};\n\nexport const ItemHeader = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"item-header\" className={cn('flex basis-full items-center justify-between gap-2', className)} {...props} />;\n};\n\nexport const ItemFooter = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"item-footer\" className={cn('flex basis-full items-center justify-between gap-2', className)} {...props} />;\n};\n","import { cn } from '@edyn/ui/lib/utils';\n\nexport const Kbd = ({ className, ...props }: React.ComponentProps<'kbd'>) => {\n return (\n <kbd\n data-slot=\"kbd\"\n className={cn(\n \"pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm bg-muted px-1 font-sans text-xs font-medium text-muted-foreground select-none in-data-[slot=tooltip-content]:bg-background/20 in-data-[slot=tooltip-content]:text-background dark:in-data-[slot=tooltip-content]:bg-background/10 [&_svg:not([class*='size-'])]:size-3\",\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const KbdGroup = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <kbd data-slot=\"kbd-group\" className={cn('inline-flex items-center gap-1', className)} {...props} />;\n};\n","import { cn } from '@edyn/ui/lib/utils';\nimport type * as React from 'react';\n\nexport const Label = ({ className, ...props }: React.ComponentProps<'label'>) => {\n return (\n // biome-ignore lint/a11y/noLabelWithoutControl: htmlFor is supplied by consumers via ...props; Base UI also handles association at runtime\n <label\n data-slot=\"label\"\n className={cn(\n 'flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50',\n className,\n )}\n {...props}\n />\n );\n};\n","import { mergeProps } from '@base-ui/react/merge-props';\nimport { useRender } from '@base-ui/react/use-render';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport type * as React from 'react';\n\nexport const markerVariants = cva(\n \"group/marker relative flex min-h-4 w-full items-center gap-2 text-left text-sm text-muted-foreground [&_svg:not([class*='size-'])]:size-4 [a]:underline [a]:underline-offset-3 [a]:hover:text-foreground\",\n {\n variants: {\n variant: {\n default: '',\n separator:\n 'before:mr-1 before:h-px before:min-w-0 before:flex-1 before:bg-border after:ml-1 after:h-px after:min-w-0 after:flex-1 after:bg-border',\n border: 'border-b border-border pb-2',\n },\n },\n },\n);\n\nexport const Marker = ({\n className,\n variant = 'default',\n render,\n ...props\n}: useRender.ComponentProps<'div'> & VariantProps<typeof markerVariants>) => {\n return useRender({\n defaultTagName: 'div',\n props: mergeProps<'div'>(\n {\n className: cn(markerVariants({ variant, className })),\n },\n props,\n ),\n render,\n state: {\n slot: 'marker',\n variant,\n },\n });\n};\n\nexport const MarkerIcon = ({ className, ...props }: React.ComponentProps<'span'>) => {\n return (\n <span data-slot=\"marker-icon\" aria-hidden=\"true\" className={cn(\"size-4 shrink-0 [&_svg:not([class*='size-'])]:size-4\", className)} {...props} />\n );\n};\n\nexport const MarkerContent = ({ className, ...props }: React.ComponentProps<'span'>) => {\n return (\n <span\n data-slot=\"marker-content\"\n className={cn(\n 'min-w-0 wrap-break-word group-data-[variant=separator]/marker:flex-none group-data-[variant=separator]/marker:text-center *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground',\n className,\n )}\n {...props}\n />\n );\n};\n","'use client';\n\nimport { Menu as MenuPrimitive } from '@base-ui/react/menu';\nimport { Menubar as MenubarPrimitive } from '@base-ui/react/menubar';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { IconCheck } from '@tabler/icons-react';\nimport type * as React from 'react';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from '../dropdown-menu';\n\nexport const Menubar = ({ className, ...props }: MenubarPrimitive.Props) => {\n return <MenubarPrimitive data-slot=\"menubar\" className={cn('flex h-8 items-center gap-0.5 rounded-lg border p-[3px]', className)} {...props} />;\n};\n\nexport const MenubarMenu = ({ ...props }: React.ComponentProps<typeof DropdownMenu>) => {\n return <DropdownMenu data-slot=\"menubar-menu\" {...props} />;\n};\n\nexport const MenubarGroup = ({ ...props }: React.ComponentProps<typeof DropdownMenuGroup>) => {\n return <DropdownMenuGroup data-slot=\"menubar-group\" {...props} />;\n};\n\nexport const MenubarPortal = ({ ...props }: React.ComponentProps<typeof DropdownMenuPortal>) => {\n return <DropdownMenuPortal data-slot=\"menubar-portal\" {...props} />;\n};\n\nexport const MenubarTrigger = ({ className, ...props }: React.ComponentProps<typeof DropdownMenuTrigger>) => {\n return (\n <DropdownMenuTrigger\n data-slot=\"menubar-trigger\"\n className={cn(\n 'flex items-center rounded-sm px-1.5 py-[2px] text-sm font-medium outline-hidden select-none hover:bg-muted aria-expanded:bg-muted',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const MenubarContent = ({\n className,\n align = 'start',\n alignOffset = -4,\n sideOffset = 8,\n ...props\n}: React.ComponentProps<typeof DropdownMenuContent>) => {\n return (\n <DropdownMenuContent\n data-slot=\"menubar-content\"\n align={align}\n alignOffset={alignOffset}\n sideOffset={sideOffset}\n className={cn(\n 'min-w-36 rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95',\n 'motion-reduce:animate-none',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const MenubarItem = ({ className, inset, variant = 'default', ...props }: React.ComponentProps<typeof DropdownMenuItem>) => {\n return (\n <DropdownMenuItem\n data-slot=\"menubar-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"group/menubar-item gap-1.5 rounded-md px-1.5 py-1 text-sm focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-[inset=true]:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:opacity-50 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive!\",\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const MenubarCheckboxItem = ({\n className,\n children,\n checked,\n inset,\n ...props\n}: MenuPrimitive.CheckboxItem.Props & {\n inset?: boolean;\n}) => {\n return (\n <MenuPrimitive.CheckboxItem\n data-slot=\"menubar-checkbox-item\"\n data-inset={inset}\n className={cn(\n 'relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-1.5 pl-7 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-[inset=true]:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0',\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-1.5 flex size-4 items-center justify-center [&_svg:not([class*='size-'])]:size-4\">\n <MenuPrimitive.CheckboxItemIndicator>\n <IconCheck />\n </MenuPrimitive.CheckboxItemIndicator>\n </span>\n {children}\n </MenuPrimitive.CheckboxItem>\n );\n};\n\nexport const MenubarRadioGroup = ({ ...props }: React.ComponentProps<typeof DropdownMenuRadioGroup>) => {\n return <DropdownMenuRadioGroup data-slot=\"menubar-radio-group\" {...props} />;\n};\n\nexport const MenubarRadioItem = ({\n className,\n children,\n inset,\n ...props\n}: MenuPrimitive.RadioItem.Props & {\n inset?: boolean;\n}) => {\n return (\n <MenuPrimitive.RadioItem\n data-slot=\"menubar-radio-item\"\n data-inset={inset}\n className={cn(\n \"relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-1.5 pl-7 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-[inset=true]:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-1.5 flex size-4 items-center justify-center [&_svg:not([class*='size-'])]:size-4\">\n <MenuPrimitive.RadioItemIndicator>\n <IconCheck />\n </MenuPrimitive.RadioItemIndicator>\n </span>\n {children}\n </MenuPrimitive.RadioItem>\n );\n};\n\nexport const MenubarLabel = ({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuLabel> & {\n inset?: boolean;\n}) => {\n return (\n <DropdownMenuLabel\n data-slot=\"menubar-label\"\n data-inset={inset}\n className={cn('px-1.5 py-1 text-sm font-medium data-[inset=true]:pl-7', className)}\n {...props}\n />\n );\n};\n\nexport const MenubarSeparator = ({ className, ...props }: React.ComponentProps<typeof DropdownMenuSeparator>) => {\n return <DropdownMenuSeparator data-slot=\"menubar-separator\" className={cn('-mx-1 my-1 h-px bg-border', className)} {...props} />;\n};\n\nexport const MenubarShortcut = ({ className, ...props }: React.ComponentProps<typeof DropdownMenuShortcut>) => {\n return (\n <DropdownMenuShortcut\n data-slot=\"menubar-shortcut\"\n className={cn('ml-auto text-xs tracking-widest text-muted-foreground group-focus/menubar-item:text-accent-foreground', className)}\n {...props}\n />\n );\n};\n\nexport const MenubarSub = ({ ...props }: React.ComponentProps<typeof DropdownMenuSub>) => {\n return <DropdownMenuSub data-slot=\"menubar-sub\" {...props} />;\n};\n\nexport const MenubarSubTrigger = ({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuSubTrigger> & {\n inset?: boolean;\n}) => {\n return (\n <DropdownMenuSubTrigger\n data-slot=\"menubar-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"gap-1.5 rounded-md px-1.5 py-1 text-sm focus:bg-accent focus:text-accent-foreground data-[inset=true]:pl-7 data-open:bg-accent data-open:text-accent-foreground [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const MenubarSubContent = ({ className, ...props }: React.ComponentProps<typeof DropdownMenuSubContent>) => {\n return (\n <DropdownMenuSubContent\n data-slot=\"menubar-sub-content\"\n className={cn(\n 'min-w-32 rounded-lg bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95',\n 'motion-reduce:animate-none',\n className,\n )}\n {...props}\n />\n );\n};\n","import { cn } from '@edyn/ui/lib/utils';\nimport type * as React from 'react';\n\nexport const MessageGroup = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"message-group\" className={cn('flex min-w-0 flex-col gap-2', className)} {...props} />;\n};\n\nexport const Message = ({ className, align = 'start', ...props }: React.ComponentProps<'div'> & { align?: 'start' | 'end' }) => {\n return (\n <div\n data-slot=\"message\"\n data-align={align}\n className={cn('group/message relative flex w-full min-w-0 gap-2 text-sm data-[align=end]:flex-row-reverse', className)}\n {...props}\n />\n );\n};\n\nexport const MessageAvatar = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"message-avatar\"\n className={cn(\n 'flex w-fit min-w-8 shrink-0 items-center justify-center self-end overflow-hidden rounded-full bg-muted group-has-data-[slot=message-footer]/message:-translate-y-8',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const MessageContent = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"message-content\"\n className={cn('flex w-full min-w-0 flex-col gap-2.5 wrap-break-word group-data-[align=end]/message:*:data-slot:self-end', className)}\n {...props}\n />\n );\n};\n\nexport const MessageHeader = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"message-header\"\n className={cn(\n 'flex max-w-full min-w-0 items-center px-3 text-xs font-medium text-muted-foreground group-has-data-[variant=ghost]/message:px-0',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const MessageFooter = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"message-footer\"\n className={cn(\n 'flex max-w-full min-w-0 items-center px-3 text-xs font-medium text-muted-foreground group-has-data-[variant=ghost]/message:px-0 group-data-[align=end]/message:justify-end',\n className,\n )}\n {...props}\n />\n );\n};\n","import { cn } from '@edyn/ui/lib/utils';\nimport { MessageScroller as MessageScrollerPrimitive } from '@shadcn/react/message-scroller';\n\nexport { useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility } from '@shadcn/react/message-scroller';\n\nimport { IconArrowDown } from '@tabler/icons-react';\nimport type * as React from 'react';\nimport { Button } from '../button';\n\nexport const MessageScrollerProvider = (props: React.ComponentProps<typeof MessageScrollerPrimitive.Provider>) => {\n return <MessageScrollerPrimitive.Provider {...props} />;\n};\n\nexport const MessageScroller = ({ className, ...props }: React.ComponentProps<typeof MessageScrollerPrimitive.Root>) => {\n return (\n <MessageScrollerPrimitive.Root\n data-slot=\"message-scroller\"\n className={cn('group/message-scroller relative flex size-full min-h-0 flex-col overflow-hidden', className)}\n {...props}\n />\n );\n};\n\nexport const MessageScrollerViewport = ({ className, ...props }: React.ComponentProps<typeof MessageScrollerPrimitive.Viewport>) => {\n return (\n <MessageScrollerPrimitive.Viewport\n data-slot=\"message-scroller-viewport\"\n className={cn(\n 'size-full min-h-0 min-w-0 scroll-fade-b scrollbar-thin scrollbar-gutter-stable overflow-y-auto overscroll-contain contain-content data-autoscrolling:scrollbar-thumb-transparent data-autoscrolling:scrollbar-track-transparent data-pending-scroll:invisible',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const MessageScrollerContent = ({ className, ...props }: React.ComponentProps<typeof MessageScrollerPrimitive.Content>) => {\n return (\n <MessageScrollerPrimitive.Content\n data-slot=\"message-scroller-content\"\n className={cn('flex h-max min-h-full flex-col gap-6', className)}\n {...props}\n />\n );\n};\n\nexport const MessageScrollerItem = ({ className, scrollAnchor = false, ...props }: React.ComponentProps<typeof MessageScrollerPrimitive.Item>) => {\n return (\n <MessageScrollerPrimitive.Item\n data-slot=\"message-scroller-item\"\n scrollAnchor={scrollAnchor}\n className={cn('min-w-0 shrink-0 [contain-intrinsic-size:auto_10rem] [content-visibility:auto]', className)}\n {...props}\n />\n );\n};\n\nexport const MessageScrollerButton = ({\n direction = 'end',\n className,\n children,\n render,\n variant = 'secondary',\n size = 'icon-sm',\n ...props\n}: React.ComponentProps<typeof MessageScrollerPrimitive.Button> & Pick<React.ComponentProps<typeof Button>, 'variant' | 'size'>) => {\n return (\n <MessageScrollerPrimitive.Button\n data-slot=\"message-scroller-button\"\n data-direction={direction}\n data-variant={variant}\n data-size={size}\n direction={direction}\n className={cn(\n 'absolute inset-s-1/2 -translate-x-1/2 border-border bg-background text-foreground transition-[translate,scale,opacity] duration-200 motion-reduce:transition-none hover:bg-muted hover:text-foreground data-[active=false]:pointer-events-none data-[active=false]:scale-95 data-[active=false]:opacity-0 data-[active=false]:duration-400 data-[active=false]:ease-[cubic-bezier(0.7,0,0.84,0)] data-[active=true]:translate-y-0 data-[active=true]:scale-100 data-[active=true]:opacity-100 data-[active=true]:ease-[cubic-bezier(0.23,1,0.32,1)] data-[direction=end]:bottom-4 data-[direction=end]:data-[active=false]:translate-y-full data-[direction=start]:top-4 data-[direction=start]:data-[active=false]:-translate-y-full rtl:translate-x-1/2 data-[direction=start]:[&_svg]:rotate-180',\n className,\n )}\n render={render ?? <Button variant={variant} size={size} />}\n {...props}\n >\n {children ?? (\n <>\n <IconArrowDown />\n <span className=\"sr-only\">{direction === 'end' ? 'Scroll to end' : 'Scroll to start'}</span>\n </>\n )}\n </MessageScrollerPrimitive.Button>\n );\n};\n","import { cn } from '@edyn/ui/lib/utils';\nimport { IconSelector } from '@tabler/icons-react';\nimport type * as React from 'react';\n\ntype TNativeSelectProps = Omit<React.ComponentProps<'select'>, 'size'> & {\n size?: 'sm' | 'default';\n};\n\nexport const NativeSelect = ({ className, size = 'default', ...props }: TNativeSelectProps) => {\n return (\n <div\n className={cn('group/native-select relative w-fit has-[select:disabled]:opacity-50', className)}\n data-slot=\"native-select-wrapper\"\n data-size={size}\n >\n <select\n data-slot=\"native-select\"\n data-size={size}\n className=\"h-8 w-full min-w-0 appearance-none rounded-lg border border-input bg-transparent py-1 pr-8 pl-2.5 text-sm transition-colors outline-none select-none selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] data-[size=sm]:py-0.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40\"\n {...props}\n />\n <IconSelector\n className=\"pointer-events-none absolute top-1/2 right-2.5 size-4 -translate-y-1/2 text-muted-foreground select-none\"\n aria-hidden=\"true\"\n data-slot=\"native-select-icon\"\n />\n </div>\n );\n};\n\nexport const NativeSelectOption = ({ className, ...props }: React.ComponentProps<'option'>) => {\n return <option data-slot=\"native-select-option\" className={cn('bg-[Canvas] text-[CanvasText]', className)} {...props} />;\n};\n\nexport const NativeSelectOptGroup = ({ className, ...props }: React.ComponentProps<'optgroup'>) => {\n return <optgroup data-slot=\"native-select-optgroup\" className={cn('bg-[Canvas] text-[CanvasText]', className)} {...props} />;\n};\n","import { NavigationMenu as NavigationMenuPrimitive } from '@base-ui/react/navigation-menu';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { IconChevronDown } from '@tabler/icons-react';\nimport { cva } from 'class-variance-authority';\n\nexport const NavigationMenu = ({\n align = 'start',\n className,\n children,\n ...props\n}: NavigationMenuPrimitive.Root.Props & Pick<NavigationMenuPrimitive.Positioner.Props, 'align'>) => {\n return (\n <NavigationMenuPrimitive.Root\n data-slot=\"navigation-menu\"\n className={cn('group/navigation-menu relative flex max-w-max flex-1 items-center justify-center', className)}\n {...props}\n >\n {children}\n <NavigationMenuPositioner align={align} />\n </NavigationMenuPrimitive.Root>\n );\n};\n\nexport const NavigationMenuList = ({ className, ...props }: React.ComponentPropsWithRef<typeof NavigationMenuPrimitive.List>) => {\n return (\n <NavigationMenuPrimitive.List\n data-slot=\"navigation-menu-list\"\n className={cn('group flex flex-1 list-none items-center justify-center gap-0', className)}\n {...props}\n />\n );\n};\n\nexport const NavigationMenuItem = ({ className, ...props }: React.ComponentPropsWithRef<typeof NavigationMenuPrimitive.Item>) => {\n return <NavigationMenuPrimitive.Item data-slot=\"navigation-menu-item\" className={cn('relative', className)} {...props} />;\n};\n\nexport const navigationMenuTriggerStyle = cva(\n 'group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center rounded-lg px-2.5 py-1.5 text-sm font-medium transition-all outline-none motion-reduce:transition-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted data-open:bg-muted/50 data-open:hover:bg-muted data-open:focus:bg-muted',\n);\n\nexport const NavigationMenuTrigger = ({ className, children, ...props }: NavigationMenuPrimitive.Trigger.Props) => {\n return (\n <NavigationMenuPrimitive.Trigger data-slot=\"navigation-menu-trigger\" className={cn(navigationMenuTriggerStyle(), 'group', className)} {...props}>\n {children}{' '}\n <IconChevronDown\n className=\"relative top-px ml-1 size-3 transition duration-300 motion-reduce:transition-none group-data-popup-open/navigation-menu-trigger:rotate-180 group-data-open/navigation-menu-trigger:rotate-180\"\n aria-hidden=\"true\"\n />\n </NavigationMenuPrimitive.Trigger>\n );\n};\n\nexport const NavigationMenuContent = ({ className, ...props }: NavigationMenuPrimitive.Content.Props) => {\n return (\n <NavigationMenuPrimitive.Content\n data-slot=\"navigation-menu-content\"\n className={cn(\n 'motion-reduce:animate-none motion-reduce:transition-none',\n 'data-ending-style:data-[activation-direction=left]:translate-x-[50%] data-ending-style:data-[activation-direction=right]:translate-x-[-50%] data-starting-style:data-[activation-direction=left]:translate-x-[-50%] data-starting-style:data-[activation-direction=right]:translate-x-[50%] h-full w-auto p-1 transition-[opacity,transform,translate] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:rounded-lg group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:ring-foreground/10 group-data-[viewport=false]/navigation-menu:duration-300 data-ending-style:opacity-0 data-starting-style:opacity-0 data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 data-[motion^=from-]:animate-in data-[motion^=from-]:fade-in data-[motion^=to-]:animate-out data-[motion^=to-]:fade-out **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const NavigationMenuPositioner = ({\n className,\n side = 'bottom',\n sideOffset = 8,\n align = 'start',\n alignOffset = 0,\n ...props\n}: NavigationMenuPrimitive.Positioner.Props) => {\n return (\n <NavigationMenuPrimitive.Portal>\n <NavigationMenuPrimitive.Positioner\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n className={cn(\n 'isolate z-50 h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] motion-reduce:transition-none data-instant:transition-none data-[side=bottom]:before:top-[-10px] data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0',\n className,\n )}\n {...props}\n >\n <NavigationMenuPrimitive.Popup className=\"data-[ending-style]:easing-[ease] xs:w-(--popup-width) relative h-(--popup-height) w-(--popup-width) origin-(--transform-origin) rounded-lg bg-popover text-popover-foreground shadow ring-1 ring-foreground/10 transition-[opacity,transform,width,height,scale,translate] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] outline-none motion-reduce:transition-none data-ending-style:scale-90 data-ending-style:opacity-0 data-ending-style:duration-150 data-starting-style:scale-90 data-starting-style:opacity-0\">\n <NavigationMenuPrimitive.Viewport className=\"relative size-full overflow-hidden\" />\n </NavigationMenuPrimitive.Popup>\n </NavigationMenuPrimitive.Positioner>\n </NavigationMenuPrimitive.Portal>\n );\n};\n\nexport const NavigationMenuLink = ({ className, ...props }: NavigationMenuPrimitive.Link.Props) => {\n return (\n <NavigationMenuPrimitive.Link\n data-slot=\"navigation-menu-link\"\n className={cn(\n \"flex items-center gap-2 rounded-lg p-2 text-sm transition-all outline-none motion-reduce:transition-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 in-data-[slot=navigation-menu-content]:rounded-md data-active:bg-muted/50 data-active:hover:bg-muted data-active:focus:bg-muted [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const NavigationMenuIndicator = ({ className, ...props }: React.ComponentPropsWithRef<typeof NavigationMenuPrimitive.Icon>) => {\n return (\n <NavigationMenuPrimitive.Icon\n data-slot=\"navigation-menu-indicator\"\n className={cn(\n 'motion-reduce:animate-none',\n 'top-full z-1 flex h-1.5 items-end justify-center overflow-hidden data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:animate-in data-[state=visible]:fade-in',\n className,\n )}\n {...props}\n >\n <div className=\"relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md\" />\n </NavigationMenuPrimitive.Icon>\n );\n};\n","import { cn } from '@edyn/ui/lib/utils';\nimport { IconChevronLeft, IconChevronRight, IconDots } from '@tabler/icons-react';\nimport { buttonVariants } from '../button/button';\n\nexport type TPaginationRangeItem = number | 'ellipsis';\n\n/**\n * Compute the ordered list of page numbers and ellipsis markers to render.\n * First and last pages are always included. `siblingCount` controls how many\n * page numbers appear on each side of the current page.\n */\nexport const getPaginationRange = (page: number, count: number, siblingCount = 1): TPaginationRangeItem[] => {\n if (count <= 0) {\n return [];\n }\n\n // Clamp the current page to [1, count].\n const currentPage = Math.min(Math.max(page, 1), count);\n\n // When count is small enough to show every page, return all pages without ellipsis.\n // Threshold: first + (siblingCount pages each side of page) + last + 2 gap pages = 2*siblingCount + 5.\n // E.g. siblingCount=1 -> threshold 7; siblingCount=2 -> threshold 9.\n if (count <= 2 * siblingCount + 5) {\n return Array.from({ length: count }, (_, i) => i + 1);\n }\n\n const leftSiblingStart = Math.max(currentPage - siblingCount, 2);\n const rightSiblingEnd = Math.min(currentPage + siblingCount, count - 1);\n\n const showLeftEllipsis = leftSiblingStart > 2;\n const showRightEllipsis = rightSiblingEnd < count - 1;\n\n const range: TPaginationRangeItem[] = [1];\n\n if (showLeftEllipsis) {\n range.push('ellipsis');\n } else {\n // Fill pages between 1 and leftSiblingStart (exclusive) if the gap is small.\n for (let i = 2; i < leftSiblingStart; i++) {\n range.push(i);\n }\n }\n\n for (let i = leftSiblingStart; i <= rightSiblingEnd; i++) {\n range.push(i);\n }\n\n if (showRightEllipsis) {\n range.push('ellipsis');\n } else {\n // Fill pages between rightSiblingEnd (exclusive) and last.\n for (let i = rightSiblingEnd + 1; i < count; i++) {\n range.push(i);\n }\n }\n\n range.push(count);\n\n return range;\n};\n\n/** Clamp a page number to the valid [1, count] range (count <= 0 yields 1). */\nexport const clampPage = (page: number, count: number): number => Math.min(Math.max(page, 1), Math.max(count, 1));\n\nexport interface IPaginationProps {\n page: number;\n count: number;\n onPageChange: (page: number) => void;\n siblingCount?: number;\n className?: string;\n}\n\nexport const Pagination = ({ page, count, onPageChange, siblingCount = 1, className }: IPaginationProps) => {\n // Clamp once and use the clamped value everywhere (active marker, prev/next\n // steps, disabled checks). getPaginationRange clamps internally too; the\n // component must agree with it, or an out-of-range `page` leaves no page marked\n // current and steps prev/next from the wrong base.\n const currentPage = clampPage(page, count);\n const range = getPaginationRange(currentPage, count, siblingCount);\n // Track how many ellipsis items we've seen to give each a stable unique key.\n let ellipsisCount = 0;\n\n const handlePrev = () => {\n if (currentPage > 1) {\n onPageChange(currentPage - 1);\n }\n };\n\n const handleNext = () => {\n if (currentPage < count) {\n onPageChange(currentPage + 1);\n }\n };\n\n return (\n <nav aria-label=\"pagination\" className={cn('mx-auto flex w-full justify-center', className)}>\n <ul className=\"flex flex-row items-center gap-1\">\n <li>\n <button\n type=\"button\"\n aria-label=\"Go to previous page\"\n disabled={currentPage <= 1}\n onClick={handlePrev}\n className={cn(buttonVariants({ variant: 'ghost', size: 'icon' }), 'size-8')}\n >\n <IconChevronLeft size={16} />\n </button>\n </li>\n\n {range.map((item) => {\n if (item === 'ellipsis') {\n ellipsisCount += 1;\n const ellipsisKey = `ellipsis-${ellipsisCount}`;\n return (\n <li key={ellipsisKey}>\n <span\n aria-hidden=\"true\"\n className={cn(buttonVariants({ variant: 'ghost', size: 'icon' }), 'size-8 cursor-default pointer-events-none')}\n >\n <IconDots size={16} />\n </span>\n </li>\n );\n }\n\n const isActive = item === currentPage;\n return (\n <li key={item}>\n <button\n type=\"button\"\n aria-label={`Go to page ${item}`}\n aria-current={isActive ? 'page' : undefined}\n onClick={() => {\n if (!isActive) {\n onPageChange(item);\n }\n }}\n className={cn(\n buttonVariants({ variant: isActive ? 'outline' : 'ghost', size: 'icon' }),\n 'size-8',\n isActive && 'pointer-events-none font-semibold',\n )}\n >\n {item}\n </button>\n </li>\n );\n })}\n\n <li>\n <button\n type=\"button\"\n aria-label=\"Go to next page\"\n disabled={currentPage >= count}\n onClick={handleNext}\n className={cn(buttonVariants({ variant: 'ghost', size: 'icon' }), 'size-8')}\n >\n <IconChevronRight size={16} />\n </button>\n </li>\n </ul>\n </nav>\n );\n};\n","import { Progress as ProgressPrimitive } from '@base-ui/react/progress';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * The fill's colour, and the track's tint of the same colour. A closed set of semantic\n * tones rather than a class string, so a bar cannot carry a colour the theme does not\n * define and dark mode and a re-theme keep working.\n */\nconst progressTrackVariants = cva('relative h-2 w-full overflow-hidden rounded-full', {\n variants: {\n tone: {\n default: 'bg-primary/20',\n info: 'bg-info/20',\n success: 'bg-success/20',\n warning: 'bg-warning/20',\n destructive: 'bg-destructive/20',\n },\n },\n defaultVariants: { tone: 'default' },\n});\n\nconst progressIndicatorVariants = cva(\n 'h-full rounded-full transition-[width] duration-300 ease-in-out motion-reduce:transition-none motion-reduce:animate-none data-indeterminate:w-1/3 data-indeterminate:animate-[progress-indeterminate_1.5s_ease-in-out_infinite]',\n {\n variants: {\n tone: {\n default: 'bg-primary',\n info: 'bg-info',\n success: 'bg-success',\n warning: 'bg-warning',\n destructive: 'bg-destructive',\n },\n },\n defaultVariants: { tone: 'default' },\n },\n);\n\nexport type TProgressTone = NonNullable<VariantProps<typeof progressIndicatorVariants>['tone']>;\n\nexport interface IProgressProps extends Omit<ProgressPrimitive.Root.Props, 'value'> {\n value?: number | null;\n /** The bar's colour: a share of a total reads as `warning` when nearly used up, `success` when done. */\n tone?: TProgressTone;\n}\n\nexport const Progress = ({ value = null, tone, className, ...props }: IProgressProps) => {\n return (\n <ProgressPrimitive.Root data-slot=\"progress\" value={value ?? null} className={cn('w-full', className)} {...props}>\n <ProgressPrimitive.Track data-slot=\"progress-track\" className={progressTrackVariants({ tone })}>\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n data-tone={tone ?? 'default'}\n className={progressIndicatorVariants({ tone })}\n style={value != null ? { width: `${value}%` } : undefined}\n />\n </ProgressPrimitive.Track>\n </ProgressPrimitive.Root>\n );\n};\n","'use client';\n\nimport { cn } from '@edyn/ui/lib/utils';\nimport { Questionnaire as QuestionnairePrimitive } from '@shadcn/react/questionnaire';\nimport { IconCheck } from '@tabler/icons-react';\nimport type * as React from 'react';\nimport { type Button, buttonVariants } from '../button';\n\nexport const Questionnaire = ({ className, ...props }: React.ComponentProps<typeof QuestionnairePrimitive.Root>) => {\n return <QuestionnairePrimitive.Root data-slot=\"questionnaire\" className={cn('flex w-full min-w-0 flex-col gap-4', className)} {...props} />;\n};\n\nexport const QuestionnaireProgress = ({ className, ...props }: React.ComponentProps<typeof QuestionnairePrimitive.Progress>) => {\n return (\n <QuestionnairePrimitive.Progress\n data-slot=\"questionnaire-progress\"\n className={cn('min-h-[1lh] w-fit min-w-[14ch] text-xs font-medium text-muted-foreground tabular-nums', className)}\n {...props}\n />\n );\n};\n\nexport const QuestionnaireItem = ({ className, ...props }: React.ComponentProps<typeof QuestionnairePrimitive.Item>) => {\n return (\n <QuestionnairePrimitive.Item\n data-slot=\"questionnaire-item\"\n className={cn('flex min-w-0 flex-col gap-4 border-0 p-0 outline-none', className)}\n {...props}\n />\n );\n};\n\nexport const QuestionnaireTitle = ({ className, ...props }: React.ComponentProps<typeof QuestionnairePrimitive.Title>) => {\n return (\n <QuestionnairePrimitive.Title\n data-slot=\"questionnaire-title\"\n className={cn(\n 'font-heading text-base leading-snug font-medium text-pretty [&:not(:has(~[data-slot=questionnaire-description]))]:mb-4',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const QuestionnaireDescription = ({ className, ...props }: React.ComponentProps<typeof QuestionnairePrimitive.Description>) => {\n return (\n <QuestionnairePrimitive.Description\n data-slot=\"questionnaire-description\"\n className={cn('text-sm text-pretty text-muted-foreground', className)}\n {...props}\n />\n );\n};\n\nexport const QuestionnaireChoices = ({ className, ...props }: React.ComponentProps<typeof QuestionnairePrimitive.Choices>) => {\n return (\n <QuestionnairePrimitive.Choices\n data-slot=\"questionnaire-choices\"\n className={cn('group/questionnaire-choices grid min-w-0 gap-2', className)}\n {...props}\n />\n );\n};\n\nexport const QuestionnaireChoice = ({ children, className, ...props }: React.ComponentProps<typeof QuestionnairePrimitive.Choice>) => {\n return (\n <QuestionnairePrimitive.Choice\n data-slot=\"questionnaire-choice\"\n className={cn(\n 'group/questionnaire-choice relative flex min-h-11 cursor-pointer items-start gap-2.5 rounded-lg border border-input bg-transparent px-3 py-2.5 text-start text-sm transition-colors outline-none select-none hover:bg-muted/50 has-[>input:focus-visible]:border-ring has-[>input:focus-visible]:ring-3 has-[>input:focus-visible]:ring-ring/50 data-invalid:border-destructive dark:bg-input/20 data-checked:border-primary/40 data-checked:bg-muted dark:data-checked:bg-muted',\n 'data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-disabled:opacity-50',\n className,\n )}\n {...props}\n >\n <QuestionnairePrimitive.ChoiceInput\n data-slot=\"questionnaire-choice-input\"\n className=\"absolute inset-0 z-10 size-full cursor-pointer opacity-0\"\n />\n <span\n aria-hidden=\"true\"\n data-slot=\"questionnaire-choice-indicator\"\n className=\"pointer-events-none relative flex size-4 shrink-0 translate-y-[--spacing(0.45)] items-center justify-center rounded-[4px] border border-input group-has-data-[slot=questionnaire-choice-description]/questionnaire-choice:translate-y-0.5 group-data-[type=radio]/questionnaire-choice:rounded-full group-data-checked/questionnaire-choice:border-primary group-data-checked/questionnaire-choice:bg-primary group-data-checked/questionnaire-choice:text-primary-foreground dark:bg-input/30 dark:group-data-checked/questionnaire-choice:bg-primary\"\n >\n <span\n data-slot=\"questionnaire-choice-indicator-dot\"\n className=\"hidden size-2 rounded-full bg-primary-foreground group-data-[type=checkbox]/questionnaire-choice:hidden group-data-checked/questionnaire-choice:block\"\n />\n <IconCheck\n data-slot=\"questionnaire-choice-indicator-check\"\n className=\"hidden size-3.5 group-data-[type=radio]/questionnaire-choice:hidden group-data-checked/questionnaire-choice:block\"\n />\n </span>\n <QuestionnairePrimitive.ChoiceLabel data-slot=\"questionnaire-choice-label\" className=\"flex min-w-0 flex-1 flex-col gap-0.5 leading-snug\">\n {children}\n </QuestionnairePrimitive.ChoiceLabel>\n <QuestionnairePrimitive.ChoiceShortcut\n data-slot=\"questionnaire-choice-shortcut\"\n className=\"pointer-events-none ms-auto hidden size-5 shrink-0 translate-y-[--spacing(0.45)] items-center justify-center rounded-md border border-input bg-background font-mono text-[0.625rem] leading-none font-medium text-muted-foreground group-has-data-[slot=questionnaire-choice-description]/questionnaire-choice:translate-y-0.5 group-data-[shortcut]/questionnaire-choice:inline-flex\"\n />\n </QuestionnairePrimitive.Choice>\n );\n};\n\nexport const QuestionnaireChoiceDescription = ({ className, ...props }: React.ComponentProps<'span'>) => {\n return <span data-slot=\"questionnaire-choice-description\" className={cn('text-muted-foreground', className)} {...props} />;\n};\n\nexport const QuestionnaireInput = ({ className, ...props }: React.ComponentProps<typeof QuestionnairePrimitive.Input>) => {\n return (\n <div data-slot=\"questionnaire-input-wrapper\" className=\"group/questionnaire-input relative w-full min-w-0\">\n <QuestionnairePrimitive.Input\n data-slot=\"questionnaire-input\"\n className={cn(\n 'h-8 min-h-11 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-[color,box-shadow,background-color] outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 sm:min-h-0 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40',\n 'selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground',\n className,\n )}\n {...props}\n />\n </div>\n );\n};\n\nexport const QuestionnaireError = ({ className, ...props }: React.ComponentProps<typeof QuestionnairePrimitive.Error>) => {\n return <QuestionnairePrimitive.Error data-slot=\"questionnaire-error\" className={cn('mt-2 text-sm text-destructive', className)} {...props} />;\n};\n\nexport const QuestionnaireActions = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"questionnaire-actions\"\n className={cn('grid min-h-11 w-full grid-cols-[minmax(0,1fr)_auto_auto] items-center gap-2 sm:min-h-8', className)}\n {...props}\n />\n );\n};\n\nexport const QuestionnairePrevious = ({\n children,\n className,\n size = 'default',\n variant = 'outline',\n ...props\n}: React.ComponentProps<typeof QuestionnairePrimitive.Previous> & Pick<React.ComponentProps<typeof Button>, 'size' | 'variant'>) => {\n return (\n <QuestionnairePrimitive.Previous\n data-slot=\"questionnaire-previous\"\n data-size={size}\n data-variant={variant}\n className={cn(buttonVariants({ size, variant }), 'col-start-1 row-start-1 min-h-11 justify-self-start sm:min-h-0', className)}\n {...props}\n >\n {children ?? 'Previous'}\n </QuestionnairePrimitive.Previous>\n );\n};\n\nexport const QuestionnaireSkip = ({\n children,\n className,\n size = 'default',\n variant = 'outline',\n ...props\n}: React.ComponentProps<typeof QuestionnairePrimitive.Skip> & Pick<React.ComponentProps<typeof Button>, 'size' | 'variant'>) => {\n return (\n <QuestionnairePrimitive.Skip\n data-slot=\"questionnaire-skip\"\n data-size={size}\n data-variant={variant}\n className={cn(buttonVariants({ size, variant }), 'col-start-2 row-start-1 min-h-11 justify-self-end sm:min-h-0', className)}\n {...props}\n >\n {children ?? 'Skip'}\n </QuestionnairePrimitive.Skip>\n );\n};\n\nexport const QuestionnaireNext = ({\n children,\n className,\n size = 'default',\n variant = 'default',\n ...props\n}: React.ComponentProps<typeof QuestionnairePrimitive.Next> & Pick<React.ComponentProps<typeof Button>, 'size' | 'variant'>) => {\n return (\n <QuestionnairePrimitive.Next\n data-slot=\"questionnaire-next\"\n data-size={size}\n data-variant={variant}\n className={cn(buttonVariants({ size, variant }), 'col-start-3 row-start-1 min-h-11 justify-self-end sm:min-h-0', className)}\n {...props}\n >\n {children ?? 'Next'}\n </QuestionnairePrimitive.Next>\n );\n};\n\nexport const QuestionnaireSubmit = ({\n children,\n className,\n size = 'default',\n variant = 'default',\n ...props\n}: React.ComponentProps<typeof QuestionnairePrimitive.Submit> & Pick<React.ComponentProps<typeof Button>, 'size' | 'variant'>) => {\n return (\n <QuestionnairePrimitive.Submit\n data-slot=\"questionnaire-submit\"\n data-size={size}\n data-variant={variant}\n className={cn(buttonVariants({ size, variant }), 'col-start-3 row-start-1 min-h-11 justify-self-end sm:min-h-0', className)}\n {...props}\n >\n {children ?? 'Submit'}\n </QuestionnairePrimitive.Submit>\n );\n};\n","import { Radio } from '@base-ui/react/radio';\nimport { RadioGroup as RadioGroupPrimitive } from '@base-ui/react/radio-group';\n\nimport { cn } from '@edyn/ui/lib/utils';\n\nexport interface IRadioGroupProps extends RadioGroupPrimitive.Props {\n orientation?: 'horizontal' | 'vertical';\n}\n\nexport const RadioGroup = ({ className, orientation = 'vertical', ...props }: IRadioGroupProps) => {\n return (\n <RadioGroupPrimitive\n data-slot=\"radio-group\"\n data-orientation={orientation}\n aria-orientation={orientation}\n className={cn('grid w-full gap-2 data-[orientation=horizontal]:flex data-[orientation=horizontal]:items-center', className)}\n {...props}\n />\n );\n};\n\nexport interface IRadioGroupItemProps extends Radio.Root.Props {\n className?: string;\n}\n\nexport const RadioGroupItem = ({ className, ...props }: IRadioGroupItemProps) => {\n return (\n <Radio.Root\n data-slot=\"radio-group-item\"\n className={cn(\n 'peer relative flex size-4 shrink-0 items-center justify-center rounded-full border border-input transition-colors outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:bg-input/30 dark:aria-invalid:ring-destructive/40',\n className,\n )}\n {...props}\n >\n <Radio.Indicator data-slot=\"radio-group-item-indicator\" className=\"flex size-2 shrink-0 rounded-full bg-primary transition-none\" />\n </Radio.Root>\n );\n};\n","import { cn } from '@edyn/ui/lib/utils';\nimport * as ResizablePrimitive from 'react-resizable-panels';\n\nexport const ResizablePanelGroup = ({ className, ...props }: ResizablePrimitive.GroupProps) => {\n return (\n <ResizablePrimitive.Group\n data-slot=\"resizable-panel-group\"\n className={cn('flex h-full w-full aria-[orientation=vertical]:flex-col', className)}\n {...props}\n />\n );\n};\n\nexport const ResizablePanel = ({ ...props }: ResizablePrimitive.PanelProps) => {\n return <ResizablePrimitive.Panel data-slot=\"resizable-panel\" {...props} />;\n};\n\nexport const ResizableHandle = ({\n withHandle,\n className,\n ...props\n}: ResizablePrimitive.SeparatorProps & {\n withHandle?: boolean;\n}) => {\n return (\n <ResizablePrimitive.Separator\n data-slot=\"resizable-handle\"\n className={cn(\n 'relative flex w-px items-center justify-center bg-border ring-offset-background after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-ring focus-visible:outline-hidden aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:after:left-0 aria-[orientation=horizontal]:after:h-1 aria-[orientation=horizontal]:after:w-full aria-[orientation=horizontal]:after:translate-x-0 aria-[orientation=horizontal]:after:-translate-y-1/2 [&[aria-orientation=horizontal]>div]:rotate-90',\n className,\n )}\n {...props}\n >\n {withHandle && <div className=\"z-10 flex h-6 w-1 shrink-0 rounded-lg bg-border\" />}\n </ResizablePrimitive.Separator>\n );\n};\n","import { Select as SelectPrimitive } from '@base-ui/react/select';\nimport { POPUP_ITEM_INDICATOR_CLASS, popupItemClass } from '@edyn/ui/lib/popup-list';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { IconCheck, IconChevronDown } from '@tabler/icons-react';\nimport type * as React from 'react';\nimport { ScrollArea } from '../scroll-area';\n\nexport const Select = <TValue,>({ ...props }: SelectPrimitive.Root.Props<TValue>) => {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />;\n};\n\nexport type TSelectTriggerSize = 'sm' | 'default';\n\nexport interface ISelectTriggerProps extends SelectPrimitive.Trigger.Props {\n size?: TSelectTriggerSize;\n}\n\nexport const SelectTrigger = ({ className, size = 'default', children, ...props }: ISelectTriggerProps) => {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n className={cn(\n 'flex w-full cursor-pointer items-center justify-between gap-2 rounded-lg border border-input bg-transparent text-sm text-foreground transition-colors outline-none',\n 'focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50',\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n 'aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20',\n 'data-popup-open:border-ring data-popup-open:ring-3 data-popup-open:ring-ring/50',\n 'dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40',\n size === 'sm' ? 'h-7 px-2.5 text-[0.8rem]' : 'h-8 px-2.5',\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon data-slot=\"select-icon\" className=\"shrink-0 text-muted-foreground\">\n <IconChevronDown className=\"size-4\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n};\n\nexport const SelectValue = ({ className, ...props }: SelectPrimitive.Value.Props) => {\n return <SelectPrimitive.Value data-slot=\"select-value\" className={cn('truncate data-placeholder:text-muted-foreground', className)} {...props} />;\n};\n\nexport interface ISelectContentProps extends SelectPrimitive.Popup.Props {\n portalContainer?: SelectPrimitive.Portal.Props['container'];\n}\n\nexport const SelectContent = ({ className, children, portalContainer, ...props }: ISelectContentProps) => {\n return (\n <SelectPrimitive.Portal container={portalContainer}>\n {/* alignItemWithTrigger=false: drop below the trigger (shadcn style), not Base UI's macOS-style overlay */}\n <SelectPrimitive.Positioner data-slot=\"select-positioner\" sideOffset={4} alignItemWithTrigger={false}>\n <SelectPrimitive.Popup\n data-slot=\"select-content\"\n className={cn(\n 'z-50 min-w-[var(--anchor-width)] overflow-hidden rounded-xl border border-border bg-popover p-1 text-popover-foreground shadow-md outline-none',\n 'origin-[var(--transform-origin)]',\n 'transition-[transform,scale,opacity] motion-reduce:animate-none motion-reduce:transition-none data-open:scale-100 data-open:opacity-100 data-closed:scale-95 data-closed:opacity-0 data-open:animate-in data-closed:animate-out data-open:fade-in-0 data-closed:fade-out-0',\n className,\n )}\n {...props}\n >\n {/* A long option list has to scroll inside the popup: the popup clips\n (overflow-hidden) and carries no height of its own, so the options\n past the fold were simply unreachable. --available-height is the\n room the positioner measured for it. */}\n {/* Select.List is what makes the wrappers legal: with a list present Base\n UI moves `role=\"listbox\"` off the popup and onto it, so the options\n stay direct children of the role and the ScrollArea sits outside it. */}\n <ScrollArea type=\"always\" fade fadeFrom=\"popover\" className=\"max-h-(--available-height)\">\n <SelectPrimitive.List data-slot=\"select-list\">{children}</SelectPrimitive.List>\n </ScrollArea>\n </SelectPrimitive.Popup>\n </SelectPrimitive.Positioner>\n </SelectPrimitive.Portal>\n );\n};\n\nexport const SelectGroup = ({ className, ...props }: SelectPrimitive.Group.Props) => {\n return <SelectPrimitive.Group data-slot=\"select-group\" className={cn('flex flex-col gap-0.5', className)} {...props} />;\n};\n\nexport const SelectLabel = ({ className, ...props }: SelectPrimitive.GroupLabel.Props) => {\n return (\n <SelectPrimitive.GroupLabel\n data-slot=\"select-label\"\n className={cn('px-2 py-1 text-xs font-semibold text-muted-foreground', className)}\n {...props}\n />\n );\n};\n\nexport const SelectItem = ({ className, children, ...props }: SelectPrimitive.Item.Props) => {\n return (\n <SelectPrimitive.Item data-slot=\"select-item\" className={cn(popupItemClass('base-ui', true), className)} {...props}>\n <SelectPrimitive.ItemText data-slot=\"select-item-text\">{children}</SelectPrimitive.ItemText>\n {/* After the text, not before it: the check marks the end of the item in\n every list in the system, so the labels all start on one line. */}\n <SelectPrimitive.ItemIndicator data-slot=\"select-item-indicator\" className={POPUP_ITEM_INDICATOR_CLASS}>\n <IconCheck className=\"size-3.5\" />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n );\n};\n\nexport const SelectSeparator = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"select-separator\" className={cn('-mx-1 my-1 h-px bg-border', className)} aria-hidden=\"true\" {...props} />;\n};\n","import { Dialog as SheetPrimitive } from '@base-ui/react/dialog';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { IconX } from '@tabler/icons-react';\nimport type * as React from 'react';\nimport { Button } from '../button';\n\nexport const Sheet = ({ ...props }: SheetPrimitive.Root.Props) => {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n};\n\nexport const SheetTrigger = ({ ...props }: SheetPrimitive.Trigger.Props) => {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n};\n\nexport const SheetClose = ({ ...props }: SheetPrimitive.Close.Props) => {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n};\n\nconst SheetPortal = ({ ...props }: SheetPrimitive.Portal.Props) => {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />;\n};\n\nconst SheetOverlay = ({ className, ...props }: SheetPrimitive.Backdrop.Props) => {\n return (\n <SheetPrimitive.Backdrop\n data-slot=\"sheet-overlay\"\n className={cn(\n 'fixed inset-0 z-50 bg-overlay transition-opacity duration-150 motion-reduce:transition-none data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const SheetContent = ({\n className,\n children,\n side = 'right',\n showCloseButton = true,\n ...props\n}: SheetPrimitive.Popup.Props & {\n side?: 'top' | 'right' | 'bottom' | 'left';\n showCloseButton?: boolean;\n}) => {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Popup\n data-slot=\"sheet-content\"\n data-side={side}\n className={cn(\n 'fixed z-50 flex flex-col gap-4 bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg transition duration-200 motion-reduce:transition-none ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:data-ending-style:translate-y-[2.5rem] data-[side=bottom]:data-starting-style:translate-y-[2.5rem] data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=left]:data-ending-style:translate-x-[-2.5rem] data-[side=left]:data-starting-style:translate-x-[-2.5rem] data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=right]:data-ending-style:translate-x-[2.5rem] data-[side=right]:data-starting-style:translate-x-[2.5rem] data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:data-ending-style:translate-y-[-2.5rem] data-[side=top]:data-starting-style:translate-y-[-2.5rem] data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm',\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close data-slot=\"sheet-close\" render={<Button variant=\"ghost\" className=\"absolute top-3 right-3\" size=\"icon-sm\" />}>\n <IconX />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Popup>\n </SheetPortal>\n );\n};\n\nexport const SheetHeader = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"sheet-header\" className={cn('flex flex-col gap-0.5 p-4', className)} {...props} />;\n};\n\nexport const SheetFooter = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"sheet-footer\" className={cn('mt-auto flex flex-col gap-2 p-4', className)} {...props} />;\n};\n\nexport const SheetTitle = ({ className, ...props }: SheetPrimitive.Title.Props) => {\n return <SheetPrimitive.Title data-slot=\"sheet-title\" className={cn('font-heading text-base font-medium text-foreground', className)} {...props} />;\n};\n\nexport const SheetDescription = ({ className, ...props }: SheetPrimitive.Description.Props) => {\n return <SheetPrimitive.Description data-slot=\"sheet-description\" className={cn('text-sm text-muted-foreground', className)} {...props} />;\n};\n","import { cn } from '@edyn/ui/lib/utils';\n\nexport const Skeleton = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"skeleton\" className={cn('animate-pulse rounded-md bg-muted motion-reduce:animate-none', className)} {...props} />;\n};\n","import { Tooltip as TooltipPrimitive } from '@base-ui/react/tooltip';\n\nimport { cn } from '@edyn/ui/lib/utils';\n\nexport const TooltipProvider = ({ delay = 0, ...props }: TooltipPrimitive.Provider.Props) => {\n return <TooltipPrimitive.Provider data-slot=\"tooltip-provider\" delay={delay} {...props} />;\n};\n\nexport const Tooltip = ({ ...props }: TooltipPrimitive.Root.Props) => {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />;\n};\n\nexport const TooltipTrigger = ({ ...props }: TooltipPrimitive.Trigger.Props) => {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n};\n\nexport const TooltipContent = ({\n className,\n side = 'top',\n sideOffset = 4,\n align = 'center',\n alignOffset = 0,\n children,\n ...props\n}: TooltipPrimitive.Popup.Props & Pick<TooltipPrimitive.Positioner.Props, 'align' | 'alignOffset' | 'side' | 'sideOffset'>) => {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Positioner align={align} alignOffset={alignOffset} side={side} sideOffset={sideOffset} className=\"isolate z-50\">\n <TooltipPrimitive.Popup\n data-slot=\"tooltip-content\"\n className={cn(\n 'z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95',\n 'motion-reduce:animate-none',\n className,\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5\" />\n </TooltipPrimitive.Popup>\n </TooltipPrimitive.Positioner>\n </TooltipPrimitive.Portal>\n );\n};\n","import { mergeProps } from '@base-ui/react/merge-props';\nimport { useRender } from '@base-ui/react/use-render';\nimport { useIsMobile } from '@edyn/ui/hooks/use-mobile';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { IconLayoutSidebar } from '@tabler/icons-react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport * as React from 'react';\nimport { Button } from '../button';\nimport { Input } from '../input';\nimport { Separator } from '../separator';\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '../sheet';\nimport { Skeleton } from '../skeleton';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../tooltip';\n\nconst SIDEBAR_COOKIE_NAME = 'sidebar_state';\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = '16rem';\nconst SIDEBAR_WIDTH_MOBILE = '18rem';\nconst SIDEBAR_WIDTH_ICON = '3rem';\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'b';\n\ntype TSidebarContextProps = {\n state: 'expanded' | 'collapsed';\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = React.createContext<TSidebarContextProps | null>(null);\n\nexport const useSidebar = () => {\n const context = React.useContext(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.');\n }\n\n return context;\n};\n\nexport const SidebarProvider = ({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) => {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = React.useState(false);\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === 'function' ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n\n // This sets the cookie to keep the sidebar state.\n // biome-ignore lint/suspicious/noDocumentCookie: match shadcn's synchronous, broadly supported persistence contract.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [setOpenProp, open],\n );\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);\n }, [isMobile, setOpen]);\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? 'expanded' : 'collapsed';\n\n const contextValue = React.useMemo<TSidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, toggleSidebar],\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH,\n '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn('group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar', className)}\n {...props}\n >\n {children}\n </div>\n </SidebarContext.Provider>\n );\n};\n\nexport const Sidebar = ({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n className,\n children,\n dir,\n ...props\n}: React.ComponentProps<'div'> & {\n side?: 'left' | 'right';\n variant?: 'sidebar' | 'floating' | 'inset';\n collapsible?: 'offcanvas' | 'icon' | 'none';\n}) => {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === 'none') {\n return (\n <div data-slot=\"sidebar\" className={cn('flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground', className)} {...props}>\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n dir={dir}\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <div\n className=\"group peer hidden text-sidebar-foreground md:block\"\n data-state={state}\n data-collapsible={state === 'collapsed' ? collapsible : ''}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n 'relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 motion-reduce:transition-none ease-linear',\n 'group-data-[collapsible=offcanvas]:w-0',\n 'group-data-[side=right]:rotate-180',\n variant === 'floating' || variant === 'inset'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)',\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n data-side={side}\n className={cn(\n 'fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 motion-reduce:transition-none ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)] md:flex',\n // Adjust the padding for floating and inset variants.\n variant === 'floating' || variant === 'inset'\n ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\n className,\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"flex size-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1 group-data-[variant=floating]:ring-sidebar-border\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n};\n\nexport const SidebarTrigger = ({ className, onClick, ...props }: React.ComponentProps<typeof Button>) => {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon-sm\"\n className={cn(className)}\n onClick={(event) => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <IconLayoutSidebar />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n};\n\nexport const SidebarRail = ({ className, ...props }: React.ComponentProps<'button'>) => {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n 'absolute inset-y-0 z-20 hidden w-4 transition-all motion-reduce:transition-none ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:start-1/2 after:w-[2px] hover:after:bg-sidebar-border sm:flex ltr:-translate-x-1/2 rtl:-translate-x-1/2',\n 'in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize',\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-sidebar',\n '[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',\n '[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const SidebarInset = ({ className, ...props }: React.ComponentProps<'main'>) => {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\n 'relative flex w-full flex-1 flex-col bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const SidebarInput = ({ className, ...props }: React.ComponentProps<typeof Input>) => {\n return <Input data-slot=\"sidebar-input\" data-sidebar=\"input\" className={cn('h-8 w-full bg-background shadow-none', className)} {...props} />;\n};\n\nexport const SidebarHeader = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"sidebar-header\" data-sidebar=\"header\" className={cn('flex flex-col gap-2 p-2', className)} {...props} />;\n};\n\nexport const SidebarFooter = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"sidebar-footer\" data-sidebar=\"footer\" className={cn('flex flex-col gap-2 p-2', className)} {...props} />;\n};\n\nexport const SidebarSeparator = ({ className, ...props }: React.ComponentProps<typeof Separator>) => {\n return <Separator data-slot=\"sidebar-separator\" data-sidebar=\"separator\" className={cn('mx-2 w-auto bg-sidebar-border', className)} {...props} />;\n};\n\nexport const SidebarContent = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n data-focus=\"inset\"\n className={cn('no-scrollbar flex min-h-0 flex-1 flex-col gap-0 overflow-auto group-data-[collapsible=icon]:overflow-hidden', className)}\n {...props}\n />\n );\n};\n\nexport const SidebarGroup = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"sidebar-group\" data-sidebar=\"group\" className={cn('relative flex w-full min-w-0 flex-col p-2', className)} {...props} />;\n};\n\nexport const SidebarGroupLabel = ({ className, render, ...props }: useRender.ComponentProps<'div'> & React.ComponentProps<'div'>) => {\n return useRender({\n defaultTagName: 'div',\n props: mergeProps<'div'>(\n {\n className: cn(\n 'flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 motion-reduce:transition-none ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n className,\n ),\n },\n props,\n ),\n render,\n state: {\n slot: 'sidebar-group-label',\n sidebar: 'group-label',\n },\n });\n};\n\nexport const SidebarGroupAction = ({ className, render, ...props }: useRender.ComponentProps<'button'> & React.ComponentProps<'button'>) => {\n return useRender({\n defaultTagName: 'button',\n props: mergeProps<'button'>(\n {\n className: cn(\n 'absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform motion-reduce:transition-none group-data-[collapsible=icon]:hidden after:absolute after:-inset-2 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0',\n className,\n ),\n },\n props,\n ),\n render,\n state: {\n slot: 'sidebar-group-action',\n sidebar: 'group-action',\n },\n });\n};\n\nexport const SidebarGroupContent = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"sidebar-group-content\" data-sidebar=\"group-content\" className={cn('w-full text-sm', className)} {...props} />;\n};\n\nexport const SidebarMenu = ({ className, ...props }: React.ComponentProps<'ul'>) => {\n return <ul data-slot=\"sidebar-menu\" data-sidebar=\"menu\" className={cn('flex w-full min-w-0 flex-col gap-0', className)} {...props} />;\n};\n\nexport const SidebarMenuItem = ({ className, ...props }: React.ComponentProps<'li'>) => {\n return <li data-slot=\"sidebar-menu-item\" data-sidebar=\"menu-item\" className={cn('group/menu-item relative', className)} {...props} />;\n};\n\nconst sidebarMenuButtonVariants = cva(\n 'peer/menu-button group/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] motion-reduce:transition-none group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:font-medium data-active:text-sidebar-accent-foreground [&_svg]:size-4 [&_svg]:shrink-0 [&>span:last-child]:truncate',\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n outline:\n 'bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]',\n },\n size: {\n default: 'h-8 text-sm',\n sm: 'h-7 text-xs',\n lg: 'h-12 text-sm group-data-[collapsible=icon]:p-0!',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nexport const SidebarMenuButton = ({\n render,\n isActive = false,\n variant = 'default',\n size = 'default',\n tooltip,\n className,\n ...props\n}: useRender.ComponentProps<'button'> &\n React.ComponentProps<'button'> & {\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n } & VariantProps<typeof sidebarMenuButtonVariants>) => {\n const { isMobile, state } = useSidebar();\n const comp = useRender({\n defaultTagName: 'button',\n props: mergeProps<'button'>(\n {\n className: cn(sidebarMenuButtonVariants({ variant, size }), className),\n },\n props,\n ),\n render: !tooltip ? render : <TooltipTrigger render={render} />,\n state: {\n slot: 'sidebar-menu-button',\n sidebar: 'menu-button',\n size,\n active: isActive,\n },\n });\n\n if (!tooltip) {\n return comp;\n }\n\n if (typeof tooltip === 'string') {\n tooltip = {\n children: tooltip,\n };\n }\n\n return (\n <Tooltip>\n {comp}\n <TooltipContent side=\"right\" align=\"center\" hidden={state !== 'collapsed' || isMobile} {...tooltip} />\n </Tooltip>\n );\n};\n\nexport const SidebarMenuAction = ({\n className,\n render,\n showOnHover = false,\n ...props\n}: useRender.ComponentProps<'button'> &\n React.ComponentProps<'button'> & {\n showOnHover?: boolean;\n }) => {\n return useRender({\n defaultTagName: 'button',\n props: mergeProps<'button'>(\n {\n className: cn(\n 'absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform motion-reduce:transition-none group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 after:absolute after:-inset-2 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0',\n showOnHover &&\n 'group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 peer-data-active/menu-button:text-sidebar-accent-foreground aria-expanded:opacity-100 md:opacity-0',\n className,\n ),\n },\n props,\n ),\n render,\n state: {\n slot: 'sidebar-menu-action',\n sidebar: 'menu-action',\n },\n });\n};\n\nexport const SidebarMenuBadge = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n 'pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium text-sidebar-foreground tabular-nums select-none group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 peer-data-active/menu-button:text-sidebar-accent-foreground',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const SidebarMenuSkeleton = ({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean;\n}) => {\n // Random width between 50 to 90%.\n const [width] = React.useState(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n });\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn('flex h-8 items-center gap-2 rounded-md px-2', className)}\n {...props}\n >\n {showIcon && <Skeleton className=\"size-4 rounded-md\" data-sidebar=\"menu-skeleton-icon\" />}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n '--skeleton-width': width,\n } as React.CSSProperties\n }\n />\n </div>\n );\n};\n\nexport const SidebarMenuSub = ({ className, ...props }: React.ComponentProps<'ul'>) => {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n 'mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5 group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const SidebarMenuSubItem = ({ className, ...props }: React.ComponentProps<'li'>) => {\n return <li data-slot=\"sidebar-menu-sub-item\" data-sidebar=\"menu-sub-item\" className={cn('group/menu-sub-item relative', className)} {...props} />;\n};\n\nexport const SidebarMenuSubButton = ({\n render,\n size = 'md',\n isActive = false,\n className,\n ...props\n}: useRender.ComponentProps<'a'> &\n React.ComponentProps<'a'> & {\n size?: 'sm' | 'md';\n isActive?: boolean;\n }) => {\n return useRender({\n defaultTagName: 'a',\n props: mergeProps<'a'>(\n {\n className: cn(\n 'flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground ring-sidebar-ring outline-hidden group-data-[collapsible=icon]:hidden hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[size=md]:text-sm data-[size=sm]:text-xs data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground',\n className,\n ),\n },\n props,\n ),\n render,\n state: {\n slot: 'sidebar-menu-sub-button',\n sidebar: 'menu-sub-button',\n size,\n active: isActive,\n },\n });\n};\n","import { cn } from '@edyn/ui/lib/utils';\nimport { IconLoader } from '@tabler/icons-react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nexport const spinnerVariants = cva('animate-spin motion-reduce:animate-none', {\n variants: {\n size: {\n xs: 'size-3',\n sm: 'size-4',\n default: 'size-5',\n lg: 'size-6',\n xl: 'size-8',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n});\n\nexport const Spinner = ({ className, size = 'default', ...props }: React.ComponentProps<'svg'> & VariantProps<typeof spinnerVariants>) => {\n return <IconLoader data-slot=\"spinner\" role=\"status\" aria-label=\"Loading\" className={cn(spinnerVariants({ size }), className)} {...props} />;\n};\n","import { Switch as SwitchPrimitive } from '@base-ui/react/switch';\n\nimport { cn } from '@edyn/ui/lib/utils';\n\nexport const Switch = ({\n className,\n size = 'default',\n ...props\n}: SwitchPrimitive.Root.Props & {\n size?: 'sm' | 'default';\n}) => {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n 'peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-all motion-reduce:transition-none outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=default]:h-4.5 data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50',\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className=\"pointer-events-none block rounded-full bg-background ring-0 transition-transform motion-reduce:transition-none group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground\"\n />\n </SwitchPrimitive.Root>\n );\n};\n","import { cn } from '@edyn/ui/lib/utils';\nimport type * as React from 'react';\n\nexport const Table = ({ className, ...props }: React.ComponentProps<'table'>) => {\n return (\n <div data-slot=\"table-container\" data-focus=\"inset\" className=\"relative w-full overflow-x-auto\">\n <table data-slot=\"table\" className={cn('w-full caption-bottom text-sm', className)} {...props} />\n </div>\n );\n};\n\nexport const TableHeader = ({ className, ...props }: React.ComponentProps<'thead'>) => {\n return <thead data-slot=\"table-header\" className={cn('[&_tr]:border-b', className)} {...props} />;\n};\n\nexport const TableBody = ({ className, ...props }: React.ComponentProps<'tbody'>) => {\n return <tbody data-slot=\"table-body\" className={cn('[&_tr:last-child]:border-0', className)} {...props} />;\n};\n\nexport const TableFooter = ({ className, ...props }: React.ComponentProps<'tfoot'>) => {\n return <tfoot data-slot=\"table-footer\" className={cn('border-t bg-muted/50 font-medium [&>tr]:last:border-b-0', className)} {...props} />;\n};\n\nexport const TableRow = ({ className, ...props }: React.ComponentProps<'tr'>) => {\n return (\n <tr data-slot=\"table-row\" className={cn('border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted', className)} {...props} />\n );\n};\n\nexport const TableHead = ({ className, ...props }: React.ComponentProps<'th'>) => {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n 'h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const TableCell = ({ className, ...props }: React.ComponentProps<'td'>) => {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn('p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]', className)}\n {...props}\n />\n );\n};\n\nexport const TableCaption = ({ className, ...props }: React.ComponentProps<'caption'>) => {\n return <caption data-slot=\"table-caption\" className={cn('mt-4 text-sm text-muted-foreground', className)} {...props} />;\n};\n","import { Tabs as BaseTabs } from '@base-ui/react/tabs';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport type * as React from 'react';\n\nexport interface ITabsProps {\n /** Controlled selected tab. Provide with `onValueChange`. */\n value?: string;\n /** Uncontrolled initial tab. Use this when the component should own its state. */\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n className?: string;\n orientation?: 'horizontal' | 'vertical';\n children: React.ReactNode;\n}\n\nexport const Tabs = ({ value, defaultValue, onValueChange, className, orientation = 'horizontal', children }: ITabsProps) => (\n <BaseTabs.Root\n data-slot=\"tabs\"\n data-orientation={orientation}\n value={value}\n defaultValue={defaultValue}\n orientation={orientation}\n onValueChange={(next) => {\n onValueChange?.(String(next));\n }}\n className={cn('group/tabs flex w-full gap-2 data-[orientation=horizontal]:flex-col', className)}\n >\n {children}\n </BaseTabs.Root>\n);\n\nexport const tabsListVariants = cva(\n 'group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-[orientation=horizontal]/tabs:h-8 group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col data-[variant=line]:rounded-none',\n {\n variants: {\n variant: {\n default: 'bg-muted',\n line: 'gap-1 bg-transparent',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nexport interface ITabsListProps extends VariantProps<typeof tabsListVariants> {\n className?: string;\n children: React.ReactNode;\n}\n\nexport const TabsList = ({ className, variant = 'default', children }: ITabsListProps) => (\n <BaseTabs.List data-slot=\"tabs-list\" data-variant={variant} className={cn(tabsListVariants({ variant }), className)}>\n {children}\n </BaseTabs.List>\n);\n\nexport interface ITabsTriggerProps {\n value: string;\n disabled?: boolean;\n className?: string;\n children: React.ReactNode;\n}\n\nexport const TabsTrigger = ({ value, disabled, className, children }: ITabsTriggerProps) => (\n <BaseTabs.Tab\n value={value}\n disabled={disabled}\n className={cn(\n 'relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 dark:text-muted-foreground dark:hover:text-foreground group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\"size-\"])]:size-4',\n 'group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent',\n 'data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground',\n 'after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100',\n className,\n )}\n >\n {children}\n </BaseTabs.Tab>\n);\n\nexport interface ITabsContentProps {\n value: string;\n keepMounted?: boolean;\n className?: string;\n children: React.ReactNode;\n}\n\nexport const TabsContent = ({ value, keepMounted = false, className, children }: ITabsContentProps) => (\n <BaseTabs.Panel value={value} keepMounted={keepMounted} className={cn('flex-1 text-sm outline-none', className)}>\n {children}\n </BaseTabs.Panel>\n);\n","'use client';\n\nimport { Toast as ToastPrimitive } from '@base-ui/react/toast';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { IconAlertOctagon, IconAlertTriangle, IconCircleCheck, IconInfoCircle, IconLoader, IconX } from '@tabler/icons-react';\nimport type * as React from 'react';\nimport { Button } from '../button';\n\nexport const toast = ToastPrimitive.createToastManager();\n\nexport const ToastProvider = ({ ...props }: ToastPrimitive.Provider.Props) => {\n return <ToastPrimitive.Provider {...props} />;\n};\n\nexport const ToastPortal = ({ ...props }: ToastPrimitive.Portal.Props) => {\n return <ToastPrimitive.Portal data-slot=\"toast-portal\" {...props} />;\n};\n\nexport const ToastViewport = ({ className, ...props }: ToastPrimitive.Viewport.Props) => {\n return (\n <ToastPrimitive.Viewport\n data-slot=\"toast-viewport\"\n className={cn(\n 'pointer-events-none fixed inset-x-4 bottom-4 z-50 mx-auto w-auto max-w-sm outline-none sm:right-4 sm:left-auto sm:mx-0 sm:w-full',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const Toast = ({ className, ...props }: ToastPrimitive.Root.Props) => {\n return (\n <ToastPrimitive.Root\n data-slot=\"toast\"\n className={cn(\n 'group/toast pointer-events-auto absolute right-0 bottom-0 z-[calc(1000-var(--toast-index))] w-full origin-bottom rounded-2xl border bg-popover text-popover-foreground shadow-lg will-change-transform outline-none select-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50',\n '[--gap:0.75rem] [--height:var(--toast-frontmost-height,var(--toast-height))] [--offset-y:calc(var(--toast-offset-y)*-1+calc(var(--toast-index)*var(--gap)*-1)+var(--toast-swipe-movement-y))] [--peek:0.75rem] [--scale:calc(max(0,1-(var(--toast-index)*0.1)))] [--shrink:calc(1-var(--scale))]',\n 'h-(--height) [transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)-(var(--toast-index)*var(--peek))-(var(--shrink)*var(--height))))_scale(var(--scale))] [transition:transform_500ms_cubic-bezier(0.22,1,0.36,1),opacity_500ms,height_150ms] motion-reduce:transition-none',\n \"after:absolute after:top-full after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:content-['']\",\n 'data-expanded:h-(--toast-height) data-expanded:[transform:translateX(var(--toast-swipe-movement-x))_translateY(var(--offset-y))]',\n 'data-limited:opacity-0 data-starting-style:[transform:translateY(150%)]',\n '[&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateY(150%)]',\n 'data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]',\n 'data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]',\n 'data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]',\n 'data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]',\n 'data-expanded:data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]',\n 'data-expanded:data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]',\n 'data-expanded:data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]',\n 'data-expanded:data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const ToastContent = ({ className, ...props }: ToastPrimitive.Content.Props) => {\n return (\n <ToastPrimitive.Content\n data-slot=\"toast-content\"\n className={cn(\n 'flex h-full items-center gap-3 overflow-hidden p-4 transition-opacity duration-250 ease-[cubic-bezier(0.22,1,0.36,1)] motion-reduce:transition-none data-behind:opacity-0 data-expanded:opacity-100',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const ToastTitle = ({ className, ...props }: ToastPrimitive.Title.Props) => {\n return <ToastPrimitive.Title data-slot=\"toast-title\" className={cn('text-sm font-medium', className)} {...props} />;\n};\n\nexport const ToastDescription = ({ className, ...props }: ToastPrimitive.Description.Props) => {\n return <ToastPrimitive.Description data-slot=\"toast-description\" className={cn('text-sm text-muted-foreground', className)} {...props} />;\n};\n\nexport const ToastAction = ({ className, render = <Button variant=\"outline\" size=\"sm\" />, ...props }: ToastPrimitive.Action.Props) => {\n return <ToastPrimitive.Action data-slot=\"toast-action\" render={render} className={cn('shrink-0', className)} {...props} />;\n};\n\nexport const ToastClose = ({ className, children, render = <Button variant=\"ghost\" size=\"icon-sm\" />, ...props }: ToastPrimitive.Close.Props) => {\n return (\n <ToastPrimitive.Close\n data-slot=\"toast-close\"\n aria-label=\"Close toast\"\n render={render}\n className={cn(\"relative shrink-0 text-muted-foreground after:absolute after:-inset-2 after:content-[''] hover:text-foreground\", className)}\n {...props}\n >\n {children ?? <IconX aria-hidden=\"true\" />}\n </ToastPrimitive.Close>\n );\n};\n\nconst ToastIcon = ({ type }: { type: string | undefined }) => {\n let icon: React.ReactNode = null;\n\n if (type === 'success') {\n icon = <IconCircleCheck aria-hidden=\"true\" />;\n }\n\n if (type === 'info') {\n icon = <IconInfoCircle aria-hidden=\"true\" />;\n }\n\n if (type === 'warning') {\n icon = <IconAlertTriangle aria-hidden=\"true\" />;\n }\n\n if (type === 'error') {\n icon = <IconAlertOctagon className=\"text-destructive\" aria-hidden=\"true\" />;\n }\n\n if (type === 'loading') {\n icon = <IconLoader className=\"animate-spin motion-reduce:animate-none\" aria-hidden=\"true\" />;\n }\n\n if (!icon) {\n return null;\n }\n\n return (\n <span data-slot=\"toast-icon\" className=\"shrink-0 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\">\n {icon}\n </span>\n );\n};\n\nconst ToastList = () => {\n const { toasts } = ToastPrimitive.useToastManager();\n\n return toasts.map((toastItem) => (\n <Toast key={toastItem.id} toast={toastItem}>\n <ToastContent>\n <ToastIcon type={toastItem.type} />\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <ToastTitle />\n <ToastDescription />\n </div>\n <ToastAction />\n <ToastClose />\n </ToastContent>\n </Toast>\n ));\n};\n\nexport const Toaster = ({ children, toastManager = toast, ...props }: ToastPrimitive.Provider.Props) => {\n return (\n <ToastProvider toastManager={toastManager} {...props}>\n {children}\n <ToastPortal>\n <ToastViewport>\n <ToastList />\n </ToastViewport>\n </ToastPortal>\n </ToastProvider>\n );\n};\n\nexport const createToastManager = ToastPrimitive.createToastManager;\nexport const useToastManager = ToastPrimitive.useToastManager;\n","import { Toggle as TogglePrimitive } from '@base-ui/react/toggle';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nexport const toggleVariants = cva(\n 'inline-flex shrink-0 cursor-pointer items-center justify-center gap-1.5 rounded-lg border border-transparent text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 data-pressed:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\"size-\"])]:size-4',\n {\n variants: {\n variant: {\n default: 'bg-transparent hover:bg-muted hover:text-foreground data-pressed:bg-muted',\n outline:\n 'border-border bg-background hover:bg-muted hover:text-foreground data-pressed:bg-muted dark:border-input dark:bg-input/30 dark:hover:bg-input/50',\n },\n size: {\n sm: 'h-7 px-2.5 text-[0.8rem]',\n default: 'h-8 px-2.5',\n lg: 'h-9 px-3',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nexport type TToggleVariants = VariantProps<typeof toggleVariants>;\n\nexport const Toggle = <Value extends string>({\n className,\n variant = 'default',\n size = 'default',\n ...props\n}: TogglePrimitive.Props<Value> & TToggleVariants) => {\n return <TogglePrimitive data-slot=\"toggle\" className={cn(toggleVariants({ variant, size, className }))} {...props} />;\n};\n","import { Toggle as TogglePrimitive } from '@base-ui/react/toggle';\nimport { ToggleGroup as ToggleGroupPrimitive } from '@base-ui/react/toggle-group';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { type CSSProperties, createContext, useContext } from 'react';\nimport { type TToggleVariants, toggleVariants } from '../toggle/toggle';\n\ninterface IToggleGroupContext extends TToggleVariants {\n spacing?: number;\n orientation?: 'horizontal' | 'vertical';\n}\n\nconst ToggleGroupContext = createContext<IToggleGroupContext>({\n variant: 'default',\n size: 'default',\n spacing: 2,\n orientation: 'horizontal',\n});\n\nexport const ToggleGroup = <Value extends string>({\n className,\n variant = 'default',\n size = 'default',\n spacing = 2,\n orientation = 'horizontal',\n children,\n ...props\n}: ToggleGroupPrimitive.Props<Value> & TToggleVariants & { spacing?: number }) => {\n return (\n <ToggleGroupContext.Provider value={{ variant, size, spacing, orientation }}>\n <ToggleGroupPrimitive\n data-slot=\"toggle-group\"\n data-variant={variant}\n data-size={size}\n data-spacing={spacing}\n data-orientation={orientation}\n orientation={orientation}\n aria-orientation={undefined}\n style={{ gap: `calc(var(--spacing) * ${spacing})` } as CSSProperties}\n className={cn(\n 'group/toggle-group flex w-fit flex-row items-center rounded-lg data-[size=sm]:rounded-[min(var(--radius-md),10px)] data-[orientation=vertical]:flex-col data-[orientation=vertical]:items-stretch',\n className,\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive>\n </ToggleGroupContext.Provider>\n );\n};\n\nexport const ToggleGroupItem = <Value extends string>({ className, variant, size, ...props }: TogglePrimitive.Props<Value> & TToggleVariants) => {\n const ctx = useContext(ToggleGroupContext);\n const resolvedVariant = variant ?? ctx.variant ?? 'default';\n const resolvedSize = size ?? ctx.size ?? 'default';\n\n return (\n <TogglePrimitive\n data-slot=\"toggle-group-item\"\n data-variant={resolvedVariant}\n data-size={resolvedSize}\n data-spacing={ctx.spacing}\n className={cn(\n 'shrink-0 group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 focus:z-10 focus-visible:z-10 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-end]:pr-1.5 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-start]:pl-1.5 group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:first:rounded-l-lg group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:first:rounded-t-lg group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:last:rounded-r-lg group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:last:rounded-b-lg group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t',\n toggleVariants({ variant: resolvedVariant, size: resolvedSize }),\n className,\n )}\n {...props}\n />\n );\n};\n"],"mappings":"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"}
|