diff --git a/src/Umbraco.Web.UI.Client/src/core/modal/layouts/basic/modal-layout-basic.element.ts b/src/Umbraco.Web.UI.Client/src/core/modal/layouts/basic/modal-layout-basic.element.ts new file mode 100644 index 0000000000..593f2415ab --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/core/modal/layouts/basic/modal-layout-basic.element.ts @@ -0,0 +1,51 @@ +import { css, html, TemplateResult } from 'lit'; +import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; +import { customElement } from 'lit/decorators.js'; +import { UUIModalSidebarSize } from '@umbraco-ui/uui-modal-sidebar'; +import { UmbModalLayoutElement } from '../modal-layout.element'; + +export interface UmbBasicModalData { + header: TemplateResult | string; + content: TemplateResult | string; + overlaySize?: UUIModalSidebarSize; +} + +@customElement('umb-modal-layout-basic') +export class UmbModalLayoutBasicElement extends UmbModalLayoutElement { + static styles = [ + UUITextStyles, + css` + uui-scroll-container { + background-color: var(--uui-color-surface); + } + `, + ]; + + private _close() { + // As this is a basic modal designed for viewing readonly info + // Then we don't need to pass any data back to the parent when + // we close/save the modal etc... + this.modalHandler?.close(); + } + + connectedCallback(): void { + super.connectedCallback(); + } + + render() { + return html` + + ${this.data?.content} + Close + + `; + } +} + +export default UmbModalLayoutBasicElement; + +declare global { + interface HTMLElementTagNameMap { + 'umb-modal-layout-basic': UmbModalLayoutBasicElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/core/modal/layouts/basic/modal-layout-basic.stories.ts b/src/Umbraco.Web.UI.Client/src/core/modal/layouts/basic/modal-layout-basic.stories.ts new file mode 100644 index 0000000000..7f04471515 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/core/modal/layouts/basic/modal-layout-basic.stories.ts @@ -0,0 +1,47 @@ +import { Meta, Story } from '@storybook/web-components'; +import { html } from 'lit'; +import { UmbModalLayoutBasicElement, UmbBasicModalData } from './modal-layout-basic.element'; + +export default { + title: 'API/Modals/Layouts/Basic', + component: 'umb-modal-layout-basic', + id: 'modal-layout-basic', +} as Meta; + + +const htmlContent = html` + + + + + + + Title 1 + Title 2 + + + + Cell 1 + Cell 2 + + + + Cell 3 + Cell 4 + + `; + + +const data: UmbBasicModalData = { + header: html` Debug: Contexts`, + content: htmlContent, + overlaySize: 'small' +}; + + +export const Overview: Story = () => html` + + +`; \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/core/modal/modal.service.ts b/src/Umbraco.Web.UI.Client/src/core/modal/modal.service.ts index f88cc3775b..f19a149ac7 100644 --- a/src/Umbraco.Web.UI.Client/src/core/modal/modal.service.ts +++ b/src/Umbraco.Web.UI.Client/src/core/modal/modal.service.ts @@ -6,6 +6,7 @@ import './layouts/property-editor-ui-picker/modal-layout-property-editor-ui-pick import './layouts/modal-layout-current-user.element'; import './layouts/icon-picker/modal-layout-icon-picker.element'; import './layouts/link-picker/modal-layout-link-picker.element'; +import './layouts/basic/modal-layout-basic.element'; import { UUIModalSidebarSize } from '@umbraco-ui/uui-modal-sidebar'; import { BehaviorSubject } from 'rxjs'; @@ -18,6 +19,7 @@ import type { UmbModalMediaPickerData } from './layouts/media-picker/modal-layou import type { UmbModalLinkPickerData } from './layouts/link-picker/modal-layout-link-picker.element'; import { UmbModalHandler } from './modal-handler'; import { UmbContextToken } from '@umbraco-cms/context-api'; +import { UmbBasicModalData } from './layouts/basic/modal-layout-basic.element'; export type UmbModalType = 'dialog' | 'sidebar'; @@ -114,7 +116,7 @@ export class UmbModalService { } /** - * Opens the user settings sidebar modal + * Opens the change password sidebar modal * @public * @return {*} {UmbModalHandler} * @memberof UmbModalService @@ -123,6 +125,20 @@ export class UmbModalService { return this.open('umb-modal-layout-change-password', { data, type: 'dialog' }); } + /** + * Opens a basic sidebar modal to display readonly information + * @public + * @return {*} {UmbModalHandler} + * @memberof UmbModalService + */ + public openBasic(data: UmbBasicModalData): UmbModalHandler { + return this.open('umb-modal-layout-basic', { + data, + type: 'sidebar', + size: data?.overlaySize || 'small', + }); + } + /** * Opens a modal or sidebar modal * @public