@threadlabs/looma 0.14.8 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (336) hide show
  1. package/components/shared/icons.js +5 -0
  2. package/components/shared/menu-navigation.js +49 -0
  3. package/components/shared/overlay.js +33 -60
  4. package/components/ui-avatar/ui-avatar.html +19 -2
  5. package/components/ui-avatar/ui-avatar.js +7 -1
  6. package/components/ui-avatar-group/ui-avatar-group.html +8 -3
  7. package/components/ui-avatar-group/ui-avatar-group.js +6 -2
  8. package/components/ui-badge/ui-badge.html +70 -4
  9. package/components/ui-button/ui-button.html +21 -5
  10. package/components/ui-button/ui-button.js +10 -0
  11. package/components/ui-callout/ui-callout.html +13 -5
  12. package/components/ui-checkbox/ui-checkbox.html +11 -0
  13. package/components/ui-combobox/ui-combobox.html +46 -10
  14. package/components/ui-combobox/ui-combobox.js +5 -5
  15. package/components/ui-context-menu/ui-context-menu.html +33 -5
  16. package/components/ui-context-menu/ui-context-menu.js +26 -17
  17. package/components/ui-dialog/ui-dialog.html +51 -8
  18. package/components/ui-dialog/ui-dialog.js +28 -7
  19. package/components/ui-disclosure/ui-disclosure.html +14 -5
  20. package/components/ui-disclosure/ui-disclosure.js +51 -4
  21. package/components/ui-editable/ui-editable.html +17 -3
  22. package/components/ui-editable/ui-editable.js +7 -0
  23. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.html +48 -14
  24. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.js +40 -6
  25. package/components/ui-editor-mention-menu/ui-editor-mention-menu.html +22 -9
  26. package/components/ui-editor-mention-menu/ui-editor-mention-menu.js +33 -11
  27. package/components/ui-editor-mention-menu-item/ui-editor-mention-menu-item.html +67 -0
  28. package/components/ui-editor-slash-menu/ui-editor-slash-menu.html +33 -30
  29. package/components/ui-editor-slash-menu/ui-editor-slash-menu.js +42 -8
  30. package/components/ui-editor-slash-menu-group/ui-editor-slash-menu-group.html +31 -0
  31. package/components/ui-editor-slash-menu-item/ui-editor-slash-menu-item.html +75 -0
  32. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +16 -5
  33. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.js +10 -2
  34. package/components/ui-editor-table-overlay/ui-editor-table-overlay.html +5 -5
  35. package/components/ui-editor-table-overlay/ui-editor-table-overlay.js +5 -2
  36. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +14 -4
  37. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.js +2 -2
  38. package/components/ui-editor-toolbar/ui-editor-toolbar.html +1 -1
  39. package/components/ui-editor-toolbar/ui-editor-toolbar.js +46 -0
  40. package/components/ui-floating-action-button/ui-floating-action-button.html +1 -1
  41. package/components/ui-form-field/ui-form-field.html +16 -3
  42. package/components/ui-form-field/ui-form-field.js +1 -1
  43. package/components/ui-grid/ui-grid.html +17 -2
  44. package/components/ui-icon/ui-icon.html +5 -0
  45. package/components/ui-icon-button/ui-icon-button.html +25 -6
  46. package/components/ui-icon-button/ui-icon-button.js +11 -1
  47. package/components/ui-input/ui-input.html +3 -3
  48. package/components/ui-input-group/ui-input-group.html +18 -4
  49. package/components/ui-listbox/ui-listbox.html +81 -0
  50. package/components/ui-listbox/ui-listbox.js +27 -0
  51. package/components/ui-menu/ui-menu.html +33 -5
  52. package/components/ui-menu/ui-menu.js +18 -12
  53. package/components/ui-menu-group/ui-menu-group.html +27 -0
  54. package/components/ui-menu-item/ui-menu-item.html +80 -8
  55. package/components/ui-menu-item/ui-menu-item.js +47 -0
  56. package/components/ui-popover/ui-popover.html +33 -5
  57. package/components/ui-popover/ui-popover.js +9 -1
  58. package/components/ui-radio-group/ui-radio-group.html +13 -1
  59. package/components/ui-search-shell/ui-search-shell.html +6 -6
  60. package/components/ui-search-shell/ui-search-shell.js +21 -5
  61. package/components/ui-select/ui-select.html +14 -4
  62. package/components/ui-switch/ui-switch.html +2 -2
  63. package/components/ui-switcher/ui-switcher.html +8 -1
  64. package/components/ui-switcher/ui-switcher.js +15 -0
  65. package/components/ui-tabs/ui-tabs.html +17 -12
  66. package/components/ui-tabs/ui-tabs.js +43 -7
  67. package/components/ui-textarea/ui-textarea.html +28 -5
  68. package/components/ui-toast/ui-toast.html +88 -0
  69. package/components/ui-toast/ui-toast.js +68 -0
  70. package/components/ui-toast-region/ui-toast-region.html +102 -19
  71. package/components/ui-toast-region/ui-toast-region.js +10 -18
  72. package/components/ui-tooltip/ui-tooltip.html +51 -7
  73. package/components/ui-tooltip/ui-tooltip.js +29 -3
  74. package/components/ui-tree/ui-tree.html +12 -0
  75. package/components/ui-tree/ui-tree.js +191 -12
  76. package/components/ui-tree-item/ui-tree-item.html +87 -8
  77. package/components/ui-tree-item/ui-tree-item.js +3 -1
  78. package/dist/index.js +38 -32
  79. package/editor/chunks/extensions.js +82 -2
  80. package/editor/extensions/table-commands.d.ts +8 -0
  81. package/editor/icons.d.ts +5 -0
  82. package/editor/index.js +7 -2
  83. package/editor/insert-table-grid.d.ts +1 -1
  84. package/editor/mention-menu.d.ts +2 -0
  85. package/editor/slash-menu.d.ts +3 -0
  86. package/editor/table-context-menu.d.ts +1 -1
  87. package/editor/table-overlay.d.ts +2 -2
  88. package/package.json +1 -1
  89. package/styles/ui-avatar-group.css +1 -2
  90. package/styles/ui-avatar.css +11 -1
  91. package/styles/ui-badge.css +73 -1
  92. package/styles/ui-button.css +9 -1
  93. package/styles/ui-callout.css +1 -1
  94. package/styles/ui-checkbox.css +9 -0
  95. package/styles/ui-combobox.css +38 -7
  96. package/styles/ui-context-menu.css +32 -4
  97. package/styles/ui-dialog.css +42 -5
  98. package/styles/ui-editor-insert-table-grid.css +48 -11
  99. package/styles/ui-editor-mention-menu-item.css +57 -0
  100. package/styles/ui-editor-mention-menu.css +11 -1
  101. package/styles/ui-editor-slash-menu-group.css +21 -0
  102. package/styles/ui-editor-slash-menu-item.css +62 -0
  103. package/styles/ui-editor-slash-menu.css +10 -21
  104. package/styles/ui-editor-table-context-menu.css +1 -1
  105. package/styles/ui-floating-action-button.css +1 -1
  106. package/styles/ui-form-field.css +14 -1
  107. package/styles/ui-grid.css +14 -1
  108. package/styles/ui-icon-button.css +17 -5
  109. package/styles/ui-input-group.css +18 -4
  110. package/styles/ui-input.css +3 -3
  111. package/styles/ui-listbox.css +69 -0
  112. package/styles/ui-menu-group.css +19 -0
  113. package/styles/ui-menu-item.css +48 -9
  114. package/styles/ui-menu.css +32 -4
  115. package/styles/ui-popover.css +28 -4
  116. package/styles/ui-radio-group.css +9 -0
  117. package/styles/ui-search-shell.css +5 -5
  118. package/styles/ui-select.css +14 -4
  119. package/styles/ui-switch.css +2 -2
  120. package/styles/ui-switcher.css +4 -0
  121. package/styles/ui-textarea.css +27 -4
  122. package/styles/ui-toast-region.css +88 -4
  123. package/styles/ui-toast.css +74 -0
  124. package/styles/ui-tooltip.css +46 -6
  125. package/styles/ui-tree-item.css +72 -4
  126. package/styles/ui-tree.css +8 -0
  127. package/tokens.css +3 -0
  128. package/vanilla/UiAvatar.d.ts +2 -0
  129. package/vanilla/UiAvatar.js +8 -1
  130. package/vanilla/UiAvatarGroup.d.ts +2 -0
  131. package/vanilla/UiAvatarGroup.js +1 -1
  132. package/vanilla/UiBadge.d.ts +1 -1
  133. package/vanilla/UiBadge.js +1 -1
  134. package/vanilla/UiButton.d.ts +1 -0
  135. package/vanilla/UiButton.js +22 -6
  136. package/vanilla/UiCallout.d.ts +1 -1
  137. package/vanilla/UiCallout.js +1 -1
  138. package/vanilla/UiCheckbox.d.ts +1 -0
  139. package/vanilla/UiCheckbox.js +12 -9
  140. package/vanilla/UiCombobox.d.ts +3 -0
  141. package/vanilla/UiCombobox.js +30 -15
  142. package/vanilla/UiContextMenu.d.ts +1 -1
  143. package/vanilla/UiContextMenu.js +1 -1
  144. package/vanilla/UiDialog.d.ts +5 -2
  145. package/vanilla/UiDialog.js +1 -1
  146. package/vanilla/UiDisclosure.d.ts +2 -0
  147. package/vanilla/UiDisclosure.js +32 -18
  148. package/vanilla/UiEditable.d.ts +5 -0
  149. package/vanilla/UiEditable.js +7 -3
  150. package/vanilla/UiEditorInsertTableGrid.js +1 -6
  151. package/vanilla/UiEditorMentionMenu.d.ts +4 -2
  152. package/vanilla/UiEditorMentionMenu.js +49 -31
  153. package/vanilla/UiEditorMentionMenuItem.d.ts +16 -0
  154. package/vanilla/UiEditorMentionMenuItem.js +56 -0
  155. package/vanilla/UiEditorSlashMenu.d.ts +4 -3
  156. package/vanilla/UiEditorSlashMenu.js +59 -46
  157. package/vanilla/UiEditorSlashMenuGroup.d.ts +14 -0
  158. package/vanilla/UiEditorSlashMenuGroup.js +48 -0
  159. package/vanilla/UiEditorSlashMenuItem.d.ts +18 -0
  160. package/vanilla/UiEditorSlashMenuItem.js +57 -0
  161. package/vanilla/UiEditorTableContextMenu.d.ts +5 -2
  162. package/vanilla/UiEditorTableContextMenu.js +1 -2
  163. package/vanilla/UiEditorTableOverlay.d.ts +1 -1
  164. package/vanilla/UiEditorTableOverlay.js +5 -5
  165. package/vanilla/UiEditorTableToolbar.d.ts +4 -2
  166. package/vanilla/UiEditorTableToolbar.js +1 -2
  167. package/vanilla/UiEditorToolbar.js +2 -0
  168. package/vanilla/UiGrid.d.ts +1 -0
  169. package/vanilla/UiGrid.js +8 -7
  170. package/vanilla/UiIcon.js +1 -1
  171. package/vanilla/UiIconButton.d.ts +1 -0
  172. package/vanilla/UiIconButton.js +11 -2
  173. package/vanilla/UiListbox.d.ts +20 -0
  174. package/vanilla/UiListbox.js +45 -0
  175. package/vanilla/UiMenu.d.ts +1 -1
  176. package/vanilla/UiMenu.js +1 -1
  177. package/vanilla/UiMenuGroup.d.ts +14 -0
  178. package/vanilla/UiMenuGroup.js +35 -0
  179. package/vanilla/UiMenuItem.d.ts +5 -1
  180. package/vanilla/UiMenuItem.js +91 -30
  181. package/vanilla/UiPopover.d.ts +1 -1
  182. package/vanilla/UiPopover.js +1 -1
  183. package/vanilla/UiRadioGroup.d.ts +1 -0
  184. package/vanilla/UiRadioGroup.js +6 -3
  185. package/vanilla/UiSwitcher.d.ts +1 -0
  186. package/vanilla/UiSwitcher.js +7 -9
  187. package/vanilla/UiTabs.d.ts +1 -0
  188. package/vanilla/UiTabs.js +9 -1
  189. package/vanilla/UiTextarea.d.ts +1 -0
  190. package/vanilla/UiTextarea.js +4 -1
  191. package/vanilla/UiToast.d.ts +16 -0
  192. package/vanilla/UiToast.js +53 -0
  193. package/vanilla/UiToastRegion.d.ts +1 -4
  194. package/vanilla/UiToastRegion.js +3 -11
  195. package/vanilla/UiTooltip.d.ts +1 -1
  196. package/vanilla/UiTooltip.js +1 -1
  197. package/vanilla/UiTree.d.ts +2 -0
  198. package/vanilla/UiTree.js +1 -1
  199. package/vanilla/UiTreeItem.d.ts +1 -0
  200. package/vanilla/UiTreeItem.js +45 -31
  201. package/vanilla/index.js +6 -0
  202. package/vue/UiAvatar.d.ts +4 -0
  203. package/vue/UiAvatar.vue +23 -3
  204. package/vue/UiAvatarGroup.d.ts +3 -0
  205. package/vue/UiAvatarGroup.vue +7 -4
  206. package/vue/UiBadge.d.ts +2 -2
  207. package/vue/UiBadge.vue +74 -2
  208. package/vue/UiButton.d.ts +5 -3
  209. package/vue/UiButton.vue +41 -7
  210. package/vue/UiCallout.d.ts +2 -2
  211. package/vue/UiCallout.vue +3 -2
  212. package/vue/UiCheckbox.d.ts +2 -0
  213. package/vue/UiCheckbox.vue +16 -0
  214. package/vue/UiCombobox.d.ts +11 -3
  215. package/vue/UiCombobox.vue +60 -11
  216. package/vue/UiContextMenu.d.ts +2 -0
  217. package/vue/UiContextMenu.vue +47 -6
  218. package/vue/UiDialog.d.ts +18 -4
  219. package/vue/UiDialog.vue +86 -11
  220. package/vue/UiDisclosure.d.ts +8 -2
  221. package/vue/UiDisclosure.vue +38 -14
  222. package/vue/UiEditable.d.ts +10 -0
  223. package/vue/UiEditable.vue +14 -2
  224. package/vue/UiEditorInsertTableGrid.vue +52 -15
  225. package/vue/UiEditorMentionMenu.d.ts +24 -2
  226. package/vue/UiEditorMentionMenu.vue +27 -11
  227. package/vue/UiEditorMentionMenuItem.d.ts +24 -0
  228. package/vue/UiEditorMentionMenuItem.js +2 -0
  229. package/vue/UiEditorMentionMenuItem.vue +88 -0
  230. package/vue/UiEditorSlashMenu.d.ts +24 -1
  231. package/vue/UiEditorSlashMenu.vue +33 -33
  232. package/vue/UiEditorSlashMenuGroup.d.ts +18 -0
  233. package/vue/UiEditorSlashMenuGroup.js +2 -0
  234. package/vue/UiEditorSlashMenuGroup.vue +43 -0
  235. package/vue/UiEditorSlashMenuItem.d.ts +26 -0
  236. package/vue/UiEditorSlashMenuItem.js +2 -0
  237. package/vue/UiEditorSlashMenuItem.vue +101 -0
  238. package/vue/UiEditorTableContextMenu.d.ts +9 -3
  239. package/vue/UiEditorTableContextMenu.vue +53 -3
  240. package/vue/UiEditorTableOverlay.d.ts +2 -2
  241. package/vue/UiEditorTableOverlay.vue +8 -6
  242. package/vue/UiEditorTableToolbar.d.ts +7 -3
  243. package/vue/UiEditorTableToolbar.vue +50 -2
  244. package/vue/UiEditorToolbar.vue +14 -1
  245. package/vue/UiFloatingActionButton.vue +1 -1
  246. package/vue/UiFormField.vue +28 -3
  247. package/vue/UiGrid.d.ts +1 -0
  248. package/vue/UiGrid.vue +26 -2
  249. package/vue/UiIcon.vue +16 -0
  250. package/vue/UiIconButton.d.ts +5 -3
  251. package/vue/UiIconButton.vue +40 -6
  252. package/vue/UiInput.vue +10 -3
  253. package/vue/UiInputGroup.vue +32 -11
  254. package/vue/UiListbox.d.ts +33 -0
  255. package/vue/UiListbox.js +2 -0
  256. package/vue/UiListbox.vue +131 -0
  257. package/vue/UiMenu.d.ts +2 -0
  258. package/vue/UiMenu.vue +43 -6
  259. package/vue/UiMenuGroup.d.ts +18 -0
  260. package/vue/UiMenuGroup.js +2 -0
  261. package/vue/UiMenuGroup.vue +39 -0
  262. package/vue/UiMenuItem.d.ts +34 -2
  263. package/vue/UiMenuItem.vue +145 -9
  264. package/vue/UiPopover.d.ts +2 -2
  265. package/vue/UiPopover.vue +44 -5
  266. package/vue/UiRadioGroup.d.ts +2 -0
  267. package/vue/UiRadioGroup.vue +17 -0
  268. package/vue/UiSearchShell.vue +12 -5
  269. package/vue/UiSelect.vue +18 -4
  270. package/vue/UiSwitch.vue +2 -2
  271. package/vue/UiSwitcher.d.ts +1 -0
  272. package/vue/UiSwitcher.vue +22 -1
  273. package/vue/UiTabs.d.ts +6 -2
  274. package/vue/UiTabs.vue +14 -12
  275. package/vue/UiTextarea.d.ts +2 -0
  276. package/vue/UiTextarea.vue +32 -4
  277. package/vue/UiToast.d.ts +34 -0
  278. package/vue/UiToast.js +2 -0
  279. package/vue/UiToast.vue +173 -0
  280. package/vue/UiToastRegion.d.ts +2 -18
  281. package/vue/UiToastRegion.vue +123 -48
  282. package/vue/UiTooltip.d.ts +2 -2
  283. package/vue/UiTooltip.vue +67 -12
  284. package/vue/UiTree.d.ts +10 -0
  285. package/vue/UiTree.vue +27 -0
  286. package/vue/UiTreeItem.d.ts +2 -0
  287. package/vue/UiTreeItem.vue +96 -4
  288. package/vue/chunks/UiAvatar.js +19 -5
  289. package/vue/chunks/UiAvatarGroup.js +10 -4
  290. package/vue/chunks/UiBadge.js +1 -1
  291. package/vue/chunks/UiButton.js +58 -11
  292. package/vue/chunks/UiCallout.js +2 -2
  293. package/vue/chunks/UiCheckbox.js +12 -2
  294. package/vue/chunks/UiCombobox.js +29 -13
  295. package/vue/chunks/UiContextMenu.js +6 -2
  296. package/vue/chunks/UiDialog.js +25 -8
  297. package/vue/chunks/UiDisclosure.js +36 -12
  298. package/vue/chunks/UiEditable.js +22 -8
  299. package/vue/chunks/UiEditorInsertTableGrid.js +11 -14
  300. package/vue/chunks/UiEditorMentionMenu.js +30 -19
  301. package/vue/chunks/UiEditorMentionMenuItem.js +36 -0
  302. package/vue/chunks/UiEditorSlashMenu.js +33 -35
  303. package/vue/chunks/UiEditorSlashMenuGroup.js +26 -0
  304. package/vue/chunks/UiEditorSlashMenuItem.js +51 -0
  305. package/vue/chunks/UiEditorTableContextMenu.js +39 -5
  306. package/vue/chunks/UiEditorTableOverlay.js +6 -6
  307. package/vue/chunks/UiEditorTableToolbar.js +37 -4
  308. package/vue/chunks/UiEditorToolbar.js +18 -4
  309. package/vue/chunks/UiFloatingActionButton.js +1 -1
  310. package/vue/chunks/UiFormField.js +13 -9
  311. package/vue/chunks/UiGrid.js +6 -2
  312. package/vue/chunks/UiIcon.js +40 -2
  313. package/vue/chunks/UiIconButton.js +35 -4
  314. package/vue/chunks/UiInput.js +1 -1
  315. package/vue/chunks/UiInputGroup.js +1 -1
  316. package/vue/chunks/UiListbox.js +70 -0
  317. package/vue/chunks/UiMenu.js +6 -2
  318. package/vue/chunks/UiMenuGroup.js +25 -0
  319. package/vue/chunks/UiMenuItem.js +128 -7
  320. package/vue/chunks/UiPopover.js +1 -1
  321. package/vue/chunks/UiRadioGroup.js +8 -2
  322. package/vue/chunks/UiSearchShell.js +1 -1
  323. package/vue/chunks/UiSelect.js +1 -1
  324. package/vue/chunks/UiSwitch.js +1 -1
  325. package/vue/chunks/UiSwitcher.js +20 -3
  326. package/vue/chunks/UiTabs.js +4 -3
  327. package/vue/chunks/UiTextarea.js +7 -2
  328. package/vue/chunks/UiToast.js +81 -0
  329. package/vue/chunks/UiToastRegion.js +25 -49
  330. package/vue/chunks/UiTooltip.js +3 -7
  331. package/vue/chunks/UiTree.js +8 -4
  332. package/vue/chunks/UiTreeItem.js +28 -10
  333. package/vue/components.css +1840 -851
  334. package/vue/editor/index.js +263 -2
  335. package/vue/index.d.ts +6 -0
  336. package/vue/index.js +9 -3
package/vue/UiTooltip.vue CHANGED
@@ -12,7 +12,19 @@ const props = withDefaults(
12
12
  hideDelay?: number
13
13
  inverse?: boolean
14
14
  open?: boolean
15
- placement?: string
15
+ placement?:
16
+ | 'top'
17
+ | 'top-start'
18
+ | 'top-end'
19
+ | 'bottom'
20
+ | 'bottom-start'
21
+ | 'bottom-end'
22
+ | 'left'
23
+ | 'left-start'
24
+ | 'left-end'
25
+ | 'right'
26
+ | 'right-start'
27
+ | 'right-end'
16
28
  showDelay?: number
17
29
  trigger?: 'hover' | 'click' | 'focus'
18
30
  }>(),
@@ -21,7 +33,7 @@ const props = withDefaults(
21
33
  hideDelay: 100,
22
34
  inverse: false,
23
35
  open: false,
24
- placement: 'top-start',
36
+ placement: 'top',
25
37
  showDelay: 500,
26
38
  trigger: 'hover',
27
39
  },
@@ -52,8 +64,6 @@ const internalOpen = ref(false)
52
64
  const hostState = computed(() =>
53
65
  [
54
66
  props.inverse && 'inverse',
55
- props.placement && 'placement',
56
- `placement=${encodeURIComponent(props.placement)}`,
57
67
  ].filter(Boolean).join(' ')
58
68
  )
59
69
 
@@ -117,6 +127,10 @@ useComponentHost(controllerModule.default, {
117
127
  syntax: "*";
118
128
  inherits: false;
119
129
  }
130
+ @property --ui-tooltip-offset {
131
+ syntax: "*";
132
+ inherits: false;
133
+ }
120
134
  @property --ui-tooltip-radius {
121
135
  syntax: "*";
122
136
  inherits: false;
@@ -168,19 +182,22 @@ useComponentHost(controllerModule.default, {
168
182
  }
169
183
 
170
184
  .surface {
171
- --_tooltip-line: var(--_ui-tooltip-border, var(--ui-border-default));
185
+ --_tooltip-line: var(--_ui-tooltip-border, var(--ui-overlay-border, var(--ui-border-default)));
172
186
  position: relative;
173
187
  box-sizing: border-box;
174
188
  max-inline-size: var(--_ui-tooltip-max-inline-size, 18rem);
175
189
  border: 1px solid var(--_tooltip-line);
176
- border-radius: var(--_ui-tooltip-radius, var(--ui-radius-sm));
177
- background: var(--_ui-tooltip-surface, var(--ui-surface-elevated));
190
+ border-radius: var(--_ui-tooltip-radius, var(--ui-overlay-radius, var(--ui-radius-sm)));
191
+ background: var(--_ui-tooltip-surface, var(--ui-overlay-surface, var(--ui-surface-elevated)));
178
192
  color: var(--_ui-tooltip-text, var(--ui-text-primary));
179
193
  padding: var(--ui-space-1) var(--ui-space-2);
180
194
  font-family: var(--ui-font-family-sans);
181
195
  font-size: var(--ui-font-size-sm);
182
196
  line-height: var(--ui-line-height-tight);
183
- box-shadow: var(--_ui-tooltip-shadow, var(--ui-elevation-tooltip, var(--ui-shadow-md)));
197
+ box-shadow: var(
198
+ --_ui-tooltip-shadow,
199
+ var(--ui-overlay-shadow, var(--ui-elevation-tooltip, var(--ui-shadow-md)))
200
+ );
184
201
  }
185
202
 
186
203
  [data-component~="ui-tooltip"][data-ui-tooltip-state~="inverse"] .surface {
@@ -208,8 +225,7 @@ useComponentHost(controllerModule.default, {
208
225
  transform: rotate(45deg);
209
226
  }
210
227
 
211
- :is([data-component~="ui-tooltip"][data-ui-tooltip-state~="placement=bottom"], [data-component~="ui-tooltip"][data-ui-tooltip-state~="placement=bottom-start"], [data-component~="ui-tooltip"][data-ui-tooltip-state~="placement=bottom-end"])
212
- .surface::after {
228
+ [data-component~="ui-tooltip"][data-ui-actual-placement="bottom"] .surface::after {
213
229
  inset-block-start: calc(var(--_ui-tooltip-arrow-size, 0.5rem) / -2 - 0.5px);
214
230
  inset-block-end: auto;
215
231
  border-inline-end-width: 0;
@@ -220,12 +236,51 @@ useComponentHost(controllerModule.default, {
220
236
  border-start-start-radius: 1px;
221
237
  }
222
238
 
223
- :is([data-component~="ui-tooltip"][data-ui-tooltip-state~="placement=top-end"], [data-component~="ui-tooltip"][data-ui-tooltip-state~="placement=bottom-end"])
224
- .surface::after {
239
+ [data-component~="ui-tooltip"][data-ui-actual-align="center"] .surface::after {
240
+ inset-inline-start: calc(50% - var(--_ui-tooltip-arrow-size, 0.5rem) / 2);
241
+ }
242
+
243
+ [data-component~="ui-tooltip"][data-ui-actual-align="end"] .surface::after {
225
244
  inset-inline-start: auto;
226
245
  inset-inline-end: var(--ui-space-3);
227
246
  }
228
247
 
248
+ [data-component~="ui-tooltip"][data-ui-actual-placement="left"] .surface::after,
249
+ [data-component~="ui-tooltip"][data-ui-actual-placement="right"] .surface::after {
250
+ inset-block-start: calc(50% - var(--_ui-tooltip-arrow-size, 0.5rem) / 2);
251
+ inset-block-end: auto;
252
+ border: 0 solid var(--_tooltip-line);
253
+ }
254
+
255
+ [data-component~="ui-tooltip"][data-ui-actual-placement="left"] .surface::after {
256
+ inset-inline-start: auto;
257
+ inset-inline-end: calc(var(--_ui-tooltip-arrow-size, 0.5rem) / -2 - 0.5px);
258
+ border-inline-end-width: 1px;
259
+ border-block-end-width: 1px;
260
+ }
261
+
262
+ [data-component~="ui-tooltip"][data-ui-actual-placement="right"] .surface::after {
263
+ inset-inline-start: calc(var(--_ui-tooltip-arrow-size, 0.5rem) / -2 - 0.5px);
264
+ inset-inline-end: auto;
265
+ border-inline-start-width: 1px;
266
+ border-block-start-width: 1px;
267
+ }
268
+
269
+ [data-component~="ui-tooltip"][data-ui-actual-placement="left"][data-ui-actual-align="start"]
270
+ .surface::after,
271
+ [data-component~="ui-tooltip"][data-ui-actual-placement="right"][data-ui-actual-align="start"]
272
+ .surface::after {
273
+ inset-block-start: var(--ui-space-3);
274
+ }
275
+
276
+ [data-component~="ui-tooltip"][data-ui-actual-placement="left"][data-ui-actual-align="end"]
277
+ .surface::after,
278
+ [data-component~="ui-tooltip"][data-ui-actual-placement="right"][data-ui-actual-align="end"]
279
+ .surface::after {
280
+ inset-block-start: auto;
281
+ inset-block-end: var(--ui-space-3);
282
+ }
283
+
229
284
  [data-component~="ui-tooltip"]:popover-open {
230
285
  opacity: 1;
231
286
  transform: translateY(0);
package/vue/UiTree.d.ts CHANGED
@@ -4,12 +4,17 @@ type __VLS_Props = {
4
4
  label?: string;
5
5
  marquee?: boolean;
6
6
  maxDepth?: number;
7
+ selection?: 'none' | 'single' | 'multiple';
7
8
  };
8
9
  declare var __VLS_1: {};
9
10
  type __VLS_Slots = {} & {
10
11
  default?: (props: typeof __VLS_1) => any;
11
12
  };
12
13
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
14
+ select: (detail: {
15
+ readonly ids: readonly (string)[];
16
+ readonly trigger: "keyboard" | "pointer" | "programmatic";
17
+ }) => any;
13
18
  "update:maxDepth": (value: number) => any;
14
19
  reorder: (detail: {
15
20
  readonly sourceId: string;
@@ -31,6 +36,10 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
31
36
  readonly trigger: "keyboard" | "pointer" | "programmatic";
32
37
  }) => any;
33
38
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
39
+ onSelect?: ((detail: {
40
+ readonly ids: readonly (string)[];
41
+ readonly trigger: "keyboard" | "pointer" | "programmatic";
42
+ }) => any) | undefined;
34
43
  "onUpdate:maxDepth"?: ((value: number) => any) | undefined;
35
44
  onReorder?: ((detail: {
36
45
  readonly sourceId: string;
@@ -54,6 +63,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
54
63
  }>, {
55
64
  label: string;
56
65
  marquee: boolean;
66
+ selection: "none" | "single" | "multiple";
57
67
  density: "comfortable" | "compact";
58
68
  hoverExpandDelay: number;
59
69
  maxDepth: number;
package/vue/UiTree.vue CHANGED
@@ -13,6 +13,7 @@ const props = withDefaults(
13
13
  label?: string
14
14
  marquee?: boolean
15
15
  maxDepth?: number
16
+ selection?: 'none' | 'single' | 'multiple'
16
17
  }>(),
17
18
  {
18
19
  density: 'comfortable',
@@ -20,6 +21,7 @@ const props = withDefaults(
20
21
  label: 'Tree',
21
22
  marquee: false,
22
23
  maxDepth: 0,
24
+ selection: 'none',
23
25
  },
24
26
  )
25
27
  const emit = defineEmits<{
@@ -47,6 +49,12 @@ const emit = defineEmits<{
47
49
  readonly trigger: 'keyboard' | 'pointer' | 'programmatic'
48
50
  },
49
51
  ]
52
+ select: [
53
+ detail: {
54
+ readonly ids: readonly (string)[]
55
+ readonly trigger: 'keyboard' | 'pointer' | 'programmatic'
56
+ },
57
+ ]
50
58
  }>()
51
59
 
52
60
  const root = ref<HTMLElement | null>(null)
@@ -102,10 +110,21 @@ const isReorderRejectedDetail = (detail: unknown): boolean =>
102
110
  ['sourceId', 'targetId', 'position', 'reason', 'maxDepth', 'resultingDepth', 'trigger']
103
111
  .includes(key)
104
112
  )
113
+ const isSelectDetail = (detail: unknown): boolean =>
114
+ detail !== null && typeof detail === 'object' && !Array.isArray(detail)
115
+ && (Array.isArray((detail as Record<string, unknown>)['ids'])
116
+ && ((detail as Record<string, unknown>)['ids'] as unknown[]).every((item: unknown) =>
117
+ typeof item === 'string'
118
+ ))
119
+ && ((detail as Record<string, unknown>)['trigger'] === 'keyboard'
120
+ || (detail as Record<string, unknown>)['trigger'] === 'pointer'
121
+ || (detail as Record<string, unknown>)['trigger'] === 'programmatic')
122
+ && Object.keys(detail as object).every((key) => ['ids', 'trigger'].includes(key))
105
123
  const dispatch = createDispatch(root, emit as (name: string, detail: unknown) => void, {
106
124
  checks: {
107
125
  reorder: isReorderDetail,
108
126
  'reorder-rejected': isReorderRejectedDetail,
127
+ select: isSelectDetail,
109
128
  },
110
129
  modeled: ['maxDepth'],
111
130
  })
@@ -171,6 +190,14 @@ useComponentHost(controllerModule.default, {
171
190
  padding-inline-start: var(--ui-tree-gutter, 0px);
172
191
  }
173
192
 
193
+ [data-component~="ui-tree"][data-move-mode]::after {
194
+ content: "Choose a destination row, or use Up and Down; Right nests inside a branch. Enter places it, Escape cancels.";
195
+ display: block;
196
+ padding: var(--ui-space-2);
197
+ color: var(--ui-text-secondary);
198
+ font-size: var(--ui-font-size-sm);
199
+ }
200
+
174
201
  /* A component that sets its display still honours the hidden attribute on its root. */
175
202
  [data-component~="ui-tree"][hidden] {
176
203
  display: none;
@@ -8,6 +8,7 @@ type __VLS_Props = {
8
8
  expanded?: boolean;
9
9
  itemId?: string;
10
10
  label?: string;
11
+ lazy?: boolean;
11
12
  marquee?: boolean;
12
13
  selected?: boolean;
13
14
  sortable?: boolean;
@@ -48,6 +49,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
48
49
  dragType: string;
49
50
  dropScope: string;
50
51
  itemId: string;
52
+ lazy: boolean;
51
53
  sortable: boolean;
52
54
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
53
55
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -17,6 +17,7 @@ const props = withDefaults(
17
17
  expanded?: boolean
18
18
  itemId?: string
19
19
  label?: string
20
+ lazy?: boolean
20
21
  marquee?: boolean
21
22
  selected?: boolean
22
23
  sortable?: boolean
@@ -31,6 +32,7 @@ const props = withDefaults(
31
32
  expanded: false,
32
33
  itemId: '',
33
34
  label: '',
35
+ lazy: false,
34
36
  marquee: false,
35
37
  selected: false,
36
38
  sortable: false,
@@ -158,6 +160,14 @@ useComponentHost(controllerModule.default, {
158
160
  >
159
161
  <span class="disclosure-icon" aria-hidden="true"></span>
160
162
  </button>
163
+ <label class="selection-hit"><input
164
+ class="selection-checkbox"
165
+ type="checkbox"
166
+ tabindex="-1"
167
+ :checked="selected"
168
+ :disabled="disabled"
169
+ :aria-label="`Select ${label}`"
170
+ ></label>
161
171
  <span class="leading" ref="leading"><slot name="leading" /></span>
162
172
  <span class="label" ref="label"><span class="label-text" ref="labelText"><slot name="label">{{
163
173
  label
@@ -289,6 +299,35 @@ useComponentHost(controllerModule.default, {
289
299
  display: none;
290
300
  }
291
301
 
302
+ .selection-hit {
303
+ display: none;
304
+ grid-column: 2;
305
+ grid-row: 1;
306
+ place-items: center;
307
+ inline-size: 1.25rem;
308
+ block-size: var(--_ui-tree-item-min-block-size, var(--_tree-row-min-height));
309
+ cursor: pointer;
310
+ }
311
+ .selection-checkbox {
312
+ inline-size: 1rem;
313
+ block-size: 1rem;
314
+ margin: 0;
315
+ accent-color: var(--ui-accent-solid);
316
+ }
317
+
318
+ [data-component~="ui-tree-item"][data-selection-mode="multiple"] > .row {
319
+ grid-template-columns: var(--_tree-disclosure-size) 1.25rem auto minmax(0, 1fr);
320
+ }
321
+ [data-component~="ui-tree-item"][data-selection-mode="multiple"] > .row > .selection-hit {
322
+ display: grid;
323
+ }
324
+ [data-component~="ui-tree-item"][data-selection-mode="multiple"] > .row > .leading {
325
+ grid-column: 3;
326
+ }
327
+ [data-component~="ui-tree-item"][data-selection-mode="multiple"] > .row > .label {
328
+ grid-column: 4;
329
+ }
330
+
292
331
  .disclosure:hover {
293
332
  color: var(--ui-text-primary);
294
333
  background: var(--ui-surface-elevated);
@@ -564,7 +603,7 @@ useComponentHost(controllerModule.default, {
564
603
  inset-inline: 1px;
565
604
  display: none;
566
605
  block-size: 2px;
567
- border-radius: 999px;
606
+ border-radius: var(--ui-radius-round);
568
607
  background: var(--_ui-tree-drop-color, var(--ui-accent-solid));
569
608
  pointer-events: none;
570
609
  }
@@ -577,7 +616,7 @@ useComponentHost(controllerModule.default, {
577
616
  inline-size: 7px;
578
617
  block-size: 7px;
579
618
  border: 2px solid var(--_ui-tree-drop-color, var(--ui-accent-solid));
580
- border-radius: 999px;
619
+ border-radius: var(--ui-radius-round);
581
620
  background: var(--ui-surface-elevated);
582
621
  transform: translateY(-50%);
583
622
  }
@@ -607,8 +646,61 @@ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] {
607
646
  --_tree-row-min-height: 44px;
608
647
  }
609
648
 
610
- html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .drag-handle {
611
- display: none;
649
+ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .row {
650
+ grid-template-columns: 44px var(--_tree-disclosure-size) auto minmax(0, 1fr);
651
+ }
652
+
653
+ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .drag-handle,
654
+ html[data-ui-input-modality="touch"]
655
+ [data-component~="ui-tree-item"][data-ui-tree-item-state~="isContainer"]
656
+ > .row
657
+ > .drag-handle {
658
+ position: relative;
659
+ grid-column: 1;
660
+ grid-row: 1;
661
+ inset: auto;
662
+ inline-size: 44px;
663
+ block-size: 44px;
664
+ padding: 14px;
665
+ opacity: 1;
666
+ transform: none;
667
+ cursor: pointer;
668
+ }
669
+
670
+ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .disclosure {
671
+ grid-column: 2;
672
+ }
673
+ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .leading {
674
+ grid-column: 3;
675
+ }
676
+ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .label {
677
+ grid-column: 4;
678
+ }
679
+
680
+ html[data-ui-input-modality="touch"]
681
+ [data-component~="ui-tree-item"][data-selection-mode="multiple"]
682
+ > .row {
683
+ grid-template-columns: 44px var(--_tree-disclosure-size) 44px auto minmax(0, 1fr);
684
+ }
685
+ html[data-ui-input-modality="touch"]
686
+ [data-component~="ui-tree-item"][data-selection-mode="multiple"]
687
+ > .row
688
+ > .selection-hit {
689
+ grid-column: 3;
690
+ inline-size: 44px;
691
+ block-size: 44px;
692
+ }
693
+ html[data-ui-input-modality="touch"]
694
+ [data-component~="ui-tree-item"][data-selection-mode="multiple"]
695
+ > .row
696
+ > .leading {
697
+ grid-column: 4;
698
+ }
699
+ html[data-ui-input-modality="touch"]
700
+ [data-component~="ui-tree-item"][data-selection-mode="multiple"]
701
+ > .row
702
+ > .label {
703
+ grid-column: 5;
612
704
  }
613
705
 
614
706
  @media (prefers-reduced-motion: reduce) {
@@ -1,11 +1,14 @@
1
1
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
2
  import { n as useComponentHost, t as createDispatch } from "./host.js";
3
- import { computed, createElementBlock, createElementVNode, defineComponent, mergeProps, openBlock, ref, renderSlot, toDisplayString, useTemplateRef } from "vue";
3
+ import { t as UiIcon_default } from "./UiIcon.js";
4
+ import { computed, createElementBlock, createElementVNode, createVNode, defineComponent, mergeProps, openBlock, ref, renderSlot, toDisplayString, useTemplateRef } from "vue";
4
5
  import * as controllerModule from "@threadlabs/looma/components/ui-avatar/ui-avatar.js";
5
6
  //#region .build/vue/UiAvatar.vue?vue&type=script&setup=true&lang.ts
6
7
  var _hoisted_1 = ["data-ui-avatar-state"];
7
8
  var _hoisted_2 = ["src", "hidden"];
8
9
  var _hoisted_3 = ["aria-hidden", "hidden"];
10
+ var _hoisted_4 = ["hidden"];
11
+ var _hoisted_5 = ["hidden"];
9
12
  //#endregion
10
13
  //#region .build/vue/UiAvatar.vue
11
14
  var UiAvatar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -17,8 +20,13 @@ var UiAvatar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
17
20
  default: false
18
21
  },
19
22
  alt: { default: "" },
23
+ decorative: {
24
+ type: Boolean,
25
+ default: false
26
+ },
20
27
  fallback: { default: "" },
21
28
  name: { default: "" },
29
+ shape: { default: "circle" },
22
30
  size: { default: "md" },
23
31
  src: {}
24
32
  },
@@ -29,8 +37,13 @@ var UiAvatar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
29
37
  const hasImage = ref(false);
30
38
  const hasAuthoredImage = ref(false);
31
39
  const initials = ref("?");
40
+ const showGlyph = ref(false);
32
41
  /** The values the styles' :host-state() rules test. */
33
- const hostState = computed(() => [props.size && `size size=${props.size}`, props.active && "active"].filter(Boolean).join(" "));
42
+ const hostState = computed(() => [
43
+ props.size && `size size=${props.size}`,
44
+ props.shape && `shape shape=${props.shape}`,
45
+ props.active && "active"
46
+ ].filter(Boolean).join(" "));
34
47
  const dispatch = createDispatch(root);
35
48
  useComponentHost(controllerModule.default, {
36
49
  root,
@@ -40,7 +53,8 @@ var UiAvatar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
40
53
  state: {
41
54
  hasImage,
42
55
  hasAuthoredImage,
43
- initials
56
+ initials,
57
+ showGlyph
44
58
  }
45
59
  });
46
60
  return (_ctx, _cache) => {
@@ -62,10 +76,10 @@ var UiAvatar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
62
76
  class: "fallback",
63
77
  "aria-hidden": hasImage.value,
64
78
  hidden: hasImage.value
65
- }, toDisplayString(initials.value), 9, _hoisted_3)
79
+ }, [createElementVNode("span", { hidden: showGlyph.value }, toDisplayString(initials.value), 9, _hoisted_4), createElementVNode("span", { hidden: !showGlyph.value }, [createVNode(UiIcon_default, { name: "user-round" })], 8, _hoisted_5)], 8, _hoisted_3)
66
80
  ], 16, _hoisted_1);
67
81
  };
68
82
  }
69
- }), [["__scopeId", "data-v-43a3ae30"]]);
83
+ }), [["__scopeId", "data-v-f9a69ac3"]]);
70
84
  //#endregion
71
85
  export { UiAvatar_default as t };
@@ -13,13 +13,16 @@ var UiAvatarGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @
13
13
  props: {
14
14
  label: { default: "People" },
15
15
  max: { default: 5 },
16
- size: { default: "md" }
16
+ overflowLabel: { default: "{count} more" },
17
+ size: { default: "md" },
18
+ total: {}
17
19
  },
18
20
  setup(__props) {
19
21
  const props = __props;
20
22
  const root = ref(null);
21
23
  const overflowElement = useTemplateRef("overflow");
22
24
  const overflowCount = ref(0);
25
+ const overflowAnnouncement = ref("");
23
26
  /** The values the styles' :host-state() rules test. */
24
27
  const hostState = computed(() => [props.size && `size size=${props.size}`].filter(Boolean).join(" "));
25
28
  const dispatch = createDispatch(root);
@@ -28,7 +31,10 @@ var UiAvatarGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @
28
31
  dispatch,
29
32
  props,
30
33
  refs: { overflow: overflowElement },
31
- state: { overflowCount }
34
+ state: {
35
+ overflowCount,
36
+ overflowAnnouncement
37
+ }
32
38
  });
33
39
  return (_ctx, _cache) => {
34
40
  return openBlock(), createElementBlock("div", mergeProps({
@@ -43,11 +49,11 @@ var UiAvatarGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @
43
49
  class: "overflow",
44
50
  role: "img",
45
51
  hidden: !overflowCount.value,
46
- "aria-label": `${overflowCount.value} more`,
52
+ "aria-label": overflowAnnouncement.value,
47
53
  ref: "overflow"
48
54
  }, toDisplayString(`+${overflowCount.value}`), 9, _hoisted_2)], 16, _hoisted_1);
49
55
  };
50
56
  }
51
- }), [["__scopeId", "data-v-ff71c721"]]);
57
+ }), [["__scopeId", "data-v-c8469808"]]);
52
58
  //#endregion
53
59
  export { UiAvatarGroup_default as t };
@@ -24,6 +24,6 @@ var UiBadge_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE
24
24
  return openBlock(), createElementBlock("span", mergeProps({ "data-component": "ui-badge" }, _ctx.$attrs, { "data-ui-badge-state": hostState.value || void 0 }), [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 16, _hoisted_1);
25
25
  };
26
26
  }
27
- }), [["__scopeId", "data-v-4c8e66a3"]]);
27
+ }), [["__scopeId", "data-v-8ef5da57"]]);
28
28
  //#endregion
29
29
  export { UiBadge_default as t };
@@ -1,16 +1,23 @@
1
1
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
- import { computed, createElementBlock, defineComponent, mergeProps, openBlock, renderSlot } from "vue";
2
+ import { n as useComponentHost, t as createDispatch } from "./host.js";
3
+ import { t as UiSpinner_default } from "./UiSpinner.js";
4
+ import { computed, createBlock, createCommentVNode, createElementBlock, defineComponent, mergeProps, openBlock, ref, renderSlot } from "vue";
5
+ import * as controllerModule from "@threadlabs/looma/components/ui-button/ui-button.js";
3
6
  //#region .build/vue/UiButton.vue?vue&type=script&setup=true&lang.ts
4
7
  var _hoisted_1 = [
5
8
  "href",
6
9
  "target",
7
10
  "rel",
8
11
  "aria-disabled",
12
+ "aria-busy",
13
+ "tabindex",
9
14
  "data-ui-button-state"
10
15
  ];
11
16
  var _hoisted_2 = [
12
17
  "type",
13
18
  "disabled",
19
+ "aria-disabled",
20
+ "aria-busy",
14
21
  "data-ui-button-state"
15
22
  ];
16
23
  //#endregion
@@ -26,6 +33,10 @@ var UiButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
26
33
  default: false
27
34
  },
28
35
  href: {},
36
+ pending: {
37
+ type: Boolean,
38
+ default: false
39
+ },
29
40
  rel: {},
30
41
  size: { default: "md" },
31
42
  stretch: {
@@ -39,14 +50,22 @@ var UiButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
39
50
  },
40
51
  setup(__props) {
41
52
  const props = __props;
53
+ const root = ref(null);
42
54
  /** The values the styles' :host-state() rules test. */
43
55
  const hostState = computed(() => [
44
56
  props.align && `align align=${props.align}`,
45
57
  props.stretch && "stretch",
46
58
  props.size && `size size=${props.size}`,
47
59
  props.variant && `variant variant=${props.variant}`,
48
- props.tone && `tone tone=${props.tone}`
60
+ props.tone && `tone tone=${props.tone}`,
61
+ props.pending && "pending"
49
62
  ].filter(Boolean).join(" "));
63
+ const dispatch = createDispatch(root);
64
+ useComponentHost(controllerModule.default, {
65
+ root,
66
+ dispatch,
67
+ props
68
+ });
50
69
  function text(value) {
51
70
  if (Array.isArray(value)) return value.map(text).join(" ");
52
71
  return value === null || value === void 0 || typeof value === "object" ? "" : String(value);
@@ -63,30 +82,58 @@ var UiButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
63
82
  href: attribute({
64
83
  true: null,
65
84
  false: __props.href
66
- }[`${__props.disabled}`]),
85
+ }[`${__props.disabled || __props.pending}`]),
67
86
  target: __props.target,
68
87
  rel: __props.rel,
69
88
  "aria-disabled": typeof {
70
89
  true: "true",
71
90
  false: null
72
- }[`${Boolean(__props.disabled && __props.href)}`] === "boolean" ? String({
91
+ }[`${__props.disabled || __props.pending}`] === "boolean" ? String({
73
92
  true: "true",
74
93
  false: null
75
- }[`${Boolean(__props.disabled && __props.href)}`]) : attribute({
94
+ }[`${__props.disabled || __props.pending}`]) : attribute({
76
95
  true: "true",
77
96
  false: null
78
- }[`${Boolean(__props.disabled && __props.href)}`]),
79
- "data-ui-button-state": hostState.value || void 0
80
- }), [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 16, _hoisted_1)) : (openBlock(), createElementBlock("button", mergeProps({
97
+ }[`${__props.disabled || __props.pending}`]),
98
+ "aria-busy": __props.pending,
99
+ tabindex: attribute({
100
+ true: "0",
101
+ false: null
102
+ }[`${__props.pending && !__props.disabled}`]),
103
+ "data-ui-button-state": hostState.value || void 0,
104
+ ref_key: "root",
105
+ ref: root
106
+ }), [__props.pending ? (openBlock(), createBlock(UiSpinner_default, {
107
+ key: 0,
108
+ size: "sm",
109
+ class: "pending-spinner"
110
+ })) : createCommentVNode("v-if", true), renderSlot(_ctx.$slots, "default", {}, void 0, true)], 16, _hoisted_1)) : (openBlock(), createElementBlock("button", mergeProps({
81
111
  key: 1,
82
112
  "data-component": "ui-button"
83
113
  }, _ctx.$attrs, {
84
114
  type: __props.type,
85
115
  disabled: __props.disabled,
86
- "data-ui-button-state": hostState.value || void 0
87
- }), [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 16, _hoisted_2));
116
+ "aria-disabled": typeof {
117
+ true: "true",
118
+ false: null
119
+ }[`${__props.pending}`] === "boolean" ? String({
120
+ true: "true",
121
+ false: null
122
+ }[`${__props.pending}`]) : attribute({
123
+ true: "true",
124
+ false: null
125
+ }[`${__props.pending}`]),
126
+ "aria-busy": __props.pending,
127
+ "data-ui-button-state": hostState.value || void 0,
128
+ ref_key: "root",
129
+ ref: root
130
+ }), [__props.pending ? (openBlock(), createBlock(UiSpinner_default, {
131
+ key: 0,
132
+ size: "sm",
133
+ class: "pending-spinner"
134
+ })) : createCommentVNode("v-if", true), renderSlot(_ctx.$slots, "default", {}, void 0, true)], 16, _hoisted_2));
88
135
  };
89
136
  }
90
- }), [["__scopeId", "data-v-bd32a08d"]]);
137
+ }), [["__scopeId", "data-v-3f3120c8"]]);
91
138
  //#endregion
92
139
  export { UiButton_default as t };
@@ -76,7 +76,7 @@ var UiCallout_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
76
76
  createElementVNode("path", { d: "M12 16v-4" }, null, -1),
77
77
  createElementVNode("path", { d: "M12 8h.01" }, null, -1)
78
78
  ])])) : createCommentVNode("v-if", true),
79
- __props.tone === "note" ? (openBlock(), createElementBlock("svg", _hoisted_4, [..._cache[1] || (_cache[1] = [
79
+ __props.tone === "neutral" || __props.tone === "note" ? (openBlock(), createElementBlock("svg", _hoisted_4, [..._cache[1] || (_cache[1] = [
80
80
  createElementVNode("path", { d: "M13.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8.5L13.5 2Z" }, null, -1),
81
81
  createElementVNode("path", { d: "M13 2v7h7" }, null, -1),
82
82
  createElementVNode("path", { d: "m9.5 17.5 4-4 2 2-4 4H9.5v-2Z" }, null, -1)
@@ -103,6 +103,6 @@ var UiCallout_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
103
103
  ]), createElementVNode("div", _hoisted_8, [renderSlot(_ctx.$slots, "default")])], 16, _hoisted_1);
104
104
  };
105
105
  }
106
- }), [["__scopeId", "data-v-faa2395f"]]);
106
+ }), [["__scopeId", "data-v-99de7df0"]]);
107
107
  //#endregion
108
108
  export { UiCallout_default as t };