{"version":3,"file":"range.module.min.js","sources":["../../../.config/config.js","../../../src/core/api.js","../../../src/component/range/script/range/range-selector.js","../../../src/component/range/script/range/range-emission.js","../../../src/component/range/script/range/range-model.js","../../../src/component/range/script/range/range.js","../../../src/component/range/script/range/range-constraints.js","../../../src/component/range/script/range/range-input.js","../../../src/component/range/script/range/range-output.js","../../../src/component/range/script/range/range-limit.js","../../../src/component/range/index.js","../../../src/component/range/script/range/range-input2.js","../../../src/component/range/main.js"],"sourcesContent":["const config = {\r\n prefix: 'fr',\r\n namespace: 'dsfr',\r\n organisation: '@gouvfr',\r\n version: '1.11.2'\r\n};\r\n\r\nexport default config;\r\n","import config from './config.js';\nconst api = window[config.namespace];\nexport default api;\n","import api from '../../api.js';\n\nexport const RangeSelector = {\n RANGE: api.internals.ns.selector('range'),\n RANGE_SM: api.internals.ns.selector('range--sm'),\n RANGE_STEP: api.internals.ns.selector('range--step'),\n RANGE_DOUBLE: api.internals.ns.selector('range--double'),\n RANGE_DOUBLE_STEP: api.internals.ns.selector('range--double') + api.internals.ns.selector('range--step'),\n RANGE_INPUT: api.internals.ns.selector('range input[type=range]:nth-of-type(1)'),\n RANGE_INPUT2: `${api.internals.ns.selector('range--double')} input[type=range]:nth-of-type(2)`,\n RANGE_OUTPUT: api.internals.ns.selector('range__output'),\n RANGE_MIN: api.internals.ns.selector('range__min'),\n RANGE_MAX: api.internals.ns.selector('range__max'),\n RANGE_PREFIX: api.internals.ns.attr('prefix'),\n RANGE_SUFFIX: api.internals.ns.attr('suffix')\n};\n","import api from '../../api.js';\n\nexport const RangeEmission = {\n VALUE: api.internals.ns.emission('range', 'value'),\n VALUE2: api.internals.ns.emission('range', 'value2'),\n OUTPUT: api.internals.ns.emission('range', 'output'),\n CONSTRAINTS: api.internals.ns.emission('range', 'constraints'),\n MIN: api.internals.ns.emission('range', 'min'),\n MAX: api.internals.ns.emission('range', 'max'),\n STEP: api.internals.ns.emission('range', 'step'),\n PREFIX: api.internals.ns.emission('range', 'prefix'),\n SUFFIX: api.internals.ns.emission('range', 'suffix'),\n DISABLED: api.internals.ns.emission('range', 'disabled'),\n ENABLE_POINTER: api.internals.ns.emission('range', 'enable_pointer')\n};\n","class RangeModel {\n constructor () {\n this._width = 0;\n this._min = 0;\n this._max = 0;\n this._value = 0;\n this._thumbSize = 24;\n this._innerWidth = 0;\n this._prefix = '';\n this._suffix = '';\n this._background = {};\n }\n\n configure (model) {\n if (!model) return;\n this._prefix = model._prefix;\n this._suffix = model._suffix;\n this._width = model.width;\n this.setConstraints(model._constraints);\n this.value = model.value;\n this.update();\n }\n\n setPrefix (value) {\n this._prefix = value !== null ? value : '';\n }\n\n setSuffix (value) {\n this._suffix = value !== null ? value : '';\n }\n\n _decorate (value) {\n return `${this._prefix}${value}${this._suffix}`;\n }\n\n get width () {\n return this._width;\n }\n\n set width (value) {\n this._width = value;\n }\n\n get isSm () {\n return this._isSm;\n }\n\n set isSm (value) {\n if (this._isSm === value) return;\n this._isSm = value;\n this.setThumbSize(value ? 16 : 24);\n this.update();\n }\n\n setThumbSize (value, mult = 1) {\n this._thumbSize = value;\n this._innerPadding = value * mult;\n }\n\n get textValue () {\n return this._decorate(this._value);\n }\n\n get value () {\n return this._value;\n }\n\n set value (value) {\n this._value = value;\n }\n\n get outputX () {\n return this._outputX;\n }\n\n setConstraints (constraints) {\n this._constraints = constraints;\n this._min = constraints.min;\n this._max = constraints.max;\n this._step = constraints.step;\n this._rangeWidth = constraints.rangeWidth;\n }\n\n get min () {\n return this._min;\n }\n\n get textMin () {\n return this._decorate(this._min);\n }\n\n get max () {\n return this._max;\n }\n\n get textMax () {\n return this._decorate(this._max);\n }\n\n get step () {\n return this._step;\n }\n\n get output () {\n return {\n text: this.textValue,\n transform: `translateX(${this._translateX}px) translateX(-${this._centerPercent}%)`\n };\n }\n\n _getRatio (value) {\n return (value - this._min) / this._rangeWidth;\n }\n\n get progress () {\n return this._progress;\n }\n\n update () {\n this._update();\n }\n\n _update () {\n this._innerWidth = this._width - this._innerPadding;\n const ratio = this._getRatio(this._value);\n this._translateX = ratio * this._width;\n this._centerPercent = ratio * 100;\n this._progress = {\n right: `${(this._innerWidth * ratio + this._innerPadding * 0.5).toFixed(2)}px`\n };\n }\n}\n\nclass RangeModelStep extends RangeModel {\n get stepWidth () {\n return `${this._stepWidth.toFixed(3)}px`;\n }\n\n _update () {\n super._update();\n const steps = this._rangeWidth / this._step;\n this._stepWidth = this._innerWidth / steps;\n while (this._stepWidth < 4) this._stepWidth *= 2;\n }\n}\n\nclass RangeModelDouble extends RangeModel {\n get value2 () {\n return this._value;\n }\n\n set value2 (value) {\n if (this._value2 === value) return;\n this._value2 = value;\n this.update();\n }\n\n get textValue () {\n return `${this._decorate(this._value)} - ${this._decorate(this._value2)}`;\n }\n\n setThumbSize (value) {\n super.setThumbSize(value, 2);\n }\n\n _update () {\n super._update();\n const ratio = this._getRatio((this._value + this._value2) * 0.5);\n this._translateX = ratio * this._width;\n this._centerPercent = ratio * 100;\n const ratio1 = this._getRatio(this._value);\n const ratio2 = this._getRatio(this._value2);\n this._progress = {\n left: `${(this._innerWidth * ratio1 + this._innerPadding * 0.25).toFixed(2)}px`,\n right: `${(this._innerWidth * ratio2 + this._innerPadding * 0.75).toFixed(2)}px`\n };\n }\n}\n\nclass RangeModelDoubleStep extends RangeModelDouble {\n get stepWidth () {\n return `${this._stepWidth.toFixed(3)}px`;\n }\n\n _update () {\n super._update();\n const steps = this._rangeWidth / this._step;\n this._stepWidth = this._innerWidth / steps;\n if (this._stepWidth < 4) this._stepWidth *= Math.ceil(4 / this._stepWidth);\n }\n}\n\nexport { RangeModel, RangeModelStep, RangeModelDouble, RangeModelDoubleStep };\n","import api from '../../api.js';\nimport { RangeEmission } from './range-emission.js';\nimport { RangeSelector } from './range-selector.js';\nimport { RangeModel, RangeModelStep, RangeModelDouble, RangeModelDoubleStep } from './range-model';\n\nconst RangeTypes = {\n STEP: 'step',\n DOUBLE: 'double',\n DOUBLE_STEP: 'double-step',\n DEFAULT: 'default'\n};\n\nclass Range extends api.core.Instance {\n static get instanceClassName () {\n return 'Range';\n }\n\n init () {\n this._retrieveType();\n this._retrieveSize();\n if (this.isLegacy) {\n this.isResizing = true;\n this.isMouseMoving = true;\n } else {\n this._observer = new ResizeObserver(this.resize.bind(this));\n this._observer.observe(this.node);\n }\n\n this.addAscent(RangeEmission.CONSTRAINTS, this.setConstraints.bind(this));\n this.addAscent(RangeEmission.VALUE, this.setValue.bind(this));\n this.addAscent(RangeEmission.VALUE2, this.setValue2.bind(this));\n if (this.getAttribute(RangeSelector.RANGE_PREFIX)) this.setPrefix(this.getAttribute(RangeSelector.RANGE_PREFIX));\n if (this.getAttribute(RangeSelector.RANGE_SUFFIX)) this.setSuffix(this.getAttribute(RangeSelector.RANGE_SUFFIX));\n this.update();\n }\n\n _retrieveType () {\n switch (true) {\n case this.matches(RangeSelector.RANGE_DOUBLE_STEP):\n this.type = RangeTypes.DOUBLE;\n break;\n\n case this.matches(RangeSelector.RANGE_DOUBLE):\n this.type = RangeTypes.DOUBLE;\n break;\n\n case this.matches(RangeSelector.RANGE_STEP):\n this.type = RangeTypes.STEP;\n break;\n\n default:\n this.type = RangeTypes.DEFAULT;\n }\n }\n\n set type (value) {\n if (this._type === value) return;\n this._type = value;\n\n const oldModel = this._model;\n\n switch (this._type) {\n case RangeTypes.DOUBLE_STEP:\n this._model = new RangeModelDoubleStep();\n break;\n\n case RangeTypes.DOUBLE:\n this._model = new RangeModelDouble();\n break;\n\n case RangeTypes.STEP:\n this._model = new RangeModelStep();\n break;\n\n default:\n this._model = new RangeModel();\n }\n\n this._model.configure(oldModel);\n }\n\n get type () {\n return this._type;\n }\n\n _retrieveSize () {\n this._model.isSm = this.matches(RangeSelector.RANGE_SM);\n }\n\n resize () {\n this._retrieveWidth();\n this.update();\n }\n\n _retrieveWidth () {\n this._model.width = this.getRect().width;\n }\n\n setValue (value) {\n this._model.value = value;\n switch (this._type) {\n case RangeTypes.DOUBLE_STEP:\n case RangeTypes.DOUBLE:\n this.descend(RangeEmission.VALUE, value);\n break;\n }\n this.update();\n }\n\n setValue2 (value) {\n this._model.value2 = value;\n this.descend(RangeEmission.VALUE2, value);\n this.update();\n }\n\n setConstraints (constraints) {\n this._model.setConstraints(constraints);\n this.update();\n this.descend(RangeEmission.CONSTRAINTS, constraints);\n }\n\n setPrefix (value) {\n this._model.setPrefix(value);\n this.update();\n }\n\n setSuffix (value) {\n this._model.setSuffix(value);\n this.update();\n }\n\n mutate (attributesNames) {\n switch (true) {\n case attributesNames.includes('class'):\n this._retrieveType();\n this._retrieveSize();\n break;\n\n case attributesNames.includes(RangeSelector.RANGE_PREFIX):\n case attributesNames.includes(RangeSelector.RANGE_SUFFIX):\n this._model.setPrefix(this.getAttribute(RangeSelector.RANGE_PREFIX));\n this._model.setSuffix(this.getAttribute(RangeSelector.RANGE_SUFFIX));\n this.update();\n break;\n }\n }\n\n update () {\n this._model.update();\n this.descend(RangeEmission.OUTPUT, this._model.output);\n this.descend(RangeEmission.MIN, this._model.textMin);\n this.descend(RangeEmission.MAX, this._model.textMax);\n const progress = this._model.progress;\n if (progress.left) {\n this.style.setProperty('--progress-left', progress.left);\n } else {\n this.style.removeProperty('--progress-left');\n }\n if (progress.right) {\n this.style.setProperty('--progress-right', progress.right);\n if (this.isLegacy) {\n if (progress.left) {\n this.style.setProperty('background-position-x', progress.left);\n this.style.setProperty('background-size', `${parseFloat(progress.right) - parseFloat(progress.left)}px ${this._model.isSm ? '8px' : '12px'}`);\n }\n }\n } else {\n this.style.removeProperty('--progress-right');\n if (this.isLegacy) {\n this.style.removeProperty('background-size');\n this.style.removeProperty('background-position-x');\n }\n }\n if (this._model.stepWidth) this.style.setProperty('--step-width', this._model.stepWidth);\n else this.style.removeProperty('--step-width');\n }\n\n mouseMove (point) {\n if (this._type !== RangeTypes.DOUBLE && this._type !== RangeTypes.DOUBLE_STEP) return;\n const x = point.x - this.getRect().left;\n this.descend(RangeEmission.ENABLE_POINTER, (parseFloat(this._model.progress.right) - parseFloat(this._model.progress.left)) / 2 + parseFloat(this._model.progress.left) < x ? 2 : 1);\n }\n\n dispose () {\n this._observer.disconnect();\n }\n}\n\nexport { Range };\n","class RangeConstraints {\n constructor (node) {\n this._min = isNaN(node.min) ? 0 : node.min;\n this._max = isNaN(node.max) ? 100 : node.max;\n this._step = isNaN(node.step) ? 1 : node.step;\n this._rangeWidth = this._max - this._min;\n }\n\n get min () {\n return this._min;\n }\n\n get max () {\n return this._max;\n }\n\n get step () {\n return this._step;\n }\n\n get rangeWidth () {\n return this._rangeWidth;\n }\n\n test (min, max, step) {\n return this._min === min && this._max === max && this._step === step;\n }\n}\n\nexport { RangeConstraints };\n","import api from '../../api.js';\nimport { RangeEmission } from './range-emission.js';\nimport { RangeConstraints } from './range-constraints';\n\nclass RangeInput extends api.core.Instance {\n static get instanceClassName () {\n return 'RangeInput';\n }\n\n init () {\n this._init();\n this.node.value = this.getAttribute('value');\n this._changing = this.change.bind(this);\n this._listenerType = this.isLegacy ? 'change' : 'input';\n this.listen(this._listenerType, this._changing);\n if (this.isLegacy) this.addDescent(RangeEmission.ENABLE_POINTER, this._enablePointer.bind(this));\n this.change();\n }\n\n _init () {\n this._pointerId = 1;\n this.request(() => {\n if (!this.hasAttribute('min')) this.setAttribute('min', 0);\n this.ascend(RangeEmission.CONSTRAINTS, new RangeConstraints(this.node));\n this.ascend(RangeEmission.DISABLED, this.node.disabled);\n });\n\n this.addDescent(RangeEmission.VALUE2, this.setValue.bind(this));\n }\n\n _enablePointer (pointerId) {\n const isEnabled = pointerId === this._pointerId;\n if (this._isPointerEnabled === isEnabled) return;\n this._isPointerEnabled = isEnabled;\n if (isEnabled) this.style.removeProperty('pointer-events');\n else this.style.setProperty('pointer-events', 'none');\n }\n\n setValue (value) {\n if (parseFloat(this.node.value) > value) {\n this.node.value = value;\n this.change();\n }\n }\n\n change () {\n this.ascend(RangeEmission.VALUE, parseFloat(this.node.value));\n }\n\n mutate (attributesNames) {\n if (attributesNames.includes('disabled')) this.ascend(RangeEmission.DISABLED, this.node.disabled);\n if (attributesNames.includes('min') || attributesNames.includes('max') || attributesNames.includes('step')) {\n this.ascend(RangeEmission.CONSTRAINTS, new RangeConstraints(this.node));\n this.change();\n }\n }\n\n dispose () {\n if (this._listenerType) this.unlisten(this._listenerType, this._changing);\n }\n}\n\nexport { RangeInput };\n","import api from '../../../api';\nimport { RangeEmission } from './range-emission.js';\n\nclass RangeOutput extends api.core.Instance {\n static get instanceClassName () {\n return 'RangeOutput';\n }\n\n init () {\n this.addDescent(RangeEmission.OUTPUT, this.change.bind(this));\n }\n\n change (data) {\n this.node.innerText = data.text;\n this.node.style.transform = data.transform;\n }\n}\n\nexport { RangeOutput };\n","import api from '../../../api';\nimport { RangeEmission } from './range-emission.js';\nimport { RangeSelector } from './range-selector.js';\n\nclass RangeLimit extends api.core.Instance {\n static get instanceClassName () {\n return 'RangeLimit';\n }\n\n init () {\n switch (true) {\n case this.matches(RangeSelector.RANGE_MIN):\n this.addDescent(RangeEmission.MIN, this.change.bind(this));\n break;\n\n case this.matches(RangeSelector.RANGE_MAX):\n this.addDescent(RangeEmission.MAX, this.change.bind(this));\n break;\n }\n }\n\n change (text) {\n this.node.innerText = text;\n }\n}\n\nexport { RangeLimit };\n","import api from './api.js';\nimport { RangeSelector } from './script/range/range-selector.js';\nimport { RangeEmission } from './script/range/range-emission.js';\nimport { Range } from './script/range/range.js';\nimport { RangeInput } from './script/range/range-input.js';\nimport { RangeInput2 } from './script/range/range-input2.js';\nimport { RangeOutput } from './script/range/range-output.js';\nimport { RangeLimit } from './script/range/range-limit.js';\n\napi.range = {\n Range: Range,\n RangeInput: RangeInput,\n RangeInput2: RangeInput2,\n RangeOutput: RangeOutput,\n RangeLimit: RangeLimit,\n RangeEmission: RangeEmission,\n RangeSelector: RangeSelector\n};\n\nexport default api;\n","import { RangeInput } from './range-input.js';\nimport { RangeEmission } from './range-emission';\n\nclass RangeInput2 extends RangeInput {\n static get instanceClassName () {\n return 'RangeInput2';\n }\n\n _init () {\n this._pointerId = 2;\n this.addDescent(RangeEmission.CONSTRAINTS, this.setConstraints.bind(this));\n this.addDescent(RangeEmission.VALUE, this.setValue.bind(this));\n }\n\n setValue (value) {\n if (parseFloat(this.node.value) < value) {\n this.node.value = value;\n this.change();\n }\n }\n\n change () {\n this.ascend(RangeEmission.VALUE2, parseFloat(this.node.value));\n }\n\n setConstraints (constraints) {\n this.node.min = constraints.min;\n this.node.max = constraints.max;\n this.node.step = constraints.step;\n this.change();\n }\n\n mutate (attributesNames) {}\n}\n\nexport { RangeInput2 };\n","import api from './index.js';\n\napi.internals.register(api.range.RangeSelector.RANGE, api.range.Range);\napi.internals.register(api.range.RangeSelector.RANGE_INPUT, api.range.RangeInput);\napi.internals.register(api.range.RangeSelector.RANGE_INPUT2, api.range.RangeInput2);\napi.internals.register(api.range.RangeSelector.RANGE_OUTPUT, api.range.RangeOutput);\napi.internals.register(api.range.RangeSelector.RANGE_MIN, api.range.RangeLimit);\napi.internals.register(api.range.RangeSelector.RANGE_MAX, api.range.RangeLimit);\n\nexport default api;\n"],"names":["api","window","RangeSelector","RANGE","internals","ns","selector","RANGE_SM","RANGE_STEP","RANGE_DOUBLE","RANGE_DOUBLE_STEP","RANGE_INPUT","RANGE_INPUT2","RANGE_OUTPUT","RANGE_MIN","RANGE_MAX","RANGE_PREFIX","attr","RANGE_SUFFIX","RangeEmission","VALUE","emission","VALUE2","OUTPUT","CONSTRAINTS","MIN","MAX","STEP","PREFIX","SUFFIX","DISABLED","ENABLE_POINTER","RangeModel","constructor","this","_width","_min","_max","_value","_thumbSize","_innerWidth","_prefix","_suffix","_background","configure","model","width","setConstraints","_constraints","value","update","setPrefix","setSuffix","_decorate","isSm","_isSm","setThumbSize","mult","_innerPadding","textValue","outputX","_outputX","constraints","min","max","_step","step","_rangeWidth","rangeWidth","textMin","textMax","output","text","transform","_translateX","_centerPercent","_getRatio","progress","_progress","_update","ratio","right","toFixed","RangeModelStep","stepWidth","_stepWidth","super","steps","RangeModelDouble","value2","_value2","ratio1","ratio2","left","RangeModelDoubleStep","Math","ceil","RangeTypes","Range","core","Instance","instanceClassName","init","_retrieveType","_retrieveSize","isLegacy","isResizing","isMouseMoving","_observer","ResizeObserver","resize","bind","observe","node","addAscent","setValue","setValue2","getAttribute","matches","type","_type","oldModel","_model","_retrieveWidth","getRect","descend","mutate","attributesNames","includes","style","setProperty","removeProperty","parseFloat","mouseMove","point","x","dispose","disconnect","RangeConstraints","isNaN","test","RangeInput","_init","_changing","change","_listenerType","listen","addDescent","_enablePointer","_pointerId","request","hasAttribute","setAttribute","ascend","disabled","pointerId","isEnabled","_isPointerEnabled","unlisten","RangeOutput","data","innerText","RangeLimit","range","RangeInput2","register"],"mappings":"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"}