@threadlabs/looma 0.3.1 → 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 (494) 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 -80
  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/react/index.d.ts +0 -1276
  490. package/react/index.js +0 -1526
  491. package/styles.css +0 -940
  492. package/svelte/index.d.ts +0 -204
  493. package/svelte/index.js +0 -1892
  494. package/vue/chunk-OX3EACZ7.js +0 -4369
@@ -0,0 +1,211 @@
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-disclosure/ui-disclosure.js";
5
+
6
+ defineOptions({ inheritAttrs: false });
7
+
8
+ const hn = {
9
+ t: (v: unknown): boolean => v === true || (typeof v === "string" ? v.length > 0 : typeof v === "number" ? v !== 0 && v === v : Array.isArray(v) ? v.length > 0 : v !== null && typeof v === "object" ? Object.keys(v).length > 0 : false),
10
+ text: (v: unknown): string => v === undefined || v === null ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? "" : String(v),
11
+ attr: (v: unknown): any => v === undefined || v === null || v === false ? undefined : v === true ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? undefined : String(v),
12
+ enumerated: (v: unknown): any => typeof v === "boolean" ? String(v) : hn.attr(v),
13
+ };
14
+
15
+ const props = withDefaults(defineProps<{
16
+ disabled?: boolean | null;
17
+ open?: boolean | null;
18
+ summary?: string | null;
19
+ }>(), {
20
+ disabled: false,
21
+ open: false,
22
+ summary: "Details",
23
+ });
24
+ const emit = defineEmits<{
25
+ "open": [detail: { readonly open: boolean; readonly reason: "action" | "programmatic" | "light-dismiss" | "escape"; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
26
+ "close": [detail: { readonly open: boolean; readonly reason: "action" | "programmatic" | "light-dismiss" | "escape"; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
27
+ }>();
28
+ const root = ref<HTMLElement | null>(null);
29
+ const refs: Record<string, Element | undefined> = {};
30
+ const state_internalOpen = ref<any>(false);
31
+ const state_contentId = ref<any>("");
32
+
33
+ /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
34
+ const dispatch = (name: string, detail?: unknown): boolean => {
35
+ const declared = {"open":{"bubbles":true,"composed":true,"cancelable":false},"close":{"bubbles":true,"composed":true,"cancelable":false}} as Record<string, EventInit | undefined>;
36
+ const checks: Record<string, (detail: unknown) => boolean> = {
37
+ "open": (detail: unknown) => (detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof (detail as Record<string, unknown>)["open"] === "boolean" && ((detail as Record<string, unknown>)["reason"] === "action" || (detail as Record<string, unknown>)["reason"] === "programmatic" || (detail as Record<string, unknown>)["reason"] === "light-dismiss" || (detail as Record<string, unknown>)["reason"] === "escape") && ((detail as Record<string, unknown>)["trigger"] === "keyboard" || (detail as Record<string, unknown>)["trigger"] === "pointer" || (detail as Record<string, unknown>)["trigger"] === "programmatic") && Object.keys(detail as object).every((key) => ["open","reason","trigger"].includes(key))),
38
+ "close": (detail: unknown) => (detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof (detail as Record<string, unknown>)["open"] === "boolean" && ((detail as Record<string, unknown>)["reason"] === "action" || (detail as Record<string, unknown>)["reason"] === "programmatic" || (detail as Record<string, unknown>)["reason"] === "light-dismiss" || (detail as Record<string, unknown>)["reason"] === "escape") && ((detail as Record<string, unknown>)["trigger"] === "keyboard" || (detail as Record<string, unknown>)["trigger"] === "pointer" || (detail as Record<string, unknown>)["trigger"] === "programmatic") && Object.keys(detail as object).every((key) => ["open","reason","trigger"].includes(key))),
39
+ };
40
+ if (detail !== undefined && checks[name] !== undefined && !checks[name]!(detail)) {
41
+ throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
42
+ }
43
+ (emit as (name: string, detail: unknown) => void)(name, detail);
44
+ return root.value?.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, ...declared[name], detail })) ?? true;
45
+ };
46
+
47
+ /** The resolved values the styles' :host-state() rules test. */
48
+ const hostState = computed(() => (["internalOpen"] as const).flatMap((name) => {
49
+ const value = read(name);
50
+ const tokens: string[] = hn.t(value) ? [name] : [];
51
+ if (typeof value === "string" || typeof value === "number") tokens.push(`${name}=${encodeURIComponent(String(value))}`);
52
+ return tokens;
53
+ }).join(" "));
54
+
55
+ function read(name: string): unknown {
56
+ if (name === "internalOpen") return state_internalOpen.value;
57
+ if (name === "contentId") return state_contentId.value;
58
+ return (props as Record<string, unknown>)[name];
59
+ }
60
+
61
+ function write(name: string, value: unknown): boolean {
62
+ if (name === "internalOpen") { state_internalOpen.value = value; return true; }
63
+ if (name === "contentId") { state_contentId.value = value; return true; }
64
+ throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
65
+ }
66
+
67
+ const stops: Array<() => void> = [];
68
+ const host = {
69
+ get element(): Element { return root.value as Element; },
70
+ state: new Proxy({} as Record<string, unknown>, {
71
+ get: (_target, name) => typeof name === "string" ? read(name) : undefined,
72
+ set: (_target, name, value) => typeof name === "string" && write(name, value),
73
+ }),
74
+ refs: refs as Readonly<Record<string, Element>>,
75
+ elements: new Proxy({} as Record<string, Element | RadioNodeList | undefined>, {
76
+ get: (_target, name) => {
77
+ if (typeof name !== "string" || root.value === null) return undefined;
78
+ const form = root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form");
79
+ return form?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined;
80
+ },
81
+ }),
82
+ signal<T>(initialValue: T) {
83
+ const value = shallowRef(initialValue);
84
+ return {
85
+ get: (): T => value.value,
86
+ set: (next: T): void => { if (!Object.is(value.value, next)) value.value = next; },
87
+ update: (next: (current: T) => T): void => { const updated = next(value.value); if (!Object.is(value.value, updated)) value.value = updated; },
88
+ };
89
+ },
90
+ computed<T>(compute: () => T) {
91
+ const value = computed(compute);
92
+ return { get: (): T => value.value };
93
+ },
94
+ effect(run: () => void | (() => void)): () => void {
95
+ const stop = watchEffect((onCleanup) => {
96
+ const cleanup = run();
97
+ if (typeof cleanup === "function") onCleanup(cleanup);
98
+ }, { flush: "post" });
99
+ stops.push(stop);
100
+ return stop;
101
+ },
102
+ on(event: string, listener: EventListener): () => void {
103
+ const element = root.value;
104
+ element?.addEventListener(event, listener);
105
+ const off = (): void => element?.removeEventListener(event, listener);
106
+ stops.push(off);
107
+ return off;
108
+ },
109
+ dispatch,
110
+ };
111
+
112
+ let cleanup: void | (() => void);
113
+ let ready: Promise<void> | undefined;
114
+ onMounted(() => {
115
+ ready = Promise.resolve(controllerModule.default(host as never)).then((result) => { cleanup = result; });
116
+ });
117
+ onBeforeUnmount(() => {
118
+ for (const stop of stops.splice(0)) stop();
119
+ if (typeof cleanup === "function") cleanup();
120
+ });
121
+ </script>
122
+
123
+ <template>
124
+ <div data-component="ui-disclosure" v-bind="$attrs" :data-ui-disclosure-state="hostState || undefined" ref="root"><button class="trigger" type="button" :aria-controls="hn.enumerated(state_contentId)" :aria-expanded="hn.enumerated(state_internalOpen)" :disabled="hn.attr(props.disabled)" :ref="(element) => { refs['trigger'] = element as Element }"><span>{{ hn.text(props.summary) }}</span><span class="chevron" aria-hidden="true"></span></button><div class="panel" :id="hn.attr(state_contentId)" :inert="hn.attr(!hn.t(state_internalOpen))"><div class="panel-inner"><slot></slot></div></div></div>
125
+ </template>
126
+
127
+ <style scoped>
128
+ /* An accordion row, not a field: no enclosing box, just a divider, so it never reads as a
129
+ * select or combobox. Stacked disclosures share their dividers. */
130
+ [data-component~="ui-disclosure"] {
131
+ display: block;
132
+ inline-size: 100%;
133
+ overflow: clip;
134
+ border-block-end: 1px solid var(--ui-border-default);
135
+ color: var(--ui-text-primary);
136
+ }
137
+
138
+ .trigger {
139
+ display: grid;
140
+ grid-template-columns: minmax(0, 1fr) auto;
141
+ gap: var(--ui-space-3);
142
+ align-items: center;
143
+ inline-size: 100%;
144
+ min-block-size: 2.5rem;
145
+ padding: var(--ui-space-2) var(--ui-space-3);
146
+ border: 0;
147
+ background: transparent;
148
+ color: inherit;
149
+ font: inherit;
150
+ font-weight: var(--ui-font-semibold, 600);
151
+ text-align: start;
152
+ cursor: pointer;
153
+ border-radius: var(--ui-radius-1);
154
+ transition: background-color var(--ui-motion-fast) var(--ui-motion-ease);
155
+ }
156
+
157
+ .trigger:hover:not(:disabled) {
158
+ background: var(--ui-surface-muted);
159
+ }
160
+ .trigger:focus-visible {
161
+ outline: none;
162
+ box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--ui-focus-ring) 45%, transparent);
163
+ }
164
+ .trigger:disabled {
165
+ color: var(--ui-text-muted);
166
+ cursor: not-allowed;
167
+ }
168
+
169
+ .chevron {
170
+ inline-size: 0.5rem;
171
+ block-size: 0.5rem;
172
+ border-inline-end: 2px solid currentColor;
173
+ border-block-end: 2px solid currentColor;
174
+ transform: rotate(45deg) translate(-1px, -1px);
175
+ transition: transform var(--ui-motion-fast) var(--ui-motion-ease);
176
+ }
177
+
178
+ .panel {
179
+ display: grid;
180
+ grid-template-rows: 0fr;
181
+ transition: grid-template-rows var(--ui-motion-fast) var(--ui-motion-ease-out, var(--ui-motion-ease));
182
+ }
183
+
184
+ .panel-inner {
185
+ min-block-size: 0;
186
+ overflow: hidden;
187
+ padding-inline: var(--ui-space-3);
188
+ }
189
+
190
+ [data-component~="ui-disclosure"][data-ui-disclosure-state~="internalOpen"] .panel {
191
+ grid-template-rows: 1fr;
192
+ }
193
+ [data-component~="ui-disclosure"][data-ui-disclosure-state~="internalOpen"] .panel-inner {
194
+ padding-block: 0 var(--ui-space-3);
195
+ }
196
+ [data-component~="ui-disclosure"][data-ui-disclosure-state~="internalOpen"] .chevron {
197
+ transform: rotate(225deg) translate(-1px, -1px);
198
+ }
199
+
200
+ @media (prefers-reduced-motion: reduce) {
201
+ .panel,
202
+ .chevron {
203
+ transition: none;
204
+ }
205
+ }
206
+
207
+ /* A component that sets its display still honours the hidden attribute on its root. */
208
+ [data-component~="ui-disclosure"][hidden] {
209
+ display: none;
210
+ }
211
+ </style>
@@ -0,0 +1,48 @@
1
+ type __VLS_Props = {
2
+ actions?: boolean | null;
3
+ disabled?: boolean | null;
4
+ edit?: boolean | null;
5
+ hint?: string | null;
6
+ label?: string | null;
7
+ value?: string | null;
8
+ };
9
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
10
+ input: (detail: {
11
+ readonly value: string;
12
+ readonly trigger: "keyboard" | "pointer" | "programmatic";
13
+ }) => any;
14
+ change: (detail: {
15
+ readonly value: string;
16
+ readonly previousValue: string;
17
+ readonly trigger: "keyboard" | "pointer" | "programmatic";
18
+ }) => any;
19
+ "edit-change": (detail: {
20
+ readonly edit: boolean;
21
+ readonly reason: "activate" | "commit" | "cancel" | "light-dismiss" | "escape" | "programmatic";
22
+ readonly trigger: "keyboard" | "pointer" | "programmatic";
23
+ }) => any;
24
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
25
+ onInput?: ((detail: {
26
+ readonly value: string;
27
+ readonly trigger: "keyboard" | "pointer" | "programmatic";
28
+ }) => any) | undefined;
29
+ onChange?: ((detail: {
30
+ readonly value: string;
31
+ readonly previousValue: string;
32
+ readonly trigger: "keyboard" | "pointer" | "programmatic";
33
+ }) => any) | undefined;
34
+ "onEdit-change"?: ((detail: {
35
+ readonly edit: boolean;
36
+ readonly reason: "activate" | "commit" | "cancel" | "light-dismiss" | "escape" | "programmatic";
37
+ readonly trigger: "keyboard" | "pointer" | "programmatic";
38
+ }) => any) | undefined;
39
+ }>, {
40
+ label: string | null;
41
+ disabled: boolean | null;
42
+ value: string | null;
43
+ actions: boolean | null;
44
+ edit: boolean | null;
45
+ hint: string | null;
46
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
47
+ declare const _default: typeof __VLS_export;
48
+ export default _default;
@@ -0,0 +1,2 @@
1
+ import { t as UiEditable_default } from "./chunks/UiEditable.js";
2
+ export { UiEditable_default as default };
@@ -0,0 +1,267 @@
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-editable/ui-editable.js";
5
+
6
+ defineOptions({ inheritAttrs: false });
7
+
8
+ const hn = {
9
+ t: (v: unknown): boolean => v === true || (typeof v === "string" ? v.length > 0 : typeof v === "number" ? v !== 0 && v === v : Array.isArray(v) ? v.length > 0 : v !== null && typeof v === "object" ? Object.keys(v).length > 0 : false),
10
+ text: (v: unknown): string => v === undefined || v === null ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? "" : String(v),
11
+ attr: (v: unknown): any => v === undefined || v === null || v === false ? undefined : v === true ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? undefined : String(v),
12
+ enumerated: (v: unknown): any => typeof v === "boolean" ? String(v) : hn.attr(v),
13
+ };
14
+
15
+ const props = withDefaults(defineProps<{
16
+ actions?: boolean | null;
17
+ disabled?: boolean | null;
18
+ edit?: boolean | null;
19
+ hint?: string | null;
20
+ label?: string | null;
21
+ value?: string | null;
22
+ }>(), {
23
+ actions: false,
24
+ disabled: false,
25
+ edit: false,
26
+ hint: "",
27
+ label: "Edit value",
28
+ value: "",
29
+ });
30
+ const emit = defineEmits<{
31
+ "input": [detail: { readonly value: string; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
32
+ "change": [detail: { readonly value: string; readonly previousValue: string; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
33
+ "edit-change": [detail: { readonly edit: boolean; readonly reason: "activate" | "commit" | "cancel" | "light-dismiss" | "escape" | "programmatic"; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
34
+ }>();
35
+ const root = ref<HTMLElement | null>(null);
36
+ const refs: Record<string, Element | undefined> = {};
37
+ const state_internalEdit = ref<any>(false);
38
+ const state_internalValue = ref<any>("");
39
+ const state_draft = ref<any>("");
40
+
41
+ /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
42
+ const dispatch = (name: string, detail?: unknown): boolean => {
43
+ const declared = {"input":{"bubbles":true,"composed":true,"cancelable":false},"change":{"bubbles":true,"composed":true,"cancelable":false},"edit-change":{"bubbles":true,"composed":true,"cancelable":false}} as Record<string, EventInit | undefined>;
44
+ const checks: Record<string, (detail: unknown) => boolean> = {
45
+ "input": (detail: unknown) => (detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof (detail as Record<string, unknown>)["value"] === "string" && ((detail as Record<string, unknown>)["trigger"] === "keyboard" || (detail as Record<string, unknown>)["trigger"] === "pointer" || (detail as Record<string, unknown>)["trigger"] === "programmatic") && Object.keys(detail as object).every((key) => ["value","trigger"].includes(key))),
46
+ "change": (detail: unknown) => (detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof (detail as Record<string, unknown>)["value"] === "string" && typeof (detail as Record<string, unknown>)["previousValue"] === "string" && ((detail as Record<string, unknown>)["trigger"] === "keyboard" || (detail as Record<string, unknown>)["trigger"] === "pointer" || (detail as Record<string, unknown>)["trigger"] === "programmatic") && Object.keys(detail as object).every((key) => ["value","previousValue","trigger"].includes(key))),
47
+ "edit-change": (detail: unknown) => (detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof (detail as Record<string, unknown>)["edit"] === "boolean" && ((detail as Record<string, unknown>)["reason"] === "activate" || (detail as Record<string, unknown>)["reason"] === "commit" || (detail as Record<string, unknown>)["reason"] === "cancel" || (detail as Record<string, unknown>)["reason"] === "light-dismiss" || (detail as Record<string, unknown>)["reason"] === "escape" || (detail as Record<string, unknown>)["reason"] === "programmatic") && ((detail as Record<string, unknown>)["trigger"] === "keyboard" || (detail as Record<string, unknown>)["trigger"] === "pointer" || (detail as Record<string, unknown>)["trigger"] === "programmatic") && Object.keys(detail as object).every((key) => ["edit","reason","trigger"].includes(key))),
48
+ };
49
+ if (detail !== undefined && checks[name] !== undefined && !checks[name]!(detail)) {
50
+ throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
51
+ }
52
+ (emit as (name: string, detail: unknown) => void)(name, detail);
53
+ return root.value?.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, ...declared[name], detail })) ?? true;
54
+ };
55
+
56
+ /** The resolved values the styles' :host-state() rules test. */
57
+ const hostState = computed(() => (["internalEdit","disabled"] as const).flatMap((name) => {
58
+ const value = read(name);
59
+ const tokens: string[] = hn.t(value) ? [name] : [];
60
+ if (typeof value === "string" || typeof value === "number") tokens.push(`${name}=${encodeURIComponent(String(value))}`);
61
+ return tokens;
62
+ }).join(" "));
63
+
64
+ function read(name: string): unknown {
65
+ if (name === "internalEdit") return state_internalEdit.value;
66
+ if (name === "internalValue") return state_internalValue.value;
67
+ if (name === "draft") return state_draft.value;
68
+ return (props as Record<string, unknown>)[name];
69
+ }
70
+
71
+ function write(name: string, value: unknown): boolean {
72
+ if (name === "internalEdit") { state_internalEdit.value = value; return true; }
73
+ if (name === "internalValue") { state_internalValue.value = value; return true; }
74
+ if (name === "draft") { state_draft.value = value; return true; }
75
+ throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
76
+ }
77
+
78
+ const stops: Array<() => void> = [];
79
+ const host = {
80
+ get element(): Element { return root.value as Element; },
81
+ state: new Proxy({} as Record<string, unknown>, {
82
+ get: (_target, name) => typeof name === "string" ? read(name) : undefined,
83
+ set: (_target, name, value) => typeof name === "string" && write(name, value),
84
+ }),
85
+ refs: refs as Readonly<Record<string, Element>>,
86
+ elements: new Proxy({} as Record<string, Element | RadioNodeList | undefined>, {
87
+ get: (_target, name) => {
88
+ if (typeof name !== "string" || root.value === null) return undefined;
89
+ const form = root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form");
90
+ return form?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined;
91
+ },
92
+ }),
93
+ signal<T>(initialValue: T) {
94
+ const value = shallowRef(initialValue);
95
+ return {
96
+ get: (): T => value.value,
97
+ set: (next: T): void => { if (!Object.is(value.value, next)) value.value = next; },
98
+ update: (next: (current: T) => T): void => { const updated = next(value.value); if (!Object.is(value.value, updated)) value.value = updated; },
99
+ };
100
+ },
101
+ computed<T>(compute: () => T) {
102
+ const value = computed(compute);
103
+ return { get: (): T => value.value };
104
+ },
105
+ effect(run: () => void | (() => void)): () => void {
106
+ const stop = watchEffect((onCleanup) => {
107
+ const cleanup = run();
108
+ if (typeof cleanup === "function") onCleanup(cleanup);
109
+ }, { flush: "post" });
110
+ stops.push(stop);
111
+ return stop;
112
+ },
113
+ on(event: string, listener: EventListener): () => void {
114
+ const element = root.value;
115
+ element?.addEventListener(event, listener);
116
+ const off = (): void => element?.removeEventListener(event, listener);
117
+ stops.push(off);
118
+ return off;
119
+ },
120
+ dispatch,
121
+ };
122
+
123
+ let cleanup: void | (() => void);
124
+ let ready: Promise<void> | undefined;
125
+ onMounted(() => {
126
+ ready = Promise.resolve(controllerModule.default(host as never)).then((result) => { cleanup = result; });
127
+ });
128
+ onBeforeUnmount(() => {
129
+ for (const stop of stops.splice(0)) stop();
130
+ if (typeof cleanup === "function") cleanup();
131
+ });
132
+ </script>
133
+
134
+ <template>
135
+ <div data-component="ui-editable" v-bind="$attrs" :data-ui-editable-state="hostState || undefined" ref="root"><div class="field"><button class="preview" type="button" :disabled="hn.attr(props.disabled)" :ref="(element) => { refs['preview'] = element as Element }"><span class="text">{{ hn.text(state_internalValue) }}</span><template v-if="hn.t(props.hint)"><span class="hint" aria-hidden="true">{{ hn.text(props.hint) }}</span></template></button><input class="input" type="text" :value.prop="(state_draft) as any" :aria-label="hn.enumerated(props.label)" :disabled="hn.attr((hn.t(props.disabled) || hn.t(!hn.t(state_internalEdit))))" :ref="(element) => { refs['input'] = element as Element }"></div><template v-if="hn.t(props.actions)"><div class="actions"><button class="save" type="button">Save</button><button class="cancel" type="button">Cancel</button></div></template></div>
136
+ </template>
137
+
138
+ <style scoped>
139
+ [data-component~="ui-editable"] {
140
+ display: flex;
141
+ flex-wrap: wrap;
142
+ align-items: center;
143
+ gap: var(--ui-space-2);
144
+ min-inline-size: 0;
145
+ color: var(--ui-text-primary);
146
+ }
147
+
148
+ /* The value and the input share one grid cell with identical box metrics, so switching between
149
+ * display and edit never changes the control's size or moves the text. */
150
+ .field {
151
+ display: inline-grid;
152
+ min-inline-size: 8rem;
153
+ max-inline-size: 100%;
154
+ }
155
+
156
+ .preview,
157
+ .input {
158
+ grid-area: 1 / 1;
159
+ box-sizing: border-box;
160
+ min-block-size: var(--ui-control-size-sm, 2rem);
161
+ margin: 0;
162
+ padding: var(--ui-space-1) var(--ui-space-2);
163
+ border: 1px solid transparent;
164
+ border-radius: var(--ui-radius-2);
165
+ font: inherit;
166
+ line-height: var(--ui-line-height-md);
167
+ color: inherit;
168
+ transition:
169
+ background-color var(--ui-motion-fast) var(--ui-motion-ease),
170
+ border-color var(--ui-motion-fast) var(--ui-motion-ease),
171
+ box-shadow var(--ui-motion-fast) var(--ui-motion-ease);
172
+ }
173
+
174
+ .preview {
175
+ display: inline-flex;
176
+ gap: var(--ui-space-2);
177
+ align-items: center;
178
+ background: transparent;
179
+ text-align: start;
180
+ cursor: pointer;
181
+ }
182
+
183
+ .preview:hover:not(:disabled) {
184
+ background: var(--ui-surface-muted);
185
+ }
186
+
187
+ .preview:focus-visible {
188
+ outline: none;
189
+ box-shadow: var(--ui-focus-halo);
190
+ }
191
+
192
+ .hint {
193
+ color: var(--ui-text-secondary);
194
+ font-size: var(--ui-font-size-sm);
195
+ }
196
+
197
+ /* Contained so it takes the value's width instead of its own default input width. */
198
+ .input {
199
+ contain: inline-size;
200
+ inline-size: 100%;
201
+ min-inline-size: 0;
202
+ visibility: hidden;
203
+ background: var(--ui-control-surface, var(--ui-surface-elevated));
204
+ }
205
+
206
+ .input:focus {
207
+ outline: none;
208
+ border-color: var(--ui-control-focus, var(--ui-accent-solid));
209
+ box-shadow:
210
+ var(--ui-control-inset),
211
+ var(--ui-control-focus-halo-shadow);
212
+ }
213
+
214
+ .input::selection {
215
+ background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
216
+ }
217
+
218
+ [data-component~="ui-editable"][data-ui-editable-state~="internalEdit"] .preview {
219
+ visibility: hidden;
220
+ }
221
+ [data-component~="ui-editable"][data-ui-editable-state~="internalEdit"] .input {
222
+ visibility: visible;
223
+ }
224
+
225
+ .actions {
226
+ display: none;
227
+ gap: var(--ui-space-1);
228
+ }
229
+ [data-component~="ui-editable"][data-ui-editable-state~="internalEdit"] .actions {
230
+ display: inline-flex;
231
+ }
232
+
233
+ .actions button {
234
+ min-block-size: var(--ui-control-size-sm, 2rem);
235
+ padding: 0 var(--ui-space-3);
236
+ border: 1px solid var(--ui-border-strong);
237
+ border-radius: var(--ui-radius-2);
238
+ background: var(--ui-surface-elevated);
239
+ background-image: var(--ui-raised-highlight, none);
240
+ box-shadow: var(--ui-raised, none);
241
+ color: inherit;
242
+ font: inherit;
243
+ font-size: var(--ui-font-size-sm);
244
+ cursor: pointer;
245
+ }
246
+
247
+ .actions .save {
248
+ border-color: var(--ui-accent-solid);
249
+ background: var(--ui-accent-solid);
250
+ color: var(--ui-text-on-accent);
251
+ }
252
+
253
+ .actions button:focus-visible {
254
+ outline: none;
255
+ box-shadow: var(--ui-focus-halo);
256
+ }
257
+
258
+ [data-component~="ui-editable"][data-ui-editable-state~="disabled"] .preview {
259
+ color: var(--ui-text-muted);
260
+ cursor: not-allowed;
261
+ }
262
+
263
+ /* A component that sets its display still honours the hidden attribute on its root. */
264
+ [data-component~="ui-editable"][hidden] {
265
+ display: none;
266
+ }
267
+ </style>
@@ -0,0 +1,26 @@
1
+ type __VLS_Props = {
2
+ headerRow?: boolean | null;
3
+ maxCols?: number | null;
4
+ maxRows?: number | null;
5
+ open?: boolean | null;
6
+ };
7
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
8
+ insert: (detail: {
9
+ readonly rows: number;
10
+ readonly cols: number;
11
+ readonly withHeaderRow: boolean;
12
+ }) => any;
13
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
14
+ onInsert?: ((detail: {
15
+ readonly rows: number;
16
+ readonly cols: number;
17
+ readonly withHeaderRow: boolean;
18
+ }) => any) | undefined;
19
+ }>, {
20
+ open: boolean | null;
21
+ headerRow: boolean | null;
22
+ maxCols: number | null;
23
+ maxRows: number | null;
24
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
25
+ declare const _default: typeof __VLS_export;
26
+ export default _default;
@@ -0,0 +1,2 @@
1
+ import { t as UiEditorInsertTableGrid_default } from "./chunks/UiEditorInsertTableGrid.js";
2
+ export { UiEditorInsertTableGrid_default as default };