@threadlabs/looma 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/README.md +43 -12
  2. package/components/shared/editor.js +69 -0
  3. package/components/shared/input-modality.js +20 -0
  4. package/components/shared/overlay.js +281 -0
  5. package/components/shared/trigger.js +17 -0
  6. package/components/ui-affordance-scope/ui-affordance-scope.html +22 -0
  7. package/components/ui-affordance-scope/ui-affordance-scope.js +76 -0
  8. package/components/ui-avatar/ui-avatar.html +59 -0
  9. package/components/ui-avatar/ui-avatar.js +47 -0
  10. package/components/ui-avatar-group/ui-avatar-group.html +62 -0
  11. package/components/ui-avatar-group/ui-avatar-group.js +27 -0
  12. package/components/ui-badge/ui-badge.html +94 -0
  13. package/components/ui-button/ui-button.html +198 -0
  14. package/components/ui-callout/ui-callout.html +104 -0
  15. package/components/ui-checkbox/ui-checkbox.html +107 -0
  16. package/components/ui-checkbox/ui-checkbox.js +24 -0
  17. package/components/ui-cluster/ui-cluster.html +49 -0
  18. package/components/ui-combobox/ui-combobox.html +377 -0
  19. package/components/ui-combobox/ui-combobox.js +432 -0
  20. package/components/ui-container/ui-container.html +39 -0
  21. package/components/ui-context-menu/ui-context-menu.html +75 -0
  22. package/components/ui-context-menu/ui-context-menu.js +143 -0
  23. package/components/ui-dialog/ui-dialog.html +178 -0
  24. package/components/ui-dialog/ui-dialog.js +105 -0
  25. package/components/ui-disclosure/ui-disclosure.html +109 -0
  26. package/components/ui-disclosure/ui-disclosure.js +28 -0
  27. package/components/ui-editable/ui-editable.html +163 -0
  28. package/components/ui-editable/ui-editable.js +113 -0
  29. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.html +97 -0
  30. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.js +71 -0
  31. package/components/ui-editor-mention-menu/ui-editor-mention-menu.html +157 -0
  32. package/components/ui-editor-mention-menu/ui-editor-mention-menu.js +50 -0
  33. package/components/ui-editor-slash-menu/ui-editor-slash-menu.html +197 -0
  34. package/components/ui-editor-slash-menu/ui-editor-slash-menu.js +44 -0
  35. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +164 -0
  36. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.js +75 -0
  37. package/components/ui-editor-table-overlay/ui-editor-table-overlay.html +422 -0
  38. package/components/ui-editor-table-overlay/ui-editor-table-overlay.js +119 -0
  39. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +271 -0
  40. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.js +54 -0
  41. package/components/ui-editor-toolbar/ui-editor-toolbar.html +110 -0
  42. package/components/ui-floating-action-button/ui-floating-action-button.html +83 -0
  43. package/components/ui-form-field/ui-form-field.html +45 -0
  44. package/components/ui-form-field/ui-form-field.js +71 -0
  45. package/components/ui-grid/ui-grid.html +46 -0
  46. package/components/ui-icon/ui-icon.html +34 -0
  47. package/components/ui-icon/ui-icon.js +8 -0
  48. package/components/ui-icon-button/ui-icon-button.html +167 -0
  49. package/components/ui-icon-button/ui-icon-button.js +7 -0
  50. package/components/ui-input/ui-input.html +81 -0
  51. package/components/ui-input/ui-input.js +7 -0
  52. package/components/ui-menu/ui-menu.html +87 -0
  53. package/components/ui-menu/ui-menu.js +114 -0
  54. package/components/ui-menu-item/ui-menu-item.html +37 -0
  55. package/components/ui-popover/ui-popover.html +85 -0
  56. package/components/ui-popover/ui-popover.js +70 -0
  57. package/components/ui-radio/ui-radio.html +57 -0
  58. package/components/ui-radio/ui-radio.js +25 -0
  59. package/components/ui-radio-group/ui-radio-group.html +51 -0
  60. package/components/ui-radio-group/ui-radio-group.js +42 -0
  61. package/components/ui-reel/ui-reel.html +67 -0
  62. package/components/ui-search-result-row/ui-search-result-row.html +101 -0
  63. package/components/ui-search-shell/ui-search-shell.html +142 -0
  64. package/components/ui-search-shell/ui-search-shell.js +60 -0
  65. package/components/ui-select/ui-select.html +87 -0
  66. package/components/ui-select/ui-select.js +16 -0
  67. package/components/ui-separator/ui-separator.html +22 -0
  68. package/components/ui-sidebar/ui-sidebar.html +183 -0
  69. package/components/ui-sidebar/ui-sidebar.js +178 -0
  70. package/components/ui-stack/ui-stack.html +59 -0
  71. package/components/ui-switch/ui-switch.html +95 -0
  72. package/components/ui-switch/ui-switch.js +24 -0
  73. package/components/ui-switcher/ui-switcher.html +65 -0
  74. package/components/ui-tabs/ui-tabs.html +134 -0
  75. package/components/ui-tabs/ui-tabs.js +81 -0
  76. package/components/ui-textarea/ui-textarea.html +80 -0
  77. package/components/ui-textarea/ui-textarea.js +7 -0
  78. package/components/ui-toast-region/ui-toast-region.html +127 -0
  79. package/components/ui-toast-region/ui-toast-region.js +119 -0
  80. package/components/ui-tooltip/ui-tooltip.html +122 -0
  81. package/components/ui-tooltip/ui-tooltip.js +134 -0
  82. package/components/ui-top-bar/ui-top-bar.html +53 -0
  83. package/components/ui-tree/ui-tree.html +29 -0
  84. package/components/ui-tree/ui-tree.js +250 -0
  85. package/components/ui-tree-item/ui-tree-item.html +326 -0
  86. package/components/ui-tree-item/ui-tree-item.js +94 -0
  87. package/dist/index.d.ts +4 -414
  88. package/dist/index.js +55 -657
  89. package/editor/chunks/extensions.js +7267 -0
  90. package/editor/chunks/table-backgrounds.js +51 -0
  91. package/editor/chunks/ui.js +92 -0
  92. package/editor/extensions/callout.d.ts +20 -0
  93. package/editor/extensions/index.d.ts +12 -441
  94. package/editor/extensions/index.js +3 -64
  95. package/editor/extensions/list-behavior.d.ts +7 -0
  96. package/editor/extensions/mention.d.ts +35 -0
  97. package/editor/extensions/preset.d.ts +42 -0
  98. package/editor/extensions/slash-command.d.ts +80 -0
  99. package/editor/extensions/smart-paste.d.ts +13 -0
  100. package/editor/extensions/table-commands.d.ts +114 -0
  101. package/editor/extensions/table-formatting.d.ts +60 -0
  102. package/editor/icons.d.ts +55 -0
  103. package/editor/index.d.ts +8 -6
  104. package/editor/index.js +96 -71
  105. package/editor/insert-table-grid.d.ts +7 -0
  106. package/editor/mention-contract.d.ts +78 -0
  107. package/editor/mention-menu.d.ts +9 -0
  108. package/editor/slash-menu.d.ts +29 -0
  109. package/editor/table-backgrounds.d.ts +43 -0
  110. package/editor/table-context-menu.d.ts +12 -0
  111. package/editor/table-overlay.d.ts +79 -0
  112. package/editor/ui.d.ts +10 -50
  113. package/editor/ui.js +3 -14
  114. package/editor/viewport.d.ts +15 -0
  115. package/package.json +84 -60
  116. package/styles/ui-affordance-scope.css +19 -0
  117. package/styles/ui-avatar-group.css +56 -0
  118. package/styles/ui-avatar.css +47 -0
  119. package/styles/ui-badge.css +91 -0
  120. package/styles/ui-button.css +206 -0
  121. package/styles/ui-callout.css +76 -0
  122. package/styles/ui-checkbox.css +98 -0
  123. package/styles/ui-cluster.css +46 -0
  124. package/styles/ui-combobox.css +213 -0
  125. package/styles/ui-container.css +36 -0
  126. package/styles/ui-context-menu.css +68 -0
  127. package/styles/ui-dialog.css +160 -0
  128. package/styles/ui-disclosure.css +95 -0
  129. package/styles/ui-editable.css +139 -0
  130. package/styles/ui-editor-insert-table-grid.css +65 -0
  131. package/styles/ui-editor-mention-menu.css +121 -0
  132. package/styles/ui-editor-slash-menu.css +179 -0
  133. package/styles/ui-editor-table-context-menu.css +118 -0
  134. package/styles/ui-editor-table-overlay.css +318 -0
  135. package/styles/ui-editor-table-toolbar.css +191 -0
  136. package/styles/ui-editor-toolbar.css +115 -0
  137. package/styles/ui-floating-action-button.css +82 -0
  138. package/styles/ui-form-field.css +36 -0
  139. package/styles/ui-grid.css +43 -0
  140. package/styles/ui-icon-button.css +169 -0
  141. package/styles/ui-icon.css +23 -0
  142. package/styles/ui-input.css +82 -0
  143. package/styles/ui-menu-item.css +34 -0
  144. package/styles/ui-menu.css +80 -0
  145. package/styles/ui-popover.css +76 -0
  146. package/styles/ui-radio-group.css +38 -0
  147. package/styles/ui-radio.css +46 -0
  148. package/styles/ui-reel.css +63 -0
  149. package/styles/ui-search-result-row.css +92 -0
  150. package/styles/ui-search-shell.css +128 -0
  151. package/styles/ui-select.css +86 -0
  152. package/styles/ui-separator.css +16 -0
  153. package/styles/ui-sidebar.css +166 -0
  154. package/styles/ui-stack.css +55 -0
  155. package/styles/ui-switch.css +88 -0
  156. package/styles/ui-switcher.css +61 -0
  157. package/styles/ui-tabs.css +114 -0
  158. package/styles/ui-textarea.css +77 -0
  159. package/styles/ui-toast-region.css +103 -0
  160. package/styles/ui-tooltip.css +113 -0
  161. package/styles/ui-top-bar.css +51 -0
  162. package/styles/ui-tree-item.css +267 -0
  163. package/styles/ui-tree.css +16 -0
  164. package/vanilla/UiAffordanceScope.d.ts +14 -0
  165. package/vanilla/UiAffordanceScope.js +30 -0
  166. package/vanilla/UiAvatar.d.ts +17 -0
  167. package/vanilla/UiAvatar.js +41 -0
  168. package/vanilla/UiAvatarGroup.d.ts +15 -0
  169. package/vanilla/UiAvatarGroup.js +40 -0
  170. package/vanilla/UiBadge.d.ts +15 -0
  171. package/vanilla/UiBadge.js +30 -0
  172. package/vanilla/UiButton.d.ts +16 -0
  173. package/vanilla/UiButton.js +32 -0
  174. package/vanilla/UiCallout.d.ts +14 -0
  175. package/vanilla/UiCallout.js +124 -0
  176. package/vanilla/UiCheckbox.d.ts +19 -0
  177. package/vanilla/UiCheckbox.js +47 -0
  178. package/vanilla/UiCluster.d.ts +15 -0
  179. package/vanilla/UiCluster.js +30 -0
  180. package/vanilla/UiCombobox.d.ts +42 -0
  181. package/vanilla/UiCombobox.js +194 -0
  182. package/vanilla/UiContainer.d.ts +15 -0
  183. package/vanilla/UiContainer.js +30 -0
  184. package/vanilla/UiContextMenu.d.ts +18 -0
  185. package/vanilla/UiContextMenu.js +35 -0
  186. package/vanilla/UiDialog.d.ts +19 -0
  187. package/vanilla/UiDialog.js +53 -0
  188. package/vanilla/UiDisclosure.d.ts +18 -0
  189. package/vanilla/UiDisclosure.js +49 -0
  190. package/vanilla/UiEditable.d.ts +22 -0
  191. package/vanilla/UiEditable.js +59 -0
  192. package/vanilla/UiEditorInsertTableGrid.d.ts +18 -0
  193. package/vanilla/UiEditorInsertTableGrid.js +46 -0
  194. package/vanilla/UiEditorMentionMenu.d.ts +21 -0
  195. package/vanilla/UiEditorMentionMenu.js +63 -0
  196. package/vanilla/UiEditorSlashMenu.d.ts +20 -0
  197. package/vanilla/UiEditorSlashMenu.js +74 -0
  198. package/vanilla/UiEditorTableContextMenu.d.ts +17 -0
  199. package/vanilla/UiEditorTableContextMenu.js +69 -0
  200. package/vanilla/UiEditorTableOverlay.d.ts +16 -0
  201. package/vanilla/UiEditorTableOverlay.js +113 -0
  202. package/vanilla/UiEditorTableToolbar.d.ts +18 -0
  203. package/vanilla/UiEditorTableToolbar.js +121 -0
  204. package/vanilla/UiEditorToolbar.d.ts +14 -0
  205. package/vanilla/UiEditorToolbar.js +30 -0
  206. package/vanilla/UiFloatingActionButton.d.ts +16 -0
  207. package/vanilla/UiFloatingActionButton.js +35 -0
  208. package/vanilla/UiFormField.d.ts +16 -0
  209. package/vanilla/UiFormField.js +54 -0
  210. package/vanilla/UiGrid.d.ts +15 -0
  211. package/vanilla/UiGrid.js +30 -0
  212. package/vanilla/UiIcon.d.ts +14 -0
  213. package/vanilla/UiIcon.js +40 -0
  214. package/vanilla/UiIconButton.d.ts +19 -0
  215. package/vanilla/UiIconButton.js +37 -0
  216. package/vanilla/UiInput.d.ts +18 -0
  217. package/vanilla/UiInput.js +37 -0
  218. package/vanilla/UiMenu.d.ts +19 -0
  219. package/vanilla/UiMenu.js +35 -0
  220. package/vanilla/UiMenuItem.d.ts +15 -0
  221. package/vanilla/UiMenuItem.js +43 -0
  222. package/vanilla/UiPopover.d.ts +18 -0
  223. package/vanilla/UiPopover.js +33 -0
  224. package/vanilla/UiRadio.d.ts +19 -0
  225. package/vanilla/UiRadio.js +48 -0
  226. package/vanilla/UiRadioGroup.d.ts +21 -0
  227. package/vanilla/UiRadioGroup.js +35 -0
  228. package/vanilla/UiReel.d.ts +16 -0
  229. package/vanilla/UiReel.js +34 -0
  230. package/vanilla/UiSearchResultRow.d.ts +15 -0
  231. package/vanilla/UiSearchResultRow.js +82 -0
  232. package/vanilla/UiSearchShell.d.ts +18 -0
  233. package/vanilla/UiSearchShell.js +74 -0
  234. package/vanilla/UiSelect.d.ts +18 -0
  235. package/vanilla/UiSelect.js +42 -0
  236. package/vanilla/UiSeparator.d.ts +14 -0
  237. package/vanilla/UiSeparator.js +28 -0
  238. package/vanilla/UiSidebar.d.ts +24 -0
  239. package/vanilla/UiSidebar.js +47 -0
  240. package/vanilla/UiStack.d.ts +16 -0
  241. package/vanilla/UiStack.js +32 -0
  242. package/vanilla/UiSwitch.d.ts +18 -0
  243. package/vanilla/UiSwitch.js +46 -0
  244. package/vanilla/UiSwitcher.d.ts +16 -0
  245. package/vanilla/UiSwitcher.js +32 -0
  246. package/vanilla/UiTabs.d.ts +18 -0
  247. package/vanilla/UiTabs.js +47 -0
  248. package/vanilla/UiTextarea.d.ts +19 -0
  249. package/vanilla/UiTextarea.js +40 -0
  250. package/vanilla/UiToastRegion.d.ts +20 -0
  251. package/vanilla/UiToastRegion.js +58 -0
  252. package/vanilla/UiTooltip.d.ts +21 -0
  253. package/vanilla/UiTooltip.js +34 -0
  254. package/vanilla/UiTopBar.d.ts +13 -0
  255. package/vanilla/UiTopBar.js +59 -0
  256. package/vanilla/UiTree.d.ts +18 -0
  257. package/vanilla/UiTree.js +31 -0
  258. package/vanilla/UiTreeItem.d.ts +26 -0
  259. package/vanilla/UiTreeItem.js +164 -0
  260. package/vanilla/index.js +48 -0
  261. package/vue/UiAffordanceScope.d.ts +18 -0
  262. package/vue/UiAffordanceScope.js +2 -0
  263. package/vue/UiAffordanceScope.vue +118 -0
  264. package/vue/UiAvatar.d.ts +23 -0
  265. package/vue/UiAvatar.js +2 -0
  266. package/vue/UiAvatar.vue +152 -0
  267. package/vue/UiAvatarGroup.d.ts +20 -0
  268. package/vue/UiAvatarGroup.js +2 -0
  269. package/vue/UiAvatarGroup.vue +167 -0
  270. package/vue/UiBadge.d.ts +20 -0
  271. package/vue/UiBadge.js +2 -0
  272. package/vue/UiBadge.vue +123 -0
  273. package/vue/UiButton.d.ts +22 -0
  274. package/vue/UiButton.js +2 -0
  275. package/vue/UiButton.vue +229 -0
  276. package/vue/UiCallout.d.ts +18 -0
  277. package/vue/UiCallout.js +2 -0
  278. package/vue/UiCallout.vue +104 -0
  279. package/vue/UiCheckbox.d.ts +38 -0
  280. package/vue/UiCheckbox.js +2 -0
  281. package/vue/UiCheckbox.vue +216 -0
  282. package/vue/UiCluster.d.ts +17 -0
  283. package/vue/UiCluster.js +2 -0
  284. package/vue/UiCluster.vue +75 -0
  285. package/vue/UiCombobox.d.ts +255 -0
  286. package/vue/UiCombobox.js +2 -0
  287. package/vue/UiCombobox.vue +466 -0
  288. package/vue/UiContainer.d.ts +17 -0
  289. package/vue/UiContainer.js +2 -0
  290. package/vue/UiContainer.vue +65 -0
  291. package/vue/UiContextMenu.d.ts +50 -0
  292. package/vue/UiContextMenu.js +2 -0
  293. package/vue/UiContextMenu.vue +166 -0
  294. package/vue/UiDialog.d.ts +39 -0
  295. package/vue/UiDialog.js +2 -0
  296. package/vue/UiDialog.vue +273 -0
  297. package/vue/UiDisclosure.d.ts +44 -0
  298. package/vue/UiDisclosure.js +2 -0
  299. package/vue/UiDisclosure.vue +211 -0
  300. package/vue/UiEditable.d.ts +48 -0
  301. package/vue/UiEditable.js +2 -0
  302. package/vue/UiEditable.vue +267 -0
  303. package/vue/UiEditorInsertTableGrid.d.ts +26 -0
  304. package/vue/UiEditorInsertTableGrid.js +2 -0
  305. package/vue/UiEditorInsertTableGrid.vue +210 -0
  306. package/vue/UiEditorMentionMenu.d.ts +44 -0
  307. package/vue/UiEditorMentionMenu.js +2 -0
  308. package/vue/UiEditorMentionMenu.vue +284 -0
  309. package/vue/UiEditorSlashMenu.d.ts +41 -0
  310. package/vue/UiEditorSlashMenu.js +2 -0
  311. package/vue/UiEditorSlashMenu.vue +306 -0
  312. package/vue/UiEditorTableContextMenu.d.ts +19 -0
  313. package/vue/UiEditorTableContextMenu.js +2 -0
  314. package/vue/UiEditorTableContextMenu.vue +252 -0
  315. package/vue/UiEditorTableOverlay.d.ts +66 -0
  316. package/vue/UiEditorTableOverlay.js +2 -0
  317. package/vue/UiEditorTableOverlay.vue +455 -0
  318. package/vue/UiEditorTableToolbar.d.ts +21 -0
  319. package/vue/UiEditorTableToolbar.js +2 -0
  320. package/vue/UiEditorTableToolbar.vue +339 -0
  321. package/vue/UiEditorToolbar.d.ts +18 -0
  322. package/vue/UiEditorToolbar.js +2 -0
  323. package/vue/UiEditorToolbar.vue +138 -0
  324. package/vue/UiFloatingActionButton.d.ts +22 -0
  325. package/vue/UiFloatingActionButton.js +2 -0
  326. package/vue/UiFloatingActionButton.vue +116 -0
  327. package/vue/UiFormField.d.ts +28 -0
  328. package/vue/UiFormField.js +2 -0
  329. package/vue/UiFormField.vue +124 -0
  330. package/vue/UiGrid.d.ts +17 -0
  331. package/vue/UiGrid.js +2 -0
  332. package/vue/UiGrid.vue +72 -0
  333. package/vue/UiIcon.d.ts +8 -0
  334. package/vue/UiIcon.js +2 -0
  335. package/vue/UiIcon.vue +135 -0
  336. package/vue/UiIconButton.d.ts +27 -0
  337. package/vue/UiIconButton.js +2 -0
  338. package/vue/UiIconButton.vue +268 -0
  339. package/vue/UiInput.d.ts +20 -0
  340. package/vue/UiInput.js +2 -0
  341. package/vue/UiInput.vue +177 -0
  342. package/vue/UiMenu.d.ts +52 -0
  343. package/vue/UiMenu.js +2 -0
  344. package/vue/UiMenu.vue +194 -0
  345. package/vue/UiMenuItem.d.ts +20 -0
  346. package/vue/UiMenuItem.js +2 -0
  347. package/vue/UiMenuItem.vue +55 -0
  348. package/vue/UiPopover.d.ts +44 -0
  349. package/vue/UiPopover.js +2 -0
  350. package/vue/UiPopover.vue +188 -0
  351. package/vue/UiRadio.d.ts +38 -0
  352. package/vue/UiRadio.js +2 -0
  353. package/vue/UiRadio.vue +166 -0
  354. package/vue/UiRadioGroup.d.ts +50 -0
  355. package/vue/UiRadioGroup.js +2 -0
  356. package/vue/UiRadioGroup.vue +161 -0
  357. package/vue/UiReel.d.ts +18 -0
  358. package/vue/UiReel.js +2 -0
  359. package/vue/UiReel.vue +93 -0
  360. package/vue/UiSearchResultRow.d.ts +28 -0
  361. package/vue/UiSearchResultRow.js +2 -0
  362. package/vue/UiSearchResultRow.vue +124 -0
  363. package/vue/UiSearchShell.d.ts +42 -0
  364. package/vue/UiSearchShell.js +2 -0
  365. package/vue/UiSearchShell.vue +233 -0
  366. package/vue/UiSelect.d.ts +30 -0
  367. package/vue/UiSelect.js +2 -0
  368. package/vue/UiSelect.vue +183 -0
  369. package/vue/UiSeparator.d.ts +8 -0
  370. package/vue/UiSeparator.js +2 -0
  371. package/vue/UiSeparator.vue +38 -0
  372. package/vue/UiSidebar.d.ts +54 -0
  373. package/vue/UiSidebar.js +2 -0
  374. package/vue/UiSidebar.vue +288 -0
  375. package/vue/UiStack.d.ts +18 -0
  376. package/vue/UiStack.js +2 -0
  377. package/vue/UiStack.vue +85 -0
  378. package/vue/UiSwitch.d.ts +36 -0
  379. package/vue/UiSwitch.js +2 -0
  380. package/vue/UiSwitch.vue +203 -0
  381. package/vue/UiSwitcher.d.ts +18 -0
  382. package/vue/UiSwitcher.js +2 -0
  383. package/vue/UiSwitcher.vue +91 -0
  384. package/vue/UiTabs.d.ts +36 -0
  385. package/vue/UiTabs.js +2 -0
  386. package/vue/UiTabs.vue +269 -0
  387. package/vue/UiTextarea.d.ts +22 -0
  388. package/vue/UiTextarea.js +2 -0
  389. package/vue/UiTextarea.vue +177 -0
  390. package/vue/UiToastRegion.d.ts +48 -0
  391. package/vue/UiToastRegion.js +2 -0
  392. package/vue/UiToastRegion.vue +256 -0
  393. package/vue/UiTooltip.d.ts +50 -0
  394. package/vue/UiTooltip.js +2 -0
  395. package/vue/UiTooltip.vue +230 -0
  396. package/vue/UiTopBar.d.ts +19 -0
  397. package/vue/UiTopBar.js +2 -0
  398. package/vue/UiTopBar.vue +56 -0
  399. package/vue/UiTree.d.ts +62 -0
  400. package/vue/UiTree.js +2 -0
  401. package/vue/UiTree.vue +117 -0
  402. package/vue/UiTreeItem.d.ts +56 -0
  403. package/vue/UiTreeItem.js +2 -0
  404. package/vue/UiTreeItem.vue +418 -0
  405. package/vue/chunks/UiAffordanceScope.js +112 -0
  406. package/vue/chunks/UiAvatar.js +144 -0
  407. package/vue/chunks/UiAvatarGroup.js +142 -0
  408. package/vue/chunks/UiBadge.js +33 -0
  409. package/vue/chunks/UiButton.js +47 -0
  410. package/vue/chunks/UiCallout.js +117 -0
  411. package/vue/chunks/UiCheckbox.js +167 -0
  412. package/vue/chunks/UiCluster.js +33 -0
  413. package/vue/chunks/UiCombobox.js +684 -0
  414. package/vue/chunks/UiContainer.js +33 -0
  415. package/vue/chunks/UiContextMenu.js +153 -0
  416. package/vue/chunks/UiDialog.js +162 -0
  417. package/vue/chunks/UiDisclosure.js +185 -0
  418. package/vue/chunks/UiEditable.js +223 -0
  419. package/vue/chunks/UiEditorInsertTableGrid.js +221 -0
  420. package/vue/chunks/UiEditorMentionMenu.js +245 -0
  421. package/vue/chunks/UiEditorSlashMenu.js +210 -0
  422. package/vue/chunks/UiEditorTableContextMenu.js +201 -0
  423. package/vue/chunks/UiEditorTableOverlay.js +301 -0
  424. package/vue/chunks/UiEditorTableToolbar.js +299 -0
  425. package/vue/chunks/UiEditorToolbar.js +37 -0
  426. package/vue/chunks/UiFloatingActionButton.js +56 -0
  427. package/vue/chunks/UiFormField.js +113 -0
  428. package/vue/chunks/UiGrid.js +33 -0
  429. package/vue/chunks/UiIcon.js +170 -0
  430. package/vue/chunks/UiIconButton.js +141 -0
  431. package/vue/chunks/UiInput.js +136 -0
  432. package/vue/chunks/UiMenu.js +163 -0
  433. package/vue/chunks/UiMenuItem.js +37 -0
  434. package/vue/chunks/UiPopover.js +149 -0
  435. package/vue/chunks/UiRadio.js +164 -0
  436. package/vue/chunks/UiRadioGroup.js +160 -0
  437. package/vue/chunks/UiReel.js +42 -0
  438. package/vue/chunks/UiSearchResultRow.js +63 -0
  439. package/vue/chunks/UiSearchShell.js +152 -0
  440. package/vue/chunks/UiSelect.js +134 -0
  441. package/vue/chunks/UiSeparator.js +24 -0
  442. package/vue/chunks/UiSidebar.js +180 -0
  443. package/vue/chunks/UiStack.js +38 -0
  444. package/vue/chunks/UiSwitch.js +162 -0
  445. package/vue/chunks/UiSwitcher.js +38 -0
  446. package/vue/chunks/UiTabs.js +210 -0
  447. package/vue/chunks/UiTextarea.js +139 -0
  448. package/vue/chunks/UiToastRegion.js +227 -0
  449. package/vue/chunks/UiTooltip.js +163 -0
  450. package/vue/chunks/UiTopBar.js +25 -0
  451. package/vue/chunks/UiTree.js +140 -0
  452. package/vue/chunks/UiTreeItem.js +315 -0
  453. package/vue/chunks/_plugin-vue_export-helper.js +8 -0
  454. package/vue/components.css +4405 -0
  455. package/vue/editor/LoomaEditor.d.ts +171 -0
  456. package/vue/editor/image-delivery.d.ts +61 -0
  457. package/vue/editor/index.d.ts +4 -386
  458. package/vue/editor/index.js +995 -1134
  459. package/vue/editor/primitives.d.ts +23 -0
  460. package/vue/index.d.ts +48 -604
  461. package/vue/index.js +49 -86
  462. package/dist/chunk-MLKGABMK.js +0 -9
  463. package/dist/chunk-RWLYVQY6.js +0 -5719
  464. package/dist/chunk-XDNZIKNI.js +0 -2721
  465. package/dist/declarative-generated.cjs +0 -149
  466. package/dist/declarative-generated.d.cts +0 -16
  467. package/dist/declarative-generated.d.ts +0 -16
  468. package/dist/declarative-generated.js +0 -124
  469. package/dist/declarative.cjs +0 -2750
  470. package/dist/declarative.d.cts +0 -101
  471. package/dist/declarative.d.ts +0 -101
  472. package/dist/declarative.js +0 -15
  473. package/dist/index.cjs +0 -9077
  474. package/dist/index.d.cts +0 -414
  475. package/dist/loader.cjs +0 -8442
  476. package/dist/loader.d.cts +0 -4
  477. package/dist/loader.d.ts +0 -4
  478. package/dist/loader.js +0 -16
  479. package/editor/chunk-EUIH3TBV.js +0 -6826
  480. package/editor/chunk-JK53ENSG.js +0 -29
  481. package/editor/chunk-U36XNFJN.js +0 -2592
  482. package/editor/table-overlay-DZFGHQDt.d.ts +0 -138
  483. package/editor.css +0 -1592
  484. package/layout/index.cjs +0 -356
  485. package/layout/index.d.cts +0 -18
  486. package/layout/index.d.ts +0 -18
  487. package/layout/index.js +0 -341
  488. package/layout.css +0 -191
  489. package/styles.css +0 -940
  490. package/vue/chunk-OX3EACZ7.js +0 -4369
@@ -0,0 +1,171 @@
1
+ import "./looma-editor.css";
2
+ import type { AnyExtension, Editor, JSONContent } from "@tiptap/core";
3
+ import { type PropType, type VNode } from "vue";
4
+ import { type LoomaMentionItem, type LoomaMentionProvider } from "@threadlabs/looma/editor";
5
+ import { type LoomaImageActivationDetail, type LoomaImageAttributeResolver, type LoomaImageDescriptor, type LoomaImageRenditionErrorDetail } from "./image-delivery.js";
6
+ /**
7
+ * Host upload result normalized into the editor's durable image descriptor.
8
+ * `url` becomes the stored `src`; optional dimensions preserve layout before
9
+ * the image loads and `responsive` opts into host-provided rendition policy.
10
+ */
11
+ export interface LoomaImageUploadResult extends Omit<LoomaImageDescriptor, "src"> {
12
+ url: string;
13
+ }
14
+ /**
15
+ * Application-owned upload boundary used by paste, drop, and file selection.
16
+ *
17
+ * @ownership The application owns network requests, persistence, and returned
18
+ * URLs. Looma owns only editor insertion after the promise fulfills.
19
+ * @failure Rejection leaves the document unchanged and is surfaced through the
20
+ * editor's `uploadError` event so the host chooses retry and user messaging.
21
+ */
22
+ export type LoomaImageUploader = (file: File) => Promise<string | LoomaImageUploadResult>;
23
+ /**
24
+ * Chooses whether formatting controls follow a selection or occupy persistent
25
+ * editor chrome; it does not alter document commands or stored content.
26
+ */
27
+ export type LoomaEditorToolbarMode = "bubble" | "sticky";
28
+ /**
29
+ * Turnkey Vue editor that composes Looma's framework-neutral Tiptap extensions
30
+ * with declarative menus, image delivery, and table interaction chrome.
31
+ *
32
+ * @ownership The component owns its Tiptap instance and transient UI state;
33
+ * callers own controlled `modelValue`, extension instances, and host services.
34
+ * @lifecycle Mount creates one editor and browser listener set, prop watchers
35
+ * synchronize external state, and unmount cancels frames/listeners and destroys
36
+ * the editor-owned resources.
37
+ * @failure Upload and responsive-rendition failures are emitted to the host;
38
+ * durable document content is retained or left unchanged for recovery.
39
+ */
40
+ export declare const LoomaEditor: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
41
+ modelValue: {
42
+ type: PropType<JSONContent>;
43
+ default: () => {
44
+ [key: string]: any;
45
+ type?: string;
46
+ attrs?: Record<string, any>;
47
+ content?: JSONContent[];
48
+ marks?: {
49
+ type: string;
50
+ attrs?: Record<string, any>;
51
+ [key: string]: any;
52
+ }[];
53
+ text?: string;
54
+ };
55
+ };
56
+ editable: {
57
+ type: BooleanConstructor;
58
+ default: boolean;
59
+ };
60
+ placeholder: {
61
+ type: StringConstructor;
62
+ default: string;
63
+ };
64
+ extensions: {
65
+ type: PropType<AnyExtension[]>;
66
+ default: () => never[];
67
+ };
68
+ mentionItems: {
69
+ type: PropType<LoomaMentionItem[]>;
70
+ default: () => never[];
71
+ };
72
+ mentionProvider: {
73
+ type: PropType<LoomaMentionProvider | undefined>;
74
+ default: undefined;
75
+ };
76
+ mentionLimit: {
77
+ type: NumberConstructor;
78
+ default: number;
79
+ };
80
+ uploadImage: {
81
+ type: PropType<LoomaImageUploader | undefined>;
82
+ default: undefined;
83
+ };
84
+ resolveImageAttributes: {
85
+ type: PropType<LoomaImageAttributeResolver | undefined>;
86
+ default: undefined;
87
+ };
88
+ toolbarMode: {
89
+ type: PropType<LoomaEditorToolbarMode>;
90
+ default: string;
91
+ };
92
+ }>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
93
+ [key: string]: any;
94
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
95
+ "update:modelValue": (_value: JSONContent) => true;
96
+ update: (_value: JSONContent) => true;
97
+ ready: (_editor: Editor) => true;
98
+ uploadError: (_error: unknown, _file: File) => true;
99
+ imageActivate: (_detail: LoomaImageActivationDetail) => true;
100
+ imageRenditionError: (_detail: LoomaImageRenditionErrorDetail) => true;
101
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
102
+ modelValue: {
103
+ type: PropType<JSONContent>;
104
+ default: () => {
105
+ [key: string]: any;
106
+ type?: string;
107
+ attrs?: Record<string, any>;
108
+ content?: JSONContent[];
109
+ marks?: {
110
+ type: string;
111
+ attrs?: Record<string, any>;
112
+ [key: string]: any;
113
+ }[];
114
+ text?: string;
115
+ };
116
+ };
117
+ editable: {
118
+ type: BooleanConstructor;
119
+ default: boolean;
120
+ };
121
+ placeholder: {
122
+ type: StringConstructor;
123
+ default: string;
124
+ };
125
+ extensions: {
126
+ type: PropType<AnyExtension[]>;
127
+ default: () => never[];
128
+ };
129
+ mentionItems: {
130
+ type: PropType<LoomaMentionItem[]>;
131
+ default: () => never[];
132
+ };
133
+ mentionProvider: {
134
+ type: PropType<LoomaMentionProvider | undefined>;
135
+ default: undefined;
136
+ };
137
+ mentionLimit: {
138
+ type: NumberConstructor;
139
+ default: number;
140
+ };
141
+ uploadImage: {
142
+ type: PropType<LoomaImageUploader | undefined>;
143
+ default: undefined;
144
+ };
145
+ resolveImageAttributes: {
146
+ type: PropType<LoomaImageAttributeResolver | undefined>;
147
+ default: undefined;
148
+ };
149
+ toolbarMode: {
150
+ type: PropType<LoomaEditorToolbarMode>;
151
+ default: string;
152
+ };
153
+ }>> & Readonly<{
154
+ "onUpdate:modelValue"?: ((_value: JSONContent) => any) | undefined;
155
+ onUpdate?: ((_value: JSONContent) => any) | undefined;
156
+ onReady?: ((_editor: Editor) => any) | undefined;
157
+ onUploadError?: ((_error: unknown, _file: File) => any) | undefined;
158
+ onImageActivate?: ((_detail: LoomaImageActivationDetail) => any) | undefined;
159
+ onImageRenditionError?: ((_detail: LoomaImageRenditionErrorDetail) => any) | undefined;
160
+ }>, {
161
+ placeholder: string;
162
+ modelValue: JSONContent;
163
+ editable: boolean;
164
+ extensions: AnyExtension[];
165
+ mentionItems: LoomaMentionItem[];
166
+ mentionProvider: LoomaMentionProvider | undefined;
167
+ mentionLimit: number;
168
+ uploadImage: LoomaImageUploader | undefined;
169
+ resolveImageAttributes: LoomaImageAttributeResolver | undefined;
170
+ toolbarMode: LoomaEditorToolbarMode;
171
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -0,0 +1,61 @@
1
+ import { Extension, type Editor, type JSONContent } from "@tiptap/core";
2
+ /** What caused an overlay to open or close. */
3
+ type OverlayTrigger = "keyboard" | "pointer" | "programmatic";
4
+ /**
5
+ * Durable image data stored in the editor document.
6
+ * Delivery-specific attributes are intentionally absent so serialized content
7
+ * remains portable across CDNs, viewport policies, and Vue applications.
8
+ */
9
+ export interface LoomaImageDescriptor {
10
+ src: string;
11
+ alt?: string;
12
+ width?: number;
13
+ height?: number;
14
+ responsive?: boolean;
15
+ }
16
+ /** Browser-only attributes resolved by a host image-delivery provider. */
17
+ export interface LoomaImageRenditionAttributes {
18
+ src?: string;
19
+ srcset?: string;
20
+ sizes?: string;
21
+ loading?: "eager" | "lazy";
22
+ decoding?: "async" | "auto" | "sync";
23
+ fetchPriority?: "auto" | "high" | "low";
24
+ }
25
+ /**
26
+ * Host policy for deriving transient browser-delivery attributes.
27
+ *
28
+ * @ownership The application owns the resolver and any URL/signing policy it
29
+ * consults; Looma reads its result without persisting it into editor JSON.
30
+ * @failure Throwing or returning `undefined` falls back to the durable source
31
+ * instead of interrupting rendering or mutating the document.
32
+ */
33
+ export type LoomaImageAttributeResolver = (image: LoomaImageDescriptor) => LoomaImageRenditionAttributes | undefined;
34
+ /** User-originated interaction that may request the host's image viewer. */
35
+ export type LoomaImageActivationTrigger = Exclude<OverlayTrigger, "programmatic">;
36
+ /**
37
+ * Image identity and user trigger emitted when an editor image is activated.
38
+ * Hosts may use the stable descriptor to open a viewer without inspecting DOM.
39
+ */
40
+ export interface LoomaImageActivationDetail extends LoomaImageDescriptor {
41
+ trigger: LoomaImageActivationTrigger;
42
+ }
43
+ /**
44
+ * Durable image identity reported after a transient responsive rendition fails.
45
+ * The programmatic trigger distinguishes delivery fallback from user intent.
46
+ */
47
+ export interface LoomaImageRenditionErrorDetail extends LoomaImageDescriptor {
48
+ trigger: "programmatic";
49
+ }
50
+ interface LoomaImageDeliveryExtensionOptions {
51
+ resolveAttributes: () => LoomaImageAttributeResolver | undefined;
52
+ }
53
+ export declare function normalizeImageDimension(value: unknown): number | undefined;
54
+ export declare function imageDescriptorFromAttrs(attrs: Record<string, unknown>): LoomaImageDescriptor | null;
55
+ export declare function createLoomaImageDeliveryController(options: LoomaImageDeliveryExtensionOptions): {
56
+ extension: Extension;
57
+ markRenditionFailed: (editor: Editor, src: string) => boolean;
58
+ reset: (editor: Editor) => void;
59
+ };
60
+ export declare function imageUploadContent(image: LoomaImageDescriptor): JSONContent;
61
+ export {};
@@ -1,386 +1,4 @@
1
- import { LoomaMentionItem, SlashMenuAnchorRect, SlashMenuItem, LoomaMentionProvider } from '@threadlabs/looma/editor';
2
- export * from '@threadlabs/looma/editor';
3
- import * as vue from 'vue';
4
- import { PropType, VNode } from 'vue';
5
- import { MentionMenuHighlightEventDetail, SlashMenuHighlightEventDetail, MentionMenuSelectEventDetail, SlashMenuSelectEventDetail, TableContextMenuActionEventDetail, TableOverlayActionEventDetail, InsertTableEventDetail } from '@threadlabs/looma/editor/ui';
6
- import { JSONContent, AnyExtension, Editor } from '@tiptap/core';
7
- import { OverlayTrigger } from '@threadlabs/looma/core';
8
-
9
- /**
10
- * Native editor event details unwrapped for Vue callback attributes.
11
- * Multiple menu primitives share `highlight` and `select` because their index
12
- * semantics are identical; table primitives share the typed action channel.
13
- */
14
- interface VueEditorAdapterEventMap {
15
- highlight: MentionMenuHighlightEventDetail | SlashMenuHighlightEventDetail;
16
- select: MentionMenuSelectEventDetail | SlashMenuSelectEventDetail;
17
- action: TableContextMenuActionEventDetail | TableOverlayActionEventDetail;
18
- insert: InsertTableEventDetail;
19
- }
20
- /**
21
- * Vue projection of the slash suggestion menu with lifecycle-safe event wiring.
22
- */
23
- declare const EditorSlashMenu: vue.DefineComponent<vue.ExtractPropTypes<{
24
- open: {
25
- type: BooleanConstructor;
26
- default: boolean;
27
- };
28
- query: {
29
- type: StringConstructor;
30
- default: string;
31
- };
32
- items: {
33
- type: PropType<SlashMenuItem[]>;
34
- default: () => never[];
35
- };
36
- selectedIndex: {
37
- type: NumberConstructor;
38
- default: number;
39
- };
40
- anchorRect: {
41
- type: PropType<SlashMenuAnchorRect | null>;
42
- default: null;
43
- };
44
- loading: {
45
- type: BooleanConstructor;
46
- default: boolean;
47
- };
48
- }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
49
- [key: string]: any;
50
- }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
51
- open: {
52
- type: BooleanConstructor;
53
- default: boolean;
54
- };
55
- query: {
56
- type: StringConstructor;
57
- default: string;
58
- };
59
- items: {
60
- type: PropType<SlashMenuItem[]>;
61
- default: () => never[];
62
- };
63
- selectedIndex: {
64
- type: NumberConstructor;
65
- default: number;
66
- };
67
- anchorRect: {
68
- type: PropType<SlashMenuAnchorRect | null>;
69
- default: null;
70
- };
71
- loading: {
72
- type: BooleanConstructor;
73
- default: boolean;
74
- };
75
- }>> & Readonly<{}>, {
76
- open: boolean;
77
- items: SlashMenuItem[];
78
- query: string;
79
- loading: boolean;
80
- anchorRect: SlashMenuAnchorRect | null;
81
- selectedIndex: number;
82
- }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
83
- /** Vue projection of the mention menu using the shared suggestion lifecycle. */
84
- declare const EditorMentionMenu: vue.DefineComponent<vue.ExtractPropTypes<{
85
- open: {
86
- type: BooleanConstructor;
87
- default: boolean;
88
- };
89
- query: {
90
- type: StringConstructor;
91
- default: string;
92
- };
93
- items: {
94
- type: PropType<LoomaMentionItem[]>;
95
- default: () => never[];
96
- };
97
- selectedIndex: {
98
- type: NumberConstructor;
99
- default: number;
100
- };
101
- anchorRect: {
102
- type: PropType<SlashMenuAnchorRect | null>;
103
- default: null;
104
- };
105
- loading: {
106
- type: BooleanConstructor;
107
- default: boolean;
108
- };
109
- }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
110
- [key: string]: any;
111
- }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
112
- open: {
113
- type: BooleanConstructor;
114
- default: boolean;
115
- };
116
- query: {
117
- type: StringConstructor;
118
- default: string;
119
- };
120
- items: {
121
- type: PropType<LoomaMentionItem[]>;
122
- default: () => never[];
123
- };
124
- selectedIndex: {
125
- type: NumberConstructor;
126
- default: number;
127
- };
128
- anchorRect: {
129
- type: PropType<SlashMenuAnchorRect | null>;
130
- default: null;
131
- };
132
- loading: {
133
- type: BooleanConstructor;
134
- default: boolean;
135
- };
136
- }>> & Readonly<{}>, {
137
- open: boolean;
138
- items: LoomaMentionItem[];
139
- query: string;
140
- loading: boolean;
141
- anchorRect: SlashMenuAnchorRect | null;
142
- selectedIndex: number;
143
- }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
144
- /** Vue projection of the editor toolbar's semantic layout shell. */
145
- declare const EditorToolbar: vue.DefineComponent<Record<string, never>>;
146
- /** Vue projection that unwraps context-menu table actions for callbacks. */
147
- declare const EditorTableContextMenu: vue.DefineComponent<Record<string, never>>;
148
- /** Vue projection that unwraps toolbar table actions for callbacks. */
149
- declare const EditorTableToolbar: vue.DefineComponent<Record<string, never>>;
150
- /** Vue projection that reports the selected table dimensions as insert intent. */
151
- declare const EditorInsertTableGrid: vue.DefineComponent<Record<string, never>>;
152
- /**
153
- * Vue projection of editor-owned table geometry and boundary actions.
154
- * Geometry is assigned as a DOM property so structured measurements are never
155
- * serialized through attributes.
156
- */
157
- declare const EditorTableOverlay: vue.DefineComponent<Record<string, never>>;
158
- /**
159
- * Canonical Vue editor export-to-native-tag correspondence used by parity
160
- * checks and tooling that must enumerate opt-in editor primitives.
161
- */
162
- declare const EDITOR_ADAPTER_COMPONENT_TAG_MAP: {
163
- readonly EditorToolbar: "ui-editor-toolbar";
164
- readonly EditorSlashMenu: "ui-editor-slash-menu";
165
- readonly EditorMentionMenu: "ui-editor-mention-menu";
166
- readonly EditorTableContextMenu: "ui-editor-table-context-menu";
167
- readonly EditorTableToolbar: "ui-editor-table-toolbar";
168
- readonly EditorInsertTableGrid: "ui-editor-insert-table-grid";
169
- readonly EditorTableOverlay: "ui-editor-table-overlay";
170
- };
171
-
172
- /**
173
- * Durable image data stored in the editor document.
174
- * Delivery-specific attributes are intentionally absent so serialized content
175
- * remains portable across CDNs, viewport policies, and Vue applications.
176
- */
177
- interface LoomaImageDescriptor {
178
- src: string;
179
- alt?: string;
180
- width?: number;
181
- height?: number;
182
- responsive?: boolean;
183
- }
184
- /** Browser-only attributes resolved by a host image-delivery provider. */
185
- interface LoomaImageRenditionAttributes {
186
- src?: string;
187
- srcset?: string;
188
- sizes?: string;
189
- loading?: "eager" | "lazy";
190
- decoding?: "async" | "auto" | "sync";
191
- fetchPriority?: "auto" | "high" | "low";
192
- }
193
- /**
194
- * Host policy for deriving transient browser-delivery attributes.
195
- *
196
- * @ownership The application owns the resolver and any URL/signing policy it
197
- * consults; Looma reads its result without persisting it into editor JSON.
198
- * @failure Throwing or returning `undefined` falls back to the durable source
199
- * instead of interrupting rendering or mutating the document.
200
- */
201
- type LoomaImageAttributeResolver = (image: LoomaImageDescriptor) => LoomaImageRenditionAttributes | undefined;
202
- /** User-originated interaction that may request the host's image viewer. */
203
- type LoomaImageActivationTrigger = Exclude<OverlayTrigger, "programmatic">;
204
- /**
205
- * Image identity and user trigger emitted when an editor image is activated.
206
- * Hosts may use the stable descriptor to open a viewer without inspecting DOM.
207
- */
208
- interface LoomaImageActivationDetail extends LoomaImageDescriptor {
209
- trigger: LoomaImageActivationTrigger;
210
- }
211
- /**
212
- * Durable image identity reported after a transient responsive rendition fails.
213
- * The programmatic trigger distinguishes delivery fallback from user intent.
214
- */
215
- interface LoomaImageRenditionErrorDetail extends LoomaImageDescriptor {
216
- trigger: "programmatic";
217
- }
218
-
219
- /**
220
- * Host upload result normalized into the editor's durable image descriptor.
221
- * `url` becomes the stored `src`; optional dimensions preserve layout before
222
- * the image loads and `responsive` opts into host-provided rendition policy.
223
- */
224
- interface LoomaImageUploadResult extends Omit<LoomaImageDescriptor, "src"> {
225
- url: string;
226
- }
227
- /**
228
- * Application-owned upload boundary used by paste, drop, and file selection.
229
- *
230
- * @ownership The application owns network requests, persistence, and returned
231
- * URLs. Looma owns only editor insertion after the promise fulfills.
232
- * @failure Rejection leaves the document unchanged and is surfaced through the
233
- * editor's `uploadError` event so the host chooses retry and user messaging.
234
- */
235
- type LoomaImageUploader = (file: File) => Promise<string | LoomaImageUploadResult>;
236
- /**
237
- * Chooses whether formatting controls follow a selection or occupy persistent
238
- * editor chrome; it does not alter document commands or stored content.
239
- */
240
- type LoomaEditorToolbarMode = "bubble" | "sticky";
241
- /**
242
- * Turnkey Vue editor that composes Looma's framework-neutral Tiptap extensions
243
- * with declarative menus, image delivery, and table interaction chrome.
244
- *
245
- * @ownership The component owns its Tiptap instance and transient UI state;
246
- * callers own controlled `modelValue`, extension instances, and host services.
247
- * @lifecycle Mount creates one editor and browser listener set, prop watchers
248
- * synchronize external state, and unmount cancels frames/listeners and destroys
249
- * the editor-owned resources.
250
- * @failure Upload and responsive-rendition failures are emitted to the host;
251
- * durable document content is retained or left unchanged for recovery.
252
- */
253
- declare const LoomaEditor: vue.DefineComponent<vue.ExtractPropTypes<{
254
- modelValue: {
255
- type: PropType<JSONContent>;
256
- default: () => {
257
- [key: string]: any;
258
- type?: string;
259
- attrs?: Record<string, any>;
260
- content?: JSONContent[];
261
- marks?: {
262
- type: string;
263
- attrs?: Record<string, any>;
264
- [key: string]: any;
265
- }[];
266
- text?: string;
267
- };
268
- };
269
- editable: {
270
- type: BooleanConstructor;
271
- default: boolean;
272
- };
273
- placeholder: {
274
- type: StringConstructor;
275
- default: string;
276
- };
277
- extensions: {
278
- type: PropType<AnyExtension[]>;
279
- default: () => never[];
280
- };
281
- mentionItems: {
282
- type: PropType<LoomaMentionItem[]>;
283
- default: () => never[];
284
- };
285
- mentionProvider: {
286
- type: PropType<LoomaMentionProvider | undefined>;
287
- default: undefined;
288
- };
289
- mentionLimit: {
290
- type: NumberConstructor;
291
- default: number;
292
- };
293
- uploadImage: {
294
- type: PropType<LoomaImageUploader | undefined>;
295
- default: undefined;
296
- };
297
- resolveImageAttributes: {
298
- type: PropType<LoomaImageAttributeResolver | undefined>;
299
- default: undefined;
300
- };
301
- toolbarMode: {
302
- type: PropType<LoomaEditorToolbarMode>;
303
- default: string;
304
- };
305
- }>, () => VNode<vue.RendererNode, vue.RendererElement, {
306
- [key: string]: any;
307
- }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
308
- "update:modelValue": (_value: JSONContent) => true;
309
- update: (_value: JSONContent) => true;
310
- ready: (_editor: Editor) => true;
311
- uploadError: (_error: unknown, _file: File) => true;
312
- imageActivate: (_detail: LoomaImageActivationDetail) => true;
313
- imageRenditionError: (_detail: LoomaImageRenditionErrorDetail) => true;
314
- }, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
315
- modelValue: {
316
- type: PropType<JSONContent>;
317
- default: () => {
318
- [key: string]: any;
319
- type?: string;
320
- attrs?: Record<string, any>;
321
- content?: JSONContent[];
322
- marks?: {
323
- type: string;
324
- attrs?: Record<string, any>;
325
- [key: string]: any;
326
- }[];
327
- text?: string;
328
- };
329
- };
330
- editable: {
331
- type: BooleanConstructor;
332
- default: boolean;
333
- };
334
- placeholder: {
335
- type: StringConstructor;
336
- default: string;
337
- };
338
- extensions: {
339
- type: PropType<AnyExtension[]>;
340
- default: () => never[];
341
- };
342
- mentionItems: {
343
- type: PropType<LoomaMentionItem[]>;
344
- default: () => never[];
345
- };
346
- mentionProvider: {
347
- type: PropType<LoomaMentionProvider | undefined>;
348
- default: undefined;
349
- };
350
- mentionLimit: {
351
- type: NumberConstructor;
352
- default: number;
353
- };
354
- uploadImage: {
355
- type: PropType<LoomaImageUploader | undefined>;
356
- default: undefined;
357
- };
358
- resolveImageAttributes: {
359
- type: PropType<LoomaImageAttributeResolver | undefined>;
360
- default: undefined;
361
- };
362
- toolbarMode: {
363
- type: PropType<LoomaEditorToolbarMode>;
364
- default: string;
365
- };
366
- }>> & Readonly<{
367
- "onUpdate:modelValue"?: (_value: JSONContent) => any;
368
- onUpdate?: (_value: JSONContent) => any;
369
- onReady?: (_editor: Editor) => any;
370
- onUploadError?: (_error: unknown, _file: File) => any;
371
- onImageActivate?: (_detail: LoomaImageActivationDetail) => any;
372
- onImageRenditionError?: (_detail: LoomaImageRenditionErrorDetail) => any;
373
- }>, {
374
- placeholder: string;
375
- modelValue: JSONContent;
376
- editable: boolean;
377
- extensions: AnyExtension[];
378
- mentionItems: LoomaMentionItem[];
379
- mentionProvider: LoomaMentionProvider | undefined;
380
- mentionLimit: number;
381
- uploadImage: LoomaImageUploader | undefined;
382
- resolveImageAttributes: LoomaImageAttributeResolver | undefined;
383
- toolbarMode: LoomaEditorToolbarMode;
384
- }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
385
-
386
- export { EDITOR_ADAPTER_COMPONENT_TAG_MAP, EditorInsertTableGrid, EditorMentionMenu, EditorSlashMenu, EditorTableContextMenu, EditorTableOverlay, EditorTableToolbar, EditorToolbar, LoomaEditor, type LoomaEditorToolbarMode, type LoomaImageActivationDetail, type LoomaImageActivationTrigger, type LoomaImageAttributeResolver, type LoomaImageDescriptor, type LoomaImageRenditionAttributes, type LoomaImageRenditionErrorDetail, type LoomaImageUploadResult, type LoomaImageUploader, type VueEditorAdapterEventMap };
1
+ export * from "@threadlabs/looma/editor";
2
+ export * from "./primitives.js";
3
+ export { LoomaEditor, type LoomaEditorToolbarMode, type LoomaImageUploader, type LoomaImageUploadResult, } from "./LoomaEditor.js";
4
+ export type { LoomaImageActivationDetail, LoomaImageActivationTrigger, LoomaImageAttributeResolver, LoomaImageDescriptor, LoomaImageRenditionErrorDetail, LoomaImageRenditionAttributes, } from "./image-delivery.js";