@threadlabs/looma 0.5.0 → 0.5.2

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 (313) hide show
  1. package/README.md +1 -1
  2. package/components/shared/input-modality.d.ts +8 -0
  3. package/components/shared/input-modality.js +2 -0
  4. package/components/ui-button/ui-button.html +42 -1
  5. package/components/ui-combobox/ui-combobox.html +12 -4
  6. package/components/ui-dialog/ui-dialog.html +13 -0
  7. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.html +1 -1
  8. package/components/ui-editor-mention-menu/ui-editor-mention-menu.html +1 -1
  9. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +6 -2
  10. package/components/ui-editor-table-overlay/ui-editor-table-overlay.html +20 -4
  11. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +8 -4
  12. package/components/ui-form-field/ui-form-field.html +18 -7
  13. package/components/ui-icon/ui-icon.html +5 -1
  14. package/components/ui-icon-button/ui-icon-button.html +44 -1
  15. package/components/ui-popover/ui-popover.js +10 -2
  16. package/components/ui-search-shell/ui-search-shell.html +7 -0
  17. package/components/ui-search-shell/ui-search-shell.js +9 -0
  18. package/components/ui-tabs/ui-tabs.html +1 -1
  19. package/components/ui-toast-region/ui-toast-region.html +1 -1
  20. package/components/ui-tree-item/ui-tree-item.html +6 -1
  21. package/dist/index.d.ts +1 -1
  22. package/dist/index.js +2 -2
  23. package/package.json +2 -2
  24. package/styles/ui-affordance-scope.css +1 -1
  25. package/styles/ui-avatar-group.css +1 -1
  26. package/styles/ui-avatar.css +1 -1
  27. package/styles/ui-badge.css +1 -1
  28. package/styles/ui-button.css +42 -2
  29. package/styles/ui-callout.css +1 -1
  30. package/styles/ui-checkbox.css +1 -1
  31. package/styles/ui-cluster.css +1 -1
  32. package/styles/ui-combobox.css +1 -1
  33. package/styles/ui-container.css +1 -1
  34. package/styles/ui-context-menu.css +1 -1
  35. package/styles/ui-dialog.css +18 -1
  36. package/styles/ui-disclosure.css +1 -1
  37. package/styles/ui-editable.css +1 -1
  38. package/styles/ui-editor-insert-table-grid.css +1 -1
  39. package/styles/ui-editor-mention-menu.css +1 -1
  40. package/styles/ui-editor-slash-menu.css +1 -1
  41. package/styles/ui-editor-table-context-menu.css +1 -1
  42. package/styles/ui-editor-table-overlay.css +1 -1
  43. package/styles/ui-editor-table-toolbar.css +1 -1
  44. package/styles/ui-editor-toolbar.css +1 -1
  45. package/styles/ui-floating-action-button.css +1 -1
  46. package/styles/ui-form-field.css +24 -10
  47. package/styles/ui-grid.css +1 -1
  48. package/styles/ui-icon-button.css +52 -2
  49. package/styles/ui-icon.css +1 -1
  50. package/styles/ui-input.css +1 -1
  51. package/styles/ui-menu-item.css +1 -1
  52. package/styles/ui-menu.css +1 -1
  53. package/styles/ui-popover.css +1 -1
  54. package/styles/ui-radio-group.css +1 -1
  55. package/styles/ui-radio.css +1 -1
  56. package/styles/ui-reel.css +1 -1
  57. package/styles/ui-search-result-row.css +1 -1
  58. package/styles/ui-search-shell.css +11 -2
  59. package/styles/ui-select.css +1 -1
  60. package/styles/ui-separator.css +1 -1
  61. package/styles/ui-sidebar.css +1 -1
  62. package/styles/ui-stack.css +1 -1
  63. package/styles/ui-switch.css +1 -1
  64. package/styles/ui-switcher.css +1 -1
  65. package/styles/ui-tabs.css +1 -1
  66. package/styles/ui-textarea.css +1 -1
  67. package/styles/ui-toast-region.css +1 -1
  68. package/styles/ui-tooltip.css +1 -1
  69. package/styles/ui-top-bar.css +1 -1
  70. package/styles/ui-tree-item.css +10 -2
  71. package/styles/ui-tree.css +1 -1
  72. package/vanilla/UiAffordanceScope.d.ts +1 -1
  73. package/vanilla/UiAffordanceScope.js +2 -2
  74. package/vanilla/UiAvatar.d.ts +1 -1
  75. package/vanilla/UiAvatar.js +2 -2
  76. package/vanilla/UiAvatarGroup.d.ts +1 -1
  77. package/vanilla/UiAvatarGroup.js +2 -2
  78. package/vanilla/UiBadge.d.ts +1 -1
  79. package/vanilla/UiBadge.js +2 -2
  80. package/vanilla/UiButton.d.ts +3 -1
  81. package/vanilla/UiButton.js +3 -3
  82. package/vanilla/UiCallout.d.ts +1 -1
  83. package/vanilla/UiCallout.js +2 -2
  84. package/vanilla/UiCheckbox.d.ts +1 -1
  85. package/vanilla/UiCheckbox.js +2 -2
  86. package/vanilla/UiCluster.d.ts +1 -1
  87. package/vanilla/UiCluster.js +2 -2
  88. package/vanilla/UiCombobox.d.ts +1 -1
  89. package/vanilla/UiCombobox.js +3 -3
  90. package/vanilla/UiContainer.d.ts +1 -1
  91. package/vanilla/UiContainer.js +2 -2
  92. package/vanilla/UiContextMenu.d.ts +1 -1
  93. package/vanilla/UiContextMenu.js +2 -2
  94. package/vanilla/UiDialog.d.ts +1 -1
  95. package/vanilla/UiDialog.js +2 -2
  96. package/vanilla/UiDisclosure.d.ts +1 -1
  97. package/vanilla/UiDisclosure.js +2 -2
  98. package/vanilla/UiEditable.d.ts +1 -1
  99. package/vanilla/UiEditable.js +2 -2
  100. package/vanilla/UiEditorInsertTableGrid.d.ts +1 -1
  101. package/vanilla/UiEditorInsertTableGrid.js +3 -3
  102. package/vanilla/UiEditorMentionMenu.d.ts +1 -1
  103. package/vanilla/UiEditorMentionMenu.js +3 -3
  104. package/vanilla/UiEditorSlashMenu.d.ts +1 -1
  105. package/vanilla/UiEditorSlashMenu.js +2 -2
  106. package/vanilla/UiEditorTableContextMenu.d.ts +1 -1
  107. package/vanilla/UiEditorTableContextMenu.js +3 -3
  108. package/vanilla/UiEditorTableOverlay.d.ts +1 -1
  109. package/vanilla/UiEditorTableOverlay.js +3 -3
  110. package/vanilla/UiEditorTableToolbar.d.ts +1 -1
  111. package/vanilla/UiEditorTableToolbar.js +3 -3
  112. package/vanilla/UiEditorToolbar.d.ts +1 -1
  113. package/vanilla/UiEditorToolbar.js +2 -2
  114. package/vanilla/UiFloatingActionButton.d.ts +1 -1
  115. package/vanilla/UiFloatingActionButton.js +2 -2
  116. package/vanilla/UiFormField.d.ts +1 -1
  117. package/vanilla/UiFormField.js +15 -6
  118. package/vanilla/UiGrid.d.ts +1 -1
  119. package/vanilla/UiGrid.js +2 -2
  120. package/vanilla/UiIcon.d.ts +1 -1
  121. package/vanilla/UiIcon.js +3 -3
  122. package/vanilla/UiIconButton.d.ts +1 -1
  123. package/vanilla/UiIconButton.js +2 -2
  124. package/vanilla/UiInput.d.ts +1 -1
  125. package/vanilla/UiInput.js +2 -2
  126. package/vanilla/UiMenu.d.ts +1 -1
  127. package/vanilla/UiMenu.js +2 -2
  128. package/vanilla/UiMenuItem.d.ts +1 -1
  129. package/vanilla/UiMenuItem.js +2 -2
  130. package/vanilla/UiPopover.d.ts +1 -1
  131. package/vanilla/UiPopover.js +2 -2
  132. package/vanilla/UiRadio.d.ts +1 -1
  133. package/vanilla/UiRadio.js +2 -2
  134. package/vanilla/UiRadioGroup.d.ts +1 -1
  135. package/vanilla/UiRadioGroup.js +2 -2
  136. package/vanilla/UiReel.d.ts +1 -1
  137. package/vanilla/UiReel.js +2 -2
  138. package/vanilla/UiSearchResultRow.d.ts +1 -1
  139. package/vanilla/UiSearchResultRow.js +2 -2
  140. package/vanilla/UiSearchShell.d.ts +1 -1
  141. package/vanilla/UiSearchShell.js +2 -2
  142. package/vanilla/UiSelect.d.ts +1 -1
  143. package/vanilla/UiSelect.js +2 -2
  144. package/vanilla/UiSeparator.d.ts +1 -1
  145. package/vanilla/UiSeparator.js +2 -2
  146. package/vanilla/UiSidebar.d.ts +1 -1
  147. package/vanilla/UiSidebar.js +2 -2
  148. package/vanilla/UiStack.d.ts +1 -1
  149. package/vanilla/UiStack.js +2 -2
  150. package/vanilla/UiSwitch.d.ts +1 -1
  151. package/vanilla/UiSwitch.js +2 -2
  152. package/vanilla/UiSwitcher.d.ts +1 -1
  153. package/vanilla/UiSwitcher.js +2 -2
  154. package/vanilla/UiTabs.d.ts +1 -1
  155. package/vanilla/UiTabs.js +3 -3
  156. package/vanilla/UiTextarea.d.ts +1 -1
  157. package/vanilla/UiTextarea.js +2 -2
  158. package/vanilla/UiToastRegion.d.ts +1 -1
  159. package/vanilla/UiToastRegion.js +3 -3
  160. package/vanilla/UiTooltip.d.ts +1 -1
  161. package/vanilla/UiTooltip.js +2 -2
  162. package/vanilla/UiTopBar.d.ts +1 -1
  163. package/vanilla/UiTopBar.js +1 -1
  164. package/vanilla/UiTree.d.ts +1 -1
  165. package/vanilla/UiTree.js +2 -2
  166. package/vanilla/UiTreeItem.d.ts +1 -1
  167. package/vanilla/UiTreeItem.js +2 -2
  168. package/vue/UiAffordanceScope.d.ts +2 -2
  169. package/vue/UiAffordanceScope.vue +92 -73
  170. package/vue/UiAvatar.d.ts +7 -7
  171. package/vue/UiAvatar.vue +145 -105
  172. package/vue/UiAvatarGroup.d.ts +4 -4
  173. package/vue/UiAvatarGroup.vue +134 -118
  174. package/vue/UiBadge.d.ts +4 -4
  175. package/vue/UiBadge.vue +113 -114
  176. package/vue/UiButton.d.ts +10 -6
  177. package/vue/UiButton.vue +289 -220
  178. package/vue/UiCallout.d.ts +2 -2
  179. package/vue/UiCallout.vue +154 -87
  180. package/vue/UiCheckbox.d.ts +14 -10
  181. package/vue/UiCheckbox.vue +228 -162
  182. package/vue/UiCluster.d.ts +2 -2
  183. package/vue/UiCluster.vue +53 -60
  184. package/vue/UiCombobox.d.ts +36 -32
  185. package/vue/UiCombobox.vue +1005 -416
  186. package/vue/UiContainer.d.ts +2 -2
  187. package/vue/UiContainer.vue +48 -51
  188. package/vue/UiContextMenu.d.ts +6 -4
  189. package/vue/UiContextMenu.vue +205 -116
  190. package/vue/UiDialog.d.ts +11 -9
  191. package/vue/UiDialog.vue +287 -212
  192. package/vue/UiDisclosure.d.ts +8 -6
  193. package/vue/UiDisclosure.vue +248 -159
  194. package/vue/UiEditable.d.ts +16 -12
  195. package/vue/UiEditable.vue +325 -205
  196. package/vue/UiEditorInsertTableGrid.d.ts +8 -8
  197. package/vue/UiEditorInsertTableGrid.vue +216 -157
  198. package/vue/UiEditorMentionMenu.d.ts +9 -9
  199. package/vue/UiEditorMentionMenu.vue +265 -222
  200. package/vue/UiEditorSlashMenu.d.ts +7 -7
  201. package/vue/UiEditorSlashMenu.vue +286 -240
  202. package/vue/UiEditorTableContextMenu.d.ts +5 -5
  203. package/vue/UiEditorTableContextMenu.vue +306 -193
  204. package/vue/UiEditorTableOverlay.d.ts +2 -2
  205. package/vue/UiEditorTableOverlay.vue +609 -369
  206. package/vue/UiEditorTableToolbar.d.ts +7 -7
  207. package/vue/UiEditorTableToolbar.vue +443 -268
  208. package/vue/UiEditorToolbar.d.ts +2 -2
  209. package/vue/UiEditorToolbar.vue +134 -121
  210. package/vue/UiFloatingActionButton.d.ts +6 -6
  211. package/vue/UiFloatingActionButton.vue +100 -99
  212. package/vue/UiFormField.d.ts +6 -6
  213. package/vue/UiFormField.vue +112 -80
  214. package/vue/UiGrid.d.ts +2 -2
  215. package/vue/UiGrid.vue +51 -57
  216. package/vue/UiIcon.d.ts +2 -2
  217. package/vue/UiIcon.vue +118 -89
  218. package/vue/UiIconButton.d.ts +11 -11
  219. package/vue/UiIconButton.vue +285 -206
  220. package/vue/UiInput.d.ts +9 -9
  221. package/vue/UiInput.vue +153 -127
  222. package/vue/UiMenu.d.ts +8 -6
  223. package/vue/UiMenu.vue +217 -143
  224. package/vue/UiMenuItem.d.ts +4 -4
  225. package/vue/UiMenuItem.vue +52 -46
  226. package/vue/UiPopover.d.ts +8 -6
  227. package/vue/UiPopover.vue +197 -137
  228. package/vue/UiRadio.d.ts +14 -10
  229. package/vue/UiRadio.vue +183 -117
  230. package/vue/UiRadioGroup.d.ts +14 -12
  231. package/vue/UiRadioGroup.vue +172 -111
  232. package/vue/UiReel.d.ts +3 -3
  233. package/vue/UiReel.vue +77 -77
  234. package/vue/UiSearchResultRow.d.ts +4 -4
  235. package/vue/UiSearchResultRow.vue +124 -115
  236. package/vue/UiSearchShell.d.ts +10 -8
  237. package/vue/UiSearchShell.vue +245 -176
  238. package/vue/UiSelect.d.ts +9 -9
  239. package/vue/UiSelect.vue +162 -134
  240. package/vue/UiSeparator.d.ts +2 -2
  241. package/vue/UiSeparator.vue +22 -27
  242. package/vue/UiSidebar.d.ts +20 -18
  243. package/vue/UiSidebar.vue +312 -224
  244. package/vue/UiStack.d.ts +3 -3
  245. package/vue/UiStack.vue +64 -70
  246. package/vue/UiSwitch.d.ts +12 -8
  247. package/vue/UiSwitch.vue +218 -150
  248. package/vue/UiSwitcher.d.ts +3 -3
  249. package/vue/UiSwitcher.vue +73 -75
  250. package/vue/UiTabs.d.ts +10 -8
  251. package/vue/UiTabs.vue +251 -210
  252. package/vue/UiTextarea.d.ts +11 -11
  253. package/vue/UiTextarea.vue +155 -128
  254. package/vue/UiToastRegion.d.ts +10 -8
  255. package/vue/UiToastRegion.vue +261 -198
  256. package/vue/UiTooltip.d.ts +14 -12
  257. package/vue/UiTooltip.vue +241 -177
  258. package/vue/UiTopBar.vue +51 -42
  259. package/vue/UiTree.d.ts +8 -6
  260. package/vue/UiTree.vue +157 -70
  261. package/vue/UiTreeItem.d.ts +24 -22
  262. package/vue/UiTreeItem.vue +456 -339
  263. package/vue/chunks/UiAffordanceScope.js +9 -16
  264. package/vue/chunks/UiAvatar.js +23 -29
  265. package/vue/chunks/UiAvatarGroup.js +16 -39
  266. package/vue/chunks/UiBadge.js +3 -12
  267. package/vue/chunks/UiButton.js +15 -18
  268. package/vue/chunks/UiCallout.js +8 -17
  269. package/vue/chunks/UiCheckbox.js +37 -40
  270. package/vue/chunks/UiCluster.js +3 -12
  271. package/vue/chunks/UiCombobox.js +224 -266
  272. package/vue/chunks/UiContainer.js +3 -12
  273. package/vue/chunks/UiContextMenu.js +39 -34
  274. package/vue/chunks/UiDialog.js +36 -39
  275. package/vue/chunks/UiDisclosure.js +43 -48
  276. package/vue/chunks/UiEditable.js +55 -57
  277. package/vue/chunks/UiEditorInsertTableGrid.js +55 -73
  278. package/vue/chunks/UiEditorMentionMenu.js +40 -81
  279. package/vue/chunks/UiEditorSlashMenu.js +28 -52
  280. package/vue/chunks/UiEditorTableContextMenu.js +32 -56
  281. package/vue/chunks/UiEditorTableOverlay.js +58 -82
  282. package/vue/chunks/UiEditorTableToolbar.js +61 -85
  283. package/vue/chunks/UiEditorToolbar.js +4 -13
  284. package/vue/chunks/UiFloatingActionButton.js +7 -21
  285. package/vue/chunks/UiFormField.js +15 -12
  286. package/vue/chunks/UiGrid.js +3 -12
  287. package/vue/chunks/UiIcon.js +20 -43
  288. package/vue/chunks/UiIconButton.js +16 -28
  289. package/vue/chunks/UiInput.js +20 -25
  290. package/vue/chunks/UiMenu.js +29 -33
  291. package/vue/chunks/UiMenuItem.js +4 -10
  292. package/vue/chunks/UiPopover.js +28 -29
  293. package/vue/chunks/UiRadio.js +36 -39
  294. package/vue/chunks/UiRadioGroup.js +30 -34
  295. package/vue/chunks/UiReel.js +6 -15
  296. package/vue/chunks/UiSearchResultRow.js +6 -19
  297. package/vue/chunks/UiSearchShell.js +25 -28
  298. package/vue/chunks/UiSelect.js +20 -23
  299. package/vue/chunks/UiSeparator.js +2 -8
  300. package/vue/chunks/UiSidebar.js +39 -44
  301. package/vue/chunks/UiStack.js +6 -15
  302. package/vue/chunks/UiSwitch.js +35 -38
  303. package/vue/chunks/UiSwitcher.js +6 -15
  304. package/vue/chunks/UiTabs.js +47 -85
  305. package/vue/chunks/UiTextarea.js +21 -26
  306. package/vue/chunks/UiToastRegion.js +38 -72
  307. package/vue/chunks/UiTooltip.js +34 -35
  308. package/vue/chunks/UiTopBar.js +1 -1
  309. package/vue/chunks/UiTree.js +20 -15
  310. package/vue/chunks/UiTreeItem.js +85 -102
  311. package/vue/components.css +3994 -3764
  312. package/vue/index.d.ts +1 -0
  313. package/vue/index.js +2 -1
package/vue/UiMenu.vue CHANGED
@@ -1,194 +1,268 @@
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-menu/ui-menu.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
- };
11
-
12
- const props = withDefaults(defineProps<{
13
- for?: string | null;
14
- open?: boolean | null;
15
- placement?: string | null;
16
- }>(), {
17
- for: "",
18
- open: false,
19
- placement: "bottom-start",
20
- });
3
+ import { computed, onBeforeUnmount, onMounted, ref, shallowRef, watchEffect } from 'vue'
4
+ import * as controllerModule from '../components/ui-menu/ui-menu.js'
5
+
6
+ defineOptions({ inheritAttrs: false })
7
+
8
+ const props = withDefaults(
9
+ defineProps<{
10
+ for?: string
11
+ open?: boolean
12
+ placement?: string
13
+ }>(),
14
+ {
15
+ for: '',
16
+ open: false,
17
+ placement: 'bottom-start',
18
+ },
19
+ )
21
20
  const emit = defineEmits<{
22
- "select": [detail: { readonly value: string; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
23
- "open": [detail: { readonly open: boolean; readonly reason: "action" | "programmatic"; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
24
- "close": [detail: { readonly open: boolean; readonly reason: "action" | "programmatic" | "light-dismiss" | "escape"; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
25
- }>();
26
- const root = ref<HTMLElement | null>(null);
27
- const refs: Record<string, Element | undefined> = {};
28
- const state_internalOpen = ref<any>(false);
21
+ 'update:open': [value: boolean]
22
+ select: [
23
+ detail: { readonly value: string; readonly trigger: 'keyboard' | 'pointer' | 'programmatic' },
24
+ ]
25
+ open: [
26
+ detail: {
27
+ readonly open: boolean
28
+ readonly reason: 'action' | 'programmatic'
29
+ readonly trigger: 'keyboard' | 'pointer' | 'programmatic'
30
+ },
31
+ ]
32
+ close: [
33
+ detail: {
34
+ readonly open: boolean
35
+ readonly reason: 'action' | 'programmatic' | 'light-dismiss' | 'escape'
36
+ readonly trigger: 'keyboard' | 'pointer' | 'programmatic'
37
+ },
38
+ ]
39
+ }>()
40
+
41
+ const root = ref<HTMLElement | null>(null)
42
+ const internalOpen = ref(false)
43
+
44
+ /** The values the styles' :host-state() rules test. */
45
+ const hostState = computed(() =>
46
+ [
47
+ internalOpen.value && 'internalOpen',
48
+ ].filter(Boolean).join(' ')
49
+ )
29
50
 
30
51
  /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
31
- const dispatch = (name: string, detail?: unknown): boolean => {
32
- const declared = {"select":{"bubbles":true,"composed":true,"cancelable":false},"open":{"bubbles":true,"composed":true,"cancelable":false},"close":{"bubbles":true,"composed":true,"cancelable":false}} as Record<string, EventInit | undefined>;
52
+ function dispatch(name: string, detail?: unknown): boolean {
53
+ const declared: Record<string, EventInit | undefined> = {
54
+ select: { bubbles: true, composed: true, cancelable: false },
55
+ open: { bubbles: true, composed: true, cancelable: false },
56
+ close: { bubbles: true, composed: true, cancelable: false },
57
+ }
33
58
  const checks: Record<string, (detail: unknown) => boolean> = {
34
- "select": (detail: unknown) => (detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof (detail as Record<string, unknown>)["value"] === "string" && ((detail as Record<string, unknown>)["trigger"] === "keyboard" || (detail as Record<string, unknown>)["trigger"] === "pointer" || (detail as Record<string, unknown>)["trigger"] === "programmatic") && Object.keys(detail as object).every((key) => ["value","trigger"].includes(key))),
35
- "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>)["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))),
36
- "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))),
37
- };
59
+ select: (detail) =>
60
+ detail !== null && typeof detail === 'object' && !Array.isArray(detail)
61
+ && typeof (detail as Record<string, unknown>)['value'] === 'string'
62
+ && ((detail as Record<string, unknown>)['trigger'] === 'keyboard'
63
+ || (detail as Record<string, unknown>)['trigger'] === 'pointer'
64
+ || (detail as Record<string, unknown>)['trigger'] === 'programmatic')
65
+ && Object.keys(detail as object).every((key) => ['value', 'trigger'].includes(key)),
66
+ open: (detail) =>
67
+ detail !== null && typeof detail === 'object' && !Array.isArray(detail)
68
+ && typeof (detail as Record<string, unknown>)['open'] === 'boolean'
69
+ && ((detail as Record<string, unknown>)['reason'] === 'action'
70
+ || (detail as Record<string, unknown>)['reason'] === 'programmatic')
71
+ && ((detail as Record<string, unknown>)['trigger'] === 'keyboard'
72
+ || (detail as Record<string, unknown>)['trigger'] === 'pointer'
73
+ || (detail as Record<string, unknown>)['trigger'] === 'programmatic')
74
+ && Object.keys(detail as object).every((key) => ['open', 'reason', 'trigger'].includes(key)),
75
+ close: (detail) =>
76
+ detail !== null && typeof detail === 'object' && !Array.isArray(detail)
77
+ && typeof (detail as Record<string, unknown>)['open'] === 'boolean'
78
+ && ((detail as Record<string, unknown>)['reason'] === 'action'
79
+ || (detail as Record<string, unknown>)['reason'] === 'programmatic'
80
+ || (detail as Record<string, unknown>)['reason'] === 'light-dismiss'
81
+ || (detail as Record<string, unknown>)['reason'] === 'escape')
82
+ && ((detail as Record<string, unknown>)['trigger'] === 'keyboard'
83
+ || (detail as Record<string, unknown>)['trigger'] === 'pointer'
84
+ || (detail as Record<string, unknown>)['trigger'] === 'programmatic')
85
+ && Object.keys(detail as object).every((key) => ['open', 'reason', 'trigger'].includes(key)),
86
+ }
38
87
  if (detail !== undefined && checks[name] !== undefined && !checks[name]!(detail)) {
39
- throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
88
+ throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`)
40
89
  }
41
- (emit as (name: string, detail: unknown) => void)(name, detail);
42
- return root.value?.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, ...declared[name], detail })) ?? true;
43
- };
44
-
45
- /** The resolved values the styles' :host-state() rules test. */
46
- const hostState = computed(() => (["internalOpen"] as const).flatMap((name) => {
47
- const value = read(name);
48
- const tokens: string[] = hn.t(value) ? [name] : [];
49
- if (typeof value === "string" || typeof value === "number") tokens.push(`${name}=${encodeURIComponent(String(value))}`);
50
- return tokens;
51
- }).join(" "));
90
+ const emitEvent = emit as (name: string, detail: unknown) => void
91
+ emitEvent(name, detail)
92
+ if (detail !== null && typeof detail === 'object' && 'open' in detail) {
93
+ emitEvent('update:open', (detail as Record<string, unknown>)['open'])
94
+ }
95
+ return root.value?.dispatchEvent(
96
+ new CustomEvent(name, { bubbles: true, composed: true, ...declared[name], detail }),
97
+ ) ?? true
98
+ }
52
99
 
53
100
  function read(name: string): unknown {
54
- if (name === "internalOpen") return state_internalOpen.value;
55
- return (props as Record<string, unknown>)[name];
101
+ if (name === 'internalOpen') return internalOpen.value
102
+ return (props as Record<string, unknown>)[name]
56
103
  }
57
104
 
58
105
  function write(name: string, value: unknown): boolean {
59
- if (name === "internalOpen") { state_internalOpen.value = value; return true; }
60
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
106
+ if (name === 'internalOpen') {
107
+ internalOpen.value = value as never
108
+ return true
109
+ }
110
+ throw new TypeError(`Only declared state is writable; \`${name}\` is not.`)
61
111
  }
62
112
 
63
- const stops: Array<() => void> = [];
113
+ const stops: Array<() => void> = []
64
114
  const host = {
65
- get element(): Element { return root.value as Element; },
115
+ get element(): Element {
116
+ return root.value as Element
117
+ },
66
118
  state: new Proxy({} as Record<string, unknown>, {
67
- get: (_target, name) => typeof name === "string" ? read(name) : undefined,
68
- set: (_target, name, value) => typeof name === "string" && write(name, value),
119
+ get: (_target, name) => typeof name === 'string' ? read(name) : undefined,
120
+ set: (_target, name, value) => typeof name === 'string' && write(name, value),
69
121
  }),
70
- refs: refs as Readonly<Record<string, Element>>,
122
+ refs: {} as Readonly<Record<string, Element>>,
71
123
  elements: new Proxy({} as Record<string, Element | RadioNodeList | undefined>, {
72
124
  get: (_target, name) => {
73
- if (typeof name !== "string" || root.value === null) return undefined;
74
- const form = root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form");
75
- return form?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined;
125
+ if (typeof name !== 'string' || root.value === null) return undefined
126
+ const form = root.value instanceof HTMLFormElement
127
+ ? root.value
128
+ : root.value.querySelector('form')
129
+ return form?.elements.namedItem(name)
130
+ ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined
76
131
  },
77
132
  }),
78
133
  signal<T>(initialValue: T) {
79
- const value = shallowRef(initialValue);
134
+ const value = shallowRef(initialValue)
80
135
  return {
81
136
  get: (): T => value.value,
82
- set: (next: T): void => { if (!Object.is(value.value, next)) value.value = next; },
83
- update: (next: (current: T) => T): void => { const updated = next(value.value); if (!Object.is(value.value, updated)) value.value = updated; },
84
- };
137
+ set: (next: T): void => {
138
+ if (!Object.is(value.value, next)) value.value = next
139
+ },
140
+ update: (next: (current: T) => T): void => {
141
+ const updated = next(value.value)
142
+ if (!Object.is(value.value, updated)) value.value = updated
143
+ },
144
+ }
85
145
  },
86
146
  computed<T>(compute: () => T) {
87
- const value = computed(compute);
88
- return { get: (): T => value.value };
147
+ const value = computed(compute)
148
+ return { get: (): T => value.value }
89
149
  },
90
150
  effect(run: () => void | (() => void)): () => void {
91
151
  const stop = watchEffect((onCleanup) => {
92
- const cleanup = run();
93
- if (typeof cleanup === "function") onCleanup(cleanup);
94
- }, { flush: "post" });
95
- stops.push(stop);
96
- return stop;
152
+ const cleanup = run()
153
+ if (typeof cleanup === 'function') onCleanup(cleanup)
154
+ }, { flush: 'post' })
155
+ stops.push(stop)
156
+ return stop
97
157
  },
98
158
  on(event: string, listener: EventListener): () => void {
99
- const element = root.value;
100
- element?.addEventListener(event, listener);
101
- const off = (): void => element?.removeEventListener(event, listener);
102
- stops.push(off);
103
- return off;
159
+ const element = root.value
160
+ element?.addEventListener(event, listener)
161
+ const off = (): void => element?.removeEventListener(event, listener)
162
+ stops.push(off)
163
+ return off
104
164
  },
105
165
  dispatch,
106
- };
166
+ }
107
167
 
108
- let cleanup: void | (() => void);
109
- let ready: Promise<void> | undefined;
168
+ let cleanup: void | (() => void)
169
+ let ready: Promise<void> | undefined
110
170
  onMounted(() => {
111
- ready = Promise.resolve(controllerModule.default(host as never)).then((result) => { cleanup = result; });
112
- });
171
+ ready = Promise.resolve(controllerModule.default(host as never)).then((result) => {
172
+ cleanup = result
173
+ })
174
+ })
113
175
  onBeforeUnmount(() => {
114
- for (const stop of stops.splice(0)) stop();
115
- if (typeof cleanup === "function") cleanup();
116
- });
176
+ for (const stop of stops.splice(0)) stop()
177
+ if (typeof cleanup === 'function') cleanup()
178
+ })
117
179
  </script>
118
180
 
119
181
  <template>
120
- <div data-component="ui-menu" role="menu" aria-orientation="vertical" v-bind="$attrs" :data-ui-menu-state="hostState || undefined" ref="root"><div class="surface"><slot></slot></div></div>
182
+ <div
183
+ data-component="ui-menu"
184
+ role="menu"
185
+ aria-orientation="vertical"
186
+ v-bind="$attrs"
187
+ :data-ui-menu-state="hostState || undefined"
188
+ ref="root"
189
+ >
190
+ <div class="surface"><slot /></div>
191
+ </div>
121
192
  </template>
122
193
 
123
194
  <style scoped>
124
195
  [data-component~="ui-menu"] {
125
- display: flex;
126
- flex-direction: column;
127
- box-sizing: border-box;
128
- inline-size: max-content;
129
- min-inline-size: min(12rem, calc(100vw - var(--ui-menu-viewport-gap, var(--ui-space-2, 0.5rem)) * 2));
130
- max-inline-size: calc(100vw - var(--ui-menu-viewport-gap, var(--ui-space-2, 0.5rem)) * 2);
131
- padding: 0;
132
- border: 0;
133
- outline: 0;
134
- border-radius: 0;
135
- background: transparent;
136
- box-shadow: none;
137
- overflow: visible;
138
- }
196
+ display: flex;
197
+ flex-direction: column;
198
+ box-sizing: border-box;
199
+ inline-size: max-content;
200
+ min-inline-size: min(
201
+ 12rem,
202
+ calc(100vw - var(--ui-menu-viewport-gap, var(--ui-space-2, 0.5rem)) * 2)
203
+ );
204
+ max-inline-size: calc(100vw - var(--ui-menu-viewport-gap, var(--ui-space-2, 0.5rem)) * 2);
205
+ padding: 0;
206
+ border: 0;
207
+ outline: 0;
208
+ border-radius: 0;
209
+ background: transparent;
210
+ box-shadow: none;
211
+ overflow: visible;
212
+ }
139
213
 
140
- .surface {
141
- display: flex;
142
- flex-direction: column;
143
- box-sizing: border-box;
144
- max-inline-size: inherit;
145
- padding: var(--ui-space-1);
146
- background: var(--ui-surface-elevated);
147
- border: 1px solid var(--ui-border-default);
148
- border-radius: var(--ui-radius-3);
149
- box-shadow: var(--ui-elevation-overlay, var(--ui-shadow-lg));
150
- max-block-size: inherit;
151
- overflow: auto;
152
- }
214
+ .surface {
215
+ display: flex;
216
+ flex-direction: column;
217
+ box-sizing: border-box;
218
+ max-inline-size: inherit;
219
+ padding: var(--ui-space-1);
220
+ background: var(--ui-surface-elevated);
221
+ border: 1px solid var(--ui-border-default);
222
+ border-radius: var(--ui-radius-3);
223
+ box-shadow: var(--ui-elevation-overlay, var(--ui-shadow-lg));
224
+ max-block-size: inherit;
225
+ overflow: auto;
226
+ }
153
227
 
154
- [data-component~="ui-menu"]:not([data-component~="ui-menu"][data-ui-menu-state~="internalOpen"]) {
155
- display: none;
156
- }
228
+ [data-component~="ui-menu"]:not([data-component~="ui-menu"][data-ui-menu-state~="internalOpen"]) {
229
+ display: none;
230
+ }
157
231
 
158
- [data-component~="ui-menu"][popover] {
159
- position: fixed;
160
- inset: auto;
161
- margin: 0;
162
- overflow: visible;
163
- max-block-size: calc(100dvh - var(--ui-menu-viewport-gap, var(--ui-space-2, 0.5rem)) * 2);
164
- opacity: 0;
165
- transform: translateY(-4px) scale(0.99);
166
- transition:
167
- opacity var(--ui-motion-fast) var(--ui-motion-ease),
168
- transform var(--ui-motion-fast) var(--ui-motion-ease),
169
- display var(--ui-motion-fast) allow-discrete,
170
- overlay var(--ui-motion-fast) allow-discrete;
171
- }
232
+ [data-component~="ui-menu"][popover] {
233
+ position: fixed;
234
+ inset: auto;
235
+ margin: 0;
236
+ overflow: visible;
237
+ max-block-size: calc(100dvh - var(--ui-menu-viewport-gap, var(--ui-space-2, 0.5rem)) * 2);
238
+ opacity: 0;
239
+ transform: translateY(-4px) scale(0.99);
240
+ transition:
241
+ opacity var(--ui-motion-fast) var(--ui-motion-ease),
242
+ transform var(--ui-motion-fast) var(--ui-motion-ease),
243
+ display var(--ui-motion-fast) allow-discrete,
244
+ overlay var(--ui-motion-fast) allow-discrete;
245
+ }
172
246
 
173
- [data-component~="ui-menu"][popover]:popover-open {
174
- opacity: 1;
175
- transform: translateY(0) scale(1);
176
- }
247
+ [data-component~="ui-menu"][popover]:popover-open {
248
+ opacity: 1;
249
+ transform: translateY(0) scale(1);
250
+ }
177
251
 
178
- @starting-style {
179
- [data-component~="ui-menu"][popover]:popover-open {
180
- opacity: 0;
181
- transform: translateY(-4px) scale(0.99);
182
- }
183
- }
252
+ @starting-style {
253
+ [data-component~="ui-menu"][popover]:popover-open {
254
+ opacity: 0;
255
+ transform: translateY(-4px) scale(0.99);
256
+ }
257
+ }
184
258
 
185
- [data-component~="ui-menu"][hidden] {
186
- display: none;
187
- }
259
+ [data-component~="ui-menu"][hidden] {
260
+ display: none;
261
+ }
188
262
 
189
- @media (prefers-reduced-motion: reduce) {
190
- [data-component~="ui-menu"][popover] {
191
- transition: none;
192
- }
193
- }
263
+ @media (prefers-reduced-motion: reduce) {
264
+ [data-component~="ui-menu"][popover] {
265
+ transition: none;
266
+ }
267
+ }
194
268
  </style>
@@ -1,14 +1,14 @@
1
1
  type __VLS_Props = {
2
- disabled?: boolean | null;
3
- value?: string | null;
2
+ disabled?: boolean;
3
+ value?: string;
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
- disabled: boolean | null;
11
- value: string | null;
10
+ value: string;
11
+ disabled: boolean;
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;
@@ -1,55 +1,61 @@
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
-
4
- defineOptions({ inheritAttrs: false });
5
-
6
- const hn = {
7
- text: (v: unknown): string => v === undefined || v === null ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? "" : String(v),
8
- 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),
9
- enumerated: (v: unknown): any => typeof v === "boolean" ? String(v) : hn.attr(v),
10
- };
11
-
12
- const props = withDefaults(defineProps<{
13
- disabled?: boolean | null;
14
- value?: string | null;
15
- }>(), {
16
- disabled: false,
17
- value: "",
18
- });
19
-
3
+ defineOptions({ inheritAttrs: false })
4
+
5
+ withDefaults(
6
+ defineProps<{
7
+ disabled?: boolean
8
+ value?: string
9
+ }>(),
10
+ {
11
+ disabled: false,
12
+ value: '',
13
+ },
14
+ )
20
15
  </script>
21
16
 
22
17
  <template>
23
- <div data-component="ui-menu-item" role="menuitem" tabindex="-1" v-bind="$attrs" :aria-disabled="hn.enumerated(props.disabled)" :data-value="hn.attr(props.value)"><slot></slot></div>
18
+ <div
19
+ data-component="ui-menu-item"
20
+ role="menuitem"
21
+ tabindex="-1"
22
+ v-bind="$attrs"
23
+ :aria-disabled="disabled"
24
+ :data-value="value"
25
+ >
26
+ <slot />
27
+ </div>
24
28
  </template>
25
29
 
26
30
  <style scoped>
27
31
  [data-component~="ui-menu-item"] {
28
- display: block;
29
- box-sizing: border-box;
30
- width: 100%;
31
- padding: var(--ui-space-2) var(--ui-space-3);
32
- text-align: left;
33
- border-radius: var(--ui-radius-2);
34
- color: var(--ui-text-primary);
35
- font-size: var(--ui-font-size-md);
36
- font-weight: var(--ui-font-medium, 500);
37
- cursor: pointer;
38
- outline: none;
39
- transition: background-color var(--ui-motion-fast) var(--ui-motion-ease), color var(--ui-motion-fast) var(--ui-motion-ease);
40
- }
41
-
42
- [data-component~="ui-menu-item"]:is(:hover, :focus-visible):not([aria-disabled="true"]) {
43
- background: var(--ui-surface-subtle);
44
- }
45
-
46
- [data-component~="ui-menu-item"][aria-disabled="true"] {
47
- opacity: 0.6;
48
- cursor: not-allowed;
49
- }
50
-
51
- /* A component that sets its display still honours the hidden attribute on its root. */
52
- [data-component~="ui-menu-item"][hidden] {
53
- display: none;
54
- }
32
+ display: block;
33
+ box-sizing: border-box;
34
+ width: 100%;
35
+ padding: var(--ui-space-2) var(--ui-space-3);
36
+ text-align: left;
37
+ border-radius: var(--ui-radius-2);
38
+ color: var(--ui-text-primary);
39
+ font-size: var(--ui-font-size-md);
40
+ font-weight: var(--ui-font-medium, 500);
41
+ cursor: pointer;
42
+ outline: none;
43
+ transition:
44
+ background-color var(--ui-motion-fast) var(--ui-motion-ease),
45
+ color var(--ui-motion-fast) var(--ui-motion-ease);
46
+ }
47
+
48
+ [data-component~="ui-menu-item"]:is(:hover, :focus-visible):not([aria-disabled="true"]) {
49
+ background: var(--ui-surface-subtle);
50
+ }
51
+
52
+ [data-component~="ui-menu-item"][aria-disabled="true"] {
53
+ opacity: 0.6;
54
+ cursor: not-allowed;
55
+ }
56
+
57
+ /* A component that sets its display still honours the hidden attribute on its root. */
58
+ [data-component~="ui-menu-item"][hidden] {
59
+ display: none;
60
+ }
55
61
  </style>
@@ -1,7 +1,7 @@
1
1
  type __VLS_Props = {
2
- for?: string | null;
3
- open?: boolean | null;
4
- placement?: string | null;
2
+ for?: string;
3
+ open?: boolean;
4
+ placement?: string;
5
5
  };
6
6
  declare var __VLS_1: {};
7
7
  type __VLS_Slots = {} & {
@@ -18,6 +18,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
18
18
  readonly reason: "action" | "programmatic" | "light-dismiss" | "escape";
19
19
  readonly trigger: "keyboard" | "pointer" | "programmatic";
20
20
  }) => any;
21
+ "update:open": (value: boolean) => any;
21
22
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
22
23
  onClose?: ((detail: {
23
24
  readonly open: boolean;
@@ -29,10 +30,11 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
29
30
  readonly reason: "action" | "programmatic" | "light-dismiss" | "escape";
30
31
  readonly trigger: "keyboard" | "pointer" | "programmatic";
31
32
  }) => any) | undefined;
33
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
32
34
  }>, {
33
- for: string | null;
34
- open: boolean | null;
35
- placement: string | null;
35
+ for: string;
36
+ open: boolean;
37
+ placement: string;
36
38
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
37
39
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
38
40
  declare const _default: typeof __VLS_export;