{"version":3,"names":["SVGDefaultsFaTimes","CloseButton","label","clickHandler","svgPathDataFaTimes","faTimesSvgPathData","PATH_DATA","svgHeightFaTimes","faTimesHeight","HEIGHT","svgWidthFaTimes","faTimesWidth","WIDTH","h","class","onClick","generateSVGImage","data","height","width","ModalContent","id","isOpen","title","backdropClickHandler","modalCloseClickHandler","onContentKeyUp","role","onKeyUp","tabIndex","Dictionary","get","name","adsModalCss","AdsModalStyle0","AdsModal","constructor","hostRef","this","_handleKeyUp","evt","isOpenInternal","key","toLowerCase","close","stopPropagation","el","setAttribute","identifier","generateId","component","bind","open","onFocusOut","handleIdentifierChange","newValue","onIsOpenChanged","openChange","emit","isNullOrUndefined","openChangeHandler","SCROLLER","enableScroll","focusCustomTriggerEl","container","shadowRoot","querySelector","removeEventListener","Promise","resolve","disableScroll","trapFocusInModal","value","observeContainer","focusElement","customFocusElement","focus","closeButton","addEventListener","nextElement","relatedTarget","getIsElementDescendantOfElement","triggerEl","ctaButtonTrigger","getFocusableSelector","slottedFocusableHostEl","getSlottedElements","find","focusableSlottedEl","componentWillLoad","Pipeline.addComponent","Scroller","document","disconnectedCallback","Pipeline.removeComponent","undefined","renderTrigger","trigger","triggerText","theme","preventDefault","render","hostAttributes","modalTitle","isNullOrUndefinedOrEmpty","content","Host","Object","assign"],"sources":["src/components/ads-modal/components/close-button/CloseButton.tsx","src/components/ads-modal/components/modal-content/ModalContent.tsx","src/components/ads-modal/ads-modal.scss?tag=ads-modal&encapsulation=shadow","src/components/ads-modal/ads-modal.tsx"],"sourcesContent":["import { FunctionalComponent, VNode, h } from '@stencil/core';\nimport { height as faTimesHeight, svgPathData as faTimesSvgPathData, width as faTimesWidth } from '@fortawesome/pro-light-svg-icons/faTimes';\nimport { generateSVGImage } from 'utils/imageHelper';\n\n/**\n * Interface for the modal button\n * @hidden\n */\ninterface IModalButtonProps {\n label: string;\n clickHandler: (evt: MouseEvent) => void;\n}\n\nenum SVGDefaultsFaTimes {\n WIDTH = 384,\n HEIGHT = 512,\n PATH_DATA = 'M324.5 411.1c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L214.6 256 347.1 123.5c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L192 233.4 59.6 100.9c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L169.4 256 36.9 388.5c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L192 278.6 324.5 411.1z',\n}\n\n/**\n * Generates a modal button\n * @return {FunctionalComponent} The close button\n */\nexport const CloseButton: FunctionalComponent = ({ label, clickHandler }: IModalButtonProps) => {\n const svgPathDataFaTimes = faTimesSvgPathData ?? SVGDefaultsFaTimes.PATH_DATA;\n const svgHeightFaTimes = faTimesHeight ?? SVGDefaultsFaTimes.HEIGHT;\n const svgWidthFaTimes = faTimesWidth ?? SVGDefaultsFaTimes.WIDTH;\n\n return (\n \n ) as VNode;\n};\n","import { FunctionalComponent, VNode, h } from '@stencil/core';\n\nimport { Dictionary } from '../../../core/classes/Dictionary';\n\nimport { CloseButton } from '../close-button/CloseButton';\n\n/**\n * Interface for the modal button\n * @hidden\n */\ninterface ModalContentProps {\n id: string;\n isOpen: boolean;\n title?: Element;\n backdropClickHandler?: (evt: MouseEvent) => void;\n modalCloseClickHandler: (evt: MouseEvent) => void;\n onContentKeyUp: (event: KeyboardEvent) => void;\n role?: string;\n}\n\nexport const ModalContent: FunctionalComponent = ({\n id,\n isOpen,\n title,\n backdropClickHandler,\n modalCloseClickHandler,\n onContentKeyUp,\n role = 'dialog',\n}) => {\n return (\n
\n
\n \n
\n \n
\n {title}\n
\n \n
\n
\n \n
\n
\n
\n ) as VNode;\n};\n","@import 'core';\n\n/**\n * @prop --ads-modal-backdrop-background-color: Default backdrop background color\n *\n * @prop --ads-modal-button-background-color: Button background color\n * @prop --ads-modal-button-color: Button text color\n * @prop --ads-modal-button-color-hover: Hovered button text color\n *\n * @prop --ads-modal-content-background-color: Content background color\n * @prop --ads-modal-content-body-color: Content body color\n * @prop --ads-modal-content-border-color: Content border color\n * @prop --ads-modal-content-height: Content height\n * @prop --ads-modal-content-max-height: Content maximum height\n *\n * @prop --ads-modal-content-title-color: Content title color\n * @prop --ads-modal-content-title-font-size: Content title font size\n * @prop --ads-modal-content-title-font-weight: Content title font weight\n * @prop --ads-modal-content-title-text-align: Content title text align\n */\n\n::slotted([slot='body']),\n::slotted([slot='trigger']) {\n display: block !important;\n}\n\n::slotted([slot='actions']) {\n display: flex !important;\n flex-direction: column;\n justify-content: flex-end;\n width: 100%;\n\n @include media-query(md-up) {\n flex-direction: row;\n }\n}\n\n:host {\n font-family: var(--ads-font-family);\n\n &[dir='rtl'] {\n @include ads-vars-component-modal-rtl;\n }\n}\n\n:host([theme='default']) {\n @include ads-vars-component-heading-default;\n @include ads-vars-component-modal-default;\n}\n\n:host([theme='dark']) {\n @include ads-vars-component-heading-dark;\n @include ads-vars-component-modal-dark;\n}\n\n:host([dir='ltr']) {\n @include ads-vars-component-modal-ltr;\n}\n\n:host([dir='rtl']) {\n @include ads-vars-component-modal-rtl;\n}\n\n.trigger {\n display: inline-block !important;\n}\n\n.c-modal {\n display: none;\n\n &.is-open {\n align-items: center;\n bottom: 0;\n display: flex !important;\n justify-content: center;\n left: 0;\n overflow: hidden;\n position: fixed;\n right: 0;\n top: 0;\n z-index: $layer-16;\n }\n\n &__backdrop {\n background-color: var(--ads-modal-backdrop-background-color, $ads-modal-backdrop-background-color);\n bottom: inherit;\n left: inherit;\n position: fixed;\n right: inherit;\n top: inherit;\n z-index: 0;\n }\n\n &__buttons {\n left: var(--ads-modal-button-position-left, $ads-modal-button-position-left-ltr);\n position: absolute;\n right: var(--ads-modal-button-position-right, $ads-modal-button-position-right-ltr);\n top: 5px;\n }\n\n &__button {\n align-items: center;\n background-color: var(--ads-modal-button-background-color, $ads-modal-button-background-color);\n border-style: none;\n cursor: pointer;\n display: flex;\n font-size: 20px;\n height: 30px;\n justify-content: center;\n padding: 0;\n width: 30px;\n\n svg {\n fill: var(--ads-modal-button-color, $ads-modal-button-color);\n height: 20px;\n width: 20px;\n }\n\n &:hover {\n fill: var(--ads-modal-button-color-hover, $ads-modal-button-color-hover);\n }\n }\n\n &__content {\n background-color: var(--ads-modal-content-background-color, $ads-modal-content-background-color);\n border: 1px solid;\n border-color: var(--ads-modal-content-border-color, $ads-modal-content-border-color);\n border-radius: 5px;\n display: block;\n max-width: 80%;\n padding: 20px;\n position: relative;\n z-index: $layer-16;\n\n @include media-query(md-up) {\n max-width: 60%;\n }\n\n @include media-query(lg-up) {\n max-width: 50%;\n }\n\n &__body {\n color: var(--ads-modal-content-body-color, $ads-modal-content-body-color);\n height: var(--ads-modal-content-height, $ads-modal-content-height);\n margin: 20px 0;\n max-height: var(--ads-modal-content-max-height, $ads-modal-content-max-height);\n overflow: hidden;\n overflow-y: auto;\n padding-bottom: 20px;\n }\n\n &__title {\n @include ads-heading-quinary;\n color: var(--ads-modal-content-title-color, $ads-modal-content-title-color);\n font-size: var(--ads-modal-content-title-font-size, $ads-modal-content-title-font-size);\n font-weight: var(--ads-modal-content-title-font-weight, $ads-modal-content-title-font-weight);\n text-align: var(--ads-modal-content-title-text-align, $ads-modal-content-title-text-align);\n\n @include media-query(sm-up) {\n font-size: var(--ads-modal-content-title-font-size, $ads-modal-content-title-font-size);\n }\n }\n\n &__actions {\n display: flex;\n flex: 1 0;\n flex-direction: column;\n flex-wrap: wrap-reverse;\n\n @include media-query(md-up) {\n flex-direction: row;\n justify-content: flex-end;\n\n ads-cta-button {\n &:nth-child(3n + 0) {\n margin-bottom: 20px;\n }\n }\n }\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-floating-promises */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport { Component, Element, Event, EventEmitter, Host, Method, Prop, State, VNode, Watch, h } from '@stencil/core';\n\nimport * as Pipeline from '../core/utils/pipeline';\nimport { BaseComponent } from '../core/interfaces/BaseComponent';\nimport { ModalContent } from './components/modal-content/ModalContent';\nimport { OpenChangeEvent, OpenChangeHandler } from './ads-modal.types';\nimport {\n Scroller,\n getFocusableSelector,\n getIsElementDescendantOfElement,\n getSlottedElements,\n isNullOrUndefined,\n isNullOrUndefinedOrEmpty,\n observeContainer,\n} from 'utils/index';\nimport { Theme } from '../core/types/globalTypes';\nimport { generateId } from '../core/utils/components';\n\n/**\n * Modals communicate information using secondary window that takes focus and enables the user to maintain the context of a particular task. Modals have a title. Use modals sparingly because they interrupt user workflow.\n * @tag ``\n * @slot - Content rendered as rich text inside the component\n * @slot trigger - The component that will open the dialog\n * @example\n * console.log(evt)}\n * trigger-text=\"Open\">\n * Hello World\n * \n */\n@Component({\n tag: 'ads-modal',\n styleUrl: 'ads-modal.scss',\n shadow: true,\n})\nexport class AdsModal implements BaseComponent {\n /**\n * @hidden\n */\n public component: string;\n\n private SCROLLER: Scroller;\n\n constructor() {\n this.el.setAttribute('id', this.identifier || generateId('ads-modal'));\n this.component = 'ads-modal';\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n this.close = this.close.bind(this);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n this.open = this.open.bind(this);\n this.onFocusOut = this.onFocusOut.bind(this);\n }\n\n @Element() private el: HTMLAdsModalElement;\n\n /**\n * Internal state that controls the open and close state of the modal\n * @hidden\n */\n @State() isOpenInternal = false;\n\n /**\n * The unique identifier (optional)\n */\n @Prop({ attribute: 'id' }) identifier?: string;\n\n /**\n * The theme for this component instance (optional)\n * Values: \"default\", \"dark\"\n */\n @Prop({ reflect: true }) theme?: Theme;\n\n /**\n * Controls the open and close state of the modal (optional)\n */\n @Prop({ reflect: true }) isOpen?: boolean;\n\n /**\n * The modal title (optional)\n */\n @Prop({ reflect: true }) modalTitle?: string;\n\n /**\n * The text for the modal trigger (optional)\n */\n @Prop({ reflect: true }) triggerText?: string;\n\n /**\n * Custom slotted content to focus on (optional)\n * Values: id of slotted element\n */\n @Prop({ reflect: true }) focusElement?: string;\n\n /**\n * Callback function for the open state of the modal (optional)\n */\n @Prop() openChangeHandler?: OpenChangeHandler;\n\n /**\n * Emits 'openChange' custom event. (optional)
\n * Usage: `document.querySelector('ads-modal').addEventListener('openChange', function(evt) {});`\n * @event\n */\n @Event({ bubbles: false }) openChange: EventEmitter;\n\n /**\n * Handle identifier property changes\n * @param {string} newValue The new value for \"identifier\"\n * @hidden\n */\n @Watch('identifier')\n handleIdentifierChange(newValue: string): void {\n this.el.setAttribute('id', newValue || generateId('ads-modal'));\n }\n\n /**\n * Watch for change in \"isOpen\". Manages opening and closing based on prop value\n * @param {boolean} newValue The new value for \"isOpen\"\n * @hidden\n */\n @Watch('isOpen')\n onIsOpenChanged(newValue: boolean): void {\n if (newValue === true || newValue === false) {\n if (newValue) {\n this.open();\n } else {\n this.close();\n }\n }\n }\n\n /**\n * Closes the modal\n * Usage: `document.querySelector('ads-modal').close();`\n * @return {Promise} Promise for closing the modal\n */\n @Method()\n async close(): Promise {\n if (!this.isOpenInternal) {\n return;\n }\n // if isOpen is provided, fire the event and stop\n if (this.isOpen) {\n this.openChange.emit({ newValue: false });\n if (!isNullOrUndefined(this.openChangeHandler)) {\n this.openChangeHandler({ newValue: false });\n }\n return;\n }\n // if isOpen is not provided close the modal\n if (this.isOpen !== true && this.isOpen !== false) {\n this.openChange.emit({ newValue: false });\n if (!isNullOrUndefined(this.openChangeHandler)) {\n this.openChangeHandler({ newValue: false });\n }\n }\n this.isOpenInternal = false;\n this.SCROLLER.enableScroll();\n this.focusCustomTriggerEl();\n const container = this.el.shadowRoot.querySelector('.c-modal__content');\n container.removeEventListener('focusout', this.onFocusOut);\n return Promise.resolve();\n }\n\n /**\n * Opens the modal\n * Usage: `document.querySelector('ads-modal').open();`\n * @return {Promise} Promise for opening the modal\n */\n @Method()\n async open(): Promise {\n if (this.isOpenInternal) {\n return;\n }\n // if isOpen is provided, fire the event and stop\n if (this.isOpen === false) {\n this.openChange.emit({ newValue: true });\n if (!isNullOrUndefined(this.openChangeHandler)) {\n this.openChangeHandler({ newValue: true });\n }\n return;\n }\n // if isOpen is not provided open the modal\n if (this.isOpen !== true && this.isOpen !== false) {\n this.openChange.emit({ newValue: true });\n if (!isNullOrUndefined(this.openChangeHandler)) {\n this.openChangeHandler({ newValue: true });\n }\n }\n this.isOpenInternal = true;\n this.SCROLLER.disableScroll();\n this.trapFocusInModal();\n return Promise.resolve();\n }\n\n /**\n * Returns whether the modal is currently open or not\n * @return {Promise} Open state of the modal\n */\n @Method()\n value(): Promise {\n return Promise.resolve(this.isOpenInternal);\n }\n\n /**\n * Trap focus in modal content div and focus on optional slotted content\n */\n private trapFocusInModal() {\n const container = this.el.shadowRoot.querySelector('.c-modal__content');\n observeContainer(container, () => {\n if (!isNullOrUndefined(this.focusElement)) {\n const customFocusElement: HTMLInputElement = this.el.querySelector(`#${this.focusElement}`);\n customFocusElement.focus();\n } else {\n const closeButton: HTMLElement = this.el.shadowRoot.querySelector('.c-modal__button');\n closeButton.focus();\n }\n container.addEventListener('focusout', this.onFocusOut);\n });\n }\n\n /**\n * If focus goes outside the content div, set it back to the close button\n * @param {FocusEvent} evt: the focus event\n *\n */\n private onFocusOut(evt: FocusEvent) {\n const container = this.el.shadowRoot.querySelector('.c-modal__content');\n const closeButton: HTMLElement = this.el.shadowRoot.querySelector('.c-modal__button');\n const nextElement = evt.relatedTarget as Element;\n if (isNullOrUndefined(nextElement) || getIsElementDescendantOfElement(nextElement, container)) {\n return;\n }\n closeButton.focus();\n }\n\n private focusCustomTriggerEl() {\n const triggerEl: HTMLElement = this.el.shadowRoot.querySelector('.trigger');\n if (!isNullOrUndefined(triggerEl)) {\n const ctaButtonTrigger: HTMLElement = triggerEl.querySelector(getFocusableSelector());\n const slottedFocusableHostEl = getSlottedElements(this.el, 'trigger').find((el: HTMLElement) => el.querySelector(getFocusableSelector()));\n if (!isNullOrUndefined(ctaButtonTrigger)) {\n ctaButtonTrigger.shadowRoot.querySelector('button').focus();\n } else if (!isNullOrUndefined(slottedFocusableHostEl)) {\n const focusableSlottedEl: HTMLElement = slottedFocusableHostEl.querySelector(getFocusableSelector());\n focusableSlottedEl.focus();\n }\n }\n }\n\n /**\n * Listen to keyboard events\n * @param {KeyboardEvent} evt The original event\n * @returns {void}\n * @private\n * @hidden\n */\n private _handleKeyUp = (evt: KeyboardEvent) => {\n if (!this.isOpenInternal) {\n return;\n }\n switch (evt.key.toLowerCase()) {\n case 'escape':\n this.close();\n break;\n default:\n return;\n }\n };\n\n /**\n * Handle click events on the backdrop component\n * @param {MouseEvent} evt The original event\n * @return {void}\n * @private\n * @hidden\n */\n private backdropClickHandler = (evt: MouseEvent): void => {\n evt.stopPropagation();\n this.close();\n };\n\n protected componentWillLoad(): void {\n Pipeline.addComponent(this.el);\n this.SCROLLER = new Scroller(document);\n if (this.isOpen === true || this.isOpen === false) {\n this.isOpenInternal = this.isOpen;\n }\n }\n\n protected disconnectedCallback(): void {\n Pipeline.removeComponent(this.el);\n this.SCROLLER = undefined;\n }\n\n /**\n * Render the modal trigger\n * @returns {void}\n * @hidden\n */\n private renderTrigger(): VNode {\n const trigger = this.triggerText ? (\n \n {this.triggerText}\n \n ) : (\n \n );\n\n return (\n {\n evt.preventDefault();\n this.open();\n }}\n data-test=\"trigger\"\n >\n {trigger}\n \n ) as VNode;\n }\n\n protected render(): VNode {\n const hostAttributes = {\n 'data-id': this.identifier,\n };\n\n const title = this.modalTitle ? (\n
\n {this.modalTitle}\n
\n ) : null;\n\n const triggerEl = !isNullOrUndefinedOrEmpty(this.triggerText) || this.el.querySelector('div[slot=\"trigger\"]') ? this.renderTrigger() : null;\n\n const content = (\n => this.close()}\n onContentKeyUp={this._handleKeyUp}\n />\n );\n\n return (\n \n {triggerEl}\n {content}\n \n ) as VNode;\n }\n}\n"],"mappings":"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","ignoreList":[]}