@treeui/vue 0.2.1 → 0.3.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 +15 -3
- package/dist/components/TreeCombobox.vue.d.ts +81 -0
- package/dist/components/TreeCombobox.vue.d.ts.map +1 -0
- package/dist/components/TreeConfirmDialog.vue.d.ts +84 -0
- package/dist/components/TreeConfirmDialog.vue.d.ts.map +1 -0
- package/dist/components/TreeContextMenu.vue.d.ts +1 -1
- package/dist/components/TreeContextMenu.vue.d.ts.map +1 -1
- package/dist/components/TreeDrawer.vue.d.ts +1 -1
- package/dist/components/TreeDrawer.vue.d.ts.map +1 -1
- package/dist/components/TreeDropdown.vue.d.ts +1 -1
- package/dist/components/TreeDropdown.vue.d.ts.map +1 -1
- package/dist/components/TreeEmptyState.vue.d.ts +40 -0
- package/dist/components/TreeEmptyState.vue.d.ts.map +1 -0
- package/dist/components/TreeFileUpload.vue.d.ts +108 -0
- package/dist/components/TreeFileUpload.vue.d.ts.map +1 -0
- package/dist/components/TreeSelect.vue.d.ts +1 -1
- package/dist/components/TreeSelect.vue.d.ts.map +1 -1
- package/dist/components/TreeTimeline.vue.d.ts +52 -0
- package/dist/components/TreeTimeline.vue.d.ts.map +1 -0
- package/dist/components/TreeTooltip.vue.d.ts +1 -1
- package/dist/components/TreeTooltip.vue.d.ts.map +1 -1
- package/dist/components/index.d.ts +12 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/index.cjs +10 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2991 -2160
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +3 -3
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/components/accordion.ts","../src/components/TreeAccordion.vue","../src/components/TreeAccordionItem.vue","../src/components/TreeAlert.vue","../src/components/TreeBadge.vue","../src/components/TreeBreadcrumb.vue","../src/components/TreeBreadcrumbItem.vue","../src/components/TreeSpinner.vue","../src/components/TreeButton.vue","../src/components/TreeCard.vue","../src/components/TreeCheckbox.vue","../src/composables/useControllableOpen.ts","../src/components/TreeContextMenu.vue","../src/components/TreeDatePicker.vue","../src/components/TreeDrawer.vue","../src/components/TreeDropdown.vue","../src/components/TreeRadio.vue","../src/components/TreeRadioGroup.vue","../src/components/TreeSelect.vue","../src/components/TreeInput.vue","../src/components/TreeTextarea.vue","../src/components/TreeModal.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/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, 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 { 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 {\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 } 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 } 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 TContextMenu,\n TDatePicker,\n TDrawer,\n TDropdown,\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 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 TContextMenu,\n TDatePicker,\n TDrawer,\n TDropdown,\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 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 TreeContextMenu: TContextMenu,\n TreeDatePicker: TDatePicker,\n TreeDrawer: TDrawer,\n TreeDropdown: TDropdown,\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 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","menuId","createId","rootRef","itemRefs","focusedIndex","menuPosition","setValue","toRef","enabledItems","i","openMenu","x","y","nextTick","focusItem","closeMenu","restoreFocus","selectItem","item","index","setItemRef","moveFocus","direction","nextIndex","onContextMenu","onItemKeydown","isEscapeKey","isActivationKey","onDocumentPointerDown","target","menuEl","onDocumentContextMenu","_Teleport","_Transition","_Fragment","_renderList","$event","_createTextVNode","CalendarIcon","getTreeIcon","ChevronLeftIcon","ChevronRightIcon","today","startOfDay","selectedDate","parseDateValue","minDate","maxDate","calendarId","captionId","dayRefs","viewMonth","startOfMonth","focusedDate","triggerAttrs","_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_6","treeIconDefaults","_hoisted_8","_hoisted_11","label","week","cell","_hoisted_13","CloseIcon","drawerId","titleId","descriptionId","surfaceRef","previousFocusedElement","hasHeaderContent","slots","_useSlots","surfaceClasses","labelledBy","describedBy","openOverlayCount","previousBodyOverflow","lockBodyScroll","unlockBodyScroll","focusSurface","openDrawer","closeDrawer","onTriggerClick","onOverlayClick","onSurfaceClick","onKeydown","focusable","getFocusableElements","first","last","activeElement","previousValue","_hoisted_9","toggleMenu","group","isChecked","isInvalid","resolvedSize","groupAttrs","listboxId","optionRefs","selectedLabel","opt","o","enabledOptions","openDropdown","selectedIdx","focusOption","closeDropdown","toggleDropdown","selectOption","setOptionRef","onOptionKeydown","_index","stringValue","onInput","textareaRef","textareaAttrs","adjustHeight","modalId","openModal","closeModal","_hoisted_7","_hoisted_10","style","contentId","openTimer","clearOpenTimer","show","immediate","showOnFocus","showOnPointer","hide","tooltipClasses","hasError","fieldAttrs","currentPage","pages","total","current","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","onSelect","TreeBadge","feature","_hoisted_12","TreeButton","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","file","processImageUpload","handleDrop","files","handleDragOver","placeholder","url","resolvedUrl","newValue","err","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_22","_hoisted_24","components","TAccordion","TAccordionItem","TAlert","TBadge","TBreadcrumb","TBreadcrumbItem","TButton","TCard","TCheckbox","TContextMenu","TDatePicker","TDrawer","TDropdown","TFormField","TInput","TModal","TRadio","TRadioGroup","TSelect","TSkeleton","TSpinner","TSwitch","TTextarea","TTabs","TTabList","TTab","TTabPanel","TToast","TToastProvider","TPagination","TPopover","TProgress","TTooltip","TAvatar","TDivider","TTable","TTag","TPricing","TPricingCard","TMarkdownEditor","TreeUIPlugin","app","name","component","install","treeSizes","treeVariants","treeCardVariants","treeTooltipSides","treeDrawerSides"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/components/accordion.ts","../src/components/TreeAccordion.vue","../src/components/TreeAccordionItem.vue","../src/components/TreeAlert.vue","../src/components/TreeBadge.vue","../src/components/TreeBreadcrumb.vue","../src/components/TreeBreadcrumbItem.vue","../src/components/TreeSpinner.vue","../src/components/TreeButton.vue","../src/components/TreeCard.vue","../src/components/TreeCheckbox.vue","../src/composables/useControllableOpen.ts","../src/components/TreeCombobox.vue","../src/components/TreeModal.vue","../src/components/TreeConfirmDialog.vue","../src/components/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","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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"}
|