@threadlabs/looma 0.5.1 → 0.6.0-rc.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 (341) hide show
  1. package/README.md +1 -1
  2. package/components/shared/overlay.js +3 -0
  3. package/components/ui-button/ui-button.html +27 -14
  4. package/components/ui-callout/ui-callout.html +1 -1
  5. package/components/ui-checkbox/ui-checkbox.html +1 -1
  6. package/components/ui-cluster/ui-cluster.html +6 -6
  7. package/components/ui-combobox/ui-combobox.html +35 -27
  8. package/components/ui-container/ui-container.html +4 -4
  9. package/components/ui-context-menu/ui-context-menu.html +2 -2
  10. package/components/ui-dialog/ui-dialog.html +21 -8
  11. package/components/ui-disclosure/ui-disclosure.html +19 -4
  12. package/components/ui-editable/ui-editable.html +6 -6
  13. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.html +21 -21
  14. package/components/ui-editor-mention-menu/ui-editor-mention-menu.html +26 -26
  15. package/components/ui-editor-slash-menu/ui-editor-slash-menu.html +39 -39
  16. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +26 -22
  17. package/components/ui-editor-table-overlay/ui-editor-table-overlay.html +68 -52
  18. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +42 -38
  19. package/components/ui-editor-toolbar/ui-editor-toolbar.html +9 -9
  20. package/components/ui-floating-action-button/ui-floating-action-button.html +16 -22
  21. package/components/ui-form-field/ui-form-field.html +18 -7
  22. package/components/ui-grid/ui-grid.html +6 -6
  23. package/components/ui-icon/ui-icon.html +5 -1
  24. package/components/ui-icon-button/ui-icon-button.html +68 -34
  25. package/components/ui-input/ui-input.html +2 -2
  26. package/components/ui-menu/ui-menu.html +15 -4
  27. package/components/ui-menu-item/ui-menu-item.html +5 -5
  28. package/components/ui-popover/ui-popover.html +3 -3
  29. package/components/ui-popover/ui-popover.js +10 -2
  30. package/components/ui-reel/ui-reel.html +6 -6
  31. package/components/ui-search-result-row/ui-search-result-row.html +9 -9
  32. package/components/ui-search-shell/ui-search-shell.html +10 -3
  33. package/components/ui-search-shell/ui-search-shell.js +9 -0
  34. package/components/ui-select/ui-select.html +2 -2
  35. package/components/ui-sidebar/ui-sidebar.html +11 -11
  36. package/components/ui-stack/ui-stack.html +6 -6
  37. package/components/ui-switcher/ui-switcher.html +6 -6
  38. package/components/ui-tabs/ui-tabs.html +19 -5
  39. package/components/ui-textarea/ui-textarea.html +2 -2
  40. package/components/ui-toast-region/ui-toast-region.html +3 -3
  41. package/components/ui-tooltip/ui-tooltip.html +1 -1
  42. package/components/ui-top-bar/ui-top-bar.html +5 -5
  43. package/components/ui-tree/ui-tree.html +7 -0
  44. package/components/ui-tree-item/ui-tree-item.html +20 -7
  45. package/dist/index.d.ts +1 -1
  46. package/dist/index.js +2 -2
  47. package/package.json +2 -2
  48. package/styles/ui-affordance-scope.css +1 -1
  49. package/styles/ui-avatar-group.css +1 -1
  50. package/styles/ui-avatar.css +1 -1
  51. package/styles/ui-badge.css +1 -1
  52. package/styles/ui-button.css +25 -15
  53. package/styles/ui-callout.css +2 -2
  54. package/styles/ui-checkbox.css +2 -2
  55. package/styles/ui-cluster.css +7 -7
  56. package/styles/ui-combobox.css +24 -24
  57. package/styles/ui-container.css +5 -5
  58. package/styles/ui-context-menu.css +3 -3
  59. package/styles/ui-dialog.css +26 -9
  60. package/styles/ui-disclosure.css +23 -7
  61. package/styles/ui-editable.css +7 -7
  62. package/styles/ui-editor-insert-table-grid.css +21 -21
  63. package/styles/ui-editor-mention-menu.css +26 -26
  64. package/styles/ui-editor-slash-menu.css +40 -40
  65. package/styles/ui-editor-table-context-menu.css +21 -21
  66. package/styles/ui-editor-table-overlay.css +49 -49
  67. package/styles/ui-editor-table-toolbar.css +35 -35
  68. package/styles/ui-editor-toolbar.css +10 -10
  69. package/styles/ui-floating-action-button.css +17 -23
  70. package/styles/ui-form-field.css +24 -10
  71. package/styles/ui-grid.css +7 -7
  72. package/styles/ui-icon-button.css +74 -35
  73. package/styles/ui-icon.css +1 -1
  74. package/styles/ui-input.css +3 -3
  75. package/styles/ui-menu-item.css +6 -6
  76. package/styles/ui-menu.css +19 -7
  77. package/styles/ui-popover.css +4 -4
  78. package/styles/ui-radio-group.css +1 -1
  79. package/styles/ui-radio.css +1 -1
  80. package/styles/ui-reel.css +7 -7
  81. package/styles/ui-search-result-row.css +10 -10
  82. package/styles/ui-search-shell.css +14 -5
  83. package/styles/ui-select.css +3 -3
  84. package/styles/ui-separator.css +1 -1
  85. package/styles/ui-sidebar.css +12 -12
  86. package/styles/ui-stack.css +7 -7
  87. package/styles/ui-switch.css +1 -1
  88. package/styles/ui-switcher.css +7 -7
  89. package/styles/ui-tabs.css +21 -7
  90. package/styles/ui-textarea.css +3 -3
  91. package/styles/ui-toast-region.css +3 -3
  92. package/styles/ui-tooltip.css +2 -2
  93. package/styles/ui-top-bar.css +6 -6
  94. package/styles/ui-tree-item.css +30 -9
  95. package/styles/ui-tree.css +8 -2
  96. package/theme-dark.css +42 -103
  97. package/theme-high-contrast.css +18 -22
  98. package/theme-light.css +15 -41
  99. package/tokens.css +149 -201
  100. package/vanilla/UiAffordanceScope.d.ts +1 -1
  101. package/vanilla/UiAffordanceScope.js +2 -2
  102. package/vanilla/UiAvatar.d.ts +1 -1
  103. package/vanilla/UiAvatar.js +2 -2
  104. package/vanilla/UiAvatarGroup.d.ts +1 -1
  105. package/vanilla/UiAvatarGroup.js +2 -2
  106. package/vanilla/UiBadge.d.ts +1 -1
  107. package/vanilla/UiBadge.js +2 -2
  108. package/vanilla/UiButton.d.ts +3 -1
  109. package/vanilla/UiButton.js +3 -3
  110. package/vanilla/UiCallout.d.ts +1 -1
  111. package/vanilla/UiCallout.js +2 -2
  112. package/vanilla/UiCheckbox.d.ts +1 -1
  113. package/vanilla/UiCheckbox.js +2 -2
  114. package/vanilla/UiCluster.d.ts +1 -1
  115. package/vanilla/UiCluster.js +2 -2
  116. package/vanilla/UiCombobox.d.ts +1 -1
  117. package/vanilla/UiCombobox.js +3 -3
  118. package/vanilla/UiContainer.d.ts +1 -1
  119. package/vanilla/UiContainer.js +2 -2
  120. package/vanilla/UiContextMenu.d.ts +1 -1
  121. package/vanilla/UiContextMenu.js +2 -2
  122. package/vanilla/UiDialog.d.ts +1 -1
  123. package/vanilla/UiDialog.js +2 -2
  124. package/vanilla/UiDisclosure.d.ts +2 -1
  125. package/vanilla/UiDisclosure.js +3 -3
  126. package/vanilla/UiEditable.d.ts +1 -1
  127. package/vanilla/UiEditable.js +2 -2
  128. package/vanilla/UiEditorInsertTableGrid.d.ts +1 -1
  129. package/vanilla/UiEditorInsertTableGrid.js +3 -3
  130. package/vanilla/UiEditorMentionMenu.d.ts +1 -1
  131. package/vanilla/UiEditorMentionMenu.js +3 -3
  132. package/vanilla/UiEditorSlashMenu.d.ts +1 -1
  133. package/vanilla/UiEditorSlashMenu.js +2 -2
  134. package/vanilla/UiEditorTableContextMenu.d.ts +1 -1
  135. package/vanilla/UiEditorTableContextMenu.js +3 -3
  136. package/vanilla/UiEditorTableOverlay.d.ts +1 -1
  137. package/vanilla/UiEditorTableOverlay.js +3 -3
  138. package/vanilla/UiEditorTableToolbar.d.ts +1 -1
  139. package/vanilla/UiEditorTableToolbar.js +3 -3
  140. package/vanilla/UiEditorToolbar.d.ts +1 -1
  141. package/vanilla/UiEditorToolbar.js +2 -2
  142. package/vanilla/UiFloatingActionButton.d.ts +1 -1
  143. package/vanilla/UiFloatingActionButton.js +2 -2
  144. package/vanilla/UiFormField.d.ts +1 -1
  145. package/vanilla/UiFormField.js +15 -6
  146. package/vanilla/UiGrid.d.ts +1 -1
  147. package/vanilla/UiGrid.js +2 -2
  148. package/vanilla/UiIcon.d.ts +1 -1
  149. package/vanilla/UiIcon.js +3 -3
  150. package/vanilla/UiIconButton.d.ts +1 -1
  151. package/vanilla/UiIconButton.js +2 -2
  152. package/vanilla/UiInput.d.ts +1 -1
  153. package/vanilla/UiInput.js +2 -2
  154. package/vanilla/UiMenu.d.ts +2 -1
  155. package/vanilla/UiMenu.js +3 -3
  156. package/vanilla/UiMenuItem.d.ts +1 -1
  157. package/vanilla/UiMenuItem.js +2 -2
  158. package/vanilla/UiPopover.d.ts +1 -1
  159. package/vanilla/UiPopover.js +2 -2
  160. package/vanilla/UiRadio.d.ts +1 -1
  161. package/vanilla/UiRadio.js +2 -2
  162. package/vanilla/UiRadioGroup.d.ts +1 -1
  163. package/vanilla/UiRadioGroup.js +2 -2
  164. package/vanilla/UiReel.d.ts +1 -1
  165. package/vanilla/UiReel.js +2 -2
  166. package/vanilla/UiSearchResultRow.d.ts +1 -1
  167. package/vanilla/UiSearchResultRow.js +2 -2
  168. package/vanilla/UiSearchShell.d.ts +1 -1
  169. package/vanilla/UiSearchShell.js +2 -2
  170. package/vanilla/UiSelect.d.ts +1 -1
  171. package/vanilla/UiSelect.js +2 -2
  172. package/vanilla/UiSeparator.d.ts +1 -1
  173. package/vanilla/UiSeparator.js +2 -2
  174. package/vanilla/UiSidebar.d.ts +1 -1
  175. package/vanilla/UiSidebar.js +2 -2
  176. package/vanilla/UiStack.d.ts +1 -1
  177. package/vanilla/UiStack.js +2 -2
  178. package/vanilla/UiSwitch.d.ts +1 -1
  179. package/vanilla/UiSwitch.js +2 -2
  180. package/vanilla/UiSwitcher.d.ts +1 -1
  181. package/vanilla/UiSwitcher.js +2 -2
  182. package/vanilla/UiTabs.d.ts +2 -1
  183. package/vanilla/UiTabs.js +3 -3
  184. package/vanilla/UiTextarea.d.ts +1 -1
  185. package/vanilla/UiTextarea.js +2 -2
  186. package/vanilla/UiToastRegion.d.ts +1 -1
  187. package/vanilla/UiToastRegion.js +3 -3
  188. package/vanilla/UiTooltip.d.ts +1 -1
  189. package/vanilla/UiTooltip.js +2 -2
  190. package/vanilla/UiTopBar.d.ts +1 -1
  191. package/vanilla/UiTopBar.js +1 -1
  192. package/vanilla/UiTree.d.ts +2 -1
  193. package/vanilla/UiTree.js +3 -3
  194. package/vanilla/UiTreeItem.d.ts +1 -1
  195. package/vanilla/UiTreeItem.js +2 -2
  196. package/vue/UiAffordanceScope.d.ts +2 -2
  197. package/vue/UiAffordanceScope.vue +92 -73
  198. package/vue/UiAvatar.d.ts +7 -7
  199. package/vue/UiAvatar.vue +145 -105
  200. package/vue/UiAvatarGroup.d.ts +4 -4
  201. package/vue/UiAvatarGroup.vue +134 -118
  202. package/vue/UiBadge.d.ts +4 -4
  203. package/vue/UiBadge.vue +113 -114
  204. package/vue/UiButton.d.ts +10 -6
  205. package/vue/UiButton.vue +295 -248
  206. package/vue/UiCallout.d.ts +2 -2
  207. package/vue/UiCallout.vue +154 -87
  208. package/vue/UiCheckbox.d.ts +14 -10
  209. package/vue/UiCheckbox.vue +228 -162
  210. package/vue/UiCluster.d.ts +2 -2
  211. package/vue/UiCluster.vue +53 -60
  212. package/vue/UiCombobox.d.ts +36 -32
  213. package/vue/UiCombobox.vue +1005 -416
  214. package/vue/UiContainer.d.ts +2 -2
  215. package/vue/UiContainer.vue +48 -51
  216. package/vue/UiContextMenu.d.ts +6 -4
  217. package/vue/UiContextMenu.vue +205 -116
  218. package/vue/UiDialog.d.ts +11 -9
  219. package/vue/UiDialog.vue +287 -212
  220. package/vue/UiDisclosure.d.ts +10 -6
  221. package/vue/UiDisclosure.vue +265 -159
  222. package/vue/UiEditable.d.ts +16 -12
  223. package/vue/UiEditable.vue +325 -205
  224. package/vue/UiEditorInsertTableGrid.d.ts +8 -8
  225. package/vue/UiEditorInsertTableGrid.vue +216 -157
  226. package/vue/UiEditorMentionMenu.d.ts +9 -9
  227. package/vue/UiEditorMentionMenu.vue +265 -222
  228. package/vue/UiEditorSlashMenu.d.ts +7 -7
  229. package/vue/UiEditorSlashMenu.vue +286 -240
  230. package/vue/UiEditorTableContextMenu.d.ts +5 -5
  231. package/vue/UiEditorTableContextMenu.vue +306 -193
  232. package/vue/UiEditorTableOverlay.d.ts +2 -2
  233. package/vue/UiEditorTableOverlay.vue +600 -369
  234. package/vue/UiEditorTableToolbar.d.ts +7 -7
  235. package/vue/UiEditorTableToolbar.vue +443 -268
  236. package/vue/UiEditorToolbar.d.ts +2 -2
  237. package/vue/UiEditorToolbar.vue +134 -121
  238. package/vue/UiFloatingActionButton.d.ts +6 -6
  239. package/vue/UiFloatingActionButton.vue +95 -99
  240. package/vue/UiFormField.d.ts +6 -6
  241. package/vue/UiFormField.vue +112 -80
  242. package/vue/UiGrid.d.ts +2 -2
  243. package/vue/UiGrid.vue +51 -57
  244. package/vue/UiIcon.d.ts +2 -2
  245. package/vue/UiIcon.vue +118 -89
  246. package/vue/UiIconButton.d.ts +11 -11
  247. package/vue/UiIconButton.vue +287 -217
  248. package/vue/UiInput.d.ts +9 -9
  249. package/vue/UiInput.vue +153 -127
  250. package/vue/UiMenu.d.ts +10 -6
  251. package/vue/UiMenu.vue +227 -143
  252. package/vue/UiMenuItem.d.ts +4 -4
  253. package/vue/UiMenuItem.vue +53 -46
  254. package/vue/UiPopover.d.ts +8 -6
  255. package/vue/UiPopover.vue +197 -137
  256. package/vue/UiRadio.d.ts +14 -10
  257. package/vue/UiRadio.vue +183 -117
  258. package/vue/UiRadioGroup.d.ts +14 -12
  259. package/vue/UiRadioGroup.vue +172 -111
  260. package/vue/UiReel.d.ts +3 -3
  261. package/vue/UiReel.vue +77 -77
  262. package/vue/UiSearchResultRow.d.ts +4 -4
  263. package/vue/UiSearchResultRow.vue +121 -115
  264. package/vue/UiSearchShell.d.ts +10 -8
  265. package/vue/UiSearchShell.vue +245 -176
  266. package/vue/UiSelect.d.ts +9 -9
  267. package/vue/UiSelect.vue +162 -134
  268. package/vue/UiSeparator.d.ts +2 -2
  269. package/vue/UiSeparator.vue +22 -27
  270. package/vue/UiSidebar.d.ts +20 -18
  271. package/vue/UiSidebar.vue +307 -224
  272. package/vue/UiStack.d.ts +3 -3
  273. package/vue/UiStack.vue +64 -70
  274. package/vue/UiSwitch.d.ts +12 -8
  275. package/vue/UiSwitch.vue +218 -150
  276. package/vue/UiSwitcher.d.ts +3 -3
  277. package/vue/UiSwitcher.vue +73 -75
  278. package/vue/UiTabs.d.ts +12 -8
  279. package/vue/UiTabs.vue +268 -210
  280. package/vue/UiTextarea.d.ts +11 -11
  281. package/vue/UiTextarea.vue +155 -128
  282. package/vue/UiToastRegion.d.ts +10 -8
  283. package/vue/UiToastRegion.vue +261 -198
  284. package/vue/UiTooltip.d.ts +14 -12
  285. package/vue/UiTooltip.vue +241 -177
  286. package/vue/UiTopBar.vue +51 -42
  287. package/vue/UiTree.d.ts +10 -6
  288. package/vue/UiTree.vue +180 -70
  289. package/vue/UiTreeItem.d.ts +24 -22
  290. package/vue/UiTreeItem.vue +464 -339
  291. package/vue/chunks/UiAffordanceScope.js +9 -16
  292. package/vue/chunks/UiAvatar.js +23 -29
  293. package/vue/chunks/UiAvatarGroup.js +16 -39
  294. package/vue/chunks/UiBadge.js +3 -12
  295. package/vue/chunks/UiButton.js +15 -18
  296. package/vue/chunks/UiCallout.js +8 -17
  297. package/vue/chunks/UiCheckbox.js +37 -40
  298. package/vue/chunks/UiCluster.js +3 -12
  299. package/vue/chunks/UiCombobox.js +224 -266
  300. package/vue/chunks/UiContainer.js +3 -12
  301. package/vue/chunks/UiContextMenu.js +39 -34
  302. package/vue/chunks/UiDialog.js +36 -39
  303. package/vue/chunks/UiDisclosure.js +44 -48
  304. package/vue/chunks/UiEditable.js +55 -57
  305. package/vue/chunks/UiEditorInsertTableGrid.js +55 -73
  306. package/vue/chunks/UiEditorMentionMenu.js +40 -81
  307. package/vue/chunks/UiEditorSlashMenu.js +28 -52
  308. package/vue/chunks/UiEditorTableContextMenu.js +32 -56
  309. package/vue/chunks/UiEditorTableOverlay.js +58 -82
  310. package/vue/chunks/UiEditorTableToolbar.js +61 -85
  311. package/vue/chunks/UiEditorToolbar.js +4 -13
  312. package/vue/chunks/UiFloatingActionButton.js +7 -21
  313. package/vue/chunks/UiFormField.js +15 -12
  314. package/vue/chunks/UiGrid.js +3 -12
  315. package/vue/chunks/UiIcon.js +20 -43
  316. package/vue/chunks/UiIconButton.js +16 -28
  317. package/vue/chunks/UiInput.js +20 -25
  318. package/vue/chunks/UiMenu.js +30 -33
  319. package/vue/chunks/UiMenuItem.js +4 -10
  320. package/vue/chunks/UiPopover.js +28 -29
  321. package/vue/chunks/UiRadio.js +36 -39
  322. package/vue/chunks/UiRadioGroup.js +30 -34
  323. package/vue/chunks/UiReel.js +6 -15
  324. package/vue/chunks/UiSearchResultRow.js +6 -19
  325. package/vue/chunks/UiSearchShell.js +25 -28
  326. package/vue/chunks/UiSelect.js +20 -23
  327. package/vue/chunks/UiSeparator.js +2 -8
  328. package/vue/chunks/UiSidebar.js +39 -44
  329. package/vue/chunks/UiStack.js +6 -15
  330. package/vue/chunks/UiSwitch.js +35 -38
  331. package/vue/chunks/UiSwitcher.js +6 -15
  332. package/vue/chunks/UiTabs.js +52 -85
  333. package/vue/chunks/UiTextarea.js +21 -26
  334. package/vue/chunks/UiToastRegion.js +38 -72
  335. package/vue/chunks/UiTooltip.js +34 -35
  336. package/vue/chunks/UiTopBar.js +1 -1
  337. package/vue/chunks/UiTree.js +27 -16
  338. package/vue/chunks/UiTreeItem.js +85 -102
  339. package/vue/components.css +4027 -3800
  340. package/vue/editor/LoomaEditor.d.ts +11 -0
  341. package/vue/editor/index.js +9 -0
package/vue/UiTree.vue CHANGED
@@ -1,117 +1,227 @@
1
- <!-- Generated by HTML Next 1.0.0-alpha.1 for Vue 3.5. Do not edit. -->
1
+ <!-- Generated by HTML Next 1.0.0-alpha.2 for Vue 3.5. Do not edit. -->
2
2
  <script setup lang="ts">
3
- import { computed, onBeforeUnmount, onMounted, ref, shallowRef, watchEffect } from "vue";
4
- import * as controllerModule from "../components/ui-tree/ui-tree.js";
3
+ import { computed, onBeforeUnmount, onMounted, ref, shallowRef, watchEffect } from 'vue'
4
+ import * as controllerModule from '../components/ui-tree/ui-tree.js'
5
5
 
6
- defineOptions({ inheritAttrs: false });
6
+ defineOptions({ inheritAttrs: false })
7
7
 
8
- const props = withDefaults(defineProps<{
9
- hoverExpandDelay?: number | null;
10
- label?: string | null;
11
- maxDepth?: number | null;
12
- }>(), {
13
- hoverExpandDelay: 700,
14
- label: "Tree",
15
- maxDepth: 0,
16
- });
8
+ const props = withDefaults(
9
+ defineProps<{
10
+ density?: 'comfortable' | 'compact'
11
+ hoverExpandDelay?: number
12
+ label?: string
13
+ maxDepth?: number
14
+ }>(),
15
+ {
16
+ density: 'comfortable',
17
+ hoverExpandDelay: 700,
18
+ label: 'Tree',
19
+ maxDepth: 0,
20
+ },
21
+ )
17
22
  const emit = defineEmits<{
18
- "reorder": [detail: { readonly sourceId: string; readonly targetId: string; readonly position: "before" | "inside" | "after"; readonly sourceType: string; readonly targetType: string; readonly sourceScope: string; readonly targetScope: string; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
19
- "reorder-rejected": [detail: { readonly sourceId: string; readonly targetId: string; readonly position: "before" | "inside" | "after"; readonly reason: "max-depth"; readonly maxDepth: number; readonly resultingDepth: number; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
20
- }>();
21
- const root = ref<HTMLElement | null>(null);
22
- const refs: Record<string, Element | undefined> = {};
23
+ 'update:maxDepth': [value: number]
24
+ reorder: [
25
+ detail: {
26
+ readonly sourceId: string
27
+ readonly targetId: string
28
+ readonly position: 'before' | 'inside' | 'after'
29
+ readonly sourceType: string
30
+ readonly targetType: string
31
+ readonly sourceScope: string
32
+ readonly targetScope: string
33
+ readonly trigger: 'keyboard' | 'pointer' | 'programmatic'
34
+ },
35
+ ]
36
+ 'reorder-rejected': [
37
+ detail: {
38
+ readonly sourceId: string
39
+ readonly targetId: string
40
+ readonly position: 'before' | 'inside' | 'after'
41
+ readonly reason: 'max-depth'
42
+ readonly maxDepth: number
43
+ readonly resultingDepth: number
44
+ readonly trigger: 'keyboard' | 'pointer' | 'programmatic'
45
+ },
46
+ ]
47
+ }>()
48
+
49
+ const root = ref<HTMLElement | null>(null)
50
+
51
+ /** The values the styles' :host-state() rules test. */
52
+ const hostState = computed(() =>
53
+ [
54
+ props.density && `density density=${props.density}`,
55
+ ].filter(Boolean).join(' ')
56
+ )
23
57
 
24
58
  /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
25
- const dispatch = (name: string, detail?: unknown): boolean => {
26
- const declared = {"reorder":{"bubbles":true,"composed":true,"cancelable":false},"reorder-rejected":{"bubbles":true,"composed":true,"cancelable":false}} as Record<string, EventInit | undefined>;
59
+ function dispatch(name: string, detail?: unknown): boolean {
60
+ const declared: Record<string, EventInit | undefined> = {
61
+ reorder: { bubbles: true, composed: true, cancelable: false },
62
+ 'reorder-rejected': { bubbles: true, composed: true, cancelable: false },
63
+ }
27
64
  const checks: Record<string, (detail: unknown) => boolean> = {
28
- "reorder": (detail: unknown) => (detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof (detail as Record<string, unknown>)["sourceId"] === "string" && typeof (detail as Record<string, unknown>)["targetId"] === "string" && ((detail as Record<string, unknown>)["position"] === "before" || (detail as Record<string, unknown>)["position"] === "inside" || (detail as Record<string, unknown>)["position"] === "after") && typeof (detail as Record<string, unknown>)["sourceType"] === "string" && typeof (detail as Record<string, unknown>)["targetType"] === "string" && typeof (detail as Record<string, unknown>)["sourceScope"] === "string" && typeof (detail as Record<string, unknown>)["targetScope"] === "string" && ((detail as Record<string, unknown>)["trigger"] === "keyboard" || (detail as Record<string, unknown>)["trigger"] === "pointer" || (detail as Record<string, unknown>)["trigger"] === "programmatic") && Object.keys(detail as object).every((key) => ["sourceId","targetId","position","sourceType","targetType","sourceScope","targetScope","trigger"].includes(key))),
29
- "reorder-rejected": (detail: unknown) => (detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof (detail as Record<string, unknown>)["sourceId"] === "string" && typeof (detail as Record<string, unknown>)["targetId"] === "string" && ((detail as Record<string, unknown>)["position"] === "before" || (detail as Record<string, unknown>)["position"] === "inside" || (detail as Record<string, unknown>)["position"] === "after") && (detail as Record<string, unknown>)["reason"] === "max-depth" && Number.isInteger((detail as Record<string, unknown>)["maxDepth"]) && Number.isInteger((detail as Record<string, unknown>)["resultingDepth"]) && ((detail as Record<string, unknown>)["trigger"] === "keyboard" || (detail as Record<string, unknown>)["trigger"] === "pointer" || (detail as Record<string, unknown>)["trigger"] === "programmatic") && Object.keys(detail as object).every((key) => ["sourceId","targetId","position","reason","maxDepth","resultingDepth","trigger"].includes(key))),
30
- };
65
+ reorder: (detail) =>
66
+ detail !== null && typeof detail === 'object' && !Array.isArray(detail)
67
+ && typeof (detail as Record<string, unknown>)['sourceId'] === 'string'
68
+ && typeof (detail as Record<string, unknown>)['targetId'] === 'string'
69
+ && ((detail as Record<string, unknown>)['position'] === 'before'
70
+ || (detail as Record<string, unknown>)['position'] === 'inside'
71
+ || (detail as Record<string, unknown>)['position'] === 'after')
72
+ && typeof (detail as Record<string, unknown>)['sourceType'] === 'string'
73
+ && typeof (detail as Record<string, unknown>)['targetType'] === 'string'
74
+ && typeof (detail as Record<string, unknown>)['sourceScope'] === 'string'
75
+ && typeof (detail as Record<string, unknown>)['targetScope'] === 'string'
76
+ && ((detail as Record<string, unknown>)['trigger'] === 'keyboard'
77
+ || (detail as Record<string, unknown>)['trigger'] === 'pointer'
78
+ || (detail as Record<string, unknown>)['trigger'] === 'programmatic')
79
+ && Object.keys(detail as object).every((key) =>
80
+ [
81
+ 'sourceId',
82
+ 'targetId',
83
+ 'position',
84
+ 'sourceType',
85
+ 'targetType',
86
+ 'sourceScope',
87
+ 'targetScope',
88
+ 'trigger',
89
+ ].includes(key)
90
+ ),
91
+ 'reorder-rejected': (detail) =>
92
+ detail !== null && typeof detail === 'object' && !Array.isArray(detail)
93
+ && typeof (detail as Record<string, unknown>)['sourceId'] === 'string'
94
+ && typeof (detail as Record<string, unknown>)['targetId'] === 'string'
95
+ && ((detail as Record<string, unknown>)['position'] === 'before'
96
+ || (detail as Record<string, unknown>)['position'] === 'inside'
97
+ || (detail as Record<string, unknown>)['position'] === 'after')
98
+ && (detail as Record<string, unknown>)['reason'] === 'max-depth'
99
+ && Number.isInteger((detail as Record<string, unknown>)['maxDepth'])
100
+ && Number.isInteger((detail as Record<string, unknown>)['resultingDepth'])
101
+ && ((detail as Record<string, unknown>)['trigger'] === 'keyboard'
102
+ || (detail as Record<string, unknown>)['trigger'] === 'pointer'
103
+ || (detail as Record<string, unknown>)['trigger'] === 'programmatic')
104
+ && Object.keys(detail as object).every((key) =>
105
+ ['sourceId', 'targetId', 'position', 'reason', 'maxDepth', 'resultingDepth', 'trigger']
106
+ .includes(key)
107
+ ),
108
+ }
31
109
  if (detail !== undefined && checks[name] !== undefined && !checks[name]!(detail)) {
32
- throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
110
+ throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`)
33
111
  }
34
- (emit as (name: string, detail: unknown) => void)(name, detail);
35
- return root.value?.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, ...declared[name], detail })) ?? true;
36
- };
112
+ const emitEvent = emit as (name: string, detail: unknown) => void
113
+ emitEvent(name, detail)
114
+ if (detail !== null && typeof detail === 'object' && 'maxDepth' in detail) {
115
+ emitEvent('update:maxDepth', (detail as Record<string, unknown>)['maxDepth'])
116
+ }
117
+ return root.value?.dispatchEvent(
118
+ new CustomEvent(name, { bubbles: true, composed: true, ...declared[name], detail }),
119
+ ) ?? true
120
+ }
37
121
 
38
122
  function read(name: string): unknown {
39
- return (props as Record<string, unknown>)[name];
123
+ return (props as Record<string, unknown>)[name]
40
124
  }
41
125
 
42
126
  function write(name: string, value: unknown): boolean {
43
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
127
+ throw new TypeError(`Only declared state is writable; \`${name}\` is not.`)
44
128
  }
45
129
 
46
- const stops: Array<() => void> = [];
130
+ const stops: Array<() => void> = []
47
131
  const host = {
48
- get element(): Element { return root.value as Element; },
132
+ get element(): Element {
133
+ return root.value as Element
134
+ },
49
135
  state: new Proxy({} as Record<string, unknown>, {
50
- get: (_target, name) => typeof name === "string" ? read(name) : undefined,
51
- set: (_target, name, value) => typeof name === "string" && write(name, value),
136
+ get: (_target, name) => typeof name === 'string' ? read(name) : undefined,
137
+ set: (_target, name, value) => typeof name === 'string' && write(name, value),
52
138
  }),
53
- refs: refs as Readonly<Record<string, Element>>,
139
+ refs: {} as Readonly<Record<string, Element>>,
54
140
  elements: new Proxy({} as Record<string, Element | RadioNodeList | undefined>, {
55
141
  get: (_target, name) => {
56
- if (typeof name !== "string" || root.value === null) return undefined;
57
- const form = root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form");
58
- return form?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined;
142
+ if (typeof name !== 'string' || root.value === null) return undefined
143
+ const form = root.value instanceof HTMLFormElement
144
+ ? root.value
145
+ : root.value.querySelector('form')
146
+ return form?.elements.namedItem(name)
147
+ ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined
59
148
  },
60
149
  }),
61
150
  signal<T>(initialValue: T) {
62
- const value = shallowRef(initialValue);
151
+ const value = shallowRef(initialValue)
63
152
  return {
64
153
  get: (): T => value.value,
65
- set: (next: T): void => { if (!Object.is(value.value, next)) value.value = next; },
66
- update: (next: (current: T) => T): void => { const updated = next(value.value); if (!Object.is(value.value, updated)) value.value = updated; },
67
- };
154
+ set: (next: T): void => {
155
+ if (!Object.is(value.value, next)) value.value = next
156
+ },
157
+ update: (next: (current: T) => T): void => {
158
+ const updated = next(value.value)
159
+ if (!Object.is(value.value, updated)) value.value = updated
160
+ },
161
+ }
68
162
  },
69
163
  computed<T>(compute: () => T) {
70
- const value = computed(compute);
71
- return { get: (): T => value.value };
164
+ const value = computed(compute)
165
+ return { get: (): T => value.value }
72
166
  },
73
167
  effect(run: () => void | (() => void)): () => void {
74
168
  const stop = watchEffect((onCleanup) => {
75
- const cleanup = run();
76
- if (typeof cleanup === "function") onCleanup(cleanup);
77
- }, { flush: "post" });
78
- stops.push(stop);
79
- return stop;
169
+ const cleanup = run()
170
+ if (typeof cleanup === 'function') onCleanup(cleanup)
171
+ }, { flush: 'post' })
172
+ stops.push(stop)
173
+ return stop
80
174
  },
81
175
  on(event: string, listener: EventListener): () => void {
82
- const element = root.value;
83
- element?.addEventListener(event, listener);
84
- const off = (): void => element?.removeEventListener(event, listener);
85
- stops.push(off);
86
- return off;
176
+ const element = root.value
177
+ element?.addEventListener(event, listener)
178
+ const off = (): void => element?.removeEventListener(event, listener)
179
+ stops.push(off)
180
+ return off
87
181
  },
88
182
  dispatch,
89
- };
183
+ }
90
184
 
91
- let cleanup: void | (() => void);
92
- let ready: Promise<void> | undefined;
185
+ let cleanup: void | (() => void)
186
+ let ready: Promise<void> | undefined
93
187
  onMounted(() => {
94
- ready = Promise.resolve(controllerModule.default(host as never)).then((result) => { cleanup = result; });
95
- });
188
+ ready = Promise.resolve(controllerModule.default(host as never)).then((result) => {
189
+ cleanup = result
190
+ })
191
+ })
96
192
  onBeforeUnmount(() => {
97
- for (const stop of stops.splice(0)) stop();
98
- if (typeof cleanup === "function") cleanup();
99
- });
193
+ for (const stop of stops.splice(0)) stop()
194
+ if (typeof cleanup === 'function') cleanup()
195
+ })
100
196
  </script>
101
197
 
102
198
  <template>
103
- <div data-component="ui-tree" role="tree" v-bind="$attrs" ref="root"><slot></slot></div>
199
+ <div
200
+ data-component="ui-tree"
201
+ role="tree"
202
+ v-bind="$attrs"
203
+ :data-ui-tree-state="hostState || undefined"
204
+ ref="root"
205
+ >
206
+ <slot />
207
+ </div>
104
208
  </template>
105
209
 
106
210
  <style scoped>
211
+ [data-component~="ui-tree"][data-ui-tree-state~="density=compact"] {
212
+ --ui-tree-item-min-block-size: var(--ui-control-size-sm);
213
+ --ui-tree-item-font-size: var(--ui-font-size-sm);
214
+ --ui-tree-item-label-padding-block: 0;
215
+ }
216
+
107
217
  [data-component~="ui-tree"] {
108
- display: block;
109
- min-inline-size: 0;
110
- padding-inline-start: var(--ui-tree-gutter, 0px);
111
- }
218
+ display: block;
219
+ min-inline-size: 0;
220
+ padding-inline-start: var(--ui-tree-gutter, 0px);
221
+ }
112
222
 
113
- /* A component that sets its display still honours the hidden attribute on its root. */
114
- [data-component~="ui-tree"][hidden] {
115
- display: none;
116
- }
223
+ /* A component that sets its display still honours the hidden attribute on its root. */
224
+ [data-component~="ui-tree"][hidden] {
225
+ display: none;
226
+ }
117
227
  </style>
@@ -1,16 +1,16 @@
1
1
  type __VLS_Props = {
2
- accepts?: string | null;
3
- container?: boolean | null;
4
- disabled?: boolean | null;
5
- dragType?: string | null;
6
- dropDepth?: number | null;
7
- dropScope?: string | null;
8
- expanded?: boolean | null;
9
- itemId?: string | null;
10
- label?: string | null;
11
- selected?: boolean | null;
12
- sortable?: boolean | null;
13
- subtreeDepth?: number | null;
2
+ accepts?: string;
3
+ container?: boolean;
4
+ disabled?: boolean;
5
+ dragType?: string;
6
+ dropDepth?: number;
7
+ dropScope?: string;
8
+ expanded?: boolean;
9
+ itemId?: string;
10
+ label?: string;
11
+ selected?: boolean;
12
+ sortable?: boolean;
13
+ subtreeDepth?: number;
14
14
  };
15
15
  declare var __VLS_1: {}, __VLS_3: {}, __VLS_5: {}, __VLS_7: {};
16
16
  type __VLS_Slots = {} & {
@@ -23,28 +23,30 @@ type __VLS_Slots = {} & {
23
23
  default?: (props: typeof __VLS_7) => any;
24
24
  };
25
25
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
26
+ "update:expanded": (value: boolean) => any;
26
27
  expand: (detail: {
27
28
  readonly id: string;
28
29
  readonly expanded: boolean;
29
30
  readonly trigger: "keyboard" | "pointer" | "programmatic";
30
31
  }) => any;
31
32
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
33
+ "onUpdate:expanded"?: ((value: boolean) => any) | undefined;
32
34
  onExpand?: ((detail: {
33
35
  readonly id: string;
34
36
  readonly expanded: boolean;
35
37
  readonly trigger: "keyboard" | "pointer" | "programmatic";
36
38
  }) => any) | undefined;
37
39
  }>, {
38
- label: string | null;
39
- disabled: boolean | null;
40
- selected: boolean | null;
41
- expanded: boolean | null;
42
- accepts: string | null;
43
- container: boolean | null;
44
- dragType: string | null;
45
- dropScope: string | null;
46
- itemId: string | null;
47
- sortable: boolean | null;
40
+ label: string;
41
+ disabled: boolean;
42
+ selected: boolean;
43
+ expanded: boolean;
44
+ accepts: string;
45
+ container: boolean;
46
+ dragType: string;
47
+ dropScope: string;
48
+ itemId: string;
49
+ sortable: boolean;
48
50
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
49
51
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
50
52
  declare const _default: typeof __VLS_export;