@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
@@ -0,0 +1,185 @@
1
+ import { umbExtensionsRegistry } from '../../../../core/extension-registry/index.js';
2
+ import { UmbArrayState, UmbBooleanState } from '../../../../../libs/observable-api/index.js';
3
+ import { UmbContextBase } from '../../../../../libs/class-api/index.js';
4
+ import { UmbContextToken } from '../../../../../libs/context-api/index.js';
5
+ import { UmbId } from '../../../../core/id/index.js';
6
+ import { UMB_PROPERTY_DATASET_CONTEXT } from '../../../../core/property/index.js';
7
+ export class UmbTiptapToolbarConfigurationContext extends UmbContextBase {
8
+ #extensions;
9
+ #reload;
10
+ #extensionsEnabled;
11
+ #extensionsInUse;
12
+ #lookup;
13
+ #toolbar;
14
+ constructor(host) {
15
+ super(host, UMB_TIPTAP_TOOLBAR_CONFIGURATION_CONTEXT);
16
+ this.#extensions = new UmbArrayState([], (x) => x.alias);
17
+ this.extensions = this.#extensions.asObservable();
18
+ this.#reload = new UmbBooleanState(false);
19
+ this.reload = this.#reload.asObservable();
20
+ this.#extensionsEnabled = new Set();
21
+ this.#extensionsInUse = new Set();
22
+ this.#toolbar = new UmbArrayState([], (x) => x.unique);
23
+ this.toolbar = this.#toolbar.asObservable();
24
+ this.observe(umbExtensionsRegistry.byType('tiptapToolbarExtension'), (extensions) => {
25
+ const _extensions = extensions.map((ext) => ({
26
+ alias: ext.alias,
27
+ label: ext.meta.label,
28
+ icon: ext.meta.icon,
29
+ dependencies: ext.forExtensions,
30
+ }));
31
+ this.#extensions.setValue(_extensions);
32
+ this.#lookup = new Map(_extensions.map((ext) => [ext.alias, ext]));
33
+ });
34
+ this.consumeContext(UMB_PROPERTY_DATASET_CONTEXT, async (dataset) => {
35
+ this.observe(await dataset.propertyValueByAlias('extensions'), (extensions) => {
36
+ if (extensions) {
37
+ this.#extensionsEnabled.clear();
38
+ this.#reload.setValue(false);
39
+ this.#extensions
40
+ .getValue()
41
+ .filter((x) => !x.dependencies || x.dependencies.every((z) => extensions.includes(z)))
42
+ .map((x) => x.alias)
43
+ .forEach((alias) => this.#extensionsEnabled.add(alias));
44
+ this.#reload.setValue(true);
45
+ }
46
+ }, '_observeExtensions');
47
+ });
48
+ }
49
+ filterExtensions(query) {
50
+ return this.#extensions
51
+ .getValue()
52
+ .filter((ext) => ext.alias?.toLowerCase().includes(query) || ext.label?.toLowerCase().includes(query));
53
+ }
54
+ getExtensionByAlias(alias) {
55
+ return this.#lookup?.get(alias);
56
+ }
57
+ isExtensionEnabled(alias) {
58
+ return this.#extensionsEnabled.has(alias);
59
+ }
60
+ isExtensionInUse(alias) {
61
+ return this.#extensionsInUse.has(alias);
62
+ }
63
+ isValidToolbarValue(value) {
64
+ if (!Array.isArray(value))
65
+ return false;
66
+ for (const row of value) {
67
+ if (!Array.isArray(row))
68
+ return false;
69
+ for (const group of row) {
70
+ if (!Array.isArray(group))
71
+ return false;
72
+ for (const alias of group) {
73
+ if (typeof alias !== 'string')
74
+ return false;
75
+ }
76
+ }
77
+ }
78
+ return true;
79
+ }
80
+ insertToolbarItem(alias, to) {
81
+ const toolbar = [...this.#toolbar.getValue()];
82
+ const [rowIndex, groupIndex, itemIndex] = to;
83
+ const row = toolbar[rowIndex];
84
+ const rowData = [...row.data];
85
+ const group = rowData[groupIndex];
86
+ const items = [...group.data];
87
+ items.splice(itemIndex, 0, alias);
88
+ this.#extensionsInUse.add(alias);
89
+ rowData[groupIndex] = { unique: group.unique, data: items };
90
+ toolbar[rowIndex] = { unique: row.unique, data: rowData };
91
+ this.#toolbar.setValue(toolbar);
92
+ }
93
+ insertToolbarGroup(rowIndex, groupIndex) {
94
+ const toolbar = [...this.#toolbar.getValue()];
95
+ const row = toolbar[rowIndex];
96
+ const groups = [...row.data];
97
+ groups.splice(groupIndex, 0, { unique: UmbId.new(), data: [] });
98
+ toolbar[rowIndex] = { unique: row.unique, data: groups };
99
+ this.#toolbar.setValue(toolbar);
100
+ }
101
+ insertToolbarRow(rowIndex) {
102
+ const toolbar = [...this.#toolbar.getValue()];
103
+ toolbar.splice(rowIndex, 0, { unique: UmbId.new(), data: [{ unique: UmbId.new(), data: [] }] });
104
+ this.#toolbar.setValue(toolbar);
105
+ }
106
+ moveToolbarItem(from, to) {
107
+ const [fromRowIndex, fromGroupIndex, fromItemIndex] = from;
108
+ const [toRowIndex, toGroupIndex, toItemIndex] = to;
109
+ const toolbar = [...this.#toolbar.getValue()];
110
+ const fromRow = toolbar[fromRowIndex];
111
+ const fromRowData = [...fromRow.data];
112
+ const fromGroup = fromRowData[fromGroupIndex];
113
+ const fromItems = [...fromGroup.data];
114
+ const toBeMoved = fromItems.splice(fromItemIndex, 1);
115
+ fromRowData[fromGroupIndex] = { unique: fromGroup.unique, data: fromItems };
116
+ toolbar[fromRowIndex] = { unique: fromRow.unique, data: fromRowData };
117
+ const toRow = toolbar[toRowIndex];
118
+ const toRowData = [...toRow.data];
119
+ const toGroup = toRowData[toGroupIndex];
120
+ const toItems = [...toGroup.data];
121
+ toItems.splice(toItemIndex, 0, toBeMoved[0]);
122
+ toRowData[toGroupIndex] = { unique: toGroup.unique, data: toItems };
123
+ toolbar[toRowIndex] = { unique: toRow.unique, data: toRowData };
124
+ this.#toolbar.setValue(toolbar);
125
+ }
126
+ removeToolbarItem(from) {
127
+ const [rowIndex, groupIndex, itemIndex] = from;
128
+ const toolbar = [...this.#toolbar.getValue()];
129
+ const row = toolbar[rowIndex];
130
+ const rowData = [...row.data];
131
+ const group = rowData[groupIndex];
132
+ const items = [...group.data];
133
+ const removed = items.splice(itemIndex, 1);
134
+ removed.forEach((alias) => this.#extensionsInUse.delete(alias));
135
+ rowData[groupIndex] = { unique: group.unique, data: items };
136
+ toolbar[rowIndex] = { unique: row.unique, data: rowData };
137
+ this.#toolbar.setValue(toolbar);
138
+ }
139
+ removeToolbarGroup(rowIndex, groupIndex) {
140
+ const toolbar = [...this.#toolbar.getValue()];
141
+ if (toolbar[rowIndex].data.length > groupIndex) {
142
+ const row = toolbar[rowIndex];
143
+ const groups = [...row.data];
144
+ const removed = groups.splice(groupIndex, 1);
145
+ removed.forEach((group) => group.data.forEach((alias) => this.#extensionsInUse.delete(alias)));
146
+ toolbar[rowIndex] = { unique: row.unique, data: groups };
147
+ }
148
+ // Prevent leaving an empty group
149
+ if (toolbar[rowIndex].data.length === 0) {
150
+ toolbar[rowIndex].data[0] = { unique: UmbId.new(), data: [] };
151
+ }
152
+ this.#toolbar.setValue(toolbar);
153
+ }
154
+ removeToolbarRow(rowIndex) {
155
+ const toolbar = [...this.#toolbar.getValue()];
156
+ if (toolbar.length > rowIndex) {
157
+ const removed = toolbar.splice(rowIndex, 1);
158
+ removed.forEach((row) => row.data.forEach((group) => group.data.forEach((alias) => this.#extensionsInUse.delete(alias))));
159
+ }
160
+ // Prevent leaving an empty row
161
+ if (toolbar.length === 0) {
162
+ toolbar[0] = { unique: UmbId.new(), data: [{ unique: UmbId.new(), data: [] }] };
163
+ }
164
+ this.#toolbar.setValue(toolbar);
165
+ }
166
+ setToolbar(value) {
167
+ if (!this.isValidToolbarValue(value)) {
168
+ value = [[[]]];
169
+ }
170
+ this.#extensionsInUse.clear();
171
+ value.forEach((row) => row.forEach((group) => group.forEach((alias) => this.#extensionsInUse.add(alias))));
172
+ const toolbar = value.map((row) => ({
173
+ unique: UmbId.new(),
174
+ data: row.map((group) => ({ unique: UmbId.new(), data: group })),
175
+ }));
176
+ this.#toolbar.setValue(toolbar);
177
+ }
178
+ updateToolbarRow(rowIndex, groups) {
179
+ const toolbar = [...this.#toolbar.getValue()];
180
+ const row = toolbar[rowIndex];
181
+ toolbar[rowIndex] = { unique: row.unique, data: groups };
182
+ this.#toolbar.setValue(toolbar);
183
+ }
184
+ }
185
+ export const UMB_TIPTAP_TOOLBAR_CONFIGURATION_CONTEXT = new UmbContextToken('UmbTiptapToolbarConfigurationContext');
@@ -11,20 +11,24 @@ export const manifests = [
11
11
  group: 'richContent',
12
12
  settings: {
13
13
  properties: [
14
- {
15
- alias: 'toolbar',
16
- label: 'Toolbar',
17
- description: 'Pick the toolbar items that should be available when editing',
18
- propertyEditorUiAlias: 'Umb.PropertyEditorUi.Tiptap.ToolbarConfiguration',
19
- weight: 5,
20
- },
21
14
  {
22
15
  alias: 'extensions',
23
- label: 'Extensions',
24
- description: 'Extensions to enable',
16
+ label: 'Capabilities',
17
+ description: `Enable extensions enhance the capabilities of the Tiptap editor.
18
+
19
+ _Once enabled, the extensions will be available in the toolbar._`,
25
20
  propertyEditorUiAlias: 'Umb.PropertyEditorUi.Tiptap.ExtensionsConfiguration',
26
21
  weight: 10,
27
22
  },
23
+ {
24
+ alias: 'toolbar',
25
+ label: 'Toolbar',
26
+ description: `Configure the toolbar for the intended editing experience.
27
+
28
+ _Drag and drop the available items onto the toolbar designer._`,
29
+ propertyEditorUiAlias: 'Umb.PropertyEditorUi.Tiptap.ToolbarConfiguration',
30
+ weight: 15,
31
+ },
28
32
  {
29
33
  alias: 'dimensions',
30
34
  label: 'Dimensions',
@@ -0,0 +1,12 @@
1
+ export type UmbTiptapToolbarExtension = {
2
+ alias: string;
3
+ label: string;
4
+ icon: string;
5
+ dependencies?: Array<string>;
6
+ };
7
+ export type UmbTiptapToolbarSortableViewModel<T> = {
8
+ unique: string;
9
+ data: T;
10
+ };
11
+ export type UmbTiptapToolbarRowViewModel = UmbTiptapToolbarSortableViewModel<Array<UmbTiptapToolbarGroupViewModel>>;
12
+ export type UmbTiptapToolbarGroupViewModel = UmbTiptapToolbarSortableViewModel<Array<string>>;
@@ -17,7 +17,7 @@ export interface UmbCurrentUserAction<ArgsMetaType = never> extends UmbAction<Um
17
17
  */
18
18
  execute(): Promise<void>;
19
19
  }
20
- export interface ManifestCurrentUserAction<MetaType extends MetaCurrentUserAction = MetaCurrentUserAction> extends ManifestElementAndApi<UmbControllerHostElement, UmbCurrentUserAction<MetaType>>, ManifestWithDynamicConditions<UmbExtensionCondition> {
20
+ export interface ManifestCurrentUserAction<MetaType extends MetaCurrentUserAction = MetaCurrentUserAction> extends ManifestElementAndApi<UmbControllerHostElement, UmbCurrentUserAction<MetaType>>, ManifestWithDynamicConditions<UmbExtensionConditionConfig> {
21
21
  type: 'currentUserAction';
22
22
  meta: MetaType;
23
23
  }