@treeui/vue 0.6.1 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +10 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2005 -2085
- package/dist/index.js.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +4 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/components/accordion.ts","../src/components/TreeAccordion.vue","../src/components/TreeAccordionItem.vue","../src/components/TreeAlert.vue","../src/components/TreeBadge.vue","../src/components/TreeBreadcrumb.vue","../src/components/TreeBreadcrumbItem.vue","../src/components/TreeSpinner.vue","../src/components/TreeButton.vue","../src/components/TreeCard.vue","../src/components/TreeCheckbox.vue","../src/composables/useControllableOpen.ts","../src/components/TreeCombobox.vue","../src/components/TreeModal.vue","../src/components/TreeConfirmDialog.vue","../src/components/TreeContainer.vue","../src/components/TreeContextMenu.vue","../src/components/TreeDatePicker.vue","../src/components/TreeDateTimePicker.vue","../src/components/TreeDrawer.vue","../src/components/TreeDropdown.vue","../src/components/TreeEmptyState.vue","../src/components/TreeFileUpload.vue","../src/components/TreeMultiSelect.vue","../src/components/TreeGrid.vue","../src/components/TreeNavbar.vue","../src/components/TreeLink.vue","../src/components/sidebar.ts","../src/components/TreeNavMenu.vue","../src/components/TreeRadio.vue","../src/components/TreeRadioGroup.vue","../src/components/TreeSelect.vue","../src/components/TreeSidebar.vue","../src/components/TreeInput.vue","../src/components/TreeNumberInput.vue","../src/components/TreeSelectableList.vue","../src/components/TreeStack.vue","../src/components/tree-view.ts","../src/components/TreeTreeViewItem.vue","../src/components/TreeTreeView.vue","../src/components/TreeSteps.vue","../src/components/TreeToggleGroup.vue","../src/components/TreeTextarea.vue","../src/components/TreeSkeleton.vue","../src/components/TreeStat.vue","../src/components/TreeSwitch.vue","../src/components/TreeTooltip.vue","../src/components/TreeFormField.vue","../src/components/TreePagination.vue","../src/components/TreePopover.vue","../src/components/TreeProgress.vue","../src/components/tabs-context.ts","../src/components/TreeTabs.vue","../src/components/TreeTabList.vue","../src/components/TreeTab.vue","../src/components/TreeTabPanel.vue","../src/components/TreeToast.vue","../src/composables/useToast.ts","../src/components/TreeToastProvider.vue","../src/components/TreeAvatar.vue","../src/components/TreeDivider.vue","../src/components/TreeTable.vue","../src/components/TreeTag.vue","../src/components/TreeTimeline.vue","../src/components/TreePricingCard.vue","../src/components/TreePricing.vue","../src/components/TreeMarkdownEditor.vue","../src/plugin.ts","../src/types/contracts.ts"],"sourcesContent":["import type { InjectionKey } from 'vue';\n\nexport type AccordionType = 'single' | 'multiple';\n\nexport interface AccordionContext {\n type: AccordionType;\n disabled: boolean;\n collapsible: boolean;\n isItemOpen: (value: string) => boolean;\n toggleItem: (value: string) => void;\n registerTrigger: (value: string, el: HTMLElement) => void;\n unregisterTrigger: (value: string) => void;\n focusPrev: (value: string) => void;\n focusNext: (value: string) => void;\n focusFirst: () => void;\n focusLast: () => void;\n}\n\nexport const accordionInjectionKey: InjectionKey<AccordionContext> = Symbol('tree-accordion');\n","<script setup lang=\"ts\">\nimport { computed, provide, reactive } from 'vue';\nimport { type AccordionType, accordionInjectionKey } from './accordion';\n\nconst props = withDefaults(\n defineProps<{\n type?: AccordionType;\n modelValue?: string | string[];\n defaultValue?: string | string[];\n disabled?: boolean;\n collapsible?: boolean;\n }>(),\n {\n type: 'single',\n modelValue: undefined,\n defaultValue: undefined,\n disabled: false,\n collapsible: false,\n },\n);\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: string | string[] | undefined): void;\n}>();\n\n// Internal uncontrolled state\nconst internalValue = computed<string[]>(() => {\n const def = props.defaultValue;\n if (def === undefined) return [];\n return Array.isArray(def) ? def : [def];\n});\n\nconst uncontrolledValue = reactive<Set<string>>(new Set(internalValue.value));\n\nconst isControlled = computed(() => props.modelValue !== undefined);\n\nconst openValues = computed<Set<string>>(() => {\n if (isControlled.value) {\n const mv = props.modelValue!;\n return new Set(Array.isArray(mv) ? mv : [mv]);\n }\n return uncontrolledValue;\n});\n\nfunction isItemOpen(value: string): boolean {\n return openValues.value.has(value);\n}\n\nfunction emitUpdate(values: Set<string>) {\n if (props.type === 'single') {\n const arr = [...values];\n emit('update:modelValue', arr.length > 0 ? arr[0] : undefined);\n } else {\n emit('update:modelValue', [...values]);\n }\n}\n\nfunction toggleItem(value: string) {\n const currentlyOpen = isItemOpen(value);\n\n if (props.type === 'single') {\n if (currentlyOpen) {\n if (props.collapsible) {\n if (!isControlled.value) {\n uncontrolledValue.delete(value);\n }\n emitUpdate(new Set());\n }\n } else {\n if (!isControlled.value) {\n uncontrolledValue.clear();\n uncontrolledValue.add(value);\n }\n emitUpdate(new Set([value]));\n }\n } else {\n // Multiple mode\n const next = new Set(openValues.value);\n if (currentlyOpen) {\n next.delete(value);\n } else {\n next.add(value);\n }\n if (!isControlled.value) {\n if (currentlyOpen) {\n uncontrolledValue.delete(value);\n } else {\n uncontrolledValue.add(value);\n }\n }\n emitUpdate(next);\n }\n}\n\n// Keyboard navigation between triggers\nconst triggerMap = new Map<string, HTMLElement>();\nconst triggerOrder: string[] = reactive([]);\n\nfunction registerTrigger(value: string, el: HTMLElement) {\n if (!triggerMap.has(value)) {\n triggerOrder.push(value);\n }\n triggerMap.set(value, el);\n}\n\nfunction unregisterTrigger(value: string) {\n triggerMap.delete(value);\n const idx = triggerOrder.indexOf(value);\n if (idx !== -1) triggerOrder.splice(idx, 1);\n}\n\nfunction getEnabledTriggers(): string[] {\n return triggerOrder.filter((v) => {\n const el = triggerMap.get(v);\n return el && !el.hasAttribute('disabled');\n });\n}\n\nfunction focusPrev(value: string) {\n const enabled = getEnabledTriggers();\n const idx = enabled.indexOf(value);\n const prev = idx > 0 ? idx - 1 : enabled.length - 1;\n triggerMap.get(enabled[prev])?.focus();\n}\n\nfunction focusNext(value: string) {\n const enabled = getEnabledTriggers();\n const idx = enabled.indexOf(value);\n const next = idx < enabled.length - 1 ? idx + 1 : 0;\n triggerMap.get(enabled[next])?.focus();\n}\n\nfunction focusFirst() {\n const enabled = getEnabledTriggers();\n if (enabled.length) triggerMap.get(enabled[0])?.focus();\n}\n\nfunction focusLast() {\n const enabled = getEnabledTriggers();\n if (enabled.length) triggerMap.get(enabled[enabled.length - 1])?.focus();\n}\n\nprovide(accordionInjectionKey, {\n type: props.type,\n disabled: props.disabled,\n collapsible: props.collapsible,\n isItemOpen,\n toggleItem,\n registerTrigger,\n unregisterTrigger,\n focusPrev,\n focusNext,\n focusFirst,\n focusLast,\n});\n</script>\n\n<template>\n <div class=\"tree-accordion\">\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject, onMounted, onBeforeUnmount, ref, useId } from 'vue';\nimport { accordionInjectionKey } from './accordion';\n\nconst props = withDefaults(\n defineProps<{\n value: string;\n disabled?: boolean;\n }>(),\n {\n disabled: false,\n },\n);\n\nconst injected = inject(accordionInjectionKey);\n\nif (!injected) {\n throw new Error('[TreeUI] TAccordionItem must be used inside a TAccordion.');\n}\n\nconst ctx = injected;\n\nconst triggerId = useId();\nconst panelId = useId();\nconst triggerRef = ref<HTMLButtonElement | null>(null);\n\nconst isOpen = computed(() => ctx.isItemOpen(props.value));\nconst isDisabled = computed(() => props.disabled || ctx.disabled);\n\nconst itemClasses = computed(() => [\n 'tree-accordion__item',\n {\n 'is-open': isOpen.value,\n 'is-disabled': isDisabled.value,\n },\n]);\n\nfunction handleToggle() {\n if (isDisabled.value) return;\n ctx.toggleItem(props.value);\n}\n\nfunction handleKeydown(event: KeyboardEvent) {\n if (isDisabled.value) return;\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n ctx.focusNext(props.value);\n break;\n case 'ArrowUp':\n event.preventDefault();\n ctx.focusPrev(props.value);\n break;\n case 'Home':\n event.preventDefault();\n ctx.focusFirst();\n break;\n case 'End':\n event.preventDefault();\n ctx.focusLast();\n break;\n }\n}\n\nonMounted(() => {\n if (triggerRef.value) {\n ctx.registerTrigger(props.value, triggerRef.value);\n }\n});\n\nonBeforeUnmount(() => {\n ctx.unregisterTrigger(props.value);\n});\n</script>\n\n<template>\n <div :class=\"itemClasses\">\n <h3 class=\"tree-accordion__heading\">\n <button\n :id=\"triggerId\"\n ref=\"triggerRef\"\n type=\"button\"\n class=\"tree-accordion__trigger\"\n :aria-expanded=\"isOpen\"\n :aria-controls=\"panelId\"\n :disabled=\"isDisabled || undefined\"\n @click=\"handleToggle\"\n @keydown=\"handleKeydown\"\n >\n <slot\n name=\"trigger\"\n :open=\"isOpen\"\n >\n {{ value }}\n </slot>\n <svg\n class=\"tree-accordion__icon\"\n :class=\"{ 'is-open': isOpen }\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n </h3>\n <div\n v-if=\"isOpen\"\n :id=\"panelId\"\n role=\"region\"\n :aria-labelledby=\"triggerId\"\n class=\"tree-accordion__content\"\n >\n <div class=\"tree-accordion__panel\">\n <slot />\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\nexport type TreeAlertVariant = 'info' | 'success' | 'warning' | 'danger';\n\nconst props = withDefaults(\n defineProps<{\n variant?: TreeAlertVariant;\n size?: TreeSize;\n dismissible?: boolean;\n }>(),\n {\n variant: 'info',\n size: 'md',\n dismissible: false,\n },\n);\n\nconst emit = defineEmits<{\n (e: 'dismiss'): void;\n}>();\n\nconst classes = computed(() => [\n 'tree-alert',\n `tree-alert--${props.variant}`,\n `tree-alert--${props.size}`,\n]);\n\nfunction handleDismiss() {\n emit('dismiss');\n}\n</script>\n\n<template>\n <div\n :class=\"classes\"\n role=\"alert\"\n >\n <span\n v-if=\"$slots.icon\"\n class=\"tree-alert__icon\"\n aria-hidden=\"true\"\n >\n <slot name=\"icon\" />\n </span>\n <div class=\"tree-alert__content\">\n <slot />\n </div>\n <button\n v-if=\"dismissible\"\n type=\"button\"\n class=\"tree-alert__dismiss\"\n aria-label=\"Dismiss\"\n @click=\"handleDismiss\"\n >\n <slot name=\"dismiss-icon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </slot>\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { TreeSize, TreeVariant } from '../types/contracts';\n\nconst _treeBadgeTones = ['neutral', 'success', 'warning', 'danger', 'info'] as const;\n\nexport type TreeBadgeTone = (typeof _treeBadgeTones)[number];\n\nconst props = withDefaults(\n defineProps<{\n variant?: TreeVariant;\n size?: TreeSize;\n tone?: TreeBadgeTone;\n }>(),\n {\n variant: 'soft',\n size: 'md',\n tone: 'neutral',\n },\n);\n\nconst classes = computed(() => [\n 'tree-badge',\n `tree-badge--${props.variant}`,\n `tree-badge--${props.size}`,\n `tree-badge--tone-${props.tone}`,\n]);\n</script>\n\n<template>\n <span :class=\"classes\">\n <span\n v-if=\"$slots.icon\"\n class=\"tree-badge__icon\"\n aria-hidden=\"true\"\n >\n <slot name=\"icon\" />\n </span>\n <slot />\n </span>\n</template>\n","<script setup lang=\"ts\">\nconst props = withDefaults(\n defineProps<{\n /**\n * Character or string used to visually separate breadcrumb items.\n */\n separator?: string;\n }>(),\n {\n separator: '/',\n },\n);\n</script>\n\n<template>\n <nav\n aria-label=\"Breadcrumb\"\n class=\"tree-breadcrumb\"\n >\n <ol\n class=\"tree-breadcrumb__list\"\n :style=\"{ '--tree-breadcrumb-separator': `'${props.separator}'` }\"\n >\n <slot />\n </ol>\n </nav>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, type Component } from 'vue';\n\nconst props = withDefaults(\n defineProps<{\n /**\n * URL the breadcrumb item links to. Omit for the current/last item.\n */\n href?: string;\n /**\n * Route target. When provided and vue-router is available, renders RouterLink.\n */\n to?: string | Record<string, unknown>;\n /**\n * Marks this item as the current page. Automatically set if it's the last item without href.\n */\n current?: boolean;\n }>(),\n {\n href: undefined,\n to: undefined,\n current: false,\n },\n);\n\nconst instance = getCurrentInstance();\n\nconst routerLinkComponent = computed<Component | null>(() => {\n if (!props.to) return null;\n\n return (instance?.appContext.components.RouterLink as Component | undefined) ?? null;\n});\n\nconst hasRouterLink = computed(() => {\n return Boolean(routerLinkComponent.value);\n});\n\nconst canRenderLink = computed(() => {\n if (props.href) return true;\n if (typeof props.to === 'string') return true;\n return Boolean(props.to && hasRouterLink.value);\n});\n\nconst isCurrent = computed(() => props.current || !canRenderLink.value);\n\nconst tag = computed<string | Component>(() => {\n if (props.to && routerLinkComponent.value) {\n return routerLinkComponent.value;\n }\n\n return 'a';\n});\n\nconst linkProps = computed(() => {\n if (props.to && hasRouterLink.value) {\n return { to: props.to };\n }\n\n return {\n href: props.href ?? (typeof props.to === 'string' ? props.to : undefined),\n };\n});\n</script>\n\n<template>\n <li class=\"tree-breadcrumb__item\">\n <component\n :is=\"tag\"\n v-if=\"!isCurrent\"\n v-bind=\"linkProps\"\n class=\"tree-breadcrumb__link\"\n >\n <slot />\n </component>\n <span\n v-else\n class=\"tree-breadcrumb__current\"\n aria-current=\"page\"\n >\n <slot />\n </span>\n </li>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\nconst props = withDefaults(\n defineProps<{\n size?: TreeSize;\n label?: string;\n }>(),\n {\n size: 'md',\n label: 'Loading',\n },\n);\n\nconst classes = computed(() => ['tree-spinner', `tree-spinner--${props.size}`]);\n</script>\n\n<template>\n <span\n :class=\"classes\"\n role=\"status\"\n :aria-label=\"label\"\n >\n <span\n class=\"tree-spinner__ring\"\n aria-hidden=\"true\"\n />\n <span class=\"tree-visually-hidden\">{{ label }}</span>\n </span>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { TreeSize, TreeVariant } from '../types/contracts';\nimport TreeSpinner from './TreeSpinner.vue';\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n variant?: TreeVariant;\n size?: TreeSize;\n disabled?: boolean;\n loading?: boolean;\n type?: 'button' | 'submit' | 'reset';\n }>(),\n {\n as: 'button',\n variant: 'solid',\n size: 'md',\n disabled: false,\n loading: false,\n type: 'button',\n },\n);\n\nconst emit = defineEmits<{\n click: [event: MouseEvent];\n}>();\n\nconst isNativeButton = computed(() => props.as === 'button');\nconst isDisabled = computed(() => props.disabled || props.loading);\nconst classes = computed(() => [\n 'tree-button',\n `tree-button--${props.variant}`,\n `tree-button--${props.size}`,\n {\n 'is-loading': props.loading,\n 'is-disabled': isDisabled.value,\n },\n]);\n\nconst onClick = (event: MouseEvent) => {\n if (isDisabled.value) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n emit('click', event);\n};\n</script>\n\n<template>\n <component\n :is=\"as\"\n :type=\"isNativeButton ? type : undefined\"\n :class=\"classes\"\n :disabled=\"isNativeButton ? isDisabled : undefined\"\n :aria-disabled=\"!isNativeButton && isDisabled ? 'true' : undefined\"\n :aria-busy=\"loading || undefined\"\n :tabindex=\"!isNativeButton && isDisabled ? -1 : undefined\"\n @click=\"onClick\"\n >\n <span\n v-if=\"loading\"\n class=\"tree-button__spinner\"\n >\n <TreeSpinner\n size=\"sm\"\n label=\"Loading\"\n />\n </span>\n <span\n v-if=\"$slots.icon\"\n class=\"tree-button__icon\"\n aria-hidden=\"true\"\n >\n <slot name=\"icon\" />\n </span>\n <span class=\"tree-button__label\">\n <slot />\n </span>\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { TreeCardVariant, TreeSize } from '../types/contracts';\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n variant?: TreeCardVariant;\n size?: TreeSize;\n title?: string;\n }>(),\n {\n as: 'section',\n variant: 'outline',\n size: 'md',\n title: undefined,\n },\n);\n\nconst classes = computed(() => [\n 'tree-card',\n `tree-card--${props.variant}`,\n `tree-card--${props.size}`,\n]);\n\nconst hasHeader = computed(() => !!props.title);\n</script>\n\n<template>\n <component\n :is=\"as\"\n :class=\"classes\"\n >\n <header\n v-if=\"$slots.header || hasHeader || $slots.actions\"\n class=\"tree-card__header\"\n >\n <slot name=\"header\">\n <span\n v-if=\"title\"\n class=\"tree-card__title\"\n >\n {{ title }}\n </span>\n <span\n v-if=\"$slots.actions\"\n class=\"tree-card__actions\"\n >\n <slot name=\"actions\" />\n </span>\n </slot>\n </header>\n <div class=\"tree-card__body\">\n <slot />\n </div>\n <footer\n v-if=\"$slots.footer\"\n class=\"tree-card__footer\"\n >\n <slot name=\"footer\" />\n </footer>\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs, watch } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: boolean;\n size?: TreeSize;\n disabled?: boolean;\n indeterminate?: boolean;\n invalid?: boolean;\n }>(),\n {\n modelValue: false,\n size: 'md',\n disabled: false,\n indeterminate: false,\n invalid: false,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean];\n}>();\n\nconst attrs = useAttrs();\nconst inputRef = ref<HTMLInputElement | null>(null);\n\nwatch(\n () => props.indeterminate,\n (val) => {\n if (inputRef.value) {\n inputRef.value.indeterminate = val;\n }\n },\n);\n\nwatch(inputRef, (el) => {\n if (el) {\n el.indeterminate = props.indeterminate;\n }\n});\n\nconst rootClasses = computed(() => [\n 'tree-checkbox',\n `tree-checkbox--${props.size}`,\n {\n 'is-checked': props.modelValue,\n 'is-indeterminate': props.indeterminate,\n 'is-disabled': props.disabled,\n 'is-invalid': props.invalid,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst inputAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst onChange = () => {\n emit('update:modelValue', !props.modelValue);\n};\n</script>\n\n<template>\n <label\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <input\n ref=\"inputRef\"\n v-bind=\"inputAttrs\"\n type=\"checkbox\"\n class=\"tree-checkbox__input\"\n :checked=\"modelValue\"\n :disabled=\"disabled\"\n :aria-checked=\"indeterminate ? 'mixed' : modelValue\"\n :aria-invalid=\"invalid || undefined\"\n @change=\"onChange\"\n >\n <span\n class=\"tree-checkbox__control\"\n aria-hidden=\"true\"\n >\n <svg\n v-if=\"modelValue && !indeterminate\"\n class=\"tree-checkbox__icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"3.5 8.5 6.5 11.5 12.5 4.5\" />\n </svg>\n <svg\n v-else-if=\"indeterminate\"\n class=\"tree-checkbox__icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n >\n <line\n x1=\"4\"\n y1=\"8\"\n x2=\"12\"\n y2=\"8\"\n />\n </svg>\n </span>\n <span\n v-if=\"$slots.default\"\n class=\"tree-checkbox__label\"\n >\n <slot />\n </span>\n </label>\n</template>\n","import { computed, ref, type Ref } from 'vue';\n\nexport const useControllableOpen = (\n controlledValue: Ref<boolean | undefined>,\n defaultValue: boolean,\n onChange: (value: boolean) => void,\n) => {\n const uncontrolledValue = ref(defaultValue);\n\n const value = computed(() => controlledValue.value ?? uncontrolledValue.value);\n\n const setValue = (nextValue: boolean) => {\n if (nextValue === value.value) {\n return;\n }\n\n if (controlledValue.value === undefined) {\n uncontrolledValue.value = nextValue;\n }\n\n onChange(nextValue);\n };\n\n return {\n value,\n setValue,\n };\n};\n\n","<script setup lang=\"ts\">\nimport { createId, isEscapeKey } from '@treeui/utils';\nimport { computed, onBeforeUnmount, ref, toRef, useAttrs, watch } from 'vue';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeSize } from '../types/contracts';\nimport TreeSpinner from './TreeSpinner.vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport interface TreeComboboxOption {\n label: string;\n value: string;\n description?: string;\n keywords?: string[];\n disabled?: boolean;\n}\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string;\n options?: TreeComboboxOption[];\n open?: boolean;\n defaultOpen?: boolean;\n size?: TreeSize;\n disabled?: boolean;\n loading?: boolean;\n invalid?: boolean;\n placeholder?: string;\n emptyText?: string;\n }>(),\n {\n modelValue: '',\n options: () => [],\n open: undefined,\n defaultOpen: false,\n size: 'md',\n disabled: false,\n loading: false,\n invalid: false,\n placeholder: '',\n emptyText: 'No results found.',\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n 'input-change': [value: string];\n}>();\n\ndefineSlots<{\n prefix?: () => unknown;\n option?: (props: {\n option: TreeComboboxOption;\n selected: boolean;\n active: boolean;\n }) => unknown;\n empty?: (props: { query: string }) => unknown;\n}>();\n\nconst attrs = useAttrs();\nconst listboxId = createId('tree-combobox');\nconst rootRef = ref<HTMLElement | null>(null);\nconst activeIndex = ref(-1);\nconst query = ref('');\n\nconst normalize = (value: string) => value.trim().toLowerCase();\nconst getOptionId = (value: string) => `${listboxId}-option-${value}`;\n\nconst selectedOption = computed(() =>\n props.options.find((option) => option.value === props.modelValue),\n);\n\nconst selectedLabel = computed(() => selectedOption.value?.label ?? '');\n\nconst inputAttrs = computed(() => {\n const { class: _class, style: _style, autocomplete, ...rest } = attrs;\n return {\n autocomplete: typeof autocomplete === 'string' ? autocomplete : 'off',\n ...rest,\n };\n});\n\nconst listboxLabel = computed(() =>\n typeof attrs['aria-label'] === 'string' ? attrs['aria-label'] : undefined,\n);\n\nconst listboxLabelledby = computed(() =>\n typeof attrs['aria-labelledby'] === 'string' ? attrs['aria-labelledby'] : undefined,\n);\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst rootClasses = computed(() => [\n 'tree-combobox',\n `tree-combobox--${props.size}`,\n {\n 'is-disabled': props.disabled,\n 'is-invalid': props.invalid,\n 'is-loading': props.loading,\n 'is-open': isOpen.value,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst filteredOptions = computed(() => {\n const normalizedQuery = normalize(query.value);\n\n if (!normalizedQuery) {\n return props.options;\n }\n\n return props.options.filter((option) => {\n const fields = [\n option.label,\n option.description ?? '',\n ...(option.keywords ?? []),\n ];\n\n return fields.some((field) => field.toLowerCase().includes(normalizedQuery));\n });\n});\n\nconst enabledFilteredIndexes = computed(() =>\n filteredOptions.value.reduce<number[]>((indexes, option, index) => {\n if (!option.disabled) {\n indexes.push(index);\n }\n\n return indexes;\n }, []),\n);\n\nconst activeOption = computed(() =>\n activeIndex.value >= 0 ? filteredOptions.value[activeIndex.value] : undefined,\n);\n\nconst activeDescendant = computed(() =>\n isOpen.value && activeOption.value ? getOptionId(activeOption.value.value) : undefined,\n);\n\nconst syncQueryFromSelection = () => {\n query.value = selectedLabel.value;\n};\n\nconst setInitialActiveIndex = (fallback: 'first' | 'last' = 'first') => {\n const selectedIndex = filteredOptions.value.findIndex((option) =>\n option.value === props.modelValue && !option.disabled,\n );\n\n if (selectedIndex >= 0) {\n activeIndex.value = selectedIndex;\n return;\n }\n\n if (enabledFilteredIndexes.value.length === 0) {\n activeIndex.value = -1;\n return;\n }\n\n activeIndex.value =\n fallback === 'last'\n ? enabledFilteredIndexes.value[enabledFilteredIndexes.value.length - 1]\n : enabledFilteredIndexes.value[0];\n};\n\nconst moveActive = (direction: 1 | -1) => {\n if (enabledFilteredIndexes.value.length === 0) {\n activeIndex.value = -1;\n return;\n }\n\n const currentEnabledIndex = enabledFilteredIndexes.value.indexOf(activeIndex.value);\n\n if (currentEnabledIndex === -1) {\n activeIndex.value =\n direction === 1\n ? enabledFilteredIndexes.value[0]\n : enabledFilteredIndexes.value[enabledFilteredIndexes.value.length - 1];\n return;\n }\n\n const nextEnabledIndex = currentEnabledIndex + direction;\n\n if (nextEnabledIndex < 0 || nextEnabledIndex >= enabledFilteredIndexes.value.length) {\n return;\n }\n\n activeIndex.value = enabledFilteredIndexes.value[nextEnabledIndex];\n};\n\nconst openListbox = (fallback: 'first' | 'last' = 'first') => {\n if (props.disabled) {\n return;\n }\n\n setValue(true);\n setInitialActiveIndex(fallback);\n};\n\nconst commitPendingClear = () => {\n if (query.value.trim() !== '' || !props.modelValue) {\n return false;\n }\n\n emit('update:modelValue', '');\n return true;\n};\n\nconst closeListbox = (restoreSelection = false) => {\n setValue(false);\n activeIndex.value = -1;\n\n if (!restoreSelection) {\n return;\n }\n\n if (commitPendingClear()) {\n return;\n }\n\n if (selectedLabel.value && query.value !== selectedLabel.value) {\n query.value = selectedLabel.value;\n }\n};\n\nconst selectOption = (option: TreeComboboxOption) => {\n if (option.disabled) {\n return;\n }\n\n query.value = option.label;\n emit('update:modelValue', option.value);\n closeListbox(false);\n};\n\nconst onInput = (event: Event) => {\n query.value = (event.target as HTMLInputElement).value;\n emit('input-change', query.value);\n\n if (props.disabled) {\n return;\n }\n\n if (!isOpen.value) {\n openListbox('first');\n return;\n }\n\n setInitialActiveIndex('first');\n};\n\nconst onInputFocus = () => {\n openListbox('first');\n};\n\nconst onInputClick = () => {\n if (!isOpen.value) {\n openListbox('first');\n }\n};\n\nconst onInputKeydown = (event: KeyboardEvent) => {\n if (props.disabled) {\n return;\n }\n\n if (isEscapeKey(event)) {\n if (isOpen.value) {\n event.preventDefault();\n closeListbox(true);\n }\n\n return;\n }\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n\n if (!isOpen.value) {\n openListbox('first');\n } else {\n moveActive(1);\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n\n if (!isOpen.value) {\n openListbox('last');\n } else {\n moveActive(-1);\n }\n break;\n case 'Enter':\n if (isOpen.value && activeOption.value && !activeOption.value.disabled) {\n event.preventDefault();\n selectOption(activeOption.value);\n }\n break;\n case 'Home':\n if (!isOpen.value) return;\n event.preventDefault();\n setInitialActiveIndex('first');\n break;\n case 'End':\n if (!isOpen.value) return;\n event.preventDefault();\n setInitialActiveIndex('last');\n break;\n case 'Tab':\n closeListbox(true);\n break;\n default:\n break;\n }\n};\n\nconst onOptionPointerEnter = (index: number) => {\n const option = filteredOptions.value[index];\n\n if (option && !option.disabled) {\n activeIndex.value = index;\n }\n};\n\nconst onDocumentPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) return;\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (rootRef.value?.contains(target)) return;\n closeListbox(true);\n};\n\nwatch(isOpen, (value) => {\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n } else {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n }\n});\n\nwatch(\n () => props.modelValue,\n () => {\n if (!isOpen.value) {\n syncQueryFromSelection();\n }\n },\n { immediate: true },\n);\n\nwatch(\n () => props.options,\n () => {\n if (!isOpen.value) {\n syncQueryFromSelection();\n return;\n }\n\n setInitialActiveIndex('first');\n },\n { deep: true },\n);\n\nwatch(filteredOptions, () => {\n if (!isOpen.value) {\n return;\n }\n\n if (filteredOptions.value.length === 0) {\n activeIndex.value = -1;\n return;\n }\n\n const current = filteredOptions.value[activeIndex.value];\n\n if (!current || current.disabled) {\n setInitialActiveIndex('first');\n }\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <div class=\"tree-combobox__control\">\n <span\n v-if=\"$slots.prefix\"\n class=\"tree-combobox__slot tree-combobox__slot--prefix\"\n >\n <slot name=\"prefix\" />\n </span>\n <input\n v-bind=\"inputAttrs\"\n class=\"tree-combobox__input\"\n role=\"combobox\"\n type=\"text\"\n :value=\"query\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :aria-controls=\"isOpen ? listboxId : undefined\"\n :aria-expanded=\"isOpen\"\n :aria-activedescendant=\"activeDescendant\"\n :aria-invalid=\"invalid || undefined\"\n :aria-busy=\"loading || undefined\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n @input=\"onInput\"\n @focus=\"onInputFocus\"\n @click=\"onInputClick\"\n @keydown=\"onInputKeydown\"\n >\n <TreeSpinner\n v-if=\"loading\"\n size=\"sm\"\n label=\"Loading\"\n />\n <svg\n v-else\n class=\"tree-combobox__indicator\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"4 6 8 10 12 6\" />\n </svg>\n </div>\n\n <transition name=\"tree-fade\">\n <ul\n v-if=\"isOpen && !disabled\"\n :id=\"listboxId\"\n role=\"listbox\"\n class=\"tree-combobox__listbox\"\n :aria-label=\"listboxLabel\"\n :aria-labelledby=\"listboxLabelledby\"\n >\n <li\n v-if=\"filteredOptions.length === 0\"\n class=\"tree-combobox__empty\"\n >\n <slot\n name=\"empty\"\n :query=\"query\"\n >\n {{ emptyText }}\n </slot>\n </li>\n\n <template v-else>\n <li\n v-for=\"(option, index) in filteredOptions\"\n :id=\"getOptionId(option.value)\"\n :key=\"option.value\"\n role=\"option\"\n class=\"tree-combobox__option\"\n :class=\"{\n 'is-active': index === activeIndex,\n 'is-disabled': option.disabled,\n 'is-selected': option.value === modelValue,\n }\"\n :aria-selected=\"option.value === modelValue\"\n :aria-disabled=\"option.disabled || undefined\"\n @mouseenter=\"onOptionPointerEnter(index)\"\n @click=\"selectOption(option)\"\n >\n <slot\n name=\"option\"\n :option=\"option\"\n :selected=\"option.value === modelValue\"\n :active=\"index === activeIndex\"\n >\n <span class=\"tree-combobox__option-copy\">\n <span class=\"tree-combobox__option-label\">{{ option.label }}</span>\n <span\n v-if=\"option.description\"\n class=\"tree-combobox__option-description\"\n >\n {{ option.description }}\n </span>\n </span>\n <svg\n v-if=\"option.value === modelValue\"\n class=\"tree-combobox__check\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"3.5 8.5 6.5 11.5 12.5 4.5\" />\n </svg>\n </slot>\n </li>\n </template>\n </ul>\n </transition>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport {\n createId,\n focusFirst,\n focusLast,\n getFocusableElements,\n isEscapeKey,\n} from '@treeui/utils';\nimport { getTreeIcon, treeIconDefaults } from '@treeui/icons';\nimport {\n computed,\n nextTick,\n onBeforeUnmount,\n ref,\n toRef,\n useAttrs,\n watch,\n} from 'vue';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst CloseIcon = getTreeIcon('x');\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n size?: TreeSize;\n title?: string;\n description?: string;\n closeOnEscape?: boolean;\n closeOnOverlay?: boolean;\n showCloseButton?: boolean;\n closeLabel?: string;\n id?: string;\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n size: 'md',\n title: '',\n description: '',\n closeOnEscape: true,\n closeOnOverlay: true,\n showCloseButton: true,\n closeLabel: 'Close modal',\n id: undefined,\n },\n);\n\nconst emit = defineEmits<{\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n}>();\n\nconst attrs = useAttrs();\nconst modalId = props.id ?? createId('tree-modal');\nconst titleId = `${modalId}-title`;\nconst descriptionId = `${modalId}-description`;\nconst rootRef = ref<HTMLElement | null>(null);\nconst surfaceRef = ref<HTMLElement | null>(null);\nconst previousFocusedElement = ref<HTMLElement | null>(null);\nconst hasHeaderContent = computed(() => Boolean(props.title || slots.header));\n\nconst slots = defineSlots<{\n default?: () => unknown;\n trigger?: () => unknown;\n header?: () => unknown;\n content?: () => unknown;\n footer?: () => unknown;\n}>();\n\nconst rootClasses = computed(() => ['tree-modal', attrs.class]);\nconst rootStyle = computed(() => attrs.style);\nconst triggerAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\nconst surfaceClasses = computed(() => [\n 'tree-modal__surface',\n `tree-modal__surface--${props.size}`,\n]);\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst labelledBy = computed(() => (hasHeaderContent.value ? titleId : undefined));\nconst describedBy = computed(() => (props.description ? descriptionId : undefined));\n\nlet openOverlayCount = 0;\nlet previousBodyOverflow = '';\n\nconst lockBodyScroll = () => {\n if (typeof document === 'undefined') {\n return;\n }\n\n if (openOverlayCount === 0) {\n previousBodyOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n\n openOverlayCount += 1;\n};\n\nconst unlockBodyScroll = () => {\n if (typeof document === 'undefined' || openOverlayCount === 0) {\n return;\n }\n\n openOverlayCount -= 1;\n\n if (openOverlayCount === 0) {\n document.body.style.overflow = previousBodyOverflow;\n }\n};\n\nconst focusSurface = () => {\n nextTick(() => {\n if (!surfaceRef.value) {\n return;\n }\n\n const focused = focusFirst(surfaceRef.value);\n if (!focused) {\n surfaceRef.value.focus();\n }\n });\n};\n\nconst openModal = () => {\n if (props.disabled) {\n return;\n }\n\n previousFocusedElement.value = document.activeElement as HTMLElement | null;\n setValue(true);\n};\n\nconst closeModal = () => {\n setValue(false);\n};\n\nconst onTriggerClick = (event: MouseEvent) => {\n if (props.disabled) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n if (event.defaultPrevented) {\n return;\n }\n\n openModal();\n};\n\nconst onOverlayClick = () => {\n if (!props.closeOnOverlay) {\n return;\n }\n\n closeModal();\n};\n\nconst onSurfaceClick = (event: MouseEvent) => {\n event.stopPropagation();\n};\n\nconst onKeydown = (event: KeyboardEvent) => {\n if (isEscapeKey(event) && props.closeOnEscape) {\n event.preventDefault();\n closeModal();\n return;\n }\n\n if (event.key !== 'Tab' || !surfaceRef.value) {\n return;\n }\n\n const focusable = getFocusableElements(surfaceRef.value);\n\n if (!focusable.length) {\n event.preventDefault();\n surfaceRef.value.focus();\n return;\n }\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const activeElement = document.activeElement as HTMLElement | null;\n\n if (event.shiftKey && activeElement === first) {\n event.preventDefault();\n focusLast(surfaceRef.value);\n }\n\n if (!event.shiftKey && activeElement === last) {\n event.preventDefault();\n focusFirst(surfaceRef.value);\n }\n};\n\nwatch(isOpen, (value, previousValue) => {\n if (value) {\n lockBodyScroll();\n focusSurface();\n return;\n }\n\n if (previousValue) {\n unlockBodyScroll();\n nextTick(() => {\n previousFocusedElement.value?.focus();\n });\n }\n});\n\nonBeforeUnmount(() => {\n if (isOpen.value) {\n unlockBodyScroll();\n }\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <span\n v-if=\"$slots.trigger\"\n class=\"tree-modal__trigger\"\n v-bind=\"triggerAttrs\"\n :aria-disabled=\"disabled || undefined\"\n @click=\"onTriggerClick\"\n >\n <slot name=\"trigger\" />\n </span>\n\n <Teleport to=\"body\">\n <transition name=\"tree-modal-fade\">\n <div\n v-if=\"isOpen\"\n class=\"tree-modal__portal\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <div\n class=\"tree-modal__backdrop\"\n aria-hidden=\"true\"\n @click=\"onOverlayClick\"\n />\n <div class=\"tree-modal__positioner\">\n <div\n :id=\"modalId\"\n ref=\"surfaceRef\"\n :class=\"surfaceClasses\"\n role=\"dialog\"\n aria-modal=\"true\"\n :aria-labelledby=\"labelledBy\"\n :aria-describedby=\"describedBy\"\n tabindex=\"-1\"\n @click=\"onSurfaceClick\"\n @keydown=\"onKeydown\"\n >\n <div\n v-if=\"hasHeaderContent || showCloseButton\"\n class=\"tree-modal__topbar\"\n >\n <div\n v-if=\"hasHeaderContent\"\n :id=\"titleId\"\n class=\"tree-modal__header\"\n >\n <slot name=\"header\">\n <h2 class=\"tree-modal__title\">\n {{ title }}\n </h2>\n </slot>\n </div>\n <button\n v-if=\"showCloseButton\"\n type=\"button\"\n class=\"tree-modal__close\"\n :aria-label=\"closeLabel\"\n @click=\"closeModal\"\n >\n <CloseIcon v-bind=\"treeIconDefaults\" />\n </button>\n </div>\n\n <p\n v-if=\"description\"\n :id=\"descriptionId\"\n class=\"tree-modal__description\"\n >\n {{ description }}\n </p>\n\n <div class=\"tree-modal__body\">\n <slot name=\"content\">\n <slot />\n </slot>\n </div>\n\n <div\n v-if=\"$slots.footer\"\n class=\"tree-modal__footer\"\n >\n <slot name=\"footer\" />\n </div>\n </div>\n </div>\n </div>\n </transition>\n </Teleport>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, toRef, useAttrs } from 'vue';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeSize, TreeVariant } from '../types/contracts';\nimport TreeButton from './TreeButton.vue';\nimport TreeModal from './TreeModal.vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst slots = defineSlots<{\n trigger?: () => unknown;\n icon?: () => unknown;\n default?: () => unknown;\n actions?: (props: {\n confirm: () => void;\n cancel: () => void;\n loading: boolean;\n }) => unknown;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n size?: TreeSize;\n title?: string;\n description?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n confirmVariant?: TreeVariant;\n confirmDisabled?: boolean;\n cancelDisabled?: boolean;\n loading?: boolean;\n closeOnEscape?: boolean;\n closeOnOverlay?: boolean;\n showCloseButton?: boolean;\n closeLabel?: string;\n closeOnConfirm?: boolean;\n closeOnCancel?: boolean;\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n size: 'sm',\n title: '',\n description: '',\n confirmLabel: 'Confirm',\n cancelLabel: 'Cancel',\n confirmVariant: 'danger',\n confirmDisabled: false,\n cancelDisabled: false,\n loading: false,\n closeOnEscape: true,\n closeOnOverlay: false,\n showCloseButton: false,\n closeLabel: 'Close dialog',\n closeOnConfirm: true,\n closeOnCancel: true,\n },\n);\n\nconst emit = defineEmits<{\n confirm: [];\n cancel: [];\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n}>();\n\nconst attrs = useAttrs();\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst dialogClasses = computed(() => [\n 'tree-confirm-dialog',\n {\n 'tree-confirm-dialog--with-icon': Boolean(slots.icon),\n },\n]);\n\nconst hasBodyContent = computed(() => Boolean(slots.default));\n\nconst closeDialog = () => {\n setValue(false);\n};\n\nconst syncOpen = (value: boolean) => {\n setValue(value);\n};\n\nconst handleCancel = () => {\n if (props.cancelDisabled) {\n return;\n }\n\n emit('cancel');\n\n if (props.closeOnCancel) {\n closeDialog();\n }\n};\n\nconst handleConfirm = () => {\n if (props.confirmDisabled || props.loading) {\n return;\n }\n\n emit('confirm');\n\n if (props.closeOnConfirm) {\n closeDialog();\n }\n};\n</script>\n\n<template>\n <TreeModal\n v-bind=\"attrs\"\n :open=\"isOpen\"\n :disabled=\"disabled\"\n :size=\"size\"\n :title=\"title\"\n :description=\"description\"\n :close-on-escape=\"closeOnEscape\"\n :close-on-overlay=\"closeOnOverlay\"\n :show-close-button=\"showCloseButton\"\n :close-label=\"closeLabel\"\n @update:open=\"syncOpen\"\n >\n <template\n v-if=\"$slots.trigger\"\n #trigger\n >\n <slot name=\"trigger\" />\n </template>\n\n <template #content>\n <div :class=\"dialogClasses\">\n <div\n v-if=\"$slots.icon\"\n class=\"tree-confirm-dialog__icon\"\n aria-hidden=\"true\"\n >\n <slot name=\"icon\" />\n </div>\n\n <div\n v-if=\"hasBodyContent\"\n class=\"tree-confirm-dialog__body\"\n >\n <slot />\n </div>\n </div>\n </template>\n\n <template #footer>\n <slot\n name=\"actions\"\n :confirm=\"handleConfirm\"\n :cancel=\"handleCancel\"\n :loading=\"loading\"\n >\n <TreeButton\n variant=\"ghost\"\n :disabled=\"cancelDisabled\"\n @click=\"handleCancel\"\n >\n {{ cancelLabel }}\n </TreeButton>\n <TreeButton\n :variant=\"confirmVariant\"\n :loading=\"loading\"\n :disabled=\"confirmDisabled\"\n @click=\"handleConfirm\"\n >\n {{ confirmLabel }}\n </TreeButton>\n </slot>\n </template>\n </TreeModal>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst _treeContainerSizes = ['sm', 'md', 'lg', 'xl', 'full'] as const;\n\nexport type TreeContainerSize = (typeof _treeContainerSizes)[number];\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n size?: TreeContainerSize;\n padded?: boolean;\n centered?: boolean;\n }>(),\n {\n as: 'div',\n size: 'lg',\n padded: true,\n centered: true,\n },\n);\n\nconst attrs = useAttrs();\n\nconst rootClasses = computed(() => [\n 'tree-container',\n `tree-container--${props.size}`,\n {\n 'is-padded': props.padded,\n 'is-centered': props.centered,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <slot />\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { createId, isActivationKey, isEscapeKey } from '@treeui/utils';\nimport { computed, nextTick, onBeforeUnmount, ref, toRef, watch } from 'vue';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeSize } from '../types/contracts';\n\nexport interface TreeContextMenuItem {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\nconst props = withDefaults(\n defineProps<{\n items?: TreeContextMenuItem[];\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n size?: TreeSize;\n }>(),\n {\n items: () => [],\n open: undefined,\n defaultOpen: false,\n disabled: false,\n size: 'md',\n },\n);\n\nconst emit = defineEmits<{\n select: [value: string];\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n}>();\n\ndefineSlots<{\n default(): unknown;\n item(props: { item: TreeContextMenuItem; index: number }): unknown;\n}>();\n\nconst menuId = createId('tree-context-menu');\nconst rootRef = ref<HTMLElement | null>(null);\nconst itemRefs = ref<Map<string, HTMLElement>>(new Map());\nconst focusedIndex = ref(-1);\nconst menuPosition = ref({ x: 0, y: 0 });\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst rootClasses = computed(() => [\n 'tree-context-menu',\n `tree-context-menu--${props.size}`,\n {\n 'is-disabled': props.disabled,\n 'is-open': isOpen.value,\n },\n]);\n\nconst enabledItems = computed(() => props.items.filter((i) => !i.disabled));\n\nconst openMenu = (x: number, y: number) => {\n if (props.disabled) return;\n menuPosition.value = { x, y };\n focusedIndex.value = enabledItems.value.length > 0\n ? props.items.indexOf(enabledItems.value[0])\n : 0;\n setValue(true);\n nextTick(() => focusItem(focusedIndex.value));\n};\n\nconst closeMenu = (restoreFocus = false) => {\n setValue(false);\n focusedIndex.value = -1;\n if (restoreFocus) {\n nextTick(() => rootRef.value?.focus());\n }\n};\n\nconst selectItem = (item: TreeContextMenuItem) => {\n if (item.disabled) return;\n emit('select', item.value);\n closeMenu(true);\n};\n\nconst focusItem = (index: number) => {\n const item = props.items[index];\n if (!item) return;\n const el = itemRefs.value.get(item.value);\n el?.focus();\n};\n\nconst setItemRef = (el: Element | null, value: string) => {\n if (el instanceof HTMLElement) {\n itemRefs.value.set(value, el);\n } else {\n itemRefs.value.delete(value);\n }\n};\n\nconst moveFocus = (direction: 1 | -1) => {\n let nextIndex = focusedIndex.value + direction;\n while (nextIndex >= 0 && nextIndex < props.items.length) {\n if (!props.items[nextIndex].disabled) {\n focusedIndex.value = nextIndex;\n focusItem(nextIndex);\n return;\n }\n nextIndex += direction;\n }\n};\n\nconst onContextMenu = (event: MouseEvent) => {\n if (props.disabled) return;\n event.preventDefault();\n openMenu(event.clientX, event.clientY);\n};\n\nconst onItemKeydown = (event: KeyboardEvent, item: TreeContextMenuItem) => {\n if (isEscapeKey(event)) {\n event.preventDefault();\n closeMenu(true);\n return;\n }\n\n if (isActivationKey(event)) {\n event.preventDefault();\n selectItem(item);\n return;\n }\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n moveFocus(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n moveFocus(-1);\n break;\n case 'Home':\n event.preventDefault();\n focusedIndex.value = enabledItems.value.length > 0\n ? props.items.indexOf(enabledItems.value[0])\n : 0;\n focusItem(focusedIndex.value);\n break;\n case 'End':\n event.preventDefault();\n focusedIndex.value = enabledItems.value.length > 0\n ? props.items.indexOf(enabledItems.value[enabledItems.value.length - 1])\n : props.items.length - 1;\n focusItem(focusedIndex.value);\n break;\n default:\n break;\n }\n};\n\nconst onDocumentPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) return;\n const target = event.target;\n if (!(target instanceof Node)) return;\n const menuEl = document.getElementById(menuId);\n if (menuEl?.contains(target)) return;\n closeMenu();\n};\n\nconst onDocumentContextMenu = (event: MouseEvent) => {\n if (!isOpen.value) return;\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (rootRef.value?.contains(target)) return;\n closeMenu();\n};\n\nwatch(isOpen, (value) => {\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n document.addEventListener('contextmenu', onDocumentContextMenu);\n } else {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n document.removeEventListener('contextmenu', onDocumentContextMenu);\n }\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n document.removeEventListener('contextmenu', onDocumentContextMenu);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n @contextmenu=\"onContextMenu\"\n >\n <slot />\n <Teleport to=\"body\">\n <transition name=\"tree-fade\">\n <ul\n v-if=\"isOpen && !disabled\"\n :id=\"menuId\"\n role=\"menu\"\n class=\"tree-context-menu__menu\"\n :class=\"`tree-context-menu--${size}`\"\n :style=\"{ top: `${menuPosition.y}px`, left: `${menuPosition.x}px` }\"\n aria-label=\"Context menu\"\n >\n <li\n v-for=\"(item, index) in items\"\n :key=\"item.value\"\n :ref=\"(el) => setItemRef(el as Element | null, item.value)\"\n role=\"menuitem\"\n class=\"tree-context-menu__item\"\n :class=\"{\n 'is-disabled': item.disabled,\n 'is-focused': index === focusedIndex,\n }\"\n :aria-disabled=\"item.disabled || undefined\"\n :tabindex=\"item.disabled ? -1 : 0\"\n @click=\"selectItem(item)\"\n @keydown=\"onItemKeydown($event, item)\"\n >\n <slot\n name=\"item\"\n :item=\"item\"\n :index=\"index\"\n >\n {{ item.label }}\n </slot>\n </li>\n </ul>\n </transition>\n </Teleport>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport {\n addDays,\n addMonths,\n createId,\n isActivationKey,\n isEscapeKey,\n isSameDay,\n parseDateValue,\n startOfDay,\n startOfMonth,\n startOfWeek,\n toDateValue,\n} from '@treeui/utils';\nimport { getTreeIcon, treeIconDefaults } from '@treeui/icons';\nimport {\n type ComponentPublicInstance,\n computed,\n nextTick,\n onBeforeUnmount,\n ref,\n toRef,\n useAttrs,\n watch,\n} from 'vue';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\ninterface CalendarCell {\n date: Date;\n dayLabel: number;\n disabled: boolean;\n inMonth: boolean;\n isFocused: boolean;\n isSelected: boolean;\n isToday: boolean;\n key: string;\n}\n\nconst CalendarIcon = getTreeIcon('calendar');\nconst ChevronLeftIcon = getTreeIcon('chevron-left');\nconst ChevronRightIcon = getTreeIcon('chevron-right');\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string;\n open?: boolean;\n defaultOpen?: boolean;\n size?: TreeSize;\n disabled?: boolean;\n invalid?: boolean;\n placeholder?: string;\n locale?: string;\n min?: string;\n max?: string;\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n id?: string;\n }>(),\n {\n modelValue: '',\n open: undefined,\n defaultOpen: false,\n size: 'md',\n disabled: false,\n invalid: false,\n placeholder: 'Select date',\n locale: 'en-US',\n min: '',\n max: '',\n weekStartsOn: 0,\n id: undefined,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n select: [value: string];\n}>();\n\nconst attrs = useAttrs();\nconst today = startOfDay(new Date());\nconst selectedDate = computed(() => parseDateValue(props.modelValue));\nconst minDate = computed(() => parseDateValue(props.min));\nconst maxDate = computed(() => parseDateValue(props.max));\nconst calendarId = props.id ?? createId('tree-date-picker');\nconst captionId = `${calendarId}-caption`;\nconst rootRef = ref<HTMLElement | null>(null);\nconst triggerRef = ref<HTMLButtonElement | null>(null);\nconst dayRefs = new Map<string, HTMLButtonElement>();\nconst viewMonth = ref(startOfMonth(selectedDate.value ?? today));\nconst focusedDate = ref<Date>(selectedDate.value ?? today);\n\nconst triggerAttrs = computed(() => {\n const { class: _class, style: _style, name: _name, ...rest } = attrs;\n return rest;\n});\n\nconst hiddenInputName = computed(() =>\n typeof attrs.name === 'string' ? attrs.name : undefined,\n);\n\nconst rootClasses = computed(() => [\n 'tree-date-picker',\n `tree-date-picker--${props.size}`,\n {\n 'is-disabled': props.disabled,\n 'is-invalid': props.invalid,\n 'is-open': isOpen.value,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst triggerText = computed(() => {\n if (!selectedDate.value) {\n return props.placeholder;\n }\n\n return new Intl.DateTimeFormat(props.locale, {\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n }).format(selectedDate.value);\n});\n\nconst monthLabel = computed(() =>\n new Intl.DateTimeFormat(props.locale, {\n month: 'long',\n year: 'numeric',\n }).format(viewMonth.value),\n);\n\nconst weekdayLabels = computed(() => {\n const formatter = new Intl.DateTimeFormat(props.locale, { weekday: 'short' });\n const weekBase = startOfWeek(new Date(2024, 0, 7), props.weekStartsOn);\n\n return Array.from({ length: 7 }, (_, index) =>\n formatter.format(addDays(weekBase, index)),\n );\n});\n\nconst isDateDisabled = (date: Date) => {\n if (props.disabled) {\n return true;\n }\n\n if (minDate.value && date < minDate.value) {\n return true;\n }\n\n if (maxDate.value && date > maxDate.value) {\n return true;\n }\n\n return false;\n};\n\nconst syncCalendarView = (date: Date) => {\n focusedDate.value = startOfDay(date);\n viewMonth.value = startOfMonth(date);\n};\n\nwatch(\n selectedDate,\n (value) => {\n if (value) {\n syncCalendarView(value);\n return;\n }\n\n if (!isOpen.value) {\n syncCalendarView(today);\n }\n },\n { immediate: true },\n);\n\nconst cells = computed(() => {\n const startDate = startOfWeek(startOfMonth(viewMonth.value), props.weekStartsOn);\n\n return Array.from({ length: 6 }, (_, weekIndex) =>\n Array.from({ length: 7 }, (_, dayIndex) => {\n const date = addDays(startDate, weekIndex * 7 + dayIndex);\n const key = toDateValue(date);\n\n return {\n date,\n dayLabel: date.getDate(),\n disabled: isDateDisabled(date),\n inMonth: date.getMonth() === viewMonth.value.getMonth(),\n isFocused: isSameDay(date, focusedDate.value),\n isSelected: isSameDay(date, selectedDate.value),\n isToday: isSameDay(date, today),\n key,\n } satisfies CalendarCell;\n }),\n );\n});\n\nconst canMovePrev = computed(() => {\n if (!minDate.value) {\n return true;\n }\n\n return startOfMonth(viewMonth.value) > startOfMonth(minDate.value);\n});\n\nconst canMoveNext = computed(() => {\n if (!maxDate.value) {\n return true;\n }\n\n return startOfMonth(viewMonth.value) < startOfMonth(maxDate.value);\n});\n\nconst focusCurrentDay = () => {\n const key = toDateValue(focusedDate.value);\n nextTick(() => {\n dayRefs.get(key)?.focus();\n });\n};\n\nconst setDayRef = (\n element: Element | ComponentPublicInstance | null,\n key: string,\n) => {\n if (element instanceof HTMLButtonElement) {\n dayRefs.set(key, element);\n return;\n }\n\n dayRefs.delete(key);\n};\n\nconst openCalendar = () => {\n if (props.disabled) {\n return;\n }\n\n syncCalendarView(selectedDate.value ?? focusedDate.value ?? today);\n setValue(true);\n focusCurrentDay();\n};\n\nconst closeCalendar = (restoreFocus = false) => {\n setValue(false);\n\n if (restoreFocus) {\n nextTick(() => {\n triggerRef.value?.focus();\n });\n }\n};\n\nconst toggleCalendar = () => {\n if (isOpen.value) {\n closeCalendar();\n return;\n }\n\n openCalendar();\n};\n\nconst moveCalendar = (direction: 1 | -1) => {\n const nextMonth = addMonths(viewMonth.value, direction);\n syncCalendarView(nextMonth);\n focusCurrentDay();\n};\n\nconst moveFocus = (nextDate: Date) => {\n if (isDateDisabled(nextDate)) {\n return;\n }\n\n syncCalendarView(nextDate);\n focusCurrentDay();\n};\n\nconst selectDate = (date: Date) => {\n if (isDateDisabled(date)) {\n return;\n }\n\n const normalizedDate = startOfDay(date);\n const value = toDateValue(normalizedDate);\n\n syncCalendarView(normalizedDate);\n emit('update:modelValue', value);\n emit('select', value);\n closeCalendar(true);\n};\n\nconst onTriggerKeydown = (event: KeyboardEvent) => {\n if (props.disabled) {\n return;\n }\n\n if (isEscapeKey(event) && isOpen.value) {\n event.preventDefault();\n closeCalendar();\n return;\n }\n\n if (\n isActivationKey(event) ||\n event.key === 'ArrowDown' ||\n event.key === 'ArrowUp'\n ) {\n event.preventDefault();\n openCalendar();\n }\n};\n\nconst onDayKeydown = (event: KeyboardEvent, date: Date) => {\n if (isEscapeKey(event)) {\n event.preventDefault();\n closeCalendar(true);\n return;\n }\n\n if (isActivationKey(event)) {\n event.preventDefault();\n selectDate(date);\n return;\n }\n\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n moveFocus(addDays(date, -1));\n break;\n case 'ArrowRight':\n event.preventDefault();\n moveFocus(addDays(date, 1));\n break;\n case 'ArrowUp':\n event.preventDefault();\n moveFocus(addDays(date, -7));\n break;\n case 'ArrowDown':\n event.preventDefault();\n moveFocus(addDays(date, 7));\n break;\n case 'Home':\n event.preventDefault();\n moveFocus(startOfWeek(date, props.weekStartsOn));\n break;\n case 'End':\n event.preventDefault();\n moveFocus(addDays(startOfWeek(date, props.weekStartsOn), 6));\n break;\n case 'PageUp':\n event.preventDefault();\n moveFocus(addMonths(date, event.shiftKey ? -12 : -1));\n break;\n case 'PageDown':\n event.preventDefault();\n moveFocus(addMonths(date, event.shiftKey ? 12 : 1));\n break;\n default:\n break;\n }\n};\n\nconst onDocumentPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) {\n return;\n }\n\n const target = event.target;\n if (!(target instanceof Node)) {\n return;\n }\n\n if (rootRef.value?.contains(target)) {\n return;\n }\n\n closeCalendar();\n};\n\nwatch(isOpen, (value) => {\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n return;\n }\n\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <input\n v-if=\"hiddenInputName\"\n type=\"hidden\"\n :name=\"hiddenInputName\"\n :value=\"modelValue\"\n >\n <button\n ref=\"triggerRef\"\n v-bind=\"triggerAttrs\"\n type=\"button\"\n class=\"tree-date-picker__trigger\"\n :disabled=\"disabled\"\n :aria-controls=\"isOpen ? calendarId : undefined\"\n aria-haspopup=\"dialog\"\n :aria-expanded=\"isOpen\"\n :aria-invalid=\"invalid || undefined\"\n @click=\"toggleCalendar\"\n @keydown=\"onTriggerKeydown\"\n >\n <span\n v-if=\"$slots.prefix\"\n class=\"tree-date-picker__slot tree-date-picker__slot--prefix\"\n >\n <slot name=\"prefix\" />\n </span>\n <span\n class=\"tree-date-picker__value\"\n :data-placeholder=\"selectedDate ? undefined : true\"\n >\n {{ triggerText }}\n </span>\n <span class=\"tree-date-picker__slot tree-date-picker__slot--suffix\">\n <slot name=\"suffix\">\n <CalendarIcon v-bind=\"treeIconDefaults\" />\n </slot>\n </span>\n </button>\n\n <transition name=\"tree-fade\">\n <div\n v-if=\"isOpen && !disabled\"\n :id=\"calendarId\"\n class=\"tree-date-picker__content\"\n role=\"dialog\"\n aria-modal=\"false\"\n :aria-labelledby=\"captionId\"\n >\n <div class=\"tree-date-picker__header\">\n <button\n type=\"button\"\n class=\"tree-date-picker__nav\"\n :disabled=\"!canMovePrev\"\n aria-label=\"Previous month\"\n @click=\"moveCalendar(-1)\"\n >\n <ChevronLeftIcon v-bind=\"treeIconDefaults\" />\n </button>\n <p\n :id=\"captionId\"\n class=\"tree-date-picker__month\"\n >\n {{ monthLabel }}\n </p>\n <button\n type=\"button\"\n class=\"tree-date-picker__nav\"\n :disabled=\"!canMoveNext\"\n aria-label=\"Next month\"\n @click=\"moveCalendar(1)\"\n >\n <ChevronRightIcon v-bind=\"treeIconDefaults\" />\n </button>\n </div>\n\n <div\n class=\"tree-date-picker__weekdays\"\n aria-hidden=\"true\"\n >\n <span\n v-for=\"label in weekdayLabels\"\n :key=\"label\"\n class=\"tree-date-picker__weekday\"\n >\n {{ label }}\n </span>\n </div>\n\n <div\n class=\"tree-date-picker__grid\"\n role=\"grid\"\n :aria-labelledby=\"captionId\"\n >\n <div\n v-for=\"(week, weekIndex) in cells\"\n :key=\"weekIndex\"\n class=\"tree-date-picker__row\"\n role=\"row\"\n >\n <div\n v-for=\"cell in week\"\n :key=\"cell.key\"\n class=\"tree-date-picker__cell\"\n role=\"gridcell\"\n :aria-selected=\"cell.isSelected\"\n >\n <button\n :ref=\"(element) => setDayRef(element, cell.key)\"\n type=\"button\"\n class=\"tree-date-picker__day\"\n :class=\"{\n 'is-muted': !cell.inMonth,\n 'is-selected': cell.isSelected,\n 'is-today': cell.isToday,\n }\"\n :data-date=\"cell.key\"\n :disabled=\"cell.disabled\"\n :tabindex=\"cell.isFocused ? 0 : -1\"\n :aria-current=\"cell.isToday ? 'date' : undefined\"\n :aria-label=\"cell.key\"\n @click=\"selectDate(cell.date)\"\n @keydown=\"onDayKeydown($event, cell.date)\"\n >\n {{ cell.dayLabel }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </transition>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport {\n addDays,\n addMonths,\n createId,\n isActivationKey,\n isEscapeKey,\n isSameDay,\n startOfDay,\n startOfMonth,\n startOfWeek,\n toDateValue,\n} from '@treeui/utils';\nimport { getTreeIcon, treeIconDefaults } from '@treeui/icons';\nimport {\n type ComponentPublicInstance,\n computed,\n nextTick,\n onBeforeUnmount,\n ref,\n toRef,\n useAttrs,\n watch,\n} from 'vue';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeSize } from '../types/contracts';\nimport TreeSpinner from './TreeSpinner.vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\ninterface CalendarCell {\n date: Date;\n dayLabel: number;\n disabled: boolean;\n inMonth: boolean;\n isFocused: boolean;\n isSelected: boolean;\n isToday: boolean;\n key: string;\n}\n\ninterface TimeOption {\n disabled: boolean;\n label: string;\n value: number;\n}\n\nconst CalendarIcon = getTreeIcon('calendar');\nconst ChevronLeftIcon = getTreeIcon('chevron-left');\nconst ChevronRightIcon = getTreeIcon('chevron-right');\n\nconst dateOnlyPattern = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\nconst dateTimePattern = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})(?::(\\d{2}))?$/;\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string;\n open?: boolean;\n defaultOpen?: boolean;\n size?: TreeSize;\n disabled?: boolean;\n loading?: boolean;\n invalid?: boolean;\n placeholder?: string;\n locale?: string;\n min?: string;\n max?: string;\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n id?: string;\n step?: number;\n }>(),\n {\n modelValue: '',\n open: undefined,\n defaultOpen: false,\n size: 'md',\n disabled: false,\n loading: false,\n invalid: false,\n placeholder: 'Select date and time',\n locale: 'en-US',\n min: '',\n max: '',\n weekStartsOn: 0,\n id: undefined,\n step: 60,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n change: [value: string];\n select: [value: string];\n}>();\n\nconst attrs = useAttrs();\n\nconst cloneDate = (value: Date) => new Date(value.getTime());\n\nconst formatPart = (value: number) => `${value}`.padStart(2, '0');\n\nconst endOfDay = (date: Date) =>\n new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999);\n\nconst parseBoundaryValue = (\n value: string | null | undefined,\n boundary: 'exact' | 'start' | 'end' = 'exact',\n) => {\n if (!value) {\n return null;\n }\n\n const dateOnlyMatch = value.match(dateOnlyPattern);\n if (dateOnlyMatch) {\n const [, yearToken, monthToken, dayToken] = dateOnlyMatch;\n const year = Number.parseInt(yearToken, 10);\n const month = Number.parseInt(monthToken, 10);\n const day = Number.parseInt(dayToken, 10);\n const hour = boundary === 'end' ? 23 : 0;\n const minute = boundary === 'end' ? 59 : 0;\n const second = boundary === 'end' ? 59 : 0;\n const millisecond = boundary === 'end' ? 999 : 0;\n const date = new Date(year, month - 1, day, hour, minute, second, millisecond);\n\n if (\n Number.isNaN(date.getTime()) ||\n date.getFullYear() !== year ||\n date.getMonth() !== month - 1 ||\n date.getDate() !== day\n ) {\n return null;\n }\n\n return date;\n }\n\n const dateTimeMatch = value.match(dateTimePattern);\n if (!dateTimeMatch) {\n return null;\n }\n\n const [, yearToken, monthToken, dayToken, hourToken, minuteToken, secondToken] =\n dateTimeMatch;\n const year = Number.parseInt(yearToken, 10);\n const month = Number.parseInt(monthToken, 10);\n const day = Number.parseInt(dayToken, 10);\n const hour = Number.parseInt(hourToken, 10);\n const minute = Number.parseInt(minuteToken, 10);\n const second = secondToken ? Number.parseInt(secondToken, 10) : 0;\n const date = new Date(year, month - 1, day, hour, minute, second, 0);\n\n if (\n Number.isNaN(date.getTime()) ||\n date.getFullYear() !== year ||\n date.getMonth() !== month - 1 ||\n date.getDate() !== day ||\n date.getHours() !== hour ||\n date.getMinutes() !== minute ||\n date.getSeconds() !== second\n ) {\n return null;\n }\n\n return date;\n};\n\nconst toDateTimeValue = (date: Date) =>\n `${toDateValue(date)}T${formatPart(date.getHours())}:${formatPart(date.getMinutes())}`;\n\nconst setDatePart = (source: Date, targetDate: Date) =>\n new Date(\n targetDate.getFullYear(),\n targetDate.getMonth(),\n targetDate.getDate(),\n source.getHours(),\n source.getMinutes(),\n 0,\n 0,\n );\n\nconst setTimePart = (source: Date, hour: number, minute: number) =>\n new Date(\n source.getFullYear(),\n source.getMonth(),\n source.getDate(),\n hour,\n minute,\n 0,\n 0,\n );\n\nconst resolveMinuteStep = (step: number) => {\n if (!Number.isFinite(step) || step <= 0 || step % 60 !== 0) {\n return 1;\n }\n\n const minuteStep = step / 60;\n return minuteStep >= 60 ? 1 : minuteStep;\n};\n\nconst today = startOfDay(new Date());\nconst selectedDateTime = computed(() => parseBoundaryValue(props.modelValue, 'exact'));\nconst minDateTime = computed(() => parseBoundaryValue(props.min, 'start'));\nconst maxDateTime = computed(() => parseBoundaryValue(props.max, 'end'));\nconst pickerId = props.id ?? createId('tree-date-time-picker');\nconst captionId = `${pickerId}-caption`;\nconst rootRef = ref<HTMLElement | null>(null);\nconst triggerRef = ref<HTMLButtonElement | null>(null);\nconst dayRefs = new Map<string, HTMLButtonElement>();\n\nconst clampToRange = (value: Date) => {\n let nextValue = cloneDate(value);\n\n if (minDateTime.value && nextValue < minDateTime.value) {\n nextValue = cloneDate(minDateTime.value);\n }\n\n if (maxDateTime.value && nextValue > maxDateTime.value) {\n nextValue = cloneDate(maxDateTime.value);\n }\n\n return nextValue;\n};\n\nconst createDefaultDraftDateTime = () => {\n const reference = new Date();\n const stepMilliseconds = Math.max(props.step, 60) * 1000;\n const rounded = new Date(Math.ceil(reference.getTime() / stepMilliseconds) * stepMilliseconds);\n\n rounded.setSeconds(0, 0);\n return clampToRange(rounded);\n};\n\nconst initialDateTime = selectedDateTime.value ?? createDefaultDraftDateTime();\nconst draftDateTime = ref(initialDateTime);\nconst focusedDate = ref(startOfDay(initialDateTime));\nconst viewMonth = ref(startOfMonth(initialDateTime));\n\nconst triggerAttrs = computed(() => {\n const { class: _class, style: _style, name: _name, ...rest } = attrs;\n return rest;\n});\n\nconst hiddenInputName = computed(() =>\n typeof attrs.name === 'string' ? attrs.name : undefined,\n);\n\nconst rootClasses = computed(() => [\n 'tree-date-picker',\n 'tree-date-time-picker',\n `tree-date-picker--${props.size}`,\n {\n 'is-disabled': props.disabled,\n 'is-invalid': props.invalid,\n 'is-loading': props.loading,\n 'is-open': isOpen.value,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst triggerText = computed(() => {\n if (!selectedDateTime.value) {\n return props.placeholder;\n }\n\n return new Intl.DateTimeFormat(props.locale, {\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n month: 'long',\n year: 'numeric',\n }).format(selectedDateTime.value);\n});\n\nconst draftPreview = computed(() =>\n new Intl.DateTimeFormat(props.locale, {\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n month: 'long',\n year: 'numeric',\n }).format(draftDateTime.value),\n);\n\nconst monthLabel = computed(() =>\n new Intl.DateTimeFormat(props.locale, {\n month: 'long',\n year: 'numeric',\n }).format(viewMonth.value),\n);\n\nconst weekdayLabels = computed(() => {\n const formatter = new Intl.DateTimeFormat(props.locale, { weekday: 'short' });\n const weekBase = startOfWeek(new Date(2024, 0, 7), props.weekStartsOn);\n\n return Array.from({ length: 7 }, (_, index) =>\n formatter.format(addDays(weekBase, index)),\n );\n});\n\nconst minuteStep = computed(() => resolveMinuteStep(props.step));\n\nconst minuteValues = computed(() => {\n const values = new Set<number>();\n\n for (let minute = 0; minute < 60; minute += minuteStep.value) {\n values.add(minute);\n }\n\n values.add(draftDateTime.value.getMinutes());\n\n return [...values].sort((left, right) => left - right);\n});\n\nconst isDateDisabled = (date: Date) => {\n if (props.disabled) {\n return true;\n }\n\n const dayStart = startOfDay(date);\n const dayEnd = endOfDay(date);\n\n if (minDateTime.value && dayEnd < minDateTime.value) {\n return true;\n }\n\n if (maxDateTime.value && dayStart > maxDateTime.value) {\n return true;\n }\n\n return false;\n};\n\nconst isDateTimeDisabled = (value: Date) => {\n if (props.disabled) {\n return true;\n }\n\n if (minDateTime.value && value < minDateTime.value) {\n return true;\n }\n\n if (maxDateTime.value && value > maxDateTime.value) {\n return true;\n }\n\n return false;\n};\n\nconst syncCalendarView = (date: Date) => {\n focusedDate.value = startOfDay(date);\n viewMonth.value = startOfMonth(date);\n};\n\nconst syncDraftState = (dateTime: Date) => {\n const nextValue = clampToRange(dateTime);\n draftDateTime.value = nextValue;\n syncCalendarView(nextValue);\n};\n\nwatch(\n selectedDateTime,\n (value) => {\n if (isOpen.value) {\n return;\n }\n\n syncDraftState(value ?? createDefaultDraftDateTime());\n },\n { immediate: true },\n);\n\nconst draftDate = computed(() => startOfDay(draftDateTime.value));\n\nconst cells = computed(() => {\n const startDate = startOfWeek(startOfMonth(viewMonth.value), props.weekStartsOn);\n\n return Array.from({ length: 6 }, (_, weekIndex) =>\n Array.from({ length: 7 }, (_, dayIndex) => {\n const date = addDays(startDate, weekIndex * 7 + dayIndex);\n const key = toDateValue(date);\n\n return {\n date,\n dayLabel: date.getDate(),\n disabled: isDateDisabled(date),\n inMonth: date.getMonth() === viewMonth.value.getMonth(),\n isFocused: isSameDay(date, focusedDate.value),\n isSelected: isSameDay(date, draftDate.value),\n isToday: isSameDay(date, today),\n key,\n } satisfies CalendarCell;\n }),\n );\n});\n\nconst canMovePrev = computed(() => {\n if (!minDateTime.value) {\n return true;\n }\n\n return startOfMonth(viewMonth.value) > startOfMonth(minDateTime.value);\n});\n\nconst canMoveNext = computed(() => {\n if (!maxDateTime.value) {\n return true;\n }\n\n return startOfMonth(viewMonth.value) < startOfMonth(maxDateTime.value);\n});\n\nconst isTimeOptionEnabled = (hour: number, minute: number) => {\n const candidate = setTimePart(draftDateTime.value, hour, minute);\n return !isDateTimeDisabled(candidate);\n};\n\nconst hourOptions = computed<TimeOption[]>(() =>\n Array.from({ length: 24 }, (_, hour) => ({\n disabled: !minuteValues.value.some((minute) => isTimeOptionEnabled(hour, minute)),\n label: formatPart(hour),\n value: hour,\n })),\n);\n\nconst minuteOptions = computed<TimeOption[]>(() =>\n minuteValues.value.map((minute) => ({\n disabled: !isTimeOptionEnabled(draftDateTime.value.getHours(), minute),\n label: formatPart(minute),\n value: minute,\n })),\n);\n\nconst focusCurrentDay = () => {\n const key = toDateValue(focusedDate.value);\n nextTick(() => {\n dayRefs.get(key)?.focus();\n });\n};\n\nconst setDayRef = (\n element: Element | ComponentPublicInstance | null,\n key: string,\n) => {\n if (element instanceof HTMLButtonElement) {\n dayRefs.set(key, element);\n return;\n }\n\n dayRefs.delete(key);\n};\n\nconst openCalendar = () => {\n if (props.disabled) {\n return;\n }\n\n syncDraftState(selectedDateTime.value ?? createDefaultDraftDateTime());\n setValue(true);\n focusCurrentDay();\n};\n\nconst closeCalendar = (restoreFocus = false) => {\n setValue(false);\n\n if (restoreFocus) {\n nextTick(() => {\n triggerRef.value?.focus();\n });\n }\n};\n\nconst toggleCalendar = () => {\n if (isOpen.value) {\n closeCalendar();\n return;\n }\n\n openCalendar();\n};\n\nconst moveCalendar = (direction: 1 | -1) => {\n const nextMonth = addMonths(viewMonth.value, direction);\n syncCalendarView(nextMonth);\n focusCurrentDay();\n};\n\nconst moveFocus = (nextDate: Date) => {\n if (isDateDisabled(nextDate)) {\n return;\n }\n\n syncCalendarView(nextDate);\n focusCurrentDay();\n};\n\nconst selectDate = (date: Date) => {\n if (isDateDisabled(date)) {\n return;\n }\n\n const candidate = clampToRange(setDatePart(draftDateTime.value, date));\n draftDateTime.value = candidate;\n syncCalendarView(candidate);\n};\n\nconst onTriggerKeydown = (event: KeyboardEvent) => {\n if (props.disabled) {\n return;\n }\n\n if (isEscapeKey(event) && isOpen.value) {\n event.preventDefault();\n closeCalendar();\n return;\n }\n\n if (\n isActivationKey(event) ||\n event.key === 'ArrowDown' ||\n event.key === 'ArrowUp'\n ) {\n event.preventDefault();\n openCalendar();\n }\n};\n\nconst onDayKeydown = (event: KeyboardEvent, date: Date) => {\n if (isEscapeKey(event)) {\n event.preventDefault();\n closeCalendar(true);\n return;\n }\n\n if (isActivationKey(event)) {\n event.preventDefault();\n selectDate(date);\n return;\n }\n\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n moveFocus(addDays(date, -1));\n break;\n case 'ArrowRight':\n event.preventDefault();\n moveFocus(addDays(date, 1));\n break;\n case 'ArrowUp':\n event.preventDefault();\n moveFocus(addDays(date, -7));\n break;\n case 'ArrowDown':\n event.preventDefault();\n moveFocus(addDays(date, 7));\n break;\n case 'Home':\n event.preventDefault();\n moveFocus(startOfWeek(date, props.weekStartsOn));\n break;\n case 'End':\n event.preventDefault();\n moveFocus(addDays(startOfWeek(date, props.weekStartsOn), 6));\n break;\n case 'PageUp':\n event.preventDefault();\n moveFocus(addMonths(date, event.shiftKey ? -12 : -1));\n break;\n case 'PageDown':\n event.preventDefault();\n moveFocus(addMonths(date, event.shiftKey ? 12 : 1));\n break;\n default:\n break;\n }\n};\n\nconst updateHour = (event: Event) => {\n const nextHour = Number.parseInt((event.target as HTMLSelectElement).value, 10);\n const currentMinute = draftDateTime.value.getMinutes();\n\n if (Number.isNaN(nextHour)) {\n return;\n }\n\n const availableMinutes = minuteValues.value.filter((minute) =>\n isTimeOptionEnabled(nextHour, minute),\n );\n\n if (!availableMinutes.length) {\n return;\n }\n\n const nextMinute = availableMinutes.includes(currentMinute)\n ? currentMinute\n : availableMinutes[0];\n\n draftDateTime.value = setTimePart(draftDateTime.value, nextHour, nextMinute);\n};\n\nconst updateMinute = (event: Event) => {\n const nextMinute = Number.parseInt((event.target as HTMLSelectElement).value, 10);\n const nextHour = draftDateTime.value.getHours();\n\n if (Number.isNaN(nextMinute) || !isTimeOptionEnabled(nextHour, nextMinute)) {\n return;\n }\n\n draftDateTime.value = setTimePart(draftDateTime.value, nextHour, nextMinute);\n};\n\nconst commitDraft = () => {\n const value = toDateTimeValue(draftDateTime.value);\n\n emit('update:modelValue', value);\n emit('change', value);\n emit('select', value);\n closeCalendar(true);\n};\n\nconst clearSelection = () => {\n emit('update:modelValue', '');\n emit('change', '');\n emit('select', '');\n closeCalendar(true);\n};\n\nconst onDocumentPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) {\n return;\n }\n\n const target = event.target;\n if (!(target instanceof Node)) {\n return;\n }\n\n if (rootRef.value?.contains(target)) {\n return;\n }\n\n closeCalendar();\n};\n\nwatch(isOpen, (value) => {\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n return;\n }\n\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <input\n v-if=\"hiddenInputName\"\n type=\"hidden\"\n :name=\"hiddenInputName\"\n :value=\"modelValue\"\n >\n\n <button\n ref=\"triggerRef\"\n v-bind=\"triggerAttrs\"\n type=\"button\"\n class=\"tree-date-picker__trigger tree-date-time-picker__trigger\"\n :disabled=\"disabled\"\n :aria-controls=\"isOpen ? pickerId : undefined\"\n aria-haspopup=\"dialog\"\n :aria-expanded=\"isOpen\"\n :aria-invalid=\"invalid || undefined\"\n @click=\"toggleCalendar\"\n @keydown=\"onTriggerKeydown\"\n >\n <span\n v-if=\"$slots.prefix\"\n class=\"tree-date-picker__slot tree-date-picker__slot--prefix\"\n >\n <slot name=\"prefix\" />\n </span>\n\n <span\n class=\"tree-date-picker__value\"\n :data-placeholder=\"selectedDateTime ? undefined : true\"\n >\n {{ triggerText }}\n </span>\n\n <span class=\"tree-date-picker__slot tree-date-picker__slot--suffix\">\n <slot name=\"suffix\">\n <TreeSpinner\n v-if=\"loading\"\n size=\"sm\"\n label=\"Loading\"\n />\n <CalendarIcon\n v-else\n v-bind=\"treeIconDefaults\"\n />\n </slot>\n </span>\n </button>\n\n <transition name=\"tree-fade\">\n <div\n v-if=\"isOpen && !disabled\"\n :id=\"pickerId\"\n class=\"tree-date-picker__content tree-date-time-picker__content\"\n role=\"dialog\"\n aria-modal=\"false\"\n :aria-labelledby=\"captionId\"\n >\n <div class=\"tree-date-time-picker__calendar\">\n <div class=\"tree-date-picker__header\">\n <button\n type=\"button\"\n class=\"tree-date-picker__nav\"\n :disabled=\"!canMovePrev\"\n aria-label=\"Previous month\"\n @click=\"moveCalendar(-1)\"\n >\n <ChevronLeftIcon v-bind=\"treeIconDefaults\" />\n </button>\n\n <p\n :id=\"captionId\"\n class=\"tree-date-picker__month\"\n >\n {{ monthLabel }}\n </p>\n\n <button\n type=\"button\"\n class=\"tree-date-picker__nav\"\n :disabled=\"!canMoveNext\"\n aria-label=\"Next month\"\n @click=\"moveCalendar(1)\"\n >\n <ChevronRightIcon v-bind=\"treeIconDefaults\" />\n </button>\n </div>\n\n <div\n class=\"tree-date-picker__weekdays\"\n aria-hidden=\"true\"\n >\n <span\n v-for=\"label in weekdayLabels\"\n :key=\"label\"\n class=\"tree-date-picker__weekday\"\n >\n {{ label }}\n </span>\n </div>\n\n <div\n class=\"tree-date-picker__grid\"\n role=\"grid\"\n :aria-labelledby=\"captionId\"\n >\n <div\n v-for=\"(week, weekIndex) in cells\"\n :key=\"weekIndex\"\n class=\"tree-date-picker__row\"\n role=\"row\"\n >\n <div\n v-for=\"cell in week\"\n :key=\"cell.key\"\n class=\"tree-date-picker__cell\"\n role=\"gridcell\"\n :aria-selected=\"cell.isSelected\"\n >\n <button\n :ref=\"(element) => setDayRef(element, cell.key)\"\n type=\"button\"\n class=\"tree-date-picker__day\"\n :class=\"{\n 'is-muted': !cell.inMonth,\n 'is-selected': cell.isSelected,\n 'is-today': cell.isToday,\n }\"\n :data-date=\"cell.key\"\n :tabindex=\"cell.isFocused ? 0 : -1\"\n :disabled=\"cell.disabled\"\n :aria-pressed=\"cell.isSelected\"\n @click=\"selectDate(cell.date)\"\n @keydown=\"onDayKeydown($event, cell.date)\"\n >\n {{ cell.dayLabel }}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"tree-date-time-picker__summary\">\n <p class=\"tree-date-time-picker__eyebrow\">\n Selected slot\n </p>\n <p class=\"tree-date-time-picker__summary-value\">\n {{ draftPreview }}\n </p>\n </div>\n\n <div class=\"tree-date-time-picker__time\">\n <label class=\"tree-date-time-picker__time-field\">\n <span class=\"tree-date-time-picker__time-label\">Hour</span>\n <select\n class=\"tree-date-time-picker__select\"\n :value=\"draftDateTime.getHours()\"\n aria-label=\"Select hour\"\n @change=\"updateHour\"\n >\n <option\n v-for=\"option in hourOptions\"\n :key=\"option.value\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n </label>\n\n <label class=\"tree-date-time-picker__time-field\">\n <span class=\"tree-date-time-picker__time-label\">Minute</span>\n <select\n class=\"tree-date-time-picker__select\"\n :value=\"draftDateTime.getMinutes()\"\n aria-label=\"Select minute\"\n @change=\"updateMinute\"\n >\n <option\n v-for=\"option in minuteOptions\"\n :key=\"option.value\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n </label>\n </div>\n\n <div class=\"tree-date-time-picker__footer\">\n <button\n type=\"button\"\n class=\"tree-button tree-button--ghost tree-button--sm\"\n @click=\"clearSelection\"\n >\n Clear\n </button>\n <button\n type=\"button\"\n class=\"tree-button tree-button--solid tree-button--sm\"\n @click=\"commitDraft\"\n >\n Apply\n </button>\n </div>\n </div>\n </transition>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport {\n createId,\n focusFirst,\n focusLast,\n getFocusableElements,\n isEscapeKey,\n} from '@treeui/utils';\nimport { getTreeIcon, treeIconDefaults } from '@treeui/icons';\nimport {\n computed,\n nextTick,\n onBeforeUnmount,\n ref,\n toRef,\n useAttrs,\n watch,\n} from 'vue';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeDrawerSide, TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst CloseIcon = getTreeIcon('x');\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n size?: TreeSize;\n side?: TreeDrawerSide;\n title?: string;\n description?: string;\n closeOnEscape?: boolean;\n closeOnOverlay?: boolean;\n showCloseButton?: boolean;\n closeLabel?: string;\n id?: string;\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n size: 'md',\n side: 'right',\n title: '',\n description: '',\n closeOnEscape: true,\n closeOnOverlay: true,\n showCloseButton: true,\n closeLabel: 'Close drawer',\n id: undefined,\n },\n);\n\nconst emit = defineEmits<{\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n}>();\n\nconst attrs = useAttrs();\nconst drawerId = props.id ?? createId('tree-drawer');\nconst titleId = `${drawerId}-title`;\nconst descriptionId = `${drawerId}-description`;\nconst rootRef = ref<HTMLElement | null>(null);\nconst surfaceRef = ref<HTMLElement | null>(null);\nconst previousFocusedElement = ref<HTMLElement | null>(null);\nconst hasHeaderContent = computed(() => Boolean(props.title || slots.header));\n\nconst slots = defineSlots<{\n default?: () => unknown;\n trigger?: () => unknown;\n header?: () => unknown;\n content?: () => unknown;\n footer?: () => unknown;\n}>();\n\nconst rootClasses = computed(() => ['tree-drawer', attrs.class]);\nconst rootStyle = computed(() => attrs.style);\nconst triggerAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\nconst surfaceClasses = computed(() => [\n 'tree-drawer__surface',\n `tree-drawer__surface--${props.size}`,\n `tree-drawer__surface--${props.side}`,\n]);\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst labelledBy = computed(() => (hasHeaderContent.value ? titleId : undefined));\nconst describedBy = computed(() => (props.description ? descriptionId : undefined));\n\nlet openOverlayCount = 0;\nlet previousBodyOverflow = '';\n\nconst lockBodyScroll = () => {\n if (typeof document === 'undefined') {\n return;\n }\n\n if (openOverlayCount === 0) {\n previousBodyOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n\n openOverlayCount += 1;\n};\n\nconst unlockBodyScroll = () => {\n if (typeof document === 'undefined' || openOverlayCount === 0) {\n return;\n }\n\n openOverlayCount -= 1;\n\n if (openOverlayCount === 0) {\n document.body.style.overflow = previousBodyOverflow;\n }\n};\n\nconst focusSurface = () => {\n nextTick(() => {\n if (!surfaceRef.value) {\n return;\n }\n\n const focused = focusFirst(surfaceRef.value);\n if (!focused) {\n surfaceRef.value.focus();\n }\n });\n};\n\nconst openDrawer = () => {\n if (props.disabled) {\n return;\n }\n\n previousFocusedElement.value = document.activeElement as HTMLElement | null;\n setValue(true);\n};\n\nconst closeDrawer = () => {\n setValue(false);\n};\n\nconst onTriggerClick = (event: MouseEvent) => {\n if (props.disabled) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n if (event.defaultPrevented) {\n return;\n }\n\n openDrawer();\n};\n\nconst onOverlayClick = () => {\n if (!props.closeOnOverlay) {\n return;\n }\n\n closeDrawer();\n};\n\nconst onSurfaceClick = (event: MouseEvent) => {\n event.stopPropagation();\n};\n\nconst onKeydown = (event: KeyboardEvent) => {\n if (isEscapeKey(event) && props.closeOnEscape) {\n event.preventDefault();\n closeDrawer();\n return;\n }\n\n if (event.key !== 'Tab' || !surfaceRef.value) {\n return;\n }\n\n const focusable = getFocusableElements(surfaceRef.value);\n\n if (!focusable.length) {\n event.preventDefault();\n surfaceRef.value.focus();\n return;\n }\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const activeElement = document.activeElement as HTMLElement | null;\n\n if (event.shiftKey && activeElement === first) {\n event.preventDefault();\n focusLast(surfaceRef.value);\n }\n\n if (!event.shiftKey && activeElement === last) {\n event.preventDefault();\n focusFirst(surfaceRef.value);\n }\n};\n\nwatch(isOpen, (value, previousValue) => {\n if (value) {\n lockBodyScroll();\n focusSurface();\n return;\n }\n\n if (previousValue) {\n unlockBodyScroll();\n nextTick(() => {\n previousFocusedElement.value?.focus();\n });\n }\n});\n\nonBeforeUnmount(() => {\n if (isOpen.value) {\n unlockBodyScroll();\n }\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <span\n v-if=\"$slots.trigger\"\n class=\"tree-drawer__trigger\"\n v-bind=\"triggerAttrs\"\n :aria-disabled=\"disabled || undefined\"\n @click=\"onTriggerClick\"\n >\n <slot name=\"trigger\" />\n </span>\n\n <Teleport to=\"body\">\n <transition name=\"tree-drawer-fade\">\n <div\n v-if=\"isOpen\"\n class=\"tree-drawer__portal\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <div\n class=\"tree-drawer__backdrop\"\n aria-hidden=\"true\"\n @click=\"onOverlayClick\"\n />\n <div\n :id=\"drawerId\"\n ref=\"surfaceRef\"\n :class=\"surfaceClasses\"\n role=\"dialog\"\n aria-modal=\"true\"\n :aria-labelledby=\"labelledBy\"\n :aria-describedby=\"describedBy\"\n tabindex=\"-1\"\n @click=\"onSurfaceClick\"\n @keydown=\"onKeydown\"\n >\n <div\n v-if=\"hasHeaderContent || showCloseButton\"\n class=\"tree-drawer__topbar\"\n >\n <div\n v-if=\"hasHeaderContent\"\n :id=\"titleId\"\n class=\"tree-drawer__header\"\n >\n <slot name=\"header\">\n <h2 class=\"tree-drawer__title\">\n {{ title }}\n </h2>\n </slot>\n </div>\n <button\n v-if=\"showCloseButton\"\n type=\"button\"\n class=\"tree-drawer__close\"\n :aria-label=\"closeLabel\"\n @click=\"closeDrawer\"\n >\n <CloseIcon v-bind=\"treeIconDefaults\" />\n </button>\n </div>\n\n <p\n v-if=\"description\"\n :id=\"descriptionId\"\n class=\"tree-drawer__description\"\n >\n {{ description }}\n </p>\n\n <div class=\"tree-drawer__body\">\n <slot name=\"content\">\n <slot />\n </slot>\n </div>\n\n <div\n v-if=\"$slots.footer\"\n class=\"tree-drawer__footer\"\n >\n <slot name=\"footer\" />\n </div>\n </div>\n </div>\n </transition>\n </Teleport>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { createId, isActivationKey, isEscapeKey } from '@treeui/utils';\nimport { computed, nextTick, onBeforeUnmount, ref, toRef, useAttrs, watch } from 'vue';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport interface TreeDropdownItem {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\nconst props = withDefaults(\n defineProps<{\n items?: TreeDropdownItem[];\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n size?: TreeSize;\n label?: string;\n }>(),\n {\n items: () => [],\n open: undefined,\n defaultOpen: false,\n disabled: false,\n size: 'md',\n label: '',\n },\n);\n\nconst emit = defineEmits<{\n select: [value: string];\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n}>();\n\ndefineSlots<{\n trigger(props: { isOpen: boolean }): unknown;\n item(props: { item: TreeDropdownItem; index: number }): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst menuId = createId('tree-dropdown');\nconst rootRef = ref<HTMLElement | null>(null);\nconst triggerRef = ref<HTMLButtonElement | null>(null);\nconst itemRefs = ref<Map<string, HTMLElement>>(new Map());\nconst focusedIndex = ref(-1);\n\nconst triggerAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst rootClasses = computed(() => [\n 'tree-dropdown',\n `tree-dropdown--${props.size}`,\n {\n 'is-disabled': props.disabled,\n 'is-open': isOpen.value,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst enabledItems = computed(() => props.items.filter((i) => !i.disabled));\n\nconst openMenu = () => {\n if (props.disabled) return;\n focusedIndex.value = enabledItems.value.length > 0\n ? props.items.indexOf(enabledItems.value[0])\n : 0;\n setValue(true);\n nextTick(() => focusItem(focusedIndex.value));\n};\n\nconst closeMenu = (restoreFocus = false) => {\n setValue(false);\n focusedIndex.value = -1;\n if (restoreFocus) {\n nextTick(() => triggerRef.value?.focus());\n }\n};\n\nconst toggleMenu = () => {\n if (isOpen.value) {\n closeMenu();\n } else {\n openMenu();\n }\n};\n\nconst selectItem = (item: TreeDropdownItem) => {\n if (item.disabled) return;\n emit('select', item.value);\n closeMenu(true);\n};\n\nconst focusItem = (index: number) => {\n const item = props.items[index];\n if (!item) return;\n const el = itemRefs.value.get(item.value);\n el?.focus();\n};\n\nconst setItemRef = (el: Element | null, value: string) => {\n if (el instanceof HTMLElement) {\n itemRefs.value.set(value, el);\n } else {\n itemRefs.value.delete(value);\n }\n};\n\nconst moveFocus = (direction: 1 | -1) => {\n let nextIndex = focusedIndex.value + direction;\n while (nextIndex >= 0 && nextIndex < props.items.length) {\n if (!props.items[nextIndex].disabled) {\n focusedIndex.value = nextIndex;\n focusItem(nextIndex);\n return;\n }\n nextIndex += direction;\n }\n};\n\nconst onTriggerKeydown = (event: KeyboardEvent) => {\n if (props.disabled) return;\n\n if (isEscapeKey(event) && isOpen.value) {\n event.preventDefault();\n closeMenu();\n return;\n }\n\n if (isActivationKey(event) || event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n openMenu();\n }\n};\n\nconst onItemKeydown = (event: KeyboardEvent, item: TreeDropdownItem) => {\n if (isEscapeKey(event)) {\n event.preventDefault();\n closeMenu(true);\n return;\n }\n\n if (isActivationKey(event)) {\n event.preventDefault();\n selectItem(item);\n return;\n }\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n moveFocus(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n moveFocus(-1);\n break;\n case 'Home':\n event.preventDefault();\n focusedIndex.value = enabledItems.value.length > 0\n ? props.items.indexOf(enabledItems.value[0])\n : 0;\n focusItem(focusedIndex.value);\n break;\n case 'End':\n event.preventDefault();\n focusedIndex.value = enabledItems.value.length > 0\n ? props.items.indexOf(enabledItems.value[enabledItems.value.length - 1])\n : props.items.length - 1;\n focusItem(focusedIndex.value);\n break;\n default:\n break;\n }\n};\n\nconst onDocumentPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) return;\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (rootRef.value?.contains(target)) return;\n closeMenu();\n};\n\nwatch(isOpen, (value) => {\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n } else {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n }\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <span class=\"tree-dropdown__trigger-wrapper\">\n <slot\n name=\"trigger\"\n :is-open=\"isOpen\"\n >\n <button\n ref=\"triggerRef\"\n v-bind=\"triggerAttrs\"\n type=\"button\"\n class=\"tree-dropdown__trigger\"\n :disabled=\"disabled\"\n :aria-controls=\"isOpen ? menuId : undefined\"\n aria-haspopup=\"menu\"\n :aria-expanded=\"isOpen\"\n @click=\"toggleMenu\"\n @keydown=\"onTriggerKeydown\"\n >\n <span class=\"tree-dropdown__label\">{{ label }}</span>\n <svg\n class=\"tree-dropdown__chevron\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"4 6 8 10 12 6\" />\n </svg>\n </button>\n </slot>\n </span>\n <transition name=\"tree-fade\">\n <ul\n v-if=\"isOpen && !disabled\"\n :id=\"menuId\"\n role=\"menu\"\n class=\"tree-dropdown__menu\"\n :aria-label=\"label || undefined\"\n >\n <li\n v-for=\"(item, index) in items\"\n :key=\"item.value\"\n :ref=\"(el) => setItemRef(el as Element | null, item.value)\"\n role=\"menuitem\"\n class=\"tree-dropdown__item\"\n :class=\"{\n 'is-disabled': item.disabled,\n 'is-focused': index === focusedIndex,\n }\"\n :aria-disabled=\"item.disabled || undefined\"\n :tabindex=\"item.disabled ? -1 : 0\"\n @click=\"selectItem(item)\"\n @keydown=\"onItemKeydown($event, item)\"\n >\n <slot\n name=\"item\"\n :item=\"item\"\n :index=\"index\"\n >\n {{ item.label }}\n </slot>\n </li>\n </ul>\n </transition>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { createId } from '@treeui/utils';\nimport { computed, useAttrs } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst slots = defineSlots<{\n icon?: () => unknown;\n title?: () => unknown;\n description?: () => unknown;\n default?: () => unknown;\n actions?: () => unknown;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n size?: TreeSize;\n title?: string;\n description?: string;\n }>(),\n {\n as: 'section',\n size: 'md',\n title: '',\n description: '',\n },\n);\n\nconst attrs = useAttrs();\nconst emptyStateId = createId('tree-empty-state');\nconst titleId = `${emptyStateId}-title`;\nconst descriptionId = `${emptyStateId}-description`;\n\nconst hasTitle = computed(() => Boolean(props.title || slots.title));\nconst hasDescription = computed(() => Boolean(props.description || slots.description));\n\nconst classes = computed(() => [\n 'tree-empty-state',\n `tree-empty-state--${props.size}`,\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-bind=\"rootAttrs\"\n :class=\"classes\"\n :style=\"rootStyle\"\n :aria-labelledby=\"hasTitle ? titleId : undefined\"\n :aria-describedby=\"hasDescription ? descriptionId : undefined\"\n >\n <div\n v-if=\"$slots.icon\"\n class=\"tree-empty-state__icon\"\n aria-hidden=\"true\"\n >\n <slot name=\"icon\" />\n </div>\n\n <div class=\"tree-empty-state__content\">\n <h2\n v-if=\"hasTitle\"\n :id=\"titleId\"\n class=\"tree-empty-state__title\"\n >\n <slot name=\"title\">\n {{ title }}\n </slot>\n </h2>\n\n <p\n v-if=\"hasDescription\"\n :id=\"descriptionId\"\n class=\"tree-empty-state__description\"\n >\n <slot name=\"description\">\n {{ description }}\n </slot>\n </p>\n\n <div\n v-if=\"$slots.default\"\n class=\"tree-empty-state__body\"\n >\n <slot />\n </div>\n\n <div\n v-if=\"$slots.actions\"\n class=\"tree-empty-state__actions\"\n >\n <slot name=\"actions\" />\n </div>\n </div>\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { createId, isActivationKey } from '@treeui/utils';\nimport { computed, onBeforeUnmount, onMounted, ref, useAttrs } from 'vue';\nimport type { TreeSize } from '../types/contracts';\nimport TreeSpinner from './TreeSpinner.vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport type TreeFileUploadRejectionReason =\n | 'file-invalid-type'\n | 'file-too-large'\n | 'too-many-files';\n\nexport interface TreeFileUploadRejection {\n file: File;\n reason: TreeFileUploadRejectionReason;\n message: string;\n}\n\nconst slots = defineSlots<{\n icon?: () => unknown;\n default?: (props: {\n files: File[];\n isDragActive: boolean;\n openFileDialog: () => void;\n clearFiles: () => void;\n }) => unknown;\n file?: (props: {\n file: File;\n index: number;\n removeFile: () => void;\n }) => unknown;\n actions?: (props: {\n files: File[];\n openFileDialog: () => void;\n clearFiles: () => void;\n }) => unknown;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: File[];\n size?: TreeSize;\n disabled?: boolean;\n loading?: boolean;\n invalid?: boolean;\n accept?: string;\n multiple?: boolean;\n maxFiles?: number | null;\n maxFileSize?: number | null;\n label?: string;\n description?: string;\n buttonLabel?: string;\n filesLabel?: string;\n paste?: boolean;\n drop?: boolean;\n showFileList?: boolean;\n }>(),\n {\n modelValue: () => [],\n size: 'md',\n disabled: false,\n loading: false,\n invalid: false,\n accept: '',\n multiple: true,\n label: 'Drop files here',\n description: 'Click to browse, drag and drop, or paste with Ctrl+V.',\n buttonLabel: 'Browse files',\n filesLabel: 'Selected files',\n maxFiles: null,\n maxFileSize: null,\n paste: true,\n drop: true,\n showFileList: true,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [files: File[]];\n 'files-accepted': [files: File[]];\n 'files-rejected': [rejections: TreeFileUploadRejection[]];\n}>();\n\nconst attrs = useAttrs();\nconst rootRef = ref<HTMLElement | null>(null);\nconst inputRef = ref<HTMLInputElement | null>(null);\nconst isDragActive = ref(false);\nconst isFocusedWithin = ref(false);\nconst dragDepth = ref(0);\nconst feedbackMessages = ref<string[]>([]);\n\nconst uploadId = createId('tree-file-upload');\nconst descriptionId = `${uploadId}-description`;\nconst feedbackId = `${uploadId}-feedback`;\nconst filesId = `${uploadId}-files`;\n\nconst isUnavailable = computed(() => props.disabled || props.loading);\nconst hasFiles = computed(() => props.modelValue.length > 0);\nconst hasCustomBody = computed(() => Boolean(slots.default));\n\nconst effectiveMaxFiles = computed(() => {\n if (!props.multiple) {\n return 1;\n }\n\n if (typeof props.maxFiles !== 'number') {\n return Number.POSITIVE_INFINITY;\n }\n\n return Math.max(props.maxFiles, 0);\n});\n\nconst rootClasses = computed(() => [\n 'tree-file-upload',\n `tree-file-upload--${props.size}`,\n {\n 'is-disabled': isUnavailable.value,\n 'is-invalid': props.invalid,\n 'is-loading': props.loading,\n 'is-drag-active': isDragActive.value,\n 'has-files': hasFiles.value,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst describedBy = computed(() => {\n const ids: string[] = [];\n\n if (props.description && !hasCustomBody.value) {\n ids.push(descriptionId);\n }\n\n if (feedbackMessages.value.length > 0) {\n ids.push(feedbackId);\n }\n\n if (props.showFileList && hasFiles.value) {\n ids.push(filesId);\n }\n\n return ids.length > 0 ? ids.join(' ') : undefined;\n});\n\nconst selectedFilesLabel = computed(() => `${props.filesLabel} (${props.modelValue.length})`);\n\nconst formatFileSize = (size: number) => {\n if (size < 1024) {\n return `${size} B`;\n }\n\n const units = ['KB', 'MB', 'GB'];\n let value = size / 1024;\n let unitIndex = 0;\n\n while (value >= 1024 && unitIndex < units.length - 1) {\n value /= 1024;\n unitIndex += 1;\n }\n\n const roundedValue = value >= 10 || Number.isInteger(value)\n ? Math.round(value)\n : Number(value.toFixed(1));\n\n return `${roundedValue} ${units[unitIndex]}`;\n};\n\nconst fileKey = (file: File, index: number) =>\n `${file.name}-${file.size}-${file.lastModified}-${index}`;\n\nconst matchesAccept = (file: File) => {\n if (!props.accept.trim()) {\n return true;\n }\n\n const tokens = props.accept\n .split(',')\n .map((token) => token.trim().toLowerCase())\n .filter(Boolean);\n\n const fileName = file.name.toLowerCase();\n const fileType = file.type.toLowerCase();\n\n return tokens.some((token) => {\n if (token.startsWith('.')) {\n return fileName.endsWith(token);\n }\n\n if (token.endsWith('/*')) {\n return fileType.startsWith(token.slice(0, -1));\n }\n\n return fileType === token;\n });\n};\n\nconst buildRejectionMessage = (\n file: File,\n reason: TreeFileUploadRejectionReason,\n) => {\n switch (reason) {\n case 'file-invalid-type':\n return `${file.name} is not an accepted file type.`;\n case 'file-too-large':\n return `${file.name} exceeds the ${formatFileSize(props.maxFileSize ?? 0)} limit.`;\n case 'too-many-files':\n return `You can only add up to ${effectiveMaxFiles.value} file${effectiveMaxFiles.value === 1 ? '' : 's'}.`;\n default:\n return `${file.name} could not be added.`;\n }\n};\n\nconst resetInputValue = () => {\n if (inputRef.value) {\n inputRef.value.value = '';\n }\n};\n\nconst openFileDialog = () => {\n if (isUnavailable.value) {\n return;\n }\n\n inputRef.value?.click();\n};\n\nconst emitFiles = (\n nextFiles: File[],\n acceptedFiles: File[],\n rejections: TreeFileUploadRejection[],\n) => {\n feedbackMessages.value = rejections.map((rejection) => rejection.message);\n\n if (rejections.length > 0) {\n emit('files-rejected', rejections);\n }\n\n if (acceptedFiles.length > 0) {\n emit('update:modelValue', nextFiles);\n emit('files-accepted', acceptedFiles);\n }\n};\n\nconst processFiles = (incomingFiles: File[]) => {\n if (isUnavailable.value || incomingFiles.length === 0) {\n return;\n }\n\n const nextFiles = props.multiple ? [...props.modelValue] : [];\n const acceptedFiles: File[] = [];\n const rejections: TreeFileUploadRejection[] = [];\n let remainingSlots = Number.isFinite(effectiveMaxFiles.value)\n ? Math.max(effectiveMaxFiles.value - nextFiles.length, 0)\n : Number.POSITIVE_INFINITY;\n\n for (const file of incomingFiles) {\n if (remainingSlots <= 0) {\n rejections.push({\n file,\n reason: 'too-many-files',\n message: buildRejectionMessage(file, 'too-many-files'),\n });\n continue;\n }\n\n if (!matchesAccept(file)) {\n rejections.push({\n file,\n reason: 'file-invalid-type',\n message: buildRejectionMessage(file, 'file-invalid-type'),\n });\n continue;\n }\n\n if (\n typeof props.maxFileSize === 'number' &&\n props.maxFileSize > 0 &&\n file.size > props.maxFileSize\n ) {\n rejections.push({\n file,\n reason: 'file-too-large',\n message: buildRejectionMessage(file, 'file-too-large'),\n });\n continue;\n }\n\n acceptedFiles.push(file);\n nextFiles.push(file);\n\n if (Number.isFinite(remainingSlots)) {\n remainingSlots -= 1;\n }\n }\n\n emitFiles(nextFiles, acceptedFiles, rejections);\n};\n\nconst removeFile = (index: number) => {\n if (isUnavailable.value) {\n return;\n }\n\n feedbackMessages.value = [];\n emit('update:modelValue', props.modelValue.filter((_, fileIndex) => fileIndex !== index));\n};\n\nconst clearFiles = () => {\n if (isUnavailable.value || !hasFiles.value) {\n return;\n }\n\n feedbackMessages.value = [];\n emit('update:modelValue', []);\n};\n\nconst hasTransferFiles = (dataTransfer?: DataTransfer | null) => {\n if (!dataTransfer) {\n return false;\n }\n\n return dataTransfer.files.length > 0 || Array.from(dataTransfer.types).includes('Files');\n};\n\nconst getClipboardFiles = (\n clipboardData?: Pick<DataTransfer, 'items'> | null,\n) => {\n if (!clipboardData?.items) {\n return [];\n }\n\n return Array.from(clipboardData.items)\n .map((item) => item.getAsFile?.() ?? null)\n .filter((file): file is File => file instanceof File);\n};\n\nconst onInputChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n processFiles(Array.from(target.files ?? []));\n resetInputValue();\n};\n\nconst onDropzoneKeydown = (event: KeyboardEvent) => {\n if (!isActivationKey(event) || isUnavailable.value) {\n return;\n }\n\n event.preventDefault();\n openFileDialog();\n};\n\nconst onFocusIn = () => {\n isFocusedWithin.value = true;\n};\n\nconst onFocusOut = (event: FocusEvent) => {\n const nextTarget = event.relatedTarget as Node | null;\n\n if (nextTarget && rootRef.value?.contains(nextTarget)) {\n return;\n }\n\n isFocusedWithin.value = false;\n};\n\nconst onPaste = (event: ClipboardEvent) => {\n if (!props.paste || isUnavailable.value) {\n return;\n }\n\n const clipboardFiles = getClipboardFiles(event.clipboardData);\n\n if (clipboardFiles.length === 0) {\n return;\n }\n\n event.preventDefault();\n processFiles(clipboardFiles);\n};\n\nconst onDocumentPaste = (event: Event) => {\n if (!isFocusedWithin.value || event.defaultPrevented) {\n return;\n }\n\n onPaste(event as ClipboardEvent);\n};\n\nconst onDragEnter = (event: DragEvent) => {\n if (!props.drop || isUnavailable.value || !hasTransferFiles(event.dataTransfer)) {\n return;\n }\n\n event.preventDefault();\n dragDepth.value += 1;\n isDragActive.value = true;\n};\n\nconst onDragOver = (event: DragEvent) => {\n if (!props.drop || isUnavailable.value || !hasTransferFiles(event.dataTransfer)) {\n return;\n }\n\n event.preventDefault();\n\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'copy';\n }\n\n isDragActive.value = true;\n};\n\nconst onDragLeave = (event: DragEvent) => {\n if (!props.drop || isUnavailable.value || !hasTransferFiles(event.dataTransfer)) {\n return;\n }\n\n event.preventDefault();\n dragDepth.value = Math.max(dragDepth.value - 1, 0);\n\n if (dragDepth.value === 0) {\n isDragActive.value = false;\n }\n};\n\nconst onDrop = (event: DragEvent) => {\n if (!props.drop || isUnavailable.value || !hasTransferFiles(event.dataTransfer)) {\n return;\n }\n\n event.preventDefault();\n dragDepth.value = 0;\n isDragActive.value = false;\n processFiles(Array.from(event.dataTransfer?.files ?? []));\n};\n\nonMounted(() => {\n document.addEventListener('paste', onDocumentPaste);\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('paste', onDocumentPaste);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n @focusin=\"onFocusIn\"\n @focusout=\"onFocusOut\"\n @paste=\"onPaste\"\n >\n <input\n :id=\"uploadId\"\n ref=\"inputRef\"\n class=\"tree-visually-hidden\"\n type=\"file\"\n :accept=\"accept || undefined\"\n :multiple=\"multiple\"\n :disabled=\"isUnavailable\"\n @change=\"onInputChange\"\n >\n\n <div\n class=\"tree-file-upload__dropzone\"\n :aria-busy=\"loading || undefined\"\n :aria-controls=\"showFileList && hasFiles ? filesId : undefined\"\n :aria-describedby=\"describedBy\"\n :aria-disabled=\"isUnavailable || undefined\"\n :aria-invalid=\"invalid || undefined\"\n role=\"button\"\n :tabindex=\"isUnavailable ? -1 : 0\"\n @click=\"openFileDialog\"\n @keydown=\"onDropzoneKeydown\"\n @dragenter=\"onDragEnter\"\n @dragover=\"onDragOver\"\n @dragleave=\"onDragLeave\"\n @drop=\"onDrop\"\n >\n <div\n v-if=\"$slots.icon || !$slots.default\"\n class=\"tree-file-upload__icon\"\n aria-hidden=\"true\"\n >\n <slot name=\"icon\">\n <span class=\"tree-file-upload__icon-mark\">+</span>\n </slot>\n </div>\n\n <div class=\"tree-file-upload__content\">\n <slot\n :files=\"modelValue\"\n :is-drag-active=\"isDragActive\"\n :open-file-dialog=\"openFileDialog\"\n :clear-files=\"clearFiles\"\n >\n <p class=\"tree-file-upload__label\">\n {{ label }}\n </p>\n <p\n v-if=\"description\"\n :id=\"descriptionId\"\n class=\"tree-file-upload__description\"\n >\n {{ description }}\n </p>\n <span class=\"tree-file-upload__browse\">\n {{ buttonLabel }}\n </span>\n </slot>\n </div>\n\n <TreeSpinner\n v-if=\"loading\"\n class=\"tree-file-upload__spinner\"\n size=\"sm\"\n label=\"Uploading files\"\n />\n </div>\n\n <ul\n v-if=\"feedbackMessages.length > 0\"\n :id=\"feedbackId\"\n class=\"tree-file-upload__feedback\"\n aria-live=\"polite\"\n >\n <li\n v-for=\"message in feedbackMessages\"\n :key=\"message\"\n >\n {{ message }}\n </li>\n </ul>\n\n <div\n v-if=\"showFileList && hasFiles\"\n class=\"tree-file-upload__files\"\n >\n <div class=\"tree-file-upload__files-header\">\n <p\n :id=\"filesId\"\n class=\"tree-file-upload__files-label\"\n >\n {{ selectedFilesLabel }}\n </p>\n\n <button\n class=\"tree-file-upload__clear\"\n type=\"button\"\n :disabled=\"isUnavailable\"\n @click=\"clearFiles\"\n >\n Clear all\n </button>\n </div>\n\n <ul class=\"tree-file-upload__list\">\n <li\n v-for=\"(file, index) in modelValue\"\n :key=\"fileKey(file, index)\"\n class=\"tree-file-upload__file\"\n >\n <slot\n name=\"file\"\n :file=\"file\"\n :index=\"index\"\n :remove-file=\"() => removeFile(index)\"\n >\n <div class=\"tree-file-upload__file-copy\">\n <p class=\"tree-file-upload__file-name\">\n {{ file.name }}\n </p>\n <p class=\"tree-file-upload__file-meta\">\n {{ formatFileSize(file.size) }}\n </p>\n </div>\n\n <button\n class=\"tree-file-upload__remove\"\n type=\"button\"\n :disabled=\"isUnavailable\"\n :aria-label=\"`Remove ${file.name}`\"\n @click=\"removeFile(index)\"\n >\n Remove\n </button>\n </slot>\n </li>\n </ul>\n </div>\n\n <div\n v-if=\"$slots.actions\"\n class=\"tree-file-upload__actions\"\n >\n <slot\n name=\"actions\"\n :files=\"modelValue\"\n :open-file-dialog=\"openFileDialog\"\n :clear-files=\"clearFiles\"\n />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { getTreeIcon } from '@treeui/icons';\nimport { createId, getNextEnabledIndex, isEscapeKey } from '@treeui/utils';\nimport { computed, nextTick, onBeforeUnmount, ref, toRef, useAttrs, watch } from 'vue';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeSize } from '../types/contracts';\nimport TreeSpinner from './TreeSpinner.vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport interface TreeMultiSelectOption {\n label: string;\n value: string;\n description?: string;\n keywords?: string[];\n disabled?: boolean;\n}\n\nconst ChevronDownIcon = getTreeIcon('chevron-down');\nconst CheckIcon = getTreeIcon('check');\nconst XIcon = getTreeIcon('x');\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string[];\n options?: TreeMultiSelectOption[];\n open?: boolean;\n defaultOpen?: boolean;\n size?: TreeSize;\n disabled?: boolean;\n loading?: boolean;\n invalid?: boolean;\n placeholder?: string;\n emptyText?: string;\n maxVisibleTags?: number;\n }>(),\n {\n modelValue: () => [],\n options: () => [],\n open: undefined,\n defaultOpen: false,\n size: 'md',\n disabled: false,\n loading: false,\n invalid: false,\n placeholder: '',\n emptyText: 'No results found.',\n maxVisibleTags: 2,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string[]];\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n 'input-change': [value: string];\n}>();\n\ndefineSlots<{\n prefix?: () => unknown;\n tag?: (props: { option: TreeMultiSelectOption; remove: () => void }) => unknown;\n option?: (props: {\n option: TreeMultiSelectOption;\n selected: boolean;\n active: boolean;\n }) => unknown;\n empty?: (props: { query: string }) => unknown;\n}>();\n\nconst attrs = useAttrs();\nconst listboxId = createId('tree-multi-select');\nconst rootRef = ref<HTMLElement | null>(null);\nconst inputRef = ref<HTMLInputElement | null>(null);\nconst query = ref('');\nconst activeIndex = ref(-1);\n\nconst inputAttrs = computed(() => {\n const { class: _class, style: _style, autocomplete, ...rest } = attrs;\n return {\n autocomplete: typeof autocomplete === 'string' ? autocomplete : 'off',\n ...rest,\n };\n});\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst rootClasses = computed(() => [\n 'tree-multi-select',\n `tree-multi-select--${props.size}`,\n {\n 'is-disabled': props.disabled,\n 'is-invalid': props.invalid,\n 'is-loading': props.loading,\n 'is-open': isOpen.value,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst normalize = (value: string) => value.trim().toLowerCase();\n\nconst filteredOptions = computed(() => {\n const normalizedQuery = normalize(query.value);\n\n if (!normalizedQuery) {\n return props.options;\n }\n\n return props.options.filter((option) => {\n const fields = [option.label, option.description ?? '', ...(option.keywords ?? [])];\n return fields.some((field) => field.toLowerCase().includes(normalizedQuery));\n });\n});\n\nconst selectedOptions = computed(() =>\n props.options.filter((option) => props.modelValue.includes(option.value)),\n);\n\nconst visibleTags = computed(() => selectedOptions.value.slice(0, props.maxVisibleTags));\nconst hiddenTagCount = computed(() =>\n Math.max(selectedOptions.value.length - visibleTags.value.length, 0),\n);\n\nconst enabledFilteredOptions = computed(() => filteredOptions.value.filter((option) => !option.disabled));\n\nconst activeOption = computed(() =>\n activeIndex.value >= 0 ? filteredOptions.value[activeIndex.value] : undefined,\n);\n\nconst activeDescendant = computed(() =>\n isOpen.value && activeOption.value\n ? `${listboxId}-option-${activeOption.value.value}`\n : undefined,\n);\n\nconst inputPlaceholder = computed(() =>\n props.modelValue.length === 0 && !query.value ? props.placeholder : '',\n);\n\nconst isSelected = (value: string) => props.modelValue.includes(value);\n\nconst setInitialActiveIndex = (fallback: 'first' | 'last' = 'first') => {\n const selectedIndex = filteredOptions.value.findIndex(\n (option) => isSelected(option.value) && !option.disabled,\n );\n\n if (selectedIndex >= 0) {\n activeIndex.value = selectedIndex;\n return;\n }\n\n if (enabledFilteredOptions.value.length === 0) {\n activeIndex.value = -1;\n return;\n }\n\n const targetOption =\n fallback === 'last'\n ? enabledFilteredOptions.value[enabledFilteredOptions.value.length - 1]\n : enabledFilteredOptions.value[0];\n\n activeIndex.value = filteredOptions.value.findIndex(\n (option) => option.value === targetOption.value,\n );\n};\n\nconst openListbox = (fallback: 'first' | 'last' = 'first') => {\n if (props.disabled) {\n return;\n }\n\n setValue(true);\n setInitialActiveIndex(fallback);\n};\n\nconst closeListbox = () => {\n setValue(false);\n activeIndex.value = -1;\n};\n\nconst focusInput = () => {\n nextTick(() => inputRef.value?.focus());\n};\n\nconst updateValues = (nextValues: string[]) => {\n emit('update:modelValue', nextValues);\n};\n\nconst toggleOption = (option: TreeMultiSelectOption) => {\n if (props.disabled || option.disabled) {\n return;\n }\n\n const nextValues = isSelected(option.value)\n ? props.modelValue.filter((value) => value !== option.value)\n : [...props.modelValue, option.value];\n\n updateValues(nextValues);\n query.value = '';\n setInitialActiveIndex('first');\n focusInput();\n};\n\nconst removeValue = (value: string) => {\n if (props.disabled) {\n return;\n }\n\n updateValues(props.modelValue.filter((item) => item !== value));\n focusInput();\n};\n\nconst moveActive = (direction: 1 | -1) => {\n if (filteredOptions.value.length === 0) {\n activeIndex.value = -1;\n return;\n }\n\n const nextIndex = getNextEnabledIndex(activeIndex.value, filteredOptions.value, direction);\n activeIndex.value = nextIndex;\n};\n\nconst onInput = (event: Event) => {\n query.value = (event.target as HTMLInputElement).value;\n emit('input-change', query.value);\n\n if (!props.disabled && !isOpen.value) {\n openListbox('first');\n return;\n }\n\n setInitialActiveIndex('first');\n};\n\nconst onInputFocus = () => {\n openListbox('first');\n};\n\nconst onInputKeydown = (event: KeyboardEvent) => {\n if (props.disabled) {\n return;\n }\n\n if (event.key === 'Tab') {\n closeListbox();\n return;\n }\n\n if (isEscapeKey(event)) {\n event.preventDefault();\n closeListbox();\n return;\n }\n\n if (event.key === 'Backspace' && !query.value && props.modelValue.length > 0) {\n event.preventDefault();\n removeValue(props.modelValue[props.modelValue.length - 1]);\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n\n if (!isOpen.value) {\n openListbox('first');\n return;\n }\n\n moveActive(1);\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n\n if (!isOpen.value) {\n openListbox('last');\n return;\n }\n\n moveActive(-1);\n return;\n }\n\n if (event.key === 'Home' && isOpen.value) {\n event.preventDefault();\n setInitialActiveIndex('first');\n return;\n }\n\n if (event.key === 'End' && isOpen.value) {\n event.preventDefault();\n setInitialActiveIndex('last');\n return;\n }\n\n if (event.key === 'Enter' && activeOption.value) {\n event.preventDefault();\n toggleOption(activeOption.value);\n }\n};\n\nconst onDocumentPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) {\n return;\n }\n\n const target = event.target;\n\n if (!(target instanceof Node)) {\n return;\n }\n\n if (rootRef.value?.contains(target)) {\n return;\n }\n\n closeListbox();\n};\n\nwatch(\n isOpen,\n (value) => {\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n } else {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n }\n },\n);\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <div\n class=\"tree-multi-select__control\"\n @click=\"focusInput\"\n >\n <span\n v-if=\"$slots.prefix\"\n class=\"tree-multi-select__slot\"\n >\n <slot name=\"prefix\" />\n </span>\n\n <div class=\"tree-multi-select__values\">\n <span\n v-for=\"option in visibleTags\"\n :key=\"option.value\"\n class=\"tree-multi-select__tag\"\n >\n <slot\n name=\"tag\"\n :option=\"option\"\n :remove=\"() => removeValue(option.value)\"\n >\n <span class=\"tree-multi-select__tag-label\">{{ option.label }}</span>\n <button\n type=\"button\"\n class=\"tree-multi-select__tag-remove\"\n :disabled=\"disabled\"\n aria-label=\"Remove selection\"\n @mousedown.prevent\n @click.stop=\"removeValue(option.value)\"\n >\n <XIcon :size=\"12\" />\n </button>\n </slot>\n </span>\n\n <span\n v-if=\"hiddenTagCount > 0\"\n class=\"tree-multi-select__overflow\"\n >\n +{{ hiddenTagCount }}\n </span>\n\n <input\n ref=\"inputRef\"\n v-bind=\"inputAttrs\"\n :value=\"query\"\n type=\"text\"\n class=\"tree-multi-select__input\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n :aria-expanded=\"isOpen\"\n :aria-controls=\"isOpen ? listboxId : undefined\"\n :aria-activedescendant=\"activeDescendant\"\n :aria-invalid=\"invalid || undefined\"\n :aria-busy=\"loading || undefined\"\n :disabled=\"disabled\"\n :placeholder=\"inputPlaceholder\"\n @focus=\"onInputFocus\"\n @input=\"onInput\"\n @keydown=\"onInputKeydown\"\n >\n </div>\n\n <TreeSpinner\n v-if=\"loading\"\n class=\"tree-multi-select__indicator\"\n size=\"sm\"\n />\n <ChevronDownIcon\n v-else\n class=\"tree-multi-select__indicator\"\n :size=\"16\"\n />\n </div>\n\n <Transition name=\"tree-fade\">\n <ul\n v-if=\"isOpen\"\n :id=\"listboxId\"\n class=\"tree-multi-select__listbox\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n >\n <li\n v-if=\"filteredOptions.length === 0\"\n class=\"tree-multi-select__empty\"\n >\n <slot\n name=\"empty\"\n :query=\"query\"\n >\n {{ emptyText }}\n </slot>\n </li>\n\n <template v-else>\n <li\n v-for=\"(option, index) in filteredOptions\"\n :key=\"option.value\"\n >\n <button\n :id=\"`${listboxId}-option-${option.value}`\"\n type=\"button\"\n class=\"tree-multi-select__option\"\n :class=\"{\n 'is-active': index === activeIndex,\n 'is-selected': isSelected(option.value),\n 'is-disabled': option.disabled,\n }\"\n role=\"option\"\n :aria-selected=\"isSelected(option.value)\"\n :aria-disabled=\"option.disabled || undefined\"\n :disabled=\"option.disabled\"\n @mousedown.prevent\n @click=\"toggleOption(option)\"\n >\n <slot\n name=\"option\"\n :option=\"option\"\n :selected=\"isSelected(option.value)\"\n :active=\"index === activeIndex\"\n >\n <span class=\"tree-multi-select__option-copy\">\n <span class=\"tree-multi-select__option-label\">{{ option.label }}</span>\n <span\n v-if=\"option.description\"\n class=\"tree-multi-select__option-description\"\n >\n {{ option.description }}\n </span>\n </span>\n\n <span\n class=\"tree-multi-select__check\"\n aria-hidden=\"true\"\n >\n <CheckIcon\n v-if=\"isSelected(option.value)\"\n :size=\"16\"\n />\n </span>\n </slot>\n </button>\n </li>\n </template>\n </ul>\n </Transition>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n columns?: number;\n minItemWidth?: string;\n gap?: string;\n rowGap?: string;\n align?: string;\n justify?: string;\n dense?: boolean;\n }>(),\n {\n as: 'div',\n columns: undefined,\n minItemWidth: '16rem',\n gap: 'var(--tree-space-4)',\n rowGap: undefined,\n align: 'stretch',\n justify: 'stretch',\n dense: false,\n },\n);\n\nconst attrs = useAttrs();\n\nconst rootClasses = computed(() => [\n 'tree-grid',\n {\n 'is-dense': props.dense,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => [\n {\n gap: props.gap,\n rowGap: props.rowGap ?? props.gap,\n alignItems: props.align,\n justifyItems: props.justify,\n gridTemplateColumns:\n typeof props.columns === 'number' && props.columns > 0\n ? `repeat(${props.columns}, minmax(0, 1fr))`\n : `repeat(auto-fit, minmax(min(${props.minItemWidth}, 100%), 1fr))`,\n gridAutoFlow: props.dense ? 'dense' : 'row',\n },\n attrs.style,\n]);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <slot />\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n size?: TreeSize;\n sticky?: boolean;\n bordered?: boolean;\n elevated?: boolean;\n }>(),\n {\n as: 'header',\n size: 'md',\n sticky: false,\n bordered: true,\n elevated: false,\n },\n);\n\nconst attrs = useAttrs();\n\nconst rootClasses = computed(() => [\n 'tree-navbar',\n `tree-navbar--${props.size}`,\n {\n 'is-sticky': props.sticky,\n 'is-bordered': props.bordered,\n 'is-elevated': props.elevated,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <div class=\"tree-navbar__inner\">\n <div\n v-if=\"$slots.start\"\n class=\"tree-navbar__section tree-navbar__section--start\"\n >\n <slot name=\"start\" />\n </div>\n\n <div\n v-if=\"$slots.default || $slots.center\"\n class=\"tree-navbar__section tree-navbar__section--center\"\n >\n <slot name=\"center\">\n <slot />\n </slot>\n </div>\n\n <div\n v-if=\"$slots.end\"\n class=\"tree-navbar__section tree-navbar__section--end\"\n >\n <slot name=\"end\" />\n </div>\n </div>\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, type Component } from 'vue';\n\nexport type TreeLinkVariant = 'default' | 'muted' | 'danger';\n\nconst props = withDefaults(\n defineProps<{\n to?: string | Record<string, unknown>;\n href?: string;\n external?: boolean;\n disabled?: boolean;\n variant?: TreeLinkVariant;\n }>(),\n {\n to: undefined,\n href: undefined,\n external: false,\n disabled: false,\n variant: 'default',\n },\n);\n\nconst instance = getCurrentInstance();\n\nconst routerLinkComponent = computed<Component | null>(() => {\n if (!props.to) return null;\n\n return (instance?.appContext.components.RouterLink as Component | undefined) ?? null;\n});\n\nconst hasRouterLink = computed(() => {\n return Boolean(routerLinkComponent.value);\n});\n\nconst tag = computed<string | Component>(() => {\n if (props.disabled) return 'span';\n if (props.to && routerLinkComponent.value) return routerLinkComponent.value;\n return 'a';\n});\n\nconst linkProps = computed(() => {\n if (props.disabled) return {};\n if (props.to && hasRouterLink.value) return { to: props.to };\n const href = props.href ?? (typeof props.to === 'string' ? props.to : undefined);\n return {\n href,\n ...(props.external ? { target: '_blank', rel: 'noopener noreferrer' } : {}),\n };\n});\n\nconst classes = computed(() => [\n 'tree-link',\n `tree-link--${props.variant}`,\n {\n 'is-disabled': props.disabled,\n },\n]);\n</script>\n\n<template>\n <component\n :is=\"tag\"\n v-bind=\"linkProps\"\n :class=\"classes\"\n :aria-disabled=\"disabled || undefined\"\n :tabindex=\"disabled ? -1 : undefined\"\n >\n <slot />\n </component>\n</template>\n","import type { ComputedRef, InjectionKey } from 'vue';\n\nexport interface TreeSidebarContext {\n collapsed: ComputedRef<boolean>;\n}\n\nexport const treeSidebarInjectionKey: InjectionKey<TreeSidebarContext> =\n Symbol('tree-sidebar');\n","<script setup lang=\"ts\">\nimport { getNextEnabledIndex, isActivationKey } from '@treeui/utils';\nimport { computed, getCurrentInstance, inject, nextTick, ref, useAttrs, watch, type Component, type ComponentPublicInstance } from 'vue';\nimport type { TreeSize } from '../types/contracts';\nimport { treeSidebarInjectionKey } from './sidebar';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport interface TreeNavMenuItem {\n label: string;\n value: string;\n shortLabel?: string;\n description?: string;\n icon?: Component;\n to?: string | Record<string, unknown>;\n badge?: string | number;\n disabled?: boolean;\n}\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string;\n defaultValue?: string;\n items?: TreeNavMenuItem[];\n size?: TreeSize;\n collapsed?: boolean;\n disabled?: boolean;\n }>(),\n {\n modelValue: undefined,\n defaultValue: '',\n items: () => [],\n size: 'md',\n collapsed: undefined,\n disabled: false,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n select: [value: string, item: TreeNavMenuItem];\n}>();\n\ndefineSlots<{\n item?: (props: {\n item: TreeNavMenuItem;\n selected: boolean;\n focused: boolean;\n collapsed: boolean;\n }) => unknown;\n empty?: () => unknown;\n}>();\n\nconst attrs = useAttrs();\nconst sidebar = inject(treeSidebarInjectionKey, null);\nconst internalValue = ref(props.defaultValue);\nconst itemRefs = ref<Map<string, HTMLElement>>(new Map());\nconst instance = getCurrentInstance();\n\nconst selectedValue = computed(() => props.modelValue ?? internalValue.value);\nconst resolvedCollapsed = computed(() => props.collapsed ?? sidebar?.collapsed.value ?? false);\n\nconst routerLinkComponent = computed<Component | null>(() => (\n (instance?.appContext.components.RouterLink as Component | undefined) ?? null\n));\n\nconst itemTag = (item: TreeNavMenuItem) => {\n if (item.to && routerLinkComponent.value) {\n return routerLinkComponent.value;\n }\n return 'button';\n};\n\nconst getInitialFocusedIndex = () => {\n const selectedIndex = props.items.findIndex((item) =>\n item.value === selectedValue.value && !item.disabled,\n );\n\n if (selectedIndex >= 0) {\n return selectedIndex;\n }\n\n return props.items.findIndex((item) => !item.disabled);\n};\n\nconst focusedIndex = ref(getInitialFocusedIndex());\n\nconst rootClasses = computed(() => [\n 'tree-nav-menu',\n `tree-nav-menu--${props.size}`,\n {\n 'is-collapsed': resolvedCollapsed.value,\n 'is-disabled': props.disabled,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst isSelected = (value: string) => selectedValue.value === value;\n\nconst setItemRef = (element: Element | ComponentPublicInstance | null, value: string) => {\n const resolvedElement =\n element instanceof HTMLElement\n ? element\n : element && '$el' in element && element.$el instanceof HTMLElement\n ? element.$el\n : null;\n\n if (resolvedElement) {\n itemRefs.value.set(value, resolvedElement);\n } else {\n itemRefs.value.delete(value);\n }\n};\n\nconst focusItem = (index: number) => {\n const item = props.items[index];\n\n if (!item) {\n return;\n }\n\n focusedIndex.value = index;\n nextTick(() => itemRefs.value.get(item.value)?.focus());\n};\n\nconst selectItem = (item: TreeNavMenuItem) => {\n if (props.disabled || item.disabled) {\n return;\n }\n\n if (props.modelValue === undefined) {\n internalValue.value = item.value;\n }\n\n emit('update:modelValue', item.value);\n emit('select', item.value, item);\n};\n\nconst onItemKeydown = (event: KeyboardEvent, index: number) => {\n if (props.disabled) {\n return;\n }\n\n if (event.key === 'Home') {\n event.preventDefault();\n const firstIndex = props.items.findIndex((item) => !item.disabled);\n\n if (firstIndex >= 0) {\n focusItem(firstIndex);\n }\n\n return;\n }\n\n if (event.key === 'End') {\n event.preventDefault();\n const lastIndex = [...props.items].reverse().findIndex((item) => !item.disabled);\n\n if (lastIndex >= 0) {\n focusItem(props.items.length - 1 - lastIndex);\n }\n\n return;\n }\n\n if (event.key === 'ArrowDown' || event.key === 'ArrowRight') {\n event.preventDefault();\n const nextIndex = getNextEnabledIndex(index, props.items, 1);\n\n if (nextIndex >= 0) {\n focusItem(nextIndex);\n }\n\n return;\n }\n\n if (event.key === 'ArrowUp' || event.key === 'ArrowLeft') {\n event.preventDefault();\n const previousIndex = getNextEnabledIndex(index, props.items, -1);\n\n if (previousIndex >= 0) {\n focusItem(previousIndex);\n }\n\n return;\n }\n\n if (isActivationKey(event)) {\n event.preventDefault();\n selectItem(props.items[index]);\n }\n};\n\nconst getTabIndex = (index: number) => (focusedIndex.value === index ? 0 : -1);\n\nwatch(\n () => [props.items, props.modelValue] as const,\n () => {\n const nextIndex = getInitialFocusedIndex();\n focusedIndex.value = nextIndex >= 0 ? nextIndex : -1;\n },\n { deep: true },\n);\n</script>\n\n<template>\n <nav\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <ul\n v-if=\"items.length > 0\"\n class=\"tree-nav-menu__list\"\n >\n <li\n v-for=\"(item, index) in items\"\n :key=\"item.value\"\n class=\"tree-nav-menu__entry\"\n >\n <component\n :is=\"itemTag(item)\"\n :ref=\"(element: Element | ComponentPublicInstance | null) => setItemRef(element, item.value)\"\n :type=\"item.to ? undefined : 'button'\"\n :to=\"item.to || undefined\"\n class=\"tree-nav-menu__item\"\n :class=\"{\n 'is-selected': isSelected(item.value),\n 'is-disabled': disabled || item.disabled,\n }\"\n :disabled=\"(!item.to && (disabled || item.disabled)) || undefined\"\n :aria-disabled=\"(item.to && (disabled || item.disabled)) || undefined\"\n :aria-current=\"isSelected(item.value) ? 'page' : undefined\"\n :tabindex=\"disabled || item.disabled ? -1 : getTabIndex(index)\"\n :title=\"resolvedCollapsed ? item.label : undefined\"\n @click=\"selectItem(item)\"\n @keydown=\"onItemKeydown($event, index)\"\n @focus=\"focusedIndex = index\"\n >\n <slot\n name=\"item\"\n :item=\"item\"\n :selected=\"isSelected(item.value)\"\n :focused=\"focusedIndex === index\"\n :collapsed=\"resolvedCollapsed\"\n >\n <component\n :is=\"item.icon\"\n v-if=\"item.icon\"\n class=\"tree-nav-menu__icon\"\n aria-hidden=\"true\"\n />\n <span\n v-else\n class=\"tree-nav-menu__marker\"\n aria-hidden=\"true\"\n >\n {{ (item.shortLabel ?? item.label.charAt(0)).toUpperCase() }}\n </span>\n\n <span class=\"tree-nav-menu__copy\">\n <span class=\"tree-nav-menu__label\">{{ item.label }}</span>\n <span\n v-if=\"item.description\"\n class=\"tree-nav-menu__description\"\n >\n {{ item.description }}\n </span>\n </span>\n\n <span\n v-if=\"item.badge !== undefined && item.badge !== null\"\n class=\"tree-nav-menu__badge\"\n >\n {{ item.badge }}\n </span>\n </slot>\n </component>\n </li>\n </ul>\n\n <div\n v-else\n class=\"tree-nav-menu__empty\"\n >\n <slot name=\"empty\">\n No navigation items.\n </slot>\n </div>\n </nav>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject, useAttrs } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n value: string;\n disabled?: boolean;\n invalid?: boolean;\n size?: TreeSize;\n }>(),\n {\n disabled: false,\n invalid: false,\n size: undefined,\n },\n);\n\nconst group = inject<{\n modelValue: () => string | undefined;\n name: () => string | undefined;\n disabled: () => boolean;\n invalid: () => boolean;\n size: () => TreeSize;\n onChange: (value: string) => void;\n} | null>('tree-radio-group', null);\n\nconst attrs = useAttrs();\n\nconst isChecked = computed(() => {\n return group ? group.modelValue() === props.value : false;\n});\n\nconst isDisabled = computed(() => props.disabled || (group?.disabled() ?? false));\nconst isInvalid = computed(() => props.invalid || (group?.invalid() ?? false));\nconst resolvedSize = computed(() => props.size ?? group?.size() ?? 'md');\n\nconst rootClasses = computed(() => [\n 'tree-radio',\n `tree-radio--${resolvedSize.value}`,\n {\n 'is-checked': isChecked.value,\n 'is-disabled': isDisabled.value,\n 'is-invalid': isInvalid.value,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst inputAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst onChange = () => {\n if (group) {\n group.onChange(props.value);\n }\n};\n</script>\n\n<template>\n <label\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <input\n v-bind=\"inputAttrs\"\n type=\"radio\"\n class=\"tree-radio__input\"\n :value=\"value\"\n :checked=\"isChecked\"\n :disabled=\"isDisabled\"\n :name=\"group?.name()\"\n :aria-checked=\"isChecked\"\n :aria-invalid=\"isInvalid || undefined\"\n @change=\"onChange\"\n >\n <span\n class=\"tree-radio__control\"\n aria-hidden=\"true\"\n >\n <span\n v-if=\"isChecked\"\n class=\"tree-radio__dot\"\n />\n </span>\n <span\n v-if=\"$slots.default\"\n class=\"tree-radio__label\"\n >\n <slot />\n </span>\n </label>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, provide, useAttrs } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string;\n name?: string;\n disabled?: boolean;\n invalid?: boolean;\n size?: TreeSize;\n }>(),\n {\n modelValue: undefined,\n name: undefined,\n disabled: false,\n invalid: false,\n size: 'md',\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n}>();\n\nconst attrs = useAttrs();\n\nprovide('tree-radio-group', {\n modelValue: () => props.modelValue,\n name: () => props.name,\n disabled: () => props.disabled,\n invalid: () => props.invalid,\n size: () => props.size,\n onChange: (value: string) => {\n emit('update:modelValue', value);\n },\n});\n\nconst rootClasses = computed(() => [\n 'tree-radio-group',\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst groupAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <div\n v-bind=\"groupAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n role=\"radiogroup\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { createId, isActivationKey, isEscapeKey } from '@treeui/utils';\nimport { computed, nextTick, onBeforeUnmount, ref, toRef, useAttrs, watch } from 'vue';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeSize } from '../types/contracts';\nimport TreeSpinner from './TreeSpinner.vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport interface TreeSelectOption {\n label: string;\n value: string | number;\n disabled?: boolean;\n}\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string | number;\n options?: TreeSelectOption[];\n open?: boolean;\n defaultOpen?: boolean;\n size?: TreeSize;\n disabled?: boolean;\n loading?: boolean;\n invalid?: boolean;\n placeholder?: string;\n }>(),\n {\n modelValue: '',\n options: () => [],\n open: undefined,\n defaultOpen: false,\n size: 'md',\n disabled: false,\n loading: false,\n invalid: false,\n placeholder: '',\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number];\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n}>();\n\nconst attrs = useAttrs();\nconst listboxId = createId('tree-select');\nconst rootRef = ref<HTMLElement | null>(null);\nconst triggerRef = ref<HTMLButtonElement | null>(null);\nconst optionRefs = ref<Map<string | number, HTMLElement>>(new Map());\nconst focusedIndex = ref(-1);\n\nconst triggerAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst rootClasses = computed(() => [\n 'tree-select',\n `tree-select--${props.size}`,\n {\n 'is-disabled': props.disabled,\n 'is-invalid': props.invalid,\n 'is-loading': props.loading,\n 'is-open': isOpen.value,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst selectedLabel = computed(() => {\n const opt = props.options.find((o) => o.value === props.modelValue);\n return opt?.label ?? '';\n});\n\nconst enabledOptions = computed(() =>\n props.options.filter((o) => !o.disabled),\n);\n\nconst openDropdown = () => {\n if (props.disabled) return;\n const selectedIdx = props.options.findIndex((o) => o.value === props.modelValue);\n focusedIndex.value = selectedIdx >= 0 ? selectedIdx : 0;\n setValue(true);\n nextTick(() => focusOption(focusedIndex.value));\n};\n\nconst closeDropdown = (restoreFocus = false) => {\n setValue(false);\n focusedIndex.value = -1;\n if (restoreFocus) {\n nextTick(() => triggerRef.value?.focus());\n }\n};\n\nconst toggleDropdown = () => {\n if (isOpen.value) {\n closeDropdown();\n } else {\n openDropdown();\n }\n};\n\nconst selectOption = (opt: TreeSelectOption) => {\n if (opt.disabled) return;\n emit('update:modelValue', opt.value);\n closeDropdown(true);\n};\n\nconst focusOption = (index: number) => {\n const opt = props.options[index];\n if (!opt) return;\n const el = optionRefs.value.get(opt.value);\n el?.focus();\n};\n\nconst setOptionRef = (el: Element | null, value: string | number) => {\n if (el instanceof HTMLElement) {\n optionRefs.value.set(value, el);\n } else {\n optionRefs.value.delete(value);\n }\n};\n\nconst moveFocus = (direction: 1 | -1) => {\n let nextIndex = focusedIndex.value + direction;\n while (nextIndex >= 0 && nextIndex < props.options.length) {\n if (!props.options[nextIndex].disabled) {\n focusedIndex.value = nextIndex;\n focusOption(nextIndex);\n return;\n }\n nextIndex += direction;\n }\n};\n\nconst onTriggerKeydown = (event: KeyboardEvent) => {\n if (props.disabled) return;\n\n if (isEscapeKey(event) && isOpen.value) {\n event.preventDefault();\n closeDropdown();\n return;\n }\n\n if (isActivationKey(event) || event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n openDropdown();\n }\n};\n\nconst onOptionKeydown = (event: KeyboardEvent, opt: TreeSelectOption, _index: number) => {\n if (isEscapeKey(event)) {\n event.preventDefault();\n closeDropdown(true);\n return;\n }\n\n if (isActivationKey(event)) {\n event.preventDefault();\n selectOption(opt);\n return;\n }\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n moveFocus(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n moveFocus(-1);\n break;\n case 'Home':\n event.preventDefault();\n focusedIndex.value = enabledOptions.value.length > 0\n ? props.options.indexOf(enabledOptions.value[0])\n : 0;\n focusOption(focusedIndex.value);\n break;\n case 'End':\n event.preventDefault();\n focusedIndex.value = enabledOptions.value.length > 0\n ? props.options.indexOf(enabledOptions.value[enabledOptions.value.length - 1])\n : props.options.length - 1;\n focusOption(focusedIndex.value);\n break;\n default:\n break;\n }\n};\n\nconst onDocumentPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) return;\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (rootRef.value?.contains(target)) return;\n closeDropdown();\n};\n\nconst hasSelection = computed(() =>\n props.modelValue !== '' && props.modelValue !== null && props.modelValue !== undefined,\n);\n\nwatch(isOpen, (value) => {\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n } else {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n }\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <button\n ref=\"triggerRef\"\n v-bind=\"triggerAttrs\"\n type=\"button\"\n class=\"tree-select__trigger\"\n :disabled=\"disabled\"\n :aria-controls=\"isOpen ? listboxId : undefined\"\n aria-haspopup=\"listbox\"\n :aria-expanded=\"isOpen\"\n :aria-invalid=\"invalid || undefined\"\n :aria-busy=\"loading || undefined\"\n @click=\"toggleDropdown\"\n @keydown=\"onTriggerKeydown\"\n >\n <span\n v-if=\"$slots.prefix\"\n class=\"tree-select__slot tree-select__slot--prefix\"\n >\n <slot name=\"prefix\" />\n </span>\n <span\n class=\"tree-select__value\"\n :data-placeholder=\"!hasSelection ? true : undefined\"\n >\n {{ selectedLabel || placeholder }}\n </span>\n <TreeSpinner\n v-if=\"loading\"\n size=\"sm\"\n label=\"Loading\"\n />\n <svg\n v-else\n class=\"tree-select__chevron\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"4 6 8 10 12 6\" />\n </svg>\n </button>\n <transition name=\"tree-fade\">\n <ul\n v-if=\"isOpen && !disabled\"\n :id=\"listboxId\"\n role=\"listbox\"\n class=\"tree-select__listbox\"\n :aria-label=\"typeof triggerAttrs['aria-label'] === 'string' ? triggerAttrs['aria-label'] : undefined\"\n >\n <li\n v-for=\"(opt, index) in options\"\n :key=\"opt.value\"\n :ref=\"(el) => setOptionRef(el as Element | null, opt.value)\"\n role=\"option\"\n class=\"tree-select__option\"\n :class=\"{\n 'is-selected': opt.value === modelValue,\n 'is-disabled': opt.disabled,\n 'is-focused': index === focusedIndex,\n }\"\n :aria-selected=\"opt.value === modelValue\"\n :aria-disabled=\"opt.disabled || undefined\"\n :tabindex=\"opt.disabled ? -1 : 0\"\n @click=\"selectOption(opt)\"\n @keydown=\"onOptionKeydown($event, opt, index)\"\n >\n {{ opt.label }}\n <svg\n v-if=\"opt.value === modelValue\"\n class=\"tree-select__check\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"3.5 8.5 6.5 11.5 12.5 4.5\" />\n </svg>\n </li>\n </ul>\n </transition>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { getTreeIcon } from '@treeui/icons';\nimport { computed, provide, toRef, useAttrs } from 'vue';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeSize } from '../types/contracts';\nimport { treeSidebarInjectionKey } from './sidebar';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst _treeSidebarSides = ['left', 'right'] as const;\n\nexport type TreeSidebarSide = (typeof _treeSidebarSides)[number];\n\nconst ChevronLeftIcon = getTreeIcon('chevron-left');\nconst ChevronRightIcon = getTreeIcon('chevron-right');\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n collapsed?: boolean;\n defaultCollapsed?: boolean;\n collapsible?: boolean;\n size?: TreeSize;\n side?: TreeSidebarSide;\n sticky?: boolean;\n bordered?: boolean;\n width?: string;\n collapsedWidth?: string;\n collapseLabel?: string;\n expandLabel?: string;\n }>(),\n {\n as: 'aside',\n collapsed: undefined,\n defaultCollapsed: false,\n collapsible: true,\n size: 'md',\n side: 'left',\n sticky: false,\n bordered: true,\n width: '17.5rem',\n collapsedWidth: '4.75rem',\n collapseLabel: 'Collapse sidebar',\n expandLabel: 'Expand sidebar',\n },\n);\n\nconst emit = defineEmits<{\n 'update:collapsed': [value: boolean];\n 'collapse-change': [value: boolean];\n}>();\n\ndefineSlots<{\n header?: (props: { collapsed: boolean }) => unknown;\n default?: (props: { collapsed: boolean }) => unknown;\n footer?: (props: { collapsed: boolean }) => unknown;\n toggle?: (props: { collapsed: boolean }) => unknown;\n}>();\n\nconst attrs = useAttrs();\n\nconst { value: isCollapsed, setValue } = useControllableOpen(\n toRef(props, 'collapsed'),\n props.defaultCollapsed,\n (value) => {\n emit('update:collapsed', value);\n emit('collapse-change', value);\n },\n);\n\nconst rootClasses = computed(() => [\n 'tree-sidebar',\n `tree-sidebar--${props.size}`,\n `tree-sidebar--${props.side}`,\n {\n 'is-collapsed': isCollapsed.value,\n 'is-sticky': props.sticky,\n 'is-bordered': props.bordered,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => [\n {\n '--tree-sidebar-width': props.width,\n '--tree-sidebar-collapsed-width': props.collapsedWidth,\n },\n attrs.style,\n]);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst toggleCollapsed = () => {\n if (!props.collapsible) {\n return;\n }\n\n setValue(!isCollapsed.value);\n};\n\nconst ToggleIcon = computed(() => {\n if (props.side === 'right') {\n return isCollapsed.value ? ChevronLeftIcon : ChevronRightIcon;\n }\n\n return isCollapsed.value ? ChevronRightIcon : ChevronLeftIcon;\n});\n\nconst toggleLabel = computed(() =>\n isCollapsed.value ? props.expandLabel : props.collapseLabel,\n);\n\nprovide(treeSidebarInjectionKey, {\n collapsed: computed(() => isCollapsed.value),\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isCollapsed ? 'collapsed' : 'expanded'\"\n >\n <div\n v-if=\"$slots.header\"\n class=\"tree-sidebar__header\"\n >\n <slot\n name=\"header\"\n :collapsed=\"isCollapsed\"\n />\n </div>\n\n <div class=\"tree-sidebar__body\">\n <slot :collapsed=\"isCollapsed\" />\n </div>\n\n <div\n v-if=\"$slots.footer || collapsible\"\n class=\"tree-sidebar__footer\"\n >\n <slot\n v-if=\"$slots.footer\"\n name=\"footer\"\n :collapsed=\"isCollapsed\"\n />\n\n <button\n v-if=\"collapsible\"\n type=\"button\"\n class=\"tree-sidebar__toggle\"\n :aria-label=\"toggleLabel\"\n :aria-expanded=\"!isCollapsed\"\n @click=\"toggleCollapsed\"\n >\n <slot\n name=\"toggle\"\n :collapsed=\"isCollapsed\"\n >\n <component\n :is=\"ToggleIcon\"\n :size=\"16\"\n />\n <span v-if=\"!isCollapsed\">{{ toggleLabel }}</span>\n </slot>\n </button>\n </div>\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\nimport type { TreeSize } from '../types/contracts';\nimport TreeSpinner from './TreeSpinner.vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string | number;\n size?: TreeSize;\n disabled?: boolean;\n loading?: boolean;\n invalid?: boolean;\n type?: string;\n placeholder?: string;\n }>(),\n {\n modelValue: '',\n size: 'md',\n disabled: false,\n loading: false,\n invalid: false,\n type: 'text',\n placeholder: '',\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n}>();\n\nconst attrs = useAttrs();\n\nconst rootClasses = computed(() => [\n 'tree-input',\n `tree-input--${props.size}`,\n {\n 'is-disabled': props.disabled,\n 'is-invalid': props.invalid,\n 'is-loading': props.loading,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst inputAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst stringValue = computed(() => `${props.modelValue ?? ''}`);\n\nconst onInput = (event: Event) => {\n emit('update:modelValue', (event.target as HTMLInputElement).value);\n};\n</script>\n\n<template>\n <label\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <span\n v-if=\"$slots.prefix\"\n class=\"tree-input__slot tree-input__slot--prefix\"\n >\n <slot name=\"prefix\" />\n </span>\n <input\n v-bind=\"inputAttrs\"\n class=\"tree-input__field\"\n :type=\"type\"\n :value=\"stringValue\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :aria-invalid=\"invalid || undefined\"\n @input=\"onInput\"\n >\n <TreeSpinner\n v-if=\"loading\"\n size=\"sm\"\n label=\"Loading\"\n />\n <span\n v-if=\"$slots.suffix\"\n class=\"tree-input__slot tree-input__slot--suffix\"\n >\n <slot name=\"suffix\" />\n </span>\n </label>\n</template>\n","<script setup lang=\"ts\">\nimport { clamp } from '@treeui/utils';\nimport { computed, ref, useAttrs, watch } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: number | null;\n min?: number;\n max?: number;\n step?: number;\n size?: TreeSize;\n disabled?: boolean;\n invalid?: boolean;\n placeholder?: string;\n controls?: boolean;\n }>(),\n {\n modelValue: null,\n min: undefined,\n max: undefined,\n step: 1,\n size: 'md',\n disabled: false,\n invalid: false,\n placeholder: '',\n controls: true,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: number | null];\n}>();\n\nconst attrs = useAttrs();\nconst displayValue = ref(\n props.modelValue === null || props.modelValue === undefined ? '' : `${props.modelValue}`,\n);\n\nconst precision = computed(() => {\n const normalizedStep = `${props.step}`;\n const fractionalPart = normalizedStep.split('.')[1];\n return fractionalPart ? fractionalPart.length : 0;\n});\n\nconst rootClasses = computed(() => [\n 'tree-number-input',\n `tree-number-input--${props.size}`,\n {\n 'is-disabled': props.disabled,\n 'is-invalid': props.invalid,\n 'has-controls': props.controls,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst inputAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst formatValue = (value: number | null | undefined) =>\n value === null || value === undefined ? '' : `${value}`;\n\nconst normalizeValue = (value: number) => {\n const clamped = clamp(\n value,\n props.min ?? Number.NEGATIVE_INFINITY,\n props.max ?? Number.POSITIVE_INFINITY,\n );\n\n return Number(clamped.toFixed(precision.value));\n};\n\nconst parseValue = (value: string) => {\n const normalized = value.trim().replace(',', '.');\n\n if (!normalized) {\n return null;\n }\n\n const parsed = Number(normalized);\n return Number.isNaN(parsed) ? null : parsed;\n};\n\nconst currentNumericValue = computed(() => {\n const parsed = parseValue(displayValue.value);\n return parsed ?? props.modelValue ?? null;\n});\n\nconst canDecrement = computed(() => {\n if (props.disabled) {\n return false;\n }\n\n if (props.min === undefined || currentNumericValue.value === null) {\n return true;\n }\n\n return normalizeValue(currentNumericValue.value) > props.min;\n});\n\nconst canIncrement = computed(() => {\n if (props.disabled) {\n return false;\n }\n\n if (props.max === undefined || currentNumericValue.value === null) {\n return true;\n }\n\n return normalizeValue(currentNumericValue.value) < props.max;\n});\n\nconst commitValue = (value: number | null) => {\n if (value === null) {\n displayValue.value = '';\n emit('update:modelValue', null);\n return;\n }\n\n const normalized = normalizeValue(value);\n displayValue.value = `${normalized}`;\n emit('update:modelValue', normalized);\n};\n\nconst stepValue = (direction: 1 | -1) => {\n if (props.disabled) {\n return;\n }\n\n let baseValue = currentNumericValue.value ?? 0;\n\n if (currentNumericValue.value === null) {\n if (direction === 1 && props.min !== undefined) {\n baseValue = props.min - props.step;\n }\n\n if (direction === -1 && props.max !== undefined) {\n baseValue = props.max + props.step;\n }\n }\n\n commitValue(baseValue + direction * props.step);\n};\n\nconst onInput = (event: Event) => {\n const nextValue = (event.target as HTMLInputElement).value;\n displayValue.value = nextValue;\n\n if (!nextValue.trim()) {\n emit('update:modelValue', null);\n return;\n }\n\n const parsedValue = parseValue(nextValue);\n\n if (parsedValue === null) {\n return;\n }\n\n emit('update:modelValue', normalizeValue(parsedValue));\n};\n\nconst onBlur = () => {\n if (!displayValue.value.trim()) {\n displayValue.value = '';\n return;\n }\n\n const parsedValue = parseValue(displayValue.value);\n\n if (parsedValue === null) {\n displayValue.value = formatValue(props.modelValue);\n return;\n }\n\n displayValue.value = `${normalizeValue(parsedValue)}`;\n};\n\nconst onKeydown = (event: KeyboardEvent) => {\n if (props.disabled) {\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n stepValue(1);\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n stepValue(-1);\n return;\n }\n\n if (event.key === 'Home' && props.min !== undefined) {\n event.preventDefault();\n commitValue(props.min);\n return;\n }\n\n if (event.key === 'End' && props.max !== undefined) {\n event.preventDefault();\n commitValue(props.max);\n }\n};\n\nwatch(\n () => props.modelValue,\n (value) => {\n const nextDisplayValue = formatValue(value);\n\n if (nextDisplayValue !== displayValue.value) {\n displayValue.value = nextDisplayValue;\n }\n },\n);\n</script>\n\n<template>\n <div\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <button\n v-if=\"controls\"\n type=\"button\"\n class=\"tree-number-input__stepper tree-number-input__stepper--decrement\"\n :disabled=\"!canDecrement\"\n aria-label=\"Decrease value\"\n @click=\"stepValue(-1)\"\n >\n <span aria-hidden=\"true\">-</span>\n </button>\n\n <input\n v-bind=\"inputAttrs\"\n :value=\"displayValue\"\n type=\"text\"\n inputmode=\"decimal\"\n class=\"tree-number-input__field\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :aria-invalid=\"invalid || undefined\"\n @input=\"onInput\"\n @blur=\"onBlur\"\n @keydown=\"onKeydown\"\n >\n\n <button\n v-if=\"controls\"\n type=\"button\"\n class=\"tree-number-input__stepper tree-number-input__stepper--increment\"\n :disabled=\"!canIncrement\"\n aria-label=\"Increase value\"\n @click=\"stepValue(1)\"\n >\n <span aria-hidden=\"true\">+</span>\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { createId, getNextEnabledIndex, isActivationKey } from '@treeui/utils';\nimport { computed, nextTick, ref, useAttrs, watch, type ComponentPublicInstance } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport interface TreeSelectableListItem {\n label: string;\n value: string;\n description?: string;\n meta?: string;\n disabled?: boolean;\n}\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string;\n defaultValue?: string;\n items?: TreeSelectableListItem[];\n size?: TreeSize;\n disabled?: boolean;\n emptyText?: string;\n }>(),\n {\n modelValue: undefined,\n defaultValue: '',\n items: () => [],\n size: 'md',\n disabled: false,\n emptyText: 'No items available.',\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n}>();\n\ndefineSlots<{\n item?: (props: {\n item: TreeSelectableListItem;\n selected: boolean;\n focused: boolean;\n }) => unknown;\n empty?: () => unknown;\n}>();\n\nconst attrs = useAttrs();\nconst baseId = createId('tree-selectable-list');\nconst itemRefs = ref<Map<string, HTMLButtonElement>>(new Map());\nconst internalValue = ref(props.defaultValue);\n\nconst selectedValue = computed(() => props.modelValue ?? internalValue.value);\n\nconst getInitialFocusedIndex = () => {\n const selectedIndex = props.items.findIndex((item) =>\n item.value === selectedValue.value && !item.disabled,\n );\n\n if (selectedIndex >= 0) {\n return selectedIndex;\n }\n\n return props.items.findIndex((item) => !item.disabled);\n};\n\nconst focusedIndex = ref(getInitialFocusedIndex());\n\nconst rootClasses = computed(() => [\n 'tree-selectable-list',\n `tree-selectable-list--${props.size}`,\n {\n 'is-disabled': props.disabled,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst isSelected = (value: string) => selectedValue.value === value;\n\nconst setItemRef = (element: Element | ComponentPublicInstance | null, value: string) => {\n const resolvedElement =\n element instanceof HTMLButtonElement\n ? element\n : element && '$el' in element && element.$el instanceof HTMLButtonElement\n ? element.$el\n : null;\n\n if (resolvedElement instanceof HTMLButtonElement) {\n itemRefs.value.set(value, resolvedElement);\n } else {\n itemRefs.value.delete(value);\n }\n};\n\nconst focusItem = (index: number) => {\n const item = props.items[index];\n\n if (!item) {\n return;\n }\n\n focusedIndex.value = index;\n nextTick(() => itemRefs.value.get(item.value)?.focus());\n};\n\nconst selectItem = (item: TreeSelectableListItem, focus = false) => {\n if (props.disabled || item.disabled) {\n return;\n }\n\n if (props.modelValue === undefined) {\n internalValue.value = item.value;\n }\n\n emit('update:modelValue', item.value);\n\n if (focus) {\n const index = props.items.findIndex((candidate) => candidate.value === item.value);\n\n if (index >= 0) {\n focusItem(index);\n }\n }\n};\n\nconst onItemKeydown = (event: KeyboardEvent, index: number) => {\n if (props.disabled) {\n return;\n }\n\n if (event.key === 'Home') {\n event.preventDefault();\n const firstIndex = props.items.findIndex((item) => !item.disabled);\n\n if (firstIndex >= 0) {\n selectItem(props.items[firstIndex], true);\n }\n\n return;\n }\n\n if (event.key === 'End') {\n event.preventDefault();\n const lastIndex = [...props.items].reverse().findIndex((item) => !item.disabled);\n\n if (lastIndex >= 0) {\n const resolvedIndex = props.items.length - 1 - lastIndex;\n selectItem(props.items[resolvedIndex], true);\n }\n\n return;\n }\n\n if (event.key === 'ArrowDown' || event.key === 'ArrowRight') {\n event.preventDefault();\n const nextIndex = getNextEnabledIndex(index, props.items, 1);\n\n if (nextIndex >= 0) {\n selectItem(props.items[nextIndex], true);\n }\n\n return;\n }\n\n if (event.key === 'ArrowUp' || event.key === 'ArrowLeft') {\n event.preventDefault();\n const previousIndex = getNextEnabledIndex(index, props.items, -1);\n\n if (previousIndex >= 0) {\n selectItem(props.items[previousIndex], true);\n }\n\n return;\n }\n\n if (isActivationKey(event)) {\n event.preventDefault();\n selectItem(props.items[index], true);\n }\n};\n\nconst getTabIndex = (index: number) => (focusedIndex.value === index ? 0 : -1);\n\nwatch(\n () => [props.items, props.modelValue] as const,\n () => {\n const nextIndex = getInitialFocusedIndex();\n focusedIndex.value = nextIndex >= 0 ? nextIndex : -1;\n },\n { deep: true },\n);\n</script>\n\n<template>\n <div\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n role=\"listbox\"\n :aria-disabled=\"disabled || undefined\"\n >\n <template v-if=\"items.length > 0\">\n <button\n v-for=\"(item, index) in items\"\n :id=\"`${baseId}-${item.value}`\"\n :ref=\"(element) => setItemRef(element, item.value)\"\n :key=\"item.value\"\n type=\"button\"\n class=\"tree-selectable-list__item\"\n :class=\"{\n 'is-selected': isSelected(item.value),\n 'is-disabled': disabled || item.disabled,\n }\"\n role=\"option\"\n :aria-selected=\"isSelected(item.value)\"\n :tabindex=\"disabled || item.disabled ? -1 : getTabIndex(index)\"\n :disabled=\"disabled || item.disabled\"\n @click=\"selectItem(item)\"\n @keydown=\"onItemKeydown($event, index)\"\n @focus=\"focusedIndex = index\"\n >\n <slot\n name=\"item\"\n :item=\"item\"\n :selected=\"isSelected(item.value)\"\n :focused=\"focusedIndex === index\"\n >\n <span\n class=\"tree-selectable-list__indicator\"\n aria-hidden=\"true\"\n />\n\n <span class=\"tree-selectable-list__copy\">\n <span class=\"tree-selectable-list__label\">{{ item.label }}</span>\n <span\n v-if=\"item.description\"\n class=\"tree-selectable-list__description\"\n >\n {{ item.description }}\n </span>\n </span>\n\n <span\n v-if=\"item.meta\"\n class=\"tree-selectable-list__meta\"\n >\n {{ item.meta }}\n </span>\n </slot>\n </button>\n </template>\n\n <div\n v-else\n class=\"tree-selectable-list__empty\"\n >\n <slot name=\"empty\">\n {{ emptyText }}\n </slot>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst _treeStackDirections = ['vertical', 'horizontal'] as const;\n\nexport type TreeStackDirection = (typeof _treeStackDirections)[number];\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n direction?: TreeStackDirection;\n gap?: string;\n align?: string;\n justify?: string;\n wrap?: boolean;\n reverse?: boolean;\n }>(),\n {\n as: 'div',\n direction: 'vertical',\n gap: 'var(--tree-space-4)',\n align: 'stretch',\n justify: 'flex-start',\n wrap: false,\n reverse: false,\n },\n);\n\nconst attrs = useAttrs();\n\nconst rootClasses = computed(() => [\n 'tree-stack',\n `tree-stack--${props.direction}`,\n {\n 'is-wrapping': props.wrap,\n 'is-reversed': props.reverse,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => [\n {\n gap: props.gap,\n alignItems: props.align,\n justifyContent: props.justify,\n },\n attrs.style,\n]);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <slot />\n </component>\n</template>\n","import type { ComputedRef, InjectionKey, Ref } from 'vue';\n\nexport interface TreeTreeViewNode {\n id: string;\n label: string;\n description?: string;\n meta?: string;\n disabled?: boolean;\n children?: TreeTreeViewNode[];\n}\n\nexport const treeTreeViewSelectionModes = ['single', 'multiple'] as const;\n\nexport type TreeTreeViewSelectionMode = (typeof treeTreeViewSelectionModes)[number];\n\nexport interface TreeTreeViewRecord {\n node: TreeTreeViewNode;\n level: number;\n parentId?: string;\n}\n\nexport interface TreeTreeViewContext {\n baseId: string;\n disabled: ComputedRef<boolean>;\n selectionMode: ComputedRef<TreeTreeViewSelectionMode>;\n focusedId: Ref<string>;\n isExpanded: (id: string) => boolean;\n toggleExpanded: (id: string) => void;\n isSelected: (id: string) => boolean;\n toggleSelected: (id: string) => void;\n setFocusedId: (id: string, shouldFocus?: boolean) => void;\n onItemKeydown: (event: KeyboardEvent, id: string) => void;\n registerItem: (id: string, element: HTMLElement) => void;\n unregisterItem: (id: string) => void;\n}\n\nexport const treeTreeViewInjectionKey: InjectionKey<TreeTreeViewContext> =\n Symbol('tree-tree-view');\n","<script setup lang=\"ts\">\nimport { getTreeIcon } from '@treeui/icons';\nimport { computed, inject, type ComponentPublicInstance } from 'vue';\nimport { treeTreeViewInjectionKey, type TreeTreeViewNode } from './tree-view';\n\ndefineOptions({\n name: 'TreeTreeViewItem',\n});\n\nconst ChevronRightIcon = getTreeIcon('chevron-right');\nconst CheckIcon = getTreeIcon('check');\n\nconst props = defineProps<{\n node: TreeTreeViewNode;\n level: number;\n}>();\n\nconst ctx = inject(treeTreeViewInjectionKey);\n\nif (!ctx) {\n throw new Error('[TreeUI] TTreeView items must be rendered inside a TTreeView.');\n}\n\nconst hasChildren = computed(() => Boolean(props.node.children?.length));\nconst isExpanded = computed(() => (hasChildren.value ? ctx.isExpanded(props.node.id) : false));\nconst isSelected = computed(() => ctx.isSelected(props.node.id));\nconst isDisabled = computed(() => ctx.disabled.value || props.node.disabled);\nconst isFocused = computed(() => ctx.focusedId.value === props.node.id);\nconst itemId = computed(() => `${ctx.baseId}-${props.node.id}`);\n\nconst rowClasses = computed(() => ({\n 'is-expanded': isExpanded.value,\n 'is-selected': isSelected.value,\n 'is-disabled': isDisabled.value,\n 'is-focused': isFocused.value,\n}));\n\nconst setItemRef = (element: Element | ComponentPublicInstance | null) => {\n const resolvedElement =\n element instanceof HTMLElement\n ? element\n : element && '$el' in element && element.$el instanceof HTMLElement\n ? element.$el\n : null;\n\n if (resolvedElement instanceof HTMLElement) {\n ctx.registerItem(props.node.id, resolvedElement);\n } else {\n ctx.unregisterItem(props.node.id);\n }\n};\n\nconst onRowClick = () => {\n ctx.setFocusedId(props.node.id);\n ctx.toggleSelected(props.node.id);\n};\n\nconst onToggleClick = () => {\n if (isDisabled.value || !hasChildren.value) {\n return;\n }\n\n ctx.toggleExpanded(props.node.id);\n ctx.setFocusedId(props.node.id);\n};\n</script>\n\n<template>\n <li\n class=\"tree-tree-view__node\"\n role=\"none\"\n >\n <div\n :id=\"itemId\"\n :ref=\"setItemRef\"\n class=\"tree-tree-view__row\"\n :class=\"rowClasses\"\n :style=\"{ '--tree-tree-view-level': `${level}` }\"\n role=\"treeitem\"\n :aria-level=\"level\"\n :aria-expanded=\"hasChildren ? isExpanded : undefined\"\n :aria-selected=\"isSelected\"\n :aria-disabled=\"isDisabled || undefined\"\n :tabindex=\"isDisabled ? -1 : isFocused ? 0 : -1\"\n @click=\"onRowClick\"\n @keydown=\"ctx.onItemKeydown($event, node.id)\"\n @focus=\"ctx.setFocusedId(node.id)\"\n >\n <button\n v-if=\"hasChildren\"\n type=\"button\"\n class=\"tree-tree-view__toggle\"\n :class=\"{ 'is-expanded': isExpanded }\"\n tabindex=\"-1\"\n :disabled=\"isDisabled\"\n :aria-label=\"isExpanded ? 'Collapse node' : 'Expand node'\"\n @click.stop=\"onToggleClick\"\n >\n <ChevronRightIcon :size=\"16\" />\n </button>\n\n <span\n v-else\n class=\"tree-tree-view__spacer\"\n aria-hidden=\"true\"\n />\n\n <span\n class=\"tree-tree-view__marker\"\n :class=\"{\n 'is-selected': isSelected,\n 'is-multiple': ctx.selectionMode.value === 'multiple',\n }\"\n aria-hidden=\"true\"\n >\n <CheckIcon\n v-if=\"ctx.selectionMode.value === 'multiple' && isSelected\"\n :size=\"14\"\n />\n </span>\n\n <span class=\"tree-tree-view__copy\">\n <span class=\"tree-tree-view__label\">{{ node.label }}</span>\n <span\n v-if=\"node.description\"\n class=\"tree-tree-view__description\"\n >\n {{ node.description }}\n </span>\n </span>\n\n <span\n v-if=\"node.meta\"\n class=\"tree-tree-view__meta\"\n >\n {{ node.meta }}\n </span>\n </div>\n\n <ul\n v-if=\"hasChildren && isExpanded\"\n class=\"tree-tree-view__group\"\n role=\"group\"\n >\n <TreeTreeViewItem\n v-for=\"child in node.children\"\n :key=\"child.id\"\n :node=\"child\"\n :level=\"level + 1\"\n />\n </ul>\n </li>\n</template>\n","<script setup lang=\"ts\">\nimport { createId, isActivationKey } from '@treeui/utils';\nimport { computed, nextTick, provide, ref, useAttrs, watch } from 'vue';\nimport TreeTreeViewItem from './TreeTreeViewItem.vue';\nimport {\n treeTreeViewInjectionKey,\n type TreeTreeViewNode,\n type TreeTreeViewRecord,\n type TreeTreeViewSelectionMode,\n} from './tree-view';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string | string[];\n defaultValue?: string | string[];\n nodes?: TreeTreeViewNode[];\n selectionMode?: TreeTreeViewSelectionMode;\n expanded?: string[];\n defaultExpanded?: string[];\n disabled?: boolean;\n emptyText?: string;\n }>(),\n {\n modelValue: undefined,\n defaultValue: undefined,\n nodes: () => [],\n selectionMode: 'single',\n expanded: undefined,\n defaultExpanded: () => [],\n disabled: false,\n emptyText: 'No items available.',\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | string[] | undefined];\n 'update:expanded': [value: string[]];\n 'selection-change': [value: string | string[] | undefined];\n 'expanded-change': [value: string[]];\n}>();\n\nconst attrs = useAttrs();\nconst baseId = createId('tree-tree-view');\nconst internalValue = ref<string | string[] | undefined>(props.defaultValue);\nconst internalExpanded = ref<string[]>(props.defaultExpanded);\nconst itemRefs = ref<Map<string, HTMLElement>>(new Map());\n\nconst rootClasses = computed(() => [\n 'tree-tree-view',\n {\n 'is-disabled': props.disabled,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst treeAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst selectedValues = computed(() => {\n const value = props.modelValue ?? internalValue.value;\n\n if (value === undefined || value === null || value === '') {\n return [] as string[];\n }\n\n return Array.isArray(value) ? value : [value];\n});\n\nconst expandedValues = computed(() => props.expanded ?? internalExpanded.value);\n\nconst updateSelection = (nextValues: string[]) => {\n if (props.selectionMode === 'multiple') {\n if (props.modelValue === undefined) {\n internalValue.value = nextValues;\n }\n\n emit('update:modelValue', nextValues);\n emit('selection-change', nextValues);\n return;\n }\n\n const nextValue = nextValues[0];\n\n if (props.modelValue === undefined) {\n internalValue.value = nextValue;\n }\n\n emit('update:modelValue', nextValue);\n emit('selection-change', nextValue);\n};\n\nconst updateExpanded = (nextValues: string[]) => {\n if (props.expanded === undefined) {\n internalExpanded.value = nextValues;\n }\n\n emit('update:expanded', nextValues);\n emit('expanded-change', nextValues);\n};\n\nconst isSelected = (id: string) => selectedValues.value.includes(id);\nconst isExpanded = (id: string) => expandedValues.value.includes(id);\n\nconst flattenNodes = (\n nodes: TreeTreeViewNode[],\n level = 1,\n parentId?: string,\n): TreeTreeViewRecord[] =>\n nodes.reduce<TreeTreeViewRecord[]>((records, node) => {\n records.push({\n node,\n level,\n parentId,\n });\n\n if (node.children?.length && isExpanded(node.id)) {\n records.push(...flattenNodes(node.children, level + 1, node.id));\n }\n\n return records;\n }, []);\n\nconst visibleNodes = computed(() => flattenNodes(props.nodes));\nconst enabledNodes = computed(() => visibleNodes.value.filter((record) => !record.node.disabled));\n\nconst getInitialFocusedId = () => {\n const selectedId = selectedValues.value.find((value) =>\n visibleNodes.value.some((record) => record.node.id === value && !record.node.disabled),\n );\n\n if (selectedId) {\n return selectedId;\n }\n\n return enabledNodes.value[0]?.node.id ?? '';\n};\n\nconst focusedId = ref(getInitialFocusedId());\n\nconst registerItem = (id: string, element: HTMLElement) => {\n itemRefs.value.set(id, element);\n};\n\nconst unregisterItem = (id: string) => {\n itemRefs.value.delete(id);\n};\n\nconst focusItem = (id: string) => {\n nextTick(() => itemRefs.value.get(id)?.focus());\n};\n\nconst setFocusedId = (id: string, shouldFocus = false) => {\n focusedId.value = id;\n\n if (shouldFocus) {\n focusItem(id);\n }\n};\n\nconst getVisibleRecord = (id: string) =>\n visibleNodes.value.find((record) => record.node.id === id);\n\nconst focusBoundary = (position: 'first' | 'last') => {\n const target =\n position === 'first' ? enabledNodes.value[0] : enabledNodes.value[enabledNodes.value.length - 1];\n\n if (target) {\n setFocusedId(target.node.id, true);\n }\n};\n\nconst focusAdjacent = (direction: 1 | -1) => {\n const currentIndex = enabledNodes.value.findIndex((record) => record.node.id === focusedId.value);\n\n if (currentIndex === -1) {\n focusBoundary(direction === 1 ? 'first' : 'last');\n return;\n }\n\n const nextIndex = currentIndex + direction;\n\n if (nextIndex < 0 || nextIndex >= enabledNodes.value.length) {\n return;\n }\n\n setFocusedId(enabledNodes.value[nextIndex].node.id, true);\n};\n\nconst toggleExpanded = (id: string) => {\n const nextValues = isExpanded(id)\n ? expandedValues.value.filter((value) => value !== id)\n : [...expandedValues.value, id];\n\n updateExpanded(nextValues);\n};\n\nconst toggleSelected = (id: string) => {\n const record = getVisibleRecord(id);\n\n if (!record || record.node.disabled || props.disabled) {\n return;\n }\n\n if (props.selectionMode === 'multiple') {\n const nextValues = isSelected(id)\n ? selectedValues.value.filter((value) => value !== id)\n : [...selectedValues.value, id];\n\n updateSelection(nextValues);\n return;\n }\n\n updateSelection([id]);\n};\n\nconst onItemKeydown = (event: KeyboardEvent, id: string) => {\n const record = getVisibleRecord(id);\n\n if (!record || record.node.disabled || props.disabled) {\n return;\n }\n\n const hasChildren = Boolean(record.node.children?.length);\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n focusAdjacent(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n focusAdjacent(-1);\n break;\n case 'ArrowRight':\n event.preventDefault();\n\n if (hasChildren && !isExpanded(id)) {\n toggleExpanded(id);\n return;\n }\n\n if (hasChildren) {\n const firstChild = visibleNodes.value.find(\n (item) => item.parentId === id && !item.node.disabled,\n );\n\n if (firstChild) {\n setFocusedId(firstChild.node.id, true);\n }\n }\n\n break;\n case 'ArrowLeft':\n event.preventDefault();\n\n if (hasChildren && isExpanded(id)) {\n toggleExpanded(id);\n return;\n }\n\n if (record.parentId) {\n setFocusedId(record.parentId, true);\n }\n\n break;\n case 'Home':\n event.preventDefault();\n focusBoundary('first');\n break;\n case 'End':\n event.preventDefault();\n focusBoundary('last');\n break;\n default:\n if (isActivationKey(event)) {\n event.preventDefault();\n toggleSelected(id);\n }\n break;\n }\n};\n\nwatch(\n () => [visibleNodes.value, props.modelValue] as const,\n () => {\n const focusedRecord = visibleNodes.value.find(\n (record) => record.node.id === focusedId.value && !record.node.disabled,\n );\n\n if (!focusedRecord) {\n focusedId.value = getInitialFocusedId();\n }\n },\n { deep: true, immediate: true },\n);\n\nprovide(treeTreeViewInjectionKey, {\n baseId,\n disabled: computed(() => props.disabled),\n selectionMode: computed(() => props.selectionMode),\n focusedId,\n isExpanded,\n toggleExpanded,\n isSelected,\n toggleSelected,\n setFocusedId,\n onItemKeydown,\n registerItem,\n unregisterItem,\n});\n</script>\n\n<template>\n <div\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <ul\n v-if=\"nodes.length > 0\"\n v-bind=\"treeAttrs\"\n class=\"tree-tree-view__root\"\n role=\"tree\"\n :aria-multiselectable=\"selectionMode === 'multiple' || undefined\"\n >\n <TreeTreeViewItem\n v-for=\"node in nodes\"\n :key=\"node.id\"\n :node=\"node\"\n :level=\"1\"\n />\n </ul>\n\n <div\n v-else\n class=\"tree-tree-view__empty\"\n >\n {{ emptyText }}\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { getTreeIcon, treeIconDefaults } from '@treeui/icons';\nimport { computed, ref, useAttrs, watch } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport interface TreeStepItem {\n label: string;\n value: string;\n description?: string;\n meta?: string;\n status?: TreeStepStatus;\n disabled?: boolean;\n}\n\nconst _treeStepStatuses = ['complete', 'current', 'upcoming', 'error'] as const;\nconst _treeStepOrientations = ['horizontal', 'vertical'] as const;\n\nexport type TreeStepStatus = (typeof _treeStepStatuses)[number];\nexport type TreeStepOrientation = (typeof _treeStepOrientations)[number];\n\nconst CheckIcon = getTreeIcon('check');\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string;\n defaultValue?: string;\n items?: TreeStepItem[];\n size?: TreeSize;\n orientation?: TreeStepOrientation;\n interactive?: boolean;\n }>(),\n {\n modelValue: undefined,\n defaultValue: '',\n items: () => [],\n size: 'md',\n orientation: 'horizontal',\n interactive: false,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n}>();\n\ndefineSlots<{\n item?: (props: {\n item: TreeStepItem;\n index: number;\n status: TreeStepStatus;\n current: boolean;\n }) => unknown;\n}>();\n\nconst attrs = useAttrs();\nconst internalValue = ref(props.defaultValue || props.items[0]?.value || '');\n\nconst activeValue = computed(() => props.modelValue ?? internalValue.value);\n\nconst currentIndex = computed(() => {\n const activeIndex = props.items.findIndex((item) => item.value === activeValue.value);\n return activeIndex >= 0 ? activeIndex : 0;\n});\n\nconst rootClasses = computed(() => [\n 'tree-steps',\n `tree-steps--${props.size}`,\n `tree-steps--${props.orientation}`,\n {\n 'is-interactive': props.interactive,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst resolveStatus = (item: TreeStepItem, index: number): TreeStepStatus => {\n if (item.status) {\n return item.status;\n }\n\n if (index < currentIndex.value) {\n return 'complete';\n }\n\n if (index === currentIndex.value) {\n return 'current';\n }\n\n return 'upcoming';\n};\n\nconst selectStep = (item: TreeStepItem) => {\n if (!props.interactive || item.disabled) {\n return;\n }\n\n if (props.modelValue === undefined) {\n internalValue.value = item.value;\n }\n\n emit('update:modelValue', item.value);\n};\n\nwatch(\n () => props.items,\n (items) => {\n const hasCurrentItem = items.some((item) => item.value === activeValue.value);\n\n if (!hasCurrentItem && items[0] && props.modelValue === undefined) {\n internalValue.value = items[0].value;\n }\n },\n { deep: true },\n);\n</script>\n\n<template>\n <ol\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <li\n v-for=\"(item, index) in items\"\n :key=\"item.value\"\n class=\"tree-steps__item\"\n :class=\"`is-${resolveStatus(item, index)}`\"\n >\n <button\n type=\"button\"\n class=\"tree-steps__button\"\n :class=\"{\n 'is-current': resolveStatus(item, index) === 'current',\n 'is-disabled': item.disabled,\n }\"\n :disabled=\"!interactive || item.disabled\"\n :aria-current=\"resolveStatus(item, index) === 'current' ? 'step' : undefined\"\n @click=\"selectStep(item)\"\n >\n <slot\n name=\"item\"\n :item=\"item\"\n :index=\"index\"\n :status=\"resolveStatus(item, index)\"\n :current=\"resolveStatus(item, index) === 'current'\"\n >\n <span\n class=\"tree-steps__indicator\"\n aria-hidden=\"true\"\n >\n <CheckIcon\n v-if=\"resolveStatus(item, index) === 'complete'\"\n v-bind=\"treeIconDefaults\"\n />\n <span v-else-if=\"resolveStatus(item, index) === 'error'\">!</span>\n <span v-else>{{ index + 1 }}</span>\n </span>\n\n <span class=\"tree-steps__copy\">\n <span class=\"tree-steps__label\">{{ item.label }}</span>\n <span\n v-if=\"item.description\"\n class=\"tree-steps__description\"\n >\n {{ item.description }}\n </span>\n </span>\n\n <span\n v-if=\"item.meta\"\n class=\"tree-steps__meta\"\n >\n {{ item.meta }}\n </span>\n </slot>\n </button>\n </li>\n </ol>\n</template>\n","<script setup lang=\"ts\">\nimport { createId, getNextEnabledIndex, isActivationKey } from '@treeui/utils';\nimport { computed, nextTick, ref, useAttrs, watch, type ComponentPublicInstance } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport interface TreeToggleGroupOption {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\nconst _treeToggleGroupSelectionModes = ['single', 'multiple'] as const;\nconst _treeToggleGroupVariants = ['outline', 'soft', 'solid'] as const;\n\nexport type TreeToggleGroupSelectionMode = (typeof _treeToggleGroupSelectionModes)[number];\nexport type TreeToggleGroupVariant = (typeof _treeToggleGroupVariants)[number];\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string | string[];\n options?: TreeToggleGroupOption[];\n selectionMode?: TreeToggleGroupSelectionMode;\n size?: TreeSize;\n variant?: TreeToggleGroupVariant;\n disabled?: boolean;\n }>(),\n {\n modelValue: undefined,\n options: () => [],\n selectionMode: 'single',\n size: 'md',\n variant: 'outline',\n disabled: false,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | string[] | undefined];\n}>();\n\ndefineSlots<{\n option?: (props: { option: TreeToggleGroupOption; selected: boolean }) => unknown;\n}>();\n\nconst attrs = useAttrs();\nconst baseId = createId('tree-toggle-group');\nconst buttonRefs = ref<Map<string, HTMLButtonElement>>(new Map());\n\nconst normalizedValues = computed(() =>\n props.selectionMode === 'multiple'\n ? Array.isArray(props.modelValue)\n ? props.modelValue\n : []\n : typeof props.modelValue === 'string' && props.modelValue\n ? [props.modelValue]\n : [],\n);\n\nconst getInitialFocusedIndex = () => {\n const selectedIndex = props.options.findIndex((option) =>\n normalizedValues.value.includes(option.value) && !option.disabled,\n );\n\n if (selectedIndex >= 0) {\n return selectedIndex;\n }\n\n return props.options.findIndex((option) => !option.disabled);\n};\n\nconst focusedIndex = ref(getInitialFocusedIndex());\n\nconst rootClasses = computed(() => [\n 'tree-toggle-group',\n `tree-toggle-group--${props.size}`,\n `tree-toggle-group--${props.variant}`,\n `tree-toggle-group--${props.selectionMode}`,\n {\n 'is-disabled': props.disabled,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst isSelected = (value: string) => normalizedValues.value.includes(value);\n\nconst setButtonRef = (element: Element | ComponentPublicInstance | null, value: string) => {\n const resolvedElement =\n element instanceof HTMLButtonElement\n ? element\n : element && '$el' in element && element.$el instanceof HTMLButtonElement\n ? element.$el\n : null;\n\n if (resolvedElement instanceof HTMLButtonElement) {\n buttonRefs.value.set(value, resolvedElement);\n } else {\n buttonRefs.value.delete(value);\n }\n};\n\nconst focusOption = (index: number) => {\n const option = props.options[index];\n\n if (!option) {\n return;\n }\n\n focusedIndex.value = index;\n nextTick(() => buttonRefs.value.get(option.value)?.focus());\n};\n\nconst selectValue = (value: string) => {\n const option = props.options.find((item) => item.value === value);\n\n if (!option || option.disabled || props.disabled) {\n return;\n }\n\n if (props.selectionMode === 'multiple') {\n const nextValues = isSelected(value)\n ? normalizedValues.value.filter((item) => item !== value)\n : [...normalizedValues.value, value];\n\n emit('update:modelValue', nextValues);\n return;\n }\n\n emit('update:modelValue', value);\n};\n\nconst onOptionKeydown = (event: KeyboardEvent, index: number) => {\n if (props.disabled) {\n return;\n }\n\n if (event.key === 'Home') {\n event.preventDefault();\n const firstIndex = props.options.findIndex((option) => !option.disabled);\n\n if (firstIndex >= 0) {\n focusOption(firstIndex);\n\n if (props.selectionMode === 'single') {\n selectValue(props.options[firstIndex].value);\n }\n }\n\n return;\n }\n\n if (event.key === 'End') {\n event.preventDefault();\n const lastIndex = [...props.options].reverse().findIndex((option) => !option.disabled);\n\n if (lastIndex >= 0) {\n const resolvedIndex = props.options.length - 1 - lastIndex;\n focusOption(resolvedIndex);\n\n if (props.selectionMode === 'single') {\n selectValue(props.options[resolvedIndex].value);\n }\n }\n\n return;\n }\n\n if (\n event.key === 'ArrowRight' ||\n event.key === 'ArrowDown' ||\n event.key === 'ArrowLeft' ||\n event.key === 'ArrowUp'\n ) {\n event.preventDefault();\n const direction = event.key === 'ArrowRight' || event.key === 'ArrowDown' ? 1 : -1;\n const nextIndex = getNextEnabledIndex(index, props.options, direction as 1 | -1);\n\n if (nextIndex >= 0) {\n focusOption(nextIndex);\n\n if (props.selectionMode === 'single') {\n selectValue(props.options[nextIndex].value);\n }\n }\n\n return;\n }\n\n if (isActivationKey(event)) {\n event.preventDefault();\n selectValue(props.options[index].value);\n }\n};\n\nconst getTabIndex = (index: number) => (focusedIndex.value === index ? 0 : -1);\n\nwatch(\n () => [props.modelValue, props.options] as const,\n () => {\n const nextIndex = getInitialFocusedIndex();\n focusedIndex.value = nextIndex >= 0 ? nextIndex : -1;\n },\n { deep: true },\n);\n</script>\n\n<template>\n <div\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :role=\"selectionMode === 'single' ? 'radiogroup' : 'group'\"\n >\n <button\n v-for=\"(option, index) in options\"\n :id=\"`${baseId}-${option.value}`\"\n :ref=\"(element) => setButtonRef(element, option.value)\"\n :key=\"option.value\"\n type=\"button\"\n class=\"tree-toggle-group__item\"\n :class=\"{\n 'is-selected': isSelected(option.value),\n 'is-disabled': disabled || option.disabled,\n }\"\n :role=\"selectionMode === 'single' ? 'radio' : undefined\"\n :aria-checked=\"selectionMode === 'single' ? isSelected(option.value) : undefined\"\n :aria-pressed=\"selectionMode === 'multiple' ? isSelected(option.value) : undefined\"\n :tabindex=\"option.disabled || disabled ? -1 : getTabIndex(index)\"\n :disabled=\"disabled || option.disabled\"\n @click=\"selectValue(option.value)\"\n @keydown=\"onOptionKeydown($event, index)\"\n @focus=\"focusedIndex = index\"\n >\n <slot\n name=\"option\"\n :option=\"option\"\n :selected=\"isSelected(option.value)\"\n >\n {{ option.label }}\n </slot>\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs, ref, watch, nextTick } from 'vue';\nimport type { TreeSize } from '../types/contracts';\nimport TreeSpinner from './TreeSpinner.vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string;\n size?: TreeSize;\n disabled?: boolean;\n loading?: boolean;\n invalid?: boolean;\n placeholder?: string;\n rows?: number;\n autoGrow?: boolean;\n }>(),\n {\n modelValue: '',\n size: 'md',\n disabled: false,\n loading: false,\n invalid: false,\n placeholder: '',\n rows: 3,\n autoGrow: false,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n}>();\n\nconst attrs = useAttrs();\nconst textareaRef = ref<HTMLTextAreaElement | null>(null);\n\nconst rootClasses = computed(() => [\n 'tree-textarea',\n `tree-textarea--${props.size}`,\n {\n 'is-disabled': props.disabled,\n 'is-invalid': props.invalid,\n 'is-loading': props.loading,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst textareaAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst stringValue = computed(() => `${props.modelValue ?? ''}`);\n\nconst onInput = (event: Event) => {\n emit('update:modelValue', (event.target as HTMLTextAreaElement).value);\n};\n\nconst adjustHeight = () => {\n const el = textareaRef.value;\n if (!el || !props.autoGrow) return;\n el.style.height = 'auto';\n el.style.height = `${el.scrollHeight}px`;\n};\n\nwatch(\n () => props.modelValue,\n async () => {\n if (!props.autoGrow) return;\n await nextTick();\n adjustHeight();\n },\n);\n</script>\n\n<template>\n <label\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <textarea\n ref=\"textareaRef\"\n v-bind=\"textareaAttrs\"\n class=\"tree-textarea__field\"\n :value=\"stringValue\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :rows=\"rows\"\n :aria-invalid=\"invalid || undefined\"\n @input=\"onInput\"\n />\n <TreeSpinner\n v-if=\"loading\"\n size=\"sm\"\n label=\"Loading\"\n />\n </label>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nconst props = withDefaults(\n defineProps<{\n width?: string;\n height?: string;\n animation?: 'pulse' | 'wave' | 'none';\n }>(),\n {\n width: '100%',\n height: undefined,\n animation: 'pulse',\n },\n);\n\nconst classes = computed(() => [\n 'tree-skeleton',\n props.animation !== 'none' ? `tree-skeleton--${props.animation}` : '',\n]);\n\nconst style = computed(() => ({\n width: props.width,\n height: props.height,\n}));\n</script>\n\n<template>\n <span\n :class=\"classes\"\n :style=\"style\"\n aria-hidden=\"true\"\n >\n <slot />\n </span>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots } from 'vue';\nimport TreeSkeleton from './TreeSkeleton.vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst _treeStatTones = ['neutral', 'success', 'warning', 'danger', 'info'] as const;\nconst _treeStatTrendDirections = ['up', 'down', 'neutral'] as const;\n\nexport type TreeStatTone = (typeof _treeStatTones)[number];\nexport type TreeStatTrendDirection = (typeof _treeStatTrendDirections)[number];\n\nconst props = withDefaults(\n defineProps<{\n label?: string;\n value?: string | number;\n trend?: string;\n meta?: string;\n tone?: TreeStatTone;\n trendDirection?: TreeStatTrendDirection;\n loading?: boolean;\n }>(),\n {\n label: '',\n value: '',\n trend: '',\n meta: '',\n tone: 'neutral',\n trendDirection: 'neutral',\n loading: false,\n },\n);\n\ndefineSlots<{\n icon?: () => unknown;\n label?: () => unknown;\n value?: () => unknown;\n trend?: () => unknown;\n meta?: () => unknown;\n}>();\n\nconst attrs = useAttrs();\nconst slots = useSlots();\n\nconst rootClasses = computed(() => [\n 'tree-stat',\n `tree-stat--${props.tone}`,\n {\n 'has-icon': Boolean(slots.icon) && !props.loading,\n 'is-loading': props.loading,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst loadingAttrs = computed(() => ({\n ...rootAttrs.value,\n 'aria-busy': props.loading || undefined,\n}));\n\nconst hasValue = computed(() => props.value !== '' && props.value !== null && props.value !== undefined);\nconst hasTrend = computed(() => Boolean(slots.trend || props.trend));\nconst hasMeta = computed(() => Boolean(slots.meta || props.meta));\nconst hasLabel = computed(() => Boolean(slots.label || props.label));\n\nconst trendSymbol = computed(() => {\n if (props.trendDirection === 'up') {\n return '+';\n }\n\n if (props.trendDirection === 'down') {\n return '-';\n }\n\n return '•';\n});\n</script>\n\n<template>\n <div\n v-bind=\"loadingAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <template v-if=\"loading\">\n <div class=\"tree-stat__loading\">\n <TreeSkeleton class=\"tree-stat__loading-label\" />\n <TreeSkeleton class=\"tree-stat__loading-value\" />\n <TreeSkeleton class=\"tree-stat__loading-trend\" />\n </div>\n </template>\n <template v-else>\n <div\n v-if=\"$slots.icon\"\n class=\"tree-stat__icon\"\n >\n <slot name=\"icon\" />\n </div>\n\n <div class=\"tree-stat__body\">\n <div\n v-if=\"hasLabel || hasMeta\"\n class=\"tree-stat__topline\"\n >\n <p\n v-if=\"hasLabel\"\n class=\"tree-stat__label\"\n >\n <slot name=\"label\">\n {{ label }}\n </slot>\n </p>\n\n <p\n v-if=\"hasMeta\"\n class=\"tree-stat__meta\"\n >\n <slot name=\"meta\">\n {{ meta }}\n </slot>\n </p>\n </div>\n\n <div class=\"tree-stat__content\">\n <p\n v-if=\"hasValue || $slots.value\"\n class=\"tree-stat__value\"\n >\n <slot name=\"value\">\n {{ value }}\n </slot>\n </p>\n\n <p\n v-if=\"hasTrend\"\n class=\"tree-stat__trend\"\n >\n <slot name=\"trend\">\n <span\n class=\"tree-stat__trend-indicator\"\n aria-hidden=\"true\"\n >\n {{ trendSymbol }}\n </span>\n <span>{{ trend }}</span>\n </slot>\n </p>\n </div>\n </div>\n </template>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: boolean;\n size?: TreeSize;\n disabled?: boolean;\n invalid?: boolean;\n }>(),\n {\n modelValue: false,\n size: 'md',\n disabled: false,\n invalid: false,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean];\n}>();\n\nconst attrs = useAttrs();\n\nconst rootClasses = computed(() => [\n 'tree-switch',\n `tree-switch--${props.size}`,\n {\n 'is-checked': props.modelValue,\n 'is-disabled': props.disabled,\n 'is-invalid': props.invalid,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst inputAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst onChange = () => {\n emit('update:modelValue', !props.modelValue);\n};\n</script>\n\n<template>\n <label\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <input\n v-bind=\"inputAttrs\"\n type=\"checkbox\"\n role=\"switch\"\n class=\"tree-switch__input\"\n :checked=\"modelValue\"\n :disabled=\"disabled\"\n :aria-checked=\"modelValue\"\n :aria-invalid=\"invalid || undefined\"\n @change=\"onChange\"\n >\n <span\n class=\"tree-switch__track\"\n aria-hidden=\"true\"\n >\n <span class=\"tree-switch__thumb\" />\n </span>\n <span\n v-if=\"$slots.default\"\n class=\"tree-switch__label\"\n >\n <slot />\n </span>\n </label>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, toRef, useAttrs } from 'vue';\nimport { createId } from '@treeui/utils';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeTooltipSide } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n content?: string;\n side?: TreeTooltipSide;\n delay?: number;\n id?: string;\n }>(),\n {\n defaultOpen: false,\n disabled: false,\n content: '',\n side: 'top',\n delay: 80,\n id: undefined,\n },\n);\n\nconst emit = defineEmits<{\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n}>();\n\nconst attrs = useAttrs();\nconst contentId = props.id ?? createId('tree-tooltip');\nconst triggerAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\nconst rootClasses = computed(() => ['tree-tooltip', attrs.class]);\nconst rootStyle = computed(() => attrs.style);\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nlet openTimer: ReturnType<typeof setTimeout> | undefined;\n\nconst clearOpenTimer = () => {\n if (openTimer) {\n clearTimeout(openTimer);\n openTimer = undefined;\n }\n};\n\nconst show = (immediate = false) => {\n if (props.disabled) {\n return;\n }\n\n clearOpenTimer();\n\n if (immediate) {\n setValue(true);\n return;\n }\n\n openTimer = setTimeout(() => {\n setValue(true);\n }, props.delay);\n};\n\nconst showOnFocus = () => {\n show(true);\n};\n\nconst showOnPointer = () => {\n show();\n};\n\nconst hide = () => {\n clearOpenTimer();\n setValue(false);\n};\n\nconst tooltipClasses = computed(() => [\n 'tree-tooltip__content',\n `tree-tooltip__content--${props.side}`,\n]);\n\nonBeforeUnmount(clearOpenTimer);\n</script>\n\n<template>\n <span\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n @mouseenter=\"showOnPointer\"\n @mouseleave=\"hide\"\n @focus.capture=\"showOnFocus\"\n @blur.capture=\"hide\"\n >\n <span\n class=\"tree-tooltip__trigger\"\n :aria-describedby=\"isOpen ? contentId : undefined\"\n v-bind=\"triggerAttrs\"\n >\n <slot name=\"trigger\">\n <slot />\n </slot>\n </span>\n <transition name=\"tree-fade\">\n <span\n v-if=\"isOpen && !disabled\"\n :id=\"contentId\"\n role=\"tooltip\"\n :class=\"tooltipClasses\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <slot name=\"content\">\n {{ content }}\n </slot>\n </span>\n </transition>\n </span>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n label?: string;\n htmlFor?: string;\n error?: string;\n hint?: string;\n required?: boolean;\n disabled?: boolean;\n size?: TreeSize;\n }>(),\n {\n label: undefined,\n htmlFor: undefined,\n error: undefined,\n hint: undefined,\n required: false,\n disabled: false,\n size: 'md',\n },\n);\n\nconst attrs = useAttrs();\n\nconst hasError = computed(() => !!props.error || !!slots.error);\n\nconst slots = defineSlots<{\n default?: (props: Record<string, never>) => unknown;\n label?: (props: Record<string, never>) => unknown;\n error?: (props: Record<string, never>) => unknown;\n hint?: (props: Record<string, never>) => unknown;\n}>();\n\nconst rootClasses = computed(() => [\n 'tree-form-field',\n `tree-form-field--${props.size}`,\n {\n 'is-disabled': props.disabled,\n 'is-invalid': hasError.value,\n 'is-required': props.required,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst fieldAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <div\n v-bind=\"fieldAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <label\n v-if=\"label || $slots.label\"\n class=\"tree-form-field__label\"\n :for=\"htmlFor\"\n >\n <slot name=\"label\">{{ label }}</slot>\n <span\n v-if=\"required\"\n class=\"tree-form-field__required\"\n aria-hidden=\"true\"\n >*</span>\n </label>\n\n <div class=\"tree-form-field__control\">\n <slot />\n </div>\n\n <p\n v-if=\"hasError\"\n class=\"tree-form-field__error\"\n role=\"alert\"\n >\n <slot name=\"error\">\n {{ error }}\n </slot>\n </p>\n\n <p\n v-else-if=\"hint || $slots.hint\"\n class=\"tree-form-field__hint\"\n >\n <slot name=\"hint\">\n {{ hint }}\n </slot>\n </p>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\nconst props = withDefaults(\n defineProps<{\n /** Current active page (1-based) */\n modelValue?: number;\n /** Total number of pages */\n totalPages: number;\n /** Number of sibling pages shown around the current page */\n siblings?: number;\n /** Size variant */\n size?: TreeSize;\n /** Disable all controls */\n disabled?: boolean;\n /** Accessible label for the nav element */\n label?: string;\n }>(),\n {\n modelValue: 1,\n siblings: 1,\n size: 'md',\n disabled: false,\n label: 'Pagination',\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [page: number];\n}>();\n\ndefineSlots<{\n previous?: (props: Record<string, never>) => unknown;\n next?: (props: Record<string, never>) => unknown;\n}>();\n\nconst currentPage = computed(() =>\n Math.min(Math.max(1, props.modelValue), props.totalPages),\n);\n\nconst pages = computed(() => {\n const total = props.totalPages;\n const current = currentPage.value;\n const siblings = props.siblings;\n const items: (number | 'ellipsis')[] = [];\n\n const rangeStart = Math.max(2, current - siblings);\n const rangeEnd = Math.min(total - 1, current + siblings);\n\n // Always show page 1\n items.push(1);\n\n // Leading ellipsis\n if (rangeStart > 2) {\n items.push('ellipsis');\n }\n\n // Sibling pages\n for (let i = rangeStart; i <= rangeEnd; i++) {\n items.push(i);\n }\n\n // Trailing ellipsis\n if (rangeEnd < total - 1) {\n items.push('ellipsis');\n }\n\n // Always show last page (if more than 1 page)\n if (total > 1) {\n items.push(total);\n }\n\n return items;\n});\n\nconst classes = computed(() => [\n 'tree-pagination',\n `tree-pagination--${props.size}`,\n { 'is-disabled': props.disabled },\n]);\n\nfunction goToPage(page: number) {\n if (props.disabled) return;\n const clamped = Math.min(Math.max(1, page), props.totalPages);\n if (clamped !== currentPage.value) {\n emit('update:modelValue', clamped);\n }\n}\n\nfunction onKeydown(event: KeyboardEvent, page: number) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n goToPage(page);\n }\n}\n</script>\n\n<template>\n <nav\n :class=\"classes\"\n :aria-label=\"label\"\n >\n <ul class=\"tree-pagination__list\">\n <!-- Previous button -->\n <li class=\"tree-pagination__item\">\n <button\n class=\"tree-pagination__button tree-pagination__button--prev\"\n type=\"button\"\n :disabled=\"disabled || currentPage <= 1\"\n :aria-label=\"'Go to previous page'\"\n @click=\"goToPage(currentPage - 1)\"\n >\n <slot name=\"previous\">\n <svg\n class=\"tree-pagination__icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M10 12L6 8l4-4\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </slot>\n </button>\n </li>\n\n <!-- Page items -->\n <li\n v-for=\"(page, index) in pages\"\n :key=\"page === 'ellipsis' ? `ellipsis-${index}` : page\"\n class=\"tree-pagination__item\"\n >\n <span\n v-if=\"page === 'ellipsis'\"\n class=\"tree-pagination__ellipsis\"\n aria-hidden=\"true\"\n >\n …\n </span>\n <button\n v-else\n class=\"tree-pagination__button\"\n :class=\"{ 'is-active': page === currentPage }\"\n type=\"button\"\n :disabled=\"disabled\"\n :aria-label=\"`Go to page ${page}`\"\n :aria-current=\"page === currentPage ? 'page' : undefined\"\n @click=\"goToPage(page)\"\n @keydown=\"onKeydown($event, page)\"\n >\n {{ page }}\n </button>\n </li>\n\n <!-- Next button -->\n <li class=\"tree-pagination__item\">\n <button\n class=\"tree-pagination__button tree-pagination__button--next\"\n type=\"button\"\n :disabled=\"disabled || currentPage >= totalPages\"\n :aria-label=\"'Go to next page'\"\n @click=\"goToPage(currentPage + 1)\"\n >\n <slot name=\"next\">\n <svg\n class=\"tree-pagination__icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M6 4l4 4-4 4\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </slot>\n </button>\n </li>\n </ul>\n </nav>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, ref, toRef, useAttrs, watch } from 'vue';\nimport { createId, focusFirst, isEscapeKey } from '@treeui/utils';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeTooltipSide } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n side?: TreeTooltipSide;\n align?: 'start' | 'center' | 'end';\n id?: string;\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n side: 'bottom',\n align: 'center',\n id: undefined,\n },\n);\n\nconst emit = defineEmits<{\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n}>();\n\ndefineSlots<{\n trigger(props: { isOpen: boolean }): unknown;\n default(): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst contentId = props.id ?? createId('tree-popover');\nconst rootRef = ref<HTMLElement | null>(null);\nconst triggerRef = ref<HTMLButtonElement | null>(null);\nconst contentRef = ref<HTMLElement | null>(null);\n\nconst triggerAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst rootClasses = computed(() => [\n 'tree-popover',\n {\n 'is-open': isOpen.value,\n 'is-disabled': props.disabled,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst contentClasses = computed(() => [\n 'tree-popover__content',\n `tree-popover__content--${props.side}`,\n `tree-popover__content--align-${props.align}`,\n]);\n\nconst openPopover = () => {\n if (props.disabled) return;\n setValue(true);\n nextTick(() => {\n if (contentRef.value) {\n if (!focusFirst(contentRef.value)) {\n contentRef.value.focus();\n }\n }\n });\n};\n\nconst closePopover = (restoreFocus = false) => {\n setValue(false);\n if (restoreFocus) {\n nextTick(() => triggerRef.value?.focus());\n }\n};\n\nconst togglePopover = () => {\n if (isOpen.value) {\n closePopover();\n } else {\n openPopover();\n }\n};\n\nconst onTriggerKeydown = (event: KeyboardEvent) => {\n if (props.disabled) return;\n\n if (isEscapeKey(event) && isOpen.value) {\n event.preventDefault();\n closePopover();\n }\n};\n\nconst onContentKeydown = (event: KeyboardEvent) => {\n if (isEscapeKey(event)) {\n event.preventDefault();\n closePopover(true);\n }\n};\n\nconst onDocumentPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) return;\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (rootRef.value?.contains(target)) return;\n closePopover();\n};\n\nwatch(isOpen, (value) => {\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n } else {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n }\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <div\n class=\"tree-popover__anchor\"\n @click=\"togglePopover\"\n @keydown=\"onTriggerKeydown\"\n >\n <slot\n name=\"trigger\"\n :is-open=\"isOpen\"\n >\n <button\n ref=\"triggerRef\"\n type=\"button\"\n class=\"tree-popover__trigger\"\n :disabled=\"disabled\"\n :aria-expanded=\"isOpen\"\n :aria-controls=\"isOpen ? contentId : undefined\"\n aria-haspopup=\"dialog\"\n v-bind=\"triggerAttrs\"\n />\n </slot>\n </div>\n <transition name=\"tree-popover-fade\">\n <div\n v-if=\"isOpen && !disabled\"\n :id=\"contentId\"\n ref=\"contentRef\"\n role=\"dialog\"\n :class=\"contentClasses\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n tabindex=\"-1\"\n @keydown=\"onContentKeydown\"\n >\n <slot />\n </div>\n </transition>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\nconst props = withDefaults(\n defineProps<{\n /** Current progress value (0–100). Omit for indeterminate. */\n value?: number;\n /** Maximum value. Defaults to 100. */\n max?: number;\n /** Size variant */\n size?: TreeSize;\n /** Accessible label */\n label?: string;\n }>(),\n {\n value: undefined,\n max: 100,\n size: 'md',\n label: 'Progress',\n },\n);\n\nconst isIndeterminate = computed(() => props.value === undefined || props.value === null);\n\nconst percentage = computed(() => {\n if (isIndeterminate.value) return 0;\n return Math.min(100, Math.max(0, (props.value! / props.max) * 100));\n});\n\nconst classes = computed(() => [\n 'tree-progress',\n `tree-progress--${props.size}`,\n { 'tree-progress--indeterminate': isIndeterminate.value },\n]);\n</script>\n\n<template>\n <div\n :class=\"classes\"\n role=\"progressbar\"\n :aria-valuenow=\"isIndeterminate ? undefined : percentage\"\n :aria-valuemin=\"0\"\n :aria-valuemax=\"100\"\n :aria-label=\"label\"\n >\n <div class=\"tree-progress__track\">\n <div\n class=\"tree-progress__fill\"\n :style=\"isIndeterminate ? undefined : { width: `${percentage}%` }\"\n />\n </div>\n\n <span class=\"tree-visually-hidden\">{{ label }}</span>\n </div>\n</template>\n","import type { InjectionKey, Ref } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\nexport type TabsActivationMode = 'automatic' | 'manual';\n\nexport interface TabsContext {\n activeValue: Ref<string>;\n setActiveValue: (value: string) => void;\n size: Ref<TreeSize>;\n activationMode: Ref<TabsActivationMode>;\n disabled: Ref<boolean>;\n baseId: string;\n registerTab: (value: string) => void;\n unregisterTab: (value: string) => void;\n getTabValues: () => string[];\n isTabDisabled: (value: string) => boolean;\n setTabDisabled: (value: string, disabled: boolean) => void;\n}\n\nexport const TABS_INJECTION_KEY: InjectionKey<TabsContext> = Symbol('TreeTabs');\n","<script setup lang=\"ts\">\nimport { createId } from '@treeui/utils';\nimport { computed, provide, reactive, ref, toRef, watch } from 'vue';\nimport type { TreeSize } from '../types/contracts';\nimport type { TabsActivationMode } from './tabs-context';\nimport { TABS_INJECTION_KEY } from './tabs-context';\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string;\n defaultValue?: string;\n size?: TreeSize;\n activationMode?: TabsActivationMode;\n disabled?: boolean;\n }>(),\n {\n modelValue: undefined,\n defaultValue: '',\n size: 'md',\n activationMode: 'automatic',\n disabled: false,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n}>();\n\nconst baseId = createId('tree-tabs');\nconst internalValue = ref(props.defaultValue);\nconst tabOrder = ref<string[]>([]);\nconst disabledTabs: Record<string, boolean> = reactive({});\n\nconst activeValue = computed(() => props.modelValue ?? internalValue.value);\n\nconst setActiveValue = (value: string) => {\n if (value === activeValue.value) return;\n if (props.modelValue === undefined) {\n internalValue.value = value;\n }\n emit('update:modelValue', value);\n};\n\nconst registerTab = (value: string) => {\n if (!tabOrder.value.includes(value)) {\n tabOrder.value.push(value);\n }\n};\n\nconst unregisterTab = (value: string) => {\n const idx = tabOrder.value.indexOf(value);\n if (idx >= 0) tabOrder.value.splice(idx, 1);\n delete disabledTabs[value];\n};\n\nconst getTabValues = () => tabOrder.value;\n\nconst isTabDisabled = (value: string) => props.disabled || !!disabledTabs[value];\n\nconst setTabDisabled = (value: string, disabled: boolean) => {\n if (disabled) {\n disabledTabs[value] = true;\n } else {\n delete disabledTabs[value];\n }\n};\n\nwatch(\n () => props.modelValue,\n (val) => {\n if (val !== undefined) {\n internalValue.value = val;\n }\n },\n);\n\nprovide(TABS_INJECTION_KEY, {\n activeValue,\n setActiveValue,\n size: toRef(props, 'size'),\n activationMode: toRef(props, 'activationMode'),\n disabled: toRef(props, 'disabled'),\n baseId,\n registerTab,\n unregisterTab,\n getTabValues,\n isTabDisabled,\n setTabDisabled,\n});\n\nconst rootClasses = computed(() => [\n 'tree-tabs',\n `tree-tabs--${props.size}`,\n]);\n</script>\n\n<template>\n <div :class=\"rootClasses\">\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { isActivationKey } from '@treeui/utils';\nimport { computed, inject, ref } from 'vue';\nimport { TABS_INJECTION_KEY } from './tabs-context';\n\nconst ctx = inject(TABS_INJECTION_KEY);\nif (!ctx) {\n throw new Error('TTabList must be used inside TTabs');\n}\n\nconst listRef = ref<HTMLElement | null>(null);\n\nconst getAllTabElements = (): HTMLElement[] => {\n if (!listRef.value) return [];\n return Array.from(\n listRef.value.querySelectorAll<HTMLElement>('[role=\"tab\"]'),\n );\n};\n\nconst getEnabledTabElements = (): HTMLElement[] => {\n return getAllTabElements().filter((el) => {\n const value = el.dataset.tabValue;\n return value ? !ctx.isTabDisabled(value) : false;\n });\n};\n\nconst moveFocus = (direction: 1 | -1) => {\n const tabs = getEnabledTabElements();\n if (!tabs.length) return;\n\n const current = document.activeElement as HTMLElement;\n const currentIndex = tabs.indexOf(current);\n let nextIndex = currentIndex + direction;\n\n if (nextIndex < 0) nextIndex = tabs.length - 1;\n if (nextIndex >= tabs.length) nextIndex = 0;\n\n const nextTab = tabs[nextIndex];\n nextTab.focus();\n\n if (ctx.activationMode.value === 'automatic') {\n const value = nextTab.dataset.tabValue;\n if (value) ctx.setActiveValue(value);\n }\n};\n\nconst focusFirst = () => {\n const tabs = getEnabledTabElements();\n if (!tabs.length) return;\n tabs[0].focus();\n if (ctx.activationMode.value === 'automatic') {\n const value = tabs[0].dataset.tabValue;\n if (value) ctx.setActiveValue(value);\n }\n};\n\nconst focusLast = () => {\n const tabs = getEnabledTabElements();\n if (!tabs.length) return;\n const last = tabs[tabs.length - 1];\n last.focus();\n if (ctx.activationMode.value === 'automatic') {\n const value = last.dataset.tabValue;\n if (value) ctx.setActiveValue(value);\n }\n};\n\nconst onKeydown = (event: KeyboardEvent) => {\n switch (event.key) {\n case 'ArrowRight':\n event.preventDefault();\n moveFocus(1);\n break;\n case 'ArrowLeft':\n event.preventDefault();\n moveFocus(-1);\n break;\n case 'Home':\n event.preventDefault();\n focusFirst();\n break;\n case 'End':\n event.preventDefault();\n focusLast();\n break;\n default:\n if (ctx.activationMode.value === 'manual' && isActivationKey(event)) {\n event.preventDefault();\n const target = event.target as HTMLElement;\n const value = target.dataset?.tabValue;\n if (value) ctx.setActiveValue(value);\n }\n break;\n }\n};\n\nconst classes = computed(() => [\n 'tree-tabs__list',\n]);\n</script>\n\n<template>\n <div\n ref=\"listRef\"\n role=\"tablist\"\n aria-orientation=\"horizontal\"\n :class=\"classes\"\n @keydown=\"onKeydown\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount, onMounted, watch } from 'vue';\nimport { TABS_INJECTION_KEY } from './tabs-context';\n\nconst props = withDefaults(\n defineProps<{\n value: string;\n disabled?: boolean;\n }>(),\n {\n disabled: false,\n },\n);\n\nconst ctx = inject(TABS_INJECTION_KEY);\nif (!ctx) {\n throw new Error('TTab must be used inside TTabs');\n}\n\nonMounted(() => {\n ctx.registerTab(props.value);\n ctx.setTabDisabled(props.value, props.disabled);\n});\n\nwatch(\n () => props.disabled,\n (val) => ctx.setTabDisabled(props.value, val),\n);\n\nonBeforeUnmount(() => {\n ctx.unregisterTab(props.value);\n});\n\nconst isActive = computed(() => ctx.activeValue.value === props.value);\nconst isDisabled = computed(() => ctx.isTabDisabled(props.value));\nconst tabId = computed(() => `${ctx.baseId}-tab-${props.value}`);\nconst panelId = computed(() => `${ctx.baseId}-panel-${props.value}`);\n\nconst onClick = () => {\n if (isDisabled.value) return;\n ctx.setActiveValue(props.value);\n};\n\nconst classes = computed(() => [\n 'tree-tabs__tab',\n `tree-tabs__tab--${ctx.size.value}`,\n {\n 'is-active': isActive.value,\n 'is-disabled': isDisabled.value,\n },\n]);\n</script>\n\n<template>\n <button\n :id=\"tabId\"\n role=\"tab\"\n type=\"button\"\n :class=\"classes\"\n :aria-selected=\"isActive\"\n :aria-controls=\"panelId\"\n :tabindex=\"isActive ? 0 : -1\"\n :disabled=\"isDisabled || undefined\"\n :data-tab-value=\"value\"\n @click=\"onClick\"\n >\n <slot />\n </button>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject } from 'vue';\nimport { TABS_INJECTION_KEY } from './tabs-context';\n\nconst props = defineProps<{\n value: string;\n}>();\n\nconst ctx = inject(TABS_INJECTION_KEY);\nif (!ctx) {\n throw new Error('TTabPanel must be used inside TTabs');\n}\n\nconst isActive = computed(() => ctx.activeValue.value === props.value);\nconst panelId = computed(() => `${ctx.baseId}-panel-${props.value}`);\nconst tabId = computed(() => `${ctx.baseId}-tab-${props.value}`);\n</script>\n\n<template>\n <div\n v-if=\"isActive\"\n :id=\"panelId\"\n role=\"tabpanel\"\n :aria-labelledby=\"tabId\"\n tabindex=\"0\"\n class=\"tree-tabs__panel\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { createId } from '@treeui/utils';\nimport { getTreeIcon, treeIconDefaults } from '@treeui/icons';\nimport { computed } from 'vue';\nimport type { ToastItem } from '../composables/useToast';\n\nconst XIcon = getTreeIcon('x');\n\nconst iconMap = {\n info: getTreeIcon('info'),\n success: getTreeIcon('check'),\n warning: getTreeIcon('alert-circle'),\n danger: getTreeIcon('alert-circle'),\n} as const;\n\nconst props = withDefaults(\n defineProps<{\n toast: ToastItem;\n }>(),\n {},\n);\n\nconst emit = defineEmits<{\n close: [id: string];\n}>();\n\nconst toastId = createId('tree-toast-item');\nconst titleId = `${toastId}-title`;\nconst descriptionId = `${toastId}-description`;\n\nconst classes = computed(() => [\n 'tree-toast',\n `tree-toast--${props.toast.variant}`,\n]);\n\nconst StatusIcon = computed(() => iconMap[props.toast.variant]);\n\nfunction handleClose() {\n emit('close', props.toast.id);\n}\n</script>\n\n<template>\n <div\n :class=\"classes\"\n role=\"status\"\n :aria-labelledby=\"titleId\"\n :aria-describedby=\"toast.description ? descriptionId : undefined\"\n >\n <span\n class=\"tree-toast__icon\"\n aria-hidden=\"true\"\n >\n <StatusIcon\n v-bind=\"treeIconDefaults\"\n :size=\"18\"\n />\n </span>\n <div class=\"tree-toast__content\">\n <p\n :id=\"titleId\"\n class=\"tree-toast__title\"\n >\n {{ toast.title }}\n </p>\n <p\n v-if=\"toast.description\"\n :id=\"descriptionId\"\n class=\"tree-toast__description\"\n >\n {{ toast.description }}\n </p>\n </div>\n <button\n v-if=\"toast.closable\"\n type=\"button\"\n class=\"tree-toast__close\"\n aria-label=\"Dismiss notification\"\n @click=\"handleClose\"\n >\n <XIcon\n v-bind=\"treeIconDefaults\"\n :size=\"16\"\n />\n </button>\n </div>\n</template>\n","import { readonly, ref } from 'vue';\nimport { createId } from '@treeui/utils';\n\nexport type ToastVariant = 'info' | 'success' | 'warning' | 'danger';\n\nexport type ToastPosition =\n | 'top-right'\n | 'top-left'\n | 'bottom-right'\n | 'bottom-left'\n | 'top-center'\n | 'bottom-center';\n\nexport interface ToastOptions {\n title: string;\n description?: string;\n variant?: ToastVariant;\n duration?: number;\n closable?: boolean;\n}\n\nexport interface ToastItem extends Required<Pick<ToastOptions, 'title' | 'variant' | 'duration' | 'closable'>> {\n id: string;\n description?: string;\n}\n\nconst toasts = ref<ToastItem[]>([]);\nconst timers = new Map<string, ReturnType<typeof setTimeout>>();\n\nfunction add(options: ToastOptions): string {\n const id = createId('tree-toast');\n\n const item: ToastItem = {\n id,\n title: options.title,\n description: options.description,\n variant: options.variant ?? 'info',\n duration: options.duration ?? 5000,\n closable: options.closable ?? true,\n };\n\n toasts.value = [...toasts.value, item];\n\n if (item.duration > 0) {\n const timer = setTimeout(() => {\n remove(id);\n }, item.duration);\n timers.set(id, timer);\n }\n\n return id;\n}\n\nfunction remove(id: string) {\n const timer = timers.get(id);\n\n if (timer) {\n clearTimeout(timer);\n timers.delete(id);\n }\n\n toasts.value = toasts.value.filter((t) => t.id !== id);\n}\n\nfunction clear() {\n for (const timer of timers.values()) {\n clearTimeout(timer);\n }\n\n timers.clear();\n toasts.value = [];\n}\n\nexport function useToast() {\n return {\n toasts: readonly(toasts),\n add,\n remove,\n clear,\n };\n}\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { useToast, type ToastPosition } from '../composables/useToast';\nimport TreeToast from './TreeToast.vue';\n\nconst props = withDefaults(\n defineProps<{\n position?: ToastPosition;\n max?: number;\n }>(),\n {\n position: 'bottom-right',\n max: 5,\n },\n);\n\nconst { toasts, remove } = useToast();\n\nconst visibleToasts = computed(() =>\n toasts.value.slice(-props.max),\n);\n\nconst classes = computed(() => [\n 'tree-toast-provider',\n `tree-toast-provider--${props.position}`,\n]);\n\nfunction handleClose(id: string) {\n remove(id);\n}\n</script>\n\n<template>\n <slot />\n\n <Teleport to=\"body\">\n <div\n :class=\"classes\"\n aria-live=\"polite\"\n aria-relevant=\"additions removals\"\n >\n <TransitionGroup name=\"tree-toast\">\n <TreeToast\n v-for=\"toast in visibleToasts\"\n :key=\"toast.id\"\n :toast=\"toast\"\n @close=\"handleClose\"\n />\n </TransitionGroup>\n </div>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\nexport type TreeAvatarStatus = 'online' | 'offline' | 'busy' | 'away';\n\nconst props = withDefaults(\n defineProps<{\n src?: string;\n alt?: string;\n initials?: string;\n size?: TreeSize;\n status?: TreeAvatarStatus;\n }>(),\n {\n src: undefined,\n alt: '',\n initials: undefined,\n size: 'md',\n status: undefined,\n },\n);\n\nconst classes = computed(() => [\n 'tree-avatar',\n `tree-avatar--${props.size}`,\n]);\n\nconst computedInitials = computed(() => {\n if (props.initials) return props.initials;\n if (props.alt) {\n return props.alt\n .split(' ')\n .filter(Boolean)\n .map((w) => w[0])\n .slice(0, 2)\n .join('')\n .toUpperCase();\n }\n return '';\n});\n\nfunction onImgError(event: Event) {\n const target = event.target as HTMLImageElement;\n target.style.display = 'none';\n}\n</script>\n\n<template>\n <span\n :class=\"classes\"\n role=\"img\"\n :aria-label=\"alt || undefined\"\n >\n <img\n v-if=\"src\"\n :src=\"src\"\n :alt=\"alt\"\n class=\"tree-avatar__image\"\n @error=\"onImgError\"\n >\n <span\n v-else\n class=\"tree-avatar__initials\"\n aria-hidden=\"true\"\n >\n {{ computedInitials }}\n </span>\n <slot />\n <span\n v-if=\"status\"\n class=\"tree-avatar__status\"\n :class=\"`tree-avatar__status--${status}`\"\n :aria-label=\"status\"\n />\n </span>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nconst props = withDefaults(\n defineProps<{\n orientation?: 'horizontal' | 'vertical';\n decorative?: boolean;\n label?: string;\n }>(),\n {\n orientation: 'horizontal',\n decorative: true,\n label: undefined,\n },\n);\n\nconst classes = computed(() => [\n 'tree-divider',\n `tree-divider--${props.orientation}`,\n]);\n</script>\n\n<template>\n <hr\n :class=\"classes\"\n :role=\"decorative ? 'none' : 'separator'\"\n :aria-orientation=\"!decorative ? orientation : undefined\"\n :aria-label=\"!decorative ? label : undefined\"\n >\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\nexport type TreeTableColumn = {\n key: string;\n label: string;\n sortable?: boolean;\n align?: 'left' | 'center' | 'right';\n width?: string;\n};\n\nexport type TreeTableSortDirection = 'asc' | 'desc' | 'none';\n\nexport type TreeTableSortState = {\n key: string;\n direction: TreeTableSortDirection;\n};\n\nconst props = withDefaults(\n defineProps<{\n columns: TreeTableColumn[];\n rows: Record<string, unknown>[];\n size?: TreeSize;\n sortBy?: TreeTableSortState;\n }>(),\n {\n size: 'md',\n sortBy: undefined,\n },\n);\n\nconst emit = defineEmits<{\n (e: 'sort', state: TreeTableSortState): void;\n}>();\n\ndefineSlots<{\n [key: `cell-${string}`]: (props: { row: Record<string, unknown>; value: unknown }) => void;\n [key: `header-${string}`]: (props: { column: TreeTableColumn }) => void;\n empty: () => void;\n}>();\n\nconst internalSort = ref<TreeTableSortState | undefined>(undefined);\n\nconst currentSort = computed(() => props.sortBy ?? internalSort.value);\n\nconst classes = computed(() => [\n 'tree-table',\n `tree-table--${props.size}`,\n]);\n\nconst sortedRows = computed(() => {\n const sort = currentSort.value;\n if (!sort || sort.direction === 'none') return props.rows;\n\n return [...props.rows].sort((a, b) => {\n const aVal = a[sort.key];\n const bVal = b[sort.key];\n\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n\n const cmp =\n typeof aVal === 'number' && typeof bVal === 'number'\n ? aVal - bVal\n : String(aVal).localeCompare(String(bVal));\n\n return sort.direction === 'desc' ? -cmp : cmp;\n });\n});\n\nfunction handleSort(column: TreeTableColumn) {\n if (!column.sortable) return;\n\n const cur = currentSort.value;\n let direction: TreeTableSortDirection = 'asc';\n\n if (cur?.key === column.key) {\n if (cur.direction === 'asc') direction = 'desc';\n else if (cur.direction === 'desc') direction = 'none';\n else direction = 'asc';\n }\n\n const state: TreeTableSortState = { key: column.key, direction };\n internalSort.value = state;\n emit('sort', state);\n}\n\nfunction sortAriaSort(column: TreeTableColumn): 'none' | 'ascending' | 'descending' | undefined {\n if (!column.sortable) return undefined;\n const cur = currentSort.value;\n if (cur?.key !== column.key || cur.direction === 'none') return 'none';\n return cur.direction === 'asc' ? 'ascending' : 'descending';\n}\n\nfunction handleHeaderKeydown(event: KeyboardEvent, column: TreeTableColumn) {\n if (column.sortable && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n handleSort(column);\n }\n}\n</script>\n\n<template>\n <div class=\"tree-table-wrapper\">\n <table\n :class=\"classes\"\n role=\"grid\"\n >\n <thead class=\"tree-table__head\">\n <tr class=\"tree-table__row\">\n <th\n v-for=\"column in columns\"\n :key=\"column.key\"\n class=\"tree-table__header\"\n :class=\"[\n column.sortable ? 'tree-table__header--sortable' : '',\n column.align ? `tree-table__header--${column.align}` : '',\n ]\"\n :style=\"column.width ? { width: column.width } : undefined\"\n :aria-sort=\"sortAriaSort(column)\"\n :tabindex=\"column.sortable ? 0 : undefined\"\n scope=\"col\"\n @click=\"handleSort(column)\"\n @keydown=\"handleHeaderKeydown($event, column)\"\n >\n <slot\n :name=\"`header-${column.key}`\"\n :column=\"column\"\n >\n <span class=\"tree-table__header-content\">\n {{ column.label }}\n <span\n v-if=\"column.sortable\"\n class=\"tree-table__sort-icon\"\n aria-hidden=\"true\"\n >\n <svg\n v-if=\"currentSort?.key === column.key && currentSort.direction === 'asc'\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"m18 15-6-6-6 6\" />\n </svg>\n <svg\n v-else-if=\"currentSort?.key === column.key && currentSort.direction === 'desc'\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n <svg\n v-else\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n style=\"opacity: 0.4\"\n >\n <path d=\"m7 15 5 5 5-5\" />\n <path d=\"m7 9 5-5 5 5\" />\n </svg>\n </span>\n </span>\n </slot>\n </th>\n </tr>\n </thead>\n <tbody class=\"tree-table__body\">\n <tr\n v-if=\"sortedRows.length === 0\"\n class=\"tree-table__row tree-table__row--empty\"\n >\n <td\n :colspan=\"columns.length\"\n class=\"tree-table__cell tree-table__cell--empty\"\n >\n <slot name=\"empty\">\n No data available.\n </slot>\n </td>\n </tr>\n <tr\n v-for=\"(row, index) in sortedRows\"\n :key=\"index\"\n class=\"tree-table__row\"\n >\n <td\n v-for=\"column in columns\"\n :key=\"column.key\"\n class=\"tree-table__cell\"\n :class=\"column.align ? `tree-table__cell--${column.align}` : ''\"\n >\n <slot\n :name=\"`cell-${column.key}`\"\n :row=\"row\"\n :value=\"row[column.key]\"\n >\n {{ row[column.key] ?? '' }}\n </slot>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\nexport type TreeTagVariant = 'solid' | 'outline' | 'soft';\n\nconst props = withDefaults(\n defineProps<{\n variant?: TreeTagVariant;\n size?: TreeSize;\n removable?: boolean;\n disabled?: boolean;\n }>(),\n {\n variant: 'soft',\n size: 'md',\n removable: false,\n disabled: false,\n },\n);\n\nconst emit = defineEmits<{\n (e: 'remove'): void;\n}>();\n\nconst classes = computed(() => [\n 'tree-tag',\n `tree-tag--${props.variant}`,\n `tree-tag--${props.size}`,\n props.disabled ? 'is-disabled' : '',\n]);\n\nfunction handleRemove() {\n if (props.disabled) return;\n emit('remove');\n}\n</script>\n\n<template>\n <span :class=\"classes\">\n <span\n v-if=\"$slots.icon\"\n class=\"tree-tag__icon\"\n aria-hidden=\"true\"\n >\n <slot name=\"icon\" />\n </span>\n <span class=\"tree-tag__label\">\n <slot />\n </span>\n <button\n v-if=\"removable\"\n type=\"button\"\n class=\"tree-tag__remove\"\n :disabled=\"disabled\"\n aria-label=\"Remove\"\n @click=\"handleRemove\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n </span>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport type TreeTimelineTone = 'neutral' | 'brand' | 'success' | 'warning' | 'danger';\n\nexport interface TreeTimelineItem {\n id?: string | number;\n title: string;\n description?: string;\n meta?: string;\n timestamp?: string;\n datetime?: string;\n tone?: TreeTimelineTone;\n}\n\nconst props = withDefaults(\n defineProps<{\n items?: TreeTimelineItem[];\n size?: TreeSize;\n }>(),\n {\n items: () => [],\n size: 'md',\n },\n);\n\ndefineSlots<{\n marker?: (props: { item: TreeTimelineItem; index: number }) => unknown;\n item?: (props: { item: TreeTimelineItem; index: number }) => unknown;\n}>();\n\nconst attrs = useAttrs();\n\nconst classes = computed(() => [\n 'tree-timeline',\n `tree-timeline--${props.size}`,\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst normalizeTone = (tone?: TreeTimelineTone) => tone ?? 'neutral';\nconst itemKey = (item: TreeTimelineItem, index: number) => item.id ?? `${item.title}-${index}`;\n</script>\n\n<template>\n <ol\n v-bind=\"rootAttrs\"\n :class=\"classes\"\n :style=\"rootStyle\"\n >\n <li\n v-for=\"(item, index) in items\"\n :key=\"itemKey(item, index)\"\n class=\"tree-timeline__item\"\n >\n <div class=\"tree-timeline__rail\">\n <span\n v-if=\"index < items.length - 1\"\n class=\"tree-timeline__line\"\n aria-hidden=\"true\"\n />\n <div\n class=\"tree-timeline__marker\"\n :class=\"`tree-timeline__marker--${normalizeTone(item.tone)}`\"\n aria-hidden=\"true\"\n >\n <slot\n name=\"marker\"\n :item=\"item\"\n :index=\"index\"\n />\n </div>\n </div>\n\n <div class=\"tree-timeline__content\">\n <slot\n name=\"item\"\n :item=\"item\"\n :index=\"index\"\n >\n <div\n v-if=\"item.meta\"\n class=\"tree-timeline__meta\"\n >\n {{ item.meta }}\n </div>\n\n <div class=\"tree-timeline__header\">\n <p class=\"tree-timeline__title\">\n {{ item.title }}\n </p>\n <time\n v-if=\"item.timestamp\"\n class=\"tree-timeline__timestamp\"\n :datetime=\"item.datetime || undefined\"\n >\n {{ item.timestamp }}\n </time>\n </div>\n\n <p\n v-if=\"item.description\"\n class=\"tree-timeline__description\"\n >\n {{ item.description }}\n </p>\n </slot>\n </div>\n </li>\n </ol>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { TreeSize } from '../types/contracts';\nimport TreeButton from './TreeButton.vue';\nimport TreeBadge from './TreeBadge.vue';\n\nexport interface PricingFeature {\n text: string;\n included?: boolean;\n}\n\nconst props = withDefaults(\n defineProps<{\n title: string;\n description?: string;\n price: string | number;\n currency?: string;\n period?: string;\n features?: PricingFeature[];\n highlighted?: boolean;\n badge?: string;\n buttonText?: string;\n size?: TreeSize;\n disabled?: boolean;\n }>(),\n {\n description: undefined,\n currency: '$',\n period: undefined,\n features: () => [],\n highlighted: false,\n badge: undefined,\n buttonText: undefined,\n size: 'md',\n disabled: false,\n },\n);\n\nconst emit = defineEmits<{\n select: [];\n}>();\n\ndefineSlots<{\n header?: () => unknown;\n price?: () => unknown;\n features?: () => unknown;\n action?: () => unknown;\n badge?: () => unknown;\n}>();\n\nconst classes = computed(() => [\n 'tree-pricing-card',\n `tree-pricing-card--${props.size}`,\n {\n 'tree-pricing-card--highlighted': props.highlighted,\n },\n]);\n\nconst onSelect = () => {\n if (!props.disabled) {\n emit('select');\n }\n};\n</script>\n\n<template>\n <article :class=\"classes\">\n <div\n v-if=\"badge || $slots.badge\"\n class=\"tree-pricing-card__badge\"\n >\n <slot name=\"badge\">\n <TreeBadge\n variant=\"solid\"\n size=\"sm\"\n >\n {{ badge }}\n </TreeBadge>\n </slot>\n </div>\n\n <header class=\"tree-pricing-card__header\">\n <slot name=\"header\">\n <h3 class=\"tree-pricing-card__title\">\n {{ title }}\n </h3>\n <p\n v-if=\"description\"\n class=\"tree-pricing-card__description\"\n >\n {{ description }}\n </p>\n </slot>\n </header>\n\n <div class=\"tree-pricing-card__price\">\n <slot name=\"price\">\n <span class=\"tree-pricing-card__currency\">{{ currency }}</span>\n <span class=\"tree-pricing-card__amount\">{{ price }}</span>\n <span\n v-if=\"period\"\n class=\"tree-pricing-card__period\"\n >{{ period }}</span>\n </slot>\n </div>\n\n <div\n v-if=\"features.length > 0 || $slots.features\"\n class=\"tree-pricing-card__features\"\n >\n <slot name=\"features\">\n <ul\n class=\"tree-pricing-card__feature-list\"\n role=\"list\"\n >\n <li\n v-for=\"(feature, index) in features\"\n :key=\"index\"\n class=\"tree-pricing-card__feature-item\"\n :class=\"{ 'tree-pricing-card__feature-item--excluded': feature.included === false }\"\n >\n <span\n class=\"tree-pricing-card__feature-icon\"\n aria-hidden=\"true\"\n >\n {{ feature.included === false ? '✕' : '✓' }}\n </span>\n <span>{{ feature.text }}</span>\n </li>\n </ul>\n </slot>\n </div>\n\n <footer\n v-if=\"buttonText || $slots.action\"\n class=\"tree-pricing-card__action\"\n >\n <slot name=\"action\">\n <TreeButton\n :variant=\"highlighted ? 'solid' : 'outline'\"\n :size=\"size\"\n :disabled=\"disabled\"\n @click=\"onSelect\"\n >\n {{ buttonText }}\n </TreeButton>\n </slot>\n </footer>\n </article>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { TreeSize } from '../types/contracts';\nimport TreePricingCard from './TreePricingCard.vue';\nimport type { PricingFeature } from './TreePricingCard.vue';\n\nexport interface PricingPlan {\n title: string;\n description?: string;\n price: string | number;\n currency?: string;\n period?: string;\n features?: PricingFeature[];\n highlighted?: boolean;\n badge?: string;\n buttonText?: string;\n disabled?: boolean;\n}\n\nconst props = withDefaults(\n defineProps<{\n plans: PricingPlan[];\n size?: TreeSize;\n columns?: number;\n }>(),\n {\n size: 'md',\n columns: undefined,\n },\n);\n\nconst emit = defineEmits<{\n select: [plan: PricingPlan, index: number];\n}>();\n\nconst gridStyle = computed(() => {\n if (props.columns) {\n return { gridTemplateColumns: `repeat(${props.columns}, 1fr)` };\n }\n return { gridTemplateColumns: `repeat(${props.plans.length}, 1fr)` };\n});\n</script>\n\n<template>\n <div\n class=\"tree-pricing\"\n :style=\"gridStyle\"\n role=\"list\"\n >\n <div\n v-for=\"(plan, index) in plans\"\n :key=\"index\"\n role=\"listitem\"\n >\n <slot\n name=\"plan\"\n :plan=\"plan\"\n :index=\"index\"\n >\n <TreePricingCard\n v-bind=\"plan\"\n :size=\"size\"\n @select=\"emit('select', plan, index)\"\n />\n </slot>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs, nextTick } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string;\n size?: TreeSize;\n disabled?: boolean;\n placeholder?: string;\n uploadImage?: (file: File) => Promise<string>;\n }>(),\n {\n modelValue: '',\n size: 'md',\n disabled: false,\n placeholder: 'Write your markdown here...',\n uploadImage: undefined,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n 'image-upload': [file: File, url: string];\n 'image-upload-error': [file: File, error: Error];\n}>();\n\ndefineSlots<{\n toolbar?: () => unknown;\n}>();\n\nconst attrs = useAttrs();\nconst textareaRef = ref<HTMLTextAreaElement | null>(null);\nconst isUploading = ref(false);\n\nconst rootClasses = computed(() => [\n 'tree-md-editor',\n `tree-md-editor--${props.size}`,\n {\n 'is-disabled': props.disabled,\n 'is-uploading': isUploading.value,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst editorAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst stringValue = computed(() => `${props.modelValue ?? ''}`);\n\nconst onInput = (event: Event) => {\n emit('update:modelValue', (event.target as HTMLTextAreaElement).value);\n};\n\n/* ──────── Toolbar Actions ──────── */\n\nconst insertAtCursor = (before: string, after = '') => {\n const el = textareaRef.value;\n if (!el) return;\n\n const start = el.selectionStart;\n const end = el.selectionEnd;\n const text = stringValue.value;\n const selected = text.slice(start, end);\n\n const newText = text.slice(0, start) + before + selected + after + text.slice(end);\n emit('update:modelValue', newText);\n\n nextTick(() => {\n el.focus();\n const cursorPos = selected\n ? start + before.length + selected.length + after.length\n : start + before.length;\n el.setSelectionRange(cursorPos, cursorPos);\n });\n};\n\nconst insertHeading = (level: number) => {\n const prefix = '#'.repeat(level) + ' ';\n const el = textareaRef.value;\n if (!el) return;\n\n const start = el.selectionStart;\n const text = stringValue.value;\n\n // Find start of current line\n const lineStart = text.lastIndexOf('\\n', start - 1) + 1;\n const lineEnd = text.indexOf('\\n', start);\n const actualEnd = lineEnd === -1 ? text.length : lineEnd;\n const line = text.slice(lineStart, actualEnd);\n\n // Strip existing heading markers\n const stripped = line.replace(/^#{1,6}\\s*/, '');\n const newLine = prefix + stripped;\n\n const newText = text.slice(0, lineStart) + newLine + text.slice(actualEnd);\n emit('update:modelValue', newText);\n\n nextTick(() => {\n el.focus();\n el.setSelectionRange(lineStart + newLine.length, lineStart + newLine.length);\n });\n};\n\nconst insertBold = () => insertAtCursor('**', '**');\nconst insertItalic = () => insertAtCursor('_', '_');\nconst insertCode = () => insertAtCursor('`', '`');\nconst insertCodeBlock = () => insertAtCursor('\\n```\\n', '\\n```\\n');\nconst insertLink = () => insertAtCursor('[', '](url)');\nconst insertList = () => insertAtCursor('\\n- ');\nconst insertOrderedList = () => insertAtCursor('\\n1. ');\nconst insertQuote = () => insertAtCursor('\\n> ');\nconst insertHr = () => insertAtCursor('\\n---\\n');\n\n/* ──────── Markdown → HTML rendering ──────── */\n\nconst renderedHtml = computed(() => {\n return markdownToHtml(stringValue.value);\n});\n\nfunction escapeHtml(text: string): string {\n return text\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\nfunction markdownToHtml(md: string): string {\n if (!md) return '';\n\n const lines = md.split('\\n');\n const html: string[] = [];\n let inCodeBlock = false;\n let inList = false;\n let inOrderedList = false;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n\n // Code blocks\n if (line.trim().startsWith('```')) {\n if (inCodeBlock) {\n html.push('</code></pre>');\n inCodeBlock = false;\n } else {\n inCodeBlock = true;\n html.push('<pre class=\"tree-md-editor__code-block\"><code>');\n }\n continue;\n }\n\n if (inCodeBlock) {\n html.push(escapeHtml(line));\n html.push('\\n');\n continue;\n }\n\n // Close open lists if needed\n const isUnorderedListItem = /^[-*+]\\s/.test(line.trim());\n const isOrderedListItem = /^\\d+\\.\\s/.test(line.trim());\n\n if (inList && !isUnorderedListItem) {\n html.push('</ul>');\n inList = false;\n }\n if (inOrderedList && !isOrderedListItem) {\n html.push('</ol>');\n inOrderedList = false;\n }\n\n // Horizontal rule\n if (/^(-{3,}|_{3,}|\\*{3,})$/.test(line.trim())) {\n html.push('<hr class=\"tree-md-editor__hr\" />');\n continue;\n }\n\n // Headings\n const headingMatch = line.match(/^(#{1,6})\\s+(.+)$/);\n if (headingMatch) {\n const level = headingMatch[1].length;\n html.push(`<h${level} class=\"tree-md-editor__heading tree-md-editor__heading--${level}\">${inlineMarkdown(escapeHtml(headingMatch[2]))}</h${level}>`);\n continue;\n }\n\n // Blockquote\n if (line.trim().startsWith('> ')) {\n html.push(`<blockquote class=\"tree-md-editor__blockquote\">${inlineMarkdown(escapeHtml(line.trim().slice(2)))}</blockquote>`);\n continue;\n }\n\n // Unordered list\n if (isUnorderedListItem) {\n if (!inList) {\n html.push('<ul class=\"tree-md-editor__list\">');\n inList = true;\n }\n html.push(`<li>${inlineMarkdown(escapeHtml(line.trim().slice(2)))}</li>`);\n continue;\n }\n\n // Ordered list\n if (isOrderedListItem) {\n if (!inOrderedList) {\n html.push('<ol class=\"tree-md-editor__list tree-md-editor__list--ordered\">');\n inOrderedList = true;\n }\n const content = line.trim().replace(/^\\d+\\.\\s/, '');\n html.push(`<li>${inlineMarkdown(escapeHtml(content))}</li>`);\n continue;\n }\n\n // Empty line\n if (line.trim() === '') {\n html.push('<br />');\n continue;\n }\n\n // Paragraph\n html.push(`<p class=\"tree-md-editor__paragraph\">${inlineMarkdown(escapeHtml(line))}</p>`);\n }\n\n // Close any open blocks\n if (inCodeBlock) html.push('</code></pre>');\n if (inList) html.push('</ul>');\n if (inOrderedList) html.push('</ol>');\n\n return html.join('\\n');\n}\n\nfunction inlineMarkdown(text: string): string {\n // Images: \n text = text.replace(/!\\[([^\\]]*)\\]\\(([^)]+)\\)/g, '<img src=\"$2\" alt=\"$1\" class=\"tree-md-editor__image\" loading=\"lazy\" />');\n // Links: [text](url)\n text = text.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, '<a href=\"$2\" target=\"_blank\" rel=\"noopener noreferrer\">$1</a>');\n // Bold: **text**\n text = text.replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>');\n // Italic: _text_ or *text*\n text = text.replace(/_(.+?)_/g, '<em>$1</em>');\n text = text.replace(/(?<!\\*)\\*(?!\\*)(.+?)(?<!\\*)\\*(?!\\*)/g, '<em>$1</em>');\n // Inline code: `text`\n text = text.replace(/`(.+?)`/g, '<code class=\"tree-md-editor__inline-code\">$1</code>');\n // Strikethrough: ~~text~~\n text = text.replace(/~~(.+?)~~/g, '<del>$1</del>');\n return text;\n}\n\n/* ──────── Image paste / drop handling ──────── */\n\nconst handlePaste = async (event: ClipboardEvent) => {\n if (props.disabled) return;\n\n const items = event.clipboardData?.items;\n if (!items) return;\n\n for (const item of items) {\n if (item.type.startsWith('image/')) {\n event.preventDefault();\n const file = item.getAsFile();\n if (file) await processImageUpload(file);\n return;\n }\n }\n};\n\nconst handleDrop = async (event: DragEvent) => {\n if (props.disabled) return;\n\n const files = event.dataTransfer?.files;\n if (!files) return;\n\n for (const file of files) {\n if (file.type.startsWith('image/')) {\n event.preventDefault();\n await processImageUpload(file);\n }\n }\n};\n\nconst handleDragOver = (event: DragEvent) => {\n if (props.disabled) return;\n event.preventDefault();\n};\n\nconst processImageUpload = async (file: File) => {\n if (!props.uploadImage) {\n // Fallback: insert a placeholder with the file name\n insertAtCursor(`![${file.name}]()`);\n return;\n }\n\n // Insert uploading placeholder\n const placeholder = `![Uploading ${file.name}...]()`;\n insertAtCursor(placeholder);\n isUploading.value = true;\n\n try {\n const url = props.uploadImage(file);\n const resolvedUrl = url instanceof Promise ? await url : url;\n\n // Replace placeholder with actual URL\n const currentValue = stringValue.value;\n const newValue = currentValue.replace(placeholder, ``);\n emit('update:modelValue', newValue);\n emit('image-upload', file, resolvedUrl);\n } catch (err) {\n // Remove placeholder on error\n const currentValue = stringValue.value;\n const newValue = currentValue.replace(placeholder, '');\n emit('update:modelValue', newValue);\n emit('image-upload-error', file, err instanceof Error ? err : new Error(String(err)));\n } finally {\n isUploading.value = false;\n }\n};\n\n/* ──────── Keyboard shortcuts ──────── */\n\nconst handleKeydown = (event: KeyboardEvent) => {\n if (props.disabled) return;\n\n const mod = event.metaKey || event.ctrlKey;\n if (!mod) return;\n\n switch (event.key) {\n case 'b':\n event.preventDefault();\n insertBold();\n break;\n case 'i':\n event.preventDefault();\n insertItalic();\n break;\n case 'k':\n event.preventDefault();\n insertLink();\n break;\n case 'e':\n event.preventDefault();\n insertCode();\n break;\n }\n};\n\n</script>\n\n<template>\n <div\n v-bind=\"editorAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <!-- Toolbar -->\n <div\n class=\"tree-md-editor__toolbar\"\n role=\"toolbar\"\n aria-label=\"Markdown formatting\"\n >\n <div class=\"tree-md-editor__toolbar-group\">\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Heading 1 (H1)\"\n :disabled=\"disabled\"\n @click=\"insertHeading(1)\"\n >\n H1\n </button>\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Heading 2 (H2)\"\n :disabled=\"disabled\"\n @click=\"insertHeading(2)\"\n >\n H2\n </button>\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Heading 3 (H3)\"\n :disabled=\"disabled\"\n @click=\"insertHeading(3)\"\n >\n H3\n </button>\n </div>\n\n <div\n class=\"tree-md-editor__toolbar-divider\"\n role=\"separator\"\n />\n\n <div class=\"tree-md-editor__toolbar-group\">\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Bold (Ctrl+B)\"\n :disabled=\"disabled\"\n @click=\"insertBold\"\n >\n <strong>B</strong>\n </button>\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Italic (Ctrl+I)\"\n :disabled=\"disabled\"\n @click=\"insertItalic\"\n >\n <em>I</em>\n </button>\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Strikethrough\"\n :disabled=\"disabled\"\n @click=\"insertAtCursor('~~', '~~')\"\n >\n <del>S</del>\n </button>\n </div>\n\n <div\n class=\"tree-md-editor__toolbar-divider\"\n role=\"separator\"\n />\n\n <div class=\"tree-md-editor__toolbar-group\">\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Inline code (Ctrl+E)\"\n :disabled=\"disabled\"\n @click=\"insertCode\"\n >\n </>\n </button>\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Code block\"\n :disabled=\"disabled\"\n @click=\"insertCodeBlock\"\n >\n { }\n </button>\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Link (Ctrl+K)\"\n :disabled=\"disabled\"\n @click=\"insertLink\"\n >\n 🔗\n </button>\n </div>\n\n <div\n class=\"tree-md-editor__toolbar-divider\"\n role=\"separator\"\n />\n\n <div class=\"tree-md-editor__toolbar-group\">\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Unordered list\"\n :disabled=\"disabled\"\n @click=\"insertList\"\n >\n • List\n </button>\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Ordered list\"\n :disabled=\"disabled\"\n @click=\"insertOrderedList\"\n >\n 1. List\n </button>\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Blockquote\"\n :disabled=\"disabled\"\n @click=\"insertQuote\"\n >\n >\n </button>\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Horizontal rule\"\n :disabled=\"disabled\"\n @click=\"insertHr\"\n >\n ―\n </button>\n </div>\n\n <slot name=\"toolbar\" />\n </div>\n\n <!-- Editor body -->\n <div class=\"tree-md-editor__body\">\n <!-- Write pane -->\n <div\n class=\"tree-md-editor__pane tree-md-editor__pane--write\"\n >\n <textarea\n ref=\"textareaRef\"\n class=\"tree-md-editor__textarea\"\n :value=\"stringValue\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :aria-label=\"placeholder\"\n @input=\"onInput\"\n @paste=\"handlePaste\"\n @drop=\"handleDrop\"\n @dragover=\"handleDragOver\"\n @keydown=\"handleKeydown\"\n />\n </div>\n\n <!-- Preview pane -->\n <div\n class=\"tree-md-editor__pane tree-md-editor__pane--preview\"\n aria-label=\"Markdown preview\"\n >\n <!-- eslint-disable vue/no-v-html -->\n <div\n class=\"tree-md-editor__preview\"\n v-html=\"renderedHtml\"\n />\n <!-- eslint-enable vue/no-v-html -->\n </div>\n </div>\n\n <!-- Upload indicator -->\n <div\n v-if=\"isUploading\"\n class=\"tree-md-editor__upload-bar\"\n role=\"status\"\n aria-live=\"polite\"\n >\n Uploading image…\n </div>\n </div>\n</template>\n","import type { App, Plugin } from 'vue';\nimport {\n TAccordion,\n TAccordionItem,\n TAlert,\n TBadge,\n TBreadcrumb,\n TBreadcrumbItem,\n TButton,\n TCard,\n TCheckbox,\n TCombobox,\n TConfirmDialog,\n TContainer,\n TContextMenu,\n TDatePicker,\n TDateTimePicker,\n TDrawer,\n TDropdown,\n TEmptyState,\n TFileUpload,\n TFormField,\n TGrid,\n TAppBar,\n TInput,\n TLink,\n TNavMenu,\n TNavbar,\n TMultiSelect,\n TModal,\n TNumberInput,\n TPagination,\n TPopover,\n TProgress,\n TRadio,\n TRadioGroup,\n TSelectableList,\n TSelect,\n TSidebar,\n TSkeleton,\n TSpinner,\n TStack,\n TStat,\n TStepper,\n TSteps,\n TSwitch,\n TTextarea,\n TTabs,\n TTabList,\n TTab,\n TTabPanel,\n TToggleGroup,\n TToast,\n TToastProvider,\n TTooltip,\n TAvatar,\n TDivider,\n TTable,\n TTag,\n TTreeView,\n TTimeline,\n TPricing,\n TPricingCard,\n TMarkdownEditor,\n} from './components';\n\nconst components = {\n TAccordion,\n TAccordionItem,\n TAlert,\n TBadge,\n TBreadcrumb,\n TBreadcrumbItem,\n TButton,\n TCard,\n TCheckbox,\n TCombobox,\n TConfirmDialog,\n TContainer,\n TContextMenu,\n TDatePicker,\n TDateTimePicker,\n TDrawer,\n TDropdown,\n TEmptyState,\n TFileUpload,\n TFormField,\n TGrid,\n TAppBar,\n TInput,\n TLink,\n TNavMenu,\n TNavbar,\n TMultiSelect,\n TModal,\n TNumberInput,\n TRadio,\n TRadioGroup,\n TSelectableList,\n TSelect,\n TSidebar,\n TSkeleton,\n TSpinner,\n TStack,\n TStat,\n TStepper,\n TSteps,\n TSwitch,\n TTextarea,\n TTabs,\n TTabList,\n TTab,\n TTabPanel,\n TToggleGroup,\n TToast,\n TToastProvider,\n TPagination,\n TPopover,\n TProgress,\n TTooltip,\n TAvatar,\n TDivider,\n TTable,\n TTag,\n TTreeView,\n TTimeline,\n TPricing,\n TPricingCard,\n TMarkdownEditor,\n TreeAccordion: TAccordion,\n TreeAccordionItem: TAccordionItem,\n TreeAlert: TAlert,\n TreeBadge: TBadge,\n TreeBreadcrumb: TBreadcrumb,\n TreeBreadcrumbItem: TBreadcrumbItem,\n TreeButton: TButton,\n TreeCard: TCard,\n TreeCheckbox: TCheckbox,\n TreeCombobox: TCombobox,\n TreeConfirmDialog: TConfirmDialog,\n TreeContainer: TContainer,\n TreeContextMenu: TContextMenu,\n TreeDatePicker: TDatePicker,\n TreeDateTimePicker: TDateTimePicker,\n TreeDrawer: TDrawer,\n TreeDropdown: TDropdown,\n TreeEmptyState: TEmptyState,\n TreeFileUpload: TFileUpload,\n TreeGrid: TGrid,\n TreeNavbar: TNavbar,\n TreeAppBar: TNavbar,\n TreeLink: TLink,\n TreeNavMenu: TNavMenu,\n TreeMultiSelect: TMultiSelect,\n TreeRadio: TRadio,\n TreeRadioGroup: TRadioGroup,\n TreeSelect: TSelect,\n TreeSkeleton: TSkeleton,\n TreeSidebar: TSidebar,\n TreeInput: TInput,\n TreeNumberInput: TNumberInput,\n TreeSelectableList: TSelectableList,\n TreeStack: TStack,\n TreeTreeView: TTreeView,\n TreeSteps: TSteps,\n TreeStepper: TStepper,\n TreeToggleGroup: TToggleGroup,\n TreeTextarea: TTextarea,\n TreeModal: TModal,\n TreePagination: TPagination,\n TreePopover: TPopover,\n TreeSpinner: TSpinner,\n TreeFormField: TFormField,\n TreeProgress: TProgress,\n TreeStat: TStat,\n TreeSwitch: TSwitch,\n TreeTabs: TTabs,\n TreeTabList: TTabList,\n TreeTab: TTab,\n TreeTabPanel: TTabPanel,\n TreeToast: TToast,\n TreeToastProvider: TToastProvider,\n TreeTooltip: TTooltip,\n TreeAvatar: TAvatar,\n TreeDivider: TDivider,\n TreeTable: TTable,\n TreeTag: TTag,\n TreeTimeline: TTimeline,\n TreePricing: TPricing,\n TreePricingCard: TPricingCard,\n TreeMarkdownEditor: TMarkdownEditor,\n};\n\nexport const TreeUIPlugin: Plugin = {\n install(app: App) {\n Object.entries(components).forEach(([name, component]) => {\n app.component(name, component);\n });\n },\n};\n\nexport const install = TreeUIPlugin.install;\n","export const treeSizes = ['sm', 'md', 'lg'] as const;\nexport const treeVariants = ['solid', 'outline', 'ghost', 'soft', 'danger'] as const;\nexport const treeCardVariants = ['outline', 'soft', 'solid', 'inset'] as const;\nexport const treeTooltipSides = ['top', 'right', 'bottom', 'left'] as const;\nexport const treeDrawerSides = ['top', 'right', 'bottom', 'left'] as const;\n\nexport type TreeSize = (typeof treeSizes)[number];\nexport type TreeVariant = (typeof treeVariants)[number];\nexport type TreeCardVariant = (typeof treeCardVariants)[number];\nexport type TreeTooltipSide = (typeof treeTooltipSides)[number];\nexport type TreeDrawerSide = (typeof treeDrawerSides)[number];\n\n"],"names":["accordionInjectionKey","props","__props","emit","__emit","internalValue","computed","def","uncontrolledValue","reactive","isControlled","openValues","mv","isItemOpen","value","emitUpdate","values","arr","toggleItem","currentlyOpen","next","triggerMap","triggerOrder","registerTrigger","el","unregisterTrigger","idx","getEnabledTriggers","v","focusPrev","enabled","prev","_a","focusNext","focusFirst","focusLast","provide","_openBlock","_createElementBlock","_hoisted_1","_renderSlot","_ctx","injected","inject","ctx","triggerId","useId","panelId","triggerRef","ref","isOpen","isDisabled","itemClasses","handleToggle","handleKeydown","event","onMounted","onBeforeUnmount","_createElementVNode","_unref","_normalizeClass","_hoisted_4","classes","handleDismiss","$slots","_hoisted_2","_normalizeStyle","instance","getCurrentInstance","routerLinkComponent","hasRouterLink","canRenderLink","isCurrent","tag","linkProps","_createBlock","_resolveDynamicComponent","_mergeProps","_toDisplayString","isNativeButton","onClick","_createVNode","TreeSpinner","_hoisted_3","hasHeader","_hoisted_5","attrs","useAttrs","inputRef","watch","val","rootClasses","rootStyle","inputAttrs","_class","_style","rest","onChange","_cache","useControllableOpen","controlledValue","defaultValue","nextValue","listboxId","createId","rootRef","activeIndex","query","normalize","getOptionId","selectedOption","option","selectedLabel","autocomplete","listboxLabel","listboxLabelledby","setValue","toRef","filteredOptions","normalizedQuery","field","enabledFilteredIndexes","indexes","index","activeOption","activeDescendant","syncQueryFromSelection","setInitialActiveIndex","fallback","selectedIndex","moveActive","direction","currentEnabledIndex","nextEnabledIndex","openListbox","commitPendingClear","closeListbox","restoreSelection","selectOption","onInput","onInputFocus","onInputClick","onInputKeydown","isEscapeKey","onOptionPointerEnter","onDocumentPointerDown","target","current","_Transition","_hoisted_7","_Fragment","_renderList","$event","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","CloseIcon","getTreeIcon","modalId","titleId","descriptionId","surfaceRef","previousFocusedElement","hasHeaderContent","slots","_useSlots","triggerAttrs","surfaceClasses","labelledBy","describedBy","openOverlayCount","previousBodyOverflow","lockBodyScroll","unlockBodyScroll","focusSurface","nextTick","openModal","closeModal","onTriggerClick","onOverlayClick","onSurfaceClick","onKeydown","focusable","getFocusableElements","first","last","activeElement","previousValue","_Teleport","_hoisted_6","treeIconDefaults","dialogClasses","hasBodyContent","closeDialog","syncOpen","handleCancel","handleConfirm","TreeModal","TreeButton","rootAttrs","menuId","itemRefs","focusedIndex","menuPosition","enabledItems","i","openMenu","x","y","focusItem","closeMenu","restoreFocus","selectItem","item","setItemRef","moveFocus","nextIndex","onContextMenu","onItemKeydown","isActivationKey","menuEl","onDocumentContextMenu","_createTextVNode","CalendarIcon","ChevronLeftIcon","ChevronRightIcon","today","startOfDay","selectedDate","parseDateValue","minDate","maxDate","calendarId","captionId","dayRefs","viewMonth","startOfMonth","focusedDate","_name","hiddenInputName","triggerText","monthLabel","weekdayLabels","formatter","weekBase","startOfWeek","_","addDays","isDateDisabled","date","syncCalendarView","cells","startDate","weekIndex","dayIndex","key","toDateValue","isSameDay","canMovePrev","canMoveNext","focusCurrentDay","setDayRef","element","openCalendar","closeCalendar","toggleCalendar","moveCalendar","nextMonth","addMonths","nextDate","selectDate","normalizedDate","onTriggerKeydown","onDayKeydown","_hoisted_8","label","week","cell","_hoisted_13","dateOnlyPattern","dateTimePattern","cloneDate","formatPart","endOfDay","parseBoundaryValue","boundary","dateOnlyMatch","yearToken","monthToken","dayToken","year","month","day","hour","minute","second","millisecond","dateTimeMatch","hourToken","minuteToken","secondToken","toDateTimeValue","setDatePart","source","targetDate","setTimePart","resolveMinuteStep","step","minuteStep","selectedDateTime","minDateTime","maxDateTime","pickerId","clampToRange","createDefaultDraftDateTime","reference","stepMilliseconds","rounded","initialDateTime","draftDateTime","draftPreview","minuteValues","left","right","dayStart","dayEnd","isDateTimeDisabled","syncDraftState","dateTime","draftDate","isTimeOptionEnabled","candidate","hourOptions","minuteOptions","updateHour","nextHour","currentMinute","availableMinutes","nextMinute","updateMinute","commitDraft","clearSelection","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_20","_hoisted_21","_hoisted_23","drawerId","openDrawer","closeDrawer","toggleMenu","emptyStateId","hasTitle","hasDescription","isDragActive","isFocusedWithin","dragDepth","feedbackMessages","uploadId","feedbackId","filesId","isUnavailable","hasFiles","hasCustomBody","effectiveMaxFiles","ids","selectedFilesLabel","formatFileSize","size","units","unitIndex","fileKey","file","matchesAccept","tokens","token","fileName","fileType","buildRejectionMessage","reason","resetInputValue","openFileDialog","emitFiles","nextFiles","acceptedFiles","rejections","rejection","processFiles","incomingFiles","remainingSlots","removeFile","fileIndex","clearFiles","hasTransferFiles","dataTransfer","getClipboardFiles","clipboardData","onInputChange","onDropzoneKeydown","onFocusIn","onFocusOut","nextTarget","onPaste","clipboardFiles","onDocumentPaste","onDragEnter","onDragOver","onDragLeave","onDrop","message","ChevronDownIcon","CheckIcon","XIcon","selectedOptions","visibleTags","hiddenTagCount","enabledFilteredOptions","inputPlaceholder","isSelected","targetOption","focusInput","updateValues","nextValues","toggleOption","removeValue","getNextEnabledIndex","_withModifiers","treeSidebarInjectionKey","sidebar","selectedValue","resolvedCollapsed","itemTag","getInitialFocusedIndex","resolvedElement","firstIndex","lastIndex","previousIndex","getTabIndex","group","isChecked","isInvalid","resolvedSize","groupAttrs","optionRefs","opt","o","enabledOptions","openDropdown","selectedIdx","focusOption","closeDropdown","toggleDropdown","setOptionRef","onOptionKeydown","_index","hasSelection","isCollapsed","toggleCollapsed","ToggleIcon","toggleLabel","stringValue","displayValue","precision","fractionalPart","formatValue","normalizeValue","clamped","clamp","parseValue","normalized","parsed","currentNumericValue","canDecrement","canIncrement","commitValue","stepValue","baseValue","parsedValue","onBlur","nextDisplayValue","baseId","focus","resolvedIndex","treeTreeViewInjectionKey","hasChildren","isExpanded","isFocused","itemId","rowClasses","onRowClick","onToggleClick","child","_component_TreeTreeViewItem","internalExpanded","treeAttrs","selectedValues","expandedValues","updateSelection","updateExpanded","id","flattenNodes","nodes","level","parentId","records","node","visibleNodes","enabledNodes","record","getInitialFocusedId","selectedId","focusedId","registerItem","unregisterItem","setFocusedId","shouldFocus","getVisibleRecord","focusBoundary","position","focusAdjacent","currentIndex","toggleExpanded","toggleSelected","firstChild","TreeTreeViewItem","activeValue","resolveStatus","selectStep","items","buttonRefs","normalizedValues","setButtonRef","selectValue","textareaRef","textareaAttrs","adjustHeight","style","useSlots","loadingAttrs","hasValue","hasTrend","hasMeta","hasLabel","trendSymbol","TreeSkeleton","contentId","openTimer","clearOpenTimer","show","immediate","showOnFocus","showOnPointer","hide","tooltipClasses","hasError","fieldAttrs","currentPage","pages","total","siblings","rangeStart","rangeEnd","goToPage","page","contentRef","contentClasses","openPopover","closePopover","togglePopover","onContentKeydown","isIndeterminate","percentage","TABS_INJECTION_KEY","tabOrder","disabledTabs","setActiveValue","registerTab","unregisterTab","getTabValues","isTabDisabled","setTabDisabled","disabled","listRef","getAllTabElements","getEnabledTabElements","tabs","nextTab","isActive","tabId","iconMap","toastId","StatusIcon","handleClose","toasts","timers","add","options","timer","remove","t","clear","useToast","readonly","visibleToasts","_TransitionGroup","toast","TreeToast","computedInitials","w","onImgError","internalSort","currentSort","sortedRows","sort","a","b","aVal","bVal","cmp","handleSort","column","cur","state","sortAriaSort","handleHeaderKeydown","_b","row","handleRemove","normalizeTone","tone","itemKey","onSelect","TreeBadge","feature","gridStyle","plan","TreePricingCard","isUploading","editorAttrs","insertAtCursor","before","after","start","end","text","selected","newText","cursorPos","insertHeading","prefix","lineStart","lineEnd","actualEnd","stripped","newLine","insertBold","insertItalic","insertCode","insertCodeBlock","insertLink","insertList","insertOrderedList","insertQuote","insertHr","renderedHtml","markdownToHtml","escapeHtml","md","lines","html","inCodeBlock","inList","inOrderedList","line","isUnorderedListItem","isOrderedListItem","headingMatch","inlineMarkdown","content","handlePaste","processImageUpload","handleDrop","files","handleDragOver","placeholder","url","resolvedUrl","newValue","err","_hoisted_19","_hoisted_22","_hoisted_24","components","TAccordion","TAccordionItem","TAlert","TBadge","TBreadcrumb","TBreadcrumbItem","TButton","TCard","TCheckbox","TCombobox","TConfirmDialog","TContainer","TContextMenu","TDatePicker","TDateTimePicker","TDrawer","TDropdown","TEmptyState","TFileUpload","TFormField","TGrid","TAppBar","TInput","TLink","TNavMenu","TNavbar","TMultiSelect","TModal","TNumberInput","TRadio","TRadioGroup","TSelectableList","TSelect","TSidebar","TSkeleton","TSpinner","TStack","TStat","TStepper","TSteps","TSwitch","TTextarea","TTabs","TTabList","TTab","TTabPanel","TToggleGroup","TToast","TToastProvider","TPagination","TPopover","TProgress","TTooltip","TAvatar","TDivider","TTable","TTag","TTreeView","TTimeline","TPricing","TPricingCard","TMarkdownEditor","TreeUIPlugin","app","name","component","install","treeSizes","treeVariants","treeCardVariants","treeTooltipSides","treeDrawerSides"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/components/accordion.ts","../src/components/TreeAccordion.vue","../src/components/TreeAccordionItem.vue","../src/components/TreeAlert.vue","../src/components/TreeBadge.vue","../src/components/TreeBreadcrumb.vue","../src/components/TreeBreadcrumbItem.vue","../src/components/TreeSpinner.vue","../src/components/TreeButton.vue","../src/components/TreeCard.vue","../src/components/TreeCheckbox.vue","../src/composables/useControllableOpen.ts","../src/components/TreeCombobox.vue","../src/components/TreeModal.vue","../src/components/TreeConfirmDialog.vue","../src/components/TreeContainer.vue","../src/components/TreeContextMenu.vue","../src/components/TreeDatePicker.vue","../src/components/TreeDateTimePicker.vue","../src/components/TreeDrawer.vue","../src/components/TreeDropdown.vue","../src/components/TreeEmptyState.vue","../src/components/TreeFileUpload.vue","../src/components/TreeMultiSelect.vue","../src/components/TreeGrid.vue","../src/components/TreeNavbar.vue","../src/components/TreeLink.vue","../src/components/sidebar.ts","../src/components/TreeNavMenu.vue","../src/components/TreeRadio.vue","../src/components/TreeRadioGroup.vue","../src/components/TreeSelect.vue","../src/components/TreeSidebar.vue","../src/components/TreeInput.vue","../src/components/TreeNumberInput.vue","../src/components/TreeSelectableList.vue","../src/components/TreeStack.vue","../src/components/tree-view.ts","../src/components/TreeTreeViewItem.vue","../src/components/TreeTreeView.vue","../src/components/TreeSteps.vue","../src/components/TreeToggleGroup.vue","../src/components/TreeTextarea.vue","../src/components/TreeSkeleton.vue","../src/components/TreeStat.vue","../src/components/TreeSwitch.vue","../src/components/TreeTooltip.vue","../src/components/TreeFormField.vue","../src/components/TreePagination.vue","../src/components/TreePopover.vue","../src/components/TreeProgress.vue","../src/components/tabs-context.ts","../src/components/TreeTabs.vue","../src/components/TreeTabList.vue","../src/components/TreeTab.vue","../src/components/TreeTabPanel.vue","../src/components/TreeToast.vue","../src/composables/useToast.ts","../src/components/TreeToastProvider.vue","../src/components/TreeAvatar.vue","../src/components/TreeDivider.vue","../src/components/TreeTable.vue","../src/components/TreeTag.vue","../src/components/TreeTimeline.vue","../src/components/TreePricingCard.vue","../src/components/TreePricing.vue","../src/components/TreeMarkdownEditor.vue","../src/plugin.ts","../src/types/contracts.ts"],"sourcesContent":["import type { InjectionKey } from 'vue';\n\nexport type AccordionType = 'single' | 'multiple';\n\nexport interface AccordionContext {\n type: AccordionType;\n disabled: boolean;\n collapsible: boolean;\n isItemOpen: (value: string) => boolean;\n toggleItem: (value: string) => void;\n registerTrigger: (value: string, el: HTMLElement) => void;\n unregisterTrigger: (value: string) => void;\n focusPrev: (value: string) => void;\n focusNext: (value: string) => void;\n focusFirst: () => void;\n focusLast: () => void;\n}\n\nexport const accordionInjectionKey: InjectionKey<AccordionContext> = Symbol('tree-accordion');\n","<script setup lang=\"ts\">\nimport { computed, provide, reactive } from 'vue';\nimport { type AccordionType, accordionInjectionKey } from './accordion';\n\nconst props = withDefaults(\n defineProps<{\n type?: AccordionType;\n modelValue?: string | string[];\n defaultValue?: string | string[];\n disabled?: boolean;\n collapsible?: boolean;\n }>(),\n {\n type: 'single',\n modelValue: undefined,\n defaultValue: undefined,\n disabled: false,\n collapsible: false,\n },\n);\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: string | string[] | undefined): void;\n}>();\n\n// Internal uncontrolled state\nconst internalValue = computed<string[]>(() => {\n const def = props.defaultValue;\n if (def === undefined) return [];\n return Array.isArray(def) ? def : [def];\n});\n\nconst uncontrolledValue = reactive<Set<string>>(new Set(internalValue.value));\n\nconst isControlled = computed(() => props.modelValue !== undefined);\n\nconst openValues = computed<Set<string>>(() => {\n if (isControlled.value) {\n const mv = props.modelValue!;\n return new Set(Array.isArray(mv) ? mv : [mv]);\n }\n return uncontrolledValue;\n});\n\nfunction isItemOpen(value: string): boolean {\n return openValues.value.has(value);\n}\n\nfunction emitUpdate(values: Set<string>) {\n if (props.type === 'single') {\n const arr = [...values];\n emit('update:modelValue', arr.length > 0 ? arr[0] : undefined);\n } else {\n emit('update:modelValue', [...values]);\n }\n}\n\nfunction toggleItem(value: string) {\n const currentlyOpen = isItemOpen(value);\n\n if (props.type === 'single') {\n if (currentlyOpen) {\n if (props.collapsible) {\n if (!isControlled.value) {\n uncontrolledValue.delete(value);\n }\n emitUpdate(new Set());\n }\n } else {\n if (!isControlled.value) {\n uncontrolledValue.clear();\n uncontrolledValue.add(value);\n }\n emitUpdate(new Set([value]));\n }\n } else {\n // Multiple mode\n const next = new Set(openValues.value);\n if (currentlyOpen) {\n next.delete(value);\n } else {\n next.add(value);\n }\n if (!isControlled.value) {\n if (currentlyOpen) {\n uncontrolledValue.delete(value);\n } else {\n uncontrolledValue.add(value);\n }\n }\n emitUpdate(next);\n }\n}\n\n// Keyboard navigation between triggers\nconst triggerMap = new Map<string, HTMLElement>();\nconst triggerOrder: string[] = reactive([]);\n\nfunction registerTrigger(value: string, el: HTMLElement) {\n if (!triggerMap.has(value)) {\n triggerOrder.push(value);\n }\n triggerMap.set(value, el);\n}\n\nfunction unregisterTrigger(value: string) {\n triggerMap.delete(value);\n const idx = triggerOrder.indexOf(value);\n if (idx !== -1) triggerOrder.splice(idx, 1);\n}\n\nfunction getEnabledTriggers(): string[] {\n return triggerOrder.filter((v) => {\n const el = triggerMap.get(v);\n return el && !el.hasAttribute('disabled');\n });\n}\n\nfunction focusPrev(value: string) {\n const enabled = getEnabledTriggers();\n const idx = enabled.indexOf(value);\n const prev = idx > 0 ? idx - 1 : enabled.length - 1;\n triggerMap.get(enabled[prev])?.focus();\n}\n\nfunction focusNext(value: string) {\n const enabled = getEnabledTriggers();\n const idx = enabled.indexOf(value);\n const next = idx < enabled.length - 1 ? idx + 1 : 0;\n triggerMap.get(enabled[next])?.focus();\n}\n\nfunction focusFirst() {\n const enabled = getEnabledTriggers();\n if (enabled.length) triggerMap.get(enabled[0])?.focus();\n}\n\nfunction focusLast() {\n const enabled = getEnabledTriggers();\n if (enabled.length) triggerMap.get(enabled[enabled.length - 1])?.focus();\n}\n\nprovide(accordionInjectionKey, {\n type: props.type,\n disabled: props.disabled,\n collapsible: props.collapsible,\n isItemOpen,\n toggleItem,\n registerTrigger,\n unregisterTrigger,\n focusPrev,\n focusNext,\n focusFirst,\n focusLast,\n});\n</script>\n\n<template>\n <div class=\"tree-accordion\">\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject, onMounted, onBeforeUnmount, ref, useId } from 'vue';\nimport { accordionInjectionKey } from './accordion';\n\nconst props = withDefaults(\n defineProps<{\n value: string;\n disabled?: boolean;\n }>(),\n {\n disabled: false,\n },\n);\n\nconst injected = inject(accordionInjectionKey);\n\nif (!injected) {\n throw new Error('[TreeUI] TAccordionItem must be used inside a TAccordion.');\n}\n\nconst ctx = injected;\n\nconst triggerId = useId();\nconst panelId = useId();\nconst triggerRef = ref<HTMLButtonElement | null>(null);\n\nconst isOpen = computed(() => ctx.isItemOpen(props.value));\nconst isDisabled = computed(() => props.disabled || ctx.disabled);\n\nconst itemClasses = computed(() => [\n 'tree-accordion__item',\n {\n 'is-open': isOpen.value,\n 'is-disabled': isDisabled.value,\n },\n]);\n\nfunction handleToggle() {\n if (isDisabled.value) return;\n ctx.toggleItem(props.value);\n}\n\nfunction handleKeydown(event: KeyboardEvent) {\n if (isDisabled.value) return;\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n ctx.focusNext(props.value);\n break;\n case 'ArrowUp':\n event.preventDefault();\n ctx.focusPrev(props.value);\n break;\n case 'Home':\n event.preventDefault();\n ctx.focusFirst();\n break;\n case 'End':\n event.preventDefault();\n ctx.focusLast();\n break;\n }\n}\n\nonMounted(() => {\n if (triggerRef.value) {\n ctx.registerTrigger(props.value, triggerRef.value);\n }\n});\n\nonBeforeUnmount(() => {\n ctx.unregisterTrigger(props.value);\n});\n</script>\n\n<template>\n <div :class=\"itemClasses\">\n <h3 class=\"tree-accordion__heading\">\n <button\n :id=\"triggerId\"\n ref=\"triggerRef\"\n type=\"button\"\n class=\"tree-accordion__trigger\"\n :aria-expanded=\"isOpen\"\n :aria-controls=\"panelId\"\n :disabled=\"isDisabled || undefined\"\n @click=\"handleToggle\"\n @keydown=\"handleKeydown\"\n >\n <slot\n name=\"trigger\"\n :open=\"isOpen\"\n >\n {{ value }}\n </slot>\n <svg\n class=\"tree-accordion__icon\"\n :class=\"{ 'is-open': isOpen }\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n </h3>\n <div\n v-if=\"isOpen\"\n :id=\"panelId\"\n role=\"region\"\n :aria-labelledby=\"triggerId\"\n class=\"tree-accordion__content\"\n >\n <div class=\"tree-accordion__panel\">\n <slot />\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\nexport type TreeAlertVariant = 'info' | 'success' | 'warning' | 'danger';\n\nconst props = withDefaults(\n defineProps<{\n variant?: TreeAlertVariant;\n size?: TreeSize;\n dismissible?: boolean;\n }>(),\n {\n variant: 'info',\n size: 'md',\n dismissible: false,\n },\n);\n\nconst emit = defineEmits<{\n (e: 'dismiss'): void;\n}>();\n\nconst classes = computed(() => [\n 'tree-alert',\n `tree-alert--${props.variant}`,\n `tree-alert--${props.size}`,\n]);\n\nfunction handleDismiss() {\n emit('dismiss');\n}\n</script>\n\n<template>\n <div\n :class=\"classes\"\n role=\"alert\"\n >\n <span\n v-if=\"$slots.icon\"\n class=\"tree-alert__icon\"\n aria-hidden=\"true\"\n >\n <slot name=\"icon\" />\n </span>\n <div class=\"tree-alert__content\">\n <slot />\n </div>\n <button\n v-if=\"dismissible\"\n type=\"button\"\n class=\"tree-alert__dismiss\"\n aria-label=\"Dismiss\"\n @click=\"handleDismiss\"\n >\n <slot name=\"dismiss-icon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </slot>\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { TreeSize, TreeVariant } from '../types/contracts';\n\nconst _treeBadgeTones = ['neutral', 'success', 'warning', 'danger', 'info'] as const;\n\nexport type TreeBadgeTone = (typeof _treeBadgeTones)[number];\n\nconst props = withDefaults(\n defineProps<{\n variant?: TreeVariant;\n size?: TreeSize;\n tone?: TreeBadgeTone;\n }>(),\n {\n variant: 'soft',\n size: 'md',\n tone: 'neutral',\n },\n);\n\nconst classes = computed(() => [\n 'tree-badge',\n `tree-badge--${props.variant}`,\n `tree-badge--${props.size}`,\n `tree-badge--tone-${props.tone}`,\n]);\n</script>\n\n<template>\n <span :class=\"classes\">\n <span\n v-if=\"$slots.icon\"\n class=\"tree-badge__icon\"\n aria-hidden=\"true\"\n >\n <slot name=\"icon\" />\n </span>\n <slot />\n </span>\n</template>\n","<script setup lang=\"ts\">\nconst props = withDefaults(\n defineProps<{\n /**\n * Character or string used to visually separate breadcrumb items.\n */\n separator?: string;\n }>(),\n {\n separator: '/',\n },\n);\n</script>\n\n<template>\n <nav\n aria-label=\"Breadcrumb\"\n class=\"tree-breadcrumb\"\n >\n <ol\n class=\"tree-breadcrumb__list\"\n :style=\"{ '--tree-breadcrumb-separator': `'${props.separator}'` }\"\n >\n <slot />\n </ol>\n </nav>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, type Component } from 'vue';\n\nconst props = withDefaults(\n defineProps<{\n /**\n * URL the breadcrumb item links to. Omit for the current/last item.\n */\n href?: string;\n /**\n * Route target. When provided and vue-router is available, renders RouterLink.\n */\n to?: string | Record<string, unknown>;\n /**\n * Marks this item as the current page. Automatically set if it's the last item without href.\n */\n current?: boolean;\n }>(),\n {\n href: undefined,\n to: undefined,\n current: false,\n },\n);\n\nconst instance = getCurrentInstance();\n\nconst routerLinkComponent = computed<Component | null>(() => {\n if (!props.to) return null;\n\n return (instance?.appContext.components.RouterLink as Component | undefined) ?? null;\n});\n\nconst hasRouterLink = computed(() => {\n return Boolean(routerLinkComponent.value);\n});\n\nconst canRenderLink = computed(() => {\n if (props.href) return true;\n if (typeof props.to === 'string') return true;\n return Boolean(props.to && hasRouterLink.value);\n});\n\nconst isCurrent = computed(() => props.current || !canRenderLink.value);\n\nconst tag = computed<string | Component>(() => {\n if (props.to && routerLinkComponent.value) {\n return routerLinkComponent.value;\n }\n\n return 'a';\n});\n\nconst linkProps = computed(() => {\n if (props.to && hasRouterLink.value) {\n return { to: props.to };\n }\n\n return {\n href: props.href ?? (typeof props.to === 'string' ? props.to : undefined),\n };\n});\n</script>\n\n<template>\n <li class=\"tree-breadcrumb__item\">\n <component\n :is=\"tag\"\n v-if=\"!isCurrent\"\n v-bind=\"linkProps\"\n class=\"tree-breadcrumb__link\"\n >\n <slot />\n </component>\n <span\n v-else\n class=\"tree-breadcrumb__current\"\n aria-current=\"page\"\n >\n <slot />\n </span>\n </li>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\nconst props = withDefaults(\n defineProps<{\n size?: TreeSize;\n label?: string;\n }>(),\n {\n size: 'md',\n label: 'Loading',\n },\n);\n\nconst classes = computed(() => ['tree-spinner', `tree-spinner--${props.size}`]);\n</script>\n\n<template>\n <span\n :class=\"classes\"\n role=\"status\"\n :aria-label=\"label\"\n >\n <span\n class=\"tree-spinner__ring\"\n aria-hidden=\"true\"\n />\n <span class=\"tree-visually-hidden\">{{ label }}</span>\n </span>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { TreeSize, TreeVariant } from '../types/contracts';\nimport TreeSpinner from './TreeSpinner.vue';\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n variant?: TreeVariant;\n size?: TreeSize;\n disabled?: boolean;\n loading?: boolean;\n type?: 'button' | 'submit' | 'reset';\n }>(),\n {\n as: 'button',\n variant: 'solid',\n size: 'md',\n disabled: false,\n loading: false,\n type: 'button',\n },\n);\n\nconst emit = defineEmits<{\n click: [event: MouseEvent];\n}>();\n\nconst isNativeButton = computed(() => props.as === 'button');\nconst isDisabled = computed(() => props.disabled || props.loading);\nconst classes = computed(() => [\n 'tree-button',\n `tree-button--${props.variant}`,\n `tree-button--${props.size}`,\n {\n 'is-loading': props.loading,\n 'is-disabled': isDisabled.value,\n },\n]);\n\nconst onClick = (event: MouseEvent) => {\n if (isDisabled.value) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n emit('click', event);\n};\n</script>\n\n<template>\n <component\n :is=\"as\"\n :type=\"isNativeButton ? type : undefined\"\n :class=\"classes\"\n :disabled=\"isNativeButton ? isDisabled : undefined\"\n :aria-disabled=\"!isNativeButton && isDisabled ? 'true' : undefined\"\n :aria-busy=\"loading || undefined\"\n :tabindex=\"!isNativeButton && isDisabled ? -1 : undefined\"\n @click=\"onClick\"\n >\n <span\n v-if=\"loading\"\n class=\"tree-button__spinner\"\n >\n <TreeSpinner\n size=\"sm\"\n label=\"Loading\"\n />\n </span>\n <span\n v-if=\"$slots.icon\"\n class=\"tree-button__icon\"\n aria-hidden=\"true\"\n >\n <slot name=\"icon\" />\n </span>\n <span class=\"tree-button__label\">\n <slot />\n </span>\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { TreeCardVariant, TreeSize } from '../types/contracts';\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n variant?: TreeCardVariant;\n size?: TreeSize;\n title?: string;\n }>(),\n {\n as: 'section',\n variant: 'outline',\n size: 'md',\n title: undefined,\n },\n);\n\nconst classes = computed(() => [\n 'tree-card',\n `tree-card--${props.variant}`,\n `tree-card--${props.size}`,\n]);\n\nconst hasHeader = computed(() => !!props.title);\n</script>\n\n<template>\n <component\n :is=\"as\"\n :class=\"classes\"\n >\n <header\n v-if=\"$slots.header || hasHeader || $slots.actions\"\n class=\"tree-card__header\"\n >\n <slot name=\"header\">\n <span\n v-if=\"title\"\n class=\"tree-card__title\"\n >\n {{ title }}\n </span>\n <span\n v-if=\"$slots.actions\"\n class=\"tree-card__actions\"\n >\n <slot name=\"actions\" />\n </span>\n </slot>\n </header>\n <div class=\"tree-card__body\">\n <slot />\n </div>\n <footer\n v-if=\"$slots.footer\"\n class=\"tree-card__footer\"\n >\n <slot name=\"footer\" />\n </footer>\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs, watch } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: boolean;\n size?: TreeSize;\n disabled?: boolean;\n indeterminate?: boolean;\n invalid?: boolean;\n }>(),\n {\n modelValue: false,\n size: 'md',\n disabled: false,\n indeterminate: false,\n invalid: false,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean];\n}>();\n\nconst attrs = useAttrs();\nconst inputRef = ref<HTMLInputElement | null>(null);\n\nwatch(\n () => props.indeterminate,\n (val) => {\n if (inputRef.value) {\n inputRef.value.indeterminate = val;\n }\n },\n);\n\nwatch(inputRef, (el) => {\n if (el) {\n el.indeterminate = props.indeterminate;\n }\n});\n\nconst rootClasses = computed(() => [\n 'tree-checkbox',\n `tree-checkbox--${props.size}`,\n {\n 'is-checked': props.modelValue,\n 'is-indeterminate': props.indeterminate,\n 'is-disabled': props.disabled,\n 'is-invalid': props.invalid,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst inputAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst onChange = () => {\n emit('update:modelValue', !props.modelValue);\n};\n</script>\n\n<template>\n <label\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <input\n ref=\"inputRef\"\n v-bind=\"inputAttrs\"\n type=\"checkbox\"\n class=\"tree-checkbox__input\"\n :checked=\"modelValue\"\n :disabled=\"disabled\"\n :aria-checked=\"indeterminate ? 'mixed' : modelValue\"\n :aria-invalid=\"invalid || undefined\"\n @change=\"onChange\"\n >\n <span\n class=\"tree-checkbox__control\"\n aria-hidden=\"true\"\n >\n <svg\n v-if=\"modelValue && !indeterminate\"\n class=\"tree-checkbox__icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"3.5 8.5 6.5 11.5 12.5 4.5\" />\n </svg>\n <svg\n v-else-if=\"indeterminate\"\n class=\"tree-checkbox__icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n >\n <line\n x1=\"4\"\n y1=\"8\"\n x2=\"12\"\n y2=\"8\"\n />\n </svg>\n </span>\n <span\n v-if=\"$slots.default\"\n class=\"tree-checkbox__label\"\n >\n <slot />\n </span>\n </label>\n</template>\n","import { computed, ref, type Ref } from 'vue';\n\nexport const useControllableOpen = (\n controlledValue: Ref<boolean | undefined>,\n defaultValue: boolean,\n onChange: (value: boolean) => void,\n) => {\n const uncontrolledValue = ref(defaultValue);\n\n const value = computed(() => controlledValue.value ?? uncontrolledValue.value);\n\n const setValue = (nextValue: boolean) => {\n if (nextValue === value.value) {\n return;\n }\n\n if (controlledValue.value === undefined) {\n uncontrolledValue.value = nextValue;\n }\n\n onChange(nextValue);\n };\n\n return {\n value,\n setValue,\n };\n};\n\n","<script setup lang=\"ts\">\nimport { createId, isEscapeKey } from '@treeui/utils';\nimport { computed, onBeforeUnmount, ref, toRef, useAttrs, watch } from 'vue';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeSize } from '../types/contracts';\nimport TreeSpinner from './TreeSpinner.vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport interface TreeComboboxOption {\n label: string;\n value: string;\n description?: string;\n keywords?: string[];\n disabled?: boolean;\n}\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string;\n options?: TreeComboboxOption[];\n open?: boolean;\n defaultOpen?: boolean;\n size?: TreeSize;\n disabled?: boolean;\n loading?: boolean;\n invalid?: boolean;\n placeholder?: string;\n emptyText?: string;\n }>(),\n {\n modelValue: '',\n options: () => [],\n open: undefined,\n defaultOpen: false,\n size: 'md',\n disabled: false,\n loading: false,\n invalid: false,\n placeholder: '',\n emptyText: 'No results found.',\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n 'input-change': [value: string];\n}>();\n\ndefineSlots<{\n prefix?: () => unknown;\n option?: (props: {\n option: TreeComboboxOption;\n selected: boolean;\n active: boolean;\n }) => unknown;\n empty?: (props: { query: string }) => unknown;\n}>();\n\nconst attrs = useAttrs();\nconst listboxId = createId('tree-combobox');\nconst rootRef = ref<HTMLElement | null>(null);\nconst activeIndex = ref(-1);\nconst query = ref('');\n\nconst normalize = (value: string) => value.trim().toLowerCase();\nconst getOptionId = (value: string) => `${listboxId}-option-${value}`;\n\nconst selectedOption = computed(() =>\n props.options.find((option) => option.value === props.modelValue),\n);\n\nconst selectedLabel = computed(() => selectedOption.value?.label ?? '');\n\nconst inputAttrs = computed(() => {\n const { class: _class, style: _style, autocomplete, ...rest } = attrs;\n return {\n autocomplete: typeof autocomplete === 'string' ? autocomplete : 'off',\n ...rest,\n };\n});\n\nconst listboxLabel = computed(() =>\n typeof attrs['aria-label'] === 'string' ? attrs['aria-label'] : undefined,\n);\n\nconst listboxLabelledby = computed(() =>\n typeof attrs['aria-labelledby'] === 'string' ? attrs['aria-labelledby'] : undefined,\n);\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst rootClasses = computed(() => [\n 'tree-combobox',\n `tree-combobox--${props.size}`,\n {\n 'is-disabled': props.disabled,\n 'is-invalid': props.invalid,\n 'is-loading': props.loading,\n 'is-open': isOpen.value,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst filteredOptions = computed(() => {\n const normalizedQuery = normalize(query.value);\n\n if (!normalizedQuery) {\n return props.options;\n }\n\n return props.options.filter((option) => {\n const fields = [\n option.label,\n option.description ?? '',\n ...(option.keywords ?? []),\n ];\n\n return fields.some((field) => field.toLowerCase().includes(normalizedQuery));\n });\n});\n\nconst enabledFilteredIndexes = computed(() =>\n filteredOptions.value.reduce<number[]>((indexes, option, index) => {\n if (!option.disabled) {\n indexes.push(index);\n }\n\n return indexes;\n }, []),\n);\n\nconst activeOption = computed(() =>\n activeIndex.value >= 0 ? filteredOptions.value[activeIndex.value] : undefined,\n);\n\nconst activeDescendant = computed(() =>\n isOpen.value && activeOption.value ? getOptionId(activeOption.value.value) : undefined,\n);\n\nconst syncQueryFromSelection = () => {\n query.value = selectedLabel.value;\n};\n\nconst setInitialActiveIndex = (fallback: 'first' | 'last' = 'first') => {\n const selectedIndex = filteredOptions.value.findIndex((option) =>\n option.value === props.modelValue && !option.disabled,\n );\n\n if (selectedIndex >= 0) {\n activeIndex.value = selectedIndex;\n return;\n }\n\n if (enabledFilteredIndexes.value.length === 0) {\n activeIndex.value = -1;\n return;\n }\n\n activeIndex.value =\n fallback === 'last'\n ? enabledFilteredIndexes.value[enabledFilteredIndexes.value.length - 1]\n : enabledFilteredIndexes.value[0];\n};\n\nconst moveActive = (direction: 1 | -1) => {\n if (enabledFilteredIndexes.value.length === 0) {\n activeIndex.value = -1;\n return;\n }\n\n const currentEnabledIndex = enabledFilteredIndexes.value.indexOf(activeIndex.value);\n\n if (currentEnabledIndex === -1) {\n activeIndex.value =\n direction === 1\n ? enabledFilteredIndexes.value[0]\n : enabledFilteredIndexes.value[enabledFilteredIndexes.value.length - 1];\n return;\n }\n\n const nextEnabledIndex = currentEnabledIndex + direction;\n\n if (nextEnabledIndex < 0 || nextEnabledIndex >= enabledFilteredIndexes.value.length) {\n return;\n }\n\n activeIndex.value = enabledFilteredIndexes.value[nextEnabledIndex];\n};\n\nconst openListbox = (fallback: 'first' | 'last' = 'first') => {\n if (props.disabled) {\n return;\n }\n\n setValue(true);\n setInitialActiveIndex(fallback);\n};\n\nconst commitPendingClear = () => {\n if (query.value.trim() !== '' || !props.modelValue) {\n return false;\n }\n\n emit('update:modelValue', '');\n return true;\n};\n\nconst closeListbox = (restoreSelection = false) => {\n setValue(false);\n activeIndex.value = -1;\n\n if (!restoreSelection) {\n return;\n }\n\n if (commitPendingClear()) {\n return;\n }\n\n if (selectedLabel.value && query.value !== selectedLabel.value) {\n query.value = selectedLabel.value;\n }\n};\n\nconst selectOption = (option: TreeComboboxOption) => {\n if (option.disabled) {\n return;\n }\n\n query.value = option.label;\n emit('update:modelValue', option.value);\n closeListbox(false);\n};\n\nconst onInput = (event: Event) => {\n query.value = (event.target as HTMLInputElement).value;\n emit('input-change', query.value);\n\n if (props.disabled) {\n return;\n }\n\n if (!isOpen.value) {\n openListbox('first');\n return;\n }\n\n setInitialActiveIndex('first');\n};\n\nconst onInputFocus = () => {\n openListbox('first');\n};\n\nconst onInputClick = () => {\n if (!isOpen.value) {\n openListbox('first');\n }\n};\n\nconst onInputKeydown = (event: KeyboardEvent) => {\n if (props.disabled) {\n return;\n }\n\n if (isEscapeKey(event)) {\n if (isOpen.value) {\n event.preventDefault();\n closeListbox(true);\n }\n\n return;\n }\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n\n if (!isOpen.value) {\n openListbox('first');\n } else {\n moveActive(1);\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n\n if (!isOpen.value) {\n openListbox('last');\n } else {\n moveActive(-1);\n }\n break;\n case 'Enter':\n if (isOpen.value && activeOption.value && !activeOption.value.disabled) {\n event.preventDefault();\n selectOption(activeOption.value);\n }\n break;\n case 'Home':\n if (!isOpen.value) return;\n event.preventDefault();\n setInitialActiveIndex('first');\n break;\n case 'End':\n if (!isOpen.value) return;\n event.preventDefault();\n setInitialActiveIndex('last');\n break;\n case 'Tab':\n closeListbox(true);\n break;\n default:\n break;\n }\n};\n\nconst onOptionPointerEnter = (index: number) => {\n const option = filteredOptions.value[index];\n\n if (option && !option.disabled) {\n activeIndex.value = index;\n }\n};\n\nconst onDocumentPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) return;\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (rootRef.value?.contains(target)) return;\n closeListbox(true);\n};\n\nwatch(isOpen, (value) => {\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n } else {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n }\n});\n\nwatch(\n () => props.modelValue,\n () => {\n if (!isOpen.value) {\n syncQueryFromSelection();\n }\n },\n { immediate: true },\n);\n\nwatch(\n () => props.options,\n () => {\n if (!isOpen.value) {\n syncQueryFromSelection();\n return;\n }\n\n setInitialActiveIndex('first');\n },\n { deep: true },\n);\n\nwatch(filteredOptions, () => {\n if (!isOpen.value) {\n return;\n }\n\n if (filteredOptions.value.length === 0) {\n activeIndex.value = -1;\n return;\n }\n\n const current = filteredOptions.value[activeIndex.value];\n\n if (!current || current.disabled) {\n setInitialActiveIndex('first');\n }\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <div class=\"tree-combobox__control\">\n <span\n v-if=\"$slots.prefix\"\n class=\"tree-combobox__slot tree-combobox__slot--prefix\"\n >\n <slot name=\"prefix\" />\n </span>\n <input\n v-bind=\"inputAttrs\"\n class=\"tree-combobox__input\"\n role=\"combobox\"\n type=\"text\"\n :value=\"query\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :aria-controls=\"isOpen ? listboxId : undefined\"\n :aria-expanded=\"isOpen\"\n :aria-activedescendant=\"activeDescendant\"\n :aria-invalid=\"invalid || undefined\"\n :aria-busy=\"loading || undefined\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n @input=\"onInput\"\n @focus=\"onInputFocus\"\n @click=\"onInputClick\"\n @keydown=\"onInputKeydown\"\n >\n <TreeSpinner\n v-if=\"loading\"\n size=\"sm\"\n label=\"Loading\"\n />\n <svg\n v-else\n class=\"tree-combobox__indicator\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"4 6 8 10 12 6\" />\n </svg>\n </div>\n\n <transition name=\"tree-fade\">\n <ul\n v-if=\"isOpen && !disabled\"\n :id=\"listboxId\"\n role=\"listbox\"\n class=\"tree-combobox__listbox\"\n :aria-label=\"listboxLabel\"\n :aria-labelledby=\"listboxLabelledby\"\n >\n <li\n v-if=\"filteredOptions.length === 0\"\n class=\"tree-combobox__empty\"\n >\n <slot\n name=\"empty\"\n :query=\"query\"\n >\n {{ emptyText }}\n </slot>\n </li>\n\n <template v-else>\n <li\n v-for=\"(option, index) in filteredOptions\"\n :id=\"getOptionId(option.value)\"\n :key=\"option.value\"\n role=\"option\"\n class=\"tree-combobox__option\"\n :class=\"{\n 'is-active': index === activeIndex,\n 'is-disabled': option.disabled,\n 'is-selected': option.value === modelValue,\n }\"\n :aria-selected=\"option.value === modelValue\"\n :aria-disabled=\"option.disabled || undefined\"\n @mouseenter=\"onOptionPointerEnter(index)\"\n @click=\"selectOption(option)\"\n >\n <slot\n name=\"option\"\n :option=\"option\"\n :selected=\"option.value === modelValue\"\n :active=\"index === activeIndex\"\n >\n <span class=\"tree-combobox__option-copy\">\n <span class=\"tree-combobox__option-label\">{{ option.label }}</span>\n <span\n v-if=\"option.description\"\n class=\"tree-combobox__option-description\"\n >\n {{ option.description }}\n </span>\n </span>\n <svg\n v-if=\"option.value === modelValue\"\n class=\"tree-combobox__check\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"3.5 8.5 6.5 11.5 12.5 4.5\" />\n </svg>\n </slot>\n </li>\n </template>\n </ul>\n </transition>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport {\n createId,\n focusFirst,\n focusLast,\n getFocusableElements,\n isEscapeKey,\n} from '@treeui/utils';\nimport { getTreeIcon, treeIconDefaults } from '@treeui/icons';\nimport {\n computed,\n nextTick,\n onBeforeUnmount,\n ref,\n toRef,\n useAttrs,\n watch,\n} from 'vue';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst CloseIcon = getTreeIcon('x');\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n size?: TreeSize;\n title?: string;\n description?: string;\n closeOnEscape?: boolean;\n closeOnOverlay?: boolean;\n showCloseButton?: boolean;\n closeLabel?: string;\n id?: string;\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n size: 'md',\n title: '',\n description: '',\n closeOnEscape: true,\n closeOnOverlay: true,\n showCloseButton: true,\n closeLabel: 'Close modal',\n id: undefined,\n },\n);\n\nconst emit = defineEmits<{\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n}>();\n\nconst attrs = useAttrs();\nconst modalId = props.id ?? createId('tree-modal');\nconst titleId = `${modalId}-title`;\nconst descriptionId = `${modalId}-description`;\nconst rootRef = ref<HTMLElement | null>(null);\nconst surfaceRef = ref<HTMLElement | null>(null);\nconst previousFocusedElement = ref<HTMLElement | null>(null);\nconst hasHeaderContent = computed(() => Boolean(props.title || slots.header));\n\nconst slots = defineSlots<{\n default?: () => unknown;\n trigger?: () => unknown;\n header?: () => unknown;\n content?: () => unknown;\n footer?: () => unknown;\n}>();\n\nconst rootClasses = computed(() => ['tree-modal', attrs.class]);\nconst rootStyle = computed(() => attrs.style);\nconst triggerAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\nconst surfaceClasses = computed(() => [\n 'tree-modal__surface',\n `tree-modal__surface--${props.size}`,\n]);\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst labelledBy = computed(() => (hasHeaderContent.value ? titleId : undefined));\nconst describedBy = computed(() => (props.description ? descriptionId : undefined));\n\nlet openOverlayCount = 0;\nlet previousBodyOverflow = '';\n\nconst lockBodyScroll = () => {\n if (typeof document === 'undefined') {\n return;\n }\n\n if (openOverlayCount === 0) {\n previousBodyOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n\n openOverlayCount += 1;\n};\n\nconst unlockBodyScroll = () => {\n if (typeof document === 'undefined' || openOverlayCount === 0) {\n return;\n }\n\n openOverlayCount -= 1;\n\n if (openOverlayCount === 0) {\n document.body.style.overflow = previousBodyOverflow;\n }\n};\n\nconst focusSurface = () => {\n nextTick(() => {\n if (!surfaceRef.value) {\n return;\n }\n\n const focused = focusFirst(surfaceRef.value);\n if (!focused) {\n surfaceRef.value.focus();\n }\n });\n};\n\nconst openModal = () => {\n if (props.disabled) {\n return;\n }\n\n previousFocusedElement.value = document.activeElement as HTMLElement | null;\n setValue(true);\n};\n\nconst closeModal = () => {\n setValue(false);\n};\n\nconst onTriggerClick = (event: MouseEvent) => {\n if (props.disabled) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n if (event.defaultPrevented) {\n return;\n }\n\n openModal();\n};\n\nconst onOverlayClick = () => {\n if (!props.closeOnOverlay) {\n return;\n }\n\n closeModal();\n};\n\nconst onSurfaceClick = (event: MouseEvent) => {\n event.stopPropagation();\n};\n\nconst onKeydown = (event: KeyboardEvent) => {\n if (isEscapeKey(event) && props.closeOnEscape) {\n event.preventDefault();\n closeModal();\n return;\n }\n\n if (event.key !== 'Tab' || !surfaceRef.value) {\n return;\n }\n\n const focusable = getFocusableElements(surfaceRef.value);\n\n if (!focusable.length) {\n event.preventDefault();\n surfaceRef.value.focus();\n return;\n }\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const activeElement = document.activeElement as HTMLElement | null;\n\n if (event.shiftKey && activeElement === first) {\n event.preventDefault();\n focusLast(surfaceRef.value);\n }\n\n if (!event.shiftKey && activeElement === last) {\n event.preventDefault();\n focusFirst(surfaceRef.value);\n }\n};\n\nwatch(isOpen, (value, previousValue) => {\n if (value) {\n lockBodyScroll();\n focusSurface();\n return;\n }\n\n if (previousValue) {\n unlockBodyScroll();\n nextTick(() => {\n previousFocusedElement.value?.focus();\n });\n }\n});\n\nonBeforeUnmount(() => {\n if (isOpen.value) {\n unlockBodyScroll();\n }\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <span\n v-if=\"$slots.trigger\"\n class=\"tree-modal__trigger\"\n v-bind=\"triggerAttrs\"\n :aria-disabled=\"disabled || undefined\"\n @click=\"onTriggerClick\"\n >\n <slot name=\"trigger\" />\n </span>\n\n <Teleport to=\"body\">\n <transition name=\"tree-modal-fade\">\n <div\n v-if=\"isOpen\"\n class=\"tree-modal__portal\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <div\n class=\"tree-modal__backdrop\"\n aria-hidden=\"true\"\n @click=\"onOverlayClick\"\n />\n <div class=\"tree-modal__positioner\">\n <div\n :id=\"modalId\"\n ref=\"surfaceRef\"\n :class=\"surfaceClasses\"\n role=\"dialog\"\n aria-modal=\"true\"\n :aria-labelledby=\"labelledBy\"\n :aria-describedby=\"describedBy\"\n tabindex=\"-1\"\n @click=\"onSurfaceClick\"\n @keydown=\"onKeydown\"\n >\n <div\n v-if=\"hasHeaderContent || showCloseButton\"\n class=\"tree-modal__topbar\"\n >\n <div\n v-if=\"hasHeaderContent\"\n :id=\"titleId\"\n class=\"tree-modal__header\"\n >\n <slot name=\"header\">\n <h2 class=\"tree-modal__title\">\n {{ title }}\n </h2>\n </slot>\n </div>\n <button\n v-if=\"showCloseButton\"\n type=\"button\"\n class=\"tree-modal__close\"\n :aria-label=\"closeLabel\"\n @click=\"closeModal\"\n >\n <CloseIcon v-bind=\"treeIconDefaults\" />\n </button>\n </div>\n\n <p\n v-if=\"description\"\n :id=\"descriptionId\"\n class=\"tree-modal__description\"\n >\n {{ description }}\n </p>\n\n <div class=\"tree-modal__body\">\n <slot name=\"content\">\n <slot />\n </slot>\n </div>\n\n <div\n v-if=\"$slots.footer\"\n class=\"tree-modal__footer\"\n >\n <slot name=\"footer\" />\n </div>\n </div>\n </div>\n </div>\n </transition>\n </Teleport>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, toRef, useAttrs } from 'vue';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeSize, TreeVariant } from '../types/contracts';\nimport TreeButton from './TreeButton.vue';\nimport TreeModal from './TreeModal.vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst slots = defineSlots<{\n trigger?: () => unknown;\n icon?: () => unknown;\n default?: () => unknown;\n actions?: (props: {\n confirm: () => void;\n cancel: () => void;\n loading: boolean;\n }) => unknown;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n size?: TreeSize;\n title?: string;\n description?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n confirmVariant?: TreeVariant;\n confirmDisabled?: boolean;\n cancelDisabled?: boolean;\n loading?: boolean;\n closeOnEscape?: boolean;\n closeOnOverlay?: boolean;\n showCloseButton?: boolean;\n closeLabel?: string;\n closeOnConfirm?: boolean;\n closeOnCancel?: boolean;\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n size: 'sm',\n title: '',\n description: '',\n confirmLabel: 'Confirm',\n cancelLabel: 'Cancel',\n confirmVariant: 'danger',\n confirmDisabled: false,\n cancelDisabled: false,\n loading: false,\n closeOnEscape: true,\n closeOnOverlay: false,\n showCloseButton: false,\n closeLabel: 'Close dialog',\n closeOnConfirm: true,\n closeOnCancel: true,\n },\n);\n\nconst emit = defineEmits<{\n confirm: [];\n cancel: [];\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n}>();\n\nconst attrs = useAttrs();\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst dialogClasses = computed(() => [\n 'tree-confirm-dialog',\n {\n 'tree-confirm-dialog--with-icon': Boolean(slots.icon),\n },\n]);\n\nconst hasBodyContent = computed(() => Boolean(slots.default));\n\nconst closeDialog = () => {\n setValue(false);\n};\n\nconst syncOpen = (value: boolean) => {\n setValue(value);\n};\n\nconst handleCancel = () => {\n if (props.cancelDisabled) {\n return;\n }\n\n emit('cancel');\n\n if (props.closeOnCancel) {\n closeDialog();\n }\n};\n\nconst handleConfirm = () => {\n if (props.confirmDisabled || props.loading) {\n return;\n }\n\n emit('confirm');\n\n if (props.closeOnConfirm) {\n closeDialog();\n }\n};\n</script>\n\n<template>\n <TreeModal\n v-bind=\"attrs\"\n :open=\"isOpen\"\n :disabled=\"disabled\"\n :size=\"size\"\n :title=\"title\"\n :description=\"description\"\n :close-on-escape=\"closeOnEscape\"\n :close-on-overlay=\"closeOnOverlay\"\n :show-close-button=\"showCloseButton\"\n :close-label=\"closeLabel\"\n @update:open=\"syncOpen\"\n >\n <template\n v-if=\"$slots.trigger\"\n #trigger\n >\n <slot name=\"trigger\" />\n </template>\n\n <template #content>\n <div :class=\"dialogClasses\">\n <div\n v-if=\"$slots.icon\"\n class=\"tree-confirm-dialog__icon\"\n aria-hidden=\"true\"\n >\n <slot name=\"icon\" />\n </div>\n\n <div\n v-if=\"hasBodyContent\"\n class=\"tree-confirm-dialog__body\"\n >\n <slot />\n </div>\n </div>\n </template>\n\n <template #footer>\n <slot\n name=\"actions\"\n :confirm=\"handleConfirm\"\n :cancel=\"handleCancel\"\n :loading=\"loading\"\n >\n <TreeButton\n variant=\"ghost\"\n :disabled=\"cancelDisabled\"\n @click=\"handleCancel\"\n >\n {{ cancelLabel }}\n </TreeButton>\n <TreeButton\n :variant=\"confirmVariant\"\n :loading=\"loading\"\n :disabled=\"confirmDisabled\"\n @click=\"handleConfirm\"\n >\n {{ confirmLabel }}\n </TreeButton>\n </slot>\n </template>\n </TreeModal>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst _treeContainerSizes = ['sm', 'md', 'lg', 'xl', 'full'] as const;\n\nexport type TreeContainerSize = (typeof _treeContainerSizes)[number];\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n size?: TreeContainerSize;\n padded?: boolean;\n centered?: boolean;\n }>(),\n {\n as: 'div',\n size: 'lg',\n padded: true,\n centered: true,\n },\n);\n\nconst attrs = useAttrs();\n\nconst rootClasses = computed(() => [\n 'tree-container',\n `tree-container--${props.size}`,\n {\n 'is-padded': props.padded,\n 'is-centered': props.centered,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <slot />\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { createId, isActivationKey, isEscapeKey } from '@treeui/utils';\nimport { computed, nextTick, onBeforeUnmount, ref, toRef, watch } from 'vue';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeSize } from '../types/contracts';\n\nexport interface TreeContextMenuItem {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\nconst props = withDefaults(\n defineProps<{\n items?: TreeContextMenuItem[];\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n size?: TreeSize;\n }>(),\n {\n items: () => [],\n open: undefined,\n defaultOpen: false,\n disabled: false,\n size: 'md',\n },\n);\n\nconst emit = defineEmits<{\n select: [value: string];\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n}>();\n\ndefineSlots<{\n default(): unknown;\n item(props: { item: TreeContextMenuItem; index: number }): unknown;\n}>();\n\nconst menuId = createId('tree-context-menu');\nconst rootRef = ref<HTMLElement | null>(null);\nconst itemRefs = ref<Map<string, HTMLElement>>(new Map());\nconst focusedIndex = ref(-1);\nconst menuPosition = ref({ x: 0, y: 0 });\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst rootClasses = computed(() => [\n 'tree-context-menu',\n `tree-context-menu--${props.size}`,\n {\n 'is-disabled': props.disabled,\n 'is-open': isOpen.value,\n },\n]);\n\nconst enabledItems = computed(() => props.items.filter((i) => !i.disabled));\n\nconst openMenu = (x: number, y: number) => {\n if (props.disabled) return;\n menuPosition.value = { x, y };\n focusedIndex.value = enabledItems.value.length > 0\n ? props.items.indexOf(enabledItems.value[0])\n : 0;\n setValue(true);\n nextTick(() => focusItem(focusedIndex.value));\n};\n\nconst closeMenu = (restoreFocus = false) => {\n setValue(false);\n focusedIndex.value = -1;\n if (restoreFocus) {\n nextTick(() => rootRef.value?.focus());\n }\n};\n\nconst selectItem = (item: TreeContextMenuItem) => {\n if (item.disabled) return;\n emit('select', item.value);\n closeMenu(true);\n};\n\nconst focusItem = (index: number) => {\n const item = props.items[index];\n if (!item) return;\n const el = itemRefs.value.get(item.value);\n el?.focus();\n};\n\nconst setItemRef = (el: Element | null, value: string) => {\n if (el instanceof HTMLElement) {\n itemRefs.value.set(value, el);\n } else {\n itemRefs.value.delete(value);\n }\n};\n\nconst moveFocus = (direction: 1 | -1) => {\n let nextIndex = focusedIndex.value + direction;\n while (nextIndex >= 0 && nextIndex < props.items.length) {\n if (!props.items[nextIndex].disabled) {\n focusedIndex.value = nextIndex;\n focusItem(nextIndex);\n return;\n }\n nextIndex += direction;\n }\n};\n\nconst onContextMenu = (event: MouseEvent) => {\n if (props.disabled) return;\n event.preventDefault();\n openMenu(event.clientX, event.clientY);\n};\n\nconst onItemKeydown = (event: KeyboardEvent, item: TreeContextMenuItem) => {\n if (isEscapeKey(event)) {\n event.preventDefault();\n closeMenu(true);\n return;\n }\n\n if (isActivationKey(event)) {\n event.preventDefault();\n selectItem(item);\n return;\n }\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n moveFocus(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n moveFocus(-1);\n break;\n case 'Home':\n event.preventDefault();\n focusedIndex.value = enabledItems.value.length > 0\n ? props.items.indexOf(enabledItems.value[0])\n : 0;\n focusItem(focusedIndex.value);\n break;\n case 'End':\n event.preventDefault();\n focusedIndex.value = enabledItems.value.length > 0\n ? props.items.indexOf(enabledItems.value[enabledItems.value.length - 1])\n : props.items.length - 1;\n focusItem(focusedIndex.value);\n break;\n default:\n break;\n }\n};\n\nconst onDocumentPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) return;\n const target = event.target;\n if (!(target instanceof Node)) return;\n const menuEl = document.getElementById(menuId);\n if (menuEl?.contains(target)) return;\n closeMenu();\n};\n\nconst onDocumentContextMenu = (event: MouseEvent) => {\n if (!isOpen.value) return;\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (rootRef.value?.contains(target)) return;\n closeMenu();\n};\n\nwatch(isOpen, (value) => {\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n document.addEventListener('contextmenu', onDocumentContextMenu);\n } else {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n document.removeEventListener('contextmenu', onDocumentContextMenu);\n }\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n document.removeEventListener('contextmenu', onDocumentContextMenu);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n @contextmenu=\"onContextMenu\"\n >\n <slot />\n <Teleport to=\"body\">\n <transition name=\"tree-fade\">\n <ul\n v-if=\"isOpen && !disabled\"\n :id=\"menuId\"\n role=\"menu\"\n class=\"tree-context-menu__menu\"\n :class=\"`tree-context-menu--${size}`\"\n :style=\"{ top: `${menuPosition.y}px`, left: `${menuPosition.x}px` }\"\n aria-label=\"Context menu\"\n >\n <li\n v-for=\"(item, index) in items\"\n :key=\"item.value\"\n :ref=\"(el) => setItemRef(el as Element | null, item.value)\"\n role=\"menuitem\"\n class=\"tree-context-menu__item\"\n :class=\"{\n 'is-disabled': item.disabled,\n 'is-focused': index === focusedIndex,\n }\"\n :aria-disabled=\"item.disabled || undefined\"\n :tabindex=\"item.disabled ? -1 : 0\"\n @click=\"selectItem(item)\"\n @keydown=\"onItemKeydown($event, item)\"\n >\n <slot\n name=\"item\"\n :item=\"item\"\n :index=\"index\"\n >\n {{ item.label }}\n </slot>\n </li>\n </ul>\n </transition>\n </Teleport>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport {\n addDays,\n addMonths,\n createId,\n isActivationKey,\n isEscapeKey,\n isSameDay,\n parseDateValue,\n startOfDay,\n startOfMonth,\n startOfWeek,\n toDateValue,\n} from '@treeui/utils';\nimport { getTreeIcon, treeIconDefaults } from '@treeui/icons';\nimport {\n type ComponentPublicInstance,\n computed,\n nextTick,\n onBeforeUnmount,\n ref,\n toRef,\n useAttrs,\n watch,\n} from 'vue';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\ninterface CalendarCell {\n date: Date;\n dayLabel: number;\n disabled: boolean;\n inMonth: boolean;\n isFocused: boolean;\n isSelected: boolean;\n isToday: boolean;\n key: string;\n}\n\nconst CalendarIcon = getTreeIcon('calendar');\nconst ChevronLeftIcon = getTreeIcon('chevron-left');\nconst ChevronRightIcon = getTreeIcon('chevron-right');\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string;\n open?: boolean;\n defaultOpen?: boolean;\n size?: TreeSize;\n disabled?: boolean;\n invalid?: boolean;\n placeholder?: string;\n locale?: string;\n min?: string;\n max?: string;\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n id?: string;\n }>(),\n {\n modelValue: '',\n open: undefined,\n defaultOpen: false,\n size: 'md',\n disabled: false,\n invalid: false,\n placeholder: 'Select date',\n locale: 'en-US',\n min: '',\n max: '',\n weekStartsOn: 0,\n id: undefined,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n select: [value: string];\n}>();\n\nconst attrs = useAttrs();\nconst today = startOfDay(new Date());\nconst selectedDate = computed(() => parseDateValue(props.modelValue));\nconst minDate = computed(() => parseDateValue(props.min));\nconst maxDate = computed(() => parseDateValue(props.max));\nconst calendarId = props.id ?? createId('tree-date-picker');\nconst captionId = `${calendarId}-caption`;\nconst rootRef = ref<HTMLElement | null>(null);\nconst triggerRef = ref<HTMLButtonElement | null>(null);\nconst dayRefs = new Map<string, HTMLButtonElement>();\nconst viewMonth = ref(startOfMonth(selectedDate.value ?? today));\nconst focusedDate = ref<Date>(selectedDate.value ?? today);\n\nconst triggerAttrs = computed(() => {\n const { class: _class, style: _style, name: _name, ...rest } = attrs;\n return rest;\n});\n\nconst hiddenInputName = computed(() =>\n typeof attrs.name === 'string' ? attrs.name : undefined,\n);\n\nconst rootClasses = computed(() => [\n 'tree-date-picker',\n `tree-date-picker--${props.size}`,\n {\n 'is-disabled': props.disabled,\n 'is-invalid': props.invalid,\n 'is-open': isOpen.value,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst triggerText = computed(() => {\n if (!selectedDate.value) {\n return props.placeholder;\n }\n\n return new Intl.DateTimeFormat(props.locale, {\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n }).format(selectedDate.value);\n});\n\nconst monthLabel = computed(() =>\n new Intl.DateTimeFormat(props.locale, {\n month: 'long',\n year: 'numeric',\n }).format(viewMonth.value),\n);\n\nconst weekdayLabels = computed(() => {\n const formatter = new Intl.DateTimeFormat(props.locale, { weekday: 'short' });\n const weekBase = startOfWeek(new Date(2024, 0, 7), props.weekStartsOn);\n\n return Array.from({ length: 7 }, (_, index) =>\n formatter.format(addDays(weekBase, index)),\n );\n});\n\nconst isDateDisabled = (date: Date) => {\n if (props.disabled) {\n return true;\n }\n\n if (minDate.value && date < minDate.value) {\n return true;\n }\n\n if (maxDate.value && date > maxDate.value) {\n return true;\n }\n\n return false;\n};\n\nconst syncCalendarView = (date: Date) => {\n focusedDate.value = startOfDay(date);\n viewMonth.value = startOfMonth(date);\n};\n\nwatch(\n selectedDate,\n (value) => {\n if (value) {\n syncCalendarView(value);\n return;\n }\n\n if (!isOpen.value) {\n syncCalendarView(today);\n }\n },\n { immediate: true },\n);\n\nconst cells = computed(() => {\n const startDate = startOfWeek(startOfMonth(viewMonth.value), props.weekStartsOn);\n\n return Array.from({ length: 6 }, (_, weekIndex) =>\n Array.from({ length: 7 }, (_, dayIndex) => {\n const date = addDays(startDate, weekIndex * 7 + dayIndex);\n const key = toDateValue(date);\n\n return {\n date,\n dayLabel: date.getDate(),\n disabled: isDateDisabled(date),\n inMonth: date.getMonth() === viewMonth.value.getMonth(),\n isFocused: isSameDay(date, focusedDate.value),\n isSelected: isSameDay(date, selectedDate.value),\n isToday: isSameDay(date, today),\n key,\n } satisfies CalendarCell;\n }),\n );\n});\n\nconst canMovePrev = computed(() => {\n if (!minDate.value) {\n return true;\n }\n\n return startOfMonth(viewMonth.value) > startOfMonth(minDate.value);\n});\n\nconst canMoveNext = computed(() => {\n if (!maxDate.value) {\n return true;\n }\n\n return startOfMonth(viewMonth.value) < startOfMonth(maxDate.value);\n});\n\nconst focusCurrentDay = () => {\n const key = toDateValue(focusedDate.value);\n nextTick(() => {\n dayRefs.get(key)?.focus();\n });\n};\n\nconst setDayRef = (\n element: Element | ComponentPublicInstance | null,\n key: string,\n) => {\n if (element instanceof HTMLButtonElement) {\n dayRefs.set(key, element);\n return;\n }\n\n dayRefs.delete(key);\n};\n\nconst openCalendar = () => {\n if (props.disabled) {\n return;\n }\n\n syncCalendarView(selectedDate.value ?? focusedDate.value ?? today);\n setValue(true);\n focusCurrentDay();\n};\n\nconst closeCalendar = (restoreFocus = false) => {\n setValue(false);\n\n if (restoreFocus) {\n nextTick(() => {\n triggerRef.value?.focus();\n });\n }\n};\n\nconst toggleCalendar = () => {\n if (isOpen.value) {\n closeCalendar();\n return;\n }\n\n openCalendar();\n};\n\nconst moveCalendar = (direction: 1 | -1) => {\n const nextMonth = addMonths(viewMonth.value, direction);\n syncCalendarView(nextMonth);\n focusCurrentDay();\n};\n\nconst moveFocus = (nextDate: Date) => {\n if (isDateDisabled(nextDate)) {\n return;\n }\n\n syncCalendarView(nextDate);\n focusCurrentDay();\n};\n\nconst selectDate = (date: Date) => {\n if (isDateDisabled(date)) {\n return;\n }\n\n const normalizedDate = startOfDay(date);\n const value = toDateValue(normalizedDate);\n\n syncCalendarView(normalizedDate);\n emit('update:modelValue', value);\n emit('select', value);\n closeCalendar(true);\n};\n\nconst onTriggerKeydown = (event: KeyboardEvent) => {\n if (props.disabled) {\n return;\n }\n\n if (isEscapeKey(event) && isOpen.value) {\n event.preventDefault();\n closeCalendar();\n return;\n }\n\n if (\n isActivationKey(event) ||\n event.key === 'ArrowDown' ||\n event.key === 'ArrowUp'\n ) {\n event.preventDefault();\n openCalendar();\n }\n};\n\nconst onDayKeydown = (event: KeyboardEvent, date: Date) => {\n if (isEscapeKey(event)) {\n event.preventDefault();\n closeCalendar(true);\n return;\n }\n\n if (isActivationKey(event)) {\n event.preventDefault();\n selectDate(date);\n return;\n }\n\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n moveFocus(addDays(date, -1));\n break;\n case 'ArrowRight':\n event.preventDefault();\n moveFocus(addDays(date, 1));\n break;\n case 'ArrowUp':\n event.preventDefault();\n moveFocus(addDays(date, -7));\n break;\n case 'ArrowDown':\n event.preventDefault();\n moveFocus(addDays(date, 7));\n break;\n case 'Home':\n event.preventDefault();\n moveFocus(startOfWeek(date, props.weekStartsOn));\n break;\n case 'End':\n event.preventDefault();\n moveFocus(addDays(startOfWeek(date, props.weekStartsOn), 6));\n break;\n case 'PageUp':\n event.preventDefault();\n moveFocus(addMonths(date, event.shiftKey ? -12 : -1));\n break;\n case 'PageDown':\n event.preventDefault();\n moveFocus(addMonths(date, event.shiftKey ? 12 : 1));\n break;\n default:\n break;\n }\n};\n\nconst onDocumentPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) {\n return;\n }\n\n const target = event.target;\n if (!(target instanceof Node)) {\n return;\n }\n\n if (rootRef.value?.contains(target)) {\n return;\n }\n\n closeCalendar();\n};\n\nwatch(isOpen, (value) => {\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n return;\n }\n\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <input\n v-if=\"hiddenInputName\"\n type=\"hidden\"\n :name=\"hiddenInputName\"\n :value=\"modelValue\"\n >\n <button\n ref=\"triggerRef\"\n v-bind=\"triggerAttrs\"\n type=\"button\"\n class=\"tree-date-picker__trigger\"\n :disabled=\"disabled\"\n :aria-controls=\"isOpen ? calendarId : undefined\"\n aria-haspopup=\"dialog\"\n :aria-expanded=\"isOpen\"\n :aria-invalid=\"invalid || undefined\"\n @click=\"toggleCalendar\"\n @keydown=\"onTriggerKeydown\"\n >\n <span\n v-if=\"$slots.prefix\"\n class=\"tree-date-picker__slot tree-date-picker__slot--prefix\"\n >\n <slot name=\"prefix\" />\n </span>\n <span\n class=\"tree-date-picker__value\"\n :data-placeholder=\"selectedDate ? undefined : true\"\n >\n {{ triggerText }}\n </span>\n <span class=\"tree-date-picker__slot tree-date-picker__slot--suffix\">\n <slot name=\"suffix\">\n <CalendarIcon v-bind=\"treeIconDefaults\" />\n </slot>\n </span>\n </button>\n\n <transition name=\"tree-fade\">\n <div\n v-if=\"isOpen && !disabled\"\n :id=\"calendarId\"\n class=\"tree-date-picker__content\"\n role=\"dialog\"\n aria-modal=\"false\"\n :aria-labelledby=\"captionId\"\n >\n <div class=\"tree-date-picker__header\">\n <button\n type=\"button\"\n class=\"tree-date-picker__nav\"\n :disabled=\"!canMovePrev\"\n aria-label=\"Previous month\"\n @click=\"moveCalendar(-1)\"\n >\n <ChevronLeftIcon v-bind=\"treeIconDefaults\" />\n </button>\n <p\n :id=\"captionId\"\n class=\"tree-date-picker__month\"\n >\n {{ monthLabel }}\n </p>\n <button\n type=\"button\"\n class=\"tree-date-picker__nav\"\n :disabled=\"!canMoveNext\"\n aria-label=\"Next month\"\n @click=\"moveCalendar(1)\"\n >\n <ChevronRightIcon v-bind=\"treeIconDefaults\" />\n </button>\n </div>\n\n <div\n class=\"tree-date-picker__weekdays\"\n aria-hidden=\"true\"\n >\n <span\n v-for=\"label in weekdayLabels\"\n :key=\"label\"\n class=\"tree-date-picker__weekday\"\n >\n {{ label }}\n </span>\n </div>\n\n <div\n class=\"tree-date-picker__grid\"\n role=\"grid\"\n :aria-labelledby=\"captionId\"\n >\n <div\n v-for=\"(week, weekIndex) in cells\"\n :key=\"weekIndex\"\n class=\"tree-date-picker__row\"\n role=\"row\"\n >\n <div\n v-for=\"cell in week\"\n :key=\"cell.key\"\n class=\"tree-date-picker__cell\"\n role=\"gridcell\"\n :aria-selected=\"cell.isSelected\"\n >\n <button\n :ref=\"(element) => setDayRef(element, cell.key)\"\n type=\"button\"\n class=\"tree-date-picker__day\"\n :class=\"{\n 'is-muted': !cell.inMonth,\n 'is-selected': cell.isSelected,\n 'is-today': cell.isToday,\n }\"\n :data-date=\"cell.key\"\n :disabled=\"cell.disabled\"\n :tabindex=\"cell.isFocused ? 0 : -1\"\n :aria-current=\"cell.isToday ? 'date' : undefined\"\n :aria-label=\"cell.key\"\n @click=\"selectDate(cell.date)\"\n @keydown=\"onDayKeydown($event, cell.date)\"\n >\n {{ cell.dayLabel }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </transition>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport {\n addDays,\n addMonths,\n createId,\n isActivationKey,\n isEscapeKey,\n isSameDay,\n startOfDay,\n startOfMonth,\n startOfWeek,\n toDateValue,\n} from '@treeui/utils';\nimport { getTreeIcon, treeIconDefaults } from '@treeui/icons';\nimport {\n type ComponentPublicInstance,\n computed,\n nextTick,\n onBeforeUnmount,\n ref,\n toRef,\n useAttrs,\n watch,\n} from 'vue';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeSize } from '../types/contracts';\nimport TreeSpinner from './TreeSpinner.vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\ninterface CalendarCell {\n date: Date;\n dayLabel: number;\n disabled: boolean;\n inMonth: boolean;\n isFocused: boolean;\n isSelected: boolean;\n isToday: boolean;\n key: string;\n}\n\ninterface TimeOption {\n disabled: boolean;\n label: string;\n value: number;\n}\n\nconst CalendarIcon = getTreeIcon('calendar');\nconst ChevronLeftIcon = getTreeIcon('chevron-left');\nconst ChevronRightIcon = getTreeIcon('chevron-right');\n\nconst dateOnlyPattern = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\nconst dateTimePattern = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})(?::(\\d{2}))?$/;\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string;\n open?: boolean;\n defaultOpen?: boolean;\n size?: TreeSize;\n disabled?: boolean;\n loading?: boolean;\n invalid?: boolean;\n placeholder?: string;\n locale?: string;\n min?: string;\n max?: string;\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n id?: string;\n step?: number;\n }>(),\n {\n modelValue: '',\n open: undefined,\n defaultOpen: false,\n size: 'md',\n disabled: false,\n loading: false,\n invalid: false,\n placeholder: 'Select date and time',\n locale: 'en-US',\n min: '',\n max: '',\n weekStartsOn: 0,\n id: undefined,\n step: 60,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n change: [value: string];\n select: [value: string];\n}>();\n\nconst attrs = useAttrs();\n\nconst cloneDate = (value: Date) => new Date(value.getTime());\n\nconst formatPart = (value: number) => `${value}`.padStart(2, '0');\n\nconst endOfDay = (date: Date) =>\n new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999);\n\nconst parseBoundaryValue = (\n value: string | null | undefined,\n boundary: 'exact' | 'start' | 'end' = 'exact',\n) => {\n if (!value) {\n return null;\n }\n\n const dateOnlyMatch = value.match(dateOnlyPattern);\n if (dateOnlyMatch) {\n const [, yearToken, monthToken, dayToken] = dateOnlyMatch;\n const year = Number.parseInt(yearToken, 10);\n const month = Number.parseInt(monthToken, 10);\n const day = Number.parseInt(dayToken, 10);\n const hour = boundary === 'end' ? 23 : 0;\n const minute = boundary === 'end' ? 59 : 0;\n const second = boundary === 'end' ? 59 : 0;\n const millisecond = boundary === 'end' ? 999 : 0;\n const date = new Date(year, month - 1, day, hour, minute, second, millisecond);\n\n if (\n Number.isNaN(date.getTime()) ||\n date.getFullYear() !== year ||\n date.getMonth() !== month - 1 ||\n date.getDate() !== day\n ) {\n return null;\n }\n\n return date;\n }\n\n const dateTimeMatch = value.match(dateTimePattern);\n if (!dateTimeMatch) {\n return null;\n }\n\n const [, yearToken, monthToken, dayToken, hourToken, minuteToken, secondToken] =\n dateTimeMatch;\n const year = Number.parseInt(yearToken, 10);\n const month = Number.parseInt(monthToken, 10);\n const day = Number.parseInt(dayToken, 10);\n const hour = Number.parseInt(hourToken, 10);\n const minute = Number.parseInt(minuteToken, 10);\n const second = secondToken ? Number.parseInt(secondToken, 10) : 0;\n const date = new Date(year, month - 1, day, hour, minute, second, 0);\n\n if (\n Number.isNaN(date.getTime()) ||\n date.getFullYear() !== year ||\n date.getMonth() !== month - 1 ||\n date.getDate() !== day ||\n date.getHours() !== hour ||\n date.getMinutes() !== minute ||\n date.getSeconds() !== second\n ) {\n return null;\n }\n\n return date;\n};\n\nconst toDateTimeValue = (date: Date) =>\n `${toDateValue(date)}T${formatPart(date.getHours())}:${formatPart(date.getMinutes())}`;\n\nconst setDatePart = (source: Date, targetDate: Date) =>\n new Date(\n targetDate.getFullYear(),\n targetDate.getMonth(),\n targetDate.getDate(),\n source.getHours(),\n source.getMinutes(),\n 0,\n 0,\n );\n\nconst setTimePart = (source: Date, hour: number, minute: number) =>\n new Date(\n source.getFullYear(),\n source.getMonth(),\n source.getDate(),\n hour,\n minute,\n 0,\n 0,\n );\n\nconst resolveMinuteStep = (step: number) => {\n if (!Number.isFinite(step) || step <= 0 || step % 60 !== 0) {\n return 1;\n }\n\n const minuteStep = step / 60;\n return minuteStep >= 60 ? 1 : minuteStep;\n};\n\nconst today = startOfDay(new Date());\nconst selectedDateTime = computed(() => parseBoundaryValue(props.modelValue, 'exact'));\nconst minDateTime = computed(() => parseBoundaryValue(props.min, 'start'));\nconst maxDateTime = computed(() => parseBoundaryValue(props.max, 'end'));\nconst pickerId = props.id ?? createId('tree-date-time-picker');\nconst captionId = `${pickerId}-caption`;\nconst rootRef = ref<HTMLElement | null>(null);\nconst triggerRef = ref<HTMLButtonElement | null>(null);\nconst dayRefs = new Map<string, HTMLButtonElement>();\n\nconst clampToRange = (value: Date) => {\n let nextValue = cloneDate(value);\n\n if (minDateTime.value && nextValue < minDateTime.value) {\n nextValue = cloneDate(minDateTime.value);\n }\n\n if (maxDateTime.value && nextValue > maxDateTime.value) {\n nextValue = cloneDate(maxDateTime.value);\n }\n\n return nextValue;\n};\n\nconst createDefaultDraftDateTime = () => {\n const reference = new Date();\n const stepMilliseconds = Math.max(props.step, 60) * 1000;\n const rounded = new Date(Math.ceil(reference.getTime() / stepMilliseconds) * stepMilliseconds);\n\n rounded.setSeconds(0, 0);\n return clampToRange(rounded);\n};\n\nconst initialDateTime = selectedDateTime.value ?? createDefaultDraftDateTime();\nconst draftDateTime = ref(initialDateTime);\nconst focusedDate = ref(startOfDay(initialDateTime));\nconst viewMonth = ref(startOfMonth(initialDateTime));\n\nconst triggerAttrs = computed(() => {\n const { class: _class, style: _style, name: _name, ...rest } = attrs;\n return rest;\n});\n\nconst hiddenInputName = computed(() =>\n typeof attrs.name === 'string' ? attrs.name : undefined,\n);\n\nconst rootClasses = computed(() => [\n 'tree-date-picker',\n 'tree-date-time-picker',\n `tree-date-picker--${props.size}`,\n {\n 'is-disabled': props.disabled,\n 'is-invalid': props.invalid,\n 'is-loading': props.loading,\n 'is-open': isOpen.value,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst triggerText = computed(() => {\n if (!selectedDateTime.value) {\n return props.placeholder;\n }\n\n return new Intl.DateTimeFormat(props.locale, {\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n month: 'long',\n year: 'numeric',\n }).format(selectedDateTime.value);\n});\n\nconst draftPreview = computed(() =>\n new Intl.DateTimeFormat(props.locale, {\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n month: 'long',\n year: 'numeric',\n }).format(draftDateTime.value),\n);\n\nconst monthLabel = computed(() =>\n new Intl.DateTimeFormat(props.locale, {\n month: 'long',\n year: 'numeric',\n }).format(viewMonth.value),\n);\n\nconst weekdayLabels = computed(() => {\n const formatter = new Intl.DateTimeFormat(props.locale, { weekday: 'short' });\n const weekBase = startOfWeek(new Date(2024, 0, 7), props.weekStartsOn);\n\n return Array.from({ length: 7 }, (_, index) =>\n formatter.format(addDays(weekBase, index)),\n );\n});\n\nconst minuteStep = computed(() => resolveMinuteStep(props.step));\n\nconst minuteValues = computed(() => {\n const values = new Set<number>();\n\n for (let minute = 0; minute < 60; minute += minuteStep.value) {\n values.add(minute);\n }\n\n values.add(draftDateTime.value.getMinutes());\n\n return [...values].sort((left, right) => left - right);\n});\n\nconst isDateDisabled = (date: Date) => {\n if (props.disabled) {\n return true;\n }\n\n const dayStart = startOfDay(date);\n const dayEnd = endOfDay(date);\n\n if (minDateTime.value && dayEnd < minDateTime.value) {\n return true;\n }\n\n if (maxDateTime.value && dayStart > maxDateTime.value) {\n return true;\n }\n\n return false;\n};\n\nconst isDateTimeDisabled = (value: Date) => {\n if (props.disabled) {\n return true;\n }\n\n if (minDateTime.value && value < minDateTime.value) {\n return true;\n }\n\n if (maxDateTime.value && value > maxDateTime.value) {\n return true;\n }\n\n return false;\n};\n\nconst syncCalendarView = (date: Date) => {\n focusedDate.value = startOfDay(date);\n viewMonth.value = startOfMonth(date);\n};\n\nconst syncDraftState = (dateTime: Date) => {\n const nextValue = clampToRange(dateTime);\n draftDateTime.value = nextValue;\n syncCalendarView(nextValue);\n};\n\nwatch(\n selectedDateTime,\n (value) => {\n if (isOpen.value) {\n return;\n }\n\n syncDraftState(value ?? createDefaultDraftDateTime());\n },\n { immediate: true },\n);\n\nconst draftDate = computed(() => startOfDay(draftDateTime.value));\n\nconst cells = computed(() => {\n const startDate = startOfWeek(startOfMonth(viewMonth.value), props.weekStartsOn);\n\n return Array.from({ length: 6 }, (_, weekIndex) =>\n Array.from({ length: 7 }, (_, dayIndex) => {\n const date = addDays(startDate, weekIndex * 7 + dayIndex);\n const key = toDateValue(date);\n\n return {\n date,\n dayLabel: date.getDate(),\n disabled: isDateDisabled(date),\n inMonth: date.getMonth() === viewMonth.value.getMonth(),\n isFocused: isSameDay(date, focusedDate.value),\n isSelected: isSameDay(date, draftDate.value),\n isToday: isSameDay(date, today),\n key,\n } satisfies CalendarCell;\n }),\n );\n});\n\nconst canMovePrev = computed(() => {\n if (!minDateTime.value) {\n return true;\n }\n\n return startOfMonth(viewMonth.value) > startOfMonth(minDateTime.value);\n});\n\nconst canMoveNext = computed(() => {\n if (!maxDateTime.value) {\n return true;\n }\n\n return startOfMonth(viewMonth.value) < startOfMonth(maxDateTime.value);\n});\n\nconst isTimeOptionEnabled = (hour: number, minute: number) => {\n const candidate = setTimePart(draftDateTime.value, hour, minute);\n return !isDateTimeDisabled(candidate);\n};\n\nconst hourOptions = computed<TimeOption[]>(() =>\n Array.from({ length: 24 }, (_, hour) => ({\n disabled: !minuteValues.value.some((minute) => isTimeOptionEnabled(hour, minute)),\n label: formatPart(hour),\n value: hour,\n })),\n);\n\nconst minuteOptions = computed<TimeOption[]>(() =>\n minuteValues.value.map((minute) => ({\n disabled: !isTimeOptionEnabled(draftDateTime.value.getHours(), minute),\n label: formatPart(minute),\n value: minute,\n })),\n);\n\nconst focusCurrentDay = () => {\n const key = toDateValue(focusedDate.value);\n nextTick(() => {\n dayRefs.get(key)?.focus();\n });\n};\n\nconst setDayRef = (\n element: Element | ComponentPublicInstance | null,\n key: string,\n) => {\n if (element instanceof HTMLButtonElement) {\n dayRefs.set(key, element);\n return;\n }\n\n dayRefs.delete(key);\n};\n\nconst openCalendar = () => {\n if (props.disabled) {\n return;\n }\n\n syncDraftState(selectedDateTime.value ?? createDefaultDraftDateTime());\n setValue(true);\n focusCurrentDay();\n};\n\nconst closeCalendar = (restoreFocus = false) => {\n setValue(false);\n\n if (restoreFocus) {\n nextTick(() => {\n triggerRef.value?.focus();\n });\n }\n};\n\nconst toggleCalendar = () => {\n if (isOpen.value) {\n closeCalendar();\n return;\n }\n\n openCalendar();\n};\n\nconst moveCalendar = (direction: 1 | -1) => {\n const nextMonth = addMonths(viewMonth.value, direction);\n syncCalendarView(nextMonth);\n focusCurrentDay();\n};\n\nconst moveFocus = (nextDate: Date) => {\n if (isDateDisabled(nextDate)) {\n return;\n }\n\n syncCalendarView(nextDate);\n focusCurrentDay();\n};\n\nconst selectDate = (date: Date) => {\n if (isDateDisabled(date)) {\n return;\n }\n\n const candidate = clampToRange(setDatePart(draftDateTime.value, date));\n draftDateTime.value = candidate;\n syncCalendarView(candidate);\n};\n\nconst onTriggerKeydown = (event: KeyboardEvent) => {\n if (props.disabled) {\n return;\n }\n\n if (isEscapeKey(event) && isOpen.value) {\n event.preventDefault();\n closeCalendar();\n return;\n }\n\n if (\n isActivationKey(event) ||\n event.key === 'ArrowDown' ||\n event.key === 'ArrowUp'\n ) {\n event.preventDefault();\n openCalendar();\n }\n};\n\nconst onDayKeydown = (event: KeyboardEvent, date: Date) => {\n if (isEscapeKey(event)) {\n event.preventDefault();\n closeCalendar(true);\n return;\n }\n\n if (isActivationKey(event)) {\n event.preventDefault();\n selectDate(date);\n return;\n }\n\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n moveFocus(addDays(date, -1));\n break;\n case 'ArrowRight':\n event.preventDefault();\n moveFocus(addDays(date, 1));\n break;\n case 'ArrowUp':\n event.preventDefault();\n moveFocus(addDays(date, -7));\n break;\n case 'ArrowDown':\n event.preventDefault();\n moveFocus(addDays(date, 7));\n break;\n case 'Home':\n event.preventDefault();\n moveFocus(startOfWeek(date, props.weekStartsOn));\n break;\n case 'End':\n event.preventDefault();\n moveFocus(addDays(startOfWeek(date, props.weekStartsOn), 6));\n break;\n case 'PageUp':\n event.preventDefault();\n moveFocus(addMonths(date, event.shiftKey ? -12 : -1));\n break;\n case 'PageDown':\n event.preventDefault();\n moveFocus(addMonths(date, event.shiftKey ? 12 : 1));\n break;\n default:\n break;\n }\n};\n\nconst updateHour = (event: Event) => {\n const nextHour = Number.parseInt((event.target as HTMLSelectElement).value, 10);\n const currentMinute = draftDateTime.value.getMinutes();\n\n if (Number.isNaN(nextHour)) {\n return;\n }\n\n const availableMinutes = minuteValues.value.filter((minute) =>\n isTimeOptionEnabled(nextHour, minute),\n );\n\n if (!availableMinutes.length) {\n return;\n }\n\n const nextMinute = availableMinutes.includes(currentMinute)\n ? currentMinute\n : availableMinutes[0];\n\n draftDateTime.value = setTimePart(draftDateTime.value, nextHour, nextMinute);\n};\n\nconst updateMinute = (event: Event) => {\n const nextMinute = Number.parseInt((event.target as HTMLSelectElement).value, 10);\n const nextHour = draftDateTime.value.getHours();\n\n if (Number.isNaN(nextMinute) || !isTimeOptionEnabled(nextHour, nextMinute)) {\n return;\n }\n\n draftDateTime.value = setTimePart(draftDateTime.value, nextHour, nextMinute);\n};\n\nconst commitDraft = () => {\n const value = toDateTimeValue(draftDateTime.value);\n\n emit('update:modelValue', value);\n emit('change', value);\n emit('select', value);\n closeCalendar(true);\n};\n\nconst clearSelection = () => {\n emit('update:modelValue', '');\n emit('change', '');\n emit('select', '');\n closeCalendar(true);\n};\n\nconst onDocumentPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) {\n return;\n }\n\n const target = event.target;\n if (!(target instanceof Node)) {\n return;\n }\n\n if (rootRef.value?.contains(target)) {\n return;\n }\n\n closeCalendar();\n};\n\nwatch(isOpen, (value) => {\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n return;\n }\n\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <input\n v-if=\"hiddenInputName\"\n type=\"hidden\"\n :name=\"hiddenInputName\"\n :value=\"modelValue\"\n >\n\n <button\n ref=\"triggerRef\"\n v-bind=\"triggerAttrs\"\n type=\"button\"\n class=\"tree-date-picker__trigger tree-date-time-picker__trigger\"\n :disabled=\"disabled\"\n :aria-controls=\"isOpen ? pickerId : undefined\"\n aria-haspopup=\"dialog\"\n :aria-expanded=\"isOpen\"\n :aria-invalid=\"invalid || undefined\"\n @click=\"toggleCalendar\"\n @keydown=\"onTriggerKeydown\"\n >\n <span\n v-if=\"$slots.prefix\"\n class=\"tree-date-picker__slot tree-date-picker__slot--prefix\"\n >\n <slot name=\"prefix\" />\n </span>\n\n <span\n class=\"tree-date-picker__value\"\n :data-placeholder=\"selectedDateTime ? undefined : true\"\n >\n {{ triggerText }}\n </span>\n\n <span class=\"tree-date-picker__slot tree-date-picker__slot--suffix\">\n <slot name=\"suffix\">\n <TreeSpinner\n v-if=\"loading\"\n size=\"sm\"\n label=\"Loading\"\n />\n <CalendarIcon\n v-else\n v-bind=\"treeIconDefaults\"\n />\n </slot>\n </span>\n </button>\n\n <transition name=\"tree-fade\">\n <div\n v-if=\"isOpen && !disabled\"\n :id=\"pickerId\"\n class=\"tree-date-picker__content tree-date-time-picker__content\"\n role=\"dialog\"\n aria-modal=\"false\"\n :aria-labelledby=\"captionId\"\n >\n <div class=\"tree-date-time-picker__calendar\">\n <div class=\"tree-date-picker__header\">\n <button\n type=\"button\"\n class=\"tree-date-picker__nav\"\n :disabled=\"!canMovePrev\"\n aria-label=\"Previous month\"\n @click=\"moveCalendar(-1)\"\n >\n <ChevronLeftIcon v-bind=\"treeIconDefaults\" />\n </button>\n\n <p\n :id=\"captionId\"\n class=\"tree-date-picker__month\"\n >\n {{ monthLabel }}\n </p>\n\n <button\n type=\"button\"\n class=\"tree-date-picker__nav\"\n :disabled=\"!canMoveNext\"\n aria-label=\"Next month\"\n @click=\"moveCalendar(1)\"\n >\n <ChevronRightIcon v-bind=\"treeIconDefaults\" />\n </button>\n </div>\n\n <div\n class=\"tree-date-picker__weekdays\"\n aria-hidden=\"true\"\n >\n <span\n v-for=\"label in weekdayLabels\"\n :key=\"label\"\n class=\"tree-date-picker__weekday\"\n >\n {{ label }}\n </span>\n </div>\n\n <div\n class=\"tree-date-picker__grid\"\n role=\"grid\"\n :aria-labelledby=\"captionId\"\n >\n <div\n v-for=\"(week, weekIndex) in cells\"\n :key=\"weekIndex\"\n class=\"tree-date-picker__row\"\n role=\"row\"\n >\n <div\n v-for=\"cell in week\"\n :key=\"cell.key\"\n class=\"tree-date-picker__cell\"\n role=\"gridcell\"\n :aria-selected=\"cell.isSelected\"\n >\n <button\n :ref=\"(element) => setDayRef(element, cell.key)\"\n type=\"button\"\n class=\"tree-date-picker__day\"\n :class=\"{\n 'is-muted': !cell.inMonth,\n 'is-selected': cell.isSelected,\n 'is-today': cell.isToday,\n }\"\n :data-date=\"cell.key\"\n :tabindex=\"cell.isFocused ? 0 : -1\"\n :disabled=\"cell.disabled\"\n :aria-pressed=\"cell.isSelected\"\n @click=\"selectDate(cell.date)\"\n @keydown=\"onDayKeydown($event, cell.date)\"\n >\n {{ cell.dayLabel }}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"tree-date-time-picker__summary\">\n <p class=\"tree-date-time-picker__eyebrow\">\n Selected slot\n </p>\n <p class=\"tree-date-time-picker__summary-value\">\n {{ draftPreview }}\n </p>\n </div>\n\n <div class=\"tree-date-time-picker__time\">\n <label class=\"tree-date-time-picker__time-field\">\n <span class=\"tree-date-time-picker__time-label\">Hour</span>\n <select\n class=\"tree-date-time-picker__select\"\n :value=\"draftDateTime.getHours()\"\n aria-label=\"Select hour\"\n @change=\"updateHour\"\n >\n <option\n v-for=\"option in hourOptions\"\n :key=\"option.value\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n </label>\n\n <label class=\"tree-date-time-picker__time-field\">\n <span class=\"tree-date-time-picker__time-label\">Minute</span>\n <select\n class=\"tree-date-time-picker__select\"\n :value=\"draftDateTime.getMinutes()\"\n aria-label=\"Select minute\"\n @change=\"updateMinute\"\n >\n <option\n v-for=\"option in minuteOptions\"\n :key=\"option.value\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n </label>\n </div>\n\n <div class=\"tree-date-time-picker__footer\">\n <button\n type=\"button\"\n class=\"tree-button tree-button--ghost tree-button--sm\"\n @click=\"clearSelection\"\n >\n Clear\n </button>\n <button\n type=\"button\"\n class=\"tree-button tree-button--solid tree-button--sm\"\n @click=\"commitDraft\"\n >\n Apply\n </button>\n </div>\n </div>\n </transition>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport {\n createId,\n focusFirst,\n focusLast,\n getFocusableElements,\n isEscapeKey,\n} from '@treeui/utils';\nimport { getTreeIcon, treeIconDefaults } from '@treeui/icons';\nimport {\n computed,\n nextTick,\n onBeforeUnmount,\n ref,\n toRef,\n useAttrs,\n watch,\n} from 'vue';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeDrawerSide, TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst CloseIcon = getTreeIcon('x');\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n size?: TreeSize;\n side?: TreeDrawerSide;\n title?: string;\n description?: string;\n closeOnEscape?: boolean;\n closeOnOverlay?: boolean;\n showCloseButton?: boolean;\n closeLabel?: string;\n id?: string;\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n size: 'md',\n side: 'right',\n title: '',\n description: '',\n closeOnEscape: true,\n closeOnOverlay: true,\n showCloseButton: true,\n closeLabel: 'Close drawer',\n id: undefined,\n },\n);\n\nconst emit = defineEmits<{\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n}>();\n\nconst attrs = useAttrs();\nconst drawerId = props.id ?? createId('tree-drawer');\nconst titleId = `${drawerId}-title`;\nconst descriptionId = `${drawerId}-description`;\nconst rootRef = ref<HTMLElement | null>(null);\nconst surfaceRef = ref<HTMLElement | null>(null);\nconst previousFocusedElement = ref<HTMLElement | null>(null);\nconst hasHeaderContent = computed(() => Boolean(props.title || slots.header));\n\nconst slots = defineSlots<{\n default?: () => unknown;\n trigger?: () => unknown;\n header?: () => unknown;\n content?: () => unknown;\n footer?: () => unknown;\n}>();\n\nconst rootClasses = computed(() => ['tree-drawer', attrs.class]);\nconst rootStyle = computed(() => attrs.style);\nconst triggerAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\nconst surfaceClasses = computed(() => [\n 'tree-drawer__surface',\n `tree-drawer__surface--${props.size}`,\n `tree-drawer__surface--${props.side}`,\n]);\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst labelledBy = computed(() => (hasHeaderContent.value ? titleId : undefined));\nconst describedBy = computed(() => (props.description ? descriptionId : undefined));\n\nlet openOverlayCount = 0;\nlet previousBodyOverflow = '';\n\nconst lockBodyScroll = () => {\n if (typeof document === 'undefined') {\n return;\n }\n\n if (openOverlayCount === 0) {\n previousBodyOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n\n openOverlayCount += 1;\n};\n\nconst unlockBodyScroll = () => {\n if (typeof document === 'undefined' || openOverlayCount === 0) {\n return;\n }\n\n openOverlayCount -= 1;\n\n if (openOverlayCount === 0) {\n document.body.style.overflow = previousBodyOverflow;\n }\n};\n\nconst focusSurface = () => {\n nextTick(() => {\n if (!surfaceRef.value) {\n return;\n }\n\n const focused = focusFirst(surfaceRef.value);\n if (!focused) {\n surfaceRef.value.focus();\n }\n });\n};\n\nconst openDrawer = () => {\n if (props.disabled) {\n return;\n }\n\n previousFocusedElement.value = document.activeElement as HTMLElement | null;\n setValue(true);\n};\n\nconst closeDrawer = () => {\n setValue(false);\n};\n\nconst onTriggerClick = (event: MouseEvent) => {\n if (props.disabled) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n if (event.defaultPrevented) {\n return;\n }\n\n openDrawer();\n};\n\nconst onOverlayClick = () => {\n if (!props.closeOnOverlay) {\n return;\n }\n\n closeDrawer();\n};\n\nconst onSurfaceClick = (event: MouseEvent) => {\n event.stopPropagation();\n};\n\nconst onKeydown = (event: KeyboardEvent) => {\n if (isEscapeKey(event) && props.closeOnEscape) {\n event.preventDefault();\n closeDrawer();\n return;\n }\n\n if (event.key !== 'Tab' || !surfaceRef.value) {\n return;\n }\n\n const focusable = getFocusableElements(surfaceRef.value);\n\n if (!focusable.length) {\n event.preventDefault();\n surfaceRef.value.focus();\n return;\n }\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const activeElement = document.activeElement as HTMLElement | null;\n\n if (event.shiftKey && activeElement === first) {\n event.preventDefault();\n focusLast(surfaceRef.value);\n }\n\n if (!event.shiftKey && activeElement === last) {\n event.preventDefault();\n focusFirst(surfaceRef.value);\n }\n};\n\nwatch(isOpen, (value, previousValue) => {\n if (value) {\n lockBodyScroll();\n focusSurface();\n return;\n }\n\n if (previousValue) {\n unlockBodyScroll();\n nextTick(() => {\n previousFocusedElement.value?.focus();\n });\n }\n});\n\nonBeforeUnmount(() => {\n if (isOpen.value) {\n unlockBodyScroll();\n }\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <span\n v-if=\"$slots.trigger\"\n class=\"tree-drawer__trigger\"\n v-bind=\"triggerAttrs\"\n :aria-disabled=\"disabled || undefined\"\n @click=\"onTriggerClick\"\n >\n <slot name=\"trigger\" />\n </span>\n\n <Teleport to=\"body\">\n <transition name=\"tree-drawer-fade\">\n <div\n v-if=\"isOpen\"\n class=\"tree-drawer__portal\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <div\n class=\"tree-drawer__backdrop\"\n aria-hidden=\"true\"\n @click=\"onOverlayClick\"\n />\n <div\n :id=\"drawerId\"\n ref=\"surfaceRef\"\n :class=\"surfaceClasses\"\n role=\"dialog\"\n aria-modal=\"true\"\n :aria-labelledby=\"labelledBy\"\n :aria-describedby=\"describedBy\"\n tabindex=\"-1\"\n @click=\"onSurfaceClick\"\n @keydown=\"onKeydown\"\n >\n <div\n v-if=\"hasHeaderContent || showCloseButton\"\n class=\"tree-drawer__topbar\"\n >\n <div\n v-if=\"hasHeaderContent\"\n :id=\"titleId\"\n class=\"tree-drawer__header\"\n >\n <slot name=\"header\">\n <h2 class=\"tree-drawer__title\">\n {{ title }}\n </h2>\n </slot>\n </div>\n <button\n v-if=\"showCloseButton\"\n type=\"button\"\n class=\"tree-drawer__close\"\n :aria-label=\"closeLabel\"\n @click=\"closeDrawer\"\n >\n <CloseIcon v-bind=\"treeIconDefaults\" />\n </button>\n </div>\n\n <p\n v-if=\"description\"\n :id=\"descriptionId\"\n class=\"tree-drawer__description\"\n >\n {{ description }}\n </p>\n\n <div class=\"tree-drawer__body\">\n <slot name=\"content\">\n <slot />\n </slot>\n </div>\n\n <div\n v-if=\"$slots.footer\"\n class=\"tree-drawer__footer\"\n >\n <slot name=\"footer\" />\n </div>\n </div>\n </div>\n </transition>\n </Teleport>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { createId, isActivationKey, isEscapeKey } from '@treeui/utils';\nimport { computed, nextTick, onBeforeUnmount, ref, toRef, useAttrs, watch } from 'vue';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport interface TreeDropdownItem {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\nconst props = withDefaults(\n defineProps<{\n items?: TreeDropdownItem[];\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n size?: TreeSize;\n label?: string;\n }>(),\n {\n items: () => [],\n open: undefined,\n defaultOpen: false,\n disabled: false,\n size: 'md',\n label: '',\n },\n);\n\nconst emit = defineEmits<{\n select: [value: string];\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n}>();\n\ndefineSlots<{\n trigger(props: { isOpen: boolean }): unknown;\n item(props: { item: TreeDropdownItem; index: number }): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst menuId = createId('tree-dropdown');\nconst rootRef = ref<HTMLElement | null>(null);\nconst triggerRef = ref<HTMLButtonElement | null>(null);\nconst itemRefs = ref<Map<string, HTMLElement>>(new Map());\nconst focusedIndex = ref(-1);\n\nconst triggerAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst rootClasses = computed(() => [\n 'tree-dropdown',\n `tree-dropdown--${props.size}`,\n {\n 'is-disabled': props.disabled,\n 'is-open': isOpen.value,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst enabledItems = computed(() => props.items.filter((i) => !i.disabled));\n\nconst openMenu = () => {\n if (props.disabled) return;\n focusedIndex.value = enabledItems.value.length > 0\n ? props.items.indexOf(enabledItems.value[0])\n : 0;\n setValue(true);\n nextTick(() => focusItem(focusedIndex.value));\n};\n\nconst closeMenu = (restoreFocus = false) => {\n setValue(false);\n focusedIndex.value = -1;\n if (restoreFocus) {\n nextTick(() => triggerRef.value?.focus());\n }\n};\n\nconst toggleMenu = () => {\n if (isOpen.value) {\n closeMenu();\n } else {\n openMenu();\n }\n};\n\nconst selectItem = (item: TreeDropdownItem) => {\n if (item.disabled) return;\n emit('select', item.value);\n closeMenu(true);\n};\n\nconst focusItem = (index: number) => {\n const item = props.items[index];\n if (!item) return;\n const el = itemRefs.value.get(item.value);\n el?.focus();\n};\n\nconst setItemRef = (el: Element | null, value: string) => {\n if (el instanceof HTMLElement) {\n itemRefs.value.set(value, el);\n } else {\n itemRefs.value.delete(value);\n }\n};\n\nconst moveFocus = (direction: 1 | -1) => {\n let nextIndex = focusedIndex.value + direction;\n while (nextIndex >= 0 && nextIndex < props.items.length) {\n if (!props.items[nextIndex].disabled) {\n focusedIndex.value = nextIndex;\n focusItem(nextIndex);\n return;\n }\n nextIndex += direction;\n }\n};\n\nconst onTriggerKeydown = (event: KeyboardEvent) => {\n if (props.disabled) return;\n\n if (isEscapeKey(event) && isOpen.value) {\n event.preventDefault();\n closeMenu();\n return;\n }\n\n if (isActivationKey(event) || event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n openMenu();\n }\n};\n\nconst onItemKeydown = (event: KeyboardEvent, item: TreeDropdownItem) => {\n if (isEscapeKey(event)) {\n event.preventDefault();\n closeMenu(true);\n return;\n }\n\n if (isActivationKey(event)) {\n event.preventDefault();\n selectItem(item);\n return;\n }\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n moveFocus(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n moveFocus(-1);\n break;\n case 'Home':\n event.preventDefault();\n focusedIndex.value = enabledItems.value.length > 0\n ? props.items.indexOf(enabledItems.value[0])\n : 0;\n focusItem(focusedIndex.value);\n break;\n case 'End':\n event.preventDefault();\n focusedIndex.value = enabledItems.value.length > 0\n ? props.items.indexOf(enabledItems.value[enabledItems.value.length - 1])\n : props.items.length - 1;\n focusItem(focusedIndex.value);\n break;\n default:\n break;\n }\n};\n\nconst onDocumentPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) return;\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (rootRef.value?.contains(target)) return;\n closeMenu();\n};\n\nwatch(isOpen, (value) => {\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n } else {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n }\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <span class=\"tree-dropdown__trigger-wrapper\">\n <slot\n name=\"trigger\"\n :is-open=\"isOpen\"\n >\n <button\n ref=\"triggerRef\"\n v-bind=\"triggerAttrs\"\n type=\"button\"\n class=\"tree-dropdown__trigger\"\n :disabled=\"disabled\"\n :aria-controls=\"isOpen ? menuId : undefined\"\n aria-haspopup=\"menu\"\n :aria-expanded=\"isOpen\"\n @click=\"toggleMenu\"\n @keydown=\"onTriggerKeydown\"\n >\n <span class=\"tree-dropdown__label\">{{ label }}</span>\n <svg\n class=\"tree-dropdown__chevron\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"4 6 8 10 12 6\" />\n </svg>\n </button>\n </slot>\n </span>\n <transition name=\"tree-fade\">\n <ul\n v-if=\"isOpen && !disabled\"\n :id=\"menuId\"\n role=\"menu\"\n class=\"tree-dropdown__menu\"\n :aria-label=\"label || undefined\"\n >\n <li\n v-for=\"(item, index) in items\"\n :key=\"item.value\"\n :ref=\"(el) => setItemRef(el as Element | null, item.value)\"\n role=\"menuitem\"\n class=\"tree-dropdown__item\"\n :class=\"{\n 'is-disabled': item.disabled,\n 'is-focused': index === focusedIndex,\n }\"\n :aria-disabled=\"item.disabled || undefined\"\n :tabindex=\"item.disabled ? -1 : 0\"\n @click=\"selectItem(item)\"\n @keydown=\"onItemKeydown($event, item)\"\n >\n <slot\n name=\"item\"\n :item=\"item\"\n :index=\"index\"\n >\n {{ item.label }}\n </slot>\n </li>\n </ul>\n </transition>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { createId } from '@treeui/utils';\nimport { computed, useAttrs } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst slots = defineSlots<{\n icon?: () => unknown;\n title?: () => unknown;\n description?: () => unknown;\n default?: () => unknown;\n actions?: () => unknown;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n size?: TreeSize;\n title?: string;\n description?: string;\n }>(),\n {\n as: 'section',\n size: 'md',\n title: '',\n description: '',\n },\n);\n\nconst attrs = useAttrs();\nconst emptyStateId = createId('tree-empty-state');\nconst titleId = `${emptyStateId}-title`;\nconst descriptionId = `${emptyStateId}-description`;\n\nconst hasTitle = computed(() => Boolean(props.title || slots.title));\nconst hasDescription = computed(() => Boolean(props.description || slots.description));\n\nconst classes = computed(() => [\n 'tree-empty-state',\n `tree-empty-state--${props.size}`,\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-bind=\"rootAttrs\"\n :class=\"classes\"\n :style=\"rootStyle\"\n :aria-labelledby=\"hasTitle ? titleId : undefined\"\n :aria-describedby=\"hasDescription ? descriptionId : undefined\"\n >\n <div\n v-if=\"$slots.icon\"\n class=\"tree-empty-state__icon\"\n aria-hidden=\"true\"\n >\n <slot name=\"icon\" />\n </div>\n\n <div class=\"tree-empty-state__content\">\n <h2\n v-if=\"hasTitle\"\n :id=\"titleId\"\n class=\"tree-empty-state__title\"\n >\n <slot name=\"title\">\n {{ title }}\n </slot>\n </h2>\n\n <p\n v-if=\"hasDescription\"\n :id=\"descriptionId\"\n class=\"tree-empty-state__description\"\n >\n <slot name=\"description\">\n {{ description }}\n </slot>\n </p>\n\n <div\n v-if=\"$slots.default\"\n class=\"tree-empty-state__body\"\n >\n <slot />\n </div>\n\n <div\n v-if=\"$slots.actions\"\n class=\"tree-empty-state__actions\"\n >\n <slot name=\"actions\" />\n </div>\n </div>\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { createId, isActivationKey } from '@treeui/utils';\nimport { computed, onBeforeUnmount, onMounted, ref, useAttrs } from 'vue';\nimport type { TreeSize } from '../types/contracts';\nimport TreeSpinner from './TreeSpinner.vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport type TreeFileUploadRejectionReason =\n | 'file-invalid-type'\n | 'file-too-large'\n | 'too-many-files';\n\nexport interface TreeFileUploadRejection {\n file: File;\n reason: TreeFileUploadRejectionReason;\n message: string;\n}\n\nconst slots = defineSlots<{\n icon?: () => unknown;\n default?: (props: {\n files: File[];\n isDragActive: boolean;\n openFileDialog: () => void;\n clearFiles: () => void;\n }) => unknown;\n file?: (props: {\n file: File;\n index: number;\n removeFile: () => void;\n }) => unknown;\n actions?: (props: {\n files: File[];\n openFileDialog: () => void;\n clearFiles: () => void;\n }) => unknown;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: File[];\n size?: TreeSize;\n disabled?: boolean;\n loading?: boolean;\n invalid?: boolean;\n accept?: string;\n multiple?: boolean;\n maxFiles?: number | null;\n maxFileSize?: number | null;\n label?: string;\n description?: string;\n buttonLabel?: string;\n filesLabel?: string;\n paste?: boolean;\n drop?: boolean;\n showFileList?: boolean;\n }>(),\n {\n modelValue: () => [],\n size: 'md',\n disabled: false,\n loading: false,\n invalid: false,\n accept: '',\n multiple: true,\n label: 'Drop files here',\n description: 'Click to browse, drag and drop, or paste with Ctrl+V.',\n buttonLabel: 'Browse files',\n filesLabel: 'Selected files',\n maxFiles: null,\n maxFileSize: null,\n paste: true,\n drop: true,\n showFileList: true,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [files: File[]];\n 'files-accepted': [files: File[]];\n 'files-rejected': [rejections: TreeFileUploadRejection[]];\n}>();\n\nconst attrs = useAttrs();\nconst rootRef = ref<HTMLElement | null>(null);\nconst inputRef = ref<HTMLInputElement | null>(null);\nconst isDragActive = ref(false);\nconst isFocusedWithin = ref(false);\nconst dragDepth = ref(0);\nconst feedbackMessages = ref<string[]>([]);\n\nconst uploadId = createId('tree-file-upload');\nconst descriptionId = `${uploadId}-description`;\nconst feedbackId = `${uploadId}-feedback`;\nconst filesId = `${uploadId}-files`;\n\nconst isUnavailable = computed(() => props.disabled || props.loading);\nconst hasFiles = computed(() => props.modelValue.length > 0);\nconst hasCustomBody = computed(() => Boolean(slots.default));\n\nconst effectiveMaxFiles = computed(() => {\n if (!props.multiple) {\n return 1;\n }\n\n if (typeof props.maxFiles !== 'number') {\n return Number.POSITIVE_INFINITY;\n }\n\n return Math.max(props.maxFiles, 0);\n});\n\nconst rootClasses = computed(() => [\n 'tree-file-upload',\n `tree-file-upload--${props.size}`,\n {\n 'is-disabled': isUnavailable.value,\n 'is-invalid': props.invalid,\n 'is-loading': props.loading,\n 'is-drag-active': isDragActive.value,\n 'has-files': hasFiles.value,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst describedBy = computed(() => {\n const ids: string[] = [];\n\n if (props.description && !hasCustomBody.value) {\n ids.push(descriptionId);\n }\n\n if (feedbackMessages.value.length > 0) {\n ids.push(feedbackId);\n }\n\n if (props.showFileList && hasFiles.value) {\n ids.push(filesId);\n }\n\n return ids.length > 0 ? ids.join(' ') : undefined;\n});\n\nconst selectedFilesLabel = computed(() => `${props.filesLabel} (${props.modelValue.length})`);\n\nconst formatFileSize = (size: number) => {\n if (size < 1024) {\n return `${size} B`;\n }\n\n const units = ['KB', 'MB', 'GB'];\n let value = size / 1024;\n let unitIndex = 0;\n\n while (value >= 1024 && unitIndex < units.length - 1) {\n value /= 1024;\n unitIndex += 1;\n }\n\n const roundedValue = value >= 10 || Number.isInteger(value)\n ? Math.round(value)\n : Number(value.toFixed(1));\n\n return `${roundedValue} ${units[unitIndex]}`;\n};\n\nconst fileKey = (file: File, index: number) =>\n `${file.name}-${file.size}-${file.lastModified}-${index}`;\n\nconst matchesAccept = (file: File) => {\n if (!props.accept.trim()) {\n return true;\n }\n\n const tokens = props.accept\n .split(',')\n .map((token) => token.trim().toLowerCase())\n .filter(Boolean);\n\n const fileName = file.name.toLowerCase();\n const fileType = file.type.toLowerCase();\n\n return tokens.some((token) => {\n if (token.startsWith('.')) {\n return fileName.endsWith(token);\n }\n\n if (token.endsWith('/*')) {\n return fileType.startsWith(token.slice(0, -1));\n }\n\n return fileType === token;\n });\n};\n\nconst buildRejectionMessage = (\n file: File,\n reason: TreeFileUploadRejectionReason,\n) => {\n switch (reason) {\n case 'file-invalid-type':\n return `${file.name} is not an accepted file type.`;\n case 'file-too-large':\n return `${file.name} exceeds the ${formatFileSize(props.maxFileSize ?? 0)} limit.`;\n case 'too-many-files':\n return `You can only add up to ${effectiveMaxFiles.value} file${effectiveMaxFiles.value === 1 ? '' : 's'}.`;\n default:\n return `${file.name} could not be added.`;\n }\n};\n\nconst resetInputValue = () => {\n if (inputRef.value) {\n inputRef.value.value = '';\n }\n};\n\nconst openFileDialog = () => {\n if (isUnavailable.value) {\n return;\n }\n\n inputRef.value?.click();\n};\n\nconst emitFiles = (\n nextFiles: File[],\n acceptedFiles: File[],\n rejections: TreeFileUploadRejection[],\n) => {\n feedbackMessages.value = rejections.map((rejection) => rejection.message);\n\n if (rejections.length > 0) {\n emit('files-rejected', rejections);\n }\n\n if (acceptedFiles.length > 0) {\n emit('update:modelValue', nextFiles);\n emit('files-accepted', acceptedFiles);\n }\n};\n\nconst processFiles = (incomingFiles: File[]) => {\n if (isUnavailable.value || incomingFiles.length === 0) {\n return;\n }\n\n const nextFiles = props.multiple ? [...props.modelValue] : [];\n const acceptedFiles: File[] = [];\n const rejections: TreeFileUploadRejection[] = [];\n let remainingSlots = Number.isFinite(effectiveMaxFiles.value)\n ? Math.max(effectiveMaxFiles.value - nextFiles.length, 0)\n : Number.POSITIVE_INFINITY;\n\n for (const file of incomingFiles) {\n if (remainingSlots <= 0) {\n rejections.push({\n file,\n reason: 'too-many-files',\n message: buildRejectionMessage(file, 'too-many-files'),\n });\n continue;\n }\n\n if (!matchesAccept(file)) {\n rejections.push({\n file,\n reason: 'file-invalid-type',\n message: buildRejectionMessage(file, 'file-invalid-type'),\n });\n continue;\n }\n\n if (\n typeof props.maxFileSize === 'number' &&\n props.maxFileSize > 0 &&\n file.size > props.maxFileSize\n ) {\n rejections.push({\n file,\n reason: 'file-too-large',\n message: buildRejectionMessage(file, 'file-too-large'),\n });\n continue;\n }\n\n acceptedFiles.push(file);\n nextFiles.push(file);\n\n if (Number.isFinite(remainingSlots)) {\n remainingSlots -= 1;\n }\n }\n\n emitFiles(nextFiles, acceptedFiles, rejections);\n};\n\nconst removeFile = (index: number) => {\n if (isUnavailable.value) {\n return;\n }\n\n feedbackMessages.value = [];\n emit('update:modelValue', props.modelValue.filter((_, fileIndex) => fileIndex !== index));\n};\n\nconst clearFiles = () => {\n if (isUnavailable.value || !hasFiles.value) {\n return;\n }\n\n feedbackMessages.value = [];\n emit('update:modelValue', []);\n};\n\nconst hasTransferFiles = (dataTransfer?: DataTransfer | null) => {\n if (!dataTransfer) {\n return false;\n }\n\n return dataTransfer.files.length > 0 || Array.from(dataTransfer.types).includes('Files');\n};\n\nconst getClipboardFiles = (\n clipboardData?: Pick<DataTransfer, 'items'> | null,\n) => {\n if (!clipboardData?.items) {\n return [];\n }\n\n return Array.from(clipboardData.items)\n .map((item) => item.getAsFile?.() ?? null)\n .filter((file): file is File => file instanceof File);\n};\n\nconst onInputChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n processFiles(Array.from(target.files ?? []));\n resetInputValue();\n};\n\nconst onDropzoneKeydown = (event: KeyboardEvent) => {\n if (!isActivationKey(event) || isUnavailable.value) {\n return;\n }\n\n event.preventDefault();\n openFileDialog();\n};\n\nconst onFocusIn = () => {\n isFocusedWithin.value = true;\n};\n\nconst onFocusOut = (event: FocusEvent) => {\n const nextTarget = event.relatedTarget as Node | null;\n\n if (nextTarget && rootRef.value?.contains(nextTarget)) {\n return;\n }\n\n isFocusedWithin.value = false;\n};\n\nconst onPaste = (event: ClipboardEvent) => {\n if (!props.paste || isUnavailable.value) {\n return;\n }\n\n const clipboardFiles = getClipboardFiles(event.clipboardData);\n\n if (clipboardFiles.length === 0) {\n return;\n }\n\n event.preventDefault();\n processFiles(clipboardFiles);\n};\n\nconst onDocumentPaste = (event: Event) => {\n if (!isFocusedWithin.value || event.defaultPrevented) {\n return;\n }\n\n onPaste(event as ClipboardEvent);\n};\n\nconst onDragEnter = (event: DragEvent) => {\n if (!props.drop || isUnavailable.value || !hasTransferFiles(event.dataTransfer)) {\n return;\n }\n\n event.preventDefault();\n dragDepth.value += 1;\n isDragActive.value = true;\n};\n\nconst onDragOver = (event: DragEvent) => {\n if (!props.drop || isUnavailable.value || !hasTransferFiles(event.dataTransfer)) {\n return;\n }\n\n event.preventDefault();\n\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'copy';\n }\n\n isDragActive.value = true;\n};\n\nconst onDragLeave = (event: DragEvent) => {\n if (!props.drop || isUnavailable.value || !hasTransferFiles(event.dataTransfer)) {\n return;\n }\n\n event.preventDefault();\n dragDepth.value = Math.max(dragDepth.value - 1, 0);\n\n if (dragDepth.value === 0) {\n isDragActive.value = false;\n }\n};\n\nconst onDrop = (event: DragEvent) => {\n if (!props.drop || isUnavailable.value || !hasTransferFiles(event.dataTransfer)) {\n return;\n }\n\n event.preventDefault();\n dragDepth.value = 0;\n isDragActive.value = false;\n processFiles(Array.from(event.dataTransfer?.files ?? []));\n};\n\nonMounted(() => {\n document.addEventListener('paste', onDocumentPaste);\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('paste', onDocumentPaste);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n @focusin=\"onFocusIn\"\n @focusout=\"onFocusOut\"\n @paste=\"onPaste\"\n >\n <input\n :id=\"uploadId\"\n ref=\"inputRef\"\n class=\"tree-visually-hidden\"\n type=\"file\"\n :accept=\"accept || undefined\"\n :multiple=\"multiple\"\n :disabled=\"isUnavailable\"\n @change=\"onInputChange\"\n >\n\n <div\n class=\"tree-file-upload__dropzone\"\n :aria-busy=\"loading || undefined\"\n :aria-controls=\"showFileList && hasFiles ? filesId : undefined\"\n :aria-describedby=\"describedBy\"\n :aria-disabled=\"isUnavailable || undefined\"\n :aria-invalid=\"invalid || undefined\"\n role=\"button\"\n :tabindex=\"isUnavailable ? -1 : 0\"\n @click=\"openFileDialog\"\n @keydown=\"onDropzoneKeydown\"\n @dragenter=\"onDragEnter\"\n @dragover=\"onDragOver\"\n @dragleave=\"onDragLeave\"\n @drop=\"onDrop\"\n >\n <div\n v-if=\"$slots.icon || !$slots.default\"\n class=\"tree-file-upload__icon\"\n aria-hidden=\"true\"\n >\n <slot name=\"icon\">\n <span class=\"tree-file-upload__icon-mark\">+</span>\n </slot>\n </div>\n\n <div class=\"tree-file-upload__content\">\n <slot\n :files=\"modelValue\"\n :is-drag-active=\"isDragActive\"\n :open-file-dialog=\"openFileDialog\"\n :clear-files=\"clearFiles\"\n >\n <p class=\"tree-file-upload__label\">\n {{ label }}\n </p>\n <p\n v-if=\"description\"\n :id=\"descriptionId\"\n class=\"tree-file-upload__description\"\n >\n {{ description }}\n </p>\n <span class=\"tree-file-upload__browse\">\n {{ buttonLabel }}\n </span>\n </slot>\n </div>\n\n <TreeSpinner\n v-if=\"loading\"\n class=\"tree-file-upload__spinner\"\n size=\"sm\"\n label=\"Uploading files\"\n />\n </div>\n\n <ul\n v-if=\"feedbackMessages.length > 0\"\n :id=\"feedbackId\"\n class=\"tree-file-upload__feedback\"\n aria-live=\"polite\"\n >\n <li\n v-for=\"message in feedbackMessages\"\n :key=\"message\"\n >\n {{ message }}\n </li>\n </ul>\n\n <div\n v-if=\"showFileList && hasFiles\"\n class=\"tree-file-upload__files\"\n >\n <div class=\"tree-file-upload__files-header\">\n <p\n :id=\"filesId\"\n class=\"tree-file-upload__files-label\"\n >\n {{ selectedFilesLabel }}\n </p>\n\n <button\n class=\"tree-file-upload__clear\"\n type=\"button\"\n :disabled=\"isUnavailable\"\n @click=\"clearFiles\"\n >\n Clear all\n </button>\n </div>\n\n <ul class=\"tree-file-upload__list\">\n <li\n v-for=\"(file, index) in modelValue\"\n :key=\"fileKey(file, index)\"\n class=\"tree-file-upload__file\"\n >\n <slot\n name=\"file\"\n :file=\"file\"\n :index=\"index\"\n :remove-file=\"() => removeFile(index)\"\n >\n <div class=\"tree-file-upload__file-copy\">\n <p class=\"tree-file-upload__file-name\">\n {{ file.name }}\n </p>\n <p class=\"tree-file-upload__file-meta\">\n {{ formatFileSize(file.size) }}\n </p>\n </div>\n\n <button\n class=\"tree-file-upload__remove\"\n type=\"button\"\n :disabled=\"isUnavailable\"\n :aria-label=\"`Remove ${file.name}`\"\n @click=\"removeFile(index)\"\n >\n Remove\n </button>\n </slot>\n </li>\n </ul>\n </div>\n\n <div\n v-if=\"$slots.actions\"\n class=\"tree-file-upload__actions\"\n >\n <slot\n name=\"actions\"\n :files=\"modelValue\"\n :open-file-dialog=\"openFileDialog\"\n :clear-files=\"clearFiles\"\n />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { getTreeIcon } from '@treeui/icons';\nimport { createId, getNextEnabledIndex, isEscapeKey } from '@treeui/utils';\nimport { computed, nextTick, onBeforeUnmount, ref, toRef, useAttrs, watch } from 'vue';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeSize } from '../types/contracts';\nimport TreeSpinner from './TreeSpinner.vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport interface TreeMultiSelectOption {\n label: string;\n value: string;\n description?: string;\n keywords?: string[];\n disabled?: boolean;\n}\n\nconst ChevronDownIcon = getTreeIcon('chevron-down');\nconst CheckIcon = getTreeIcon('check');\nconst XIcon = getTreeIcon('x');\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string[];\n options?: TreeMultiSelectOption[];\n open?: boolean;\n defaultOpen?: boolean;\n size?: TreeSize;\n disabled?: boolean;\n loading?: boolean;\n invalid?: boolean;\n placeholder?: string;\n emptyText?: string;\n maxVisibleTags?: number;\n }>(),\n {\n modelValue: () => [],\n options: () => [],\n open: undefined,\n defaultOpen: false,\n size: 'md',\n disabled: false,\n loading: false,\n invalid: false,\n placeholder: '',\n emptyText: 'No results found.',\n maxVisibleTags: 2,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string[]];\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n 'input-change': [value: string];\n}>();\n\ndefineSlots<{\n prefix?: () => unknown;\n tag?: (props: { option: TreeMultiSelectOption; remove: () => void }) => unknown;\n option?: (props: {\n option: TreeMultiSelectOption;\n selected: boolean;\n active: boolean;\n }) => unknown;\n empty?: (props: { query: string }) => unknown;\n}>();\n\nconst attrs = useAttrs();\nconst listboxId = createId('tree-multi-select');\nconst rootRef = ref<HTMLElement | null>(null);\nconst inputRef = ref<HTMLInputElement | null>(null);\nconst query = ref('');\nconst activeIndex = ref(-1);\n\nconst inputAttrs = computed(() => {\n const { class: _class, style: _style, autocomplete, ...rest } = attrs;\n return {\n autocomplete: typeof autocomplete === 'string' ? autocomplete : 'off',\n ...rest,\n };\n});\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst rootClasses = computed(() => [\n 'tree-multi-select',\n `tree-multi-select--${props.size}`,\n {\n 'is-disabled': props.disabled,\n 'is-invalid': props.invalid,\n 'is-loading': props.loading,\n 'is-open': isOpen.value,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst normalize = (value: string) => value.trim().toLowerCase();\n\nconst filteredOptions = computed(() => {\n const normalizedQuery = normalize(query.value);\n\n if (!normalizedQuery) {\n return props.options;\n }\n\n return props.options.filter((option) => {\n const fields = [option.label, option.description ?? '', ...(option.keywords ?? [])];\n return fields.some((field) => field.toLowerCase().includes(normalizedQuery));\n });\n});\n\nconst selectedOptions = computed(() =>\n props.options.filter((option) => props.modelValue.includes(option.value)),\n);\n\nconst visibleTags = computed(() => selectedOptions.value.slice(0, props.maxVisibleTags));\nconst hiddenTagCount = computed(() =>\n Math.max(selectedOptions.value.length - visibleTags.value.length, 0),\n);\n\nconst enabledFilteredOptions = computed(() => filteredOptions.value.filter((option) => !option.disabled));\n\nconst activeOption = computed(() =>\n activeIndex.value >= 0 ? filteredOptions.value[activeIndex.value] : undefined,\n);\n\nconst activeDescendant = computed(() =>\n isOpen.value && activeOption.value\n ? `${listboxId}-option-${activeOption.value.value}`\n : undefined,\n);\n\nconst inputPlaceholder = computed(() =>\n props.modelValue.length === 0 && !query.value ? props.placeholder : '',\n);\n\nconst isSelected = (value: string) => props.modelValue.includes(value);\n\nconst setInitialActiveIndex = (fallback: 'first' | 'last' = 'first') => {\n const selectedIndex = filteredOptions.value.findIndex(\n (option) => isSelected(option.value) && !option.disabled,\n );\n\n if (selectedIndex >= 0) {\n activeIndex.value = selectedIndex;\n return;\n }\n\n if (enabledFilteredOptions.value.length === 0) {\n activeIndex.value = -1;\n return;\n }\n\n const targetOption =\n fallback === 'last'\n ? enabledFilteredOptions.value[enabledFilteredOptions.value.length - 1]\n : enabledFilteredOptions.value[0];\n\n activeIndex.value = filteredOptions.value.findIndex(\n (option) => option.value === targetOption.value,\n );\n};\n\nconst openListbox = (fallback: 'first' | 'last' = 'first') => {\n if (props.disabled) {\n return;\n }\n\n setValue(true);\n setInitialActiveIndex(fallback);\n};\n\nconst closeListbox = () => {\n setValue(false);\n activeIndex.value = -1;\n};\n\nconst focusInput = () => {\n nextTick(() => inputRef.value?.focus());\n};\n\nconst updateValues = (nextValues: string[]) => {\n emit('update:modelValue', nextValues);\n};\n\nconst toggleOption = (option: TreeMultiSelectOption) => {\n if (props.disabled || option.disabled) {\n return;\n }\n\n const nextValues = isSelected(option.value)\n ? props.modelValue.filter((value) => value !== option.value)\n : [...props.modelValue, option.value];\n\n updateValues(nextValues);\n query.value = '';\n setInitialActiveIndex('first');\n focusInput();\n};\n\nconst removeValue = (value: string) => {\n if (props.disabled) {\n return;\n }\n\n updateValues(props.modelValue.filter((item) => item !== value));\n focusInput();\n};\n\nconst moveActive = (direction: 1 | -1) => {\n if (filteredOptions.value.length === 0) {\n activeIndex.value = -1;\n return;\n }\n\n const nextIndex = getNextEnabledIndex(activeIndex.value, filteredOptions.value, direction);\n activeIndex.value = nextIndex;\n};\n\nconst onInput = (event: Event) => {\n query.value = (event.target as HTMLInputElement).value;\n emit('input-change', query.value);\n\n if (!props.disabled && !isOpen.value) {\n openListbox('first');\n return;\n }\n\n setInitialActiveIndex('first');\n};\n\nconst onInputFocus = () => {\n openListbox('first');\n};\n\nconst onInputKeydown = (event: KeyboardEvent) => {\n if (props.disabled) {\n return;\n }\n\n if (event.key === 'Tab') {\n closeListbox();\n return;\n }\n\n if (isEscapeKey(event)) {\n event.preventDefault();\n closeListbox();\n return;\n }\n\n if (event.key === 'Backspace' && !query.value && props.modelValue.length > 0) {\n event.preventDefault();\n removeValue(props.modelValue[props.modelValue.length - 1]);\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n\n if (!isOpen.value) {\n openListbox('first');\n return;\n }\n\n moveActive(1);\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n\n if (!isOpen.value) {\n openListbox('last');\n return;\n }\n\n moveActive(-1);\n return;\n }\n\n if (event.key === 'Home' && isOpen.value) {\n event.preventDefault();\n setInitialActiveIndex('first');\n return;\n }\n\n if (event.key === 'End' && isOpen.value) {\n event.preventDefault();\n setInitialActiveIndex('last');\n return;\n }\n\n if (event.key === 'Enter' && activeOption.value) {\n event.preventDefault();\n toggleOption(activeOption.value);\n }\n};\n\nconst onDocumentPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) {\n return;\n }\n\n const target = event.target;\n\n if (!(target instanceof Node)) {\n return;\n }\n\n if (rootRef.value?.contains(target)) {\n return;\n }\n\n closeListbox();\n};\n\nwatch(\n isOpen,\n (value) => {\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n } else {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n }\n },\n);\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <div\n class=\"tree-multi-select__control\"\n @click=\"focusInput\"\n >\n <span\n v-if=\"$slots.prefix\"\n class=\"tree-multi-select__slot\"\n >\n <slot name=\"prefix\" />\n </span>\n\n <div class=\"tree-multi-select__values\">\n <span\n v-for=\"option in visibleTags\"\n :key=\"option.value\"\n class=\"tree-multi-select__tag\"\n >\n <slot\n name=\"tag\"\n :option=\"option\"\n :remove=\"() => removeValue(option.value)\"\n >\n <span class=\"tree-multi-select__tag-label\">{{ option.label }}</span>\n <button\n type=\"button\"\n class=\"tree-multi-select__tag-remove\"\n :disabled=\"disabled\"\n aria-label=\"Remove selection\"\n @mousedown.prevent\n @click.stop=\"removeValue(option.value)\"\n >\n <XIcon :size=\"12\" />\n </button>\n </slot>\n </span>\n\n <span\n v-if=\"hiddenTagCount > 0\"\n class=\"tree-multi-select__overflow\"\n >\n +{{ hiddenTagCount }}\n </span>\n\n <input\n ref=\"inputRef\"\n v-bind=\"inputAttrs\"\n :value=\"query\"\n type=\"text\"\n class=\"tree-multi-select__input\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n :aria-expanded=\"isOpen\"\n :aria-controls=\"isOpen ? listboxId : undefined\"\n :aria-activedescendant=\"activeDescendant\"\n :aria-invalid=\"invalid || undefined\"\n :aria-busy=\"loading || undefined\"\n :disabled=\"disabled\"\n :placeholder=\"inputPlaceholder\"\n @focus=\"onInputFocus\"\n @input=\"onInput\"\n @keydown=\"onInputKeydown\"\n >\n </div>\n\n <TreeSpinner\n v-if=\"loading\"\n class=\"tree-multi-select__indicator\"\n size=\"sm\"\n />\n <ChevronDownIcon\n v-else\n class=\"tree-multi-select__indicator\"\n :size=\"16\"\n />\n </div>\n\n <Transition name=\"tree-fade\">\n <ul\n v-if=\"isOpen\"\n :id=\"listboxId\"\n class=\"tree-multi-select__listbox\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n >\n <li\n v-if=\"filteredOptions.length === 0\"\n class=\"tree-multi-select__empty\"\n >\n <slot\n name=\"empty\"\n :query=\"query\"\n >\n {{ emptyText }}\n </slot>\n </li>\n\n <template v-else>\n <li\n v-for=\"(option, index) in filteredOptions\"\n :key=\"option.value\"\n >\n <button\n :id=\"`${listboxId}-option-${option.value}`\"\n type=\"button\"\n class=\"tree-multi-select__option\"\n :class=\"{\n 'is-active': index === activeIndex,\n 'is-selected': isSelected(option.value),\n 'is-disabled': option.disabled,\n }\"\n role=\"option\"\n :aria-selected=\"isSelected(option.value)\"\n :aria-disabled=\"option.disabled || undefined\"\n :disabled=\"option.disabled\"\n @mousedown.prevent\n @click=\"toggleOption(option)\"\n >\n <slot\n name=\"option\"\n :option=\"option\"\n :selected=\"isSelected(option.value)\"\n :active=\"index === activeIndex\"\n >\n <span class=\"tree-multi-select__option-copy\">\n <span class=\"tree-multi-select__option-label\">{{ option.label }}</span>\n <span\n v-if=\"option.description\"\n class=\"tree-multi-select__option-description\"\n >\n {{ option.description }}\n </span>\n </span>\n\n <span\n class=\"tree-multi-select__check\"\n aria-hidden=\"true\"\n >\n <CheckIcon\n v-if=\"isSelected(option.value)\"\n :size=\"16\"\n />\n </span>\n </slot>\n </button>\n </li>\n </template>\n </ul>\n </Transition>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n columns?: number;\n minItemWidth?: string;\n gap?: string;\n rowGap?: string;\n align?: string;\n justify?: string;\n dense?: boolean;\n }>(),\n {\n as: 'div',\n columns: undefined,\n minItemWidth: '16rem',\n gap: 'var(--tree-space-4)',\n rowGap: undefined,\n align: 'stretch',\n justify: 'stretch',\n dense: false,\n },\n);\n\nconst attrs = useAttrs();\n\nconst rootClasses = computed(() => [\n 'tree-grid',\n {\n 'is-dense': props.dense,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => [\n {\n gap: props.gap,\n rowGap: props.rowGap ?? props.gap,\n alignItems: props.align,\n justifyItems: props.justify,\n gridTemplateColumns:\n typeof props.columns === 'number' && props.columns > 0\n ? `repeat(${props.columns}, minmax(0, 1fr))`\n : `repeat(auto-fit, minmax(min(${props.minItemWidth}, 100%), 1fr))`,\n gridAutoFlow: props.dense ? 'dense' : 'row',\n },\n attrs.style,\n]);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <slot />\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n size?: TreeSize;\n sticky?: boolean;\n bordered?: boolean;\n elevated?: boolean;\n }>(),\n {\n as: 'header',\n size: 'md',\n sticky: false,\n bordered: true,\n elevated: false,\n },\n);\n\nconst attrs = useAttrs();\n\nconst rootClasses = computed(() => [\n 'tree-navbar',\n `tree-navbar--${props.size}`,\n {\n 'is-sticky': props.sticky,\n 'is-bordered': props.bordered,\n 'is-elevated': props.elevated,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <div class=\"tree-navbar__inner\">\n <div\n v-if=\"$slots.start\"\n class=\"tree-navbar__section tree-navbar__section--start\"\n >\n <slot name=\"start\" />\n </div>\n\n <div\n v-if=\"$slots.default || $slots.center\"\n class=\"tree-navbar__section tree-navbar__section--center\"\n >\n <slot name=\"center\">\n <slot />\n </slot>\n </div>\n\n <div\n v-if=\"$slots.end\"\n class=\"tree-navbar__section tree-navbar__section--end\"\n >\n <slot name=\"end\" />\n </div>\n </div>\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, type Component } from 'vue';\n\nexport type TreeLinkVariant = 'default' | 'muted' | 'danger';\n\nconst props = withDefaults(\n defineProps<{\n to?: string | Record<string, unknown>;\n href?: string;\n external?: boolean;\n disabled?: boolean;\n variant?: TreeLinkVariant;\n }>(),\n {\n to: undefined,\n href: undefined,\n external: false,\n disabled: false,\n variant: 'default',\n },\n);\n\nconst instance = getCurrentInstance();\n\nconst routerLinkComponent = computed<Component | null>(() => {\n if (!props.to) return null;\n\n return (instance?.appContext.components.RouterLink as Component | undefined) ?? null;\n});\n\nconst hasRouterLink = computed(() => {\n return Boolean(routerLinkComponent.value);\n});\n\nconst tag = computed<string | Component>(() => {\n if (props.disabled) return 'span';\n if (props.to && routerLinkComponent.value) return routerLinkComponent.value;\n return 'a';\n});\n\nconst linkProps = computed(() => {\n if (props.disabled) return {};\n if (props.to && hasRouterLink.value) return { to: props.to };\n const href = props.href ?? (typeof props.to === 'string' ? props.to : undefined);\n return {\n href,\n ...(props.external ? { target: '_blank', rel: 'noopener noreferrer' } : {}),\n };\n});\n\nconst classes = computed(() => [\n 'tree-link',\n `tree-link--${props.variant}`,\n {\n 'is-disabled': props.disabled,\n },\n]);\n</script>\n\n<template>\n <component\n :is=\"tag\"\n v-bind=\"linkProps\"\n :class=\"classes\"\n :aria-disabled=\"disabled || undefined\"\n :tabindex=\"disabled ? -1 : undefined\"\n >\n <slot />\n </component>\n</template>\n","import type { ComputedRef, InjectionKey } from 'vue';\n\nexport interface TreeSidebarContext {\n collapsed: ComputedRef<boolean>;\n}\n\nexport const treeSidebarInjectionKey: InjectionKey<TreeSidebarContext> =\n Symbol('tree-sidebar');\n","<script setup lang=\"ts\">\nimport { getNextEnabledIndex, isActivationKey } from '@treeui/utils';\nimport { computed, getCurrentInstance, inject, nextTick, ref, useAttrs, watch, type Component, type ComponentPublicInstance } from 'vue';\nimport type { TreeSize } from '../types/contracts';\nimport { treeSidebarInjectionKey } from './sidebar';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport interface TreeNavMenuItem {\n label: string;\n value: string;\n shortLabel?: string;\n description?: string;\n icon?: Component;\n to?: string | Record<string, unknown>;\n badge?: string | number;\n disabled?: boolean;\n}\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string;\n defaultValue?: string;\n items?: TreeNavMenuItem[];\n size?: TreeSize;\n collapsed?: boolean;\n disabled?: boolean;\n }>(),\n {\n modelValue: undefined,\n defaultValue: '',\n items: () => [],\n size: 'md',\n collapsed: undefined,\n disabled: false,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n select: [value: string, item: TreeNavMenuItem];\n}>();\n\ndefineSlots<{\n item?: (props: {\n item: TreeNavMenuItem;\n selected: boolean;\n focused: boolean;\n collapsed: boolean;\n }) => unknown;\n empty?: () => unknown;\n}>();\n\nconst attrs = useAttrs();\nconst sidebar = inject(treeSidebarInjectionKey, null);\nconst internalValue = ref(props.defaultValue);\nconst itemRefs = ref<Map<string, HTMLElement>>(new Map());\nconst instance = getCurrentInstance();\n\nconst selectedValue = computed(() => props.modelValue ?? internalValue.value);\nconst resolvedCollapsed = computed(() => props.collapsed ?? sidebar?.collapsed.value ?? false);\n\nconst routerLinkComponent = computed<Component | null>(() => (\n (instance?.appContext.components.RouterLink as Component | undefined) ?? null\n));\n\nconst itemTag = (item: TreeNavMenuItem) => {\n if (item.to && routerLinkComponent.value) {\n return routerLinkComponent.value;\n }\n return 'button';\n};\n\nconst getInitialFocusedIndex = () => {\n const selectedIndex = props.items.findIndex((item) =>\n item.value === selectedValue.value && !item.disabled,\n );\n\n if (selectedIndex >= 0) {\n return selectedIndex;\n }\n\n return props.items.findIndex((item) => !item.disabled);\n};\n\nconst focusedIndex = ref(getInitialFocusedIndex());\n\nconst rootClasses = computed(() => [\n 'tree-nav-menu',\n `tree-nav-menu--${props.size}`,\n {\n 'is-collapsed': resolvedCollapsed.value,\n 'is-disabled': props.disabled,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst isSelected = (value: string) => selectedValue.value === value;\n\nconst setItemRef = (element: Element | ComponentPublicInstance | null, value: string) => {\n const resolvedElement =\n element instanceof HTMLElement\n ? element\n : element && '$el' in element && element.$el instanceof HTMLElement\n ? element.$el\n : null;\n\n if (resolvedElement) {\n itemRefs.value.set(value, resolvedElement);\n } else {\n itemRefs.value.delete(value);\n }\n};\n\nconst focusItem = (index: number) => {\n const item = props.items[index];\n\n if (!item) {\n return;\n }\n\n focusedIndex.value = index;\n nextTick(() => itemRefs.value.get(item.value)?.focus());\n};\n\nconst selectItem = (item: TreeNavMenuItem) => {\n if (props.disabled || item.disabled) {\n return;\n }\n\n if (props.modelValue === undefined) {\n internalValue.value = item.value;\n }\n\n emit('update:modelValue', item.value);\n emit('select', item.value, item);\n};\n\nconst onItemKeydown = (event: KeyboardEvent, index: number) => {\n if (props.disabled) {\n return;\n }\n\n if (event.key === 'Home') {\n event.preventDefault();\n const firstIndex = props.items.findIndex((item) => !item.disabled);\n\n if (firstIndex >= 0) {\n focusItem(firstIndex);\n }\n\n return;\n }\n\n if (event.key === 'End') {\n event.preventDefault();\n const lastIndex = [...props.items].reverse().findIndex((item) => !item.disabled);\n\n if (lastIndex >= 0) {\n focusItem(props.items.length - 1 - lastIndex);\n }\n\n return;\n }\n\n if (event.key === 'ArrowDown' || event.key === 'ArrowRight') {\n event.preventDefault();\n const nextIndex = getNextEnabledIndex(index, props.items, 1);\n\n if (nextIndex >= 0) {\n focusItem(nextIndex);\n }\n\n return;\n }\n\n if (event.key === 'ArrowUp' || event.key === 'ArrowLeft') {\n event.preventDefault();\n const previousIndex = getNextEnabledIndex(index, props.items, -1);\n\n if (previousIndex >= 0) {\n focusItem(previousIndex);\n }\n\n return;\n }\n\n if (isActivationKey(event)) {\n event.preventDefault();\n selectItem(props.items[index]);\n }\n};\n\nconst getTabIndex = (index: number) => (focusedIndex.value === index ? 0 : -1);\n\nwatch(\n () => [props.items, props.modelValue] as const,\n () => {\n const nextIndex = getInitialFocusedIndex();\n focusedIndex.value = nextIndex >= 0 ? nextIndex : -1;\n },\n { deep: true },\n);\n</script>\n\n<template>\n <nav\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <ul\n v-if=\"items.length > 0\"\n class=\"tree-nav-menu__list\"\n >\n <li\n v-for=\"(item, index) in items\"\n :key=\"item.value\"\n class=\"tree-nav-menu__entry\"\n >\n <component\n :is=\"itemTag(item)\"\n :ref=\"(element: Element | ComponentPublicInstance | null) => setItemRef(element, item.value)\"\n :type=\"item.to ? undefined : 'button'\"\n :to=\"item.to || undefined\"\n class=\"tree-nav-menu__item\"\n :class=\"{\n 'is-selected': isSelected(item.value),\n 'is-disabled': disabled || item.disabled,\n }\"\n :disabled=\"(!item.to && (disabled || item.disabled)) || undefined\"\n :aria-disabled=\"(item.to && (disabled || item.disabled)) || undefined\"\n :aria-current=\"isSelected(item.value) ? 'page' : undefined\"\n :tabindex=\"disabled || item.disabled ? -1 : getTabIndex(index)\"\n :title=\"resolvedCollapsed ? item.label : undefined\"\n @click=\"selectItem(item)\"\n @keydown=\"onItemKeydown($event, index)\"\n @focus=\"focusedIndex = index\"\n >\n <slot\n name=\"item\"\n :item=\"item\"\n :selected=\"isSelected(item.value)\"\n :focused=\"focusedIndex === index\"\n :collapsed=\"resolvedCollapsed\"\n >\n <component\n :is=\"item.icon\"\n v-if=\"item.icon\"\n class=\"tree-nav-menu__icon\"\n aria-hidden=\"true\"\n />\n <span\n v-else\n class=\"tree-nav-menu__marker\"\n aria-hidden=\"true\"\n >\n {{ (item.shortLabel ?? item.label.charAt(0)).toUpperCase() }}\n </span>\n\n <span class=\"tree-nav-menu__copy\">\n <span class=\"tree-nav-menu__label\">{{ item.label }}</span>\n <span\n v-if=\"item.description\"\n class=\"tree-nav-menu__description\"\n >\n {{ item.description }}\n </span>\n </span>\n\n <span\n v-if=\"item.badge !== undefined && item.badge !== null\"\n class=\"tree-nav-menu__badge\"\n >\n {{ item.badge }}\n </span>\n </slot>\n </component>\n </li>\n </ul>\n\n <div\n v-else\n class=\"tree-nav-menu__empty\"\n >\n <slot name=\"empty\">\n No navigation items.\n </slot>\n </div>\n </nav>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject, useAttrs } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n value: string;\n disabled?: boolean;\n invalid?: boolean;\n size?: TreeSize;\n }>(),\n {\n disabled: false,\n invalid: false,\n size: undefined,\n },\n);\n\nconst group = inject<{\n modelValue: () => string | undefined;\n name: () => string | undefined;\n disabled: () => boolean;\n invalid: () => boolean;\n size: () => TreeSize;\n onChange: (value: string) => void;\n} | null>('tree-radio-group', null);\n\nconst attrs = useAttrs();\n\nconst isChecked = computed(() => {\n return group ? group.modelValue() === props.value : false;\n});\n\nconst isDisabled = computed(() => props.disabled || (group?.disabled() ?? false));\nconst isInvalid = computed(() => props.invalid || (group?.invalid() ?? false));\nconst resolvedSize = computed(() => props.size ?? group?.size() ?? 'md');\n\nconst rootClasses = computed(() => [\n 'tree-radio',\n `tree-radio--${resolvedSize.value}`,\n {\n 'is-checked': isChecked.value,\n 'is-disabled': isDisabled.value,\n 'is-invalid': isInvalid.value,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst inputAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst onChange = () => {\n if (group) {\n group.onChange(props.value);\n }\n};\n</script>\n\n<template>\n <label\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <input\n v-bind=\"inputAttrs\"\n type=\"radio\"\n class=\"tree-radio__input\"\n :value=\"value\"\n :checked=\"isChecked\"\n :disabled=\"isDisabled\"\n :name=\"group?.name()\"\n :aria-checked=\"isChecked\"\n :aria-invalid=\"isInvalid || undefined\"\n @change=\"onChange\"\n >\n <span\n class=\"tree-radio__control\"\n aria-hidden=\"true\"\n >\n <span\n v-if=\"isChecked\"\n class=\"tree-radio__dot\"\n />\n </span>\n <span\n v-if=\"$slots.default\"\n class=\"tree-radio__label\"\n >\n <slot />\n </span>\n </label>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, provide, useAttrs } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string;\n name?: string;\n disabled?: boolean;\n invalid?: boolean;\n size?: TreeSize;\n }>(),\n {\n modelValue: undefined,\n name: undefined,\n disabled: false,\n invalid: false,\n size: 'md',\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n}>();\n\nconst attrs = useAttrs();\n\nprovide('tree-radio-group', {\n modelValue: () => props.modelValue,\n name: () => props.name,\n disabled: () => props.disabled,\n invalid: () => props.invalid,\n size: () => props.size,\n onChange: (value: string) => {\n emit('update:modelValue', value);\n },\n});\n\nconst rootClasses = computed(() => [\n 'tree-radio-group',\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst groupAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <div\n v-bind=\"groupAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n role=\"radiogroup\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { createId, isActivationKey, isEscapeKey } from '@treeui/utils';\nimport { computed, nextTick, onBeforeUnmount, ref, toRef, useAttrs, watch } from 'vue';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeSize } from '../types/contracts';\nimport TreeSpinner from './TreeSpinner.vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport interface TreeSelectOption {\n label: string;\n value: string | number;\n disabled?: boolean;\n}\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string | number;\n options?: TreeSelectOption[];\n open?: boolean;\n defaultOpen?: boolean;\n size?: TreeSize;\n disabled?: boolean;\n loading?: boolean;\n invalid?: boolean;\n placeholder?: string;\n }>(),\n {\n modelValue: '',\n options: () => [],\n open: undefined,\n defaultOpen: false,\n size: 'md',\n disabled: false,\n loading: false,\n invalid: false,\n placeholder: '',\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number];\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n}>();\n\nconst attrs = useAttrs();\nconst listboxId = createId('tree-select');\nconst rootRef = ref<HTMLElement | null>(null);\nconst triggerRef = ref<HTMLButtonElement | null>(null);\nconst optionRefs = ref<Map<string | number, HTMLElement>>(new Map());\nconst focusedIndex = ref(-1);\n\nconst triggerAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst rootClasses = computed(() => [\n 'tree-select',\n `tree-select--${props.size}`,\n {\n 'is-disabled': props.disabled,\n 'is-invalid': props.invalid,\n 'is-loading': props.loading,\n 'is-open': isOpen.value,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst selectedLabel = computed(() => {\n const opt = props.options.find((o) => o.value === props.modelValue);\n return opt?.label ?? '';\n});\n\nconst enabledOptions = computed(() =>\n props.options.filter((o) => !o.disabled),\n);\n\nconst openDropdown = () => {\n if (props.disabled) return;\n const selectedIdx = props.options.findIndex((o) => o.value === props.modelValue);\n focusedIndex.value = selectedIdx >= 0 ? selectedIdx : 0;\n setValue(true);\n nextTick(() => focusOption(focusedIndex.value));\n};\n\nconst closeDropdown = (restoreFocus = false) => {\n setValue(false);\n focusedIndex.value = -1;\n if (restoreFocus) {\n nextTick(() => triggerRef.value?.focus());\n }\n};\n\nconst toggleDropdown = () => {\n if (isOpen.value) {\n closeDropdown();\n } else {\n openDropdown();\n }\n};\n\nconst selectOption = (opt: TreeSelectOption) => {\n if (opt.disabled) return;\n emit('update:modelValue', opt.value);\n closeDropdown(true);\n};\n\nconst focusOption = (index: number) => {\n const opt = props.options[index];\n if (!opt) return;\n const el = optionRefs.value.get(opt.value);\n el?.focus();\n};\n\nconst setOptionRef = (el: Element | null, value: string | number) => {\n if (el instanceof HTMLElement) {\n optionRefs.value.set(value, el);\n } else {\n optionRefs.value.delete(value);\n }\n};\n\nconst moveFocus = (direction: 1 | -1) => {\n let nextIndex = focusedIndex.value + direction;\n while (nextIndex >= 0 && nextIndex < props.options.length) {\n if (!props.options[nextIndex].disabled) {\n focusedIndex.value = nextIndex;\n focusOption(nextIndex);\n return;\n }\n nextIndex += direction;\n }\n};\n\nconst onTriggerKeydown = (event: KeyboardEvent) => {\n if (props.disabled) return;\n\n if (isEscapeKey(event) && isOpen.value) {\n event.preventDefault();\n closeDropdown();\n return;\n }\n\n if (isActivationKey(event) || event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n openDropdown();\n }\n};\n\nconst onOptionKeydown = (event: KeyboardEvent, opt: TreeSelectOption, _index: number) => {\n if (isEscapeKey(event)) {\n event.preventDefault();\n closeDropdown(true);\n return;\n }\n\n if (isActivationKey(event)) {\n event.preventDefault();\n selectOption(opt);\n return;\n }\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n moveFocus(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n moveFocus(-1);\n break;\n case 'Home':\n event.preventDefault();\n focusedIndex.value = enabledOptions.value.length > 0\n ? props.options.indexOf(enabledOptions.value[0])\n : 0;\n focusOption(focusedIndex.value);\n break;\n case 'End':\n event.preventDefault();\n focusedIndex.value = enabledOptions.value.length > 0\n ? props.options.indexOf(enabledOptions.value[enabledOptions.value.length - 1])\n : props.options.length - 1;\n focusOption(focusedIndex.value);\n break;\n default:\n break;\n }\n};\n\nconst onDocumentPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) return;\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (rootRef.value?.contains(target)) return;\n closeDropdown();\n};\n\nconst hasSelection = computed(() =>\n props.modelValue !== '' && props.modelValue !== null && props.modelValue !== undefined,\n);\n\nwatch(isOpen, (value) => {\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n } else {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n }\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <button\n ref=\"triggerRef\"\n v-bind=\"triggerAttrs\"\n type=\"button\"\n class=\"tree-select__trigger\"\n :disabled=\"disabled\"\n :aria-controls=\"isOpen ? listboxId : undefined\"\n aria-haspopup=\"listbox\"\n :aria-expanded=\"isOpen\"\n :aria-invalid=\"invalid || undefined\"\n :aria-busy=\"loading || undefined\"\n @click=\"toggleDropdown\"\n @keydown=\"onTriggerKeydown\"\n >\n <span\n v-if=\"$slots.prefix\"\n class=\"tree-select__slot tree-select__slot--prefix\"\n >\n <slot name=\"prefix\" />\n </span>\n <span\n class=\"tree-select__value\"\n :data-placeholder=\"!hasSelection ? true : undefined\"\n >\n {{ selectedLabel || placeholder }}\n </span>\n <TreeSpinner\n v-if=\"loading\"\n size=\"sm\"\n label=\"Loading\"\n />\n <svg\n v-else\n class=\"tree-select__chevron\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"4 6 8 10 12 6\" />\n </svg>\n </button>\n <transition name=\"tree-fade\">\n <ul\n v-if=\"isOpen && !disabled\"\n :id=\"listboxId\"\n role=\"listbox\"\n class=\"tree-select__listbox\"\n :aria-label=\"typeof triggerAttrs['aria-label'] === 'string' ? triggerAttrs['aria-label'] : undefined\"\n >\n <li\n v-for=\"(opt, index) in options\"\n :key=\"opt.value\"\n :ref=\"(el) => setOptionRef(el as Element | null, opt.value)\"\n role=\"option\"\n class=\"tree-select__option\"\n :class=\"{\n 'is-selected': opt.value === modelValue,\n 'is-disabled': opt.disabled,\n 'is-focused': index === focusedIndex,\n }\"\n :aria-selected=\"opt.value === modelValue\"\n :aria-disabled=\"opt.disabled || undefined\"\n :tabindex=\"opt.disabled ? -1 : 0\"\n @click=\"selectOption(opt)\"\n @keydown=\"onOptionKeydown($event, opt, index)\"\n >\n {{ opt.label }}\n <svg\n v-if=\"opt.value === modelValue\"\n class=\"tree-select__check\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"3.5 8.5 6.5 11.5 12.5 4.5\" />\n </svg>\n </li>\n </ul>\n </transition>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { getTreeIcon } from '@treeui/icons';\nimport { computed, provide, toRef, useAttrs } from 'vue';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeSize } from '../types/contracts';\nimport { treeSidebarInjectionKey } from './sidebar';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst _treeSidebarSides = ['left', 'right'] as const;\n\nexport type TreeSidebarSide = (typeof _treeSidebarSides)[number];\n\nconst ChevronLeftIcon = getTreeIcon('chevron-left');\nconst ChevronRightIcon = getTreeIcon('chevron-right');\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n collapsed?: boolean;\n defaultCollapsed?: boolean;\n collapsible?: boolean;\n size?: TreeSize;\n side?: TreeSidebarSide;\n sticky?: boolean;\n bordered?: boolean;\n width?: string;\n collapsedWidth?: string;\n collapseLabel?: string;\n expandLabel?: string;\n }>(),\n {\n as: 'aside',\n collapsed: undefined,\n defaultCollapsed: false,\n collapsible: true,\n size: 'md',\n side: 'left',\n sticky: false,\n bordered: true,\n width: '17.5rem',\n collapsedWidth: '4.75rem',\n collapseLabel: 'Collapse sidebar',\n expandLabel: 'Expand sidebar',\n },\n);\n\nconst emit = defineEmits<{\n 'update:collapsed': [value: boolean];\n 'collapse-change': [value: boolean];\n}>();\n\ndefineSlots<{\n header?: (props: { collapsed: boolean }) => unknown;\n default?: (props: { collapsed: boolean }) => unknown;\n footer?: (props: { collapsed: boolean }) => unknown;\n toggle?: (props: { collapsed: boolean }) => unknown;\n}>();\n\nconst attrs = useAttrs();\n\nconst { value: isCollapsed, setValue } = useControllableOpen(\n toRef(props, 'collapsed'),\n props.defaultCollapsed,\n (value) => {\n emit('update:collapsed', value);\n emit('collapse-change', value);\n },\n);\n\nconst rootClasses = computed(() => [\n 'tree-sidebar',\n `tree-sidebar--${props.size}`,\n `tree-sidebar--${props.side}`,\n {\n 'is-collapsed': isCollapsed.value,\n 'is-sticky': props.sticky,\n 'is-bordered': props.bordered,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => [\n {\n '--tree-sidebar-width': props.width,\n '--tree-sidebar-collapsed-width': props.collapsedWidth,\n },\n attrs.style,\n]);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst toggleCollapsed = () => {\n if (!props.collapsible) {\n return;\n }\n\n setValue(!isCollapsed.value);\n};\n\nconst ToggleIcon = computed(() => {\n if (props.side === 'right') {\n return isCollapsed.value ? ChevronLeftIcon : ChevronRightIcon;\n }\n\n return isCollapsed.value ? ChevronRightIcon : ChevronLeftIcon;\n});\n\nconst toggleLabel = computed(() =>\n isCollapsed.value ? props.expandLabel : props.collapseLabel,\n);\n\nprovide(treeSidebarInjectionKey, {\n collapsed: computed(() => isCollapsed.value),\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isCollapsed ? 'collapsed' : 'expanded'\"\n >\n <div\n v-if=\"$slots.header\"\n class=\"tree-sidebar__header\"\n >\n <slot\n name=\"header\"\n :collapsed=\"isCollapsed\"\n />\n </div>\n\n <div class=\"tree-sidebar__body\">\n <slot :collapsed=\"isCollapsed\" />\n </div>\n\n <div\n v-if=\"$slots.footer || collapsible\"\n class=\"tree-sidebar__footer\"\n >\n <slot\n v-if=\"$slots.footer\"\n name=\"footer\"\n :collapsed=\"isCollapsed\"\n />\n\n <button\n v-if=\"collapsible\"\n type=\"button\"\n class=\"tree-sidebar__toggle\"\n :aria-label=\"toggleLabel\"\n :aria-expanded=\"!isCollapsed\"\n @click=\"toggleCollapsed\"\n >\n <slot\n name=\"toggle\"\n :collapsed=\"isCollapsed\"\n >\n <component\n :is=\"ToggleIcon\"\n :size=\"16\"\n />\n <span v-if=\"!isCollapsed\">{{ toggleLabel }}</span>\n </slot>\n </button>\n </div>\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\nimport type { TreeSize } from '../types/contracts';\nimport TreeSpinner from './TreeSpinner.vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string | number;\n size?: TreeSize;\n disabled?: boolean;\n loading?: boolean;\n invalid?: boolean;\n type?: string;\n placeholder?: string;\n }>(),\n {\n modelValue: '',\n size: 'md',\n disabled: false,\n loading: false,\n invalid: false,\n type: 'text',\n placeholder: '',\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n}>();\n\nconst attrs = useAttrs();\n\nconst rootClasses = computed(() => [\n 'tree-input',\n `tree-input--${props.size}`,\n {\n 'is-disabled': props.disabled,\n 'is-invalid': props.invalid,\n 'is-loading': props.loading,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst inputAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst stringValue = computed(() => `${props.modelValue ?? ''}`);\n\nconst onInput = (event: Event) => {\n emit('update:modelValue', (event.target as HTMLInputElement).value);\n};\n</script>\n\n<template>\n <label\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <span\n v-if=\"$slots.prefix\"\n class=\"tree-input__slot tree-input__slot--prefix\"\n >\n <slot name=\"prefix\" />\n </span>\n <input\n v-bind=\"inputAttrs\"\n class=\"tree-input__field\"\n :type=\"type\"\n :value=\"stringValue\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :aria-invalid=\"invalid || undefined\"\n @input=\"onInput\"\n >\n <TreeSpinner\n v-if=\"loading\"\n size=\"sm\"\n label=\"Loading\"\n />\n <span\n v-if=\"$slots.suffix\"\n class=\"tree-input__slot tree-input__slot--suffix\"\n >\n <slot name=\"suffix\" />\n </span>\n </label>\n</template>\n","<script setup lang=\"ts\">\nimport { clamp } from '@treeui/utils';\nimport { computed, ref, useAttrs, watch } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: number | null;\n min?: number;\n max?: number;\n step?: number;\n size?: TreeSize;\n disabled?: boolean;\n invalid?: boolean;\n placeholder?: string;\n controls?: boolean;\n }>(),\n {\n modelValue: null,\n min: undefined,\n max: undefined,\n step: 1,\n size: 'md',\n disabled: false,\n invalid: false,\n placeholder: '',\n controls: true,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: number | null];\n}>();\n\nconst attrs = useAttrs();\nconst displayValue = ref(\n props.modelValue === null || props.modelValue === undefined ? '' : `${props.modelValue}`,\n);\n\nconst precision = computed(() => {\n const normalizedStep = `${props.step}`;\n const fractionalPart = normalizedStep.split('.')[1];\n return fractionalPart ? fractionalPart.length : 0;\n});\n\nconst rootClasses = computed(() => [\n 'tree-number-input',\n `tree-number-input--${props.size}`,\n {\n 'is-disabled': props.disabled,\n 'is-invalid': props.invalid,\n 'has-controls': props.controls,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst inputAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst formatValue = (value: number | null | undefined) =>\n value === null || value === undefined ? '' : `${value}`;\n\nconst normalizeValue = (value: number) => {\n const clamped = clamp(\n value,\n props.min ?? Number.NEGATIVE_INFINITY,\n props.max ?? Number.POSITIVE_INFINITY,\n );\n\n return Number(clamped.toFixed(precision.value));\n};\n\nconst parseValue = (value: string) => {\n const normalized = value.trim().replace(',', '.');\n\n if (!normalized) {\n return null;\n }\n\n const parsed = Number(normalized);\n return Number.isNaN(parsed) ? null : parsed;\n};\n\nconst currentNumericValue = computed(() => {\n const parsed = parseValue(displayValue.value);\n return parsed ?? props.modelValue ?? null;\n});\n\nconst canDecrement = computed(() => {\n if (props.disabled) {\n return false;\n }\n\n if (props.min === undefined || currentNumericValue.value === null) {\n return true;\n }\n\n return normalizeValue(currentNumericValue.value) > props.min;\n});\n\nconst canIncrement = computed(() => {\n if (props.disabled) {\n return false;\n }\n\n if (props.max === undefined || currentNumericValue.value === null) {\n return true;\n }\n\n return normalizeValue(currentNumericValue.value) < props.max;\n});\n\nconst commitValue = (value: number | null) => {\n if (value === null) {\n displayValue.value = '';\n emit('update:modelValue', null);\n return;\n }\n\n const normalized = normalizeValue(value);\n displayValue.value = `${normalized}`;\n emit('update:modelValue', normalized);\n};\n\nconst stepValue = (direction: 1 | -1) => {\n if (props.disabled) {\n return;\n }\n\n let baseValue = currentNumericValue.value ?? 0;\n\n if (currentNumericValue.value === null) {\n if (direction === 1 && props.min !== undefined) {\n baseValue = props.min - props.step;\n }\n\n if (direction === -1 && props.max !== undefined) {\n baseValue = props.max + props.step;\n }\n }\n\n commitValue(baseValue + direction * props.step);\n};\n\nconst onInput = (event: Event) => {\n const nextValue = (event.target as HTMLInputElement).value;\n displayValue.value = nextValue;\n\n if (!nextValue.trim()) {\n emit('update:modelValue', null);\n return;\n }\n\n const parsedValue = parseValue(nextValue);\n\n if (parsedValue === null) {\n return;\n }\n\n emit('update:modelValue', normalizeValue(parsedValue));\n};\n\nconst onBlur = () => {\n if (!displayValue.value.trim()) {\n displayValue.value = '';\n return;\n }\n\n const parsedValue = parseValue(displayValue.value);\n\n if (parsedValue === null) {\n displayValue.value = formatValue(props.modelValue);\n return;\n }\n\n displayValue.value = `${normalizeValue(parsedValue)}`;\n};\n\nconst onKeydown = (event: KeyboardEvent) => {\n if (props.disabled) {\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n stepValue(1);\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n stepValue(-1);\n return;\n }\n\n if (event.key === 'Home' && props.min !== undefined) {\n event.preventDefault();\n commitValue(props.min);\n return;\n }\n\n if (event.key === 'End' && props.max !== undefined) {\n event.preventDefault();\n commitValue(props.max);\n }\n};\n\nwatch(\n () => props.modelValue,\n (value) => {\n const nextDisplayValue = formatValue(value);\n\n if (nextDisplayValue !== displayValue.value) {\n displayValue.value = nextDisplayValue;\n }\n },\n);\n</script>\n\n<template>\n <div\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <button\n v-if=\"controls\"\n type=\"button\"\n class=\"tree-number-input__stepper tree-number-input__stepper--decrement\"\n :disabled=\"!canDecrement\"\n aria-label=\"Decrease value\"\n @click=\"stepValue(-1)\"\n >\n <span aria-hidden=\"true\">-</span>\n </button>\n\n <input\n v-bind=\"inputAttrs\"\n :value=\"displayValue\"\n type=\"text\"\n inputmode=\"decimal\"\n class=\"tree-number-input__field\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :aria-invalid=\"invalid || undefined\"\n @input=\"onInput\"\n @blur=\"onBlur\"\n @keydown=\"onKeydown\"\n >\n\n <button\n v-if=\"controls\"\n type=\"button\"\n class=\"tree-number-input__stepper tree-number-input__stepper--increment\"\n :disabled=\"!canIncrement\"\n aria-label=\"Increase value\"\n @click=\"stepValue(1)\"\n >\n <span aria-hidden=\"true\">+</span>\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { createId, getNextEnabledIndex, isActivationKey } from '@treeui/utils';\nimport { computed, nextTick, ref, useAttrs, watch, type ComponentPublicInstance } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport interface TreeSelectableListItem {\n label: string;\n value: string;\n description?: string;\n meta?: string;\n disabled?: boolean;\n}\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string;\n defaultValue?: string;\n items?: TreeSelectableListItem[];\n size?: TreeSize;\n disabled?: boolean;\n emptyText?: string;\n }>(),\n {\n modelValue: undefined,\n defaultValue: '',\n items: () => [],\n size: 'md',\n disabled: false,\n emptyText: 'No items available.',\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n}>();\n\ndefineSlots<{\n item?: (props: {\n item: TreeSelectableListItem;\n selected: boolean;\n focused: boolean;\n }) => unknown;\n empty?: () => unknown;\n}>();\n\nconst attrs = useAttrs();\nconst baseId = createId('tree-selectable-list');\nconst itemRefs = ref<Map<string, HTMLButtonElement>>(new Map());\nconst internalValue = ref(props.defaultValue);\n\nconst selectedValue = computed(() => props.modelValue ?? internalValue.value);\n\nconst getInitialFocusedIndex = () => {\n const selectedIndex = props.items.findIndex((item) =>\n item.value === selectedValue.value && !item.disabled,\n );\n\n if (selectedIndex >= 0) {\n return selectedIndex;\n }\n\n return props.items.findIndex((item) => !item.disabled);\n};\n\nconst focusedIndex = ref(getInitialFocusedIndex());\n\nconst rootClasses = computed(() => [\n 'tree-selectable-list',\n `tree-selectable-list--${props.size}`,\n {\n 'is-disabled': props.disabled,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst isSelected = (value: string) => selectedValue.value === value;\n\nconst setItemRef = (element: Element | ComponentPublicInstance | null, value: string) => {\n const resolvedElement =\n element instanceof HTMLButtonElement\n ? element\n : element && '$el' in element && element.$el instanceof HTMLButtonElement\n ? element.$el\n : null;\n\n if (resolvedElement instanceof HTMLButtonElement) {\n itemRefs.value.set(value, resolvedElement);\n } else {\n itemRefs.value.delete(value);\n }\n};\n\nconst focusItem = (index: number) => {\n const item = props.items[index];\n\n if (!item) {\n return;\n }\n\n focusedIndex.value = index;\n nextTick(() => itemRefs.value.get(item.value)?.focus());\n};\n\nconst selectItem = (item: TreeSelectableListItem, focus = false) => {\n if (props.disabled || item.disabled) {\n return;\n }\n\n if (props.modelValue === undefined) {\n internalValue.value = item.value;\n }\n\n emit('update:modelValue', item.value);\n\n if (focus) {\n const index = props.items.findIndex((candidate) => candidate.value === item.value);\n\n if (index >= 0) {\n focusItem(index);\n }\n }\n};\n\nconst onItemKeydown = (event: KeyboardEvent, index: number) => {\n if (props.disabled) {\n return;\n }\n\n if (event.key === 'Home') {\n event.preventDefault();\n const firstIndex = props.items.findIndex((item) => !item.disabled);\n\n if (firstIndex >= 0) {\n selectItem(props.items[firstIndex], true);\n }\n\n return;\n }\n\n if (event.key === 'End') {\n event.preventDefault();\n const lastIndex = [...props.items].reverse().findIndex((item) => !item.disabled);\n\n if (lastIndex >= 0) {\n const resolvedIndex = props.items.length - 1 - lastIndex;\n selectItem(props.items[resolvedIndex], true);\n }\n\n return;\n }\n\n if (event.key === 'ArrowDown' || event.key === 'ArrowRight') {\n event.preventDefault();\n const nextIndex = getNextEnabledIndex(index, props.items, 1);\n\n if (nextIndex >= 0) {\n selectItem(props.items[nextIndex], true);\n }\n\n return;\n }\n\n if (event.key === 'ArrowUp' || event.key === 'ArrowLeft') {\n event.preventDefault();\n const previousIndex = getNextEnabledIndex(index, props.items, -1);\n\n if (previousIndex >= 0) {\n selectItem(props.items[previousIndex], true);\n }\n\n return;\n }\n\n if (isActivationKey(event)) {\n event.preventDefault();\n selectItem(props.items[index], true);\n }\n};\n\nconst getTabIndex = (index: number) => (focusedIndex.value === index ? 0 : -1);\n\nwatch(\n () => [props.items, props.modelValue] as const,\n () => {\n const nextIndex = getInitialFocusedIndex();\n focusedIndex.value = nextIndex >= 0 ? nextIndex : -1;\n },\n { deep: true },\n);\n</script>\n\n<template>\n <div\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n role=\"listbox\"\n :aria-disabled=\"disabled || undefined\"\n >\n <template v-if=\"items.length > 0\">\n <button\n v-for=\"(item, index) in items\"\n :id=\"`${baseId}-${item.value}`\"\n :ref=\"(element) => setItemRef(element, item.value)\"\n :key=\"item.value\"\n type=\"button\"\n class=\"tree-selectable-list__item\"\n :class=\"{\n 'is-selected': isSelected(item.value),\n 'is-disabled': disabled || item.disabled,\n }\"\n role=\"option\"\n :aria-selected=\"isSelected(item.value)\"\n :tabindex=\"disabled || item.disabled ? -1 : getTabIndex(index)\"\n :disabled=\"disabled || item.disabled\"\n @click=\"selectItem(item)\"\n @keydown=\"onItemKeydown($event, index)\"\n @focus=\"focusedIndex = index\"\n >\n <slot\n name=\"item\"\n :item=\"item\"\n :selected=\"isSelected(item.value)\"\n :focused=\"focusedIndex === index\"\n >\n <span\n class=\"tree-selectable-list__indicator\"\n aria-hidden=\"true\"\n />\n\n <span class=\"tree-selectable-list__copy\">\n <span class=\"tree-selectable-list__label\">{{ item.label }}</span>\n <span\n v-if=\"item.description\"\n class=\"tree-selectable-list__description\"\n >\n {{ item.description }}\n </span>\n </span>\n\n <span\n v-if=\"item.meta\"\n class=\"tree-selectable-list__meta\"\n >\n {{ item.meta }}\n </span>\n </slot>\n </button>\n </template>\n\n <div\n v-else\n class=\"tree-selectable-list__empty\"\n >\n <slot name=\"empty\">\n {{ emptyText }}\n </slot>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst _treeStackDirections = ['vertical', 'horizontal'] as const;\n\nexport type TreeStackDirection = (typeof _treeStackDirections)[number];\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n direction?: TreeStackDirection;\n gap?: string;\n align?: string;\n justify?: string;\n wrap?: boolean;\n reverse?: boolean;\n }>(),\n {\n as: 'div',\n direction: 'vertical',\n gap: 'var(--tree-space-4)',\n align: 'stretch',\n justify: 'flex-start',\n wrap: false,\n reverse: false,\n },\n);\n\nconst attrs = useAttrs();\n\nconst rootClasses = computed(() => [\n 'tree-stack',\n `tree-stack--${props.direction}`,\n {\n 'is-wrapping': props.wrap,\n 'is-reversed': props.reverse,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => [\n {\n gap: props.gap,\n alignItems: props.align,\n justifyContent: props.justify,\n },\n attrs.style,\n]);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <slot />\n </component>\n</template>\n","import type { ComputedRef, InjectionKey, Ref } from 'vue';\n\nexport interface TreeTreeViewNode {\n id: string;\n label: string;\n description?: string;\n meta?: string;\n disabled?: boolean;\n children?: TreeTreeViewNode[];\n}\n\nexport const treeTreeViewSelectionModes = ['single', 'multiple'] as const;\n\nexport type TreeTreeViewSelectionMode = (typeof treeTreeViewSelectionModes)[number];\n\nexport interface TreeTreeViewRecord {\n node: TreeTreeViewNode;\n level: number;\n parentId?: string;\n}\n\nexport interface TreeTreeViewContext {\n baseId: string;\n disabled: ComputedRef<boolean>;\n selectionMode: ComputedRef<TreeTreeViewSelectionMode>;\n focusedId: Ref<string>;\n isExpanded: (id: string) => boolean;\n toggleExpanded: (id: string) => void;\n isSelected: (id: string) => boolean;\n toggleSelected: (id: string) => void;\n setFocusedId: (id: string, shouldFocus?: boolean) => void;\n onItemKeydown: (event: KeyboardEvent, id: string) => void;\n registerItem: (id: string, element: HTMLElement) => void;\n unregisterItem: (id: string) => void;\n}\n\nexport const treeTreeViewInjectionKey: InjectionKey<TreeTreeViewContext> =\n Symbol('tree-tree-view');\n","<script setup lang=\"ts\">\nimport { getTreeIcon } from '@treeui/icons';\nimport { computed, inject, type ComponentPublicInstance } from 'vue';\nimport { treeTreeViewInjectionKey, type TreeTreeViewNode } from './tree-view';\n\ndefineOptions({\n name: 'TreeTreeViewItem',\n});\n\nconst ChevronRightIcon = getTreeIcon('chevron-right');\nconst CheckIcon = getTreeIcon('check');\n\nconst props = defineProps<{\n node: TreeTreeViewNode;\n level: number;\n}>();\n\nconst ctx = inject(treeTreeViewInjectionKey);\n\nif (!ctx) {\n throw new Error('[TreeUI] TTreeView items must be rendered inside a TTreeView.');\n}\n\nconst hasChildren = computed(() => Boolean(props.node.children?.length));\nconst isExpanded = computed(() => (hasChildren.value ? ctx.isExpanded(props.node.id) : false));\nconst isSelected = computed(() => ctx.isSelected(props.node.id));\nconst isDisabled = computed(() => ctx.disabled.value || props.node.disabled);\nconst isFocused = computed(() => ctx.focusedId.value === props.node.id);\nconst itemId = computed(() => `${ctx.baseId}-${props.node.id}`);\n\nconst rowClasses = computed(() => ({\n 'is-expanded': isExpanded.value,\n 'is-selected': isSelected.value,\n 'is-disabled': isDisabled.value,\n 'is-focused': isFocused.value,\n}));\n\nconst setItemRef = (element: Element | ComponentPublicInstance | null) => {\n const resolvedElement =\n element instanceof HTMLElement\n ? element\n : element && '$el' in element && element.$el instanceof HTMLElement\n ? element.$el\n : null;\n\n if (resolvedElement instanceof HTMLElement) {\n ctx.registerItem(props.node.id, resolvedElement);\n } else {\n ctx.unregisterItem(props.node.id);\n }\n};\n\nconst onRowClick = () => {\n ctx.setFocusedId(props.node.id);\n ctx.toggleSelected(props.node.id);\n};\n\nconst onToggleClick = () => {\n if (isDisabled.value || !hasChildren.value) {\n return;\n }\n\n ctx.toggleExpanded(props.node.id);\n ctx.setFocusedId(props.node.id);\n};\n</script>\n\n<template>\n <li\n class=\"tree-tree-view__node\"\n role=\"none\"\n >\n <div\n :id=\"itemId\"\n :ref=\"setItemRef\"\n class=\"tree-tree-view__row\"\n :class=\"rowClasses\"\n :style=\"{ '--tree-tree-view-level': `${level}` }\"\n role=\"treeitem\"\n :aria-level=\"level\"\n :aria-expanded=\"hasChildren ? isExpanded : undefined\"\n :aria-selected=\"isSelected\"\n :aria-disabled=\"isDisabled || undefined\"\n :tabindex=\"isDisabled ? -1 : isFocused ? 0 : -1\"\n @click=\"onRowClick\"\n @keydown=\"ctx.onItemKeydown($event, node.id)\"\n @focus=\"ctx.setFocusedId(node.id)\"\n >\n <button\n v-if=\"hasChildren\"\n type=\"button\"\n class=\"tree-tree-view__toggle\"\n :class=\"{ 'is-expanded': isExpanded }\"\n tabindex=\"-1\"\n :disabled=\"isDisabled\"\n :aria-label=\"isExpanded ? 'Collapse node' : 'Expand node'\"\n @click.stop=\"onToggleClick\"\n >\n <ChevronRightIcon :size=\"16\" />\n </button>\n\n <span\n v-else\n class=\"tree-tree-view__spacer\"\n aria-hidden=\"true\"\n />\n\n <span\n class=\"tree-tree-view__marker\"\n :class=\"{\n 'is-selected': isSelected,\n 'is-multiple': ctx.selectionMode.value === 'multiple',\n }\"\n aria-hidden=\"true\"\n >\n <CheckIcon\n v-if=\"ctx.selectionMode.value === 'multiple' && isSelected\"\n :size=\"14\"\n />\n </span>\n\n <span class=\"tree-tree-view__copy\">\n <span class=\"tree-tree-view__label\">{{ node.label }}</span>\n <span\n v-if=\"node.description\"\n class=\"tree-tree-view__description\"\n >\n {{ node.description }}\n </span>\n </span>\n\n <span\n v-if=\"node.meta\"\n class=\"tree-tree-view__meta\"\n >\n {{ node.meta }}\n </span>\n </div>\n\n <ul\n v-if=\"hasChildren && isExpanded\"\n class=\"tree-tree-view__group\"\n role=\"group\"\n >\n <TreeTreeViewItem\n v-for=\"child in node.children\"\n :key=\"child.id\"\n :node=\"child\"\n :level=\"level + 1\"\n />\n </ul>\n </li>\n</template>\n","<script setup lang=\"ts\">\nimport { createId, isActivationKey } from '@treeui/utils';\nimport { computed, nextTick, provide, ref, useAttrs, watch } from 'vue';\nimport TreeTreeViewItem from './TreeTreeViewItem.vue';\nimport {\n treeTreeViewInjectionKey,\n type TreeTreeViewNode,\n type TreeTreeViewRecord,\n type TreeTreeViewSelectionMode,\n} from './tree-view';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string | string[];\n defaultValue?: string | string[];\n nodes?: TreeTreeViewNode[];\n selectionMode?: TreeTreeViewSelectionMode;\n expanded?: string[];\n defaultExpanded?: string[];\n disabled?: boolean;\n emptyText?: string;\n }>(),\n {\n modelValue: undefined,\n defaultValue: undefined,\n nodes: () => [],\n selectionMode: 'single',\n expanded: undefined,\n defaultExpanded: () => [],\n disabled: false,\n emptyText: 'No items available.',\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | string[] | undefined];\n 'update:expanded': [value: string[]];\n 'selection-change': [value: string | string[] | undefined];\n 'expanded-change': [value: string[]];\n}>();\n\nconst attrs = useAttrs();\nconst baseId = createId('tree-tree-view');\nconst internalValue = ref<string | string[] | undefined>(props.defaultValue);\nconst internalExpanded = ref<string[]>(props.defaultExpanded);\nconst itemRefs = ref<Map<string, HTMLElement>>(new Map());\n\nconst rootClasses = computed(() => [\n 'tree-tree-view',\n {\n 'is-disabled': props.disabled,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst treeAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst selectedValues = computed(() => {\n const value = props.modelValue ?? internalValue.value;\n\n if (value === undefined || value === null || value === '') {\n return [] as string[];\n }\n\n return Array.isArray(value) ? value : [value];\n});\n\nconst expandedValues = computed(() => props.expanded ?? internalExpanded.value);\n\nconst updateSelection = (nextValues: string[]) => {\n if (props.selectionMode === 'multiple') {\n if (props.modelValue === undefined) {\n internalValue.value = nextValues;\n }\n\n emit('update:modelValue', nextValues);\n emit('selection-change', nextValues);\n return;\n }\n\n const nextValue = nextValues[0];\n\n if (props.modelValue === undefined) {\n internalValue.value = nextValue;\n }\n\n emit('update:modelValue', nextValue);\n emit('selection-change', nextValue);\n};\n\nconst updateExpanded = (nextValues: string[]) => {\n if (props.expanded === undefined) {\n internalExpanded.value = nextValues;\n }\n\n emit('update:expanded', nextValues);\n emit('expanded-change', nextValues);\n};\n\nconst isSelected = (id: string) => selectedValues.value.includes(id);\nconst isExpanded = (id: string) => expandedValues.value.includes(id);\n\nconst flattenNodes = (\n nodes: TreeTreeViewNode[],\n level = 1,\n parentId?: string,\n): TreeTreeViewRecord[] =>\n nodes.reduce<TreeTreeViewRecord[]>((records, node) => {\n records.push({\n node,\n level,\n parentId,\n });\n\n if (node.children?.length && isExpanded(node.id)) {\n records.push(...flattenNodes(node.children, level + 1, node.id));\n }\n\n return records;\n }, []);\n\nconst visibleNodes = computed(() => flattenNodes(props.nodes));\nconst enabledNodes = computed(() => visibleNodes.value.filter((record) => !record.node.disabled));\n\nconst getInitialFocusedId = () => {\n const selectedId = selectedValues.value.find((value) =>\n visibleNodes.value.some((record) => record.node.id === value && !record.node.disabled),\n );\n\n if (selectedId) {\n return selectedId;\n }\n\n return enabledNodes.value[0]?.node.id ?? '';\n};\n\nconst focusedId = ref(getInitialFocusedId());\n\nconst registerItem = (id: string, element: HTMLElement) => {\n itemRefs.value.set(id, element);\n};\n\nconst unregisterItem = (id: string) => {\n itemRefs.value.delete(id);\n};\n\nconst focusItem = (id: string) => {\n nextTick(() => itemRefs.value.get(id)?.focus());\n};\n\nconst setFocusedId = (id: string, shouldFocus = false) => {\n focusedId.value = id;\n\n if (shouldFocus) {\n focusItem(id);\n }\n};\n\nconst getVisibleRecord = (id: string) =>\n visibleNodes.value.find((record) => record.node.id === id);\n\nconst focusBoundary = (position: 'first' | 'last') => {\n const target =\n position === 'first' ? enabledNodes.value[0] : enabledNodes.value[enabledNodes.value.length - 1];\n\n if (target) {\n setFocusedId(target.node.id, true);\n }\n};\n\nconst focusAdjacent = (direction: 1 | -1) => {\n const currentIndex = enabledNodes.value.findIndex((record) => record.node.id === focusedId.value);\n\n if (currentIndex === -1) {\n focusBoundary(direction === 1 ? 'first' : 'last');\n return;\n }\n\n const nextIndex = currentIndex + direction;\n\n if (nextIndex < 0 || nextIndex >= enabledNodes.value.length) {\n return;\n }\n\n setFocusedId(enabledNodes.value[nextIndex].node.id, true);\n};\n\nconst toggleExpanded = (id: string) => {\n const nextValues = isExpanded(id)\n ? expandedValues.value.filter((value) => value !== id)\n : [...expandedValues.value, id];\n\n updateExpanded(nextValues);\n};\n\nconst toggleSelected = (id: string) => {\n const record = getVisibleRecord(id);\n\n if (!record || record.node.disabled || props.disabled) {\n return;\n }\n\n if (props.selectionMode === 'multiple') {\n const nextValues = isSelected(id)\n ? selectedValues.value.filter((value) => value !== id)\n : [...selectedValues.value, id];\n\n updateSelection(nextValues);\n return;\n }\n\n updateSelection([id]);\n};\n\nconst onItemKeydown = (event: KeyboardEvent, id: string) => {\n const record = getVisibleRecord(id);\n\n if (!record || record.node.disabled || props.disabled) {\n return;\n }\n\n const hasChildren = Boolean(record.node.children?.length);\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n focusAdjacent(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n focusAdjacent(-1);\n break;\n case 'ArrowRight':\n event.preventDefault();\n\n if (hasChildren && !isExpanded(id)) {\n toggleExpanded(id);\n return;\n }\n\n if (hasChildren) {\n const firstChild = visibleNodes.value.find(\n (item) => item.parentId === id && !item.node.disabled,\n );\n\n if (firstChild) {\n setFocusedId(firstChild.node.id, true);\n }\n }\n\n break;\n case 'ArrowLeft':\n event.preventDefault();\n\n if (hasChildren && isExpanded(id)) {\n toggleExpanded(id);\n return;\n }\n\n if (record.parentId) {\n setFocusedId(record.parentId, true);\n }\n\n break;\n case 'Home':\n event.preventDefault();\n focusBoundary('first');\n break;\n case 'End':\n event.preventDefault();\n focusBoundary('last');\n break;\n default:\n if (isActivationKey(event)) {\n event.preventDefault();\n toggleSelected(id);\n }\n break;\n }\n};\n\nwatch(\n () => [visibleNodes.value, props.modelValue] as const,\n () => {\n const focusedRecord = visibleNodes.value.find(\n (record) => record.node.id === focusedId.value && !record.node.disabled,\n );\n\n if (!focusedRecord) {\n focusedId.value = getInitialFocusedId();\n }\n },\n { deep: true, immediate: true },\n);\n\nprovide(treeTreeViewInjectionKey, {\n baseId,\n disabled: computed(() => props.disabled),\n selectionMode: computed(() => props.selectionMode),\n focusedId,\n isExpanded,\n toggleExpanded,\n isSelected,\n toggleSelected,\n setFocusedId,\n onItemKeydown,\n registerItem,\n unregisterItem,\n});\n</script>\n\n<template>\n <div\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <ul\n v-if=\"nodes.length > 0\"\n v-bind=\"treeAttrs\"\n class=\"tree-tree-view__root\"\n role=\"tree\"\n :aria-multiselectable=\"selectionMode === 'multiple' || undefined\"\n >\n <TreeTreeViewItem\n v-for=\"node in nodes\"\n :key=\"node.id\"\n :node=\"node\"\n :level=\"1\"\n />\n </ul>\n\n <div\n v-else\n class=\"tree-tree-view__empty\"\n >\n {{ emptyText }}\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { getTreeIcon, treeIconDefaults } from '@treeui/icons';\nimport { computed, ref, useAttrs, watch } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport interface TreeStepItem {\n label: string;\n value: string;\n description?: string;\n meta?: string;\n status?: TreeStepStatus;\n disabled?: boolean;\n}\n\nconst _treeStepStatuses = ['complete', 'current', 'upcoming', 'error'] as const;\nconst _treeStepOrientations = ['horizontal', 'vertical'] as const;\n\nexport type TreeStepStatus = (typeof _treeStepStatuses)[number];\nexport type TreeStepOrientation = (typeof _treeStepOrientations)[number];\n\nconst CheckIcon = getTreeIcon('check');\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string;\n defaultValue?: string;\n items?: TreeStepItem[];\n size?: TreeSize;\n orientation?: TreeStepOrientation;\n interactive?: boolean;\n }>(),\n {\n modelValue: undefined,\n defaultValue: '',\n items: () => [],\n size: 'md',\n orientation: 'horizontal',\n interactive: false,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n}>();\n\ndefineSlots<{\n item?: (props: {\n item: TreeStepItem;\n index: number;\n status: TreeStepStatus;\n current: boolean;\n }) => unknown;\n}>();\n\nconst attrs = useAttrs();\nconst internalValue = ref(props.defaultValue || props.items[0]?.value || '');\n\nconst activeValue = computed(() => props.modelValue ?? internalValue.value);\n\nconst currentIndex = computed(() => {\n const activeIndex = props.items.findIndex((item) => item.value === activeValue.value);\n return activeIndex >= 0 ? activeIndex : 0;\n});\n\nconst rootClasses = computed(() => [\n 'tree-steps',\n `tree-steps--${props.size}`,\n `tree-steps--${props.orientation}`,\n {\n 'is-interactive': props.interactive,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst resolveStatus = (item: TreeStepItem, index: number): TreeStepStatus => {\n if (item.status) {\n return item.status;\n }\n\n if (index < currentIndex.value) {\n return 'complete';\n }\n\n if (index === currentIndex.value) {\n return 'current';\n }\n\n return 'upcoming';\n};\n\nconst selectStep = (item: TreeStepItem) => {\n if (!props.interactive || item.disabled) {\n return;\n }\n\n if (props.modelValue === undefined) {\n internalValue.value = item.value;\n }\n\n emit('update:modelValue', item.value);\n};\n\nwatch(\n () => props.items,\n (items) => {\n const hasCurrentItem = items.some((item) => item.value === activeValue.value);\n\n if (!hasCurrentItem && items[0] && props.modelValue === undefined) {\n internalValue.value = items[0].value;\n }\n },\n { deep: true },\n);\n</script>\n\n<template>\n <ol\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <li\n v-for=\"(item, index) in items\"\n :key=\"item.value\"\n class=\"tree-steps__item\"\n :class=\"`is-${resolveStatus(item, index)}`\"\n >\n <button\n type=\"button\"\n class=\"tree-steps__button\"\n :class=\"{\n 'is-current': resolveStatus(item, index) === 'current',\n 'is-disabled': item.disabled,\n }\"\n :disabled=\"!interactive || item.disabled\"\n :aria-current=\"resolveStatus(item, index) === 'current' ? 'step' : undefined\"\n @click=\"selectStep(item)\"\n >\n <slot\n name=\"item\"\n :item=\"item\"\n :index=\"index\"\n :status=\"resolveStatus(item, index)\"\n :current=\"resolveStatus(item, index) === 'current'\"\n >\n <span\n class=\"tree-steps__indicator\"\n aria-hidden=\"true\"\n >\n <CheckIcon\n v-if=\"resolveStatus(item, index) === 'complete'\"\n v-bind=\"treeIconDefaults\"\n />\n <span v-else-if=\"resolveStatus(item, index) === 'error'\">!</span>\n <span v-else>{{ index + 1 }}</span>\n </span>\n\n <span class=\"tree-steps__copy\">\n <span class=\"tree-steps__label\">{{ item.label }}</span>\n <span\n v-if=\"item.description\"\n class=\"tree-steps__description\"\n >\n {{ item.description }}\n </span>\n </span>\n\n <span\n v-if=\"item.meta\"\n class=\"tree-steps__meta\"\n >\n {{ item.meta }}\n </span>\n </slot>\n </button>\n </li>\n </ol>\n</template>\n","<script setup lang=\"ts\">\nimport { createId, getNextEnabledIndex, isActivationKey } from '@treeui/utils';\nimport { computed, nextTick, ref, useAttrs, watch, type ComponentPublicInstance } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport interface TreeToggleGroupOption {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\nconst _treeToggleGroupSelectionModes = ['single', 'multiple'] as const;\nconst _treeToggleGroupVariants = ['outline', 'soft', 'solid'] as const;\n\nexport type TreeToggleGroupSelectionMode = (typeof _treeToggleGroupSelectionModes)[number];\nexport type TreeToggleGroupVariant = (typeof _treeToggleGroupVariants)[number];\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string | string[];\n options?: TreeToggleGroupOption[];\n selectionMode?: TreeToggleGroupSelectionMode;\n size?: TreeSize;\n variant?: TreeToggleGroupVariant;\n disabled?: boolean;\n }>(),\n {\n modelValue: undefined,\n options: () => [],\n selectionMode: 'single',\n size: 'md',\n variant: 'outline',\n disabled: false,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | string[] | undefined];\n}>();\n\ndefineSlots<{\n option?: (props: { option: TreeToggleGroupOption; selected: boolean }) => unknown;\n}>();\n\nconst attrs = useAttrs();\nconst baseId = createId('tree-toggle-group');\nconst buttonRefs = ref<Map<string, HTMLButtonElement>>(new Map());\n\nconst normalizedValues = computed(() =>\n props.selectionMode === 'multiple'\n ? Array.isArray(props.modelValue)\n ? props.modelValue\n : []\n : typeof props.modelValue === 'string' && props.modelValue\n ? [props.modelValue]\n : [],\n);\n\nconst getInitialFocusedIndex = () => {\n const selectedIndex = props.options.findIndex((option) =>\n normalizedValues.value.includes(option.value) && !option.disabled,\n );\n\n if (selectedIndex >= 0) {\n return selectedIndex;\n }\n\n return props.options.findIndex((option) => !option.disabled);\n};\n\nconst focusedIndex = ref(getInitialFocusedIndex());\n\nconst rootClasses = computed(() => [\n 'tree-toggle-group',\n `tree-toggle-group--${props.size}`,\n `tree-toggle-group--${props.variant}`,\n `tree-toggle-group--${props.selectionMode}`,\n {\n 'is-disabled': props.disabled,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst isSelected = (value: string) => normalizedValues.value.includes(value);\n\nconst setButtonRef = (element: Element | ComponentPublicInstance | null, value: string) => {\n const resolvedElement =\n element instanceof HTMLButtonElement\n ? element\n : element && '$el' in element && element.$el instanceof HTMLButtonElement\n ? element.$el\n : null;\n\n if (resolvedElement instanceof HTMLButtonElement) {\n buttonRefs.value.set(value, resolvedElement);\n } else {\n buttonRefs.value.delete(value);\n }\n};\n\nconst focusOption = (index: number) => {\n const option = props.options[index];\n\n if (!option) {\n return;\n }\n\n focusedIndex.value = index;\n nextTick(() => buttonRefs.value.get(option.value)?.focus());\n};\n\nconst selectValue = (value: string) => {\n const option = props.options.find((item) => item.value === value);\n\n if (!option || option.disabled || props.disabled) {\n return;\n }\n\n if (props.selectionMode === 'multiple') {\n const nextValues = isSelected(value)\n ? normalizedValues.value.filter((item) => item !== value)\n : [...normalizedValues.value, value];\n\n emit('update:modelValue', nextValues);\n return;\n }\n\n emit('update:modelValue', value);\n};\n\nconst onOptionKeydown = (event: KeyboardEvent, index: number) => {\n if (props.disabled) {\n return;\n }\n\n if (event.key === 'Home') {\n event.preventDefault();\n const firstIndex = props.options.findIndex((option) => !option.disabled);\n\n if (firstIndex >= 0) {\n focusOption(firstIndex);\n\n if (props.selectionMode === 'single') {\n selectValue(props.options[firstIndex].value);\n }\n }\n\n return;\n }\n\n if (event.key === 'End') {\n event.preventDefault();\n const lastIndex = [...props.options].reverse().findIndex((option) => !option.disabled);\n\n if (lastIndex >= 0) {\n const resolvedIndex = props.options.length - 1 - lastIndex;\n focusOption(resolvedIndex);\n\n if (props.selectionMode === 'single') {\n selectValue(props.options[resolvedIndex].value);\n }\n }\n\n return;\n }\n\n if (\n event.key === 'ArrowRight' ||\n event.key === 'ArrowDown' ||\n event.key === 'ArrowLeft' ||\n event.key === 'ArrowUp'\n ) {\n event.preventDefault();\n const direction = event.key === 'ArrowRight' || event.key === 'ArrowDown' ? 1 : -1;\n const nextIndex = getNextEnabledIndex(index, props.options, direction as 1 | -1);\n\n if (nextIndex >= 0) {\n focusOption(nextIndex);\n\n if (props.selectionMode === 'single') {\n selectValue(props.options[nextIndex].value);\n }\n }\n\n return;\n }\n\n if (isActivationKey(event)) {\n event.preventDefault();\n selectValue(props.options[index].value);\n }\n};\n\nconst getTabIndex = (index: number) => (focusedIndex.value === index ? 0 : -1);\n\nwatch(\n () => [props.modelValue, props.options] as const,\n () => {\n const nextIndex = getInitialFocusedIndex();\n focusedIndex.value = nextIndex >= 0 ? nextIndex : -1;\n },\n { deep: true },\n);\n</script>\n\n<template>\n <div\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :role=\"selectionMode === 'single' ? 'radiogroup' : 'group'\"\n >\n <button\n v-for=\"(option, index) in options\"\n :id=\"`${baseId}-${option.value}`\"\n :ref=\"(element) => setButtonRef(element, option.value)\"\n :key=\"option.value\"\n type=\"button\"\n class=\"tree-toggle-group__item\"\n :class=\"{\n 'is-selected': isSelected(option.value),\n 'is-disabled': disabled || option.disabled,\n }\"\n :role=\"selectionMode === 'single' ? 'radio' : undefined\"\n :aria-checked=\"selectionMode === 'single' ? isSelected(option.value) : undefined\"\n :aria-pressed=\"selectionMode === 'multiple' ? isSelected(option.value) : undefined\"\n :tabindex=\"option.disabled || disabled ? -1 : getTabIndex(index)\"\n :disabled=\"disabled || option.disabled\"\n @click=\"selectValue(option.value)\"\n @keydown=\"onOptionKeydown($event, index)\"\n @focus=\"focusedIndex = index\"\n >\n <slot\n name=\"option\"\n :option=\"option\"\n :selected=\"isSelected(option.value)\"\n >\n {{ option.label }}\n </slot>\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs, ref, watch, nextTick } from 'vue';\nimport type { TreeSize } from '../types/contracts';\nimport TreeSpinner from './TreeSpinner.vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string;\n size?: TreeSize;\n disabled?: boolean;\n loading?: boolean;\n invalid?: boolean;\n placeholder?: string;\n rows?: number;\n autoGrow?: boolean;\n }>(),\n {\n modelValue: '',\n size: 'md',\n disabled: false,\n loading: false,\n invalid: false,\n placeholder: '',\n rows: 3,\n autoGrow: false,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n}>();\n\nconst attrs = useAttrs();\nconst textareaRef = ref<HTMLTextAreaElement | null>(null);\n\nconst rootClasses = computed(() => [\n 'tree-textarea',\n `tree-textarea--${props.size}`,\n {\n 'is-disabled': props.disabled,\n 'is-invalid': props.invalid,\n 'is-loading': props.loading,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst textareaAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst stringValue = computed(() => `${props.modelValue ?? ''}`);\n\nconst onInput = (event: Event) => {\n emit('update:modelValue', (event.target as HTMLTextAreaElement).value);\n};\n\nconst adjustHeight = () => {\n const el = textareaRef.value;\n if (!el || !props.autoGrow) return;\n el.style.height = 'auto';\n el.style.height = `${el.scrollHeight}px`;\n};\n\nwatch(\n () => props.modelValue,\n async () => {\n if (!props.autoGrow) return;\n await nextTick();\n adjustHeight();\n },\n);\n</script>\n\n<template>\n <label\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <textarea\n ref=\"textareaRef\"\n v-bind=\"textareaAttrs\"\n class=\"tree-textarea__field\"\n :value=\"stringValue\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :rows=\"rows\"\n :aria-invalid=\"invalid || undefined\"\n @input=\"onInput\"\n />\n <TreeSpinner\n v-if=\"loading\"\n size=\"sm\"\n label=\"Loading\"\n />\n </label>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nconst props = withDefaults(\n defineProps<{\n width?: string;\n height?: string;\n animation?: 'pulse' | 'wave' | 'none';\n }>(),\n {\n width: '100%',\n height: undefined,\n animation: 'pulse',\n },\n);\n\nconst classes = computed(() => [\n 'tree-skeleton',\n props.animation !== 'none' ? `tree-skeleton--${props.animation}` : '',\n]);\n\nconst style = computed(() => ({\n width: props.width,\n height: props.height,\n}));\n</script>\n\n<template>\n <span\n :class=\"classes\"\n :style=\"style\"\n aria-hidden=\"true\"\n >\n <slot />\n </span>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots } from 'vue';\nimport TreeSkeleton from './TreeSkeleton.vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst _treeStatTones = ['neutral', 'success', 'warning', 'danger', 'info'] as const;\nconst _treeStatTrendDirections = ['up', 'down', 'neutral'] as const;\n\nexport type TreeStatTone = (typeof _treeStatTones)[number];\nexport type TreeStatTrendDirection = (typeof _treeStatTrendDirections)[number];\n\nconst props = withDefaults(\n defineProps<{\n label?: string;\n value?: string | number;\n trend?: string;\n meta?: string;\n tone?: TreeStatTone;\n trendDirection?: TreeStatTrendDirection;\n loading?: boolean;\n }>(),\n {\n label: '',\n value: '',\n trend: '',\n meta: '',\n tone: 'neutral',\n trendDirection: 'neutral',\n loading: false,\n },\n);\n\ndefineSlots<{\n icon?: () => unknown;\n label?: () => unknown;\n value?: () => unknown;\n trend?: () => unknown;\n meta?: () => unknown;\n}>();\n\nconst attrs = useAttrs();\nconst slots = useSlots();\n\nconst rootClasses = computed(() => [\n 'tree-stat',\n `tree-stat--${props.tone}`,\n {\n 'has-icon': Boolean(slots.icon) && !props.loading,\n 'is-loading': props.loading,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst loadingAttrs = computed(() => ({\n ...rootAttrs.value,\n 'aria-busy': props.loading || undefined,\n}));\n\nconst hasValue = computed(() => props.value !== '' && props.value !== null && props.value !== undefined);\nconst hasTrend = computed(() => Boolean(slots.trend || props.trend));\nconst hasMeta = computed(() => Boolean(slots.meta || props.meta));\nconst hasLabel = computed(() => Boolean(slots.label || props.label));\n\nconst trendSymbol = computed(() => {\n if (props.trendDirection === 'up') {\n return '+';\n }\n\n if (props.trendDirection === 'down') {\n return '-';\n }\n\n return '•';\n});\n</script>\n\n<template>\n <div\n v-bind=\"loadingAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <template v-if=\"loading\">\n <div class=\"tree-stat__loading\">\n <TreeSkeleton class=\"tree-stat__loading-label\" />\n <TreeSkeleton class=\"tree-stat__loading-value\" />\n <TreeSkeleton class=\"tree-stat__loading-trend\" />\n </div>\n </template>\n <template v-else>\n <div\n v-if=\"$slots.icon\"\n class=\"tree-stat__icon\"\n >\n <slot name=\"icon\" />\n </div>\n\n <div class=\"tree-stat__body\">\n <div\n v-if=\"hasLabel || hasMeta\"\n class=\"tree-stat__topline\"\n >\n <p\n v-if=\"hasLabel\"\n class=\"tree-stat__label\"\n >\n <slot name=\"label\">\n {{ label }}\n </slot>\n </p>\n\n <p\n v-if=\"hasMeta\"\n class=\"tree-stat__meta\"\n >\n <slot name=\"meta\">\n {{ meta }}\n </slot>\n </p>\n </div>\n\n <div class=\"tree-stat__content\">\n <p\n v-if=\"hasValue || $slots.value\"\n class=\"tree-stat__value\"\n >\n <slot name=\"value\">\n {{ value }}\n </slot>\n </p>\n\n <p\n v-if=\"hasTrend\"\n class=\"tree-stat__trend\"\n >\n <slot name=\"trend\">\n <span\n class=\"tree-stat__trend-indicator\"\n aria-hidden=\"true\"\n >\n {{ trendSymbol }}\n </span>\n <span>{{ trend }}</span>\n </slot>\n </p>\n </div>\n </div>\n </template>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: boolean;\n size?: TreeSize;\n disabled?: boolean;\n invalid?: boolean;\n }>(),\n {\n modelValue: false,\n size: 'md',\n disabled: false,\n invalid: false,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean];\n}>();\n\nconst attrs = useAttrs();\n\nconst rootClasses = computed(() => [\n 'tree-switch',\n `tree-switch--${props.size}`,\n {\n 'is-checked': props.modelValue,\n 'is-disabled': props.disabled,\n 'is-invalid': props.invalid,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst inputAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst onChange = () => {\n emit('update:modelValue', !props.modelValue);\n};\n</script>\n\n<template>\n <label\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <input\n v-bind=\"inputAttrs\"\n type=\"checkbox\"\n role=\"switch\"\n class=\"tree-switch__input\"\n :checked=\"modelValue\"\n :disabled=\"disabled\"\n :aria-checked=\"modelValue\"\n :aria-invalid=\"invalid || undefined\"\n @change=\"onChange\"\n >\n <span\n class=\"tree-switch__track\"\n aria-hidden=\"true\"\n >\n <span class=\"tree-switch__thumb\" />\n </span>\n <span\n v-if=\"$slots.default\"\n class=\"tree-switch__label\"\n >\n <slot />\n </span>\n </label>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, toRef, useAttrs } from 'vue';\nimport { createId } from '@treeui/utils';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeTooltipSide } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n content?: string;\n side?: TreeTooltipSide;\n delay?: number;\n id?: string;\n }>(),\n {\n defaultOpen: false,\n disabled: false,\n content: '',\n side: 'top',\n delay: 80,\n id: undefined,\n },\n);\n\nconst emit = defineEmits<{\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n}>();\n\nconst attrs = useAttrs();\nconst contentId = props.id ?? createId('tree-tooltip');\nconst triggerAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\nconst rootClasses = computed(() => ['tree-tooltip', attrs.class]);\nconst rootStyle = computed(() => attrs.style);\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nlet openTimer: ReturnType<typeof setTimeout> | undefined;\n\nconst clearOpenTimer = () => {\n if (openTimer) {\n clearTimeout(openTimer);\n openTimer = undefined;\n }\n};\n\nconst show = (immediate = false) => {\n if (props.disabled) {\n return;\n }\n\n clearOpenTimer();\n\n if (immediate) {\n setValue(true);\n return;\n }\n\n openTimer = setTimeout(() => {\n setValue(true);\n }, props.delay);\n};\n\nconst showOnFocus = () => {\n show(true);\n};\n\nconst showOnPointer = () => {\n show();\n};\n\nconst hide = () => {\n clearOpenTimer();\n setValue(false);\n};\n\nconst tooltipClasses = computed(() => [\n 'tree-tooltip__content',\n `tree-tooltip__content--${props.side}`,\n]);\n\nonBeforeUnmount(clearOpenTimer);\n</script>\n\n<template>\n <span\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n @mouseenter=\"showOnPointer\"\n @mouseleave=\"hide\"\n @focus.capture=\"showOnFocus\"\n @blur.capture=\"hide\"\n >\n <span\n class=\"tree-tooltip__trigger\"\n :aria-describedby=\"isOpen ? contentId : undefined\"\n v-bind=\"triggerAttrs\"\n >\n <slot name=\"trigger\">\n <slot />\n </slot>\n </span>\n <transition name=\"tree-fade\">\n <span\n v-if=\"isOpen && !disabled\"\n :id=\"contentId\"\n role=\"tooltip\"\n :class=\"tooltipClasses\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <slot name=\"content\">\n {{ content }}\n </slot>\n </span>\n </transition>\n </span>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n label?: string;\n htmlFor?: string;\n error?: string;\n hint?: string;\n required?: boolean;\n disabled?: boolean;\n size?: TreeSize;\n }>(),\n {\n label: undefined,\n htmlFor: undefined,\n error: undefined,\n hint: undefined,\n required: false,\n disabled: false,\n size: 'md',\n },\n);\n\nconst attrs = useAttrs();\n\nconst hasError = computed(() => !!props.error || !!slots.error);\n\nconst slots = defineSlots<{\n default?: (props: Record<string, never>) => unknown;\n label?: (props: Record<string, never>) => unknown;\n error?: (props: Record<string, never>) => unknown;\n hint?: (props: Record<string, never>) => unknown;\n}>();\n\nconst rootClasses = computed(() => [\n 'tree-form-field',\n `tree-form-field--${props.size}`,\n {\n 'is-disabled': props.disabled,\n 'is-invalid': hasError.value,\n 'is-required': props.required,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst fieldAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <div\n v-bind=\"fieldAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <label\n v-if=\"label || $slots.label\"\n class=\"tree-form-field__label\"\n :for=\"htmlFor\"\n >\n <slot name=\"label\">{{ label }}</slot>\n <span\n v-if=\"required\"\n class=\"tree-form-field__required\"\n aria-hidden=\"true\"\n >*</span>\n </label>\n\n <div class=\"tree-form-field__control\">\n <slot />\n </div>\n\n <p\n v-if=\"hasError\"\n class=\"tree-form-field__error\"\n role=\"alert\"\n >\n <slot name=\"error\">\n {{ error }}\n </slot>\n </p>\n\n <p\n v-else-if=\"hint || $slots.hint\"\n class=\"tree-form-field__hint\"\n >\n <slot name=\"hint\">\n {{ hint }}\n </slot>\n </p>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\nconst props = withDefaults(\n defineProps<{\n /** Current active page (1-based) */\n modelValue?: number;\n /** Total number of pages */\n totalPages: number;\n /** Number of sibling pages shown around the current page */\n siblings?: number;\n /** Size variant */\n size?: TreeSize;\n /** Disable all controls */\n disabled?: boolean;\n /** Accessible label for the nav element */\n label?: string;\n }>(),\n {\n modelValue: 1,\n siblings: 1,\n size: 'md',\n disabled: false,\n label: 'Pagination',\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [page: number];\n}>();\n\ndefineSlots<{\n previous?: (props: Record<string, never>) => unknown;\n next?: (props: Record<string, never>) => unknown;\n}>();\n\nconst currentPage = computed(() =>\n Math.min(Math.max(1, props.modelValue), props.totalPages),\n);\n\nconst pages = computed(() => {\n const total = props.totalPages;\n const current = currentPage.value;\n const siblings = props.siblings;\n const items: (number | 'ellipsis')[] = [];\n\n const rangeStart = Math.max(2, current - siblings);\n const rangeEnd = Math.min(total - 1, current + siblings);\n\n // Always show page 1\n items.push(1);\n\n // Leading ellipsis\n if (rangeStart > 2) {\n items.push('ellipsis');\n }\n\n // Sibling pages\n for (let i = rangeStart; i <= rangeEnd; i++) {\n items.push(i);\n }\n\n // Trailing ellipsis\n if (rangeEnd < total - 1) {\n items.push('ellipsis');\n }\n\n // Always show last page (if more than 1 page)\n if (total > 1) {\n items.push(total);\n }\n\n return items;\n});\n\nconst classes = computed(() => [\n 'tree-pagination',\n `tree-pagination--${props.size}`,\n { 'is-disabled': props.disabled },\n]);\n\nfunction goToPage(page: number) {\n if (props.disabled) return;\n const clamped = Math.min(Math.max(1, page), props.totalPages);\n if (clamped !== currentPage.value) {\n emit('update:modelValue', clamped);\n }\n}\n\nfunction onKeydown(event: KeyboardEvent, page: number) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n goToPage(page);\n }\n}\n</script>\n\n<template>\n <nav\n :class=\"classes\"\n :aria-label=\"label\"\n >\n <ul class=\"tree-pagination__list\">\n <!-- Previous button -->\n <li class=\"tree-pagination__item\">\n <button\n class=\"tree-pagination__button tree-pagination__button--prev\"\n type=\"button\"\n :disabled=\"disabled || currentPage <= 1\"\n :aria-label=\"'Go to previous page'\"\n @click=\"goToPage(currentPage - 1)\"\n >\n <slot name=\"previous\">\n <svg\n class=\"tree-pagination__icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M10 12L6 8l4-4\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </slot>\n </button>\n </li>\n\n <!-- Page items -->\n <li\n v-for=\"(page, index) in pages\"\n :key=\"page === 'ellipsis' ? `ellipsis-${index}` : page\"\n class=\"tree-pagination__item\"\n >\n <span\n v-if=\"page === 'ellipsis'\"\n class=\"tree-pagination__ellipsis\"\n aria-hidden=\"true\"\n >\n …\n </span>\n <button\n v-else\n class=\"tree-pagination__button\"\n :class=\"{ 'is-active': page === currentPage }\"\n type=\"button\"\n :disabled=\"disabled\"\n :aria-label=\"`Go to page ${page}`\"\n :aria-current=\"page === currentPage ? 'page' : undefined\"\n @click=\"goToPage(page)\"\n @keydown=\"onKeydown($event, page)\"\n >\n {{ page }}\n </button>\n </li>\n\n <!-- Next button -->\n <li class=\"tree-pagination__item\">\n <button\n class=\"tree-pagination__button tree-pagination__button--next\"\n type=\"button\"\n :disabled=\"disabled || currentPage >= totalPages\"\n :aria-label=\"'Go to next page'\"\n @click=\"goToPage(currentPage + 1)\"\n >\n <slot name=\"next\">\n <svg\n class=\"tree-pagination__icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M6 4l4 4-4 4\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </slot>\n </button>\n </li>\n </ul>\n </nav>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, ref, toRef, useAttrs, watch } from 'vue';\nimport { createId, focusFirst, isEscapeKey } from '@treeui/utils';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TreeTooltipSide } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n side?: TreeTooltipSide;\n align?: 'start' | 'center' | 'end';\n id?: string;\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n side: 'bottom',\n align: 'center',\n id: undefined,\n },\n);\n\nconst emit = defineEmits<{\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n}>();\n\ndefineSlots<{\n trigger(props: { isOpen: boolean }): unknown;\n default(): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst contentId = props.id ?? createId('tree-popover');\nconst rootRef = ref<HTMLElement | null>(null);\nconst triggerRef = ref<HTMLButtonElement | null>(null);\nconst contentRef = ref<HTMLElement | null>(null);\n\nconst triggerAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst rootClasses = computed(() => [\n 'tree-popover',\n {\n 'is-open': isOpen.value,\n 'is-disabled': props.disabled,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst contentClasses = computed(() => [\n 'tree-popover__content',\n `tree-popover__content--${props.side}`,\n `tree-popover__content--align-${props.align}`,\n]);\n\nconst openPopover = () => {\n if (props.disabled) return;\n setValue(true);\n nextTick(() => {\n if (contentRef.value) {\n if (!focusFirst(contentRef.value)) {\n contentRef.value.focus();\n }\n }\n });\n};\n\nconst closePopover = (restoreFocus = false) => {\n setValue(false);\n if (restoreFocus) {\n nextTick(() => triggerRef.value?.focus());\n }\n};\n\nconst togglePopover = () => {\n if (isOpen.value) {\n closePopover();\n } else {\n openPopover();\n }\n};\n\nconst onTriggerKeydown = (event: KeyboardEvent) => {\n if (props.disabled) return;\n\n if (isEscapeKey(event) && isOpen.value) {\n event.preventDefault();\n closePopover();\n }\n};\n\nconst onContentKeydown = (event: KeyboardEvent) => {\n if (isEscapeKey(event)) {\n event.preventDefault();\n closePopover(true);\n }\n};\n\nconst onDocumentPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) return;\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (rootRef.value?.contains(target)) return;\n closePopover();\n};\n\nwatch(isOpen, (value) => {\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n } else {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n }\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <div\n class=\"tree-popover__anchor\"\n @click=\"togglePopover\"\n @keydown=\"onTriggerKeydown\"\n >\n <slot\n name=\"trigger\"\n :is-open=\"isOpen\"\n >\n <button\n ref=\"triggerRef\"\n type=\"button\"\n class=\"tree-popover__trigger\"\n :disabled=\"disabled\"\n :aria-expanded=\"isOpen\"\n :aria-controls=\"isOpen ? contentId : undefined\"\n aria-haspopup=\"dialog\"\n v-bind=\"triggerAttrs\"\n />\n </slot>\n </div>\n <transition name=\"tree-popover-fade\">\n <div\n v-if=\"isOpen && !disabled\"\n :id=\"contentId\"\n ref=\"contentRef\"\n role=\"dialog\"\n :class=\"contentClasses\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n tabindex=\"-1\"\n @keydown=\"onContentKeydown\"\n >\n <slot />\n </div>\n </transition>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\nconst props = withDefaults(\n defineProps<{\n /** Current progress value (0–100). Omit for indeterminate. */\n value?: number;\n /** Maximum value. Defaults to 100. */\n max?: number;\n /** Size variant */\n size?: TreeSize;\n /** Accessible label */\n label?: string;\n }>(),\n {\n value: undefined,\n max: 100,\n size: 'md',\n label: 'Progress',\n },\n);\n\nconst isIndeterminate = computed(() => props.value === undefined || props.value === null);\n\nconst percentage = computed(() => {\n if (isIndeterminate.value) return 0;\n return Math.min(100, Math.max(0, (props.value! / props.max) * 100));\n});\n\nconst classes = computed(() => [\n 'tree-progress',\n `tree-progress--${props.size}`,\n { 'tree-progress--indeterminate': isIndeterminate.value },\n]);\n</script>\n\n<template>\n <div\n :class=\"classes\"\n role=\"progressbar\"\n :aria-valuenow=\"isIndeterminate ? undefined : percentage\"\n :aria-valuemin=\"0\"\n :aria-valuemax=\"100\"\n :aria-label=\"label\"\n >\n <div class=\"tree-progress__track\">\n <div\n class=\"tree-progress__fill\"\n :style=\"isIndeterminate ? undefined : { width: `${percentage}%` }\"\n />\n </div>\n\n <span class=\"tree-visually-hidden\">{{ label }}</span>\n </div>\n</template>\n","import type { InjectionKey, Ref } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\nexport type TabsActivationMode = 'automatic' | 'manual';\n\nexport interface TabsContext {\n activeValue: Ref<string>;\n setActiveValue: (value: string) => void;\n size: Ref<TreeSize>;\n activationMode: Ref<TabsActivationMode>;\n disabled: Ref<boolean>;\n baseId: string;\n registerTab: (value: string) => void;\n unregisterTab: (value: string) => void;\n getTabValues: () => string[];\n isTabDisabled: (value: string) => boolean;\n setTabDisabled: (value: string, disabled: boolean) => void;\n}\n\nexport const TABS_INJECTION_KEY: InjectionKey<TabsContext> = Symbol('TreeTabs');\n","<script setup lang=\"ts\">\nimport { createId } from '@treeui/utils';\nimport { computed, provide, reactive, ref, toRef, watch } from 'vue';\nimport type { TreeSize } from '../types/contracts';\nimport type { TabsActivationMode } from './tabs-context';\nimport { TABS_INJECTION_KEY } from './tabs-context';\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string;\n defaultValue?: string;\n size?: TreeSize;\n activationMode?: TabsActivationMode;\n disabled?: boolean;\n }>(),\n {\n modelValue: undefined,\n defaultValue: '',\n size: 'md',\n activationMode: 'automatic',\n disabled: false,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n}>();\n\nconst baseId = createId('tree-tabs');\nconst internalValue = ref(props.defaultValue);\nconst tabOrder = ref<string[]>([]);\nconst disabledTabs: Record<string, boolean> = reactive({});\n\nconst activeValue = computed(() => props.modelValue ?? internalValue.value);\n\nconst setActiveValue = (value: string) => {\n if (value === activeValue.value) return;\n if (props.modelValue === undefined) {\n internalValue.value = value;\n }\n emit('update:modelValue', value);\n};\n\nconst registerTab = (value: string) => {\n if (!tabOrder.value.includes(value)) {\n tabOrder.value.push(value);\n }\n};\n\nconst unregisterTab = (value: string) => {\n const idx = tabOrder.value.indexOf(value);\n if (idx >= 0) tabOrder.value.splice(idx, 1);\n delete disabledTabs[value];\n};\n\nconst getTabValues = () => tabOrder.value;\n\nconst isTabDisabled = (value: string) => props.disabled || !!disabledTabs[value];\n\nconst setTabDisabled = (value: string, disabled: boolean) => {\n if (disabled) {\n disabledTabs[value] = true;\n } else {\n delete disabledTabs[value];\n }\n};\n\nwatch(\n () => props.modelValue,\n (val) => {\n if (val !== undefined) {\n internalValue.value = val;\n }\n },\n);\n\nprovide(TABS_INJECTION_KEY, {\n activeValue,\n setActiveValue,\n size: toRef(props, 'size'),\n activationMode: toRef(props, 'activationMode'),\n disabled: toRef(props, 'disabled'),\n baseId,\n registerTab,\n unregisterTab,\n getTabValues,\n isTabDisabled,\n setTabDisabled,\n});\n\nconst rootClasses = computed(() => [\n 'tree-tabs',\n `tree-tabs--${props.size}`,\n]);\n</script>\n\n<template>\n <div :class=\"rootClasses\">\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { isActivationKey } from '@treeui/utils';\nimport { computed, inject, ref } from 'vue';\nimport { TABS_INJECTION_KEY } from './tabs-context';\n\nconst ctx = inject(TABS_INJECTION_KEY);\nif (!ctx) {\n throw new Error('TTabList must be used inside TTabs');\n}\n\nconst listRef = ref<HTMLElement | null>(null);\n\nconst getAllTabElements = (): HTMLElement[] => {\n if (!listRef.value) return [];\n return Array.from(\n listRef.value.querySelectorAll<HTMLElement>('[role=\"tab\"]'),\n );\n};\n\nconst getEnabledTabElements = (): HTMLElement[] => {\n return getAllTabElements().filter((el) => {\n const value = el.dataset.tabValue;\n return value ? !ctx.isTabDisabled(value) : false;\n });\n};\n\nconst moveFocus = (direction: 1 | -1) => {\n const tabs = getEnabledTabElements();\n if (!tabs.length) return;\n\n const current = document.activeElement as HTMLElement;\n const currentIndex = tabs.indexOf(current);\n let nextIndex = currentIndex + direction;\n\n if (nextIndex < 0) nextIndex = tabs.length - 1;\n if (nextIndex >= tabs.length) nextIndex = 0;\n\n const nextTab = tabs[nextIndex];\n nextTab.focus();\n\n if (ctx.activationMode.value === 'automatic') {\n const value = nextTab.dataset.tabValue;\n if (value) ctx.setActiveValue(value);\n }\n};\n\nconst focusFirst = () => {\n const tabs = getEnabledTabElements();\n if (!tabs.length) return;\n tabs[0].focus();\n if (ctx.activationMode.value === 'automatic') {\n const value = tabs[0].dataset.tabValue;\n if (value) ctx.setActiveValue(value);\n }\n};\n\nconst focusLast = () => {\n const tabs = getEnabledTabElements();\n if (!tabs.length) return;\n const last = tabs[tabs.length - 1];\n last.focus();\n if (ctx.activationMode.value === 'automatic') {\n const value = last.dataset.tabValue;\n if (value) ctx.setActiveValue(value);\n }\n};\n\nconst onKeydown = (event: KeyboardEvent) => {\n switch (event.key) {\n case 'ArrowRight':\n event.preventDefault();\n moveFocus(1);\n break;\n case 'ArrowLeft':\n event.preventDefault();\n moveFocus(-1);\n break;\n case 'Home':\n event.preventDefault();\n focusFirst();\n break;\n case 'End':\n event.preventDefault();\n focusLast();\n break;\n default:\n if (ctx.activationMode.value === 'manual' && isActivationKey(event)) {\n event.preventDefault();\n const target = event.target as HTMLElement;\n const value = target.dataset?.tabValue;\n if (value) ctx.setActiveValue(value);\n }\n break;\n }\n};\n\nconst classes = computed(() => [\n 'tree-tabs__list',\n]);\n</script>\n\n<template>\n <div\n ref=\"listRef\"\n role=\"tablist\"\n aria-orientation=\"horizontal\"\n :class=\"classes\"\n @keydown=\"onKeydown\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount, onMounted, watch } from 'vue';\nimport { TABS_INJECTION_KEY } from './tabs-context';\n\nconst props = withDefaults(\n defineProps<{\n value: string;\n disabled?: boolean;\n }>(),\n {\n disabled: false,\n },\n);\n\nconst ctx = inject(TABS_INJECTION_KEY);\nif (!ctx) {\n throw new Error('TTab must be used inside TTabs');\n}\n\nonMounted(() => {\n ctx.registerTab(props.value);\n ctx.setTabDisabled(props.value, props.disabled);\n});\n\nwatch(\n () => props.disabled,\n (val) => ctx.setTabDisabled(props.value, val),\n);\n\nonBeforeUnmount(() => {\n ctx.unregisterTab(props.value);\n});\n\nconst isActive = computed(() => ctx.activeValue.value === props.value);\nconst isDisabled = computed(() => ctx.isTabDisabled(props.value));\nconst tabId = computed(() => `${ctx.baseId}-tab-${props.value}`);\nconst panelId = computed(() => `${ctx.baseId}-panel-${props.value}`);\n\nconst onClick = () => {\n if (isDisabled.value) return;\n ctx.setActiveValue(props.value);\n};\n\nconst classes = computed(() => [\n 'tree-tabs__tab',\n `tree-tabs__tab--${ctx.size.value}`,\n {\n 'is-active': isActive.value,\n 'is-disabled': isDisabled.value,\n },\n]);\n</script>\n\n<template>\n <button\n :id=\"tabId\"\n role=\"tab\"\n type=\"button\"\n :class=\"classes\"\n :aria-selected=\"isActive\"\n :aria-controls=\"panelId\"\n :tabindex=\"isActive ? 0 : -1\"\n :disabled=\"isDisabled || undefined\"\n :data-tab-value=\"value\"\n @click=\"onClick\"\n >\n <slot />\n </button>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject } from 'vue';\nimport { TABS_INJECTION_KEY } from './tabs-context';\n\nconst props = defineProps<{\n value: string;\n}>();\n\nconst ctx = inject(TABS_INJECTION_KEY);\nif (!ctx) {\n throw new Error('TTabPanel must be used inside TTabs');\n}\n\nconst isActive = computed(() => ctx.activeValue.value === props.value);\nconst panelId = computed(() => `${ctx.baseId}-panel-${props.value}`);\nconst tabId = computed(() => `${ctx.baseId}-tab-${props.value}`);\n</script>\n\n<template>\n <div\n v-if=\"isActive\"\n :id=\"panelId\"\n role=\"tabpanel\"\n :aria-labelledby=\"tabId\"\n tabindex=\"0\"\n class=\"tree-tabs__panel\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { createId } from '@treeui/utils';\nimport { getTreeIcon, treeIconDefaults } from '@treeui/icons';\nimport { computed } from 'vue';\nimport type { ToastItem } from '../composables/useToast';\n\nconst XIcon = getTreeIcon('x');\n\nconst iconMap = {\n info: getTreeIcon('info'),\n success: getTreeIcon('check'),\n warning: getTreeIcon('alert-circle'),\n danger: getTreeIcon('alert-circle'),\n} as const;\n\nconst props = withDefaults(\n defineProps<{\n toast: ToastItem;\n }>(),\n {},\n);\n\nconst emit = defineEmits<{\n close: [id: string];\n}>();\n\nconst toastId = createId('tree-toast-item');\nconst titleId = `${toastId}-title`;\nconst descriptionId = `${toastId}-description`;\n\nconst classes = computed(() => [\n 'tree-toast',\n `tree-toast--${props.toast.variant}`,\n]);\n\nconst StatusIcon = computed(() => iconMap[props.toast.variant]);\n\nfunction handleClose() {\n emit('close', props.toast.id);\n}\n</script>\n\n<template>\n <div\n :class=\"classes\"\n role=\"status\"\n :aria-labelledby=\"titleId\"\n :aria-describedby=\"toast.description ? descriptionId : undefined\"\n >\n <span\n class=\"tree-toast__icon\"\n aria-hidden=\"true\"\n >\n <StatusIcon\n v-bind=\"treeIconDefaults\"\n :size=\"18\"\n />\n </span>\n <div class=\"tree-toast__content\">\n <p\n :id=\"titleId\"\n class=\"tree-toast__title\"\n >\n {{ toast.title }}\n </p>\n <p\n v-if=\"toast.description\"\n :id=\"descriptionId\"\n class=\"tree-toast__description\"\n >\n {{ toast.description }}\n </p>\n </div>\n <button\n v-if=\"toast.closable\"\n type=\"button\"\n class=\"tree-toast__close\"\n aria-label=\"Dismiss notification\"\n @click=\"handleClose\"\n >\n <XIcon\n v-bind=\"treeIconDefaults\"\n :size=\"16\"\n />\n </button>\n </div>\n</template>\n","import { readonly, ref } from 'vue';\nimport { createId } from '@treeui/utils';\n\nexport type ToastVariant = 'info' | 'success' | 'warning' | 'danger';\n\nexport type ToastPosition =\n | 'top-right'\n | 'top-left'\n | 'bottom-right'\n | 'bottom-left'\n | 'top-center'\n | 'bottom-center';\n\nexport interface ToastOptions {\n title: string;\n description?: string;\n variant?: ToastVariant;\n duration?: number;\n closable?: boolean;\n}\n\nexport interface ToastItem extends Required<Pick<ToastOptions, 'title' | 'variant' | 'duration' | 'closable'>> {\n id: string;\n description?: string;\n}\n\nconst toasts = ref<ToastItem[]>([]);\nconst timers = new Map<string, ReturnType<typeof setTimeout>>();\n\nfunction add(options: ToastOptions): string {\n const id = createId('tree-toast');\n\n const item: ToastItem = {\n id,\n title: options.title,\n description: options.description,\n variant: options.variant ?? 'info',\n duration: options.duration ?? 5000,\n closable: options.closable ?? true,\n };\n\n toasts.value = [...toasts.value, item];\n\n if (item.duration > 0) {\n const timer = setTimeout(() => {\n remove(id);\n }, item.duration);\n timers.set(id, timer);\n }\n\n return id;\n}\n\nfunction remove(id: string) {\n const timer = timers.get(id);\n\n if (timer) {\n clearTimeout(timer);\n timers.delete(id);\n }\n\n toasts.value = toasts.value.filter((t) => t.id !== id);\n}\n\nfunction clear() {\n for (const timer of timers.values()) {\n clearTimeout(timer);\n }\n\n timers.clear();\n toasts.value = [];\n}\n\nexport function useToast() {\n return {\n toasts: readonly(toasts),\n add,\n remove,\n clear,\n };\n}\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { useToast, type ToastPosition } from '../composables/useToast';\nimport TreeToast from './TreeToast.vue';\n\nconst props = withDefaults(\n defineProps<{\n position?: ToastPosition;\n max?: number;\n }>(),\n {\n position: 'bottom-right',\n max: 5,\n },\n);\n\nconst { toasts, remove } = useToast();\n\nconst visibleToasts = computed(() =>\n toasts.value.slice(-props.max),\n);\n\nconst classes = computed(() => [\n 'tree-toast-provider',\n `tree-toast-provider--${props.position}`,\n]);\n\nfunction handleClose(id: string) {\n remove(id);\n}\n</script>\n\n<template>\n <slot />\n\n <Teleport to=\"body\">\n <div\n :class=\"classes\"\n aria-live=\"polite\"\n aria-relevant=\"additions removals\"\n >\n <TransitionGroup name=\"tree-toast\">\n <TreeToast\n v-for=\"toast in visibleToasts\"\n :key=\"toast.id\"\n :toast=\"toast\"\n @close=\"handleClose\"\n />\n </TransitionGroup>\n </div>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\nexport type TreeAvatarStatus = 'online' | 'offline' | 'busy' | 'away';\n\nconst props = withDefaults(\n defineProps<{\n src?: string;\n alt?: string;\n initials?: string;\n size?: TreeSize;\n status?: TreeAvatarStatus;\n }>(),\n {\n src: undefined,\n alt: '',\n initials: undefined,\n size: 'md',\n status: undefined,\n },\n);\n\nconst classes = computed(() => [\n 'tree-avatar',\n `tree-avatar--${props.size}`,\n]);\n\nconst computedInitials = computed(() => {\n if (props.initials) return props.initials;\n if (props.alt) {\n return props.alt\n .split(' ')\n .filter(Boolean)\n .map((w) => w[0])\n .slice(0, 2)\n .join('')\n .toUpperCase();\n }\n return '';\n});\n\nfunction onImgError(event: Event) {\n const target = event.target as HTMLImageElement;\n target.style.display = 'none';\n}\n</script>\n\n<template>\n <span\n :class=\"classes\"\n role=\"img\"\n :aria-label=\"alt || undefined\"\n >\n <img\n v-if=\"src\"\n :src=\"src\"\n :alt=\"alt\"\n class=\"tree-avatar__image\"\n @error=\"onImgError\"\n >\n <span\n v-else\n class=\"tree-avatar__initials\"\n aria-hidden=\"true\"\n >\n {{ computedInitials }}\n </span>\n <slot />\n <span\n v-if=\"status\"\n class=\"tree-avatar__status\"\n :class=\"`tree-avatar__status--${status}`\"\n :aria-label=\"status\"\n />\n </span>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nconst props = withDefaults(\n defineProps<{\n orientation?: 'horizontal' | 'vertical';\n decorative?: boolean;\n label?: string;\n }>(),\n {\n orientation: 'horizontal',\n decorative: true,\n label: undefined,\n },\n);\n\nconst classes = computed(() => [\n 'tree-divider',\n `tree-divider--${props.orientation}`,\n]);\n</script>\n\n<template>\n <hr\n :class=\"classes\"\n :role=\"decorative ? 'none' : 'separator'\"\n :aria-orientation=\"!decorative ? orientation : undefined\"\n :aria-label=\"!decorative ? label : undefined\"\n >\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\nexport type TreeTableColumn = {\n key: string;\n label: string;\n sortable?: boolean;\n align?: 'left' | 'center' | 'right';\n width?: string;\n};\n\nexport type TreeTableSortDirection = 'asc' | 'desc' | 'none';\n\nexport type TreeTableSortState = {\n key: string;\n direction: TreeTableSortDirection;\n};\n\nconst props = withDefaults(\n defineProps<{\n columns: TreeTableColumn[];\n rows: Record<string, unknown>[];\n size?: TreeSize;\n sortBy?: TreeTableSortState;\n }>(),\n {\n size: 'md',\n sortBy: undefined,\n },\n);\n\nconst emit = defineEmits<{\n (e: 'sort', state: TreeTableSortState): void;\n}>();\n\ndefineSlots<{\n [key: `cell-${string}`]: (props: { row: Record<string, unknown>; value: unknown }) => void;\n [key: `header-${string}`]: (props: { column: TreeTableColumn }) => void;\n empty: () => void;\n}>();\n\nconst internalSort = ref<TreeTableSortState | undefined>(undefined);\n\nconst currentSort = computed(() => props.sortBy ?? internalSort.value);\n\nconst classes = computed(() => [\n 'tree-table',\n `tree-table--${props.size}`,\n]);\n\nconst sortedRows = computed(() => {\n const sort = currentSort.value;\n if (!sort || sort.direction === 'none') return props.rows;\n\n return [...props.rows].sort((a, b) => {\n const aVal = a[sort.key];\n const bVal = b[sort.key];\n\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n\n const cmp =\n typeof aVal === 'number' && typeof bVal === 'number'\n ? aVal - bVal\n : String(aVal).localeCompare(String(bVal));\n\n return sort.direction === 'desc' ? -cmp : cmp;\n });\n});\n\nfunction handleSort(column: TreeTableColumn) {\n if (!column.sortable) return;\n\n const cur = currentSort.value;\n let direction: TreeTableSortDirection = 'asc';\n\n if (cur?.key === column.key) {\n if (cur.direction === 'asc') direction = 'desc';\n else if (cur.direction === 'desc') direction = 'none';\n else direction = 'asc';\n }\n\n const state: TreeTableSortState = { key: column.key, direction };\n internalSort.value = state;\n emit('sort', state);\n}\n\nfunction sortAriaSort(column: TreeTableColumn): 'none' | 'ascending' | 'descending' | undefined {\n if (!column.sortable) return undefined;\n const cur = currentSort.value;\n if (cur?.key !== column.key || cur.direction === 'none') return 'none';\n return cur.direction === 'asc' ? 'ascending' : 'descending';\n}\n\nfunction handleHeaderKeydown(event: KeyboardEvent, column: TreeTableColumn) {\n if (column.sortable && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n handleSort(column);\n }\n}\n</script>\n\n<template>\n <div class=\"tree-table-wrapper\">\n <table\n :class=\"classes\"\n role=\"grid\"\n >\n <thead class=\"tree-table__head\">\n <tr class=\"tree-table__row\">\n <th\n v-for=\"column in columns\"\n :key=\"column.key\"\n class=\"tree-table__header\"\n :class=\"[\n column.sortable ? 'tree-table__header--sortable' : '',\n column.align ? `tree-table__header--${column.align}` : '',\n ]\"\n :style=\"column.width ? { width: column.width } : undefined\"\n :aria-sort=\"sortAriaSort(column)\"\n :tabindex=\"column.sortable ? 0 : undefined\"\n scope=\"col\"\n @click=\"handleSort(column)\"\n @keydown=\"handleHeaderKeydown($event, column)\"\n >\n <slot\n :name=\"`header-${column.key}`\"\n :column=\"column\"\n >\n <span class=\"tree-table__header-content\">\n {{ column.label }}\n <span\n v-if=\"column.sortable\"\n class=\"tree-table__sort-icon\"\n aria-hidden=\"true\"\n >\n <svg\n v-if=\"currentSort?.key === column.key && currentSort.direction === 'asc'\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"m18 15-6-6-6 6\" />\n </svg>\n <svg\n v-else-if=\"currentSort?.key === column.key && currentSort.direction === 'desc'\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n <svg\n v-else\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n style=\"opacity: 0.4\"\n >\n <path d=\"m7 15 5 5 5-5\" />\n <path d=\"m7 9 5-5 5 5\" />\n </svg>\n </span>\n </span>\n </slot>\n </th>\n </tr>\n </thead>\n <tbody class=\"tree-table__body\">\n <tr\n v-if=\"sortedRows.length === 0\"\n class=\"tree-table__row tree-table__row--empty\"\n >\n <td\n :colspan=\"columns.length\"\n class=\"tree-table__cell tree-table__cell--empty\"\n >\n <slot name=\"empty\">\n No data available.\n </slot>\n </td>\n </tr>\n <tr\n v-for=\"(row, index) in sortedRows\"\n :key=\"index\"\n class=\"tree-table__row\"\n >\n <td\n v-for=\"column in columns\"\n :key=\"column.key\"\n class=\"tree-table__cell\"\n :class=\"column.align ? `tree-table__cell--${column.align}` : ''\"\n >\n <slot\n :name=\"`cell-${column.key}`\"\n :row=\"row\"\n :value=\"row[column.key]\"\n >\n {{ row[column.key] ?? '' }}\n </slot>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\nexport type TreeTagVariant = 'solid' | 'outline' | 'soft';\n\nconst props = withDefaults(\n defineProps<{\n variant?: TreeTagVariant;\n size?: TreeSize;\n removable?: boolean;\n disabled?: boolean;\n }>(),\n {\n variant: 'soft',\n size: 'md',\n removable: false,\n disabled: false,\n },\n);\n\nconst emit = defineEmits<{\n (e: 'remove'): void;\n}>();\n\nconst classes = computed(() => [\n 'tree-tag',\n `tree-tag--${props.variant}`,\n `tree-tag--${props.size}`,\n props.disabled ? 'is-disabled' : '',\n]);\n\nfunction handleRemove() {\n if (props.disabled) return;\n emit('remove');\n}\n</script>\n\n<template>\n <span :class=\"classes\">\n <span\n v-if=\"$slots.icon\"\n class=\"tree-tag__icon\"\n aria-hidden=\"true\"\n >\n <slot name=\"icon\" />\n </span>\n <span class=\"tree-tag__label\">\n <slot />\n </span>\n <button\n v-if=\"removable\"\n type=\"button\"\n class=\"tree-tag__remove\"\n :disabled=\"disabled\"\n aria-label=\"Remove\"\n @click=\"handleRemove\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n </span>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport type TreeTimelineTone = 'neutral' | 'brand' | 'success' | 'warning' | 'danger';\n\nexport interface TreeTimelineItem {\n id?: string | number;\n title: string;\n description?: string;\n meta?: string;\n timestamp?: string;\n datetime?: string;\n tone?: TreeTimelineTone;\n}\n\nconst props = withDefaults(\n defineProps<{\n items?: TreeTimelineItem[];\n size?: TreeSize;\n }>(),\n {\n items: () => [],\n size: 'md',\n },\n);\n\ndefineSlots<{\n marker?: (props: { item: TreeTimelineItem; index: number }) => unknown;\n item?: (props: { item: TreeTimelineItem; index: number }) => unknown;\n}>();\n\nconst attrs = useAttrs();\n\nconst classes = computed(() => [\n 'tree-timeline',\n `tree-timeline--${props.size}`,\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst normalizeTone = (tone?: TreeTimelineTone) => tone ?? 'neutral';\nconst itemKey = (item: TreeTimelineItem, index: number) => item.id ?? `${item.title}-${index}`;\n</script>\n\n<template>\n <ol\n v-bind=\"rootAttrs\"\n :class=\"classes\"\n :style=\"rootStyle\"\n >\n <li\n v-for=\"(item, index) in items\"\n :key=\"itemKey(item, index)\"\n class=\"tree-timeline__item\"\n >\n <div class=\"tree-timeline__rail\">\n <span\n v-if=\"index < items.length - 1\"\n class=\"tree-timeline__line\"\n aria-hidden=\"true\"\n />\n <div\n class=\"tree-timeline__marker\"\n :class=\"`tree-timeline__marker--${normalizeTone(item.tone)}`\"\n aria-hidden=\"true\"\n >\n <slot\n name=\"marker\"\n :item=\"item\"\n :index=\"index\"\n />\n </div>\n </div>\n\n <div class=\"tree-timeline__content\">\n <slot\n name=\"item\"\n :item=\"item\"\n :index=\"index\"\n >\n <div\n v-if=\"item.meta\"\n class=\"tree-timeline__meta\"\n >\n {{ item.meta }}\n </div>\n\n <div class=\"tree-timeline__header\">\n <p class=\"tree-timeline__title\">\n {{ item.title }}\n </p>\n <time\n v-if=\"item.timestamp\"\n class=\"tree-timeline__timestamp\"\n :datetime=\"item.datetime || undefined\"\n >\n {{ item.timestamp }}\n </time>\n </div>\n\n <p\n v-if=\"item.description\"\n class=\"tree-timeline__description\"\n >\n {{ item.description }}\n </p>\n </slot>\n </div>\n </li>\n </ol>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { TreeSize } from '../types/contracts';\nimport TreeButton from './TreeButton.vue';\nimport TreeBadge from './TreeBadge.vue';\n\nexport interface PricingFeature {\n text: string;\n included?: boolean;\n}\n\nconst props = withDefaults(\n defineProps<{\n title: string;\n description?: string;\n price: string | number;\n currency?: string;\n period?: string;\n features?: PricingFeature[];\n highlighted?: boolean;\n badge?: string;\n buttonText?: string;\n size?: TreeSize;\n disabled?: boolean;\n }>(),\n {\n description: undefined,\n currency: '$',\n period: undefined,\n features: () => [],\n highlighted: false,\n badge: undefined,\n buttonText: undefined,\n size: 'md',\n disabled: false,\n },\n);\n\nconst emit = defineEmits<{\n select: [];\n}>();\n\ndefineSlots<{\n header?: () => unknown;\n price?: () => unknown;\n features?: () => unknown;\n action?: () => unknown;\n badge?: () => unknown;\n}>();\n\nconst classes = computed(() => [\n 'tree-pricing-card',\n `tree-pricing-card--${props.size}`,\n {\n 'tree-pricing-card--highlighted': props.highlighted,\n },\n]);\n\nconst onSelect = () => {\n if (!props.disabled) {\n emit('select');\n }\n};\n</script>\n\n<template>\n <article :class=\"classes\">\n <div\n v-if=\"badge || $slots.badge\"\n class=\"tree-pricing-card__badge\"\n >\n <slot name=\"badge\">\n <TreeBadge\n variant=\"solid\"\n size=\"sm\"\n >\n {{ badge }}\n </TreeBadge>\n </slot>\n </div>\n\n <header class=\"tree-pricing-card__header\">\n <slot name=\"header\">\n <h3 class=\"tree-pricing-card__title\">\n {{ title }}\n </h3>\n <p\n v-if=\"description\"\n class=\"tree-pricing-card__description\"\n >\n {{ description }}\n </p>\n </slot>\n </header>\n\n <div class=\"tree-pricing-card__price\">\n <slot name=\"price\">\n <span class=\"tree-pricing-card__currency\">{{ currency }}</span>\n <span class=\"tree-pricing-card__amount\">{{ price }}</span>\n <span\n v-if=\"period\"\n class=\"tree-pricing-card__period\"\n >{{ period }}</span>\n </slot>\n </div>\n\n <div\n v-if=\"features.length > 0 || $slots.features\"\n class=\"tree-pricing-card__features\"\n >\n <slot name=\"features\">\n <ul\n class=\"tree-pricing-card__feature-list\"\n role=\"list\"\n >\n <li\n v-for=\"(feature, index) in features\"\n :key=\"index\"\n class=\"tree-pricing-card__feature-item\"\n :class=\"{ 'tree-pricing-card__feature-item--excluded': feature.included === false }\"\n >\n <span\n class=\"tree-pricing-card__feature-icon\"\n aria-hidden=\"true\"\n >\n {{ feature.included === false ? '✕' : '✓' }}\n </span>\n <span>{{ feature.text }}</span>\n </li>\n </ul>\n </slot>\n </div>\n\n <footer\n v-if=\"buttonText || $slots.action\"\n class=\"tree-pricing-card__action\"\n >\n <slot name=\"action\">\n <TreeButton\n :variant=\"highlighted ? 'solid' : 'outline'\"\n :size=\"size\"\n :disabled=\"disabled\"\n @click=\"onSelect\"\n >\n {{ buttonText }}\n </TreeButton>\n </slot>\n </footer>\n </article>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { TreeSize } from '../types/contracts';\nimport TreePricingCard from './TreePricingCard.vue';\nimport type { PricingFeature } from './TreePricingCard.vue';\n\nexport interface PricingPlan {\n title: string;\n description?: string;\n price: string | number;\n currency?: string;\n period?: string;\n features?: PricingFeature[];\n highlighted?: boolean;\n badge?: string;\n buttonText?: string;\n disabled?: boolean;\n}\n\nconst props = withDefaults(\n defineProps<{\n plans: PricingPlan[];\n size?: TreeSize;\n columns?: number;\n }>(),\n {\n size: 'md',\n columns: undefined,\n },\n);\n\nconst emit = defineEmits<{\n select: [plan: PricingPlan, index: number];\n}>();\n\nconst gridStyle = computed(() => {\n if (props.columns) {\n return { gridTemplateColumns: `repeat(${props.columns}, 1fr)` };\n }\n return { gridTemplateColumns: `repeat(${props.plans.length}, 1fr)` };\n});\n</script>\n\n<template>\n <div\n class=\"tree-pricing\"\n :style=\"gridStyle\"\n role=\"list\"\n >\n <div\n v-for=\"(plan, index) in plans\"\n :key=\"index\"\n role=\"listitem\"\n >\n <slot\n name=\"plan\"\n :plan=\"plan\"\n :index=\"index\"\n >\n <TreePricingCard\n v-bind=\"plan\"\n :size=\"size\"\n @select=\"emit('select', plan, index)\"\n />\n </slot>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs, nextTick } from 'vue';\nimport type { TreeSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string;\n size?: TreeSize;\n disabled?: boolean;\n placeholder?: string;\n uploadImage?: (file: File) => Promise<string>;\n }>(),\n {\n modelValue: '',\n size: 'md',\n disabled: false,\n placeholder: 'Write your markdown here...',\n uploadImage: undefined,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n 'image-upload': [file: File, url: string];\n 'image-upload-error': [file: File, error: Error];\n}>();\n\ndefineSlots<{\n toolbar?: () => unknown;\n}>();\n\nconst attrs = useAttrs();\nconst textareaRef = ref<HTMLTextAreaElement | null>(null);\nconst isUploading = ref(false);\n\nconst rootClasses = computed(() => [\n 'tree-md-editor',\n `tree-md-editor--${props.size}`,\n {\n 'is-disabled': props.disabled,\n 'is-uploading': isUploading.value,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst editorAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst stringValue = computed(() => `${props.modelValue ?? ''}`);\n\nconst onInput = (event: Event) => {\n emit('update:modelValue', (event.target as HTMLTextAreaElement).value);\n};\n\n/* ──────── Toolbar Actions ──────── */\n\nconst insertAtCursor = (before: string, after = '') => {\n const el = textareaRef.value;\n if (!el) return;\n\n const start = el.selectionStart;\n const end = el.selectionEnd;\n const text = stringValue.value;\n const selected = text.slice(start, end);\n\n const newText = text.slice(0, start) + before + selected + after + text.slice(end);\n emit('update:modelValue', newText);\n\n nextTick(() => {\n el.focus();\n const cursorPos = selected\n ? start + before.length + selected.length + after.length\n : start + before.length;\n el.setSelectionRange(cursorPos, cursorPos);\n });\n};\n\nconst insertHeading = (level: number) => {\n const prefix = '#'.repeat(level) + ' ';\n const el = textareaRef.value;\n if (!el) return;\n\n const start = el.selectionStart;\n const text = stringValue.value;\n\n // Find start of current line\n const lineStart = text.lastIndexOf('\\n', start - 1) + 1;\n const lineEnd = text.indexOf('\\n', start);\n const actualEnd = lineEnd === -1 ? text.length : lineEnd;\n const line = text.slice(lineStart, actualEnd);\n\n // Strip existing heading markers\n const stripped = line.replace(/^#{1,6}\\s*/, '');\n const newLine = prefix + stripped;\n\n const newText = text.slice(0, lineStart) + newLine + text.slice(actualEnd);\n emit('update:modelValue', newText);\n\n nextTick(() => {\n el.focus();\n el.setSelectionRange(lineStart + newLine.length, lineStart + newLine.length);\n });\n};\n\nconst insertBold = () => insertAtCursor('**', '**');\nconst insertItalic = () => insertAtCursor('_', '_');\nconst insertCode = () => insertAtCursor('`', '`');\nconst insertCodeBlock = () => insertAtCursor('\\n```\\n', '\\n```\\n');\nconst insertLink = () => insertAtCursor('[', '](url)');\nconst insertList = () => insertAtCursor('\\n- ');\nconst insertOrderedList = () => insertAtCursor('\\n1. ');\nconst insertQuote = () => insertAtCursor('\\n> ');\nconst insertHr = () => insertAtCursor('\\n---\\n');\n\n/* ──────── Markdown → HTML rendering ──────── */\n\nconst renderedHtml = computed(() => {\n return markdownToHtml(stringValue.value);\n});\n\nfunction escapeHtml(text: string): string {\n return text\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\nfunction markdownToHtml(md: string): string {\n if (!md) return '';\n\n const lines = md.split('\\n');\n const html: string[] = [];\n let inCodeBlock = false;\n let inList = false;\n let inOrderedList = false;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n\n // Code blocks\n if (line.trim().startsWith('```')) {\n if (inCodeBlock) {\n html.push('</code></pre>');\n inCodeBlock = false;\n } else {\n inCodeBlock = true;\n html.push('<pre class=\"tree-md-editor__code-block\"><code>');\n }\n continue;\n }\n\n if (inCodeBlock) {\n html.push(escapeHtml(line));\n html.push('\\n');\n continue;\n }\n\n // Close open lists if needed\n const isUnorderedListItem = /^[-*+]\\s/.test(line.trim());\n const isOrderedListItem = /^\\d+\\.\\s/.test(line.trim());\n\n if (inList && !isUnorderedListItem) {\n html.push('</ul>');\n inList = false;\n }\n if (inOrderedList && !isOrderedListItem) {\n html.push('</ol>');\n inOrderedList = false;\n }\n\n // Horizontal rule\n if (/^(-{3,}|_{3,}|\\*{3,})$/.test(line.trim())) {\n html.push('<hr class=\"tree-md-editor__hr\" />');\n continue;\n }\n\n // Headings\n const headingMatch = line.match(/^(#{1,6})\\s+(.+)$/);\n if (headingMatch) {\n const level = headingMatch[1].length;\n html.push(`<h${level} class=\"tree-md-editor__heading tree-md-editor__heading--${level}\">${inlineMarkdown(escapeHtml(headingMatch[2]))}</h${level}>`);\n continue;\n }\n\n // Blockquote\n if (line.trim().startsWith('> ')) {\n html.push(`<blockquote class=\"tree-md-editor__blockquote\">${inlineMarkdown(escapeHtml(line.trim().slice(2)))}</blockquote>`);\n continue;\n }\n\n // Unordered list\n if (isUnorderedListItem) {\n if (!inList) {\n html.push('<ul class=\"tree-md-editor__list\">');\n inList = true;\n }\n html.push(`<li>${inlineMarkdown(escapeHtml(line.trim().slice(2)))}</li>`);\n continue;\n }\n\n // Ordered list\n if (isOrderedListItem) {\n if (!inOrderedList) {\n html.push('<ol class=\"tree-md-editor__list tree-md-editor__list--ordered\">');\n inOrderedList = true;\n }\n const content = line.trim().replace(/^\\d+\\.\\s/, '');\n html.push(`<li>${inlineMarkdown(escapeHtml(content))}</li>`);\n continue;\n }\n\n // Empty line\n if (line.trim() === '') {\n html.push('<br />');\n continue;\n }\n\n // Paragraph\n html.push(`<p class=\"tree-md-editor__paragraph\">${inlineMarkdown(escapeHtml(line))}</p>`);\n }\n\n // Close any open blocks\n if (inCodeBlock) html.push('</code></pre>');\n if (inList) html.push('</ul>');\n if (inOrderedList) html.push('</ol>');\n\n return html.join('\\n');\n}\n\nfunction inlineMarkdown(text: string): string {\n // Images: \n text = text.replace(/!\\[([^\\]]*)\\]\\(([^)]+)\\)/g, '<img src=\"$2\" alt=\"$1\" class=\"tree-md-editor__image\" loading=\"lazy\" />');\n // Links: [text](url)\n text = text.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, '<a href=\"$2\" target=\"_blank\" rel=\"noopener noreferrer\">$1</a>');\n // Bold: **text**\n text = text.replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>');\n // Italic: _text_ or *text*\n text = text.replace(/_(.+?)_/g, '<em>$1</em>');\n text = text.replace(/(?<!\\*)\\*(?!\\*)(.+?)(?<!\\*)\\*(?!\\*)/g, '<em>$1</em>');\n // Inline code: `text`\n text = text.replace(/`(.+?)`/g, '<code class=\"tree-md-editor__inline-code\">$1</code>');\n // Strikethrough: ~~text~~\n text = text.replace(/~~(.+?)~~/g, '<del>$1</del>');\n return text;\n}\n\n/* ──────── Image paste / drop handling ──────── */\n\nconst handlePaste = async (event: ClipboardEvent) => {\n if (props.disabled) return;\n\n const items = event.clipboardData?.items;\n if (!items) return;\n\n for (const item of items) {\n if (item.type.startsWith('image/')) {\n event.preventDefault();\n const file = item.getAsFile();\n if (file) await processImageUpload(file);\n return;\n }\n }\n};\n\nconst handleDrop = async (event: DragEvent) => {\n if (props.disabled) return;\n\n const files = event.dataTransfer?.files;\n if (!files) return;\n\n for (const file of files) {\n if (file.type.startsWith('image/')) {\n event.preventDefault();\n await processImageUpload(file);\n }\n }\n};\n\nconst handleDragOver = (event: DragEvent) => {\n if (props.disabled) return;\n event.preventDefault();\n};\n\nconst processImageUpload = async (file: File) => {\n if (!props.uploadImage) {\n // Fallback: insert a placeholder with the file name\n insertAtCursor(`![${file.name}]()`);\n return;\n }\n\n // Insert uploading placeholder\n const placeholder = `![Uploading ${file.name}...]()`;\n insertAtCursor(placeholder);\n isUploading.value = true;\n\n try {\n const url = props.uploadImage(file);\n const resolvedUrl = url instanceof Promise ? await url : url;\n\n // Replace placeholder with actual URL\n const currentValue = stringValue.value;\n const newValue = currentValue.replace(placeholder, ``);\n emit('update:modelValue', newValue);\n emit('image-upload', file, resolvedUrl);\n } catch (err) {\n // Remove placeholder on error\n const currentValue = stringValue.value;\n const newValue = currentValue.replace(placeholder, '');\n emit('update:modelValue', newValue);\n emit('image-upload-error', file, err instanceof Error ? err : new Error(String(err)));\n } finally {\n isUploading.value = false;\n }\n};\n\n/* ──────── Keyboard shortcuts ──────── */\n\nconst handleKeydown = (event: KeyboardEvent) => {\n if (props.disabled) return;\n\n const mod = event.metaKey || event.ctrlKey;\n if (!mod) return;\n\n switch (event.key) {\n case 'b':\n event.preventDefault();\n insertBold();\n break;\n case 'i':\n event.preventDefault();\n insertItalic();\n break;\n case 'k':\n event.preventDefault();\n insertLink();\n break;\n case 'e':\n event.preventDefault();\n insertCode();\n break;\n }\n};\n\n</script>\n\n<template>\n <div\n v-bind=\"editorAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <!-- Toolbar -->\n <div\n class=\"tree-md-editor__toolbar\"\n role=\"toolbar\"\n aria-label=\"Markdown formatting\"\n >\n <div class=\"tree-md-editor__toolbar-group\">\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Heading 1 (H1)\"\n :disabled=\"disabled\"\n @click=\"insertHeading(1)\"\n >\n H1\n </button>\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Heading 2 (H2)\"\n :disabled=\"disabled\"\n @click=\"insertHeading(2)\"\n >\n H2\n </button>\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Heading 3 (H3)\"\n :disabled=\"disabled\"\n @click=\"insertHeading(3)\"\n >\n H3\n </button>\n </div>\n\n <div\n class=\"tree-md-editor__toolbar-divider\"\n role=\"separator\"\n />\n\n <div class=\"tree-md-editor__toolbar-group\">\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Bold (Ctrl+B)\"\n :disabled=\"disabled\"\n @click=\"insertBold\"\n >\n <strong>B</strong>\n </button>\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Italic (Ctrl+I)\"\n :disabled=\"disabled\"\n @click=\"insertItalic\"\n >\n <em>I</em>\n </button>\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Strikethrough\"\n :disabled=\"disabled\"\n @click=\"insertAtCursor('~~', '~~')\"\n >\n <del>S</del>\n </button>\n </div>\n\n <div\n class=\"tree-md-editor__toolbar-divider\"\n role=\"separator\"\n />\n\n <div class=\"tree-md-editor__toolbar-group\">\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Inline code (Ctrl+E)\"\n :disabled=\"disabled\"\n @click=\"insertCode\"\n >\n </>\n </button>\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Code block\"\n :disabled=\"disabled\"\n @click=\"insertCodeBlock\"\n >\n { }\n </button>\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Link (Ctrl+K)\"\n :disabled=\"disabled\"\n @click=\"insertLink\"\n >\n 🔗\n </button>\n </div>\n\n <div\n class=\"tree-md-editor__toolbar-divider\"\n role=\"separator\"\n />\n\n <div class=\"tree-md-editor__toolbar-group\">\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Unordered list\"\n :disabled=\"disabled\"\n @click=\"insertList\"\n >\n • List\n </button>\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Ordered list\"\n :disabled=\"disabled\"\n @click=\"insertOrderedList\"\n >\n 1. List\n </button>\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Blockquote\"\n :disabled=\"disabled\"\n @click=\"insertQuote\"\n >\n >\n </button>\n <button\n type=\"button\"\n class=\"tree-md-editor__toolbar-btn\"\n title=\"Horizontal rule\"\n :disabled=\"disabled\"\n @click=\"insertHr\"\n >\n ―\n </button>\n </div>\n\n <slot name=\"toolbar\" />\n </div>\n\n <!-- Editor body -->\n <div class=\"tree-md-editor__body\">\n <!-- Write pane -->\n <div\n class=\"tree-md-editor__pane tree-md-editor__pane--write\"\n >\n <textarea\n ref=\"textareaRef\"\n class=\"tree-md-editor__textarea\"\n :value=\"stringValue\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :aria-label=\"placeholder\"\n @input=\"onInput\"\n @paste=\"handlePaste\"\n @drop=\"handleDrop\"\n @dragover=\"handleDragOver\"\n @keydown=\"handleKeydown\"\n />\n </div>\n\n <!-- Preview pane -->\n <div\n class=\"tree-md-editor__pane tree-md-editor__pane--preview\"\n aria-label=\"Markdown preview\"\n >\n <!-- eslint-disable vue/no-v-html -->\n <div\n class=\"tree-md-editor__preview\"\n v-html=\"renderedHtml\"\n />\n <!-- eslint-enable vue/no-v-html -->\n </div>\n </div>\n\n <!-- Upload indicator -->\n <div\n v-if=\"isUploading\"\n class=\"tree-md-editor__upload-bar\"\n role=\"status\"\n aria-live=\"polite\"\n >\n Uploading image…\n </div>\n </div>\n</template>\n","import type { App, Plugin } from 'vue';\nimport {\n TAccordion,\n TAccordionItem,\n TAlert,\n TBadge,\n TBreadcrumb,\n TBreadcrumbItem,\n TButton,\n TCard,\n TCheckbox,\n TCombobox,\n TConfirmDialog,\n TContainer,\n TContextMenu,\n TDatePicker,\n TDateTimePicker,\n TDrawer,\n TDropdown,\n TEmptyState,\n TFileUpload,\n TFormField,\n TGrid,\n TAppBar,\n TInput,\n TLink,\n TNavMenu,\n TNavbar,\n TMultiSelect,\n TModal,\n TNumberInput,\n TPagination,\n TPopover,\n TProgress,\n TRadio,\n TRadioGroup,\n TSelectableList,\n TSelect,\n TSidebar,\n TSkeleton,\n TSpinner,\n TStack,\n TStat,\n TStepper,\n TSteps,\n TSwitch,\n TTextarea,\n TTabs,\n TTabList,\n TTab,\n TTabPanel,\n TToggleGroup,\n TToast,\n TToastProvider,\n TTooltip,\n TAvatar,\n TDivider,\n TTable,\n TTag,\n TTreeView,\n TTimeline,\n TPricing,\n TPricingCard,\n TMarkdownEditor,\n} from './components';\n\nconst components = {\n TAccordion,\n TAccordionItem,\n TAlert,\n TBadge,\n TBreadcrumb,\n TBreadcrumbItem,\n TButton,\n TCard,\n TCheckbox,\n TCombobox,\n TConfirmDialog,\n TContainer,\n TContextMenu,\n TDatePicker,\n TDateTimePicker,\n TDrawer,\n TDropdown,\n TEmptyState,\n TFileUpload,\n TFormField,\n TGrid,\n TAppBar,\n TInput,\n TLink,\n TNavMenu,\n TNavbar,\n TMultiSelect,\n TModal,\n TNumberInput,\n TRadio,\n TRadioGroup,\n TSelectableList,\n TSelect,\n TSidebar,\n TSkeleton,\n TSpinner,\n TStack,\n TStat,\n TStepper,\n TSteps,\n TSwitch,\n TTextarea,\n TTabs,\n TTabList,\n TTab,\n TTabPanel,\n TToggleGroup,\n TToast,\n TToastProvider,\n TPagination,\n TPopover,\n TProgress,\n TTooltip,\n TAvatar,\n TDivider,\n TTable,\n TTag,\n TTreeView,\n TTimeline,\n TPricing,\n TPricingCard,\n TMarkdownEditor,\n TreeAccordion: TAccordion,\n TreeAccordionItem: TAccordionItem,\n TreeAlert: TAlert,\n TreeBadge: TBadge,\n TreeBreadcrumb: TBreadcrumb,\n TreeBreadcrumbItem: TBreadcrumbItem,\n TreeButton: TButton,\n TreeCard: TCard,\n TreeCheckbox: TCheckbox,\n TreeCombobox: TCombobox,\n TreeConfirmDialog: TConfirmDialog,\n TreeContainer: TContainer,\n TreeContextMenu: TContextMenu,\n TreeDatePicker: TDatePicker,\n TreeDateTimePicker: TDateTimePicker,\n TreeDrawer: TDrawer,\n TreeDropdown: TDropdown,\n TreeEmptyState: TEmptyState,\n TreeFileUpload: TFileUpload,\n TreeGrid: TGrid,\n TreeNavbar: TNavbar,\n TreeAppBar: TNavbar,\n TreeLink: TLink,\n TreeNavMenu: TNavMenu,\n TreeMultiSelect: TMultiSelect,\n TreeRadio: TRadio,\n TreeRadioGroup: TRadioGroup,\n TreeSelect: TSelect,\n TreeSkeleton: TSkeleton,\n TreeSidebar: TSidebar,\n TreeInput: TInput,\n TreeNumberInput: TNumberInput,\n TreeSelectableList: TSelectableList,\n TreeStack: TStack,\n TreeTreeView: TTreeView,\n TreeSteps: TSteps,\n TreeStepper: TStepper,\n TreeToggleGroup: TToggleGroup,\n TreeTextarea: TTextarea,\n TreeModal: TModal,\n TreePagination: TPagination,\n TreePopover: TPopover,\n TreeSpinner: TSpinner,\n TreeFormField: TFormField,\n TreeProgress: TProgress,\n TreeStat: TStat,\n TreeSwitch: TSwitch,\n TreeTabs: TTabs,\n TreeTabList: TTabList,\n TreeTab: TTab,\n TreeTabPanel: TTabPanel,\n TreeToast: TToast,\n TreeToastProvider: TToastProvider,\n TreeTooltip: TTooltip,\n TreeAvatar: TAvatar,\n TreeDivider: TDivider,\n TreeTable: TTable,\n TreeTag: TTag,\n TreeTimeline: TTimeline,\n TreePricing: TPricing,\n TreePricingCard: TPricingCard,\n TreeMarkdownEditor: TMarkdownEditor,\n};\n\nexport const TreeUIPlugin: Plugin = {\n install(app: App) {\n Object.entries(components).forEach(([name, component]) => {\n app.component(name, component);\n });\n },\n};\n\nexport const install = TreeUIPlugin.install;\n","export const treeSizes = ['sm', 'md', 'lg'] as const;\nexport const treeVariants = ['solid', 'outline', 'ghost', 'soft', 'danger'] as const;\nexport const treeCardVariants = ['outline', 'soft', 'solid', 'inset'] as const;\nexport const treeTooltipSides = ['top', 'right', 'bottom', 'left'] as const;\nexport const treeDrawerSides = ['top', 'right', 'bottom', 'left'] as const;\n\nexport type TreeSize = (typeof treeSizes)[number];\nexport type TreeVariant = (typeof treeVariants)[number];\nexport type TreeCardVariant = (typeof treeCardVariants)[number];\nexport type TreeTooltipSide = (typeof treeTooltipSides)[number];\nexport type TreeDrawerSide = (typeof treeDrawerSides)[number];\n\n"],"names":["accordionInjectionKey","props","__props","emit","__emit","internalValue","computed","def","uncontrolledValue","reactive","isControlled","openValues","mv","isItemOpen","value","emitUpdate","values","arr","toggleItem","currentlyOpen","next","triggerMap","triggerOrder","registerTrigger","el","unregisterTrigger","idx","getEnabledTriggers","v","focusPrev","enabled","prev","focusNext","focusFirst","focusLast","provide","_openBlock","_createElementBlock","_hoisted_1","_renderSlot","_ctx","injected","inject","ctx","triggerId","useId","panelId","triggerRef","ref","isOpen","isDisabled","itemClasses","handleToggle","handleKeydown","event","onMounted","onBeforeUnmount","_createElementVNode","_unref","_normalizeClass","_hoisted_4","classes","handleDismiss","$slots","_hoisted_2","_normalizeStyle","instance","getCurrentInstance","routerLinkComponent","hasRouterLink","canRenderLink","isCurrent","tag","linkProps","_createBlock","_resolveDynamicComponent","_mergeProps","_toDisplayString","isNativeButton","onClick","_createVNode","TreeSpinner","_hoisted_3","hasHeader","_hoisted_5","attrs","useAttrs","inputRef","watch","val","rootClasses","rootStyle","inputAttrs","_class","_style","rest","onChange","_cache","useControllableOpen","controlledValue","defaultValue","nextValue","listboxId","createId","rootRef","activeIndex","query","normalize","getOptionId","selectedOption","option","selectedLabel","autocomplete","listboxLabel","listboxLabelledby","setValue","toRef","filteredOptions","normalizedQuery","field","enabledFilteredIndexes","indexes","index","activeOption","activeDescendant","syncQueryFromSelection","setInitialActiveIndex","fallback","selectedIndex","moveActive","direction","currentEnabledIndex","nextEnabledIndex","openListbox","commitPendingClear","closeListbox","restoreSelection","selectOption","onInput","onInputFocus","onInputClick","onInputKeydown","isEscapeKey","onOptionPointerEnter","onDocumentPointerDown","target","current","_Transition","_hoisted_7","_Fragment","_renderList","$event","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","CloseIcon","getTreeIcon","modalId","titleId","descriptionId","surfaceRef","previousFocusedElement","hasHeaderContent","slots","_useSlots","triggerAttrs","surfaceClasses","labelledBy","describedBy","openOverlayCount","previousBodyOverflow","lockBodyScroll","unlockBodyScroll","focusSurface","nextTick","openModal","closeModal","onTriggerClick","onOverlayClick","onSurfaceClick","onKeydown","focusable","getFocusableElements","first","last","activeElement","previousValue","_Teleport","_hoisted_6","treeIconDefaults","dialogClasses","hasBodyContent","closeDialog","syncOpen","handleCancel","handleConfirm","TreeModal","TreeButton","rootAttrs","menuId","itemRefs","focusedIndex","menuPosition","enabledItems","i","openMenu","x","y","focusItem","closeMenu","restoreFocus","selectItem","item","setItemRef","moveFocus","nextIndex","onContextMenu","onItemKeydown","isActivationKey","onDocumentContextMenu","_createTextVNode","CalendarIcon","ChevronLeftIcon","ChevronRightIcon","today","startOfDay","selectedDate","parseDateValue","minDate","maxDate","calendarId","captionId","dayRefs","viewMonth","startOfMonth","focusedDate","_name","hiddenInputName","triggerText","monthLabel","weekdayLabels","formatter","weekBase","startOfWeek","_","addDays","isDateDisabled","date","syncCalendarView","cells","startDate","weekIndex","dayIndex","key","toDateValue","isSameDay","canMovePrev","canMoveNext","focusCurrentDay","setDayRef","element","openCalendar","closeCalendar","toggleCalendar","moveCalendar","nextMonth","addMonths","nextDate","selectDate","normalizedDate","onTriggerKeydown","onDayKeydown","_hoisted_8","label","week","cell","_hoisted_13","dateOnlyPattern","dateTimePattern","cloneDate","formatPart","endOfDay","parseBoundaryValue","boundary","dateOnlyMatch","yearToken","monthToken","dayToken","year","month","day","hour","minute","second","millisecond","dateTimeMatch","hourToken","minuteToken","secondToken","toDateTimeValue","setDatePart","source","targetDate","setTimePart","resolveMinuteStep","step","minuteStep","selectedDateTime","minDateTime","maxDateTime","pickerId","clampToRange","createDefaultDraftDateTime","reference","stepMilliseconds","rounded","initialDateTime","draftDateTime","draftPreview","minuteValues","left","right","dayStart","dayEnd","isDateTimeDisabled","syncDraftState","dateTime","draftDate","isTimeOptionEnabled","candidate","hourOptions","minuteOptions","updateHour","nextHour","currentMinute","availableMinutes","nextMinute","updateMinute","commitDraft","clearSelection","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_20","_hoisted_21","_hoisted_23","drawerId","openDrawer","closeDrawer","toggleMenu","emptyStateId","hasTitle","hasDescription","isDragActive","isFocusedWithin","dragDepth","feedbackMessages","uploadId","feedbackId","filesId","isUnavailable","hasFiles","hasCustomBody","effectiveMaxFiles","ids","selectedFilesLabel","formatFileSize","size","units","unitIndex","fileKey","file","matchesAccept","tokens","token","fileName","fileType","buildRejectionMessage","reason","resetInputValue","openFileDialog","emitFiles","nextFiles","acceptedFiles","rejections","rejection","processFiles","incomingFiles","remainingSlots","removeFile","fileIndex","clearFiles","hasTransferFiles","dataTransfer","getClipboardFiles","clipboardData","onInputChange","onDropzoneKeydown","onFocusIn","onFocusOut","nextTarget","onPaste","clipboardFiles","onDocumentPaste","onDragEnter","onDragOver","onDragLeave","onDrop","message","ChevronDownIcon","CheckIcon","XIcon","selectedOptions","visibleTags","hiddenTagCount","enabledFilteredOptions","inputPlaceholder","isSelected","targetOption","focusInput","updateValues","nextValues","toggleOption","removeValue","getNextEnabledIndex","_withModifiers","treeSidebarInjectionKey","sidebar","selectedValue","resolvedCollapsed","itemTag","getInitialFocusedIndex","resolvedElement","firstIndex","lastIndex","previousIndex","getTabIndex","group","isChecked","isInvalid","resolvedSize","groupAttrs","optionRefs","o","enabledOptions","openDropdown","selectedIdx","focusOption","closeDropdown","toggleDropdown","opt","setOptionRef","onOptionKeydown","_index","hasSelection","isCollapsed","toggleCollapsed","ToggleIcon","toggleLabel","stringValue","displayValue","precision","fractionalPart","formatValue","normalizeValue","clamped","clamp","parseValue","normalized","parsed","currentNumericValue","canDecrement","canIncrement","commitValue","stepValue","baseValue","parsedValue","onBlur","nextDisplayValue","baseId","focus","resolvedIndex","treeTreeViewInjectionKey","hasChildren","isExpanded","isFocused","itemId","rowClasses","onRowClick","onToggleClick","child","_component_TreeTreeViewItem","internalExpanded","treeAttrs","selectedValues","expandedValues","updateSelection","updateExpanded","id","flattenNodes","nodes","level","parentId","records","node","visibleNodes","enabledNodes","record","getInitialFocusedId","selectedId","focusedId","registerItem","unregisterItem","setFocusedId","shouldFocus","getVisibleRecord","focusBoundary","position","focusAdjacent","currentIndex","toggleExpanded","toggleSelected","firstChild","TreeTreeViewItem","activeValue","resolveStatus","selectStep","items","buttonRefs","normalizedValues","setButtonRef","selectValue","textareaRef","textareaAttrs","adjustHeight","style","useSlots","loadingAttrs","hasValue","hasTrend","hasMeta","hasLabel","trendSymbol","TreeSkeleton","contentId","openTimer","clearOpenTimer","show","immediate","showOnFocus","showOnPointer","hide","tooltipClasses","hasError","fieldAttrs","currentPage","pages","total","siblings","rangeStart","rangeEnd","goToPage","page","contentRef","contentClasses","openPopover","closePopover","togglePopover","onContentKeydown","isIndeterminate","percentage","TABS_INJECTION_KEY","tabOrder","disabledTabs","setActiveValue","registerTab","unregisterTab","getTabValues","isTabDisabled","setTabDisabled","disabled","listRef","getAllTabElements","getEnabledTabElements","tabs","nextTab","isActive","tabId","iconMap","toastId","StatusIcon","handleClose","toasts","timers","add","options","timer","remove","t","clear","useToast","readonly","visibleToasts","_TransitionGroup","toast","TreeToast","computedInitials","w","onImgError","internalSort","currentSort","sortedRows","sort","a","b","aVal","bVal","cmp","handleSort","column","cur","state","sortAriaSort","handleHeaderKeydown","row","handleRemove","normalizeTone","tone","itemKey","onSelect","TreeBadge","feature","gridStyle","plan","TreePricingCard","isUploading","editorAttrs","insertAtCursor","before","after","start","end","text","selected","newText","cursorPos","insertHeading","prefix","lineStart","lineEnd","actualEnd","stripped","newLine","insertBold","insertItalic","insertCode","insertCodeBlock","insertLink","insertList","insertOrderedList","insertQuote","insertHr","renderedHtml","markdownToHtml","escapeHtml","md","lines","html","inCodeBlock","inList","inOrderedList","line","isUnorderedListItem","isOrderedListItem","headingMatch","inlineMarkdown","content","handlePaste","processImageUpload","handleDrop","files","handleDragOver","placeholder","url","resolvedUrl","newValue","err","_hoisted_19","_hoisted_22","_hoisted_24","components","TAccordion","TAccordionItem","TAlert","TBadge","TBreadcrumb","TBreadcrumbItem","TButton","TCard","TCheckbox","TCombobox","TConfirmDialog","TContainer","TContextMenu","TDatePicker","TDateTimePicker","TDrawer","TDropdown","TEmptyState","TFileUpload","TFormField","TGrid","TAppBar","TInput","TLink","TNavMenu","TNavbar","TMultiSelect","TModal","TNumberInput","TRadio","TRadioGroup","TSelectableList","TSelect","TSidebar","TSkeleton","TSpinner","TStack","TStat","TStepper","TSteps","TSwitch","TTextarea","TTabs","TTabList","TTab","TTabPanel","TToggleGroup","TToast","TToastProvider","TPagination","TPopover","TProgress","TTooltip","TAvatar","TDivider","TTable","TTag","TTreeView","TTimeline","TPricing","TPricingCard","TMarkdownEditor","TreeUIPlugin","app","name","component","install","treeSizes","treeVariants","treeCardVariants","treeTooltipSides","treeDrawerSides"],"mappings":"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"}
|