{"version":3,"file":"core.nomodule.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/data-uri-svg.js","../../src/core/script/api/utilities/image/index.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/collapse/collapse.js","../../src/core/script/collapse/collapses-group.js","../../src/core/script/equisized/equisized-emission.js","../../src/core/script/equisized/equisized.js","../../src/core/script/equisized/equisizeds-group.js","../../src/core/script/action/toggle/toggle-event.js","../../src/core/script/action/toggle/toggle.js","../../src/core/script/inject/inject-svg.js","../../src/core/script/api/utilities/attribute.js","../../src/core/script/inject/inject-svg-selector.js","../../src/core/script/artwork/artwork.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/assess/assess-file.js","../../src/core/script/assess/assess-detail.js","../../src/core/script/ratio/ratio-selector.js","../../src/core/api.js","../../src/core/script/ratio/ratio.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/script/placement/placement.js","../../src/core/script/placement/placement-referent.js","../../src/core/index.js","../../src/core/script/api/modules/stage/root-selector.js","../../src/core/main.js","../../src/core/legacy.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","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 { DataURISVG } from './data-uri-svg';\n\nconst image = {\n DataURISVG: DataURISVG\n};\n\nexport default image;\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 { 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","import ns from '../api/utilities/namespace.js';\n\nexport const EquisizedEmission = {\n CHANGE: ns('equisized', 'change')\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 { 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 ns from '../../api/utilities/namespace.js';\n\nconst ToggleEvent = {\n TOGGLE: ns.event('toggle')\n};\n\nexport { ToggleEvent };\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 { 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 ns from '../api/utilities/namespace.js';\n\nexport const InjectSvgSelector = {\n INJECT_SVG: `[${ns.attr('inject-svg')}]`\n};\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';\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';\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 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 { 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 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 { 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 './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","export const RootSelector = {\n ROOT: ':root'\n};\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","import api from './index.js';\n\n/* legacy code here */\napi.internals.legacy.setLegacy();\napi.internals.register(api.core.ArtworkSelector.ARTWORK_USE, api.core.Artwork);\n\nexport default api;\n"],"names":["State","this","modules","create","ModuleClass","const","module","type","getModule","add","item","remove","isActive","_isActive","value","values","Object","keys","map","e","activate","deactivate","isLegacy","_isLegacy","state","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","let","branch","indent","i","children","child","inspector","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","options","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","html","outerHTML","end","project","populate","projects","hasInstance","_config","ascendants","descendants","addChild","removeChild","emit","data","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","creations","n","Renderer","rendering","render","nexts","request","next","Resizer","requireResize","resizing","resize","requesting","fonts","ready","then","ScrollLocker","_isLocked","_scrollY","lock","unlock","prototypeAccessors","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","engine","Colors","getColor","context","use","tint","decision","getOption","trim","hover","active","colors","sanitize","className","substr","getClassNames","split","baseVal","modifyClass","classNames","addClass","removeClass","hasClass","ACTIONS_SELECTOR","queryActions","counter","uniqueId","getElementById","base","dom","DataURISVG","width","height","_width","_height","_content","content","getDataURI","svg","image","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","staticAccessors","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","prototypeAccessors$1","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","constructor","validate","_group","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","Collapse","transitionend","maxHeight","unbound","adjust","offsetHeight","primary","collapsePrimary","before","candidate","min","Math","mins","sort","a","b","abs","CollapsesGroup","EquisizedEmission","CHANGE","Equisized","EquisizedsGroup","equisizeds","max","equisized","ToggleEvent","TOGGLE","Toggle","pressed","InjectSvg","img","restore","fetch","imgID","imgClass","imgURL","text","xmlDoc","DOMParser","parseFromString","match","innerHTML","replaceAll","el","attrs","focusable","replaceChild","InjectSvgSelector","INJECT_SVG","Artwork","xlink","splitUrl","svgUrl","svgName","xhr","XMLHttpRequest","onload","responseText","realSvgContent","classList","open","send","ArtworkSelector","ARTWORK_USE","AssessSelector","ASSESS_FILE","DETAIL","AssessEmission","UPDATE","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","ratiosImg","ratioSelector","modifiers","deprecatedRatioSelector","RatioSelector","RATIO","Ratio","ratio","currentWidth","PlaceSelector","TOP","BOTTOM","AlignSelector","START","CENTER","PlacementPosition","PlacementAlign","PlacementMode","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","core","RootSelector","ROOT"],"mappings":"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"}