kablui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kablui.js","sources":["../src/components/accordionContext.ts","../src/components/Accordion.vue","../src/components/AccordionContent.vue","../src/composables/useId.ts","../src/components/AccordionItem.vue","../src/components/AccordionTrigger.vue","../src/components/Alert.vue","../src/components/Badge.vue","../src/components/Button.vue","../src/components/Card.vue","../src/components/CardBody.vue","../src/components/CardDescription.vue","../src/components/CardFooter.vue","../src/components/CardHeader.vue","../src/components/CardTitle.vue","../src/composables/useField.ts","../src/components/Checkbox.vue","../src/components/Cluster.vue","../src/components/Container.vue","../src/composables/useOverlayStack.ts","../src/composables/useDismissable.ts","../src/composables/dom.ts","../src/composables/useFocusTrap.ts","../src/composables/useScrollLock.ts","../src/components/Dialog.vue","../src/components/Empty.vue","../src/components/Field.vue","../src/components/FieldError.vue","../src/components/FieldHint.vue","../src/components/Icon.vue","../src/components/Input.vue","../src/components/Label.vue","../src/components/Link.vue","../src/components/menuContext.ts","../src/components/Menu.vue","../src/composables/useFloating.ts","../src/components/MenuContent.vue","../src/components/MenuItem.vue","../src/components/MenuSeparator.vue","../src/components/MenuTrigger.vue","../src/components/Pagination.vue","../src/components/popoverContext.ts","../src/components/Popover.vue","../src/components/PopoverContent.vue","../src/components/PopoverTrigger.vue","../src/components/Progress.vue","../src/components/radioContext.ts","../src/components/Radio.vue","../src/components/RadioGroup.vue","../src/components/selectContext.ts","../src/components/Select.vue","../src/components/SelectItem.vue","../src/components/Separator.vue","../src/components/Skeleton.vue","../src/components/Spinner.vue","../src/components/Stack.vue","../src/components/Switch.vue","../src/components/tabsContext.ts","../src/components/Tab.vue","../src/components/TabList.vue","../src/components/TabPanel.vue","../src/components/Tabs.vue","../src/components/Text.vue","../src/components/Textarea.vue","../src/components/Toast.vue","../src/components/toastContext.ts","../src/components/ToastProvider.vue","../src/components/Tooltip.vue","../src/composables/useToast.ts","../src/index.ts"],"sourcesContent":["import type { ComputedRef, InjectionKey } from 'vue'\n\nexport interface AccordionContext {\n type: ComputedRef<'single' | 'multiple'>\n collapsible: ComputedRef<boolean>\n isOpen: (value: string) => boolean\n toggle: (value: string) => void\n registerTrigger: (value: string, el: HTMLButtonElement | null, disabled: boolean) => void\n unregisterTrigger: (value: string) => void\n focusRelative: (currentValue: string, delta: number) => void\n}\n\nexport interface AccordionItemContext {\n value: string\n disabled: ComputedRef<boolean>\n triggerId: string\n contentId: string\n isOpen: ComputedRef<boolean>\n toggle: () => void\n}\n\nexport const ACCORDION_KEY: InjectionKey<AccordionContext> = Symbol('kablui-accordion')\nexport const ACCORDION_ITEM_KEY: InjectionKey<AccordionItemContext> = Symbol(\n 'kablui-accordion-item',\n)\n","<script setup lang=\"ts\">\nimport { computed, provide } from 'vue'\nimport { ACCORDION_KEY } from './accordionContext'\n\nexport interface AccordionProps {\n /** Single opens one item; multiple allows several. */\n type?: 'single' | 'multiple'\n /** When type is single, allow collapsing the open item. Default true. */\n collapsible?: boolean\n}\n\nconst props = withDefaults(defineProps<AccordionProps>(), {\n type: 'single',\n collapsible: true,\n})\n\nconst model = defineModel<string | string[] | undefined>()\n\ninterface TriggerEntry {\n el: HTMLButtonElement | null\n disabled: boolean\n}\n\nconst triggers = new Map<string, TriggerEntry>()\nconst triggerOrder: string[] = []\n\nfunction isOpen(value: string): boolean {\n if (props.type === 'multiple') {\n return Array.isArray(model.value) && model.value.includes(value)\n }\n return model.value === value\n}\n\nfunction toggle(value: string) {\n if (props.type === 'multiple') {\n const current = Array.isArray(model.value) ? [...model.value] : []\n const index = current.indexOf(value)\n if (index >= 0) current.splice(index, 1)\n else current.push(value)\n model.value = current\n return\n }\n\n if (model.value === value) {\n if (props.collapsible) model.value = undefined\n return\n }\n model.value = value\n}\n\nfunction registerTrigger(value: string, el: HTMLButtonElement | null, disabled: boolean) {\n if (!triggers.has(value)) triggerOrder.push(value)\n triggers.set(value, { el, disabled })\n}\n\nfunction unregisterTrigger(value: string) {\n triggers.delete(value)\n const index = triggerOrder.indexOf(value)\n if (index >= 0) triggerOrder.splice(index, 1)\n}\n\nfunction enabledTriggers(): HTMLButtonElement[] {\n return triggerOrder\n .map((value) => triggers.get(value))\n .filter((entry): entry is TriggerEntry => !!entry && !entry.disabled && !!entry.el)\n .map((entry) => entry.el!)\n}\n\nfunction focusRelative(currentValue: string, delta: number) {\n const list = enabledTriggers()\n if (list.length === 0) return\n\n const current = triggers.get(currentValue)?.el\n const index = current ? list.indexOf(current) : -1\n if (index === -1) {\n list[0]?.focus()\n return\n }\n const next = list[(index + delta + list.length) % list.length]!\n next.focus()\n}\n\nprovide(ACCORDION_KEY, {\n type: computed(() => props.type),\n collapsible: computed(() => props.collapsible),\n isOpen,\n toggle,\n registerTrigger,\n unregisterTrigger,\n focusRelative,\n})\n</script>\n\n<template>\n <div data-slot=\"accordion\">\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject } from 'vue'\nimport { ACCORDION_ITEM_KEY } from './accordionContext'\n\n/** No props — open state and ids come from AccordionItem. */\nexport type AccordionContentProps = Record<string, never>\n\nconst item = inject(ACCORDION_ITEM_KEY, null)\n\nif (!item) {\n console.warn('[kablui] AccordionContent must be used inside AccordionItem')\n}\n\nconst isOpen = computed(() => !!item?.isOpen.value)\n\nconst classes = [\n 'px-1 pb-3 text-kablui-md text-kablui-muted-fg',\n].join(' ')\n</script>\n\n<template>\n <div\n v-show=\"isOpen\"\n data-slot=\"accordion-content\"\n role=\"region\"\n :id=\"item?.contentId\"\n :aria-labelledby=\"item?.triggerId\"\n :class=\"classes\"\n >\n <slot />\n </div>\n</template>\n","let idCounter = 0\n\n/**\n * Generate a unique, stable `kablui-*` id for a11y wiring.\n * Safe to call outside setup (module counter, not Vue's useId).\n */\nexport function useId(prefix: string): string {\n idCounter += 1\n return `kablui-${prefix}-${idCounter}`\n}\n\n/** @internal — reset between tests */\nexport function __resetIdCounter(): void {\n idCounter = 0\n}\n","<script setup lang=\"ts\">\nimport { computed, inject, provide } from 'vue'\nimport { useId } from '../composables/useId'\nimport { ACCORDION_ITEM_KEY, ACCORDION_KEY } from './accordionContext'\n\nexport interface AccordionItemProps {\n /** Stable id used with Accordion `v-model` / open state. */\n value: string\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<AccordionItemProps>(), {\n disabled: false,\n})\n\nconst accordion = inject(ACCORDION_KEY, null)\n\nif (!accordion) {\n console.warn('[kablui] AccordionItem must be used inside Accordion')\n}\n\nconst triggerId = useId('accordion-trigger')\nconst contentId = useId('accordion-content')\n\nconst isDisabled = computed(() => props.disabled)\nconst isOpen = computed(() => !!accordion?.isOpen(props.value))\n\nfunction toggle() {\n if (!accordion || isDisabled.value) return\n accordion.toggle(props.value)\n}\n\nprovide(ACCORDION_ITEM_KEY, {\n value: props.value,\n disabled: isDisabled,\n triggerId,\n contentId,\n isOpen,\n toggle,\n})\n</script>\n\n<template>\n <div\n data-slot=\"accordion-item\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n :data-disabled=\"disabled || undefined\"\n class=\"border-b border-kablui-border\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount, watch, type ComponentPublicInstance } from 'vue'\nimport { ACCORDION_ITEM_KEY, ACCORDION_KEY } from './accordionContext'\n\n/** No props — label content comes from the default slot. */\nexport type AccordionTriggerProps = Record<string, never>\n\nconst accordion = inject(ACCORDION_KEY, null)\nconst item = inject(ACCORDION_ITEM_KEY, null)\n\nif (!accordion || !item) {\n console.warn('[kablui] AccordionTrigger must be used inside AccordionItem')\n}\n\nconst isOpen = computed(() => !!item?.isOpen.value)\nconst isDisabled = computed(() => !!item?.disabled.value)\n\nlet triggerEl: HTMLButtonElement | null = null\n\nfunction setTriggerRef(el: Element | ComponentPublicInstance | null) {\n triggerEl = el instanceof HTMLButtonElement ? el : null\n if (accordion && item) {\n accordion.registerTrigger(item.value, triggerEl, isDisabled.value)\n }\n}\n\nwatch(isDisabled, (disabled) => {\n if (accordion && item) {\n accordion.registerTrigger(item.value, triggerEl, disabled)\n }\n})\n\nonBeforeUnmount(() => {\n if (accordion && item) accordion.unregisterTrigger(item.value)\n})\n\nfunction onClick() {\n item?.toggle()\n}\n\nfunction onKeydown(event: KeyboardEvent) {\n if (!accordion || !item || isDisabled.value) return\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault()\n item.toggle()\n break\n case 'ArrowDown':\n event.preventDefault()\n accordion.focusRelative(item.value, 1)\n break\n case 'ArrowUp':\n event.preventDefault()\n accordion.focusRelative(item.value, -1)\n break\n }\n}\n\nconst classes = [\n 'flex w-full items-center justify-between gap-2',\n 'px-1 py-3 text-left text-kablui-md font-kablui-medium text-kablui-fg',\n 'bg-transparent hover:bg-kablui-muted',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-kablui-focus focus-visible:ring-offset-2 focus-visible:ring-offset-kablui-bg',\n 'disabled:opacity-50 disabled:pointer-events-none',\n].join(' ')\n</script>\n\n<template>\n <h3 class=\"m-0\">\n <button\n :ref=\"setTriggerRef\"\n type=\"button\"\n data-slot=\"accordion-trigger\"\n :id=\"item?.triggerId\"\n :class=\"classes\"\n :disabled=\"isDisabled\"\n :aria-expanded=\"isOpen ? 'true' : 'false'\"\n :aria-controls=\"item?.contentId\"\n @click=\"onClick\"\n @keydown=\"onKeydown\"\n >\n <slot />\n </button>\n </h3>\n</template>\n","<script setup lang=\"ts\">\nexport interface AlertProps {\n tone?: 'neutral' | 'accent' | 'danger' | 'success' | 'warning'\n title?: string\n /** Shows a dismiss control and emits `dismiss` when activated. */\n dismissible?: boolean\n}\n\nwithDefaults(defineProps<AlertProps>(), {\n tone: 'neutral',\n dismissible: false,\n})\n\nconst emit = defineEmits<{\n dismiss: []\n}>()\n\nconst baseClasses = [\n 'relative flex w-full gap-3 rounded-kablui-md border px-3 py-2.5',\n 'text-kablui-md',\n].join(' ')\n\nconst toneClasses: Record<NonNullable<AlertProps['tone']>, string> = {\n neutral: 'border-kablui-border bg-kablui-muted text-kablui-fg',\n accent: 'border-kablui-accent bg-kablui-accent text-kablui-accent-fg',\n danger: 'border-kablui-danger bg-kablui-danger text-kablui-danger-fg',\n success: 'border-kablui-success bg-kablui-success text-kablui-success-fg',\n warning: 'border-kablui-warning bg-kablui-warning text-kablui-warning-fg',\n}\n\nconst dismissClasses = [\n 'ml-auto shrink-0 -mr-1 -mt-0.5 inline-flex size-6 items-center justify-center',\n 'rounded-kablui-sm text-current opacity-70 hover:opacity-100',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-kablui-focus focus-visible:ring-offset-2 focus-visible:ring-offset-kablui-bg',\n].join(' ')\n\nfunction onDismiss() {\n emit('dismiss')\n}\n</script>\n\n<template>\n <div\n :role=\"tone === 'danger' ? 'alert' : 'status'\"\n :class=\"[baseClasses, toneClasses[tone]]\"\n >\n <div class=\"min-w-0 flex-1\">\n <div v-if=\"title\" class=\"font-kablui-semibold\">\n {{ title }}\n </div>\n <div :class=\"title ? 'mt-0.5' : undefined\">\n <slot />\n </div>\n </div>\n <button\n v-if=\"dismissible\"\n type=\"button\"\n :class=\"dismissClasses\"\n aria-label=\"Dismiss\"\n @click=\"onDismiss\"\n >\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nexport interface BadgeProps {\n tone?: 'neutral' | 'accent' | 'danger'\n size?: 'sm' | 'md'\n}\n\nwithDefaults(defineProps<BadgeProps>(), {\n tone: 'neutral',\n size: 'md',\n})\n\nconst baseClasses = [\n 'inline-flex items-center font-kablui-medium',\n 'rounded-kablui-full',\n 'whitespace-nowrap',\n].join(' ')\n\nconst toneClasses: Record<NonNullable<BadgeProps['tone']>, string> = {\n neutral: 'bg-kablui-muted text-kablui-fg',\n accent: 'bg-kablui-accent text-kablui-accent-fg',\n danger: 'bg-kablui-danger text-kablui-danger-fg',\n}\n\nconst sizeClasses: Record<NonNullable<BadgeProps['size']>, string> = {\n sm: 'text-kablui-sm px-2 py-0.5',\n md: 'text-kablui-md px-2.5 py-1',\n}\n</script>\n\n<template>\n <span :class=\"[baseClasses, toneClasses[tone], sizeClasses[size]]\">\n <slot />\n </span>\n</template>\n","<script setup lang=\"ts\">\nexport interface ButtonProps {\n variant?: 'solid' | 'outline' | 'ghost'\n size?: 'sm' | 'md' | 'lg'\n disabled?: boolean\n type?: 'button' | 'submit' | 'reset'\n}\n\nconst props = withDefaults(defineProps<ButtonProps>(), {\n variant: 'solid',\n size: 'md',\n disabled: false,\n type: 'button',\n})\n\nconst emit = defineEmits<{\n click: [event: MouseEvent]\n}>()\n\nconst baseClasses = [\n 'inline-flex items-center justify-center gap-1.5 font-kablui-medium',\n 'rounded-kablui-md',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-kablui-focus focus-visible:ring-offset-2 focus-visible:ring-offset-kablui-bg',\n 'disabled:opacity-50 disabled:pointer-events-none',\n].join(' ')\n\nconst variantClasses: Record<NonNullable<ButtonProps['variant']>, string> = {\n solid: 'bg-kablui-accent text-kablui-accent-fg hover:opacity-90',\n outline:\n 'border border-kablui-border-strong bg-transparent text-kablui-fg hover:bg-kablui-muted',\n ghost: 'bg-transparent text-kablui-fg hover:bg-kablui-muted',\n}\n\nconst sizeClasses: Record<NonNullable<ButtonProps['size']>, string> = {\n sm: 'text-kablui-sm px-2 py-1',\n md: 'text-kablui-md px-3 py-1.5',\n lg: 'text-kablui-lg px-4 py-2',\n}\n\nfunction onClick(event: MouseEvent) {\n if (props.disabled) return\n emit('click', event)\n}\n</script>\n\n<template>\n <button\n :type=\"type\"\n :disabled=\"disabled\"\n :class=\"[baseClasses, variantClasses[variant], sizeClasses[size]]\"\n @click=\"onClick\"\n >\n <slot />\n </button>\n</template>\n","<script setup lang=\"ts\">\nexport interface CardProps {\n as?: 'div' | 'article' | 'section'\n padding?: 'none' | 'sm' | 'md'\n}\n\nwithDefaults(defineProps<CardProps>(), {\n as: 'div',\n padding: 'none',\n})\n\nconst baseClasses = [\n 'rounded-kablui-md border border-kablui-border bg-kablui-bg',\n 'text-kablui-fg shadow-kablui-sm',\n].join(' ')\n\nconst paddingClasses: Record<NonNullable<CardProps['padding']>, string> = {\n none: '',\n sm: 'p-3',\n md: 'p-4',\n}\n</script>\n\n<template>\n <component\n :is=\"as\"\n :class=\"[baseClasses, paddingClasses[padding]]\"\n data-slot=\"card\"\n >\n <slot />\n </component>\n</template>\n","<script setup lang=\"ts\">\nexport type CardBodyProps = Record<string, never>\n\nconst classes = 'px-4 py-3 text-kablui-md text-kablui-fg'\n</script>\n\n<template>\n <div\n :class=\"classes\"\n data-slot=\"card-body\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nexport type CardDescriptionProps = Record<string, never>\n\nconst classes = 'text-kablui-sm text-kablui-muted-fg'\n</script>\n\n<template>\n <p\n :class=\"classes\"\n data-slot=\"card-description\"\n >\n <slot />\n </p>\n</template>\n","<script setup lang=\"ts\">\nexport type CardFooterProps = Record<string, never>\n\nconst classes = [\n 'flex flex-wrap items-center justify-end gap-2',\n 'border-t border-kablui-border px-4 py-3',\n].join(' ')\n</script>\n\n<template>\n <div\n :class=\"classes\"\n data-slot=\"card-footer\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nexport type CardHeaderProps = Record<string, never>\n\nconst classes = 'flex flex-col gap-1 px-4 pt-4 pb-2 text-kablui-fg'\n</script>\n\n<template>\n <div\n :class=\"classes\"\n data-slot=\"card-header\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nexport interface CardTitleProps {\n as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'\n}\n\nwithDefaults(defineProps<CardTitleProps>(), {\n as: 'h3',\n})\n\nconst classes = 'font-kablui-semibold text-kablui-lg text-kablui-fg'\n</script>\n\n<template>\n <component\n :is=\"as\"\n :class=\"classes\"\n data-slot=\"card-title\"\n >\n <slot />\n </component>\n</template>\n","import {\n computed,\n inject,\n provide,\n ref,\n toValue,\n type ComputedRef,\n type InjectionKey,\n type MaybeRefOrGetter,\n} from 'vue'\nimport { __resetIdCounter, useId } from './useId'\n\nexport interface FieldContext {\n controlId: string\n hintId: string\n errorId: string\n invalid: ComputedRef<boolean>\n describedBy: ComputedRef<string | undefined>\n setHasHint: (value: boolean) => void\n setHasError: (value: boolean) => void\n}\n\nconst FIELD_KEY: InjectionKey<FieldContext> = Symbol('kablui-field')\n\n/** @internal — reset between tests */\nexport function __resetFieldIdCounter(): void {\n __resetIdCounter()\n}\n\nexport interface ProvideFieldOptions {\n invalid?: MaybeRefOrGetter<boolean | undefined>\n id?: string\n}\n\nexport function provideField(options: ProvideFieldOptions = {}): FieldContext {\n const controlId = options.id ?? useId('control')\n const hintId = useId('hint')\n const errorId = useId('error')\n const hasHint = ref(false)\n const hasError = ref(false)\n\n const invalid = computed(() => !!toValue(options.invalid))\n\n const describedBy = computed(() => {\n const ids: string[] = []\n if (hasHint.value) ids.push(hintId)\n if (hasError.value) ids.push(errorId)\n return ids.length > 0 ? ids.join(' ') : undefined\n })\n\n const ctx: FieldContext = {\n controlId,\n hintId,\n errorId,\n invalid,\n describedBy,\n setHasHint: (value: boolean) => {\n hasHint.value = value\n },\n setHasError: (value: boolean) => {\n hasError.value = value\n },\n }\n\n provide(FIELD_KEY, ctx)\n return ctx\n}\n\nexport function useField(): FieldContext | null {\n return inject(FIELD_KEY, null)\n}\n\n/** Merge Field context with local control props for id / aria wiring. */\nexport function useFieldControlAttrs(options: {\n id?: MaybeRefOrGetter<string | undefined>\n invalid?: MaybeRefOrGetter<boolean | undefined>\n}): {\n id: ComputedRef<string | undefined>\n invalid: ComputedRef<boolean>\n describedBy: ComputedRef<string | undefined>\n ariaInvalid: ComputedRef<'true' | undefined>\n} {\n const field = useField()\n\n const id = computed(() => toValue(options.id) || field?.controlId)\n const invalid = computed(() => !!(toValue(options.invalid) || field?.invalid.value))\n const describedBy = computed(() => field?.describedBy.value)\n const ariaInvalid = computed(() => (invalid.value ? ('true' as const) : undefined))\n\n return { id, invalid, describedBy, ariaInvalid }\n}\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref, useAttrs, watch } from 'vue'\nimport { useFieldControlAttrs } from '../composables/useField'\n\nexport interface CheckboxProps {\n indeterminate?: boolean\n disabled?: boolean\n invalid?: boolean\n name?: string\n value?: string\n id?: string\n}\n\ndefineOptions({ inheritAttrs: false })\n\nconst props = withDefaults(defineProps<CheckboxProps>(), {\n indeterminate: false,\n disabled: false,\n invalid: false,\n value: 'on',\n})\n\nconst model = defineModel<boolean>({ default: false })\n\nconst attrs = useAttrs()\nconst inputRef = ref<HTMLInputElement | null>(null)\nconst fieldAttrs = useFieldControlAttrs({\n id: () => props.id,\n invalid: () => props.invalid,\n})\n\nfunction syncIndeterminate() {\n if (inputRef.value) {\n inputRef.value.indeterminate = props.indeterminate\n }\n}\n\nonMounted(syncIndeterminate)\nwatch(() => props.indeterminate, syncIndeterminate)\n\nconst baseClasses = [\n 'size-4 shrink-0 appearance-none rounded-kablui-sm border border-kablui-border bg-kablui-bg',\n 'checked:border-kablui-accent checked:bg-kablui-accent',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-kablui-focus focus-visible:ring-offset-2 focus-visible:ring-offset-kablui-bg',\n 'disabled:opacity-50 disabled:pointer-events-none',\n].join(' ')\n\nconst classes = computed(() => [\n baseClasses,\n fieldAttrs.invalid.value ? 'border-kablui-danger' : '',\n])\n\nfunction onChange(event: Event) {\n const target = event.target as HTMLInputElement\n model.value = target.checked\n}\n</script>\n\n<template>\n <input\n ref=\"inputRef\"\n type=\"checkbox\"\n :id=\"fieldAttrs.id.value\"\n :name=\"name\"\n :value=\"value\"\n :checked=\"model\"\n :disabled=\"disabled\"\n :aria-invalid=\"fieldAttrs.ariaInvalid.value\"\n :aria-describedby=\"fieldAttrs.describedBy.value\"\n :aria-checked=\"indeterminate ? 'mixed' : model ? 'true' : 'false'\"\n :class=\"classes\"\n v-bind=\"attrs\"\n @change=\"onChange\"\n />\n</template>\n","<script setup lang=\"ts\">\nexport interface ClusterProps {\n gap?: 'sm' | 'md' | 'lg'\n align?: 'start' | 'center' | 'end' | 'stretch' | 'baseline'\n justify?: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly'\n as?: 'div' | 'section' | 'article' | 'main' | 'aside' | 'nav' | 'ul' | 'ol' | 'form' | 'header' | 'footer'\n}\n\nwithDefaults(defineProps<ClusterProps>(), {\n gap: 'md',\n align: 'center',\n justify: 'start',\n as: 'div',\n})\n\nconst gapClasses: Record<NonNullable<ClusterProps['gap']>, string> = {\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n}\n\nconst alignClasses: Record<NonNullable<ClusterProps['align']>, string> = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n}\n\nconst justifyClasses: Record<NonNullable<ClusterProps['justify']>, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n}\n</script>\n\n<template>\n <component\n :is=\"as\"\n :class=\"[\n 'flex flex-wrap',\n gapClasses[gap],\n alignClasses[align],\n justifyClasses[justify],\n ]\"\n >\n <slot />\n </component>\n</template>\n","<script setup lang=\"ts\">\nexport interface ContainerProps {\n size?: 'sm' | 'md' | 'lg'\n as?: 'div' | 'section' | 'article' | 'main' | 'aside' | 'header' | 'footer'\n}\n\nwithDefaults(defineProps<ContainerProps>(), {\n size: 'md',\n as: 'div',\n})\n\nconst sizeClasses: Record<NonNullable<ContainerProps['size']>, string> = {\n sm: 'max-w-screen-sm px-4',\n md: 'max-w-screen-md px-4',\n lg: 'max-w-screen-lg px-6',\n}\n</script>\n\n<template>\n <component\n :is=\"as\"\n :class=\"['mx-auto w-full', sizeClasses[size]]\"\n >\n <slot />\n </component>\n</template>\n","import {\n computed,\n getCurrentInstance,\n onScopeDispose,\n ref,\n type ComputedRef,\n type ComponentInternalInstance,\n} from 'vue'\n\nexport type OverlayLayer = 'dropdown' | 'overlay' | 'modal' | 'toast' | 'tooltip'\n\n/** Token scale values matching `--z-kablui-*` in theme CSS. */\nconst Z_INDEX: Record<OverlayLayer, number> = {\n dropdown: 1000,\n overlay: 1200,\n modal: 1300,\n toast: 1400,\n tooltip: 1500,\n}\n\ntype StackEntry = {\n id: number\n layer: OverlayLayer\n}\n\nlet nextId = 0\nconst stack: StackEntry[] = []\n/** Bumped to invalidate `isTop` computeds when the stack changes. */\nconst version = ref(0)\n\n/**\n * Same-setup queue so each `useDismissable` can claim the matching\n * `useOverlayStack` `isTop` (FIFO — call stack then dismissable, or all stacks then dismissables).\n */\nconst instanceOverlayQueue = new WeakMap<\n ComponentInternalInstance,\n Array<ComputedRef<boolean>>\n>()\n\nfunction bump(): void {\n version.value += 1\n}\n\n/**\n * Register an overlay layer for z-index + Escape ownership stacking.\n * Call `register` when open and `unregister` when closed.\n */\nexport function useOverlayStack(layer: OverlayLayer): {\n zIndex: number\n isTop: ComputedRef<boolean>\n register: () => void\n unregister: () => void\n} {\n const id = ++nextId\n const registered = ref(false)\n const zIndex = Z_INDEX[layer]\n\n const isTop = computed(() => {\n void version.value\n if (!registered.value || stack.length === 0) return false\n return stack[stack.length - 1]!.id === id\n })\n\n function register(): void {\n if (registered.value) return\n stack.push({ id, layer })\n registered.value = true\n bump()\n }\n\n function unregister(): void {\n if (!registered.value) return\n const idx = stack.findIndex((entry) => entry.id === id)\n if (idx !== -1) stack.splice(idx, 1)\n registered.value = false\n bump()\n }\n\n const instance = getCurrentInstance()\n if (instance) {\n const queue = instanceOverlayQueue.get(instance) ?? []\n queue.push(isTop)\n instanceOverlayQueue.set(instance, queue)\n }\n\n onScopeDispose(unregister)\n\n return { zIndex, isTop, register, unregister }\n}\n\n/** @internal — used by `useDismissable` to honor stack top for Escape. */\nexport function __claimOverlayIsTop(\n instance: ComponentInternalInstance | null,\n): ComputedRef<boolean> | null {\n if (!instance) return null\n const queue = instanceOverlayQueue.get(instance)\n if (!queue || queue.length === 0) return null\n return queue.shift() ?? null\n}\n\n/** @internal — reset between tests */\nexport function __resetOverlayStack(): void {\n stack.length = 0\n nextId = 0\n bump()\n}\n","import {\n getCurrentInstance,\n onScopeDispose,\n toValue,\n watch,\n type MaybeRefOrGetter,\n type Ref,\n} from 'vue'\nimport { __claimOverlayIsTop } from './useOverlayStack'\n\nexport interface UseDismissableOptions {\n active: MaybeRefOrGetter<boolean>\n onDismiss: () => void\n /** Handle Escape key. Defaults to `true`. */\n escape?: boolean\n /** Dismiss on outside `pointerdown`. Defaults to `false`. */\n outside?: boolean\n}\n\ntype DismissEntry = {\n id: number\n onDismiss: () => void\n escape: boolean\n outside: boolean\n}\n\nlet nextDismissId = 0\nconst dismissStack: DismissEntry[] = []\n\nfunction topEscapeEntry(): DismissEntry | undefined {\n for (let i = dismissStack.length - 1; i >= 0; i -= 1) {\n const entry = dismissStack[i]!\n if (entry.escape) return entry\n }\n return undefined\n}\n\nfunction topOutsideEntry(): DismissEntry | undefined {\n for (let i = dismissStack.length - 1; i >= 0; i -= 1) {\n const entry = dismissStack[i]!\n if (entry.outside) return entry\n }\n return undefined\n}\n\n/**\n * Dismiss on Escape and optionally outside pointerdown.\n * Only the topmost stacked overlay handles Escape (via `useOverlayStack` `isTop`\n * when both are used in the same setup; otherwise a LIFO dismiss stack).\n */\nexport function useDismissable(\n rootRef: Ref<HTMLElement | null | undefined>,\n options: UseDismissableOptions,\n): void {\n const id = ++nextDismissId\n const instance = getCurrentInstance()\n const overlayIsTop = __claimOverlayIsTop(instance)\n let inStack = false\n\n function escapeEnabled(): boolean {\n return options.escape !== false\n }\n\n function outsideEnabled(): boolean {\n return options.outside === true\n }\n\n function syncStack(active: boolean): void {\n if (active && !inStack) {\n dismissStack.push({\n id,\n onDismiss: options.onDismiss,\n escape: escapeEnabled(),\n outside: outsideEnabled(),\n })\n inStack = true\n return\n }\n\n if (!active && inStack) {\n const idx = dismissStack.findIndex((entry) => entry.id === id)\n if (idx !== -1) dismissStack.splice(idx, 1)\n inStack = false\n return\n }\n\n if (active && inStack) {\n const entry = dismissStack.find((e) => e.id === id)\n if (entry) {\n entry.onDismiss = options.onDismiss\n entry.escape = escapeEnabled()\n entry.outside = outsideEnabled()\n }\n }\n }\n\n function isAllowedByOverlayStack(): boolean {\n if (!overlayIsTop) return true\n return overlayIsTop.value\n }\n\n function onKeydown(event: KeyboardEvent): void {\n if (event.key !== 'Escape') return\n if (!escapeEnabled()) return\n if (!toValue(options.active)) return\n if (!isAllowedByOverlayStack()) return\n\n const top = topEscapeEntry()\n if (!top || top.id !== id) return\n\n event.preventDefault()\n options.onDismiss()\n }\n\n function onPointerDown(event: PointerEvent): void {\n if (!outsideEnabled()) return\n if (!toValue(options.active)) return\n if (!isAllowedByOverlayStack()) return\n\n const top = topOutsideEntry()\n if (!top || top.id !== id) return\n\n const root = rootRef.value\n if (!root) return\n\n const target = event.target\n if (!(target instanceof Node) || root.contains(target)) return\n\n options.onDismiss()\n }\n\n watch(\n () => toValue(options.active),\n (active) => {\n syncStack(!!active)\n },\n { immediate: true },\n )\n\n document.addEventListener('keydown', onKeydown)\n document.addEventListener('pointerdown', onPointerDown)\n\n onScopeDispose(() => {\n document.removeEventListener('keydown', onKeydown)\n document.removeEventListener('pointerdown', onPointerDown)\n syncStack(false)\n })\n}\n\n/** @internal — reset between tests */\nexport function __resetDismissableStack(): void {\n dismissStack.length = 0\n nextDismissId = 0\n}\n","const TABBABLE_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(',')\n\nfunction isVisible(el: HTMLElement): boolean {\n if (el.hidden || el.closest('[hidden]')) return false\n if (el.getAttribute('aria-hidden') === 'true') return false\n\n let current: HTMLElement | null = el\n while (current) {\n const style = getComputedStyle(current)\n if (style.display === 'none' || style.visibility === 'hidden') return false\n current = current.parentElement\n }\n return true\n}\n\n/** Focusable, tabbable descendants of `root` in DOM order. */\nexport function getTabbableElements(root: HTMLElement): HTMLElement[] {\n return Array.from(root.querySelectorAll<HTMLElement>(TABBABLE_SELECTOR)).filter(isVisible)\n}\n","import {\n onScopeDispose,\n toValue,\n watch,\n type MaybeRefOrGetter,\n type Ref,\n} from 'vue'\nimport { getTabbableElements } from './dom'\n\nexport interface UseFocusTrapOptions {\n active: MaybeRefOrGetter<boolean>\n}\n\n/**\n * Trap keyboard focus inside `containerRef` while `active`.\n * On activate: store previously focused element and move focus to the first tabbable.\n * Tab / Shift+Tab cycle within the container; on deactivate restore prior focus.\n */\nexport function useFocusTrap(\n containerRef: Ref<HTMLElement | null | undefined> | MaybeRefOrGetter<HTMLElement | null | undefined>,\n options: UseFocusTrapOptions,\n): void {\n let previouslyFocused: HTMLElement | null = null\n let listening = false\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Tab') return\n\n const container = toValue(containerRef)\n if (!container) return\n\n const tabbables = getTabbableElements(container)\n if (tabbables.length === 0) {\n event.preventDefault()\n return\n }\n\n const first = tabbables[0]!\n const last = tabbables[tabbables.length - 1]!\n const active = document.activeElement as HTMLElement | null\n const focusOutside = !active || !container.contains(active)\n\n if (event.shiftKey) {\n if (focusOutside || active === first) {\n event.preventDefault()\n last.focus()\n }\n } else if (focusOutside || active === last) {\n event.preventDefault()\n first.focus()\n }\n }\n\n const activate = () => {\n const container = toValue(containerRef)\n previouslyFocused =\n document.activeElement instanceof HTMLElement ? document.activeElement : null\n\n if (!listening) {\n document.addEventListener('keydown', onKeyDown, true)\n listening = true\n }\n\n const focusFirst = () => {\n const root = toValue(containerRef) ?? container\n if (!root) return\n const tabbables = getTabbableElements(root)\n if (tabbables.length > 0) {\n tabbables[0]!.focus()\n } else if (typeof root.focus === 'function') {\n root.focus()\n }\n }\n\n // Defer so Teleport / v-if content is mounted.\n requestAnimationFrame(focusFirst)\n }\n\n const deactivate = () => {\n if (listening) {\n document.removeEventListener('keydown', onKeyDown, true)\n listening = false\n }\n\n const restore = previouslyFocused\n previouslyFocused = null\n if (restore && typeof restore.focus === 'function') {\n restore.focus()\n }\n }\n\n watch(\n () => toValue(options.active),\n (active) => {\n if (active) activate()\n else deactivate()\n },\n { immediate: true },\n )\n\n onScopeDispose(() => {\n if (listening) deactivate()\n })\n}\n","import {\n onScopeDispose,\n toValue,\n watch,\n type MaybeRefOrGetter,\n} from 'vue'\n\nlet lockCount = 0\nlet savedOverflow = ''\n\nfunction lockBody(): void {\n if (typeof document === 'undefined') return\n if (lockCount === 0) {\n savedOverflow = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n }\n lockCount += 1\n}\n\nfunction unlockBody(): void {\n if (typeof document === 'undefined') return\n if (lockCount === 0) return\n lockCount -= 1\n if (lockCount === 0) {\n document.body.style.overflow = savedOverflow\n savedOverflow = ''\n }\n}\n\n/** @internal — reset between tests */\nexport function __resetScrollLock(): void {\n lockCount = 0\n savedOverflow = ''\n if (typeof document !== 'undefined') {\n document.body.style.overflow = ''\n }\n}\n\n/**\n * Ref-counted `document.body` overflow lock.\n * Nested callers (e.g. stacked Dialogs) stay locked until the last unlock.\n */\nexport function useScrollLock(active: MaybeRefOrGetter<boolean>): void {\n let held = false\n\n const sync = (shouldLock: boolean) => {\n if (shouldLock && !held) {\n lockBody()\n held = true\n } else if (!shouldLock && held) {\n unlockBody()\n held = false\n }\n }\n\n watch(\n () => toValue(active),\n (value) => sync(value),\n { immediate: true },\n )\n\n onScopeDispose(() => {\n if (held) {\n unlockBody()\n held = false\n }\n })\n}\n","<script setup lang=\"ts\">\nimport { computed, ref, useSlots, watch } from 'vue'\nimport type { ComputedRef, Slots } from 'vue'\nimport { useDismissable } from '../composables/useDismissable'\nimport { useFocusTrap } from '../composables/useFocusTrap'\nimport { useId } from '../composables/useId'\nimport { useOverlayStack } from '../composables/useOverlayStack'\nimport { useScrollLock } from '../composables/useScrollLock'\n\nexport interface DialogProps {\n /** Dismiss on Escape and backdrop click. Defaults to `true`. */\n dismissible?: boolean\n /** Show a close button in the header. Defaults to `false`. */\n showClose?: boolean\n /** Teleport target. Defaults to `body`. */\n to?: string | HTMLElement\n}\n\nconst props = withDefaults(defineProps<DialogProps>(), {\n dismissible: true,\n showClose: false,\n to: 'body',\n})\n\nconst open = defineModel<boolean>('open', { default: false })\n\nconst slots: Slots = useSlots()\nconst panelRef = ref<HTMLElement | null>(null)\n\nconst titleId = useId('dialog-title')\nconst descriptionId = useId('dialog-description')\n\nconst hasTitle: ComputedRef<boolean> = computed(() => !!slots.title)\nconst hasDescription: ComputedRef<boolean> = computed(() => !!slots.description)\n\nconst { register, unregister } = useOverlayStack('modal')\n\nwatch(\n open,\n (isOpen) => {\n if (isOpen) register()\n else unregister()\n },\n { immediate: true },\n)\n\nfunction close() {\n open.value = false\n}\n\nfunction onDismiss() {\n if (!props.dismissible) return\n open.value = false\n}\n\nuseScrollLock(open)\nuseFocusTrap(panelRef, { active: open })\n\n// Register overlay stack before dismissable so Escape ownership uses `isTop`.\nuseDismissable(panelRef, {\n active: () => !!open.value && props.dismissible,\n onDismiss,\n escape: true,\n outside: true,\n})\n\nconst shellClasses = [\n 'fixed inset-0 z-kablui-modal',\n 'flex items-center justify-center p-4',\n].join(' ')\n\nconst backdropClasses = 'absolute inset-0 bg-kablui-overlay'\n\nconst panelClasses = [\n 'relative flex w-full max-w-md flex-col',\n 'rounded-kablui-md border border-kablui-border bg-kablui-bg text-kablui-fg',\n 'shadow-kablui-lg',\n 'outline-none',\n].join(' ')\n\nconst headerClasses = 'flex items-start gap-3 px-4 pt-4'\n\nconst titleClasses = 'font-kablui-semibold text-kablui-lg text-kablui-fg'\n\nconst descriptionClasses = 'mt-1 text-kablui-sm text-kablui-muted-fg'\n\nconst bodyClasses = 'px-4 py-3 text-kablui-md'\n\nconst footerClasses =\n 'flex flex-wrap items-center justify-end gap-2 border-t border-kablui-border px-4 py-3'\n\nconst closeClasses = [\n 'ml-auto shrink-0 -mr-1 -mt-0.5 inline-flex size-7 items-center justify-center',\n 'rounded-kablui-sm text-kablui-muted-fg hover:bg-kablui-muted hover:text-kablui-fg',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-kablui-focus focus-visible:ring-offset-2 focus-visible:ring-offset-kablui-bg',\n].join(' ')\n</script>\n\n<template>\n <Teleport :to=\"to\">\n <div\n v-if=\"open\"\n :class=\"shellClasses\"\n data-kablui-dialog\n >\n <div\n :class=\"backdropClasses\"\n aria-hidden=\"true\"\n data-kablui-dialog-backdrop\n />\n <div\n ref=\"panelRef\"\n role=\"dialog\"\n aria-modal=\"true\"\n :aria-labelledby=\"hasTitle ? titleId : undefined\"\n :aria-describedby=\"hasDescription ? descriptionId : undefined\"\n :class=\"panelClasses\"\n tabindex=\"-1\"\n data-kablui-dialog-panel\n >\n <div\n v-if=\"hasTitle || hasDescription || showClose\"\n :class=\"headerClasses\"\n >\n <div class=\"min-w-0 flex-1\">\n <h2\n v-if=\"hasTitle\"\n :id=\"titleId\"\n :class=\"titleClasses\"\n >\n <slot name=\"title\" />\n </h2>\n <p\n v-if=\"hasDescription\"\n :id=\"descriptionId\"\n :class=\"[descriptionClasses, hasTitle ? undefined : 'mt-0']\"\n >\n <slot name=\"description\" />\n </p>\n </div>\n <button\n v-if=\"showClose\"\n type=\"button\"\n :class=\"closeClasses\"\n aria-label=\"Close\"\n @click=\"close\"\n >\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n <div\n v-if=\"$slots.default\"\n :class=\"bodyClasses\"\n >\n <slot />\n </div>\n <div\n v-if=\"$slots.footer\"\n :class=\"footerClasses\"\n >\n <slot name=\"footer\" />\n </div>\n </div>\n </div>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nexport interface EmptyProps {\n title?: string\n}\n\ndefineProps<EmptyProps>()\n\nconst rootClasses = [\n 'flex w-full flex-col items-center justify-center gap-3',\n 'px-4 py-8 text-center',\n 'text-kablui-muted-fg',\n].join(' ')\n</script>\n\n<template>\n <div :class=\"rootClasses\">\n <div v-if=\"$slots.icon\" class=\"text-kablui-muted-fg\">\n <slot name=\"icon\" />\n </div>\n <div v-if=\"title\" class=\"text-kablui-lg font-kablui-semibold text-kablui-fg\">\n {{ title }}\n </div>\n <div v-if=\"$slots.default\" class=\"text-kablui-md max-w-sm\">\n <slot />\n </div>\n <div v-if=\"$slots.action\" class=\"mt-1\">\n <slot name=\"action\" />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { toRef } from 'vue'\nimport { provideField } from '../composables/useField'\n\nexport interface FieldProps {\n invalid?: boolean\n /** Optional stable id for the nested control (otherwise auto-generated). */\n id?: string\n}\n\nconst props = withDefaults(defineProps<FieldProps>(), {\n invalid: false,\n})\n\nprovideField({\n invalid: toRef(props, 'invalid'),\n id: props.id,\n})\n</script>\n\n<template>\n <div class=\"flex flex-col gap-1.5\" data-slot=\"field\">\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, useSlots, watchEffect, type VNode } from 'vue'\nimport { useField } from '../composables/useField'\n\nexport interface FieldErrorProps {}\n\ndefineProps<FieldErrorProps>()\n\nconst field = useField()\nconst slots = useSlots()\n\nconst hasContent = computed(() => {\n const nodes = slots.default?.({})\n if (!nodes || nodes.length === 0) return false\n return nodes.some((node: VNode) => {\n if (typeof node.children === 'string') return node.children.trim().length > 0\n return node.children != null\n })\n})\n\nconst visible = computed(() => hasContent.value || !!field?.invalid.value)\n\nwatchEffect(() => {\n field?.setHasError(visible.value && hasContent.value)\n})\n\nonBeforeUnmount(() => {\n field?.setHasError(false)\n})\n</script>\n\n<template>\n <p\n v-if=\"visible && hasContent\"\n :id=\"field?.errorId\"\n role=\"alert\"\n class=\"text-kablui-sm text-kablui-danger\"\n data-slot=\"field-error\"\n >\n <slot />\n </p>\n</template>\n","<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted } from 'vue'\nimport { useField } from '../composables/useField'\n\nexport interface FieldHintProps {}\n\ndefineProps<FieldHintProps>()\n\nconst field = useField()\n\nonMounted(() => {\n field?.setHasHint(true)\n})\n\nonBeforeUnmount(() => {\n field?.setHasHint(false)\n})\n</script>\n\n<template>\n <p :id=\"field?.hintId\" class=\"text-kablui-sm text-kablui-muted-fg\" data-slot=\"field-hint\">\n <slot />\n </p>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nexport interface IconProps {\n size?: 'sm' | 'md' | 'lg'\n /** Accessible name — when set, icon exits decorative mode (`role=\"img\"` + `aria-label`). */\n label?: string\n /** Native title tooltip only — does not affect decorative vs meaningful mode. */\n title?: string\n}\n\nconst props = withDefaults(defineProps<IconProps>(), {\n size: 'md',\n})\n\nconst baseClasses = [\n 'inline-flex shrink-0 items-center justify-center',\n 'text-current',\n '[&>svg]:size-full',\n].join(' ')\n\nconst sizeClasses: Record<NonNullable<IconProps['size']>, string> = {\n sm: 'size-3',\n md: 'size-4',\n lg: 'size-5',\n}\n\n/** Decorative unless `label` is set — `title` alone stays decorative. */\nconst isDecorative = computed(() => !props.label)\n</script>\n\n<template>\n <span\n :class=\"[baseClasses, sizeClasses[size]]\"\n :role=\"isDecorative ? undefined : 'img'\"\n :aria-hidden=\"isDecorative ? true : undefined\"\n :aria-label=\"label || undefined\"\n :title=\"title\"\n >\n <slot />\n </span>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue'\nimport { useFieldControlAttrs } from '../composables/useField'\n\nexport interface InputProps {\n type?: string\n size?: 'sm' | 'md' | 'lg'\n disabled?: boolean\n invalid?: boolean\n placeholder?: string\n name?: string\n id?: string\n}\n\ndefineOptions({ inheritAttrs: false })\n\nconst props = withDefaults(defineProps<InputProps>(), {\n type: 'text',\n size: 'md',\n disabled: false,\n invalid: false,\n})\n\nconst model = defineModel<string>({ default: '' })\n\nconst attrs = useAttrs()\nconst fieldAttrs = useFieldControlAttrs({\n id: () => props.id,\n invalid: () => props.invalid,\n})\n\nconst baseClasses = [\n 'w-full border border-kablui-border bg-kablui-bg text-kablui-fg',\n 'rounded-kablui-md font-kablui-normal',\n 'placeholder:text-kablui-muted-fg',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-kablui-focus focus-visible:ring-offset-2 focus-visible:ring-offset-kablui-bg',\n 'disabled:opacity-50 disabled:pointer-events-none',\n].join(' ')\n\nconst sizeClasses: Record<NonNullable<InputProps['size']>, string> = {\n sm: 'text-kablui-sm px-2 py-1',\n md: 'text-kablui-md px-3 py-1.5',\n lg: 'text-kablui-lg px-4 py-2',\n}\n\nconst classes = computed(() => [\n baseClasses,\n sizeClasses[props.size],\n fieldAttrs.invalid.value ? 'border-kablui-danger' : '',\n])\n</script>\n\n<template>\n <input\n :id=\"fieldAttrs.id.value\"\n :type=\"type\"\n :name=\"name\"\n :disabled=\"disabled\"\n :placeholder=\"placeholder\"\n :value=\"model\"\n :aria-invalid=\"fieldAttrs.ariaInvalid.value\"\n :aria-describedby=\"fieldAttrs.describedBy.value\"\n :class=\"classes\"\n v-bind=\"attrs\"\n @input=\"model = ($event.target as HTMLInputElement).value\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue'\nimport { useField } from '../composables/useField'\n\nexport interface LabelProps {\n required?: boolean\n for?: string\n}\n\ndefineOptions({ inheritAttrs: false })\n\nconst props = withDefaults(defineProps<LabelProps>(), {\n required: false,\n})\n\nconst attrs = useAttrs()\nconst field = useField()\n\nconst forId = computed(() => props.for || field?.controlId)\n</script>\n\n<template>\n <label\n :for=\"forId\"\n class=\"inline-flex items-center gap-1 text-kablui-sm font-kablui-medium text-kablui-fg\"\n v-bind=\"attrs\"\n >\n <slot />\n <span v-if=\"required\" class=\"text-kablui-danger\" aria-hidden=\"true\">*</span>\n </label>\n</template>\n","<script setup lang=\"ts\">\nexport interface LinkProps {\n href: string\n /** Opens in a new tab with `rel=\"noopener noreferrer\"`. */\n external?: boolean\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<LinkProps>(), {\n external: false,\n disabled: false,\n})\n\nconst baseClasses = [\n 'text-kablui-accent underline underline-offset-2',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-kablui-focus focus-visible:ring-offset-2 focus-visible:ring-offset-kablui-bg',\n 'aria-disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:text-kablui-muted-fg aria-disabled:no-underline',\n].join(' ')\n\nfunction onClick(event: MouseEvent) {\n if (props.disabled) {\n event.preventDefault()\n }\n}\n\nfunction onKeydown(event: KeyboardEvent) {\n if (props.disabled && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault()\n }\n}\n</script>\n\n<template>\n <a\n :href=\"href\"\n :target=\"external ? '_blank' : undefined\"\n :rel=\"external ? 'noopener noreferrer' : undefined\"\n :aria-disabled=\"disabled || undefined\"\n :tabindex=\"disabled ? -1 : undefined\"\n :class=\"baseClasses\"\n @click=\"onClick\"\n @keydown=\"onKeydown\"\n >\n <slot />\n </a>\n</template>\n","import type { ComputedRef, InjectionKey, Ref } from 'vue'\nimport type { FloatingPlacement } from '../composables/useFloating'\n\nexport type MenuOpenReason = 'keyboard' | 'pointer'\n\nexport interface MenuContext {\n open: Ref<boolean>\n contentId: string\n placement: ComputedRef<FloatingPlacement>\n triggerRef: Ref<HTMLElement | null>\n contentRef: Ref<HTMLElement | null>\n setOpen: (value: boolean, reason?: MenuOpenReason) => void\n toggle: (reason?: MenuOpenReason) => void\n getEnabledItems: () => HTMLElement[]\n focusFirstItem: () => void\n focusItemRelative: (current: HTMLElement | null, delta: number) => void\n focusItemAtEdge: (edge: 'start' | 'end') => void\n closeOnSelect: () => void\n}\n\nexport const MENU_KEY: InjectionKey<MenuContext> = Symbol('kablui-menu')\n","<script setup lang=\"ts\">\nimport { computed, nextTick, provide, ref, watch } from 'vue'\nimport type { FloatingPlacement } from '../composables/useFloating'\nimport { useDismissable } from '../composables/useDismissable'\nimport { useId } from '../composables/useId'\nimport { useOverlayStack } from '../composables/useOverlayStack'\nimport { MENU_KEY, type MenuOpenReason } from './menuContext'\n\nexport interface MenuProps {\n /** Floating placement relative to the trigger. */\n placement?: FloatingPlacement\n}\n\nconst props = withDefaults(defineProps<MenuProps>(), {\n placement: 'bottom-start',\n})\n\nconst open = defineModel<boolean>('open', { default: false })\n\nconst rootRef = ref<HTMLElement | null>(null)\nconst triggerRef = ref<HTMLElement | null>(null)\nconst contentRef = ref<HTMLElement | null>(null)\nconst contentId = useId('menu')\nconst previouslyFocused = ref<HTMLElement | null>(null)\n\nconst { register, unregister } = useOverlayStack('dropdown')\n\nfunction getEnabledItems(): HTMLElement[] {\n const content = contentRef.value\n if (!content) return []\n return [\n ...content.querySelectorAll<HTMLElement>(\n '[data-slot=\"menu-item\"]:not([disabled]):not([aria-disabled=\"true\"])',\n ),\n ]\n}\n\nfunction focusFirstItem() {\n getEnabledItems()[0]?.focus()\n}\n\nfunction focusItemRelative(current: HTMLElement | null, delta: number) {\n const items = getEnabledItems()\n if (items.length === 0) return\n\n const index = current ? items.indexOf(current) : -1\n const nextIndex =\n index === -1\n ? delta > 0\n ? 0\n : items.length - 1\n : (index + delta + items.length) % items.length\n items[nextIndex]?.focus()\n}\n\nfunction focusItemAtEdge(edge: 'start' | 'end') {\n const items = getEnabledItems()\n if (items.length === 0) return\n ;(edge === 'start' ? items[0] : items[items.length - 1])?.focus()\n}\n\nfunction setOpen(value: boolean, _reason?: MenuOpenReason) {\n open.value = value\n}\n\nfunction toggle(reason?: MenuOpenReason) {\n setOpen(!open.value, reason)\n}\n\nfunction closeOnSelect() {\n open.value = false\n}\n\nfunction dismiss() {\n open.value = false\n}\n\nuseDismissable(rootRef, {\n active: open,\n onDismiss: dismiss,\n escape: true,\n outside: true,\n})\n\nwatch(\n open,\n (isOpen, wasOpen) => {\n if (isOpen) {\n register()\n previouslyFocused.value =\n document.activeElement instanceof HTMLElement ? document.activeElement : null\n nextTick(() => {\n focusFirstItem()\n })\n return\n }\n\n unregister()\n // Avoid stealing focus when mounting closed.\n if (wasOpen) {\n nextTick(() => {\n const restore = previouslyFocused.value ?? triggerRef.value\n restore?.focus()\n previouslyFocused.value = null\n })\n }\n },\n { immediate: true },\n)\n\nprovide(MENU_KEY, {\n open,\n contentId,\n placement: computed(() => props.placement),\n triggerRef,\n contentRef,\n setOpen,\n toggle,\n getEnabledItems,\n focusFirstItem,\n focusItemRelative,\n focusItemAtEdge,\n closeOnSelect,\n})\n</script>\n\n<template>\n <div ref=\"rootRef\" class=\"relative inline-flex\" data-slot=\"menu\">\n <slot />\n </div>\n</template>\n","import {\n onScopeDispose,\n ref,\n toValue,\n unref,\n watch,\n type CSSProperties,\n type MaybeRefOrGetter,\n type Ref,\n} from 'vue'\n\nexport type FloatingSide = 'top' | 'bottom' | 'left' | 'right'\nexport type FloatingAlign = 'start' | 'center' | 'end'\n\n/** Side alone means center align (e.g. `bottom` ≡ `bottom-center`). */\nexport type FloatingPlacement =\n | FloatingSide\n | `${FloatingSide}-${FloatingAlign}`\n\nexport interface UseFloatingOptions {\n open: MaybeRefOrGetter<boolean>\n placement: MaybeRefOrGetter<FloatingPlacement>\n}\n\nexport interface UseFloatingReturn {\n style: Ref<CSSProperties>\n}\n\nconst OPPOSITE: Record<FloatingSide, FloatingSide> = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n}\n\nfunction parsePlacement(placement: FloatingPlacement): {\n side: FloatingSide\n align: FloatingAlign\n} {\n const [side, align] = placement.split('-') as [FloatingSide, FloatingAlign | undefined]\n return { side, align: align ?? 'center' }\n}\n\nfunction alignMainAxis(\n anchorStart: number,\n anchorSize: number,\n floatingSize: number,\n align: FloatingAlign,\n): number {\n switch (align) {\n case 'start':\n return anchorStart\n case 'end':\n return anchorStart + anchorSize - floatingSize\n case 'center':\n default:\n return anchorStart + (anchorSize - floatingSize) / 2\n }\n}\n\nfunction coordsFor(\n anchor: DOMRect,\n floating: DOMRect,\n side: FloatingSide,\n align: FloatingAlign,\n): { x: number; y: number } {\n switch (side) {\n case 'top':\n return {\n x: alignMainAxis(anchor.left, anchor.width, floating.width, align),\n y: anchor.top - floating.height,\n }\n case 'bottom':\n return {\n x: alignMainAxis(anchor.left, anchor.width, floating.width, align),\n y: anchor.bottom,\n }\n case 'left':\n return {\n x: anchor.left - floating.width,\n y: alignMainAxis(anchor.top, anchor.height, floating.height, align),\n }\n case 'right':\n return {\n x: anchor.right,\n y: alignMainAxis(anchor.top, anchor.height, floating.height, align),\n }\n }\n}\n\nfunction isPrimaryClipped(\n x: number,\n y: number,\n floating: DOMRect,\n side: FloatingSide,\n viewportWidth: number,\n viewportHeight: number,\n): boolean {\n switch (side) {\n case 'top':\n return y < 0\n case 'bottom':\n return y + floating.height > viewportHeight\n case 'left':\n return x < 0\n case 'right':\n return x + floating.width > viewportWidth\n }\n}\n\nfunction computeStyle(\n anchor: HTMLElement,\n floating: HTMLElement,\n placement: FloatingPlacement,\n): CSSProperties {\n const anchorRect = anchor.getBoundingClientRect()\n const floatingRect = floating.getBoundingClientRect()\n const { side, align } = parsePlacement(placement)\n\n let { x, y } = coordsFor(anchorRect, floatingRect, side, align)\n\n if (\n isPrimaryClipped(x, y, floatingRect, side, window.innerWidth, window.innerHeight)\n ) {\n const flipped = OPPOSITE[side]\n ;({ x, y } = coordsFor(anchorRect, floatingRect, flipped, align))\n }\n\n return {\n position: 'fixed',\n top: `${y}px`,\n left: `${x}px`,\n }\n}\n\n/**\n * Anchor a floating element with `position: fixed` from getBoundingClientRect.\n * Supports side × start|center|end placements and a simple primary-axis flip\n * when the preferred side is clipped by the viewport. Recomputes on scroll/resize.\n */\nexport function useFloating(\n anchorRef: Ref<HTMLElement | null | undefined>,\n floatingRef: Ref<HTMLElement | null | undefined>,\n options: UseFloatingOptions,\n): UseFloatingReturn {\n const style = ref<CSSProperties>({})\n\n const update = () => {\n if (!toValue(options.open)) {\n style.value = {}\n return\n }\n\n const anchor = unref(anchorRef)\n const floating = unref(floatingRef)\n if (!anchor || !floating) {\n style.value = {}\n return\n }\n\n style.value = computeStyle(anchor, floating, toValue(options.placement))\n }\n\n const onScrollOrResize = () => {\n update()\n }\n\n let listening = false\n\n const startListening = () => {\n if (listening || typeof window === 'undefined') return\n listening = true\n window.addEventListener('scroll', onScrollOrResize, true)\n window.addEventListener('resize', onScrollOrResize)\n }\n\n const stopListening = () => {\n if (!listening || typeof window === 'undefined') return\n listening = false\n window.removeEventListener('scroll', onScrollOrResize, true)\n window.removeEventListener('resize', onScrollOrResize)\n }\n\n watch(\n [() => toValue(options.open), () => toValue(options.placement), anchorRef, floatingRef],\n ([open]) => {\n if (open) {\n startListening()\n update()\n } else {\n stopListening()\n style.value = {}\n }\n },\n { immediate: true, flush: 'post' },\n )\n\n onScopeDispose(() => {\n stopListening()\n })\n\n return { style }\n}\n","<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount, ref, type ComponentPublicInstance } from 'vue'\nimport { useFloating } from '../composables/useFloating'\nimport { MENU_KEY } from './menuContext'\n\n/** No props — placement and open state come from Menu. */\nexport type MenuContentProps = Record<string, never>\n\nconst menu = inject(MENU_KEY, null)\n\nif (!menu) {\n console.warn('[kablui] MenuContent must be used inside Menu')\n}\n\nconst fallbackTrigger = ref<HTMLElement | null>(null)\nconst fallbackContent = ref<HTMLElement | null>(null)\n\nfunction setContentRef(el: Element | ComponentPublicInstance | null) {\n if (!menu) return\n menu.contentRef.value = el instanceof HTMLElement ? el : null\n}\n\nonBeforeUnmount(() => {\n if (menu) menu.contentRef.value = null\n})\n\nconst open = computed(() => !!menu?.open.value)\nconst placement = computed(() => menu?.placement.value ?? 'bottom-start')\n\nconst { style } = useFloating(\n menu?.triggerRef ?? fallbackTrigger,\n menu?.contentRef ?? fallbackContent,\n {\n open,\n placement,\n },\n)\n\nfunction onKeydown(event: KeyboardEvent) {\n if (!menu) return\n\n const current =\n document.activeElement instanceof HTMLElement ? document.activeElement : null\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n menu.focusItemRelative(current, 1)\n break\n case 'ArrowUp':\n event.preventDefault()\n menu.focusItemRelative(current, -1)\n break\n case 'Home':\n event.preventDefault()\n menu.focusItemAtEdge('start')\n break\n case 'End':\n event.preventDefault()\n menu.focusItemAtEdge('end')\n break\n }\n}\n\nconst classes = [\n 'z-kablui-dropdown min-w-40 rounded-kablui-md border border-kablui-border bg-kablui-bg',\n 'py-1 text-kablui-md text-kablui-fg shadow-kablui-md',\n 'focus:outline-none',\n].join(' ')\n</script>\n\n<template>\n <Teleport to=\"body\">\n <div\n v-if=\"open && menu\"\n :id=\"menu.contentId\"\n :ref=\"setContentRef\"\n role=\"menu\"\n tabindex=\"-1\"\n data-slot=\"menu-content\"\n :data-placement=\"placement\"\n :class=\"classes\"\n :style=\"style\"\n @pointerdown.stop\n @keydown=\"onKeydown\"\n >\n <slot />\n </div>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { inject } from 'vue'\nimport { MENU_KEY } from './menuContext'\n\nexport interface MenuItemProps {\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<MenuItemProps>(), {\n disabled: false,\n})\n\nconst emit = defineEmits<{\n select: []\n}>()\n\nconst menu = inject(MENU_KEY, null)\n\nif (!menu) {\n console.warn('[kablui] MenuItem must be used inside Menu')\n}\n\nfunction activate() {\n if (props.disabled) return\n emit('select')\n menu?.closeOnSelect()\n}\n\nfunction onClick() {\n activate()\n}\n\nfunction onKeydown(event: KeyboardEvent) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n activate()\n }\n}\n\nconst classes = [\n 'flex w-full cursor-pointer items-center px-3 py-1.5 text-left',\n 'text-kablui-md text-kablui-fg rounded-kablui-sm',\n 'hover:bg-kablui-muted',\n 'focus:outline-none focus:bg-kablui-muted',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-kablui-focus focus-visible:ring-offset-2 focus-visible:ring-offset-kablui-bg',\n 'disabled:pointer-events-none disabled:opacity-50',\n].join(' ')\n</script>\n\n<template>\n <button\n type=\"button\"\n role=\"menuitem\"\n data-slot=\"menu-item\"\n tabindex=\"-1\"\n :disabled=\"disabled || undefined\"\n :aria-disabled=\"disabled ? 'true' : undefined\"\n :class=\"classes\"\n @click=\"onClick\"\n @keydown=\"onKeydown\"\n >\n <slot />\n </button>\n</template>\n","<script setup lang=\"ts\">\nimport { inject } from 'vue'\nimport { MENU_KEY } from './menuContext'\n\n/** No props — visual separator only. */\nexport type MenuSeparatorProps = Record<string, never>\n\nconst menu = inject(MENU_KEY, null)\n\nif (!menu) {\n console.warn('[kablui] MenuSeparator must be used inside Menu')\n}\n\nconst classes = 'my-1 h-px w-full shrink-0 border-0 border-t border-solid border-kablui-border'\n</script>\n\n<template>\n <div role=\"separator\" data-slot=\"menu-separator\" :class=\"classes\" />\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount, type ComponentPublicInstance } from 'vue'\nimport { MENU_KEY } from './menuContext'\n\n/** No props — trigger content comes from the default slot. */\nexport type MenuTriggerProps = Record<string, never>\n\nconst menu = inject(MENU_KEY, null)\n\nif (!menu) {\n console.warn('[kablui] MenuTrigger must be used inside Menu')\n}\n\nfunction setTriggerRef(el: Element | ComponentPublicInstance | null) {\n if (!menu) return\n menu.triggerRef.value = el instanceof HTMLElement ? el : null\n}\n\nonBeforeUnmount(() => {\n if (menu) menu.triggerRef.value = null\n})\n\nconst isOpen = computed(() => !!menu?.open.value)\n\nfunction onClick() {\n menu?.toggle('pointer')\n}\n\nfunction onKeydown(event: KeyboardEvent) {\n if (!menu) return\n\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowUp':\n case 'Enter':\n case ' ':\n event.preventDefault()\n if (!menu.open.value) {\n menu.setOpen(true, 'keyboard')\n } else if (event.key === 'Enter' || event.key === ' ') {\n menu.setOpen(false)\n } else if (event.key === 'ArrowDown') {\n menu.focusFirstItem()\n } else if (event.key === 'ArrowUp') {\n menu.focusItemAtEdge('end')\n }\n break\n case 'Escape':\n if (menu.open.value) {\n event.preventDefault()\n menu.setOpen(false)\n }\n break\n }\n}\n\nconst classes = [\n 'inline-flex items-center justify-center',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-kablui-focus focus-visible:ring-offset-2 focus-visible:ring-offset-kablui-bg',\n].join(' ')\n</script>\n\n<template>\n <button\n :ref=\"setTriggerRef\"\n type=\"button\"\n data-slot=\"menu-trigger\"\n :class=\"classes\"\n aria-haspopup=\"menu\"\n :aria-expanded=\"isOpen ? 'true' : 'false'\"\n :aria-controls=\"menu?.contentId\"\n @click=\"onClick\"\n @keydown=\"onKeydown\"\n >\n <slot />\n </button>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport Button from './Button.vue'\n\nexport interface PaginationProps {\n pageCount: number\n siblingCount?: number\n disabled?: boolean\n /** Accessible name for the nav. Default: \"Pagination\" */\n label?: string\n}\n\nconst props = withDefaults(defineProps<PaginationProps>(), {\n siblingCount: 1,\n disabled: false,\n label: 'Pagination',\n})\n\nconst page = defineModel<number>('page', { default: 1 })\n\ntype PageItem = number | 'ellipsis'\n\nfunction range(start: number, end: number): number[] {\n const length = Math.max(0, end - start + 1)\n return Array.from({ length }, (_, i) => start + i)\n}\n\nconst items = computed<PageItem[]>(() => {\n const pageCount = Math.max(0, Math.floor(props.pageCount))\n if (pageCount === 0) return []\n\n const siblingCount = Math.max(0, Math.floor(props.siblingCount))\n const current = Math.min(Math.max(1, page.value), pageCount)\n\n // first + last + current + 2*siblings + 2 ellipsis\n const totalNumbers = siblingCount * 2 + 5\n\n if (totalNumbers >= pageCount) {\n return range(1, pageCount)\n }\n\n const leftSibling = Math.max(current - siblingCount, 1)\n const rightSibling = Math.min(current + siblingCount, pageCount)\n\n const showLeftEllipsis = leftSibling > 2\n const showRightEllipsis = rightSibling < pageCount - 1\n\n if (!showLeftEllipsis && showRightEllipsis) {\n const leftItemCount = 3 + 2 * siblingCount\n return [...range(1, leftItemCount), 'ellipsis', pageCount]\n }\n\n if (showLeftEllipsis && !showRightEllipsis) {\n const rightItemCount = 3 + 2 * siblingCount\n return [1, 'ellipsis', ...range(pageCount - rightItemCount + 1, pageCount)]\n }\n\n return [\n 1,\n 'ellipsis',\n ...range(leftSibling, rightSibling),\n 'ellipsis',\n pageCount,\n ]\n})\n\nconst atStart = computed(() => page.value <= 1)\nconst atEnd = computed(() => page.value >= props.pageCount)\n\nfunction goTo(next: number) {\n if (props.disabled) return\n const pageCount = Math.max(0, Math.floor(props.pageCount))\n if (next < 1 || next > pageCount) return\n if (next === page.value) return\n page.value = next\n}\n\nfunction prev() {\n goTo(page.value - 1)\n}\n\nfunction next() {\n goTo(page.value + 1)\n}\n</script>\n\n<template>\n <nav\n :aria-label=\"label\"\n :aria-disabled=\"disabled || undefined\"\n class=\"inline-flex items-center gap-1 text-kablui-fg\"\n >\n <Button\n variant=\"outline\"\n size=\"sm\"\n :disabled=\"disabled || atStart\"\n aria-label=\"Previous page\"\n @click=\"prev\"\n >\n Previous\n </Button>\n\n <template v-for=\"(item, index) in items\" :key=\"`${item}-${index}`\">\n <span\n v-if=\"item === 'ellipsis'\"\n class=\"inline-flex min-w-8 items-center justify-center px-1 text-kablui-muted-fg\"\n aria-hidden=\"true\"\n >\n …\n </span>\n <Button\n v-else\n :variant=\"item === page ? 'solid' : 'outline'\"\n size=\"sm\"\n :disabled=\"disabled\"\n :aria-label=\"`Page ${item}`\"\n :aria-current=\"item === page ? 'page' : undefined\"\n @click=\"goTo(item)\"\n >\n {{ item }}\n </Button>\n </template>\n\n <Button\n variant=\"outline\"\n size=\"sm\"\n :disabled=\"disabled || atEnd\"\n aria-label=\"Next page\"\n @click=\"next\"\n >\n Next\n </Button>\n </nav>\n</template>\n","import type { ComputedRef, InjectionKey, Ref } from 'vue'\nimport type { FloatingPlacement } from '../composables/useFloating'\n\nexport type PopoverOpenReason = 'keyboard' | 'pointer'\n\nexport interface PopoverContext {\n open: Ref<boolean>\n contentId: string\n placement: ComputedRef<FloatingPlacement>\n triggerRef: Ref<HTMLElement | null>\n contentRef: Ref<HTMLElement | null>\n setOpen: (value: boolean, reason?: PopoverOpenReason) => void\n toggle: (reason?: PopoverOpenReason) => void\n}\n\nexport const POPOVER_KEY: InjectionKey<PopoverContext> = Symbol('kablui-popover')\n","<script setup lang=\"ts\">\nimport { computed, nextTick, provide, ref, watch } from 'vue'\nimport type { FloatingPlacement } from '../composables/useFloating'\nimport { useDismissable } from '../composables/useDismissable'\nimport { useId } from '../composables/useId'\nimport { useOverlayStack } from '../composables/useOverlayStack'\nimport { POPOVER_KEY, type PopoverOpenReason } from './popoverContext'\n\nexport interface PopoverProps {\n /** Floating placement relative to the trigger. */\n placement?: FloatingPlacement\n}\n\nconst props = withDefaults(defineProps<PopoverProps>(), {\n placement: 'bottom-start',\n})\n\nconst open = defineModel<boolean>('open', { default: false })\n\nconst rootRef = ref<HTMLElement | null>(null)\nconst triggerRef = ref<HTMLElement | null>(null)\nconst contentRef = ref<HTMLElement | null>(null)\nconst contentId = useId('popover')\nconst openedByKeyboard = ref(false)\nconst previouslyFocused = ref<HTMLElement | null>(null)\n\nconst { register, unregister } = useOverlayStack('dropdown')\n\nfunction setOpen(value: boolean, reason?: PopoverOpenReason) {\n if (value) {\n openedByKeyboard.value = reason === 'keyboard'\n }\n open.value = value\n}\n\nfunction toggle(reason?: PopoverOpenReason) {\n setOpen(!open.value, reason)\n}\n\nfunction dismiss() {\n open.value = false\n}\n\nuseDismissable(rootRef, {\n active: open,\n onDismiss: dismiss,\n escape: true,\n outside: true,\n})\n\nwatch(\n open,\n (isOpen, wasOpen) => {\n if (isOpen) {\n register()\n previouslyFocused.value =\n document.activeElement instanceof HTMLElement ? document.activeElement : null\n nextTick(() => {\n if (openedByKeyboard.value) {\n contentRef.value?.focus()\n }\n })\n return\n }\n\n unregister()\n // Avoid stealing focus when mounting closed.\n if (wasOpen) {\n nextTick(() => {\n const restore = previouslyFocused.value ?? triggerRef.value\n restore?.focus()\n openedByKeyboard.value = false\n previouslyFocused.value = null\n })\n }\n },\n { immediate: true },\n)\n\nprovide(POPOVER_KEY, {\n open,\n contentId,\n placement: computed(() => props.placement),\n triggerRef,\n contentRef,\n setOpen,\n toggle,\n})\n</script>\n\n<template>\n <div ref=\"rootRef\" class=\"relative inline-flex\" data-slot=\"popover\">\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount, ref, useAttrs, type ComponentPublicInstance } from 'vue'\nimport { useFloating } from '../composables/useFloating'\nimport { POPOVER_KEY } from './popoverContext'\n\n/** No props — placement and open state come from Popover. */\nexport type PopoverContentProps = Record<string, never>\n\ndefineOptions({ inheritAttrs: false })\n\nconst attrs = useAttrs()\nconst popover = inject(POPOVER_KEY, null)\n\nif (!popover) {\n console.warn('[kablui] PopoverContent must be used inside Popover')\n}\n\nconst fallbackTrigger = ref<HTMLElement | null>(null)\nconst fallbackContent = ref<HTMLElement | null>(null)\n\nfunction setContentRef(el: Element | ComponentPublicInstance | null) {\n if (!popover) return\n popover.contentRef.value = el instanceof HTMLElement ? el : null\n}\n\nonBeforeUnmount(() => {\n if (popover) popover.contentRef.value = null\n})\n\nconst open = computed(() => !!popover?.open.value)\nconst placement = computed(() => popover?.placement.value ?? 'bottom-start')\n\nconst { style } = useFloating(\n popover?.triggerRef ?? fallbackTrigger,\n popover?.contentRef ?? fallbackContent,\n {\n open,\n placement,\n },\n)\n\nconst classes = [\n 'z-kablui-dropdown rounded-kablui-md border border-kablui-border bg-kablui-bg',\n 'p-3 text-kablui-md text-kablui-fg shadow-kablui-md',\n 'focus:outline-none',\n].join(' ')\n</script>\n\n<template>\n <Teleport to=\"body\">\n <div\n v-if=\"open && popover\"\n :id=\"popover.contentId\"\n :ref=\"setContentRef\"\n role=\"dialog\"\n tabindex=\"-1\"\n data-slot=\"popover-content\"\n :data-placement=\"placement\"\n :class=\"classes\"\n :style=\"style\"\n v-bind=\"attrs\"\n @pointerdown.stop\n >\n <slot />\n </div>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount, type ComponentPublicInstance } from 'vue'\nimport { POPOVER_KEY } from './popoverContext'\n\n/** No props — trigger content comes from the default slot. */\nexport type PopoverTriggerProps = Record<string, never>\n\nconst popover = inject(POPOVER_KEY, null)\n\nif (!popover) {\n console.warn('[kablui] PopoverTrigger must be used inside Popover')\n}\n\nfunction setTriggerRef(el: Element | ComponentPublicInstance | null) {\n if (!popover) return\n popover.triggerRef.value = el instanceof HTMLElement ? el : null\n}\n\nonBeforeUnmount(() => {\n if (popover) popover.triggerRef.value = null\n})\n\nconst isOpen = computed(() => !!popover?.open.value)\n\nfunction onClick() {\n popover?.toggle('pointer')\n}\n\nfunction onKeydown(event: KeyboardEvent) {\n if (!popover) return\n\n switch (event.key) {\n case 'ArrowDown':\n case 'Enter':\n case ' ':\n event.preventDefault()\n if (!popover.open.value) popover.setOpen(true, 'keyboard')\n else if (event.key === 'Enter' || event.key === ' ') {\n popover.setOpen(false)\n }\n break\n case 'Escape':\n if (popover.open.value) {\n event.preventDefault()\n popover.setOpen(false)\n }\n break\n }\n}\n\nconst classes = [\n 'inline-flex items-center justify-center',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-kablui-focus focus-visible:ring-offset-2 focus-visible:ring-offset-kablui-bg',\n].join(' ')\n</script>\n\n<template>\n <button\n :ref=\"setTriggerRef\"\n type=\"button\"\n data-slot=\"popover-trigger\"\n :class=\"classes\"\n aria-haspopup=\"dialog\"\n :aria-expanded=\"isOpen ? 'true' : 'false'\"\n :aria-controls=\"popover?.contentId\"\n @click=\"onClick\"\n @keydown=\"onKeydown\"\n >\n <slot />\n </button>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nexport interface ProgressProps {\n /** Current value. Omit (or set `indeterminate`) for an indeterminate bar. */\n value?: number\n max?: number\n /** Force indeterminate mode even when `value` is set. */\n indeterminate?: boolean\n /** Accessible name for the progressbar. */\n label?: string\n}\n\nconst props = withDefaults(defineProps<ProgressProps>(), {\n max: 100,\n indeterminate: false,\n})\n\nconst isIndeterminate = computed(\n () => props.indeterminate || props.value === undefined,\n)\n\nconst clampedValue = computed(() => {\n if (props.value === undefined) return undefined\n const max = props.max > 0 ? props.max : 100\n return Math.min(Math.max(props.value, 0), max)\n})\n\nconst percent = computed(() => {\n if (clampedValue.value === undefined) return 0\n const max = props.max > 0 ? props.max : 100\n return (clampedValue.value / max) * 100\n})\n\nconst trackClasses = [\n 'relative h-2 w-full overflow-hidden rounded-kablui-full',\n 'bg-kablui-muted',\n].join(' ')\n\nconst barClasses = [\n 'h-full rounded-kablui-full bg-kablui-accent',\n 'transition-[width] duration-200 ease-out',\n].join(' ')\n\nconst indeterminateClasses = [\n 'absolute inset-y-0 w-1/3 rounded-kablui-full bg-kablui-accent',\n 'animate-pulse',\n].join(' ')\n</script>\n\n<template>\n <div class=\"flex w-full flex-col gap-1\">\n <div\n v-if=\"label\"\n class=\"text-kablui-sm text-kablui-muted-fg\"\n >\n {{ label }}\n </div>\n <div\n role=\"progressbar\"\n :aria-valuemin=\"0\"\n :aria-valuemax=\"max\"\n :aria-valuenow=\"isIndeterminate ? undefined : clampedValue\"\n :aria-label=\"label || undefined\"\n :aria-busy=\"isIndeterminate ? true : undefined\"\n :class=\"trackClasses\"\n >\n <div\n v-if=\"isIndeterminate\"\n :class=\"indeterminateClasses\"\n />\n <div\n v-else\n :class=\"barClasses\"\n :style=\"{ width: `${percent}%` }\"\n />\n </div>\n </div>\n</template>\n","import type { ComputedRef, InjectionKey, Ref } from 'vue'\n\nexport interface RadioGroupContext {\n name: ComputedRef<string>\n model: Ref<string | undefined>\n disabled: ComputedRef<boolean>\n invalid: ComputedRef<boolean>\n register: (el: HTMLInputElement) => void\n unregister: (el: HTMLInputElement) => void\n focusRelative: (current: HTMLInputElement, delta: number) => void\n}\n\nexport const RADIO_GROUP_KEY: InjectionKey<RadioGroupContext> = Symbol('kablui-radio-group')\n","<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount, onMounted, ref, useAttrs } from 'vue'\nimport { RADIO_GROUP_KEY } from './radioContext'\n\nexport interface RadioProps {\n value: string\n disabled?: boolean\n id?: string\n}\n\ndefineOptions({ inheritAttrs: false })\n\nconst props = withDefaults(defineProps<RadioProps>(), {\n disabled: false,\n})\n\nconst attrs = useAttrs()\nconst group = inject(RADIO_GROUP_KEY, null)\nconst inputRef = ref<HTMLInputElement | null>(null)\n\nif (!group) {\n console.warn('[kablui] Radio must be used inside RadioGroup')\n}\n\nconst isDisabled = computed(() => props.disabled || !!group?.disabled.value)\nconst isChecked = computed(() => group?.model.value === props.value)\nconst isInvalid = computed(() => !!group?.invalid.value)\n\nonMounted(() => {\n if (inputRef.value) group?.register(inputRef.value)\n})\n\nonBeforeUnmount(() => {\n if (inputRef.value) group?.unregister(inputRef.value)\n})\n\nconst baseClasses = [\n 'size-4 shrink-0 appearance-none rounded-full border border-kablui-border bg-kablui-bg',\n 'checked:border-kablui-accent checked:bg-kablui-accent',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-kablui-focus focus-visible:ring-offset-2 focus-visible:ring-offset-kablui-bg',\n 'disabled:opacity-50 disabled:pointer-events-none',\n].join(' ')\n\nconst classes = computed(() => [\n baseClasses,\n isInvalid.value ? 'border-kablui-danger' : '',\n])\n\nfunction onChange() {\n if (!group || isDisabled.value) return\n group.model.value = props.value\n}\n\nfunction onKeydown(event: KeyboardEvent) {\n if (!group || isDisabled.value || !inputRef.value) return\n if (event.key === 'ArrowDown' || event.key === 'ArrowRight') {\n event.preventDefault()\n group.focusRelative(inputRef.value, 1)\n } else if (event.key === 'ArrowUp' || event.key === 'ArrowLeft') {\n event.preventDefault()\n group.focusRelative(inputRef.value, -1)\n }\n}\n</script>\n\n<template>\n <input\n ref=\"inputRef\"\n type=\"radio\"\n :id=\"id\"\n :name=\"group?.name.value\"\n :value=\"value\"\n :checked=\"isChecked\"\n :disabled=\"isDisabled\"\n :aria-invalid=\"isInvalid ? 'true' : undefined\"\n :class=\"classes\"\n v-bind=\"attrs\"\n @change=\"onChange\"\n @keydown=\"onKeydown\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport { computed, provide } from 'vue'\nimport { useFieldControlAttrs } from '../composables/useField'\nimport { RADIO_GROUP_KEY } from './radioContext'\n\nexport interface RadioGroupProps {\n name?: string\n disabled?: boolean\n invalid?: boolean\n orientation?: 'horizontal' | 'vertical'\n id?: string\n}\n\nlet nameCounter = 0\n\nconst props = withDefaults(defineProps<RadioGroupProps>(), {\n disabled: false,\n invalid: false,\n orientation: 'vertical',\n})\n\nconst model = defineModel<string>()\n\nconst fieldAttrs = useFieldControlAttrs({\n id: () => props.id,\n invalid: () => props.invalid,\n})\n\nconst generatedName = `kablui-radio-${++nameCounter}`\nconst groupName = computed(() => props.name ?? generatedName)\nconst radios = new Set<HTMLInputElement>()\n\nfunction register(el: HTMLInputElement) {\n radios.add(el)\n}\n\nfunction unregister(el: HTMLInputElement) {\n radios.delete(el)\n}\n\nfunction enabledRadios(): HTMLInputElement[] {\n return [...radios].filter((el) => !el.disabled)\n}\n\nfunction focusRelative(current: HTMLInputElement, delta: number) {\n const list = enabledRadios()\n const index = list.indexOf(current)\n if (index === -1 || list.length === 0) return\n const next = list[(index + delta + list.length) % list.length]!\n next.focus()\n model.value = next.value\n}\n\nprovide(RADIO_GROUP_KEY, {\n name: groupName,\n model,\n disabled: computed(() => props.disabled),\n invalid: computed(() => fieldAttrs.invalid.value),\n register,\n unregister,\n focusRelative,\n})\n\nconst orientationClasses: Record<NonNullable<RadioGroupProps['orientation']>, string> = {\n vertical: 'flex-col gap-2',\n horizontal: 'flex-row flex-wrap gap-3',\n}\n</script>\n\n<template>\n <div\n role=\"radiogroup\"\n :id=\"fieldAttrs.id.value\"\n :aria-invalid=\"fieldAttrs.ariaInvalid.value\"\n :aria-describedby=\"fieldAttrs.describedBy.value\"\n :aria-orientation=\"orientation\"\n :aria-disabled=\"disabled || undefined\"\n :class=\"['flex', orientationClasses[orientation]]\"\n data-slot=\"radio-group\"\n >\n <slot />\n </div>\n</template>\n","import type { ComputedRef, InjectionKey, Ref } from 'vue'\n\nexport interface SelectOption {\n value: string\n label: string\n disabled?: boolean\n id: string\n}\n\nexport interface SelectContext {\n listboxId: string\n model: Ref<string | undefined>\n activeValue: Ref<string | undefined>\n open: Ref<boolean>\n register: (option: SelectOption) => void\n unregister: (value: string) => void\n update: (value: string, option: SelectOption) => void\n selectValue: (value: string) => void\n setActiveValue: (value: string) => void\n disabled: ComputedRef<boolean>\n}\n\nexport const SELECT_KEY: InjectionKey<SelectContext> = Symbol('kablui-select')\n","<script setup lang=\"ts\">\nimport {\n computed,\n nextTick,\n onBeforeUnmount,\n onMounted,\n provide,\n ref,\n useAttrs,\n} from 'vue'\nimport { useFieldControlAttrs } from '../composables/useField'\nimport { SELECT_KEY, type SelectOption } from './selectContext'\n\nexport interface SelectOptionProp {\n value: string\n label: string\n disabled?: boolean\n}\n\nexport interface SelectProps {\n /** Declarative options; omit when composing with `SelectItem` children instead. */\n options?: SelectOptionProp[]\n placeholder?: string\n disabled?: boolean\n invalid?: boolean\n name?: string\n id?: string\n size?: 'sm' | 'md' | 'lg'\n}\n\ndefineOptions({ inheritAttrs: false })\n\nconst props = withDefaults(defineProps<SelectProps>(), {\n placeholder: 'Select…',\n disabled: false,\n invalid: false,\n size: 'md',\n})\n\nconst model = defineModel<string>()\n\nconst attrs = useAttrs()\nconst fieldAttrs = useFieldControlAttrs({\n id: () => props.id,\n invalid: () => props.invalid,\n})\n\nconst open = ref(false)\nconst activeValue = ref<string | undefined>()\nconst rootRef = ref<HTMLElement | null>(null)\nconst listboxRef = ref<HTMLElement | null>(null)\nconst triggerRef = ref<HTMLButtonElement | null>(null)\n\nconst listboxId = `kablui-listbox-${Math.random().toString(36).slice(2, 9)}`\nconst registered = ref<SelectOption[]>([])\n\nlet typeaheadBuffer = ''\nlet typeaheadTimer: ReturnType<typeof setTimeout> | null = null\n\nconst propOptions = computed<SelectOption[]>(() =>\n (props.options ?? []).map((opt) => ({\n value: opt.value,\n label: opt.label,\n disabled: opt.disabled,\n id: `${listboxId}-option-${opt.value}`,\n })),\n)\n\nconst allOptions = computed(() => {\n if (propOptions.value.length > 0) return propOptions.value\n return registered.value\n})\n\nconst enabledOptions = computed(() => allOptions.value.filter((o) => !o.disabled))\n\nconst selectedOption = computed(() =>\n allOptions.value.find((o) => o.value === model.value),\n)\n\nconst displayLabel = computed(() => selectedOption.value?.label ?? '')\n\nconst activeDescendant = computed(() => {\n if (!open.value || !activeValue.value) return undefined\n return allOptions.value.find((o) => o.value === activeValue.value)?.id\n})\n\nfunction register(option: SelectOption) {\n const next = [...registered.value]\n const index = next.findIndex((o) => o.value === option.value)\n if (index === -1) next.push(option)\n else next[index] = option\n registered.value = next\n}\n\nfunction unregister(value: string) {\n registered.value = registered.value.filter((o) => o.value !== value)\n}\n\nfunction update(value: string, option: SelectOption) {\n const index = registered.value.findIndex((o) => o.value === value)\n if (index === -1) return\n const prev = registered.value[index]!\n const label = option.label || prev.label || option.value\n if (\n prev.label === label &&\n prev.disabled === option.disabled &&\n prev.id === option.id\n ) {\n return\n }\n const next = [...registered.value]\n next[index] = { ...option, label }\n registered.value = next\n}\n\nfunction setActiveValue(value: string) {\n activeValue.value = value\n}\n\nfunction selectValue(value: string) {\n const option = allOptions.value.find((o) => o.value === value)\n if (!option || option.disabled) return\n model.value = value\n open.value = false\n activeValue.value = value\n nextTick(() => triggerRef.value?.focus())\n}\n\nfunction resolveInitialActive(): string | undefined {\n const selected = model.value\n if (selected && enabledOptions.value.some((o) => o.value === selected)) {\n return selected\n }\n return enabledOptions.value[0]?.value\n}\n\nfunction openListbox() {\n if (props.disabled) return\n open.value = true\n activeValue.value = resolveInitialActive()\n nextTick(() => {\n listboxRef.value?.focus()\n })\n}\n\nfunction closeListbox() {\n open.value = false\n nextTick(() => triggerRef.value?.focus())\n}\n\nfunction toggleListbox() {\n if (open.value) closeListbox()\n else openListbox()\n}\n\nfunction moveActive(delta: number) {\n const list = enabledOptions.value\n if (list.length === 0) return\n const currentIndex = list.findIndex((o) => o.value === activeValue.value)\n const start = currentIndex === -1 ? (delta > 0 ? -1 : 0) : currentIndex\n const nextIndex = (start + delta + list.length) % list.length\n activeValue.value = list[nextIndex]!.value\n}\n\nfunction moveToEdge(edge: 'start' | 'end') {\n const list = enabledOptions.value\n if (list.length === 0) return\n activeValue.value = edge === 'start' ? list[0]!.value : list[list.length - 1]!.value\n}\n\nfunction typeahead(char: string) {\n typeaheadBuffer += char.toLowerCase()\n if (typeaheadTimer) clearTimeout(typeaheadTimer)\n typeaheadTimer = setTimeout(() => {\n typeaheadBuffer = ''\n }, 500)\n\n const list = enabledOptions.value\n const startIndex = Math.max(\n 0,\n list.findIndex((o) => o.value === activeValue.value),\n )\n for (let i = 0; i < list.length; i++) {\n const option = list[(startIndex + i) % list.length]!\n if (option.label.toLowerCase().startsWith(typeaheadBuffer)) {\n activeValue.value = option.value\n if (!open.value) {\n model.value = option.value\n }\n return\n }\n }\n}\n\nfunction onTriggerKeydown(event: KeyboardEvent) {\n if (props.disabled) return\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n if (!open.value) openListbox()\n else moveActive(1)\n break\n case 'ArrowUp':\n event.preventDefault()\n if (!open.value) openListbox()\n else moveActive(-1)\n break\n case 'Home':\n if (open.value) {\n event.preventDefault()\n moveToEdge('start')\n }\n break\n case 'End':\n if (open.value) {\n event.preventDefault()\n moveToEdge('end')\n }\n break\n case 'Enter':\n case ' ':\n event.preventDefault()\n if (!open.value) openListbox()\n else if (activeValue.value) selectValue(activeValue.value)\n break\n case 'Escape':\n if (open.value) {\n event.preventDefault()\n closeListbox()\n }\n break\n default:\n if (event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) {\n event.preventDefault()\n if (!open.value) openListbox()\n typeahead(event.key)\n }\n }\n}\n\nfunction onListboxKeydown(event: KeyboardEvent) {\n onTriggerKeydown(event)\n}\n\nfunction onDocumentPointerDown(event: PointerEvent) {\n if (!open.value || !rootRef.value) return\n const target = event.target as Node\n if (!rootRef.value.contains(target)) {\n open.value = false\n }\n}\n\nonMounted(() => {\n document.addEventListener('pointerdown', onDocumentPointerDown)\n})\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown)\n if (typeaheadTimer) clearTimeout(typeaheadTimer)\n})\n\nprovide(SELECT_KEY, {\n listboxId,\n model,\n activeValue,\n open,\n register,\n unregister,\n update,\n selectValue,\n setActiveValue,\n disabled: computed(() => props.disabled),\n})\n\nconst triggerBase = [\n 'inline-flex w-full items-center justify-between gap-2 border border-kablui-border bg-kablui-bg text-kablui-fg',\n 'rounded-kablui-md font-kablui-normal',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-kablui-focus focus-visible:ring-offset-2 focus-visible:ring-offset-kablui-bg',\n 'disabled:opacity-50 disabled:pointer-events-none',\n].join(' ')\n\nconst sizeClasses: Record<NonNullable<SelectProps['size']>, string> = {\n sm: 'text-kablui-sm px-2 py-1',\n md: 'text-kablui-md px-3 py-1.5',\n lg: 'text-kablui-lg px-4 py-2',\n}\n\nconst triggerClasses = computed(() => [\n triggerBase,\n sizeClasses[props.size],\n fieldAttrs.invalid.value ? 'border-kablui-danger' : '',\n !displayLabel.value ? 'text-kablui-muted-fg' : '',\n])\n\n/** Name the listbox via the trigger id (Field label) or placeholder fallback. */\nconst listboxLabelledBy = computed(() => fieldAttrs.id.value)\nconst listboxAriaLabel = computed(() =>\n fieldAttrs.id.value ? undefined : props.placeholder,\n)\n</script>\n\n<template>\n <div ref=\"rootRef\" class=\"relative w-full\" data-slot=\"select\">\n <button\n ref=\"triggerRef\"\n type=\"button\"\n :id=\"fieldAttrs.id.value\"\n :disabled=\"disabled\"\n aria-haspopup=\"listbox\"\n :aria-expanded=\"open ? 'true' : 'false'\"\n :aria-controls=\"listboxId\"\n :aria-invalid=\"fieldAttrs.ariaInvalid.value\"\n :aria-describedby=\"fieldAttrs.describedBy.value\"\n :class=\"triggerClasses\"\n v-bind=\"attrs\"\n @click=\"toggleListbox\"\n @keydown=\"onTriggerKeydown\"\n >\n <span class=\"truncate\">{{ displayLabel || placeholder }}</span>\n <svg\n class=\"size-4 shrink-0 text-kablui-muted-fg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n </button>\n\n <div\n v-show=\"open\"\n :id=\"listboxId\"\n ref=\"listboxRef\"\n role=\"listbox\"\n tabindex=\"-1\"\n :aria-labelledby=\"listboxLabelledBy\"\n :aria-label=\"listboxAriaLabel\"\n :aria-activedescendant=\"activeDescendant\"\n class=\"absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-kablui-md border border-kablui-border bg-kablui-bg p-1 shadow-kablui-sm\"\n @keydown=\"onListboxKeydown\"\n >\n <template v-if=\"propOptions.length\">\n <div\n v-for=\"option in propOptions\"\n :id=\"option.id\"\n :key=\"option.value\"\n role=\"option\"\n :aria-selected=\"model === option.value ? 'true' : 'false'\"\n :aria-disabled=\"option.disabled || undefined\"\n :data-value=\"option.value\"\n :class=\"[\n 'flex w-full cursor-pointer items-center px-3 py-1.5 text-kablui-md text-kablui-fg rounded-kablui-sm',\n activeValue === option.value ? 'bg-kablui-muted' : '',\n model === option.value ? 'font-kablui-medium' : '',\n option.disabled ? 'opacity-50 pointer-events-none' : 'hover:bg-kablui-muted',\n ]\"\n @click=\"selectValue(option.value)\"\n @mouseenter=\"!option.disabled && setActiveValue(option.value)\"\n >\n {{ option.label }}\n </div>\n </template>\n <slot v-else />\n </div>\n\n <input v-if=\"name\" type=\"hidden\" :name=\"name\" :value=\"model ?? ''\" :disabled=\"disabled\" />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount, onMounted, onUpdated, ref } from 'vue'\nimport { SELECT_KEY, type SelectOption } from './selectContext'\n\nexport interface SelectItemProps {\n value: string\n disabled?: boolean\n /** Optional explicit label for the trigger; defaults to slot text / value. */\n label?: string\n}\n\nconst props = withDefaults(defineProps<SelectItemProps>(), {\n disabled: false,\n})\n\nconst select = inject(SELECT_KEY, null)\nconst rootRef = ref<HTMLElement | null>(null)\n\nif (!select) {\n console.warn('[kablui] SelectItem must be used inside Select')\n}\n\nconst optionId = computed(() => (select ? `${select.listboxId}-option-${props.value}` : undefined))\n\nfunction resolveLabel(): string {\n return props.label || rootRef.value?.textContent?.trim() || props.value\n}\n\nfunction toOption(): SelectOption {\n return {\n value: props.value,\n label: resolveLabel(),\n disabled: props.disabled,\n id: optionId.value ?? props.value,\n }\n}\n\nonMounted(() => {\n select?.register(toOption())\n})\n\nonUpdated(() => {\n select?.update(props.value, toOption())\n})\n\nonBeforeUnmount(() => {\n select?.unregister(props.value)\n})\n\nconst isSelected = computed(() => select?.model.value === props.value)\nconst isActive = computed(() => select?.activeValue.value === props.value)\n\nconst classes = computed(() =>\n [\n 'flex w-full cursor-pointer items-center px-3 py-1.5 text-kablui-md text-kablui-fg',\n 'rounded-kablui-sm',\n isActive.value ? 'bg-kablui-muted' : '',\n isSelected.value ? 'font-kablui-medium' : '',\n props.disabled ? 'opacity-50 pointer-events-none' : 'hover:bg-kablui-muted',\n ].join(' '),\n)\n\nfunction onSelect() {\n if (props.disabled) return\n select?.selectValue(props.value)\n}\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :id=\"optionId\"\n role=\"option\"\n :aria-selected=\"isSelected ? 'true' : 'false'\"\n :aria-disabled=\"disabled || undefined\"\n :data-value=\"value\"\n :class=\"classes\"\n @click=\"onSelect\"\n @mouseenter=\"!disabled && select?.setActiveValue(value)\"\n >\n <slot>{{ value }}</slot>\n </div>\n</template>\n","<script setup lang=\"ts\">\nexport interface SeparatorProps {\n orientation?: 'horizontal' | 'vertical'\n /** When true, uses `role=\"separator\"`; otherwise decorative (`aria-hidden`). */\n semantic?: boolean\n}\n\nwithDefaults(defineProps<SeparatorProps>(), {\n orientation: 'horizontal',\n semantic: false,\n})\n\nconst baseClasses = 'shrink-0 border-0 border-solid'\n\nconst borderClasses: Record<'decorative' | 'semantic', string> = {\n decorative: 'border-kablui-border',\n semantic: 'border-kablui-border-strong',\n}\n\nconst orientationClasses: Record<NonNullable<SeparatorProps['orientation']>, string> = {\n horizontal: 'w-full border-t',\n vertical: 'h-full border-l',\n}\n</script>\n\n<template>\n <div\n :role=\"semantic ? 'separator' : undefined\"\n :aria-hidden=\"semantic ? undefined : true\"\n :aria-orientation=\"semantic && orientation === 'vertical' ? 'vertical' : undefined\"\n :class=\"[\n baseClasses,\n borderClasses[semantic ? 'semantic' : 'decorative'],\n orientationClasses[orientation],\n ]\"\n />\n</template>\n","<script setup lang=\"ts\">\nexport interface SkeletonProps {\n /** CSS width (e.g. `8rem` or `100%`). */\n width?: string\n /** CSS height (e.g. `1rem`). */\n height?: string\n /** Render as a circle (uses `height`/`width` for diameter). */\n circle?: boolean\n /** Pulse animation. Defaults to `true`. */\n animated?: boolean\n}\n\nwithDefaults(defineProps<SkeletonProps>(), {\n circle: false,\n animated: true,\n})\n\nconst baseClasses = 'block bg-kablui-muted'\n\nconst shapeClasses: Record<'rect' | 'circle', string> = {\n rect: 'rounded-kablui-md',\n circle: 'rounded-kablui-full',\n}\n</script>\n\n<template>\n <div\n aria-hidden=\"true\"\n :class=\"[\n baseClasses,\n shapeClasses[circle ? 'circle' : 'rect'],\n animated ? 'animate-pulse' : undefined,\n ]\"\n :style=\"{\n width: width ?? (circle ? '2.5rem' : '100%'),\n height: height ?? (circle ? '2.5rem' : '1rem'),\n }\"\n />\n</template>\n","<script setup lang=\"ts\">\nexport interface SpinnerProps {\n size?: 'sm' | 'md' | 'lg'\n /** Accessible name — rendered visually hidden for assistive tech. */\n label?: string\n}\n\nwithDefaults(defineProps<SpinnerProps>(), {\n size: 'md',\n})\n\nconst baseClasses = [\n 'inline-block shrink-0 rounded-kablui-full border-2 border-current border-t-transparent',\n 'animate-spin',\n].join(' ')\n\nconst sizeClasses: Record<NonNullable<SpinnerProps['size']>, string> = {\n sm: 'size-3',\n md: 'size-4',\n lg: 'size-5',\n}\n</script>\n\n<template>\n <span\n role=\"status\"\n :aria-busy=\"label ? true : undefined\"\n :aria-label=\"label || undefined\"\n class=\"inline-flex items-center\"\n >\n <span :class=\"[baseClasses, sizeClasses[size]]\" aria-hidden=\"true\" />\n <span v-if=\"label\" class=\"sr-only\">{{ label }}</span>\n </span>\n</template>\n","<script setup lang=\"ts\">\nexport interface StackProps {\n gap?: 'sm' | 'md' | 'lg'\n align?: 'start' | 'center' | 'end' | 'stretch' | 'baseline'\n as?: 'div' | 'section' | 'article' | 'main' | 'aside' | 'nav' | 'ul' | 'ol' | 'form' | 'header' | 'footer'\n}\n\nwithDefaults(defineProps<StackProps>(), {\n gap: 'md',\n align: 'stretch',\n as: 'div',\n})\n\nconst gapClasses: Record<NonNullable<StackProps['gap']>, string> = {\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n}\n\nconst alignClasses: Record<NonNullable<StackProps['align']>, string> = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n}\n</script>\n\n<template>\n <component\n :is=\"as\"\n :class=\"['flex flex-col', gapClasses[gap], alignClasses[align]]\"\n >\n <slot />\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue'\nimport { useFieldControlAttrs } from '../composables/useField'\n\nexport interface SwitchProps {\n disabled?: boolean\n invalid?: boolean\n name?: string\n id?: string\n /** Native form value submitted when on. Defaults to `\"on\"`. */\n value?: string\n}\n\ndefineOptions({ inheritAttrs: false })\n\nconst props = withDefaults(defineProps<SwitchProps>(), {\n disabled: false,\n invalid: false,\n value: 'on',\n})\n\nconst model = defineModel<boolean>({ default: false })\n\nconst attrs = useAttrs()\nconst fieldAttrs = useFieldControlAttrs({\n id: () => props.id,\n invalid: () => props.invalid,\n})\n\nconst trackClasses = computed(() =>\n [\n 'relative inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border border-kablui-border',\n 'transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-kablui-focus focus-visible:ring-offset-2 focus-visible:ring-offset-kablui-bg',\n 'disabled:cursor-not-allowed disabled:opacity-50 disabled:pointer-events-none',\n model.value ? 'bg-kablui-accent border-kablui-accent' : 'bg-kablui-muted',\n fieldAttrs.invalid.value ? 'border-kablui-danger' : '',\n ].join(' '),\n)\n\nconst thumbClasses = computed(() =>\n [\n 'pointer-events-none inline-block size-3.5 rounded-full bg-kablui-bg shadow-kablui-sm',\n 'transition-transform',\n model.value ? 'translate-x-4' : 'translate-x-0.5',\n ].join(' '),\n)\n\nfunction toggle() {\n if (props.disabled) return\n model.value = !model.value\n}\n\nfunction onKeydown(event: KeyboardEvent) {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault()\n toggle()\n }\n}\n</script>\n\n<template>\n <button\n type=\"button\"\n role=\"switch\"\n :id=\"fieldAttrs.id.value\"\n :disabled=\"disabled\"\n :aria-checked=\"model ? 'true' : 'false'\"\n :aria-invalid=\"fieldAttrs.ariaInvalid.value\"\n :aria-describedby=\"fieldAttrs.describedBy.value\"\n :class=\"trackClasses\"\n v-bind=\"attrs\"\n @click=\"toggle\"\n @keydown=\"onKeydown\"\n >\n <span :class=\"thumbClasses\" aria-hidden=\"true\" />\n </button>\n <input\n v-if=\"name\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"model ? value : ''\"\n :disabled=\"disabled\"\n />\n</template>\n","import type { ComputedRef, InjectionKey, Ref } from 'vue'\n\nexport interface TabRegistration {\n value: string\n disabled: boolean\n el: HTMLElement\n}\n\nexport interface TabsContext {\n model: Ref<string | undefined>\n orientation: ComputedRef<'horizontal' | 'vertical'>\n registerTab: (tab: TabRegistration) => void\n unregisterTab: (value: string) => void\n updateTab: (value: string, patch: Partial<Omit<TabRegistration, 'value'>>) => void\n getTabId: (value: string) => string\n getPanelId: (value: string) => string\n select: (value: string) => void\n focusRelative: (currentValue: string, delta: number) => void\n focusFirst: () => void\n focusLast: () => void\n isSelected: (value: string) => boolean\n /** Roving tabindex: selected tab, or first enabled when nothing selected. */\n isTabbable: (value: string) => boolean\n}\n\nexport const TABS_KEY: InjectionKey<TabsContext> = Symbol('kablui-tabs')\n","<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport { TABS_KEY } from './tabsContext'\n\nexport interface TabProps {\n value: string\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<TabProps>(), {\n disabled: false,\n})\n\nconst tabs = inject(TABS_KEY, null)\nconst buttonRef = ref<HTMLButtonElement | null>(null)\n\nif (!tabs) {\n console.warn('[kablui] Tab must be used inside Tabs')\n}\n\nconst isSelected = computed(() => !!tabs?.isSelected(props.value))\nconst tabId = computed(() => tabs?.getTabId(props.value))\nconst panelId = computed(() => tabs?.getPanelId(props.value))\nconst orientation = computed(() => tabs?.orientation.value ?? 'horizontal')\nconst tabindex = computed(() => (tabs?.isTabbable(props.value) ? 0 : -1))\n\nonMounted(() => {\n if (!tabs || !buttonRef.value) return\n tabs.registerTab({\n value: props.value,\n disabled: props.disabled,\n el: buttonRef.value,\n })\n})\n\nonBeforeUnmount(() => {\n tabs?.unregisterTab(props.value)\n})\n\nwatch(\n () => props.disabled,\n (disabled) => {\n tabs?.updateTab(props.value, { disabled })\n },\n)\n\nwatch(buttonRef, (el) => {\n if (!tabs || !el) return\n tabs.updateTab(props.value, { el, disabled: props.disabled })\n})\n\nfunction onClick() {\n if (!tabs || props.disabled) return\n tabs.select(props.value)\n buttonRef.value?.focus()\n}\n\nfunction onKeydown(event: KeyboardEvent) {\n if (!tabs || props.disabled) return\n\n const horizontal = orientation.value === 'horizontal'\n const vertical = orientation.value === 'vertical'\n\n switch (event.key) {\n case 'ArrowRight':\n if (!horizontal) return\n event.preventDefault()\n tabs.focusRelative(props.value, 1)\n break\n case 'ArrowLeft':\n if (!horizontal) return\n event.preventDefault()\n tabs.focusRelative(props.value, -1)\n break\n case 'ArrowDown':\n if (!vertical) return\n event.preventDefault()\n tabs.focusRelative(props.value, 1)\n break\n case 'ArrowUp':\n if (!vertical) return\n event.preventDefault()\n tabs.focusRelative(props.value, -1)\n break\n case 'Home':\n event.preventDefault()\n tabs.focusFirst()\n break\n case 'End':\n event.preventDefault()\n tabs.focusLast()\n break\n }\n}\n\nconst baseClasses = [\n 'inline-flex items-center justify-center gap-1.5',\n 'px-3 py-2 text-kablui-md font-kablui-medium',\n 'text-kablui-muted-fg bg-transparent',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-kablui-focus focus-visible:ring-offset-2 focus-visible:ring-offset-kablui-bg',\n 'disabled:opacity-50 disabled:pointer-events-none',\n].join(' ')\n\nconst selectedClasses = computed(() => {\n if (!isSelected.value) {\n return orientation.value === 'horizontal'\n ? 'border-b-2 border-transparent hover:text-kablui-fg'\n : 'border-r-2 border-transparent hover:text-kablui-fg'\n }\n return orientation.value === 'horizontal'\n ? 'border-b-2 border-kablui-accent text-kablui-accent'\n : 'border-r-2 border-kablui-accent text-kablui-accent'\n})\n</script>\n\n<template>\n <button\n ref=\"buttonRef\"\n type=\"button\"\n role=\"tab\"\n data-slot=\"tab\"\n :id=\"tabId\"\n :disabled=\"disabled || undefined\"\n :aria-selected=\"isSelected ? 'true' : 'false'\"\n :aria-controls=\"panelId\"\n :tabindex=\"tabindex\"\n :class=\"[baseClasses, selectedClasses]\"\n @click=\"onClick\"\n @keydown=\"onKeydown\"\n >\n <slot />\n </button>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject } from 'vue'\nimport { TABS_KEY } from './tabsContext'\n\n/** No props — orientation comes from Tabs. */\nexport type TabListProps = Record<string, never>\n\nconst tabs = inject(TABS_KEY, null)\n\nif (!tabs) {\n console.warn('[kablui] TabList must be used inside Tabs')\n}\n\nconst orientation = computed(() => tabs?.orientation.value ?? 'horizontal')\n\nconst orientationClasses: Record<'horizontal' | 'vertical', string> = {\n horizontal: 'flex-row border-b border-kablui-border',\n vertical: 'flex-col border-r border-kablui-border',\n}\n</script>\n\n<template>\n <div\n role=\"tablist\"\n data-slot=\"tab-list\"\n :aria-orientation=\"orientation\"\n :class=\"['flex', orientationClasses[orientation]]\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject } from 'vue'\nimport { TABS_KEY } from './tabsContext'\n\nexport interface TabPanelProps {\n value: string\n}\n\nconst props = defineProps<TabPanelProps>()\n\nconst tabs = inject(TABS_KEY, null)\n\nif (!tabs) {\n console.warn('[kablui] TabPanel must be used inside Tabs')\n}\n\nconst isSelected = computed(() => !!tabs?.isSelected(props.value))\nconst panelId = computed(() => tabs?.getPanelId(props.value))\nconst tabId = computed(() => tabs?.getTabId(props.value))\n</script>\n\n<template>\n <div\n role=\"tabpanel\"\n data-slot=\"tab-panel\"\n :id=\"panelId\"\n :aria-labelledby=\"tabId\"\n :hidden=\"!isSelected\"\n :tabindex=\"isSelected ? 0 : undefined\"\n class=\"px-1 py-3 text-kablui-md text-kablui-fg\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, provide, ref } from 'vue'\nimport { useId } from '../composables/useId'\nimport { TABS_KEY, type TabRegistration } from './tabsContext'\n\nexport interface TabsProps {\n /** Layout and arrow-key direction for the tab list. Defaults to `horizontal`. */\n orientation?: 'horizontal' | 'vertical'\n}\n\nconst props = withDefaults(defineProps<TabsProps>(), {\n orientation: 'horizontal',\n})\n\nconst model = defineModel<string>()\n\nconst baseId = useId('tabs')\nconst tabs = ref<TabRegistration[]>([])\n\nfunction getTabId(value: string) {\n return `${baseId}-tab-${value}`\n}\n\nfunction getPanelId(value: string) {\n return `${baseId}-panel-${value}`\n}\n\nfunction registerTab(tab: TabRegistration) {\n const next = [...tabs.value]\n const index = next.findIndex((t) => t.value === tab.value)\n if (index === -1) next.push(tab)\n else next[index] = tab\n tabs.value = next\n}\n\nfunction unregisterTab(value: string) {\n tabs.value = tabs.value.filter((t) => t.value !== value)\n}\n\nfunction updateTab(value: string, patch: Partial<Omit<TabRegistration, 'value'>>) {\n const next = [...tabs.value]\n const index = next.findIndex((t) => t.value === value)\n if (index === -1) return\n next[index] = { ...next[index]!, ...patch, value }\n tabs.value = next\n}\n\nfunction enabledTabs(): TabRegistration[] {\n return tabs.value.filter((t) => !t.disabled)\n}\n\nfunction isSelected(value: string) {\n return model.value === value\n}\n\nfunction isTabbable(value: string) {\n const tab = tabs.value.find((t) => t.value === value)\n if (!tab || tab.disabled) return false\n if (model.value != null) return model.value === value\n const first = enabledTabs()[0]\n return first?.value === value\n}\n\nfunction select(value: string) {\n const tab = tabs.value.find((t) => t.value === value)\n if (!tab || tab.disabled) return\n model.value = value\n}\n\nfunction focusTab(tab: TabRegistration) {\n model.value = tab.value\n tab.el.focus()\n}\n\nfunction focusRelative(currentValue: string, delta: number) {\n const list = enabledTabs()\n const index = list.findIndex((t) => t.value === currentValue)\n if (index === -1 || list.length === 0) return\n const next = list[(index + delta + list.length) % list.length]!\n focusTab(next)\n}\n\nfunction focusFirst() {\n const list = enabledTabs()\n if (list.length === 0) return\n focusTab(list[0]!)\n}\n\nfunction focusLast() {\n const list = enabledTabs()\n if (list.length === 0) return\n focusTab(list[list.length - 1]!)\n}\n\nprovide(TABS_KEY, {\n model,\n orientation: computed(() => props.orientation),\n registerTab,\n unregisterTab,\n updateTab,\n getTabId,\n getPanelId,\n select,\n focusRelative,\n focusFirst,\n focusLast,\n isSelected,\n isTabbable,\n})\n\nconst orientationClasses: Record<NonNullable<TabsProps['orientation']>, string> = {\n horizontal: 'flex-col',\n vertical: 'flex-row',\n}\n</script>\n\n<template>\n <div\n data-slot=\"tabs\"\n :class=\"['flex gap-0', orientationClasses[orientation]]\"\n :data-orientation=\"orientation\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nexport interface TextProps {\n as?: 'p' | 'span' | 'div' | 'label' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'\n size?: 'sm' | 'md' | 'lg'\n weight?: 'normal' | 'medium' | 'semibold'\n tone?: 'default' | 'muted' | 'accent' | 'danger'\n}\n\nwithDefaults(defineProps<TextProps>(), {\n as: 'p',\n size: 'md',\n weight: 'normal',\n tone: 'default',\n})\n\nconst sizeClasses: Record<NonNullable<TextProps['size']>, string> = {\n sm: 'text-kablui-sm',\n md: 'text-kablui-md',\n lg: 'text-kablui-lg',\n}\n\nconst weightClasses: Record<NonNullable<TextProps['weight']>, string> = {\n normal: 'font-kablui-normal',\n medium: 'font-kablui-medium',\n semibold: 'font-kablui-semibold',\n}\n\nconst toneClasses: Record<NonNullable<TextProps['tone']>, string> = {\n default: 'text-kablui-fg',\n muted: 'text-kablui-muted-fg',\n accent: 'text-kablui-accent',\n danger: 'text-kablui-danger',\n}\n</script>\n\n<template>\n <component\n :is=\"as\"\n :class=\"[sizeClasses[size], weightClasses[weight], toneClasses[tone]]\"\n >\n <slot />\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue'\nimport { useFieldControlAttrs } from '../composables/useField'\n\nexport interface TextareaProps {\n size?: 'sm' | 'md' | 'lg'\n rows?: number\n disabled?: boolean\n invalid?: boolean\n placeholder?: string\n name?: string\n id?: string\n}\n\ndefineOptions({ inheritAttrs: false })\n\nconst props = withDefaults(defineProps<TextareaProps>(), {\n size: 'md',\n rows: 3,\n disabled: false,\n invalid: false,\n})\n\nconst model = defineModel<string>({ default: '' })\n\nconst attrs = useAttrs()\nconst fieldAttrs = useFieldControlAttrs({\n id: () => props.id,\n invalid: () => props.invalid,\n})\n\nconst baseClasses = [\n 'w-full border border-kablui-border bg-kablui-bg text-kablui-fg',\n 'rounded-kablui-md font-kablui-normal',\n 'placeholder:text-kablui-muted-fg',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-kablui-focus focus-visible:ring-offset-2 focus-visible:ring-offset-kablui-bg',\n 'disabled:opacity-50 disabled:pointer-events-none',\n].join(' ')\n\nconst sizeClasses: Record<NonNullable<TextareaProps['size']>, string> = {\n sm: 'text-kablui-sm px-2 py-1',\n md: 'text-kablui-md px-3 py-1.5',\n lg: 'text-kablui-lg px-4 py-2',\n}\n\nconst classes = computed(() => [\n baseClasses,\n sizeClasses[props.size],\n fieldAttrs.invalid.value ? 'border-kablui-danger' : '',\n])\n</script>\n\n<template>\n <textarea\n :id=\"fieldAttrs.id.value\"\n :name=\"name\"\n :rows=\"rows\"\n :disabled=\"disabled\"\n :placeholder=\"placeholder\"\n :value=\"model\"\n :aria-invalid=\"fieldAttrs.ariaInvalid.value\"\n :aria-describedby=\"fieldAttrs.describedBy.value\"\n :class=\"classes\"\n v-bind=\"attrs\"\n @input=\"model = ($event.target as HTMLTextAreaElement).value\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport { useId } from '../composables/useId'\nimport type { ToastTone } from './toastContext'\n\nexport interface ToastProps {\n tone?: ToastTone\n title: string\n description?: string\n actionLabel?: string\n}\n\nwithDefaults(defineProps<ToastProps>(), {\n tone: 'neutral',\n})\n\nconst emit = defineEmits<{\n dismiss: []\n action: []\n}>()\n\nconst titleId = useId('toast-title')\nconst descriptionId = useId('toast-description')\n\nconst baseClasses = [\n 'pointer-events-auto relative flex w-80 max-w-[calc(100vw-2rem)] gap-3',\n 'rounded-kablui-md border px-3 py-2.5 shadow-kablui-md',\n 'text-kablui-md',\n].join(' ')\n\nconst toneClasses: Record<ToastTone, string> = {\n neutral: 'border-kablui-border bg-kablui-bg text-kablui-fg',\n accent: 'border-kablui-accent bg-kablui-accent text-kablui-accent-fg',\n danger: 'border-kablui-danger bg-kablui-danger text-kablui-danger-fg',\n success: 'border-kablui-success bg-kablui-success text-kablui-success-fg',\n warning: 'border-kablui-warning bg-kablui-warning text-kablui-warning-fg',\n}\n\nconst dismissClasses = [\n 'shrink-0 -mr-1 -mt-0.5 inline-flex size-6 items-center justify-center',\n 'rounded-kablui-sm text-current opacity-70 hover:opacity-100',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-kablui-focus focus-visible:ring-offset-2 focus-visible:ring-offset-kablui-bg',\n].join(' ')\n\nconst actionClasses = [\n 'mt-1.5 inline-flex items-center text-kablui-sm font-kablui-medium',\n 'underline underline-offset-2 opacity-90 hover:opacity-100',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-kablui-focus focus-visible:ring-offset-2 focus-visible:ring-offset-kablui-bg',\n].join(' ')\n\nfunction onDismiss() {\n emit('dismiss')\n}\n\nfunction onAction() {\n emit('action')\n}\n</script>\n\n<template>\n <div\n :role=\"tone === 'danger' ? 'alert' : 'status'\"\n :aria-labelledby=\"titleId\"\n :aria-describedby=\"description ? descriptionId : undefined\"\n :class=\"[baseClasses, toneClasses[tone]]\"\n data-kablui-toast\n >\n <div class=\"min-w-0 flex-1\">\n <div\n :id=\"titleId\"\n class=\"font-kablui-semibold\"\n >\n {{ title }}\n </div>\n <div\n v-if=\"description\"\n :id=\"descriptionId\"\n class=\"mt-0.5 text-kablui-sm opacity-90\"\n >\n {{ description }}\n </div>\n <button\n v-if=\"actionLabel\"\n type=\"button\"\n :class=\"actionClasses\"\n @click=\"onAction\"\n >\n {{ actionLabel }}\n </button>\n </div>\n <button\n type=\"button\"\n :class=\"dismissClasses\"\n aria-label=\"Dismiss\"\n @click=\"onDismiss\"\n >\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n</template>\n","import type { InjectionKey } from 'vue'\n\nexport type ToastTone = 'neutral' | 'accent' | 'danger' | 'success' | 'warning'\n\nexport type ToastPlacement =\n | 'top-start'\n | 'top-end'\n | 'bottom-start'\n | 'bottom-end'\n\nexport interface ToastAction {\n label: string\n onClick: () => void\n}\n\nexport interface ToastOptions {\n tone?: ToastTone\n title: string\n description?: string\n /** Auto-dismiss ms. Defaults to `5000`. Use `0` for sticky. */\n duration?: number\n action?: ToastAction\n}\n\nexport interface ToastItem {\n id: string\n tone: ToastTone\n title: string\n description?: string\n duration: number\n action?: ToastAction\n}\n\nexport interface ToastContext {\n toast: (options: ToastOptions) => string\n dismiss: (id: string) => void\n}\n\nexport const TOAST_KEY: InjectionKey<ToastContext> = Symbol('kablui-toast')\n","<script setup lang=\"ts\">\nimport { computed, onScopeDispose, provide, ref } from 'vue'\nimport { useId } from '../composables/useId'\nimport { useOverlayStack } from '../composables/useOverlayStack'\nimport Stack from './Stack.vue'\nimport Toast from './Toast.vue'\nimport {\n TOAST_KEY,\n type ToastItem,\n type ToastOptions,\n type ToastPlacement,\n} from './toastContext'\n\nexport interface ToastProviderProps {\n /** Corner placement for the toast region. Defaults to `bottom-end`. */\n placement?: ToastPlacement\n /** Max simultaneously visible toasts; excess wait in a queue. Defaults to `3`. */\n maxVisible?: number\n /** Teleport target. Defaults to `body`. */\n to?: string | HTMLElement\n}\n\nconst props = withDefaults(defineProps<ToastProviderProps>(), {\n placement: 'bottom-end',\n maxVisible: 3,\n to: 'body',\n})\n\ndefineSlots<{\n default?: () => unknown\n}>()\n\nconst DEFAULT_DURATION = 5000\n\nconst visible = ref<ToastItem[]>([])\nconst pending = ref<ToastItem[]>([])\nconst timers = new Map<string, ReturnType<typeof setTimeout>>()\n\n// Use stack z-index; do not register — toasts must not steal Escape from dialogs.\nconst { zIndex } = useOverlayStack('toast')\n\nconst hasVisible = computed(() => visible.value.length > 0)\n\nfunction clearTimer(id: string) {\n const handle = timers.get(id)\n if (handle !== undefined) {\n clearTimeout(handle)\n timers.delete(id)\n }\n}\n\nfunction scheduleDismiss(item: ToastItem) {\n if (item.duration <= 0) return\n clearTimer(item.id)\n const handle = setTimeout(() => {\n dismiss(item.id)\n }, item.duration)\n timers.set(item.id, handle)\n}\n\nfunction promote() {\n while (visible.value.length < props.maxVisible && pending.value.length > 0) {\n const next = pending.value.shift()\n if (!next) break\n visible.value.push(next)\n scheduleDismiss(next)\n }\n}\n\nfunction toast(options: ToastOptions): string {\n const item: ToastItem = {\n id: useId('toast'),\n tone: options.tone ?? 'neutral',\n title: options.title,\n description: options.description,\n duration: options.duration ?? DEFAULT_DURATION,\n action: options.action,\n }\n\n if (visible.value.length < props.maxVisible) {\n visible.value.push(item)\n scheduleDismiss(item)\n } else {\n pending.value.push(item)\n }\n\n return item.id\n}\n\nfunction dismiss(id: string) {\n clearTimer(id)\n\n const visibleIndex = visible.value.findIndex((item) => item.id === id)\n if (visibleIndex !== -1) {\n visible.value.splice(visibleIndex, 1)\n promote()\n return\n }\n\n const pendingIndex = pending.value.findIndex((item) => item.id === id)\n if (pendingIndex !== -1) {\n pending.value.splice(pendingIndex, 1)\n }\n}\n\nfunction onAction(item: ToastItem) {\n item.action?.onClick()\n}\n\nprovide(TOAST_KEY, { toast, dismiss })\n\nonScopeDispose(() => {\n for (const id of [...timers.keys()]) clearTimer(id)\n})\n\nconst placementClasses: Record<ToastPlacement, string> = {\n 'top-start': 'top-4 left-4',\n 'top-end': 'top-4 right-4',\n 'bottom-start': 'bottom-4 left-4',\n 'bottom-end': 'bottom-4 right-4',\n}\n\nconst isTopPlacement = computed(() => props.placement.startsWith('top'))\n\nconst regionClasses = computed(() =>\n ['pointer-events-none fixed z-kablui-toast', placementClasses[props.placement]].join(' '),\n)\n\n/** Newest closest to the corner edge. */\nconst orderedVisible = computed(() =>\n isTopPlacement.value ? [...visible.value].reverse() : visible.value,\n)\n</script>\n\n<template>\n <slot />\n <Teleport :to=\"to\">\n <div\n v-if=\"hasVisible\"\n :class=\"regionClasses\"\n :style=\"{ zIndex }\"\n data-kablui-toast-region\n :data-placement=\"placement\"\n >\n <Stack\n gap=\"sm\"\n :align=\"placement.endsWith('end') ? 'end' : 'start'\"\n >\n <Toast\n v-for=\"item in orderedVisible\"\n :key=\"item.id\"\n :tone=\"item.tone\"\n :title=\"item.title\"\n :description=\"item.description\"\n :action-label=\"item.action?.label\"\n @dismiss=\"dismiss(item.id)\"\n @action=\"onAction(item)\"\n />\n </Stack>\n </div>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { nextTick, onBeforeUnmount, ref, watch } from 'vue'\nimport {\n useFloating,\n type FloatingPlacement,\n} from '../composables/useFloating'\nimport { useId } from '../composables/useId'\n\nexport interface TooltipProps {\n /** Tooltip text when the default slot for content is unused. */\n content?: string\n placement?: FloatingPlacement\n /** Delay in ms before showing on hover/focus. */\n delay?: number\n}\n\nconst props = withDefaults(defineProps<TooltipProps>(), {\n placement: 'top',\n delay: 300,\n})\n\nconst open = ref(false)\nconst anchorRef = ref<HTMLElement | null>(null)\nconst floatingRef = ref<HTMLElement | null>(null)\nconst tooltipId = useId('tooltip')\n\nlet showTimer: ReturnType<typeof setTimeout> | null = null\nlet hideTimer: ReturnType<typeof setTimeout> | null = null\nlet describedEl: HTMLElement | null = null\n\nconst { style } = useFloating(anchorRef, floatingRef, {\n open,\n placement: () => props.placement,\n})\n\nfunction clearTimers() {\n if (showTimer) {\n clearTimeout(showTimer)\n showTimer = null\n }\n if (hideTimer) {\n clearTimeout(hideTimer)\n hideTimer = null\n }\n}\n\nfunction canUseHover(): boolean {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return true\n }\n return window.matchMedia('(hover: hover)').matches\n}\n\nfunction resolveDescribedEl(): HTMLElement | null {\n const root = anchorRef.value\n if (!root) return null\n const focusable = root.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n )\n return focusable ?? root\n}\n\nfunction syncDescribedBy(isOpen: boolean) {\n const el = resolveDescribedEl()\n if (describedEl && describedEl !== el) {\n if (describedEl.getAttribute('aria-describedby') === tooltipId) {\n describedEl.removeAttribute('aria-describedby')\n }\n describedEl = null\n }\n if (!el) return\n describedEl = el\n if (isOpen) {\n el.setAttribute('aria-describedby', tooltipId)\n } else if (el.getAttribute('aria-describedby') === tooltipId) {\n el.removeAttribute('aria-describedby')\n }\n}\n\nfunction scheduleShow() {\n clearTimers()\n showTimer = setTimeout(() => {\n showTimer = null\n open.value = true\n }, props.delay)\n}\n\nfunction scheduleHide() {\n clearTimers()\n hideTimer = setTimeout(() => {\n hideTimer = null\n open.value = false\n }, 0)\n}\n\nfunction onPointerEnter() {\n if (!canUseHover()) return\n scheduleShow()\n}\n\nfunction onPointerLeave() {\n if (!canUseHover()) return\n scheduleHide()\n}\n\nfunction onFocusIn() {\n scheduleShow()\n}\n\nfunction onFocusOut(event: FocusEvent) {\n const root = anchorRef.value\n const next = event.relatedTarget\n if (root && next instanceof Node && root.contains(next)) return\n scheduleHide()\n}\n\nwatch(open, async (isOpen) => {\n await nextTick()\n syncDescribedBy(isOpen)\n})\n\nonBeforeUnmount(() => {\n clearTimers()\n syncDescribedBy(false)\n})\n\nconst contentClasses = [\n 'z-kablui-tooltip pointer-events-none max-w-xs rounded-kablui-md',\n 'border border-kablui-border bg-kablui-bg px-2 py-1',\n 'text-kablui-sm text-kablui-fg shadow-kablui-md',\n].join(' ')\n</script>\n\n<template>\n <span\n ref=\"anchorRef\"\n class=\"inline-flex\"\n data-slot=\"tooltip\"\n @pointerenter=\"onPointerEnter\"\n @pointerleave=\"onPointerLeave\"\n @focusin=\"onFocusIn\"\n @focusout=\"onFocusOut\"\n >\n <slot />\n </span>\n\n <Teleport to=\"body\">\n <div\n v-if=\"open\"\n :id=\"tooltipId\"\n ref=\"floatingRef\"\n role=\"tooltip\"\n data-slot=\"tooltip-content\"\n :data-placement=\"placement\"\n :class=\"contentClasses\"\n :style=\"style\"\n >\n <slot name=\"content\">{{ content }}</slot>\n </div>\n </Teleport>\n</template>\n","import { inject } from 'vue'\nimport { TOAST_KEY, type ToastContext } from '../components/toastContext'\n\n/**\n * Imperative toast API. Must be called under a `ToastProvider`.\n */\nexport function useToast(): ToastContext {\n const ctx = inject(TOAST_KEY, null)\n if (!ctx) {\n throw new Error('useToast() must be used within a <ToastProvider>.')\n }\n return ctx\n}\n","import './styles/index.css'\nimport packageJson from '../package.json' with { type: 'json' }\n\nexport const version = packageJson.version\n\nexport * from './components'\nexport { useField, provideField, useFieldControlAttrs } from './composables/useField'\nexport type { FieldContext, ProvideFieldOptions } from './composables/useField'\nexport { useToast } from './composables/useToast'\nexport type {\n ToastAction,\n ToastContext,\n ToastOptions,\n ToastPlacement,\n ToastTone,\n} from './components/toastContext'\n"],"names":["ACCORDION_KEY","ACCORDION_ITEM_KEY","props","__props","model","_useModel","triggers","triggerOrder","isOpen","value","toggle","current","index","registerTrigger","el","disabled","unregisterTrigger","enabledTriggers","entry","focusRelative","currentValue","delta","list","_a","_b","provide","computed","_openBlock","_createElementBlock","_hoisted_1","_renderSlot","_ctx","item","inject","classes","_unref","idCounter","useId","prefix","accordion","triggerId","contentId","isDisabled","triggerEl","setTriggerRef","watch","onBeforeUnmount","onClick","onKeydown","event","_createElementVNode","emit","__emit","baseClasses","toneClasses","dismissClasses","onDismiss","_normalizeClass","_hoisted_2","_hoisted_3","_toDisplayString","sizeClasses","variantClasses","paddingClasses","_createBlock","_resolveDynamicComponent","FIELD_KEY","provideField","options","controlId","hintId","errorId","hasHint","ref","hasError","invalid","toValue","describedBy","ids","ctx","useField","useFieldControlAttrs","field","id","ariaInvalid","attrs","useAttrs","inputRef","fieldAttrs","syncIndeterminate","onMounted","onChange","target","_mergeProps","gapClasses","alignClasses","justifyClasses","Z_INDEX","nextId","stack","version","instanceOverlayQueue","bump","useOverlayStack","layer","registered","zIndex","isTop","register","unregister","idx","instance","getCurrentInstance","queue","onScopeDispose","__claimOverlayIsTop","nextDismissId","dismissStack","topEscapeEntry","i","topOutsideEntry","useDismissable","rootRef","overlayIsTop","inStack","escapeEnabled","outsideEnabled","syncStack","active","e","isAllowedByOverlayStack","top","onPointerDown","root","TABBABLE_SELECTOR","isVisible","style","getTabbableElements","useFocusTrap","containerRef","previouslyFocused","listening","onKeyDown","container","tabbables","first","last","focusOutside","activate","deactivate","restore","lockCount","savedOverflow","lockBody","unlockBody","useScrollLock","held","sync","shouldLock","backdropClasses","headerClasses","titleClasses","descriptionClasses","bodyClasses","footerClasses","open","slots","useSlots","panelRef","titleId","descriptionId","hasTitle","hasDescription","close","shellClasses","panelClasses","closeClasses","_Teleport","$slots","rootClasses","_hoisted_4","toRef","hasContent","nodes","node","visible","watchEffect","isDecorative","$event","forId","MENU_KEY","triggerRef","contentRef","getEnabledItems","content","focusFirstItem","focusItemRelative","items","nextIndex","focusItemAtEdge","edge","setOpen","_reason","reason","closeOnSelect","dismiss","wasOpen","nextTick","OPPOSITE","parsePlacement","placement","side","align","alignMainAxis","anchorStart","anchorSize","floatingSize","coordsFor","anchor","floating","isPrimaryClipped","x","y","viewportWidth","viewportHeight","computeStyle","anchorRect","floatingRect","flipped","useFloating","anchorRef","floatingRef","update","unref","onScrollOrResize","startListening","stopListening","menu","fallbackTrigger","fallbackContent","setContentRef","page","range","start","end","length","_","pageCount","siblingCount","leftSibling","rightSibling","showLeftEllipsis","showRightEllipsis","leftItemCount","rightItemCount","atStart","atEnd","goTo","next","prev","_createVNode","Button","_cache","_Fragment","_renderList","POPOVER_KEY","openedByKeyboard","popover","isIndeterminate","clampedValue","max","percent","trackClasses","barClasses","indeterminateClasses","RADIO_GROUP_KEY","group","isChecked","isInvalid","nameCounter","generatedName","groupName","radios","enabledRadios","orientationClasses","SELECT_KEY","activeValue","listboxRef","listboxId","typeaheadBuffer","typeaheadTimer","propOptions","opt","allOptions","enabledOptions","o","selectedOption","displayLabel","activeDescendant","option","label","setActiveValue","selectValue","resolveInitialActive","selected","openListbox","closeListbox","toggleListbox","moveActive","currentIndex","moveToEdge","typeahead","char","startIndex","onTriggerKeydown","onListboxKeydown","onDocumentPointerDown","triggerBase","triggerClasses","listboxLabelledBy","listboxAriaLabel","select","optionId","resolveLabel","toOption","onUpdated","isSelected","isActive","onSelect","borderClasses","shapeClasses","_normalizeStyle","thumbClasses","TABS_KEY","tabs","buttonRef","tabId","panelId","orientation","tabindex","horizontal","vertical","selectedClasses","baseId","getTabId","getPanelId","registerTab","tab","t","unregisterTab","updateTab","patch","enabledTabs","isTabbable","focusTab","focusFirst","focusLast","weightClasses","actionClasses","onAction","TOAST_KEY","DEFAULT_DURATION","pending","timers","hasVisible","clearTimer","handle","scheduleDismiss","promote","toast","visibleIndex","pendingIndex","placementClasses","isTopPlacement","regionClasses","orderedVisible","Stack","Toast","tooltipId","showTimer","hideTimer","describedEl","clearTimers","canUseHover","resolveDescribedEl","syncDescribedBy","scheduleShow","scheduleHide","onPointerEnter","onPointerLeave","onFocusIn","onFocusOut","contentClasses","useToast","packageJson"],"mappings":"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"}