@treeui/vue 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -3
- package/dist/components/TreeContainer.vue.d.ts +31 -0
- package/dist/components/TreeContainer.vue.d.ts.map +1 -0
- package/dist/components/TreeDateTimePicker.vue.d.ts +69 -0
- package/dist/components/TreeDateTimePicker.vue.d.ts.map +1 -0
- package/dist/components/TreeGrid.vue.d.ts +37 -0
- package/dist/components/TreeGrid.vue.d.ts.map +1 -0
- package/dist/components/TreeMultiSelect.vue.d.ts +93 -0
- package/dist/components/TreeMultiSelect.vue.d.ts.map +1 -0
- package/dist/components/TreeNavMenu.vue.d.ts +62 -0
- package/dist/components/TreeNavMenu.vue.d.ts.map +1 -0
- package/dist/components/TreeNavbar.vue.d.ts +35 -0
- package/dist/components/TreeNavbar.vue.d.ts.map +1 -0
- package/dist/components/TreeNumberInput.vue.d.ts +29 -0
- package/dist/components/TreeNumberInput.vue.d.ts.map +1 -0
- package/dist/components/TreePricingCard.vue.d.ts +1 -1
- package/dist/components/TreePricingCard.vue.d.ts.map +1 -1
- package/dist/components/TreeSelectableList.vue.d.ts +57 -0
- package/dist/components/TreeSelectableList.vue.d.ts.map +1 -0
- package/dist/components/TreeSidebar.vue.d.ts +78 -0
- package/dist/components/TreeSidebar.vue.d.ts.map +1 -0
- package/dist/components/TreeStack.vue.d.ts +37 -0
- package/dist/components/TreeStack.vue.d.ts.map +1 -0
- package/dist/components/TreeStat.vue.d.ts +47 -0
- package/dist/components/TreeStat.vue.d.ts.map +1 -0
- package/dist/components/TreeSteps.vue.d.ts +62 -0
- package/dist/components/TreeSteps.vue.d.ts.map +1 -0
- package/dist/components/TreeToggleGroup.vue.d.ts +55 -0
- package/dist/components/TreeToggleGroup.vue.d.ts.map +1 -0
- package/dist/components/TreeTreeView.vue.d.ts +33 -0
- package/dist/components/TreeTreeView.vue.d.ts.map +1 -0
- package/dist/components/TreeTreeViewItem.vue.d.ts +8 -0
- package/dist/components/TreeTreeViewItem.vue.d.ts.map +1 -0
- package/dist/components/index.d.ts +42 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/sidebar.d.ts +6 -0
- package/dist/components/sidebar.d.ts.map +1 -0
- package/dist/components/tree-view.d.ts +32 -0
- package/dist/components/tree-view.d.ts.map +1 -0
- package/dist/index.cjs +10 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +4705 -2660
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +2 -2
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","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/TreeContextMenu.vue","../src/components/TreeDatePicker.vue","../src/components/TreeDrawer.vue","../src/components/TreeDropdown.vue","../src/components/TreeEmptyState.vue","../src/components/TreeFileUpload.vue","../src/components/TreeRadio.vue","../src/components/TreeRadioGroup.vue","../src/components/TreeSelect.vue","../src/components/TreeInput.vue","../src/components/TreeTextarea.vue","../src/components/TreeSkeleton.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 props = withDefaults(\n defineProps<{\n variant?: TreeVariant;\n size?: TreeSize;\n }>(),\n {\n variant: 'soft',\n size: 'md',\n },\n);\n\nconst classes = computed(() => [\n 'tree-badge',\n `tree-badge--${props.variant}`,\n `tree-badge--${props.size}`,\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 } 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 * 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 current: false,\n },\n);\n\nconst isCurrent = computed(() => props.current || !props.href);\n</script>\n\n<template>\n <li class=\"tree-breadcrumb__item\">\n <a\n v-if=\"href && !isCurrent\"\n :href=\"href\"\n class=\"tree-breadcrumb__link\"\n >\n <slot />\n </a>\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 }>(),\n {\n as: 'section',\n variant: 'outline',\n size: 'md',\n },\n);\n\nconst classes = computed(() => [\n 'tree-card',\n `tree-card--${props.variant}`,\n `tree-card--${props.size}`,\n]);\n</script>\n\n<template>\n <component\n :is=\"as\"\n :class=\"classes\"\n >\n <header\n v-if=\"$slots.header\"\n class=\"tree-card__header\"\n >\n <slot name=\"header\" />\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 { 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 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 { 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;\n disabled?: boolean;\n}\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string;\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];\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, 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) => {\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\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=\"!modelValue ? 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 { 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 { 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 } 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 TContextMenu,\n TDatePicker,\n TDrawer,\n TDropdown,\n TEmptyState,\n TFileUpload,\n TFormField,\n TInput,\n TModal,\n TPagination,\n TPopover,\n TProgress,\n TRadio,\n TRadioGroup,\n TSelect,\n TSkeleton,\n TSpinner,\n TSwitch,\n TTextarea,\n TTabs,\n TTabList,\n TTab,\n TTabPanel,\n TToast,\n TToastProvider,\n TTooltip,\n TAvatar,\n TDivider,\n TTable,\n TTag,\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 TContextMenu,\n TDatePicker,\n TDrawer,\n TDropdown,\n TEmptyState,\n TFileUpload,\n TFormField,\n TInput,\n TModal,\n TRadio,\n TRadioGroup,\n TSelect,\n TSkeleton,\n TSpinner,\n TSwitch,\n TTextarea,\n TTabs,\n TTabList,\n TTab,\n TTabPanel,\n TToast,\n TToastProvider,\n TPagination,\n TPopover,\n TProgress,\n TTooltip,\n TAvatar,\n TDivider,\n TTable,\n TTag,\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 TreeContextMenu: TContextMenu,\n TreeDatePicker: TDatePicker,\n TreeDrawer: TDrawer,\n TreeDropdown: TDropdown,\n TreeEmptyState: TEmptyState,\n TreeFileUpload: TFileUpload,\n TreeRadio: TRadio,\n TreeRadioGroup: TRadioGroup,\n TreeSelect: TSelect,\n TreeSkeleton: TSkeleton,\n TreeInput: TInput,\n TreeTextarea: TTextarea,\n TreeModal: TModal,\n TreePagination: TPagination,\n TreePopover: TPopover,\n TreeSpinner: TSpinner,\n TreeFormField: TFormField,\n TreeProgress: TProgress,\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'] 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","isCurrent","_hoisted_3","_toDisplayString","isNativeButton","onClick","_createBlock","_resolveDynamicComponent","_createVNode","TreeSpinner","attrs","useAttrs","inputRef","watch","val","rootClasses","rootStyle","inputAttrs","_class","_style","rest","onChange","_mergeProps","_cache","_hoisted_5","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","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","drawerId","openDrawer","closeDrawer","toggleMenu","emptyStateId","hasTitle","hasDescription","rootAttrs","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","_hoisted_14","_hoisted_15","group","isChecked","isInvalid","resolvedSize","groupAttrs","optionRefs","opt","o","enabledOptions","openDropdown","selectedIdx","focusOption","closeDropdown","toggleDropdown","setOptionRef","onOptionKeydown","_index","stringValue","textareaRef","textareaAttrs","adjustHeight","style","contentId","openTimer","clearOpenTimer","show","immediate","showOnFocus","showOnPointer","hide","tooltipClasses","hasError","fieldAttrs","currentPage","pages","total","siblings","items","rangeStart","rangeEnd","goToPage","page","clamped","contentRef","contentClasses","openPopover","closePopover","togglePopover","onContentKeydown","isIndeterminate","percentage","TABS_INJECTION_KEY","baseId","tabOrder","disabledTabs","activeValue","setActiveValue","registerTab","unregisterTab","getTabValues","isTabDisabled","setTabDisabled","disabled","listRef","getAllTabElements","getEnabledTabElements","tabs","nextTab","isActive","tabId","XIcon","iconMap","toastId","StatusIcon","handleClose","toasts","timers","add","options","id","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","level","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_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_22","_hoisted_24","components","TAccordion","TAccordionItem","TAlert","TBadge","TBreadcrumb","TBreadcrumbItem","TButton","TCard","TCheckbox","TCombobox","TConfirmDialog","TContextMenu","TDatePicker","TDrawer","TDropdown","TEmptyState","TFileUpload","TFormField","TInput","TModal","TRadio","TRadioGroup","TSelect","TSkeleton","TSpinner","TSwitch","TTextarea","TTabs","TTabList","TTab","TTabPanel","TToast","TToastProvider","TPagination","TPopover","TProgress","TTooltip","TAvatar","TDivider","TTable","TTag","TTimeline","TPricing","TPricingCard","TMarkdownEditor","TreeUIPlugin","app","name","component","install","treeSizes","treeVariants","treeCardVariants","treeTooltipSides","treeDrawerSides"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","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/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 props = withDefaults(\n defineProps<{\n variant?: TreeVariant;\n size?: TreeSize;\n }>(),\n {\n variant: 'soft',\n size: 'md',\n },\n);\n\nconst classes = computed(() => [\n 'tree-badge',\n `tree-badge--${props.variant}`,\n `tree-badge--${props.size}`,\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 } 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 * 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 current: false,\n },\n);\n\nconst isCurrent = computed(() => props.current || !props.href);\n</script>\n\n<template>\n <li class=\"tree-breadcrumb__item\">\n <a\n v-if=\"href && !isCurrent\"\n :href=\"href\"\n class=\"tree-breadcrumb__link\"\n >\n <slot />\n </a>\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 }>(),\n {\n as: 'section',\n variant: 'outline',\n size: 'md',\n },\n);\n\nconst classes = computed(() => [\n 'tree-card',\n `tree-card--${props.variant}`,\n `tree-card--${props.size}`,\n]);\n</script>\n\n<template>\n <component\n :is=\"as\"\n :class=\"classes\"\n >\n <header\n v-if=\"$slots.header\"\n class=\"tree-card__header\"\n >\n <slot name=\"header\" />\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","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, inject, nextTick, ref, useAttrs, watch, 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 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, HTMLButtonElement>>(new Map());\n\nconst selectedValue = computed(() => props.modelValue ?? internalValue.value);\nconst resolvedCollapsed = computed(() => props.collapsed ?? sidebar?.collapsed.value ?? false);\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 HTMLButtonElement\n ? element\n : element && '$el' in element && element.$el instanceof HTMLButtonElement\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 <button\n :ref=\"(element) => setItemRef(element, item.value)\"\n type=\"button\"\n class=\"tree-nav-menu__item\"\n :class=\"{\n 'is-selected': isSelected(item.value),\n 'is-disabled': disabled || item.disabled,\n }\"\n :disabled=\"disabled || item.disabled\"\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 <span\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 </button>\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;\n disabled?: boolean;\n}\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string;\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];\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, 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) => {\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\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=\"!modelValue ? 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';\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 }>(),\n {\n label: '',\n value: '',\n trend: '',\n meta: '',\n tone: 'neutral',\n trendDirection: 'neutral',\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),\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 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=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\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 </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 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 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 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'] 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","isCurrent","_hoisted_3","_toDisplayString","isNativeButton","onClick","_createBlock","_resolveDynamicComponent","_createVNode","TreeSpinner","attrs","useAttrs","inputRef","watch","val","rootClasses","rootStyle","inputAttrs","_class","_style","rest","onChange","_mergeProps","_cache","_hoisted_5","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","getInitialFocusedIndex","resolvedElement","firstIndex","lastIndex","previousIndex","getTabIndex","group","isChecked","isInvalid","resolvedSize","groupAttrs","optionRefs","opt","o","enabledOptions","openDropdown","selectedIdx","focusOption","closeDropdown","toggleDropdown","setOptionRef","onOptionKeydown","_index","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","hasValue","hasTrend","hasMeta","hasLabel","trendSymbol","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","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","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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"}
|