@threadlabs/looma 0.4.0 → 0.5.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 (491) hide show
  1. package/README.md +43 -12
  2. package/components/shared/editor.js +69 -0
  3. package/components/shared/input-modality.d.ts +8 -0
  4. package/components/shared/input-modality.js +22 -0
  5. package/components/shared/overlay.js +281 -0
  6. package/components/shared/trigger.js +17 -0
  7. package/components/ui-affordance-scope/ui-affordance-scope.html +22 -0
  8. package/components/ui-affordance-scope/ui-affordance-scope.js +76 -0
  9. package/components/ui-avatar/ui-avatar.html +59 -0
  10. package/components/ui-avatar/ui-avatar.js +47 -0
  11. package/components/ui-avatar-group/ui-avatar-group.html +62 -0
  12. package/components/ui-avatar-group/ui-avatar-group.js +27 -0
  13. package/components/ui-badge/ui-badge.html +94 -0
  14. package/components/ui-button/ui-button.html +226 -0
  15. package/components/ui-callout/ui-callout.html +104 -0
  16. package/components/ui-checkbox/ui-checkbox.html +107 -0
  17. package/components/ui-checkbox/ui-checkbox.js +24 -0
  18. package/components/ui-cluster/ui-cluster.html +49 -0
  19. package/components/ui-combobox/ui-combobox.html +377 -0
  20. package/components/ui-combobox/ui-combobox.js +432 -0
  21. package/components/ui-container/ui-container.html +39 -0
  22. package/components/ui-context-menu/ui-context-menu.html +75 -0
  23. package/components/ui-context-menu/ui-context-menu.js +143 -0
  24. package/components/ui-dialog/ui-dialog.html +178 -0
  25. package/components/ui-dialog/ui-dialog.js +105 -0
  26. package/components/ui-disclosure/ui-disclosure.html +109 -0
  27. package/components/ui-disclosure/ui-disclosure.js +28 -0
  28. package/components/ui-editable/ui-editable.html +163 -0
  29. package/components/ui-editable/ui-editable.js +113 -0
  30. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.html +97 -0
  31. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.js +71 -0
  32. package/components/ui-editor-mention-menu/ui-editor-mention-menu.html +157 -0
  33. package/components/ui-editor-mention-menu/ui-editor-mention-menu.js +50 -0
  34. package/components/ui-editor-slash-menu/ui-editor-slash-menu.html +197 -0
  35. package/components/ui-editor-slash-menu/ui-editor-slash-menu.js +44 -0
  36. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +164 -0
  37. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.js +75 -0
  38. package/components/ui-editor-table-overlay/ui-editor-table-overlay.html +422 -0
  39. package/components/ui-editor-table-overlay/ui-editor-table-overlay.js +119 -0
  40. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +271 -0
  41. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.js +54 -0
  42. package/components/ui-editor-toolbar/ui-editor-toolbar.html +110 -0
  43. package/components/ui-floating-action-button/ui-floating-action-button.html +83 -0
  44. package/components/ui-form-field/ui-form-field.html +45 -0
  45. package/components/ui-form-field/ui-form-field.js +71 -0
  46. package/components/ui-grid/ui-grid.html +46 -0
  47. package/components/ui-icon/ui-icon.html +34 -0
  48. package/components/ui-icon/ui-icon.js +8 -0
  49. package/components/ui-icon-button/ui-icon-button.html +180 -0
  50. package/components/ui-icon-button/ui-icon-button.js +7 -0
  51. package/components/ui-input/ui-input.html +81 -0
  52. package/components/ui-input/ui-input.js +7 -0
  53. package/components/ui-menu/ui-menu.html +87 -0
  54. package/components/ui-menu/ui-menu.js +114 -0
  55. package/components/ui-menu-item/ui-menu-item.html +37 -0
  56. package/components/ui-popover/ui-popover.html +85 -0
  57. package/components/ui-popover/ui-popover.js +70 -0
  58. package/components/ui-radio/ui-radio.html +57 -0
  59. package/components/ui-radio/ui-radio.js +25 -0
  60. package/components/ui-radio-group/ui-radio-group.html +51 -0
  61. package/components/ui-radio-group/ui-radio-group.js +42 -0
  62. package/components/ui-reel/ui-reel.html +67 -0
  63. package/components/ui-search-result-row/ui-search-result-row.html +101 -0
  64. package/components/ui-search-shell/ui-search-shell.html +142 -0
  65. package/components/ui-search-shell/ui-search-shell.js +60 -0
  66. package/components/ui-select/ui-select.html +87 -0
  67. package/components/ui-select/ui-select.js +16 -0
  68. package/components/ui-separator/ui-separator.html +22 -0
  69. package/components/ui-sidebar/ui-sidebar.html +183 -0
  70. package/components/ui-sidebar/ui-sidebar.js +178 -0
  71. package/components/ui-stack/ui-stack.html +59 -0
  72. package/components/ui-switch/ui-switch.html +95 -0
  73. package/components/ui-switch/ui-switch.js +24 -0
  74. package/components/ui-switcher/ui-switcher.html +65 -0
  75. package/components/ui-tabs/ui-tabs.html +134 -0
  76. package/components/ui-tabs/ui-tabs.js +81 -0
  77. package/components/ui-textarea/ui-textarea.html +80 -0
  78. package/components/ui-textarea/ui-textarea.js +7 -0
  79. package/components/ui-toast-region/ui-toast-region.html +127 -0
  80. package/components/ui-toast-region/ui-toast-region.js +119 -0
  81. package/components/ui-tooltip/ui-tooltip.html +122 -0
  82. package/components/ui-tooltip/ui-tooltip.js +134 -0
  83. package/components/ui-top-bar/ui-top-bar.html +53 -0
  84. package/components/ui-tree/ui-tree.html +29 -0
  85. package/components/ui-tree/ui-tree.js +250 -0
  86. package/components/ui-tree-item/ui-tree-item.html +326 -0
  87. package/components/ui-tree-item/ui-tree-item.js +94 -0
  88. package/dist/index.d.ts +4 -414
  89. package/dist/index.js +55 -657
  90. package/editor/chunks/extensions.js +7267 -0
  91. package/editor/chunks/table-backgrounds.js +51 -0
  92. package/editor/chunks/ui.js +92 -0
  93. package/editor/extensions/callout.d.ts +20 -0
  94. package/editor/extensions/index.d.ts +12 -441
  95. package/editor/extensions/index.js +3 -64
  96. package/editor/extensions/list-behavior.d.ts +7 -0
  97. package/editor/extensions/mention.d.ts +35 -0
  98. package/editor/extensions/preset.d.ts +42 -0
  99. package/editor/extensions/slash-command.d.ts +80 -0
  100. package/editor/extensions/smart-paste.d.ts +13 -0
  101. package/editor/extensions/table-commands.d.ts +114 -0
  102. package/editor/extensions/table-formatting.d.ts +60 -0
  103. package/editor/icons.d.ts +55 -0
  104. package/editor/index.d.ts +8 -6
  105. package/editor/index.js +96 -71
  106. package/editor/insert-table-grid.d.ts +7 -0
  107. package/editor/mention-contract.d.ts +78 -0
  108. package/editor/mention-menu.d.ts +9 -0
  109. package/editor/slash-menu.d.ts +29 -0
  110. package/editor/table-backgrounds.d.ts +43 -0
  111. package/editor/table-context-menu.d.ts +12 -0
  112. package/editor/table-overlay.d.ts +79 -0
  113. package/editor/ui.d.ts +10 -50
  114. package/editor/ui.js +3 -14
  115. package/editor/viewport.d.ts +15 -0
  116. package/package.json +84 -60
  117. package/styles/ui-affordance-scope.css +19 -0
  118. package/styles/ui-avatar-group.css +56 -0
  119. package/styles/ui-avatar.css +47 -0
  120. package/styles/ui-badge.css +91 -0
  121. package/styles/ui-button.css +236 -0
  122. package/styles/ui-callout.css +76 -0
  123. package/styles/ui-checkbox.css +98 -0
  124. package/styles/ui-cluster.css +46 -0
  125. package/styles/ui-combobox.css +213 -0
  126. package/styles/ui-container.css +36 -0
  127. package/styles/ui-context-menu.css +68 -0
  128. package/styles/ui-dialog.css +160 -0
  129. package/styles/ui-disclosure.css +95 -0
  130. package/styles/ui-editable.css +139 -0
  131. package/styles/ui-editor-insert-table-grid.css +65 -0
  132. package/styles/ui-editor-mention-menu.css +121 -0
  133. package/styles/ui-editor-slash-menu.css +179 -0
  134. package/styles/ui-editor-table-context-menu.css +118 -0
  135. package/styles/ui-editor-table-overlay.css +318 -0
  136. package/styles/ui-editor-table-toolbar.css +191 -0
  137. package/styles/ui-editor-toolbar.css +115 -0
  138. package/styles/ui-floating-action-button.css +82 -0
  139. package/styles/ui-form-field.css +36 -0
  140. package/styles/ui-grid.css +43 -0
  141. package/styles/ui-icon-button.css +184 -0
  142. package/styles/ui-icon.css +23 -0
  143. package/styles/ui-input.css +82 -0
  144. package/styles/ui-menu-item.css +34 -0
  145. package/styles/ui-menu.css +80 -0
  146. package/styles/ui-popover.css +76 -0
  147. package/styles/ui-radio-group.css +38 -0
  148. package/styles/ui-radio.css +46 -0
  149. package/styles/ui-reel.css +63 -0
  150. package/styles/ui-search-result-row.css +92 -0
  151. package/styles/ui-search-shell.css +128 -0
  152. package/styles/ui-select.css +86 -0
  153. package/styles/ui-separator.css +16 -0
  154. package/styles/ui-sidebar.css +166 -0
  155. package/styles/ui-stack.css +55 -0
  156. package/styles/ui-switch.css +88 -0
  157. package/styles/ui-switcher.css +61 -0
  158. package/styles/ui-tabs.css +114 -0
  159. package/styles/ui-textarea.css +77 -0
  160. package/styles/ui-toast-region.css +103 -0
  161. package/styles/ui-tooltip.css +113 -0
  162. package/styles/ui-top-bar.css +51 -0
  163. package/styles/ui-tree-item.css +267 -0
  164. package/styles/ui-tree.css +16 -0
  165. package/vanilla/UiAffordanceScope.d.ts +14 -0
  166. package/vanilla/UiAffordanceScope.js +30 -0
  167. package/vanilla/UiAvatar.d.ts +17 -0
  168. package/vanilla/UiAvatar.js +41 -0
  169. package/vanilla/UiAvatarGroup.d.ts +15 -0
  170. package/vanilla/UiAvatarGroup.js +40 -0
  171. package/vanilla/UiBadge.d.ts +15 -0
  172. package/vanilla/UiBadge.js +30 -0
  173. package/vanilla/UiButton.d.ts +16 -0
  174. package/vanilla/UiButton.js +32 -0
  175. package/vanilla/UiCallout.d.ts +14 -0
  176. package/vanilla/UiCallout.js +124 -0
  177. package/vanilla/UiCheckbox.d.ts +19 -0
  178. package/vanilla/UiCheckbox.js +47 -0
  179. package/vanilla/UiCluster.d.ts +15 -0
  180. package/vanilla/UiCluster.js +30 -0
  181. package/vanilla/UiCombobox.d.ts +42 -0
  182. package/vanilla/UiCombobox.js +194 -0
  183. package/vanilla/UiContainer.d.ts +15 -0
  184. package/vanilla/UiContainer.js +30 -0
  185. package/vanilla/UiContextMenu.d.ts +18 -0
  186. package/vanilla/UiContextMenu.js +35 -0
  187. package/vanilla/UiDialog.d.ts +19 -0
  188. package/vanilla/UiDialog.js +53 -0
  189. package/vanilla/UiDisclosure.d.ts +18 -0
  190. package/vanilla/UiDisclosure.js +49 -0
  191. package/vanilla/UiEditable.d.ts +22 -0
  192. package/vanilla/UiEditable.js +59 -0
  193. package/vanilla/UiEditorInsertTableGrid.d.ts +18 -0
  194. package/vanilla/UiEditorInsertTableGrid.js +46 -0
  195. package/vanilla/UiEditorMentionMenu.d.ts +21 -0
  196. package/vanilla/UiEditorMentionMenu.js +63 -0
  197. package/vanilla/UiEditorSlashMenu.d.ts +20 -0
  198. package/vanilla/UiEditorSlashMenu.js +74 -0
  199. package/vanilla/UiEditorTableContextMenu.d.ts +17 -0
  200. package/vanilla/UiEditorTableContextMenu.js +69 -0
  201. package/vanilla/UiEditorTableOverlay.d.ts +16 -0
  202. package/vanilla/UiEditorTableOverlay.js +113 -0
  203. package/vanilla/UiEditorTableToolbar.d.ts +18 -0
  204. package/vanilla/UiEditorTableToolbar.js +121 -0
  205. package/vanilla/UiEditorToolbar.d.ts +14 -0
  206. package/vanilla/UiEditorToolbar.js +30 -0
  207. package/vanilla/UiFloatingActionButton.d.ts +16 -0
  208. package/vanilla/UiFloatingActionButton.js +35 -0
  209. package/vanilla/UiFormField.d.ts +16 -0
  210. package/vanilla/UiFormField.js +54 -0
  211. package/vanilla/UiGrid.d.ts +15 -0
  212. package/vanilla/UiGrid.js +30 -0
  213. package/vanilla/UiIcon.d.ts +14 -0
  214. package/vanilla/UiIcon.js +40 -0
  215. package/vanilla/UiIconButton.d.ts +19 -0
  216. package/vanilla/UiIconButton.js +37 -0
  217. package/vanilla/UiInput.d.ts +18 -0
  218. package/vanilla/UiInput.js +37 -0
  219. package/vanilla/UiMenu.d.ts +19 -0
  220. package/vanilla/UiMenu.js +35 -0
  221. package/vanilla/UiMenuItem.d.ts +15 -0
  222. package/vanilla/UiMenuItem.js +43 -0
  223. package/vanilla/UiPopover.d.ts +18 -0
  224. package/vanilla/UiPopover.js +33 -0
  225. package/vanilla/UiRadio.d.ts +19 -0
  226. package/vanilla/UiRadio.js +48 -0
  227. package/vanilla/UiRadioGroup.d.ts +21 -0
  228. package/vanilla/UiRadioGroup.js +35 -0
  229. package/vanilla/UiReel.d.ts +16 -0
  230. package/vanilla/UiReel.js +34 -0
  231. package/vanilla/UiSearchResultRow.d.ts +15 -0
  232. package/vanilla/UiSearchResultRow.js +82 -0
  233. package/vanilla/UiSearchShell.d.ts +18 -0
  234. package/vanilla/UiSearchShell.js +74 -0
  235. package/vanilla/UiSelect.d.ts +18 -0
  236. package/vanilla/UiSelect.js +42 -0
  237. package/vanilla/UiSeparator.d.ts +14 -0
  238. package/vanilla/UiSeparator.js +28 -0
  239. package/vanilla/UiSidebar.d.ts +24 -0
  240. package/vanilla/UiSidebar.js +47 -0
  241. package/vanilla/UiStack.d.ts +16 -0
  242. package/vanilla/UiStack.js +32 -0
  243. package/vanilla/UiSwitch.d.ts +18 -0
  244. package/vanilla/UiSwitch.js +46 -0
  245. package/vanilla/UiSwitcher.d.ts +16 -0
  246. package/vanilla/UiSwitcher.js +32 -0
  247. package/vanilla/UiTabs.d.ts +18 -0
  248. package/vanilla/UiTabs.js +47 -0
  249. package/vanilla/UiTextarea.d.ts +19 -0
  250. package/vanilla/UiTextarea.js +40 -0
  251. package/vanilla/UiToastRegion.d.ts +20 -0
  252. package/vanilla/UiToastRegion.js +58 -0
  253. package/vanilla/UiTooltip.d.ts +21 -0
  254. package/vanilla/UiTooltip.js +34 -0
  255. package/vanilla/UiTopBar.d.ts +13 -0
  256. package/vanilla/UiTopBar.js +59 -0
  257. package/vanilla/UiTree.d.ts +18 -0
  258. package/vanilla/UiTree.js +31 -0
  259. package/vanilla/UiTreeItem.d.ts +26 -0
  260. package/vanilla/UiTreeItem.js +164 -0
  261. package/vanilla/index.js +48 -0
  262. package/vue/UiAffordanceScope.d.ts +18 -0
  263. package/vue/UiAffordanceScope.js +2 -0
  264. package/vue/UiAffordanceScope.vue +118 -0
  265. package/vue/UiAvatar.d.ts +23 -0
  266. package/vue/UiAvatar.js +2 -0
  267. package/vue/UiAvatar.vue +152 -0
  268. package/vue/UiAvatarGroup.d.ts +20 -0
  269. package/vue/UiAvatarGroup.js +2 -0
  270. package/vue/UiAvatarGroup.vue +167 -0
  271. package/vue/UiBadge.d.ts +20 -0
  272. package/vue/UiBadge.js +2 -0
  273. package/vue/UiBadge.vue +123 -0
  274. package/vue/UiButton.d.ts +22 -0
  275. package/vue/UiButton.js +2 -0
  276. package/vue/UiButton.vue +257 -0
  277. package/vue/UiCallout.d.ts +18 -0
  278. package/vue/UiCallout.js +2 -0
  279. package/vue/UiCallout.vue +104 -0
  280. package/vue/UiCheckbox.d.ts +38 -0
  281. package/vue/UiCheckbox.js +2 -0
  282. package/vue/UiCheckbox.vue +216 -0
  283. package/vue/UiCluster.d.ts +17 -0
  284. package/vue/UiCluster.js +2 -0
  285. package/vue/UiCluster.vue +75 -0
  286. package/vue/UiCombobox.d.ts +255 -0
  287. package/vue/UiCombobox.js +2 -0
  288. package/vue/UiCombobox.vue +466 -0
  289. package/vue/UiContainer.d.ts +17 -0
  290. package/vue/UiContainer.js +2 -0
  291. package/vue/UiContainer.vue +65 -0
  292. package/vue/UiContextMenu.d.ts +50 -0
  293. package/vue/UiContextMenu.js +2 -0
  294. package/vue/UiContextMenu.vue +166 -0
  295. package/vue/UiDialog.d.ts +39 -0
  296. package/vue/UiDialog.js +2 -0
  297. package/vue/UiDialog.vue +273 -0
  298. package/vue/UiDisclosure.d.ts +44 -0
  299. package/vue/UiDisclosure.js +2 -0
  300. package/vue/UiDisclosure.vue +211 -0
  301. package/vue/UiEditable.d.ts +48 -0
  302. package/vue/UiEditable.js +2 -0
  303. package/vue/UiEditable.vue +267 -0
  304. package/vue/UiEditorInsertTableGrid.d.ts +26 -0
  305. package/vue/UiEditorInsertTableGrid.js +2 -0
  306. package/vue/UiEditorInsertTableGrid.vue +210 -0
  307. package/vue/UiEditorMentionMenu.d.ts +44 -0
  308. package/vue/UiEditorMentionMenu.js +2 -0
  309. package/vue/UiEditorMentionMenu.vue +284 -0
  310. package/vue/UiEditorSlashMenu.d.ts +41 -0
  311. package/vue/UiEditorSlashMenu.js +2 -0
  312. package/vue/UiEditorSlashMenu.vue +306 -0
  313. package/vue/UiEditorTableContextMenu.d.ts +19 -0
  314. package/vue/UiEditorTableContextMenu.js +2 -0
  315. package/vue/UiEditorTableContextMenu.vue +252 -0
  316. package/vue/UiEditorTableOverlay.d.ts +66 -0
  317. package/vue/UiEditorTableOverlay.js +2 -0
  318. package/vue/UiEditorTableOverlay.vue +455 -0
  319. package/vue/UiEditorTableToolbar.d.ts +21 -0
  320. package/vue/UiEditorTableToolbar.js +2 -0
  321. package/vue/UiEditorTableToolbar.vue +339 -0
  322. package/vue/UiEditorToolbar.d.ts +18 -0
  323. package/vue/UiEditorToolbar.js +2 -0
  324. package/vue/UiEditorToolbar.vue +138 -0
  325. package/vue/UiFloatingActionButton.d.ts +22 -0
  326. package/vue/UiFloatingActionButton.js +2 -0
  327. package/vue/UiFloatingActionButton.vue +116 -0
  328. package/vue/UiFormField.d.ts +28 -0
  329. package/vue/UiFormField.js +2 -0
  330. package/vue/UiFormField.vue +124 -0
  331. package/vue/UiGrid.d.ts +17 -0
  332. package/vue/UiGrid.js +2 -0
  333. package/vue/UiGrid.vue +72 -0
  334. package/vue/UiIcon.d.ts +8 -0
  335. package/vue/UiIcon.js +2 -0
  336. package/vue/UiIcon.vue +135 -0
  337. package/vue/UiIconButton.d.ts +27 -0
  338. package/vue/UiIconButton.js +2 -0
  339. package/vue/UiIconButton.vue +281 -0
  340. package/vue/UiInput.d.ts +20 -0
  341. package/vue/UiInput.js +2 -0
  342. package/vue/UiInput.vue +177 -0
  343. package/vue/UiMenu.d.ts +52 -0
  344. package/vue/UiMenu.js +2 -0
  345. package/vue/UiMenu.vue +194 -0
  346. package/vue/UiMenuItem.d.ts +20 -0
  347. package/vue/UiMenuItem.js +2 -0
  348. package/vue/UiMenuItem.vue +55 -0
  349. package/vue/UiPopover.d.ts +44 -0
  350. package/vue/UiPopover.js +2 -0
  351. package/vue/UiPopover.vue +188 -0
  352. package/vue/UiRadio.d.ts +38 -0
  353. package/vue/UiRadio.js +2 -0
  354. package/vue/UiRadio.vue +166 -0
  355. package/vue/UiRadioGroup.d.ts +50 -0
  356. package/vue/UiRadioGroup.js +2 -0
  357. package/vue/UiRadioGroup.vue +161 -0
  358. package/vue/UiReel.d.ts +18 -0
  359. package/vue/UiReel.js +2 -0
  360. package/vue/UiReel.vue +93 -0
  361. package/vue/UiSearchResultRow.d.ts +28 -0
  362. package/vue/UiSearchResultRow.js +2 -0
  363. package/vue/UiSearchResultRow.vue +124 -0
  364. package/vue/UiSearchShell.d.ts +42 -0
  365. package/vue/UiSearchShell.js +2 -0
  366. package/vue/UiSearchShell.vue +233 -0
  367. package/vue/UiSelect.d.ts +30 -0
  368. package/vue/UiSelect.js +2 -0
  369. package/vue/UiSelect.vue +183 -0
  370. package/vue/UiSeparator.d.ts +8 -0
  371. package/vue/UiSeparator.js +2 -0
  372. package/vue/UiSeparator.vue +38 -0
  373. package/vue/UiSidebar.d.ts +54 -0
  374. package/vue/UiSidebar.js +2 -0
  375. package/vue/UiSidebar.vue +288 -0
  376. package/vue/UiStack.d.ts +18 -0
  377. package/vue/UiStack.js +2 -0
  378. package/vue/UiStack.vue +85 -0
  379. package/vue/UiSwitch.d.ts +36 -0
  380. package/vue/UiSwitch.js +2 -0
  381. package/vue/UiSwitch.vue +203 -0
  382. package/vue/UiSwitcher.d.ts +18 -0
  383. package/vue/UiSwitcher.js +2 -0
  384. package/vue/UiSwitcher.vue +91 -0
  385. package/vue/UiTabs.d.ts +36 -0
  386. package/vue/UiTabs.js +2 -0
  387. package/vue/UiTabs.vue +269 -0
  388. package/vue/UiTextarea.d.ts +22 -0
  389. package/vue/UiTextarea.js +2 -0
  390. package/vue/UiTextarea.vue +177 -0
  391. package/vue/UiToastRegion.d.ts +48 -0
  392. package/vue/UiToastRegion.js +2 -0
  393. package/vue/UiToastRegion.vue +256 -0
  394. package/vue/UiTooltip.d.ts +50 -0
  395. package/vue/UiTooltip.js +2 -0
  396. package/vue/UiTooltip.vue +230 -0
  397. package/vue/UiTopBar.d.ts +19 -0
  398. package/vue/UiTopBar.js +2 -0
  399. package/vue/UiTopBar.vue +56 -0
  400. package/vue/UiTree.d.ts +62 -0
  401. package/vue/UiTree.js +2 -0
  402. package/vue/UiTree.vue +117 -0
  403. package/vue/UiTreeItem.d.ts +56 -0
  404. package/vue/UiTreeItem.js +2 -0
  405. package/vue/UiTreeItem.vue +418 -0
  406. package/vue/chunks/UiAffordanceScope.js +112 -0
  407. package/vue/chunks/UiAvatar.js +144 -0
  408. package/vue/chunks/UiAvatarGroup.js +142 -0
  409. package/vue/chunks/UiBadge.js +33 -0
  410. package/vue/chunks/UiButton.js +47 -0
  411. package/vue/chunks/UiCallout.js +117 -0
  412. package/vue/chunks/UiCheckbox.js +167 -0
  413. package/vue/chunks/UiCluster.js +33 -0
  414. package/vue/chunks/UiCombobox.js +684 -0
  415. package/vue/chunks/UiContainer.js +33 -0
  416. package/vue/chunks/UiContextMenu.js +153 -0
  417. package/vue/chunks/UiDialog.js +162 -0
  418. package/vue/chunks/UiDisclosure.js +185 -0
  419. package/vue/chunks/UiEditable.js +223 -0
  420. package/vue/chunks/UiEditorInsertTableGrid.js +221 -0
  421. package/vue/chunks/UiEditorMentionMenu.js +245 -0
  422. package/vue/chunks/UiEditorSlashMenu.js +210 -0
  423. package/vue/chunks/UiEditorTableContextMenu.js +201 -0
  424. package/vue/chunks/UiEditorTableOverlay.js +301 -0
  425. package/vue/chunks/UiEditorTableToolbar.js +299 -0
  426. package/vue/chunks/UiEditorToolbar.js +37 -0
  427. package/vue/chunks/UiFloatingActionButton.js +56 -0
  428. package/vue/chunks/UiFormField.js +113 -0
  429. package/vue/chunks/UiGrid.js +33 -0
  430. package/vue/chunks/UiIcon.js +170 -0
  431. package/vue/chunks/UiIconButton.js +141 -0
  432. package/vue/chunks/UiInput.js +136 -0
  433. package/vue/chunks/UiMenu.js +163 -0
  434. package/vue/chunks/UiMenuItem.js +37 -0
  435. package/vue/chunks/UiPopover.js +149 -0
  436. package/vue/chunks/UiRadio.js +164 -0
  437. package/vue/chunks/UiRadioGroup.js +160 -0
  438. package/vue/chunks/UiReel.js +42 -0
  439. package/vue/chunks/UiSearchResultRow.js +63 -0
  440. package/vue/chunks/UiSearchShell.js +152 -0
  441. package/vue/chunks/UiSelect.js +134 -0
  442. package/vue/chunks/UiSeparator.js +24 -0
  443. package/vue/chunks/UiSidebar.js +180 -0
  444. package/vue/chunks/UiStack.js +38 -0
  445. package/vue/chunks/UiSwitch.js +162 -0
  446. package/vue/chunks/UiSwitcher.js +38 -0
  447. package/vue/chunks/UiTabs.js +210 -0
  448. package/vue/chunks/UiTextarea.js +139 -0
  449. package/vue/chunks/UiToastRegion.js +227 -0
  450. package/vue/chunks/UiTooltip.js +163 -0
  451. package/vue/chunks/UiTopBar.js +25 -0
  452. package/vue/chunks/UiTree.js +140 -0
  453. package/vue/chunks/UiTreeItem.js +315 -0
  454. package/vue/chunks/_plugin-vue_export-helper.js +8 -0
  455. package/vue/components.css +4442 -0
  456. package/vue/editor/LoomaEditor.d.ts +171 -0
  457. package/vue/editor/image-delivery.d.ts +61 -0
  458. package/vue/editor/index.d.ts +4 -386
  459. package/vue/editor/index.js +995 -1134
  460. package/vue/editor/primitives.d.ts +23 -0
  461. package/vue/index.d.ts +49 -604
  462. package/vue/index.js +50 -86
  463. package/dist/chunk-MLKGABMK.js +0 -9
  464. package/dist/chunk-RWLYVQY6.js +0 -5719
  465. package/dist/chunk-XDNZIKNI.js +0 -2721
  466. package/dist/declarative-generated.cjs +0 -149
  467. package/dist/declarative-generated.d.cts +0 -16
  468. package/dist/declarative-generated.d.ts +0 -16
  469. package/dist/declarative-generated.js +0 -124
  470. package/dist/declarative.cjs +0 -2750
  471. package/dist/declarative.d.cts +0 -101
  472. package/dist/declarative.d.ts +0 -101
  473. package/dist/declarative.js +0 -15
  474. package/dist/index.cjs +0 -9077
  475. package/dist/index.d.cts +0 -414
  476. package/dist/loader.cjs +0 -8442
  477. package/dist/loader.d.cts +0 -4
  478. package/dist/loader.d.ts +0 -4
  479. package/dist/loader.js +0 -16
  480. package/editor/chunk-EUIH3TBV.js +0 -6826
  481. package/editor/chunk-JK53ENSG.js +0 -29
  482. package/editor/chunk-U36XNFJN.js +0 -2592
  483. package/editor/table-overlay-DZFGHQDt.d.ts +0 -138
  484. package/editor.css +0 -1592
  485. package/layout/index.cjs +0 -356
  486. package/layout/index.d.cts +0 -18
  487. package/layout/index.d.ts +0 -18
  488. package/layout/index.js +0 -341
  489. package/layout.css +0 -191
  490. package/styles.css +0 -940
  491. package/vue/chunk-OX3EACZ7.js +0 -4369
@@ -0,0 +1,256 @@
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 UiIconButton from "./UiIconButton.vue";
5
+ import * as controllerModule from "../components/ui-toast-region/ui-toast-region.js";
6
+
7
+ defineOptions({ inheritAttrs: false });
8
+
9
+ const hn = {
10
+ 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),
11
+ n: (v: unknown): number | undefined => typeof v === "number" && v === v ? v : undefined,
12
+ text: (v: unknown): string => v === undefined || v === null ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? "" : String(v),
13
+ 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),
14
+ call: (fn: string, ...args: unknown[]): any => {
15
+ if (fn === "format") {
16
+ let index = 1;
17
+ return typeof args[0] === "string" ? args[0].replace(/%s/g, () => index < args.length ? hn.text(args[index++]) : "%s") : undefined;
18
+ }
19
+ const n = args.map(hn.n);
20
+ if (n.some((value) => value === undefined)) return undefined;
21
+ const v = n as number[];
22
+ switch (fn) {
23
+ case "abs": return v.length === 1 ? Math.abs(v[0]!) : undefined;
24
+ case "round": return v.length === 1 ? Math.round(v[0]!) : undefined;
25
+ case "min": return v.length > 0 ? Math.min(...v) : undefined;
26
+ case "max": return v.length > 0 ? Math.max(...v) : undefined;
27
+ case "clamp": return v.length === 3 ? Math.min(Math.max(v[0]!, v[1]!), v[2]!) : undefined;
28
+ }
29
+ return undefined;
30
+ },
31
+ shape: (items: unknown, where: ((item: any) => unknown) | undefined, sort: readonly string[], limit: unknown): any[] => {
32
+ let list = Array.isArray(items) ? items.slice() : [];
33
+ if (where !== undefined) list = list.filter((item) => hn.t(where(item)));
34
+ if (sort.length > 0) {
35
+ const field = (item: unknown, path: string): unknown => item !== null && typeof item === "object" && !Array.isArray(item)
36
+ ? path.split(".").reduce<unknown>((value, key) => (value as Record<string, unknown> | undefined)?.[key], item)
37
+ : item;
38
+ const compare = (a: unknown, b: unknown): number => typeof a === "number" && typeof b === "number" ? a - b : hn.text(a).localeCompare(hn.text(b));
39
+ list.sort((a, b) => {
40
+ for (const key of sort) {
41
+ const descending = key.startsWith("-");
42
+ const order = compare(field(a, descending ? key.slice(1) : key), field(b, descending ? key.slice(1) : key));
43
+ if (order !== 0) return descending ? -order : order;
44
+ }
45
+ return 0;
46
+ });
47
+ }
48
+ return typeof limit === "number" ? list.slice(0, Math.max(0, Math.trunc(limit))) : list;
49
+ },
50
+ };
51
+
52
+ const props = withDefaults(defineProps<{
53
+ auto?: boolean | null;
54
+ duration?: number | null;
55
+ message?: string | null;
56
+ open?: boolean | null;
57
+ }>(), {
58
+ auto: false,
59
+ duration: 5000,
60
+ message: "Notification",
61
+ open: false,
62
+ });
63
+ const emit = defineEmits<{
64
+ "close": [detail: { readonly open: boolean; readonly reason: "action" | "timeout" | "programmatic" | "light-dismiss" | "escape"; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
65
+ "dismiss": [detail: { readonly id: string; readonly reason: "action" | "timeout"; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
66
+ }>();
67
+ const root = ref<HTMLElement | null>(null);
68
+ const refs: Record<string, Element | undefined> = {};
69
+ const state_internalOpen = ref<any>(false);
70
+ const state_toasts = ref<any>([]);
71
+
72
+ /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
73
+ const dispatch = (name: string, detail?: unknown): boolean => {
74
+ const declared = {"close":{"bubbles":true,"composed":true,"cancelable":false},"dismiss":{"bubbles":true,"composed":true,"cancelable":false}} as Record<string, EventInit | undefined>;
75
+ const checks: Record<string, (detail: unknown) => boolean> = {
76
+ "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"] === "timeout" || (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))),
77
+ "dismiss": (detail: unknown) => (detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof (detail as Record<string, unknown>)["id"] === "string" && ((detail as Record<string, unknown>)["reason"] === "action" || (detail as Record<string, unknown>)["reason"] === "timeout") && ((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) => ["id","reason","trigger"].includes(key))),
78
+ };
79
+ if (detail !== undefined && checks[name] !== undefined && !checks[name]!(detail)) {
80
+ throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
81
+ }
82
+ (emit as (name: string, detail: unknown) => void)(name, detail);
83
+ return root.value?.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, ...declared[name], detail })) ?? true;
84
+ };
85
+
86
+ function read(name: string): unknown {
87
+ if (name === "internalOpen") return state_internalOpen.value;
88
+ if (name === "toasts") return state_toasts.value;
89
+ return (props as Record<string, unknown>)[name];
90
+ }
91
+
92
+ function write(name: string, value: unknown): boolean {
93
+ if (name === "internalOpen") { state_internalOpen.value = value; return true; }
94
+ if (name === "toasts") { state_toasts.value = value; return true; }
95
+ throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
96
+ }
97
+
98
+ const stops: Array<() => void> = [];
99
+ const host = {
100
+ get element(): Element { return root.value as Element; },
101
+ state: new Proxy({} as Record<string, unknown>, {
102
+ get: (_target, name) => typeof name === "string" ? read(name) : undefined,
103
+ set: (_target, name, value) => typeof name === "string" && write(name, value),
104
+ }),
105
+ refs: refs as Readonly<Record<string, Element>>,
106
+ elements: new Proxy({} as Record<string, Element | RadioNodeList | undefined>, {
107
+ get: (_target, name) => {
108
+ if (typeof name !== "string" || root.value === null) return undefined;
109
+ const form = root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form");
110
+ return form?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined;
111
+ },
112
+ }),
113
+ signal<T>(initialValue: T) {
114
+ const value = shallowRef(initialValue);
115
+ return {
116
+ get: (): T => value.value,
117
+ set: (next: T): void => { if (!Object.is(value.value, next)) value.value = next; },
118
+ update: (next: (current: T) => T): void => { const updated = next(value.value); if (!Object.is(value.value, updated)) value.value = updated; },
119
+ };
120
+ },
121
+ computed<T>(compute: () => T) {
122
+ const value = computed(compute);
123
+ return { get: (): T => value.value };
124
+ },
125
+ effect(run: () => void | (() => void)): () => void {
126
+ const stop = watchEffect((onCleanup) => {
127
+ const cleanup = run();
128
+ if (typeof cleanup === "function") onCleanup(cleanup);
129
+ }, { flush: "post" });
130
+ stops.push(stop);
131
+ return stop;
132
+ },
133
+ on(event: string, listener: EventListener): () => void {
134
+ const element = root.value;
135
+ element?.addEventListener(event, listener);
136
+ const off = (): void => element?.removeEventListener(event, listener);
137
+ stops.push(off);
138
+ return off;
139
+ },
140
+ dispatch,
141
+ };
142
+
143
+ let cleanup: void | (() => void);
144
+ let ready: Promise<void> | undefined;
145
+ onMounted(() => {
146
+ ready = Promise.resolve(controllerModule.default(host as never)).then((result) => { cleanup = result; });
147
+ });
148
+ onBeforeUnmount(() => {
149
+ for (const stop of stops.splice(0)) stop();
150
+ if (typeof cleanup === "function") cleanup();
151
+ });
152
+ defineExpose({
153
+ show: async (...args: unknown[]) => { await ready; return (controllerModule as Record<string, (...values: unknown[]) => unknown>)["show"]!(host, ...args); },
154
+ });
155
+ </script>
156
+
157
+ <template>
158
+ <div data-component="ui-toast-region" role="region" aria-label="Notifications" aria-live="polite" popover="manual" v-bind="$attrs" ref="root"><slot></slot><template v-for="(toast, index) in hn.shape(state_toasts, undefined, [], undefined)" :key="(toast)?.id"><div class="toast" :id="hn.attr((toast)?.id)" :role="hn.attr((toast)?.role)" :class="{ 'closing': hn.t((toast)?.closing) }"><span class="message">{{ hn.text((toast)?.message) }}</span><span class="dismiss" :data-toast="hn.attr((toast)?.id)"><UiIconButton size="sm" variant="ghost" :round="true" :label="hn.call('format', 'Dismiss %s', (toast)?.message)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="M18 6 6 18M6 6l12 12"></path></svg></UiIconButton></span></div></template></div>
159
+ </template>
160
+
161
+ <style scoped>
162
+ [data-component~="ui-toast-region"] {
163
+ position: fixed;
164
+ top: calc(var(--ui-space-4) + env(safe-area-inset-top));
165
+ right: auto;
166
+ bottom: auto;
167
+ left: 50%;
168
+ transform: translateX(-50%);
169
+ z-index: 9999;
170
+ display: grid;
171
+ gap: var(--ui-space-2);
172
+ inline-size: min(24rem, calc(100vw - var(--ui-space-4) * 2));
173
+ max-inline-size: 100%;
174
+ box-sizing: border-box;
175
+ margin: 0;
176
+ padding: 0;
177
+ overflow: visible;
178
+ border: 0;
179
+ outline: 0;
180
+ background: transparent;
181
+ box-shadow: none;
182
+ pointer-events: none;
183
+ }
184
+
185
+ [data-component~="ui-toast-region"]:not(:popover-open) {
186
+ display: none;
187
+ }
188
+
189
+ [data-component~="ui-toast-region"] > .toast,
190
+ [data-component~="ui-toast-region"] > :slotted(*) {
191
+ pointer-events: auto;
192
+ }
193
+
194
+ .toast {
195
+ display: grid;
196
+ grid-template-columns: 1fr auto;
197
+ gap: var(--ui-space-2);
198
+ align-items: start;
199
+ border: 1px solid var(--ui-border-default);
200
+ border-radius: var(--ui-radius-3);
201
+ padding: var(--ui-space-3) var(--ui-space-4);
202
+ background: var(--ui-surface-elevated);
203
+ color: var(--ui-text-primary);
204
+ box-shadow: var(--ui-elevation-overlay, var(--ui-shadow-lg));
205
+ animation: ui-toast-enter var(--ui-toast-enter-duration, 0.32s) var(--ui-motion-ease-out, cubic-bezier(0.16, 1, 0.3, 1)) both;
206
+ }
207
+
208
+ /* Leaving slides on down and fades; the controller removes the toast when this ends. */
209
+ .toast.closing {
210
+ animation: ui-toast-exit var(--ui-toast-exit-duration, 0.22s) var(--ui-motion-ease, ease) both;
211
+ pointer-events: none;
212
+ }
213
+
214
+ @keyframes ui-toast-enter {
215
+ from {
216
+ opacity: 0;
217
+ transform: translateY(-1rem);
218
+ }
219
+ to {
220
+ opacity: 1;
221
+ transform: translateY(0);
222
+ }
223
+ }
224
+
225
+ @keyframes ui-toast-exit {
226
+ from {
227
+ opacity: 1;
228
+ transform: translateY(0);
229
+ }
230
+ to {
231
+ opacity: 0;
232
+ transform: translateY(0.75rem);
233
+ }
234
+ }
235
+
236
+ @media (prefers-reduced-motion: reduce) {
237
+ .toast, .toast.closing {
238
+ animation: none;
239
+ }
240
+ }
241
+
242
+ .message {
243
+ min-inline-size: 0;
244
+ align-self: center;
245
+ }
246
+
247
+ .dismiss {
248
+ align-self: center;
249
+ margin-inline-end: calc(var(--ui-space-2) * -1);
250
+ }
251
+
252
+ /* A component that sets its display still honours the hidden attribute on its root. */
253
+ [data-component~="ui-toast-region"][hidden] {
254
+ display: none;
255
+ }
256
+ </style>
@@ -0,0 +1,50 @@
1
+ type __VLS_Props = {
2
+ for?: string | null;
3
+ hideDelay?: number | null;
4
+ inverse?: boolean | null;
5
+ open?: boolean | null;
6
+ placement?: string | null;
7
+ showDelay?: number | null;
8
+ };
9
+ declare var __VLS_1: {};
10
+ type __VLS_Slots = {} & {
11
+ default?: (props: typeof __VLS_1) => any;
12
+ };
13
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
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
+ onClose?: ((detail: {
26
+ readonly open: boolean;
27
+ readonly reason: "action" | "programmatic" | "light-dismiss" | "escape";
28
+ readonly trigger: "keyboard" | "pointer" | "programmatic";
29
+ }) => any) | undefined;
30
+ onOpen?: ((detail: {
31
+ readonly open: boolean;
32
+ readonly reason: "action" | "programmatic" | "light-dismiss" | "escape";
33
+ readonly trigger: "keyboard" | "pointer" | "programmatic";
34
+ }) => any) | undefined;
35
+ }>, {
36
+ for: string | null;
37
+ hideDelay: number | null;
38
+ inverse: boolean | null;
39
+ open: boolean | null;
40
+ placement: string | null;
41
+ showDelay: number | 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 UiTooltip_default } from "./chunks/UiTooltip.js";
2
+ export { UiTooltip_default as default };
@@ -0,0 +1,230 @@
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 * as controllerModule from "../components/ui-tooltip/ui-tooltip.js";
5
+
6
+ defineOptions({ inheritAttrs: false });
7
+
8
+ const hn = {
9
+ t: (v: unknown): boolean => v === true || (typeof v === "string" ? v.length > 0 : typeof v === "number" ? v !== 0 && v === v : Array.isArray(v) ? v.length > 0 : v !== null && typeof v === "object" ? Object.keys(v).length > 0 : false),
10
+ text: (v: unknown): string => v === undefined || v === null ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? "" : String(v),
11
+ attr: (v: unknown): any => v === undefined || v === null || v === false ? undefined : v === true ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? undefined : String(v),
12
+ };
13
+
14
+ const props = withDefaults(defineProps<{
15
+ for?: string | null;
16
+ hideDelay?: number | null;
17
+ inverse?: boolean | null;
18
+ open?: boolean | null;
19
+ placement?: string | null;
20
+ showDelay?: number | null;
21
+ }>(), {
22
+ for: "",
23
+ hideDelay: 100,
24
+ inverse: false,
25
+ open: false,
26
+ placement: "top-start",
27
+ showDelay: 500,
28
+ });
29
+ const emit = defineEmits<{
30
+ "open": [detail: { readonly open: boolean; readonly reason: "action" | "programmatic" | "light-dismiss" | "escape"; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
31
+ "close": [detail: { readonly open: boolean; readonly reason: "action" | "programmatic" | "light-dismiss" | "escape"; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
32
+ }>();
33
+ const root = ref<HTMLElement | null>(null);
34
+ const refs: Record<string, Element | undefined> = {};
35
+ const state_internalOpen = ref<any>(false);
36
+
37
+ /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
38
+ const dispatch = (name: string, detail?: unknown): boolean => {
39
+ const declared = {"open":{"bubbles":true,"composed":true,"cancelable":false},"close":{"bubbles":true,"composed":true,"cancelable":false}} as Record<string, EventInit | undefined>;
40
+ const checks: Record<string, (detail: unknown) => boolean> = {
41
+ "open": (detail: unknown) => (detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof (detail as Record<string, unknown>)["open"] === "boolean" && ((detail as Record<string, unknown>)["reason"] === "action" || (detail as Record<string, unknown>)["reason"] === "programmatic" || (detail as Record<string, unknown>)["reason"] === "light-dismiss" || (detail as Record<string, unknown>)["reason"] === "escape") && ((detail as Record<string, unknown>)["trigger"] === "keyboard" || (detail as Record<string, unknown>)["trigger"] === "pointer" || (detail as Record<string, unknown>)["trigger"] === "programmatic") && Object.keys(detail as object).every((key) => ["open","reason","trigger"].includes(key))),
42
+ "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))),
43
+ };
44
+ if (detail !== undefined && checks[name] !== undefined && !checks[name]!(detail)) {
45
+ throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
46
+ }
47
+ (emit as (name: string, detail: unknown) => void)(name, detail);
48
+ return root.value?.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, ...declared[name], detail })) ?? true;
49
+ };
50
+
51
+ /** The resolved values the styles' :host-state() rules test. */
52
+ const hostState = computed(() => (["inverse","placement"] as const).flatMap((name) => {
53
+ const value = read(name);
54
+ const tokens: string[] = hn.t(value) ? [name] : [];
55
+ if (typeof value === "string" || typeof value === "number") tokens.push(`${name}=${encodeURIComponent(String(value))}`);
56
+ return tokens;
57
+ }).join(" "));
58
+
59
+ function read(name: string): unknown {
60
+ if (name === "internalOpen") return state_internalOpen.value;
61
+ return (props as Record<string, unknown>)[name];
62
+ }
63
+
64
+ function write(name: string, value: unknown): boolean {
65
+ if (name === "internalOpen") { state_internalOpen.value = value; return true; }
66
+ throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
67
+ }
68
+
69
+ const stops: Array<() => void> = [];
70
+ const host = {
71
+ get element(): Element { return root.value as Element; },
72
+ state: new Proxy({} as Record<string, unknown>, {
73
+ get: (_target, name) => typeof name === "string" ? read(name) : undefined,
74
+ set: (_target, name, value) => typeof name === "string" && write(name, value),
75
+ }),
76
+ refs: refs as Readonly<Record<string, Element>>,
77
+ elements: new Proxy({} as Record<string, Element | RadioNodeList | undefined>, {
78
+ get: (_target, name) => {
79
+ if (typeof name !== "string" || root.value === null) return undefined;
80
+ const form = root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form");
81
+ return form?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined;
82
+ },
83
+ }),
84
+ signal<T>(initialValue: T) {
85
+ const value = shallowRef(initialValue);
86
+ return {
87
+ get: (): T => value.value,
88
+ set: (next: T): void => { if (!Object.is(value.value, next)) value.value = next; },
89
+ update: (next: (current: T) => T): void => { const updated = next(value.value); if (!Object.is(value.value, updated)) value.value = updated; },
90
+ };
91
+ },
92
+ computed<T>(compute: () => T) {
93
+ const value = computed(compute);
94
+ return { get: (): T => value.value };
95
+ },
96
+ effect(run: () => void | (() => void)): () => void {
97
+ const stop = watchEffect((onCleanup) => {
98
+ const cleanup = run();
99
+ if (typeof cleanup === "function") onCleanup(cleanup);
100
+ }, { flush: "post" });
101
+ stops.push(stop);
102
+ return stop;
103
+ },
104
+ on(event: string, listener: EventListener): () => void {
105
+ const element = root.value;
106
+ element?.addEventListener(event, listener);
107
+ const off = (): void => element?.removeEventListener(event, listener);
108
+ stops.push(off);
109
+ return off;
110
+ },
111
+ dispatch,
112
+ };
113
+
114
+ let cleanup: void | (() => void);
115
+ let ready: Promise<void> | undefined;
116
+ onMounted(() => {
117
+ ready = Promise.resolve(controllerModule.default(host as never)).then((result) => { cleanup = result; });
118
+ });
119
+ onBeforeUnmount(() => {
120
+ for (const stop of stops.splice(0)) stop();
121
+ if (typeof cleanup === "function") cleanup();
122
+ });
123
+ </script>
124
+
125
+ <template>
126
+ <span data-component="ui-tooltip" role="tooltip" v-bind="$attrs" :hidden="hn.attr(!hn.t(state_internalOpen))" :data-ui-tooltip-state="hostState || undefined" ref="root"><div class="surface"><slot></slot></div></span>
127
+ </template>
128
+
129
+ <style scoped>
130
+ [data-component~="ui-tooltip"] {
131
+ position: fixed;
132
+ inset: auto;
133
+ margin: 0;
134
+ display: inline-block;
135
+ box-sizing: border-box;
136
+ padding: 0;
137
+ border: 0;
138
+ outline: 0;
139
+ border-radius: 0;
140
+ background: transparent;
141
+ /* The UA popover default (overflow: auto) would clip the arrow. */
142
+ overflow: visible;
143
+ opacity: 0;
144
+ transform: translateY(4px);
145
+ transition:
146
+ opacity var(--ui-motion-fast) var(--ui-motion-ease),
147
+ transform var(--ui-motion-fast) var(--ui-motion-ease),
148
+ display var(--ui-motion-fast) allow-discrete,
149
+ overlay var(--ui-motion-fast) allow-discrete;
150
+ }
151
+
152
+ .surface {
153
+ --_tooltip-line: var(--ui-tooltip-border, var(--ui-border-default));
154
+ position: relative;
155
+ box-sizing: border-box;
156
+ max-inline-size: var(--ui-tooltip-max-inline-size, 18rem);
157
+ border: 1px solid var(--_tooltip-line);
158
+ border-radius: var(--ui-tooltip-radius, var(--ui-radius-1));
159
+ background: var(--ui-tooltip-surface, var(--ui-surface-elevated));
160
+ color: var(--ui-tooltip-text, var(--ui-text-primary));
161
+ padding: var(--ui-space-1) var(--ui-space-2);
162
+ font-family: var(--ui-font-family-sans);
163
+ font-size: var(--ui-font-size-sm);
164
+ line-height: var(--ui-line-height-tight);
165
+ box-shadow: var(--ui-tooltip-shadow, var(--ui-elevation-tooltip, var(--ui-shadow-md)));
166
+ }
167
+
168
+ [data-component~="ui-tooltip"][data-ui-tooltip-state~="inverse"] .surface {
169
+ --_tooltip-line: var(--ui-tooltip-inverse-surface, var(--ui-text-primary));
170
+ background: var(--ui-tooltip-inverse-surface, var(--ui-text-primary));
171
+ color: var(--ui-tooltip-inverse-text, var(--ui-surface-default));
172
+ }
173
+
174
+ /* A rotated square shares the surface fill and draws the two outward border edges. Its centre sits on
175
+ * the surface border line, so the fill covers that stretch of border and the outline runs unbroken. */
176
+ .surface::after {
177
+ content: "";
178
+ position: absolute;
179
+ z-index: 1;
180
+ inset-inline-start: var(--ui-space-3);
181
+ inset-block-end: calc(var(--ui-tooltip-arrow-size, 0.5rem) / -2 - 0.5px);
182
+ inline-size: var(--ui-tooltip-arrow-size, 0.5rem);
183
+ block-size: var(--ui-tooltip-arrow-size, 0.5rem);
184
+ box-sizing: border-box;
185
+ background: inherit;
186
+ border: 0 solid var(--_tooltip-line);
187
+ border-inline-end-width: 1px;
188
+ border-block-end-width: 1px;
189
+ border-end-end-radius: 1px;
190
+ transform: rotate(45deg);
191
+ }
192
+
193
+ :is([data-component~="ui-tooltip"][data-ui-tooltip-state~="placement=bottom"], [data-component~="ui-tooltip"][data-ui-tooltip-state~="placement=bottom-start"], [data-component~="ui-tooltip"][data-ui-tooltip-state~="placement=bottom-end"]) .surface::after {
194
+ inset-block-start: calc(var(--ui-tooltip-arrow-size, 0.5rem) / -2 - 0.5px);
195
+ inset-block-end: auto;
196
+ border-inline-end-width: 0;
197
+ border-block-end-width: 0;
198
+ border-inline-start-width: 1px;
199
+ border-block-start-width: 1px;
200
+ border-end-end-radius: 0;
201
+ border-start-start-radius: 1px;
202
+ }
203
+
204
+ :is([data-component~="ui-tooltip"][data-ui-tooltip-state~="placement=top-end"], [data-component~="ui-tooltip"][data-ui-tooltip-state~="placement=bottom-end"]) .surface::after {
205
+ inset-inline-start: auto;
206
+ inset-inline-end: var(--ui-space-3);
207
+ }
208
+
209
+ [data-component~="ui-tooltip"]:popover-open {
210
+ opacity: 1;
211
+ transform: translateY(0);
212
+ }
213
+
214
+ @starting-style {
215
+ [data-component~="ui-tooltip"]:popover-open {
216
+ opacity: 0;
217
+ transform: translateY(4px);
218
+ }
219
+ }
220
+
221
+ [data-component~="ui-tooltip"][hidden] {
222
+ display: none;
223
+ }
224
+
225
+ @media (prefers-reduced-motion: reduce) {
226
+ [data-component~="ui-tooltip"] {
227
+ transition: none;
228
+ }
229
+ }
230
+ </style>
@@ -0,0 +1,19 @@
1
+ declare var __VLS_1: {}, __VLS_3: {}, __VLS_5: {}, __VLS_7: {};
2
+ type __VLS_Slots = {} & {
3
+ leading?: (props: typeof __VLS_1) => any;
4
+ } & {
5
+ default?: (props: typeof __VLS_3) => any;
6
+ } & {
7
+ search?: (props: typeof __VLS_5) => any;
8
+ } & {
9
+ actions?: (props: typeof __VLS_7) => any;
10
+ };
11
+ declare const __VLS_base: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
12
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
13
+ declare const _default: typeof __VLS_export;
14
+ export default _default;
15
+ type __VLS_WithSlots<T, S> = T & {
16
+ new (): {
17
+ $slots: S;
18
+ };
19
+ };
@@ -0,0 +1,2 @@
1
+ import { t as UiTopBar_default } from "./chunks/UiTopBar.js";
2
+ export { UiTopBar_default as default };
@@ -0,0 +1,56 @@
1
+ <!-- Generated by HTML Next 1.0.0-alpha.1 for Vue 3.5. Do not edit. -->
2
+ <script setup lang="ts">
3
+
4
+ defineOptions({ inheritAttrs: false });
5
+
6
+ </script>
7
+
8
+ <template>
9
+ <header data-component="ui-top-bar" v-bind="$attrs"><div class="leading"><slot name="leading"></slot></div><div class="title"><slot></slot></div><div class="search"><slot name="search"></slot></div><div class="actions"><slot name="actions"></slot></div></header>
10
+ </template>
11
+
12
+ <style scoped>
13
+ [data-component~="ui-top-bar"] {
14
+ position: sticky;
15
+ inset-block-start: 0;
16
+ z-index: var(--ui-top-bar-z-index, 100);
17
+ min-block-size: calc(var(--ui-top-bar-height, 56px) + env(safe-area-inset-top));
18
+ display: flex;
19
+ align-items: center;
20
+ gap: var(--ui-top-bar-gap, var(--ui-space-3, 0.75rem));
21
+ padding-block-start: env(safe-area-inset-top);
22
+ padding-inline-start: max(var(--ui-top-bar-padding-inline, var(--ui-space-4, 1rem)), env(safe-area-inset-left));
23
+ padding-inline-end: max(var(--ui-top-bar-padding-inline, var(--ui-space-4, 1rem)), env(safe-area-inset-right));
24
+ background: var(--ui-top-bar-bg, var(--ui-surface-elevated));
25
+ border-block-end: 1px solid var(--ui-top-bar-border, var(--ui-border-default));
26
+ }
27
+
28
+ .leading,
29
+ .search,
30
+ .actions {
31
+ display: flex;
32
+ align-items: center;
33
+ flex-shrink: 0;
34
+ }
35
+
36
+ .actions {
37
+ gap: var(--ui-top-bar-actions-gap, var(--ui-space-1, 0.25rem));
38
+ }
39
+
40
+ .title {
41
+ min-inline-size: 0;
42
+ flex: 1;
43
+ }
44
+
45
+ /* An unused region takes no space, so it adds no gap. */
46
+ .leading:empty,
47
+ .search:empty,
48
+ .actions:empty {
49
+ display: none;
50
+ }
51
+
52
+ /* A component that sets its display still honours the hidden attribute on its root. */
53
+ [data-component~="ui-top-bar"][hidden] {
54
+ display: none;
55
+ }
56
+ </style>