import {html, LitElement, css} from 'lit'; import {createInstance} from './i18n'; import * as commonStyles from '../styles.js'; import {Icon} from "./icon"; import {MiniSpinner} from "./mini-spinner"; import MicroModal from './micromodal.es'; import DBPLitElement from "../dbp-lit-element"; export class Modal extends DBPLitElement { constructor() { super(); this._i18n = createInstance(); this.lang = this._i18n.language; this.modalId = 'dbp-modal-id'; this.title = "Modal Title"; } static get properties() { return { modalId: {type: String, attribute: 'modal-id'}, title: {type: String}, }; } static get scopedElements() { return { 'dbp-icon': Icon, 'dbp-mini-spinner': MiniSpinner, }; } open() { MicroModal.show(this._('#' + this.modalId), { disableScroll: true, onClose: (modal) => { // TODO get from parent maybe notify parent with event }, }); } static get styles() { // language=css return css` ${commonStyles.getModalDialogCSS()} .modal-title { margin: 0; padding: 0.25em 0 0 0; font-weight: 300; } .modal-container{ display: flex; flex-direction: column; justify-content: space-between; padding: 15px 20px 20px; } .modal-header{ padding: 0px; display: flex; justify-content: space-between; } .modal-content{ display: flex; padding-left: 0px; padding-right: 0px; overflow: unset; gap: 1em; flex-direction: column; height: 100%; } `; } render() { const i18n = this._i18n; return html` <div class="modal micromodal-slide" id="${this.modalId}" aria-hidden="true"> <div class="modal-overlay" tabindex="-2" data-micromodal-close> <div class="modal-container" role="dialog" aria-modal="true" aria-labelledby="show-recipient-modal-title"> <header class="modal-header"> <h3 class="modal-title"> ${this.title} </h3> <button title="${i18n.t('dbp-modal.close')}" class="modal-close" aria-label="Close modal" @click="${() => { MicroModal.close(this._('#' + this.modalId)); }}"> <dbp-icon title="${i18n.t('dbp-modal.close')}" name="close" class="close-icon"></dbp-icon> </button> </header> <main class="modal-content"> <slot name="content"></slot> </main> <footer class="modal-footer"> <slot name="footer"></slot> </footer> </div> </div> </div> `; } }