@threadlabs/looma 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/README.md +43 -12
  2. package/components/shared/editor.js +69 -0
  3. package/components/shared/input-modality.js +20 -0
  4. package/components/shared/overlay.js +281 -0
  5. package/components/shared/trigger.js +17 -0
  6. package/components/ui-affordance-scope/ui-affordance-scope.html +22 -0
  7. package/components/ui-affordance-scope/ui-affordance-scope.js +76 -0
  8. package/components/ui-avatar/ui-avatar.html +59 -0
  9. package/components/ui-avatar/ui-avatar.js +47 -0
  10. package/components/ui-avatar-group/ui-avatar-group.html +62 -0
  11. package/components/ui-avatar-group/ui-avatar-group.js +27 -0
  12. package/components/ui-badge/ui-badge.html +94 -0
  13. package/components/ui-button/ui-button.html +198 -0
  14. package/components/ui-callout/ui-callout.html +104 -0
  15. package/components/ui-checkbox/ui-checkbox.html +107 -0
  16. package/components/ui-checkbox/ui-checkbox.js +24 -0
  17. package/components/ui-cluster/ui-cluster.html +49 -0
  18. package/components/ui-combobox/ui-combobox.html +377 -0
  19. package/components/ui-combobox/ui-combobox.js +432 -0
  20. package/components/ui-container/ui-container.html +39 -0
  21. package/components/ui-context-menu/ui-context-menu.html +75 -0
  22. package/components/ui-context-menu/ui-context-menu.js +143 -0
  23. package/components/ui-dialog/ui-dialog.html +178 -0
  24. package/components/ui-dialog/ui-dialog.js +105 -0
  25. package/components/ui-disclosure/ui-disclosure.html +109 -0
  26. package/components/ui-disclosure/ui-disclosure.js +28 -0
  27. package/components/ui-editable/ui-editable.html +163 -0
  28. package/components/ui-editable/ui-editable.js +113 -0
  29. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.html +97 -0
  30. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.js +71 -0
  31. package/components/ui-editor-mention-menu/ui-editor-mention-menu.html +157 -0
  32. package/components/ui-editor-mention-menu/ui-editor-mention-menu.js +50 -0
  33. package/components/ui-editor-slash-menu/ui-editor-slash-menu.html +197 -0
  34. package/components/ui-editor-slash-menu/ui-editor-slash-menu.js +44 -0
  35. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +164 -0
  36. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.js +75 -0
  37. package/components/ui-editor-table-overlay/ui-editor-table-overlay.html +422 -0
  38. package/components/ui-editor-table-overlay/ui-editor-table-overlay.js +119 -0
  39. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +271 -0
  40. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.js +54 -0
  41. package/components/ui-editor-toolbar/ui-editor-toolbar.html +110 -0
  42. package/components/ui-floating-action-button/ui-floating-action-button.html +83 -0
  43. package/components/ui-form-field/ui-form-field.html +45 -0
  44. package/components/ui-form-field/ui-form-field.js +71 -0
  45. package/components/ui-grid/ui-grid.html +46 -0
  46. package/components/ui-icon/ui-icon.html +34 -0
  47. package/components/ui-icon/ui-icon.js +8 -0
  48. package/components/ui-icon-button/ui-icon-button.html +167 -0
  49. package/components/ui-icon-button/ui-icon-button.js +7 -0
  50. package/components/ui-input/ui-input.html +81 -0
  51. package/components/ui-input/ui-input.js +7 -0
  52. package/components/ui-menu/ui-menu.html +87 -0
  53. package/components/ui-menu/ui-menu.js +114 -0
  54. package/components/ui-menu-item/ui-menu-item.html +37 -0
  55. package/components/ui-popover/ui-popover.html +85 -0
  56. package/components/ui-popover/ui-popover.js +70 -0
  57. package/components/ui-radio/ui-radio.html +57 -0
  58. package/components/ui-radio/ui-radio.js +25 -0
  59. package/components/ui-radio-group/ui-radio-group.html +51 -0
  60. package/components/ui-radio-group/ui-radio-group.js +42 -0
  61. package/components/ui-reel/ui-reel.html +67 -0
  62. package/components/ui-search-result-row/ui-search-result-row.html +101 -0
  63. package/components/ui-search-shell/ui-search-shell.html +142 -0
  64. package/components/ui-search-shell/ui-search-shell.js +60 -0
  65. package/components/ui-select/ui-select.html +87 -0
  66. package/components/ui-select/ui-select.js +16 -0
  67. package/components/ui-separator/ui-separator.html +22 -0
  68. package/components/ui-sidebar/ui-sidebar.html +183 -0
  69. package/components/ui-sidebar/ui-sidebar.js +178 -0
  70. package/components/ui-stack/ui-stack.html +59 -0
  71. package/components/ui-switch/ui-switch.html +95 -0
  72. package/components/ui-switch/ui-switch.js +24 -0
  73. package/components/ui-switcher/ui-switcher.html +65 -0
  74. package/components/ui-tabs/ui-tabs.html +134 -0
  75. package/components/ui-tabs/ui-tabs.js +81 -0
  76. package/components/ui-textarea/ui-textarea.html +80 -0
  77. package/components/ui-textarea/ui-textarea.js +7 -0
  78. package/components/ui-toast-region/ui-toast-region.html +127 -0
  79. package/components/ui-toast-region/ui-toast-region.js +119 -0
  80. package/components/ui-tooltip/ui-tooltip.html +122 -0
  81. package/components/ui-tooltip/ui-tooltip.js +134 -0
  82. package/components/ui-top-bar/ui-top-bar.html +53 -0
  83. package/components/ui-tree/ui-tree.html +29 -0
  84. package/components/ui-tree/ui-tree.js +250 -0
  85. package/components/ui-tree-item/ui-tree-item.html +326 -0
  86. package/components/ui-tree-item/ui-tree-item.js +94 -0
  87. package/dist/index.d.ts +4 -414
  88. package/dist/index.js +55 -657
  89. package/editor/chunks/extensions.js +7267 -0
  90. package/editor/chunks/table-backgrounds.js +51 -0
  91. package/editor/chunks/ui.js +92 -0
  92. package/editor/extensions/callout.d.ts +20 -0
  93. package/editor/extensions/index.d.ts +12 -441
  94. package/editor/extensions/index.js +3 -64
  95. package/editor/extensions/list-behavior.d.ts +7 -0
  96. package/editor/extensions/mention.d.ts +35 -0
  97. package/editor/extensions/preset.d.ts +42 -0
  98. package/editor/extensions/slash-command.d.ts +80 -0
  99. package/editor/extensions/smart-paste.d.ts +13 -0
  100. package/editor/extensions/table-commands.d.ts +114 -0
  101. package/editor/extensions/table-formatting.d.ts +60 -0
  102. package/editor/icons.d.ts +55 -0
  103. package/editor/index.d.ts +8 -6
  104. package/editor/index.js +96 -71
  105. package/editor/insert-table-grid.d.ts +7 -0
  106. package/editor/mention-contract.d.ts +78 -0
  107. package/editor/mention-menu.d.ts +9 -0
  108. package/editor/slash-menu.d.ts +29 -0
  109. package/editor/table-backgrounds.d.ts +43 -0
  110. package/editor/table-context-menu.d.ts +12 -0
  111. package/editor/table-overlay.d.ts +79 -0
  112. package/editor/ui.d.ts +10 -50
  113. package/editor/ui.js +3 -14
  114. package/editor/viewport.d.ts +15 -0
  115. package/package.json +84 -60
  116. package/styles/ui-affordance-scope.css +19 -0
  117. package/styles/ui-avatar-group.css +56 -0
  118. package/styles/ui-avatar.css +47 -0
  119. package/styles/ui-badge.css +91 -0
  120. package/styles/ui-button.css +206 -0
  121. package/styles/ui-callout.css +76 -0
  122. package/styles/ui-checkbox.css +98 -0
  123. package/styles/ui-cluster.css +46 -0
  124. package/styles/ui-combobox.css +213 -0
  125. package/styles/ui-container.css +36 -0
  126. package/styles/ui-context-menu.css +68 -0
  127. package/styles/ui-dialog.css +160 -0
  128. package/styles/ui-disclosure.css +95 -0
  129. package/styles/ui-editable.css +139 -0
  130. package/styles/ui-editor-insert-table-grid.css +65 -0
  131. package/styles/ui-editor-mention-menu.css +121 -0
  132. package/styles/ui-editor-slash-menu.css +179 -0
  133. package/styles/ui-editor-table-context-menu.css +118 -0
  134. package/styles/ui-editor-table-overlay.css +318 -0
  135. package/styles/ui-editor-table-toolbar.css +191 -0
  136. package/styles/ui-editor-toolbar.css +115 -0
  137. package/styles/ui-floating-action-button.css +82 -0
  138. package/styles/ui-form-field.css +36 -0
  139. package/styles/ui-grid.css +43 -0
  140. package/styles/ui-icon-button.css +169 -0
  141. package/styles/ui-icon.css +23 -0
  142. package/styles/ui-input.css +82 -0
  143. package/styles/ui-menu-item.css +34 -0
  144. package/styles/ui-menu.css +80 -0
  145. package/styles/ui-popover.css +76 -0
  146. package/styles/ui-radio-group.css +38 -0
  147. package/styles/ui-radio.css +46 -0
  148. package/styles/ui-reel.css +63 -0
  149. package/styles/ui-search-result-row.css +92 -0
  150. package/styles/ui-search-shell.css +128 -0
  151. package/styles/ui-select.css +86 -0
  152. package/styles/ui-separator.css +16 -0
  153. package/styles/ui-sidebar.css +166 -0
  154. package/styles/ui-stack.css +55 -0
  155. package/styles/ui-switch.css +88 -0
  156. package/styles/ui-switcher.css +61 -0
  157. package/styles/ui-tabs.css +114 -0
  158. package/styles/ui-textarea.css +77 -0
  159. package/styles/ui-toast-region.css +103 -0
  160. package/styles/ui-tooltip.css +113 -0
  161. package/styles/ui-top-bar.css +51 -0
  162. package/styles/ui-tree-item.css +267 -0
  163. package/styles/ui-tree.css +16 -0
  164. package/vanilla/UiAffordanceScope.d.ts +14 -0
  165. package/vanilla/UiAffordanceScope.js +30 -0
  166. package/vanilla/UiAvatar.d.ts +17 -0
  167. package/vanilla/UiAvatar.js +41 -0
  168. package/vanilla/UiAvatarGroup.d.ts +15 -0
  169. package/vanilla/UiAvatarGroup.js +40 -0
  170. package/vanilla/UiBadge.d.ts +15 -0
  171. package/vanilla/UiBadge.js +30 -0
  172. package/vanilla/UiButton.d.ts +16 -0
  173. package/vanilla/UiButton.js +32 -0
  174. package/vanilla/UiCallout.d.ts +14 -0
  175. package/vanilla/UiCallout.js +124 -0
  176. package/vanilla/UiCheckbox.d.ts +19 -0
  177. package/vanilla/UiCheckbox.js +47 -0
  178. package/vanilla/UiCluster.d.ts +15 -0
  179. package/vanilla/UiCluster.js +30 -0
  180. package/vanilla/UiCombobox.d.ts +42 -0
  181. package/vanilla/UiCombobox.js +194 -0
  182. package/vanilla/UiContainer.d.ts +15 -0
  183. package/vanilla/UiContainer.js +30 -0
  184. package/vanilla/UiContextMenu.d.ts +18 -0
  185. package/vanilla/UiContextMenu.js +35 -0
  186. package/vanilla/UiDialog.d.ts +19 -0
  187. package/vanilla/UiDialog.js +53 -0
  188. package/vanilla/UiDisclosure.d.ts +18 -0
  189. package/vanilla/UiDisclosure.js +49 -0
  190. package/vanilla/UiEditable.d.ts +22 -0
  191. package/vanilla/UiEditable.js +59 -0
  192. package/vanilla/UiEditorInsertTableGrid.d.ts +18 -0
  193. package/vanilla/UiEditorInsertTableGrid.js +46 -0
  194. package/vanilla/UiEditorMentionMenu.d.ts +21 -0
  195. package/vanilla/UiEditorMentionMenu.js +63 -0
  196. package/vanilla/UiEditorSlashMenu.d.ts +20 -0
  197. package/vanilla/UiEditorSlashMenu.js +74 -0
  198. package/vanilla/UiEditorTableContextMenu.d.ts +17 -0
  199. package/vanilla/UiEditorTableContextMenu.js +69 -0
  200. package/vanilla/UiEditorTableOverlay.d.ts +16 -0
  201. package/vanilla/UiEditorTableOverlay.js +113 -0
  202. package/vanilla/UiEditorTableToolbar.d.ts +18 -0
  203. package/vanilla/UiEditorTableToolbar.js +121 -0
  204. package/vanilla/UiEditorToolbar.d.ts +14 -0
  205. package/vanilla/UiEditorToolbar.js +30 -0
  206. package/vanilla/UiFloatingActionButton.d.ts +16 -0
  207. package/vanilla/UiFloatingActionButton.js +35 -0
  208. package/vanilla/UiFormField.d.ts +16 -0
  209. package/vanilla/UiFormField.js +54 -0
  210. package/vanilla/UiGrid.d.ts +15 -0
  211. package/vanilla/UiGrid.js +30 -0
  212. package/vanilla/UiIcon.d.ts +14 -0
  213. package/vanilla/UiIcon.js +40 -0
  214. package/vanilla/UiIconButton.d.ts +19 -0
  215. package/vanilla/UiIconButton.js +37 -0
  216. package/vanilla/UiInput.d.ts +18 -0
  217. package/vanilla/UiInput.js +37 -0
  218. package/vanilla/UiMenu.d.ts +19 -0
  219. package/vanilla/UiMenu.js +35 -0
  220. package/vanilla/UiMenuItem.d.ts +15 -0
  221. package/vanilla/UiMenuItem.js +43 -0
  222. package/vanilla/UiPopover.d.ts +18 -0
  223. package/vanilla/UiPopover.js +33 -0
  224. package/vanilla/UiRadio.d.ts +19 -0
  225. package/vanilla/UiRadio.js +48 -0
  226. package/vanilla/UiRadioGroup.d.ts +21 -0
  227. package/vanilla/UiRadioGroup.js +35 -0
  228. package/vanilla/UiReel.d.ts +16 -0
  229. package/vanilla/UiReel.js +34 -0
  230. package/vanilla/UiSearchResultRow.d.ts +15 -0
  231. package/vanilla/UiSearchResultRow.js +82 -0
  232. package/vanilla/UiSearchShell.d.ts +18 -0
  233. package/vanilla/UiSearchShell.js +74 -0
  234. package/vanilla/UiSelect.d.ts +18 -0
  235. package/vanilla/UiSelect.js +42 -0
  236. package/vanilla/UiSeparator.d.ts +14 -0
  237. package/vanilla/UiSeparator.js +28 -0
  238. package/vanilla/UiSidebar.d.ts +24 -0
  239. package/vanilla/UiSidebar.js +47 -0
  240. package/vanilla/UiStack.d.ts +16 -0
  241. package/vanilla/UiStack.js +32 -0
  242. package/vanilla/UiSwitch.d.ts +18 -0
  243. package/vanilla/UiSwitch.js +46 -0
  244. package/vanilla/UiSwitcher.d.ts +16 -0
  245. package/vanilla/UiSwitcher.js +32 -0
  246. package/vanilla/UiTabs.d.ts +18 -0
  247. package/vanilla/UiTabs.js +47 -0
  248. package/vanilla/UiTextarea.d.ts +19 -0
  249. package/vanilla/UiTextarea.js +40 -0
  250. package/vanilla/UiToastRegion.d.ts +20 -0
  251. package/vanilla/UiToastRegion.js +58 -0
  252. package/vanilla/UiTooltip.d.ts +21 -0
  253. package/vanilla/UiTooltip.js +34 -0
  254. package/vanilla/UiTopBar.d.ts +13 -0
  255. package/vanilla/UiTopBar.js +59 -0
  256. package/vanilla/UiTree.d.ts +18 -0
  257. package/vanilla/UiTree.js +31 -0
  258. package/vanilla/UiTreeItem.d.ts +26 -0
  259. package/vanilla/UiTreeItem.js +164 -0
  260. package/vanilla/index.js +48 -0
  261. package/vue/UiAffordanceScope.d.ts +18 -0
  262. package/vue/UiAffordanceScope.js +2 -0
  263. package/vue/UiAffordanceScope.vue +118 -0
  264. package/vue/UiAvatar.d.ts +23 -0
  265. package/vue/UiAvatar.js +2 -0
  266. package/vue/UiAvatar.vue +152 -0
  267. package/vue/UiAvatarGroup.d.ts +20 -0
  268. package/vue/UiAvatarGroup.js +2 -0
  269. package/vue/UiAvatarGroup.vue +167 -0
  270. package/vue/UiBadge.d.ts +20 -0
  271. package/vue/UiBadge.js +2 -0
  272. package/vue/UiBadge.vue +123 -0
  273. package/vue/UiButton.d.ts +22 -0
  274. package/vue/UiButton.js +2 -0
  275. package/vue/UiButton.vue +229 -0
  276. package/vue/UiCallout.d.ts +18 -0
  277. package/vue/UiCallout.js +2 -0
  278. package/vue/UiCallout.vue +104 -0
  279. package/vue/UiCheckbox.d.ts +38 -0
  280. package/vue/UiCheckbox.js +2 -0
  281. package/vue/UiCheckbox.vue +216 -0
  282. package/vue/UiCluster.d.ts +17 -0
  283. package/vue/UiCluster.js +2 -0
  284. package/vue/UiCluster.vue +75 -0
  285. package/vue/UiCombobox.d.ts +255 -0
  286. package/vue/UiCombobox.js +2 -0
  287. package/vue/UiCombobox.vue +466 -0
  288. package/vue/UiContainer.d.ts +17 -0
  289. package/vue/UiContainer.js +2 -0
  290. package/vue/UiContainer.vue +65 -0
  291. package/vue/UiContextMenu.d.ts +50 -0
  292. package/vue/UiContextMenu.js +2 -0
  293. package/vue/UiContextMenu.vue +166 -0
  294. package/vue/UiDialog.d.ts +39 -0
  295. package/vue/UiDialog.js +2 -0
  296. package/vue/UiDialog.vue +273 -0
  297. package/vue/UiDisclosure.d.ts +44 -0
  298. package/vue/UiDisclosure.js +2 -0
  299. package/vue/UiDisclosure.vue +211 -0
  300. package/vue/UiEditable.d.ts +48 -0
  301. package/vue/UiEditable.js +2 -0
  302. package/vue/UiEditable.vue +267 -0
  303. package/vue/UiEditorInsertTableGrid.d.ts +26 -0
  304. package/vue/UiEditorInsertTableGrid.js +2 -0
  305. package/vue/UiEditorInsertTableGrid.vue +210 -0
  306. package/vue/UiEditorMentionMenu.d.ts +44 -0
  307. package/vue/UiEditorMentionMenu.js +2 -0
  308. package/vue/UiEditorMentionMenu.vue +284 -0
  309. package/vue/UiEditorSlashMenu.d.ts +41 -0
  310. package/vue/UiEditorSlashMenu.js +2 -0
  311. package/vue/UiEditorSlashMenu.vue +306 -0
  312. package/vue/UiEditorTableContextMenu.d.ts +19 -0
  313. package/vue/UiEditorTableContextMenu.js +2 -0
  314. package/vue/UiEditorTableContextMenu.vue +252 -0
  315. package/vue/UiEditorTableOverlay.d.ts +66 -0
  316. package/vue/UiEditorTableOverlay.js +2 -0
  317. package/vue/UiEditorTableOverlay.vue +455 -0
  318. package/vue/UiEditorTableToolbar.d.ts +21 -0
  319. package/vue/UiEditorTableToolbar.js +2 -0
  320. package/vue/UiEditorTableToolbar.vue +339 -0
  321. package/vue/UiEditorToolbar.d.ts +18 -0
  322. package/vue/UiEditorToolbar.js +2 -0
  323. package/vue/UiEditorToolbar.vue +138 -0
  324. package/vue/UiFloatingActionButton.d.ts +22 -0
  325. package/vue/UiFloatingActionButton.js +2 -0
  326. package/vue/UiFloatingActionButton.vue +116 -0
  327. package/vue/UiFormField.d.ts +28 -0
  328. package/vue/UiFormField.js +2 -0
  329. package/vue/UiFormField.vue +124 -0
  330. package/vue/UiGrid.d.ts +17 -0
  331. package/vue/UiGrid.js +2 -0
  332. package/vue/UiGrid.vue +72 -0
  333. package/vue/UiIcon.d.ts +8 -0
  334. package/vue/UiIcon.js +2 -0
  335. package/vue/UiIcon.vue +135 -0
  336. package/vue/UiIconButton.d.ts +27 -0
  337. package/vue/UiIconButton.js +2 -0
  338. package/vue/UiIconButton.vue +268 -0
  339. package/vue/UiInput.d.ts +20 -0
  340. package/vue/UiInput.js +2 -0
  341. package/vue/UiInput.vue +177 -0
  342. package/vue/UiMenu.d.ts +52 -0
  343. package/vue/UiMenu.js +2 -0
  344. package/vue/UiMenu.vue +194 -0
  345. package/vue/UiMenuItem.d.ts +20 -0
  346. package/vue/UiMenuItem.js +2 -0
  347. package/vue/UiMenuItem.vue +55 -0
  348. package/vue/UiPopover.d.ts +44 -0
  349. package/vue/UiPopover.js +2 -0
  350. package/vue/UiPopover.vue +188 -0
  351. package/vue/UiRadio.d.ts +38 -0
  352. package/vue/UiRadio.js +2 -0
  353. package/vue/UiRadio.vue +166 -0
  354. package/vue/UiRadioGroup.d.ts +50 -0
  355. package/vue/UiRadioGroup.js +2 -0
  356. package/vue/UiRadioGroup.vue +161 -0
  357. package/vue/UiReel.d.ts +18 -0
  358. package/vue/UiReel.js +2 -0
  359. package/vue/UiReel.vue +93 -0
  360. package/vue/UiSearchResultRow.d.ts +28 -0
  361. package/vue/UiSearchResultRow.js +2 -0
  362. package/vue/UiSearchResultRow.vue +124 -0
  363. package/vue/UiSearchShell.d.ts +42 -0
  364. package/vue/UiSearchShell.js +2 -0
  365. package/vue/UiSearchShell.vue +233 -0
  366. package/vue/UiSelect.d.ts +30 -0
  367. package/vue/UiSelect.js +2 -0
  368. package/vue/UiSelect.vue +183 -0
  369. package/vue/UiSeparator.d.ts +8 -0
  370. package/vue/UiSeparator.js +2 -0
  371. package/vue/UiSeparator.vue +38 -0
  372. package/vue/UiSidebar.d.ts +54 -0
  373. package/vue/UiSidebar.js +2 -0
  374. package/vue/UiSidebar.vue +288 -0
  375. package/vue/UiStack.d.ts +18 -0
  376. package/vue/UiStack.js +2 -0
  377. package/vue/UiStack.vue +85 -0
  378. package/vue/UiSwitch.d.ts +36 -0
  379. package/vue/UiSwitch.js +2 -0
  380. package/vue/UiSwitch.vue +203 -0
  381. package/vue/UiSwitcher.d.ts +18 -0
  382. package/vue/UiSwitcher.js +2 -0
  383. package/vue/UiSwitcher.vue +91 -0
  384. package/vue/UiTabs.d.ts +36 -0
  385. package/vue/UiTabs.js +2 -0
  386. package/vue/UiTabs.vue +269 -0
  387. package/vue/UiTextarea.d.ts +22 -0
  388. package/vue/UiTextarea.js +2 -0
  389. package/vue/UiTextarea.vue +177 -0
  390. package/vue/UiToastRegion.d.ts +48 -0
  391. package/vue/UiToastRegion.js +2 -0
  392. package/vue/UiToastRegion.vue +256 -0
  393. package/vue/UiTooltip.d.ts +50 -0
  394. package/vue/UiTooltip.js +2 -0
  395. package/vue/UiTooltip.vue +230 -0
  396. package/vue/UiTopBar.d.ts +19 -0
  397. package/vue/UiTopBar.js +2 -0
  398. package/vue/UiTopBar.vue +56 -0
  399. package/vue/UiTree.d.ts +62 -0
  400. package/vue/UiTree.js +2 -0
  401. package/vue/UiTree.vue +117 -0
  402. package/vue/UiTreeItem.d.ts +56 -0
  403. package/vue/UiTreeItem.js +2 -0
  404. package/vue/UiTreeItem.vue +418 -0
  405. package/vue/chunks/UiAffordanceScope.js +112 -0
  406. package/vue/chunks/UiAvatar.js +144 -0
  407. package/vue/chunks/UiAvatarGroup.js +142 -0
  408. package/vue/chunks/UiBadge.js +33 -0
  409. package/vue/chunks/UiButton.js +47 -0
  410. package/vue/chunks/UiCallout.js +117 -0
  411. package/vue/chunks/UiCheckbox.js +167 -0
  412. package/vue/chunks/UiCluster.js +33 -0
  413. package/vue/chunks/UiCombobox.js +684 -0
  414. package/vue/chunks/UiContainer.js +33 -0
  415. package/vue/chunks/UiContextMenu.js +153 -0
  416. package/vue/chunks/UiDialog.js +162 -0
  417. package/vue/chunks/UiDisclosure.js +185 -0
  418. package/vue/chunks/UiEditable.js +223 -0
  419. package/vue/chunks/UiEditorInsertTableGrid.js +221 -0
  420. package/vue/chunks/UiEditorMentionMenu.js +245 -0
  421. package/vue/chunks/UiEditorSlashMenu.js +210 -0
  422. package/vue/chunks/UiEditorTableContextMenu.js +201 -0
  423. package/vue/chunks/UiEditorTableOverlay.js +301 -0
  424. package/vue/chunks/UiEditorTableToolbar.js +299 -0
  425. package/vue/chunks/UiEditorToolbar.js +37 -0
  426. package/vue/chunks/UiFloatingActionButton.js +56 -0
  427. package/vue/chunks/UiFormField.js +113 -0
  428. package/vue/chunks/UiGrid.js +33 -0
  429. package/vue/chunks/UiIcon.js +170 -0
  430. package/vue/chunks/UiIconButton.js +141 -0
  431. package/vue/chunks/UiInput.js +136 -0
  432. package/vue/chunks/UiMenu.js +163 -0
  433. package/vue/chunks/UiMenuItem.js +37 -0
  434. package/vue/chunks/UiPopover.js +149 -0
  435. package/vue/chunks/UiRadio.js +164 -0
  436. package/vue/chunks/UiRadioGroup.js +160 -0
  437. package/vue/chunks/UiReel.js +42 -0
  438. package/vue/chunks/UiSearchResultRow.js +63 -0
  439. package/vue/chunks/UiSearchShell.js +152 -0
  440. package/vue/chunks/UiSelect.js +134 -0
  441. package/vue/chunks/UiSeparator.js +24 -0
  442. package/vue/chunks/UiSidebar.js +180 -0
  443. package/vue/chunks/UiStack.js +38 -0
  444. package/vue/chunks/UiSwitch.js +162 -0
  445. package/vue/chunks/UiSwitcher.js +38 -0
  446. package/vue/chunks/UiTabs.js +210 -0
  447. package/vue/chunks/UiTextarea.js +139 -0
  448. package/vue/chunks/UiToastRegion.js +227 -0
  449. package/vue/chunks/UiTooltip.js +163 -0
  450. package/vue/chunks/UiTopBar.js +25 -0
  451. package/vue/chunks/UiTree.js +140 -0
  452. package/vue/chunks/UiTreeItem.js +315 -0
  453. package/vue/chunks/_plugin-vue_export-helper.js +8 -0
  454. package/vue/components.css +4405 -0
  455. package/vue/editor/LoomaEditor.d.ts +171 -0
  456. package/vue/editor/image-delivery.d.ts +61 -0
  457. package/vue/editor/index.d.ts +4 -386
  458. package/vue/editor/index.js +995 -1134
  459. package/vue/editor/primitives.d.ts +23 -0
  460. package/vue/index.d.ts +48 -604
  461. package/vue/index.js +49 -86
  462. package/dist/chunk-MLKGABMK.js +0 -9
  463. package/dist/chunk-RWLYVQY6.js +0 -5719
  464. package/dist/chunk-XDNZIKNI.js +0 -2721
  465. package/dist/declarative-generated.cjs +0 -149
  466. package/dist/declarative-generated.d.cts +0 -16
  467. package/dist/declarative-generated.d.ts +0 -16
  468. package/dist/declarative-generated.js +0 -124
  469. package/dist/declarative.cjs +0 -2750
  470. package/dist/declarative.d.cts +0 -101
  471. package/dist/declarative.d.ts +0 -101
  472. package/dist/declarative.js +0 -15
  473. package/dist/index.cjs +0 -9077
  474. package/dist/index.d.cts +0 -414
  475. package/dist/loader.cjs +0 -8442
  476. package/dist/loader.d.cts +0 -4
  477. package/dist/loader.d.ts +0 -4
  478. package/dist/loader.js +0 -16
  479. package/editor/chunk-EUIH3TBV.js +0 -6826
  480. package/editor/chunk-JK53ENSG.js +0 -29
  481. package/editor/chunk-U36XNFJN.js +0 -2592
  482. package/editor/table-overlay-DZFGHQDt.d.ts +0 -138
  483. package/editor.css +0 -1592
  484. package/layout/index.cjs +0 -356
  485. package/layout/index.d.cts +0 -18
  486. package/layout/index.d.ts +0 -18
  487. package/layout/index.js +0 -341
  488. package/layout.css +0 -191
  489. package/styles.css +0 -940
  490. package/vue/chunk-OX3EACZ7.js +0 -4369
@@ -0,0 +1,466 @@
1
+ <!-- Generated by HTML Next 1.0.0-alpha.1 for Vue 3.5. Do not edit. -->
2
+ <script setup lang="ts">
3
+ import { computed, onBeforeUnmount, onMounted, ref, shallowRef, watchEffect } from "vue";
4
+ import UiBadge from "./UiBadge.vue";
5
+ import UiTooltip from "./UiTooltip.vue";
6
+ import * as controllerModule from "../components/ui-combobox/ui-combobox.js";
7
+
8
+ defineOptions({ inheritAttrs: false });
9
+
10
+ const hn = {
11
+ 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),
12
+ n: (v: unknown): number | undefined => typeof v === "number" && v === v ? v : undefined,
13
+ op: (op: string, a: unknown, b: unknown): unknown => {
14
+ const x = hn.n(a), y = hn.n(b);
15
+ if (x === undefined || y === undefined) return undefined;
16
+ switch (op) {
17
+ case "<": return x < y; case "<=": return x <= y; case ">": return x > y; case ">=": return x >= y;
18
+ case "+": return x + y; case "-": return x - y; case "*": return x * y; case "/": return x / y; case "%": return x % y;
19
+ }
20
+ return undefined;
21
+ },
22
+ text: (v: unknown): string => v === undefined || v === null ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? "" : String(v),
23
+ 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),
24
+ enumerated: (v: unknown): any => typeof v === "boolean" ? String(v) : hn.attr(v),
25
+ call: (fn: string, ...args: unknown[]): any => {
26
+ if (fn === "format") {
27
+ let index = 1;
28
+ return typeof args[0] === "string" ? args[0].replace(/%s/g, () => index < args.length ? hn.text(args[index++]) : "%s") : undefined;
29
+ }
30
+ const n = args.map(hn.n);
31
+ if (n.some((value) => value === undefined)) return undefined;
32
+ const v = n as number[];
33
+ switch (fn) {
34
+ case "abs": return v.length === 1 ? Math.abs(v[0]!) : undefined;
35
+ case "round": return v.length === 1 ? Math.round(v[0]!) : undefined;
36
+ case "min": return v.length > 0 ? Math.min(...v) : undefined;
37
+ case "max": return v.length > 0 ? Math.max(...v) : undefined;
38
+ case "clamp": return v.length === 3 ? Math.min(Math.max(v[0]!, v[1]!), v[2]!) : undefined;
39
+ }
40
+ return undefined;
41
+ },
42
+ shape: (items: unknown, where: ((item: any) => unknown) | undefined, sort: readonly string[], limit: unknown): any[] => {
43
+ let list = Array.isArray(items) ? items.slice() : [];
44
+ if (where !== undefined) list = list.filter((item) => hn.t(where(item)));
45
+ if (sort.length > 0) {
46
+ const field = (item: unknown, path: string): unknown => item !== null && typeof item === "object" && !Array.isArray(item)
47
+ ? path.split(".").reduce<unknown>((value, key) => (value as Record<string, unknown> | undefined)?.[key], item)
48
+ : item;
49
+ const compare = (a: unknown, b: unknown): number => typeof a === "number" && typeof b === "number" ? a - b : hn.text(a).localeCompare(hn.text(b));
50
+ list.sort((a, b) => {
51
+ for (const key of sort) {
52
+ const descending = key.startsWith("-");
53
+ const order = compare(field(a, descending ? key.slice(1) : key), field(b, descending ? key.slice(1) : key));
54
+ if (order !== 0) return descending ? -order : order;
55
+ }
56
+ return 0;
57
+ });
58
+ }
59
+ return typeof limit === "number" ? list.slice(0, Math.max(0, Math.trunc(limit))) : list;
60
+ },
61
+ };
62
+
63
+ const props = withDefaults(defineProps<{
64
+ allowCreate?: boolean | null;
65
+ allowFreeText?: boolean | null;
66
+ clearable?: boolean | null;
67
+ disabled?: boolean | null;
68
+ disclosure?: boolean | null;
69
+ help?: string | null;
70
+ items?: readonly ({ readonly id: string; readonly value: string; readonly label: string; readonly group?: string; readonly disabled?: boolean })[] | null;
71
+ label?: string | null;
72
+ labelVisibility?: "visible" | "sr-only" | null;
73
+ multiple?: boolean | null;
74
+ name?: string | null;
75
+ placeholder?: string | null;
76
+ query?: string | null;
77
+ readonly?: boolean | null;
78
+ required?: boolean | null;
79
+ size?: "sm" | "md" | null;
80
+ tokenSeparators?: readonly (string)[] | null;
81
+ value?: string | null;
82
+ }>(), {
83
+ allowCreate: false,
84
+ allowFreeText: false,
85
+ clearable: false,
86
+ disabled: false,
87
+ disclosure: false,
88
+ help: "",
89
+ label: "",
90
+ labelVisibility: "visible",
91
+ multiple: false,
92
+ name: "",
93
+ placeholder: "",
94
+ readonly: false,
95
+ required: false,
96
+ size: "md",
97
+ });
98
+ const emit = defineEmits<{
99
+ "query-change": [detail: { readonly query: string; readonly display: string; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
100
+ "value-change": [detail: { readonly value: string | null; readonly query: string; readonly option: { readonly id: string; readonly value: string; readonly label: string; readonly group?: string; readonly disabled?: boolean } | null; readonly kind: "selection" | "clear" | "free-entry" | "create"; readonly trigger: "keyboard" | "pointer" | "programmatic" } | readonly ({ readonly id: string; readonly value: string; readonly label: string; readonly group?: string; readonly disabled?: boolean })[]];
101
+ "free-entry": [detail: { readonly value: string | null; readonly query: string; readonly option: { readonly id: string; readonly value: string; readonly label: string; readonly group?: string; readonly disabled?: boolean } | null; readonly kind: "selection" | "clear" | "free-entry" | "create"; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
102
+ "create-entry": [detail: { readonly value: string | null; readonly query: string; readonly option: { readonly id: string; readonly value: string; readonly label: string; readonly group?: string; readonly disabled?: boolean } | null; readonly kind: "selection" | "clear" | "free-entry" | "create"; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
103
+ "validation-change": [detail: { readonly status: "pristine" | "pending" | "valid" | "warning" | "error"; readonly touched: boolean; readonly dirty: boolean; readonly issues: readonly ({ readonly message: string; readonly path?: readonly (unknown)[]; readonly severity?: "error" | "warning" })[]; readonly output?: unknown }];
104
+ "options-change": [detail: readonly ({ readonly id: string; readonly value: string; readonly label: string; readonly group?: string; readonly disabled?: boolean })[]];
105
+ "add-item": [detail: { readonly item: { readonly id: string; readonly value: string; readonly label: string; readonly group?: string; readonly disabled?: boolean }; readonly index: number; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
106
+ "remove-item": [detail: { readonly item: { readonly id: string; readonly value: string; readonly label: string; readonly group?: string; readonly disabled?: boolean }; readonly index: number; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
107
+ "create-item": [detail: { readonly query: string; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
108
+ }>();
109
+ const root = ref<HTMLElement | null>(null);
110
+ const refs: Record<string, Element | undefined> = {};
111
+ const state_raw = ref<any>("");
112
+ const state_display = ref<any>("");
113
+ const state_selected = ref<any>(null);
114
+ const state_expanded = ref<any>(false);
115
+ const state_rows = ref<any>([]);
116
+ const state_active = ref<any>(hn.op("-", 0, 1));
117
+ const state_loading = ref<any>(false);
118
+ const state_helpOpen = ref<any>(false);
119
+ const state_lookupError = ref<any>("");
120
+ const state_validation = ref<any>(({ "status": "pristine", "touched": false, "dirty": false, "issues": [] }));
121
+ const state_uid = ref<any>("");
122
+ const state_groups = ref<any>([]);
123
+ const state_creatable = ref<any>(false);
124
+ const state_createIndex = ref<any>(0);
125
+ const state_message = ref<any>("");
126
+ const state_statusText = ref<any>("");
127
+ const state_validationStatus = ref<any>("pristine");
128
+
129
+ /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
130
+ const dispatch = (name: string, detail?: unknown): boolean => {
131
+ const declared = {"query-change":{"bubbles":true,"composed":true,"cancelable":false},"value-change":{"bubbles":true,"composed":true,"cancelable":false},"free-entry":{"bubbles":true,"composed":true,"cancelable":false},"create-entry":{"bubbles":true,"composed":true,"cancelable":false},"validation-change":{"bubbles":true,"composed":true,"cancelable":false},"options-change":{"bubbles":true,"composed":true,"cancelable":false},"add-item":{"bubbles":true,"composed":true,"cancelable":false},"remove-item":{"bubbles":true,"composed":true,"cancelable":false},"create-item":{"bubbles":true,"composed":true,"cancelable":false}} as Record<string, EventInit | undefined>;
132
+ const checks: Record<string, (detail: unknown) => boolean> = {
133
+ "query-change": (detail: unknown) => (detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof (detail as Record<string, unknown>)["query"] === "string" && typeof (detail as Record<string, unknown>)["display"] === "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) => ["query","display","trigger"].includes(key))),
134
+ "value-change": (detail: unknown) => ((detail !== null && typeof detail === "object" && !Array.isArray(detail) && (typeof (detail as Record<string, unknown>)["value"] === "string" || (detail as Record<string, unknown>)["value"] === null) && typeof (detail as Record<string, unknown>)["query"] === "string" && (((detail as Record<string, unknown>)["option"] !== null && typeof (detail as Record<string, unknown>)["option"] === "object" && !Array.isArray((detail as Record<string, unknown>)["option"]) && typeof ((detail as Record<string, unknown>)["option"] as Record<string, unknown>)["id"] === "string" && typeof ((detail as Record<string, unknown>)["option"] as Record<string, unknown>)["value"] === "string" && typeof ((detail as Record<string, unknown>)["option"] as Record<string, unknown>)["label"] === "string" && (((detail as Record<string, unknown>)["option"] as Record<string, unknown>)["group"] === undefined || typeof ((detail as Record<string, unknown>)["option"] as Record<string, unknown>)["group"] === "string") && (((detail as Record<string, unknown>)["option"] as Record<string, unknown>)["disabled"] === undefined || typeof ((detail as Record<string, unknown>)["option"] as Record<string, unknown>)["disabled"] === "boolean") && Object.keys((detail as Record<string, unknown>)["option"] as object).every((key) => ["id","value","label","group","disabled"].includes(key))) || (detail as Record<string, unknown>)["option"] === null) && ((detail as Record<string, unknown>)["kind"] === "selection" || (detail as Record<string, unknown>)["kind"] === "clear" || (detail as Record<string, unknown>)["kind"] === "free-entry" || (detail as Record<string, unknown>)["kind"] === "create") && ((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","query","option","kind","trigger"].includes(key))) || (Array.isArray(detail) && (detail as unknown[]).every((item: unknown) => (item !== null && typeof item === "object" && !Array.isArray(item) && typeof (item as Record<string, unknown>)["id"] === "string" && typeof (item as Record<string, unknown>)["value"] === "string" && typeof (item as Record<string, unknown>)["label"] === "string" && ((item as Record<string, unknown>)["group"] === undefined || typeof (item as Record<string, unknown>)["group"] === "string") && ((item as Record<string, unknown>)["disabled"] === undefined || typeof (item as Record<string, unknown>)["disabled"] === "boolean") && Object.keys(item as object).every((key) => ["id","value","label","group","disabled"].includes(key)))))),
135
+ "free-entry": (detail: unknown) => (detail !== null && typeof detail === "object" && !Array.isArray(detail) && (typeof (detail as Record<string, unknown>)["value"] === "string" || (detail as Record<string, unknown>)["value"] === null) && typeof (detail as Record<string, unknown>)["query"] === "string" && (((detail as Record<string, unknown>)["option"] !== null && typeof (detail as Record<string, unknown>)["option"] === "object" && !Array.isArray((detail as Record<string, unknown>)["option"]) && typeof ((detail as Record<string, unknown>)["option"] as Record<string, unknown>)["id"] === "string" && typeof ((detail as Record<string, unknown>)["option"] as Record<string, unknown>)["value"] === "string" && typeof ((detail as Record<string, unknown>)["option"] as Record<string, unknown>)["label"] === "string" && (((detail as Record<string, unknown>)["option"] as Record<string, unknown>)["group"] === undefined || typeof ((detail as Record<string, unknown>)["option"] as Record<string, unknown>)["group"] === "string") && (((detail as Record<string, unknown>)["option"] as Record<string, unknown>)["disabled"] === undefined || typeof ((detail as Record<string, unknown>)["option"] as Record<string, unknown>)["disabled"] === "boolean") && Object.keys((detail as Record<string, unknown>)["option"] as object).every((key) => ["id","value","label","group","disabled"].includes(key))) || (detail as Record<string, unknown>)["option"] === null) && ((detail as Record<string, unknown>)["kind"] === "selection" || (detail as Record<string, unknown>)["kind"] === "clear" || (detail as Record<string, unknown>)["kind"] === "free-entry" || (detail as Record<string, unknown>)["kind"] === "create") && ((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","query","option","kind","trigger"].includes(key))),
136
+ "create-entry": (detail: unknown) => (detail !== null && typeof detail === "object" && !Array.isArray(detail) && (typeof (detail as Record<string, unknown>)["value"] === "string" || (detail as Record<string, unknown>)["value"] === null) && typeof (detail as Record<string, unknown>)["query"] === "string" && (((detail as Record<string, unknown>)["option"] !== null && typeof (detail as Record<string, unknown>)["option"] === "object" && !Array.isArray((detail as Record<string, unknown>)["option"]) && typeof ((detail as Record<string, unknown>)["option"] as Record<string, unknown>)["id"] === "string" && typeof ((detail as Record<string, unknown>)["option"] as Record<string, unknown>)["value"] === "string" && typeof ((detail as Record<string, unknown>)["option"] as Record<string, unknown>)["label"] === "string" && (((detail as Record<string, unknown>)["option"] as Record<string, unknown>)["group"] === undefined || typeof ((detail as Record<string, unknown>)["option"] as Record<string, unknown>)["group"] === "string") && (((detail as Record<string, unknown>)["option"] as Record<string, unknown>)["disabled"] === undefined || typeof ((detail as Record<string, unknown>)["option"] as Record<string, unknown>)["disabled"] === "boolean") && Object.keys((detail as Record<string, unknown>)["option"] as object).every((key) => ["id","value","label","group","disabled"].includes(key))) || (detail as Record<string, unknown>)["option"] === null) && ((detail as Record<string, unknown>)["kind"] === "selection" || (detail as Record<string, unknown>)["kind"] === "clear" || (detail as Record<string, unknown>)["kind"] === "free-entry" || (detail as Record<string, unknown>)["kind"] === "create") && ((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","query","option","kind","trigger"].includes(key))),
137
+ "validation-change": (detail: unknown) => (detail !== null && typeof detail === "object" && !Array.isArray(detail) && ((detail as Record<string, unknown>)["status"] === "pristine" || (detail as Record<string, unknown>)["status"] === "pending" || (detail as Record<string, unknown>)["status"] === "valid" || (detail as Record<string, unknown>)["status"] === "warning" || (detail as Record<string, unknown>)["status"] === "error") && typeof (detail as Record<string, unknown>)["touched"] === "boolean" && typeof (detail as Record<string, unknown>)["dirty"] === "boolean" && (Array.isArray((detail as Record<string, unknown>)["issues"]) && ((detail as Record<string, unknown>)["issues"] as unknown[]).every((item: unknown) => (item !== null && typeof item === "object" && !Array.isArray(item) && typeof (item as Record<string, unknown>)["message"] === "string" && ((item as Record<string, unknown>)["path"] === undefined || (Array.isArray((item as Record<string, unknown>)["path"]) && ((item as Record<string, unknown>)["path"] as unknown[]).every((item: unknown) => true))) && ((item as Record<string, unknown>)["severity"] === undefined || ((item as Record<string, unknown>)["severity"] === "error" || (item as Record<string, unknown>)["severity"] === "warning")) && Object.keys(item as object).every((key) => ["message","path","severity"].includes(key))))) && ((detail as Record<string, unknown>)["output"] === undefined || true) && Object.keys(detail as object).every((key) => ["status","touched","dirty","issues","output"].includes(key))),
138
+ "options-change": (detail: unknown) => (Array.isArray(detail) && (detail as unknown[]).every((item: unknown) => (item !== null && typeof item === "object" && !Array.isArray(item) && typeof (item as Record<string, unknown>)["id"] === "string" && typeof (item as Record<string, unknown>)["value"] === "string" && typeof (item as Record<string, unknown>)["label"] === "string" && ((item as Record<string, unknown>)["group"] === undefined || typeof (item as Record<string, unknown>)["group"] === "string") && ((item as Record<string, unknown>)["disabled"] === undefined || typeof (item as Record<string, unknown>)["disabled"] === "boolean") && Object.keys(item as object).every((key) => ["id","value","label","group","disabled"].includes(key))))),
139
+ "add-item": (detail: unknown) => (detail !== null && typeof detail === "object" && !Array.isArray(detail) && ((detail as Record<string, unknown>)["item"] !== null && typeof (detail as Record<string, unknown>)["item"] === "object" && !Array.isArray((detail as Record<string, unknown>)["item"]) && typeof ((detail as Record<string, unknown>)["item"] as Record<string, unknown>)["id"] === "string" && typeof ((detail as Record<string, unknown>)["item"] as Record<string, unknown>)["value"] === "string" && typeof ((detail as Record<string, unknown>)["item"] as Record<string, unknown>)["label"] === "string" && (((detail as Record<string, unknown>)["item"] as Record<string, unknown>)["group"] === undefined || typeof ((detail as Record<string, unknown>)["item"] as Record<string, unknown>)["group"] === "string") && (((detail as Record<string, unknown>)["item"] as Record<string, unknown>)["disabled"] === undefined || typeof ((detail as Record<string, unknown>)["item"] as Record<string, unknown>)["disabled"] === "boolean") && Object.keys((detail as Record<string, unknown>)["item"] as object).every((key) => ["id","value","label","group","disabled"].includes(key))) && Number.isInteger((detail as Record<string, unknown>)["index"]) && ((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) => ["item","index","trigger"].includes(key))),
140
+ "remove-item": (detail: unknown) => (detail !== null && typeof detail === "object" && !Array.isArray(detail) && ((detail as Record<string, unknown>)["item"] !== null && typeof (detail as Record<string, unknown>)["item"] === "object" && !Array.isArray((detail as Record<string, unknown>)["item"]) && typeof ((detail as Record<string, unknown>)["item"] as Record<string, unknown>)["id"] === "string" && typeof ((detail as Record<string, unknown>)["item"] as Record<string, unknown>)["value"] === "string" && typeof ((detail as Record<string, unknown>)["item"] as Record<string, unknown>)["label"] === "string" && (((detail as Record<string, unknown>)["item"] as Record<string, unknown>)["group"] === undefined || typeof ((detail as Record<string, unknown>)["item"] as Record<string, unknown>)["group"] === "string") && (((detail as Record<string, unknown>)["item"] as Record<string, unknown>)["disabled"] === undefined || typeof ((detail as Record<string, unknown>)["item"] as Record<string, unknown>)["disabled"] === "boolean") && Object.keys((detail as Record<string, unknown>)["item"] as object).every((key) => ["id","value","label","group","disabled"].includes(key))) && Number.isInteger((detail as Record<string, unknown>)["index"]) && ((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) => ["item","index","trigger"].includes(key))),
141
+ "create-item": (detail: unknown) => (detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof (detail as Record<string, unknown>)["query"] === "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) => ["query","trigger"].includes(key))),
142
+ };
143
+ if (detail !== undefined && checks[name] !== undefined && !checks[name]!(detail)) {
144
+ throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
145
+ }
146
+ (emit as (name: string, detail: unknown) => void)(name, detail);
147
+ return root.value?.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, ...declared[name], detail })) ?? true;
148
+ };
149
+
150
+ /** The resolved values the styles' :host-state() rules test. */
151
+ const hostState = computed(() => (["size","validationStatus","multiple"] as const).flatMap((name) => {
152
+ const value = read(name);
153
+ const tokens: string[] = hn.t(value) ? [name] : [];
154
+ if (typeof value === "string" || typeof value === "number") tokens.push(`${name}=${encodeURIComponent(String(value))}`);
155
+ return tokens;
156
+ }).join(" "));
157
+
158
+ function read(name: string): unknown {
159
+ if (name === "raw") return state_raw.value;
160
+ if (name === "display") return state_display.value;
161
+ if (name === "selected") return state_selected.value;
162
+ if (name === "expanded") return state_expanded.value;
163
+ if (name === "rows") return state_rows.value;
164
+ if (name === "active") return state_active.value;
165
+ if (name === "loading") return state_loading.value;
166
+ if (name === "helpOpen") return state_helpOpen.value;
167
+ if (name === "lookupError") return state_lookupError.value;
168
+ if (name === "validation") return state_validation.value;
169
+ if (name === "uid") return state_uid.value;
170
+ if (name === "groups") return state_groups.value;
171
+ if (name === "creatable") return state_creatable.value;
172
+ if (name === "createIndex") return state_createIndex.value;
173
+ if (name === "message") return state_message.value;
174
+ if (name === "statusText") return state_statusText.value;
175
+ if (name === "validationStatus") return state_validationStatus.value;
176
+ return (props as Record<string, unknown>)[name];
177
+ }
178
+
179
+ function write(name: string, value: unknown): boolean {
180
+ if (name === "raw") { state_raw.value = value; return true; }
181
+ if (name === "display") { state_display.value = value; return true; }
182
+ if (name === "selected") { state_selected.value = value; return true; }
183
+ if (name === "expanded") { state_expanded.value = value; return true; }
184
+ if (name === "rows") { state_rows.value = value; return true; }
185
+ if (name === "active") { state_active.value = value; return true; }
186
+ if (name === "loading") { state_loading.value = value; return true; }
187
+ if (name === "helpOpen") { state_helpOpen.value = value; return true; }
188
+ if (name === "lookupError") { state_lookupError.value = value; return true; }
189
+ if (name === "validation") { state_validation.value = value; return true; }
190
+ if (name === "uid") { state_uid.value = value; return true; }
191
+ if (name === "groups") { state_groups.value = value; return true; }
192
+ if (name === "creatable") { state_creatable.value = value; return true; }
193
+ if (name === "createIndex") { state_createIndex.value = value; return true; }
194
+ if (name === "message") { state_message.value = value; return true; }
195
+ if (name === "statusText") { state_statusText.value = value; return true; }
196
+ if (name === "validationStatus") { state_validationStatus.value = value; return true; }
197
+ throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
198
+ }
199
+
200
+ const stops: Array<() => void> = [];
201
+ const host = {
202
+ get element(): Element { return root.value as Element; },
203
+ state: new Proxy({} as Record<string, unknown>, {
204
+ get: (_target, name) => typeof name === "string" ? read(name) : undefined,
205
+ set: (_target, name, value) => typeof name === "string" && write(name, value),
206
+ }),
207
+ refs: refs as Readonly<Record<string, Element>>,
208
+ elements: new Proxy({} as Record<string, Element | RadioNodeList | undefined>, {
209
+ get: (_target, name) => {
210
+ if (typeof name !== "string" || root.value === null) return undefined;
211
+ const form = root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form");
212
+ return form?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined;
213
+ },
214
+ }),
215
+ signal<T>(initialValue: T) {
216
+ const value = shallowRef(initialValue);
217
+ return {
218
+ get: (): T => value.value,
219
+ set: (next: T): void => { if (!Object.is(value.value, next)) value.value = next; },
220
+ update: (next: (current: T) => T): void => { const updated = next(value.value); if (!Object.is(value.value, updated)) value.value = updated; },
221
+ };
222
+ },
223
+ computed<T>(compute: () => T) {
224
+ const value = computed(compute);
225
+ return { get: (): T => value.value };
226
+ },
227
+ effect(run: () => void | (() => void)): () => void {
228
+ const stop = watchEffect((onCleanup) => {
229
+ const cleanup = run();
230
+ if (typeof cleanup === "function") onCleanup(cleanup);
231
+ }, { flush: "post" });
232
+ stops.push(stop);
233
+ return stop;
234
+ },
235
+ on(event: string, listener: EventListener): () => void {
236
+ const element = root.value;
237
+ element?.addEventListener(event, listener);
238
+ const off = (): void => element?.removeEventListener(event, listener);
239
+ stops.push(off);
240
+ return off;
241
+ },
242
+ dispatch,
243
+ };
244
+
245
+ let cleanup: void | (() => void);
246
+ let ready: Promise<void> | undefined;
247
+ onMounted(() => {
248
+ ready = Promise.resolve(controllerModule.default(host as never)).then((result) => { cleanup = result; });
249
+ });
250
+ onBeforeUnmount(() => {
251
+ for (const stop of stops.splice(0)) stop();
252
+ if (typeof cleanup === "function") cleanup();
253
+ });
254
+ defineExpose({
255
+ validate: async (...args: unknown[]) => { await ready; return (controllerModule as Record<string, (...values: unknown[]) => unknown>)["validate"]!(host, ...args); },
256
+ focusInput: async (...args: unknown[]) => { await ready; return (controllerModule as Record<string, (...values: unknown[]) => unknown>)["focusInput"]!(host, ...args); },
257
+ });
258
+ </script>
259
+
260
+ <template>
261
+ <div data-component="ui-combobox" v-bind="$attrs" :data-ui-combobox-state="hostState || undefined" ref="root"><label :for="hn.attr(hn.call('format', '%s-input', state_uid))" :class="{ 'sr-only': hn.t((props.labelVisibility === 'sr-only')) }">{{ hn.text(props.label) }}<template v-if="hn.t(props.required)">
262
+ *</template></label><div class="field" :ref="(element) => { refs['field'] = element as Element }"><slot name="start"></slot><template v-if="hn.t(props.multiple)"><template v-for="(item, index) in hn.shape(props.items, undefined, [], undefined)" :key="(item)?.id"><button class="item" type="button" tabindex="-1" :data-index="hn.attr(index)" :disabled="hn.attr((hn.t((hn.t(props.disabled) || hn.t(props.readonly))) || hn.t((item)?.disabled)))" :aria-label="hn.enumerated(hn.call('format', '%s, press Delete or Backspace to remove', (item)?.label))"><slot :name="hn.call('format', 'item-%s', (item)?.id)"><UiBadge>{{ hn.text((item)?.label) }}</UiBadge></slot></button></template></template><input role="combobox" aria-autocomplete="list" autocomplete="off" :id="hn.attr(hn.call('format', '%s-input', state_uid))" :aria-controls="hn.enumerated(hn.call('format', '%s-listbox', state_uid))" :aria-expanded="hn.enumerated(state_expanded)" :aria-invalid="hn.enumerated((state_validationStatus === 'error'))" :aria-busy="hn.enumerated((state_validationStatus === 'pending'))" :value.prop="(state_display) as any" :placeholder="hn.attr(props.placeholder)" :name="hn.attr(props.name)" :disabled="hn.attr(props.disabled)" :readonly="hn.attr(props.readonly)" :required="hn.attr(props.required)" :ref="(element) => { refs['input'] = element as Element }"><template v-if="hn.t(props.clearable)"><button type="button" data-combobox-action="clear" aria-label="Clear"><svg class="affordance-icon" aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M7 7l10 10M17 7 7 17"></path></svg></button></template><template v-if="hn.t(props.help)"><button type="button" aria-label="Help" :id="hn.attr(hn.call('format', '%s-help', state_uid))" :disabled="hn.attr(props.disabled)"><span aria-hidden="true">?</span></button></template><template v-if="hn.t(props.disclosure)"><button type="button" data-combobox-action="disclosure" tabindex="-1" aria-label="Show suggestions" :aria-controls="hn.enumerated(hn.call('format', '%s-listbox', state_uid))"><svg class="affordance-icon" aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round"><path d="m6 9 6 6 6-6"></path></svg></button></template></div><template v-if="hn.t(props.help)"><UiTooltip :id="hn.call('format', '%s-help-text', state_uid)" :for="hn.call('format', '%s-help', state_uid)">{{ hn.text(props.help) }}</UiTooltip></template><div class="popup" :hidden="hn.attr(!hn.t(state_expanded))" :ref="(element) => { refs['popup'] = element as Element }"><div role="listbox" :id="hn.attr(hn.call('format', '%s-listbox', state_uid))" :aria-label="hn.enumerated(hn.call('format', '%s suggestions', props.label))" :aria-busy="hn.enumerated(state_loading)" :ref="(element) => { refs['listbox'] = element as Element }"><template v-for="(group, index) in hn.shape(state_groups, undefined, [], undefined)" :key="(group)?.name"><div :role="hn.attr((group)?.role)" :aria-label="hn.enumerated((group)?.label)"><template v-if="hn.t((group)?.name)"><div class="group">{{ hn.text((group)?.name) }}</div></template><template v-for="(row, index) in hn.shape((group)?.rows, undefined, [], undefined)" :key="(row)?.id"><div class="option" role="option" :id="hn.attr(hn.call('format', '%s-option-%s', state_uid, (row)?.index))" :aria-selected="hn.enumerated(((row)?.value === state_selected))" :aria-disabled="hn.enumerated((row)?.disabled)" :data-index="hn.attr((row)?.index)" :class="{ 'active': hn.t(((row)?.index === state_active)) }"><slot :name="hn.call('format', 'option-%s', (row)?.id)"><span class="primary">{{ hn.text((row)?.label) }}</span></slot></div></template></div></template><template v-if="hn.t(state_creatable)"><div class="option" role="option" aria-selected="false" :id="hn.attr(hn.call('format', '%s-option-%s', state_uid, state_createIndex))" :data-index="hn.attr(state_createIndex)" :class="{ 'active': hn.t((state_createIndex === state_active)) }">{{ hn.text(hn.call("format", "Create “%s”", state_raw)) }}</div></template><template v-if="hn.t(state_message)"><div class="message">{{ hn.text(state_message) }}</div></template></div><slot name="footer"></slot></div><div class="message" :id="hn.attr(hn.call('format', '%s-validation', state_uid))" :hidden="hn.attr(!hn.t(((state_validation)?.issues)?.length))"><template v-for="(issue, index) in hn.shape((state_validation)?.issues, undefined, [], undefined)" :key="index"><div>{{ hn.text((issue)?.message) }}</div></template></div><div class="sr-only" role="status" aria-live="polite" aria-atomic="true">{{ hn.text(state_statusText) }}</div><div class="authored-options" hidden="" aria-hidden="true" :ref="(element) => { refs['options'] = element as Element }"><slot></slot></div></div>
263
+ </template>
264
+
265
+ <style scoped>
266
+ [data-component~="ui-combobox"] {
267
+ display: grid;
268
+ gap: var(--ui-space-1);
269
+ min-inline-size: 0;
270
+ color: var(--ui-text-primary);
271
+ font: inherit;
272
+ }
273
+ label {
274
+ color: var(--ui-field-label-color, var(--ui-text-primary));
275
+ font-size: var(--ui-field-label-size, 0.875rem);
276
+ font-weight: var(--ui-field-label-weight, 500);
277
+ }
278
+ .field {
279
+ display: flex;
280
+ min-inline-size: 0;
281
+ border: 1px solid var(--ui-control-border, var(--ui-border-default));
282
+ border-radius: var(--ui-radius-2);
283
+ background: var(--ui-control-surface, var(--ui-surface-default));
284
+ box-shadow: var(--ui-control-inset);
285
+ transition: border-color var(--ui-motion-fast) var(--ui-motion-ease), box-shadow var(--ui-motion-fast) var(--ui-motion-ease);
286
+ }
287
+ .field:focus-within {
288
+ border-color: var(--ui-control-focus, var(--ui-accent-solid));
289
+ box-shadow:
290
+ var(--ui-control-inset),
291
+ var(--ui-control-focus-halo-shadow);
292
+ }
293
+ input::selection {
294
+ background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
295
+ color: inherit;
296
+ }
297
+ input {
298
+ appearance: none;
299
+ width: 100%;
300
+ min-inline-size: 0;
301
+ min-block-size: calc(var(--ui-control-size-md, 2.5rem) - 2px);
302
+ box-sizing: border-box;
303
+ border: 0;
304
+ border-radius: inherit;
305
+ background: transparent;
306
+ color: inherit;
307
+ font: inherit;
308
+ line-height: var(--ui-line-height-md);
309
+ padding: var(--ui-space-2) var(--ui-space-3);
310
+ margin: 0;
311
+ outline: none;
312
+ }
313
+ [data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"] input {
314
+ min-block-size: calc(var(--ui-field-compact-size, var(--ui-control-size-sm, 2rem)) - 2px);
315
+ padding: var(--ui-space-1) var(--ui-space-2);
316
+ }
317
+ button {
318
+ appearance: none;
319
+ display: inline-grid;
320
+ place-items: center;
321
+ align-self: stretch;
322
+ border: 0;
323
+ border-radius: var(--ui-radius-2);
324
+ background: transparent;
325
+ color: var(--ui-field-affordance-color, var(--ui-text-secondary));
326
+ font: inherit;
327
+ font-weight: var(--ui-field-affordance-weight, 400);
328
+ min-inline-size: 2rem;
329
+ padding: 0 var(--ui-space-1);
330
+ cursor: pointer;
331
+ }
332
+ .affordance-icon {
333
+ display: block;
334
+ inline-size: var(--ui-icon-size-sm, 1rem);
335
+ block-size: var(--ui-icon-size-sm, 1rem);
336
+ }
337
+ button:hover:enabled {
338
+ background: var(--ui-surface-muted);
339
+ color: var(--ui-text-primary);
340
+ }
341
+ button:focus-visible {
342
+ outline: none;
343
+ background: var(--ui-surface-muted);
344
+ box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--ui-focus-ring) 45%, transparent);
345
+ }
346
+ input:disabled, button:disabled {
347
+ color: var(--ui-text-muted);
348
+ cursor: not-allowed;
349
+ }
350
+ .field:has(input:disabled) {
351
+ background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
352
+ }
353
+ [data-component~="ui-combobox"][data-ui-combobox-state~="validationStatus=error"] .field {
354
+ border-color: var(--ui-danger-solid, var(--ui-accent-active));
355
+ }
356
+ .popup {
357
+ box-sizing: border-box;
358
+ min-inline-size: 12rem;
359
+ max-inline-size: calc(100vw - 1rem);
360
+ max-block-size: var(--ui-combobox-max-block-size, 18rem);
361
+ overflow: auto;
362
+ margin: 0;
363
+ padding: var(--ui-space-1);
364
+ border: 1px solid var(--ui-border-default);
365
+ border-radius: var(--ui-radius-2);
366
+ background: var(--ui-surface-elevated);
367
+ color: var(--ui-text-primary);
368
+ box-shadow: var(--ui-elevation-overlay, var(--ui-shadow-lg));
369
+ }
370
+ [hidden] {
371
+ display: none;
372
+ }
373
+ .option {
374
+ padding: var(--ui-space-2) var(--ui-space-3);
375
+ border-radius: var(--ui-radius-1);
376
+ cursor: pointer;
377
+ overflow-wrap: anywhere;
378
+ }
379
+ .option:hover, .option.active {
380
+ background: var(--ui-surface-muted);
381
+ outline: 1px solid var(--ui-focus-ring, currentColor);
382
+ outline-offset: -1px;
383
+ }
384
+ .option[aria-disabled="true"] {
385
+ color: var(--ui-text-muted);
386
+ cursor: not-allowed;
387
+ }
388
+ .primary {
389
+ display: block;
390
+ color: var(--ui-option-primary-color, var(--ui-text-primary));
391
+ font-weight: var(--ui-option-primary-weight, 500);
392
+ }
393
+ .message, .group {
394
+ color: var(--ui-field-message-color, var(--ui-text-secondary));
395
+ font-weight: var(--ui-field-message-weight, 400);
396
+ font-size: var(--ui-font-size-sm);
397
+ line-height: var(--ui-line-height-md);
398
+ overflow-wrap: anywhere;
399
+ }
400
+ .group, .popup .message {
401
+ padding: var(--ui-space-2) var(--ui-space-3);
402
+ }
403
+ .sr-only {
404
+ position: absolute;
405
+ inline-size: 1px;
406
+ block-size: 1px;
407
+ overflow: hidden;
408
+ clip-path: inset(50%);
409
+ white-space: nowrap;
410
+ }
411
+ @media (pointer: coarse) {
412
+ button {
413
+ min-inline-size: 2.75rem;
414
+ min-block-size: 2.75rem;
415
+ }
416
+ }
417
+ @media (forced-colors: active) {
418
+ .field, .popup {
419
+ border-color: CanvasText;
420
+ }
421
+ .option.active {
422
+ outline-color: Highlight;
423
+ }
424
+ }
425
+
426
+ /* Multiple mode: chips wrap before the cursor on one flexible field line. */
427
+ [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .field {
428
+ flex-wrap: wrap;
429
+ align-items: center;
430
+ gap: var(--ui-space-1);
431
+ min-block-size: var(--ui-multi-combobox-min-block-size, 2.5rem);
432
+ padding: var(--ui-space-1);
433
+ }
434
+ [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] input {
435
+ flex: 1 0 var(--ui-multi-combobox-input-min-inline-size, 5rem);
436
+ width: auto;
437
+ min-block-size: 1.75rem;
438
+ padding: var(--ui-space-0-5) var(--ui-space-1);
439
+ }
440
+ .item {
441
+ appearance: none;
442
+ display: inline-flex;
443
+ min-inline-size: 0;
444
+ max-inline-size: min(100%, var(--ui-multi-combobox-item-max-inline-size, 12rem));
445
+ overflow: hidden;
446
+ padding: 0;
447
+ border: 0;
448
+ border-radius: var(--ui-radius-1);
449
+ background: transparent;
450
+ color: inherit;
451
+ font: inherit;
452
+ cursor: default;
453
+ }
454
+ .item:focus-visible {
455
+ outline: 2px solid var(--ui-focus-ring, currentColor);
456
+ outline-offset: 1px;
457
+ }
458
+ .item:disabled {
459
+ opacity: 0.6;
460
+ }
461
+
462
+ /* A component that sets its display still honours the hidden attribute on its root. */
463
+ [data-component~="ui-combobox"][hidden] {
464
+ display: none;
465
+ }
466
+ </style>
@@ -0,0 +1,17 @@
1
+ type __VLS_Props = {
2
+ gutters?: "s" | "m" | "l" | null;
3
+ measure?: "narrow" | "wide" | null;
4
+ };
5
+ declare var __VLS_1: {};
6
+ type __VLS_Slots = {} & {
7
+ default?: (props: typeof __VLS_1) => any;
8
+ };
9
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
10
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
11
+ declare const _default: typeof __VLS_export;
12
+ export default _default;
13
+ type __VLS_WithSlots<T, S> = T & {
14
+ new (): {
15
+ $slots: S;
16
+ };
17
+ };
@@ -0,0 +1,2 @@
1
+ import { t as UiContainer_default } from "./chunks/UiContainer.js";
2
+ export { UiContainer_default as default };
@@ -0,0 +1,65 @@
1
+ <!-- Generated by HTML Next 1.0.0-alpha.1 for Vue 3.5. Do not edit. -->
2
+ <script setup lang="ts">
3
+ import { computed } from "vue";
4
+
5
+ defineOptions({ inheritAttrs: false });
6
+
7
+ const hn = {
8
+ 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),
9
+ };
10
+
11
+ const props = defineProps<{
12
+ gutters?: "s" | "m" | "l" | null;
13
+ measure?: "narrow" | "wide" | null;
14
+ }>();
15
+
16
+ /** The resolved values the styles' :host-state() rules test. */
17
+ const hostState = computed(() => (["measure","gutters"] as const).flatMap((name) => {
18
+ const value = read(name);
19
+ const tokens: string[] = hn.t(value) ? [name] : [];
20
+ if (typeof value === "string" || typeof value === "number") tokens.push(`${name}=${encodeURIComponent(String(value))}`);
21
+ return tokens;
22
+ }).join(" "));
23
+
24
+ function read(name: string): unknown {
25
+ return (props as Record<string, unknown>)[name];
26
+ }
27
+
28
+ </script>
29
+
30
+ <template>
31
+ <div data-component="ui-container" v-bind="$attrs" :data-ui-container-state="hostState || undefined"><slot></slot></div>
32
+ </template>
33
+
34
+ <style scoped>
35
+ [data-component~="ui-container"] {
36
+ --_container-measure: 65ch;
37
+ --_container-gutters: var(--ui-space-4, 1rem);
38
+ display: block;
39
+ inline-size: 100%;
40
+ max-inline-size: var(--ui-container-measure, var(--_container-measure));
41
+ margin-inline: auto;
42
+ padding-inline: var(--ui-container-gutters, var(--_container-gutters));
43
+ }
44
+
45
+ [data-component~="ui-container"][data-ui-container-state~="measure=narrow"] {
46
+ --_container-measure: 45ch;
47
+ }
48
+ [data-component~="ui-container"][data-ui-container-state~="measure=wide"] {
49
+ --_container-measure: 80ch;
50
+ }
51
+ [data-component~="ui-container"][data-ui-container-state~="gutters=s"] {
52
+ --_container-gutters: var(--ui-space-3, 0.75rem);
53
+ }
54
+ [data-component~="ui-container"][data-ui-container-state~="gutters=m"] {
55
+ --_container-gutters: var(--ui-space-4, 1rem);
56
+ }
57
+ [data-component~="ui-container"][data-ui-container-state~="gutters=l"] {
58
+ --_container-gutters: var(--ui-space-5, 1.5rem);
59
+ }
60
+
61
+ /* A component that sets its display still honours the hidden attribute on its root. */
62
+ [data-component~="ui-container"][hidden] {
63
+ display: none;
64
+ }
65
+ </style>
@@ -0,0 +1,50 @@
1
+ type __VLS_Props = {
2
+ for?: string | null;
3
+ open?: boolean | null;
4
+ };
5
+ declare var __VLS_1: {};
6
+ type __VLS_Slots = {} & {
7
+ default?: (props: typeof __VLS_1) => any;
8
+ };
9
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
10
+ select: (detail: {
11
+ readonly value: string;
12
+ readonly trigger: "keyboard" | "pointer" | "programmatic";
13
+ }) => any;
14
+ close: (detail: {
15
+ readonly open: boolean;
16
+ readonly reason: "action" | "programmatic" | "light-dismiss" | "escape";
17
+ readonly trigger: "keyboard" | "pointer" | "programmatic";
18
+ }) => any;
19
+ open: (detail: {
20
+ readonly open: boolean;
21
+ readonly reason: "action" | "programmatic" | "light-dismiss" | "escape";
22
+ readonly trigger: "keyboard" | "pointer" | "programmatic";
23
+ }) => any;
24
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
25
+ onSelect?: ((detail: {
26
+ readonly value: string;
27
+ readonly trigger: "keyboard" | "pointer" | "programmatic";
28
+ }) => any) | undefined;
29
+ onClose?: ((detail: {
30
+ readonly open: boolean;
31
+ readonly reason: "action" | "programmatic" | "light-dismiss" | "escape";
32
+ readonly trigger: "keyboard" | "pointer" | "programmatic";
33
+ }) => any) | undefined;
34
+ onOpen?: ((detail: {
35
+ readonly open: boolean;
36
+ readonly reason: "action" | "programmatic" | "light-dismiss" | "escape";
37
+ readonly trigger: "keyboard" | "pointer" | "programmatic";
38
+ }) => any) | undefined;
39
+ }>, {
40
+ for: string | null;
41
+ open: boolean | null;
42
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
43
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
44
+ declare const _default: typeof __VLS_export;
45
+ export default _default;
46
+ type __VLS_WithSlots<T, S> = T & {
47
+ new (): {
48
+ $slots: S;
49
+ };
50
+ };
@@ -0,0 +1,2 @@
1
+ import { t as UiContextMenu_default } from "./chunks/UiContextMenu.js";
2
+ export { UiContextMenu_default as default };