@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,211 +1,317 @@
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-disclosure/ui-disclosure.js";
5
-
6
- defineOptions({ inheritAttrs: false });
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
- 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
- };
14
-
15
- const props = withDefaults(defineProps<{
16
- disabled?: boolean | null;
17
- open?: boolean | null;
18
- summary?: string | null;
19
- }>(), {
20
- disabled: false,
21
- open: false,
22
- summary: "Details",
23
- });
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-disclosure/ui-disclosure.js'
13
+
14
+ defineOptions({ inheritAttrs: false })
15
+
16
+ const props = withDefaults(
17
+ defineProps<{
18
+ density?: 'comfortable' | 'compact'
19
+ disabled?: boolean
20
+ open?: boolean
21
+ summary?: string
22
+ }>(),
23
+ {
24
+ density: 'comfortable',
25
+ disabled: false,
26
+ open: false,
27
+ summary: 'Details',
28
+ },
29
+ )
24
30
  const emit = defineEmits<{
25
- "open": [detail: { readonly open: boolean; readonly reason: "action" | "programmatic" | "light-dismiss" | "escape"; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
26
- "close": [detail: { readonly open: boolean; readonly reason: "action" | "programmatic" | "light-dismiss" | "escape"; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
27
- }>();
28
- const root = ref<HTMLElement | null>(null);
29
- const refs: Record<string, Element | undefined> = {};
30
- const state_internalOpen = ref<any>(false);
31
- const state_contentId = ref<any>("");
31
+ 'update:open': [value: boolean]
32
+ open: [
33
+ detail: {
34
+ readonly open: boolean
35
+ readonly reason: 'action' | 'programmatic' | 'light-dismiss' | 'escape'
36
+ readonly trigger: 'keyboard' | 'pointer' | 'programmatic'
37
+ },
38
+ ]
39
+ close: [
40
+ detail: {
41
+ readonly open: boolean
42
+ readonly reason: 'action' | 'programmatic' | 'light-dismiss' | 'escape'
43
+ readonly trigger: 'keyboard' | 'pointer' | 'programmatic'
44
+ },
45
+ ]
46
+ }>()
47
+
48
+ const root = ref<HTMLElement | null>(null)
49
+ const triggerElement = useTemplateRef<HTMLElement>('trigger')
50
+ const internalOpen = ref(false)
51
+ const contentId = ref('')
52
+
53
+ /** The values the styles' :host-state() rules test. */
54
+ const hostState = computed(() =>
55
+ [
56
+ props.density && `density density=${props.density}`,
57
+ internalOpen.value && 'internalOpen',
58
+ ].filter(Boolean).join(' ')
59
+ )
32
60
 
33
61
  /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
34
- const dispatch = (name: string, detail?: unknown): boolean => {
35
- const declared = {"open":{"bubbles":true,"composed":true,"cancelable":false},"close":{"bubbles":true,"composed":true,"cancelable":false}} as Record<string, EventInit | undefined>;
62
+ function dispatch(name: string, detail?: unknown): boolean {
63
+ const declared: Record<string, EventInit | undefined> = {
64
+ open: { bubbles: true, composed: true, cancelable: false },
65
+ close: { bubbles: true, composed: true, cancelable: false },
66
+ }
36
67
  const checks: Record<string, (detail: unknown) => boolean> = {
37
- "open": (detail: unknown) => (detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof (detail as Record<string, unknown>)["open"] === "boolean" && ((detail as Record<string, unknown>)["reason"] === "action" || (detail as Record<string, unknown>)["reason"] === "programmatic" || (detail as Record<string, unknown>)["reason"] === "light-dismiss" || (detail as Record<string, unknown>)["reason"] === "escape") && ((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) => ["open","reason","trigger"].includes(key))),
38
- "close": (detail: unknown) => (detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof (detail as Record<string, unknown>)["open"] === "boolean" && ((detail as Record<string, unknown>)["reason"] === "action" || (detail as Record<string, unknown>)["reason"] === "programmatic" || (detail as Record<string, unknown>)["reason"] === "light-dismiss" || (detail as Record<string, unknown>)["reason"] === "escape") && ((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) => ["open","reason","trigger"].includes(key))),
39
- };
68
+ open: (detail) =>
69
+ detail !== null && typeof detail === 'object' && !Array.isArray(detail)
70
+ && typeof (detail as Record<string, unknown>)['open'] === 'boolean'
71
+ && ((detail as Record<string, unknown>)['reason'] === 'action'
72
+ || (detail as Record<string, unknown>)['reason'] === 'programmatic'
73
+ || (detail as Record<string, unknown>)['reason'] === 'light-dismiss'
74
+ || (detail as Record<string, unknown>)['reason'] === 'escape')
75
+ && ((detail as Record<string, unknown>)['trigger'] === 'keyboard'
76
+ || (detail as Record<string, unknown>)['trigger'] === 'pointer'
77
+ || (detail as Record<string, unknown>)['trigger'] === 'programmatic')
78
+ && Object.keys(detail as object).every((key) => ['open', 'reason', 'trigger'].includes(key)),
79
+ close: (detail) =>
80
+ detail !== null && typeof detail === 'object' && !Array.isArray(detail)
81
+ && typeof (detail as Record<string, unknown>)['open'] === 'boolean'
82
+ && ((detail as Record<string, unknown>)['reason'] === 'action'
83
+ || (detail as Record<string, unknown>)['reason'] === 'programmatic'
84
+ || (detail as Record<string, unknown>)['reason'] === 'light-dismiss'
85
+ || (detail as Record<string, unknown>)['reason'] === 'escape')
86
+ && ((detail as Record<string, unknown>)['trigger'] === 'keyboard'
87
+ || (detail as Record<string, unknown>)['trigger'] === 'pointer'
88
+ || (detail as Record<string, unknown>)['trigger'] === 'programmatic')
89
+ && Object.keys(detail as object).every((key) => ['open', 'reason', 'trigger'].includes(key)),
90
+ }
40
91
  if (detail !== undefined && checks[name] !== undefined && !checks[name]!(detail)) {
41
- throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
92
+ throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`)
42
93
  }
43
- (emit as (name: string, detail: unknown) => void)(name, detail);
44
- return root.value?.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, ...declared[name], detail })) ?? true;
45
- };
46
-
47
- /** The resolved values the styles' :host-state() rules test. */
48
- const hostState = computed(() => (["internalOpen"] as const).flatMap((name) => {
49
- const value = read(name);
50
- const tokens: string[] = hn.t(value) ? [name] : [];
51
- if (typeof value === "string" || typeof value === "number") tokens.push(`${name}=${encodeURIComponent(String(value))}`);
52
- return tokens;
53
- }).join(" "));
94
+ const emitEvent = emit as (name: string, detail: unknown) => void
95
+ emitEvent(name, detail)
96
+ if (detail !== null && typeof detail === 'object' && 'open' in detail) {
97
+ emitEvent('update:open', (detail as Record<string, unknown>)['open'])
98
+ }
99
+ return root.value?.dispatchEvent(
100
+ new CustomEvent(name, { bubbles: true, composed: true, ...declared[name], detail }),
101
+ ) ?? true
102
+ }
54
103
 
55
104
  function read(name: string): unknown {
56
- if (name === "internalOpen") return state_internalOpen.value;
57
- if (name === "contentId") return state_contentId.value;
58
- return (props as Record<string, unknown>)[name];
105
+ if (name === 'internalOpen') return internalOpen.value
106
+ if (name === 'contentId') return contentId.value
107
+ return (props as Record<string, unknown>)[name]
59
108
  }
60
109
 
61
110
  function write(name: string, value: unknown): boolean {
62
- if (name === "internalOpen") { state_internalOpen.value = value; return true; }
63
- if (name === "contentId") { state_contentId.value = value; return true; }
64
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
111
+ if (name === 'internalOpen') {
112
+ internalOpen.value = value as never
113
+ return true
114
+ }
115
+ if (name === 'contentId') {
116
+ contentId.value = value as never
117
+ return true
118
+ }
119
+ throw new TypeError(`Only declared state is writable; \`${name}\` is not.`)
65
120
  }
66
121
 
67
- const stops: Array<() => void> = [];
122
+ const stops: Array<() => void> = []
68
123
  const host = {
69
- get element(): Element { return root.value as Element; },
124
+ get element(): Element {
125
+ return root.value as Element
126
+ },
70
127
  state: new Proxy({} as Record<string, unknown>, {
71
- get: (_target, name) => typeof name === "string" ? read(name) : undefined,
72
- set: (_target, name, value) => typeof name === "string" && write(name, value),
128
+ get: (_target, name) => typeof name === 'string' ? read(name) : undefined,
129
+ set: (_target, name, value) => typeof name === 'string' && write(name, value),
73
130
  }),
74
- refs: refs as Readonly<Record<string, Element>>,
131
+ refs: {
132
+ get trigger(): Element {
133
+ return triggerElement.value as Element
134
+ },
135
+ } as Readonly<Record<string, Element>>,
75
136
  elements: new Proxy({} as Record<string, Element | RadioNodeList | undefined>, {
76
137
  get: (_target, name) => {
77
- if (typeof name !== "string" || root.value === null) return undefined;
78
- const form = root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form");
79
- return form?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined;
138
+ if (typeof name !== 'string' || root.value === null) return undefined
139
+ const form = root.value instanceof HTMLFormElement
140
+ ? root.value
141
+ : root.value.querySelector('form')
142
+ return form?.elements.namedItem(name)
143
+ ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined
80
144
  },
81
145
  }),
82
146
  signal<T>(initialValue: T) {
83
- const value = shallowRef(initialValue);
147
+ const value = shallowRef(initialValue)
84
148
  return {
85
149
  get: (): T => value.value,
86
- set: (next: T): void => { if (!Object.is(value.value, next)) value.value = next; },
87
- update: (next: (current: T) => T): void => { const updated = next(value.value); if (!Object.is(value.value, updated)) value.value = updated; },
88
- };
150
+ set: (next: T): void => {
151
+ if (!Object.is(value.value, next)) value.value = next
152
+ },
153
+ update: (next: (current: T) => T): void => {
154
+ const updated = next(value.value)
155
+ if (!Object.is(value.value, updated)) value.value = updated
156
+ },
157
+ }
89
158
  },
90
159
  computed<T>(compute: () => T) {
91
- const value = computed(compute);
92
- return { get: (): T => value.value };
160
+ const value = computed(compute)
161
+ return { get: (): T => value.value }
93
162
  },
94
163
  effect(run: () => void | (() => void)): () => void {
95
164
  const stop = watchEffect((onCleanup) => {
96
- const cleanup = run();
97
- if (typeof cleanup === "function") onCleanup(cleanup);
98
- }, { flush: "post" });
99
- stops.push(stop);
100
- return stop;
165
+ const cleanup = run()
166
+ if (typeof cleanup === 'function') onCleanup(cleanup)
167
+ }, { flush: 'post' })
168
+ stops.push(stop)
169
+ return stop
101
170
  },
102
171
  on(event: string, listener: EventListener): () => void {
103
- const element = root.value;
104
- element?.addEventListener(event, listener);
105
- const off = (): void => element?.removeEventListener(event, listener);
106
- stops.push(off);
107
- return off;
172
+ const element = root.value
173
+ element?.addEventListener(event, listener)
174
+ const off = (): void => element?.removeEventListener(event, listener)
175
+ stops.push(off)
176
+ return off
108
177
  },
109
178
  dispatch,
110
- };
179
+ }
111
180
 
112
- let cleanup: void | (() => void);
113
- let ready: Promise<void> | undefined;
181
+ let cleanup: void | (() => void)
182
+ let ready: Promise<void> | undefined
114
183
  onMounted(() => {
115
- ready = Promise.resolve(controllerModule.default(host as never)).then((result) => { cleanup = result; });
116
- });
184
+ ready = Promise.resolve(controllerModule.default(host as never)).then((result) => {
185
+ cleanup = result
186
+ })
187
+ })
117
188
  onBeforeUnmount(() => {
118
- for (const stop of stops.splice(0)) stop();
119
- if (typeof cleanup === "function") cleanup();
120
- });
189
+ for (const stop of stops.splice(0)) stop()
190
+ if (typeof cleanup === 'function') cleanup()
191
+ })
121
192
  </script>
122
193
 
123
194
  <template>
124
- <div data-component="ui-disclosure" v-bind="$attrs" :data-ui-disclosure-state="hostState || undefined" ref="root"><button class="trigger" type="button" :aria-controls="hn.enumerated(state_contentId)" :aria-expanded="hn.enumerated(state_internalOpen)" :disabled="hn.attr(props.disabled)" :ref="(element) => { refs['trigger'] = element as Element }"><span>{{ hn.text(props.summary) }}</span><span class="chevron" aria-hidden="true"></span></button><div class="panel" :id="hn.attr(state_contentId)" :inert="hn.attr(!hn.t(state_internalOpen))"><div class="panel-inner"><slot></slot></div></div></div>
195
+ <div
196
+ data-component="ui-disclosure"
197
+ v-bind="$attrs"
198
+ :data-ui-disclosure-state="hostState || undefined"
199
+ ref="root"
200
+ >
201
+ <button
202
+ class="trigger"
203
+ type="button"
204
+ :aria-controls="contentId"
205
+ :aria-expanded="internalOpen"
206
+ :disabled="disabled"
207
+ ref="trigger"
208
+ >
209
+ <span>{{ summary }}</span>
210
+ <span class="chevron" aria-hidden="true"></span>
211
+ </button>
212
+ <div class="panel" :id="contentId" :inert="!internalOpen">
213
+ <div class="panel-inner"><slot /></div>
214
+ </div>
215
+ </div>
125
216
  </template>
126
217
 
127
218
  <style scoped>
219
+ /* Density resolves into the summary row's own values; the public tokens still override them. */
220
+ [data-component~="ui-disclosure"] {
221
+ --_trigger-min-block-size: var(--ui-control-size);
222
+ --_trigger-padding-block: var(--ui-space-2);
223
+ --_trigger-padding-inline: var(--ui-space-3);
224
+ }
225
+
226
+ [data-component~="ui-disclosure"][data-ui-disclosure-state~="density=compact"] {
227
+ --_trigger-min-block-size: var(--ui-control-size-sm);
228
+ --_trigger-padding-block: var(--ui-space-1);
229
+ --_trigger-padding-inline: var(--ui-space-2);
230
+ }
231
+
128
232
  /* An accordion row, not a field: no enclosing box, just a divider, so it never reads as a
129
- * select or combobox. Stacked disclosures share their dividers. */
130
- [data-component~="ui-disclosure"] {
131
- display: block;
132
- inline-size: 100%;
133
- overflow: clip;
134
- border-block-end: 1px solid var(--ui-border-default);
135
- color: var(--ui-text-primary);
136
- }
233
+ * select or combobox. Stacked disclosures share their dividers. */
234
+ [data-component~="ui-disclosure"] {
235
+ display: block;
236
+ inline-size: 100%;
237
+ overflow: clip;
238
+ border-block-end: 1px solid var(--ui-border-default);
239
+ color: var(--ui-text-primary);
240
+ }
137
241
 
138
- .trigger {
139
- display: grid;
140
- grid-template-columns: minmax(0, 1fr) auto;
141
- gap: var(--ui-space-3);
142
- align-items: center;
143
- inline-size: 100%;
144
- min-block-size: 2.5rem;
145
- padding: var(--ui-space-2) var(--ui-space-3);
146
- border: 0;
147
- background: transparent;
148
- color: inherit;
149
- font: inherit;
150
- font-weight: var(--ui-font-semibold, 600);
151
- text-align: start;
152
- cursor: pointer;
153
- border-radius: var(--ui-radius-1);
154
- transition: background-color var(--ui-motion-fast) var(--ui-motion-ease);
155
- }
242
+ .trigger {
243
+ display: grid;
244
+ grid-template-columns: minmax(0, 1fr) auto;
245
+ gap: var(--ui-space-3);
246
+ align-items: center;
247
+ inline-size: 100%;
248
+ min-block-size: var(--ui-disclosure-trigger-min-block-size, var(--_trigger-min-block-size));
249
+ padding: var(--ui-disclosure-trigger-padding-block, var(--_trigger-padding-block))
250
+ var(--ui-disclosure-trigger-padding-inline, var(--_trigger-padding-inline));
251
+ border: 0;
252
+ background: transparent;
253
+ color: inherit;
254
+ font: inherit;
255
+ font-weight: var(--ui-font-semibold);
256
+ text-align: start;
257
+ cursor: pointer;
258
+ border-radius: var(--ui-radius-sm);
259
+ transition: background-color var(--ui-motion-fast) var(--ui-motion-ease);
260
+ }
156
261
 
157
- .trigger:hover:not(:disabled) {
158
- background: var(--ui-surface-muted);
159
- }
160
- .trigger:focus-visible {
161
- outline: none;
162
- box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--ui-focus-ring) 45%, transparent);
163
- }
164
- .trigger:disabled {
165
- color: var(--ui-text-muted);
166
- cursor: not-allowed;
167
- }
262
+ .trigger:hover:not(:disabled) {
263
+ background: var(--ui-surface-muted);
264
+ }
265
+ .trigger:focus-visible {
266
+ outline: none;
267
+ box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--ui-focus-ring) 45%, transparent);
268
+ }
269
+ .trigger:disabled {
270
+ color: var(--ui-text-muted);
271
+ cursor: not-allowed;
272
+ }
168
273
 
169
- .chevron {
170
- inline-size: 0.5rem;
171
- block-size: 0.5rem;
172
- border-inline-end: 2px solid currentColor;
173
- border-block-end: 2px solid currentColor;
174
- transform: rotate(45deg) translate(-1px, -1px);
175
- transition: transform var(--ui-motion-fast) var(--ui-motion-ease);
176
- }
274
+ .chevron {
275
+ inline-size: 0.5rem;
276
+ block-size: 0.5rem;
277
+ border-inline-end: 2px solid currentColor;
278
+ border-block-end: 2px solid currentColor;
279
+ transform: rotate(45deg) translate(-1px, -1px);
280
+ transition: transform var(--ui-motion-fast) var(--ui-motion-ease);
281
+ }
177
282
 
178
- .panel {
179
- display: grid;
180
- grid-template-rows: 0fr;
181
- transition: grid-template-rows var(--ui-motion-fast) var(--ui-motion-ease-out, var(--ui-motion-ease));
182
- }
283
+ .panel {
284
+ display: grid;
285
+ grid-template-rows: 0fr;
286
+ transition: grid-template-rows var(--ui-motion-fast)
287
+ var(--ui-motion-ease-out, var(--ui-motion-ease));
288
+ }
183
289
 
184
- .panel-inner {
185
- min-block-size: 0;
186
- overflow: hidden;
187
- padding-inline: var(--ui-space-3);
188
- }
290
+ .panel-inner {
291
+ min-block-size: 0;
292
+ overflow: hidden;
293
+ padding-inline: var(--ui-space-3);
294
+ }
189
295
 
190
- [data-component~="ui-disclosure"][data-ui-disclosure-state~="internalOpen"] .panel {
191
- grid-template-rows: 1fr;
192
- }
193
- [data-component~="ui-disclosure"][data-ui-disclosure-state~="internalOpen"] .panel-inner {
194
- padding-block: 0 var(--ui-space-3);
195
- }
196
- [data-component~="ui-disclosure"][data-ui-disclosure-state~="internalOpen"] .chevron {
197
- transform: rotate(225deg) translate(-1px, -1px);
198
- }
296
+ [data-component~="ui-disclosure"][data-ui-disclosure-state~="internalOpen"] .panel {
297
+ grid-template-rows: 1fr;
298
+ }
299
+ [data-component~="ui-disclosure"][data-ui-disclosure-state~="internalOpen"] .panel-inner {
300
+ padding-block: 0 var(--ui-space-3);
301
+ }
302
+ [data-component~="ui-disclosure"][data-ui-disclosure-state~="internalOpen"] .chevron {
303
+ transform: rotate(225deg) translate(-1px, -1px);
304
+ }
199
305
 
200
- @media (prefers-reduced-motion: reduce) {
201
- .panel,
202
- .chevron {
203
- transition: none;
204
- }
205
- }
306
+ @media (prefers-reduced-motion: reduce) {
307
+ .panel,
308
+ .chevron {
309
+ transition: none;
310
+ }
311
+ }
206
312
 
207
- /* A component that sets its display still honours the hidden attribute on its root. */
208
- [data-component~="ui-disclosure"][hidden] {
209
- display: none;
210
- }
313
+ /* A component that sets its display still honours the hidden attribute on its root. */
314
+ [data-component~="ui-disclosure"][hidden] {
315
+ display: none;
316
+ }
211
317
  </style>
@@ -1,10 +1,10 @@
1
1
  type __VLS_Props = {
2
- actions?: boolean | null;
3
- disabled?: boolean | null;
4
- edit?: boolean | null;
5
- hint?: string | null;
6
- label?: string | null;
7
- value?: string | null;
2
+ actions?: boolean;
3
+ disabled?: boolean;
4
+ edit?: boolean;
5
+ hint?: string;
6
+ label?: string;
7
+ value?: string;
8
8
  };
9
9
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
10
10
  input: (detail: {
@@ -16,6 +16,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
16
16
  readonly previousValue: string;
17
17
  readonly trigger: "keyboard" | "pointer" | "programmatic";
18
18
  }) => any;
19
+ "update:value": (value: string) => any;
20
+ "update:edit": (value: boolean) => any;
19
21
  "edit-change": (detail: {
20
22
  readonly edit: boolean;
21
23
  readonly reason: "activate" | "commit" | "cancel" | "light-dismiss" | "escape" | "programmatic";
@@ -31,18 +33,20 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
31
33
  readonly previousValue: string;
32
34
  readonly trigger: "keyboard" | "pointer" | "programmatic";
33
35
  }) => any) | undefined;
36
+ "onUpdate:value"?: ((value: string) => any) | undefined;
37
+ "onUpdate:edit"?: ((value: boolean) => any) | undefined;
34
38
  "onEdit-change"?: ((detail: {
35
39
  readonly edit: boolean;
36
40
  readonly reason: "activate" | "commit" | "cancel" | "light-dismiss" | "escape" | "programmatic";
37
41
  readonly trigger: "keyboard" | "pointer" | "programmatic";
38
42
  }) => any) | undefined;
39
43
  }>, {
40
- label: string | null;
41
- disabled: boolean | null;
42
- value: string | null;
43
- actions: boolean | null;
44
- edit: boolean | null;
45
- hint: string | null;
44
+ label: string;
45
+ value: string;
46
+ disabled: boolean;
47
+ actions: boolean;
48
+ edit: boolean;
49
+ hint: string;
46
50
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
47
51
  declare const _default: typeof __VLS_export;
48
52
  export default _default;