@umbraco-cms/backoffice 15.0.0-rc1 → 15.0.0-rc2

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 (228) hide show
  1. package/dist-cms/apps/backoffice/components/backoffice-header-logo.element.js +1 -6
  2. package/dist-cms/assets/lang/ar.d.ts +3 -0
  3. package/dist-cms/assets/lang/ar.js +2342 -0
  4. package/dist-cms/assets/lang/ar.ts +2394 -0
  5. package/dist-cms/assets/lang/bs.js +2 -2
  6. package/dist-cms/assets/lang/bs.ts +2 -2
  7. package/dist-cms/assets/lang/cs-cz.js +2 -2
  8. package/dist-cms/assets/lang/cs-cz.ts +2 -2
  9. package/dist-cms/assets/lang/cy-gb.js +2 -2
  10. package/dist-cms/assets/lang/cy-gb.ts +2 -2
  11. package/dist-cms/assets/lang/da-dk.js +6 -3
  12. package/dist-cms/assets/lang/da-dk.ts +6 -3
  13. package/dist-cms/assets/lang/de-de.js +2 -2
  14. package/dist-cms/assets/lang/de-de.ts +2 -2
  15. package/dist-cms/assets/lang/en-us.js +20 -7
  16. package/dist-cms/assets/lang/en-us.ts +20 -7
  17. package/dist-cms/assets/lang/en.js +30 -5
  18. package/dist-cms/assets/lang/en.ts +30 -5
  19. package/dist-cms/assets/lang/es-es.js +3 -3
  20. package/dist-cms/assets/lang/es-es.ts +3 -3
  21. package/dist-cms/assets/lang/fr-fr.js +2 -2
  22. package/dist-cms/assets/lang/fr-fr.ts +2 -3
  23. package/dist-cms/assets/lang/he-il.js +1 -1
  24. package/dist-cms/assets/lang/he-il.ts +1 -1
  25. package/dist-cms/assets/lang/hr-hr.js +2 -2
  26. package/dist-cms/assets/lang/hr-hr.ts +2 -2
  27. package/dist-cms/assets/lang/it-it.js +1 -1
  28. package/dist-cms/assets/lang/it-it.ts +1 -1
  29. package/dist-cms/assets/lang/ja-jp.js +1 -1
  30. package/dist-cms/assets/lang/ja-jp.ts +1 -1
  31. package/dist-cms/assets/lang/ko-kr.js +1 -1
  32. package/dist-cms/assets/lang/ko-kr.ts +1 -1
  33. package/dist-cms/assets/lang/nb-no.js +3 -1
  34. package/dist-cms/assets/lang/nb-no.ts +3 -1
  35. package/dist-cms/assets/lang/nl-nl.js +2 -2
  36. package/dist-cms/assets/lang/nl-nl.ts +2 -2
  37. package/dist-cms/assets/lang/pl-pl.js +2 -2
  38. package/dist-cms/assets/lang/pl-pl.ts +2 -2
  39. package/dist-cms/assets/lang/pt-br.js +1 -1
  40. package/dist-cms/assets/lang/pt-br.ts +1 -1
  41. package/dist-cms/assets/lang/ru-ru.js +2 -2
  42. package/dist-cms/assets/lang/ru-ru.ts +2 -2
  43. package/dist-cms/assets/lang/tr-tr.js +2 -2
  44. package/dist-cms/assets/lang/tr-tr.ts +2 -2
  45. package/dist-cms/assets/lang/uk-ua.js +2 -2
  46. package/dist-cms/assets/lang/uk-ua.ts +2 -2
  47. package/dist-cms/assets/lang/zh-cn.js +2 -2
  48. package/dist-cms/assets/lang/zh-cn.ts +2 -2
  49. package/dist-cms/assets/lang/zh-tw.js +1 -1
  50. package/dist-cms/assets/lang/zh-tw.ts +1 -2
  51. package/dist-cms/assets/login.jpg +0 -0
  52. package/dist-cms/custom-elements.json +4 -4
  53. package/dist-cms/external/monaco-editor/{cssMode-CDJQLEXE.js → cssMode-DA72DEEy.js} +1 -1
  54. package/dist-cms/external/monaco-editor/{freemarker2-BtohW-RX.js → freemarker2-Cl3U_XXG.js} +1 -1
  55. package/dist-cms/external/monaco-editor/{handlebars-Wz3s8HqG.js → handlebars-DSroMiE1.js} +1 -1
  56. package/dist-cms/external/monaco-editor/{html-MlXP3Eno.js → html-CkfQ3Tez.js} +1 -1
  57. package/dist-cms/external/monaco-editor/{htmlMode-Ds-h6y_M.js → htmlMode-D-n07ZL6.js} +1 -1
  58. package/dist-cms/external/monaco-editor/{index-BsCYch8u.js → index-QOjL-QlL.js} +181 -182
  59. package/dist-cms/external/monaco-editor/index.js +1 -1
  60. package/dist-cms/external/monaco-editor/{javascript-Dejz0u77.js → javascript-CPYBePIj.js} +1 -1
  61. package/dist-cms/external/monaco-editor/{jsonMode-CQ2qSm4x.js → jsonMode-xglY6Smp.js} +1 -1
  62. package/dist-cms/external/monaco-editor/{liquid-BhEdJewW.js → liquid-BcU1huVG.js} +1 -1
  63. package/dist-cms/external/monaco-editor/{mdx-C292GrsL.js → mdx-BngkqVPl.js} +1 -1
  64. package/dist-cms/external/monaco-editor/{python-CTKihC4R.js → python-Da-YVbMh.js} +1 -1
  65. package/dist-cms/external/monaco-editor/{razor-aZ9MyDfI.js → razor-C_XA8ptN.js} +1 -1
  66. package/dist-cms/external/monaco-editor/{tsMode-D1lPHHTW.js → tsMode-CsqUs61y.js} +1 -1
  67. package/dist-cms/external/monaco-editor/{typescript-DodsUUWq.js → typescript-DmWQ3leM.js} +1 -1
  68. package/dist-cms/external/monaco-editor/{xml-CnOKc87p.js → xml-CmhlGeEt.js} +1 -1
  69. package/dist-cms/external/monaco-editor/{yaml-BGcRgHu1.js → yaml-DDN00dBJ.js} +1 -1
  70. package/dist-cms/external/tinymce/index.js +1 -1
  71. package/dist-cms/external/uui/index.js +302 -278
  72. package/dist-cms/libs/extension-api/types/condition.types.d.ts +5 -5
  73. package/dist-cms/packages/block/block/conditions/types.d.ts +1 -1
  74. package/dist-cms/packages/block/block/context/block-entry.context.d.ts +1 -0
  75. package/dist-cms/packages/block/block/context/block-entry.context.js +9 -4
  76. package/dist-cms/packages/block/block/context/block-manager.context.d.ts +8 -7
  77. package/dist-cms/packages/block/block/context/block-manager.context.js +28 -9
  78. package/dist-cms/packages/block/block/workspace/block-workspace.context.d.ts +1 -0
  79. package/dist-cms/packages/block/block/workspace/block-workspace.context.js +14 -13
  80. package/dist-cms/packages/block/block/workspace/views/edit/block-workspace-view-edit-content-no-router.element.d.ts +3 -1
  81. package/dist-cms/packages/block/block/workspace/views/edit/block-workspace-view-edit-content-no-router.element.js +50 -12
  82. package/dist-cms/packages/block/block-custom-view/types.d.ts +1 -1
  83. package/dist-cms/packages/block/block-grid/components/block-grid-block/block-grid-block.element.js +3 -1
  84. package/dist-cms/packages/block/block-grid/components/block-grid-block-inline/block-grid-block-inline.element.js +3 -1
  85. package/dist-cms/packages/block/block-grid/components/block-grid-entries/block-grid-entries.element.d.ts +2 -1
  86. package/dist-cms/packages/block/block-grid/components/block-grid-entries/block-grid-entries.element.js +13 -5
  87. package/dist-cms/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.js +2 -0
  88. package/dist-cms/packages/block/block-grid/context/block-grid-entries.context.d.ts +4 -2
  89. package/dist-cms/packages/block/block-grid/context/block-grid-entries.context.js +26 -17
  90. package/dist-cms/packages/block/block-grid/context/block-grid-entry.context.d.ts +1 -0
  91. package/dist-cms/packages/block/block-grid/context/block-grid-entry.context.js +3 -2
  92. package/dist-cms/packages/block/block-grid/context/block-grid-manager.context.d.ts +3 -0
  93. package/dist-cms/packages/block/block-grid/context/block-grid-manager.context.js +12 -2
  94. package/dist-cms/packages/block/block-grid/property-editors/block-grid-editor/property-editor-ui-block-grid.element.js +2 -0
  95. package/dist-cms/packages/block/block-grid/types.d.ts +1 -0
  96. package/dist-cms/packages/block/block-list/context/block-list-entries.context.d.ts +1 -1
  97. package/dist-cms/packages/block/block-list/context/block-list-entries.context.js +8 -4
  98. package/dist-cms/packages/block/block-list/context/block-list-entry.context.d.ts +1 -1
  99. package/dist-cms/packages/block/block-list/context/block-list-entry.context.js +3 -3
  100. package/dist-cms/packages/block/block-list/context/block-list-manager.context.d.ts +1 -1
  101. package/dist-cms/packages/block/block-list/context/block-list-manager.context.js +5 -2
  102. package/dist-cms/packages/block/block-rte/context/block-rte-entries.context.d.ts +2 -2
  103. package/dist-cms/packages/block/block-rte/context/block-rte-entries.context.js +5 -5
  104. package/dist-cms/packages/block/block-rte/context/block-rte-entry.context.d.ts +1 -1
  105. package/dist-cms/packages/block/block-rte/context/block-rte-entry.context.js +5 -3
  106. package/dist-cms/packages/block/block-rte/context/block-rte-manager.context.d.ts +3 -2
  107. package/dist-cms/packages/block/block-rte/context/block-rte-manager.context.js +6 -3
  108. package/dist-cms/packages/core/collection/extensions/collection-action.extension.d.ts +1 -1
  109. package/dist-cms/packages/core/collection/extensions/collection-view.extension.d.ts +1 -1
  110. package/dist-cms/packages/core/collection/extensions/collection.extension.d.ts +1 -1
  111. package/dist-cms/packages/core/content-type/structure/content-type-structure-manager.class.d.ts +1 -0
  112. package/dist-cms/packages/core/content-type/structure/content-type-structure-manager.class.js +3 -2
  113. package/dist-cms/packages/core/culture/manifests.d.ts +1 -1
  114. package/dist-cms/packages/core/dashboard/dashboard.extension.d.ts +1 -1
  115. package/dist-cms/packages/core/entity-action/entity-action.extension.d.ts +1 -1
  116. package/dist-cms/packages/core/extension-registry/conditions/index.d.ts +1 -1
  117. package/dist-cms/packages/core/extension-registry/conditions/types.d.ts +10 -6
  118. package/dist-cms/packages/core/extension-registry/extensions/entity-bulk-action.extension.d.ts +1 -1
  119. package/dist-cms/packages/core/extension-registry/extensions/repository.extension.d.ts +1 -1
  120. package/dist-cms/packages/core/icon-registry/icon-dictionary.json +68 -0
  121. package/dist-cms/packages/core/icon-registry/icons/icon-document-3d.d.ts +2 -0
  122. package/dist-cms/packages/core/icon-registry/icons/icon-document-3d.js +17 -0
  123. package/dist-cms/packages/core/icon-registry/icons/icon-document-chart-bar.d.ts +2 -0
  124. package/dist-cms/packages/core/icon-registry/icons/icon-document-chart-bar.js +18 -0
  125. package/dist-cms/packages/core/icon-registry/icons/icon-document-chart-graph.d.ts +2 -0
  126. package/dist-cms/packages/core/icon-registry/icons/icon-document-chart-graph.js +16 -0
  127. package/dist-cms/packages/core/icon-registry/icons/icon-document-command.d.ts +2 -0
  128. package/dist-cms/packages/core/icon-registry/icons/icon-document-command.js +17 -0
  129. package/dist-cms/packages/core/icon-registry/icons/icon-document-font.d.ts +2 -0
  130. package/dist-cms/packages/core/icon-registry/icons/icon-document-font.js +18 -0
  131. package/dist-cms/packages/core/icon-registry/icons/icon-document-html.d.ts +2 -0
  132. package/dist-cms/packages/core/icon-registry/icons/icon-document-html.js +17 -0
  133. package/dist-cms/packages/core/icon-registry/icons/icon-document-image.d.ts +2 -0
  134. package/dist-cms/packages/core/icon-registry/icons/icon-document-image.js +17 -0
  135. package/dist-cms/packages/core/icon-registry/icons/icon-document-js.d.ts +2 -0
  136. package/dist-cms/packages/core/icon-registry/icons/icon-document-js.js +17 -0
  137. package/dist-cms/packages/core/icon-registry/icons/icon-document-key.d.ts +2 -0
  138. package/dist-cms/packages/core/icon-registry/icons/icon-document-key.js +17 -0
  139. package/dist-cms/packages/core/icon-registry/icons/icon-document-medal.d.ts +2 -0
  140. package/dist-cms/packages/core/icon-registry/icons/icon-document-medal.js +17 -0
  141. package/dist-cms/packages/core/icon-registry/icons/icon-document-play.d.ts +2 -0
  142. package/dist-cms/packages/core/icon-registry/icons/icon-document-play.js +16 -0
  143. package/dist-cms/packages/core/icon-registry/icons/icon-document-search.d.ts +2 -0
  144. package/dist-cms/packages/core/icon-registry/icons/icon-document-search.js +17 -0
  145. package/dist-cms/packages/core/icon-registry/icons/icon-document-settings.d.ts +2 -0
  146. package/dist-cms/packages/core/icon-registry/icons/icon-document-settings.js +19 -0
  147. package/dist-cms/packages/core/icon-registry/icons/icon-document-spreadsheet.d.ts +2 -0
  148. package/dist-cms/packages/core/icon-registry/icons/icon-document-spreadsheet.js +19 -0
  149. package/dist-cms/packages/core/icon-registry/icons/icon-document-user.d.ts +2 -0
  150. package/dist-cms/packages/core/icon-registry/icons/icon-document-user.js +17 -0
  151. package/dist-cms/packages/core/icon-registry/icons.d.ts +56 -0
  152. package/dist-cms/packages/core/icon-registry/icons.js +51 -0
  153. package/dist-cms/packages/core/localization/manifests.js +11 -1
  154. package/dist-cms/packages/core/menu/menu-item.extension.d.ts +1 -1
  155. package/dist-cms/packages/core/property/manifests.d.ts +1 -1
  156. package/dist-cms/packages/core/property-action/extensions/property-action.extension.d.ts +1 -1
  157. package/dist-cms/packages/core/section/conditions/types.d.ts +1 -1
  158. package/dist-cms/packages/core/section/extensions/section-sidebar-app.extension.d.ts +1 -1
  159. package/dist-cms/packages/core/section/extensions/section-view.extension.d.ts +1 -1
  160. package/dist-cms/packages/core/section/extensions/section.extension.d.ts +1 -1
  161. package/dist-cms/packages/core/temporary-file/temporary-file-manager.class.js +3 -2
  162. package/dist-cms/packages/core/themes/manifests.d.ts +1 -1
  163. package/dist-cms/packages/core/tree/extensions/tree.extension.d.ts +1 -1
  164. package/dist-cms/packages/core/utils/index.d.ts +1 -0
  165. package/dist-cms/packages/core/utils/index.js +1 -0
  166. package/dist-cms/packages/core/utils/sanitize/sanitize-html.function.d.ts +6 -0
  167. package/dist-cms/packages/core/utils/sanitize/sanitize-html.function.js +9 -0
  168. package/dist-cms/packages/core/workspace/conditions/types.d.ts +1 -1
  169. package/dist-cms/packages/core/workspace/conditions/workspace-alias.condition.d.ts +2 -2
  170. package/dist-cms/packages/core/workspace/conditions/workspace-content-type-alias.condition.d.ts +2 -2
  171. package/dist-cms/packages/core/workspace/conditions/workspace-entity-is-new.condition.d.ts +2 -2
  172. package/dist-cms/packages/core/workspace/conditions/workspace-entity-type.condition.d.ts +2 -2
  173. package/dist-cms/packages/core/workspace/conditions/workspace-has-collection.condition.d.ts +2 -2
  174. package/dist-cms/packages/core/workspace/extensions/workspace-action-menu-item.model.d.ts +1 -1
  175. package/dist-cms/packages/core/workspace/extensions/workspace-action.model.d.ts +1 -1
  176. package/dist-cms/packages/core/workspace/extensions/workspace-context.model.d.ts +1 -1
  177. package/dist-cms/packages/core/workspace/extensions/workspace-footer-app.model.d.ts +1 -1
  178. package/dist-cms/packages/core/workspace/extensions/workspace-view.model.d.ts +1 -1
  179. package/dist-cms/packages/dictionary/workspace/views/workspace-view-dictionary-editor.element.js +9 -5
  180. package/dist-cms/packages/documents/document-types/entity-actions/create/modal/document-type-create-options-modal.element.js +1 -1
  181. package/dist-cms/packages/documents/document-types/paths.js +1 -1
  182. package/dist-cms/packages/documents/document-types/workspace/document-type-workspace.context.js +1 -1
  183. package/dist-cms/packages/documents/documents/user-permissions/conditions/types.d.ts +1 -1
  184. package/dist-cms/packages/documents/documents/workspace/document-workspace.context.d.ts +4 -0
  185. package/dist-cms/packages/documents/documents/workspace/document-workspace.context.js +13 -2
  186. package/dist-cms/packages/documents/documents/workspace/views/info/document-workspace-view-info.element.js +1 -1
  187. package/dist-cms/packages/extension-types/index.d.ts +118 -0
  188. package/dist-cms/packages/markdown-editor/components/input-markdown-editor/input-markdown.element.js +2 -2
  189. package/dist-cms/packages/multi-url-picker/tiny-mce-plugin/tiny-mce-multi-url-picker.plugin.d.ts +2 -1
  190. package/dist-cms/packages/multi-url-picker/tiny-mce-plugin/tiny-mce-multi-url-picker.plugin.js +28 -48
  191. package/dist-cms/packages/packages/package-builder/workspace/workspace-package-builder.element.js +4 -4
  192. package/dist-cms/packages/sysinfo/components/sysinfo.element.d.ts +1 -1
  193. package/dist-cms/packages/sysinfo/components/sysinfo.element.js +29 -11
  194. package/dist-cms/packages/templating/partial-views/entity-actions/create/options-modal/partial-view-create-options-modal.element.js +2 -2
  195. package/dist-cms/packages/templating/partial-views/entity-actions/create/snippet-modal/create-from-snippet-modal.js +1 -1
  196. package/dist-cms/packages/templating/partial-views/tree/partial-view-tree.server.data-source.js +1 -1
  197. package/dist-cms/packages/templating/scripts/entity-actions/create/options-modal/script-create-options-modal.element.js +1 -1
  198. package/dist-cms/packages/templating/scripts/tree/script-tree.server.data-source.js +1 -1
  199. package/dist-cms/packages/templating/stylesheets/entity-actions/create/options-modal/stylesheet-create-options-modal.element.js +2 -2
  200. package/dist-cms/packages/templating/stylesheets/tree/stylesheet-tree.server.data-source.js +1 -1
  201. package/dist-cms/packages/templating/templates/global-components/template-card/template-card.element.js +1 -1
  202. package/dist-cms/packages/templating/templates/tree/template-tree.server.data-source.js +1 -1
  203. package/dist-cms/packages/tiny-mce/components/input-tiny-mce/input-tiny-mce.defaults.js +1 -1
  204. package/dist-cms/packages/tiny-mce/plugins/tiny-mce-code-editor.plugin.js +5 -4
  205. package/dist-cms/packages/tiptap/components/input-tiptap/input-tiptap.element.d.ts +1 -1
  206. package/dist-cms/packages/tiptap/components/input-tiptap/tiptap-toolbar.element.d.ts +1 -1
  207. package/dist-cms/packages/tiptap/components/types.d.ts +1 -0
  208. package/dist-cms/packages/tiptap/components/types.js +1 -0
  209. package/dist-cms/packages/tiptap/extensions/core/media-upload.extension.js +6 -0
  210. package/dist-cms/packages/tiptap/extensions/manifests.js +142 -154
  211. package/dist-cms/packages/tiptap/extensions/tiptap-toolbar-extension.d.ts +1 -0
  212. package/dist-cms/packages/tiptap/extensions/types.d.ts +0 -1
  213. package/dist-cms/packages/tiptap/plugins/manifests.js +1 -1
  214. package/dist-cms/packages/tiptap/property-editors/tiptap/components/property-editor-ui-tiptap-extensions-configuration.element.d.ts +7 -5
  215. package/dist-cms/packages/tiptap/property-editors/tiptap/components/property-editor-ui-tiptap-extensions-configuration.element.js +112 -109
  216. package/dist-cms/packages/tiptap/property-editors/tiptap/components/property-editor-ui-tiptap-toolbar-configuration.element.d.ts +6 -6
  217. package/dist-cms/packages/tiptap/property-editors/tiptap/components/property-editor-ui-tiptap-toolbar-configuration.element.js +304 -198
  218. package/dist-cms/packages/tiptap/property-editors/tiptap/contexts/tiptap-toolbar-configuration.context.d.ts +27 -0
  219. package/dist-cms/packages/tiptap/property-editors/tiptap/contexts/tiptap-toolbar-configuration.context.js +185 -0
  220. package/dist-cms/packages/tiptap/property-editors/tiptap/manifests.js +13 -9
  221. package/dist-cms/packages/tiptap/property-editors/tiptap/types.d.ts +12 -0
  222. package/dist-cms/packages/tiptap/property-editors/tiptap/types.js +1 -0
  223. package/dist-cms/packages/user/current-user/current-user-action.extension.d.ts +1 -1
  224. package/dist-cms/tsconfig.build.tsbuildinfo +1 -1
  225. package/dist-cms/umbraco-package-schema.json +18 -6
  226. package/dist-cms/umbraco-package.json +1 -1
  227. package/dist-cms/vscode-html-custom-data.json +4 -4
  228. package/package.json +5 -4
@@ -4,59 +4,58 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { customElement, css, html, property, state, repeat, nothing } from '../../../../../external/lit/index.js';
8
- import { umbExtensionsRegistry } from '../../../../core/extension-registry/index.js';
7
+ import { UmbTiptapToolbarConfigurationContext } from '../contexts/tiptap-toolbar-configuration.context.js';
8
+ import { customElement, css, html, property, repeat, state, when, nothing } from '../../../../../external/lit/index.js';
9
+ import { debounce } from '../../../../core/utils/index.js';
9
10
  import { UmbLitElement } from '../../../../core/lit-element/index.js';
10
- import { UmbTextStyles } from '../../../../core/style/index.js';
11
- import { UmbPropertyValueChangeEvent } from '../../../../core/property-editor/index.js';
11
+ import { UMB_PROPERTY_CONTEXT } from '../../../../core/property/index.js';
12
12
  const elementName = 'umb-property-editor-ui-tiptap-toolbar-configuration';
13
13
  let UmbPropertyEditorUiTiptapToolbarConfigurationElement = class UmbPropertyEditorUiTiptapToolbarConfigurationElement extends UmbLitElement {
14
- constructor() {
15
- super(...arguments);
16
- this.#inUse = new Set();
17
- this._extensions = [];
18
- this.#value = [[[]]];
19
- }
20
- #inUse;
14
+ #context;
21
15
  #currentDragItem;
22
- #lookup;
16
+ #debouncedFilter;
23
17
  set value(value) {
24
- if (!this.#isValidTiptapToolbarValue(value)) {
25
- this.#value = [[[]]];
18
+ if (!value)
19
+ value = [[[]]];
20
+ if (value === this.#value)
26
21
  return;
27
- }
28
- if (value.length > 0) {
29
- this.#value = value.map((rows) => rows.map((groups) => [...groups]));
30
- value.forEach((row) => row.forEach((group) => group.forEach((alias) => this.#inUse.add(alias))));
31
- }
22
+ this.#context.setToolbar(value);
32
23
  }
33
24
  get value() {
34
- return this.#value;
25
+ return this.#value?.map((rows) => rows.map((groups) => [...groups]));
35
26
  }
36
27
  #value;
37
- async firstUpdated(_changedProperties) {
38
- super.firstUpdated(_changedProperties);
39
- this.observe(umbExtensionsRegistry.byType('tiptapToolbarExtension'), (extensions) => {
40
- this._extensions = extensions.map((ext) => ({ alias: ext.alias, label: ext.meta.label, icon: ext.meta.icon }));
41
- this.#lookup = new Map(this._extensions.map((ext) => [ext.alias, ext]));
28
+ constructor() {
29
+ super();
30
+ this.#context = new UmbTiptapToolbarConfigurationContext(this);
31
+ this.#debouncedFilter = debounce((query) => {
32
+ this._availableExtensions = this.#context.filterExtensions(query);
33
+ }, 250);
34
+ this._availableExtensions = [];
35
+ this._toolbar = [];
36
+ this.consumeContext(UMB_PROPERTY_CONTEXT, (propertyContext) => {
37
+ this.observe(this.#context.extensions, (extensions) => {
38
+ this._availableExtensions = extensions;
39
+ });
40
+ this.observe(this.#context.reload, (reload) => {
41
+ if (reload) {
42
+ this.requestUpdate();
43
+ }
44
+ });
45
+ this.observe(this.#context.toolbar, (toolbar) => {
46
+ if (!toolbar.length)
47
+ return;
48
+ this._toolbar = toolbar;
49
+ this.#value = toolbar.map((rows) => rows.data.map((groups) => [...groups.data]));
50
+ propertyContext.setValue(this.#value);
51
+ });
42
52
  });
43
53
  }
44
- #isValidTiptapToolbarValue(value) {
45
- if (!Array.isArray(value))
46
- return false;
47
- for (const row of value) {
48
- if (!Array.isArray(row))
49
- return false;
50
- for (const group of row) {
51
- if (!Array.isArray(group))
52
- return false;
53
- for (const alias of group) {
54
- if (typeof alias !== 'string')
55
- return false;
56
- }
57
- }
58
- }
59
- return true;
54
+ #onClick(item) {
55
+ const lastRow = (this.#value?.length ?? 1) - 1;
56
+ const lastGroup = (this.#value?.[lastRow].length ?? 1) - 1;
57
+ const lastItem = this.#value?.[lastRow][lastGroup].length ?? 0;
58
+ this.#context.insertToolbarItem(item.alias, [lastRow, lastGroup, lastItem]);
60
59
  }
61
60
  #onDragStart(event, alias, fromPos) {
62
61
  event.dataTransfer.effectAllowed = 'move';
@@ -72,7 +71,7 @@ let UmbPropertyEditorUiTiptapToolbarConfigurationElement = class UmbPropertyEdit
72
71
  const { fromPos } = this.#currentDragItem ?? {};
73
72
  if (!fromPos)
74
73
  return;
75
- this.#removeItem(fromPos);
74
+ this.#context.removeToolbarItem(fromPos);
76
75
  }
77
76
  }
78
77
  #onDrop(event, toPos) {
@@ -80,221 +79,328 @@ let UmbPropertyEditorUiTiptapToolbarConfigurationElement = class UmbPropertyEdit
80
79
  const { alias, fromPos } = this.#currentDragItem ?? {};
81
80
  // Remove item if no destination position is provided
82
81
  if (fromPos && !toPos) {
83
- this.#removeItem(fromPos);
82
+ this.#context.removeToolbarItem(fromPos);
84
83
  return;
85
84
  }
86
85
  // Move item if both source and destination positions are available
87
86
  if (fromPos && toPos) {
88
- this.#moveItem(fromPos, toPos);
87
+ this.#context.moveToolbarItem(fromPos, toPos);
89
88
  return;
90
89
  }
91
90
  // Insert item if an alias and a destination position are provided
92
91
  if (alias && toPos) {
93
- this.#insertItem(alias, toPos);
92
+ this.#context.insertToolbarItem(alias, toPos);
94
93
  }
95
94
  }
96
- #moveItem(from, to) {
97
- const [rowIndex, groupIndex, itemIndex] = from;
98
- // Get the item to move from the 'from' position
99
- const itemToMove = this.#value[rowIndex][groupIndex][itemIndex];
100
- // Remove the item from the original position
101
- this.#value[rowIndex][groupIndex].splice(itemIndex, 1);
102
- this.#insertItem(itemToMove, to);
103
- }
104
- #insertItem(alias, toPos) {
105
- const [rowIndex, groupIndex, itemIndex] = toPos;
106
- // Insert the item into the new position
107
- const inserted = this.#value[rowIndex][groupIndex].splice(itemIndex, 0, alias);
108
- inserted.forEach((alias) => this.#inUse.add(alias));
109
- this.dispatchEvent(new UmbPropertyValueChangeEvent());
110
- }
111
- #removeItem(from) {
112
- const [rowIndex, groupIndex, itemIndex] = from;
113
- const removed = this.#value[rowIndex][groupIndex].splice(itemIndex, 1);
114
- removed.forEach((alias) => this.#inUse.delete(alias));
115
- this.dispatchEvent(new UmbPropertyValueChangeEvent());
95
+ #onFilterInput(event) {
96
+ const query = (event.target.value ?? '').toLocaleLowerCase();
97
+ this.#debouncedFilter(query);
116
98
  }
117
- #addGroup(rowIndex, groupIndex) {
118
- this.#value[rowIndex].splice(groupIndex, 0, []);
119
- this.dispatchEvent(new UmbPropertyValueChangeEvent());
120
- }
121
- #removeGroup(rowIndex, groupIndex) {
122
- if (this.#value[rowIndex].length > groupIndex) {
123
- const removed = this.#value[rowIndex].splice(groupIndex, 1);
124
- removed.forEach((group) => group.forEach((alias) => this.#inUse.delete(alias)));
125
- }
126
- // Prevent leaving an empty group
127
- if (this.#value[rowIndex].length === 0) {
128
- this.#value[rowIndex][groupIndex] = [];
129
- }
130
- this.dispatchEvent(new UmbPropertyValueChangeEvent());
131
- }
132
- #addRow(rowIndex) {
133
- this.#value.splice(rowIndex, 0, [[]]);
134
- this.dispatchEvent(new UmbPropertyValueChangeEvent());
99
+ render() {
100
+ return html `${this.#renderAvailableItems()} ${this.#renderDesigner()}`;
135
101
  }
136
- #removeRow(rowIndex) {
137
- if (this.#value.length > rowIndex) {
138
- const removed = this.#value.splice(rowIndex, 1);
139
- removed.forEach((row) => row.forEach((group) => group.forEach((alias) => this.#inUse.delete(alias))));
140
- }
141
- // Prevent leaving an empty row
142
- if (this.#value.length === 0) {
143
- this.#value[rowIndex] = [[]];
144
- }
145
- this.dispatchEvent(new UmbPropertyValueChangeEvent());
102
+ #renderAvailableItems() {
103
+ return html `
104
+ <uui-box class="minimal" headline=${this.localize.term('tiptap_toobar_availableItems')}>
105
+ <div slot="header-actions">
106
+ <uui-input
107
+ type="search"
108
+ autocomplete="off"
109
+ placeholder=${this.localize.term('placeholders_filter')}
110
+ @input=${this.#onFilterInput}>
111
+ <div slot="prepend">
112
+ <uui-icon name="search"></uui-icon>
113
+ </div>
114
+ </uui-input>
115
+ </div>
116
+ <div class="available-items" dropzone="move" @drop=${this.#onDrop} @dragover=${this.#onDragOver}>
117
+ ${when(this._availableExtensions.length === 0, () => html `<umb-localize key="tiptap_toobar_availableItemsEmpty"
118
+ >There are no toolbar extensions to show</umb-localize
119
+ >`, () => repeat(this._availableExtensions, (item) => this.#renderAvailableItem(item)))}
120
+ </div>
121
+ </uui-box>
122
+ `;
146
123
  }
147
- render() {
124
+ #renderAvailableItem(item) {
125
+ const forbidden = !this.#context.isExtensionEnabled(item.alias);
126
+ const inUse = this.#context.isExtensionInUse(item.alias);
148
127
  return html `
149
- ${repeat(this.#value, (row, rowIndex) => this.#renderRow(row, rowIndex))}
150
- <uui-button look="secondary" @click=${() => this.#addRow(this.#value.length)}>
151
- <uui-icon name="add"></uui-icon>
152
- <span>Add row</span>
128
+ <uui-button
129
+ compact
130
+ class=${forbidden ? 'forbidden' : ''}
131
+ draggable="true"
132
+ look=${forbidden ? 'placeholder' : 'outline'}
133
+ ?disabled=${forbidden || inUse}
134
+ @click=${() => this.#onClick(item)}
135
+ @dragstart=${(e) => this.#onDragStart(e, item.alias)}
136
+ @dragend=${this.#onDragEnd}>
137
+ <div class="inner">
138
+ ${when(item.icon, () => html `<umb-icon .name=${item.icon}></umb-icon>`)}
139
+ <span>${this.localize.string(item.label)}</span>
140
+ </div>
153
141
  </uui-button>
154
- ${this.#renderExtensions()}
155
142
  `;
156
143
  }
157
- #renderRow(row, rowIndex) {
144
+ #renderDesigner() {
158
145
  return html `
159
- <div class="row">
160
- ${repeat(row, (group, groupIndex) => this.#renderGroup(group, rowIndex, groupIndex))}
161
- <uui-button look="secondary" @click=${() => this.#addGroup(rowIndex, row.length)}>
162
- <uui-icon name="add"></uui-icon>
163
- <span>Add group</span>
164
- </uui-button>
146
+ <uui-box class="minimal" headline=${this.localize.term('tiptap_toolbar_designer')}>
147
+ <div id="rows">
148
+ ${repeat(this._toolbar, (row) => row.unique, (row, idx) => this.#renderRow(row, idx))}
149
+ </div>
165
150
  <uui-button
166
- compact
167
- color="danger"
168
- look="primary"
169
- class="remove-row-button ${rowIndex === 0 && row.length === 1 && row[0].length === 0 ? 'hidden' : undefined}"
170
- @click=${() => this.#removeRow(rowIndex)}>
171
- <umb-icon name="icon-trash"></umb-icon>
172
- </uui-button>
151
+ id="btnAddRow"
152
+ look="placeholder"
153
+ label=${this.localize.term('tiptap_toolbar_addRow')}
154
+ @click=${() => this.#context.insertToolbarRow(this._toolbar.length)}></uui-button>
155
+ </uui-box>
156
+ `;
157
+ }
158
+ #renderRow(row, rowIndex = 0) {
159
+ if (!row)
160
+ return nothing;
161
+ const hideActionBar = this._toolbar.length === 1;
162
+ return html `
163
+ <uui-button-inline-create
164
+ label=${this.localize.term('tiptap_toolbar_addRow')}
165
+ @click=${() => this.#context?.insertToolbarRow(rowIndex)}></uui-button-inline-create>
166
+ <div class="row">
167
+ <div class="groups">
168
+ <uui-button-inline-create
169
+ vertical
170
+ label=${this.localize.term('tiptap_toolbar_addGroup')}
171
+ @click=${() => this.#context?.insertToolbarGroup(rowIndex, 0)}></uui-button-inline-create>
172
+ ${repeat(row.data, (group) => group.unique, (group, idx) => this.#renderGroup(group, rowIndex, idx))}
173
+ </div>
174
+ ${when(!hideActionBar, () => html `
175
+ <uui-action-bar>
176
+ <uui-button
177
+ color="danger"
178
+ look="secondary"
179
+ label=${this.localize.term('tiptap_toolbar_removeRow')}
180
+ @click=${() => this.#context?.removeToolbarRow(rowIndex)}>
181
+ <uui-icon name="icon-trash"></uui-icon>
182
+ </uui-button>
183
+ </uui-action-bar>
184
+ `)}
173
185
  </div>
174
186
  `;
175
187
  }
176
- #renderGroup(group, rowIndex, groupIndex) {
188
+ #renderGroup(group, rowIndex = 0, groupIndex = 0) {
189
+ if (!group)
190
+ return nothing;
191
+ const hideActionBar = this._toolbar[rowIndex].data.length === 1 && group.data.length === 0;
177
192
  return html `
178
193
  <div
179
194
  class="group"
180
195
  dropzone="move"
181
196
  @dragover=${this.#onDragOver}
182
- @drop=${(e) => this.#onDrop(e, [rowIndex, groupIndex, group.length])}>
183
- ${group.map((alias, itemIndex) => this.#renderItem(alias, rowIndex, groupIndex, itemIndex))}
184
- <uui-button
185
- compact
186
- color="danger"
187
- look="primary"
188
- class="remove-group-button ${groupIndex === 0 && group.length === 0 ? 'hidden' : undefined}"
189
- @click=${() => this.#removeGroup(rowIndex, groupIndex)}>
190
- <umb-icon name="icon-trash"></umb-icon>
191
- </uui-button>
197
+ @drop=${(e) => this.#onDrop(e, [rowIndex, groupIndex, group.data.length - 1])}>
198
+ <div class="items">
199
+ ${when(group?.data.length === 0, () => html `<em><umb-localize key="tiptap_toolbar_addItems">Add items</umb-localize></em>`, () => html `${group.data.map((alias, idx) => this.#renderItem(alias, rowIndex, groupIndex, idx))}`)}
200
+ </div>
201
+ ${when(!hideActionBar, () => html `
202
+ <uui-action-bar>
203
+ <uui-button
204
+ color="danger"
205
+ look="secondary"
206
+ label=${this.localize.term('tiptap_toolbar_removeGroup')}
207
+ @click=${() => this.#context?.removeToolbarGroup(rowIndex, groupIndex)}>
208
+ <uui-icon name="icon-trash"></uui-icon>
209
+ </uui-button>
210
+ </uui-action-bar>
211
+ `)}
192
212
  </div>
213
+ <uui-button-inline-create
214
+ vertical
215
+ label=${this.localize.term('tiptap_toolbar_addGroup')}
216
+ @click=${() => this.#context?.insertToolbarGroup(rowIndex, groupIndex + 1)}></uui-button-inline-create>
193
217
  `;
194
218
  }
195
- #renderItem(alias, rowIndex, groupIndex, itemIndex) {
196
- const extension = this.#lookup?.get(alias);
197
- if (!extension)
219
+ #renderItem(alias, rowIndex = 0, groupIndex = 0, itemIndex = 0) {
220
+ const item = this.#context?.getExtensionByAlias(alias);
221
+ if (!item)
198
222
  return nothing;
223
+ const forbidden = !this.#context?.isExtensionEnabled(item.alias);
199
224
  return html `
200
- <div
201
- title=${this.localize.string(extension.label)}
202
- class="item"
225
+ <uui-button
226
+ compact
227
+ class=${forbidden ? 'forbidden' : ''}
203
228
  draggable="true"
229
+ look=${forbidden ? 'placeholder' : 'outline'}
230
+ title=${this.localize.string(item.label)}
231
+ ?disabled=${forbidden}
232
+ @click=${() => this.#context.removeToolbarItem([rowIndex, groupIndex, itemIndex])}
204
233
  @dragend=${this.#onDragEnd}
205
234
  @dragstart=${(e) => this.#onDragStart(e, alias, [rowIndex, groupIndex, itemIndex])}>
206
- <umb-icon name=${extension.icon ?? ''}></umb-icon>
207
- </div>
208
- `;
209
- }
210
- #renderExtensions() {
211
- return html `
212
- <div class="extensions" dropzone="move" @drop=${this.#onDrop} @dragover=${this.#onDragOver}>
213
- ${repeat(this._extensions.filter((ext) => !this.#inUse.has(ext.alias)), (extension) => html `
214
- <div
215
- class="item"
216
- draggable="true"
217
- title=${this.localize.string(extension.label)}
218
- @dragstart=${(e) => this.#onDragStart(e, extension.alias)}
219
- @dragend=${this.#onDragEnd}>
220
- <umb-icon name=${extension.icon ?? ''}></umb-icon>
221
- </div>
222
- `)}
223
- </div>
235
+ <div class="inner">
236
+ ${when(item.icon, () => html `<umb-icon .name=${item.icon}></umb-icon>`, () => html `<span>${this.localize.string(item.label)}</span>`)}
237
+ </div>
238
+ </uui-button>
224
239
  `;
225
240
  }
226
241
  static { this.styles = [
227
- UmbTextStyles,
228
242
  css `
229
243
  :host {
230
244
  display: flex;
231
245
  flex-direction: column;
232
- gap: 6px;
246
+ gap: var(--uui-size-1);
247
+ }
248
+
249
+ uui-box.minimal {
250
+ --uui-box-header-padding: 0;
251
+ --uui-box-default-padding: var(--uui-size-2) 0;
252
+ --uui-box-box-shadow: none;
253
+
254
+ [slot='header-actions'] {
255
+ margin-bottom: var(--uui-size-2);
256
+
257
+ uui-icon {
258
+ color: var(--uui-color-border);
259
+ }
260
+ }
233
261
  }
234
- .extensions {
262
+
263
+ .available-items {
235
264
  display: flex;
236
265
  flex-wrap: wrap;
237
- gap: 3px;
238
- border-radius: var(--uui-border-radius);
266
+ gap: var(--uui-size-3);
239
267
  background-color: var(--uui-color-surface-alt);
240
- padding: 6px;
241
- min-height: 30px;
242
- min-width: 30px;
243
- }
244
- .row {
245
- position: relative;
246
- display: flex;
247
- gap: 12px;
248
- }
249
- .group {
250
- position: relative;
251
- display: flex;
252
- gap: 3px;
253
268
  border-radius: var(--uui-border-radius);
254
- background-color: var(--uui-color-surface-alt);
255
- padding: 6px;
256
- min-height: 32px;
257
- min-width: 32px;
269
+ padding: var(--uui-size-3);
270
+
271
+ uui-button {
272
+ --uui-button-font-weight: normal;
273
+
274
+ &[draggable='true'],
275
+ &[draggable='true'] > .inner {
276
+ cursor: move;
277
+ }
278
+
279
+ &[disabled],
280
+ &[disabled] > .inner {
281
+ cursor: not-allowed;
282
+ }
283
+
284
+ &.forbidden {
285
+ --color: var(--uui-color-danger);
286
+ --color-standalone: var(--uui-color-danger-standalone);
287
+ --color-emphasis: var(--uui-color-danger-emphasis);
288
+ --color-contrast: var(--uui-color-danger);
289
+ --uui-button-contrast-disabled: var(--uui-color-danger);
290
+ --uui-button-border-color-disabled: var(--uui-color-danger);
291
+ opacity: 0.5;
292
+ }
293
+
294
+ div {
295
+ display: flex;
296
+ gap: var(--uui-size-1);
297
+ }
298
+ }
258
299
  }
259
- .item {
260
- padding: var(--uui-size-space-2);
261
- border: 1px solid var(--uui-color-border);
262
- border-radius: var(--uui-border-radius);
263
- background-color: var(--uui-color-surface);
264
- cursor: move;
300
+
301
+ #rows {
265
302
  display: flex;
266
- box-sizing: border-box;
267
- width: 32px;
268
- height: 32px;
269
- justify-content: center;
270
- }
303
+ flex-direction: column;
304
+ gap: var(--uui-size-1);
271
305
 
272
- .remove-row-button,
273
- .remove-group-button {
274
- display: none;
275
- }
276
- .remove-group-button {
277
- position: absolute;
278
- top: -26px;
279
- left: 50%;
280
- transform: translateX(-50%);
281
- z-index: 1;
306
+ .row {
307
+ display: flex;
308
+ align-items: flex-start;
309
+ justify-content: space-between;
310
+ gap: var(--uui-size-3);
311
+ border: 1px solid var(--uui-color-border);
312
+ border-radius: var(--uui-border-radius);
313
+ padding: var(--uui-size-3) var(--uui-size-2);
314
+
315
+ &:hover {
316
+ border-color: var(--uui-button-contrast-hover);
317
+ }
318
+
319
+ .groups {
320
+ flex: 1;
321
+ display: flex;
322
+ flex-direction: row;
323
+ flex-wrap: wrap;
324
+ align-items: center;
325
+ justify-content: flex-start;
326
+ gap: var(--uui-size-1);
327
+
328
+ uui-button-inline-create {
329
+ height: 40px;
330
+ }
331
+
332
+ .group {
333
+ display: flex;
334
+ flex-direction: row;
335
+ align-items: center;
336
+ justify-content: space-between;
337
+ gap: var(--uui-size-3);
338
+
339
+ border: 1px dashed var(--uui-color-border-standalone);
340
+ border-radius: var(--uui-border-radius);
341
+ padding: var(--uui-size-3);
342
+
343
+ &:hover {
344
+ border-color: var(--uui-button-contrast-hover);
345
+ }
346
+
347
+ .items {
348
+ display: flex;
349
+ flex-direction: row;
350
+ flex-wrap: wrap;
351
+ gap: var(--uui-size-1);
352
+
353
+ uui-button {
354
+ --uui-button-font-weight: normal;
355
+
356
+ &[draggable='true'],
357
+ &[draggable='true'] > .inner {
358
+ cursor: move;
359
+ }
360
+
361
+ &[disabled],
362
+ &[disabled] > .inner {
363
+ cursor: not-allowed;
364
+ }
365
+
366
+ &.forbidden {
367
+ --color: var(--uui-color-danger);
368
+ --color-standalone: var(--uui-color-danger-standalone);
369
+ --color-emphasis: var(--uui-color-danger-emphasis);
370
+ --color-contrast: var(--uui-color-danger);
371
+ --uui-button-contrast-disabled: var(--uui-color-danger);
372
+ --uui-button-border-color-disabled: var(--uui-color-danger);
373
+ opacity: 0.5;
374
+ }
375
+
376
+ div {
377
+ display: flex;
378
+ gap: var(--uui-size-1);
379
+ }
380
+ }
381
+ }
382
+ }
383
+ }
384
+ }
282
385
  }
283
386
 
284
- .row:hover .remove-row-button:not(.hidden),
285
- .group:hover .remove-group-button:not(.hidden) {
286
- display: flex;
387
+ #btnAddRow {
388
+ display: block;
389
+ margin-top: var(--uui-size-1);
287
390
  }
288
- umb-icon {
289
- /* Prevents titles from bugging out */
290
- pointer-events: none;
391
+
392
+ .handle {
393
+ cursor: move;
291
394
  }
292
395
  `,
293
396
  ]; }
294
397
  };
295
398
  __decorate([
296
399
  state()
297
- ], UmbPropertyEditorUiTiptapToolbarConfigurationElement.prototype, "_extensions", void 0);
400
+ ], UmbPropertyEditorUiTiptapToolbarConfigurationElement.prototype, "_availableExtensions", void 0);
401
+ __decorate([
402
+ state()
403
+ ], UmbPropertyEditorUiTiptapToolbarConfigurationElement.prototype, "_toolbar", void 0);
298
404
  __decorate([
299
405
  property({ attribute: false })
300
406
  ], UmbPropertyEditorUiTiptapToolbarConfigurationElement.prototype, "value", null);
@@ -0,0 +1,27 @@
1
+ import type { UmbTiptapToolbarValue } from '../../../components/types.js';
2
+ import type { UmbTiptapToolbarExtension, UmbTiptapToolbarGroupViewModel, UmbTiptapToolbarRowViewModel } from '../types.js';
3
+ import { UmbContextBase } from '../../../../../libs/class-api/index.js';
4
+ import { UmbContextToken } from '../../../../../libs/context-api/index.js';
5
+ import type { UmbControllerHost } from '../../../../../libs/controller-api/index.js';
6
+ export declare class UmbTiptapToolbarConfigurationContext extends UmbContextBase<UmbTiptapToolbarConfigurationContext> {
7
+ #private;
8
+ readonly extensions: import("rxjs/internal/Observable").Observable<UmbTiptapToolbarExtension[]>;
9
+ readonly reload: import("rxjs/internal/Observable").Observable<boolean>;
10
+ readonly toolbar: import("rxjs/internal/Observable").Observable<UmbTiptapToolbarRowViewModel[]>;
11
+ constructor(host: UmbControllerHost);
12
+ filterExtensions(query: string): Array<UmbTiptapToolbarExtension>;
13
+ getExtensionByAlias(alias: string): UmbTiptapToolbarExtension | undefined;
14
+ isExtensionEnabled(alias: string): boolean;
15
+ isExtensionInUse(alias: string): boolean;
16
+ isValidToolbarValue(value: unknown): value is UmbTiptapToolbarValue;
17
+ insertToolbarItem(alias: string, to: [number, number, number]): void;
18
+ insertToolbarGroup(rowIndex: number, groupIndex: number): void;
19
+ insertToolbarRow(rowIndex: number): void;
20
+ moveToolbarItem(from: [number, number, number], to: [number, number, number]): void;
21
+ removeToolbarItem(from: [number, number, number]): void;
22
+ removeToolbarGroup(rowIndex: number, groupIndex: number): void;
23
+ removeToolbarRow(rowIndex: number): void;
24
+ setToolbar(value?: UmbTiptapToolbarValue | null): void;
25
+ updateToolbarRow(rowIndex: number, groups: Array<UmbTiptapToolbarGroupViewModel>): void;
26
+ }
27
+ export declare const UMB_TIPTAP_TOOLBAR_CONFIGURATION_CONTEXT: UmbContextToken<UmbTiptapToolbarConfigurationContext, UmbTiptapToolbarConfigurationContext>;