{"version":3,"file":"index.js","sources":["../../../src/packages/ufm/components/ufm-render/ufm-render.element.ts","../../../src/packages/ufm/controllers/ufm-virtual-render.controller.ts"],"sourcesContent":["import { UMB_UFM_CONTEXT } from '../../contexts/ufm.context.js';\r\nimport { UmbUfmRenderContext } from './ufm-render.context.js';\r\nimport { css, customElement, nothing, property, unsafeHTML, until } from '@umbraco-cms/backoffice/external/lit';\r\nimport { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';\r\nimport { UmbTextStyles } from '@umbraco-cms/backoffice/style';\r\n\r\nconst elementName = 'umb-ufm-render';\r\n\r\n@customElement(elementName)\r\nexport class UmbUfmRenderElement extends UmbLitElement {\r\n\t#context = new UmbUfmRenderContext(this);\r\n\r\n\t@property({ type: Boolean })\r\n\tinline = false;\r\n\r\n\t@property()\r\n\tmarkdown?: string;\r\n\r\n\t// No reactive property declaration cause its causing a re-render that is not needed. This just works as a shortcut to set the values on the context. [NL]\r\n\tpublic set value(value: string | unknown | undefined) {\r\n\t\tthis.#context.setValue(value);\r\n\t}\r\n\tpublic get value(): string | unknown | undefined {\r\n\t\treturn this.#context.getValue();\r\n\t}\r\n\r\n\t#ufmContext?: typeof UMB_UFM_CONTEXT.TYPE;\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.consumeContext(UMB_UFM_CONTEXT, (ufmContext) => {\r\n\t\t\tthis.#ufmContext = ufmContext;\r\n\t\t});\r\n\t}\r\n\r\n\toverride toString(): string {\r\n\t\treturn this.shadowRoot?.textContent ?? '';\r\n\t}\r\n\r\n\toverride render() {\r\n\t\treturn until(this.#renderMarkdown());\r\n\t}\r\n\r\n\tasync #renderMarkdown() {\r\n\t\tif (!this.#ufmContext || !this.markdown) return null;\r\n\t\tconst markup = await this.#ufmContext.parse(this.markdown, this.inline);\r\n\t\treturn markup ? unsafeHTML(markup) : nothing;\r\n\t}\r\n\r\n\tstatic override styles = [\r\n\t\tUmbTextStyles,\r\n\t\tcss`\r\n\t\t\t* {\r\n\t\t\t\tmax-width: 100%;\r\n\t\t\t\tword-wrap: break-word;\r\n\t\t\t}\r\n\r\n\t\t\tpre {\r\n\t\t\t\toverflow: auto;\r\n\t\t\t}\r\n\r\n\t\t\t:host > :first-child {\r\n\t\t\t\tmargin-block-start: 0;\r\n\t\t\t}\r\n\r\n\t\t\t:host > :last-child {\r\n\t\t\t\tmargin-block-end: 0;\r\n\t\t\t}\r\n\t\t`,\r\n\t];\r\n}\r\n\r\nexport { UmbUfmRenderElement as element };\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t[elementName]: UmbUfmRenderElement;\r\n\t}\r\n}\r\n","import { UmbUfmRenderElement } from '../components/index.js';\r\nimport { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';\r\n\r\n/**\r\n * Renders a UFM\r\n */\r\nexport class UmbUfmVirtualRenderController extends UmbControllerBase {\r\n\t#element?: UmbUfmRenderElement;\r\n\r\n\t#getTextFromDescendants(element?: Element | null): string {\r\n\t\tif (!element) return '';\r\n\r\n\t\tconst items: Array = [];\r\n\r\n\t\titems.push(element.shadowRoot?.textContent ?? element.textContent ?? '');\r\n\r\n\t\tif (element.shadowRoot !== null) {\r\n\t\t\tArray.from(element.shadowRoot.children).forEach((element) => {\r\n\t\t\t\titems.push(this.#getTextFromDescendants(element));\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (element.children !== null) {\r\n\t\t\tArray.from(element.children).forEach((element) => {\r\n\t\t\t\titems.push(this.#getTextFromDescendants(element));\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn items.filter((x) => x).join(' ');\r\n\t}\r\n\r\n\tset markdown(markdown: string | undefined) {\r\n\t\tthis.#markdown = markdown;\r\n\t\tif (this.#element) {\r\n\t\t\tthis.#element.markdown = markdown;\r\n\t\t}\r\n\t}\r\n\tget markdown(): string | undefined {\r\n\t\treturn this.#markdown;\r\n\t}\r\n\t#markdown: string | undefined;\r\n\r\n\tset value(value: unknown | undefined) {\r\n\t\tthis.#value = value;\r\n\t\tif (this.#element) {\r\n\t\t\tthis.#element.value = value;\r\n\t\t}\r\n\t}\r\n\tget value(): unknown | undefined {\r\n\t\treturn this.#value;\r\n\t}\r\n\t#value: unknown | undefined;\r\n\r\n\toverride hostConnected(): void {\r\n\t\tconst element = new UmbUfmRenderElement();\r\n\t\telement.inline = true;\r\n\t\telement.style.visibility = 'hidden';\r\n\r\n\t\telement.markdown = this.#markdown;\r\n\t\telement.value = this.#value;\r\n\r\n\t\tthis.getHostElement().appendChild(element);\r\n\t\tthis.#element = element;\r\n\t}\r\n\r\n\toverride hostDisconnected(): void {\r\n\t\tthis.#element?.remove();\r\n\t}\r\n\r\n\toverride toString(): string {\r\n\t\treturn this.#getTextFromDescendants(this.#element);\r\n\t}\r\n\r\n\toverride destroy(): void {\r\n\t\tsuper.destroy();\r\n\t\tthis.#element?.destroy();\r\n\t\t(this.#element as any) = undefined;\r\n\t}\r\n}\r\n"],"names":["_context","_ufmContext","_UmbUfmRenderElement_instances","renderMarkdown_fn","elementName","UmbUfmRenderElement","UmbLitElement","__privateAdd","UmbUfmRenderContext","UMB_UFM_CONTEXT","ufmContext","__privateSet","value","__privateGet","until","__privateMethod","markup","unsafeHTML","nothing","UmbTextStyles","css","__decorateClass","property","customElement","UmbUfmVirtualRenderController","UmbControllerBase","#element","#getTextFromDescendants","element","items","x","markdown","#markdown","#value"],"mappings":"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"}