@treeui/vue 0.1.2 → 0.2.1

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.
Files changed (103) hide show
  1. package/README.md +91 -0
  2. package/dist/components/TreeAccordion.vue.d.ts +36 -0
  3. package/dist/components/TreeAccordion.vue.d.ts.map +1 -0
  4. package/dist/components/TreeAccordionItem.vue.d.ts +31 -0
  5. package/dist/components/TreeAccordionItem.vue.d.ts.map +1 -0
  6. package/dist/components/TreeAlert.vue.d.ts +35 -0
  7. package/dist/components/TreeAlert.vue.d.ts.map +1 -0
  8. package/dist/components/TreeAvatar.vue.d.ts +33 -0
  9. package/dist/components/TreeAvatar.vue.d.ts.map +1 -0
  10. package/dist/components/TreeBadge.vue.d.ts +27 -0
  11. package/dist/components/TreeBadge.vue.d.ts.map +1 -0
  12. package/dist/components/TreeBreadcrumb.vue.d.ts +26 -0
  13. package/dist/components/TreeBreadcrumb.vue.d.ts.map +1 -0
  14. package/dist/components/TreeBreadcrumbItem.vue.d.ts +32 -0
  15. package/dist/components/TreeBreadcrumbItem.vue.d.ts.map +1 -0
  16. package/dist/components/TreeButton.vue.d.ts +39 -0
  17. package/dist/components/TreeButton.vue.d.ts.map +1 -0
  18. package/dist/components/TreeCard.vue.d.ts +30 -0
  19. package/dist/components/TreeCard.vue.d.ts.map +1 -0
  20. package/dist/components/TreeCheckbox.vue.d.ts +40 -0
  21. package/dist/components/TreeCheckbox.vue.d.ts.map +1 -0
  22. package/dist/components/TreeContextMenu.vue.d.ts +59 -0
  23. package/dist/components/TreeContextMenu.vue.d.ts.map +1 -0
  24. package/dist/components/TreeDatePicker.vue.d.ts +63 -0
  25. package/dist/components/TreeDatePicker.vue.d.ts.map +1 -0
  26. package/dist/components/TreeDivider.vue.d.ts +12 -0
  27. package/dist/components/TreeDivider.vue.d.ts.map +1 -0
  28. package/dist/components/TreeDrawer.vue.d.ts +68 -0
  29. package/dist/components/TreeDrawer.vue.d.ts.map +1 -0
  30. package/dist/components/TreeDropdown.vue.d.ts +67 -0
  31. package/dist/components/TreeDropdown.vue.d.ts.map +1 -0
  32. package/dist/components/TreeFormField.vue.d.ts +44 -0
  33. package/dist/components/TreeFormField.vue.d.ts.map +1 -0
  34. package/dist/components/TreeInput.vue.d.ts +41 -0
  35. package/dist/components/TreeInput.vue.d.ts.map +1 -0
  36. package/dist/components/TreeMarkdownEditor.vue.d.ts +46 -0
  37. package/dist/components/TreeMarkdownEditor.vue.d.ts.map +1 -0
  38. package/dist/components/TreeModal.vue.d.ts +66 -0
  39. package/dist/components/TreeModal.vue.d.ts.map +1 -0
  40. package/dist/components/TreePagination.vue.d.ts +47 -0
  41. package/dist/components/TreePagination.vue.d.ts.map +1 -0
  42. package/dist/components/TreePopover.vue.d.ts +56 -0
  43. package/dist/components/TreePopover.vue.d.ts.map +1 -0
  44. package/dist/components/TreePricing.vue.d.ts +47 -0
  45. package/dist/components/TreePricing.vue.d.ts.map +1 -0
  46. package/dist/components/TreePricingCard.vue.d.ts +60 -0
  47. package/dist/components/TreePricingCard.vue.d.ts.map +1 -0
  48. package/dist/components/TreeProgress.vue.d.ts +19 -0
  49. package/dist/components/TreeProgress.vue.d.ts.map +1 -0
  50. package/dist/components/TreeRadio.vue.d.ts +29 -0
  51. package/dist/components/TreeRadio.vue.d.ts.map +1 -0
  52. package/dist/components/TreeRadioGroup.vue.d.ts +36 -0
  53. package/dist/components/TreeRadioGroup.vue.d.ts.map +1 -0
  54. package/dist/components/TreeSelect.vue.d.ts +59 -0
  55. package/dist/components/TreeSelect.vue.d.ts.map +1 -0
  56. package/dist/components/TreeSkeleton.vue.d.ts +27 -0
  57. package/dist/components/TreeSkeleton.vue.d.ts.map +1 -0
  58. package/dist/components/TreeSpinner.vue.d.ts +11 -0
  59. package/dist/components/TreeSpinner.vue.d.ts.map +1 -0
  60. package/dist/components/TreeSwitch.vue.d.ts +34 -0
  61. package/dist/components/TreeSwitch.vue.d.ts.map +1 -0
  62. package/dist/components/TreeTab.vue.d.ts +24 -0
  63. package/dist/components/TreeTab.vue.d.ts.map +1 -0
  64. package/dist/components/TreeTabList.vue.d.ts +22 -0
  65. package/dist/components/TreeTabList.vue.d.ts.map +1 -0
  66. package/dist/components/TreeTabPanel.vue.d.ts +21 -0
  67. package/dist/components/TreeTabPanel.vue.d.ts.map +1 -0
  68. package/dist/components/TreeTable.vue.d.ts +60 -0
  69. package/dist/components/TreeTable.vue.d.ts.map +1 -0
  70. package/dist/components/TreeTabs.vue.d.ts +37 -0
  71. package/dist/components/TreeTabs.vue.d.ts.map +1 -0
  72. package/dist/components/TreeTag.vue.d.ts +36 -0
  73. package/dist/components/TreeTag.vue.d.ts.map +1 -0
  74. package/dist/components/TreeTextarea.vue.d.ts +29 -0
  75. package/dist/components/TreeTextarea.vue.d.ts.map +1 -0
  76. package/dist/components/TreeToast.vue.d.ts +11 -0
  77. package/dist/components/TreeToast.vue.d.ts.map +1 -0
  78. package/dist/components/TreeToastProvider.vue.d.ts +26 -0
  79. package/dist/components/TreeToastProvider.vue.d.ts.map +1 -0
  80. package/dist/components/TreeTooltip.vue.d.ts +43 -0
  81. package/dist/components/TreeTooltip.vue.d.ts.map +1 -0
  82. package/dist/components/accordion.d.ts +17 -0
  83. package/dist/components/accordion.d.ts.map +1 -0
  84. package/dist/components/index.d.ts +82 -0
  85. package/dist/components/index.d.ts.map +1 -0
  86. package/dist/components/tabs-context.d.ts +18 -0
  87. package/dist/components/tabs-context.d.ts.map +1 -0
  88. package/dist/composables/useControllableOpen.d.ts +6 -0
  89. package/dist/composables/useControllableOpen.d.ts.map +1 -0
  90. package/dist/composables/useToast.d.ts +38 -0
  91. package/dist/composables/useToast.d.ts.map +1 -0
  92. package/dist/index.cjs +12 -0
  93. package/dist/index.cjs.map +1 -0
  94. package/dist/index.d.ts +7 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +296 -292
  97. package/dist/index.js.map +1 -0
  98. package/dist/plugin.d.ts +4 -0
  99. package/dist/plugin.d.ts.map +1 -0
  100. package/dist/style.css +1 -1
  101. package/dist/types/contracts.d.ts +11 -0
  102. package/dist/types/contracts.d.ts.map +1 -0
  103. package/package.json +10 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../src/components/accordion.ts","../src/components/TreeAccordion.vue","../src/components/TreeAccordionItem.vue","../src/components/TreeAlert.vue","../src/components/TreeBadge.vue","../src/components/TreeBreadcrumb.vue","../src/components/TreeBreadcrumbItem.vue","../src/components/TreeSpinner.vue","../src/components/TreeButton.vue","../src/components/TreeCard.vue","../src/components/TreeCheckbox.vue","../src/composables/useControllableOpen.ts","../src/components/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 &hellip;\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, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;');\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: ![alt](url)\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, `![${file.name}](${resolvedUrl})`);\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 &lt;/&gt;\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 •&nbsp;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.&nbsp;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 &gt;\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","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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"}