@threadlabs/looma 0.29.11 → 0.29.12

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 (410) hide show
  1. package/editor/node-views/image.d.ts +10 -0
  2. package/package.json +3 -3
  3. package/styles/ui-action-bar.css +1 -1
  4. package/styles/ui-affordance-scope.css +1 -1
  5. package/styles/ui-avatar-group.css +1 -1
  6. package/styles/ui-avatar.css +1 -1
  7. package/styles/ui-badge.css +1 -1
  8. package/styles/ui-breadcrumb-item.css +1 -1
  9. package/styles/ui-breadcrumbs.css +1 -1
  10. package/styles/ui-button.css +1 -1
  11. package/styles/ui-callout.css +1 -1
  12. package/styles/ui-card.css +1 -1
  13. package/styles/ui-checkbox.css +1 -1
  14. package/styles/ui-cluster.css +1 -1
  15. package/styles/ui-combobox.css +1 -1
  16. package/styles/ui-container.css +1 -1
  17. package/styles/ui-context-menu.css +1 -1
  18. package/styles/ui-cover.css +1 -1
  19. package/styles/ui-description-item.css +1 -1
  20. package/styles/ui-description-list.css +1 -1
  21. package/styles/ui-dialog.css +1 -1
  22. package/styles/ui-disclosure.css +1 -1
  23. package/styles/ui-editable.css +1 -1
  24. package/styles/ui-editor-block-actions.css +1 -1
  25. package/styles/ui-editor-chip-editor.css +1 -1
  26. package/styles/ui-editor-code-language.css +1 -1
  27. package/styles/ui-editor-image-toolbar.css +1 -1
  28. package/styles/ui-editor-insert-table-grid.css +1 -1
  29. package/styles/ui-editor-link-card.css +1 -1
  30. package/styles/ui-editor-link-form.css +1 -1
  31. package/styles/ui-editor-mention-menu-item.css +1 -1
  32. package/styles/ui-editor-mention-menu.css +1 -1
  33. package/styles/ui-editor-slash-menu-group.css +1 -1
  34. package/styles/ui-editor-slash-menu-item.css +1 -1
  35. package/styles/ui-editor-slash-menu.css +1 -1
  36. package/styles/ui-editor-surface.css +1 -1
  37. package/styles/ui-editor-table-context-menu.css +1 -1
  38. package/styles/ui-editor-table-overlay.css +1 -1
  39. package/styles/ui-editor-table-toolbar.css +1 -1
  40. package/styles/ui-editor-toolbar.css +1 -1
  41. package/styles/ui-floating-action-button.css +1 -1
  42. package/styles/ui-form-field.css +1 -1
  43. package/styles/ui-grid.css +1 -1
  44. package/styles/ui-icon-button.css +1 -1
  45. package/styles/ui-icon.css +1 -1
  46. package/styles/ui-image.css +1 -1
  47. package/styles/ui-input-group.css +1 -1
  48. package/styles/ui-input.css +1 -1
  49. package/styles/ui-list-item.css +1 -1
  50. package/styles/ui-list.css +1 -1
  51. package/styles/ui-listbox.css +1 -1
  52. package/styles/ui-menu-group.css +1 -1
  53. package/styles/ui-menu-item.css +1 -1
  54. package/styles/ui-menu.css +1 -1
  55. package/styles/ui-meter.css +1 -1
  56. package/styles/ui-nav-item.css +1 -1
  57. package/styles/ui-page-header.css +1 -1
  58. package/styles/ui-popover.css +1 -1
  59. package/styles/ui-radio-group.css +1 -1
  60. package/styles/ui-radio.css +1 -1
  61. package/styles/ui-reel.css +1 -1
  62. package/styles/ui-scroll-area.css +1 -1
  63. package/styles/ui-search-result-row.css +1 -1
  64. package/styles/ui-search-shell.css +1 -1
  65. package/styles/ui-section.css +1 -1
  66. package/styles/ui-select.css +1 -1
  67. package/styles/ui-separator.css +1 -1
  68. package/styles/ui-sidebar.css +1 -1
  69. package/styles/ui-spinner.css +1 -1
  70. package/styles/ui-stack.css +1 -1
  71. package/styles/ui-status-message.css +1 -1
  72. package/styles/ui-swatch.css +1 -1
  73. package/styles/ui-switch.css +1 -1
  74. package/styles/ui-switcher.css +1 -1
  75. package/styles/ui-table.css +1 -1
  76. package/styles/ui-tabs.css +1 -1
  77. package/styles/ui-text.css +1 -1
  78. package/styles/ui-textarea.css +1 -1
  79. package/styles/ui-toast-region.css +1 -1
  80. package/styles/ui-toast.css +1 -1
  81. package/styles/ui-tooltip.css +1 -1
  82. package/styles/ui-top-bar.css +1 -1
  83. package/styles/ui-tree-item.css +1 -1
  84. package/styles/ui-tree.css +1 -1
  85. package/vanilla/UiActionBar.d.ts +1 -1
  86. package/vanilla/UiActionBar.js +1 -1
  87. package/vanilla/UiAffordanceScope.d.ts +1 -1
  88. package/vanilla/UiAffordanceScope.js +1 -1
  89. package/vanilla/UiAvatar.d.ts +1 -1
  90. package/vanilla/UiAvatar.js +1 -1
  91. package/vanilla/UiAvatarGroup.d.ts +1 -1
  92. package/vanilla/UiAvatarGroup.js +1 -1
  93. package/vanilla/UiBadge.d.ts +1 -1
  94. package/vanilla/UiBadge.js +1 -1
  95. package/vanilla/UiBreadcrumbItem.d.ts +1 -1
  96. package/vanilla/UiBreadcrumbItem.js +1 -1
  97. package/vanilla/UiBreadcrumbs.d.ts +1 -1
  98. package/vanilla/UiBreadcrumbs.js +1 -1
  99. package/vanilla/UiButton.d.ts +1 -1
  100. package/vanilla/UiButton.js +1 -1
  101. package/vanilla/UiCallout.d.ts +1 -1
  102. package/vanilla/UiCallout.js +1 -1
  103. package/vanilla/UiCard.d.ts +1 -1
  104. package/vanilla/UiCard.js +1 -1
  105. package/vanilla/UiCheckbox.d.ts +1 -1
  106. package/vanilla/UiCheckbox.js +1 -1
  107. package/vanilla/UiCluster.d.ts +1 -1
  108. package/vanilla/UiCluster.js +1 -1
  109. package/vanilla/UiCombobox.d.ts +1 -1
  110. package/vanilla/UiCombobox.js +1 -1
  111. package/vanilla/UiContainer.d.ts +1 -1
  112. package/vanilla/UiContainer.js +1 -1
  113. package/vanilla/UiContextMenu.d.ts +1 -1
  114. package/vanilla/UiContextMenu.js +1 -1
  115. package/vanilla/UiCover.d.ts +1 -1
  116. package/vanilla/UiCover.js +1 -1
  117. package/vanilla/UiDescriptionItem.d.ts +1 -1
  118. package/vanilla/UiDescriptionItem.js +1 -1
  119. package/vanilla/UiDescriptionList.d.ts +1 -1
  120. package/vanilla/UiDescriptionList.js +1 -1
  121. package/vanilla/UiDialog.d.ts +1 -1
  122. package/vanilla/UiDialog.js +1 -1
  123. package/vanilla/UiDisclosure.d.ts +1 -1
  124. package/vanilla/UiDisclosure.js +1 -1
  125. package/vanilla/UiEditable.d.ts +1 -1
  126. package/vanilla/UiEditable.js +1 -1
  127. package/vanilla/UiEditorBlockActions.d.ts +1 -1
  128. package/vanilla/UiEditorBlockActions.js +1 -1
  129. package/vanilla/UiEditorChipEditor.d.ts +1 -1
  130. package/vanilla/UiEditorChipEditor.js +1 -1
  131. package/vanilla/UiEditorCodeLanguage.d.ts +1 -1
  132. package/vanilla/UiEditorCodeLanguage.js +1 -1
  133. package/vanilla/UiEditorImageToolbar.d.ts +1 -1
  134. package/vanilla/UiEditorImageToolbar.js +1 -1
  135. package/vanilla/UiEditorInsertTableGrid.d.ts +1 -1
  136. package/vanilla/UiEditorInsertTableGrid.js +1 -1
  137. package/vanilla/UiEditorLinkCard.d.ts +1 -1
  138. package/vanilla/UiEditorLinkCard.js +1 -1
  139. package/vanilla/UiEditorLinkForm.d.ts +1 -1
  140. package/vanilla/UiEditorLinkForm.js +1 -1
  141. package/vanilla/UiEditorMentionMenu.d.ts +1 -1
  142. package/vanilla/UiEditorMentionMenu.js +1 -1
  143. package/vanilla/UiEditorMentionMenuItem.d.ts +1 -1
  144. package/vanilla/UiEditorMentionMenuItem.js +1 -1
  145. package/vanilla/UiEditorSlashMenu.d.ts +1 -1
  146. package/vanilla/UiEditorSlashMenu.js +1 -1
  147. package/vanilla/UiEditorSlashMenuGroup.d.ts +1 -1
  148. package/vanilla/UiEditorSlashMenuGroup.js +1 -1
  149. package/vanilla/UiEditorSlashMenuItem.d.ts +1 -1
  150. package/vanilla/UiEditorSlashMenuItem.js +1 -1
  151. package/vanilla/UiEditorSurface.d.ts +1 -1
  152. package/vanilla/UiEditorSurface.js +1 -1
  153. package/vanilla/UiEditorTableContextMenu.d.ts +1 -1
  154. package/vanilla/UiEditorTableContextMenu.js +1 -1
  155. package/vanilla/UiEditorTableOverlay.d.ts +1 -1
  156. package/vanilla/UiEditorTableOverlay.js +1 -1
  157. package/vanilla/UiEditorTableToolbar.d.ts +1 -1
  158. package/vanilla/UiEditorTableToolbar.js +1 -1
  159. package/vanilla/UiEditorToolbar.d.ts +1 -1
  160. package/vanilla/UiEditorToolbar.js +1 -1
  161. package/vanilla/UiFloatingActionButton.d.ts +1 -1
  162. package/vanilla/UiFloatingActionButton.js +1 -1
  163. package/vanilla/UiFormField.d.ts +1 -1
  164. package/vanilla/UiFormField.js +1 -1
  165. package/vanilla/UiGrid.d.ts +1 -1
  166. package/vanilla/UiGrid.js +1 -1
  167. package/vanilla/UiIcon.d.ts +1 -1
  168. package/vanilla/UiIcon.js +1 -1
  169. package/vanilla/UiIconButton.d.ts +1 -1
  170. package/vanilla/UiIconButton.js +1 -1
  171. package/vanilla/UiImage.d.ts +1 -1
  172. package/vanilla/UiImage.js +1 -1
  173. package/vanilla/UiInput.d.ts +1 -1
  174. package/vanilla/UiInput.js +1 -1
  175. package/vanilla/UiInputGroup.d.ts +1 -1
  176. package/vanilla/UiInputGroup.js +1 -1
  177. package/vanilla/UiList.d.ts +1 -1
  178. package/vanilla/UiList.js +1 -1
  179. package/vanilla/UiListItem.d.ts +1 -1
  180. package/vanilla/UiListItem.js +1 -1
  181. package/vanilla/UiListbox.d.ts +1 -1
  182. package/vanilla/UiListbox.js +1 -1
  183. package/vanilla/UiMenu.d.ts +1 -1
  184. package/vanilla/UiMenu.js +1 -1
  185. package/vanilla/UiMenuGroup.d.ts +1 -1
  186. package/vanilla/UiMenuGroup.js +1 -1
  187. package/vanilla/UiMenuItem.d.ts +1 -1
  188. package/vanilla/UiMenuItem.js +1 -1
  189. package/vanilla/UiMeter.d.ts +1 -1
  190. package/vanilla/UiMeter.js +1 -1
  191. package/vanilla/UiNavItem.d.ts +1 -1
  192. package/vanilla/UiNavItem.js +1 -1
  193. package/vanilla/UiPageHeader.d.ts +1 -1
  194. package/vanilla/UiPageHeader.js +1 -1
  195. package/vanilla/UiPopover.d.ts +1 -1
  196. package/vanilla/UiPopover.js +1 -1
  197. package/vanilla/UiRadio.d.ts +1 -1
  198. package/vanilla/UiRadio.js +1 -1
  199. package/vanilla/UiRadioGroup.d.ts +1 -1
  200. package/vanilla/UiRadioGroup.js +1 -1
  201. package/vanilla/UiReel.d.ts +1 -1
  202. package/vanilla/UiReel.js +1 -1
  203. package/vanilla/UiScrollArea.d.ts +1 -1
  204. package/vanilla/UiScrollArea.js +1 -1
  205. package/vanilla/UiSearchResultRow.d.ts +1 -1
  206. package/vanilla/UiSearchResultRow.js +1 -1
  207. package/vanilla/UiSearchShell.d.ts +1 -1
  208. package/vanilla/UiSearchShell.js +1 -1
  209. package/vanilla/UiSection.d.ts +1 -1
  210. package/vanilla/UiSection.js +1 -1
  211. package/vanilla/UiSelect.d.ts +1 -1
  212. package/vanilla/UiSelect.js +1 -1
  213. package/vanilla/UiSeparator.d.ts +1 -1
  214. package/vanilla/UiSeparator.js +1 -1
  215. package/vanilla/UiSidebar.d.ts +1 -1
  216. package/vanilla/UiSidebar.js +1 -1
  217. package/vanilla/UiSpinner.d.ts +1 -1
  218. package/vanilla/UiSpinner.js +1 -1
  219. package/vanilla/UiStack.d.ts +1 -1
  220. package/vanilla/UiStack.js +1 -1
  221. package/vanilla/UiStatusMessage.d.ts +1 -1
  222. package/vanilla/UiStatusMessage.js +1 -1
  223. package/vanilla/UiSwatch.d.ts +1 -1
  224. package/vanilla/UiSwatch.js +1 -1
  225. package/vanilla/UiSwitch.d.ts +1 -1
  226. package/vanilla/UiSwitch.js +1 -1
  227. package/vanilla/UiSwitcher.d.ts +1 -1
  228. package/vanilla/UiSwitcher.js +1 -1
  229. package/vanilla/UiTable.d.ts +1 -1
  230. package/vanilla/UiTable.js +1 -1
  231. package/vanilla/UiTabs.d.ts +1 -1
  232. package/vanilla/UiTabs.js +1 -1
  233. package/vanilla/UiText.d.ts +1 -1
  234. package/vanilla/UiText.js +1 -1
  235. package/vanilla/UiTextarea.d.ts +1 -1
  236. package/vanilla/UiTextarea.js +1 -1
  237. package/vanilla/UiToast.d.ts +1 -1
  238. package/vanilla/UiToast.js +1 -1
  239. package/vanilla/UiToastRegion.d.ts +1 -1
  240. package/vanilla/UiToastRegion.js +1 -1
  241. package/vanilla/UiTooltip.d.ts +1 -1
  242. package/vanilla/UiTooltip.js +1 -1
  243. package/vanilla/UiTopBar.d.ts +1 -1
  244. package/vanilla/UiTopBar.js +1 -1
  245. package/vanilla/UiTree.d.ts +1 -1
  246. package/vanilla/UiTree.js +1 -1
  247. package/vanilla/UiTreeItem.d.ts +1 -1
  248. package/vanilla/UiTreeItem.js +1 -1
  249. package/vue/UiActionBar.vue +1 -1
  250. package/vue/UiAffordanceScope.vue +1 -1
  251. package/vue/UiAvatar.vue +1 -1
  252. package/vue/UiAvatarGroup.vue +1 -1
  253. package/vue/UiBadge.vue +1 -1
  254. package/vue/UiBreadcrumbItem.vue +1 -1
  255. package/vue/UiBreadcrumbs.vue +1 -1
  256. package/vue/UiButton.vue +1 -1
  257. package/vue/UiCallout.vue +1 -1
  258. package/vue/UiCard.vue +1 -1
  259. package/vue/UiCheckbox.vue +1 -1
  260. package/vue/UiCluster.vue +1 -1
  261. package/vue/UiCombobox.vue +1 -1
  262. package/vue/UiContainer.vue +1 -1
  263. package/vue/UiContextMenu.vue +1 -1
  264. package/vue/UiCover.vue +1 -1
  265. package/vue/UiDescriptionItem.vue +1 -1
  266. package/vue/UiDescriptionList.vue +1 -1
  267. package/vue/UiDialog.vue +1 -1
  268. package/vue/UiDisclosure.vue +1 -1
  269. package/vue/UiEditable.vue +1 -1
  270. package/vue/UiEditorBlockActions.vue +1 -1
  271. package/vue/UiEditorChipEditor.vue +1 -1
  272. package/vue/UiEditorCodeLanguage.vue +1 -1
  273. package/vue/UiEditorImageToolbar.vue +1 -1
  274. package/vue/UiEditorInsertTableGrid.vue +1 -1
  275. package/vue/UiEditorLinkCard.vue +1 -1
  276. package/vue/UiEditorLinkForm.vue +1 -1
  277. package/vue/UiEditorMentionMenu.vue +1 -1
  278. package/vue/UiEditorMentionMenuItem.vue +1 -1
  279. package/vue/UiEditorSlashMenu.vue +1 -1
  280. package/vue/UiEditorSlashMenuGroup.vue +1 -1
  281. package/vue/UiEditorSlashMenuItem.vue +1 -1
  282. package/vue/UiEditorSurface.vue +1 -1
  283. package/vue/UiEditorTableContextMenu.vue +1 -1
  284. package/vue/UiEditorTableOverlay.vue +1 -1
  285. package/vue/UiEditorTableToolbar.vue +1 -1
  286. package/vue/UiEditorToolbar.vue +1 -1
  287. package/vue/UiFloatingActionButton.vue +1 -1
  288. package/vue/UiFormField.vue +1 -1
  289. package/vue/UiGrid.vue +1 -1
  290. package/vue/UiIcon.vue +1 -1
  291. package/vue/UiIconButton.vue +1 -1
  292. package/vue/UiImage.vue +1 -1
  293. package/vue/UiInput.vue +1 -1
  294. package/vue/UiInputGroup.vue +1 -1
  295. package/vue/UiList.vue +1 -1
  296. package/vue/UiListItem.vue +1 -1
  297. package/vue/UiListbox.vue +1 -1
  298. package/vue/UiMenu.vue +1 -1
  299. package/vue/UiMenuGroup.vue +1 -1
  300. package/vue/UiMenuItem.vue +1 -1
  301. package/vue/UiMeter.vue +1 -1
  302. package/vue/UiNavItem.vue +1 -1
  303. package/vue/UiPageHeader.vue +1 -1
  304. package/vue/UiPopover.vue +1 -1
  305. package/vue/UiRadio.vue +1 -1
  306. package/vue/UiRadioGroup.vue +1 -1
  307. package/vue/UiReel.vue +1 -1
  308. package/vue/UiScrollArea.vue +1 -1
  309. package/vue/UiSearchResultRow.vue +1 -1
  310. package/vue/UiSearchShell.vue +1 -1
  311. package/vue/UiSection.vue +1 -1
  312. package/vue/UiSelect.vue +1 -1
  313. package/vue/UiSeparator.vue +1 -1
  314. package/vue/UiSidebar.vue +1 -1
  315. package/vue/UiSpinner.vue +1 -1
  316. package/vue/UiStack.vue +1 -1
  317. package/vue/UiStatusMessage.vue +1 -1
  318. package/vue/UiSwatch.vue +1 -1
  319. package/vue/UiSwitch.vue +1 -1
  320. package/vue/UiSwitcher.vue +1 -1
  321. package/vue/UiTable.vue +1 -1
  322. package/vue/UiTabs.vue +1 -1
  323. package/vue/UiText.vue +1 -1
  324. package/vue/UiTextarea.vue +1 -1
  325. package/vue/UiToast.vue +1 -1
  326. package/vue/UiToastRegion.vue +1 -1
  327. package/vue/UiTooltip.vue +1 -1
  328. package/vue/UiTopBar.vue +1 -1
  329. package/vue/UiTree.vue +1 -1
  330. package/vue/UiTreeItem.vue +1 -1
  331. package/vue/chunks/UiActionBar.js +1 -1
  332. package/vue/chunks/UiAffordanceScope.js +1 -1
  333. package/vue/chunks/UiAvatar.js +1 -1
  334. package/vue/chunks/UiAvatarGroup.js +1 -1
  335. package/vue/chunks/UiBadge.js +1 -1
  336. package/vue/chunks/UiBreadcrumbItem.js +1 -1
  337. package/vue/chunks/UiBreadcrumbs.js +1 -1
  338. package/vue/chunks/UiButton.js +1 -1
  339. package/vue/chunks/UiCallout.js +1 -1
  340. package/vue/chunks/UiCard.js +1 -1
  341. package/vue/chunks/UiCheckbox.js +1 -1
  342. package/vue/chunks/UiCluster.js +1 -1
  343. package/vue/chunks/UiCombobox.js +1 -1
  344. package/vue/chunks/UiContainer.js +1 -1
  345. package/vue/chunks/UiContextMenu.js +1 -1
  346. package/vue/chunks/UiCover.js +1 -1
  347. package/vue/chunks/UiDescriptionItem.js +1 -1
  348. package/vue/chunks/UiDescriptionList.js +1 -1
  349. package/vue/chunks/UiDialog.js +1 -1
  350. package/vue/chunks/UiDisclosure.js +1 -1
  351. package/vue/chunks/UiEditable.js +1 -1
  352. package/vue/chunks/UiEditorInsertTableGrid.js +1 -1
  353. package/vue/chunks/UiEditorMentionMenu.js +1 -1
  354. package/vue/chunks/UiEditorMentionMenuItem.js +1 -1
  355. package/vue/chunks/UiEditorSlashMenu.js +1 -1
  356. package/vue/chunks/UiEditorSlashMenuGroup.js +1 -1
  357. package/vue/chunks/UiEditorSlashMenuItem.js +1 -1
  358. package/vue/chunks/UiEditorSurface.js +1 -1
  359. package/vue/chunks/UiEditorTableContextMenu.js +1 -1
  360. package/vue/chunks/UiEditorTableOverlay.js +1 -1
  361. package/vue/chunks/UiEditorTableToolbar.js +1 -1
  362. package/vue/chunks/UiEditorToolbar.js +1 -1
  363. package/vue/chunks/UiFloatingActionButton.js +1 -1
  364. package/vue/chunks/UiFormField.js +1 -1
  365. package/vue/chunks/UiGrid.js +1 -1
  366. package/vue/chunks/UiIcon.js +1 -1
  367. package/vue/chunks/UiIconButton.js +1 -1
  368. package/vue/chunks/UiImage.js +1 -1
  369. package/vue/chunks/UiInput.js +1 -1
  370. package/vue/chunks/UiInputGroup.js +1 -1
  371. package/vue/chunks/UiList.js +1 -1
  372. package/vue/chunks/UiListItem.js +1 -1
  373. package/vue/chunks/UiListbox.js +1 -1
  374. package/vue/chunks/UiMenu.js +1 -1
  375. package/vue/chunks/UiMenuGroup.js +1 -1
  376. package/vue/chunks/UiMenuItem.js +1 -1
  377. package/vue/chunks/UiMeter.js +1 -1
  378. package/vue/chunks/UiNavItem.js +1 -1
  379. package/vue/chunks/UiPageHeader.js +1 -1
  380. package/vue/chunks/UiPopover.js +1 -1
  381. package/vue/chunks/UiRadio.js +1 -1
  382. package/vue/chunks/UiRadioGroup.js +1 -1
  383. package/vue/chunks/UiReel.js +1 -1
  384. package/vue/chunks/UiScrollArea.js +1 -1
  385. package/vue/chunks/UiSearchResultRow.js +1 -1
  386. package/vue/chunks/UiSearchShell.js +1 -1
  387. package/vue/chunks/UiSection.js +1 -1
  388. package/vue/chunks/UiSelect.js +1 -1
  389. package/vue/chunks/UiSeparator.js +1 -1
  390. package/vue/chunks/UiSidebar.js +1 -1
  391. package/vue/chunks/UiSpinner.js +1 -1
  392. package/vue/chunks/UiStack.js +1 -1
  393. package/vue/chunks/UiStatusMessage.js +1 -1
  394. package/vue/chunks/UiSwatch.js +1 -1
  395. package/vue/chunks/UiSwitch.js +1 -1
  396. package/vue/chunks/UiSwitcher.js +1 -1
  397. package/vue/chunks/UiTable.js +1 -1
  398. package/vue/chunks/UiTabs.js +1 -1
  399. package/vue/chunks/UiText.js +1 -1
  400. package/vue/chunks/UiTextarea.js +1 -1
  401. package/vue/chunks/UiToast.js +1 -1
  402. package/vue/chunks/UiToastRegion.js +1 -1
  403. package/vue/chunks/UiTooltip.js +1 -1
  404. package/vue/chunks/UiTopBar.js +1 -1
  405. package/vue/chunks/UiTree.js +1 -1
  406. package/vue/chunks/UiTreeItem.js +1 -1
  407. package/vue/components.css +197 -37
  408. package/vue/editor/index.js +774 -307
  409. package/vue/host.ts +1 -1
  410. package/vue/editor/image.d.ts +0 -7
@@ -1,6 +1,6 @@
1
- import { computed, createApp, defineComponent, h, nextTick, onBeforeUnmount, onMounted, onUpdated, reactive, ref, shallowRef, useId, watch } from "vue";
1
+ import { computed, defineComponent, h, nextTick, onBeforeUnmount, onMounted, onUpdated, reactive, ref, shallowRef, useId, watch } from "vue";
2
2
  import { DEFAULT_MENTION_RESULT_LIMIT, LOOMA_ICONS, createLoomaMentionExtension, createLoomaSlashCommandExtension, getActiveTableUiState, getDefaultEditorExtensions, getDefaultSlashCommands, getTableOfContentsEntries, getVisualViewportRect, handleTableAction, handleTableOverlayAction, measureTableOverlayGeometry, normalizeActiveTableColumnWidths, normalizeTableOfContentsConfig } from "@threadlabs/looma/editor";
3
- import { Button, Card, EditorBlockActions, EditorChipEditor, EditorCodeLanguage, EditorImageToolbar, EditorInsertTableGrid, EditorLinkCard, EditorLinkForm, EditorMentionMenu, EditorMentionMenuItem, EditorSlashMenu, EditorSlashMenuGroup, EditorSlashMenuItem, EditorSurface, EditorTableContextMenu, EditorTableOverlay, EditorTableToolbar, EditorToolbar, IconButton, Image, Popover, Stack, StatusMessage, Text, Tooltip } from "@threadlabs/looma/vue";
3
+ import { Button, Card, EditorBlockActions, EditorChipEditor, EditorCodeLanguage, EditorImageToolbar, EditorInsertTableGrid, EditorLinkCard, EditorLinkForm, EditorMentionMenu, EditorMentionMenuItem, EditorSlashMenu, EditorSlashMenuGroup, EditorSlashMenuItem, EditorSurface, EditorTableContextMenu, EditorTableOverlay, EditorTableToolbar, EditorToolbar, IconButton, Popover, Stack, StatusMessage, Text, Tooltip } from "@threadlabs/looma/vue";
4
4
  import { Editor, Extension, Node as Node$1, getText, getTextSerializersFromSchema, isNodeSelection, mergeAttributes, nodeInputRule, posToDOMRect } from "@tiptap/core";
5
5
  import { Editor as Editor$1 } from "@tiptap/vue-3";
6
6
  import { AllSelection, NodeSelection, Plugin, PluginKey, TextSelection } from "@tiptap/pm/state";
@@ -601,7 +601,7 @@ var inputRegex = /(?:^|\s)(!\[(.+|:?)]\((\S+)(?:(?:\s+)["'](\S+)["'])?\))$/;
601
601
  * This extension allows you to insert images.
602
602
  * @see https://www.tiptap.dev/api/nodes/image
603
603
  */
604
- var Image$1 = Node$1.create({
604
+ var Image = Node$1.create({
605
605
  name: "image",
606
606
  addOptions() {
607
607
  return {
@@ -663,7 +663,7 @@ function normalizeImageDimension(value) {
663
663
  function normalizeImagePlacement(value) {
664
664
  return value === "center" || value === "wrap-left" || value === "wrap-right" ? value : "block";
665
665
  }
666
- Image$1.extend({ addAttributes() {
666
+ Image.extend({ addAttributes() {
667
667
  return {
668
668
  ...this.parent?.(),
669
669
  width: {
@@ -2450,7 +2450,7 @@ function setCodeBlockLanguage(editor, pos, value, names) {
2450
2450
  }
2451
2451
  //#endregion
2452
2452
  //#region components/ui-button/ui-button.js
2453
- function connect$9(host) {
2453
+ function connect$10(host) {
2454
2454
  const onClick = (event) => {
2455
2455
  if (!host.props.loading.value && !host.props.pending.value) return;
2456
2456
  event.preventDefault();
@@ -2460,12 +2460,12 @@ function connect$9(host) {
2460
2460
  return () => host.element.removeEventListener("click", onClick, true);
2461
2461
  }
2462
2462
  /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
2463
- function controller$9(host) {
2464
- host.on("connect", () => connect$9(host));
2463
+ function controller$10(host) {
2464
+ host.on("connect", () => connect$10(host));
2465
2465
  }
2466
2466
  //#endregion
2467
2467
  //#region vanilla/UiButton.js
2468
- var T0$14 = [
2468
+ var T0$15 = [
2469
2469
  "",
2470
2470
  [],
2471
2471
  "\n ",
@@ -2489,8 +2489,8 @@ var T0$14 = [
2489
2489
  ],
2490
2490
  "\n "
2491
2491
  ];
2492
- var T1$14 = ["ui-spinner", ["size", "sm"]];
2493
- var T2$10 = [
2492
+ var T1$15 = ["ui-spinner", ["size", "sm"]];
2493
+ var T2$11 = [
2494
2494
  "",
2495
2495
  [],
2496
2496
  4
@@ -2593,9 +2593,9 @@ var T17$1 = [
2593
2593
  ];
2594
2594
  var T18$1 = ["", []];
2595
2595
  var T19$1 = ["", []];
2596
- var P0$14;
2597
- var P1$14;
2598
- var P2$10;
2596
+ var P0$15;
2597
+ var P1$15;
2598
+ var P2$11;
2599
2599
  var P3$7;
2600
2600
  var P4$6;
2601
2601
  var P5$5;
@@ -2613,7 +2613,7 @@ var P16$1;
2613
2613
  var P17$1;
2614
2614
  var P18$1;
2615
2615
  var P19$1;
2616
- var S$16 = {
2616
+ var S$17 = {
2617
2617
  n: [],
2618
2618
  t: [],
2619
2619
  f: import.meta.url,
@@ -2743,7 +2743,7 @@ var Q$3 = [
2743
2743
  [],
2744
2744
  []
2745
2745
  ];
2746
- var D$16 = {
2746
+ var D$17 = {
2747
2747
  g: "ui-button",
2748
2748
  props: {
2749
2749
  "align": {
@@ -2916,7 +2916,7 @@ var D$16 = {
2916
2916
  }
2917
2917
  }
2918
2918
  };
2919
- var C$9 = (host) => controller$9(host);
2919
+ var C$10 = (host) => controller$10(host);
2920
2920
  function createUiButton(options = {}, html) {
2921
2921
  const { attributes = {}, children = [], slots = {}, ...componentProps } = options;
2922
2922
  const v = [
@@ -2935,7 +2935,7 @@ function createUiButton(options = {}, html) {
2935
2935
  null,
2936
2936
  null
2937
2937
  ];
2938
- acceptProps(void 0, D$16, S$16.n, v, componentProps, [], html);
2938
+ acceptProps(void 0, D$17, S$17.n, v, componentProps, [], html);
2939
2939
  let a = v[13] === "card" && v[1] === "a" ? 0 : v[13] === "card" ? 1 : v[1] === "a" ? 2 : 3;
2940
2940
  let element;
2941
2941
  if (a === 0) {
@@ -2967,12 +2967,12 @@ function createUiButton(options = {}, html) {
2967
2967
  }
2968
2968
  element.setAttribute("data-component", "ui-button");
2969
2969
  }
2970
- const B = acceptProps(element, D$16, S$16.n, v, componentProps, Q$3[a], html);
2970
+ const B = acceptProps(element, D$17, S$17.n, v, componentProps, Q$3[a], html);
2971
2971
  const m1 = (d) => {
2972
- return { n: (P1$14 ??= buildTemplate(T1$14)).cloneNode(true) };
2972
+ return { n: (P1$15 ??= buildTemplate(T1$15)).cloneNode(true) };
2973
2973
  };
2974
2974
  const m2 = (d) => {
2975
- const n = (P2$10 ??= buildTemplate(T2$10)).cloneNode(true);
2975
+ const n = (P2$11 ??= buildTemplate(T2$11)).cloneNode(true);
2976
2976
  const t0 = n.firstChild;
2977
2977
  const r = {
2978
2978
  n,
@@ -3065,7 +3065,7 @@ function createUiButton(options = {}, html) {
3065
3065
  return { n: (P19$1 ??= buildTemplate(T19$1)).cloneNode(true) };
3066
3066
  };
3067
3067
  const m0 = (n, d) => {
3068
- n.append((P0$14 ??= buildTemplate(T0$14)).cloneNode(true));
3068
+ n.append((P0$15 ??= buildTemplate(T0$15)).cloneNode(true));
3069
3069
  const t0 = n.firstChild.nextSibling;
3070
3070
  const t1 = t0.firstChild;
3071
3071
  const t2 = t1.nextSibling.nextSibling;
@@ -3614,27 +3614,27 @@ function createUiButton(options = {}, html) {
3614
3614
  };
3615
3615
  const I = { B };
3616
3616
  const J = project(I, children, slots);
3617
- attachGeneratedController(element, S$16, v, p, C$9, void 0, I);
3617
+ attachGeneratedController(element, S$17, v, p, C$10, void 0, I);
3618
3618
  manageProps(I);
3619
3619
  return element;
3620
3620
  }
3621
3621
  //#endregion
3622
3622
  //#region vanilla/UiCluster.js
3623
- var T0$13 = [
3623
+ var T0$14 = [
3624
3624
  "",
3625
3625
  [],
3626
3626
  4
3627
3627
  ];
3628
- var T1$13 = ["", []];
3629
- var P0$13;
3630
- var P1$13;
3631
- var S$15 = {
3628
+ var T1$14 = ["", []];
3629
+ var P0$14;
3630
+ var P1$14;
3631
+ var S$16 = {
3632
3632
  n: [],
3633
3633
  t: [],
3634
3634
  f: import.meta.url,
3635
3635
  g: "ui-cluster"
3636
3636
  };
3637
- var D$15 = {
3637
+ var D$16 = {
3638
3638
  g: "ui-cluster",
3639
3639
  props: {
3640
3640
  "align": {
@@ -3757,7 +3757,7 @@ function createUiCluster(options = {}, html) {
3757
3757
  element.setAttribute(name, value === true ? "" : String(value));
3758
3758
  }
3759
3759
  element.setAttribute("data-component", "ui-cluster");
3760
- element.append((P0$13 ??= buildTemplate(T0$13)).cloneNode(true));
3760
+ element.append((P0$14 ??= buildTemplate(T0$14)).cloneNode(true));
3761
3761
  const v = [
3762
3762
  null,
3763
3763
  null,
@@ -3767,9 +3767,9 @@ function createUiCluster(options = {}, html) {
3767
3767
  null,
3768
3768
  null
3769
3769
  ];
3770
- const B = acceptProps(element, D$15, S$15.n, v, componentProps, [], html);
3770
+ const B = acceptProps(element, D$16, S$16.n, v, componentProps, [], html);
3771
3771
  const m1 = (d) => {
3772
- return { n: (P1$13 ??= buildTemplate(T1$13)).cloneNode(true) };
3772
+ return { n: (P1$14 ??= buildTemplate(T1$14)).cloneNode(true) };
3773
3773
  };
3774
3774
  const p0 = (r, c, d) => {
3775
3775
  if (c & 127) {
@@ -3816,7 +3816,7 @@ function createUiCluster(options = {}, html) {
3816
3816
  };
3817
3817
  const I = { B };
3818
3818
  const J = project(I, children, slots);
3819
- attachGeneratedController(element, S$15, v, ((c, d) => p0(R, c, d)), void 0, void 0, I);
3819
+ attachGeneratedController(element, S$16, v, ((c, d) => p0(R, c, d)), void 0, void 0, I);
3820
3820
  manageProps(I);
3821
3821
  return element;
3822
3822
  }
@@ -3857,7 +3857,7 @@ function id(prefix) {
3857
3857
  function descriptionIds(input) {
3858
3858
  return Array.from(new Set((input.getAttribute("aria-describedby") ?? "").split(/\s+/).filter(Boolean)));
3859
3859
  }
3860
- function connect$8(host) {
3860
+ function connect$9(host) {
3861
3861
  const element = host.element;
3862
3862
  let activeInput = null;
3863
3863
  let owned = /* @__PURE__ */ new Set();
@@ -3930,12 +3930,12 @@ function connect$8(host) {
3930
3930
  };
3931
3931
  }
3932
3932
  /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
3933
- function controller$8(host) {
3934
- host.on("connect", () => connect$8(host));
3933
+ function controller$9(host) {
3934
+ host.on("connect", () => connect$9(host));
3935
3935
  }
3936
3936
  //#endregion
3937
3937
  //#region vanilla/UiFormField.js
3938
- var T0$12 = [
3938
+ var T0$13 = [
3939
3939
  "",
3940
3940
  [],
3941
3941
  "\n ",
@@ -3968,24 +3968,24 @@ var T0$12 = [
3968
3968
  ],
3969
3969
  "\n "
3970
3970
  ];
3971
- var T1$12 = ["", []];
3972
- var T2$9 = ["", []];
3971
+ var T1$13 = ["", []];
3972
+ var T2$10 = ["", []];
3973
3973
  var T3$6 = ["", []];
3974
3974
  var T4$5 = ["", []];
3975
3975
  var T5$4 = ["", []];
3976
- var P0$12;
3977
- var P1$12;
3978
- var P2$9;
3976
+ var P0$13;
3977
+ var P1$13;
3978
+ var P2$10;
3979
3979
  var P3$6;
3980
3980
  var P4$5;
3981
3981
  var P5$4;
3982
- var S$14 = {
3982
+ var S$15 = {
3983
3983
  n: [],
3984
3984
  t: [],
3985
3985
  f: import.meta.url,
3986
3986
  g: "ui-form-field"
3987
3987
  };
3988
- var D$14 = {
3988
+ var D$15 = {
3989
3989
  g: "ui-form-field",
3990
3990
  props: {
3991
3991
  "disabled": {
@@ -4014,7 +4014,7 @@ var D$14 = {
4014
4014
  }
4015
4015
  }
4016
4016
  };
4017
- var C$8 = (host) => controller$8(host);
4017
+ var C$9 = (host) => controller$9(host);
4018
4018
  function createUiFormField(options = {}, html) {
4019
4019
  const { attributes = {}, children = [], slots = {}, ...componentProps } = options;
4020
4020
  const element = document.createElement("div");
@@ -4023,18 +4023,18 @@ function createUiFormField(options = {}, html) {
4023
4023
  element.setAttribute(name, value === true ? "" : String(value));
4024
4024
  }
4025
4025
  element.setAttribute("data-component", "ui-form-field");
4026
- element.append((P0$12 ??= buildTemplate(T0$12)).cloneNode(true));
4026
+ element.append((P0$13 ??= buildTemplate(T0$13)).cloneNode(true));
4027
4027
  const v = [
4028
4028
  null,
4029
4029
  null,
4030
4030
  null
4031
4031
  ];
4032
- const B = acceptProps(element, D$14, S$14.n, v, componentProps, [], html);
4032
+ const B = acceptProps(element, D$15, S$15.n, v, componentProps, [], html);
4033
4033
  const m1 = (d) => {
4034
- return { n: (P1$12 ??= buildTemplate(T1$12)).cloneNode(true) };
4034
+ return { n: (P1$13 ??= buildTemplate(T1$13)).cloneNode(true) };
4035
4035
  };
4036
4036
  const m2 = (d) => {
4037
- return { n: (P2$9 ??= buildTemplate(T2$9)).cloneNode(true) };
4037
+ return { n: (P2$10 ??= buildTemplate(T2$10)).cloneNode(true) };
4038
4038
  };
4039
4039
  const m3 = (d) => {
4040
4040
  return { n: (P3$6 ??= buildTemplate(T3$6)).cloneNode(true) };
@@ -4144,13 +4144,13 @@ function createUiFormField(options = {}, html) {
4144
4144
  };
4145
4145
  const I = { B };
4146
4146
  const J = project(I, children, slots);
4147
- attachGeneratedController(element, S$14, v, ((c, d) => p0(R, c, d)), C$8, void 0, I);
4147
+ attachGeneratedController(element, S$15, v, ((c, d) => p0(R, c, d)), C$9, void 0, I);
4148
4148
  manageProps(I);
4149
4149
  return element;
4150
4150
  }
4151
4151
  //#endregion
4152
4152
  //#region vanilla/UiIcon.js
4153
- var T0$11 = [
4153
+ var T0$12 = [
4154
4154
  "",
4155
4155
  [],
4156
4156
  "\n ",
@@ -4176,7 +4176,7 @@ var T0$11 = [
4176
4176
  ],
4177
4177
  "\n "
4178
4178
  ];
4179
- var T1$11 = [
4179
+ var T1$12 = [
4180
4180
  "g",
4181
4181
  [],
4182
4182
  1,
@@ -4184,7 +4184,7 @@ var T1$11 = [
4184
4184
  1,
4185
4185
  1
4186
4186
  ];
4187
- var T2$8 = ["path", []];
4187
+ var T2$9 = ["path", []];
4188
4188
  var T3$5 = ["circle", []];
4189
4189
  var T4$4 = [
4190
4190
  "rect",
@@ -4192,14 +4192,14 @@ var T4$4 = [
4192
4192
  "\n "
4193
4193
  ];
4194
4194
  var T5$3 = ["line", []];
4195
- var P0$11;
4196
- var P1$11;
4197
- var P2$8;
4195
+ var P0$12;
4196
+ var P1$12;
4197
+ var P2$9;
4198
4198
  var P3$5;
4199
4199
  var P4$4;
4200
4200
  var P5$3;
4201
4201
  var E = /* @__PURE__ */ new Map();
4202
- var S$13 = {
4202
+ var S$14 = {
4203
4203
  n: ["shapes"],
4204
4204
  t: ["?"],
4205
4205
  f: import.meta.url,
@@ -4207,7 +4207,7 @@ var S$13 = {
4207
4207
  k: 0,
4208
4208
  r: readonlyView
4209
4209
  };
4210
- var D$13 = {
4210
+ var D$14 = {
4211
4211
  g: "ui-icon",
4212
4212
  props: { "name": {
4213
4213
  "required": false,
@@ -4227,9 +4227,9 @@ function createUiIcon(options = {}, html) {
4227
4227
  }
4228
4228
  if (!element.hasAttribute("aria-hidden")) element.setAttribute("aria-hidden", "true");
4229
4229
  element.setAttribute("data-component", "ui-icon");
4230
- element.append((P0$11 ??= buildTemplate(T0$11)).cloneNode(true));
4230
+ element.append((P0$12 ??= buildTemplate(T0$12)).cloneNode(true));
4231
4231
  const v = [void 0, null];
4232
- const B = acceptProps(element, D$13, S$13.n, v, componentProps, [], html);
4232
+ const B = acceptProps(element, D$14, S$14.n, v, componentProps, [], html);
4233
4233
  const X = {
4234
4234
  e: 0,
4235
4235
  g: (j) => g(j),
@@ -5350,7 +5350,7 @@ function createUiIcon(options = {}, html) {
5350
5350
  return next;
5351
5351
  };
5352
5352
  const m1 = (o, j, l) => {
5353
- const n = (P1$11 ??= buildTemplate(T1$11, document, 1)).cloneNode(true);
5353
+ const n = (P1$12 ??= buildTemplate(T1$12, document, 1)).cloneNode(true);
5354
5354
  const t0 = n.firstChild;
5355
5355
  const t1 = t0.nextSibling.nextSibling;
5356
5356
  const t2 = t1.nextSibling.nextSibling;
@@ -5418,7 +5418,7 @@ function createUiIcon(options = {}, html) {
5418
5418
  };
5419
5419
  const m2 = (d, o, u) => {
5420
5420
  const r = {
5421
- n: (P2$8 ??= buildTemplate(T2$8, document, 1)).cloneNode(true),
5421
+ n: (P2$9 ??= buildTemplate(T2$9, document, 1)).cloneNode(true),
5422
5422
  u,
5423
5423
  w: 0,
5424
5424
  v0: null
@@ -5534,13 +5534,13 @@ function createUiIcon(options = {}, html) {
5534
5534
  const t0 = element.firstChild.nextSibling.firstChild;
5535
5535
  const R = { L0: new IndexedList(t0, t0.nextSibling, m1, p1, void 0, "shape") };
5536
5536
  const I = { B };
5537
- attachGeneratedController(element, S$13, v, ((c, d) => p0(R, c, d)), void 0, X, I);
5537
+ attachGeneratedController(element, S$14, v, ((c, d) => p0(R, c, d)), void 0, X, I);
5538
5538
  manageProps(I);
5539
5539
  return element;
5540
5540
  }
5541
5541
  //#endregion
5542
5542
  //#region components/ui-icon-button/ui-icon-button.js
5543
- function connect$7(host) {
5543
+ function connect$8(host) {
5544
5544
  const stop = host.effect(() => {
5545
5545
  if (host.props.anticipatory.value) host.element.setAttribute("data-ui-affordance", "button");
5546
5546
  else host.element.removeAttribute("data-ui-affordance");
@@ -5557,12 +5557,12 @@ function connect$7(host) {
5557
5557
  };
5558
5558
  }
5559
5559
  /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
5560
- function controller$7(host) {
5561
- host.on("connect", () => connect$7(host));
5560
+ function controller$8(host) {
5561
+ host.on("connect", () => connect$8(host));
5562
5562
  }
5563
5563
  //#endregion
5564
5564
  //#region vanilla/UiIconButton.js
5565
- var T0$10 = [
5565
+ var T0$11 = [
5566
5566
  "",
5567
5567
  [],
5568
5568
  "\n ",
@@ -5575,18 +5575,18 @@ var T0$10 = [
5575
5575
  ],
5576
5576
  "\n "
5577
5577
  ];
5578
- var T1$10 = ["ui-spinner", ["size", "sm"]];
5579
- var T2$7 = ["", []];
5580
- var P0$10;
5581
- var P1$10;
5582
- var P2$7;
5583
- var S$12 = {
5578
+ var T1$11 = ["ui-spinner", ["size", "sm"]];
5579
+ var T2$8 = ["", []];
5580
+ var P0$11;
5581
+ var P1$11;
5582
+ var P2$8;
5583
+ var S$13 = {
5584
5584
  n: [],
5585
5585
  t: [],
5586
5586
  f: import.meta.url,
5587
5587
  g: "ui-icon-button"
5588
5588
  };
5589
- var D$12 = {
5589
+ var D$13 = {
5590
5590
  g: "ui-icon-button",
5591
5591
  props: {
5592
5592
  "anticipatory": {
@@ -5705,7 +5705,7 @@ var D$12 = {
5705
5705
  }
5706
5706
  }
5707
5707
  };
5708
- var C$7 = (host) => controller$7(host);
5708
+ var C$8 = (host) => controller$8(host);
5709
5709
  function createUiIconButton(options = {}, html) {
5710
5710
  const { attributes = {}, children = [], slots = {}, ...componentProps } = options;
5711
5711
  const element = document.createElement("button");
@@ -5715,7 +5715,7 @@ function createUiIconButton(options = {}, html) {
5715
5715
  }
5716
5716
  if (!element.hasAttribute("type")) element.setAttribute("type", "button");
5717
5717
  element.setAttribute("data-component", "ui-icon-button");
5718
- element.append((P0$10 ??= buildTemplate(T0$10)).cloneNode(true));
5718
+ element.append((P0$11 ??= buildTemplate(T0$11)).cloneNode(true));
5719
5719
  const v = [
5720
5720
  null,
5721
5721
  null,
@@ -5729,12 +5729,12 @@ function createUiIconButton(options = {}, html) {
5729
5729
  null,
5730
5730
  null
5731
5731
  ];
5732
- const B = acceptProps(element, D$12, S$12.n, v, componentProps, [], html);
5732
+ const B = acceptProps(element, D$13, S$13.n, v, componentProps, [], html);
5733
5733
  const m1 = (d) => {
5734
- return { n: (P1$10 ??= buildTemplate(T1$10)).cloneNode(true) };
5734
+ return { n: (P1$11 ??= buildTemplate(T1$11)).cloneNode(true) };
5735
5735
  };
5736
5736
  const m2 = (d) => {
5737
- return { n: (P2$7 ??= buildTemplate(T2$7)).cloneNode(true) };
5737
+ return { n: (P2$8 ??= buildTemplate(T2$8)).cloneNode(true) };
5738
5738
  };
5739
5739
  const p0 = (r, c, d) => {
5740
5740
  if (c & 2) {
@@ -5833,29 +5833,29 @@ function createUiIconButton(options = {}, html) {
5833
5833
  };
5834
5834
  const I = { B };
5835
5835
  const J = project(I, children, slots);
5836
- attachGeneratedController(element, S$12, v, ((c, d) => p0(R, c, d)), C$7, void 0, I);
5836
+ attachGeneratedController(element, S$13, v, ((c, d) => p0(R, c, d)), C$8, void 0, I);
5837
5837
  manageProps(I);
5838
5838
  return element;
5839
5839
  }
5840
5840
  //#endregion
5841
5841
  //#region vanilla/UiList.js
5842
- var T0$9 = [
5842
+ var T0$10 = [
5843
5843
  "",
5844
5844
  [],
5845
5845
  4
5846
5846
  ];
5847
- var T1$9 = ["", []];
5848
- var T2$6 = [
5847
+ var T1$10 = ["", []];
5848
+ var T2$7 = [
5849
5849
  "",
5850
5850
  [],
5851
5851
  4
5852
5852
  ];
5853
5853
  var T3$4 = ["", []];
5854
- var P0$9;
5855
- var P1$9;
5856
- var P2$6;
5854
+ var P0$10;
5855
+ var P1$10;
5856
+ var P2$7;
5857
5857
  var P3$4;
5858
- var S$11 = {
5858
+ var S$12 = {
5859
5859
  n: [],
5860
5860
  t: [],
5861
5861
  f: import.meta.url,
@@ -5889,7 +5889,7 @@ var A$2 = [[
5889
5889
  ]
5890
5890
  ]];
5891
5891
  var Q$2 = [[], []];
5892
- var D$11 = {
5892
+ var D$12 = {
5893
5893
  g: "ui-list",
5894
5894
  props: {
5895
5895
  "as": {
@@ -5954,7 +5954,7 @@ function createUiList(options = {}, html) {
5954
5954
  null,
5955
5955
  null
5956
5956
  ];
5957
- acceptProps(void 0, D$11, S$11.n, v, componentProps, [], html);
5957
+ acceptProps(void 0, D$12, S$12.n, v, componentProps, [], html);
5958
5958
  let a = v[0] === "ol" ? 0 : 1;
5959
5959
  let element;
5960
5960
  if (a === 0) {
@@ -5973,15 +5973,15 @@ function createUiList(options = {}, html) {
5973
5973
  if (!element.hasAttribute("role")) element.setAttribute("role", "list");
5974
5974
  element.setAttribute("data-component", "ui-list");
5975
5975
  }
5976
- const B = acceptProps(element, D$11, S$11.n, v, componentProps, Q$2[a], html);
5976
+ const B = acceptProps(element, D$12, S$12.n, v, componentProps, Q$2[a], html);
5977
5977
  const m1 = (d) => {
5978
- return { n: (P1$9 ??= buildTemplate(T1$9)).cloneNode(true) };
5978
+ return { n: (P1$10 ??= buildTemplate(T1$10)).cloneNode(true) };
5979
5979
  };
5980
5980
  const m3 = (d) => {
5981
5981
  return { n: (P3$4 ??= buildTemplate(T3$4)).cloneNode(true) };
5982
5982
  };
5983
5983
  const m0 = (n, d) => {
5984
- n.append((P0$9 ??= buildTemplate(T0$9)).cloneNode(true));
5984
+ n.append((P0$10 ??= buildTemplate(T0$10)).cloneNode(true));
5985
5985
  const t0 = n.firstChild;
5986
5986
  const r = {
5987
5987
  n,
@@ -6023,7 +6023,7 @@ function createUiList(options = {}, html) {
6023
6023
  } else if (r.b0 !== void 0) r.b0;
6024
6024
  };
6025
6025
  const m2 = (n, d) => {
6026
- n.append((P2$6 ??= buildTemplate(T2$6)).cloneNode(true));
6026
+ n.append((P2$7 ??= buildTemplate(T2$7)).cloneNode(true));
6027
6027
  const t0 = n.firstChild;
6028
6028
  const r = {
6029
6029
  n,
@@ -6090,7 +6090,7 @@ function createUiList(options = {}, html) {
6090
6090
  };
6091
6091
  const I = { B };
6092
6092
  const J = project(I, children, slots);
6093
- attachGeneratedController(element, S$11, v, p, void 0, void 0, I);
6093
+ attachGeneratedController(element, S$12, v, p, void 0, void 0, I);
6094
6094
  manageProps(I);
6095
6095
  return element;
6096
6096
  }
@@ -6767,7 +6767,7 @@ function triggerFor(event) {
6767
6767
  function disabled(item) {
6768
6768
  return item.getAttribute("aria-disabled") === "true" || item.hasAttribute("disabled") || item.getAttribute("disabled") === "true";
6769
6769
  }
6770
- function connect$6(host) {
6770
+ function connect$7(host) {
6771
6771
  const element = host.element;
6772
6772
  const document = element.ownerDocument;
6773
6773
  const overlayId = `ui-menu-${Math.random().toString(36).slice(2, 11)}`;
@@ -6927,12 +6927,12 @@ function connect$6(host) {
6927
6927
  };
6928
6928
  }
6929
6929
  /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
6930
- function controller$6(host) {
6931
- host.on("connect", () => connect$6(host));
6930
+ function controller$7(host) {
6931
+ host.on("connect", () => connect$7(host));
6932
6932
  }
6933
6933
  //#endregion
6934
6934
  //#region vanilla/UiMenu.js
6935
- var T0$8 = [
6935
+ var T0$9 = [
6936
6936
  "",
6937
6937
  [],
6938
6938
  [
@@ -6941,10 +6941,10 @@ var T0$8 = [
6941
6941
  4
6942
6942
  ]
6943
6943
  ];
6944
- var T1$8 = ["", []];
6945
- var P0$8;
6946
- var P1$8;
6947
- var S$10 = {
6944
+ var T1$9 = ["", []];
6945
+ var P0$9;
6946
+ var P1$9;
6947
+ var S$11 = {
6948
6948
  n: ["internalOpen"],
6949
6949
  t: ["b"],
6950
6950
  f: import.meta.url,
@@ -7036,7 +7036,7 @@ var S$10 = {
7036
7036
  },
7037
7037
  x: dispatchDeclared
7038
7038
  };
7039
- var D$10 = {
7039
+ var D$11 = {
7040
7040
  g: "ui-menu",
7041
7041
  props: {
7042
7042
  "density": {
@@ -7107,7 +7107,7 @@ var D$10 = {
7107
7107
  }
7108
7108
  }
7109
7109
  };
7110
- var C$6 = (host) => controller$6(host);
7110
+ var C$7 = (host) => controller$7(host);
7111
7111
  function createUiMenu(options = {}, html) {
7112
7112
  const { attributes = {}, children = [], slots = {}, ...componentProps } = options;
7113
7113
  const element = document.createElement("div");
@@ -7118,7 +7118,7 @@ function createUiMenu(options = {}, html) {
7118
7118
  if (!element.hasAttribute("role")) element.setAttribute("role", "menu");
7119
7119
  if (!element.hasAttribute("aria-orientation")) element.setAttribute("aria-orientation", "vertical");
7120
7120
  element.setAttribute("data-component", "ui-menu");
7121
- element.append((P0$8 ??= buildTemplate(T0$8)).cloneNode(true));
7121
+ element.append((P0$9 ??= buildTemplate(T0$9)).cloneNode(true));
7122
7122
  const v = [
7123
7123
  false,
7124
7124
  null,
@@ -7129,9 +7129,9 @@ function createUiMenu(options = {}, html) {
7129
7129
  null,
7130
7130
  null
7131
7131
  ];
7132
- const B = acceptProps(element, D$10, S$10.n, v, componentProps, [], html);
7132
+ const B = acceptProps(element, D$11, S$11.n, v, componentProps, [], html);
7133
7133
  const m1 = (d) => {
7134
- return { n: (P1$8 ??= buildTemplate(T1$8)).cloneNode(true) };
7134
+ return { n: (P1$9 ??= buildTemplate(T1$9)).cloneNode(true) };
7135
7135
  };
7136
7136
  const p0 = (r, c, d) => {
7137
7137
  if (c & 155) {
@@ -7175,10 +7175,10 @@ function createUiMenu(options = {}, html) {
7175
7175
  const I = { B };
7176
7176
  const J = project(I, children, slots);
7177
7177
  I.R = /* @__PURE__ */ new Set();
7178
- attachGeneratedController(element, S$10, v, (c, d) => {
7178
+ attachGeneratedController(element, S$11, v, (c, d) => {
7179
7179
  ((c, d) => p0(R, c, d))(c, d);
7180
7180
  for (const f of I.R) f(c, d);
7181
- }, C$6, void 0, I);
7181
+ }, C$7, void 0, I);
7182
7182
  manageProps(I);
7183
7183
  return element;
7184
7184
  }
@@ -7187,7 +7187,7 @@ function createUiMenu(options = {}, html) {
7187
7187
  function radioScope(item) {
7188
7188
  return item.closest("[role=\"group\"]") ?? item.closest("[role=\"menu\"]");
7189
7189
  }
7190
- function connect$5(host) {
7190
+ function connect$6(host) {
7191
7191
  const item = host.element;
7192
7192
  let external = Boolean(host.props.checked.value);
7193
7193
  host.state.internalChecked = external;
@@ -7238,12 +7238,12 @@ function connect$5(host) {
7238
7238
  };
7239
7239
  }
7240
7240
  /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
7241
- function controller$5(host) {
7242
- host.on("connect", () => connect$5(host));
7241
+ function controller$6(host) {
7242
+ host.on("connect", () => connect$6(host));
7243
7243
  }
7244
7244
  //#endregion
7245
7245
  //#region vanilla/UiMenuItem.js
7246
- var T0$7 = [
7246
+ var T0$8 = [
7247
7247
  "",
7248
7248
  [],
7249
7249
  "\n ",
@@ -7276,8 +7276,8 @@ var T0$7 = [
7276
7276
  ],
7277
7277
  "\n "
7278
7278
  ];
7279
- var T1$7 = ["", []];
7280
- var T2$5 = ["", []];
7279
+ var T1$8 = ["", []];
7280
+ var T2$6 = ["", []];
7281
7281
  var T3$3 = ["", []];
7282
7282
  var T4$3 = [
7283
7283
  "",
@@ -7329,16 +7329,16 @@ var T5$2 = ["ui-icon", ["name", "check"]];
7329
7329
  var T6$2 = ["", []];
7330
7330
  var T7$2 = ["", []];
7331
7331
  var T8$2 = ["", []];
7332
- var P0$7;
7333
- var P1$7;
7334
- var P2$5;
7332
+ var P0$8;
7333
+ var P1$8;
7334
+ var P2$6;
7335
7335
  var P3$3;
7336
7336
  var P4$3;
7337
7337
  var P5$2;
7338
7338
  var P6$2;
7339
7339
  var P7$2;
7340
7340
  var P8$2;
7341
- var S$9 = {
7341
+ var S$10 = {
7342
7342
  n: ["internalChecked"],
7343
7343
  t: ["b"],
7344
7344
  f: import.meta.url,
@@ -7418,7 +7418,7 @@ var A$1 = [[
7418
7418
  ]
7419
7419
  ]];
7420
7420
  var Q$1 = [[], []];
7421
- var D$9 = {
7421
+ var D$10 = {
7422
7422
  g: "ui-menu-item",
7423
7423
  props: {
7424
7424
  "checked": {
@@ -7485,7 +7485,7 @@ var D$9 = {
7485
7485
  }
7486
7486
  }
7487
7487
  };
7488
- var C$5 = (host) => controller$5(host);
7488
+ var C$6 = (host) => controller$6(host);
7489
7489
  function createUiMenuItem(options = {}, html) {
7490
7490
  const { attributes = {}, children = [], slots = {}, ...componentProps } = options;
7491
7491
  const v = [
@@ -7497,7 +7497,7 @@ function createUiMenuItem(options = {}, html) {
7497
7497
  null,
7498
7498
  null
7499
7499
  ];
7500
- acceptProps(void 0, D$9, S$9.n, v, componentProps, [], html);
7500
+ acceptProps(void 0, D$10, S$10.n, v, componentProps, [], html);
7501
7501
  let a = truthy(v[3]) && v[5] === "action" ? 0 : 1;
7502
7502
  let element;
7503
7503
  if (a === 0) {
@@ -7518,12 +7518,12 @@ function createUiMenuItem(options = {}, html) {
7518
7518
  if (!element.hasAttribute("tabindex")) element.setAttribute("tabindex", "-1");
7519
7519
  element.setAttribute("data-component", "ui-menu-item");
7520
7520
  }
7521
- const B = acceptProps(element, D$9, S$9.n, v, componentProps, Q$1[a], html);
7521
+ const B = acceptProps(element, D$10, S$10.n, v, componentProps, Q$1[a], html);
7522
7522
  const m1 = (d) => {
7523
- return { n: (P1$7 ??= buildTemplate(T1$7)).cloneNode(true) };
7523
+ return { n: (P1$8 ??= buildTemplate(T1$8)).cloneNode(true) };
7524
7524
  };
7525
7525
  const m2 = (d) => {
7526
- return { n: (P2$5 ??= buildTemplate(T2$5)).cloneNode(true) };
7526
+ return { n: (P2$6 ??= buildTemplate(T2$6)).cloneNode(true) };
7527
7527
  };
7528
7528
  const m3 = (d) => {
7529
7529
  return { n: (P3$3 ??= buildTemplate(T3$3)).cloneNode(true) };
@@ -7541,7 +7541,7 @@ function createUiMenuItem(options = {}, html) {
7541
7541
  return { n: (P8$2 ??= buildTemplate(T8$2)).cloneNode(true) };
7542
7542
  };
7543
7543
  const m0 = (n, d) => {
7544
- n.append((P0$7 ??= buildTemplate(T0$7)).cloneNode(true));
7544
+ n.append((P0$8 ??= buildTemplate(T0$8)).cloneNode(true));
7545
7545
  const t0 = n.firstChild.nextSibling;
7546
7546
  const t1 = t0.firstChild;
7547
7547
  const t2 = t0.nextSibling.nextSibling;
@@ -7772,16 +7772,16 @@ function createUiMenuItem(options = {}, html) {
7772
7772
  const I = { B };
7773
7773
  const J = project(I, children, slots);
7774
7774
  I.R = /* @__PURE__ */ new Set();
7775
- attachGeneratedController(element, S$9, v, (c, d) => {
7775
+ attachGeneratedController(element, S$10, v, (c, d) => {
7776
7776
  p(c, d);
7777
7777
  for (const f of I.R) f(c, d);
7778
- }, C$5, void 0, I);
7778
+ }, C$6, void 0, I);
7779
7779
  manageProps(I);
7780
7780
  return element;
7781
7781
  }
7782
7782
  //#endregion
7783
7783
  //#region components/ui-popover/ui-popover.js
7784
- function connect$4(host) {
7784
+ function connect$5(host) {
7785
7785
  const element = host.element;
7786
7786
  const document = element.ownerDocument;
7787
7787
  const offset = () => {
@@ -7899,12 +7899,12 @@ function connect$4(host) {
7899
7899
  };
7900
7900
  }
7901
7901
  /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
7902
- function controller$4(host) {
7903
- host.on("connect", () => connect$4(host));
7902
+ function controller$5(host) {
7903
+ host.on("connect", () => connect$5(host));
7904
7904
  }
7905
7905
  //#endregion
7906
7906
  //#region vanilla/UiPopover.js
7907
- var T0$6 = [
7907
+ var T0$7 = [
7908
7908
  "",
7909
7909
  [],
7910
7910
  [
@@ -7913,10 +7913,10 @@ var T0$6 = [
7913
7913
  4
7914
7914
  ]
7915
7915
  ];
7916
- var T1$6 = ["", []];
7917
- var P0$6;
7918
- var P1$6;
7919
- var S$8 = {
7916
+ var T1$7 = ["", []];
7917
+ var P0$7;
7918
+ var P1$7;
7919
+ var S$9 = {
7920
7920
  n: ["internalOpen"],
7921
7921
  t: ["b"],
7922
7922
  f: import.meta.url,
@@ -7987,7 +7987,7 @@ var S$8 = {
7987
7987
  },
7988
7988
  x: dispatchDeclared
7989
7989
  };
7990
- var D$8 = {
7990
+ var D$9 = {
7991
7991
  g: "ui-popover",
7992
7992
  props: {
7993
7993
  "for": {
@@ -8052,7 +8052,7 @@ var D$8 = {
8052
8052
  }
8053
8053
  }
8054
8054
  };
8055
- var C$4 = (host) => controller$4(host);
8055
+ var C$5 = (host) => controller$5(host);
8056
8056
  function createUiPopover(options = {}, html) {
8057
8057
  const { attributes = {}, children = [], slots = {}, ...componentProps } = options;
8058
8058
  const element = document.createElement("span");
@@ -8061,7 +8061,7 @@ function createUiPopover(options = {}, html) {
8061
8061
  element.setAttribute(name, value === true ? "" : String(value));
8062
8062
  }
8063
8063
  element.setAttribute("data-component", "ui-popover");
8064
- element.append((P0$6 ??= buildTemplate(T0$6)).cloneNode(true));
8064
+ element.append((P0$7 ??= buildTemplate(T0$7)).cloneNode(true));
8065
8065
  const v = [
8066
8066
  false,
8067
8067
  null,
@@ -8069,9 +8069,9 @@ function createUiPopover(options = {}, html) {
8069
8069
  null,
8070
8070
  null
8071
8071
  ];
8072
- const B = acceptProps(element, D$8, S$8.n, v, componentProps, [], html);
8072
+ const B = acceptProps(element, D$9, S$9.n, v, componentProps, [], html);
8073
8073
  const m1 = (d) => {
8074
- return { n: (P1$6 ??= buildTemplate(T1$6)).cloneNode(true) };
8074
+ return { n: (P1$7 ??= buildTemplate(T1$7)).cloneNode(true) };
8075
8075
  };
8076
8076
  const p0 = (r, c, d) => {
8077
8077
  if (c & 17) {
@@ -8103,30 +8103,30 @@ function createUiPopover(options = {}, html) {
8103
8103
  const I = { B };
8104
8104
  const J = project(I, children, slots);
8105
8105
  I.R = /* @__PURE__ */ new Set();
8106
- attachGeneratedController(element, S$8, v, (c, d) => {
8106
+ attachGeneratedController(element, S$9, v, (c, d) => {
8107
8107
  ((c, d) => p0(R, c, d))(c, d);
8108
8108
  for (const f of I.R) f(c, d);
8109
- }, C$4, void 0, I);
8109
+ }, C$5, void 0, I);
8110
8110
  manageProps(I);
8111
8111
  return element;
8112
8112
  }
8113
8113
  //#endregion
8114
8114
  //#region vanilla/UiStack.js
8115
- var T0$5 = [
8115
+ var T0$6 = [
8116
8116
  "",
8117
8117
  [],
8118
8118
  4
8119
8119
  ];
8120
- var T1$5 = ["", []];
8121
- var P0$5;
8122
- var P1$5;
8123
- var S$7 = {
8120
+ var T1$6 = ["", []];
8121
+ var P0$6;
8122
+ var P1$6;
8123
+ var S$8 = {
8124
8124
  n: [],
8125
8125
  t: [],
8126
8126
  f: import.meta.url,
8127
8127
  g: "ui-stack"
8128
8128
  };
8129
- var D$7 = {
8129
+ var D$8 = {
8130
8130
  g: "ui-stack",
8131
8131
  props: {
8132
8132
  "align": {
@@ -8207,7 +8207,7 @@ function createUiStack(options = {}, html) {
8207
8207
  element.setAttribute(name, value === true ? "" : String(value));
8208
8208
  }
8209
8209
  element.setAttribute("data-component", "ui-stack");
8210
- element.append((P0$5 ??= buildTemplate(T0$5)).cloneNode(true));
8210
+ element.append((P0$6 ??= buildTemplate(T0$6)).cloneNode(true));
8211
8211
  const v = [
8212
8212
  null,
8213
8213
  null,
@@ -8215,9 +8215,9 @@ function createUiStack(options = {}, html) {
8215
8215
  null,
8216
8216
  null
8217
8217
  ];
8218
- const B = acceptProps(element, D$7, S$7.n, v, componentProps, [], html);
8218
+ const B = acceptProps(element, D$8, S$8.n, v, componentProps, [], html);
8219
8219
  const m1 = (d) => {
8220
- return { n: (P1$5 ??= buildTemplate(T1$5)).cloneNode(true) };
8220
+ return { n: (P1$6 ??= buildTemplate(T1$6)).cloneNode(true) };
8221
8221
  };
8222
8222
  const p0 = (r, c, d) => {
8223
8223
  if (c & 8) {
@@ -8266,19 +8266,19 @@ function createUiStack(options = {}, html) {
8266
8266
  };
8267
8267
  const I = { B };
8268
8268
  const J = project(I, children, slots);
8269
- attachGeneratedController(element, S$7, v, ((c, d) => p0(R, c, d)), void 0, void 0, I);
8269
+ attachGeneratedController(element, S$8, v, ((c, d) => p0(R, c, d)), void 0, void 0, I);
8270
8270
  manageProps(I);
8271
8271
  return element;
8272
8272
  }
8273
8273
  //#endregion
8274
8274
  //#region vanilla/UiText.js
8275
- var T0$4 = [
8275
+ var T0$5 = [
8276
8276
  "",
8277
8277
  [],
8278
8278
  4
8279
8279
  ];
8280
- var T1$4 = ["", []];
8281
- var T2$4 = [
8280
+ var T1$5 = ["", []];
8281
+ var T2$5 = [
8282
8282
  "",
8283
8283
  [],
8284
8284
  4
@@ -8338,9 +8338,9 @@ var T20 = [
8338
8338
  4
8339
8339
  ];
8340
8340
  var T21 = ["", []];
8341
- var P0$4;
8342
- var P1$4;
8343
- var P2$4;
8341
+ var P0$5;
8342
+ var P1$5;
8343
+ var P2$5;
8344
8344
  var P3$2;
8345
8345
  var P4$2;
8346
8346
  var P5$1;
@@ -8360,7 +8360,7 @@ var P18;
8360
8360
  var P19;
8361
8361
  var P20;
8362
8362
  var P21;
8363
- var S$6 = {
8363
+ var S$7 = {
8364
8364
  n: [],
8365
8365
  t: [],
8366
8366
  f: import.meta.url,
@@ -8612,7 +8612,7 @@ var Q = [
8612
8612
  [],
8613
8613
  []
8614
8614
  ];
8615
- var D$6 = {
8615
+ var D$7 = {
8616
8616
  g: "ui-text",
8617
8617
  props: {
8618
8618
  "align": {
@@ -8796,7 +8796,7 @@ function createUiText(options = {}, html) {
8796
8796
  null,
8797
8797
  null
8798
8798
  ];
8799
- acceptProps(void 0, D$6, S$6.n, v, componentProps, [], html);
8799
+ acceptProps(void 0, D$7, S$7.n, v, componentProps, [], html);
8800
8800
  let a = v[1] === "span" ? 0 : v[1] === "div" ? 1 : v[1] === "small" ? 2 : v[1] === "strong" ? 3 : v[1] === "label" ? 4 : v[1] === "h2" ? 5 : v[1] === "h3" ? 6 : v[1] === "h4" ? 7 : v[1] === "h5" ? 8 : v[1] === "h6" ? 9 : 10;
8801
8801
  let element;
8802
8802
  if (a === 0) {
@@ -8877,9 +8877,9 @@ function createUiText(options = {}, html) {
8877
8877
  }
8878
8878
  element.setAttribute("data-component", "ui-text");
8879
8879
  }
8880
- const B = acceptProps(element, D$6, S$6.n, v, componentProps, Q[a], html);
8880
+ const B = acceptProps(element, D$7, S$7.n, v, componentProps, Q[a], html);
8881
8881
  const m1 = (d) => {
8882
- return { n: (P1$4 ??= buildTemplate(T1$4)).cloneNode(true) };
8882
+ return { n: (P1$5 ??= buildTemplate(T1$5)).cloneNode(true) };
8883
8883
  };
8884
8884
  const m3 = (d) => {
8885
8885
  return { n: (P3$2 ??= buildTemplate(T3$2)).cloneNode(true) };
@@ -8912,7 +8912,7 @@ function createUiText(options = {}, html) {
8912
8912
  return { n: (P21 ??= buildTemplate(T21)).cloneNode(true) };
8913
8913
  };
8914
8914
  const m0 = (n, d) => {
8915
- n.append((P0$4 ??= buildTemplate(T0$4)).cloneNode(true));
8915
+ n.append((P0$5 ??= buildTemplate(T0$5)).cloneNode(true));
8916
8916
  const t0 = n.firstChild;
8917
8917
  const r = {
8918
8918
  n,
@@ -8966,7 +8966,7 @@ function createUiText(options = {}, html) {
8966
8966
  } else if (r.b0 !== void 0) r.b0;
8967
8967
  };
8968
8968
  const m2 = (n, d) => {
8969
- n.append((P2$4 ??= buildTemplate(T2$4)).cloneNode(true));
8969
+ n.append((P2$5 ??= buildTemplate(T2$5)).cloneNode(true));
8970
8970
  const t0 = n.firstChild;
8971
8971
  const r = {
8972
8972
  n,
@@ -9555,14 +9555,14 @@ function createUiText(options = {}, html) {
9555
9555
  };
9556
9556
  const I = { B };
9557
9557
  const J = project(I, children, slots);
9558
- attachGeneratedController(element, S$6, v, p, void 0, void 0, I);
9558
+ attachGeneratedController(element, S$7, v, p, void 0, void 0, I);
9559
9559
  manageProps(I);
9560
9560
  return element;
9561
9561
  }
9562
9562
  //#endregion
9563
9563
  //#region components/ui-tooltip/ui-tooltip.js
9564
9564
  var warmTooltips = /* @__PURE__ */ new WeakMap();
9565
- function connect$3(host) {
9565
+ function connect$4(host) {
9566
9566
  const element = host.element;
9567
9567
  const document = element.ownerDocument;
9568
9568
  const warm = warmTooltips.get(document) ?? {
@@ -9797,12 +9797,12 @@ function connect$3(host) {
9797
9797
  };
9798
9798
  }
9799
9799
  /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
9800
- function controller$3(host) {
9801
- host.on("connect", () => connect$3(host));
9800
+ function controller$4(host) {
9801
+ host.on("connect", () => connect$4(host));
9802
9802
  }
9803
9803
  //#endregion
9804
9804
  //#region vanilla/UiTooltip.js
9805
- var T0$3 = [
9805
+ var T0$4 = [
9806
9806
  "",
9807
9807
  [],
9808
9808
  [
@@ -9823,12 +9823,12 @@ var T0$3 = [
9823
9823
  "\n "
9824
9824
  ]
9825
9825
  ];
9826
- var T1$3 = ["", []];
9827
- var T2$3 = ["", []];
9828
- var P0$3;
9829
- var P1$3;
9830
- var P2$3;
9831
- var S$5 = {
9826
+ var T1$4 = ["", []];
9827
+ var T2$4 = ["", []];
9828
+ var P0$4;
9829
+ var P1$4;
9830
+ var P2$4;
9831
+ var S$6 = {
9832
9832
  n: ["internalOpen"],
9833
9833
  t: ["b"],
9834
9834
  f: import.meta.url,
@@ -9899,7 +9899,7 @@ var S$5 = {
9899
9899
  },
9900
9900
  x: dispatchDeclared
9901
9901
  };
9902
- var D$5 = {
9902
+ var D$6 = {
9903
9903
  g: "ui-tooltip",
9904
9904
  props: {
9905
9905
  "for": {
@@ -9987,7 +9987,7 @@ var D$5 = {
9987
9987
  }
9988
9988
  }
9989
9989
  };
9990
- var C$3 = (host) => controller$3(host);
9990
+ var C$4 = (host) => controller$4(host);
9991
9991
  function createUiTooltip(options = {}, html) {
9992
9992
  const { attributes = {}, children = [], slots = {}, ...componentProps } = options;
9993
9993
  const element = document.createElement("span");
@@ -9997,7 +9997,7 @@ function createUiTooltip(options = {}, html) {
9997
9997
  }
9998
9998
  if (!element.hasAttribute("role")) element.setAttribute("role", "tooltip");
9999
9999
  element.setAttribute("data-component", "ui-tooltip");
10000
- element.append((P0$3 ??= buildTemplate(T0$3)).cloneNode(true));
10000
+ element.append((P0$4 ??= buildTemplate(T0$4)).cloneNode(true));
10001
10001
  const v = [
10002
10002
  false,
10003
10003
  null,
@@ -10008,12 +10008,12 @@ function createUiTooltip(options = {}, html) {
10008
10008
  null,
10009
10009
  null
10010
10010
  ];
10011
- const B = acceptProps(element, D$5, S$5.n, v, componentProps, [], html);
10011
+ const B = acceptProps(element, D$6, S$6.n, v, componentProps, [], html);
10012
10012
  const m1 = (d) => {
10013
- return { n: (P1$3 ??= buildTemplate(T1$3)).cloneNode(true) };
10013
+ return { n: (P1$4 ??= buildTemplate(T1$4)).cloneNode(true) };
10014
10014
  };
10015
10015
  const m2 = (d) => {
10016
- return { n: (P2$3 ??= buildTemplate(T2$3)).cloneNode(true) };
10016
+ return { n: (P2$4 ??= buildTemplate(T2$4)).cloneNode(true) };
10017
10017
  };
10018
10018
  const p0 = (r, c, d) => {
10019
10019
  if (c & 1) {
@@ -10069,10 +10069,10 @@ function createUiTooltip(options = {}, html) {
10069
10069
  const I = { B };
10070
10070
  const J = project(I, children, slots);
10071
10071
  I.R = /* @__PURE__ */ new Set();
10072
- attachGeneratedController(element, S$5, v, (c, d) => {
10072
+ attachGeneratedController(element, S$6, v, (c, d) => {
10073
10073
  ((c, d) => p0(R, c, d))(c, d);
10074
10074
  for (const f of I.R) f(c, d);
10075
- }, C$3, void 0, I);
10075
+ }, C$4, void 0, I);
10076
10076
  manageProps(I);
10077
10077
  return element;
10078
10078
  }
@@ -10795,7 +10795,7 @@ function trackTrigger(host) {
10795
10795
  }
10796
10796
  //#endregion
10797
10797
  //#region components/ui-checkbox/ui-checkbox.js
10798
- function connect$2(host) {
10798
+ function connect$3(host) {
10799
10799
  const input = host.refs.input;
10800
10800
  describeInput(input, host.refs.description);
10801
10801
  const [trigger, stopTracking] = trackTrigger(host);
@@ -10828,12 +10828,12 @@ function connect$2(host) {
10828
10828
  };
10829
10829
  }
10830
10830
  /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
10831
- function controller$2(host) {
10832
- host.on("connect", () => connect$2(host));
10831
+ function controller$3(host) {
10832
+ host.on("connect", () => connect$3(host));
10833
10833
  }
10834
10834
  //#endregion
10835
10835
  //#region vanilla/UiCheckbox.js
10836
- var T0$2 = [
10836
+ var T0$3 = [
10837
10837
  "",
10838
10838
  [],
10839
10839
  "\n ",
@@ -10863,12 +10863,12 @@ var T0$2 = [
10863
10863
  ],
10864
10864
  "\n "
10865
10865
  ];
10866
- var T1$2 = ["", []];
10867
- var T2$2 = ["", []];
10868
- var P0$2;
10869
- var P1$2;
10870
- var P2$2;
10871
- var S$4 = {
10866
+ var T1$3 = ["", []];
10867
+ var T2$3 = ["", []];
10868
+ var P0$3;
10869
+ var P1$3;
10870
+ var P2$3;
10871
+ var S$5 = {
10872
10872
  n: ["internalChecked"],
10873
10873
  t: ["b"],
10874
10874
  f: import.meta.url,
@@ -10901,7 +10901,7 @@ var S$4 = {
10901
10901
  ] },
10902
10902
  x: dispatchDeclared
10903
10903
  };
10904
- var D$4 = {
10904
+ var D$5 = {
10905
10905
  g: "ui-checkbox",
10906
10906
  props: {
10907
10907
  "checked": {
@@ -10987,7 +10987,7 @@ var D$4 = {
10987
10987
  }
10988
10988
  }
10989
10989
  };
10990
- var C$2 = (host) => controller$2(host);
10990
+ var C$3 = (host) => controller$3(host);
10991
10991
  function createUiCheckbox(options = {}, html) {
10992
10992
  const { attributes = {}, children = [], slots = {}, ...componentProps } = options;
10993
10993
  const element = document.createElement("label");
@@ -10996,7 +10996,7 @@ function createUiCheckbox(options = {}, html) {
10996
10996
  element.setAttribute(name, value === true ? "" : String(value));
10997
10997
  }
10998
10998
  element.setAttribute("data-component", "ui-checkbox");
10999
- element.append((P0$2 ??= buildTemplate(T0$2)).cloneNode(true));
10999
+ element.append((P0$3 ??= buildTemplate(T0$3)).cloneNode(true));
11000
11000
  const v = [
11001
11001
  false,
11002
11002
  null,
@@ -11009,12 +11009,12 @@ function createUiCheckbox(options = {}, html) {
11009
11009
  null,
11010
11010
  null
11011
11011
  ];
11012
- const B = acceptProps(element, D$4, S$4.n, v, componentProps, [], html);
11012
+ const B = acceptProps(element, D$5, S$5.n, v, componentProps, [], html);
11013
11013
  const m1 = (d) => {
11014
- return { n: (P1$2 ??= buildTemplate(T1$2)).cloneNode(true) };
11014
+ return { n: (P1$3 ??= buildTemplate(T1$3)).cloneNode(true) };
11015
11015
  };
11016
11016
  const m2 = (d) => {
11017
- return { n: (P2$2 ??= buildTemplate(T2$2)).cloneNode(true) };
11017
+ return { n: (P2$3 ??= buildTemplate(T2$3)).cloneNode(true) };
11018
11018
  };
11019
11019
  const p0 = (r, c, d) => {
11020
11020
  if (c & 32) {
@@ -11129,10 +11129,10 @@ function createUiCheckbox(options = {}, html) {
11129
11129
  const I = { B };
11130
11130
  const J = project(I, children, slots);
11131
11131
  I.R = /* @__PURE__ */ new Set();
11132
- attachGeneratedController(element, S$4, v, (c, d) => {
11132
+ attachGeneratedController(element, S$5, v, (c, d) => {
11133
11133
  ((c, d) => p0(R, c, d))(c, d);
11134
11134
  for (const f of I.R) f(c, d);
11135
- }, C$2, void 0, I);
11135
+ }, C$3, void 0, I);
11136
11136
  manageProps(I);
11137
11137
  I.r["input"] = t0;
11138
11138
  I.r["description"] = t4;
@@ -11174,7 +11174,7 @@ function leaveGroup(document, name, member) {
11174
11174
  if (!members.size) byName.delete(name);
11175
11175
  else ensureOpen(members);
11176
11176
  }
11177
- function connect$1(host) {
11177
+ function connect$2(host) {
11178
11178
  const document = host.element.ownerDocument;
11179
11179
  const [trigger, stopTracking] = trackTrigger(host);
11180
11180
  host.state.contentId = `ui-disclosure-${++disclosures}`;
@@ -11276,12 +11276,12 @@ function connect$1(host) {
11276
11276
  };
11277
11277
  }
11278
11278
  /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
11279
- function controller$1(host) {
11280
- host.on("connect", () => connect$1(host));
11279
+ function controller$2(host) {
11280
+ host.on("connect", () => connect$2(host));
11281
11281
  }
11282
11282
  //#endregion
11283
11283
  //#region vanilla/UiDisclosure.js
11284
- var T0$1 = [
11284
+ var T0$2 = [
11285
11285
  "",
11286
11286
  [],
11287
11287
  "\n ",
@@ -11336,8 +11336,8 @@ var T0$1 = [
11336
11336
  ],
11337
11337
  "\n "
11338
11338
  ];
11339
- var T1$1 = ["", []];
11340
- var T2$1 = [
11339
+ var T1$2 = ["", []];
11340
+ var T2$2 = [
11341
11341
  "",
11342
11342
  [],
11343
11343
  0
@@ -11348,12 +11348,12 @@ var T3$1 = [
11348
11348
  ["span", ["class", "chevron"]]
11349
11349
  ];
11350
11350
  var T4$1 = ["", []];
11351
- var P0$1;
11352
- var P1$1;
11353
- var P2$1;
11351
+ var P0$2;
11352
+ var P1$2;
11353
+ var P2$2;
11354
11354
  var P3$1;
11355
11355
  var P4$1;
11356
- var S$3 = {
11356
+ var S$4 = {
11357
11357
  n: [
11358
11358
  "internalOpen",
11359
11359
  "contentId",
@@ -11438,7 +11438,7 @@ var S$3 = {
11438
11438
  },
11439
11439
  x: dispatchDeclared
11440
11440
  };
11441
- var D$3 = {
11441
+ var D$4 = {
11442
11442
  g: "ui-disclosure",
11443
11443
  props: {
11444
11444
  "density": {
@@ -11525,7 +11525,7 @@ var D$3 = {
11525
11525
  }
11526
11526
  }
11527
11527
  };
11528
- var C$1 = (host) => controller$1(host);
11528
+ var C$2 = (host) => controller$2(host);
11529
11529
  function createUiDisclosure(options = {}, html) {
11530
11530
  const { attributes = {}, children = [], slots = {}, ...componentProps } = options;
11531
11531
  const element = document.createElement("div");
@@ -11534,7 +11534,7 @@ function createUiDisclosure(options = {}, html) {
11534
11534
  element.setAttribute(name, value === true ? "" : String(value));
11535
11535
  }
11536
11536
  element.setAttribute("data-component", "ui-disclosure");
11537
- element.append((P0$1 ??= buildTemplate(T0$1)).cloneNode(true));
11537
+ element.append((P0$2 ??= buildTemplate(T0$2)).cloneNode(true));
11538
11538
  const v = [
11539
11539
  false,
11540
11540
  "",
@@ -11550,12 +11550,12 @@ function createUiDisclosure(options = {}, html) {
11550
11550
  null,
11551
11551
  null
11552
11552
  ];
11553
- const B = acceptProps(element, D$3, S$3.n, v, componentProps, [], html);
11553
+ const B = acceptProps(element, D$4, S$4.n, v, componentProps, [], html);
11554
11554
  const m1 = (d) => {
11555
- return { n: (P1$1 ??= buildTemplate(T1$1)).cloneNode(true) };
11555
+ return { n: (P1$2 ??= buildTemplate(T1$2)).cloneNode(true) };
11556
11556
  };
11557
11557
  const m2 = (d) => {
11558
- const n = (P2$1 ??= buildTemplate(T2$1)).cloneNode(true);
11558
+ const n = (P2$2 ??= buildTemplate(T2$2)).cloneNode(true);
11559
11559
  const r = {
11560
11560
  n,
11561
11561
  a0: n.firstChild,
@@ -11709,10 +11709,10 @@ function createUiDisclosure(options = {}, html) {
11709
11709
  const I = { B };
11710
11710
  const J = project(I, children, slots);
11711
11711
  I.R = /* @__PURE__ */ new Set();
11712
- attachGeneratedController(element, S$3, v, (c, d) => {
11712
+ attachGeneratedController(element, S$4, v, (c, d) => {
11713
11713
  ((c, d) => p0(R, c, d))(c, d);
11714
11714
  for (const f of I.R) f(c, d);
11715
- }, C$1, void 0, I);
11715
+ }, C$2, void 0, I);
11716
11716
  manageProps(I);
11717
11717
  I.r["heading"] = t0;
11718
11718
  I.r["trigger"] = t1;
@@ -11721,7 +11721,7 @@ function createUiDisclosure(options = {}, html) {
11721
11721
  }
11722
11722
  //#endregion
11723
11723
  //#region components/ui-input/ui-input.js
11724
- function connect(host) {
11724
+ function connect$1(host) {
11725
11725
  return host.effect(() => {
11726
11726
  const value = host.props.value.value;
11727
11727
  if (value === void 0 || value === null) return;
@@ -11734,18 +11734,18 @@ function connect(host) {
11734
11734
  });
11735
11735
  }
11736
11736
  /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
11737
- function controller(host) {
11738
- host.on("connect", () => connect(host));
11737
+ function controller$1(host) {
11738
+ host.on("connect", () => connect$1(host));
11739
11739
  }
11740
11740
  //#endregion
11741
11741
  //#region vanilla/UiInput.js
11742
- var S$2 = {
11742
+ var S$3 = {
11743
11743
  n: [],
11744
11744
  t: [],
11745
11745
  f: import.meta.url,
11746
11746
  g: "ui-input"
11747
11747
  };
11748
- var D$2 = {
11748
+ var D$3 = {
11749
11749
  g: "ui-input",
11750
11750
  props: {
11751
11751
  "disabled": {
@@ -11941,7 +11941,7 @@ var D$2 = {
11941
11941
  }
11942
11942
  }
11943
11943
  };
11944
- var C = (host) => controller(host);
11944
+ var C$1 = (host) => controller$1(host);
11945
11945
  function createUiInput(options = {}, html) {
11946
11946
  const { attributes = {}, children = [], slots = {}, ...componentProps } = options;
11947
11947
  const element = document.createElement("input");
@@ -11959,7 +11959,7 @@ function createUiInput(options = {}, html) {
11959
11959
  null,
11960
11960
  null
11961
11961
  ];
11962
- const B = acceptProps(element, D$2, S$2.n, v, componentProps, [], html);
11962
+ const B = acceptProps(element, D$3, S$3.n, v, componentProps, [], html);
11963
11963
  const p0 = (r, c, d) => {
11964
11964
  if (c & 1073741856) {
11965
11965
  const x0 = v[5];
@@ -11967,7 +11967,7 @@ function createUiInput(options = {}, html) {
11967
11967
  if (s0 !== r.v0) writeAttribute(r.n, "type", r.v0 = s0);
11968
11968
  }
11969
11969
  if (c & 1073741920) {
11970
- const x1 = checkSelected(S$2, v[6], v[5], [
11970
+ const x1 = checkSelected(S$3, v[6], v[5], [
11971
11971
  [
11972
11972
  "text",
11973
11973
  "s",
@@ -12090,7 +12090,7 @@ function createUiInput(options = {}, html) {
12090
12090
  v6: void 0
12091
12091
  };
12092
12092
  const I = { B };
12093
- attachGeneratedController(element, S$2, v, ((c, d) => p0(R, c, d)), C, void 0, I);
12093
+ attachGeneratedController(element, S$3, v, ((c, d) => p0(R, c, d)), C$1, void 0, I);
12094
12094
  manageProps(I);
12095
12095
  return element;
12096
12096
  }
@@ -12279,13 +12279,13 @@ var expandNodeView = ({ editor, node, getPos }) => {
12279
12279
  };
12280
12280
  //#endregion
12281
12281
  //#region vanilla/UiSeparator.js
12282
- var S$1 = {
12282
+ var S$2 = {
12283
12283
  n: [],
12284
12284
  t: [],
12285
12285
  f: import.meta.url,
12286
12286
  g: "ui-separator"
12287
12287
  };
12288
- var D$1 = {
12288
+ var D$2 = {
12289
12289
  g: "ui-separator",
12290
12290
  props: {
12291
12291
  "emphasis": {
@@ -12346,7 +12346,7 @@ function createUiSeparator(options = {}, html) {
12346
12346
  null,
12347
12347
  null
12348
12348
  ];
12349
- const B = acceptProps(element, D$1, S$1.n, v, componentProps, [], html);
12349
+ const B = acceptProps(element, D$2, S$2.n, v, componentProps, [], html);
12350
12350
  const p0 = (r, c, d) => {
12351
12351
  if (c & 1073741826) {
12352
12352
  const x0 = v[1];
@@ -12372,7 +12372,7 @@ function createUiSeparator(options = {}, html) {
12372
12372
  v1: void 0
12373
12373
  };
12374
12374
  const I = { B };
12375
- attachGeneratedController(element, S$1, v, ((c, d) => p0(R, c, d)), void 0, void 0, I);
12375
+ attachGeneratedController(element, S$2, v, ((c, d) => p0(R, c, d)), void 0, void 0, I);
12376
12376
  manageProps(I);
12377
12377
  return element;
12378
12378
  }
@@ -12420,7 +12420,7 @@ var dividerNodeView = ({ editor, getPos }) => {
12420
12420
  };
12421
12421
  //#endregion
12422
12422
  //#region vanilla/UiCallout.js
12423
- var T0 = [
12423
+ var T0$1 = [
12424
12424
  "",
12425
12425
  [],
12426
12426
  "\n ",
@@ -12460,7 +12460,7 @@ var T0 = [
12460
12460
  ],
12461
12461
  "\n "
12462
12462
  ];
12463
- var T1 = [
12463
+ var T1$1 = [
12464
12464
  "svg",
12465
12465
  [
12466
12466
  "viewBox",
@@ -12487,7 +12487,7 @@ var T1 = [
12487
12487
  ["path", ["d", "M12 16v-4"]],
12488
12488
  ["path", ["d", "M12 8h.01"]]
12489
12489
  ];
12490
- var T2 = [
12490
+ var T2$1 = [
12491
12491
  "svg",
12492
12492
  [
12493
12493
  "viewBox",
@@ -12626,9 +12626,9 @@ var T8 = [
12626
12626
  0
12627
12627
  ];
12628
12628
  var T9 = ["", []];
12629
- var P0;
12630
- var P1;
12631
- var P2;
12629
+ var P0$1;
12630
+ var P1$1;
12631
+ var P2$1;
12632
12632
  var P3;
12633
12633
  var P4;
12634
12634
  var P5;
@@ -12636,13 +12636,13 @@ var P6;
12636
12636
  var P7;
12637
12637
  var P8;
12638
12638
  var P9;
12639
- var S = {
12639
+ var S$1 = {
12640
12640
  n: [],
12641
12641
  t: [],
12642
12642
  f: import.meta.url,
12643
12643
  g: "ui-callout"
12644
12644
  };
12645
- var D = {
12645
+ var D$1 = {
12646
12646
  g: "ui-callout",
12647
12647
  props: {
12648
12648
  "heading": {
@@ -12687,14 +12687,14 @@ function createUiCallout(options = {}, html) {
12687
12687
  }
12688
12688
  if (!element.hasAttribute("role")) element.setAttribute("role", "note");
12689
12689
  element.setAttribute("data-component", "ui-callout");
12690
- element.append((P0 ??= buildTemplate(T0)).cloneNode(true));
12690
+ element.append((P0$1 ??= buildTemplate(T0$1)).cloneNode(true));
12691
12691
  const v = [null, null];
12692
- const B = acceptProps(element, D, S.n, v, componentProps, [], html);
12692
+ const B = acceptProps(element, D$1, S$1.n, v, componentProps, [], html);
12693
12693
  const m1 = (d) => {
12694
- return { n: (P1 ??= buildTemplate(T1)).cloneNode(true) };
12694
+ return { n: (P1$1 ??= buildTemplate(T1$1)).cloneNode(true) };
12695
12695
  };
12696
12696
  const m2 = (d) => {
12697
- return { n: (P2 ??= buildTemplate(T2)).cloneNode(true) };
12697
+ return { n: (P2$1 ??= buildTemplate(T2$1)).cloneNode(true) };
12698
12698
  };
12699
12699
  const m3 = (d) => {
12700
12700
  return { n: (P3 ??= buildTemplate(T3)).cloneNode(true) };
@@ -12865,7 +12865,7 @@ function createUiCallout(options = {}, html) {
12865
12865
  };
12866
12866
  const I = { B };
12867
12867
  const J = project(I, children, slots);
12868
- attachGeneratedController(element, S, v, ((c, d) => p0(R, c, d)), void 0, void 0, I);
12868
+ attachGeneratedController(element, S$1, v, ((c, d) => p0(R, c, d)), void 0, void 0, I);
12869
12869
  manageProps(I);
12870
12870
  return element;
12871
12871
  }
@@ -12904,86 +12904,553 @@ var calloutNodeView = ({ node }) => {
12904
12904
  };
12905
12905
  };
12906
12906
  //#endregion
12907
- //#region src/vue/editor/image.ts
12908
- /** Projects the shared image's resize intent into a single document transaction.
12909
- * @ownership Delivery decorations belong to the inner image, never the figure;
12910
- * persisted attributes remain independent of host renditions and drag previews.
12911
- * @lifecycle Each atom owns a Vue app and an editability subscription.
12907
+ //#region components/ui-image/ui-image.js
12908
+ /** Owns transient resize geometry; consumers own persistence and selection.
12909
+ * @lifecycle Pointer capture ends on release, Escape, cancellation, or teardown.
12910
+ * Only release commits a drag, so consumers can make it one undo operation.
12912
12911
  */
12913
- var imageNodeView = ({ editor, node, getPos, decorations }) => {
12914
- const mount = document.createElement("div");
12915
- const current = shallowRef(node);
12916
- const delivery = shallowRef(decorations);
12917
- const selected = ref(false);
12918
- const editable = ref(editor.isEditable);
12919
- const refresh = () => {
12920
- editable.value = editor.isEditable;
12912
+ function connect(host) {
12913
+ const root = host.element;
12914
+ const frame = host.refs.frame;
12915
+ const document = root.ownerDocument;
12916
+ let drag = null;
12917
+ const image = () => frame.querySelector("img");
12918
+ const enabled = () => host.props.selected.value && host.props.resizable.value;
12919
+ const measure = () => {
12920
+ const media = image();
12921
+ const rect = media.getBoundingClientRect();
12922
+ return {
12923
+ width: rect.width,
12924
+ height: rect.height,
12925
+ ratio: (media.naturalHeight || rect.height || 1) / (media.naturalWidth || rect.width || 1)
12926
+ };
12921
12927
  };
12922
- const app = createApp({ render: () => {
12923
- const attrs = current.value.attrs;
12924
- const transient = Object.assign({}, ...delivery.value.map((decoration) => decoration.spec.loomaImageAttributes ?? {}));
12925
- return h(Image, {
12926
- src: transient.src ?? attrs.src,
12927
- alt: attrs.alt ?? "",
12928
- width: attrs.width,
12929
- height: attrs.height,
12930
- placement: normalizeImagePlacement(attrs.placement),
12931
- selected: editable.value && selected.value,
12932
- resizable: editable.value,
12933
- contenteditable: "false",
12934
- "data-looma-image-node": "",
12935
- onClick: (event) => {
12936
- if (event.target.closest("button")) return;
12937
- const position = getPos();
12938
- if (!editor.isEditable || typeof position !== "number") return;
12939
- editor.view.dispatch(editor.state.tr.setSelection(NodeSelection.create(editor.state.doc, position)));
12940
- editor.view.focus();
12941
- },
12942
- onResize: (event) => {
12943
- if (event.detail.phase !== "commit" || !editor.isEditable) return;
12944
- const position = getPos();
12945
- if (typeof position !== "number" || editor.state.doc.nodeAt(position) !== current.value) return;
12946
- const { width, height } = event.detail;
12947
- if (width === current.value.attrs.width && height === current.value.attrs.height) return;
12948
- editor.view.dispatch(closeHistory(editor.state.tr).setNodeMarkup(position, void 0, {
12949
- ...current.value.attrs,
12950
- width,
12951
- height
12952
- }));
12953
- editor.view.dispatch(closeHistory(editor.state.tr));
12954
- }
12955
- }, { media: () => h("img", {
12928
+ const dimensions = (width, ratio) => {
12929
+ const container = root.parentElement;
12930
+ const style = document.defaultView.getComputedStyle(container);
12931
+ const available = container.clientWidth - parseFloat(style.paddingLeft) - parseFloat(style.paddingRight);
12932
+ const gap = parseFloat(document.defaultView.getComputedStyle(root).paddingLeft) + parseFloat(document.defaultView.getComputedStyle(root).paddingRight);
12933
+ const maximum = Math.max(1, available - gap);
12934
+ const next = Math.round(Math.min(maximum, Math.max(Math.min(32, maximum), width)));
12935
+ return {
12936
+ width: next,
12937
+ height: Math.max(1, Math.round(next * ratio))
12938
+ };
12939
+ };
12940
+ const restore = () => {
12941
+ root.removeAttribute("data-resizing");
12942
+ const width = host.props.width.value;
12943
+ if (width > 0) root.style.setProperty("--_ui-image-width", `${width}px`);
12944
+ else root.style.removeProperty("--_ui-image-width");
12945
+ };
12946
+ const dispatch = (size, phase, trigger) => host.dispatch("resize", {
12947
+ ...size,
12948
+ phase,
12949
+ trigger
12950
+ });
12951
+ const finish = (phase) => {
12952
+ if (!drag) return;
12953
+ const current = drag;
12954
+ drag = null;
12955
+ document.removeEventListener("keydown", onEscape, true);
12956
+ if (current.handle.hasPointerCapture(current.pointer)) current.handle.releasePointerCapture(current.pointer);
12957
+ if (phase === "commit" && !current.moved) phase = "cancel";
12958
+ restore();
12959
+ dispatch(phase === "commit" ? current.size : {
12960
+ width: Math.round(current.width),
12961
+ height: Math.round(current.height)
12962
+ }, phase, "pointer");
12963
+ };
12964
+ const onDown = (event) => {
12965
+ const handle = event.target.closest("[data-corner]");
12966
+ if (!enabled() || !handle || !root.contains(handle) || event.button !== 0 || drag) return;
12967
+ event.preventDefault();
12968
+ const measured = measure();
12969
+ drag = {
12970
+ ...measured,
12971
+ x: event.clientX,
12972
+ y: event.clientY,
12973
+ handle,
12974
+ pointer: event.pointerId,
12975
+ size: dimensions(measured.width, measured.ratio)
12976
+ };
12977
+ handle.setPointerCapture(event.pointerId);
12978
+ document.addEventListener("keydown", onEscape, true);
12979
+ root.setAttribute("data-resizing", "");
12980
+ };
12981
+ const onMove = (event) => {
12982
+ if (!drag || drag.pointer !== event.pointerId) return;
12983
+ const corner = drag.handle.dataset.corner;
12984
+ const dx = (event.clientX - drag.x) * (corner.endsWith("left") ? -1 : 1);
12985
+ const dy = (event.clientY - drag.y) * (corner.startsWith("top") ? -1 : 1);
12986
+ const delta = (dx + drag.ratio * dy) / (1 + drag.ratio * drag.ratio);
12987
+ drag.size = dimensions(drag.width + delta, drag.ratio);
12988
+ drag.moved = drag.size.width !== Math.round(drag.width);
12989
+ root.style.setProperty("--_ui-image-width", `${drag.size.width}px`);
12990
+ dispatch(drag.size, "preview", "pointer");
12991
+ };
12992
+ const onUp = (event) => {
12993
+ if (drag?.pointer === event.pointerId) finish("commit");
12994
+ };
12995
+ const onCancel = (event) => {
12996
+ if (drag?.pointer === event.pointerId) finish("cancel");
12997
+ };
12998
+ const onEscape = (event) => {
12999
+ if (event.key !== "Escape" || !drag) return;
13000
+ event.preventDefault();
13001
+ event.stopPropagation();
13002
+ finish("cancel");
13003
+ };
13004
+ const onKey = (event) => {
13005
+ const handle = event.target.closest?.("[data-corner]");
13006
+ if (!enabled() || !handle || !root.contains(handle) || ![
13007
+ "ArrowLeft",
13008
+ "ArrowRight",
13009
+ "ArrowUp",
13010
+ "ArrowDown"
13011
+ ].includes(event.key)) return;
13012
+ event.preventDefault();
13013
+ event.stopPropagation();
13014
+ const measured = measure();
13015
+ const horizontal = event.key === "ArrowLeft" || event.key === "ArrowRight";
13016
+ const amount = ((event.key === "ArrowLeft" || event.key === "ArrowUp") !== (horizontal ? handle.dataset.corner.endsWith("left") : handle.dataset.corner.startsWith("top")) ? -1 : 1) * (event.shiftKey ? 32 : 8);
13017
+ dispatch(dimensions(measured.width + amount / (horizontal ? 1 : measured.ratio), measured.ratio), "commit", "keyboard");
13018
+ };
13019
+ const stop = host.effect(() => {
13020
+ host.props.width.value;
13021
+ host.props.height.value;
13022
+ host.props.placement.value;
13023
+ if (drag) finish("cancel");
13024
+ restore();
13025
+ enabled();
13026
+ });
13027
+ root.addEventListener("pointerdown", onDown);
13028
+ root.addEventListener("pointermove", onMove);
13029
+ root.addEventListener("pointerup", onUp);
13030
+ root.addEventListener("pointercancel", onCancel);
13031
+ root.addEventListener("lostpointercapture", onCancel);
13032
+ root.addEventListener("keydown", onKey);
13033
+ return () => {
13034
+ stop();
13035
+ if (drag) {
13036
+ const active = drag;
13037
+ drag = null;
13038
+ if (active.handle.hasPointerCapture(active.pointer)) active.handle.releasePointerCapture(active.pointer);
13039
+ }
13040
+ root.removeEventListener("pointerdown", onDown);
13041
+ root.removeEventListener("pointermove", onMove);
13042
+ root.removeEventListener("pointerup", onUp);
13043
+ root.removeEventListener("pointercancel", onCancel);
13044
+ root.removeEventListener("lostpointercapture", onCancel);
13045
+ root.removeEventListener("keydown", onKey);
13046
+ document.removeEventListener("keydown", onEscape, true);
13047
+ };
13048
+ }
13049
+ /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
13050
+ function controller(host) {
13051
+ host.on("connect", () => connect(host));
13052
+ }
13053
+ //#endregion
13054
+ //#region vanilla/UiImage.js
13055
+ var T0 = [
13056
+ "",
13057
+ [],
13058
+ "\n ",
13059
+ [
13060
+ "div",
13061
+ ["class", "frame"],
13062
+ "\n ",
13063
+ 4,
13064
+ "\n ",
13065
+ [
13066
+ "div",
13067
+ ["class", "handles"],
13068
+ "\n ",
13069
+ ["button", [
13070
+ "type",
13071
+ "button",
13072
+ "class",
13073
+ "handle",
13074
+ "data-corner",
13075
+ "top-left",
13076
+ "aria-label",
13077
+ "Resize image from top left"
13078
+ ]],
13079
+ "\n ",
13080
+ ["button", [
13081
+ "type",
13082
+ "button",
13083
+ "class",
13084
+ "handle",
13085
+ "data-corner",
13086
+ "top-right",
13087
+ "aria-label",
13088
+ "Resize image from top right"
13089
+ ]],
13090
+ "\n ",
13091
+ ["button", [
13092
+ "type",
13093
+ "button",
13094
+ "class",
13095
+ "handle",
13096
+ "data-corner",
13097
+ "bottom-left",
13098
+ "aria-label",
13099
+ "Resize image from bottom left"
13100
+ ]],
13101
+ "\n ",
13102
+ ["button", [
13103
+ "type",
13104
+ "button",
13105
+ "class",
13106
+ "handle",
13107
+ "data-corner",
13108
+ "bottom-right",
13109
+ "aria-label",
13110
+ "Resize image from bottom right"
13111
+ ]],
13112
+ "\n "
13113
+ ],
13114
+ "\n ",
13115
+ 4,
13116
+ "\n "
13117
+ ],
13118
+ "\n "
13119
+ ];
13120
+ var T1 = [
13121
+ "",
13122
+ [],
13123
+ ["img", []]
13124
+ ];
13125
+ var T2 = ["", []];
13126
+ var P0;
13127
+ var P1;
13128
+ var P2;
13129
+ var S = {
13130
+ n: [],
13131
+ t: [],
13132
+ f: import.meta.url,
13133
+ g: "ui-image",
13134
+ d: { "resize": [
13135
+ detailCheck(checkObject([
13136
+ [
13137
+ "width",
13138
+ checkInteger,
13139
+ false
13140
+ ],
13141
+ [
13142
+ "height",
13143
+ checkInteger,
13144
+ false
13145
+ ],
13146
+ [
13147
+ "phase",
13148
+ checkConstrained(checkFormat("keyword", keywordFormat), "keyword", { "values": [
13149
+ "preview",
13150
+ "commit",
13151
+ "cancel"
13152
+ ] }),
13153
+ false
13154
+ ],
13155
+ [
13156
+ "trigger",
13157
+ checkConstrained(checkFormat("keyword", keywordFormat), "keyword", { "values": ["pointer", "keyboard"] }),
13158
+ false
13159
+ ]
13160
+ ], false)),
13161
+ true,
13162
+ true,
13163
+ false
13164
+ ] },
13165
+ x: dispatchDeclared
13166
+ };
13167
+ var D = {
13168
+ g: "ui-image",
13169
+ props: {
13170
+ "alt": {
13171
+ "required": false,
13172
+ "default": "",
13173
+ c: checkString,
13174
+ t: "string",
13175
+ j: 0,
13176
+ m: "s"
13177
+ },
13178
+ "height": {
13179
+ "required": false,
13180
+ c: checkInteger,
13181
+ t: "integer",
13182
+ j: 0,
13183
+ m: "i"
13184
+ },
13185
+ "placement": {
13186
+ "required": false,
13187
+ "values": [
13188
+ "block",
13189
+ "center",
13190
+ "wrap-left",
13191
+ "wrap-right"
13192
+ ],
13193
+ "default": "block",
13194
+ c: checkFormat("keyword", keywordFormat),
13195
+ t: "keyword",
13196
+ j: 0,
13197
+ m: [
13198
+ "p",
13199
+ formatOf(keywordFormat),
13200
+ false
13201
+ ]
13202
+ },
13203
+ "resizable": {
13204
+ "required": false,
13205
+ "default": false,
13206
+ c: checkBoolean,
13207
+ t: "boolean",
13208
+ j: 0,
13209
+ m: "b"
13210
+ },
13211
+ "selected": {
13212
+ "required": false,
13213
+ "default": false,
13214
+ c: checkBoolean,
13215
+ t: "boolean",
13216
+ j: 0,
13217
+ m: "b"
13218
+ },
13219
+ "src": {
13220
+ "required": false,
13221
+ "default": "",
13222
+ c: checkString,
13223
+ t: "string",
13224
+ j: 0,
13225
+ m: "s"
13226
+ },
13227
+ "width": {
13228
+ "required": false,
13229
+ c: checkInteger,
13230
+ t: "integer",
13231
+ j: 0,
13232
+ m: "i"
13233
+ }
13234
+ }
13235
+ };
13236
+ var C = (host) => controller(host);
13237
+ function createUiImage(options = {}, html) {
13238
+ const { attributes = {}, children = [], slots = {}, ...componentProps } = options;
13239
+ const element = document.createElement("figure");
13240
+ for (const [name, value] of Object.entries(attributes)) {
13241
+ if (value === null || value === void 0 || value === false) continue;
13242
+ element.setAttribute(name, value === true ? "" : String(value));
13243
+ }
13244
+ element.setAttribute("data-component", "ui-image");
13245
+ element.append((P0 ??= buildTemplate(T0)).cloneNode(true));
13246
+ const v = [
13247
+ null,
13248
+ null,
13249
+ null,
13250
+ null,
13251
+ null,
13252
+ null,
13253
+ null
13254
+ ];
13255
+ const B = acceptProps(element, D, S.n, v, componentProps, [], html);
13256
+ const m1 = (d) => {
13257
+ const n = (P1 ??= buildTemplate(T1)).cloneNode(true);
13258
+ const r = {
13259
+ n,
13260
+ a0: n.firstChild,
13261
+ v0: null,
13262
+ v1: null,
13263
+ v2: null,
13264
+ v3: null
13265
+ };
13266
+ p1(r, -1, d);
13267
+ return r;
13268
+ };
13269
+ const p1 = (r, c, d) => {
13270
+ if (c & 32) {
13271
+ const x0 = v[5];
13272
+ const s0 = toAttribute(x0, "src");
13273
+ if (s0 !== r.v0) writeUrlAttribute(r.a0, "src", r.v0 = s0);
13274
+ }
13275
+ if (c & 1) {
13276
+ const x1 = v[0];
13277
+ const s1 = toAttribute(x1, "alt");
13278
+ if (s1 !== r.v1) writeAttribute(r.a0, "alt", r.v1 = s1);
13279
+ }
13280
+ if (c & 64) {
13281
+ const x2 = v[6];
13282
+ const s2 = toAttribute(x2, "width");
13283
+ if (s2 !== r.v2) writeAttribute(r.a0, "width", r.v2 = s2);
13284
+ }
13285
+ if (c & 2) {
13286
+ const x3 = v[1];
13287
+ const s3 = toAttribute(x3, "height");
13288
+ if (s3 !== r.v3) writeAttribute(r.a0, "height", r.v3 = s3);
13289
+ }
13290
+ };
13291
+ const m2 = (d) => {
13292
+ return { n: (P2 ??= buildTemplate(T2)).cloneNode(true) };
13293
+ };
13294
+ const p0 = (r, c, d) => {
13295
+ if (c & 24) {
13296
+ const x0 = !(truthy(v[4]) && truthy(v[3]));
13297
+ const s0 = toAttribute(x0, "hidden");
13298
+ if (s0 !== r.v0) writeAttribute(r.a2, "hidden", r.v0 = s0);
13299
+ }
13300
+ if (c & 20) {
13301
+ const s1 = hostState(["placement", "selected"], [v[2], v[4]]);
13302
+ if (s1 !== r.v1) writeAttribute(r.n, "data-ui-image-state", (r.v1 = s1) === "" ? null : s1);
13303
+ }
13304
+ if (r.f0 === void 0) {
13305
+ r.f0 = 1;
13306
+ const at = fillSlot(r.a1, r.e0, "media", J, true, void 0, d);
13307
+ if (Array.isArray(at)) (r.z ??= []).push(() => {
13308
+ at[0].l.delete(at[1]);
13309
+ dispose(at[1]);
13310
+ });
13311
+ else if (at !== void 0) {
13312
+ r.b0 = m1(d);
13313
+ at.before(r.b0.n);
13314
+ }
13315
+ } else if (r.b0 !== void 0) p1(r.b0, c, d);
13316
+ if (r.f1 === void 0) {
13317
+ r.f1 = 1;
13318
+ const at = fillSlot(r.a3, r.e1, "controls", J, false, void 0, d);
13319
+ if (Array.isArray(at)) (r.z ??= []).push(() => {
13320
+ at[0].l.delete(at[1]);
13321
+ dispose(at[1]);
13322
+ });
13323
+ else if (at !== void 0) {
13324
+ r.b1 = m2(d);
13325
+ at.before(r.b1.n);
13326
+ }
13327
+ } else if (r.b1 !== void 0) r.b1;
13328
+ };
13329
+ const t0 = element.firstChild.nextSibling;
13330
+ const t1 = t0.firstChild.nextSibling;
13331
+ const t2 = t1.nextSibling.nextSibling.nextSibling;
13332
+ const t3 = t2.nextSibling.nextSibling;
13333
+ const R = {
13334
+ n: element,
13335
+ a2: t2,
13336
+ v0: null,
13337
+ v1: void 0,
13338
+ a1: t1,
13339
+ e0: t1.nextSibling,
13340
+ b0: void 0,
13341
+ f0: void 0,
13342
+ a3: t3,
13343
+ e1: t3.nextSibling,
13344
+ b1: void 0,
13345
+ f1: void 0
13346
+ };
13347
+ const I = { B };
13348
+ const J = project(I, children, slots);
13349
+ attachGeneratedController(element, S, v, ((c, d) => p0(R, c, d)), C, void 0, I);
13350
+ manageProps(I);
13351
+ I.r["frame"] = t0;
13352
+ return element;
13353
+ }
13354
+ //#endregion
13355
+ //#region src/editor/node-views/image.ts
13356
+ /** The delivery attributes the editor's decorations lay over the stored ones, such as `srcset`. */
13357
+ var deliveryAttributes = (decorations) => Object.assign({}, ...decorations.map((decoration) => decoration.spec.loomaImageAttributes ?? {}));
13358
+ /**
13359
+ * Projects Image's resize into one document transaction, and draws the stored image with the
13360
+ * delivery attributes laid over it.
13361
+ * @ownership Delivery attributes belong to the inner `img`, never to Image; the stored attributes
13362
+ * stay independent of host renditions and drag previews.
13363
+ * @lifecycle Image disconnects once ProseMirror removes it; destroying the view stops following the
13364
+ * editor's editability.
13365
+ */
13366
+ var imageNodeView = ({ editor, node, getPos, decorations }) => {
13367
+ let current = node;
13368
+ let delivery = deliveryAttributes(decorations);
13369
+ let selected = false;
13370
+ const media = document.createElement("img");
13371
+ let written = /* @__PURE__ */ new Set();
13372
+ const writeMedia = (attrs) => {
13373
+ const next = Object.entries({
12956
13374
  src: attrs.src,
12957
13375
  alt: attrs.alt ?? "",
12958
13376
  title: attrs.title,
12959
13377
  width: attrs.width,
12960
13378
  height: attrs.height,
12961
- ...transient
12962
- }) });
12963
- } });
12964
- app.mount(mount);
12965
- const dom = mount.firstElementChild;
12966
- editor.on("update", refresh);
13379
+ ...delivery
13380
+ }).filter(([, value]) => value !== void 0 && value !== null && value !== false);
13381
+ const names = new Set(next.map(([name]) => name));
13382
+ for (const name of written) if (!names.has(name)) media.removeAttribute(name);
13383
+ for (const [name, value] of next) {
13384
+ const text = value === true ? "" : String(value);
13385
+ if (media.getAttribute(name) !== text) media.setAttribute(name, text);
13386
+ }
13387
+ written = names;
13388
+ };
13389
+ const props = (next) => ({
13390
+ src: delivery.src ?? next.attrs.src,
13391
+ alt: next.attrs.alt ?? "",
13392
+ width: next.attrs.width,
13393
+ height: next.attrs.height,
13394
+ placement: normalizeImagePlacement(next.attrs.placement),
13395
+ selected: editor.isEditable && selected,
13396
+ resizable: editor.isEditable
13397
+ });
13398
+ writeMedia(node.attrs);
13399
+ const image = createUiImage({
13400
+ ...props(node),
13401
+ attributes: {
13402
+ contenteditable: "false",
13403
+ "data-looma-image-node": ""
13404
+ },
13405
+ slots: { media: [media] }
13406
+ });
13407
+ const dom = element(image);
13408
+ const render = () => {
13409
+ writeMedia(current.attrs);
13410
+ updateComponentProps(dom, props(current));
13411
+ };
13412
+ dom.addEventListener("click", (event) => {
13413
+ if (event.target.closest("button")) return;
13414
+ const position = getPos();
13415
+ if (!editor.isEditable || typeof position !== "number") return;
13416
+ editor.view.dispatch(editor.state.tr.setSelection(NodeSelection.create(editor.state.doc, position)));
13417
+ editor.view.focus();
13418
+ });
13419
+ image.addEventListener("resize", (event) => {
13420
+ const { width, height, phase } = event.detail;
13421
+ if (event.target !== dom || phase !== "commit" || !editor.isEditable) return;
13422
+ const position = getPos();
13423
+ if (typeof position !== "number" || editor.state.doc.nodeAt(position) !== current) return;
13424
+ if (width === current.attrs.width && height === current.attrs.height) return;
13425
+ editor.view.dispatch(closeHistory(editor.state.tr).setNodeMarkup(position, void 0, {
13426
+ ...current.attrs,
13427
+ width,
13428
+ height
13429
+ }));
13430
+ editor.view.dispatch(closeHistory(editor.state.tr));
13431
+ });
13432
+ editor.on("update", render);
12967
13433
  return {
12968
13434
  dom,
12969
13435
  update(next, nextDecorations) {
12970
- if (next.type !== current.value.type) return false;
12971
- current.value = next;
12972
- delivery.value = nextDecorations;
12973
- refresh();
13436
+ if (next.type !== current.type) return false;
13437
+ current = next;
13438
+ delivery = deliveryAttributes(nextDecorations);
13439
+ render();
12974
13440
  return true;
12975
13441
  },
12976
13442
  selectNode() {
12977
- selected.value = true;
13443
+ selected = true;
13444
+ render();
12978
13445
  },
12979
13446
  deselectNode() {
12980
- selected.value = false;
13447
+ selected = false;
13448
+ render();
12981
13449
  },
12982
13450
  stopEvent: (event) => event.target instanceof Element && Boolean(event.target.closest("[data-corner]")),
12983
13451
  ignoreMutation: (mutation) => mutation.type !== "selection",
12984
13452
  destroy() {
12985
- editor.off("update", refresh);
12986
- app.unmount();
13453
+ editor.off("update", render);
12987
13454
  }
12988
13455
  };
12989
13456
  };