From 58a6d41dc7f3574fc2e7f159efd57c2d1abeacec Mon Sep 17 00:00:00 2001 From: Lone Iversen <108085781+loivsen@users.noreply.github.com> Date: Thu, 5 Oct 2023 10:34:24 +0200 Subject: [PATCH] markdown editor --- .../src/packages/core/components/index.ts | 1 + .../components/input-markdown-editor/index.ts | 1 + .../input-markdown.element.ts | 75 +++++++++++++++++++ .../input-markdown.stories.ts | 17 +++++ ...perty-editor-ui-markdown-editor.element.ts | 22 +++++- 5 files changed, 112 insertions(+), 4 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/components/input-markdown-editor/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/components/input-markdown-editor/input-markdown.element.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/components/input-markdown-editor/input-markdown.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/index.ts index 59a3af5f4c..cc2a60b22b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/index.ts @@ -17,6 +17,7 @@ export * from './input-checkbox-list/index.js'; export * from './input-color/index.js'; export * from './input-eye-dropper/index.js'; export * from './input-list-base/index.js'; +export * from './input-markdown-editor/index.js'; export * from './input-multi-url/index.js'; export * from './input-tiny-mce/index.js'; export * from './input-number-range/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-markdown-editor/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-markdown-editor/index.ts new file mode 100644 index 0000000000..073c23b3cc --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-markdown-editor/index.ts @@ -0,0 +1 @@ +export * from './input-markdown.element.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-markdown-editor/input-markdown.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-markdown-editor/input-markdown.element.ts new file mode 100644 index 0000000000..a4acfd4637 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-markdown-editor/input-markdown.element.ts @@ -0,0 +1,75 @@ +import { UmbCodeEditorElement, loadCodeEditor } from '@umbraco-cms/backoffice/code-editor'; +import { css, html, customElement, query, property } from '@umbraco-cms/backoffice/external/lit'; +import { FormControlMixin } from '@umbraco-cms/backoffice/external/uui'; +import { UmbBooleanState } from '@umbraco-cms/backoffice/observable-api'; +import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; + +/** + * @element umb-input-markdown + * @fires change - when the value of the input changes + */ +@customElement('umb-input-markdown') +export class UmbInputMarkdownElement extends FormControlMixin(UmbLitElement) { + protected getFormElement() { + return undefined; + } + + @property({ type: Boolean }) + preview?: boolean; + + #isCodeEditorReady = new UmbBooleanState(false); + isCodeEditorReady = this.#isCodeEditorReady.asObservable(); + + @query('umb-code-editor') + _codeEditor?: UmbCodeEditorElement; + + constructor() { + super(); + this.#loadCodeEditor(); + } + + async #loadCodeEditor() { + try { + await loadCodeEditor(); + this.#isCodeEditorReady.next(true); + } catch (error) { + console.error(error); + } + } + + render() { + return html`
+