@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
@@ -1,118 +1,137 @@
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-affordance-scope/ui-affordance-scope.js";
3
+ import { computed, onBeforeUnmount, onMounted, ref, shallowRef, watchEffect } from 'vue'
4
+ import * as controllerModule from '../components/ui-affordance-scope/ui-affordance-scope.js'
5
5
 
6
- defineOptions({ inheritAttrs: false });
6
+ defineOptions({ inheritAttrs: false })
7
7
 
8
- const hn = {
9
- t: (v: unknown): boolean => v === true || (typeof v === "string" ? v.length > 0 : typeof v === "number" ? v !== 0 && v === v : Array.isArray(v) ? v.length > 0 : v !== null && typeof v === "object" ? Object.keys(v).length > 0 : false),
10
- };
8
+ const props = withDefaults(
9
+ defineProps<{
10
+ nearRadius?: number
11
+ }>(),
12
+ {
13
+ nearRadius: 16,
14
+ },
15
+ )
11
16
 
12
- const props = withDefaults(defineProps<{
13
- nearRadius?: number | null;
14
- }>(), {
15
- nearRadius: 16,
16
- });
17
- const root = ref<HTMLElement | null>(null);
18
- const refs: Record<string, Element | undefined> = {};
19
- const state_engaged = ref<any>(false);
17
+ const root = ref<HTMLElement | null>(null)
18
+ const engaged = ref(false)
20
19
 
21
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
22
- const dispatch = (name: string, detail?: unknown): boolean => {
23
- return root.value?.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, detail })) ?? true;
24
- };
20
+ /** The values the styles' :host-state() rules test. */
21
+ const hostState = computed(() =>
22
+ [
23
+ engaged.value && 'engaged',
24
+ ].filter(Boolean).join(' ')
25
+ )
25
26
 
26
- /** The resolved values the styles' :host-state() rules test. */
27
- const hostState = computed(() => (["engaged"] as const).flatMap((name) => {
28
- const value = read(name);
29
- const tokens: string[] = hn.t(value) ? [name] : [];
30
- if (typeof value === "string" || typeof value === "number") tokens.push(`${name}=${encodeURIComponent(String(value))}`);
31
- return tokens;
32
- }).join(" "));
27
+ /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
28
+ function dispatch(name: string, detail?: unknown): boolean {
29
+ return root.value?.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, detail }))
30
+ ?? true
31
+ }
33
32
 
34
33
  function read(name: string): unknown {
35
- if (name === "engaged") return state_engaged.value;
36
- return (props as Record<string, unknown>)[name];
34
+ if (name === 'engaged') return engaged.value
35
+ return (props as Record<string, unknown>)[name]
37
36
  }
38
37
 
39
38
  function write(name: string, value: unknown): boolean {
40
- if (name === "engaged") { state_engaged.value = value; return true; }
41
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
39
+ if (name === 'engaged') {
40
+ engaged.value = value as never
41
+ return true
42
+ }
43
+ throw new TypeError(`Only declared state is writable; \`${name}\` is not.`)
42
44
  }
43
45
 
44
- const stops: Array<() => void> = [];
46
+ const stops: Array<() => void> = []
45
47
  const host = {
46
- get element(): Element { return root.value as Element; },
48
+ get element(): Element {
49
+ return root.value as Element
50
+ },
47
51
  state: new Proxy({} as Record<string, unknown>, {
48
- get: (_target, name) => typeof name === "string" ? read(name) : undefined,
49
- set: (_target, name, value) => typeof name === "string" && write(name, value),
52
+ get: (_target, name) => typeof name === 'string' ? read(name) : undefined,
53
+ set: (_target, name, value) => typeof name === 'string' && write(name, value),
50
54
  }),
51
- refs: refs as Readonly<Record<string, Element>>,
55
+ refs: {} as Readonly<Record<string, Element>>,
52
56
  elements: new Proxy({} as Record<string, Element | RadioNodeList | undefined>, {
53
57
  get: (_target, name) => {
54
- if (typeof name !== "string" || root.value === null) return undefined;
55
- const form = root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form");
56
- return form?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined;
58
+ if (typeof name !== 'string' || root.value === null) return undefined
59
+ const form = root.value instanceof HTMLFormElement
60
+ ? root.value
61
+ : root.value.querySelector('form')
62
+ return form?.elements.namedItem(name)
63
+ ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined
57
64
  },
58
65
  }),
59
66
  signal<T>(initialValue: T) {
60
- const value = shallowRef(initialValue);
67
+ const value = shallowRef(initialValue)
61
68
  return {
62
69
  get: (): T => value.value,
63
- set: (next: T): void => { if (!Object.is(value.value, next)) value.value = next; },
64
- update: (next: (current: T) => T): void => { const updated = next(value.value); if (!Object.is(value.value, updated)) value.value = updated; },
65
- };
70
+ set: (next: T): void => {
71
+ if (!Object.is(value.value, next)) value.value = next
72
+ },
73
+ update: (next: (current: T) => T): void => {
74
+ const updated = next(value.value)
75
+ if (!Object.is(value.value, updated)) value.value = updated
76
+ },
77
+ }
66
78
  },
67
79
  computed<T>(compute: () => T) {
68
- const value = computed(compute);
69
- return { get: (): T => value.value };
80
+ const value = computed(compute)
81
+ return { get: (): T => value.value }
70
82
  },
71
83
  effect(run: () => void | (() => void)): () => void {
72
84
  const stop = watchEffect((onCleanup) => {
73
- const cleanup = run();
74
- if (typeof cleanup === "function") onCleanup(cleanup);
75
- }, { flush: "post" });
76
- stops.push(stop);
77
- return stop;
85
+ const cleanup = run()
86
+ if (typeof cleanup === 'function') onCleanup(cleanup)
87
+ }, { flush: 'post' })
88
+ stops.push(stop)
89
+ return stop
78
90
  },
79
91
  on(event: string, listener: EventListener): () => void {
80
- const element = root.value;
81
- element?.addEventListener(event, listener);
82
- const off = (): void => element?.removeEventListener(event, listener);
83
- stops.push(off);
84
- return off;
92
+ const element = root.value
93
+ element?.addEventListener(event, listener)
94
+ const off = (): void => element?.removeEventListener(event, listener)
95
+ stops.push(off)
96
+ return off
85
97
  },
86
98
  dispatch,
87
- };
99
+ }
88
100
 
89
- let cleanup: void | (() => void);
90
- let ready: Promise<void> | undefined;
101
+ let cleanup: void | (() => void)
102
+ let ready: Promise<void> | undefined
91
103
  onMounted(() => {
92
- ready = Promise.resolve(controllerModule.default(host as never)).then((result) => { cleanup = result; });
93
- });
104
+ ready = Promise.resolve(controllerModule.default(host as never)).then((result) => {
105
+ cleanup = result
106
+ })
107
+ })
94
108
  onBeforeUnmount(() => {
95
- for (const stop of stops.splice(0)) stop();
96
- if (typeof cleanup === "function") cleanup();
97
- });
109
+ for (const stop of stops.splice(0)) stop()
110
+ if (typeof cleanup === 'function') cleanup()
111
+ })
98
112
  </script>
99
113
 
100
114
  <template>
101
- <span data-component="ui-affordance-scope" v-bind="$attrs" :data-ui-affordance-scope-state="hostState || undefined" ref="root"><slot></slot></span>
115
+ <span
116
+ data-component="ui-affordance-scope"
117
+ v-bind="$attrs"
118
+ :data-ui-affordance-scope-state="hostState || undefined"
119
+ ref="root"
120
+ ><slot /></span>
102
121
  </template>
103
122
 
104
123
  <style scoped>
105
124
  [data-component~="ui-affordance-scope"] {
106
- display: contents;
107
- --ui-affordance-scope-engaged: 0;
108
- }
125
+ display: contents;
126
+ --ui-affordance-scope-engaged: 0;
127
+ }
109
128
 
110
- [data-component~="ui-affordance-scope"][data-ui-affordance-scope-state~="engaged"] {
111
- --ui-affordance-scope-engaged: 1;
112
- }
129
+ [data-component~="ui-affordance-scope"][data-ui-affordance-scope-state~="engaged"] {
130
+ --ui-affordance-scope-engaged: 1;
131
+ }
113
132
 
114
- /* A component that sets its display still honours the hidden attribute on its root. */
115
- [data-component~="ui-affordance-scope"][hidden] {
116
- display: none;
117
- }
133
+ /* A component that sets its display still honours the hidden attribute on its root. */
134
+ [data-component~="ui-affordance-scope"][hidden] {
135
+ display: none;
136
+ }
118
137
  </style>
package/vue/UiAvatar.d.ts CHANGED
@@ -1,17 +1,17 @@
1
1
  type __VLS_Props = {
2
- alt?: string | null;
3
- fallback?: string | null;
4
- name?: string | null;
5
- src?: string | null;
2
+ alt?: string;
3
+ fallback?: string;
4
+ name?: string;
5
+ src?: string;
6
6
  };
7
7
  declare var __VLS_1: {};
8
8
  type __VLS_Slots = {} & {
9
9
  default?: (props: typeof __VLS_1) => any;
10
10
  };
11
11
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
12
- alt: string | null;
13
- fallback: string | null;
14
- name: string | null;
12
+ alt: string;
13
+ fallback: string;
14
+ name: string;
15
15
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
16
16
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
17
17
  declare const _default: typeof __VLS_export;
package/vue/UiAvatar.vue CHANGED
@@ -1,152 +1,192 @@
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-avatar/ui-avatar.js";
3
+ import {
4
+ computed,
5
+ onBeforeUnmount,
6
+ onMounted,
7
+ ref,
8
+ shallowRef,
9
+ useTemplateRef,
10
+ watchEffect,
11
+ } from 'vue'
12
+ import * as controllerModule from '../components/ui-avatar/ui-avatar.js'
5
13
 
6
- defineOptions({ inheritAttrs: false });
14
+ defineOptions({ inheritAttrs: false })
7
15
 
8
- const hn = {
9
- t: (v: unknown): boolean => v === true || (typeof v === "string" ? v.length > 0 : typeof v === "number" ? v !== 0 && v === v : Array.isArray(v) ? v.length > 0 : v !== null && typeof v === "object" ? Object.keys(v).length > 0 : false),
10
- text: (v: unknown): string => v === undefined || v === null ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? "" : String(v),
11
- attr: (v: unknown): any => v === undefined || v === null || v === false ? undefined : v === true ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? undefined : String(v),
12
- enumerated: (v: unknown): any => typeof v === "boolean" ? String(v) : hn.attr(v),
13
- };
16
+ const props = withDefaults(
17
+ defineProps<{
18
+ alt?: string
19
+ fallback?: string
20
+ name?: string
21
+ src?: string
22
+ }>(),
23
+ {
24
+ alt: '',
25
+ fallback: '',
26
+ name: '',
27
+ },
28
+ )
14
29
 
15
- const props = withDefaults(defineProps<{
16
- alt?: string | null;
17
- fallback?: string | null;
18
- name?: string | null;
19
- src?: string | null;
20
- }>(), {
21
- alt: "",
22
- fallback: "",
23
- name: "",
24
- });
25
- const root = ref<HTMLElement | null>(null);
26
- const refs: Record<string, Element | undefined> = {};
27
- const state_hasImage = ref<any>(false);
28
- const state_hasAuthoredImage = ref<any>(false);
29
- const state_initials = ref<any>("?");
30
+ const root = ref<HTMLElement | null>(null)
31
+ const imageElement = useTemplateRef<HTMLElement>('image')
32
+ const hasImage = ref(false)
33
+ const hasAuthoredImage = ref(false)
34
+ const initials = ref('?')
30
35
 
31
36
  /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
32
- const dispatch = (name: string, detail?: unknown): boolean => {
33
- return root.value?.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, detail })) ?? true;
34
- };
37
+ function dispatch(name: string, detail?: unknown): boolean {
38
+ return root.value?.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, detail }))
39
+ ?? true
40
+ }
35
41
 
36
42
  function read(name: string): unknown {
37
- if (name === "hasImage") return state_hasImage.value;
38
- if (name === "hasAuthoredImage") return state_hasAuthoredImage.value;
39
- if (name === "initials") return state_initials.value;
40
- return (props as Record<string, unknown>)[name];
43
+ if (name === 'hasImage') return hasImage.value
44
+ if (name === 'hasAuthoredImage') return hasAuthoredImage.value
45
+ if (name === 'initials') return initials.value
46
+ return (props as Record<string, unknown>)[name]
41
47
  }
42
48
 
43
49
  function write(name: string, value: unknown): boolean {
44
- if (name === "hasImage") { state_hasImage.value = value; return true; }
45
- if (name === "hasAuthoredImage") { state_hasAuthoredImage.value = value; return true; }
46
- if (name === "initials") { state_initials.value = value; return true; }
47
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
50
+ if (name === 'hasImage') {
51
+ hasImage.value = value as never
52
+ return true
53
+ }
54
+ if (name === 'hasAuthoredImage') {
55
+ hasAuthoredImage.value = value as never
56
+ return true
57
+ }
58
+ if (name === 'initials') {
59
+ initials.value = value as never
60
+ return true
61
+ }
62
+ throw new TypeError(`Only declared state is writable; \`${name}\` is not.`)
48
63
  }
49
64
 
50
- const stops: Array<() => void> = [];
65
+ const stops: Array<() => void> = []
51
66
  const host = {
52
- get element(): Element { return root.value as Element; },
67
+ get element(): Element {
68
+ return root.value as Element
69
+ },
53
70
  state: new Proxy({} as Record<string, unknown>, {
54
- get: (_target, name) => typeof name === "string" ? read(name) : undefined,
55
- set: (_target, name, value) => typeof name === "string" && write(name, value),
71
+ get: (_target, name) => typeof name === 'string' ? read(name) : undefined,
72
+ set: (_target, name, value) => typeof name === 'string' && write(name, value),
56
73
  }),
57
- refs: refs as Readonly<Record<string, Element>>,
74
+ refs: {
75
+ get image(): Element {
76
+ return imageElement.value as Element
77
+ },
78
+ } as Readonly<Record<string, Element>>,
58
79
  elements: new Proxy({} as Record<string, Element | RadioNodeList | undefined>, {
59
80
  get: (_target, name) => {
60
- if (typeof name !== "string" || root.value === null) return undefined;
61
- const form = root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form");
62
- return form?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined;
81
+ if (typeof name !== 'string' || root.value === null) return undefined
82
+ const form = root.value instanceof HTMLFormElement
83
+ ? root.value
84
+ : root.value.querySelector('form')
85
+ return form?.elements.namedItem(name)
86
+ ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined
63
87
  },
64
88
  }),
65
89
  signal<T>(initialValue: T) {
66
- const value = shallowRef(initialValue);
90
+ const value = shallowRef(initialValue)
67
91
  return {
68
92
  get: (): T => value.value,
69
- set: (next: T): void => { if (!Object.is(value.value, next)) value.value = next; },
70
- update: (next: (current: T) => T): void => { const updated = next(value.value); if (!Object.is(value.value, updated)) value.value = updated; },
71
- };
93
+ set: (next: T): void => {
94
+ if (!Object.is(value.value, next)) value.value = next
95
+ },
96
+ update: (next: (current: T) => T): void => {
97
+ const updated = next(value.value)
98
+ if (!Object.is(value.value, updated)) value.value = updated
99
+ },
100
+ }
72
101
  },
73
102
  computed<T>(compute: () => T) {
74
- const value = computed(compute);
75
- return { get: (): T => value.value };
103
+ const value = computed(compute)
104
+ return { get: (): T => value.value }
76
105
  },
77
106
  effect(run: () => void | (() => void)): () => void {
78
107
  const stop = watchEffect((onCleanup) => {
79
- const cleanup = run();
80
- if (typeof cleanup === "function") onCleanup(cleanup);
81
- }, { flush: "post" });
82
- stops.push(stop);
83
- return stop;
108
+ const cleanup = run()
109
+ if (typeof cleanup === 'function') onCleanup(cleanup)
110
+ }, { flush: 'post' })
111
+ stops.push(stop)
112
+ return stop
84
113
  },
85
114
  on(event: string, listener: EventListener): () => void {
86
- const element = root.value;
87
- element?.addEventListener(event, listener);
88
- const off = (): void => element?.removeEventListener(event, listener);
89
- stops.push(off);
90
- return off;
115
+ const element = root.value
116
+ element?.addEventListener(event, listener)
117
+ const off = (): void => element?.removeEventListener(event, listener)
118
+ stops.push(off)
119
+ return off
91
120
  },
92
121
  dispatch,
93
- };
122
+ }
94
123
 
95
- let cleanup: void | (() => void);
96
- let ready: Promise<void> | undefined;
124
+ let cleanup: void | (() => void)
125
+ let ready: Promise<void> | undefined
97
126
  onMounted(() => {
98
- ready = Promise.resolve(controllerModule.default(host as never)).then((result) => { cleanup = result; });
99
- });
127
+ ready = Promise.resolve(controllerModule.default(host as never)).then((result) => {
128
+ cleanup = result
129
+ })
130
+ })
100
131
  onBeforeUnmount(() => {
101
- for (const stop of stops.splice(0)) stop();
102
- if (typeof cleanup === "function") cleanup();
103
- });
132
+ for (const stop of stops.splice(0)) stop()
133
+ if (typeof cleanup === 'function') cleanup()
134
+ })
104
135
  </script>
105
136
 
106
137
  <template>
107
- <span data-component="ui-avatar" v-bind="$attrs" ref="root"><slot></slot><img class="image" alt="" aria-hidden="true" :src="hn.attr(props.src)" :hidden="hn.attr((hn.t(state_hasAuthoredImage) || hn.t(!hn.t(state_hasImage))))" :ref="(element) => { refs['image'] = element as Element }"><span class="fallback" :aria-hidden="hn.enumerated(state_hasImage)" :hidden="hn.attr(state_hasImage)">{{ hn.text(state_initials) }}</span></span>
138
+ <span data-component="ui-avatar" v-bind="$attrs" ref="root"><slot />
139
+ <img
140
+ class="image"
141
+ alt=""
142
+ aria-hidden="true"
143
+ :src="src"
144
+ :hidden="hasAuthoredImage || !hasImage"
145
+ ref="image"
146
+ >
147
+ <span class="fallback" :aria-hidden="hasImage" :hidden="hasImage">{{ initials }}</span></span>
108
148
  </template>
109
149
 
110
150
  <style scoped>
111
151
  [data-component~="ui-avatar"] {
112
- display: inline-grid;
113
- place-items: center;
114
- overflow: hidden;
115
- inline-size: 2.5rem;
116
- block-size: 2.5rem;
117
- border-radius: 999px;
118
- border: 1px solid var(--ui-avatar-border, var(--ui-border-strong));
119
- background: var(--ui-avatar-surface, var(--ui-accent-soft));
120
- color: var(--ui-avatar-text, var(--ui-accent-solid));
121
- font: inherit;
122
- font-size: 0.875rem;
123
- font-weight: 600;
124
- text-transform: uppercase;
125
- }
152
+ display: inline-grid;
153
+ place-items: center;
154
+ overflow: hidden;
155
+ inline-size: 2.5rem;
156
+ block-size: 2.5rem;
157
+ border-radius: 999px;
158
+ border: 1px solid var(--ui-avatar-border, var(--ui-border-strong));
159
+ background: var(--ui-avatar-surface, var(--ui-accent-soft));
160
+ color: var(--ui-avatar-text, var(--ui-accent-solid));
161
+ font: inherit;
162
+ font-size: 0.875rem;
163
+ font-weight: 600;
164
+ text-transform: uppercase;
165
+ }
126
166
 
127
- .image,
128
- :slotted(img) {
129
- grid-area: 1 / 1;
130
- inline-size: 100%;
131
- block-size: 100%;
132
- object-fit: cover;
133
- }
167
+ .image,
168
+ :slotted(img) {
169
+ grid-area: 1 / 1;
170
+ inline-size: 100%;
171
+ block-size: 100%;
172
+ object-fit: cover;
173
+ }
134
174
 
135
- .fallback {
136
- grid-area: 1 / 1;
137
- display: inline-flex;
138
- align-items: center;
139
- justify-content: center;
140
- inline-size: 100%;
141
- block-size: 100%;
142
- }
175
+ .fallback {
176
+ grid-area: 1 / 1;
177
+ display: inline-flex;
178
+ align-items: center;
179
+ justify-content: center;
180
+ inline-size: 100%;
181
+ block-size: 100%;
182
+ }
143
183
 
144
- [hidden] {
145
- display: none;
146
- }
184
+ [hidden] {
185
+ display: none;
186
+ }
147
187
 
148
- /* A component that sets its display still honours the hidden attribute on its root. */
149
- [data-component~="ui-avatar"][hidden] {
150
- display: none;
151
- }
188
+ /* A component that sets its display still honours the hidden attribute on its root. */
189
+ [data-component~="ui-avatar"][hidden] {
190
+ display: none;
191
+ }
152
192
  </style>
@@ -1,14 +1,14 @@
1
1
  type __VLS_Props = {
2
- label?: string | null;
3
- max?: number | null;
2
+ label?: string;
3
+ max?: number;
4
4
  };
5
5
  declare var __VLS_1: {};
6
6
  type __VLS_Slots = {} & {
7
7
  default?: (props: typeof __VLS_1) => any;
8
8
  };
9
9
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
10
- label: string | null;
11
- max: number | null;
10
+ label: string;
11
+ max: number;
12
12
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
13
13
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
14
14
  declare const _default: typeof __VLS_export;