@threadlabs/looma 0.5.1 → 0.6.0-rc.1

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