@threadlabs/looma 0.32.0 → 0.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (337) hide show
  1. package/components/shared/icons.js +1 -0
  2. package/components/shared/overlay.js +1 -1
  3. package/components/ui-action-bar/ui-action-bar.html +11 -11
  4. package/components/ui-affordance-scope/ui-affordance-scope.html +2 -2
  5. package/components/ui-avatar/ui-avatar.html +8 -8
  6. package/components/ui-avatar-group/ui-avatar-group.html +14 -14
  7. package/components/ui-avatar-group/ui-avatar-group.js +3 -2
  8. package/components/ui-badge/ui-badge.html +43 -43
  9. package/components/ui-breadcrumb-item/ui-breadcrumb-item.html +13 -13
  10. package/components/ui-breadcrumbs/ui-breadcrumbs.html +8 -8
  11. package/components/ui-button/ui-button.html +32 -29
  12. package/components/ui-callout/ui-callout.html +9 -9
  13. package/components/ui-card/ui-card.html +11 -11
  14. package/components/ui-checkbox/ui-checkbox.html +52 -33
  15. package/components/ui-cluster/ui-cluster.html +21 -21
  16. package/components/ui-color-picker/ui-color-picker.html +135 -0
  17. package/components/ui-color-picker/ui-color-picker.js +76 -0
  18. package/components/ui-combobox/ui-combobox.html +43 -43
  19. package/components/ui-container/ui-container.html +7 -7
  20. package/components/ui-context-menu/ui-context-menu.html +9 -9
  21. package/components/ui-cover/ui-cover.html +8 -8
  22. package/components/ui-description-item/ui-description-item.html +7 -7
  23. package/components/ui-description-list/ui-description-list.html +4 -4
  24. package/components/ui-dialog/ui-dialog.html +26 -26
  25. package/components/ui-disclosure/ui-disclosure.html +23 -23
  26. package/components/ui-editable/ui-editable.html +16 -16
  27. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.html +9 -9
  28. package/components/ui-editor-link-form/ui-editor-link-form.html +1 -2
  29. package/components/ui-editor-mention-menu/ui-editor-mention-menu.html +23 -23
  30. package/components/ui-editor-mention-menu-item/ui-editor-mention-menu-item.html +10 -10
  31. package/components/ui-editor-slash-menu/ui-editor-slash-menu.html +29 -29
  32. package/components/ui-editor-slash-menu-group/ui-editor-slash-menu-group.html +5 -5
  33. package/components/ui-editor-slash-menu-item/ui-editor-slash-menu-item.html +11 -11
  34. package/components/ui-editor-surface/ui-editor-surface.html +2 -2
  35. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +25 -25
  36. package/components/ui-editor-table-overlay/ui-editor-table-overlay.html +13 -13
  37. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +31 -31
  38. package/components/ui-editor-toolbar/ui-editor-toolbar.html +13 -13
  39. package/components/ui-floating-action-button/ui-floating-action-button.html +8 -8
  40. package/components/ui-form-field/ui-form-field.html +15 -15
  41. package/components/ui-form-field/ui-form-field.js +12 -4
  42. package/components/ui-grid/ui-grid.html +4 -4
  43. package/components/ui-icon/ui-icon.html +3 -2
  44. package/components/ui-icon-button/ui-icon-button.html +15 -14
  45. package/components/ui-image/ui-image.html +14 -14
  46. package/components/ui-input/ui-input.html +8 -8
  47. package/components/ui-input-group/ui-input-group.html +18 -18
  48. package/components/ui-list/ui-list.html +11 -11
  49. package/components/ui-list-item/ui-list-item.html +18 -18
  50. package/components/ui-listbox/ui-listbox.html +10 -10
  51. package/components/ui-menu/ui-menu.html +18 -17
  52. package/components/ui-menu-group/ui-menu-group.html +4 -4
  53. package/components/ui-menu-item/ui-menu-item.html +20 -20
  54. package/components/ui-meter/ui-meter.html +5 -5
  55. package/components/ui-nav-item/ui-nav-item.html +20 -20
  56. package/components/ui-page-header/ui-page-header.html +18 -17
  57. package/components/ui-popover/ui-popover.html +8 -8
  58. package/components/ui-radio/ui-radio.html +25 -17
  59. package/components/ui-radio-group/ui-radio-group.html +10 -10
  60. package/components/ui-reel/ui-reel.html +5 -5
  61. package/components/ui-scroll-area/ui-scroll-area.html +10 -10
  62. package/components/ui-search-result-row/ui-search-result-row.html +19 -19
  63. package/components/ui-search-shell/ui-search-shell.html +22 -22
  64. package/components/ui-section/ui-section.html +24 -23
  65. package/components/ui-select/ui-select.html +10 -10
  66. package/components/ui-separator/ui-separator.html +2 -2
  67. package/components/ui-sidebar/ui-sidebar.html +8 -8
  68. package/components/ui-spinner/ui-spinner.html +6 -6
  69. package/components/ui-stack/ui-stack.html +12 -12
  70. package/components/ui-status-message/ui-status-message.html +17 -17
  71. package/components/ui-swatch/ui-swatch.html +2 -2
  72. package/components/ui-switch/ui-switch.html +36 -26
  73. package/components/ui-switcher/ui-switcher.html +7 -7
  74. package/components/ui-table/ui-table.html +6 -6
  75. package/components/ui-tabs/ui-tabs.html +16 -15
  76. package/components/ui-text/ui-text.html +3 -2
  77. package/components/ui-textarea/ui-textarea.html +10 -10
  78. package/components/ui-toast/ui-toast.html +9 -9
  79. package/components/ui-toast-region/ui-toast-region.html +12 -12
  80. package/components/ui-tooltip/ui-tooltip.html +15 -15
  81. package/components/ui-top-bar/ui-top-bar.html +11 -11
  82. package/components/ui-tree/ui-tree.html +5 -5
  83. package/components/ui-tree-item/ui-tree-item.html +36 -36
  84. package/dist/index.js +46 -45
  85. package/editor/chunks/extensions.js +17 -1
  86. package/editor/extensions/slash-command.d.ts +1 -1
  87. package/editor/file-uploads.d.ts +31 -0
  88. package/editor/icons.d.ts +1 -0
  89. package/editor/index.js +2 -1
  90. package/package.json +3 -2
  91. package/styles/ui-action-bar.css +11 -11
  92. package/styles/ui-affordance-scope.css +2 -2
  93. package/styles/ui-avatar-group.css +14 -14
  94. package/styles/ui-avatar.css +8 -8
  95. package/styles/ui-badge.css +41 -41
  96. package/styles/ui-breadcrumb-item.css +13 -13
  97. package/styles/ui-breadcrumbs.css +8 -8
  98. package/styles/ui-button.css +30 -28
  99. package/styles/ui-callout.css +9 -9
  100. package/styles/ui-card.css +11 -11
  101. package/styles/ui-checkbox.css +52 -33
  102. package/styles/ui-cluster.css +21 -21
  103. package/styles/ui-color-picker.css +120 -0
  104. package/styles/ui-combobox.css +86 -86
  105. package/styles/ui-container.css +7 -7
  106. package/styles/ui-context-menu.css +9 -9
  107. package/styles/ui-cover.css +8 -8
  108. package/styles/ui-description-item.css +7 -7
  109. package/styles/ui-description-list.css +4 -4
  110. package/styles/ui-dialog.css +52 -52
  111. package/styles/ui-disclosure.css +23 -23
  112. package/styles/ui-editable.css +16 -16
  113. package/styles/ui-editor-insert-table-grid.css +9 -9
  114. package/styles/ui-editor-mention-menu-item.css +10 -10
  115. package/styles/ui-editor-mention-menu.css +23 -23
  116. package/styles/ui-editor-slash-menu-group.css +5 -5
  117. package/styles/ui-editor-slash-menu-item.css +11 -11
  118. package/styles/ui-editor-slash-menu.css +29 -29
  119. package/styles/ui-editor-surface.css +2 -2
  120. package/styles/ui-editor-table-context-menu.css +25 -25
  121. package/styles/ui-editor-table-overlay.css +13 -13
  122. package/styles/ui-editor-table-toolbar.css +31 -31
  123. package/styles/ui-editor-toolbar.css +13 -13
  124. package/styles/ui-floating-action-button.css +8 -8
  125. package/styles/ui-form-field.css +13 -13
  126. package/styles/ui-grid.css +4 -4
  127. package/styles/ui-icon-button.css +13 -13
  128. package/styles/ui-icon.css +2 -2
  129. package/styles/ui-image.css +14 -14
  130. package/styles/ui-input-group.css +18 -18
  131. package/styles/ui-input.css +8 -8
  132. package/styles/ui-list-item.css +18 -18
  133. package/styles/ui-list.css +11 -11
  134. package/styles/ui-listbox.css +20 -20
  135. package/styles/ui-menu-group.css +4 -4
  136. package/styles/ui-menu-item.css +20 -20
  137. package/styles/ui-menu.css +16 -16
  138. package/styles/ui-meter.css +5 -5
  139. package/styles/ui-nav-item.css +20 -20
  140. package/styles/ui-page-header.css +18 -17
  141. package/styles/ui-popover.css +8 -8
  142. package/styles/ui-radio-group.css +10 -10
  143. package/styles/ui-radio.css +26 -18
  144. package/styles/ui-reel.css +5 -5
  145. package/styles/ui-scroll-area.css +10 -10
  146. package/styles/ui-search-result-row.css +19 -19
  147. package/styles/ui-search-shell.css +22 -22
  148. package/styles/ui-section.css +24 -23
  149. package/styles/ui-select.css +10 -10
  150. package/styles/ui-separator.css +2 -2
  151. package/styles/ui-sidebar.css +8 -8
  152. package/styles/ui-spinner.css +6 -6
  153. package/styles/ui-stack.css +12 -12
  154. package/styles/ui-status-message.css +17 -17
  155. package/styles/ui-swatch.css +2 -2
  156. package/styles/ui-switch.css +36 -28
  157. package/styles/ui-switcher.css +7 -7
  158. package/styles/ui-table.css +6 -6
  159. package/styles/ui-tabs.css +11 -11
  160. package/styles/ui-text.css +3 -2
  161. package/styles/ui-textarea.css +10 -10
  162. package/styles/ui-toast-region.css +24 -24
  163. package/styles/ui-toast.css +18 -18
  164. package/styles/ui-tooltip.css +15 -15
  165. package/styles/ui-top-bar.css +11 -11
  166. package/styles/ui-tree-item.css +71 -71
  167. package/styles/ui-tree.css +5 -5
  168. package/theme-system.css +80 -0
  169. package/tokens.css +14 -3
  170. package/vanilla/UiColorPicker.d.ts +30 -0
  171. package/vanilla/UiColorPicker.js +77 -0
  172. package/vanilla/UiIcon.js +1 -1
  173. package/vanilla/index.js +1 -0
  174. package/vue/UiActionBar.vue +11 -11
  175. package/vue/UiAffordanceScope.vue +2 -2
  176. package/vue/UiAvatar.vue +8 -8
  177. package/vue/UiAvatarGroup.vue +14 -14
  178. package/vue/UiBadge.vue +43 -42
  179. package/vue/UiBreadcrumbItem.vue +13 -13
  180. package/vue/UiBreadcrumbs.vue +8 -8
  181. package/vue/UiButton.vue +34 -29
  182. package/vue/UiCallout.vue +9 -9
  183. package/vue/UiCard.vue +11 -11
  184. package/vue/UiCheckbox.vue +57 -34
  185. package/vue/UiCluster.vue +21 -21
  186. package/vue/UiColorPicker.d.ts +65 -0
  187. package/vue/UiColorPicker.js +2 -0
  188. package/vue/UiColorPicker.vue +422 -0
  189. package/vue/UiCombobox.vue +86 -86
  190. package/vue/UiContainer.vue +7 -7
  191. package/vue/UiContextMenu.vue +9 -9
  192. package/vue/UiCover.vue +8 -8
  193. package/vue/UiDescriptionItem.vue +7 -7
  194. package/vue/UiDescriptionList.vue +4 -4
  195. package/vue/UiDialog.vue +52 -52
  196. package/vue/UiDisclosure.vue +23 -23
  197. package/vue/UiEditable.vue +16 -16
  198. package/vue/UiEditorInsertTableGrid.vue +9 -9
  199. package/vue/UiEditorMentionMenu.vue +23 -23
  200. package/vue/UiEditorMentionMenuItem.vue +10 -10
  201. package/vue/UiEditorSlashMenu.vue +29 -29
  202. package/vue/UiEditorSlashMenuGroup.vue +5 -5
  203. package/vue/UiEditorSlashMenuItem.vue +11 -11
  204. package/vue/UiEditorSurface.vue +2 -2
  205. package/vue/UiEditorTableContextMenu.vue +25 -25
  206. package/vue/UiEditorTableOverlay.vue +13 -13
  207. package/vue/UiEditorTableToolbar.vue +31 -31
  208. package/vue/UiEditorToolbar.vue +13 -13
  209. package/vue/UiFloatingActionButton.vue +8 -8
  210. package/vue/UiFormField.vue +14 -14
  211. package/vue/UiGrid.vue +4 -4
  212. package/vue/UiIcon.vue +6 -2
  213. package/vue/UiIconButton.vue +14 -14
  214. package/vue/UiImage.vue +14 -14
  215. package/vue/UiInput.vue +9 -8
  216. package/vue/UiInputGroup.vue +18 -18
  217. package/vue/UiList.vue +11 -11
  218. package/vue/UiListItem.vue +18 -18
  219. package/vue/UiListbox.vue +20 -20
  220. package/vue/UiMenu.vue +16 -16
  221. package/vue/UiMenuGroup.vue +4 -4
  222. package/vue/UiMenuItem.vue +20 -20
  223. package/vue/UiMeter.vue +5 -5
  224. package/vue/UiNavItem.vue +20 -20
  225. package/vue/UiPageHeader.vue +18 -17
  226. package/vue/UiPopover.vue +8 -8
  227. package/vue/UiRadio.vue +28 -17
  228. package/vue/UiRadioGroup.vue +10 -10
  229. package/vue/UiReel.vue +5 -5
  230. package/vue/UiScrollArea.vue +10 -10
  231. package/vue/UiSearchResultRow.vue +19 -19
  232. package/vue/UiSearchShell.vue +22 -22
  233. package/vue/UiSection.vue +24 -23
  234. package/vue/UiSelect.vue +11 -10
  235. package/vue/UiSeparator.vue +2 -2
  236. package/vue/UiSidebar.vue +8 -8
  237. package/vue/UiSpinner.vue +6 -6
  238. package/vue/UiStack.vue +12 -12
  239. package/vue/UiStatusMessage.vue +17 -17
  240. package/vue/UiSwatch.vue +2 -2
  241. package/vue/UiSwitch.vue +38 -25
  242. package/vue/UiSwitcher.vue +7 -7
  243. package/vue/UiTable.vue +6 -6
  244. package/vue/UiTabs.vue +13 -13
  245. package/vue/UiText.vue +3 -2
  246. package/vue/UiTextarea.vue +10 -10
  247. package/vue/UiToast.vue +18 -18
  248. package/vue/UiToastRegion.vue +24 -24
  249. package/vue/UiTooltip.vue +15 -15
  250. package/vue/UiTopBar.vue +11 -11
  251. package/vue/UiTree.vue +5 -5
  252. package/vue/UiTreeItem.vue +73 -71
  253. package/vue/chunks/UiActionBar.js +1 -1
  254. package/vue/chunks/UiAffordanceScope.js +1 -1
  255. package/vue/chunks/UiAvatar.js +1 -1
  256. package/vue/chunks/UiAvatarGroup.js +1 -1
  257. package/vue/chunks/UiBadge.js +2 -2
  258. package/vue/chunks/UiBreadcrumbItem.js +1 -1
  259. package/vue/chunks/UiBreadcrumbs.js +1 -1
  260. package/vue/chunks/UiButton.js +2 -2
  261. package/vue/chunks/UiCallout.js +1 -1
  262. package/vue/chunks/UiCard.js +1 -1
  263. package/vue/chunks/UiCheckbox.js +1 -1
  264. package/vue/chunks/UiCluster.js +1 -1
  265. package/vue/chunks/UiColorPicker.js +326 -0
  266. package/vue/chunks/UiCombobox.js +1 -1
  267. package/vue/chunks/UiContainer.js +1 -1
  268. package/vue/chunks/UiContextMenu.js +1 -1
  269. package/vue/chunks/UiCover.js +1 -1
  270. package/vue/chunks/UiDescriptionItem.js +1 -1
  271. package/vue/chunks/UiDescriptionList.js +1 -1
  272. package/vue/chunks/UiDialog.js +1 -1
  273. package/vue/chunks/UiDisclosure.js +1 -1
  274. package/vue/chunks/UiEditable.js +1 -1
  275. package/vue/chunks/UiEditorImageToolbar.js +1 -1
  276. package/vue/chunks/UiEditorInsertTableGrid.js +1 -1
  277. package/vue/chunks/UiEditorLinkForm.js +1 -1
  278. package/vue/chunks/UiEditorMentionMenu.js +1 -1
  279. package/vue/chunks/UiEditorMentionMenuItem.js +1 -1
  280. package/vue/chunks/UiEditorSlashMenu.js +1 -1
  281. package/vue/chunks/UiEditorSlashMenuGroup.js +1 -1
  282. package/vue/chunks/UiEditorSlashMenuItem.js +1 -1
  283. package/vue/chunks/UiEditorSurface.js +1 -1
  284. package/vue/chunks/UiEditorTableContextMenu.js +1 -1
  285. package/vue/chunks/UiEditorTableOverlay.js +1 -1
  286. package/vue/chunks/UiEditorTableToolbar.js +1 -1
  287. package/vue/chunks/UiEditorToolbar.js +1 -1
  288. package/vue/chunks/UiFloatingActionButton.js +1 -1
  289. package/vue/chunks/UiFormField.js +2 -2
  290. package/vue/chunks/UiGrid.js +1 -1
  291. package/vue/chunks/UiIcon.js +5 -1
  292. package/vue/chunks/UiIconButton.js +2 -2
  293. package/vue/chunks/UiImage.js +1 -1
  294. package/vue/chunks/UiInput.js +1 -1
  295. package/vue/chunks/UiInputGroup.js +1 -1
  296. package/vue/chunks/UiList.js +1 -1
  297. package/vue/chunks/UiListItem.js +1 -1
  298. package/vue/chunks/UiListbox.js +1 -1
  299. package/vue/chunks/UiMenu.js +1 -1
  300. package/vue/chunks/UiMenuGroup.js +1 -1
  301. package/vue/chunks/UiMenuItem.js +1 -1
  302. package/vue/chunks/UiMeter.js +1 -1
  303. package/vue/chunks/UiNavItem.js +1 -1
  304. package/vue/chunks/UiPageHeader.js +1 -1
  305. package/vue/chunks/UiPopover.js +1 -1
  306. package/vue/chunks/UiRadio.js +1 -1
  307. package/vue/chunks/UiRadioGroup.js +1 -1
  308. package/vue/chunks/UiReel.js +1 -1
  309. package/vue/chunks/UiScrollArea.js +1 -1
  310. package/vue/chunks/UiSearchResultRow.js +1 -1
  311. package/vue/chunks/UiSearchShell.js +1 -1
  312. package/vue/chunks/UiSection.js +1 -1
  313. package/vue/chunks/UiSelect.js +1 -1
  314. package/vue/chunks/UiSeparator.js +1 -1
  315. package/vue/chunks/UiSidebar.js +1 -1
  316. package/vue/chunks/UiSpinner.js +1 -1
  317. package/vue/chunks/UiStack.js +1 -1
  318. package/vue/chunks/UiStatusMessage.js +1 -1
  319. package/vue/chunks/UiSwatch.js +1 -1
  320. package/vue/chunks/UiSwitch.js +1 -1
  321. package/vue/chunks/UiSwitcher.js +1 -1
  322. package/vue/chunks/UiTable.js +1 -1
  323. package/vue/chunks/UiTabs.js +3 -3
  324. package/vue/chunks/UiText.js +1 -1
  325. package/vue/chunks/UiTextarea.js +1 -1
  326. package/vue/chunks/UiToast.js +1 -1
  327. package/vue/chunks/UiToastRegion.js +1 -1
  328. package/vue/chunks/UiTooltip.js +1 -1
  329. package/vue/chunks/UiTopBar.js +1 -1
  330. package/vue/chunks/UiTree.js +1 -1
  331. package/vue/chunks/UiTreeItem.js +1 -1
  332. package/vue/components.css +1857 -1654
  333. package/vue/editor/LoomaEditor.d.ts +18 -2
  334. package/vue/editor/index.d.ts +2 -1
  335. package/vue/editor/index.js +147 -16
  336. package/vue/index.d.ts +1 -0
  337. package/vue/index.js +3 -2
@@ -1,3 +1,4 @@
1
+ import { type LoomaFileDescriptor } from "../../editor/file-uploads.js";
1
2
  import "../../components/ui-editor-surface/ui-editor-surface.css";
2
3
  import "./looma-editor.css";
3
4
  import { type AnyExtension, type Editor, type JSONContent } from "@tiptap/core";
@@ -77,6 +78,10 @@ export type LoomaMentionQuery = LoomaResponder<LoomaMentionQueryDetail, LoomaMen
77
78
  * @failure A rejection leaves the document unchanged and emits `uploadError`.
78
79
  */
79
80
  export type LoomaImageUploader = LoomaResponder<LoomaImageUploadDetail, LoomaImageDescriptor>;
81
+ /** Uploads a file and returns its retained link; rejection leaves authored content unchanged. */
82
+ export type LoomaFileUploader = LoomaResponder<{
83
+ file: File;
84
+ }, LoomaFileDescriptor>;
80
85
  /**
81
86
  * Turnkey Vue editor that composes Looma's framework-neutral Tiptap extensions
82
87
  * with declarative menus, image delivery, and table interaction chrome.
@@ -174,7 +179,12 @@ export declare const LoomaEditor: import("vue").DefineComponent<import("vue").Ex
174
179
  type: StringConstructor;
175
180
  default: string;
176
181
  };
177
- /** Answers `image-upload`: uploads a pasted, dropped, or chosen image and returns the image to insert. */
182
+ /** Answers `file-upload` with a retained ordinary file link. */
183
+ fileUpload: {
184
+ type: PropType<LoomaFileUploader | undefined>;
185
+ default: undefined;
186
+ };
187
+ /** Answers `image-upload` with the image to insert. */
178
188
  imageUpload: {
179
189
  type: PropType<LoomaImageUploader | undefined>;
180
190
  default: undefined;
@@ -324,7 +334,12 @@ export declare const LoomaEditor: import("vue").DefineComponent<import("vue").Ex
324
334
  type: StringConstructor;
325
335
  default: string;
326
336
  };
327
- /** Answers `image-upload`: uploads a pasted, dropped, or chosen image and returns the image to insert. */
337
+ /** Answers `file-upload` with a retained ordinary file link. */
338
+ fileUpload: {
339
+ type: PropType<LoomaFileUploader | undefined>;
340
+ default: undefined;
341
+ };
342
+ /** Answers `image-upload` with the image to insert. */
328
343
  imageUpload: {
329
344
  type: PropType<LoomaImageUploader | undefined>;
330
345
  default: undefined;
@@ -402,6 +417,7 @@ export declare const LoomaEditor: import("vue").DefineComponent<import("vue").Ex
402
417
  linkSearch: LoomaLinkSearch | undefined;
403
418
  linkResolve: LoomaLinkResolve | undefined;
404
419
  imageUpload: LoomaImageUploader | undefined;
420
+ fileUpload: LoomaFileUploader | undefined;
405
421
  modelValue: JSONContent;
406
422
  contentDensity: "comfortable" | "compact";
407
423
  mentionItems: LoomaMentionItem[];
@@ -1,4 +1,5 @@
1
1
  export * from "@threadlabs/looma/editor";
2
2
  export * from "./primitives.js";
3
- export { LoomaEditor, type LoomaEditorToolbarMode, type LoomaEditorSelectionAction, type LoomaEditorSelectionActionDetail, type LoomaEditorRangeAction, type LoomaEditorRangeActionDetail, type LoomaEditorExtensions, type LoomaEditorSlashCommands, type LoomaSlashCommandsDetail, type LoomaLinkTarget, type LoomaLinkSearch, type LoomaLinkSearchDetail, type LoomaLinkResolve, type LoomaLinkResolveDetail, type LoomaMentionQuery, type LoomaMentionQueryDetail, type LoomaImageUploader, type LoomaImageUploadDetail, type LoomaRequestInit, type LoomaResponder, } from "./LoomaEditor.js";
3
+ export { LoomaEditor, type LoomaEditorToolbarMode, type LoomaEditorSelectionAction, type LoomaEditorSelectionActionDetail, type LoomaEditorRangeAction, type LoomaEditorRangeActionDetail, type LoomaEditorExtensions, type LoomaEditorSlashCommands, type LoomaSlashCommandsDetail, type LoomaLinkTarget, type LoomaLinkSearch, type LoomaLinkSearchDetail, type LoomaLinkResolve, type LoomaLinkResolveDetail, type LoomaMentionQuery, type LoomaMentionQueryDetail, type LoomaFileUploader, type LoomaImageUploader, type LoomaImageUploadDetail, type LoomaRequestInit, type LoomaResponder, } from "./LoomaEditor.js";
4
4
  export type { LoomaImageActivationDetail, LoomaImageActivationTrigger, LoomaImageAttributeResolver, LoomaImageSourceResolver, LoomaImageDescriptor, LoomaImageRenditionErrorDetail, LoomaImageRenditionAttributes, } from "../../editor/image-delivery.js";
5
+ export type { LoomaFileDescriptor } from "../../editor/file-uploads.js";
@@ -47,6 +47,73 @@ var EDITOR_ADAPTER_COMPONENT_TAG_MAP = {
47
47
  EditorFootnoteEditor: "ui-editor-footnote-editor"
48
48
  };
49
49
  //#endregion
50
+ //#region src/editor/file-uploads.ts
51
+ /** Captures the caret before asynchronous transport; later transactions map that caret. */
52
+ function createFileUploads(options) {
53
+ let active;
54
+ const state = (uploading, progress = null) => options.onState?.({
55
+ uploading,
56
+ progress
57
+ });
58
+ return {
59
+ cancel() {
60
+ active?.abort();
61
+ state(false);
62
+ },
63
+ async insert(file) {
64
+ const upload = options.upload();
65
+ if (!upload || options.editor.isDestroyed) return;
66
+ active?.abort();
67
+ const controller = new AbortController();
68
+ active = controller;
69
+ const { editor } = options;
70
+ let position = editor.state.selection.from;
71
+ const map = ({ transaction }) => {
72
+ position = transaction.mapping.map(position);
73
+ };
74
+ editor.on("transaction", map);
75
+ state(true);
76
+ try {
77
+ const answer = await upload(file, {
78
+ signal: controller.signal,
79
+ progress: (loaded, total) => {
80
+ if (!controller.signal.aborted) state(true, {
81
+ loaded,
82
+ total
83
+ });
84
+ }
85
+ });
86
+ if (!answer || controller.signal.aborted || editor.isDestroyed || !editor.isEditable) return;
87
+ if (!/^(?:https?:\/\/|\/(?!\/))/.test(answer.href) || !Number.isSafeInteger(answer.size) || answer.size < 0) throw new Error("Invalid file descriptor");
88
+ const size = answer.size < 1e3 ? `${answer.size} B` : answer.size < 1e6 ? `${Math.ceil(answer.size / 1e3)} KB` : `${Number((answer.size / 1e6).toFixed(1))} MB`;
89
+ editor.chain().focus().insertContentAt(position, [{
90
+ type: "text",
91
+ text: answer.name || file.name,
92
+ marks: [{
93
+ type: "link",
94
+ attrs: {
95
+ href: answer.href,
96
+ target: "_blank",
97
+ rel: "noopener noreferrer"
98
+ }
99
+ }]
100
+ }, {
101
+ type: "text",
102
+ text: ` (${answer.contentType || "application/octet-stream"}, ${size}) `
103
+ }]).run();
104
+ } catch (error) {
105
+ if (!controller.signal.aborted) options.onError(error, file);
106
+ } finally {
107
+ editor.off("transaction", map);
108
+ if (active === controller) {
109
+ active = void 0;
110
+ state(false);
111
+ }
112
+ }
113
+ }
114
+ };
115
+ }
116
+ //#endregion
50
117
  //#region src/components/shared/overlay.js
51
118
  function stateFor$1(document) {
52
119
  const key = Symbol.for("@threadlabs/looma/overlay-stack/v1");
@@ -526,7 +593,7 @@ function createAnchoredSurface$1(surface, options = {}) {
526
593
  });
527
594
  };
528
595
  surface.style.position = "fixed";
529
- surface.style.margin = "0";
596
+ surface.style.setProperty("margin", "0", "important");
530
597
  const presentation = createViewportSurface$1(surface, {
531
598
  position,
532
599
  bare: options.bare
@@ -4864,7 +4931,7 @@ function createAnchoredSurface(surface, options = {}) {
4864
4931
  });
4865
4932
  };
4866
4933
  surface.style.position = "fixed";
4867
- surface.style.margin = "0";
4934
+ surface.style.setProperty("margin", "0", "important");
4868
4935
  const presentation = createViewportSurface(surface, {
4869
4936
  position,
4870
4937
  bare: options.bare
@@ -5406,9 +5473,13 @@ function connect$9(host) {
5406
5473
  };
5407
5474
  const wire = () => {
5408
5475
  const label = element.querySelector("[slot=\"label\"], label");
5409
- const input = element.querySelector("input, textarea, select");
5410
- const help = element.querySelector(":scope > .help > *, [slot=\"help\"]");
5411
- const error = element.querySelector(":scope > .error > *, [slot=\"error\"], [role=\"alert\"]");
5476
+ const selector = "[data-ui-field-control], input:not([type=hidden]), textarea, select";
5477
+ const target = label?.getAttribute("for") ? element.ownerDocument.getElementById(label.getAttribute("for")) : null;
5478
+ const input = (target && element.contains(target) ? target.matches(selector) ? target : target.querySelector(selector) : null) ?? element.querySelector(selector);
5479
+ const helpRegion = element.querySelector(":scope > .help");
5480
+ const help = element.querySelector(":scope > .help > *, [slot=\"help\"]") ?? (helpRegion?.textContent.trim() ? helpRegion : null);
5481
+ const errorRegion = element.querySelector(":scope > .error");
5482
+ const error = element.querySelector(":scope > .error > *, [slot=\"error\"], [role=\"alert\"]") ?? (errorRegion?.textContent.trim() ? errorRegion : null);
5412
5483
  if (input !== activeInput) {
5413
5484
  removeOwned(activeInput);
5414
5485
  activeInput = input;
@@ -5417,7 +5488,7 @@ function connect$9(host) {
5417
5488
  if (!input) return;
5418
5489
  if (DEV) warnOnce(warned, fieldProblems(label, input), element);
5419
5490
  if (!input.id) input.id = id("form-field-input");
5420
- if (label && !label.getAttribute("for")) label.setAttribute("for", input.id);
5491
+ if (label && (!label.getAttribute("for") || target && target !== input && target.contains(input))) label.setAttribute("for", input.id);
5421
5492
  const external = descriptionIds(input).filter((value) => !owned.has(value));
5422
5493
  const described = [];
5423
5494
  if (help) {
@@ -5433,6 +5504,7 @@ function connect$9(host) {
5433
5504
  if (next && input.getAttribute("aria-describedby") !== next) input.setAttribute("aria-describedby", next);
5434
5505
  else if (!next && input.hasAttribute("aria-describedby")) input.removeAttribute("aria-describedby");
5435
5506
  input.disabled = Boolean(host.props.disabled.value);
5507
+ if (input.matches("[data-ui-field-control]")) for (const value of element.querySelectorAll("[data-ui-field-value]")) value.disabled = input.disabled;
5436
5508
  input.required = Boolean(host.props.required.value);
5437
5509
  input.setAttribute("aria-invalid", String(Boolean(host.props.invalid.value)));
5438
5510
  };
@@ -6604,6 +6676,10 @@ function createUiIcon(options = {}, html) {
6604
6676
  "tag": "path",
6605
6677
  "d": "M3 9h18"
6606
6678
  }],
6679
+ "paperclip": [{
6680
+ "tag": "path",
6681
+ "d": "m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551"
6682
+ }],
6607
6683
  "pencil": [{
6608
6684
  "tag": "path",
6609
6685
  "d": "M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z"
@@ -14546,7 +14622,8 @@ var EDITOR_REQUESTS = {
14546
14622
  "mention-query": "mentionQuery",
14547
14623
  "link-search": "linkSearch",
14548
14624
  "link-resolve": "linkResolve",
14549
- "image-upload": "imageUpload"
14625
+ "image-upload": "imageUpload",
14626
+ "file-upload": "fileUpload"
14550
14627
  };
14551
14628
  var EDITOR_REQUEST_NAMES = Object.keys(EDITOR_REQUESTS);
14552
14629
  var EMPTY_DOCUMENT = {
@@ -14680,7 +14757,12 @@ var LoomaEditor = defineComponent({
14680
14757
  type: String,
14681
14758
  default: "Item"
14682
14759
  },
14683
- /** Answers `image-upload`: uploads a pasted, dropped, or chosen image and returns the image to insert. */
14760
+ /** Answers `file-upload` with a retained ordinary file link. */
14761
+ fileUpload: {
14762
+ type: Function,
14763
+ default: void 0
14764
+ },
14765
+ /** Answers `image-upload` with the image to insert. */
14684
14766
  imageUpload: {
14685
14767
  type: Function,
14686
14768
  default: void 0
@@ -14750,6 +14832,12 @@ var LoomaEditor = defineComponent({
14750
14832
  const formatAnchorId = `looma-editor-format-${useId().replace(/[^a-zA-Z0-9_-]/g, "")}`;
14751
14833
  const formatOpen = ref(false);
14752
14834
  const fileInput = ref(null);
14835
+ const attachmentInput = ref(null);
14836
+ const fileUploadState = shallowRef({
14837
+ uploading: false,
14838
+ progress: null
14839
+ });
14840
+ let attachmentUploads;
14753
14841
  const tablePickerAnchorId = `looma-editor-table-picker-${useId().replace(/[^a-zA-Z0-9_-]/g, "")}`;
14754
14842
  const blockActionAnchorId = `ui-block-tools-${useId().replace(/[^a-zA-Z0-9_-]/g, "")}`;
14755
14843
  const linkAnchorId = `looma-editor-link-${useId().replace(/[^a-zA-Z0-9_-]/g, "")}`;
@@ -14918,9 +15006,11 @@ var LoomaEditor = defineComponent({
14918
15006
  let slashDefaults;
14919
15007
  const defaultSlashCommands = () => {
14920
15008
  const uploads = answers("image-upload");
14921
- if (slashDefaults?.uploads !== uploads) slashDefaults = {
15009
+ const files = answers("file-upload");
15010
+ if (slashDefaults?.uploads !== uploads || slashDefaults?.files !== files) slashDefaults = {
14922
15011
  uploads,
14923
- commands: getDefaultSlashCommands(uploads ? () => fileInput.value?.click() : void 0, openChipEditor, () => openLinkEditor())
15012
+ files,
15013
+ commands: getDefaultSlashCommands(uploads ? () => fileInput.value?.click() : void 0, openChipEditor, () => openLinkEditor(), files ? () => attachmentInput.value?.click() : void 0)
14924
15014
  };
14925
15015
  return slashDefaults.commands;
14926
15016
  };
@@ -14946,7 +15036,7 @@ var LoomaEditor = defineComponent({
14946
15036
  const current = new Set(EDITOR_REQUEST_NAMES.filter(answers));
14947
15037
  const arrived = (name) => current.has(name) && !responders.has(name);
14948
15038
  const extensionsArrived = arrived("extensions");
14949
- const slashChanged = arrived("slash-commands") || current.has("image-upload") !== responders.has("image-upload");
15039
+ const slashChanged = arrived("slash-commands") || current.has("image-upload") !== responders.has("image-upload") || current.has("file-upload") !== responders.has("file-upload");
14950
15040
  responders = current;
14951
15041
  if (extensionsArrived) askExtensions();
14952
15042
  if (slashChanged) askSlashCommands();
@@ -15122,6 +15212,14 @@ var LoomaEditor = defineComponent({
15122
15212
  uploadState.value = imageUploads.state;
15123
15213
  });
15124
15214
  uploads = imageUploads;
15215
+ attachmentUploads = createFileUploads({
15216
+ editor: session.editor,
15217
+ upload: () => (file, init) => ask("file-upload", { file }, init),
15218
+ onError: (error, file) => emit("uploadError", error, file),
15219
+ onState: (value) => {
15220
+ fileUploadState.value = value;
15221
+ }
15222
+ });
15125
15223
  const instance = session.editor;
15126
15224
  formatting = createFormattingSelection({
15127
15225
  editor: instance,
@@ -15142,6 +15240,7 @@ var LoomaEditor = defineComponent({
15142
15240
  footnoteEditing?.close();
15143
15241
  formatting?.destroy();
15144
15242
  uploads?.cancel();
15243
+ attachmentUploads?.cancel();
15145
15244
  previous.destroy();
15146
15245
  build(content);
15147
15246
  };
@@ -15167,6 +15266,7 @@ var LoomaEditor = defineComponent({
15167
15266
  onBeforeUnmount(() => {
15168
15267
  const element = session?.editor.options.element;
15169
15268
  element?.parentNode?.replaceChild(element.cloneNode(true), element);
15269
+ attachmentUploads?.cancel();
15170
15270
  connection.abort();
15171
15271
  stopAnnouncements?.();
15172
15272
  linkEditing?.destroy();
@@ -15712,6 +15812,12 @@ var LoomaEditor = defineComponent({
15712
15812
  if (dragLeaveTimer) clearTimeout(dragLeaveTimer);
15713
15813
  if (tablePointerFrame !== null) cancelAnimationFrame(tablePointerFrame);
15714
15814
  });
15815
+ const onAttachmentChange = async (event) => {
15816
+ const input = event.target;
15817
+ const file = input.files?.[0];
15818
+ input.value = "";
15819
+ if (file) await attachmentUploads?.insert(file);
15820
+ };
15715
15821
  const onFileChange = async (event) => {
15716
15822
  const input = event.target;
15717
15823
  const files = Array.from(input.files ?? []);
@@ -15954,6 +16060,7 @@ var LoomaEditor = defineComponent({
15954
16060
  variant: tablePickerOpen.value ? "solid" : "ghost",
15955
16061
  "aria-expanded": tablePickerOpen.value ? "true" : "false"
15956
16062
  }, () => loomaIcon("table")),
16063
+ commandButton("Attach file", "paperclip", false, fileUploadState.value.uploading || !answers("file-upload"), () => attachmentInput.value?.click()),
15957
16064
  commandButton(uploadState.value.uploading ? "Uploading image" : "Insert image", "image", false, uploadState.value.uploading || !answers("image-upload"), () => fileInput.value?.click()),
15958
16065
  h("span", {
15959
16066
  class: "divider",
@@ -16123,8 +16230,10 @@ var LoomaEditor = defineComponent({
16123
16230
  style: mobileToolbarStyle.value,
16124
16231
  role: "toolbar",
16125
16232
  "aria-label": mobileToolbarMode.value === "table" ? "Table editing" : "Text formatting"
16126
- }, mobileToolbarMode.value === "table" ? [h("button", {
16127
- class: "looma-editor__mobile-toolbar-back",
16233
+ }, mobileToolbarMode.value === "table" ? [h(Button, {
16234
+ size: "sm",
16235
+ variant: "ghost",
16236
+ tone: "neutral",
16128
16237
  type: "button",
16129
16238
  "aria-label": "Formatting tools",
16130
16239
  onClick: () => {
@@ -16132,7 +16241,10 @@ var LoomaEditor = defineComponent({
16132
16241
  editor.value?.commands.focus();
16133
16242
  nextTick(updateMobileViewport);
16134
16243
  }
16135
- }, [loomaIcon("chevron-left"), h("span", "Formatting")]), h(EditorTableToolbar, tableProps)] : [renderToolbar(instance)]) : null,
16244
+ }, {
16245
+ start: () => loomaIcon("chevron-left"),
16246
+ default: () => "Formatting"
16247
+ }), h(EditorTableToolbar, tableProps)] : [renderToolbar(instance)]) : null,
16136
16248
  h("input", {
16137
16249
  ref: fileInput,
16138
16250
  class: "looma-editor__file-input",
@@ -16143,6 +16255,22 @@ var LoomaEditor = defineComponent({
16143
16255
  "aria-hidden": "true",
16144
16256
  onChange: onFileChange
16145
16257
  }),
16258
+ h("input", {
16259
+ ref: attachmentInput,
16260
+ class: "looma-editor__file-input",
16261
+ type: "file",
16262
+ tabindex: -1,
16263
+ "aria-hidden": "true",
16264
+ onChange: onAttachmentChange
16265
+ }),
16266
+ fileUploadState.value.uploading ? h(StatusMessage, { kind: "loading" }, {
16267
+ default: () => "Attaching file…",
16268
+ action: () => h(Button, {
16269
+ size: "sm",
16270
+ variant: "ghost",
16271
+ onClick: () => attachmentUploads?.cancel()
16272
+ }, () => "Cancel")
16273
+ }) : null,
16146
16274
  uploadState.value.uploading ? h(StatusMessage, { kind: "loading" }, {
16147
16275
  default: () => uploadProgressText(uploadState.value.progress),
16148
16276
  action: () => h(Button, {
@@ -16154,13 +16282,16 @@ var LoomaEditor = defineComponent({
16154
16282
  uploadState.value.failed ? h("div", {
16155
16283
  class: "looma-editor__upload-error",
16156
16284
  role: "alert"
16157
- }, [h("span", "Couldn’t upload image."), h("button", {
16285
+ }, [h("span", "Couldn’t upload image."), h(Button, {
16286
+ size: "sm",
16287
+ variant: "ghost",
16288
+ tone: "neutral",
16158
16289
  type: "button",
16159
16290
  disabled: uploadState.value.uploading,
16160
16291
  onClick: () => {
16161
16292
  uploads?.retry();
16162
16293
  }
16163
- }, uploadState.value.uploading ? "Retrying…" : "Retry")]) : null,
16294
+ }, () => uploadState.value.uploading ? "Retrying…" : "Retry")]) : null,
16164
16295
  dragOver.value ? h("div", {
16165
16296
  class: "looma-editor__drop-overlay",
16166
16297
  "aria-hidden": "true"
package/vue/index.d.ts CHANGED
@@ -10,6 +10,7 @@ export { default as Callout } from "./UiCallout.js";
10
10
  export { default as Card } from "./UiCard.js";
11
11
  export { default as Checkbox } from "./UiCheckbox.js";
12
12
  export { default as Cluster } from "./UiCluster.js";
13
+ export { default as ColorPicker } from "./UiColorPicker.js";
13
14
  export { default as Combobox } from "./UiCombobox.js";
14
15
  export { default as Container } from "./UiContainer.js";
15
16
  export { default as ContextMenu } from "./UiContextMenu.js";
package/vue/index.js CHANGED
@@ -12,6 +12,8 @@ import { t as UiCallout_default } from "./chunks/UiCallout.js";
12
12
  import { t as UiCard_default } from "./chunks/UiCard.js";
13
13
  import { t as UiCheckbox_default } from "./chunks/UiCheckbox.js";
14
14
  import { t as UiCluster_default } from "./chunks/UiCluster.js";
15
+ import { t as UiInput_default } from "./chunks/UiInput.js";
16
+ import { t as UiColorPicker_default } from "./chunks/UiColorPicker.js";
15
17
  import { t as UiTooltip_default } from "./chunks/UiTooltip.js";
16
18
  import { t as UiCombobox_default } from "./chunks/UiCombobox.js";
17
19
  import { t as UiContainer_default } from "./chunks/UiContainer.js";
@@ -26,7 +28,6 @@ import { t as UiEditable_default } from "./chunks/UiEditable.js";
26
28
  import { t as UiMenu_default } from "./chunks/UiMenu.js";
27
29
  import { t as UiMenuItem_default } from "./chunks/UiMenuItem.js";
28
30
  import { t as UiEditorBlockActions_default } from "./chunks/UiEditorBlockActions.js";
29
- import { t as UiInput_default } from "./chunks/UiInput.js";
30
31
  import { t as UiRadioGroup_default } from "./chunks/UiRadioGroup.js";
31
32
  import { t as UiStack_default } from "./chunks/UiStack.js";
32
33
  import { t as UiSwatch_default } from "./chunks/UiSwatch.js";
@@ -82,4 +83,4 @@ import { t as UiTopBar_default } from "./chunks/UiTopBar.js";
82
83
  import { t as UiTree_default } from "./chunks/UiTree.js";
83
84
  import { t as UiTreeItem_default } from "./chunks/UiTreeItem.js";
84
85
  import { trackInputModality } from "@threadlabs/looma/components/shared/input-modality.js";
85
- export { UiActionBar_default as ActionBar, UiAffordanceScope_default as AffordanceScope, UiAvatar_default as Avatar, UiAvatarGroup_default as AvatarGroup, UiBadge_default as Badge, UiBreadcrumbItem_default as BreadcrumbItem, UiBreadcrumbs_default as Breadcrumbs, UiButton_default as Button, UiCallout_default as Callout, UiCard_default as Card, UiCheckbox_default as Checkbox, UiCluster_default as Cluster, UiCombobox_default as Combobox, UiContainer_default as Container, UiContextMenu_default as ContextMenu, UiCover_default as Cover, UiDescriptionItem_default as DescriptionItem, UiDescriptionList_default as DescriptionList, UiDialog_default as Dialog, UiDisclosure_default as Disclosure, UiEditable_default as Editable, UiEditorBlockActions_default as EditorBlockActions, UiEditorChipEditor_default as EditorChipEditor, UiEditorCodeLanguage_default as EditorCodeLanguage, UiEditorFootnoteEditor_default as EditorFootnoteEditor, UiEditorImageToolbar_default as EditorImageToolbar, UiEditorInsertTableGrid_default as EditorInsertTableGrid, UiEditorLinkCard_default as EditorLinkCard, UiEditorLinkForm_default as EditorLinkForm, UiEditorMentionMenu_default as EditorMentionMenu, UiEditorMentionMenuItem_default as EditorMentionMenuItem, UiEditorSlashMenu_default as EditorSlashMenu, UiEditorSlashMenuGroup_default as EditorSlashMenuGroup, UiEditorSlashMenuItem_default as EditorSlashMenuItem, UiEditorSurface_default as EditorSurface, UiEditorTableContextMenu_default as EditorTableContextMenu, UiEditorTableOverlay_default as EditorTableOverlay, UiEditorTableToolbar_default as EditorTableToolbar, UiEditorToolbar_default as EditorToolbar, UiFloatingActionButton_default as FloatingActionButton, UiFormField_default as FormField, UiGrid_default as Grid, UiIcon_default as Icon, UiIconButton_default as IconButton, UiImage_default as Image, UiInput_default as Input, UiInputGroup_default as InputGroup, UiList_default as List, UiListItem_default as ListItem, UiListbox_default as Listbox, UiMenu_default as Menu, UiMenuGroup_default as MenuGroup, UiMenuItem_default as MenuItem, UiMeter_default as Meter, UiNavItem_default as NavItem, UiPageHeader_default as PageHeader, UiPopover_default as Popover, UiRadio_default as Radio, UiRadioGroup_default as RadioGroup, UiReel_default as Reel, UiScrollArea_default as ScrollArea, UiSearchResultRow_default as SearchResultRow, UiSearchShell_default as SearchShell, UiSection_default as Section, UiSelect_default as Select, UiSeparator_default as Separator, UiSidebar_default as Sidebar, UiSpinner_default as Spinner, UiStack_default as Stack, UiStatusMessage_default as StatusMessage, UiSwatch_default as Swatch, UiSwitch_default as Switch, UiSwitcher_default as Switcher, UiTable_default as Table, UiTabs_default as Tabs, UiText_default as Text, UiTextarea_default as Textarea, UiToast_default as Toast, UiToastRegion_default as ToastRegion, UiTooltip_default as Tooltip, UiTopBar_default as TopBar, UiTree_default as Tree, UiTreeItem_default as TreeItem, trackInputModality };
86
+ export { UiActionBar_default as ActionBar, UiAffordanceScope_default as AffordanceScope, UiAvatar_default as Avatar, UiAvatarGroup_default as AvatarGroup, UiBadge_default as Badge, UiBreadcrumbItem_default as BreadcrumbItem, UiBreadcrumbs_default as Breadcrumbs, UiButton_default as Button, UiCallout_default as Callout, UiCard_default as Card, UiCheckbox_default as Checkbox, UiCluster_default as Cluster, UiColorPicker_default as ColorPicker, UiCombobox_default as Combobox, UiContainer_default as Container, UiContextMenu_default as ContextMenu, UiCover_default as Cover, UiDescriptionItem_default as DescriptionItem, UiDescriptionList_default as DescriptionList, UiDialog_default as Dialog, UiDisclosure_default as Disclosure, UiEditable_default as Editable, UiEditorBlockActions_default as EditorBlockActions, UiEditorChipEditor_default as EditorChipEditor, UiEditorCodeLanguage_default as EditorCodeLanguage, UiEditorFootnoteEditor_default as EditorFootnoteEditor, UiEditorImageToolbar_default as EditorImageToolbar, UiEditorInsertTableGrid_default as EditorInsertTableGrid, UiEditorLinkCard_default as EditorLinkCard, UiEditorLinkForm_default as EditorLinkForm, UiEditorMentionMenu_default as EditorMentionMenu, UiEditorMentionMenuItem_default as EditorMentionMenuItem, UiEditorSlashMenu_default as EditorSlashMenu, UiEditorSlashMenuGroup_default as EditorSlashMenuGroup, UiEditorSlashMenuItem_default as EditorSlashMenuItem, UiEditorSurface_default as EditorSurface, UiEditorTableContextMenu_default as EditorTableContextMenu, UiEditorTableOverlay_default as EditorTableOverlay, UiEditorTableToolbar_default as EditorTableToolbar, UiEditorToolbar_default as EditorToolbar, UiFloatingActionButton_default as FloatingActionButton, UiFormField_default as FormField, UiGrid_default as Grid, UiIcon_default as Icon, UiIconButton_default as IconButton, UiImage_default as Image, UiInput_default as Input, UiInputGroup_default as InputGroup, UiList_default as List, UiListItem_default as ListItem, UiListbox_default as Listbox, UiMenu_default as Menu, UiMenuGroup_default as MenuGroup, UiMenuItem_default as MenuItem, UiMeter_default as Meter, UiNavItem_default as NavItem, UiPageHeader_default as PageHeader, UiPopover_default as Popover, UiRadio_default as Radio, UiRadioGroup_default as RadioGroup, UiReel_default as Reel, UiScrollArea_default as ScrollArea, UiSearchResultRow_default as SearchResultRow, UiSearchShell_default as SearchShell, UiSection_default as Section, UiSelect_default as Select, UiSeparator_default as Separator, UiSidebar_default as Sidebar, UiSpinner_default as Spinner, UiStack_default as Stack, UiStatusMessage_default as StatusMessage, UiSwatch_default as Swatch, UiSwitch_default as Switch, UiSwitcher_default as Switcher, UiTable_default as Table, UiTabs_default as Tabs, UiText_default as Text, UiTextarea_default as Textarea, UiToast_default as Toast, UiToastRegion_default as ToastRegion, UiTooltip_default as Tooltip, UiTopBar_default as TopBar, UiTree_default as Tree, UiTreeItem_default as TreeItem, trackInputModality };