From 0b476a1e88669a02fbe1d9535d043c5c87cefec3 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Mon, 16 Sep 2024 15:22:36 +0100 Subject: [PATCH] Adds `tiptapExtension` manifest type --- .../core/extension-registry/models/index.ts | 3 +++ .../models/tiptap-extension.model.ts | 6 +++++ .../src/packages/rte/manifests.ts | 3 ++- .../tiptap/components/input-tiptap/index.ts | 1 + .../input-tiptap/tiptap-extension.ts | 22 +++++++++++++++++++ .../src/packages/rte/tiptap/index.ts | 1 + 6 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/tiptap-extension.model.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/rte/tiptap/components/input-tiptap/tiptap-extension.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/rte/tiptap/index.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/index.ts index 00fec52d8f..d79b3f9e4a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/index.ts @@ -42,6 +42,7 @@ import type { ManifestSectionView } from './section-view.model.js'; import type { ManifestStore, ManifestTreeStore, ManifestItemStore } from './store.model.js'; import type { ManifestTheme } from './theme.model.js'; import type { ManifestTinyMcePlugin } from './tinymce-plugin.model.js'; +import type { ManifestTiptapExtension } from './tiptap-extension.model.js'; import type { ManifestTree } from './tree.model.js'; import type { ManifestTreeItem } from './tree-item.model.js'; import type { ManifestUfmComponent } from './ufm-component.model.js'; @@ -113,6 +114,7 @@ export type * from './section.model.js'; export type * from './store.model.js'; export type * from './theme.model.js'; export type * from './tinymce-plugin.model.js'; +export type * from './tiptap-extension.model.js'; export type * from './tree-item.model.js'; export type * from './tree.model.js'; export type * from './ufm-component.model.js'; @@ -206,6 +208,7 @@ export type ManifestTypes = | ManifestStore | ManifestTheme | ManifestTinyMcePlugin + | ManifestTiptapExtension | ManifestTree | ManifestTreeItem | ManifestTreeStore diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/tiptap-extension.model.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/tiptap-extension.model.ts new file mode 100644 index 0000000000..5d9ff73dfa --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/tiptap-extension.model.ts @@ -0,0 +1,6 @@ +import type { UmbTiptapExtensionBase } from '@umbraco-cms/backoffice/tiptap'; +import type { ManifestApi } from '@umbraco-cms/backoffice/extension-api'; + +export interface ManifestTiptapExtension extends ManifestApi { + type: 'tiptapExtension'; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/rte/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/rte/manifests.ts index f4d7d8f1ff..1a38fe7fe9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/rte/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/rte/manifests.ts @@ -1,3 +1,4 @@ import { manifests as tiptapManifests } from './tiptap/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...tiptapManifests]; +export const manifests: Array = [...tiptapManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/rte/tiptap/components/input-tiptap/index.ts b/src/Umbraco.Web.UI.Client/src/packages/rte/tiptap/components/input-tiptap/index.ts index f11b53c7d9..0d9456b123 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/rte/tiptap/components/input-tiptap/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/rte/tiptap/components/input-tiptap/index.ts @@ -1 +1,2 @@ export * from './input-tiptap.element.js'; +export * from './tiptap-extension.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/rte/tiptap/components/input-tiptap/tiptap-extension.ts b/src/Umbraco.Web.UI.Client/src/packages/rte/tiptap/components/input-tiptap/tiptap-extension.ts new file mode 100644 index 0000000000..aa01ea3420 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/rte/tiptap/components/input-tiptap/tiptap-extension.ts @@ -0,0 +1,22 @@ +import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; +import type { Editor, Extension, Mark, Node } from '@umbraco-cms/backoffice/external/tiptap'; +import type { TemplateResult } from '@umbraco-cms/backoffice/external/lit'; +import type { UmbApi } from '@umbraco-cms/backoffice/extension-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; + +export abstract class UmbTiptapExtensionBase extends UmbControllerBase implements UmbApi { + constructor(host: UmbControllerHost) { + super(host); + } + + abstract getExtensions(): Array; + + abstract getToolbarButtons(): Array; +} + +export interface UmbTiptapToolbarButton { + name: string; + icon: string | TemplateResult; + isActive: (editor?: Editor) => boolean | undefined; + command: (editor?: Editor) => boolean | undefined | void | Promise | Promise | Promise; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/rte/tiptap/index.ts b/src/Umbraco.Web.UI.Client/src/packages/rte/tiptap/index.ts new file mode 100644 index 0000000000..8a8c2711ca --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/rte/tiptap/index.ts @@ -0,0 +1 @@ +export * from './components/index.js';