{"version":3,"file":"modal.module.js","sources":["../../../.config/config.js","../../../src/core/api.js","../../../src/component/modal/script/modal/modal-selector.js","../../../src/component/modal/script/modal/modal-button.js","../../../src/component/modal/script/modal/modal-attribute.js","../../../src/component/modal/script/modal/modal.js","../../../src/component/modal/script/modal/focus-trap.js","../../../src/component/modal/script/modal/modals-group.js","../../../src/component/modal/script/modal/modal-body.js","../../../src/component/modal/index.js","../../../src/component/modal/main.js"],"sourcesContent":["const config = {\r\n prefix: 'fr',\r\n namespace: 'dsfr',\r\n organisation: '@gouvfr',\r\n version: '1.11.2'\r\n};\r\n\r\nexport default config;\r\n","import config from './config.js';\nconst api = window[config.namespace];\nexport default api;\n","import api from '../../api.js';\n\nexport const ModalSelector = {\n MODAL: api.internals.ns.selector('modal'),\n SCROLL_DIVIDER: api.internals.ns.selector('scroll-divider'),\n BODY: api.internals.ns.selector('modal__body'),\n TITLE: api.internals.ns.selector('modal__title')\n};\n","import api from '../../api.js';\n\nclass ModalButton extends api.core.DisclosureButton {\n constructor () {\n super(api.core.DisclosureType.OPENED);\n }\n\n static get instanceClassName () {\n return 'ModalButton';\n }\n}\n\nexport { ModalButton };\n","import api from '../../api';\n\nexport const ModalAttribute = {\n CONCEALING_BACKDROP: api.internals.ns.attr('concealing-backdrop')\n};\n","import api from '../../api.js';\nimport { ModalSelector } from './modal-selector.js';\nimport { ModalButton } from './modal-button.js';\nimport { ModalAttribute } from './modal-attribute';\n\nclass Modal extends api.core.Disclosure {\n constructor () {\n super(api.core.DisclosureType.OPENED, ModalSelector.MODAL, ModalButton, 'ModalsGroup');\n this._isActive = false;\n this.scrolling = this.resize.bind(this, false);\n this.resizing = this.resize.bind(this, true);\n }\n\n static get instanceClassName () {\n return 'Modal';\n }\n\n init () {\n super.init();\n this._isDialog = this.node.tagName === 'DIALOG';\n this.isScrolling = false;\n this.listenClick();\n this.addEmission(api.core.RootEmission.KEYDOWN, this._keydown.bind(this));\n }\n\n _keydown (keyCode) {\n switch (keyCode) {\n case api.core.KeyCodes.ESCAPE:\n this._escape();\n break;\n }\n }\n\n // TODO v2 : passer les tagName d'action en constante\n _escape () {\n const tagName = document.activeElement ? document.activeElement.tagName : undefined;\n\n switch (tagName) {\n case 'INPUT':\n case 'LABEL':\n case 'TEXTAREA':\n case 'SELECT':\n case 'AUDIO':\n case 'VIDEO':\n break;\n\n default:\n if (this.isDisclosed) {\n this.conceal();\n this.focus();\n }\n }\n }\n\n retrieved () {\n this._ensureAccessibleName();\n }\n\n get body () {\n return this.element.getDescendantInstances('ModalBody', 'Modal')[0];\n }\n\n handleClick (e) {\n if (e.target === this.node && this.getAttribute(ModalAttribute.CONCEALING_BACKDROP) !== 'false') this.conceal();\n }\n\n disclose (withhold) {\n if (!super.disclose(withhold)) return false;\n if (this.body) this.body.activate();\n this.isScrollLocked = true;\n this.setAttribute('aria-modal', 'true');\n this.setAttribute('open', 'true');\n if (!this._isDialog) {\n this.activateModal();\n }\n return true;\n }\n\n conceal (withhold, preventFocus) {\n if (!super.conceal(withhold, preventFocus)) return false;\n this.isScrollLocked = false;\n this.removeAttribute('aria-modal');\n this.removeAttribute('open');\n if (this.body) this.body.deactivate();\n if (!this._isDialog) {\n this.deactivateModal();\n }\n return true;\n }\n\n get isDialog () {\n return this._isDialog;\n }\n\n set isDialog (value) {\n this._isDialog = value;\n }\n\n activateModal () {\n if (this._isActive) return;\n this._isActive = true;\n this._hasDialogRole = this.getAttribute('role') === 'dialog';\n if (!this._hasDialogRole) this.setAttribute('role', 'dialog');\n }\n\n deactivateModal () {\n if (!this._isActive) return;\n this._isActive = false;\n if (!this._hasDialogRole) this.removeAttribute('role');\n }\n\n _setAccessibleName (node, append) {\n const id = this.retrieveNodeId(node, append);\n this.warn(`add reference to ${append} for accessible name (aria-labelledby)`);\n this.setAttribute('aria-labelledby', id);\n }\n\n _ensureAccessibleName () {\n if (this.hasAttribute('aria-labelledby') || this.hasAttribute('aria-label')) return;\n this.warn('missing accessible name');\n const title = this.node.querySelector(ModalSelector.TITLE);\n const primary = this.primaryButtons[0];\n\n switch (true) {\n case title !== null:\n this._setAccessibleName(title, 'title');\n break;\n\n case primary !== undefined:\n this.warn('missing required title, fallback to primary button');\n this._setAccessibleName(primary, 'primary');\n break;\n }\n }\n}\n\nexport { Modal };\n","import api from '../../api.js';\n\nconst unordereds = [\n '[tabindex=\"0\"]',\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]:not([contenteditable=\"false\"])',\n 'details>summary:first-of-type',\n 'details',\n 'iframe'\n];\n\nconst UNORDEREDS = unordereds.join();\n\nconst ordereds = [\n '[tabindex]:not([tabindex=\"-1\"]):not([tabindex=\"0\"])'\n];\n\nconst ORDEREDS = ordereds.join();\n\nconst IS_STUNNING = false;\n\nconst isFocusable = (element, container) => {\n if (!(element instanceof Element)) return false;\n const style = window.getComputedStyle(element);\n if (!style) return false;\n if (style.visibility === 'hidden') return false;\n if (container === undefined) container = element;\n\n while (container.contains(element)) {\n if (style.display === 'none') return false;\n element = element.parentElement;\n }\n\n return true;\n};\n\nclass FocusTrap {\n constructor (onTrap, onUntrap) {\n this.element = null;\n this.activeElement = null;\n this.onTrap = onTrap;\n this.onUntrap = onUntrap;\n this.waiting = this.wait.bind(this);\n this.handling = this.handle.bind(this);\n this.focusing = this.maintainFocus.bind(this);\n this.current = null;\n }\n\n get trapped () { return this.element !== null; }\n\n trap (element) {\n if (this.trapped) this.untrap();\n\n this.element = element;\n this.isTrapping = true;\n this.wait();\n\n if (this.onTrap) this.onTrap();\n }\n\n wait () {\n if (!isFocusable(this.element)) {\n window.requestAnimationFrame(this.waiting);\n return;\n }\n\n this.trapping();\n }\n\n trapping () {\n if (!this.isTrapping) return;\n this.isTrapping = false;\n const focusables = this.focusables;\n if (focusables.length && focusables.indexOf(document.activeElement) === -1) focusables[0].focus();\n this.element.setAttribute('aria-modal', true);\n window.addEventListener('keydown', this.handling);\n document.body.addEventListener('focus', this.focusing, true);\n\n if (IS_STUNNING) {\n this.stunneds = [];\n this.stun(document.body);\n }\n }\n\n stun (node) {\n for (const child of node.children) {\n if (child === this.element) continue;\n if (child.contains(this.element)) {\n this.stun(child);\n continue;\n }\n this.stunneds.push(new Stunned(child));\n }\n }\n\n maintainFocus (event) {\n if (!this.element.contains(event.target)) {\n const focusables = this.focusables;\n if (focusables.length === 0) return;\n const first = focusables[0];\n event.preventDefault();\n first.focus();\n }\n }\n\n handle (e) {\n if (e.keyCode !== 9) return;\n\n const focusables = this.focusables;\n if (focusables.length === 0) return;\n\n const first = focusables[0];\n const last = focusables[focusables.length - 1];\n\n const index = focusables.indexOf(document.activeElement);\n\n if (e.shiftKey) {\n if (!this.element.contains(document.activeElement) || index < 1) {\n e.preventDefault();\n last.focus();\n } else if (document.activeElement.tabIndex > 0 || focusables[index - 1].tabIndex > 0) {\n e.preventDefault();\n focusables[index - 1].focus();\n }\n } else {\n if (!this.element.contains(document.activeElement) || index === focusables.length - 1 || index === -1) {\n e.preventDefault();\n first.focus();\n } else if (document.activeElement.tabIndex > 0) {\n e.preventDefault();\n focusables[index + 1].focus();\n }\n }\n }\n\n get focusables () {\n let unordereds = api.internals.dom.querySelectorAllArray(this.element, UNORDEREDS);\n\n /**\n * filtrage des radiobutttons de même name (la navigations d'un groupe de radio se fait à la flèche et non pas au tab\n **/\n const radios = api.internals.dom.querySelectorAllArray(document.documentElement, 'input[type=\"radio\"]');\n\n if (radios.length) {\n const groups = {};\n\n for (const radio of radios) {\n const name = radio.getAttribute('name');\n if (groups[name] === undefined) groups[name] = new RadioButtonGroup(name);\n groups[name].push(radio);\n }\n\n unordereds = unordereds.filter((unordered) => {\n if (unordered.tagName.toLowerCase() !== 'input' || unordered.getAttribute('type').toLowerCase() !== 'radio') return true;\n const name = unordered.getAttribute('name');\n return groups[name].keep(unordered);\n });\n }\n\n const ordereds = api.internals.dom.querySelectorAllArray(this.element, ORDEREDS);\n\n ordereds.sort((a, b) => a.tabIndex - b.tabIndex);\n\n const noDuplicates = unordereds.filter((element) => ordereds.indexOf(element) === -1);\n const concateneds = ordereds.concat(noDuplicates);\n return concateneds.filter((element) => element.tabIndex !== '-1' && isFocusable(element, this.element));\n }\n\n untrap () {\n if (!this.trapped) return;\n this.isTrapping = false;\n\n this.element.removeAttribute('aria-modal');\n window.removeEventListener('keydown', this.handling);\n document.body.removeEventListener('focus', this.focusing, true);\n\n this.element = null;\n\n if (IS_STUNNING) {\n for (const stunned of this.stunneds) stunned.unstun();\n this.stunneds = [];\n }\n\n if (this.onUntrap) this.onUntrap();\n }\n\n dispose () {\n this.untrap();\n }\n}\n\nclass Stunned {\n constructor (element) {\n this.element = element;\n // this.hidden = element.getAttribute('aria-hidden');\n this.inert = element.getAttribute('inert');\n\n // this.element.setAttribute('aria-hidden', true);\n this.element.setAttribute('inert', '');\n }\n\n unstun () {\n /*\n if (this.hidden === null) this.element.removeAttribute('aria-hidden');\n else this.element.setAttribute('aria-hidden', this.hidden);\n */\n\n if (this.inert === null) this.element.removeAttribute('inert');\n else this.element.setAttribute('inert', this.inert);\n }\n}\n\nclass RadioButtonGroup {\n constructor (name) {\n this.name = name;\n this.buttons = [];\n }\n\n push (button) {\n this.buttons.push(button);\n if (button === document.activeElement || button.checked || this.selected === undefined) this.selected = button;\n }\n\n keep (button) {\n return this.selected === button;\n }\n}\n\nexport { FocusTrap };\n","import api from '../../api.js';\nimport { FocusTrap } from './focus-trap.js';\n\nclass ModalsGroup extends api.core.DisclosuresGroup {\n constructor () {\n super('Modal', false);\n this.focusTrap = new FocusTrap();\n }\n\n static get instanceClassName () {\n return 'ModalsGroup';\n }\n\n apply (value, initial) {\n super.apply(value, initial);\n if (this.current === null) this.focusTrap.untrap();\n else this.focusTrap.trap(this.current.node);\n }\n}\n\nexport { ModalsGroup };\n","import api from '../../api.js';\nimport { ModalSelector } from './modal-selector.js';\n\nconst OFFSET = 32; // 32px => 8v => 2rem\n\nclass ModalBody extends api.core.Instance {\n static get instanceClassName () {\n return 'ModalBody';\n }\n\n init () {\n this.listen('scroll', this.divide.bind(this));\n }\n\n activate () {\n this.isResizing = true;\n this.resize();\n }\n\n deactivate () {\n this.isResizing = false;\n }\n\n divide () {\n if (this.node.scrollHeight > this.node.clientHeight) {\n if (this.node.offsetHeight + this.node.scrollTop >= this.node.scrollHeight) {\n this.removeClass(ModalSelector.SCROLL_DIVIDER);\n } else {\n this.addClass(ModalSelector.SCROLL_DIVIDER);\n }\n } else {\n this.removeClass(ModalSelector.SCROLL_DIVIDER);\n }\n }\n\n resize () {\n this.adjust();\n this.request(this.adjust.bind(this));\n }\n\n adjust () {\n const offset = OFFSET * (this.isBreakpoint(api.core.Breakpoints.MD) ? 2 : 1);\n if (this.isLegacy) this.style.maxHeight = `${window.innerHeight - offset}px`;\n else this.style.setProperty('--modal-max-height', `${window.innerHeight - offset}px`);\n this.divide();\n }\n}\n\nexport { ModalBody };\n","import api from './api.js';\n\nimport { Modal } from './script/modal/modal.js';\nimport { ModalButton } from './script/modal/modal-button.js';\nimport { ModalsGroup } from './script/modal/modals-group.js';\nimport { ModalBody } from './script/modal/modal-body.js';\nimport { ModalSelector } from './script/modal/modal-selector.js';\n\napi.modal = {\n Modal: Modal,\n ModalButton: ModalButton,\n ModalBody: ModalBody,\n ModalsGroup: ModalsGroup,\n ModalSelector: ModalSelector\n};\n\nexport default api;\n","import api from './index.js';\n\napi.internals.register(api.modal.ModalSelector.MODAL, api.modal.Modal);\napi.internals.register(api.modal.ModalSelector.BODY, api.modal.ModalBody);\napi.internals.register(api.core.RootSelector.ROOT, api.modal.ModalsGroup);\n\nexport default api;\n"],"names":[],"mappings":"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"}