{"version":3,"file":"dsfr.module.min.js","sources":["../../src/core/script/api/state.js","../../.config/config.js","../../src/core/script/api/inspect/inspector.js","../../src/core/script/api/options/starters.js","../../src/core/script/api/options/modes.js","../../src/core/script/api/options/options.js","../../src/core/script/api/utilities/collection.js","../../src/core/script/api/modules/module.js","../../src/core/script/api/utilities/namespace.js","../../src/core/script/api/utilities/dom/query-selector.js","../../src/core/script/api/modules/register/registration.js","../../src/core/script/api/modules/register/register.js","../../src/core/script/api/modules/stage/element.js","../../src/core/script/api/modules/stage/root-emission.js","../../src/core/script/api/modules/register/key-codes.js","../../src/core/script/api/modules/stage/root.js","../../src/core/script/api/modules/stage/stage.js","../../src/core/script/api/modules/render/renderer.js","../../src/core/script/api/modules/resize/resizer.js","../../src/core/script/api/modules/scroll/scroll-locker.js","../../src/core/script/api/modules/load/load.js","../../src/core/script/api/modules/font-swap/font-swap.js","../../src/core/script/api/modules/mouse-move/mouse-move.js","../../src/core/script/api/modules/hash/hash.js","../../src/core/script/api/engine.js","../../src/core/script/api/utilities/colors/colors.js","../../src/core/script/api/utilities/dom/classes.js","../../src/core/script/api/utilities/dom/actions.js","../../src/core/script/api/utilities/dom/id.js","../../src/core/script/api/utilities/dom/index.js","../../src/core/script/api/utilities/image/index.js","../../src/core/script/api/utilities/image/data-uri-svg.js","../../src/core/script/api/utilities/support/index.js","../../src/core/script/api/utilities/support/browser-support.js","../../src/core/script/api/utilities/motion/index.js","../../src/core/script/api/utilities/motion/transition-selector.js","../../src/core/script/api/utilities/property/complete-assign.js","../../src/core/script/api/utilities/property/index.js","../../src/core/script/api/internals.js","../../src/core/script/api/utilities/search-params/index.js","../../src/core/script/api/api.js","../../src/core/script/api/utilities/emitter.js","../../src/core/script/api/modules/register/breakpoints.js","../../src/core/script/api/modules/register/instance.js","../../src/core/script/disclosure/disclosure-event.js","../../src/core/script/disclosure/disclosure-emission.js","../../src/core/script/disclosure/disclosure.js","../../src/core/script/disclosure/disclosure-button.js","../../src/core/script/disclosure/disclosure-selector.js","../../src/core/script/disclosure/disclosures-group.js","../../src/core/script/disclosure/disclosure-type.js","../../src/core/script/collapse/collapse-button.js","../../src/core/script/collapse/collapse-selector.js","../../src/core/script/equisized/equisized-emission.js","../../src/core/script/action/toggle/toggle-event.js","../../src/core/script/inject/inject-svg-selector.js","../../src/core/script/artwork/artwork-selector.js","../../src/core/script/assess/assess-selector.js","../../src/core/script/assess/assess-emission.js","../../src/core/script/ratio/ratio-selector.js","../../src/core/api.js","../../src/core/script/placement/place-selector.js","../../src/core/script/placement/align-selector.js","../../src/core/script/placement/placement-position.js","../../src/core/script/placement/placement-align.js","../../src/core/script/placement/placement-mode.js","../../src/core/index.js","../../src/core/script/collapse/collapse.js","../../src/core/script/collapse/collapses-group.js","../../src/core/script/api/modules/stage/root-selector.js","../../src/core/script/equisized/equisized.js","../../src/core/script/action/toggle/toggle.js","../../src/core/script/equisized/equisizeds-group.js","../../src/core/script/inject/inject-svg.js","../../src/core/script/api/utilities/attribute.js","../../src/core/script/artwork/artwork.js","../../src/core/script/assess/assess-file.js","../../src/core/script/assess/assess-detail.js","../../src/core/script/ratio/ratio.js","../../src/core/script/placement/placement.js","../../src/core/script/placement/placement-referent.js","../../src/core/main.js","../../src/scheme/script/scheme/scheme-value.js","../../src/scheme/script/scheme/scheme-attribute.js","../../src/scheme/script/scheme/scheme-theme.js","../../src/scheme/script/scheme/scheme-emission.js","../../src/scheme/script/scheme/scheme-event.js","../../src/scheme/script/scheme/scheme.js","../../src/scheme/script/scheme/scheme-selector.js","../../src/scheme/index.js","../../src/scheme/main.js","../../src/component/accordion/script/accordion/accordion-selector.js","../../src/component/accordion/script/accordion/accordion.js","../../src/component/accordion/script/accordion/accordions-group.js","../../src/component/accordion/index.js","../../src/component/accordion/main.js","../../src/component/button/script/button/button-selector.js","../../src/component/button/index.js","../../src/component/button/main.js","../../src/component/card/script/card/card-download.js","../../src/component/card/script/card/card-selector.js","../../src/component/card/index.js","../../src/component/card/main.js","../../src/component/segmented/script/segmented/segmented-selector.js","../../src/component/segmented/script/segmented/segmented-emission.js","../../src/component/segmented/script/segmented/segmented.js","../../src/component/segmented/script/segmented/segmented-element.js","../../src/component/segmented/index.js","../../src/component/segmented/main.js","../../src/component/breadcrumb/script/breadcrumb/breadcrumb-selector.js","../../src/component/breadcrumb/script/breadcrumb/breadcrumb.js","../../src/component/breadcrumb/index.js","../../src/component/breadcrumb/main.js","../../src/component/tooltip/script/tooltip/tooltip-selector.js","../../src/component/tooltip/script/tooltip/tooltip-referent.js","../../src/component/tooltip/script/tooltip/tooltip-event.js","../../src/component/tooltip/script/tooltip/tooltip.js","../../src/component/tooltip/index.js","../../src/component/tooltip/main.js","../../src/component/toggle/script/toggle/toggle-input.js","../../src/component/toggle/script/toggle/toggle-status-label.js","../../src/component/toggle/script/toggle/toggle-selector.js","../../src/component/toggle/index.js","../../src/component/toggle/main.js","../../src/component/sidemenu/script/sidemenu/sidemenu-selector.js","../../src/component/sidemenu/script/sidemenu/sidemenu-list.js","../../src/component/sidemenu/script/sidemenu/sidemenu-item.js","../../src/component/sidemenu/index.js","../../src/component/sidemenu/main.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","../../src/component/password/script/password/password-emission.js","../../src/component/password/script/password/password-toggle.js","../../src/component/password/script/password/password.js","../../src/component/password/script/password/password-selector.js","../../src/component/password/script/password/password-input.js","../../src/component/password/script/password/password-label.js","../../src/component/password/index.js","../../src/component/password/main.js","../../src/component/navigation/script/navigation/navigation-selector.js","../../src/component/navigation/script/navigation/navigation-item.js","../../src/component/navigation/script/navigation/navigation-mouse-position.js","../../src/component/navigation/script/navigation/navigation.js","../../src/component/navigation/index.js","../../src/component/navigation/main.js","../../src/component/tab/script/tab/tab-button.js","../../src/component/tab/script/tab/tab-selector.js","../../src/component/tab/script/tab/tab-panel-direction.js","../../src/component/tab/script/tab/tab-panel.js","../../src/component/tab/script/tab/tab-keys.js","../../src/component/tab/script/tab/tab-emission.js","../../src/component/tab/script/tab/tabs-group.js","../../src/component/tab/script/tab/tabs-list.js","../../src/component/tab/index.js","../../src/component/tab/main.js","../../src/component/table/script/table/table-emission.js","../../src/component/table/script/table/table.js","../../src/component/table/script/table/table-selector.js","../../src/component/table/script/table/table-element.js","../../src/component/table/script/table/table-caption.js","../../src/component/table/index.js","../../src/component/table/main.js","../../src/component/tag/script/tag/tag-event.js","../../src/component/tag/script/tag/tag-dismissible.js","../../src/component/tag/script/tag/tag-selector.js","../../src/component/tag/index.js","../../src/component/tag/main.js","../../src/component/transcription/script/accordion/transcription-selector.js","../../src/component/transcription/script/accordion/transcription.js","../../src/component/transcription/index.js","../../src/component/transcription/main.js","../../src/component/tile/script/tile/tile-download.js","../../src/component/tile/script/tile/tile-selector.js","../../src/component/tile/index.js","../../src/component/tile/main.js","../../src/component/range/script/range/range-selector.js","../../src/component/range/script/range/range-emission.js","../../src/component/range/script/range/range-model.js","../../src/component/range/script/range/range.js","../../src/component/range/script/range/range-constraints.js","../../src/component/range/script/range/range-input.js","../../src/component/range/script/range/range-output.js","../../src/component/range/script/range/range-limit.js","../../src/component/range/index.js","../../src/component/range/script/range/range-input2.js","../../src/component/range/main.js","../../src/component/header/script/header/header-selector.js","../../src/component/header/script/header/header-links.js","../../src/component/header/script/header/header-modal.js","../../src/component/header/index.js","../../src/component/header/main.js","../../src/component/display/script/display/display-selector.js","../../src/component/display/script/display/display.js","../../src/component/display/index.js","../../src/component/display/main.js"],"sourcesContent":["class State {\n constructor () {\n this.modules = {};\n }\n\n create (ModuleClass) {\n const module = new ModuleClass();\n this.modules[module.type] = module;\n }\n\n getModule (type) {\n return this.modules[type];\n }\n\n add (type, item) {\n this.modules[type].add(item);\n }\n\n remove (type, item) {\n this.modules[type].remove(item);\n }\n\n get isActive () {\n return this._isActive;\n }\n\n set isActive (value) {\n if (value === this._isActive) return;\n this._isActive = value;\n const values = Object.keys(this.modules).map((e) => {\n return this.modules[e];\n });\n if (value) {\n for (const module of values) {\n module.activate();\n }\n } else {\n for (const module of values) {\n module.deactivate();\n }\n }\n }\n\n get isLegacy () {\n return this._isLegacy;\n }\n\n set isLegacy (value) {\n if (value === this._isLegacy) return;\n this._isLegacy = value;\n }\n}\n\nconst state = new State();\n\nexport default state;\n","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 state from '../state.js';\nimport config from '../../../config.js';\n\nclass LogLevel {\n constructor (level, light, dark, logger) {\n this.level = level;\n this.light = light;\n this.dark = dark;\n\n switch (logger) {\n case 'warn':\n this.logger = console.warn;\n break;\n\n case 'error':\n this.logger = console.error;\n break;\n\n default:\n this.logger = console.log;\n }\n }\n\n log (...values) {\n const message = new Message(config.namespace);\n for (const value of values) message.add(value);\n this.print(message);\n }\n\n print (message) {\n message.setColor(this.color);\n this.logger.apply(console, message.getMessage());\n }\n\n get color () {\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? this.dark : this.light;\n }\n}\n\nclass Message {\n constructor (domain) {\n this.inputs = ['%c'];\n this.styles = ['font-family:Marianne', 'line-height: 1.5'];\n this.objects = [];\n\n if (domain) this.add(`${domain} :`);\n }\n\n add (value) {\n switch (typeof value) {\n case 'object':\n case 'function':\n this.inputs.push('%o ');\n this.objects.push(value);\n break;\n\n default:\n this.inputs.push(`${value} `);\n }\n }\n\n setColor (color) {\n this.styles.push(`color:${color}`);\n }\n\n getMessage () {\n return [this.inputs.join(''), this.styles.join(';'), ...this.objects];\n }\n}\n\nconst LEVELS = {\n log: new LogLevel(0, '#616161', '#989898'),\n debug: new LogLevel(1, '#000091', '#8B8BFF'),\n info: new LogLevel(2, '#007c3b', '#00ed70'),\n warn: new LogLevel(3, '#ba4500', '#fa5c00', 'warn'),\n error: new LogLevel(4, '#D80600', '#FF4641', 'error')\n};\n\nclass Inspector {\n constructor () {\n this.level = 2;\n\n for (const id in LEVELS) {\n const level = LEVELS[id];\n this[id] = (...msgs) => {\n if (this.level <= level.level) level.log.apply(level, msgs);\n };\n this[id].print = level.print.bind(level);\n }\n }\n\n state () {\n const message = new Message();\n message.add(state);\n this.log.print(message);\n }\n\n tree () {\n const stage = state.getModule('stage');\n if (!stage) return;\n const message = new Message();\n this._branch(stage.root, 0, message);\n this.log.print(message);\n }\n\n _branch (element, space, message) {\n let branch = '';\n if (space > 0) {\n let indent = '';\n for (let i = 0; i < space; i++) indent += ' ';\n // branch += indent + '|\\n';\n branch += indent + '└─ ';\n }\n branch += `[${element.id}] ${element.html}`;\n message.add(branch);\n message.add({ '@': element });\n message.add('\\n');\n for (const child of element.children) branch += this._branch(child, space + 1, message);\n }\n}\n\nconst inspector = new Inspector();\n\nexport default inspector;\n","export const startAtDomContentLoaded = (callback) => {\n if (document.readyState !== 'loading') window.requestAnimationFrame(callback);\n else document.addEventListener('DOMContentLoaded', callback);\n};\n\nexport const startAuto = (callback) => {\n // detect\n startAtDomContentLoaded(callback);\n};\n","export const Modes = {\n AUTO: 'auto',\n MANUAL: 'manual',\n RUNTIME: 'runtime',\n LOADED: 'loaded',\n VUE: 'vue',\n ANGULAR: 'angular',\n REACT: 'react'\n};\n","import inspector from '../inspect/inspector.js';\nimport { startAtDomContentLoaded, startAuto } from './starters.js';\nimport config from '../../../config';\nimport { Modes } from './modes';\n\nclass Options {\n constructor () {\n this._mode = Modes.AUTO;\n this.isStarted = false;\n this.starting = this.start.bind(this);\n this.preventManipulation = false;\n }\n\n configure (settings = {}, start, query) {\n this.startCallback = start;\n const isProduction = settings.production && (!query || query.production !== 'false');\n switch (true) {\n case query && !isNaN(query.level):\n inspector.level = Number(query.level);\n break;\n\n case query && query.verbose && (query.verbose === 'true' || query.verbose === 1):\n inspector.level = 0;\n break;\n\n case isProduction:\n inspector.level = 999;\n break;\n\n case settings.verbose:\n inspector.level = 0;\n break;\n }\n inspector.info(`version ${config.version}`);\n this.mode = settings.mode || Modes.AUTO;\n }\n\n set mode (value) {\n switch (value) {\n case Modes.AUTO:\n this.preventManipulation = false;\n startAuto(this.starting);\n break;\n\n case Modes.LOADED:\n this.preventManipulation = false;\n startAtDomContentLoaded(this.starting);\n break;\n\n case Modes.RUNTIME:\n this.preventManipulation = false;\n this.start();\n break;\n\n case Modes.MANUAL:\n this.preventManipulation = false;\n break;\n\n case Modes.VUE:\n this.preventManipulation = true;\n break;\n\n case Modes.ANGULAR:\n this.preventManipulation = true;\n break;\n\n case Modes.REACT:\n this.preventManipulation = true;\n break;\n\n default:\n inspector.error('Illegal mode');\n return;\n }\n\n this._mode = value;\n inspector.info(`mode set to ${value}`);\n }\n\n get mode () {\n return this._mode;\n }\n\n start () {\n inspector.info('start');\n this.startCallback();\n }\n}\n\nconst options = new Options();\nexport default options;\n","class Collection {\n constructor () {\n this._collection = [];\n }\n\n forEach (callback) {\n this._collection.forEach(callback);\n }\n\n map (callback) {\n return this._collection.map(callback);\n }\n\n get length () {\n return this._collection.length;\n }\n\n add (collectable) {\n if (this._collection.indexOf(collectable) > -1) return false;\n this._collection.push(collectable);\n if (this.onAdd) this.onAdd();\n if (this.onPopulate && this._collection.length === 1) this.onPopulate();\n return true;\n }\n\n remove (collectable) {\n const index = this._collection.indexOf(collectable);\n if (index === -1) return false;\n this._collection.splice(index, 1);\n if (this.onRemove) this.onRemove();\n if (this.onEmpty && this._collection.length === 0) this.onEmpty();\n }\n\n execute (...args) {\n for (const collectable of this._collection) if (collectable) collectable.apply(null, args);\n }\n\n clear () {\n this._collection.length = 0;\n }\n\n clone () {\n const clone = new Collection();\n clone._collection = this._collection.slice();\n return clone;\n }\n\n get collection () {\n return this._collection;\n }\n}\n\nexport { Collection };\n","import { Collection } from '../utilities/collection.js';\n\nclass Module extends Collection {\n constructor (type) {\n super();\n this.type = type;\n this.isActive = false;\n }\n\n activate () {}\n deactivate () {}\n}\n\nexport { Module };\n","import config from '../../../config.js';\n\nconst ns = name => `${config.prefix}-${name}`;\n\nns.selector = (name, notation) => {\n if (notation === undefined) notation = '.';\n return `${notation}${ns(name)}`;\n};\n\nns.attr = (name) => `data-${ns(name)}`;\n\nns.attr.selector = (name, value) => {\n let result = ns.attr(name);\n if (value !== undefined) result += `=\"${value}\"`;\n return `[${result}]`;\n};\n\nns.event = (type) => `${config.namespace}.${type}`;\n\nns.emission = (domain, type) => `emission:${domain}.${type}`;\n\nexport default ns;\n","export const querySelectorAllArray = (element, selectors) => Array.prototype.slice.call(element.querySelectorAll(selectors));\n\nexport const queryParentSelector = (element, selectors) => {\n const parent = element.parentElement;\n if (parent.matches(selectors)) return parent;\n if (parent === document.documentElement) return null;\n return queryParentSelector(parent, selectors);\n};\n","import { Collection } from '../../utilities/collection.js';\nimport state from '../../state.js';\nimport ns from '../../utilities/namespace.js';\nimport { querySelectorAllArray } from '../../utilities/dom/query-selector';\n\nclass Registration {\n constructor (selector, InstanceClass, creator) {\n this.selector = selector;\n this.InstanceClass = InstanceClass;\n this.creator = creator;\n this.instances = new Collection();\n this.isIntroduced = false;\n this._instanceClassName = this.InstanceClass.instanceClassName;\n this._instanceClassNames = this.getInstanceClassNames(this.InstanceClass);\n this._property = this._instanceClassName.substring(0, 1).toLowerCase() + this._instanceClassName.substring(1);\n const dashed = this._instanceClassName\n .replace(/[^a-zA-Z0-9]+/g, '-')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1-$2')\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/([0-9])([^0-9])/g, '$1-$2')\n .replace(/([^0-9])([0-9])/g, '$1-$2')\n .toLowerCase();\n this._attribute = ns.attr(`js-${dashed}`);\n }\n\n getInstanceClassNames (InstanceClass) {\n const prototype = Object.getPrototypeOf(InstanceClass);\n if (!prototype || prototype.instanceClassName === 'Instance') return [InstanceClass.instanceClassName];\n return [...this.getInstanceClassNames(prototype), InstanceClass.instanceClassName];\n }\n\n hasInstanceClassName (instanceClassName) {\n return this._instanceClassNames.indexOf(instanceClassName) > -1;\n }\n\n introduce () {\n if (this.isIntroduced) return;\n this.isIntroduced = true;\n state.getModule('stage').parse(document.documentElement, this);\n }\n\n parse (node, nonRecursive) {\n const nodes = [];\n if (node.matches && node.matches(this.selector)) nodes.push(node);\n // eslint-disable-next-line no-useless-call\n if (!nonRecursive && node.querySelectorAll && node.querySelector(this.selector)) nodes.push.apply(nodes, querySelectorAllArray(node, this.selector));\n return nodes;\n }\n\n create (element) {\n if (!element.node.matches(this.selector)) return;\n const instance = new this.InstanceClass();\n this.instances.add(instance);\n return instance;\n }\n\n remove (instance) {\n this.instances.remove(instance);\n }\n\n dispose () {\n const instances = this.instances.collection;\n for (let i = instances.length - 1; i > -1; i--) instances[i]._dispose();\n this.creator = null;\n }\n\n get instanceClassName () {\n return this._instanceClassName;\n }\n\n get instanceClassNames () {\n return this._instanceClassNames;\n }\n\n get property () {\n return this._property;\n }\n\n get attribute () {\n return this._attribute;\n }\n}\n\nexport { Registration };\n","import { Module } from '../module.js';\nimport { Registration } from './registration.js';\nimport state from '../../state.js';\n\nclass Register extends Module {\n constructor () {\n super('register');\n }\n\n register (selector, InstanceClass, creator) {\n const registration = new Registration(selector, InstanceClass, creator);\n this.add(registration);\n if (state.isActive) registration.introduce();\n return registration;\n }\n\n activate () {\n for (const registration of this.collection) registration.introduce();\n }\n\n remove (registration) {\n registration.dispose();\n super.remove(registration);\n }\n}\n\nexport { Register };\n","import state from '../../state.js';\nimport inspector from '../../inspect/inspector.js';\n\nlet count = 0;\n\nclass Element {\n constructor (node, id) {\n if (!id) {\n count++;\n this.id = count;\n } else this.id = id;\n this.node = node;\n this.attributeNames = [];\n this.instances = [];\n this._children = [];\n this._parent = null;\n this._projects = [];\n }\n\n get proxy () {\n const scope = this;\n if (!this._proxy) {\n this._proxy = {\n id: this.id,\n get parent () {\n return scope.parent ? scope.parent.proxy : null;\n },\n get children () {\n return scope.children.map((child) => child.proxy);\n }\n };\n\n for (const instance of this.instances) this._proxy[instance.registration.property] = instance.proxy;\n }\n return this._proxy;\n }\n\n get html () {\n if (!this.node || !this.node.outerHTML) return '';\n const end = this.node.outerHTML.indexOf('>');\n return this.node.outerHTML.substring(0, end + 1);\n }\n\n project (registration) {\n if (this._projects.indexOf(registration) === -1) this._projects.push(registration);\n }\n\n populate () {\n const projects = this._projects.slice();\n this._projects.length = 0;\n for (const registration of projects) this.create(registration);\n }\n\n create (registration) {\n if (this.hasInstance(registration.instanceClassName)) {\n // inspector.debug(`failed creation, instance of ${registration.instanceClassName} already exists on element [${this.id}]`);\n return;\n }\n inspector.debug(`create instance of ${registration.instanceClassName} on element [${this.id}]`);\n const instance = registration.create(this);\n this.instances.push(instance);\n instance._config(this, registration);\n if (this._proxy) this._proxy[registration.property] = instance.proxy;\n }\n\n remove (instance) {\n const index = this.instances.indexOf(instance);\n if (index > -1) this.instances.splice(index, 1);\n if (this._proxy) delete this._proxy[instance.registration.property];\n }\n\n get parent () {\n return this._parent;\n }\n\n get ascendants () {\n return [this.parent, ...this.parent.ascendants];\n }\n\n get children () {\n return this._children;\n }\n\n get descendants () {\n const descendants = [...this._children];\n this._children.forEach(child => descendants.push(...child.descendants));\n return descendants;\n }\n\n // TODO : emit ascendant et descendant de changement ?\n\n addChild (child, index) {\n if (this._children.indexOf(child) > -1) return null;\n child._parent = this;\n if (!isNaN(index) && index > -1 && index < this._children.length) this._children.splice(index, 0, child);\n else this._children.push(child);\n return child;\n }\n\n removeChild (child) {\n const index = this._children.indexOf(child);\n if (index === -1) return null;\n child._parent = null;\n this._children.splice(index, 1);\n }\n\n emit (type, data) {\n const elements = state.getModule('stage').collection;\n const response = [];\n for (const element of elements) response.push(...element._emit(type, data));\n return response;\n }\n\n _emit (type, data) {\n const response = [];\n for (const instance of this.instances) response.push(...instance._emitter.emit(type, data));\n return response;\n }\n\n ascend (type, data) {\n if (this._parent) return this._parent._ascend(type, data);\n return [];\n }\n\n _ascend (type, data) {\n const response = [];\n for (const instance of this.instances) response.push(...instance._ascent.emit(type, data));\n if (this._parent) response.push(...this._parent._ascend(type, data));\n return response;\n }\n\n descend (type, data) {\n const response = [];\n for (const child of this._children) response.push(...child._descend(type, data));\n return response;\n }\n\n _descend (type, data) {\n const response = [];\n for (const instance of this.instances) response.push(...instance._descent.emit(type, data));\n for (const child of this._children) response.push(...child._descend(type, data));\n return response;\n }\n\n getInstance (instanceClassName) {\n for (const instance of this.instances) if (instance.registration.hasInstanceClassName(instanceClassName)) return instance;\n return null;\n }\n\n hasInstance (instanceClassName) {\n return this.getInstance(instanceClassName) !== null;\n }\n\n getDescendantInstances (instanceClassName, stopAtInstanceClassName, stopAtFirstInstance) {\n if (!instanceClassName) return [];\n const instances = [];\n for (const child of this._children) {\n const instance = child.getInstance(instanceClassName);\n if (instance) {\n instances.push(instance);\n if (stopAtFirstInstance) continue;\n }\n if ((!stopAtInstanceClassName || !child.hasInstance(stopAtInstanceClassName)) && child.children.length) instances.push.apply(instances, child.getDescendantInstances(instanceClassName, stopAtInstanceClassName, stopAtFirstInstance));\n }\n return instances;\n }\n\n getAscendantInstance (instanceClassName, stopAtInstanceClassName) {\n if (!instanceClassName || !this._parent) return null;\n const instance = this._parent.getInstance(instanceClassName);\n if (instance) return instance;\n if (stopAtInstanceClassName && this._parent.hasInstance(stopAtInstanceClassName)) return null;\n return this._parent.getAscendantInstance(instanceClassName, stopAtInstanceClassName);\n }\n\n dispose () {\n for (let i = this.instances.length - 1; i >= 0; i--) {\n const instance = this.instances[i];\n if (instance) instance._dispose();\n }\n this.instances.length = 0;\n state.remove('stage', this);\n this.parent.removeChild(this);\n this._children.length = 0;\n inspector.debug(`remove element [${this.id}] ${this.html}`);\n }\n\n prepare (attributeName) {\n if (this.attributeNames.indexOf(attributeName) === -1) this.attributeNames.push(attributeName);\n }\n\n examine () {\n const attributeNames = this.attributeNames.slice();\n this.attributeNames.length = 0;\n for (let i = this.instances.length - 1; i > -1; i--) this.instances[i].examine(attributeNames);\n }\n}\n\nexport { Element };\n","import ns from '../../utilities/namespace.js';\n\nexport const RootEmission = {\n CLICK: ns.emission('root', 'click'),\n KEYDOWN: ns.emission('root', 'keydown'),\n KEYUP: ns.emission('root', 'keyup')\n};\n","export const KeyCodes = {\n TAB: {\n id: 'tab',\n value: 9\n },\n ESCAPE: {\n id: 'escape',\n value: 27\n },\n END: {\n id: 'end',\n value: 35\n },\n HOME: {\n id: 'home',\n value: 36\n },\n LEFT: {\n id: 'left',\n value: 37\n },\n UP: {\n id: 'up',\n value: 38\n },\n RIGHT: {\n id: 'right',\n value: 39\n },\n DOWN: {\n id: 'down',\n value: 40\n }\n};\n\nexport const getKeyCode = (keyCode) => Object.values(KeyCodes).filter(entry => entry.value === keyCode)[0];\n","import { Element } from './element.js';\nimport ns from '../../utilities/namespace.js';\nimport { RootEmission } from './root-emission';\nimport { getKeyCode } from '../register/key-codes';\n\nclass Root extends Element {\n constructor () {\n super(document.documentElement, 'root');\n this.node.setAttribute(ns.attr('js'), true);\n this.listen();\n }\n\n listen () {\n // TODO v2 => listener au niveau des éléments qui redistribuent aux instances.\n document.documentElement.addEventListener('click', this.click.bind(this), { capture: true });\n document.documentElement.addEventListener('keydown', this.keydown.bind(this), { capture: true });\n document.documentElement.addEventListener('keyup', this.keyup.bind(this), { capture: true });\n }\n\n click (e) {\n this.emit(RootEmission.CLICK, e.target);\n }\n\n keydown (e) {\n this.emit(RootEmission.KEYDOWN, getKeyCode(e.keyCode));\n }\n\n keyup (e) {\n this.emit(RootEmission.KEYUP, getKeyCode(e.keyCode));\n }\n}\n\nexport { Root };\n","import state from '../../state.js';\nimport { Element } from './element.js';\nimport { Module } from '../module.js';\nimport { Root } from './root.js';\nimport inspector from '../../inspect/inspector.js';\n\nclass Stage extends Module {\n constructor () {\n super('stage');\n this.root = new Root();\n super.add(this.root);\n this.observer = new MutationObserver(this.mutate.bind(this));\n this.modifications = [];\n this.willModify = false;\n this.modifying = this.modify.bind(this);\n }\n\n hasElement (node) {\n for (const element of this.collection) if (element.node === node) return true;\n return false;\n }\n\n getElement (node) {\n for (const element of this.collection) if (element.node === node) return element;\n const element = new Element(node);\n this.add(element);\n inspector.debug(`add element [${element.id}] ${element.html}`);\n return element;\n }\n\n getProxy (node) {\n if (!this.hasElement(node)) return null;\n const element = this.getElement(node);\n return element.proxy;\n }\n\n add (element) {\n super.add(element);\n this.put(element, this.root);\n }\n\n put (element, branch) {\n let index = 0;\n for (let i = branch.children.length - 1; i > -1; i--) {\n const child = branch.children[i];\n const position = element.node.compareDocumentPosition(child.node);\n if (position & Node.DOCUMENT_POSITION_CONTAINS) {\n this.put(element, child);\n return;\n } else if (position & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n branch.removeChild(child);\n element.addChild(child, 0);\n } else if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n index = i + 1;\n break;\n }\n }\n\n branch.addChild(element, index);\n }\n\n activate () {\n this.observer.observe(document.documentElement, { childList: true, subtree: true, attributes: true });\n }\n\n deactivate () {\n this.observer.disconnect();\n }\n\n mutate (mutations) {\n const examinations = [];\n mutations.forEach((mutation) => {\n switch (mutation.type) {\n case 'childList':\n mutation.removedNodes.forEach((node) => this.dispose(node));\n mutation.addedNodes.forEach((node) => this.parse(node));\n break;\n\n case 'attributes':\n if (this.hasElement(mutation.target)) {\n const element = this.getElement(mutation.target);\n element.prepare(mutation.attributeName);\n if (examinations.indexOf(element) === -1) examinations.push(element);\n for (const descendant of element.descendants) if (examinations.indexOf(descendant) === -1) examinations.push(descendant);\n }\n if (this.modifications.indexOf(mutation.target) === -1) this.modifications.push(mutation.target);\n break;\n }\n });\n\n examinations.forEach(element => element.examine());\n if (this.modifications.length && !this.willModify) {\n this.willModify = true;\n window.requestAnimationFrame(this.modifying);\n }\n }\n\n modify () {\n this.willModify = false;\n const targets = this.modifications.slice();\n this.modifications.length = 0;\n for (const target of targets) if (document.documentElement.contains(target)) this.parse(target);\n }\n\n dispose (node) {\n const disposables = [];\n this.forEach((element) => {\n if (node.contains(element.node)) disposables.push(element);\n });\n\n for (const disposable of disposables) {\n disposable.dispose();\n this.remove(disposable);\n }\n }\n\n parse (node, registration, nonRecursive) {\n const registrations = registration ? [registration] : state.getModule('register').collection;\n const creations = [];\n\n for (const registration of registrations) {\n const nodes = registration.parse(node, nonRecursive);\n\n for (const n of nodes) {\n const element = this.getElement(n);\n element.project(registration);\n if (creations.indexOf(element) === -1) creations.push(element);\n }\n }\n\n for (const element of creations) element.populate();\n }\n}\n\nexport { Stage };\n","import state from '../../state.js';\nimport { Module } from '../module.js';\nimport { Collection } from '../../utilities/collection.js';\n\nclass Renderer extends Module {\n constructor () {\n super('render');\n this.rendering = this.render.bind(this);\n this.nexts = new Collection();\n }\n\n activate () {\n window.requestAnimationFrame(this.rendering);\n }\n\n request (instance) {\n this.nexts.add(instance);\n }\n\n render () {\n if (!state.isActive) return;\n window.requestAnimationFrame(this.rendering);\n this.forEach((instance) => instance.render());\n if (!this.nexts.length) return;\n const nexts = this.nexts.clone();\n this.nexts.clear();\n nexts.forEach((instance) => instance.next());\n }\n}\n\nexport { Renderer };\n","import { Module } from '../module.js';\n\nclass Resizer extends Module {\n constructor () {\n super('resize');\n this.requireResize = false;\n this.resizing = this.resize.bind(this);\n const requesting = this.request.bind(this);\n if (document.fonts) {\n document.fonts.ready.then(requesting);\n }\n window.addEventListener('resize', requesting);\n window.addEventListener('orientationchange', requesting);\n }\n\n activate () {\n this.request();\n }\n\n request () {\n if (this.requireResize) return;\n this.requireResize = true;\n window.requestAnimationFrame(this.resizing);\n }\n\n resize () {\n if (!this.requireResize) return;\n this.forEach((instance) => instance.resize());\n this.requireResize = false;\n }\n}\n\nexport { Resizer };\n","import ns from '../../utilities/namespace.js';\nimport { Module } from '../module.js';\n\nclass ScrollLocker extends Module {\n constructor () {\n super('lock');\n this._isLocked = false;\n this._scrollY = 0;\n this.onPopulate = this.lock.bind(this);\n this.onEmpty = this.unlock.bind(this);\n }\n\n get isLocked () {\n return this._isLocked;\n }\n\n lock () {\n if (!this._isLocked) {\n this._isLocked = true;\n this._scrollY = window.scrollY;\n const scrollBarGap = window.innerWidth - document.documentElement.clientWidth;\n document.documentElement.setAttribute(ns.attr('scrolling'), 'false');\n document.body.style.top = `${-this._scrollY}px`;\n this.behavior = getComputedStyle(document.documentElement).getPropertyValue('scroll-behavior');\n if (this.behavior === 'smooth') document.documentElement.style.scrollBehavior = 'auto';\n if (scrollBarGap > 0) {\n document.documentElement.style.setProperty('--scrollbar-width', `${scrollBarGap}px`);\n }\n }\n }\n\n unlock () {\n if (this._isLocked) {\n this._isLocked = false;\n document.documentElement.removeAttribute(ns.attr('scrolling'));\n document.body.style.top = '';\n window.scrollTo(0, this._scrollY);\n if (this.behavior === 'smooth') document.documentElement.style.removeProperty('scroll-behavior');\n document.documentElement.style.removeProperty('--scrollbar-width');\n }\n }\n\n move (value) {\n if (this._isLocked) {\n this._scrollY += value;\n document.body.style.top = `${-this._scrollY}px`;\n } else {\n window.scrollTo(0, window.scrollY + value);\n }\n }\n}\n\nexport { ScrollLocker };\n","import { Module } from '../module.js';\n\nclass Load extends Module {\n constructor () {\n super('load');\n this.loading = this.load.bind(this);\n }\n\n activate () {\n window.addEventListener('load', this.loading);\n }\n\n load () {\n this.forEach((instance) => instance.load());\n }\n}\n\nexport { Load };\n","import { Module } from '../module.js';\n\nconst FONT_FAMILIES = ['Marianne', 'Spectral'];\n\nclass FontSwap extends Module {\n constructor () {\n super('font-swap');\n this.swapping = this.swap.bind(this);\n }\n\n activate () {\n if (document.fonts) {\n document.fonts.addEventListener('loadingdone', this.swapping);\n }\n }\n\n swap () {\n const families = FONT_FAMILIES.filter(family => document.fonts.check(`16px ${family}`));\n\n this.forEach((instance) => instance.swapFont(families));\n }\n}\n\nexport { FontSwap };\n","import { Module } from '../module.js';\n\nclass MouseMove extends Module {\n constructor () {\n super('mouse-move');\n this.requireMove = false;\n this._isMoving = false;\n this.moving = this.move.bind(this);\n this.requesting = this.request.bind(this);\n this.onPopulate = this.listen.bind(this);\n this.onEmpty = this.unlisten.bind(this);\n }\n\n listen () {\n if (this._isMoving) return;\n this._isMoving = true;\n this.requireMove = false;\n document.documentElement.addEventListener('mousemove', this.requesting);\n }\n\n unlisten () {\n if (!this._isMoving) return;\n this._isMoving = false;\n this.requireMove = false;\n document.documentElement.removeEventListener('mousemove', this.requesting);\n }\n\n request (e) {\n if (!this._isMoving) return;\n this.point = { x: e.clientX, y: e.clientY };\n if (this.requireMove) return;\n this.requireMove = true;\n window.requestAnimationFrame(this.moving);\n }\n\n move () {\n if (!this.requireMove) return;\n this.forEach((instance) => instance.mouseMove(this.point));\n this.requireMove = false;\n }\n}\n\nexport { MouseMove };\n","import { Module } from '../module.js';\n\nclass Hash extends Module {\n constructor () {\n super('hash');\n this.handling = this.handle.bind(this);\n this.getLocationHash();\n }\n\n activate () {\n window.addEventListener('hashchange', this.handling);\n }\n\n deactivate () {\n window.removeEventListener('hashchange', this.handling);\n }\n\n _sanitize (hash) {\n if (hash.charAt(0) === '#') return hash.substring(1);\n return hash;\n }\n\n set hash (value) {\n const hash = this._sanitize(value);\n if (this._hash !== hash) window.location.hash = hash;\n }\n\n get hash () {\n return this._hash;\n }\n\n getLocationHash () {\n const hash = window.location.hash;\n this._hash = this._sanitize(hash);\n }\n\n handle (e) {\n this.getLocationHash();\n this.forEach((instance) => instance.handleHash(this._hash, e));\n }\n}\n\nexport { Hash };\n","import { Register } from './modules/register/register.js';\nimport { Stage } from './modules/stage/stage.js';\nimport { Renderer } from './modules/render/renderer.js';\nimport { Resizer } from './modules/resize/resizer.js';\nimport { ScrollLocker } from './modules/scroll/scroll-locker.js';\nimport { Load } from './modules/load/load.js';\nimport { FontSwap } from './modules/font-swap/font-swap';\nimport { MouseMove } from './modules/mouse-move/mouse-move';\nimport { Hash } from './modules/hash/hash';\nimport inspector from './inspect/inspector.js';\nimport state from './state.js';\n\nclass Engine {\n constructor () {\n state.create(Register);\n state.create(Stage);\n state.create(Renderer);\n state.create(Resizer);\n state.create(ScrollLocker);\n state.create(Load);\n state.create(FontSwap);\n state.create(MouseMove);\n state.create(Hash);\n\n const registerModule = state.getModule('register');\n this.register = registerModule.register.bind(registerModule);\n }\n\n get isActive () {\n return state.isActive;\n }\n\n start () {\n inspector.debug('START');\n state.isActive = true;\n }\n\n stop () {\n inspector.debug('STOP');\n state.isActive = false;\n }\n}\n\nconst engine = new Engine();\nexport default engine;\n","class Colors {\n getColor (context, use, tint, options = {}) {\n const option = getOption(options);\n const decision = `--${context}-${use}-${tint}${option}`;\n return getComputedStyle(document.documentElement).getPropertyValue(decision).trim() || null;\n }\n}\n\nconst getOption = (options) => {\n switch (true) {\n case options.hover:\n return '-hover';\n case options.active:\n return '-active';\n default:\n return '';\n }\n};\n\nconst colors = new Colors();\n\nexport default colors;\n","const sanitize = (className) => className.charAt(0) === '.' ? className.substr(1) : className;\n\nconst getClassNames = (element) => {\n switch (true) {\n case !element.className:\n return [];\n\n case typeof element.className === 'string':\n return element.className.split(' ');\n\n case typeof element.className.baseVal === 'string':\n return element.className.baseVal.split(' ');\n }\n\n return [];\n};\n\nexport { getClassNames };\n\nconst modifyClass = (element, className, remove) => {\n className = sanitize(className);\n const classNames = getClassNames(element);\n const index = classNames.indexOf(className);\n if (remove === true) {\n if (index > -1) classNames.splice(index, 1);\n } else if (index === -1) classNames.push(className);\n element.className = classNames.join(' ');\n};\n\nconst addClass = (element, className) => modifyClass(element, className);\n\nexport { addClass };\n\nconst removeClass = (element, className) => modifyClass(element, className, true);\n\nexport { removeClass };\n\nconst hasClass = (element, className) => getClassNames(element).indexOf(sanitize(className)) > -1;\n\nexport { hasClass };\n","const ACTIONS = [\n '[tabindex]:not([tabindex=\"-1\"])',\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 ACTIONS_SELECTOR = ACTIONS.join();\n\nexport const queryActions = (element) => {\n return element.querySelectorAll(ACTIONS_SELECTOR);\n};\n","let counter = 0;\n\nexport const uniqueId = (id) => {\n if (!document.getElementById(id)) return id;\n let element = true;\n const base = id;\n while (element) {\n counter++;\n id = `${base}-${counter}`;\n element = document.getElementById(id);\n }\n return id;\n};\n","import { addClass, hasClass, removeClass } from './classes.js';\nimport { queryParentSelector, querySelectorAllArray } from './query-selector.js';\nimport { queryActions } from './actions';\nimport { uniqueId } from './id';\n\nconst dom = {\n addClass: addClass,\n hasClass: hasClass,\n removeClass: removeClass,\n queryParentSelector: queryParentSelector,\n querySelectorAllArray: querySelectorAllArray,\n queryActions: queryActions,\n uniqueId: uniqueId\n};\n\nexport default dom;\n","import { DataURISVG } from './data-uri-svg';\n\nconst image = {\n DataURISVG: DataURISVG\n};\n\nexport default image;\n","class DataURISVG {\n constructor (width = 0, height = 0) {\n this._width = width;\n this._height = height;\n this._content = '';\n }\n\n get width () {\n return this._width;\n }\n\n set width (value) {\n this._width = value;\n }\n\n get height () {\n return this._height;\n }\n\n set height (value) {\n this._height = value;\n }\n\n get content () {\n return this._content;\n }\n\n set content (value) {\n this._content = value;\n }\n\n getDataURI (isLegacy = false) {\n let svg = `${this._content}`;\n\n svg = svg.replace(/#/gi, '%23');\n if (isLegacy) {\n svg = svg.replace(//gi, '%3E');\n svg = svg.replace(/\"/gi, '\\'');\n svg = svg.replace(/{/gi, '%7B');\n svg = svg.replace(/}/gi, '%7D');\n }\n return `data:image/svg+xml;charset=utf8,${svg}`;\n }\n}\n\nexport { DataURISVG };\n","import { supportLocalStorage, supportAspectRatio } from './browser-support.js';\n\nconst support = {\n supportLocalStorage: supportLocalStorage,\n supportAspectRatio: supportAspectRatio\n};\n\nexport default support;\n","const supportLocalStorage = () => {\n try {\n return 'localStorage' in window && window.localStorage !== null;\n } catch (e) {\n return false;\n }\n};\n\nconst supportAspectRatio = () => {\n if (!window.CSS) return false;\n return CSS.supports('aspect-ratio: 16 / 9');\n};\n\nexport { supportLocalStorage, supportAspectRatio };\n","import { TransitionSelector } from './transition-selector';\n\nconst selector = {\n TransitionSelector: TransitionSelector\n};\n\nexport default selector;\n","import ns from '../namespace.js';\n\nexport const TransitionSelector = {\n NONE: ns.selector('transition-none')\n};\n","/**\n * Copy properties from multiple sources including accessors.\n * source : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#copier_des_accesseurs\n *\n * @param {object} [target] - Target object to copy into\n * @param {...objects} [sources] - Multiple objects\n * @return {object} A new object\n *\n * @example\n *\n * const obj1 = {\n * key: 'value'\n * };\n * const obj2 = {\n * get function01 () {\n * return a-value;\n * }\n * set function01 () {\n * return a-value;\n * }\n * };\n * completeAssign(obj1, obj2)\n */\nconst completeAssign = (target, ...sources) => {\n sources.forEach(source => {\n const descriptors = Object.keys(source).reduce((descriptors, key) => {\n descriptors[key] = Object.getOwnPropertyDescriptor(source, key);\n return descriptors;\n }, {});\n\n Object.getOwnPropertySymbols(source).forEach(sym => {\n const descriptor = Object.getOwnPropertyDescriptor(source, sym);\n if (descriptor.enumerable) {\n descriptors[sym] = descriptor;\n }\n });\n Object.defineProperties(target, descriptors);\n });\n return target;\n};\n\nexport { completeAssign };\n","import { completeAssign } from './complete-assign';\n\nconst property = {\n completeAssign: completeAssign\n};\n\nexport default property;\n","import state from './state.js';\nimport engine from './engine.js';\nimport options from './options/options.js';\nimport dom from './utilities/dom/index';\nimport image from './utilities/image/index';\nimport ns from './utilities/namespace.js';\nimport support from './utilities/support/index';\nimport motion from './utilities/motion/index';\nimport property from './utilities/property/index';\nimport searchParams from './utilities/search-params/index.js';\n\nconst internals = {};\nconst legacy = {};\n\nObject.defineProperty(legacy, 'isLegacy', {\n get: () => state.isLegacy\n});\n\nlegacy.setLegacy = () => {\n state.isLegacy = true;\n};\n\ninternals.legacy = legacy;\ninternals.dom = dom;\ninternals.image = image;\ninternals.support = support;\ninternals.motion = motion;\ninternals.property = property;\ninternals.ns = ns;\ninternals.register = engine.register;\ninternals.state = state;\ninternals.query = searchParams(window.location);\n\nObject.defineProperty(internals, 'preventManipulation', {\n get: () => options.preventManipulation\n});\nObject.defineProperty(internals, 'stage', {\n get: () => state.getModule('stage')\n});\n\nexport default internals;\n","/**\n * Return an object of query params or null\n *\n * @method\n * @name searchParams\n * @param {string} url - an url\n * @returns {Object} object of query params or null\n */\n\nconst searchParams = (url) => {\n if (url && url.search) {\n const params = new URLSearchParams(window.location.search);\n const entries = params.entries();\n return Object.fromEntries(entries);\n }\n return null;\n};\n\nexport default searchParams;\n","import state from './state.js';\nimport options from './options/options.js';\nimport { Modes } from './options/modes.js';\nimport config from '../../config.js';\nimport engine from './engine.js';\nimport inspector from './inspect/inspector.js';\nimport colors from './utilities/colors/colors.js';\nimport internals from './internals.js';\n\nconst api = (node) => {\n const stage = state.getModule('stage');\n return stage.getProxy(node);\n};\n\napi.version = config.version;\napi.prefix = config.prefix;\napi.organisation = config.organisation;\napi.Modes = Modes;\n\nObject.defineProperty(api, 'mode', {\n set: (value) => { options.mode = value; },\n get: () => options.mode\n});\n\napi.internals = internals;\napi.version = config.version;\n\napi.start = engine.start;\napi.stop = engine.stop;\n\napi.inspector = inspector;\napi.colors = colors;\n\nconst configuration = window[config.namespace];\napi.internals.configuration = configuration;\n\noptions.configure(configuration, api.start, api.internals.query);\n\nwindow[config.namespace] = api;\nexport default api;\n","class Emitter {\n constructor () {\n this.emissions = {};\n }\n\n add (type, closure) {\n if (typeof closure !== 'function') throw new Error('closure must be a function');\n if (!this.emissions[type]) this.emissions[type] = [];\n this.emissions[type].push(closure);\n }\n\n remove (type, closure) {\n if (!this.emissions[type]) return;\n if (!closure) delete this.emissions[type];\n else {\n const index = this.emissions[type].indexOf(closure);\n if (index > -1) this.emissions[type].splice(index);\n }\n }\n\n emit (type, data) {\n if (!this.emissions[type]) return [];\n const response = [];\n for (const closure of this.emissions[type]) if (closure) response.push(closure(data));\n return response;\n }\n\n dispose () {\n this.emissions = null;\n }\n}\n\nexport { Emitter };\n","class Breakpoint {\n constructor (id, minWidth) {\n this.id = id;\n this.minWidth = minWidth;\n }\n\n test () {\n return window.matchMedia(`(min-width: ${this.minWidth}em)`).matches;\n }\n}\n\nexport const Breakpoints = {\n XS: new Breakpoint('xs', 0),\n SM: new Breakpoint('sm', 36),\n MD: new Breakpoint('md', 48),\n LG: new Breakpoint('lg', 62),\n XL: new Breakpoint('xl', 78)\n};\n","import { Emitter } from '../../utilities/emitter.js';\nimport state from '../../state.js';\nimport inspector from '../../inspect/inspector.js';\nimport { Breakpoints } from './breakpoints.js';\nimport { addClass, removeClass, hasClass, getClassNames } from '../../utilities/dom/classes.js';\nimport { uniqueId } from '../../utilities/dom/id';\nimport { completeAssign } from '../../utilities/property/complete-assign.js';\nimport { queryParentSelector, querySelectorAllArray } from '../../utilities/dom/query-selector.js';\nimport { queryActions } from '../../utilities/dom/actions.js';\n\nclass Instance {\n constructor (jsAttribute = true) {\n this.jsAttribute = jsAttribute;\n this._isRendering = false;\n this._isResizing = false;\n this._isScrollLocked = false;\n this._isLoading = false;\n this._isSwappingFont = false;\n this._isEnabled = true;\n this._isDisposed = false;\n this._listeners = {};\n this._handlingClick = this.handleClick.bind(this);\n this._hashes = [];\n this._hash = '';\n this._keyListenerTypes = [];\n this._keys = [];\n this.handlingKey = this.handleKey.bind(this);\n this._emitter = new Emitter();\n this._ascent = new Emitter();\n this._descent = new Emitter();\n this._registrations = [];\n this._nexts = [];\n }\n\n static get instanceClassName () {\n return 'Instance';\n }\n\n _config (element, registration) {\n this.element = element;\n this.registration = registration;\n this.node = element.node;\n this.id = element.node.id;\n if (this.jsAttribute) this.setAttribute(registration.attribute, true);\n this.init();\n }\n\n init () {}\n\n get proxy () {\n const scope = this;\n const proxy = {\n render: () => scope.render(),\n resize: () => scope.resize()\n };\n\n const proxyAccessors = {\n get node () {\n return this.node;\n },\n get isEnabled () {\n return scope.isEnabled;\n },\n set isEnabled (value) {\n scope.isEnabled = value;\n }\n };\n\n return completeAssign(proxy, proxyAccessors);\n }\n\n log (...values) {\n values.unshift(`${this.registration.instanceClassName} #${this.id} - `);\n inspector.log.apply(inspector, values);\n }\n\n debug (...values) {\n values.unshift(`${this.registration.instanceClassName} #${this.id} - `);\n inspector.debug.apply(inspector, values);\n }\n\n info (...values) {\n values.unshift(`${this.registration.instanceClassName} #${this.id} - `);\n inspector.info.apply(inspector, values);\n }\n\n warn (...values) {\n values.unshift(`${this.registration.instanceClassName} #${this.id} - `);\n inspector.warn.apply(inspector, values);\n }\n\n error (...values) {\n values.unshift(`${this.registration.instanceClassName} #${this.id} - `);\n inspector.error.apply(inspector, values);\n }\n\n register (selector, InstanceClass) {\n const registration = state.getModule('register').register(selector, InstanceClass, this);\n this._registrations.push(registration);\n }\n\n getRegisteredInstances (instanceClassName) {\n for (const registration of this._registrations) if (registration.hasInstanceClassName(instanceClassName)) return registration.instances.collection;\n return [];\n }\n\n dispatch (type, detail, bubbles, cancelable) {\n const event = new CustomEvent(type, { detail: detail, bubble: bubbles === true, cancelable: cancelable === true });\n this.node.dispatchEvent(event);\n }\n\n // TODO v2 => listener au niveau des éléments qui redistribuent aux instances.\n listen (type, closure, options) {\n if (!this._listeners[type]) this._listeners[type] = [];\n const listeners = this._listeners[type];\n // if (listeners.some(listener => listener.closure === closure)) return;\n const listener = new Listener(this.node, type, closure, options);\n listeners.push(listener);\n listener.listen();\n }\n\n unlisten (type, closure, options) {\n if (!type) {\n for (const type in this._listeners) this.unlisten(type);\n return;\n }\n\n const listeners = this._listeners[type];\n\n if (!listeners) return;\n\n if (!closure) {\n listeners.forEach(listener => this.unlisten(type, listener.closure));\n return;\n }\n\n const removal = listeners.filter(listener => listener.closure === closure && listener.matchOptions(options));\n removal.forEach(listener => listener.unlisten());\n this._listeners[type] = listeners.filter(listener => removal.indexOf(listener) === -1);\n }\n\n listenClick (options) {\n this.listen('click', this._handlingClick, options);\n }\n\n unlistenClick (options) {\n this.unlisten('click', this._handlingClick, options);\n }\n\n handleClick (e) {}\n\n set hash (value) {\n state.getModule('hash').hash = value;\n }\n\n get hash () {\n return state.getModule('hash').hash;\n }\n\n listenHash (hash, add) {\n if (!this._hashes) return;\n if (this._hashes.length === 0) state.add('hash', this);\n const action = new HashAction(hash, add);\n this._hashes = this._hashes.filter(action => action.hash !== hash);\n this._hashes.push(action);\n }\n\n unlistenHash (hash) {\n if (!this._hashes) return;\n this._hashes = this._hashes.filter(action => action.hash !== hash);\n if (this._hashes.length === 0) state.remove('hash', this);\n }\n\n handleHash (hash, e) {\n if (!this._hashes) return;\n for (const action of this._hashes) action.handle(hash, e);\n }\n\n listenKey (keyCode, closure, preventDefault = false, stopPropagation = false, type = 'down') {\n if (this._keyListenerTypes.indexOf(type) === -1) {\n this.listen(`key${type}`, this.handlingKey);\n this._keyListenerTypes.push(type);\n }\n\n this._keys.push(new KeyAction(type, keyCode, closure, preventDefault, stopPropagation));\n }\n\n unlistenKey (code, closure) {\n this._keys = this._keys.filter((key) => key.code !== code || key.closure !== closure);\n\n this._keyListenerTypes.forEach(type => {\n if (!this._keys.some(key => key.type === type)) this.unlisten(`key${type}`, this.handlingKey);\n });\n }\n\n handleKey (e) {\n for (const key of this._keys) key.handle(e);\n }\n\n get isEnabled () { return this._isEnabled; }\n\n set isEnabled (value) {\n this._isEnabled = value;\n }\n\n get isRendering () { return this._isRendering; }\n\n set isRendering (value) {\n if (this._isRendering === value) return;\n if (value) state.add('render', this);\n else state.remove('render', this);\n this._isRendering = value;\n }\n\n render () {}\n\n request (closure) {\n this._nexts.push(closure);\n state.getModule('render').request(this);\n }\n\n next () {\n const nexts = this._nexts.slice();\n this._nexts.length = 0;\n for (const closure of nexts) if (closure) closure();\n }\n\n get isResizing () { return this._isResizing; }\n\n set isResizing (value) {\n if (this._isResizing === value) return;\n if (value) {\n state.add('resize', this);\n this.resize();\n } else state.remove('resize', this);\n this._isResizing = value;\n }\n\n resize () {}\n\n isBreakpoint (breakpoint) {\n switch (true) {\n case typeof breakpoint === 'string':\n return Breakpoints[breakpoint.toUpperCase()].test();\n\n default:\n return breakpoint.test();\n }\n }\n\n get isScrollLocked () {\n return this._isScrollLocked;\n }\n\n set isScrollLocked (value) {\n if (this._isScrollLocked === value) return;\n if (value) state.add('lock', this);\n else state.remove('lock', this);\n this._isScrollLocked = value;\n }\n\n get isLoading () {\n return this._isLoading;\n }\n\n set isLoading (value) {\n if (this._isLoading === value) return;\n if (value) state.add('load', this);\n else state.remove('load', this);\n this._isLoading = value;\n }\n\n load () {}\n\n get isSwappingFont () {\n return this._isSwappingFont;\n }\n\n set isSwappingFont (value) {\n if (this._isSwappingFont === value) return;\n if (value) state.add('font-swap', this);\n else state.remove('font-swap', this);\n this._isSwappingFont = value;\n }\n\n swapFont () {}\n\n get isMouseMoving () { return this._isMouseMoving; }\n\n set isMouseMoving (value) {\n if (this._isMouseMoving === value) return;\n if (value) {\n state.add('mouse-move', this);\n } else {\n state.remove('mouse-move', this);\n }\n this._isMouseMoving = value;\n }\n\n mouseMove (point) {}\n\n examine (attributeNames) {\n if (!this.node.matches(this.registration.selector)) {\n this._dispose();\n return;\n }\n\n this.mutate(attributeNames);\n }\n\n mutate (attributeNames) {}\n\n retrieveNodeId (node, append) {\n if (node.id) return node.id;\n const id = uniqueId(`${this.id}-${append}`);\n this.warn(`add id '${id}' to ${append}`);\n node.setAttribute('id', id);\n return id;\n }\n\n get isDisposed () {\n return this._isDisposed;\n }\n\n _dispose () {\n this.debug(`dispose instance of ${this.registration.instanceClassName} on element [${this.element.id}]`);\n this.removeAttribute(this.registration.attribute);\n this.unlisten();\n state.remove('hash', this);\n this._hashes = null;\n this._keys = null;\n this.isRendering = false;\n this.isResizing = false;\n this._nexts = null;\n state.getModule('render').nexts.remove(this);\n this.isScrollLocked = false;\n this.isLoading = false;\n this.isSwappingFont = false;\n this.isMouseMoving = false;\n this._emitter.dispose();\n this._emitter = null;\n this._ascent.dispose();\n this._ascent = null;\n this._descent.dispose();\n this._descent = null;\n this.element.remove(this);\n for (const registration of this._registrations) state.remove('register', registration);\n this._registrations = null;\n this.registration.remove(this);\n this._isDisposed = true;\n this.dispose();\n }\n\n dispose () {}\n\n emit (type, data) {\n return this.element.emit(type, data);\n }\n\n addEmission (type, closure) {\n this._emitter.add(type, closure);\n }\n\n removeEmission (type, closure) {\n this._emitter.remove(type, closure);\n }\n\n ascend (type, data) {\n return this.element.ascend(type, data);\n }\n\n addAscent (type, closure) {\n this._ascent.add(type, closure);\n }\n\n removeAscent (type, closure) {\n this._ascent.remove(type, closure);\n }\n\n descend (type, data) {\n return this.element.descend(type, data);\n }\n\n addDescent (type, closure) {\n this._descent.add(type, closure);\n }\n\n removeDescent (type, closure) {\n this._descent.remove(type, closure);\n }\n\n get style () {\n return this.node.style;\n }\n\n addClass (className) {\n addClass(this.node, className);\n }\n\n removeClass (className) {\n removeClass(this.node, className);\n }\n\n hasClass (className) {\n return hasClass(this.node, className);\n }\n\n get classNames () {\n return getClassNames(this.node);\n }\n\n remove () {\n this.node.parentNode.removeChild(this.node);\n }\n\n setAttribute (attributeName, value) {\n this.node.setAttribute(attributeName, value);\n }\n\n getAttribute (attributeName) {\n return this.node.getAttribute(attributeName);\n }\n\n hasAttribute (attributeName) {\n return this.node.hasAttribute(attributeName);\n }\n\n removeAttribute (attributeName) {\n this.node.removeAttribute(attributeName);\n }\n\n setProperty (propertyName, value) {\n this.node.style.setProperty(propertyName, value);\n }\n\n removeProperty (propertyName) {\n this.node.style.removeProperty(propertyName);\n }\n\n focus () {\n this.node.focus();\n }\n\n blur () {\n this.node.blur();\n }\n\n focusClosest () {\n const closest = this._focusClosest(this.node.parentNode);\n if (closest) closest.focus();\n }\n\n _focusClosest (parent) {\n if (!parent) return null;\n const actions = [...queryActions(parent)];\n if (actions.length <= 1) {\n return this._focusClosest(parent.parentNode);\n } else {\n const index = actions.indexOf(this.node);\n return actions[index + (index < actions.length - 1 ? 1 : -1)];\n }\n }\n\n get hasFocus () {\n return this.node === document.activeElement;\n }\n\n scrollIntoView () {\n const rect = this.getRect();\n\n const scroll = state.getModule('lock');\n\n if (rect.top < 0) {\n scroll.move(rect.top - 50);\n }\n\n if (rect.bottom > window.innerHeight) {\n scroll.move(rect.bottom - window.innerHeight + 50);\n }\n }\n\n matches (selectors) {\n return this.node.matches(selectors);\n }\n\n querySelector (selectors) {\n return this.node.querySelector(selectors);\n }\n\n querySelectorAll (selectors) {\n return querySelectorAllArray(this.node, selectors);\n }\n\n queryParentSelector (selectors) {\n return queryParentSelector(this.node, selectors);\n }\n\n getRect () {\n const rect = this.node.getBoundingClientRect();\n rect.center = rect.left + rect.width * 0.5;\n rect.middle = rect.top + rect.height * 0.5;\n return rect;\n }\n\n get isLegacy () {\n return state.isLegacy;\n }\n}\n\nclass KeyAction {\n constructor (type, keyCode, closure, preventDefault, stopPropagation) {\n this.type = type;\n this.eventType = `key${type}`;\n this.keyCode = keyCode;\n this.closure = closure;\n this.preventDefault = preventDefault === true;\n this.stopPropagation = stopPropagation === true;\n }\n\n handle (e) {\n if (e.type !== this.eventType) return;\n if (e.keyCode === this.keyCode.value) {\n this.closure(e);\n if (this.preventDefault) {\n e.preventDefault();\n }\n if (this.stopPropagation) {\n e.stopPropagation();\n }\n }\n }\n}\n\nclass Listener {\n constructor (node, type, closure, options) {\n this._node = node;\n this._type = type;\n this._closure = closure;\n this._options = options;\n }\n\n get closure () {\n return this._closure;\n }\n\n listen () {\n this._node.addEventListener(this._type, this._closure, this._options);\n }\n\n matchOptions (options = null) {\n switch (true) {\n case options === null:\n case typeof this._options === 'boolean' && typeof options === 'boolean' && this._options === options:\n return true;\n\n case Object.keys(this._options).length !== Object.keys(options).length:\n return false;\n\n case Object.keys(options).every(key => this._options[key] === options[key]):\n return true;\n }\n\n return false;\n }\n\n unlisten () {\n this._node.removeEventListener(this._type, this._closure, this._options);\n }\n}\n\nclass HashAction {\n constructor (hash, add) {\n this.hash = hash;\n this.add = add;\n }\n\n handle (hash, e) {\n if (this.hash === hash) this.add(e);\n }\n}\n\nexport { Instance };\n","import ns from '../api/utilities/namespace.js';\n\nconst DisclosureEvent = {\n DISCLOSE: ns.event('disclose'),\n CONCEAL: ns.event('conceal')\n};\n\nexport { DisclosureEvent };\n","import ns from '../api/utilities/namespace.js';\n\nconst DisclosureEmission = {\n RESET: ns.emission('disclosure', 'reset'),\n ADDED: ns.emission('disclosure', 'added'),\n RETRIEVE: ns.emission('disclosure', 'retrieve'),\n REMOVED: ns.emission('disclosure', 'removed'),\n GROUP: ns.emission('disclosure', 'group'),\n UNGROUP: ns.emission('disclosure', 'ungroup'),\n SPOTLIGHT: ns.emission('disclosure', 'spotlight')\n};\n\nexport { DisclosureEmission };\n","import { Instance } from '../api/modules/register/instance.js';\nimport { DisclosureEvent } from './disclosure-event.js';\nimport { DisclosureEmission } from './disclosure-emission.js';\nimport { completeAssign } from '../api/utilities/property/complete-assign.js';\n\nclass Disclosure extends Instance {\n constructor (type, selector, DisclosureButtonInstanceClass, disclosuresGroupInstanceClassName) {\n super();\n this.type = type;\n this._selector = selector;\n this.DisclosureButtonInstanceClass = DisclosureButtonInstanceClass;\n this.disclosuresGroupInstanceClassName = disclosuresGroupInstanceClassName;\n this.modifier = this._selector + '--' + this.type.id;\n this._isPristine = true;\n this._isRetrievingPrimaries = false;\n this._hasRetrieved = false;\n this._primaryButtons = [];\n }\n\n static get instanceClassName () {\n return 'Disclosure';\n }\n\n init () {\n this.addDescent(DisclosureEmission.RESET, this.reset.bind(this));\n this.addDescent(DisclosureEmission.GROUP, this.update.bind(this));\n this.addDescent(DisclosureEmission.UNGROUP, this.update.bind(this));\n this.addAscent(DisclosureEmission.SPOTLIGHT, this.disclose.bind(this));\n this.register(`[aria-controls=\"${this.id}\"]`, this.DisclosureButtonInstanceClass);\n this.ascend(DisclosureEmission.ADDED);\n this.listenHash(this.id, this._spotlight.bind(this));\n this.update();\n }\n\n get isEnabled () { return super.isEnabled; }\n\n set isEnabled (value) {\n if (this.isEnabled === value) return;\n super.isEnabled = value;\n if (value) this.ascend(DisclosureEmission.ADDED);\n else this.ascend(DisclosureEmission.REMOVED);\n }\n\n get isPristine () {\n return this._isPristine;\n }\n\n get proxy () {\n const scope = this;\n const proxy = Object.assign(super.proxy, {\n disclose: scope.disclose.bind(scope),\n focus: scope.focus.bind(scope)\n });\n\n if (this.type.canConceal) proxy.conceal = scope.conceal.bind(scope);\n\n const proxyAccessors = {\n get buttons () {\n return scope.buttons.map((button) => button.proxy);\n },\n get group () {\n const group = scope.group;\n return group ? group.proxy : null;\n },\n get isDisclosed () {\n return scope.isDisclosed;\n }\n };\n\n return completeAssign(proxy, proxyAccessors);\n }\n\n get buttons () {\n return this.getRegisteredInstances(this.DisclosureButtonInstanceClass.instanceClassName);\n }\n\n update () {\n this.getGroup();\n this.retrievePrimaries();\n }\n\n getGroup () {\n if (!this.disclosuresGroupInstanceClassName) {\n this._group = null;\n return;\n }\n\n const group = this.element.getAscendantInstance(this.disclosuresGroupInstanceClassName, this.constructor.instanceClassName);\n if (!group || !group.validate(this)) {\n this._group = null;\n return;\n }\n\n this._group = group;\n }\n\n get group () {\n return this._group;\n }\n\n disclose (withhold) {\n if (this.isDisclosed === true || !this.isEnabled) return false;\n this._isPristine = false;\n this.isDisclosed = true;\n if (!withhold && this.group) this.group.current = this;\n return true;\n }\n\n conceal (withhold, preventFocus = true) {\n if (this.isDisclosed === false) return false;\n if (!this.type.canConceal && this.group && this.group.current === this) return false;\n this.isDisclosed = false;\n if (!withhold && this.group && this.group.current === this) this.group.current = null;\n if (!preventFocus) this.focus();\n if (!this._isPristine) this.descend(DisclosureEmission.RESET);\n return true;\n }\n\n get isDisclosed () {\n return this._isDisclosed;\n }\n\n set isDisclosed (value) {\n if (this._isDisclosed === value || (!this.isEnabled && value === true)) return;\n this.dispatch(value ? DisclosureEvent.DISCLOSE : DisclosureEvent.CONCEAL, this.type);\n this._isDisclosed = value;\n if (value) this.addClass(this.modifier);\n else this.removeClass(this.modifier);\n for (let i = 0; i < this.buttons.length; i++) this.buttons[i].apply(value);\n }\n\n get isInitiallyDisclosed () {\n return this.primaryButtons.some(button => button.isInitiallyDisclosed);\n }\n\n hasRetrieved () {\n return this._hasRetrieved;\n }\n\n reset () {}\n\n toggle (canDisclose) {\n if (!this.type.canConceal) this.disclose();\n else {\n switch (true) {\n case !canDisclose:\n case this.isDisclosed:\n this.conceal(false, false);\n break;\n\n default:\n this.disclose();\n }\n }\n }\n\n get buttonHasFocus () {\n return this.buttons.some((button) => { return button.hasFocus; });\n }\n\n get hasFocus () {\n if (super.hasFocus) return true;\n if (this.buttonHasFocus) return true;\n return this.querySelectorAll(':focus').length > 0;\n }\n\n focus () {\n if (this._primaryButtons.length > 0) this._primaryButtons[0].focus();\n }\n\n get primaryButtons () {\n return this._primaryButtons;\n }\n\n retrievePrimaries () {\n if (this._isRetrievingPrimaries) return;\n this._isRetrievingPrimaries = true;\n this.request(this._retrievePrimaries.bind(this));\n }\n\n _retrievePrimaries () {\n this._isRetrievingPrimaries = false;\n this._primaryButtons = this._electPrimaries(this.buttons);\n\n if (this._hasRetrieved || this._primaryButtons.length === 0) return;\n this.retrieved();\n this._hasRetrieved = true;\n\n this.applyAbility(true);\n\n if (this.group) {\n this.group.retrieve();\n return;\n }\n\n if (this._isPristine && this.isEnabled && !this.group) {\n switch (true) {\n case this.hash === this.id:\n this._spotlight();\n break;\n\n case this.isInitiallyDisclosed:\n this.disclose();\n break;\n }\n }\n }\n\n retrieved () {}\n\n _spotlight () {\n this.disclose();\n this.request(() => { this.ascend(DisclosureEmission.SPOTLIGHT); });\n }\n\n _electPrimaries (candidates) {\n return candidates.filter(button => button.canDisclose && !this.node.contains(button.node));\n }\n\n applyAbility (withhold = false) {\n const isEnabled = !this._primaryButtons.every(button => button.isDisabled);\n\n if (this.isEnabled === isEnabled) return;\n\n this.isEnabled = isEnabled;\n\n if (withhold) return;\n\n if (!this.isEnabled && this.isDisclosed) {\n if (this.group) this.ascend(DisclosureEmission.REMOVED);\n else if (this.type.canConceal) this.conceal();\n }\n\n if (this.isEnabled) {\n if (this.group) this.ascend(DisclosureEmission.ADDED);\n if (this.hash === this.id) {\n this._spotlight();\n }\n }\n }\n\n dispose () {\n this._group = null;\n this._primaryButtons = null;\n super.dispose();\n this.ascend(DisclosureEmission.REMOVED);\n }\n}\n\nexport { Disclosure };\n","import { Instance } from '../api/modules/register/instance';\nimport ns from '../api/utilities/namespace.js';\n\nclass DisclosureButton extends Instance {\n constructor (type) {\n super();\n this.type = type;\n this.attributeName = type.ariaState ? 'aria-' + type.id : ns.attr(type.id);\n this._canDisclose = false;\n }\n\n static get instanceClassName () {\n return 'DisclosureButton';\n }\n\n get isPrimary () {\n return this.registration.creator.primaryButtons.includes(this);\n }\n\n get canDisclose () {\n return this._canDisclose;\n }\n\n get isDisabled () {\n return this.type.canDisable && this.hasAttribute('disabled');\n }\n\n init () {\n this._canDisclose = this.hasAttribute(this.attributeName);\n this._isInitiallyDisclosed = this.isDisclosed;\n this._isContained = this.registration.creator.node.contains(this.node);\n this.controlsId = this.getAttribute('aria-controls');\n this.registration.creator.retrievePrimaries();\n this.listenClick();\n }\n\n get proxy () {\n const scope = this;\n return Object.assign(super.proxy, {\n focus: scope.focus.bind(scope)\n });\n }\n\n handleClick (e) {\n if (this.registration.creator) this.registration.creator.toggle(this.canDisclose);\n }\n\n mutate (attributeNames) {\n this._canDisclose = this.hasAttribute(this.attributeName);\n this.registration.creator.applyAbility();\n if (!this._isApplying && this.isPrimary && attributeNames.indexOf(this.attributeName) > -1 && this.registration.creator) {\n if (this.isDisclosed) this.registration.creator.disclose();\n else if (this.type.canConceal) this.registration.creator.conceal();\n }\n }\n\n apply (value) {\n if (!this.canDisclose) return;\n this._isApplying = true;\n this.setAttribute(this.attributeName, value);\n this.request(() => { this._isApplying = false; });\n }\n\n get isDisclosed () {\n return this.getAttribute(this.attributeName) === 'true';\n }\n\n get isInitiallyDisclosed () {\n return this._isInitiallyDisclosed;\n }\n\n focus () {\n super.focus();\n this.scrollIntoView();\n }\n\n measure (rect) {\n const buttonRect = this.rect;\n this._dx = rect.x - buttonRect.x;\n this._dy = rect.y - buttonRect.y;\n }\n\n get dx () {\n return this._dx;\n }\n\n get dy () {\n return this._dy;\n }\n}\n\nexport { DisclosureButton };\n","import ns from '../api/utilities/namespace.js';\n\nexport const DisclosureSelector = {\n PREVENT_CONCEAL: ns.attr.selector('prevent-conceal'),\n GROUP: ns.attr('group')\n};\n","import { Instance } from '../api/modules/register/instance.js';\nimport { DisclosureEmission } from './disclosure-emission.js';\nimport { completeAssign } from '../api/utilities/property/complete-assign.js';\nimport { DisclosureSelector } from './disclosure-selector.js';\n\nclass DisclosuresGroup extends Instance {\n constructor (disclosureInstanceClassName, jsAttribute) {\n super(jsAttribute);\n this.disclosureInstanceClassName = disclosureInstanceClassName;\n this._members = [];\n this._index = -1;\n this._isRetrieving = false;\n this._hasRetrieved = false;\n this._isGrouped = true;\n }\n\n static get instanceClassName () {\n return 'DisclosuresGroup';\n }\n\n init () {\n this.addAscent(DisclosureEmission.ADDED, this.update.bind(this));\n this.addAscent(DisclosureEmission.RETRIEVE, this.retrieve.bind(this));\n this.addAscent(DisclosureEmission.REMOVED, this.update.bind(this));\n this.descend(DisclosureEmission.GROUP);\n this._isGrouped = this.getAttribute(DisclosureSelector.GROUP) !== 'false';\n this.update();\n }\n\n get proxy () {\n const scope = this;\n\n const proxyAccessors = {\n set index (value) {\n scope.index = value;\n },\n get index () {\n return scope.index;\n },\n get length () {\n return scope.length;\n },\n get current () {\n const current = scope.current;\n return current ? current.proxy : null;\n },\n get members () {\n return scope.members.map((member) => member.proxy);\n },\n get hasFocus () {\n return scope.hasFocus;\n },\n set isGrouped (value) {\n scope.isGrouped = value;\n },\n get isGrouped () {\n return scope.isGrouped;\n }\n };\n\n return completeAssign(super.proxy, proxyAccessors);\n }\n\n validate (member) {\n return true;\n }\n\n getMembers () {\n const members = this.element.getDescendantInstances(this.disclosureInstanceClassName, this.constructor.instanceClassName, true);\n this._members = members.filter(this.validate.bind(this)).filter(member => member.isEnabled);\n const invalids = members.filter(member => !this._members.includes(member));\n invalids.forEach(invalid => invalid.conceal());\n }\n\n retrieve (bypassPrevention = false) {\n if (this._isRetrieving || (this._hasRetrieved && !bypassPrevention)) return;\n this._isRetrieving = true;\n this.request(this._retrieve.bind(this));\n }\n\n _retrieve () {\n this.getMembers();\n this._isRetrieving = false;\n this._hasRetrieved = true;\n if (this.hash) {\n for (let i = 0; i < this.length; i++) {\n const member = this.members[i];\n if (this.hash === member.id) {\n this.index = i;\n this.request(() => { this.ascend(DisclosureEmission.SPOTLIGHT); });\n return i;\n }\n }\n }\n\n for (let i = 0; i < this.length; i++) {\n const member = this.members[i];\n if (member.isInitiallyDisclosed) {\n this.index = i;\n return i;\n }\n }\n\n return this.getIndex();\n }\n\n update () {\n this.getMembers();\n if (this._hasRetrieved) this.getIndex();\n }\n\n get members () {\n return this._members;\n }\n\n get length () {\n return this.members ? this.members.length : 0;\n }\n\n getIndex (defaultIndex = -1) {\n this._index = undefined;\n let index = defaultIndex;\n for (let i = 0; i < this.length; i++) {\n if (this.members[i].isDisclosed) {\n index = i;\n break;\n }\n }\n\n this.index = index;\n return index;\n }\n\n get index () {\n return this._index;\n }\n\n set index (value) {\n if (value < -1 || value >= this.length || value === this._index) return;\n this._index = value;\n for (let i = 0; i < this.length; i++) {\n const member = this.members[i];\n if (value === i) {\n if (!member.isDisclosed) member.disclose(true);\n } else {\n if ((this.isGrouped || !this.canUngroup) && member.isDisclosed) member.conceal(true);\n }\n }\n this.apply();\n }\n\n get current () {\n if (this._index === -1 || isNaN(this._index)) return null;\n return this._members[this._index] || null;\n }\n\n set current (member) {\n this.index = this.members.indexOf(member);\n }\n\n get hasFocus () {\n const current = this.current;\n if (current) return current.hasFocus;\n return false;\n }\n\n set isGrouped (value) {\n const isGrouped = !!value;\n if (this._isGrouped === isGrouped) return;\n this._isGrouped = isGrouped;\n this.setAttribute(DisclosureSelector.GROUP, !!value);\n this.update();\n }\n\n get isGrouped () {\n return this._isGrouped;\n }\n\n get canUngroup () {\n return false;\n }\n\n mutate (attributesNames) {\n if (attributesNames.includes(DisclosureSelector.GROUP)) {\n this.isGrouped = this.getAttribute(DisclosureSelector.GROUP) !== 'false';\n }\n }\n\n apply () {}\n\n dispose () {\n super.dispose();\n this.descend(DisclosureEmission.UNGROUP);\n this._members = null;\n }\n}\n\nexport { DisclosuresGroup };\n","export const DisclosureType = {\n EXPAND: {\n id: 'expanded',\n ariaState: true,\n ariaControls: true,\n canConceal: true,\n canDisable: true\n },\n SELECT: {\n id: 'selected',\n ariaState: true,\n ariaControls: true,\n canConceal: false,\n canDisable: true\n },\n OPENED: {\n id: 'opened',\n ariaState: false,\n ariaControls: true,\n canConceal: true,\n canDisable: false\n }\n};\n","import { DisclosureType } from '../disclosure/disclosure-type.js';\nimport { DisclosureButton } from '../disclosure/disclosure-button.js';\n\nclass CollapseButton extends DisclosureButton {\n constructor () {\n super(DisclosureType.EXPAND);\n }\n\n static get instanceClassName () {\n return 'CollapseButton';\n }\n}\n\nexport { CollapseButton };\n","import ns from '../api/utilities/namespace.js';\n\nexport const CollapseSelector = {\n COLLAPSE: ns.selector('collapse'),\n COLLAPSING: ns.selector('collapsing')\n};\n","import ns from '../api/utilities/namespace.js';\n\nexport const EquisizedEmission = {\n CHANGE: ns('equisized', 'change')\n};\n","import ns from '../../api/utilities/namespace.js';\n\nconst ToggleEvent = {\n TOGGLE: ns.event('toggle')\n};\n\nexport { ToggleEvent };\n","import ns from '../api/utilities/namespace.js';\n\nexport const InjectSvgSelector = {\n INJECT_SVG: `[${ns.attr('inject-svg')}]`\n};\n","import ns from '../api/utilities/namespace.js';\n\nexport const ArtworkSelector = {\n ARTWORK_USE: `${ns.selector('artwork')} use`\n};\n","import ns from '../api/utilities/namespace.js';\n\nexport const AssessSelector = {\n ASSESS_FILE: `${ns.attr.selector('assess-file')}`,\n DETAIL: `${ns.attr.selector('assess-file')} [class$=\"__detail\"], ${ns.attr.selector('assess-file')} [class*=\"__detail \"]`\n};\n","import ns from '../api/utilities/namespace.js';\n\nconst AssessEmission = {\n UPDATE: ns.emission('assess', 'update'),\n ADDED: ns.emission('assess', 'added')\n};\n\nexport { AssessEmission };\n","import ns from '../api/utilities/namespace.js';\n\nconst ratiosImg = ['32x9', '16x9', '3x2', '4x3', '1x1', '3x4', '2x3'];\nconst ratiosVid = ['16x9', '4x3', '1x1'];\n\nconst ratioSelector = (name, modifiers) => {\n return modifiers.map(modifier => ns.selector(`${name}--${modifier}`)).join(',');\n};\n\nconst deprecatedRatioSelector = `${ns.selector('responsive-img')}, ${ratioSelector('responsive-img', ratiosImg)}, ${ns.selector('responsive-vid')}, ${ratioSelector('responsive-vid', ratiosVid)}`;\n\nexport const RatioSelector = {\n RATIO: `${ns.selector('ratio')}, ${ratioSelector('ratio', ratiosImg)}, ${deprecatedRatioSelector}`\n};\n","import config from './config.js';\nconst api = window[config.namespace];\nexport default api;\n","import ns from '../api/utilities/namespace.js';\n\nexport const PlaceSelector = {\n TOP: ns.selector('placement--top'),\n RIGHT: ns.selector('placement--right'),\n BOTTOM: ns.selector('placement--bottom'),\n LEFT: ns.selector('placement--left')\n};\n","import ns from '../api/utilities/namespace.js';\n\nexport const AlignSelector = {\n START: ns.selector('placement--start'),\n CENTER: ns.selector('placement--center'),\n END: ns.selector('placement--end')\n};\n","export const PlacementPosition = {\n TOP: 'place_top',\n RIGHT: 'place_right',\n BOTTOM: 'place_bottom',\n LEFT: 'place_left'\n};\n","export const PlacementAlign = {\n START: 'align_start',\n CENTER: 'align_center',\n END: 'align_end'\n};\n","export const PlacementMode = {\n AUTO: 'placement_auto',\n MANUAL: 'placement_manual'\n};\n","import api from './script/api/api';\n\nimport { Instance } from './script/api/modules/register/instance.js';\nimport { KeyCodes } from './script/api/modules/register/key-codes.js';\nimport { Breakpoints } from './script/api/modules/register/breakpoints';\nimport { Disclosure } from './script/disclosure/disclosure.js';\nimport { DisclosureButton } from './script/disclosure/disclosure-button.js';\nimport { DisclosuresGroup } from './script/disclosure/disclosures-group.js';\nimport { DisclosureType } from './script/disclosure/disclosure-type.js';\nimport { DisclosureEvent } from './script/disclosure/disclosure-event.js';\nimport { DisclosureSelector } from './script/disclosure/disclosure-selector.js';\nimport { DisclosureEmission } from './script/disclosure/disclosure-emission.js';\nimport { CollapseButton } from './script/collapse/collapse-button.js';\nimport { Collapse } from './script/collapse/collapse.js';\nimport { CollapsesGroup } from './script/collapse/collapses-group.js';\nimport { CollapseSelector } from './script/collapse/collapse-selector.js';\nimport { Equisized } from './script/equisized/equisized.js';\nimport { EquisizedsGroup } from './script/equisized/equisizeds-group.js';\nimport { EquisizedEmission } from './script/equisized/equisized-emission.js';\nimport { Toggle } from './script/action/toggle/toggle';\nimport { RootSelector } from './script/api/modules/stage/root-selector.js';\nimport { RootEmission } from './script/api/modules/stage/root-emission.js';\nimport { InjectSvg } from './script/inject/inject-svg';\nimport { InjectSvgSelector } from './script/inject/inject-svg-selector';\nimport { Artwork } from './script/artwork/artwork';\nimport { ArtworkSelector } from './script/artwork/artwork-selector';\nimport { AssessSelector } from './script/assess/assess-selector';\nimport { AssessFile } from './script/assess/assess-file';\nimport { AssessDetail } from './script/assess/assess-detail';\nimport { AssessEmission } from './script/assess/assess-emission';\nimport { RatioSelector } from './script/ratio/ratio-selector.js';\nimport { Ratio } from './script/ratio/ratio.js';\nimport { Placement } from './script/placement/placement.js';\nimport { PlacementReferent } from './script/placement/placement-referent';\nimport { PlacementAlign } from './script/placement/placement-align';\nimport { PlacementPosition } from './script/placement/placement-position';\nimport { PlacementMode } from './script/placement/placement-mode';\n\napi.core = {\n Instance: Instance,\n Breakpoints: Breakpoints,\n KeyCodes: KeyCodes,\n Disclosure: Disclosure,\n DisclosureButton: DisclosureButton,\n DisclosuresGroup: DisclosuresGroup,\n DisclosureType: DisclosureType,\n DisclosureEvent: DisclosureEvent,\n DisclosureSelector: DisclosureSelector,\n DisclosureEmission: DisclosureEmission,\n Collapse: Collapse,\n CollapseButton: CollapseButton,\n CollapsesGroup: CollapsesGroup,\n CollapseSelector: CollapseSelector,\n RootSelector: RootSelector,\n RootEmission: RootEmission,\n Equisized: Equisized,\n EquisizedEmission: EquisizedEmission,\n Toggle: Toggle,\n EquisizedsGroup: EquisizedsGroup,\n InjectSvg: InjectSvg,\n InjectSvgSelector: InjectSvgSelector,\n Artwork: Artwork,\n ArtworkSelector: ArtworkSelector,\n AssessFile: AssessFile,\n AssessDetail: AssessDetail,\n AssessEmission: AssessEmission,\n AssessSelector: AssessSelector,\n Ratio: Ratio,\n RatioSelector: RatioSelector,\n Placement: Placement,\n PlacementReferent: PlacementReferent,\n PlacementAlign: PlacementAlign,\n PlacementPosition: PlacementPosition,\n PlacementMode: PlacementMode\n};\n\nexport default api;\n","import { Disclosure } from '../disclosure/disclosure.js';\nimport { CollapseSelector } from './collapse-selector.js';\nimport { DisclosureType } from '../disclosure/disclosure-type.js';\nimport { CollapseButton } from './collapse-button.js';\n\n/**\n * Tab coorespond au panel d'un élement Tabs (tab panel)\n * Tab étend disclosure qui ajoute/enleve le modifier --selected,\n * et ajoute/eleve l'attribut hidden, sur le panel\n */\nclass Collapse extends Disclosure {\n constructor () {\n super(DisclosureType.EXPAND, CollapseSelector.COLLAPSE, CollapseButton, 'CollapsesGroup');\n }\n\n static get instanceClassName () {\n return 'Collapse';\n }\n\n init () {\n super.init();\n this.listen('transitionend', this.transitionend.bind(this));\n }\n\n transitionend (e) {\n this.removeClass(CollapseSelector.COLLAPSING);\n if (!this.isDisclosed) {\n if (this.isLegacy) this.style.maxHeight = '';\n else this.style.removeProperty('--collapse-max-height');\n }\n }\n\n unbound () {\n if (this.isLegacy) this.style.maxHeight = 'none';\n else this.style.setProperty('--collapse-max-height', 'none');\n }\n\n disclose (withhold) {\n if (this.isDisclosed === true || !this.isEnabled) return false;\n this.unbound();\n this.request(() => {\n this.addClass(CollapseSelector.COLLAPSING);\n this.adjust();\n this.request(() => {\n super.disclose(withhold);\n });\n });\n }\n\n conceal (withhold, preventFocus) {\n if (this.isDisclosed === false) return false;\n this.request(() => {\n this.addClass(CollapseSelector.COLLAPSING);\n this.adjust();\n this.request(() => {\n super.conceal(withhold, preventFocus);\n });\n });\n }\n\n adjust () {\n this.setProperty('--collapser', 'none');\n const height = this.node.offsetHeight;\n this.setProperty('--collapse', -height + 'px');\n this.setProperty('--collapser', '');\n }\n\n reset () {\n if (!this.isPristine) this.isDisclosed = false;\n }\n\n _electPrimaries (candidates) {\n const primary = this.element.parent.instances.map(instance => instance.collapsePrimary).filter(button => button !== undefined && candidates.indexOf(button) > -1);\n if (primary.length === 1) return primary;\n candidates = super._electPrimaries(candidates);\n if (candidates.length === 1) return candidates;\n const before = candidates.filter(candidate => candidate.dy >= 0);\n if (before.length > 0) candidates = before;\n if (candidates.length === 1) return candidates;\n const min = Math.min(...candidates.map(candidate => candidate.dy));\n const mins = candidates.filter(candidate => candidate.dy === min);\n if (mins.length > 0) candidates = mins;\n if (candidates.length === 1) return candidates;\n candidates.sort((a, b) => Math.abs(b.dx) - Math.abs(a.dx));\n return candidates;\n }\n}\n\nexport { Collapse };\n","import { DisclosuresGroup } from '../disclosure/disclosures-group.js';\n\nclass CollapsesGroup extends DisclosuresGroup {\n constructor () {\n super('Collapse');\n }\n\n static get instanceClassName () {\n return 'CollapsesGroup';\n }\n\n get canUngroup () {\n return true;\n }\n}\n\nexport { CollapsesGroup };\n","export const RootSelector = {\n ROOT: ':root'\n};\n","import { Instance } from '../api/modules/register/instance.js';\nimport { EquisizedEmission } from './equisized-emission.js';\n\nclass Equisized extends Instance {\n static get instanceClassName () {\n return 'Equisized';\n }\n\n init () {\n this.ascend(EquisizedEmission.CHANGE);\n }\n\n measure () {\n if (this.isLegacy) this.style.width = 'auto';\n return this.getRect().width;\n }\n\n adjust (width) {\n if (this.isLegacy) this.style.width = `${width}px`;\n }\n\n dispose () {\n this.ascend(EquisizedEmission.CHANGE);\n }\n}\n\nexport { Equisized };\n","import { Instance } from '../../api/modules/register/instance.js';\nimport { completeAssign } from '../../api/utilities/property/complete-assign.js';\nimport { ToggleEvent } from './toggle-event.js';\n\nclass Toggle extends Instance {\n static get instanceClassName () {\n return 'Toggle';\n }\n\n init () {\n this.pressed = this.pressed === 'true';\n this.listenClick();\n }\n\n handleClick () {\n this.toggle();\n }\n\n toggle () {\n this.pressed = this.pressed !== 'true';\n }\n\n get pressed () {\n return this.getAttribute('aria-pressed');\n }\n\n set pressed (value) {\n this.setAttribute('aria-pressed', value ? 'true' : 'false');\n this.dispatch(ToggleEvent.TOGGLE, value);\n }\n\n get proxy () {\n const scope = this;\n const proxy = Object.assign(super.proxy, {\n toggle: scope.toggle.bind(scope)\n });\n\n const proxyAccessors = {\n get pressed () {\n return scope.pressed;\n },\n set pressed (value) {\n scope.pressed = value;\n }\n };\n\n return completeAssign(proxy, proxyAccessors);\n }\n}\n\nexport { Toggle };\n","import { Instance } from '../api/modules/register/instance.js';\nimport { EquisizedEmission } from './equisized-emission.js';\n\nclass EquisizedsGroup extends Instance {\n static get instanceClassName () {\n return 'EquisizedsGroup';\n }\n\n init () {\n this.isResizing = true;\n this.isLoading = true;\n this.addAscent(EquisizedEmission.CHANGE, this.resize.bind(this));\n }\n\n load () {\n this.resize();\n }\n\n resize () {\n const equisizeds = this.element.getDescendantInstances('Equisized');\n if (!this.isLegacy) this.style.setProperty('--equisized-width', 'auto');\n\n const width = Math.max(...equisizeds.map(equisized => equisized.measure()));\n if (this.isLegacy) equisizeds.forEach(equisized => equisized.adjust(width));\n else this.style.setProperty('--equisized-width', `${width}px`);\n }\n}\n\nexport { EquisizedsGroup };\n","import { Instance } from '../api/modules/register/instance.js';\nimport { setAttributes } from '../api/utilities/attribute';\n\nclass InjectSvg extends Instance {\n static get instanceClassName () {\n return 'InjectSvg';\n }\n\n init () {\n if (this.node) {\n this.img = this.node.querySelector('img');\n }\n\n if (!this.isLegacy) {\n this.replace();\n }\n }\n\n get proxy () {\n const scope = this;\n return Object.assign(super.proxy, {\n replace: scope.replace.bind(scope),\n restore: scope.restore.bind(scope)\n });\n }\n\n fetch () {\n if (this.img) {\n this.imgID = this.img.getAttribute('id');\n this.imgClass = this.img.getAttribute('class');\n this.imgURL = this.img.getAttribute('src');\n\n fetch(this.imgURL)\n .then(data => data.text())\n .then(response => {\n const parser = new DOMParser();\n const xmlDoc = parser.parseFromString(response, 'text/html');\n this.svg = xmlDoc.querySelector('svg');\n\n if (this.svg) {\n this.replace();\n }\n });\n }\n }\n\n replace () {\n if (!this.svg) {\n this.fetch();\n return;\n }\n\n if (this.imgID && typeof this.imgID !== 'undefined') {\n this.svg.setAttribute('id', this.imgID);\n }\n\n // gestion de la dépréciation\n let name = this.imgURL.match(/[ \\w-]+\\./)[0];\n if (name) {\n name = name.slice(0, -1);\n\n if (['dark', 'light', 'system'].includes(name)) {\n this.svg.innerHTML = this.svg.innerHTML.replaceAll('id=\"artwork-', `id=\"${name}-artwork-`);\n this.svg.innerHTML = this.svg.innerHTML.replaceAll('\"#artwork-', `\"#${name}-artwork-`);\n }\n }\n\n if (this.imgClass && typeof this.imgClass !== 'undefined') {\n this.svg.setAttribute('class', this.imgClass);\n }\n\n if (this.svg.hasAttribute('xmlns:a')) {\n this.svg.removeAttribute('xmlns:a');\n }\n\n this.node.setAttribute('data-fr-inject-svg', true);\n const svgAttributes = {\n 'aria-hidden': true,\n focusable: false\n };\n setAttributes(this.svg, svgAttributes);\n this.node.replaceChild(this.svg, this.img);\n }\n\n restore () {\n if (this.img && this.svg) {\n this.node.setAttribute('data-fr-inject-svg', false);\n this.node.replaceChild(this.img, this.svg);\n }\n }\n}\n\nexport { InjectSvg };\n","const setAttributes = (el, attrs) => {\n Object.keys(attrs).forEach(key => el.setAttribute(key, attrs[key]));\n};\n\nexport { setAttributes };\n","import { Instance } from '../api/modules/register/instance.js';\n\nclass Artwork extends Instance {\n static get instanceClassName () {\n return 'Artwork';\n }\n\n init () {\n if (this.isLegacy) {\n this.replace();\n }\n }\n\n get proxy () {\n const scope = this;\n return Object.assign(super.proxy, {\n replace: scope.replace.bind(scope)\n });\n }\n\n fetch () {\n this.xlink = this.node.getAttribute('href');\n const splitUrl = this.xlink.split('#');\n this.svgUrl = splitUrl[0];\n this.svgName = splitUrl[1];\n\n const xhr = new XMLHttpRequest();\n xhr.onload = () => {\n const parser = new DOMParser();\n const xmlDoc = parser.parseFromString(xhr.responseText, 'text/html');\n this.realSvgContent = xmlDoc.getElementById(this.svgName);\n\n if (this.realSvgContent) {\n this.realSvgContent.classList.add(this.node.classList);\n this.replace();\n }\n };\n xhr.open('GET', this.svgUrl);\n xhr.send();\n }\n\n replace () {\n if (!this.realSvgContent) {\n this.fetch();\n return;\n }\n\n this.node.parentNode.replaceChild(this.realSvgContent, this.node);\n }\n}\n\nexport { Artwork };\n","import ns from '../api/utilities/namespace.js';\nimport { Instance } from '../api/modules/register/instance.js';\nimport { AssessEmission } from './assess-emission';\nimport inspector from '../api/inspect/inspector.js';\n\nclass AssessFile extends Instance {\n static get instanceClassName () {\n return 'AssessFile';\n }\n\n init () {\n this.lang = this.getLang(this.node);\n this.href = this.getAttribute('href');\n this.hreflang = this.getAttribute('hreflang');\n this.file = {};\n this.gather();\n this.addAscent(AssessEmission.ADDED, this.update.bind(this));\n this.addDescent(AssessEmission.ADDED, this.update.bind(this));\n }\n\n getFileLength () {\n if (this.href === undefined) {\n this.length = -1;\n return;\n }\n\n fetch(this.href, { method: 'HEAD', mode: 'cors' }).then(response => {\n this.length = response.headers.get('content-length') || -1;\n if (this.length === -1) {\n inspector.warn('File size unknown: ' + this.href + '\\nUnable to get HTTP header: \"content-length\"');\n }\n this.gather();\n });\n }\n\n mutate (attributeNames) {\n if (attributeNames.indexOf('href') !== -1) {\n this.href = this.getAttribute('href');\n this.getFileLength();\n }\n\n if (attributeNames.indexOf('hreflang') !== -1) {\n this.hreflang = this.getAttribute('hreflang');\n this.gather();\n }\n }\n\n gather () {\n // TODO V2: implémenter async\n if (this.isLegacy) this.length = -1;\n\n if (!this.length) {\n this.getFileLength();\n return;\n }\n\n this.details = [];\n\n if (this.href) {\n const extension = this.parseExtension(this.href);\n if (extension) this.details.push(extension.toUpperCase());\n }\n\n if (this.length !== -1) {\n this.details.push(this.bytesToSize(this.length));\n }\n\n if (this.hreflang) {\n this.details.push(this.getLangDisplayName(this.hreflang));\n }\n\n this.update();\n }\n\n update () {\n if (!this.details) return;\n this.descend(AssessEmission.UPDATE, this.details);\n this.ascend(AssessEmission.UPDATE, this.details);\n }\n\n getLang (elem) {\n // todo: ajouter un listener global de changement de langue\n if (elem.lang) return elem.lang;\n if (document.documentElement === elem) return window.navigator.language;\n return this.getLang(elem.parentElement);\n }\n\n parseExtension (url) {\n const regexExtension = /\\.(\\w{1,9})(?:$|[?#])/;\n return url.match(regexExtension)[0].replace('.', '');\n }\n\n getLangDisplayName (locale) {\n if (this.isLegacy) return locale;\n const displayNames = new Intl.DisplayNames([this.lang], { type: 'language' });\n const name = displayNames.of(locale);\n return name.charAt(0).toUpperCase() + name.slice(1);\n }\n\n bytesToSize (bytes) {\n if (bytes === -1) return null;\n\n let sizeUnits = ['octets', 'ko', 'Mo', 'Go', 'To'];\n if (this.getAttribute(ns.attr('assess-file')) === 'bytes') {\n sizeUnits = ['bytes', 'KB', 'MB', 'GB', 'TB'];\n }\n\n const i = parseInt(Math.floor(Math.log(bytes) / Math.log(1000)), 10);\n if (i === 0) return `${bytes} ${sizeUnits[i]}`;\n\n const size = bytes / (1000 ** i);\n const roundedSize = Math.round((size + Number.EPSILON) * 100) / 100; // arrondi a 2 décimal\n const stringSize = String(roundedSize).replace('.', ',');\n\n return `${stringSize} ${sizeUnits[i]}`;\n }\n}\n\nexport { AssessFile };\n","import { Instance } from '../api/modules/register/instance.js';\nimport { AssessEmission } from './assess-emission';\n\nclass AssessDetail extends Instance {\n static get instanceClassName () {\n return 'AssessDetail';\n }\n\n init () {\n this.addDescent(AssessEmission.UPDATE, this.update.bind(this));\n this.ascend(AssessEmission.ADDED);\n }\n\n update (details) {\n this.node.innerHTML = details.join(' - ');\n }\n}\n\nexport { AssessDetail };\n","import { Instance } from '../api/modules/register/instance.js';\nimport api from '../../api.js';\n\nclass Ratio extends Instance {\n static get instanceClassName () {\n return 'Ratio';\n }\n\n init () {\n if (!api.internals.support.supportAspectRatio()) {\n this.ratio = 16 / 9;\n for (const className in this.classNames) {\n if (this.registration.selector.indexOf(this.classNames[className]) > 0) {\n const ratio = this.classNames[className].split('ratio-');\n if (ratio[1]) {\n this.ratio = ratio[1].split('x')[0] / ratio[1].split('x')[1];\n }\n }\n }\n this.isRendering = true;\n this.update();\n }\n }\n\n render () {\n const width = this.getRect().width;\n if (width !== this.currentWidth) this.update();\n }\n\n update () {\n this.currentWidth = this.getRect().width;\n this.style.height = this.currentWidth / this.ratio + 'px';\n }\n}\n\nexport { Ratio };\n","import { Instance } from '../api/modules/register/instance.js';\nimport { PlaceSelector } from './place-selector';\nimport { AlignSelector } from './align-selector';\nimport { completeAssign } from '../api/utilities/property/complete-assign.js';\nimport { PlacementPosition } from './placement-position';\nimport { PlacementAlign } from './placement-align';\nimport { PlacementMode } from './placement-mode';\n\nclass Placement extends Instance {\n constructor (mode = PlacementMode.AUTO, places = [PlacementPosition.BOTTOM, PlacementPosition.TOP, PlacementPosition.LEFT, PlacementPosition.RIGHT], aligns = [PlacementAlign.CENTER, PlacementAlign.START, PlacementAlign.END], safeAreaMargin = 16) {\n super();\n this._mode = mode;\n this._places = places;\n this._aligns = aligns;\n this._safeAreaMargin = safeAreaMargin;\n this._isShown = false;\n }\n\n static get instanceClassName () {\n return 'Placement';\n }\n\n init () {\n this.isResizing = true;\n }\n\n get proxy () {\n const scope = this;\n const proxy = Object.assign(super.proxy, {\n show: scope.show.bind(scope),\n hide: scope.hide.bind(scope)\n });\n\n const proxyAccessors = {\n get mode () {\n return scope.mode;\n },\n set mode (value) {\n scope.mode = value;\n },\n get place () {\n return scope.place;\n },\n set place (value) {\n scope.place = value;\n },\n get align () {\n return scope.align;\n },\n set align (value) {\n scope.align = value;\n },\n get isShown () {\n return scope.isShown;\n },\n set isShown (value) {\n scope.isShown = value;\n }\n };\n\n return completeAssign(proxy, proxyAccessors);\n }\n\n get mode () {\n return this._mode;\n }\n\n set mode (value) {\n this._mode = value;\n }\n\n get place () {\n return this._place;\n }\n\n set place (value) {\n if (this._place === value) return;\n switch (this._place) {\n case PlacementPosition.TOP:\n this.removeClass(PlaceSelector.TOP);\n break;\n\n case PlacementPosition.RIGHT:\n this.removeClass(PlaceSelector.RIGHT);\n break;\n\n case PlacementPosition.BOTTOM:\n this.removeClass(PlaceSelector.BOTTOM);\n break;\n\n case PlacementPosition.LEFT:\n this.removeClass(PlaceSelector.LEFT);\n break;\n }\n this._place = value;\n switch (this._place) {\n case PlacementPosition.TOP:\n this.addClass(PlaceSelector.TOP);\n break;\n\n case PlacementPosition.RIGHT:\n this.addClass(PlaceSelector.RIGHT);\n break;\n\n case PlacementPosition.BOTTOM:\n this.addClass(PlaceSelector.BOTTOM);\n break;\n\n case PlacementPosition.LEFT:\n this.addClass(PlaceSelector.LEFT);\n break;\n }\n }\n\n get align () {\n return this._align;\n }\n\n set align (value) {\n if (this._align === value) return;\n switch (this._align) {\n case PlacementAlign.START:\n this.removeClass(AlignSelector.START);\n break;\n\n case PlacementAlign.CENTER:\n this.removeClass(AlignSelector.CENTER);\n break;\n\n case PlacementAlign.END:\n this.removeClass(AlignSelector.END);\n break;\n }\n this._align = value;\n switch (this._align) {\n case PlacementAlign.START:\n this.addClass(AlignSelector.START);\n break;\n\n case PlacementAlign.CENTER:\n this.addClass(AlignSelector.CENTER);\n break;\n\n case PlacementAlign.END:\n this.addClass(AlignSelector.END);\n break;\n }\n }\n\n show () {\n this.isShown = true;\n }\n\n hide () {\n this.isShown = false;\n }\n\n get isShown () {\n return this._isShown;\n }\n\n set isShown (value) {\n if (this._isShown === value || !this.isEnabled) return;\n this.isRendering = value;\n this._isShown = value;\n }\n\n setReferent (referent) {\n this._referent = referent;\n }\n\n resize () {\n this.safeArea = {\n top: this._safeAreaMargin,\n right: window.innerWidth - this._safeAreaMargin,\n bottom: window.innerHeight - this._safeAreaMargin,\n left: this._safeAreaMargin,\n center: window.innerWidth * 0.5,\n middle: window.innerHeight * 0.5\n };\n }\n\n render () {\n if (!this._referent) return;\n this.rect = this.getRect();\n this.referentRect = this._referent.getRect();\n\n if (this.mode === PlacementMode.AUTO) {\n this.place = this.getPlace();\n switch (this.place) {\n case PlacementPosition.TOP:\n case PlacementPosition.BOTTOM:\n this.align = this.getHorizontalAlign();\n break;\n\n case PlacementPosition.LEFT:\n case PlacementPosition.RIGHT:\n this.align = this.getVerticalAlign();\n }\n }\n\n let x, y;\n\n switch (this.place) {\n case PlacementPosition.TOP:\n y = this.referentRect.top - this.rect.height;\n break;\n\n case PlacementPosition.RIGHT:\n x = this.referentRect.right;\n break;\n\n case PlacementPosition.BOTTOM:\n y = this.referentRect.bottom;\n break;\n\n case PlacementPosition.LEFT:\n x = this.referentRect.left - this.rect.width;\n break;\n }\n\n switch (this.place) {\n case PlacementPosition.TOP:\n case PlacementPosition.BOTTOM:\n switch (this.align) {\n case PlacementAlign.CENTER:\n x = this.referentRect.center - this.rect.width * 0.5;\n break;\n\n case PlacementAlign.START:\n x = this.referentRect.left;\n break;\n\n case PlacementAlign.END:\n x = this.referentRect.right - this.rect.width;\n break;\n }\n break;\n\n case PlacementPosition.RIGHT:\n case PlacementPosition.LEFT:\n switch (this.align) {\n case PlacementAlign.CENTER:\n y = this.referentRect.middle - this.rect.height * 0.5;\n break;\n\n case PlacementAlign.START:\n y = this.referentRect.top;\n break;\n\n case PlacementAlign.END:\n y = this.referentRect.bottom - this.rect.height;\n break;\n }\n break;\n }\n\n if (this._x !== x || this._y !== y) {\n this._x = (x + 0.5) | 0;\n this._y = (y + 0.5) | 0;\n this.node.style.transform = `translate(${this._x}px,${this._y}px)`;\n }\n }\n\n getPlace () {\n for (const place of this._places) {\n switch (place) {\n case PlacementPosition.TOP:\n if (this.referentRect.top - this.rect.height > this.safeArea.top) return PlacementPosition.TOP;\n break;\n\n case PlacementPosition.RIGHT:\n if (this.referentRect.right + this.rect.width < this.safeArea.right) return PlacementPosition.RIGHT;\n break;\n\n case PlacementPosition.BOTTOM:\n if (this.referentRect.bottom + this.rect.height < this.safeArea.bottom) return PlacementPosition.BOTTOM;\n break;\n\n case PlacementPosition.LEFT:\n if (this.referentRect.left - this.rect.width > this.safeArea.left) return PlacementPosition.LEFT;\n break;\n }\n }\n\n return this._places[0];\n }\n\n getHorizontalAlign () {\n for (const align of this._aligns) {\n switch (align) {\n case PlacementAlign.CENTER:\n if (this.referentRect.center - this.rect.width * 0.5 > this.safeArea.left && this.referentRect.center + this.rect.width * 0.5 < this.safeArea.right) return PlacementAlign.CENTER;\n break;\n\n case PlacementAlign.START:\n if (this.referentRect.left + this.rect.width < this.safeArea.right) return PlacementAlign.START;\n break;\n\n case PlacementAlign.END:\n if (this.referentRect.right - this.rect.width > this.safeArea.left) return PlacementAlign.END;\n break;\n }\n }\n\n return this._aligns[0];\n }\n\n getVerticalAlign () {\n for (const align of this._aligns) {\n switch (align) {\n case PlacementAlign.CENTER:\n if (this.referentRect.middle - this.rect.height * 0.5 > this.safeArea.top && this.referentRect.middle + this.rect.height * 0.5 < this.safeArea.bottom) return PlacementAlign.CENTER;\n break;\n\n case PlacementAlign.START:\n if (this.referentRect.top + this.rect.height < this.safeArea.bottom) return PlacementAlign.START;\n break;\n\n case PlacementAlign.END:\n if (this.referentRect.bottom - this.rect.height > this.safeArea.top) return PlacementAlign.END;\n break;\n }\n }\n\n return this._aligns[0];\n }\n\n dispose () {\n this._referent = null;\n super.dispose();\n }\n}\n\nexport { Placement };\n","import { Instance } from '../api/modules/register/instance.js';\n\nclass PlacementReferent extends Instance {\n constructor () {\n super();\n this._isShown = false;\n }\n\n static get instanceClassName () {\n return 'PlacementReferent';\n }\n\n init () {\n this.registration.creator.setReferent(this);\n this._placement = this.registration.creator;\n }\n\n get placement () {\n return this._placement;\n }\n\n get isShown () {\n return this._isShown;\n }\n\n set isShown (value) {\n if (this._isShown === value || !this.isEnabled) return;\n this._isShown = value;\n if (value) this.registration.creator.show();\n else this.registration.creator.hide();\n }\n\n show () {\n this.isShown = true;\n }\n\n hide () {\n this.isShown = false;\n }\n}\n\nexport { PlacementReferent };\n","import api from './index.js';\n\napi.internals.register(api.core.CollapseSelector.COLLAPSE, api.core.Collapse);\napi.internals.register(api.core.InjectSvgSelector.INJECT_SVG, api.core.InjectSvg);\napi.internals.register(api.core.RatioSelector.RATIO, api.core.Ratio);\napi.internals.register(api.core.AssessSelector.ASSESS_FILE, api.core.AssessFile);\napi.internals.register(api.core.AssessSelector.DETAIL, api.core.AssessDetail);\n\nexport default api;\n","export const SchemeValue = {\n SYSTEM: 'system',\n LIGHT: 'light',\n DARK: 'dark'\n};\n","import api from '../../api';\n\nexport const SchemeAttribute = {\n THEME: api.internals.ns.attr('theme'),\n SCHEME: api.internals.ns.attr('scheme'),\n TRANSITION: api.internals.ns.attr('transition')\n};\n","export const SchemeTheme = {\n LIGHT: 'light',\n DARK: 'dark'\n};\n","import api from '../../api';\n\nexport const SchemeEmission = {\n SCHEME: api.internals.ns.emission('scheme', 'scheme'),\n THEME: api.internals.ns.emission('scheme', 'theme'),\n ASK: api.internals.ns.emission('scheme', 'ask')\n};\n","import api from '../../api.js';\n\nconst SchemeEvent = {\n SCHEME: api.internals.ns.event('scheme'),\n THEME: api.internals.ns.event('theme')\n};\n\nexport { SchemeEvent };\n","import api from '../../api.js';\nimport { SchemeValue } from './scheme-value.js';\nimport { SchemeAttribute } from './scheme-attribute.js';\nimport { SchemeTheme } from './scheme-theme.js';\nimport { SchemeEmission } from './scheme-emission.js';\nimport { SchemeEvent } from './scheme-event.js';\n\nclass Scheme extends api.core.Instance {\n constructor () {\n super(false);\n }\n\n static get instanceClassName () {\n return 'Scheme';\n }\n\n init () {\n this.changing = this.change.bind(this);\n\n if (this.hasAttribute(SchemeAttribute.TRANSITION)) {\n this.removeAttribute(SchemeAttribute.TRANSITION);\n this.request(this.restoreTransition.bind(this));\n }\n\n const scheme = api.internals.support.supportLocalStorage() ? localStorage.getItem('scheme') : '';\n const schemeAttr = this.getAttribute(SchemeAttribute.SCHEME);\n\n switch (scheme) {\n case SchemeValue.DARK:\n case SchemeValue.LIGHT:\n case SchemeValue.SYSTEM:\n this.scheme = scheme;\n break;\n\n default:\n switch (schemeAttr) {\n case SchemeValue.DARK:\n this.scheme = SchemeValue.DARK;\n break;\n\n case SchemeValue.LIGHT:\n this.scheme = SchemeValue.LIGHT;\n break;\n\n default:\n this.scheme = SchemeValue.SYSTEM;\n }\n }\n\n this.addAscent(SchemeEmission.ASK, this.ask.bind(this));\n this.addAscent(SchemeEmission.SCHEME, this.apply.bind(this));\n }\n\n get proxy () {\n const scope = this;\n\n const proxyAccessors = {\n get scheme () {\n return scope.scheme;\n },\n set scheme (value) {\n scope.scheme = value;\n }\n };\n\n return api.internals.property.completeAssign(super.proxy, proxyAccessors);\n }\n\n restoreTransition () {\n this.setAttribute(SchemeAttribute.TRANSITION, '');\n }\n\n ask () {\n this.descend(SchemeEmission.SCHEME, this.scheme);\n }\n\n apply (value) {\n this.scheme = value;\n }\n\n get scheme () {\n return this._scheme;\n }\n\n set scheme (value) {\n if (this._scheme === value) return;\n this._scheme = value;\n switch (value) {\n case SchemeValue.SYSTEM:\n this.listenPreferences();\n break;\n\n case SchemeValue.DARK:\n this.unlistenPreferences();\n this.theme = SchemeTheme.DARK;\n break;\n\n case SchemeValue.LIGHT:\n this.unlistenPreferences();\n this.theme = SchemeTheme.LIGHT;\n break;\n\n default:\n this.scheme = SchemeValue.SYSTEM;\n return;\n }\n\n this.descend(SchemeEmission.SCHEME, value);\n if (api.internals.support.supportLocalStorage()) {\n localStorage.setItem('scheme', value);\n }\n this.setAttribute(SchemeAttribute.SCHEME, value);\n this.dispatch(SchemeEvent.SCHEME, { scheme: this._scheme });\n }\n\n get theme () {\n return this._theme;\n }\n\n set theme (value) {\n if (this._theme === value) return;\n switch (value) {\n case SchemeTheme.LIGHT:\n case SchemeTheme.DARK:\n this._theme = value;\n this.setAttribute(SchemeAttribute.THEME, value);\n this.descend(SchemeEmission.THEME, value);\n this.dispatch(SchemeEvent.THEME, { theme: this._theme });\n document.documentElement.style.colorScheme = value === SchemeTheme.DARK ? 'dark' : '';\n break;\n }\n }\n\n listenPreferences () {\n if (this.isListening) return;\n this.isListening = true;\n this.mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n if (this.mediaQuery.addEventListener) this.mediaQuery.addEventListener('change', this.changing);\n this.change();\n }\n\n unlistenPreferences () {\n if (!this.isListening) return;\n this.isListening = false;\n this.mediaQuery.removeEventListener('change', this.changing);\n this.mediaQuery = null;\n }\n\n change () {\n if (!this.isListening) return;\n this.theme = this.mediaQuery.matches ? SchemeTheme.DARK : SchemeTheme.LIGHT;\n }\n\n mutate (attributeNames) {\n if (attributeNames.indexOf(SchemeAttribute.SCHEME) > -1) this.scheme = this.getAttribute(SchemeAttribute.SCHEME);\n if (attributeNames.indexOf(SchemeAttribute.THEME) > -1) this.theme = this.getAttribute(SchemeAttribute.THEME);\n }\n\n dispose () {\n this.unlistenPreferences();\n }\n}\n\nexport { Scheme };\n","import api from '../../api.js';\n\nexport const SchemeSelector = {\n SCHEME: `:root${api.internals.ns.attr.selector('theme')}, :root${api.internals.ns.attr.selector('scheme')}`,\n SWITCH_THEME: api.internals.ns.selector('switch-theme'),\n RADIO_BUTTONS: `input[name=\"${api.internals.ns('radios-theme')}\"]`\n};\n","import api from './api.js';\nimport { Scheme } from './script/scheme/scheme.js';\nimport { SchemeValue } from './script/scheme/scheme-value.js';\nimport { SchemeSelector } from './script/scheme/scheme-selector.js';\nimport { SchemeEmission } from './script/scheme/scheme-emission.js';\nimport { SchemeTheme } from './script/scheme/scheme-theme.js';\nimport { SchemeEvent } from './script/scheme/scheme-event';\n\napi.scheme = {\n Scheme: Scheme,\n SchemeValue: SchemeValue,\n SchemeSelector: SchemeSelector,\n SchemeEmission: SchemeEmission,\n SchemeTheme: SchemeTheme,\n SchemeEvent: SchemeEvent\n};\n\nexport default api;\n","import api from './index.js';\n\napi.internals.register(api.scheme.SchemeSelector.SCHEME, api.scheme.Scheme);\n\nexport default api;\n","import api from '../../api.js';\n\nconst ACCORDION = api.internals.ns.selector('accordion');\nconst COLLAPSE = api.internals.ns.selector('collapse');\n\nexport const AccordionSelector = {\n GROUP: api.internals.ns.selector('accordions-group'),\n ACCORDION: ACCORDION,\n COLLAPSE: `${ACCORDION} > ${COLLAPSE}, ${ACCORDION} > *:not(${ACCORDION}):not(${COLLAPSE}) > ${COLLAPSE}, ${ACCORDION} > *:not(${ACCORDION}):not(${COLLAPSE}) > *:not(${ACCORDION}):not(${COLLAPSE}) > ${COLLAPSE}`,\n COLLAPSE_LEGACY: `${ACCORDION} ${COLLAPSE}`,\n BUTTON: `${ACCORDION}__btn`\n};\n","import api from '../../api.js';\nimport { AccordionSelector } from './accordion-selector';\n\nclass Accordion extends api.core.Instance {\n static get instanceClassName () {\n return 'Accordion';\n }\n\n get collapsePrimary () {\n const buttons = this.element.children.map(child => child.getInstance('CollapseButton')).filter(button => button !== null && button.hasClass(AccordionSelector.BUTTON));\n return buttons[0];\n }\n}\n\nexport { Accordion };\n","import api from '../../api.js';\nimport { AccordionSelector } from './accordion-selector.js';\n\nclass AccordionsGroup extends api.core.CollapsesGroup {\n static get instanceClassName () {\n return 'AccordionsGroup';\n }\n\n validate (member) {\n const match = member.node.matches(api.internals.legacy.isLegacy ? AccordionSelector.COLLAPSE_LEGACY : AccordionSelector.COLLAPSE);\n return super.validate(member) && match;\n }\n}\n\nexport { AccordionsGroup };\n","import api from './api.js';\nimport { Accordion } from './script/accordion/accordion';\nimport { AccordionsGroup } from './script/accordion/accordions-group.js';\nimport { AccordionSelector } from './script/accordion/accordion-selector.js';\n\napi.accordion = {\n Accordion: Accordion,\n AccordionSelector: AccordionSelector,\n AccordionsGroup: AccordionsGroup\n};\n\nexport default api;\n","import api from './index.js';\n\napi.internals.register(api.accordion.AccordionSelector.GROUP, api.accordion.AccordionsGroup);\napi.internals.register(api.accordion.AccordionSelector.ACCORDION, api.accordion.Accordion);\n\nexport default api;\n","import api from '../../api.js';\n\nexport const ButtonSelector = {\n EQUISIZED_BUTTON: `${api.internals.ns.selector('btns-group--equisized')} ${api.internals.ns.selector('btn')}`,\n EQUISIZED_GROUP: api.internals.ns.selector('btns-group--equisized')\n};\n","import api from './api.js';\nimport { ButtonSelector } from './script/button/button-selector';\n\napi.button = {\n ButtonSelector: ButtonSelector\n};\n\nexport default api;\n","import api from './index.js';\n\napi.internals.register(api.button.ButtonSelector.EQUISIZED_BUTTON, api.core.Equisized);\napi.internals.register(api.button.ButtonSelector.EQUISIZED_GROUP, api.core.EquisizedsGroup);\n\nexport default api;\n","import api from '../../api.js';\n\nclass CardDownload extends api.core.Instance {\n static get instanceClassName () {\n return 'CardDownload';\n }\n\n init () {\n this.addAscent(api.core.AssessEmission.UPDATE, details => {\n this.descend(api.core.AssessEmission.UPDATE, details);\n });\n this.addAscent(api.core.AssessEmission.ADDED, () => {\n this.descend(api.core.AssessEmission.ADDED);\n });\n }\n}\n\nexport { CardDownload };\n","import api from '../../api.js';\n\nexport const CardSelector = {\n DOWNLOAD: api.internals.ns.selector('card--download'),\n DOWNLOAD_DETAIL: `${api.internals.ns.selector('card--download')} ${api.internals.ns.selector('card__end')} ${api.internals.ns.selector('card__detail')}`\n};\n","import api from './api.js';\nimport { CardDownload } from './script/card/card-download.js';\nimport { CardSelector } from './script/card/card-selector.js';\n\napi.card = {\n CardSelector: CardSelector,\n CardDownload: CardDownload\n};\n\nexport default api;\n","import api from './index.js';\n\napi.internals.register(api.card.CardSelector.DOWNLOAD, api.card.CardDownload);\napi.internals.register(api.card.CardSelector.DOWNLOAD_DETAIL, api.core.AssessDetail);\n\nexport default api;\n","import api from '../../api.js';\n\nexport const SegmentedSelector = {\n SEGMENTED: api.internals.ns.selector('segmented'),\n SEGMENTED_ELEMENTS: api.internals.ns.selector('segmented__elements'),\n SEGMENTED_ELEMENT: api.internals.ns.selector('segmented__element input'),\n SEGMENTED_LEGEND: api.internals.ns.selector('segmented__legend')\n};\n","import api from '../../api.js';\n\nconst SegmentedEmission = {\n ADDED: api.internals.ns.emission('segmented', 'added'),\n REMOVED: api.internals.ns.emission('segmented', 'removed')\n};\n\nexport { SegmentedEmission };\n","import api from '../../api.js';\nimport { SegmentedSelector } from './segmented-selector.js';\nimport { SegmentedEmission } from './segmented-emission.js';\n\nclass Segmented extends api.core.Instance {\n static get instanceClassName () {\n return 'Segmented';\n }\n\n init () {\n this.elements = this.node.querySelector(SegmentedSelector.SEGMENTED_ELEMENTS);\n this.legend = this.node.querySelector(SegmentedSelector.SEGMENTED_LEGEND);\n this.addAscent(SegmentedEmission.ADDED, this.resize.bind(this));\n this.addAscent(SegmentedEmission.REMOVED, this.resize.bind(this));\n this._isLegendInline = this.legend && this.legend.classList.contains(`${api.prefix}-segmented__legend--inline`);\n this.isResizing = true;\n }\n\n resize () {\n const SEGMENTED_VERTICAL = `${api.prefix}-segmented--vertical`;\n const LEGEND_INLINE = `${api.prefix}-segmented__legend--inline`;\n const gapOffset = 16;\n\n this.removeClass(SEGMENTED_VERTICAL);\n\n if (this._isLegendInline) {\n this.legend.classList.add(LEGEND_INLINE);\n\n if (this.node.offsetWidth > this.node.parentNode.offsetWidth || (this.elements.scrollWidth + this.legend.offsetWidth + gapOffset) > this.node.parentNode.offsetWidth) {\n this.legend.classList.remove(LEGEND_INLINE);\n }\n }\n\n if (this.elements.offsetWidth > this.node.parentNode.offsetWidth || this.elements.scrollWidth > this.node.parentNode.offsetWidth) {\n this.addClass(SEGMENTED_VERTICAL);\n } else {\n this.removeClass(SEGMENTED_VERTICAL);\n }\n }\n}\n\nexport { Segmented };\n","import api from '../../api.js';\nimport { SegmentedEmission } from './segmented-emission.js';\n\nclass SegmentedElement extends api.core.Instance {\n static get instanceClassName () {\n return 'SegmentedElement';\n }\n\n init () {\n this.ascend(SegmentedEmission.ADDED);\n }\n\n dispose () {\n this.ascend(SegmentedEmission.REMOVED);\n }\n}\n\nexport { SegmentedElement };\n","import api from './api.js';\nimport { Segmented } from './script/segmented/segmented.js';\nimport { SegmentedElement } from './script/segmented/segmented-element.js';\nimport { SegmentedSelector } from './script/segmented/segmented-selector.js';\nimport { SegmentedEmission } from './script/segmented/segmented-emission.js';\n\napi.segmented = {\n SegmentedSelector: SegmentedSelector,\n SegmentedEmission: SegmentedEmission,\n SegmentedElement: SegmentedElement,\n Segmented: Segmented\n};\n\nexport default api;\n","import api from './index.js';\n\napi.internals.register(api.segmented.SegmentedSelector.SEGMENTED, api.segmented.Segmented);\napi.internals.register(api.segmented.SegmentedSelector.SEGMENTED_ELEMENT, api.segmented.SegmentedElement);\n\nexport default api;\n","import api from '../../api.js';\n\nexport const BreadcrumbSelector = {\n BREADCRUMB: api.internals.ns.selector('breadcrumb'),\n BUTTON: api.internals.ns.selector('breadcrumb__button')\n};\n","import api from '../../api.js';\nimport { BreadcrumbSelector } from './breadcrumb-selector.js';\n\nclass Breadcrumb extends api.core.Instance {\n constructor () {\n super();\n this.count = 0;\n this.focusing = this.focus.bind(this);\n }\n\n static get instanceClassName () {\n return 'Breadcrumb';\n }\n\n init () {\n this.getCollapse();\n this.isResizing = true;\n }\n\n get proxy () {\n const scope = this;\n return Object.assign(super.proxy, {\n focus: scope.focus.bind(scope),\n disclose: scope.collapse.disclose.bind(scope.collapse)\n });\n }\n\n getCollapse () {\n const collapse = this.collapse;\n if (collapse) {\n collapse.listen(api.core.DisclosureEvent.DISCLOSE, this.focusing);\n } else {\n this.addAscent(api.core.DisclosureEmission.ADDED, this.getCollapse.bind(this));\n }\n }\n\n resize () {\n const collapse = this.collapse;\n const links = this.links;\n if (!collapse || !links.length) return;\n\n if (this.isBreakpoint(api.core.Breakpoints.MD)) {\n if (collapse.buttonHasFocus) links[0].focus();\n } else {\n if (links.indexOf(document.activeElement) > -1) collapse.focus();\n }\n }\n\n get links () {\n return [...this.querySelectorAll('a[href]')];\n }\n\n get collapse () {\n return this.element.getDescendantInstances(api.core.Collapse.instanceClassName, null, true)[0];\n }\n\n focus () {\n this.count = 0;\n this._focus();\n }\n\n _focus () {\n const link = this.links[0];\n if (!link) return;\n link.focus();\n this.request(this.verify.bind(this));\n }\n\n verify () {\n this.count++;\n if (this.count > 100) return;\n const link = this.links[0];\n if (!link) return;\n if (document.activeElement !== link) this._focus();\n }\n\n get collapsePrimary () {\n const buttons = this.element.children.map(child => child.getInstance('CollapseButton')).filter(button => button !== null && button.hasClass(BreadcrumbSelector.BUTTON));\n return buttons[0];\n }\n}\n\nexport { Breadcrumb };\n","import api from './api.js';\nimport { Breadcrumb } from './script/breadcrumb/breadcrumb.js';\nimport { BreadcrumbSelector } from './script/breadcrumb/breadcrumb-selector.js';\n\napi.breadcrumb = {\n BreadcrumbSelector: BreadcrumbSelector,\n Breadcrumb: Breadcrumb\n};\n\nexport default api;\n","import api from './index.js';\n\napi.internals.register(api.breadcrumb.BreadcrumbSelector.BREADCRUMB, api.breadcrumb.Breadcrumb);\n\nexport default api;\n","import api from '../../api.js';\n\nexport const TooltipSelector = {\n TOOLTIP: api.internals.ns.selector('tooltip'),\n SHOWN: api.internals.ns.selector('tooltip--shown'),\n BUTTON: api.internals.ns.selector('btn--tooltip')\n};\n","import api from '../../api.js';\nimport { TooltipSelector } from './tooltip-selector';\n\nconst TooltipReferentState = {\n FOCUS: 1 << 0,\n HOVER: 1 << 1\n};\n\nclass TooltipReferent extends api.core.PlacementReferent {\n constructor () {\n super();\n this._state = 0;\n }\n\n static get instanceClassName () {\n return 'TooltipReferent';\n }\n\n init () {\n super.init();\n this.listen('focusin', this.focusIn.bind(this));\n this.listen('focusout', this.focusOut.bind(this));\n if (!this.matches(TooltipSelector.BUTTON)) {\n const mouseover = this.mouseover.bind(this);\n this.listen('mouseover', mouseover);\n this.placement.listen('mouseover', mouseover);\n const mouseout = this.mouseout.bind(this);\n this.listen('mouseout', mouseout);\n this.placement.listen('mouseout', mouseout);\n }\n this.addEmission(api.core.RootEmission.KEYDOWN, this._keydown.bind(this));\n this.listen('click', this._click.bind(this));\n this.addEmission(api.core.RootEmission.CLICK, this._clickOut.bind(this));\n }\n\n _click () {\n this.focus();\n }\n\n _clickOut (target) {\n if (!this.node.contains(target)) this.blur();\n }\n\n _keydown (keyCode) {\n switch (keyCode) {\n case api.core.KeyCodes.ESCAPE:\n this.blur();\n this.close();\n break;\n }\n }\n\n close () {\n this.state = 0;\n }\n\n get state () {\n return this._state;\n }\n\n set state (value) {\n if (this._state === value) return;\n this.isShown = value > 0;\n this._state = value;\n }\n\n focusIn () {\n this.state |= TooltipReferentState.FOCUS;\n }\n\n focusOut () {\n this.state &= ~TooltipReferentState.FOCUS;\n }\n\n mouseover () {\n this.state |= TooltipReferentState.HOVER;\n }\n\n mouseout () {\n this.state &= ~TooltipReferentState.HOVER;\n }\n}\n\nexport { TooltipReferent };\n","import ns from '../../../../core/script/api/utilities/namespace.js';\n\nconst TooltipEvent = {\n SHOW: ns.event('show'),\n HIDE: ns.event('hide')\n};\n\nexport { TooltipEvent };\n","import api from '../../api.js';\nimport { TooltipReferent } from './tooltip-referent';\nimport { TooltipSelector } from './tooltip-selector';\nimport { TooltipEvent } from './tooltip-event.js';\n\nconst TooltipState = {\n HIDDEN: 'hidden',\n SHOWN: 'shown',\n HIDING: 'hiding'\n};\n\nclass Tooltip extends api.core.Placement {\n constructor () {\n super(api.core.PlacementMode.AUTO, [api.core.PlacementPosition.TOP, api.core.PlacementPosition.BOTTOM], [api.core.PlacementAlign.CENTER, api.core.PlacementAlign.START, api.core.PlacementAlign.END]);\n this.modifier = '';\n this._state = TooltipState.HIDDEN;\n }\n\n static get instanceClassName () {\n return 'Tooltip';\n }\n\n init () {\n super.init();\n this.register(`[aria-describedby=\"${this.id}\"]`, TooltipReferent);\n this.listen('transitionend', this.transitionEnd.bind(this));\n }\n\n transitionEnd () {\n if (this._state === TooltipState.HIDING) {\n this._state = TooltipState.HIDDEN;\n this.isShown = false;\n }\n }\n\n get isShown () {\n return super.isShown;\n }\n\n set isShown (value) {\n if (!this.isEnabled) return;\n switch (true) {\n case value:\n this._state = TooltipState.SHOWN;\n this.addClass(TooltipSelector.SHOWN);\n this.dispatch(TooltipEvent.SHOW);\n super.isShown = true;\n break;\n\n case this.isShown && !value && this._state === TooltipState.SHOWN:\n this._state = TooltipState.HIDING;\n this.removeClass(TooltipSelector.SHOWN);\n break;\n\n case this.isShown && !value && this._state === TooltipState.HIDDEN:\n this.dispatch(TooltipEvent.HIDE);\n super.isShown = false;\n break;\n }\n }\n\n render () {\n super.render();\n let x = this.referentRect.center - this.rect.center;\n const limit = this.rect.width * 0.5 - 8;\n if (x < -limit) x = -limit;\n if (x > limit) x = limit;\n this.setProperty('--arrow-x', `${x.toFixed(2)}px`);\n }\n}\n\nexport { Tooltip };\n","import api from './api.js';\nimport { Tooltip } from './script/tooltip/tooltip.js';\nimport { TooltipSelector } from './script/tooltip/tooltip-selector.js';\nimport { TooltipEvent } from './script/tooltip/tooltip-event';\n\napi.tooltip = {\n Tooltip: Tooltip,\n TooltipSelector: TooltipSelector,\n TooltipEvent: TooltipEvent\n};\n\nexport default api;\n","import api from './index.js';\n\napi.internals.register(api.tooltip.TooltipSelector.TOOLTIP, api.tooltip.Tooltip);\n\nexport default api;\n","import api from '../../api.js';\n\nclass ToggleInput extends api.core.Instance {\n static get instanceClassName () {\n return 'ToggleInput';\n }\n\n get isChecked () {\n return this.node.checked;\n }\n}\n\nexport { ToggleInput };\n","import api from '../../api.js';\nimport { ToggleInput } from './toggle-input.js';\n\nclass ToggleStatusLabel extends api.core.Instance {\n static get instanceClassName () {\n return 'ToggleStatusLabel';\n }\n\n init () {\n this.register(`input[id=\"${this.getAttribute('for')}\"]`, ToggleInput);\n this.update();\n this.isSwappingFont = true;\n }\n\n get proxy () {\n const scope = this;\n return Object.assign(super.proxy, {\n update: scope.update.bind(scope)\n });\n }\n\n get input () {\n return this.getRegisteredInstances('ToggleInput')[0];\n }\n\n update () {\n this.node.style.removeProperty('--toggle-status-width');\n const checked = this.input.isChecked;\n\n const style = getComputedStyle(this.node, ':before');\n let maxWidth = parseFloat(style.width);\n this.input.node.checked = !checked;\n\n const style2 = getComputedStyle(this.node, ':before');\n const width = parseFloat(style2.width);\n if (width > maxWidth) maxWidth = width;\n this.input.node.checked = checked;\n\n this.node.style.setProperty('--toggle-status-width', (maxWidth / 16) + 'rem');\n }\n\n swapFont (families) {\n this.update();\n }\n}\n\nexport { ToggleStatusLabel };\n","import api from '../../api.js';\n\nexport const ToggleSelector = {\n STATUS_LABEL: `${api.internals.ns.selector('toggle__label')}${api.internals.ns.attr.selector('checked-label')}${api.internals.ns.attr.selector('unchecked-label')}`\n};\n","import api from './api.js';\nimport { ToggleStatusLabel } from './script/toggle/toggle-status-label.js';\nimport { ToggleSelector } from './script/toggle/toggle-selector.js';\n// import { ToggleInput } from './script/toggle/toggle-input.js';\n\napi.toggle = {\n ToggleStatusLabel: ToggleStatusLabel,\n ToggleSelector: ToggleSelector\n};\n\nexport default api;\n","import api from './index.js';\n\napi.internals.register(api.toggle.ToggleSelector.STATUS_LABEL, api.toggle.ToggleStatusLabel);\n\nexport default api;\n","import api from '../../api.js';\n\nconst ITEM = api.internals.ns.selector('sidemenu__item');\nconst COLLAPSE = api.internals.ns.selector('collapse');\n\nexport const SidemenuSelector = {\n LIST: api.internals.ns.selector('sidemenu__list'),\n COLLAPSE: `${ITEM} > ${COLLAPSE}, ${ITEM} > *:not(${ITEM}):not(${COLLAPSE}) > ${COLLAPSE}, ${ITEM} > *:not(${ITEM}):not(${COLLAPSE}) > *:not(${ITEM}):not(${COLLAPSE}) > ${COLLAPSE}`,\n COLLAPSE_LEGACY: `${ITEM} ${COLLAPSE}`,\n ITEM: api.internals.ns.selector('sidemenu__item'),\n BUTTON: api.internals.ns.selector('sidemenu__btn')\n};\n","import api from '../../api.js';\nimport { SidemenuSelector } from './sidemenu-selector.js';\n\nclass SidemenuList extends api.core.CollapsesGroup {\n static get instanceClassName () {\n return 'SidemenuList';\n }\n\n validate (member) {\n return super.validate(member) && member.node.matches(api.internals.legacy.isLegacy ? SidemenuSelector.COLLAPSE_LEGACY : SidemenuSelector.COLLAPSE);\n }\n}\n\nexport { SidemenuList };\n","import api from '../../api.js';\nimport { SidemenuSelector } from './sidemenu-selector.js';\n\nclass SidemenuItem extends api.core.Instance {\n static get instanceClassName () {\n return 'SidemenuItem';\n }\n\n get collapsePrimary () {\n const buttons = this.element.children.map(child => child.getInstance('CollapseButton')).filter(button => button !== null && button.hasClass(SidemenuSelector.BUTTON));\n return buttons[0];\n }\n}\n\nexport { SidemenuItem };\n","import api from './api.js';\nimport { SidemenuList } from './script/sidemenu/sidemenu-list.js';\nimport { SidemenuSelector } from './script/sidemenu/sidemenu-selector.js';\nimport { SidemenuItem } from './script/sidemenu/sidemenu-item';\n\napi.sidemenu = {\n SidemenuList: SidemenuList,\n SidemenuItem: SidemenuItem,\n SidemenuSelector: SidemenuSelector\n};\n\nexport default api;\n","import api from './index.js';\n\napi.internals.register(api.sidemenu.SidemenuSelector.LIST, api.sidemenu.SidemenuList);\napi.internals.register(api.sidemenu.SidemenuSelector.ITEM, api.sidemenu.SidemenuItem);\n\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","import api from '../../api.js';\n\nexport const PasswordEmission = {\n TOGGLE: api.internals.ns.emission('password', 'toggle'),\n ADJUST: api.internals.ns.emission('password', 'adjust')\n};\n","import api from '../../api.js';\nimport { PasswordEmission } from './password-emission.js';\n\nclass PasswordToggle extends api.core.Instance {\n static get instanceClassName () {\n return 'PasswordToggle';\n }\n\n init () {\n this.listenClick();\n this.ascend(PasswordEmission.ADJUST, this.width);\n this.isSwappingFont = true;\n this._isChecked = this.isChecked;\n }\n\n get width () {\n const style = getComputedStyle(this.node.parentNode);\n return parseInt(style.width);\n }\n\n get isChecked () {\n return this.node.checked;\n }\n\n set isChecked (value) {\n this._isChecked = value;\n this.ascend(PasswordEmission.TOGGLE, value);\n }\n\n handleClick () {\n this.isChecked = !this._isChecked;\n }\n\n swapFont (families) {\n this.ascend(PasswordEmission.ADJUST, this.width);\n }\n}\n\nexport { PasswordToggle };\n","import api from '../../api.js';\nimport { PasswordEmission } from './password-emission.js';\n\nclass Password extends api.core.Instance {\n static get instanceClassName () {\n return 'Password';\n }\n\n init () {\n this.addAscent(PasswordEmission.TOGGLE, this.toggle.bind(this));\n this.addAscent(PasswordEmission.ADJUST, this.adjust.bind(this));\n }\n\n toggle (value) {\n this.descend(PasswordEmission.TOGGLE, value);\n }\n\n adjust (value) {\n this.descend(PasswordEmission.ADJUST, value);\n }\n}\n\nexport { Password };\n","import api from '../../api.js';\n\nexport const PasswordSelector = {\n PASSWORD: api.internals.ns.selector('password'),\n INPUT: api.internals.ns.selector('password__input'),\n LABEL: api.internals.ns.selector('password__label'),\n TOOGLE: `${api.internals.ns.selector('password__checkbox')} input[type=\"checkbox\"]`\n};\n","import api from '../../api.js';\nimport { PasswordEmission } from './password-emission.js';\n\nclass PasswordInput extends api.core.Instance {\n static get instanceClassName () {\n return 'PasswordInput';\n }\n\n init () {\n this.addDescent(PasswordEmission.TOGGLE, this.toggle.bind(this));\n this._isRevealed = this.hasAttribute('type') === 'password';\n this.listen('keydown', this.capslock.bind(this)); // for capslock enabled\n this.listen('keyup', this.capslock.bind(this)); // for capslock desabled\n }\n\n toggle (value) {\n this.isRevealed = value;\n this.setAttribute('type', value ? 'text' : 'password');\n }\n\n get isRevealed () {\n return this._isRevealed;\n }\n\n capslock (event) {\n if (event && typeof event.getModifierState !== 'function') return;\n if (event.getModifierState('CapsLock')) {\n this.node.parentNode.setAttribute(api.internals.ns.attr('capslock'), '');\n } else {\n this.node.parentNode.removeAttribute(api.internals.ns.attr('capslock'));\n }\n }\n\n set isRevealed (value) {\n this._isRevealed = value;\n this.setAttribute('type', value ? 'text' : 'password');\n }\n}\n\nexport { PasswordInput };\n","import api from '../../api.js';\nimport { PasswordEmission } from './password-emission.js';\n\nclass PasswordLabel extends api.core.Instance {\n static get instanceClassName () {\n return 'PasswordLabel';\n }\n\n init () {\n this.addDescent(PasswordEmission.ADJUST, this.adjust.bind(this));\n }\n\n adjust (value) {\n const valueREM = Math.ceil(value / 16);\n this.node.style.paddingRight = valueREM + 'rem';\n }\n}\n\nexport { PasswordLabel };\n","import api from './api.js';\nimport { PasswordToggle } from './script/password/password-toggle.js';\nimport { Password } from './script/password/password.js';\nimport { PasswordSelector } from './script/password/password-selector.js';\nimport { PasswordInput } from './script/password/password-input.js';\nimport { PasswordLabel } from './script/password/password-label.js';\n\napi.password = {\n Password: Password,\n PasswordToggle: PasswordToggle,\n PasswordSelector: PasswordSelector,\n PasswordInput: PasswordInput,\n PasswordLabel: PasswordLabel\n};\n\nexport default api;\n","import api from './index.js';\n\napi.internals.register(api.password.PasswordSelector.INPUT, api.password.PasswordInput);\napi.internals.register(api.password.PasswordSelector.PASSWORD, api.password.Password);\napi.internals.register(api.password.PasswordSelector.TOOGLE, api.password.PasswordToggle);\napi.internals.register(api.password.PasswordSelector.LABEL, api.password.PasswordLabel);\n\nexport default api;\n","import api from '../../api.js';\n\nconst ITEM = api.internals.ns.selector('nav__item');\nconst COLLAPSE = api.internals.ns.selector('collapse');\n\nexport const NavigationSelector = {\n NAVIGATION: api.internals.ns.selector('nav'),\n COLLAPSE: `${ITEM} > ${COLLAPSE}, ${ITEM} > *:not(${ITEM}):not(${COLLAPSE}) > ${COLLAPSE}, ${ITEM} > *:not(${ITEM}):not(${COLLAPSE}) > *:not(${ITEM}):not(${COLLAPSE}) > ${COLLAPSE}`,\n COLLAPSE_LEGACY: `${ITEM} ${COLLAPSE}`,\n ITEM: ITEM,\n ITEM_RIGHT: `${ITEM}--align-right`,\n MENU: api.internals.ns.selector('menu'),\n BUTTON: api.internals.ns.selector('nav__btn'),\n TRANSLATE_BUTTON: api.internals.ns.selector('translate__btn')\n};\n","import api from '../../api.js';\nimport { NavigationSelector } from './navigation-selector.js';\n\nclass NavigationItem extends api.core.Instance {\n constructor () {\n super();\n this._isRightAligned = false;\n }\n\n static get instanceClassName () {\n return 'NavigationItem';\n }\n\n init () {\n this.addAscent(api.core.DisclosureEmission.ADDED, this.calculate.bind(this));\n this.addAscent(api.core.DisclosureEmission.REMOVED, this.calculate.bind(this));\n this.isResizing = true;\n this.calculate();\n }\n\n resize () {\n this.calculate();\n }\n\n calculate () {\n const collapse = this.element.getDescendantInstances(api.core.Collapse.instanceClassName, null, true)[0];\n if (collapse && this.isBreakpoint(api.core.Breakpoints.LG) && collapse.element.node.matches(NavigationSelector.MENU)) {\n const right = this.element.node.parentElement.getBoundingClientRect().right; // todo: ne fonctionne que si la nav fait 100% du container\n const width = collapse.element.node.getBoundingClientRect().width;\n const left = this.element.node.getBoundingClientRect().left;\n this.isRightAligned = left + width > right;\n } else this.isRightAligned = false;\n }\n\n get isRightAligned () {\n return this._isRightAligned;\n }\n\n set isRightAligned (value) {\n if (this._isRightAligned === value) return;\n this._isRightAligned = value;\n if (value) api.internals.dom.addClass(this.element.node, NavigationSelector.ITEM_RIGHT);\n else api.internals.dom.removeClass(this.element.node, NavigationSelector.ITEM_RIGHT);\n }\n\n get collapsePrimary () {\n const buttons = this.element.children.map(child => child.getInstance('CollapseButton')).filter(button => button !== null && (button.hasClass(NavigationSelector.BUTTON) || button.hasClass(NavigationSelector.TRANSLATE_BUTTON)));\n return buttons[0];\n }\n}\n\nexport { NavigationItem };\n","export const NavigationMousePosition = {\n NONE: -1,\n INSIDE: 0,\n OUTSIDE: 1\n};\n","import api from '../../api.js';\nimport { NavigationSelector } from './navigation-selector.js';\nimport { NavigationMousePosition } from './navigation-mouse-position.js';\n\nclass Navigation extends api.core.CollapsesGroup {\n static get instanceClassName () {\n return 'Navigation';\n }\n\n init () {\n super.init();\n this.clicked = false;\n this.out = false;\n this.addEmission(api.core.RootEmission.CLICK, this._handleRootClick.bind(this));\n this.listen('mousedown', this.handleMouseDown.bind(this));\n this.listenClick({ capture: true });\n this.isResizing = true;\n }\n\n validate (member) {\n return super.validate(member) && member.element.node.matches(api.internals.legacy.isLegacy ? NavigationSelector.COLLAPSE_LEGACY : NavigationSelector.COLLAPSE);\n }\n\n handleMouseDown (e) {\n if (!this.isBreakpoint(api.core.Breakpoints.LG) || this.index === -1 || !this.current) return;\n this.position = this.current.node.contains(e.target) ? NavigationMousePosition.INSIDE : NavigationMousePosition.OUTSIDE;\n this.requestPosition();\n }\n\n handleClick (e) {\n if (e.target.matches('a, button') && !e.target.matches('[aria-controls]') && !e.target.matches(api.core.DisclosureSelector.PREVENT_CONCEAL)) {\n this.index = -1;\n }\n }\n\n _handleRootClick (target) {\n if (!this.isBreakpoint(api.core.Breakpoints.LG)) return;\n if (!this.node.contains(target)) {\n this.out = true;\n this.requestPosition();\n }\n }\n\n requestPosition () {\n if (this.isRequesting) return;\n this.isRequesting = true;\n this.request(this.getPosition.bind(this));\n }\n\n getPosition () {\n if (this.out) {\n switch (this.position) {\n case NavigationMousePosition.OUTSIDE:\n this.index = -1;\n break;\n\n case NavigationMousePosition.INSIDE:\n if (this.current && !this.current.node.contains(document.activeElement)) this.current.focus();\n break;\n\n default:\n if (this.index > -1 && !this.current.hasFocus) this.index = -1;\n }\n }\n\n this.request(this.requested.bind(this));\n }\n\n requested () {\n this.position = NavigationMousePosition.NONE;\n this.out = false;\n this.isRequesting = false;\n }\n\n get index () { return super.index; }\n\n set index (value) {\n if (value === -1 && this.current && this.current.hasFocus) this.current.focus();\n super.index = value;\n }\n\n get canUngroup () {\n return !this.isBreakpoint(api.core.Breakpoints.LG);\n }\n\n resize () {\n this.update();\n }\n}\n\nexport { Navigation };\n","import api from './api.js';\nimport { NavigationItem } from './script/navigation/navigation-item.js';\nimport { Navigation } from './script/navigation/navigation.js';\nimport { NavigationSelector } from './script/navigation/navigation-selector.js';\nimport { NavigationMousePosition } from './script/navigation/navigation-mouse-position.js';\n\napi.navigation = {\n Navigation: Navigation,\n NavigationItem: NavigationItem,\n NavigationMousePosition: NavigationMousePosition,\n NavigationSelector: NavigationSelector\n};\n\nexport default api;\n","import api from './index.js';\n\napi.internals.register(api.navigation.NavigationSelector.NAVIGATION, api.navigation.Navigation);\napi.internals.register(api.navigation.NavigationSelector.ITEM, api.navigation.NavigationItem);\n\nexport default api;\n","import api from '../../api.js';\n\n/**\n * TabButton correspond au bouton cliquable qui change le panel\n * TabButton étend de DisclosureButton qui ajoute/enelve l'attribut aria-selected,\n * Et change l'attributte tabindex a 0 si le boutton est actif (value=true), -1 s'il n'est pas actif (value=false)\n */\nclass TabButton extends api.core.DisclosureButton {\n constructor () {\n super(api.core.DisclosureType.SELECT);\n }\n\n static get instanceClassName () {\n return 'TabButton';\n }\n\n handleClick (e) {\n super.handleClick(e);\n this.focus();\n }\n\n apply (value) {\n super.apply(value);\n if (this.isPrimary) {\n this.setAttribute('tabindex', value ? '0' : '-1');\n if (value) {\n if (this.list) this.list.focalize(this);\n }\n }\n }\n\n get list () {\n return this.element.getAscendantInstance('TabsList', 'TabsGroup');\n }\n}\n\nexport { TabButton };\n","import api from '../../api.js';\n\nexport const TabSelector = {\n TAB: api.internals.ns.selector('tabs__tab'),\n GROUP: api.internals.ns.selector('tabs'),\n PANEL: api.internals.ns.selector('tabs__panel'),\n LIST: api.internals.ns.selector('tabs__list'),\n SHADOW: api.internals.ns.selector('tabs__shadow'),\n SHADOW_LEFT: api.internals.ns.selector('tabs__shadow--left'),\n SHADOW_RIGHT: api.internals.ns.selector('tabs__shadow--right'),\n PANEL_START: api.internals.ns.selector('tabs__panel--direction-start'),\n PANEL_END: api.internals.ns.selector('tabs__panel--direction-end')\n};\n","export const TabPanelDirection = {\n START: 'direction-start',\n END: 'direction-end',\n NONE: 'none'\n};\n","import api from '../../api.js';\nimport { TabButton } from './tab-button.js';\nimport { TabSelector } from './tab-selector.js';\nimport { TabPanelDirection } from './tab-panel-direction.js';\n\n/**\n * Tab coorespond au panel d'un élement Tabs (tab panel)\n * Tab étend disclosure qui ajoute/enleve le modifier --selected,\n * et ajoute/eleve l'attribut hidden, sur le panel\n */\nclass TabPanel extends api.core.Disclosure {\n constructor () {\n super(api.core.DisclosureType.SELECT, TabSelector.PANEL, TabButton, 'TabsGroup');\n this._direction = TabPanelDirection.NONE;\n this._isPreventingTransition = false;\n }\n\n static get instanceClassName () {\n return 'TabPanel';\n }\n\n get direction () {\n return this._direction;\n }\n\n set direction (value) {\n if (value === this._direction) return;\n switch (this._direction) {\n case TabPanelDirection.START:\n this.removeClass(TabSelector.PANEL_START);\n break;\n\n case TabPanelDirection.END:\n this.removeClass(TabSelector.PANEL_END);\n break;\n\n case TabPanelDirection.NONE:\n break;\n\n default:\n return;\n }\n\n this._direction = value;\n\n switch (this._direction) {\n case TabPanelDirection.START:\n this.addClass(TabSelector.PANEL_START);\n break;\n\n case TabPanelDirection.END:\n this.addClass(TabSelector.PANEL_END);\n break;\n }\n }\n\n get isPreventingTransition () {\n return this._isPreventingTransition;\n }\n\n set isPreventingTransition (value) {\n if (this._isPreventingTransition === value) return;\n if (value) this.addClass(api.internals.motion.TransitionSelector.NONE);\n else this.removeClass(api.internals.motion.TransitionSelector.NONE);\n this._isPreventingTransition = value === true;\n }\n\n translate (direction, initial) {\n this.isPreventingTransition = initial;\n this.direction = direction;\n }\n\n reset () {\n if (this.group) this.group.retrieve(true);\n }\n\n _electPrimaries (candidates) {\n if (!this.group || !this.group.list) return [];\n return super._electPrimaries(candidates).filter(candidate => this.group.list.node.contains(candidate.node));\n }\n}\n\nexport { TabPanel };\n","export const TabKeys = {\n LEFT: 'tab_keys_left',\n RIGHT: 'tab_keys_right',\n HOME: 'tab_keys_home',\n END: 'tab_keys_end'\n};\n","import api from '../../api.js';\n\nexport const TabEmission = {\n PRESS_KEY: api.internals.ns.emission('tab', 'press_key'),\n LIST_HEIGHT: api.internals.ns.emission('tab', 'list_height')\n};\n","import api from '../../api.js';\nimport { TabPanelDirection } from './tab-panel-direction.js';\nimport { TabKeys } from './tab-keys';\nimport { TabEmission } from './tab-emission';\n\n/**\n* TabGroup est la classe étendue de DiscosuresGroup\n* Correspond à un objet Tabs avec plusieurs tab-button & Tab (panel)\n*/\nclass TabsGroup extends api.core.DisclosuresGroup {\n constructor () {\n super('TabPanel');\n }\n\n static get instanceClassName () {\n return 'TabsGroup';\n }\n\n init () {\n super.init();\n\n this.listen('transitionend', this.transitionend.bind(this));\n this.addAscent(TabEmission.PRESS_KEY, this.pressKey.bind(this));\n this.addAscent(TabEmission.LIST_HEIGHT, this.setListHeight.bind(this));\n this.isRendering = true;\n }\n\n getIndex (defaultIndex = 0) {\n super.getIndex(defaultIndex);\n }\n\n get list () {\n return this.element.getDescendantInstances('TabsList', 'TabsGroup', true)[0];\n }\n\n setListHeight (value) {\n this.listHeight = value;\n }\n\n transitionend (e) {\n this.isPreventingTransition = true;\n }\n\n get buttonHasFocus () {\n return this.members.some(member => member.buttonHasFocus);\n }\n\n pressKey (key) {\n switch (key) {\n case TabKeys.LEFT:\n this.pressLeft();\n break;\n\n case TabKeys.RIGHT:\n this.pressRight();\n break;\n\n case TabKeys.HOME:\n this.pressHome();\n break;\n\n case TabKeys.END:\n this.pressEnd();\n break;\n }\n }\n\n /**\n * Selectionne l'element suivant de la liste si on est sur un bouton\n * Si on est à la fin on retourne au début\n */\n pressRight () {\n if (this.buttonHasFocus) {\n if (this.index < this.length - 1) {\n this.index++;\n } else {\n this.index = 0;\n }\n\n this.focus();\n }\n };\n\n /**\n * Selectionne l'element précédent de la liste si on est sur un bouton\n * Si on est au debut retourne a la fin\n */\n pressLeft () {\n if (this.buttonHasFocus) {\n if (this.index > 0) {\n this.index--;\n } else {\n this.index = this.length - 1;\n }\n\n this.focus();\n }\n };\n\n /**\n * Selectionne le permier element de la liste si on est sur un bouton\n */\n pressHome () {\n if (this.buttonHasFocus) {\n this.index = 0;\n this.focus();\n }\n };\n\n /**\n * Selectionne le dernier element de la liste si on est sur un bouton\n */\n pressEnd () {\n if (this.buttonHasFocus) {\n this.index = this.length - 1;\n this.focus();\n }\n };\n\n focus () {\n if (this.current) {\n this.current.focus();\n }\n }\n\n apply () {\n for (let i = 0; i < this._index; i++) this.members[i].translate(TabPanelDirection.START);\n if (this.current) this.current.translate(TabPanelDirection.NONE);\n for (let i = this._index + 1; i < this.length; i++) this.members[i].translate(TabPanelDirection.END);\n this.isPreventingTransition = false;\n }\n\n get isPreventingTransition () {\n return this._isPreventingTransition;\n }\n\n set isPreventingTransition (value) {\n if (this._isPreventingTransition === value) return;\n if (value) this.addClass(api.internals.motion.TransitionSelector.NONE);\n else this.removeClass(api.internals.motion.TransitionSelector.NONE);\n this._isPreventingTransition = value === true;\n }\n\n render () {\n if (this.current === null) return;\n this.node.scrollTop = 0;\n this.node.scrollLeft = 0;\n const paneHeight = Math.round(this.current.node.offsetHeight);\n if (this.panelHeight === paneHeight) return;\n this.panelHeight = paneHeight;\n this.style.setProperty('--tabs-height', (this.panelHeight + this.listHeight) + 'px');\n }\n}\n\nexport { TabsGroup };\n","import api from '../../api.js';\nimport { TabSelector } from './tab-selector';\nimport { TabKeys } from './tab-keys';\nimport { TabEmission } from './tab-emission';\n\nconst FOCALIZE_OFFSET = 16;\nconst SCROLL_OFFSET = 16; // valeur en px du scroll avant laquelle le shadow s'active ou se desactive\n\nclass TabsList extends api.core.Instance {\n static get instanceClassName () {\n return 'TabsList';\n }\n\n init () {\n this.listen('scroll', this.scroll.bind(this));\n this.listenKey(api.core.KeyCodes.RIGHT, this.ascend.bind(this, TabEmission.PRESS_KEY, TabKeys.RIGHT), true, true);\n this.listenKey(api.core.KeyCodes.LEFT, this.ascend.bind(this, TabEmission.PRESS_KEY, TabKeys.LEFT), true, true);\n this.listenKey(api.core.KeyCodes.HOME, this.ascend.bind(this, TabEmission.PRESS_KEY, TabKeys.HOME), true, true);\n this.listenKey(api.core.KeyCodes.END, this.ascend.bind(this, TabEmission.PRESS_KEY, TabKeys.END), true, true);\n this.isResizing = true;\n }\n\n focalize (btn) {\n const btnRect = btn.getRect();\n const listRect = this.getRect();\n const actualScroll = this.node.scrollLeft;\n if (btnRect.left < listRect.left) this.node.scrollTo(actualScroll - listRect.left + btnRect.left - FOCALIZE_OFFSET, 0);\n else if (btnRect.right > listRect.right) this.node.scrollTo(actualScroll - listRect.right + btnRect.right + FOCALIZE_OFFSET, 0);\n }\n\n get isScrolling () {\n return this._isScrolling;\n }\n\n set isScrolling (value) {\n if (this._isScrolling === value) return;\n this._isScrolling = value;\n this.apply();\n }\n\n apply () {\n if (this._isScrolling) {\n this.addClass(TabSelector.SHADOW);\n this.scroll();\n } else {\n this.removeClass(TabSelector.SHADOW_RIGHT);\n this.removeClass(TabSelector.SHADOW_LEFT);\n this.removeClass(TabSelector.SHADOW);\n }\n }\n\n /* ajoute la classe fr-table__shadow-left ou fr-table__shadow-right sur fr-table en fonction d'une valeur de scroll et du sens (right, left) */\n scroll () {\n const scrollLeft = this.node.scrollLeft;\n const isMin = scrollLeft <= SCROLL_OFFSET;\n const max = this.node.scrollWidth - this.node.clientWidth - SCROLL_OFFSET;\n\n const isMax = Math.abs(scrollLeft) >= max;\n const isRtl = document.documentElement.getAttribute('dir') === 'rtl';\n const minSelector = isRtl ? TabSelector.SHADOW_RIGHT : TabSelector.SHADOW_LEFT;\n const maxSelector = isRtl ? TabSelector.SHADOW_LEFT : TabSelector.SHADOW_RIGHT;\n\n if (isMin) {\n this.removeClass(minSelector);\n } else {\n this.addClass(minSelector);\n }\n\n if (isMax) {\n this.removeClass(maxSelector);\n } else {\n this.addClass(maxSelector);\n }\n }\n\n resize () {\n this.isScrolling = this.node.scrollWidth > this.node.clientWidth + SCROLL_OFFSET;\n const height = this.getRect().height;\n this.setProperty('--tabs-list-height', `${height}px`);\n this.ascend(TabEmission.LIST_HEIGHT, height);\n }\n\n dispose () {\n this.isScrolling = false;\n }\n}\n\nexport { TabsList };\n","import api from './api.js';\nimport { TabPanel } from './script/tab/tab-panel.js';\nimport { TabButton } from './script/tab/tab-button.js';\nimport { TabsGroup } from './script/tab/tabs-group.js';\nimport { TabsList } from './script/tab/tabs-list.js';\nimport { TabSelector } from './script/tab/tab-selector.js';\nimport { TabEmission } from './script/tab/tab-emission.js';\n\napi.tab = {\n TabPanel: TabPanel,\n TabButton: TabButton,\n TabsGroup: TabsGroup,\n TabsList: TabsList,\n TabSelector: TabSelector,\n TabEmission: TabEmission\n};\n\nexport default api;\n","import api from './index.js';\n\napi.internals.register(api.tab.TabSelector.PANEL, api.tab.TabPanel);\napi.internals.register(api.tab.TabSelector.GROUP, api.tab.TabsGroup);\napi.internals.register(api.tab.TabSelector.LIST, api.tab.TabsList);\n\nexport default api;\n","import api from '../../api.js';\n\nexport const TableEmission = {\n SCROLLABLE: api.internals.ns.emission('table', 'scrollable'),\n CHANGE: api.internals.ns.emission('table', 'change'),\n CAPTION_HEIGHT: api.internals.ns.emission('table', 'captionheight')\n};\n","import api from '../../api.js';\nimport { TableEmission } from './table-emission.js';\n\nconst PADDING = '1rem'; // padding de 4v sur le caption\n\nclass Table extends api.core.Instance {\n static get instanceClassName () {\n return 'Table';\n }\n\n init () {\n this.addAscent(TableEmission.CAPTION_HEIGHT, this.setCaptionHeight.bind(this));\n }\n\n setCaptionHeight (value) {\n this.setProperty('--table-offset', `calc(${value}px + ${PADDING})`);\n }\n}\n\nexport { Table };\n","import api from '../../api.js';\n\nexport const TableSelector = {\n TABLE: api.internals.ns.selector('table'),\n SHADOW: api.internals.ns.selector('table__shadow'),\n SHADOW_LEFT: api.internals.ns.selector('table__shadow--left'),\n SHADOW_RIGHT: api.internals.ns.selector('table__shadow--right'),\n ELEMENT: `${api.internals.ns.selector('table')}:not(${api.internals.ns.selector('table--no-scroll')}) table`,\n CAPTION: `${api.internals.ns.selector('table')} table caption`\n};\n","import api from '../../api.js';\nimport { TableSelector } from './table-selector.js';\n\nconst SCROLL_OFFSET = 8; // valeur en px du scroll avant laquelle le shadow s'active ou se desactive\n\nclass TableElement extends api.core.Instance {\n static get instanceClassName () {\n return 'TableElement';\n }\n\n init () {\n this.listen('scroll', this.scroll.bind(this));\n this.content = this.querySelector('tbody');\n this.isResizing = true;\n }\n\n get isScrolling () {\n return this._isScrolling;\n }\n\n set isScrolling (value) {\n if (this._isScrolling === value) return;\n this._isScrolling = value;\n\n if (value) {\n this.addClass(TableSelector.SHADOW);\n this.scroll();\n } else {\n this.removeClass(TableSelector.SHADOW);\n this.removeClass(TableSelector.SHADOW_LEFT);\n this.removeClass(TableSelector.SHADOW_RIGHT);\n }\n }\n\n /* ajoute la classe fr-table__shadow-left ou fr-table__shadow-right sur fr-table en fonction d'une valeur de scroll et du sens (right, left) */\n scroll () {\n const isMin = this.node.scrollLeft <= SCROLL_OFFSET;\n const max = this.content.offsetWidth - this.node.offsetWidth - SCROLL_OFFSET;\n const isMax = Math.abs(this.node.scrollLeft) >= max;\n const isRtl = document.documentElement.getAttribute('dir') === 'rtl';\n const minSelector = isRtl ? TableSelector.SHADOW_RIGHT : TableSelector.SHADOW_LEFT;\n const maxSelector = isRtl ? TableSelector.SHADOW_LEFT : TableSelector.SHADOW_RIGHT;\n\n if (isMin) {\n this.removeClass(minSelector);\n } else {\n this.addClass(minSelector);\n }\n\n if (isMax) {\n this.removeClass(maxSelector);\n } else {\n this.addClass(maxSelector);\n }\n }\n\n resize () {\n this.isScrolling = this.content.offsetWidth > this.node.offsetWidth;\n }\n\n dispose () {\n this.isScrolling = false;\n }\n}\n\nexport { TableElement };\n","import api from '../../api.js';\nimport { TableEmission } from './table-emission.js';\n\nclass TableCaption extends api.core.Instance {\n static get instanceClassName () {\n return 'TableCaption';\n }\n\n init () {\n this.height = 0;\n this.isResizing = true;\n }\n\n resize () {\n const height = this.getRect().height;\n if (this.height === height) return;\n this.height = height;\n this.ascend(TableEmission.CAPTION_HEIGHT, height);\n }\n}\n\nexport { TableCaption };\n","import api from './api.js';\nimport { Table } from './script/table/table.js';\nimport { TableElement } from './script/table/table-element.js';\nimport { TableSelector } from './script/table/table-selector.js';\nimport { TableCaption } from './script/table/table-caption.js';\n\napi.table = {\n Table: Table,\n TableElement: TableElement,\n TableCaption: TableCaption,\n TableSelector: TableSelector\n};\n\nexport default api;\n","import api from './index.js';\n\napi.internals.register(api.table.TableSelector.TABLE, api.table.Table);\napi.internals.register(api.table.TableSelector.ELEMENT, api.table.TableElement);\napi.internals.register(api.table.TableSelector.CAPTION, api.table.TableCaption);\n\nexport default api;\n","import api from '../../api.js';\n\nconst TagEvent = {\n DISMISS: api.internals.ns.event('dismiss')\n};\n\nexport { TagEvent };\n","import api from '../../api.js';\nimport { TagEvent } from './tag-event';\n\nclass TagDismissible extends api.core.Instance {\n static get instanceClassName () {\n return 'TagDismissible';\n }\n\n init () {\n this.listenClick();\n }\n\n handleClick () {\n this.focusClosest();\n\n switch (api.mode) {\n case api.Modes.ANGULAR:\n case api.Modes.REACT:\n case api.Modes.VUE:\n this.request(this.verify.bind(this));\n break;\n\n default:\n this.remove();\n }\n\n this.dispatch(TagEvent.DISMISS);\n }\n\n verify () {\n if (document.body.contains(this.node)) this.warn(`a TagDismissible has just been dismissed and should be removed from the dom. In ${api.mode} mode, the api doesn't handle dom modification. An event ${TagEvent.DISMISS} is dispatched by the element to trigger the removal`);\n }\n}\n\nexport { TagDismissible };\n","import api from '../../api.js';\n\nexport const TagSelector = {\n PRESSABLE: `${api.internals.ns.selector('tag')}[aria-pressed]`,\n DISMISSIBLE: `${api.internals.ns.selector('tag--dismiss')}`\n};\n","import api from './api.js';\nimport { TagDismissible } from './script/tag/tag-dismissible';\nimport { TagSelector } from './script/tag/tag-selector';\nimport { TagEvent } from './script/tag/tag-event';\n\napi.tag = {\n TagDismissible: TagDismissible,\n TagSelector: TagSelector,\n TagEvent: TagEvent\n};\n\nexport default api;\n","import api from './index.js';\n\napi.internals.register(api.tag.TagSelector.PRESSABLE, api.core.Toggle);\napi.internals.register(api.tag.TagSelector.DISMISSIBLE, api.tag.TagDismissible);\n\nexport default api;\n","import api from '../../api.js';\n\nconst TRANSCRIPTION = api.internals.ns.selector('transcription');\n\nexport const TranscriptionSelector = {\n TRANSCRIPTION: TRANSCRIPTION,\n BUTTON: `${TRANSCRIPTION}__btn`\n};\n","import api from '../../api.js';\nimport { TranscriptionSelector } from './transcription-selector';\n\nclass Transcription extends api.core.Instance {\n static get instanceClassName () {\n return 'Transcription';\n }\n\n get collapsePrimary () {\n const buttons = this.element.children.map(child => child.getInstance('CollapseButton')).filter(button => button !== null && button.hasClass(TranscriptionSelector.BUTTON));\n return buttons[0];\n }\n}\n\nexport { Transcription };\n","import api from './api.js';\nimport { Transcription } from './script/accordion/transcription';\nimport { TranscriptionSelector } from './script/accordion/transcription-selector.js';\n\napi.transcription = {\n Transcription: Transcription,\n TranscriptionSelector: TranscriptionSelector\n};\n\nexport default api;\n","import api from './index.js';\n\napi.internals.register(api.transcription.TranscriptionSelector.TRANSCRIPTION, api.transcription.Transcription);\n\nexport default api;\n","import api from '../../api.js';\n\nclass TileDownload extends api.core.Instance {\n static get instanceClassName () {\n return 'TileDownload';\n }\n\n init () {\n this.addAscent(api.core.AssessEmission.UPDATE, details => {\n this.descend(api.core.AssessEmission.UPDATE, details);\n });\n this.addAscent(api.core.AssessEmission.ADDED, () => {\n this.descend(api.core.AssessEmission.ADDED);\n });\n }\n}\n\nexport { TileDownload };\n","import api from '../../api.js';\n\nexport const TileSelector = {\n DOWNLOAD: api.internals.ns.selector('tile--download'),\n DOWNLOAD_DETAIL: `${api.internals.ns.selector('tile--download')} ${api.internals.ns.selector('tile__detail')}`\n};\n","import api from './api.js';\nimport { TileDownload } from './script/tile/tile-download.js';\nimport { TileSelector } from './script/tile/tile-selector.js';\n\napi.tile = {\n TileSelector: TileSelector,\n TileDownload: TileDownload\n};\n\nexport default api;\n","import api from './index.js';\n\napi.internals.register(api.tile.TileSelector.DOWNLOAD, api.tile.TileDownload);\napi.internals.register(api.tile.TileSelector.DOWNLOAD_DETAIL, api.core.AssessDetail);\n\nexport default api;\n","import api from '../../api.js';\n\nexport const RangeSelector = {\n RANGE: api.internals.ns.selector('range'),\n RANGE_SM: api.internals.ns.selector('range--sm'),\n RANGE_STEP: api.internals.ns.selector('range--step'),\n RANGE_DOUBLE: api.internals.ns.selector('range--double'),\n RANGE_DOUBLE_STEP: api.internals.ns.selector('range--double') + api.internals.ns.selector('range--step'),\n RANGE_INPUT: api.internals.ns.selector('range input[type=range]:nth-of-type(1)'),\n RANGE_INPUT2: `${api.internals.ns.selector('range--double')} input[type=range]:nth-of-type(2)`,\n RANGE_OUTPUT: api.internals.ns.selector('range__output'),\n RANGE_MIN: api.internals.ns.selector('range__min'),\n RANGE_MAX: api.internals.ns.selector('range__max'),\n RANGE_PREFIX: api.internals.ns.attr('prefix'),\n RANGE_SUFFIX: api.internals.ns.attr('suffix')\n};\n","import api from '../../api.js';\n\nexport const RangeEmission = {\n VALUE: api.internals.ns.emission('range', 'value'),\n VALUE2: api.internals.ns.emission('range', 'value2'),\n OUTPUT: api.internals.ns.emission('range', 'output'),\n CONSTRAINTS: api.internals.ns.emission('range', 'constraints'),\n MIN: api.internals.ns.emission('range', 'min'),\n MAX: api.internals.ns.emission('range', 'max'),\n STEP: api.internals.ns.emission('range', 'step'),\n PREFIX: api.internals.ns.emission('range', 'prefix'),\n SUFFIX: api.internals.ns.emission('range', 'suffix'),\n DISABLED: api.internals.ns.emission('range', 'disabled'),\n ENABLE_POINTER: api.internals.ns.emission('range', 'enable_pointer')\n};\n","class RangeModel {\n constructor () {\n this._width = 0;\n this._min = 0;\n this._max = 0;\n this._value = 0;\n this._thumbSize = 24;\n this._innerWidth = 0;\n this._prefix = '';\n this._suffix = '';\n this._background = {};\n }\n\n configure (model) {\n if (!model) return;\n this._prefix = model._prefix;\n this._suffix = model._suffix;\n this._width = model.width;\n this.setConstraints(model._constraints);\n this.value = model.value;\n this.update();\n }\n\n setPrefix (value) {\n this._prefix = value !== null ? value : '';\n }\n\n setSuffix (value) {\n this._suffix = value !== null ? value : '';\n }\n\n _decorate (value) {\n return `${this._prefix}${value}${this._suffix}`;\n }\n\n get width () {\n return this._width;\n }\n\n set width (value) {\n this._width = value;\n }\n\n get isSm () {\n return this._isSm;\n }\n\n set isSm (value) {\n if (this._isSm === value) return;\n this._isSm = value;\n this.setThumbSize(value ? 16 : 24);\n this.update();\n }\n\n setThumbSize (value, mult = 1) {\n this._thumbSize = value;\n this._innerPadding = value * mult;\n }\n\n get textValue () {\n return this._decorate(this._value);\n }\n\n get value () {\n return this._value;\n }\n\n set value (value) {\n this._value = value;\n }\n\n get outputX () {\n return this._outputX;\n }\n\n setConstraints (constraints) {\n this._constraints = constraints;\n this._min = constraints.min;\n this._max = constraints.max;\n this._step = constraints.step;\n this._rangeWidth = constraints.rangeWidth;\n }\n\n get min () {\n return this._min;\n }\n\n get textMin () {\n return this._decorate(this._min);\n }\n\n get max () {\n return this._max;\n }\n\n get textMax () {\n return this._decorate(this._max);\n }\n\n get step () {\n return this._step;\n }\n\n get output () {\n return {\n text: this.textValue,\n transform: `translateX(${this._translateX}px) translateX(-${this._centerPercent}%)`\n };\n }\n\n _getRatio (value) {\n return (value - this._min) / this._rangeWidth;\n }\n\n get progress () {\n return this._progress;\n }\n\n update () {\n this._update();\n }\n\n _update () {\n this._innerWidth = this._width - this._innerPadding;\n const ratio = this._getRatio(this._value);\n this._translateX = ratio * this._width;\n this._centerPercent = ratio * 100;\n this._progress = {\n right: `${(this._innerWidth * ratio + this._innerPadding * 0.5).toFixed(2)}px`\n };\n }\n}\n\nclass RangeModelStep extends RangeModel {\n get stepWidth () {\n return `${this._stepWidth.toFixed(3)}px`;\n }\n\n _update () {\n super._update();\n const steps = this._rangeWidth / this._step;\n this._stepWidth = this._innerWidth / steps;\n while (this._stepWidth < 4) this._stepWidth *= 2;\n }\n}\n\nclass RangeModelDouble extends RangeModel {\n get value2 () {\n return this._value;\n }\n\n set value2 (value) {\n if (this._value2 === value) return;\n this._value2 = value;\n this.update();\n }\n\n get textValue () {\n return `${this._decorate(this._value)} - ${this._decorate(this._value2)}`;\n }\n\n setThumbSize (value) {\n super.setThumbSize(value, 2);\n }\n\n _update () {\n super._update();\n const ratio = this._getRatio((this._value + this._value2) * 0.5);\n this._translateX = ratio * this._width;\n this._centerPercent = ratio * 100;\n const ratio1 = this._getRatio(this._value);\n const ratio2 = this._getRatio(this._value2);\n this._progress = {\n left: `${(this._innerWidth * ratio1 + this._innerPadding * 0.25).toFixed(2)}px`,\n right: `${(this._innerWidth * ratio2 + this._innerPadding * 0.75).toFixed(2)}px`\n };\n }\n}\n\nclass RangeModelDoubleStep extends RangeModelDouble {\n get stepWidth () {\n return `${this._stepWidth.toFixed(3)}px`;\n }\n\n _update () {\n super._update();\n const steps = this._rangeWidth / this._step;\n this._stepWidth = this._innerWidth / steps;\n if (this._stepWidth < 4) this._stepWidth *= Math.ceil(4 / this._stepWidth);\n }\n}\n\nexport { RangeModel, RangeModelStep, RangeModelDouble, RangeModelDoubleStep };\n","import api from '../../api.js';\nimport { RangeEmission } from './range-emission.js';\nimport { RangeSelector } from './range-selector.js';\nimport { RangeModel, RangeModelStep, RangeModelDouble, RangeModelDoubleStep } from './range-model';\n\nconst RangeTypes = {\n STEP: 'step',\n DOUBLE: 'double',\n DOUBLE_STEP: 'double-step',\n DEFAULT: 'default'\n};\n\nclass Range extends api.core.Instance {\n static get instanceClassName () {\n return 'Range';\n }\n\n init () {\n this._retrieveType();\n this._retrieveSize();\n if (this.isLegacy) {\n this.isResizing = true;\n this.isMouseMoving = true;\n } else {\n this._observer = new ResizeObserver(this.resize.bind(this));\n this._observer.observe(this.node);\n }\n\n this.addAscent(RangeEmission.CONSTRAINTS, this.setConstraints.bind(this));\n this.addAscent(RangeEmission.VALUE, this.setValue.bind(this));\n this.addAscent(RangeEmission.VALUE2, this.setValue2.bind(this));\n if (this.getAttribute(RangeSelector.RANGE_PREFIX)) this.setPrefix(this.getAttribute(RangeSelector.RANGE_PREFIX));\n if (this.getAttribute(RangeSelector.RANGE_SUFFIX)) this.setSuffix(this.getAttribute(RangeSelector.RANGE_SUFFIX));\n this.update();\n }\n\n _retrieveType () {\n switch (true) {\n case this.matches(RangeSelector.RANGE_DOUBLE_STEP):\n this.type = RangeTypes.DOUBLE;\n break;\n\n case this.matches(RangeSelector.RANGE_DOUBLE):\n this.type = RangeTypes.DOUBLE;\n break;\n\n case this.matches(RangeSelector.RANGE_STEP):\n this.type = RangeTypes.STEP;\n break;\n\n default:\n this.type = RangeTypes.DEFAULT;\n }\n }\n\n set type (value) {\n if (this._type === value) return;\n this._type = value;\n\n const oldModel = this._model;\n\n switch (this._type) {\n case RangeTypes.DOUBLE_STEP:\n this._model = new RangeModelDoubleStep();\n break;\n\n case RangeTypes.DOUBLE:\n this._model = new RangeModelDouble();\n break;\n\n case RangeTypes.STEP:\n this._model = new RangeModelStep();\n break;\n\n default:\n this._model = new RangeModel();\n }\n\n this._model.configure(oldModel);\n }\n\n get type () {\n return this._type;\n }\n\n _retrieveSize () {\n this._model.isSm = this.matches(RangeSelector.RANGE_SM);\n }\n\n resize () {\n this._retrieveWidth();\n this.update();\n }\n\n _retrieveWidth () {\n this._model.width = this.getRect().width;\n }\n\n setValue (value) {\n this._model.value = value;\n switch (this._type) {\n case RangeTypes.DOUBLE_STEP:\n case RangeTypes.DOUBLE:\n this.descend(RangeEmission.VALUE, value);\n break;\n }\n this.update();\n }\n\n setValue2 (value) {\n this._model.value2 = value;\n this.descend(RangeEmission.VALUE2, value);\n this.update();\n }\n\n setConstraints (constraints) {\n this._model.setConstraints(constraints);\n this.update();\n this.descend(RangeEmission.CONSTRAINTS, constraints);\n }\n\n setPrefix (value) {\n this._model.setPrefix(value);\n this.update();\n }\n\n setSuffix (value) {\n this._model.setSuffix(value);\n this.update();\n }\n\n mutate (attributesNames) {\n switch (true) {\n case attributesNames.includes('class'):\n this._retrieveType();\n this._retrieveSize();\n break;\n\n case attributesNames.includes(RangeSelector.RANGE_PREFIX):\n case attributesNames.includes(RangeSelector.RANGE_SUFFIX):\n this._model.setPrefix(this.getAttribute(RangeSelector.RANGE_PREFIX));\n this._model.setSuffix(this.getAttribute(RangeSelector.RANGE_SUFFIX));\n this.update();\n break;\n }\n }\n\n update () {\n this._model.update();\n this.descend(RangeEmission.OUTPUT, this._model.output);\n this.descend(RangeEmission.MIN, this._model.textMin);\n this.descend(RangeEmission.MAX, this._model.textMax);\n const progress = this._model.progress;\n if (progress.left) {\n this.style.setProperty('--progress-left', progress.left);\n } else {\n this.style.removeProperty('--progress-left');\n }\n if (progress.right) {\n this.style.setProperty('--progress-right', progress.right);\n if (this.isLegacy) {\n if (progress.left) {\n this.style.setProperty('background-position-x', progress.left);\n this.style.setProperty('background-size', `${parseFloat(progress.right) - parseFloat(progress.left)}px ${this._model.isSm ? '8px' : '12px'}`);\n }\n }\n } else {\n this.style.removeProperty('--progress-right');\n if (this.isLegacy) {\n this.style.removeProperty('background-size');\n this.style.removeProperty('background-position-x');\n }\n }\n if (this._model.stepWidth) this.style.setProperty('--step-width', this._model.stepWidth);\n else this.style.removeProperty('--step-width');\n }\n\n mouseMove (point) {\n if (this._type !== RangeTypes.DOUBLE && this._type !== RangeTypes.DOUBLE_STEP) return;\n const x = point.x - this.getRect().left;\n this.descend(RangeEmission.ENABLE_POINTER, (parseFloat(this._model.progress.right) - parseFloat(this._model.progress.left)) / 2 + parseFloat(this._model.progress.left) < x ? 2 : 1);\n }\n\n dispose () {\n this._observer.disconnect();\n }\n}\n\nexport { Range };\n","class RangeConstraints {\n constructor (node) {\n this._min = isNaN(node.min) ? 0 : node.min;\n this._max = isNaN(node.max) ? 100 : node.max;\n this._step = isNaN(node.step) ? 1 : node.step;\n this._rangeWidth = this._max - this._min;\n }\n\n get min () {\n return this._min;\n }\n\n get max () {\n return this._max;\n }\n\n get step () {\n return this._step;\n }\n\n get rangeWidth () {\n return this._rangeWidth;\n }\n\n test (min, max, step) {\n return this._min === min && this._max === max && this._step === step;\n }\n}\n\nexport { RangeConstraints };\n","import api from '../../api.js';\nimport { RangeEmission } from './range-emission.js';\nimport { RangeConstraints } from './range-constraints';\n\nclass RangeInput extends api.core.Instance {\n static get instanceClassName () {\n return 'RangeInput';\n }\n\n init () {\n this._init();\n this.node.value = this.getAttribute('value');\n this._changing = this.change.bind(this);\n this._listenerType = this.isLegacy ? 'change' : 'input';\n this.listen(this._listenerType, this._changing);\n if (this.isLegacy) this.addDescent(RangeEmission.ENABLE_POINTER, this._enablePointer.bind(this));\n this.change();\n }\n\n _init () {\n this._pointerId = 1;\n this.request(() => {\n if (!this.hasAttribute('min')) this.setAttribute('min', 0);\n this.ascend(RangeEmission.CONSTRAINTS, new RangeConstraints(this.node));\n this.ascend(RangeEmission.DISABLED, this.node.disabled);\n });\n\n this.addDescent(RangeEmission.VALUE2, this.setValue.bind(this));\n }\n\n _enablePointer (pointerId) {\n const isEnabled = pointerId === this._pointerId;\n if (this._isPointerEnabled === isEnabled) return;\n this._isPointerEnabled = isEnabled;\n if (isEnabled) this.style.removeProperty('pointer-events');\n else this.style.setProperty('pointer-events', 'none');\n }\n\n setValue (value) {\n if (parseFloat(this.node.value) > value) {\n this.node.value = value;\n this.change();\n }\n }\n\n change () {\n this.ascend(RangeEmission.VALUE, parseFloat(this.node.value));\n }\n\n mutate (attributesNames) {\n if (attributesNames.includes('disabled')) this.ascend(RangeEmission.DISABLED, this.node.disabled);\n if (attributesNames.includes('min') || attributesNames.includes('max') || attributesNames.includes('step')) {\n this.ascend(RangeEmission.CONSTRAINTS, new RangeConstraints(this.node));\n this.change();\n }\n }\n\n dispose () {\n if (this._listenerType) this.unlisten(this._listenerType, this._changing);\n }\n}\n\nexport { RangeInput };\n","import api from '../../../api';\nimport { RangeEmission } from './range-emission.js';\n\nclass RangeOutput extends api.core.Instance {\n static get instanceClassName () {\n return 'RangeOutput';\n }\n\n init () {\n this.addDescent(RangeEmission.OUTPUT, this.change.bind(this));\n }\n\n change (data) {\n this.node.innerText = data.text;\n this.node.style.transform = data.transform;\n }\n}\n\nexport { RangeOutput };\n","import api from '../../../api';\nimport { RangeEmission } from './range-emission.js';\nimport { RangeSelector } from './range-selector.js';\n\nclass RangeLimit extends api.core.Instance {\n static get instanceClassName () {\n return 'RangeLimit';\n }\n\n init () {\n switch (true) {\n case this.matches(RangeSelector.RANGE_MIN):\n this.addDescent(RangeEmission.MIN, this.change.bind(this));\n break;\n\n case this.matches(RangeSelector.RANGE_MAX):\n this.addDescent(RangeEmission.MAX, this.change.bind(this));\n break;\n }\n }\n\n change (text) {\n this.node.innerText = text;\n }\n}\n\nexport { RangeLimit };\n","import api from './api.js';\nimport { RangeSelector } from './script/range/range-selector.js';\nimport { RangeEmission } from './script/range/range-emission.js';\nimport { Range } from './script/range/range.js';\nimport { RangeInput } from './script/range/range-input.js';\nimport { RangeInput2 } from './script/range/range-input2.js';\nimport { RangeOutput } from './script/range/range-output.js';\nimport { RangeLimit } from './script/range/range-limit.js';\n\napi.range = {\n Range: Range,\n RangeInput: RangeInput,\n RangeInput2: RangeInput2,\n RangeOutput: RangeOutput,\n RangeLimit: RangeLimit,\n RangeEmission: RangeEmission,\n RangeSelector: RangeSelector\n};\n\nexport default api;\n","import { RangeInput } from './range-input.js';\nimport { RangeEmission } from './range-emission';\n\nclass RangeInput2 extends RangeInput {\n static get instanceClassName () {\n return 'RangeInput2';\n }\n\n _init () {\n this._pointerId = 2;\n this.addDescent(RangeEmission.CONSTRAINTS, this.setConstraints.bind(this));\n this.addDescent(RangeEmission.VALUE, this.setValue.bind(this));\n }\n\n setValue (value) {\n if (parseFloat(this.node.value) < value) {\n this.node.value = value;\n this.change();\n }\n }\n\n change () {\n this.ascend(RangeEmission.VALUE2, parseFloat(this.node.value));\n }\n\n setConstraints (constraints) {\n this.node.min = constraints.min;\n this.node.max = constraints.max;\n this.node.step = constraints.step;\n this.change();\n }\n\n mutate (attributesNames) {}\n}\n\nexport { RangeInput2 };\n","import api from './index.js';\n\napi.internals.register(api.range.RangeSelector.RANGE, api.range.Range);\napi.internals.register(api.range.RangeSelector.RANGE_INPUT, api.range.RangeInput);\napi.internals.register(api.range.RangeSelector.RANGE_INPUT2, api.range.RangeInput2);\napi.internals.register(api.range.RangeSelector.RANGE_OUTPUT, api.range.RangeOutput);\napi.internals.register(api.range.RangeSelector.RANGE_MIN, api.range.RangeLimit);\napi.internals.register(api.range.RangeSelector.RANGE_MAX, api.range.RangeLimit);\n\nexport default api;\n","import api from '../../api.js';\n\nexport const HeaderSelector = {\n HEADER: api.internals.ns.selector('header'),\n TOOLS_LINKS: api.internals.ns.selector('header__tools-links'),\n MENU_LINKS: api.internals.ns.selector('header__menu-links'),\n BUTTONS: `${api.internals.ns.selector('header__tools-links')} ${api.internals.ns.selector('btns-group')}, ${api.internals.ns.selector('header__tools-links')} ${api.internals.ns.selector('links-group')}`,\n MODALS: `${api.internals.ns.selector('header__search')}${api.internals.ns.selector('modal')}, ${api.internals.ns.selector('header__menu')}${api.internals.ns.selector('modal')}`\n};\n","import api from '../../api.js';\nimport { HeaderSelector } from './header-selector.js';\n\nclass HeaderLinks extends api.core.Instance {\n static get instanceClassName () {\n return 'HeaderLinks';\n }\n\n init () {\n const header = this.queryParentSelector(HeaderSelector.HEADER);\n this.toolsLinks = header.querySelector(HeaderSelector.TOOLS_LINKS);\n this.menuLinks = header.querySelector(HeaderSelector.MENU_LINKS);\n const copySuffix = '-mobile';\n\n const toolsHtml = this.toolsLinks.innerHTML.replace(/ +/g, ' ');\n const menuHtml = this.menuLinks.innerHTML.replace(/ +/g, ' ');\n // Pour éviter de dupliquer des id, on ajoute un suffixe aux id et aria-controls duppliqués.\n let toolsHtmlIdList = toolsHtml.match(/id=\"(.*?)\"/gm) || [];\n\n // on a besoin d'échapper les backslash dans la chaine de caractère\n // eslint-disable-next-line no-useless-escape\n toolsHtmlIdList = toolsHtmlIdList.map(element => element.replace('id=\\\"', '').replace('\\\"', ''));\n\n const toolsHtmlAriaControlList = toolsHtml.match(/aria-controls=\"(.*?)\"/gm);\n let toolsHtmlDuplicateId = toolsHtml.replace(/id=\"(.*?)\"/gm, 'id=\"$1' + copySuffix + '\"');\n if (toolsHtmlAriaControlList) {\n for (const element of toolsHtmlAriaControlList) {\n const ariaControlsValue = element.replace('aria-controls=\"', '').replace('\"', '');\n if (toolsHtmlIdList.includes(ariaControlsValue)) {\n toolsHtmlDuplicateId = toolsHtmlDuplicateId.replace(`aria-controls=\"${ariaControlsValue}\"`, `aria-controls=\"${ariaControlsValue + copySuffix}\"`);\n };\n }\n }\n\n if (toolsHtmlDuplicateId === menuHtml) return;\n\n switch (api.mode) {\n case api.Modes.ANGULAR:\n case api.Modes.REACT:\n case api.Modes.VUE:\n this.warn(`header__tools-links content is different from header__menu-links content.\nAs you're using a dynamic framework, you should handle duplication of this content yourself, please refer to documentation:\n${api.header.doc}`);\n break;\n\n default:\n this.menuLinks.innerHTML = toolsHtmlDuplicateId;\n }\n }\n}\n\nexport { HeaderLinks };\n","import api from '../../api.js';\n\nclass HeaderModal extends api.core.Instance {\n static get instanceClassName () {\n return 'HeaderModal';\n }\n\n init () {\n this.isResizing = true;\n }\n\n resize () {\n if (this.isBreakpoint(api.core.Breakpoints.LG)) this.deactivateModal();\n else this.activateModal();\n }\n\n activateModal () {\n const modal = this.element.getInstance('Modal');\n if (!modal) return;\n modal.isEnabled = true;\n this.listenClick({ capture: true });\n }\n\n deactivateModal () {\n const modal = this.element.getInstance('Modal');\n if (!modal) return;\n modal.conceal();\n modal.isEnabled = false;\n this.unlistenClick({ capture: true });\n }\n\n handleClick (e) {\n if (e.target.matches('a, button') && !e.target.matches('[aria-controls]') && !e.target.matches(api.core.DisclosureSelector.PREVENT_CONCEAL)) {\n const modal = this.element.getInstance('Modal');\n modal.conceal();\n }\n }\n}\n\nexport { HeaderModal };\n","import api from './api.js';\nimport { HeaderLinks } from './script/header/header-links.js';\nimport { HeaderModal } from './script/header/header-modal.js';\nimport { HeaderSelector } from './script/header/header-selector.js';\n\napi.header = {\n HeaderLinks: HeaderLinks,\n HeaderModal: HeaderModal,\n HeaderSelector: HeaderSelector,\n doc: 'https://www.systeme-de-design.gouv.fr/elements-d-interface/composants/en-tete'\n};\n\nexport default api;\n","import api from './index.js';\n\napi.internals.register(api.header.HeaderSelector.TOOLS_LINKS, api.header.HeaderLinks);\napi.internals.register(api.header.HeaderSelector.MODALS, api.header.HeaderModal);\n\nexport default api;\n","import api from '../../api.js';\n\nexport const DisplaySelector = {\n DISPLAY: api.internals.ns.selector('display'),\n RADIO_BUTTONS: `input[name=\"${api.internals.ns('radios-theme')}\"]`,\n FIELDSET: api.internals.ns.selector('fieldset')\n};\n","import api from '../../api.js';\nimport { DisplaySelector } from './display-selector.js';\n\nclass Display extends api.core.Instance {\n static get instanceClassName () {\n return 'Display';\n }\n\n init () {\n this.radios = this.querySelectorAll(DisplaySelector.RADIO_BUTTONS);\n\n if (api.scheme) {\n this.changing = this.change.bind(this);\n for (const radio of this.radios) radio.addEventListener('change', this.changing);\n this.addDescent(api.scheme.SchemeEmission.SCHEME, this.apply.bind(this));\n this.ascend(api.scheme.SchemeEmission.ASK);\n } else {\n this.querySelector(DisplaySelector.FIELDSET).setAttribute('disabled', '');\n }\n }\n\n get scheme () {\n return this._scheme;\n }\n\n set scheme (value) {\n if (this._scheme === value || !api.scheme) return;\n switch (value) {\n case api.scheme.SchemeValue.SYSTEM:\n case api.scheme.SchemeValue.LIGHT:\n case api.scheme.SchemeValue.DARK:\n this._scheme = value;\n for (const radio of this.radios) {\n radio.checked = radio.value === value;\n }\n this.ascend(api.scheme.SchemeEmission.SCHEME, value);\n break;\n }\n }\n\n change () {\n for (const radio of this.radios) {\n if (radio.checked) {\n this.scheme = radio.value;\n return;\n }\n }\n }\n\n apply (value) {\n this.scheme = value;\n }\n\n dispose () {\n for (const radio of this.radios) radio.removeEventListener('change', this.changing);\n }\n}\n\nexport { Display };\n","import api from './api.js';\nimport { Display } from './script/display/display.js';\nimport { DisplaySelector } from './script/display/display-selector.js';\n\napi.display = {\n Display: Display,\n DisplaySelector: DisplaySelector\n};\n\nexport default api;\n","import api from './index.js';\n\napi.internals.register(api.display.DisplaySelector.DISPLAY, api.display.Display);\n\nexport default api;\n"],"names":["state","constructor","this","modules","create","ModuleClass","module","type","getModule","add","item","remove","isActive","_isActive","value","values","Object","keys","map","e","activate","deactivate","isLegacy","_isLegacy","config","LogLevel","level","light","dark","logger","console","warn","error","log","message","Message","print","setColor","color","apply","getMessage","window","matchMedia","matches","domain","inputs","styles","objects","push","join","LEVELS","debug","info","inspector","id","msgs","bind","tree","stage","_branch","root","element","space","branch","indent","i","html","child","children","startAtDomContentLoaded","callback","document","readyState","requestAnimationFrame","addEventListener","Modes","AUTO","MANUAL","RUNTIME","LOADED","VUE","ANGULAR","REACT","options","_mode","isStarted","starting","start","preventManipulation","configure","settings","query","startCallback","isProduction","production","isNaN","Number","verbose","mode","Collection","_collection","forEach","length","collectable","indexOf","onAdd","onPopulate","index","splice","onRemove","onEmpty","execute","args","clear","clone","slice","collection","Module","super","ns","name","selector","notation","undefined","attr","result","event","emission","querySelectorAllArray","selectors","Array","prototype","call","querySelectorAll","queryParentSelector","parent","parentElement","documentElement","Registration","InstanceClass","creator","instances","isIntroduced","_instanceClassName","instanceClassName","_instanceClassNames","getInstanceClassNames","_property","substring","toLowerCase","dashed","replace","_attribute","getPrototypeOf","hasInstanceClassName","introduce","parse","node","nonRecursive","nodes","querySelector","instance","dispose","_dispose","instanceClassNames","property","attribute","Register","register","registration","count","Element","attributeNames","_children","_parent","_projects","proxy","scope","_proxy","outerHTML","end","project","populate","projects","hasInstance","_config","ascendants","descendants","addChild","removeChild","emit","data","elements","response","_emit","_emitter","ascend","_ascend","_ascent","descend","_descend","_descent","getInstance","getDescendantInstances","stopAtInstanceClassName","stopAtFirstInstance","getAscendantInstance","prepare","attributeName","examine","RootEmission","CLICK","KEYDOWN","KEYUP","KeyCodes","TAB","ESCAPE","END","HOME","LEFT","UP","RIGHT","DOWN","getKeyCode","keyCode","filter","entry","Root","setAttribute","listen","click","capture","keydown","keyup","target","Stage","observer","MutationObserver","mutate","modifications","willModify","modifying","modify","hasElement","getElement","getProxy","put","position","compareDocumentPosition","Node","DOCUMENT_POSITION_CONTAINS","DOCUMENT_POSITION_CONTAINED_BY","DOCUMENT_POSITION_PRECEDING","observe","childList","subtree","attributes","disconnect","mutations","examinations","mutation","removedNodes","addedNodes","descendant","targets","contains","disposables","disposable","registrations","creations","n","Renderer","rendering","render","nexts","request","next","Resizer","requireResize","resizing","resize","requesting","fonts","ready","then","ScrollLocker","_isLocked","_scrollY","lock","unlock","isLocked","scrollY","scrollBarGap","innerWidth","clientWidth","body","style","top","behavior","getComputedStyle","getPropertyValue","scrollBehavior","setProperty","removeAttribute","scrollTo","removeProperty","move","Load","loading","load","FONT_FAMILIES","FontSwap","swapping","swap","families","family","check","swapFont","MouseMove","requireMove","_isMoving","moving","unlisten","removeEventListener","point","x","clientX","y","clientY","mouseMove","Hash","handling","handle","getLocationHash","_sanitize","hash","charAt","_hash","location","handleHash","engine","registerModule","stop","getOption","hover","active","colors","getColor","context","use","tint","decision","trim","sanitize","className","substr","getClassNames","split","baseVal","modifyClass","classNames","addClass","removeClass","hasClass","ACTIONS_SELECTOR","queryActions","counter","uniqueId","getElementById","base","dom","image","DataURISVG","width","height","_width","_height","_content","content","getDataURI","svg","support","supportLocalStorage","localStorage","supportAspectRatio","CSS","supports","TransitionSelector","NONE","completeAssign","sources","source","descriptors","reduce","key","getOwnPropertyDescriptor","getOwnPropertySymbols","sym","descriptor","enumerable","defineProperties","internals","legacy","defineProperty","get","setLegacy","motion","url","search","entries","URLSearchParams","fromEntries","searchParams","api","version","prefix","organisation","set","configuration","Emitter","emissions","closure","Error","Breakpoint","minWidth","test","Breakpoints","XS","SM","MD","LG","XL","Instance","jsAttribute","_isRendering","_isResizing","_isScrollLocked","_isLoading","_isSwappingFont","_isEnabled","_isDisposed","_listeners","_handlingClick","handleClick","_hashes","_keyListenerTypes","_keys","handlingKey","handleKey","_registrations","_nexts","init","isEnabled","unshift","getRegisteredInstances","dispatch","detail","bubbles","cancelable","CustomEvent","bubble","dispatchEvent","listeners","listener","Listener","removal","matchOptions","listenClick","unlistenClick","listenHash","action","HashAction","unlistenHash","listenKey","preventDefault","stopPropagation","KeyAction","unlistenKey","code","some","isRendering","isResizing","isBreakpoint","breakpoint","toUpperCase","isScrollLocked","isLoading","isSwappingFont","isMouseMoving","_isMouseMoving","retrieveNodeId","append","isDisposed","addEmission","removeEmission","addAscent","removeAscent","addDescent","removeDescent","parentNode","getAttribute","hasAttribute","propertyName","focus","blur","focusClosest","closest","_focusClosest","actions","hasFocus","activeElement","scrollIntoView","rect","getRect","scroll","bottom","innerHeight","getBoundingClientRect","center","left","middle","eventType","_node","_type","_closure","_options","every","DisclosureEvent","DISCLOSE","CONCEAL","DisclosureEmission","RESET","ADDED","RETRIEVE","REMOVED","GROUP","UNGROUP","SPOTLIGHT","Disclosure","DisclosureButtonInstanceClass","disclosuresGroupInstanceClassName","_selector","modifier","_isPristine","_isRetrievingPrimaries","_hasRetrieved","_primaryButtons","reset","update","disclose","_spotlight","isPristine","assign","canConceal","conceal","buttons","button","group","isDisclosed","getGroup","retrievePrimaries","_group","validate","withhold","current","preventFocus","_isDisclosed","isInitiallyDisclosed","primaryButtons","hasRetrieved","toggle","canDisclose","buttonHasFocus","_retrievePrimaries","_electPrimaries","retrieved","applyAbility","retrieve","candidates","isDisabled","DisclosureButton","ariaState","_canDisclose","isPrimary","includes","canDisable","_isInitiallyDisclosed","_isContained","controlsId","_isApplying","measure","buttonRect","_dx","_dy","dx","dy","DisclosureSelector","PREVENT_CONCEAL","DisclosuresGroup","disclosureInstanceClassName","_members","_index","_isRetrieving","_isGrouped","proxyAccessors","members","member","isGrouped","getMembers","invalid","bypassPrevention","_retrieve","getIndex","defaultIndex","canUngroup","attributesNames","DisclosureType","EXPAND","ariaControls","SELECT","OPENED","CollapseButton","CollapseSelector","COLLAPSE","COLLAPSING","EquisizedEmission","CHANGE","ToggleEvent","TOGGLE","InjectSvgSelector","INJECT_SVG","ArtworkSelector","ARTWORK_USE","AssessSelector","ASSESS_FILE","DETAIL","AssessEmission","UPDATE","ratiosImg","ratioSelector","modifiers","deprecatedRatioSelector","RatioSelector","RATIO","PlaceSelector","TOP","BOTTOM","AlignSelector","START","CENTER","PlacementPosition","PlacementAlign","PlacementMode","core","Collapse","transitionend","maxHeight","unbound","adjust","offsetHeight","primary","collapsePrimary","before","candidate","min","Math","mins","sort","a","b","abs","CollapsesGroup","RootSelector","ROOT","Equisized","Toggle","pressed","EquisizedsGroup","equisizeds","max","equisized","InjectSvg","img","restore","fetch","imgID","imgClass","imgURL","text","xmlDoc","DOMParser","parseFromString","match","innerHTML","replaceAll","el","attrs","focusable","replaceChild","Artwork","xlink","splitUrl","svgUrl","svgName","xhr","XMLHttpRequest","onload","responseText","realSvgContent","classList","open","send","AssessFile","lang","getLang","href","hreflang","file","gather","getFileLength","method","headers","details","extension","parseExtension","bytesToSize","getLangDisplayName","elem","navigator","language","locale","Intl","DisplayNames","of","bytes","sizeUnits","parseInt","floor","size","roundedSize","round","EPSILON","String","AssessDetail","Ratio","ratio","currentWidth","Placement","places","aligns","safeAreaMargin","_places","_aligns","_safeAreaMargin","_isShown","show","hide","place","align","isShown","_place","_align","setReferent","referent","_referent","safeArea","right","referentRect","getPlace","getHorizontalAlign","getVerticalAlign","_x","_y","transform","PlacementReferent","_placement","placement","SchemeValue","SYSTEM","LIGHT","DARK","SchemeAttribute","THEME","SCHEME","TRANSITION","SchemeTheme","SchemeEmission","ASK","SchemeEvent","Scheme","changing","change","restoreTransition","scheme","getItem","schemeAttr","ask","_scheme","listenPreferences","unlistenPreferences","theme","setItem","_theme","colorScheme","isListening","mediaQuery","SchemeSelector","SWITCH_THEME","RADIO_BUTTONS","ACCORDION","AccordionSelector","COLLAPSE_LEGACY","BUTTON","Accordion","AccordionsGroup","accordion","ButtonSelector","EQUISIZED_BUTTON","EQUISIZED_GROUP","CardDownload","CardSelector","DOWNLOAD","DOWNLOAD_DETAIL","card","SegmentedSelector","SEGMENTED","SEGMENTED_ELEMENTS","SEGMENTED_ELEMENT","SEGMENTED_LEGEND","SegmentedEmission","Segmented","legend","_isLegendInline","SEGMENTED_VERTICAL","LEGEND_INLINE","offsetWidth","scrollWidth","SegmentedElement","segmented","BreadcrumbSelector","BREADCRUMB","Breadcrumb","focusing","getCollapse","collapse","links","_focus","link","verify","breadcrumb","TooltipSelector","TOOLTIP","SHOWN","TooltipReferentState","TooltipReferent","_state","focusIn","focusOut","mouseover","mouseout","_keydown","_click","_clickOut","close","TooltipEvent","SHOW","HIDE","TooltipState","Tooltip","transitionEnd","limit","toFixed","tooltip","ToggleInput","isChecked","checked","ToggleStatusLabel","input","maxWidth","parseFloat","style2","ToggleSelector","STATUS_LABEL","ITEM","SidemenuSelector","LIST","SidemenuList","SidemenuItem","sidemenu","ModalSelector","MODAL","SCROLL_DIVIDER","BODY","TITLE","ModalButton","ModalAttribute","CONCEALING_BACKDROP","Modal","scrolling","_isDialog","tagName","isScrolling","_escape","_ensureAccessibleName","activateModal","deactivateModal","isDialog","_hasDialogRole","_setAccessibleName","title","UNORDEREDS","ORDEREDS","isFocusable","container","visibility","display","FocusTrap","onTrap","onUntrap","waiting","wait","maintainFocus","trapped","trap","untrap","isTrapping","trapping","focusables","stun","stunneds","Stunned","first","last","shiftKey","tabIndex","unordereds","radios","groups","radio","RadioButtonGroup","unordered","keep","ordereds","noDuplicates","concat","inert","unstun","selected","ModalsGroup","focusTrap","initial","ModalBody","divide","scrollHeight","clientHeight","scrollTop","offset","modal","PasswordEmission","ADJUST","PasswordToggle","_isChecked","Password","PasswordSelector","PASSWORD","INPUT","LABEL","TOOGLE","PasswordInput","_isRevealed","capslock","isRevealed","getModifierState","PasswordLabel","valueREM","ceil","paddingRight","password","NavigationSelector","NAVIGATION","ITEM_RIGHT","MENU","TRANSLATE_BUTTON","NavigationItem","_isRightAligned","calculate","isRightAligned","NavigationMousePosition","INSIDE","OUTSIDE","Navigation","clicked","out","_handleRootClick","handleMouseDown","requestPosition","isRequesting","getPosition","requested","navigation","TabButton","list","focalize","TabSelector","PANEL","SHADOW","SHADOW_LEFT","SHADOW_RIGHT","PANEL_START","PANEL_END","TabPanelDirection","TabPanel","_direction","_isPreventingTransition","direction","isPreventingTransition","translate","TabKeys","TabEmission","PRESS_KEY","LIST_HEIGHT","TabsGroup","pressKey","setListHeight","listHeight","pressLeft","pressRight","pressHome","pressEnd","scrollLeft","paneHeight","panelHeight","TabsList","btn","btnRect","listRect","actualScroll","_isScrolling","isMin","isMax","isRtl","minSelector","maxSelector","tab","TableEmission","SCROLLABLE","CAPTION_HEIGHT","Table","setCaptionHeight","TableSelector","TABLE","ELEMENT","CAPTION","TableElement","TableCaption","table","TagEvent","DISMISS","TagDismissible","TagSelector","PRESSABLE","DISMISSIBLE","tag","TRANSCRIPTION","TranscriptionSelector","Transcription","transcription","TileDownload","TileSelector","tile","RangeSelector","RANGE","RANGE_SM","RANGE_STEP","RANGE_DOUBLE","RANGE_DOUBLE_STEP","RANGE_INPUT","RANGE_INPUT2","RANGE_OUTPUT","RANGE_MIN","RANGE_MAX","RANGE_PREFIX","RANGE_SUFFIX","RangeEmission","VALUE","VALUE2","OUTPUT","CONSTRAINTS","MIN","MAX","STEP","PREFIX","SUFFIX","DISABLED","ENABLE_POINTER","RangeModel","_min","_max","_value","_thumbSize","_innerWidth","_prefix","_suffix","_background","model","setConstraints","_constraints","setPrefix","setSuffix","_decorate","isSm","_isSm","setThumbSize","mult","_innerPadding","textValue","outputX","_outputX","constraints","_step","step","_rangeWidth","rangeWidth","textMin","textMax","output","_translateX","_centerPercent","_getRatio","progress","_progress","_update","RangeModelStep","stepWidth","_stepWidth","steps","RangeModelDouble","value2","_value2","ratio1","ratio2","RangeModelDoubleStep","RangeTypes","Range","_retrieveType","_retrieveSize","_observer","ResizeObserver","setValue","setValue2","oldModel","_model","_retrieveWidth","RangeConstraints","RangeInput","_init","_changing","_listenerType","_enablePointer","_pointerId","disabled","pointerId","_isPointerEnabled","RangeOutput","innerText","RangeLimit","range","RangeInput2","HeaderSelector","HEADER","TOOLS_LINKS","MENU_LINKS","BUTTONS","MODALS","HeaderLinks","header","toolsLinks","menuLinks","copySuffix","toolsHtml","menuHtml","toolsHtmlIdList","toolsHtmlAriaControlList","toolsHtmlDuplicateId","ariaControlsValue","doc","HeaderModal","DisplaySelector","DISPLAY","FIELDSET","Display"],"mappings":"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"}