@threadlabs/looma 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/README.md +43 -12
  2. package/components/shared/editor.js +69 -0
  3. package/components/shared/input-modality.js +20 -0
  4. package/components/shared/overlay.js +281 -0
  5. package/components/shared/trigger.js +17 -0
  6. package/components/ui-affordance-scope/ui-affordance-scope.html +22 -0
  7. package/components/ui-affordance-scope/ui-affordance-scope.js +76 -0
  8. package/components/ui-avatar/ui-avatar.html +59 -0
  9. package/components/ui-avatar/ui-avatar.js +47 -0
  10. package/components/ui-avatar-group/ui-avatar-group.html +62 -0
  11. package/components/ui-avatar-group/ui-avatar-group.js +27 -0
  12. package/components/ui-badge/ui-badge.html +94 -0
  13. package/components/ui-button/ui-button.html +198 -0
  14. package/components/ui-callout/ui-callout.html +104 -0
  15. package/components/ui-checkbox/ui-checkbox.html +107 -0
  16. package/components/ui-checkbox/ui-checkbox.js +24 -0
  17. package/components/ui-cluster/ui-cluster.html +49 -0
  18. package/components/ui-combobox/ui-combobox.html +377 -0
  19. package/components/ui-combobox/ui-combobox.js +432 -0
  20. package/components/ui-container/ui-container.html +39 -0
  21. package/components/ui-context-menu/ui-context-menu.html +75 -0
  22. package/components/ui-context-menu/ui-context-menu.js +143 -0
  23. package/components/ui-dialog/ui-dialog.html +178 -0
  24. package/components/ui-dialog/ui-dialog.js +105 -0
  25. package/components/ui-disclosure/ui-disclosure.html +109 -0
  26. package/components/ui-disclosure/ui-disclosure.js +28 -0
  27. package/components/ui-editable/ui-editable.html +163 -0
  28. package/components/ui-editable/ui-editable.js +113 -0
  29. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.html +97 -0
  30. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.js +71 -0
  31. package/components/ui-editor-mention-menu/ui-editor-mention-menu.html +157 -0
  32. package/components/ui-editor-mention-menu/ui-editor-mention-menu.js +50 -0
  33. package/components/ui-editor-slash-menu/ui-editor-slash-menu.html +197 -0
  34. package/components/ui-editor-slash-menu/ui-editor-slash-menu.js +44 -0
  35. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +164 -0
  36. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.js +75 -0
  37. package/components/ui-editor-table-overlay/ui-editor-table-overlay.html +422 -0
  38. package/components/ui-editor-table-overlay/ui-editor-table-overlay.js +119 -0
  39. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +271 -0
  40. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.js +54 -0
  41. package/components/ui-editor-toolbar/ui-editor-toolbar.html +110 -0
  42. package/components/ui-floating-action-button/ui-floating-action-button.html +83 -0
  43. package/components/ui-form-field/ui-form-field.html +45 -0
  44. package/components/ui-form-field/ui-form-field.js +71 -0
  45. package/components/ui-grid/ui-grid.html +46 -0
  46. package/components/ui-icon/ui-icon.html +34 -0
  47. package/components/ui-icon/ui-icon.js +8 -0
  48. package/components/ui-icon-button/ui-icon-button.html +167 -0
  49. package/components/ui-icon-button/ui-icon-button.js +7 -0
  50. package/components/ui-input/ui-input.html +81 -0
  51. package/components/ui-input/ui-input.js +7 -0
  52. package/components/ui-menu/ui-menu.html +87 -0
  53. package/components/ui-menu/ui-menu.js +114 -0
  54. package/components/ui-menu-item/ui-menu-item.html +37 -0
  55. package/components/ui-popover/ui-popover.html +85 -0
  56. package/components/ui-popover/ui-popover.js +70 -0
  57. package/components/ui-radio/ui-radio.html +57 -0
  58. package/components/ui-radio/ui-radio.js +25 -0
  59. package/components/ui-radio-group/ui-radio-group.html +51 -0
  60. package/components/ui-radio-group/ui-radio-group.js +42 -0
  61. package/components/ui-reel/ui-reel.html +67 -0
  62. package/components/ui-search-result-row/ui-search-result-row.html +101 -0
  63. package/components/ui-search-shell/ui-search-shell.html +142 -0
  64. package/components/ui-search-shell/ui-search-shell.js +60 -0
  65. package/components/ui-select/ui-select.html +87 -0
  66. package/components/ui-select/ui-select.js +16 -0
  67. package/components/ui-separator/ui-separator.html +22 -0
  68. package/components/ui-sidebar/ui-sidebar.html +183 -0
  69. package/components/ui-sidebar/ui-sidebar.js +178 -0
  70. package/components/ui-stack/ui-stack.html +59 -0
  71. package/components/ui-switch/ui-switch.html +95 -0
  72. package/components/ui-switch/ui-switch.js +24 -0
  73. package/components/ui-switcher/ui-switcher.html +65 -0
  74. package/components/ui-tabs/ui-tabs.html +134 -0
  75. package/components/ui-tabs/ui-tabs.js +81 -0
  76. package/components/ui-textarea/ui-textarea.html +80 -0
  77. package/components/ui-textarea/ui-textarea.js +7 -0
  78. package/components/ui-toast-region/ui-toast-region.html +127 -0
  79. package/components/ui-toast-region/ui-toast-region.js +119 -0
  80. package/components/ui-tooltip/ui-tooltip.html +122 -0
  81. package/components/ui-tooltip/ui-tooltip.js +134 -0
  82. package/components/ui-top-bar/ui-top-bar.html +53 -0
  83. package/components/ui-tree/ui-tree.html +29 -0
  84. package/components/ui-tree/ui-tree.js +250 -0
  85. package/components/ui-tree-item/ui-tree-item.html +326 -0
  86. package/components/ui-tree-item/ui-tree-item.js +94 -0
  87. package/dist/index.d.ts +4 -414
  88. package/dist/index.js +55 -657
  89. package/editor/chunks/extensions.js +7267 -0
  90. package/editor/chunks/table-backgrounds.js +51 -0
  91. package/editor/chunks/ui.js +92 -0
  92. package/editor/extensions/callout.d.ts +20 -0
  93. package/editor/extensions/index.d.ts +12 -441
  94. package/editor/extensions/index.js +3 -64
  95. package/editor/extensions/list-behavior.d.ts +7 -0
  96. package/editor/extensions/mention.d.ts +35 -0
  97. package/editor/extensions/preset.d.ts +42 -0
  98. package/editor/extensions/slash-command.d.ts +80 -0
  99. package/editor/extensions/smart-paste.d.ts +13 -0
  100. package/editor/extensions/table-commands.d.ts +114 -0
  101. package/editor/extensions/table-formatting.d.ts +60 -0
  102. package/editor/icons.d.ts +55 -0
  103. package/editor/index.d.ts +8 -6
  104. package/editor/index.js +96 -71
  105. package/editor/insert-table-grid.d.ts +7 -0
  106. package/editor/mention-contract.d.ts +78 -0
  107. package/editor/mention-menu.d.ts +9 -0
  108. package/editor/slash-menu.d.ts +29 -0
  109. package/editor/table-backgrounds.d.ts +43 -0
  110. package/editor/table-context-menu.d.ts +12 -0
  111. package/editor/table-overlay.d.ts +79 -0
  112. package/editor/ui.d.ts +10 -50
  113. package/editor/ui.js +3 -14
  114. package/editor/viewport.d.ts +15 -0
  115. package/package.json +84 -60
  116. package/styles/ui-affordance-scope.css +19 -0
  117. package/styles/ui-avatar-group.css +56 -0
  118. package/styles/ui-avatar.css +47 -0
  119. package/styles/ui-badge.css +91 -0
  120. package/styles/ui-button.css +206 -0
  121. package/styles/ui-callout.css +76 -0
  122. package/styles/ui-checkbox.css +98 -0
  123. package/styles/ui-cluster.css +46 -0
  124. package/styles/ui-combobox.css +213 -0
  125. package/styles/ui-container.css +36 -0
  126. package/styles/ui-context-menu.css +68 -0
  127. package/styles/ui-dialog.css +160 -0
  128. package/styles/ui-disclosure.css +95 -0
  129. package/styles/ui-editable.css +139 -0
  130. package/styles/ui-editor-insert-table-grid.css +65 -0
  131. package/styles/ui-editor-mention-menu.css +121 -0
  132. package/styles/ui-editor-slash-menu.css +179 -0
  133. package/styles/ui-editor-table-context-menu.css +118 -0
  134. package/styles/ui-editor-table-overlay.css +318 -0
  135. package/styles/ui-editor-table-toolbar.css +191 -0
  136. package/styles/ui-editor-toolbar.css +115 -0
  137. package/styles/ui-floating-action-button.css +82 -0
  138. package/styles/ui-form-field.css +36 -0
  139. package/styles/ui-grid.css +43 -0
  140. package/styles/ui-icon-button.css +169 -0
  141. package/styles/ui-icon.css +23 -0
  142. package/styles/ui-input.css +82 -0
  143. package/styles/ui-menu-item.css +34 -0
  144. package/styles/ui-menu.css +80 -0
  145. package/styles/ui-popover.css +76 -0
  146. package/styles/ui-radio-group.css +38 -0
  147. package/styles/ui-radio.css +46 -0
  148. package/styles/ui-reel.css +63 -0
  149. package/styles/ui-search-result-row.css +92 -0
  150. package/styles/ui-search-shell.css +128 -0
  151. package/styles/ui-select.css +86 -0
  152. package/styles/ui-separator.css +16 -0
  153. package/styles/ui-sidebar.css +166 -0
  154. package/styles/ui-stack.css +55 -0
  155. package/styles/ui-switch.css +88 -0
  156. package/styles/ui-switcher.css +61 -0
  157. package/styles/ui-tabs.css +114 -0
  158. package/styles/ui-textarea.css +77 -0
  159. package/styles/ui-toast-region.css +103 -0
  160. package/styles/ui-tooltip.css +113 -0
  161. package/styles/ui-top-bar.css +51 -0
  162. package/styles/ui-tree-item.css +267 -0
  163. package/styles/ui-tree.css +16 -0
  164. package/vanilla/UiAffordanceScope.d.ts +14 -0
  165. package/vanilla/UiAffordanceScope.js +30 -0
  166. package/vanilla/UiAvatar.d.ts +17 -0
  167. package/vanilla/UiAvatar.js +41 -0
  168. package/vanilla/UiAvatarGroup.d.ts +15 -0
  169. package/vanilla/UiAvatarGroup.js +40 -0
  170. package/vanilla/UiBadge.d.ts +15 -0
  171. package/vanilla/UiBadge.js +30 -0
  172. package/vanilla/UiButton.d.ts +16 -0
  173. package/vanilla/UiButton.js +32 -0
  174. package/vanilla/UiCallout.d.ts +14 -0
  175. package/vanilla/UiCallout.js +124 -0
  176. package/vanilla/UiCheckbox.d.ts +19 -0
  177. package/vanilla/UiCheckbox.js +47 -0
  178. package/vanilla/UiCluster.d.ts +15 -0
  179. package/vanilla/UiCluster.js +30 -0
  180. package/vanilla/UiCombobox.d.ts +42 -0
  181. package/vanilla/UiCombobox.js +194 -0
  182. package/vanilla/UiContainer.d.ts +15 -0
  183. package/vanilla/UiContainer.js +30 -0
  184. package/vanilla/UiContextMenu.d.ts +18 -0
  185. package/vanilla/UiContextMenu.js +35 -0
  186. package/vanilla/UiDialog.d.ts +19 -0
  187. package/vanilla/UiDialog.js +53 -0
  188. package/vanilla/UiDisclosure.d.ts +18 -0
  189. package/vanilla/UiDisclosure.js +49 -0
  190. package/vanilla/UiEditable.d.ts +22 -0
  191. package/vanilla/UiEditable.js +59 -0
  192. package/vanilla/UiEditorInsertTableGrid.d.ts +18 -0
  193. package/vanilla/UiEditorInsertTableGrid.js +46 -0
  194. package/vanilla/UiEditorMentionMenu.d.ts +21 -0
  195. package/vanilla/UiEditorMentionMenu.js +63 -0
  196. package/vanilla/UiEditorSlashMenu.d.ts +20 -0
  197. package/vanilla/UiEditorSlashMenu.js +74 -0
  198. package/vanilla/UiEditorTableContextMenu.d.ts +17 -0
  199. package/vanilla/UiEditorTableContextMenu.js +69 -0
  200. package/vanilla/UiEditorTableOverlay.d.ts +16 -0
  201. package/vanilla/UiEditorTableOverlay.js +113 -0
  202. package/vanilla/UiEditorTableToolbar.d.ts +18 -0
  203. package/vanilla/UiEditorTableToolbar.js +121 -0
  204. package/vanilla/UiEditorToolbar.d.ts +14 -0
  205. package/vanilla/UiEditorToolbar.js +30 -0
  206. package/vanilla/UiFloatingActionButton.d.ts +16 -0
  207. package/vanilla/UiFloatingActionButton.js +35 -0
  208. package/vanilla/UiFormField.d.ts +16 -0
  209. package/vanilla/UiFormField.js +54 -0
  210. package/vanilla/UiGrid.d.ts +15 -0
  211. package/vanilla/UiGrid.js +30 -0
  212. package/vanilla/UiIcon.d.ts +14 -0
  213. package/vanilla/UiIcon.js +40 -0
  214. package/vanilla/UiIconButton.d.ts +19 -0
  215. package/vanilla/UiIconButton.js +37 -0
  216. package/vanilla/UiInput.d.ts +18 -0
  217. package/vanilla/UiInput.js +37 -0
  218. package/vanilla/UiMenu.d.ts +19 -0
  219. package/vanilla/UiMenu.js +35 -0
  220. package/vanilla/UiMenuItem.d.ts +15 -0
  221. package/vanilla/UiMenuItem.js +43 -0
  222. package/vanilla/UiPopover.d.ts +18 -0
  223. package/vanilla/UiPopover.js +33 -0
  224. package/vanilla/UiRadio.d.ts +19 -0
  225. package/vanilla/UiRadio.js +48 -0
  226. package/vanilla/UiRadioGroup.d.ts +21 -0
  227. package/vanilla/UiRadioGroup.js +35 -0
  228. package/vanilla/UiReel.d.ts +16 -0
  229. package/vanilla/UiReel.js +34 -0
  230. package/vanilla/UiSearchResultRow.d.ts +15 -0
  231. package/vanilla/UiSearchResultRow.js +82 -0
  232. package/vanilla/UiSearchShell.d.ts +18 -0
  233. package/vanilla/UiSearchShell.js +74 -0
  234. package/vanilla/UiSelect.d.ts +18 -0
  235. package/vanilla/UiSelect.js +42 -0
  236. package/vanilla/UiSeparator.d.ts +14 -0
  237. package/vanilla/UiSeparator.js +28 -0
  238. package/vanilla/UiSidebar.d.ts +24 -0
  239. package/vanilla/UiSidebar.js +47 -0
  240. package/vanilla/UiStack.d.ts +16 -0
  241. package/vanilla/UiStack.js +32 -0
  242. package/vanilla/UiSwitch.d.ts +18 -0
  243. package/vanilla/UiSwitch.js +46 -0
  244. package/vanilla/UiSwitcher.d.ts +16 -0
  245. package/vanilla/UiSwitcher.js +32 -0
  246. package/vanilla/UiTabs.d.ts +18 -0
  247. package/vanilla/UiTabs.js +47 -0
  248. package/vanilla/UiTextarea.d.ts +19 -0
  249. package/vanilla/UiTextarea.js +40 -0
  250. package/vanilla/UiToastRegion.d.ts +20 -0
  251. package/vanilla/UiToastRegion.js +58 -0
  252. package/vanilla/UiTooltip.d.ts +21 -0
  253. package/vanilla/UiTooltip.js +34 -0
  254. package/vanilla/UiTopBar.d.ts +13 -0
  255. package/vanilla/UiTopBar.js +59 -0
  256. package/vanilla/UiTree.d.ts +18 -0
  257. package/vanilla/UiTree.js +31 -0
  258. package/vanilla/UiTreeItem.d.ts +26 -0
  259. package/vanilla/UiTreeItem.js +164 -0
  260. package/vanilla/index.js +48 -0
  261. package/vue/UiAffordanceScope.d.ts +18 -0
  262. package/vue/UiAffordanceScope.js +2 -0
  263. package/vue/UiAffordanceScope.vue +118 -0
  264. package/vue/UiAvatar.d.ts +23 -0
  265. package/vue/UiAvatar.js +2 -0
  266. package/vue/UiAvatar.vue +152 -0
  267. package/vue/UiAvatarGroup.d.ts +20 -0
  268. package/vue/UiAvatarGroup.js +2 -0
  269. package/vue/UiAvatarGroup.vue +167 -0
  270. package/vue/UiBadge.d.ts +20 -0
  271. package/vue/UiBadge.js +2 -0
  272. package/vue/UiBadge.vue +123 -0
  273. package/vue/UiButton.d.ts +22 -0
  274. package/vue/UiButton.js +2 -0
  275. package/vue/UiButton.vue +229 -0
  276. package/vue/UiCallout.d.ts +18 -0
  277. package/vue/UiCallout.js +2 -0
  278. package/vue/UiCallout.vue +104 -0
  279. package/vue/UiCheckbox.d.ts +38 -0
  280. package/vue/UiCheckbox.js +2 -0
  281. package/vue/UiCheckbox.vue +216 -0
  282. package/vue/UiCluster.d.ts +17 -0
  283. package/vue/UiCluster.js +2 -0
  284. package/vue/UiCluster.vue +75 -0
  285. package/vue/UiCombobox.d.ts +255 -0
  286. package/vue/UiCombobox.js +2 -0
  287. package/vue/UiCombobox.vue +466 -0
  288. package/vue/UiContainer.d.ts +17 -0
  289. package/vue/UiContainer.js +2 -0
  290. package/vue/UiContainer.vue +65 -0
  291. package/vue/UiContextMenu.d.ts +50 -0
  292. package/vue/UiContextMenu.js +2 -0
  293. package/vue/UiContextMenu.vue +166 -0
  294. package/vue/UiDialog.d.ts +39 -0
  295. package/vue/UiDialog.js +2 -0
  296. package/vue/UiDialog.vue +273 -0
  297. package/vue/UiDisclosure.d.ts +44 -0
  298. package/vue/UiDisclosure.js +2 -0
  299. package/vue/UiDisclosure.vue +211 -0
  300. package/vue/UiEditable.d.ts +48 -0
  301. package/vue/UiEditable.js +2 -0
  302. package/vue/UiEditable.vue +267 -0
  303. package/vue/UiEditorInsertTableGrid.d.ts +26 -0
  304. package/vue/UiEditorInsertTableGrid.js +2 -0
  305. package/vue/UiEditorInsertTableGrid.vue +210 -0
  306. package/vue/UiEditorMentionMenu.d.ts +44 -0
  307. package/vue/UiEditorMentionMenu.js +2 -0
  308. package/vue/UiEditorMentionMenu.vue +284 -0
  309. package/vue/UiEditorSlashMenu.d.ts +41 -0
  310. package/vue/UiEditorSlashMenu.js +2 -0
  311. package/vue/UiEditorSlashMenu.vue +306 -0
  312. package/vue/UiEditorTableContextMenu.d.ts +19 -0
  313. package/vue/UiEditorTableContextMenu.js +2 -0
  314. package/vue/UiEditorTableContextMenu.vue +252 -0
  315. package/vue/UiEditorTableOverlay.d.ts +66 -0
  316. package/vue/UiEditorTableOverlay.js +2 -0
  317. package/vue/UiEditorTableOverlay.vue +455 -0
  318. package/vue/UiEditorTableToolbar.d.ts +21 -0
  319. package/vue/UiEditorTableToolbar.js +2 -0
  320. package/vue/UiEditorTableToolbar.vue +339 -0
  321. package/vue/UiEditorToolbar.d.ts +18 -0
  322. package/vue/UiEditorToolbar.js +2 -0
  323. package/vue/UiEditorToolbar.vue +138 -0
  324. package/vue/UiFloatingActionButton.d.ts +22 -0
  325. package/vue/UiFloatingActionButton.js +2 -0
  326. package/vue/UiFloatingActionButton.vue +116 -0
  327. package/vue/UiFormField.d.ts +28 -0
  328. package/vue/UiFormField.js +2 -0
  329. package/vue/UiFormField.vue +124 -0
  330. package/vue/UiGrid.d.ts +17 -0
  331. package/vue/UiGrid.js +2 -0
  332. package/vue/UiGrid.vue +72 -0
  333. package/vue/UiIcon.d.ts +8 -0
  334. package/vue/UiIcon.js +2 -0
  335. package/vue/UiIcon.vue +135 -0
  336. package/vue/UiIconButton.d.ts +27 -0
  337. package/vue/UiIconButton.js +2 -0
  338. package/vue/UiIconButton.vue +268 -0
  339. package/vue/UiInput.d.ts +20 -0
  340. package/vue/UiInput.js +2 -0
  341. package/vue/UiInput.vue +177 -0
  342. package/vue/UiMenu.d.ts +52 -0
  343. package/vue/UiMenu.js +2 -0
  344. package/vue/UiMenu.vue +194 -0
  345. package/vue/UiMenuItem.d.ts +20 -0
  346. package/vue/UiMenuItem.js +2 -0
  347. package/vue/UiMenuItem.vue +55 -0
  348. package/vue/UiPopover.d.ts +44 -0
  349. package/vue/UiPopover.js +2 -0
  350. package/vue/UiPopover.vue +188 -0
  351. package/vue/UiRadio.d.ts +38 -0
  352. package/vue/UiRadio.js +2 -0
  353. package/vue/UiRadio.vue +166 -0
  354. package/vue/UiRadioGroup.d.ts +50 -0
  355. package/vue/UiRadioGroup.js +2 -0
  356. package/vue/UiRadioGroup.vue +161 -0
  357. package/vue/UiReel.d.ts +18 -0
  358. package/vue/UiReel.js +2 -0
  359. package/vue/UiReel.vue +93 -0
  360. package/vue/UiSearchResultRow.d.ts +28 -0
  361. package/vue/UiSearchResultRow.js +2 -0
  362. package/vue/UiSearchResultRow.vue +124 -0
  363. package/vue/UiSearchShell.d.ts +42 -0
  364. package/vue/UiSearchShell.js +2 -0
  365. package/vue/UiSearchShell.vue +233 -0
  366. package/vue/UiSelect.d.ts +30 -0
  367. package/vue/UiSelect.js +2 -0
  368. package/vue/UiSelect.vue +183 -0
  369. package/vue/UiSeparator.d.ts +8 -0
  370. package/vue/UiSeparator.js +2 -0
  371. package/vue/UiSeparator.vue +38 -0
  372. package/vue/UiSidebar.d.ts +54 -0
  373. package/vue/UiSidebar.js +2 -0
  374. package/vue/UiSidebar.vue +288 -0
  375. package/vue/UiStack.d.ts +18 -0
  376. package/vue/UiStack.js +2 -0
  377. package/vue/UiStack.vue +85 -0
  378. package/vue/UiSwitch.d.ts +36 -0
  379. package/vue/UiSwitch.js +2 -0
  380. package/vue/UiSwitch.vue +203 -0
  381. package/vue/UiSwitcher.d.ts +18 -0
  382. package/vue/UiSwitcher.js +2 -0
  383. package/vue/UiSwitcher.vue +91 -0
  384. package/vue/UiTabs.d.ts +36 -0
  385. package/vue/UiTabs.js +2 -0
  386. package/vue/UiTabs.vue +269 -0
  387. package/vue/UiTextarea.d.ts +22 -0
  388. package/vue/UiTextarea.js +2 -0
  389. package/vue/UiTextarea.vue +177 -0
  390. package/vue/UiToastRegion.d.ts +48 -0
  391. package/vue/UiToastRegion.js +2 -0
  392. package/vue/UiToastRegion.vue +256 -0
  393. package/vue/UiTooltip.d.ts +50 -0
  394. package/vue/UiTooltip.js +2 -0
  395. package/vue/UiTooltip.vue +230 -0
  396. package/vue/UiTopBar.d.ts +19 -0
  397. package/vue/UiTopBar.js +2 -0
  398. package/vue/UiTopBar.vue +56 -0
  399. package/vue/UiTree.d.ts +62 -0
  400. package/vue/UiTree.js +2 -0
  401. package/vue/UiTree.vue +117 -0
  402. package/vue/UiTreeItem.d.ts +56 -0
  403. package/vue/UiTreeItem.js +2 -0
  404. package/vue/UiTreeItem.vue +418 -0
  405. package/vue/chunks/UiAffordanceScope.js +112 -0
  406. package/vue/chunks/UiAvatar.js +144 -0
  407. package/vue/chunks/UiAvatarGroup.js +142 -0
  408. package/vue/chunks/UiBadge.js +33 -0
  409. package/vue/chunks/UiButton.js +47 -0
  410. package/vue/chunks/UiCallout.js +117 -0
  411. package/vue/chunks/UiCheckbox.js +167 -0
  412. package/vue/chunks/UiCluster.js +33 -0
  413. package/vue/chunks/UiCombobox.js +684 -0
  414. package/vue/chunks/UiContainer.js +33 -0
  415. package/vue/chunks/UiContextMenu.js +153 -0
  416. package/vue/chunks/UiDialog.js +162 -0
  417. package/vue/chunks/UiDisclosure.js +185 -0
  418. package/vue/chunks/UiEditable.js +223 -0
  419. package/vue/chunks/UiEditorInsertTableGrid.js +221 -0
  420. package/vue/chunks/UiEditorMentionMenu.js +245 -0
  421. package/vue/chunks/UiEditorSlashMenu.js +210 -0
  422. package/vue/chunks/UiEditorTableContextMenu.js +201 -0
  423. package/vue/chunks/UiEditorTableOverlay.js +301 -0
  424. package/vue/chunks/UiEditorTableToolbar.js +299 -0
  425. package/vue/chunks/UiEditorToolbar.js +37 -0
  426. package/vue/chunks/UiFloatingActionButton.js +56 -0
  427. package/vue/chunks/UiFormField.js +113 -0
  428. package/vue/chunks/UiGrid.js +33 -0
  429. package/vue/chunks/UiIcon.js +170 -0
  430. package/vue/chunks/UiIconButton.js +141 -0
  431. package/vue/chunks/UiInput.js +136 -0
  432. package/vue/chunks/UiMenu.js +163 -0
  433. package/vue/chunks/UiMenuItem.js +37 -0
  434. package/vue/chunks/UiPopover.js +149 -0
  435. package/vue/chunks/UiRadio.js +164 -0
  436. package/vue/chunks/UiRadioGroup.js +160 -0
  437. package/vue/chunks/UiReel.js +42 -0
  438. package/vue/chunks/UiSearchResultRow.js +63 -0
  439. package/vue/chunks/UiSearchShell.js +152 -0
  440. package/vue/chunks/UiSelect.js +134 -0
  441. package/vue/chunks/UiSeparator.js +24 -0
  442. package/vue/chunks/UiSidebar.js +180 -0
  443. package/vue/chunks/UiStack.js +38 -0
  444. package/vue/chunks/UiSwitch.js +162 -0
  445. package/vue/chunks/UiSwitcher.js +38 -0
  446. package/vue/chunks/UiTabs.js +210 -0
  447. package/vue/chunks/UiTextarea.js +139 -0
  448. package/vue/chunks/UiToastRegion.js +227 -0
  449. package/vue/chunks/UiTooltip.js +163 -0
  450. package/vue/chunks/UiTopBar.js +25 -0
  451. package/vue/chunks/UiTree.js +140 -0
  452. package/vue/chunks/UiTreeItem.js +315 -0
  453. package/vue/chunks/_plugin-vue_export-helper.js +8 -0
  454. package/vue/components.css +4405 -0
  455. package/vue/editor/LoomaEditor.d.ts +171 -0
  456. package/vue/editor/image-delivery.d.ts +61 -0
  457. package/vue/editor/index.d.ts +4 -386
  458. package/vue/editor/index.js +995 -1134
  459. package/vue/editor/primitives.d.ts +23 -0
  460. package/vue/index.d.ts +48 -604
  461. package/vue/index.js +49 -86
  462. package/dist/chunk-MLKGABMK.js +0 -9
  463. package/dist/chunk-RWLYVQY6.js +0 -5719
  464. package/dist/chunk-XDNZIKNI.js +0 -2721
  465. package/dist/declarative-generated.cjs +0 -149
  466. package/dist/declarative-generated.d.cts +0 -16
  467. package/dist/declarative-generated.d.ts +0 -16
  468. package/dist/declarative-generated.js +0 -124
  469. package/dist/declarative.cjs +0 -2750
  470. package/dist/declarative.d.cts +0 -101
  471. package/dist/declarative.d.ts +0 -101
  472. package/dist/declarative.js +0 -15
  473. package/dist/index.cjs +0 -9077
  474. package/dist/index.d.cts +0 -414
  475. package/dist/loader.cjs +0 -8442
  476. package/dist/loader.d.cts +0 -4
  477. package/dist/loader.d.ts +0 -4
  478. package/dist/loader.js +0 -16
  479. package/editor/chunk-EUIH3TBV.js +0 -6826
  480. package/editor/chunk-JK53ENSG.js +0 -29
  481. package/editor/chunk-U36XNFJN.js +0 -2592
  482. package/editor/table-overlay-DZFGHQDt.d.ts +0 -138
  483. package/editor.css +0 -1592
  484. package/layout/index.cjs +0 -356
  485. package/layout/index.d.cts +0 -18
  486. package/layout/index.d.ts +0 -18
  487. package/layout/index.js +0 -341
  488. package/layout.css +0 -191
  489. package/styles.css +0 -940
  490. package/vue/chunk-OX3EACZ7.js +0 -4369
package/editor.css DELETED
@@ -1,1592 +0,0 @@
1
- /**
2
- * Looma editor styles (tokens-based).
3
- * Tables, context menu, insert-table grid, slash menu. Use with ProseMirror/Tiptap content.
4
- */
5
-
6
- /* Turnkey editor */
7
- .looma-editor {
8
- position: relative;
9
- min-width: 0;
10
- color: var(--ui-text-primary);
11
- font-family: var(--ui-font-family-sans);
12
- }
13
-
14
- .looma-editor .ProseMirror {
15
- min-height: var(--ui-editor-content-min-height, 300px);
16
- padding:
17
- var(--ui-editor-content-padding-block, var(--ui-space-4))
18
- var(--ui-editor-content-padding-inline, var(--ui-space-6));
19
- outline: none;
20
- color: var(--ui-editor-content-color, var(--ui-text-primary));
21
- caret-color: var(--ui-editor-caret-color, var(--ui-accent-solid));
22
- font-family: var(--ui-editor-font-family, var(--ui-font-family-sans));
23
- font-size: var(--ui-editor-font-size, var(--ui-font-size-md));
24
- line-height: var(--ui-editor-line-height, var(--ui-line-height-relaxed));
25
- }
26
-
27
- @media (max-width: 767px) {
28
- .looma-editor .ProseMirror {
29
- padding-bottom: var(--ui-editor-mobile-bottom-space, 80px);
30
- }
31
- }
32
-
33
- .looma-editor .ProseMirror p {
34
- margin: 0 0 var(--ui-editor-paragraph-gap, var(--ui-space-3));
35
- }
36
-
37
- .looma-editor .ProseMirror h1,
38
- .looma-editor .ProseMirror h2,
39
- .looma-editor .ProseMirror h3 {
40
- color: inherit;
41
- line-height: var(--ui-line-height-tight);
42
- }
43
-
44
- .looma-editor .ProseMirror h1 {
45
- margin: var(--ui-space-6) 0 var(--ui-space-3);
46
- font-size: var(--ui-font-size-2xl);
47
- font-weight: var(--ui-font-bold);
48
- }
49
-
50
- .looma-editor .ProseMirror h2 {
51
- margin: var(--ui-space-5) 0 var(--ui-space-2);
52
- font-size: var(--ui-font-size-xl);
53
- font-weight: var(--ui-font-semibold);
54
- }
55
-
56
- .looma-editor .ProseMirror h3 {
57
- margin: var(--ui-space-4) 0 var(--ui-space-2);
58
- font-size: var(--ui-font-size-lg);
59
- font-weight: var(--ui-font-semibold);
60
- }
61
-
62
- .looma-editor .ProseMirror ul,
63
- .looma-editor .ProseMirror ol {
64
- margin: 0 0 var(--ui-space-3);
65
- /* Nested lists retain the browser's hierarchy; this is only the root inset. */
66
- padding-inline-start: var(--ui-editor-list-inset, var(--ui-space-5));
67
- }
68
-
69
- .looma-editor .ProseMirror li {
70
- margin-bottom: var(--ui-space-1);
71
- }
72
-
73
- .looma-editor .ProseMirror blockquote {
74
- margin: var(--ui-space-4) 0;
75
- padding-left: var(--ui-space-4);
76
- border-left: 3px solid var(--ui-accent-solid);
77
- color: var(--ui-text-secondary);
78
- font-style: italic;
79
- }
80
-
81
- .looma-editor .ProseMirror aside[data-looma-callout][data-tone] {
82
- --ui-callout-padding-block: var(--ui-space-2);
83
- --ui-callout-padding-inline: var(--ui-space-3);
84
- --ui-callout-icon-column: 1rem;
85
- --ui-callout-gap: var(--ui-space-2);
86
- --ui-callout-icon-size: 1rem;
87
- --ui-callout-border-width: 1px;
88
- --ui-callout-leading-border-width: 4px;
89
- --ui-callout-surface: var(--ui-accent-soft);
90
- --ui-callout-text: var(--ui-text-primary);
91
- --ui-callout-border: var(--ui-accent-solid);
92
- --ui-callout-icon: var(--ui-accent-solid);
93
- --ui-editor-callout-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M13.4 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7.4'/%3E%3Cpath d='M2 6h4'/%3E%3Cpath d='M2 10h4'/%3E%3Cpath d='M2 14h4'/%3E%3Cpath d='M2 18h4'/%3E%3Cpath d='M21.378 5.626a1 1 0 1 0-3.004-3.004l-5.01 5.012a2 2 0 0 0-.506.854l-.837 2.87a.5.5 0 0 0 .62.62l2.87-.837a2 2 0 0 0 .854-.506z'/%3E%3C/svg%3E");
94
-
95
- display: grid;
96
- grid-template-columns: var(--ui-callout-icon-column) minmax(0, 1fr);
97
- align-items: start;
98
- column-gap: var(--ui-callout-gap);
99
- margin: var(--ui-space-4) 0;
100
- padding: var(--ui-callout-padding-block) var(--ui-callout-padding-inline);
101
- border: var(--ui-callout-border-width) solid color-mix(in srgb, var(--ui-callout-border) 35%, transparent);
102
- border-inline-start: var(--ui-callout-leading-border-width) solid var(--ui-callout-border);
103
- border-radius: var(--ui-radius-2);
104
- background: var(--ui-callout-surface);
105
- color: var(--ui-callout-text);
106
- }
107
-
108
- .looma-editor .ProseMirror aside[data-looma-callout][data-tone]::before {
109
- width: var(--ui-callout-icon-size);
110
- height: var(--ui-callout-icon-size);
111
- margin-top: 0.2em;
112
- background: var(--ui-callout-icon);
113
- content: "";
114
- mask: var(--ui-editor-callout-icon) center / contain no-repeat;
115
- -webkit-mask: var(--ui-editor-callout-icon) center / contain no-repeat;
116
- }
117
-
118
- .looma-editor .ProseMirror aside[data-looma-callout][data-tone] > * {
119
- grid-column: 2;
120
- }
121
-
122
- .looma-editor .ProseMirror aside[data-looma-callout][data-tone] > :last-child {
123
- margin-bottom: 0;
124
- }
125
-
126
- .looma-editor .ProseMirror aside[data-looma-callout][data-tone="info"] {
127
- --ui-callout-surface: var(--ui-info-soft);
128
- --ui-callout-border: var(--ui-info-solid);
129
- --ui-callout-icon: var(--ui-info-solid);
130
- --ui-editor-callout-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M12 16v-4'/%3E%3Cpath d='M12 8h.01'/%3E%3C/svg%3E");
131
- }
132
-
133
- .looma-editor .ProseMirror aside[data-looma-callout][data-tone="note"] {
134
- --ui-callout-surface: var(--ui-accent-soft);
135
- --ui-callout-border: var(--ui-accent-solid);
136
- --ui-callout-icon: var(--ui-accent-solid);
137
- }
138
-
139
- .looma-editor .ProseMirror aside[data-looma-callout][data-tone="warning"] {
140
- --ui-callout-surface: var(--ui-warning-soft);
141
- --ui-callout-border: var(--ui-warning-solid);
142
- --ui-callout-icon: var(--ui-warning-solid);
143
- --ui-editor-callout-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m21.73 18-8-14a2 2 0 0 0-3.46 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3'/%3E%3Cpath d='M12 9v4'/%3E%3Cpath d='M12 17h.01'/%3E%3C/svg%3E");
144
- }
145
-
146
- .looma-editor .ProseMirror pre {
147
- margin: var(--ui-space-4) 0;
148
- padding: var(--ui-space-4);
149
- overflow-x: auto;
150
- border: 1px solid var(--ui-border-default);
151
- border-radius: var(--ui-radius-2);
152
- background: var(--ui-surface-muted);
153
- font-family: var(--ui-font-family-mono, ui-monospace, monospace);
154
- font-size: var(--ui-font-size-sm);
155
- }
156
-
157
- .looma-editor .ProseMirror code {
158
- padding: 0.1em 0.3em;
159
- border-radius: var(--ui-radius-1);
160
- background: var(--ui-surface-subtle);
161
- font-family: var(--ui-font-family-mono, ui-monospace, monospace);
162
- font-size: 0.9em;
163
- }
164
-
165
- .looma-editor .ProseMirror pre code {
166
- padding: 0;
167
- background: none;
168
- }
169
-
170
- .looma-editor .ProseMirror hr {
171
- margin: var(--ui-space-6) 0;
172
- border: 0;
173
- border-top: 1px solid var(--ui-border-default);
174
- }
175
-
176
- .looma-editor .ProseMirror mark {
177
- border-radius: var(--ui-radius-1);
178
- background: var(--ui-editor-highlight-bg, var(--ui-warning-soft));
179
- }
180
-
181
- .looma-editor .ProseMirror a {
182
- color: var(--ui-editor-link-color, var(--ui-accent-solid));
183
- text-decoration: underline;
184
- }
185
-
186
- .looma-editor .ProseMirror ul[data-type="taskList"] {
187
- padding-left: var(--ui-space-2);
188
- list-style: none;
189
- }
190
-
191
- .looma-editor .ProseMirror ul[data-type="taskList"] li {
192
- display: flex;
193
- align-items: flex-start;
194
- gap: var(--ui-space-2);
195
- }
196
-
197
- .looma-editor .ProseMirror ul[data-type="taskList"] li > label {
198
- margin-top: 3px;
199
- }
200
-
201
- .looma-editor .ProseMirror ul[data-type="taskList"] input[type="checkbox"] {
202
- width: 16px;
203
- height: 16px;
204
- accent-color: var(--ui-accent-solid);
205
- cursor: pointer;
206
- }
207
-
208
- .looma-editor .ProseMirror .is-editor-empty:first-child::before {
209
- float: left;
210
- height: 0;
211
- color: var(--ui-text-muted);
212
- content: attr(data-placeholder);
213
- pointer-events: none;
214
- }
215
-
216
- .looma-editor .ProseMirror img {
217
- max-width: 100%;
218
- height: auto;
219
- margin: var(--ui-space-3) 0;
220
- border-radius: var(--ui-radius-2);
221
- }
222
-
223
- .looma-editor .ProseMirror img[data-looma-image]:focus-visible {
224
- outline: 2px solid var(--ui-focus-ring);
225
- outline-offset: 3px;
226
- }
227
-
228
- .looma-editor__file-input {
229
- position: absolute;
230
- width: 0;
231
- height: 0;
232
- opacity: 0;
233
- pointer-events: none;
234
- }
235
-
236
- .looma-editor__upload-error {
237
- display: flex;
238
- align-items: center;
239
- justify-content: space-between;
240
- gap: var(--ui-space-3);
241
- margin-top: var(--ui-space-3);
242
- padding: var(--ui-space-2) var(--ui-space-3);
243
- border: 1px solid var(--ui-danger-solid);
244
- border-radius: var(--ui-radius-2);
245
- background: var(--ui-danger-soft);
246
- color: var(--ui-text);
247
- font-size: var(--ui-font-size-sm);
248
- }
249
-
250
- .looma-editor__upload-error button {
251
- min-height: 2rem;
252
- padding: 0 var(--ui-space-3);
253
- border: 0;
254
- border-radius: var(--ui-radius-1);
255
- background: var(--ui-danger-solid);
256
- color: var(--ui-text-on-accent);
257
- cursor: pointer;
258
- font: inherit;
259
- font-weight: var(--ui-font-semibold);
260
- }
261
-
262
- .looma-editor__upload-error button:focus-visible {
263
- outline: 2px solid var(--ui-focus-ring);
264
- outline-offset: 2px;
265
- }
266
-
267
- .looma-editor__upload-error button:disabled {
268
- cursor: wait;
269
- opacity: 0.65;
270
- }
271
-
272
- .looma-editor__drop-overlay {
273
- position: absolute;
274
- z-index: var(--ui-editor-drop-overlay-z-index, 10);
275
- inset: 0;
276
- display: flex;
277
- flex-direction: column;
278
- align-items: center;
279
- justify-content: center;
280
- gap: var(--ui-space-3);
281
- border: 2px dashed var(--ui-accent-solid);
282
- border-radius: var(--ui-radius-2);
283
- background: color-mix(in srgb, var(--ui-accent-soft) 92%, transparent);
284
- color: var(--ui-accent-active);
285
- font-size: var(--ui-font-size-sm);
286
- font-weight: var(--ui-font-semibold);
287
- pointer-events: none;
288
- }
289
-
290
- .looma-editor__drop-overlay > .looma-icon {
291
- width: var(--ui-font-size-2xl);
292
- height: var(--ui-font-size-2xl);
293
- stroke-width: var(--ui-editor-toolbar-icon-stroke-width, 1.75);
294
- }
295
-
296
- .looma-editor__toolbar-button {
297
- --ui-icon-button-size-sm: var(--ui-editor-toolbar-button-size, 2rem);
298
- --ui-icon-button-radius: var(--ui-editor-toolbar-button-radius, var(--ui-radius-1));
299
- --ui-icon-button-icon-size: var(--ui-editor-toolbar-icon-size, 1rem);
300
- }
301
-
302
- .looma-editor__toolbar-button > .looma-icon {
303
- width: var(--ui-editor-toolbar-icon-size, 1rem);
304
- height: var(--ui-editor-toolbar-icon-size, 1rem);
305
- stroke-width: var(--ui-editor-toolbar-icon-stroke-width, 1.75);
306
- }
307
-
308
- .looma-editor__sticky-toolbar-shell {
309
- position: sticky;
310
- top: var(--ui-editor-sticky-toolbar-top, 0);
311
- z-index: var(--ui-editor-toolbar-z-index, 10);
312
- min-width: 0;
313
- background: var(--ui-editor-toolbar-bg, var(--ui-surface, #fff));
314
- border-bottom: 1px solid var(--ui-editor-toolbar-border, var(--ui-border, #e5e7eb));
315
- }
316
-
317
- .looma-editor__sticky-toolbar-shell [data-component-root="ui-editor-toolbar"] {
318
- display: flex;
319
- align-items: center;
320
- justify-content: flex-start;
321
- gap: var(--ui-editor-toolbar-gap, 2px);
322
- min-height: var(--ui-editor-toolbar-min-height, 48px);
323
- padding:
324
- var(--ui-editor-toolbar-padding-block, 6px)
325
- var(--ui-editor-toolbar-padding-inline, 12px);
326
- overflow-x: auto;
327
- overscroll-behavior-inline: contain;
328
- scrollbar-width: none;
329
- white-space: nowrap;
330
- }
331
-
332
- .looma-editor__sticky-toolbar-shell [data-component-root="ui-editor-toolbar"]::-webkit-scrollbar {
333
- display: none;
334
- }
335
-
336
- .looma-editor__sticky-toolbar-shell [data-component-root="ui-editor-toolbar"] > * {
337
- flex: 0 0 auto;
338
- }
339
-
340
- .looma-editor__table-picker-popover,
341
- .looma-editor__table-toolbar-shell,
342
- .looma-editor__table-menu-shell {
343
- z-index: var(--ui-editor-popover-z-index, 300);
344
- }
345
-
346
- .looma-editor__table-picker-popover {
347
- min-width: 220px;
348
- padding: 0;
349
- border: 0;
350
- background: transparent;
351
- }
352
-
353
- .looma-editor__table-toolbar-shell,
354
- .looma-editor__table-menu-shell,
355
- .looma-editor__table-overlay-shell {
356
- position: fixed;
357
- }
358
-
359
- .looma-editor__mobile-toolbar-shell {
360
- position: fixed;
361
- z-index: var(--ui-editor-mobile-toolbar-z-index, var(--ui-editor-popover-z-index, 300));
362
- display: flex;
363
- align-items: stretch;
364
- min-height: var(--ui-editor-toolbar-mobile-min-height, 56px);
365
- padding:
366
- var(--ui-editor-mobile-toolbar-padding-block, 4px)
367
- max(var(--ui-editor-mobile-toolbar-padding-inline, 8px), env(safe-area-inset-left));
368
- overflow-x: auto;
369
- overflow-y: hidden;
370
- overscroll-behavior-inline: contain;
371
- -webkit-overflow-scrolling: touch;
372
- scroll-snap-type: x mandatory;
373
- scrollbar-width: none;
374
- background: var(--ui-editor-toolbar-bg, var(--ui-surface, #fff));
375
- border-top: 1px solid var(--ui-editor-toolbar-border, var(--ui-border, #e5e7eb));
376
- box-shadow: var(--ui-editor-toolbar-mobile-shadow, 0 -2px 8px rgb(0 0 0 / 0.06));
377
- }
378
-
379
- .looma-editor__mobile-toolbar-shell::-webkit-scrollbar {
380
- display: none;
381
- }
382
-
383
- .looma-editor__mobile-toolbar-shell > *,
384
- .looma-editor__mobile-toolbar-shell button,
385
- .looma-editor__mobile-toolbar-shell ui-icon-button {
386
- flex: 0 0 auto;
387
- scroll-snap-align: start;
388
- }
389
-
390
- .looma-editor__mobile-toolbar-shell ui-editor-toolbar[floating] {
391
- width: 100%;
392
- max-width: none;
393
- min-height: 100%;
394
- padding: 0;
395
- overflow-x: auto;
396
- overflow-y: hidden;
397
- overscroll-behavior-inline: contain;
398
- -webkit-overflow-scrolling: touch;
399
- scroll-snap-type: x mandatory;
400
- scrollbar-width: none;
401
- background: transparent;
402
- border: 0;
403
- border-radius: 0;
404
- box-shadow: none;
405
- backdrop-filter: none;
406
- }
407
-
408
- .looma-editor__mobile-toolbar-shell ui-editor-toolbar[floating]::-webkit-scrollbar {
409
- display: none;
410
- }
411
-
412
- .looma-editor__mobile-toolbar-shell .looma-editor__toolbar-button {
413
- --ui-icon-button-size-sm: var(--ui-editor-toolbar-mobile-button-size, 44px);
414
- }
415
-
416
- .looma-editor__mobile-toolbar-back {
417
- display: inline-flex;
418
- align-items: center;
419
- justify-content: center;
420
- gap: var(--ui-space-1-5, 6px);
421
- min-width: 44px;
422
- min-height: 44px;
423
- padding: 0 var(--ui-space-3, 12px);
424
- border: 0;
425
- border-radius: var(--ui-radius-md, 6px);
426
- background: transparent;
427
- color: var(--ui-text-secondary, #4b5563);
428
- cursor: pointer;
429
- font: inherit;
430
- white-space: nowrap;
431
- }
432
-
433
- .looma-editor__mobile-toolbar-back .looma-icon {
434
- width: 1rem;
435
- height: 1rem;
436
- stroke-width: var(--ui-editor-toolbar-icon-stroke-width, 1.75);
437
- }
438
-
439
- .looma-editor__mobile-toolbar-back:is(:hover, :focus-visible) {
440
- background: var(--ui-surface-hover, #f3f4f6);
441
- color: var(--ui-text-primary, #111827);
442
- }
443
-
444
- .looma-editor__mobile-toolbar-shell .ui-editor-table-toolbar {
445
- min-width: max-content;
446
- min-height: 100%;
447
- padding: 0;
448
- background: transparent;
449
- border: 0;
450
- border-radius: 0;
451
- box-shadow: none;
452
- backdrop-filter: none;
453
- }
454
-
455
- .looma-editor__mobile-toolbar-shell .ui-editor-table-toolbar button {
456
- min-height: 44px;
457
- background: transparent;
458
- }
459
-
460
- .looma-editor__mobile-toolbar-shell .ui-editor-table-toolbar button[data-active="true"],
461
- .looma-editor__mobile-toolbar-shell .ui-editor-table-toolbar button[data-selected="true"] {
462
- background: var(--ui-accent-soft, var(--ui-accent-subtle, #e8f0fb));
463
- }
464
-
465
- .looma-editor__mobile-toolbar-shell .ui-editor-table-toolbar__menu {
466
- top: auto;
467
- right: 0;
468
- bottom: calc(100% + var(--ui-space-2, 8px));
469
- max-height: min(50dvh, 22rem);
470
- overflow-y: auto;
471
- overscroll-behavior: contain;
472
- }
473
-
474
- .looma-editor__table-overlay-shell {
475
- z-index: var(--ui-editor-overlay-z-index, 299);
476
- overflow: visible;
477
- pointer-events: none;
478
- }
479
-
480
- /* Slash menu */
481
- ui-editor-slash-menu {
482
- user-select: none;
483
- }
484
-
485
- /* Mention menu */
486
- ui-editor-mention-menu {
487
- user-select: none;
488
- }
489
-
490
- .ui-editor-mention-menu {
491
- display: flex;
492
- overflow: hidden;
493
- flex-direction: column;
494
- background: var(--ui-surface, #fff);
495
- border: 1px solid var(--ui-border, #e5e7eb);
496
- border-radius: var(--ui-radius-xl, 1rem);
497
- box-shadow: var(--ui-shadow-lg, 0 8px 24px rgb(0 0 0 / 0.12));
498
- }
499
-
500
- .ui-editor-mention-menu__header {
501
- display: flex;
502
- align-items: center;
503
- justify-content: space-between;
504
- gap: var(--ui-space-3, 12px);
505
- padding: var(--ui-space-2, 8px) var(--ui-space-3, 12px);
506
- color: var(--ui-text-secondary, #4b5563);
507
- border-bottom: 1px solid var(--ui-border, #e5e7eb);
508
- font-size: var(--ui-font-size-xs, 0.75rem);
509
- font-weight: var(--ui-font-semibold, 600);
510
- }
511
-
512
- .ui-editor-mention-menu__hint {
513
- overflow: hidden;
514
- color: var(--ui-text-muted, #6b7280);
515
- font-weight: var(--ui-font-normal, 400);
516
- text-overflow: ellipsis;
517
- white-space: nowrap;
518
- }
519
-
520
- .ui-editor-mention-menu__list {
521
- max-height: 280px;
522
- padding: var(--ui-space-1, 4px) 0;
523
- margin: 0;
524
- overflow-y: auto;
525
- overscroll-behavior: contain;
526
- list-style: none;
527
- }
528
-
529
- .ui-editor-mention-menu__item {
530
- display: flex;
531
- align-items: center;
532
- min-height: 44px;
533
- padding: var(--ui-space-1-5, 6px) var(--ui-space-3, 12px);
534
- gap: var(--ui-space-3, 12px);
535
- cursor: pointer;
536
- }
537
-
538
- .ui-editor-mention-menu__item--active {
539
- background: var(--ui-accent-subtle, rgb(59 130 246 / 0.1));
540
- }
541
-
542
- .ui-editor-mention-menu__avatar {
543
- display: inline-flex;
544
- align-items: center;
545
- justify-content: center;
546
- width: 32px;
547
- height: 32px;
548
- flex: 0 0 auto;
549
- color: var(--ui-accent-active, var(--ui-accent-solid, #2563eb));
550
- background: var(--ui-accent-soft, var(--ui-accent-subtle, #eff6ff));
551
- border-radius: 999px;
552
- font-size: var(--ui-font-size-xs, 0.75rem);
553
- font-weight: var(--ui-font-semibold, 600);
554
- }
555
-
556
- .ui-editor-mention-menu__body {
557
- display: flex;
558
- min-width: 0;
559
- flex-direction: column;
560
- }
561
-
562
- .ui-editor-mention-menu__label,
563
- .ui-editor-mention-menu__detail {
564
- overflow: hidden;
565
- text-overflow: ellipsis;
566
- white-space: nowrap;
567
- }
568
-
569
- .ui-editor-mention-menu__label {
570
- color: var(--ui-text-primary, #111827);
571
- font-size: var(--ui-font-size-sm, 0.875rem);
572
- font-weight: var(--ui-font-medium, 500);
573
- }
574
-
575
- .ui-editor-mention-menu__detail,
576
- .ui-editor-mention-menu__loading {
577
- color: var(--ui-text-muted, #6b7280);
578
- font-size: var(--ui-font-size-xs, 0.75rem);
579
- }
580
-
581
- .ui-editor-mention-menu__loading {
582
- min-height: 44px;
583
- padding: var(--ui-space-3, 12px);
584
- }
585
-
586
- .looma-editor .ProseMirror .looma-mention {
587
- padding: 0.08em 0.28em;
588
- color: var(--ui-editor-mention-color, var(--ui-accent-active, var(--ui-accent-solid)));
589
- background: var(--ui-editor-mention-bg, var(--ui-accent-soft, var(--ui-accent-subtle)));
590
- border-radius: var(--ui-radius-sm, 4px);
591
- font-weight: var(--ui-font-medium, 500);
592
- white-space: nowrap;
593
- }
594
-
595
- @media (max-width: 767px) {
596
- .ui-editor-mention-menu {
597
- border-bottom: 0;
598
- border-radius: var(--ui-radius-xl, 1rem) var(--ui-radius-xl, 1rem) 0 0;
599
- }
600
-
601
- .ui-editor-mention-menu__list {
602
- max-height: calc(60dvh - 48px);
603
- }
604
- }
605
-
606
- /* Toolbar shell */
607
- ui-editor-toolbar {
608
- position: sticky;
609
- top: 0;
610
- z-index: var(--ui-editor-toolbar-z-index, 10);
611
- display: flex;
612
- align-items: center;
613
- justify-content: flex-start;
614
- gap: var(--ui-editor-toolbar-gap, 2px);
615
- padding:
616
- var(--ui-editor-toolbar-padding-block, 6px)
617
- var(--ui-editor-toolbar-padding-inline, 12px);
618
- min-height: var(--ui-editor-toolbar-min-height, 48px);
619
- overflow-x: auto;
620
- -webkit-overflow-scrolling: touch;
621
- scrollbar-width: none;
622
- white-space: nowrap;
623
- background: var(--ui-editor-toolbar-bg, var(--ui-surface, #fff));
624
- border-bottom: 1px solid var(--ui-editor-toolbar-border, var(--ui-border, #e5e7eb));
625
- }
626
-
627
- ui-editor-toolbar > * {
628
- flex: 0 0 auto;
629
- }
630
-
631
- ui-editor-toolbar::-webkit-scrollbar {
632
- display: none;
633
- }
634
-
635
- ui-editor-toolbar[floating] {
636
- position: static;
637
- top: auto;
638
- width: max-content;
639
- max-width: min(calc(100vw - 24px), 100%);
640
- min-height: auto;
641
- padding: var(--ui-editor-toolbar-floating-padding, 4px);
642
- overflow-x: visible;
643
- background: color-mix(in srgb, var(--ui-editor-toolbar-bg, var(--ui-surface, #fff)) 96%, transparent);
644
- border: 1px solid var(--ui-editor-toolbar-border, var(--ui-border, #e5e7eb));
645
- border-radius: var(--ui-editor-toolbar-floating-radius, var(--ui-radius-lg, 10px));
646
- box-shadow: var(--ui-editor-toolbar-floating-shadow, var(--ui-shadow-lg, 0 10px 24px rgb(0 0 0 / 0.12)));
647
- backdrop-filter: blur(10px);
648
- }
649
-
650
- @media (max-width: 767px) {
651
- ui-editor-toolbar {
652
- position: fixed;
653
- top: auto;
654
- bottom: env(safe-area-inset-bottom);
655
- left: 0;
656
- right: 0;
657
- min-height: var(--ui-editor-toolbar-mobile-min-height, 56px);
658
- border-top: 1px solid var(--ui-editor-toolbar-border, var(--ui-border, #e5e7eb));
659
- border-bottom: none;
660
- box-shadow: var(--ui-editor-toolbar-mobile-shadow, 0 -2px 8px rgb(0 0 0 / 0.06));
661
- }
662
-
663
- ui-editor-toolbar[floating] {
664
- position: static;
665
- inset: auto;
666
- min-height: auto;
667
- border: 1px solid var(--ui-editor-toolbar-border, var(--ui-border, #e5e7eb));
668
- border-radius: var(--ui-editor-toolbar-floating-radius, var(--ui-radius-lg, 10px));
669
- box-shadow: var(--ui-editor-toolbar-floating-shadow, var(--ui-shadow-lg, 0 10px 24px rgb(0 0 0 / 0.12)));
670
- }
671
- }
672
-
673
- .ui-editor-toolbar__divider {
674
- width: 1px;
675
- height: 20px;
676
- background: var(--ui-editor-toolbar-divider, var(--ui-border, #e5e7eb));
677
- flex-shrink: 0;
678
- margin: 0 var(--ui-editor-toolbar-divider-margin, 4px);
679
- }
680
-
681
- .ui-editor-slash-menu {
682
- background: var(--ui-surface, #fff);
683
- border: 1px solid var(--ui-border, #e5e7eb);
684
- border-radius: var(--ui-radius-xl, 1rem);
685
- box-shadow: var(--ui-shadow-lg, 0 8px 24px rgb(0 0 0 / 0.12));
686
- overflow: hidden;
687
- display: flex;
688
- flex-direction: column;
689
- }
690
-
691
- @media (max-width: 767px) {
692
- .ui-editor-slash-menu {
693
- border-radius: var(--ui-radius-xl, 1rem) var(--ui-radius-xl, 1rem) 0 0;
694
- border-bottom: none;
695
- }
696
- }
697
-
698
- .ui-editor-slash-menu__header {
699
- display: none;
700
- align-items: center;
701
- gap: var(--ui-space-2, 8px);
702
- padding: var(--ui-space-3, 12px) var(--ui-space-4, 16px);
703
- border-bottom: 1px solid var(--ui-border, #e5e7eb);
704
- font-size: var(--ui-font-size-xs, 0.75rem);
705
- color: var(--ui-text-muted, #6b7280);
706
- font-weight: var(--ui-font-semibold, 600);
707
- text-transform: uppercase;
708
- letter-spacing: 0.05em;
709
- }
710
-
711
- @media (max-width: 767px) {
712
- .ui-editor-slash-menu__header {
713
- display: flex;
714
- }
715
- }
716
-
717
- .ui-editor-slash-menu__header-query {
718
- background: var(--ui-surface-hover, #f3f4f6);
719
- border-radius: var(--ui-radius-sm, 4px);
720
- padding: 0.1em 0.4em;
721
- font-family: var(--ui-font-family-mono, ui-monospace, monospace);
722
- font-size: var(--ui-font-size-xs, 0.75rem);
723
- color: var(--ui-accent, #3b82f6);
724
- text-transform: none;
725
- letter-spacing: 0;
726
- }
727
-
728
- .ui-editor-slash-menu__list {
729
- list-style: none;
730
- margin: 0;
731
- padding: var(--ui-space-1, 4px) 0;
732
- overflow-y: auto;
733
- max-height: 280px;
734
- overscroll-behavior: contain;
735
- }
736
-
737
- @media (max-width: 767px) {
738
- .ui-editor-slash-menu__list {
739
- max-height: calc(60dvh - 80px);
740
- padding: var(--ui-space-1, 4px) 0 var(--ui-space-2, 8px);
741
- }
742
- }
743
-
744
- .ui-editor-slash-menu__item {
745
- display: flex;
746
- align-items: center;
747
- gap: var(--ui-space-3, 12px);
748
- padding: var(--ui-space-2, 8px) var(--ui-space-3, 12px);
749
- min-height: 44px;
750
- cursor: pointer;
751
- transition: background-color 120ms ease;
752
- }
753
-
754
- .ui-editor-slash-menu__item--active {
755
- background: var(--ui-accent-subtle, rgb(59 130 246 / 0.1));
756
- }
757
-
758
- .ui-editor-slash-menu__icon {
759
- display: flex;
760
- align-items: center;
761
- justify-content: center;
762
- width: 32px;
763
- height: 32px;
764
- background: var(--ui-surface-hover, #f3f4f6);
765
- border: 1px solid var(--ui-border, #e5e7eb);
766
- border-radius: var(--ui-radius-md, 6px);
767
- font-size: var(--ui-font-size-sm, 0.875rem);
768
- font-weight: var(--ui-font-bold, 700);
769
- color: var(--ui-text-secondary, #4b5563);
770
- font-family: var(--ui-font-family-mono, ui-monospace, monospace);
771
- flex-shrink: 0;
772
- line-height: 1;
773
- }
774
-
775
- .ui-editor-slash-menu__item--active .ui-editor-slash-menu__icon {
776
- background: var(--ui-accent, #3b82f6);
777
- border-color: var(--ui-accent, #3b82f6);
778
- color: var(--ui-accent-contrast, #fff);
779
- }
780
-
781
- .ui-editor-slash-menu__icon .looma-icon {
782
- width: 1rem;
783
- height: 1rem;
784
- stroke-width: var(--ui-editor-toolbar-icon-stroke-width, 1.75);
785
- }
786
-
787
- .ui-editor-slash-menu__body {
788
- display: flex;
789
- min-width: 0;
790
- flex-direction: column;
791
- gap: 1px;
792
- }
793
-
794
- .ui-editor-slash-menu__title {
795
- font-size: var(--ui-font-size-sm, 0.875rem);
796
- font-weight: var(--ui-font-medium, 500);
797
- color: var(--ui-text, #111827);
798
- white-space: nowrap;
799
- overflow: hidden;
800
- text-overflow: ellipsis;
801
- }
802
-
803
- .ui-editor-slash-menu__description {
804
- font-size: var(--ui-font-size-xs, 0.75rem);
805
- color: var(--ui-text-muted, #6b7280);
806
- white-space: nowrap;
807
- overflow: hidden;
808
- text-overflow: ellipsis;
809
- }
810
-
811
- .ui-editor-slash-menu__footer {
812
- display: none;
813
- padding: var(--ui-space-2, 8px) var(--ui-space-3, 12px);
814
- border-top: 1px solid var(--ui-border, #e5e7eb);
815
- font-size: var(--ui-font-size-xs, 0.75rem);
816
- color: var(--ui-text-muted, #6b7280);
817
- }
818
-
819
- @media (min-width: 768px) {
820
- .ui-editor-slash-menu__footer {
821
- display: block;
822
- }
823
- }
824
-
825
- .ui-editor-slash-menu kbd {
826
- display: inline-flex;
827
- align-items: center;
828
- justify-content: center;
829
- font-family: var(--ui-font-family-mono, ui-monospace, monospace);
830
- font-size: 10px;
831
- background: var(--ui-surface-hover, #f3f4f6);
832
- border: 1px solid var(--ui-border, #e5e7eb);
833
- border-radius: 3px;
834
- padding: 0 3px;
835
- color: var(--ui-text-secondary, #4b5563);
836
- }
837
-
838
- /* Table context menu */
839
- .ui-editor-table-context-menu {
840
- min-width: 14rem;
841
- max-width: min(17rem, calc(100vw - 24px));
842
- max-height: min(28rem, calc(100vh - 24px));
843
- padding: var(--ui-space-1-5, 6px);
844
- background: var(--ui-surface, #fff);
845
- border: 1px solid var(--ui-border, #e5e7eb);
846
- border-radius: var(--ui-radius-lg, 10px);
847
- box-shadow: var(--ui-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
848
- display: flex;
849
- flex-direction: column;
850
- gap: 2px;
851
- overflow-y: auto;
852
- overscroll-behavior: contain;
853
- scrollbar-width: thin;
854
- }
855
-
856
- .ui-editor-table-context-menu__section {
857
- display: flex;
858
- flex-direction: column;
859
- gap: 3px;
860
- }
861
-
862
- .ui-editor-table-context-menu button {
863
- display: flex;
864
- align-items: center;
865
- gap: var(--ui-space-2, 8px);
866
- width: 100%;
867
- text-align: left;
868
- min-height: 32px;
869
- padding: var(--ui-space-1-5, 6px) var(--ui-space-2, 8px);
870
- border: none;
871
- border-radius: var(--ui-radius-sm, 4px);
872
- background: none;
873
- font-size: var(--ui-font-size-sm, 0.875rem);
874
- cursor: pointer;
875
- color: var(--ui-text, #111);
876
- }
877
-
878
- .ui-editor-table-context-menu button > .looma-icon {
879
- width: 1rem;
880
- height: 1rem;
881
- flex: 0 0 auto;
882
- stroke-width: var(--ui-editor-toolbar-icon-stroke-width, 1.75);
883
- }
884
-
885
- .ui-editor-table-context-menu button:hover:not(:disabled) {
886
- background: var(--ui-surface-hover, #f3f4f6);
887
- }
888
-
889
- .ui-editor-table-context-menu button[data-selected="true"] {
890
- background: var(--ui-accent-subtle, rgb(59 130 246 / 0.1));
891
- }
892
-
893
- .ui-editor-table-context-menu button[data-tone="danger"] {
894
- color: var(--ui-danger, #dc2626);
895
- }
896
-
897
- .ui-editor-table-context-menu__swatches {
898
- display: grid;
899
- grid-template-columns: repeat(3, minmax(0, 1fr));
900
- gap: 3px;
901
- }
902
-
903
- .ui-editor-table-context-menu__swatch-button {
904
- display: inline-flex;
905
- align-items: center;
906
- gap: var(--ui-space-2, 8px);
907
- }
908
-
909
- .ui-editor-table-context-menu__swatch {
910
- display: inline-flex;
911
- width: 1rem;
912
- height: 1rem;
913
- border-radius: 999px;
914
- border: 1px solid var(--ui-border, #d1d5db);
915
- background: var(--ui-editor-table-context-swatch, #fff);
916
- box-shadow: inset 0 0 0 1px rgb(255 255 255 / 0.35);
917
- flex-shrink: 0;
918
- }
919
-
920
- .ui-editor-table-context-menu__swatch--default {
921
- position: relative;
922
- background:
923
- linear-gradient(
924
- 135deg,
925
- transparent calc(50% - 1px),
926
- var(--ui-text-muted, #6b7280) calc(50% - 1px),
927
- var(--ui-text-muted, #6b7280) calc(50% + 1px),
928
- transparent calc(50% + 1px)
929
- ),
930
- var(--ui-surface, #fff);
931
- }
932
-
933
- .ui-editor-table-context-menu__swatch-label {
934
- min-width: 0;
935
- white-space: nowrap;
936
- }
937
-
938
- .ui-editor-table-context-menu__heading {
939
- padding: var(--ui-space-1, 4px) var(--ui-space-2, 8px);
940
- font-size: 0.6875rem;
941
- font-weight: 700;
942
- letter-spacing: 0.05em;
943
- text-transform: uppercase;
944
- color: var(--ui-text-muted, #6b7280);
945
- }
946
-
947
- .ui-editor-table-context-menu__sep {
948
- height: 1px;
949
- background: var(--ui-border, #e5e7eb);
950
- margin: var(--ui-space-1, 4px) 0;
951
- }
952
-
953
- /* Table toolbar */
954
- .ui-editor-table-toolbar {
955
- display: inline-flex;
956
- align-items: center;
957
- gap: var(--ui-space-1, 4px);
958
- padding: var(--ui-space-1, 4px);
959
- background: color-mix(in srgb, var(--ui-surface, #fff) 94%, transparent);
960
- border: 1px solid var(--ui-border, #e5e7eb);
961
- border-radius: calc(var(--ui-radius-md, 6px) + 2px);
962
- box-shadow: var(--ui-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
963
- backdrop-filter: blur(10px);
964
- }
965
-
966
- .ui-editor-table-toolbar__group {
967
- display: inline-flex;
968
- align-items: center;
969
- gap: 2px;
970
- overflow: hidden;
971
- }
972
-
973
- .ui-editor-table-toolbar__sep {
974
- width: 1px;
975
- align-self: stretch;
976
- background: var(--ui-border, #e5e7eb);
977
- }
978
-
979
- .ui-editor-table-toolbar__overflow {
980
- position: relative;
981
- }
982
-
983
- .ui-editor-table-toolbar button {
984
- display: inline-flex;
985
- align-items: center;
986
- justify-content: center;
987
- gap: var(--ui-space-1-5, 6px);
988
- min-height: 32px;
989
- border: 0;
990
- border-radius: var(--ui-radius-sm, 4px);
991
- background: transparent;
992
- color: var(--ui-text-primary, #111827);
993
- cursor: pointer;
994
- font-size: var(--ui-text-sm, 0.875rem);
995
- font-weight: 500;
996
- line-height: 1;
997
- padding: var(--ui-space-1-5, 6px) var(--ui-space-2, 8px);
998
- white-space: nowrap;
999
- }
1000
-
1001
- .ui-editor-table-toolbar button:hover {
1002
- background: var(--ui-surface-hover, #f3f4f6);
1003
- }
1004
-
1005
- .ui-editor-table-toolbar button[data-active="true"] {
1006
- background: var(--ui-accent-soft, var(--ui-accent-subtle, #e8f0fb));
1007
- color: var(--ui-accent-active, #003d7a);
1008
- }
1009
-
1010
- .ui-editor-table-toolbar__group button {
1011
- border-radius: var(--ui-radius-sm, 4px);
1012
- }
1013
-
1014
- .ui-editor-table-toolbar__group button + button {
1015
- border-left: 0;
1016
- }
1017
-
1018
- .ui-editor-table-toolbar__more {
1019
- border: 0 !important;
1020
- border-radius: var(--ui-radius-sm, 4px) !important;
1021
- }
1022
-
1023
- .ui-editor-table-toolbar button[data-tone="danger"] {
1024
- color: var(--ui-danger, #dc2626);
1025
- }
1026
-
1027
- .ui-editor-table-toolbar .looma-icon {
1028
- width: var(--ui-editor-toolbar-icon-size, 1rem);
1029
- height: var(--ui-editor-toolbar-icon-size, 1rem);
1030
- flex: 0 0 auto;
1031
- stroke-width: var(--ui-editor-toolbar-icon-stroke-width, 1.75);
1032
- }
1033
-
1034
- .ui-editor-table-toolbar .looma-icon--chevron {
1035
- width: 0.875rem;
1036
- height: 0.875rem;
1037
- }
1038
-
1039
- .ui-editor-table-toolbar__icon-button {
1040
- width: 32px;
1041
- padding-inline: 0 !important;
1042
- }
1043
-
1044
- .ui-editor-table-toolbar__menu {
1045
- position: absolute;
1046
- top: calc(100% + var(--ui-space-2, 8px));
1047
- right: 0;
1048
- min-width: 12rem;
1049
- padding: var(--ui-space-1, 4px);
1050
- background: var(--ui-surface, #fff);
1051
- border: 1px solid var(--ui-border, #e5e7eb);
1052
- border-radius: var(--ui-radius-md, 6px);
1053
- box-shadow: var(--ui-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
1054
- display: flex;
1055
- flex-direction: column;
1056
- gap: 2px;
1057
- z-index: 2;
1058
- }
1059
-
1060
- .ui-editor-table-toolbar__menu-section + .ui-editor-table-toolbar__menu-section {
1061
- margin-top: var(--ui-space-1, 4px);
1062
- padding-top: var(--ui-space-1, 4px);
1063
- border-top: 1px solid color-mix(in srgb, var(--ui-border, #e5e7eb) 80%, transparent);
1064
- }
1065
-
1066
- .ui-editor-table-toolbar__menu-heading {
1067
- padding: var(--ui-space-1, 4px) var(--ui-space-2, 8px);
1068
- font-size: 0.6875rem;
1069
- font-weight: 700;
1070
- letter-spacing: 0.05em;
1071
- text-transform: uppercase;
1072
- color: var(--ui-text-muted, #6b7280);
1073
- }
1074
-
1075
- .ui-editor-table-toolbar__menu button {
1076
- display: flex;
1077
- justify-content: flex-start;
1078
- width: 100%;
1079
- text-align: left;
1080
- }
1081
-
1082
- .ui-editor-table-toolbar__swatches {
1083
- display: grid;
1084
- grid-template-columns: repeat(3, minmax(0, 1fr));
1085
- gap: 2px;
1086
- }
1087
-
1088
- .ui-editor-table-toolbar__swatch-button {
1089
- gap: var(--ui-space-1, 4px);
1090
- justify-content: flex-start !important;
1091
- }
1092
-
1093
- .ui-editor-table-toolbar__swatch {
1094
- width: 14px;
1095
- height: 14px;
1096
- flex: 0 0 14px;
1097
- border: 1px solid color-mix(in srgb, var(--ui-border, #e5e7eb) 80%, #000);
1098
- border-radius: 3px;
1099
- background: var(--ui-editor-table-toolbar-swatch);
1100
- }
1101
-
1102
- .ui-editor-table-toolbar__swatch--default {
1103
- background:
1104
- linear-gradient(135deg, transparent 44%, var(--ui-danger, #dc2626) 46% 54%, transparent 56%),
1105
- var(--ui-surface, #fff);
1106
- }
1107
-
1108
- .ui-editor-table-toolbar__swatch-button[data-selected="true"] {
1109
- background: var(--ui-accent-soft, var(--ui-accent-subtle, #e8f0fb));
1110
- }
1111
-
1112
- /* Insert table grid */
1113
- .ui-editor-insert-table-grid {
1114
- padding: var(--ui-space-3, 12px);
1115
- background: var(--ui-surface, #fff);
1116
- border: 1px solid var(--ui-border, #e5e7eb);
1117
- border-radius: var(--ui-radius-md, 6px);
1118
- box-shadow: var(--ui-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
1119
- }
1120
-
1121
- .ui-editor-insert-table-grid__hint {
1122
- margin: 0 0 var(--ui-space-2, 8px);
1123
- font-size: var(--ui-text-sm, 0.875rem);
1124
- color: var(--ui-text-muted, #6b7280);
1125
- }
1126
-
1127
- .ui-editor-insert-table-grid__grid {
1128
- display: grid;
1129
- grid-template-columns: repeat(var(--ui-editor-table-grid-cols, 8), 1.25rem);
1130
- grid-template-rows: repeat(var(--ui-editor-table-grid-rows, 8), 1.25rem);
1131
- gap: 2px;
1132
- margin-bottom: var(--ui-space-2, 8px);
1133
- }
1134
-
1135
- .ui-editor-insert-table-grid__cell {
1136
- width: 1.25rem;
1137
- height: 1.25rem;
1138
- padding: 0;
1139
- border: 1px solid var(--ui-border, #e5e7eb);
1140
- border-radius: 2px;
1141
- background: var(--ui-surface, #fff);
1142
- cursor: pointer;
1143
- }
1144
-
1145
- .ui-editor-insert-table-grid__cell--selected {
1146
- background: var(--ui-accent-solid, var(--ui-accent, #0066cc));
1147
- border-color: var(--ui-accent-solid, var(--ui-accent, #0066cc));
1148
- }
1149
-
1150
- .ui-editor-insert-table-grid__header {
1151
- display: block;
1152
- margin-bottom: var(--ui-space-2, 8px);
1153
- font-size: var(--ui-text-sm, 0.875rem);
1154
- cursor: pointer;
1155
- }
1156
-
1157
- .ui-editor-insert-table-grid [data-insert-table] {
1158
- width: 100%;
1159
- padding: var(--ui-space-2, 8px) var(--ui-space-3, 12px);
1160
- border: 1px solid var(--ui-border, #e5e7eb);
1161
- border-radius: var(--ui-radius-sm, 4px);
1162
- background: var(--ui-accent-solid, var(--ui-accent, #0066cc));
1163
- color: var(--ui-accent-contrast, #fff);
1164
- font-size: var(--ui-text-sm, 0.875rem);
1165
- cursor: pointer;
1166
- }
1167
-
1168
- .ui-editor-insert-table-grid [data-insert-table]:hover {
1169
- filter: brightness(1.05);
1170
- }
1171
-
1172
- /* Table overlay controls */
1173
- ui-editor-table-overlay {
1174
- display: block;
1175
- width: 100%;
1176
- height: 100%;
1177
- overflow: visible;
1178
- pointer-events: none;
1179
- }
1180
-
1181
- .ui-editor-table-overlay {
1182
- position: relative;
1183
- width: 100%;
1184
- height: 100%;
1185
- overflow: visible;
1186
- pointer-events: none;
1187
- }
1188
-
1189
- .ui-editor-table-overlay__rows,
1190
- .ui-editor-table-overlay__cols {
1191
- pointer-events: none;
1192
- position: absolute;
1193
- }
1194
-
1195
- .ui-editor-table-overlay__rows {
1196
- inset: 0;
1197
- width: 100%;
1198
- }
1199
-
1200
- .ui-editor-table-overlay__cols {
1201
- inset: 0;
1202
- height: 100%;
1203
- }
1204
-
1205
- .ui-editor-table-overlay__control {
1206
- position: absolute;
1207
- z-index: 1;
1208
- pointer-events: none;
1209
- }
1210
-
1211
- .ui-editor-table-overlay__handle {
1212
- position: absolute;
1213
- display: inline-flex;
1214
- align-items: center;
1215
- justify-content: center;
1216
- width: 24px;
1217
- height: 24px;
1218
- padding: 0;
1219
- border: 1px solid var(--ui-affordance-near-color, var(--ui-border-strong, #c8c8c4));
1220
- border-radius: var(--ui-radius-round, 999px);
1221
- background: color-mix(in srgb, var(--ui-surface-elevated, #fff) 96%, transparent);
1222
- color: var(--ui-affordance-near-color, var(--ui-text-secondary, #5c5c5c));
1223
- font: inherit;
1224
- font-size: 16px;
1225
- line-height: 1;
1226
- box-shadow: var(--ui-shadow-xs, 0 1px 2px rgb(0 0 0 / 0.05));
1227
- opacity: 0;
1228
- scale: 0.72;
1229
- transition:
1230
- opacity var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease),
1231
- scale var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease),
1232
- color var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease),
1233
- background-color var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease),
1234
- border-color var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease);
1235
- pointer-events: auto;
1236
- cursor: pointer;
1237
- }
1238
-
1239
- .ui-editor-table-overlay__handle > .looma-icon {
1240
- width: 14px;
1241
- height: 14px;
1242
- stroke-width: var(--ui-editor-table-affordance-icon-stroke-width, 2);
1243
- }
1244
-
1245
- .ui-editor-table-overlay__handle[data-ui-proximity="near"],
1246
- .ui-editor-table-overlay__control[data-active="true"] .ui-editor-table-overlay__handle,
1247
- .ui-editor-table-overlay__handle:focus-visible {
1248
- opacity: 1;
1249
- scale: 1;
1250
- }
1251
-
1252
- .ui-editor-table-overlay__control[data-active="true"] .ui-editor-table-overlay__handle,
1253
- .ui-editor-table-overlay__handle:focus-visible {
1254
- border-color: var(--ui-affordance-direct-color, var(--ui-accent-solid, #5b55d6));
1255
- background: var(--ui-affordance-direct-color, var(--ui-accent-solid, #5b55d6));
1256
- color: var(--ui-text-on-accent, #fff);
1257
- box-shadow: var(--ui-shadow-sm, 0 1px 3px rgb(0 0 0 / 0.1));
1258
- }
1259
-
1260
- .ui-editor-table-overlay__handle:focus-visible,
1261
- .ui-editor-table-overlay__selector:focus-visible,
1262
- .ui-editor-table-overlay__cell-menu:focus-visible {
1263
- outline: 2px solid var(--ui-focus-ring, #5b55d6);
1264
- outline-offset: 2px;
1265
- }
1266
-
1267
- .ui-editor-table-overlay__control--row {
1268
- left: 0;
1269
- width: 100%;
1270
- height: 0;
1271
- }
1272
-
1273
- .ui-editor-table-overlay__control--row .ui-editor-table-overlay__handle {
1274
- top: -12px;
1275
- left: -30px;
1276
- }
1277
-
1278
- .ui-editor-table-overlay__control--col {
1279
- top: 0;
1280
- width: 0;
1281
- height: 100%;
1282
- }
1283
-
1284
- .ui-editor-table-overlay__control--col .ui-editor-table-overlay__handle {
1285
- top: -30px;
1286
- left: -12px;
1287
- }
1288
-
1289
- .ui-editor-table-overlay__line {
1290
- position: absolute;
1291
- background: var(--ui-affordance-direct-color, var(--ui-accent-solid, #5b55d6));
1292
- opacity: 0;
1293
- transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease);
1294
- }
1295
-
1296
- .ui-editor-table-overlay__control--row .ui-editor-table-overlay__line {
1297
- inset: -1px 0 auto;
1298
- height: 2px;
1299
- }
1300
-
1301
- .ui-editor-table-overlay__control--col .ui-editor-table-overlay__line {
1302
- inset: 0 auto 0 -1px;
1303
- width: 2px;
1304
- }
1305
-
1306
- .ui-editor-table-overlay__control[data-active="true"] .ui-editor-table-overlay__line {
1307
- opacity: 0.8;
1308
- }
1309
-
1310
- .ui-editor-table-overlay__guide {
1311
- position: absolute;
1312
- width: var(--ui-affordance-guide-size, 4px);
1313
- height: var(--ui-affordance-guide-size, 4px);
1314
- border-radius: var(--ui-radius-round, 999px);
1315
- background: var(--ui-affordance-guide-color, var(--ui-border-strong, #c8c8c4));
1316
- opacity: var(--ui-affordance-guide-opacity, 0.42);
1317
- transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease);
1318
- }
1319
-
1320
- .ui-editor-table-overlay__control--row .ui-editor-table-overlay__guide {
1321
- left: -10px;
1322
- top: -2px;
1323
- }
1324
-
1325
- .ui-editor-table-overlay__control--col .ui-editor-table-overlay__guide {
1326
- left: -2px;
1327
- top: -10px;
1328
- }
1329
-
1330
- .ui-editor-table-overlay__control:has(.ui-editor-table-overlay__handle[data-ui-proximity="near"]) .ui-editor-table-overlay__guide,
1331
- .ui-editor-table-overlay__control[data-active="true"] .ui-editor-table-overlay__guide {
1332
- opacity: 0;
1333
- }
1334
-
1335
- .ui-editor-table-overlay__tooltip {
1336
- position: absolute;
1337
- z-index: 2;
1338
- top: calc(100% + 6px);
1339
- left: 50%;
1340
- width: max-content;
1341
- max-width: 14rem;
1342
- padding: var(--ui-space-1, 4px) var(--ui-space-2, 8px);
1343
- border-radius: var(--ui-radius-1, 4px);
1344
- background: var(--ui-text-primary, #1a1a1a);
1345
- color: var(--ui-surface-elevated, #fff);
1346
- font-size: var(--ui-font-size-xs, 0.75rem);
1347
- font-weight: var(--ui-font-medium, 500);
1348
- line-height: var(--ui-line-height-md, 1.4);
1349
- opacity: 0;
1350
- transform: translateX(-50%);
1351
- transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease);
1352
- pointer-events: none;
1353
- }
1354
-
1355
- .ui-editor-table-overlay__control--row .ui-editor-table-overlay__tooltip {
1356
- top: 50%;
1357
- left: auto;
1358
- right: calc(100% + 8px);
1359
- transform: translateY(-50%);
1360
- }
1361
-
1362
- .ui-editor-table-overlay__control[data-active="true"] .ui-editor-table-overlay__tooltip,
1363
- .ui-editor-table-overlay__handle:focus-visible .ui-editor-table-overlay__tooltip {
1364
- opacity: 1;
1365
- }
1366
-
1367
- .ui-editor-table-overlay__selector,
1368
- .ui-editor-table-overlay__cell-menu {
1369
- position: absolute;
1370
- z-index: 2;
1371
- display: inline-flex;
1372
- align-items: center;
1373
- justify-content: center;
1374
- padding: 0;
1375
- border: 1px solid transparent;
1376
- background: transparent;
1377
- color: var(--ui-text-secondary, #5c5c5c);
1378
- box-shadow: none;
1379
- pointer-events: auto;
1380
- cursor: pointer;
1381
- transition:
1382
- color var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease),
1383
- background-color var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease),
1384
- border-color var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease),
1385
- box-shadow var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease);
1386
- }
1387
-
1388
- .ui-editor-table-overlay__selector:hover,
1389
- .ui-editor-table-overlay__cell-menu:hover {
1390
- background: var(--ui-icon-button-hover-bg, var(--ui-surface-muted, #f3f4f6));
1391
- color: var(--ui-icon-button-hover-color, var(--ui-text-primary, #1a1a1a));
1392
- box-shadow: var(--ui-shadow-xs, 0 1px 2px rgb(0 0 0 / 0.05));
1393
- }
1394
-
1395
- .ui-editor-table-overlay__selector {
1396
- border-radius: var(--ui-radius-round, 999px);
1397
- }
1398
-
1399
- .ui-editor-table-overlay__selector::before {
1400
- content: "";
1401
- position: absolute;
1402
- inset: 50% auto auto 50%;
1403
- border-radius: var(--ui-radius-round, 999px);
1404
- background: var(--ui-affordance-guide-color, var(--ui-border-strong, #c8c8c4));
1405
- opacity: var(--ui-affordance-guide-opacity, 0.42);
1406
- transform: translate(-50%, -50%);
1407
- transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease);
1408
- pointer-events: none;
1409
- }
1410
-
1411
- .ui-editor-table-overlay__selector .looma-icon {
1412
- display: block;
1413
- width: 14px;
1414
- height: 14px;
1415
- stroke-width: var(--ui-editor-table-affordance-icon-stroke-width, 2);
1416
- opacity: 0;
1417
- transform: scale(0.72);
1418
- transition:
1419
- opacity var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease),
1420
- transform var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease);
1421
- }
1422
-
1423
- .ui-editor-table-overlay__selector:hover::before,
1424
- .ui-editor-table-overlay__selector:focus-visible::before {
1425
- opacity: 0;
1426
- }
1427
-
1428
- .ui-editor-table-overlay__selector:hover .looma-icon,
1429
- .ui-editor-table-overlay__selector:focus-visible .looma-icon {
1430
- opacity: 1;
1431
- transform: scale(1);
1432
- }
1433
-
1434
- .ui-editor-table-overlay__selector--row {
1435
- left: -9px;
1436
- width: 18px;
1437
- height: 32px;
1438
- transform: translateY(-50%);
1439
- }
1440
-
1441
- .ui-editor-table-overlay__selector--row::before {
1442
- width: 2px;
1443
- height: 16px;
1444
- }
1445
-
1446
- .ui-editor-table-overlay__selector--column {
1447
- top: -9px;
1448
- width: 32px;
1449
- height: 18px;
1450
- transform: translateX(-50%);
1451
- }
1452
-
1453
- .ui-editor-table-overlay__selector--column::before {
1454
- width: 16px;
1455
- height: 2px;
1456
- }
1457
-
1458
- @media (hover: none), (pointer: coarse) {
1459
- .ui-editor-table-overlay__selector::before {
1460
- opacity: 0;
1461
- }
1462
-
1463
- .ui-editor-table-overlay__selector .looma-icon {
1464
- opacity: 1;
1465
- transform: none;
1466
- }
1467
- }
1468
-
1469
- .ui-editor-table-overlay__cell-menu {
1470
- width: 24px;
1471
- height: 24px;
1472
- border-radius: var(--ui-radius-1, 4px);
1473
- background: color-mix(in srgb, var(--ui-surface-muted, #f3f4f6) 78%, transparent);
1474
- }
1475
-
1476
- .ui-editor-table-overlay__cell-menu .looma-icon {
1477
- width: 15px;
1478
- height: 15px;
1479
- stroke-width: var(--ui-editor-table-affordance-icon-stroke-width, 2);
1480
- }
1481
-
1482
- .ProseMirror .tableWrapper {
1483
- max-width: 100%;
1484
- overflow-x: auto;
1485
- overflow-y: visible;
1486
- overscroll-behavior-inline: contain;
1487
- -webkit-overflow-scrolling: touch;
1488
- }
1489
-
1490
- /* ProseMirror table (for when Looma editor content is rendered) */
1491
- .ProseMirror:focus-visible {
1492
- outline: none;
1493
- box-shadow: none;
1494
- }
1495
-
1496
- .ProseMirror table {
1497
- border-collapse: collapse;
1498
- margin: 0;
1499
- width: max-content !important;
1500
- min-width: 100%;
1501
- max-width: none !important;
1502
- table-layout: fixed;
1503
- }
1504
-
1505
- .ProseMirror table.ProseMirror-selectednode,
1506
- .ProseMirror .tableWrapper.ProseMirror-selectednode {
1507
- outline: none;
1508
- }
1509
-
1510
- .ProseMirror th,
1511
- .ProseMirror td {
1512
- position: relative;
1513
- border: 1px solid var(--ui-border, #e5e7eb);
1514
- padding: var(--ui-space-2, 8px) var(--ui-space-3, 12px);
1515
- vertical-align: top;
1516
- min-width: var(--ui-editor-table-cell-min-width, 112px);
1517
- text-align: left;
1518
- overflow-wrap: anywhere;
1519
- }
1520
-
1521
- .ProseMirror :is(th, td) > p,
1522
- .looma-editor .ProseMirror :is(th, td) > p {
1523
- margin: 0;
1524
- }
1525
-
1526
- .ProseMirror :is(th, td) > p + p,
1527
- .looma-editor .ProseMirror :is(th, td) > p + p {
1528
- margin-top: var(--ui-editor-table-paragraph-gap, var(--ui-space-2, 8px));
1529
- }
1530
-
1531
- .ProseMirror th {
1532
- font-weight: 600;
1533
- background: var(--ui-surface-hover, #f3f4f6);
1534
- }
1535
-
1536
- .ProseMirror .selectedCell {
1537
- background: var(--ui-accent-subtle, rgba(59, 130, 246, 0.1));
1538
- }
1539
-
1540
- .ProseMirror .column-resize-handle {
1541
- position: absolute;
1542
- z-index: 3;
1543
- right: -5px;
1544
- top: 0;
1545
- bottom: 0;
1546
- width: 10px;
1547
- cursor: col-resize;
1548
- background: transparent;
1549
- touch-action: none;
1550
- }
1551
-
1552
- .ProseMirror .column-resize-handle::after {
1553
- content: "";
1554
- position: absolute;
1555
- inset-block: 0;
1556
- inset-inline-start: 4px;
1557
- width: 2px;
1558
- border-radius: var(--ui-radius-round, 999px);
1559
- background: color-mix(in srgb, var(--ui-affordance-near-color, var(--ui-border-strong, #c8c8c4)) 72%, transparent);
1560
- transition:
1561
- width var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease),
1562
- background-color var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease);
1563
- }
1564
-
1565
- .ProseMirror .column-resize-handle:hover::after,
1566
- .ProseMirror.resize-cursor .column-resize-handle::after {
1567
- width: 3px;
1568
- background: var(--ui-affordance-direct-color, var(--ui-accent-solid, #5b55d6));
1569
- }
1570
-
1571
- .ProseMirror .column-resize-handle::before {
1572
- content: "Drag to resize column";
1573
- position: absolute;
1574
- z-index: 4;
1575
- top: 4px;
1576
- left: calc(100% + 6px);
1577
- width: max-content;
1578
- padding: var(--ui-space-1, 4px) var(--ui-space-2, 8px);
1579
- border-radius: var(--ui-radius-1, 4px);
1580
- background: var(--ui-text-primary, #1a1a1a);
1581
- color: var(--ui-surface-elevated, #fff);
1582
- font-size: var(--ui-font-size-xs, 0.75rem);
1583
- line-height: var(--ui-line-height-md, 1.4);
1584
- opacity: 0;
1585
- transform: none;
1586
- transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease);
1587
- pointer-events: none;
1588
- }
1589
-
1590
- .ProseMirror .column-resize-handle:hover::before {
1591
- opacity: 1;
1592
- }