@threadlabs/looma 0.4.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (491) hide show
  1. package/README.md +43 -12
  2. package/components/shared/editor.js +69 -0
  3. package/components/shared/input-modality.d.ts +8 -0
  4. package/components/shared/input-modality.js +22 -0
  5. package/components/shared/overlay.js +281 -0
  6. package/components/shared/trigger.js +17 -0
  7. package/components/ui-affordance-scope/ui-affordance-scope.html +22 -0
  8. package/components/ui-affordance-scope/ui-affordance-scope.js +76 -0
  9. package/components/ui-avatar/ui-avatar.html +59 -0
  10. package/components/ui-avatar/ui-avatar.js +47 -0
  11. package/components/ui-avatar-group/ui-avatar-group.html +62 -0
  12. package/components/ui-avatar-group/ui-avatar-group.js +27 -0
  13. package/components/ui-badge/ui-badge.html +94 -0
  14. package/components/ui-button/ui-button.html +226 -0
  15. package/components/ui-callout/ui-callout.html +104 -0
  16. package/components/ui-checkbox/ui-checkbox.html +107 -0
  17. package/components/ui-checkbox/ui-checkbox.js +24 -0
  18. package/components/ui-cluster/ui-cluster.html +49 -0
  19. package/components/ui-combobox/ui-combobox.html +377 -0
  20. package/components/ui-combobox/ui-combobox.js +432 -0
  21. package/components/ui-container/ui-container.html +39 -0
  22. package/components/ui-context-menu/ui-context-menu.html +75 -0
  23. package/components/ui-context-menu/ui-context-menu.js +143 -0
  24. package/components/ui-dialog/ui-dialog.html +178 -0
  25. package/components/ui-dialog/ui-dialog.js +105 -0
  26. package/components/ui-disclosure/ui-disclosure.html +109 -0
  27. package/components/ui-disclosure/ui-disclosure.js +28 -0
  28. package/components/ui-editable/ui-editable.html +163 -0
  29. package/components/ui-editable/ui-editable.js +113 -0
  30. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.html +97 -0
  31. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.js +71 -0
  32. package/components/ui-editor-mention-menu/ui-editor-mention-menu.html +157 -0
  33. package/components/ui-editor-mention-menu/ui-editor-mention-menu.js +50 -0
  34. package/components/ui-editor-slash-menu/ui-editor-slash-menu.html +197 -0
  35. package/components/ui-editor-slash-menu/ui-editor-slash-menu.js +44 -0
  36. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +164 -0
  37. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.js +75 -0
  38. package/components/ui-editor-table-overlay/ui-editor-table-overlay.html +422 -0
  39. package/components/ui-editor-table-overlay/ui-editor-table-overlay.js +119 -0
  40. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +271 -0
  41. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.js +54 -0
  42. package/components/ui-editor-toolbar/ui-editor-toolbar.html +110 -0
  43. package/components/ui-floating-action-button/ui-floating-action-button.html +83 -0
  44. package/components/ui-form-field/ui-form-field.html +45 -0
  45. package/components/ui-form-field/ui-form-field.js +71 -0
  46. package/components/ui-grid/ui-grid.html +46 -0
  47. package/components/ui-icon/ui-icon.html +34 -0
  48. package/components/ui-icon/ui-icon.js +8 -0
  49. package/components/ui-icon-button/ui-icon-button.html +180 -0
  50. package/components/ui-icon-button/ui-icon-button.js +7 -0
  51. package/components/ui-input/ui-input.html +81 -0
  52. package/components/ui-input/ui-input.js +7 -0
  53. package/components/ui-menu/ui-menu.html +87 -0
  54. package/components/ui-menu/ui-menu.js +114 -0
  55. package/components/ui-menu-item/ui-menu-item.html +37 -0
  56. package/components/ui-popover/ui-popover.html +85 -0
  57. package/components/ui-popover/ui-popover.js +70 -0
  58. package/components/ui-radio/ui-radio.html +57 -0
  59. package/components/ui-radio/ui-radio.js +25 -0
  60. package/components/ui-radio-group/ui-radio-group.html +51 -0
  61. package/components/ui-radio-group/ui-radio-group.js +42 -0
  62. package/components/ui-reel/ui-reel.html +67 -0
  63. package/components/ui-search-result-row/ui-search-result-row.html +101 -0
  64. package/components/ui-search-shell/ui-search-shell.html +142 -0
  65. package/components/ui-search-shell/ui-search-shell.js +60 -0
  66. package/components/ui-select/ui-select.html +87 -0
  67. package/components/ui-select/ui-select.js +16 -0
  68. package/components/ui-separator/ui-separator.html +22 -0
  69. package/components/ui-sidebar/ui-sidebar.html +183 -0
  70. package/components/ui-sidebar/ui-sidebar.js +178 -0
  71. package/components/ui-stack/ui-stack.html +59 -0
  72. package/components/ui-switch/ui-switch.html +95 -0
  73. package/components/ui-switch/ui-switch.js +24 -0
  74. package/components/ui-switcher/ui-switcher.html +65 -0
  75. package/components/ui-tabs/ui-tabs.html +134 -0
  76. package/components/ui-tabs/ui-tabs.js +81 -0
  77. package/components/ui-textarea/ui-textarea.html +80 -0
  78. package/components/ui-textarea/ui-textarea.js +7 -0
  79. package/components/ui-toast-region/ui-toast-region.html +127 -0
  80. package/components/ui-toast-region/ui-toast-region.js +119 -0
  81. package/components/ui-tooltip/ui-tooltip.html +122 -0
  82. package/components/ui-tooltip/ui-tooltip.js +134 -0
  83. package/components/ui-top-bar/ui-top-bar.html +53 -0
  84. package/components/ui-tree/ui-tree.html +29 -0
  85. package/components/ui-tree/ui-tree.js +250 -0
  86. package/components/ui-tree-item/ui-tree-item.html +326 -0
  87. package/components/ui-tree-item/ui-tree-item.js +94 -0
  88. package/dist/index.d.ts +4 -414
  89. package/dist/index.js +55 -657
  90. package/editor/chunks/extensions.js +7267 -0
  91. package/editor/chunks/table-backgrounds.js +51 -0
  92. package/editor/chunks/ui.js +92 -0
  93. package/editor/extensions/callout.d.ts +20 -0
  94. package/editor/extensions/index.d.ts +12 -441
  95. package/editor/extensions/index.js +3 -64
  96. package/editor/extensions/list-behavior.d.ts +7 -0
  97. package/editor/extensions/mention.d.ts +35 -0
  98. package/editor/extensions/preset.d.ts +42 -0
  99. package/editor/extensions/slash-command.d.ts +80 -0
  100. package/editor/extensions/smart-paste.d.ts +13 -0
  101. package/editor/extensions/table-commands.d.ts +114 -0
  102. package/editor/extensions/table-formatting.d.ts +60 -0
  103. package/editor/icons.d.ts +55 -0
  104. package/editor/index.d.ts +8 -6
  105. package/editor/index.js +96 -71
  106. package/editor/insert-table-grid.d.ts +7 -0
  107. package/editor/mention-contract.d.ts +78 -0
  108. package/editor/mention-menu.d.ts +9 -0
  109. package/editor/slash-menu.d.ts +29 -0
  110. package/editor/table-backgrounds.d.ts +43 -0
  111. package/editor/table-context-menu.d.ts +12 -0
  112. package/editor/table-overlay.d.ts +79 -0
  113. package/editor/ui.d.ts +10 -50
  114. package/editor/ui.js +3 -14
  115. package/editor/viewport.d.ts +15 -0
  116. package/package.json +84 -60
  117. package/styles/ui-affordance-scope.css +19 -0
  118. package/styles/ui-avatar-group.css +56 -0
  119. package/styles/ui-avatar.css +47 -0
  120. package/styles/ui-badge.css +91 -0
  121. package/styles/ui-button.css +236 -0
  122. package/styles/ui-callout.css +76 -0
  123. package/styles/ui-checkbox.css +98 -0
  124. package/styles/ui-cluster.css +46 -0
  125. package/styles/ui-combobox.css +213 -0
  126. package/styles/ui-container.css +36 -0
  127. package/styles/ui-context-menu.css +68 -0
  128. package/styles/ui-dialog.css +160 -0
  129. package/styles/ui-disclosure.css +95 -0
  130. package/styles/ui-editable.css +139 -0
  131. package/styles/ui-editor-insert-table-grid.css +65 -0
  132. package/styles/ui-editor-mention-menu.css +121 -0
  133. package/styles/ui-editor-slash-menu.css +179 -0
  134. package/styles/ui-editor-table-context-menu.css +118 -0
  135. package/styles/ui-editor-table-overlay.css +318 -0
  136. package/styles/ui-editor-table-toolbar.css +191 -0
  137. package/styles/ui-editor-toolbar.css +115 -0
  138. package/styles/ui-floating-action-button.css +82 -0
  139. package/styles/ui-form-field.css +36 -0
  140. package/styles/ui-grid.css +43 -0
  141. package/styles/ui-icon-button.css +184 -0
  142. package/styles/ui-icon.css +23 -0
  143. package/styles/ui-input.css +82 -0
  144. package/styles/ui-menu-item.css +34 -0
  145. package/styles/ui-menu.css +80 -0
  146. package/styles/ui-popover.css +76 -0
  147. package/styles/ui-radio-group.css +38 -0
  148. package/styles/ui-radio.css +46 -0
  149. package/styles/ui-reel.css +63 -0
  150. package/styles/ui-search-result-row.css +92 -0
  151. package/styles/ui-search-shell.css +128 -0
  152. package/styles/ui-select.css +86 -0
  153. package/styles/ui-separator.css +16 -0
  154. package/styles/ui-sidebar.css +166 -0
  155. package/styles/ui-stack.css +55 -0
  156. package/styles/ui-switch.css +88 -0
  157. package/styles/ui-switcher.css +61 -0
  158. package/styles/ui-tabs.css +114 -0
  159. package/styles/ui-textarea.css +77 -0
  160. package/styles/ui-toast-region.css +103 -0
  161. package/styles/ui-tooltip.css +113 -0
  162. package/styles/ui-top-bar.css +51 -0
  163. package/styles/ui-tree-item.css +267 -0
  164. package/styles/ui-tree.css +16 -0
  165. package/vanilla/UiAffordanceScope.d.ts +14 -0
  166. package/vanilla/UiAffordanceScope.js +30 -0
  167. package/vanilla/UiAvatar.d.ts +17 -0
  168. package/vanilla/UiAvatar.js +41 -0
  169. package/vanilla/UiAvatarGroup.d.ts +15 -0
  170. package/vanilla/UiAvatarGroup.js +40 -0
  171. package/vanilla/UiBadge.d.ts +15 -0
  172. package/vanilla/UiBadge.js +30 -0
  173. package/vanilla/UiButton.d.ts +16 -0
  174. package/vanilla/UiButton.js +32 -0
  175. package/vanilla/UiCallout.d.ts +14 -0
  176. package/vanilla/UiCallout.js +124 -0
  177. package/vanilla/UiCheckbox.d.ts +19 -0
  178. package/vanilla/UiCheckbox.js +47 -0
  179. package/vanilla/UiCluster.d.ts +15 -0
  180. package/vanilla/UiCluster.js +30 -0
  181. package/vanilla/UiCombobox.d.ts +42 -0
  182. package/vanilla/UiCombobox.js +194 -0
  183. package/vanilla/UiContainer.d.ts +15 -0
  184. package/vanilla/UiContainer.js +30 -0
  185. package/vanilla/UiContextMenu.d.ts +18 -0
  186. package/vanilla/UiContextMenu.js +35 -0
  187. package/vanilla/UiDialog.d.ts +19 -0
  188. package/vanilla/UiDialog.js +53 -0
  189. package/vanilla/UiDisclosure.d.ts +18 -0
  190. package/vanilla/UiDisclosure.js +49 -0
  191. package/vanilla/UiEditable.d.ts +22 -0
  192. package/vanilla/UiEditable.js +59 -0
  193. package/vanilla/UiEditorInsertTableGrid.d.ts +18 -0
  194. package/vanilla/UiEditorInsertTableGrid.js +46 -0
  195. package/vanilla/UiEditorMentionMenu.d.ts +21 -0
  196. package/vanilla/UiEditorMentionMenu.js +63 -0
  197. package/vanilla/UiEditorSlashMenu.d.ts +20 -0
  198. package/vanilla/UiEditorSlashMenu.js +74 -0
  199. package/vanilla/UiEditorTableContextMenu.d.ts +17 -0
  200. package/vanilla/UiEditorTableContextMenu.js +69 -0
  201. package/vanilla/UiEditorTableOverlay.d.ts +16 -0
  202. package/vanilla/UiEditorTableOverlay.js +113 -0
  203. package/vanilla/UiEditorTableToolbar.d.ts +18 -0
  204. package/vanilla/UiEditorTableToolbar.js +121 -0
  205. package/vanilla/UiEditorToolbar.d.ts +14 -0
  206. package/vanilla/UiEditorToolbar.js +30 -0
  207. package/vanilla/UiFloatingActionButton.d.ts +16 -0
  208. package/vanilla/UiFloatingActionButton.js +35 -0
  209. package/vanilla/UiFormField.d.ts +16 -0
  210. package/vanilla/UiFormField.js +54 -0
  211. package/vanilla/UiGrid.d.ts +15 -0
  212. package/vanilla/UiGrid.js +30 -0
  213. package/vanilla/UiIcon.d.ts +14 -0
  214. package/vanilla/UiIcon.js +40 -0
  215. package/vanilla/UiIconButton.d.ts +19 -0
  216. package/vanilla/UiIconButton.js +37 -0
  217. package/vanilla/UiInput.d.ts +18 -0
  218. package/vanilla/UiInput.js +37 -0
  219. package/vanilla/UiMenu.d.ts +19 -0
  220. package/vanilla/UiMenu.js +35 -0
  221. package/vanilla/UiMenuItem.d.ts +15 -0
  222. package/vanilla/UiMenuItem.js +43 -0
  223. package/vanilla/UiPopover.d.ts +18 -0
  224. package/vanilla/UiPopover.js +33 -0
  225. package/vanilla/UiRadio.d.ts +19 -0
  226. package/vanilla/UiRadio.js +48 -0
  227. package/vanilla/UiRadioGroup.d.ts +21 -0
  228. package/vanilla/UiRadioGroup.js +35 -0
  229. package/vanilla/UiReel.d.ts +16 -0
  230. package/vanilla/UiReel.js +34 -0
  231. package/vanilla/UiSearchResultRow.d.ts +15 -0
  232. package/vanilla/UiSearchResultRow.js +82 -0
  233. package/vanilla/UiSearchShell.d.ts +18 -0
  234. package/vanilla/UiSearchShell.js +74 -0
  235. package/vanilla/UiSelect.d.ts +18 -0
  236. package/vanilla/UiSelect.js +42 -0
  237. package/vanilla/UiSeparator.d.ts +14 -0
  238. package/vanilla/UiSeparator.js +28 -0
  239. package/vanilla/UiSidebar.d.ts +24 -0
  240. package/vanilla/UiSidebar.js +47 -0
  241. package/vanilla/UiStack.d.ts +16 -0
  242. package/vanilla/UiStack.js +32 -0
  243. package/vanilla/UiSwitch.d.ts +18 -0
  244. package/vanilla/UiSwitch.js +46 -0
  245. package/vanilla/UiSwitcher.d.ts +16 -0
  246. package/vanilla/UiSwitcher.js +32 -0
  247. package/vanilla/UiTabs.d.ts +18 -0
  248. package/vanilla/UiTabs.js +47 -0
  249. package/vanilla/UiTextarea.d.ts +19 -0
  250. package/vanilla/UiTextarea.js +40 -0
  251. package/vanilla/UiToastRegion.d.ts +20 -0
  252. package/vanilla/UiToastRegion.js +58 -0
  253. package/vanilla/UiTooltip.d.ts +21 -0
  254. package/vanilla/UiTooltip.js +34 -0
  255. package/vanilla/UiTopBar.d.ts +13 -0
  256. package/vanilla/UiTopBar.js +59 -0
  257. package/vanilla/UiTree.d.ts +18 -0
  258. package/vanilla/UiTree.js +31 -0
  259. package/vanilla/UiTreeItem.d.ts +26 -0
  260. package/vanilla/UiTreeItem.js +164 -0
  261. package/vanilla/index.js +48 -0
  262. package/vue/UiAffordanceScope.d.ts +18 -0
  263. package/vue/UiAffordanceScope.js +2 -0
  264. package/vue/UiAffordanceScope.vue +118 -0
  265. package/vue/UiAvatar.d.ts +23 -0
  266. package/vue/UiAvatar.js +2 -0
  267. package/vue/UiAvatar.vue +152 -0
  268. package/vue/UiAvatarGroup.d.ts +20 -0
  269. package/vue/UiAvatarGroup.js +2 -0
  270. package/vue/UiAvatarGroup.vue +167 -0
  271. package/vue/UiBadge.d.ts +20 -0
  272. package/vue/UiBadge.js +2 -0
  273. package/vue/UiBadge.vue +123 -0
  274. package/vue/UiButton.d.ts +22 -0
  275. package/vue/UiButton.js +2 -0
  276. package/vue/UiButton.vue +257 -0
  277. package/vue/UiCallout.d.ts +18 -0
  278. package/vue/UiCallout.js +2 -0
  279. package/vue/UiCallout.vue +104 -0
  280. package/vue/UiCheckbox.d.ts +38 -0
  281. package/vue/UiCheckbox.js +2 -0
  282. package/vue/UiCheckbox.vue +216 -0
  283. package/vue/UiCluster.d.ts +17 -0
  284. package/vue/UiCluster.js +2 -0
  285. package/vue/UiCluster.vue +75 -0
  286. package/vue/UiCombobox.d.ts +255 -0
  287. package/vue/UiCombobox.js +2 -0
  288. package/vue/UiCombobox.vue +466 -0
  289. package/vue/UiContainer.d.ts +17 -0
  290. package/vue/UiContainer.js +2 -0
  291. package/vue/UiContainer.vue +65 -0
  292. package/vue/UiContextMenu.d.ts +50 -0
  293. package/vue/UiContextMenu.js +2 -0
  294. package/vue/UiContextMenu.vue +166 -0
  295. package/vue/UiDialog.d.ts +39 -0
  296. package/vue/UiDialog.js +2 -0
  297. package/vue/UiDialog.vue +273 -0
  298. package/vue/UiDisclosure.d.ts +44 -0
  299. package/vue/UiDisclosure.js +2 -0
  300. package/vue/UiDisclosure.vue +211 -0
  301. package/vue/UiEditable.d.ts +48 -0
  302. package/vue/UiEditable.js +2 -0
  303. package/vue/UiEditable.vue +267 -0
  304. package/vue/UiEditorInsertTableGrid.d.ts +26 -0
  305. package/vue/UiEditorInsertTableGrid.js +2 -0
  306. package/vue/UiEditorInsertTableGrid.vue +210 -0
  307. package/vue/UiEditorMentionMenu.d.ts +44 -0
  308. package/vue/UiEditorMentionMenu.js +2 -0
  309. package/vue/UiEditorMentionMenu.vue +284 -0
  310. package/vue/UiEditorSlashMenu.d.ts +41 -0
  311. package/vue/UiEditorSlashMenu.js +2 -0
  312. package/vue/UiEditorSlashMenu.vue +306 -0
  313. package/vue/UiEditorTableContextMenu.d.ts +19 -0
  314. package/vue/UiEditorTableContextMenu.js +2 -0
  315. package/vue/UiEditorTableContextMenu.vue +252 -0
  316. package/vue/UiEditorTableOverlay.d.ts +66 -0
  317. package/vue/UiEditorTableOverlay.js +2 -0
  318. package/vue/UiEditorTableOverlay.vue +455 -0
  319. package/vue/UiEditorTableToolbar.d.ts +21 -0
  320. package/vue/UiEditorTableToolbar.js +2 -0
  321. package/vue/UiEditorTableToolbar.vue +339 -0
  322. package/vue/UiEditorToolbar.d.ts +18 -0
  323. package/vue/UiEditorToolbar.js +2 -0
  324. package/vue/UiEditorToolbar.vue +138 -0
  325. package/vue/UiFloatingActionButton.d.ts +22 -0
  326. package/vue/UiFloatingActionButton.js +2 -0
  327. package/vue/UiFloatingActionButton.vue +116 -0
  328. package/vue/UiFormField.d.ts +28 -0
  329. package/vue/UiFormField.js +2 -0
  330. package/vue/UiFormField.vue +124 -0
  331. package/vue/UiGrid.d.ts +17 -0
  332. package/vue/UiGrid.js +2 -0
  333. package/vue/UiGrid.vue +72 -0
  334. package/vue/UiIcon.d.ts +8 -0
  335. package/vue/UiIcon.js +2 -0
  336. package/vue/UiIcon.vue +135 -0
  337. package/vue/UiIconButton.d.ts +27 -0
  338. package/vue/UiIconButton.js +2 -0
  339. package/vue/UiIconButton.vue +281 -0
  340. package/vue/UiInput.d.ts +20 -0
  341. package/vue/UiInput.js +2 -0
  342. package/vue/UiInput.vue +177 -0
  343. package/vue/UiMenu.d.ts +52 -0
  344. package/vue/UiMenu.js +2 -0
  345. package/vue/UiMenu.vue +194 -0
  346. package/vue/UiMenuItem.d.ts +20 -0
  347. package/vue/UiMenuItem.js +2 -0
  348. package/vue/UiMenuItem.vue +55 -0
  349. package/vue/UiPopover.d.ts +44 -0
  350. package/vue/UiPopover.js +2 -0
  351. package/vue/UiPopover.vue +188 -0
  352. package/vue/UiRadio.d.ts +38 -0
  353. package/vue/UiRadio.js +2 -0
  354. package/vue/UiRadio.vue +166 -0
  355. package/vue/UiRadioGroup.d.ts +50 -0
  356. package/vue/UiRadioGroup.js +2 -0
  357. package/vue/UiRadioGroup.vue +161 -0
  358. package/vue/UiReel.d.ts +18 -0
  359. package/vue/UiReel.js +2 -0
  360. package/vue/UiReel.vue +93 -0
  361. package/vue/UiSearchResultRow.d.ts +28 -0
  362. package/vue/UiSearchResultRow.js +2 -0
  363. package/vue/UiSearchResultRow.vue +124 -0
  364. package/vue/UiSearchShell.d.ts +42 -0
  365. package/vue/UiSearchShell.js +2 -0
  366. package/vue/UiSearchShell.vue +233 -0
  367. package/vue/UiSelect.d.ts +30 -0
  368. package/vue/UiSelect.js +2 -0
  369. package/vue/UiSelect.vue +183 -0
  370. package/vue/UiSeparator.d.ts +8 -0
  371. package/vue/UiSeparator.js +2 -0
  372. package/vue/UiSeparator.vue +38 -0
  373. package/vue/UiSidebar.d.ts +54 -0
  374. package/vue/UiSidebar.js +2 -0
  375. package/vue/UiSidebar.vue +288 -0
  376. package/vue/UiStack.d.ts +18 -0
  377. package/vue/UiStack.js +2 -0
  378. package/vue/UiStack.vue +85 -0
  379. package/vue/UiSwitch.d.ts +36 -0
  380. package/vue/UiSwitch.js +2 -0
  381. package/vue/UiSwitch.vue +203 -0
  382. package/vue/UiSwitcher.d.ts +18 -0
  383. package/vue/UiSwitcher.js +2 -0
  384. package/vue/UiSwitcher.vue +91 -0
  385. package/vue/UiTabs.d.ts +36 -0
  386. package/vue/UiTabs.js +2 -0
  387. package/vue/UiTabs.vue +269 -0
  388. package/vue/UiTextarea.d.ts +22 -0
  389. package/vue/UiTextarea.js +2 -0
  390. package/vue/UiTextarea.vue +177 -0
  391. package/vue/UiToastRegion.d.ts +48 -0
  392. package/vue/UiToastRegion.js +2 -0
  393. package/vue/UiToastRegion.vue +256 -0
  394. package/vue/UiTooltip.d.ts +50 -0
  395. package/vue/UiTooltip.js +2 -0
  396. package/vue/UiTooltip.vue +230 -0
  397. package/vue/UiTopBar.d.ts +19 -0
  398. package/vue/UiTopBar.js +2 -0
  399. package/vue/UiTopBar.vue +56 -0
  400. package/vue/UiTree.d.ts +62 -0
  401. package/vue/UiTree.js +2 -0
  402. package/vue/UiTree.vue +117 -0
  403. package/vue/UiTreeItem.d.ts +56 -0
  404. package/vue/UiTreeItem.js +2 -0
  405. package/vue/UiTreeItem.vue +418 -0
  406. package/vue/chunks/UiAffordanceScope.js +112 -0
  407. package/vue/chunks/UiAvatar.js +144 -0
  408. package/vue/chunks/UiAvatarGroup.js +142 -0
  409. package/vue/chunks/UiBadge.js +33 -0
  410. package/vue/chunks/UiButton.js +47 -0
  411. package/vue/chunks/UiCallout.js +117 -0
  412. package/vue/chunks/UiCheckbox.js +167 -0
  413. package/vue/chunks/UiCluster.js +33 -0
  414. package/vue/chunks/UiCombobox.js +684 -0
  415. package/vue/chunks/UiContainer.js +33 -0
  416. package/vue/chunks/UiContextMenu.js +153 -0
  417. package/vue/chunks/UiDialog.js +162 -0
  418. package/vue/chunks/UiDisclosure.js +185 -0
  419. package/vue/chunks/UiEditable.js +223 -0
  420. package/vue/chunks/UiEditorInsertTableGrid.js +221 -0
  421. package/vue/chunks/UiEditorMentionMenu.js +245 -0
  422. package/vue/chunks/UiEditorSlashMenu.js +210 -0
  423. package/vue/chunks/UiEditorTableContextMenu.js +201 -0
  424. package/vue/chunks/UiEditorTableOverlay.js +301 -0
  425. package/vue/chunks/UiEditorTableToolbar.js +299 -0
  426. package/vue/chunks/UiEditorToolbar.js +37 -0
  427. package/vue/chunks/UiFloatingActionButton.js +56 -0
  428. package/vue/chunks/UiFormField.js +113 -0
  429. package/vue/chunks/UiGrid.js +33 -0
  430. package/vue/chunks/UiIcon.js +170 -0
  431. package/vue/chunks/UiIconButton.js +141 -0
  432. package/vue/chunks/UiInput.js +136 -0
  433. package/vue/chunks/UiMenu.js +163 -0
  434. package/vue/chunks/UiMenuItem.js +37 -0
  435. package/vue/chunks/UiPopover.js +149 -0
  436. package/vue/chunks/UiRadio.js +164 -0
  437. package/vue/chunks/UiRadioGroup.js +160 -0
  438. package/vue/chunks/UiReel.js +42 -0
  439. package/vue/chunks/UiSearchResultRow.js +63 -0
  440. package/vue/chunks/UiSearchShell.js +152 -0
  441. package/vue/chunks/UiSelect.js +134 -0
  442. package/vue/chunks/UiSeparator.js +24 -0
  443. package/vue/chunks/UiSidebar.js +180 -0
  444. package/vue/chunks/UiStack.js +38 -0
  445. package/vue/chunks/UiSwitch.js +162 -0
  446. package/vue/chunks/UiSwitcher.js +38 -0
  447. package/vue/chunks/UiTabs.js +210 -0
  448. package/vue/chunks/UiTextarea.js +139 -0
  449. package/vue/chunks/UiToastRegion.js +227 -0
  450. package/vue/chunks/UiTooltip.js +163 -0
  451. package/vue/chunks/UiTopBar.js +25 -0
  452. package/vue/chunks/UiTree.js +140 -0
  453. package/vue/chunks/UiTreeItem.js +315 -0
  454. package/vue/chunks/_plugin-vue_export-helper.js +8 -0
  455. package/vue/components.css +4442 -0
  456. package/vue/editor/LoomaEditor.d.ts +171 -0
  457. package/vue/editor/image-delivery.d.ts +61 -0
  458. package/vue/editor/index.d.ts +4 -386
  459. package/vue/editor/index.js +995 -1134
  460. package/vue/editor/primitives.d.ts +23 -0
  461. package/vue/index.d.ts +49 -604
  462. package/vue/index.js +50 -86
  463. package/dist/chunk-MLKGABMK.js +0 -9
  464. package/dist/chunk-RWLYVQY6.js +0 -5719
  465. package/dist/chunk-XDNZIKNI.js +0 -2721
  466. package/dist/declarative-generated.cjs +0 -149
  467. package/dist/declarative-generated.d.cts +0 -16
  468. package/dist/declarative-generated.d.ts +0 -16
  469. package/dist/declarative-generated.js +0 -124
  470. package/dist/declarative.cjs +0 -2750
  471. package/dist/declarative.d.cts +0 -101
  472. package/dist/declarative.d.ts +0 -101
  473. package/dist/declarative.js +0 -15
  474. package/dist/index.cjs +0 -9077
  475. package/dist/index.d.cts +0 -414
  476. package/dist/loader.cjs +0 -8442
  477. package/dist/loader.d.cts +0 -4
  478. package/dist/loader.d.ts +0 -4
  479. package/dist/loader.js +0 -16
  480. package/editor/chunk-EUIH3TBV.js +0 -6826
  481. package/editor/chunk-JK53ENSG.js +0 -29
  482. package/editor/chunk-U36XNFJN.js +0 -2592
  483. package/editor/table-overlay-DZFGHQDt.d.ts +0 -138
  484. package/editor.css +0 -1592
  485. package/layout/index.cjs +0 -356
  486. package/layout/index.d.cts +0 -18
  487. package/layout/index.d.ts +0 -18
  488. package/layout/index.js +0 -341
  489. package/layout.css +0 -191
  490. package/styles.css +0 -940
  491. package/vue/chunk-OX3EACZ7.js +0 -4369
@@ -0,0 +1,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";