{"version":3,"file":"tab.module.min.js","sources":["../../../.config/config.js","../../../src/core/api.js","../../../src/component/tab/script/tab/tab-button.js","../../../src/component/tab/script/tab/tab-selector.js","../../../src/component/tab/script/tab/tab-panel-direction.js","../../../src/component/tab/script/tab/tab-panel.js","../../../src/component/tab/script/tab/tab-keys.js","../../../src/component/tab/script/tab/tab-emission.js","../../../src/component/tab/script/tab/tabs-group.js","../../../src/component/tab/script/tab/tabs-list.js","../../../src/component/tab/index.js","../../../src/component/tab/main.js"],"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\n/**\n * TabButton correspond au bouton cliquable qui change le panel\n * TabButton étend de DisclosureButton qui ajoute/enelve l'attribut aria-selected,\n * Et change l'attributte tabindex a 0 si le boutton est actif (value=true), -1 s'il n'est pas actif (value=false)\n */\nclass TabButton extends api.core.DisclosureButton {\n constructor () {\n super(api.core.DisclosureType.SELECT);\n }\n\n static get instanceClassName () {\n return 'TabButton';\n }\n\n handleClick (e) {\n super.handleClick(e);\n this.focus();\n }\n\n apply (value) {\n super.apply(value);\n if (this.isPrimary) {\n this.setAttribute('tabindex', value ? '0' : '-1');\n if (value) {\n if (this.list) this.list.focalize(this);\n }\n }\n }\n\n get list () {\n return this.element.getAscendantInstance('TabsList', 'TabsGroup');\n }\n}\n\nexport { TabButton };\n","import api from '../../api.js';\n\nexport const TabSelector = {\n TAB: api.internals.ns.selector('tabs__tab'),\n GROUP: api.internals.ns.selector('tabs'),\n PANEL: api.internals.ns.selector('tabs__panel'),\n LIST: api.internals.ns.selector('tabs__list'),\n SHADOW: api.internals.ns.selector('tabs__shadow'),\n SHADOW_LEFT: api.internals.ns.selector('tabs__shadow--left'),\n SHADOW_RIGHT: api.internals.ns.selector('tabs__shadow--right'),\n PANEL_START: api.internals.ns.selector('tabs__panel--direction-start'),\n PANEL_END: api.internals.ns.selector('tabs__panel--direction-end')\n};\n","export const TabPanelDirection = {\n START: 'direction-start',\n END: 'direction-end',\n NONE: 'none'\n};\n","import api from '../../api.js';\nimport { TabButton } from './tab-button.js';\nimport { TabSelector } from './tab-selector.js';\nimport { TabPanelDirection } from './tab-panel-direction.js';\n\n/**\n * Tab coorespond au panel d'un élement Tabs (tab panel)\n * Tab étend disclosure qui ajoute/enleve le modifier --selected,\n * et ajoute/eleve l'attribut hidden, sur le panel\n */\nclass TabPanel extends api.core.Disclosure {\n constructor () {\n super(api.core.DisclosureType.SELECT, TabSelector.PANEL, TabButton, 'TabsGroup');\n this._direction = TabPanelDirection.NONE;\n this._isPreventingTransition = false;\n }\n\n static get instanceClassName () {\n return 'TabPanel';\n }\n\n get direction () {\n return this._direction;\n }\n\n set direction (value) {\n if (value === this._direction) return;\n switch (this._direction) {\n case TabPanelDirection.START:\n this.removeClass(TabSelector.PANEL_START);\n break;\n\n case TabPanelDirection.END:\n this.removeClass(TabSelector.PANEL_END);\n break;\n\n case TabPanelDirection.NONE:\n break;\n\n default:\n return;\n }\n\n this._direction = value;\n\n switch (this._direction) {\n case TabPanelDirection.START:\n this.addClass(TabSelector.PANEL_START);\n break;\n\n case TabPanelDirection.END:\n this.addClass(TabSelector.PANEL_END);\n break;\n }\n }\n\n get isPreventingTransition () {\n return this._isPreventingTransition;\n }\n\n set isPreventingTransition (value) {\n if (this._isPreventingTransition === value) return;\n if (value) this.addClass(api.internals.motion.TransitionSelector.NONE);\n else this.removeClass(api.internals.motion.TransitionSelector.NONE);\n this._isPreventingTransition = value === true;\n }\n\n translate (direction, initial) {\n this.isPreventingTransition = initial;\n this.direction = direction;\n }\n\n reset () {\n if (this.group) this.group.retrieve(true);\n }\n\n _electPrimaries (candidates) {\n if (!this.group || !this.group.list) return [];\n return super._electPrimaries(candidates).filter(candidate => this.group.list.node.contains(candidate.node));\n }\n}\n\nexport { TabPanel };\n","export const TabKeys = {\n LEFT: 'tab_keys_left',\n RIGHT: 'tab_keys_right',\n HOME: 'tab_keys_home',\n END: 'tab_keys_end'\n};\n","import api from '../../api.js';\n\nexport const TabEmission = {\n PRESS_KEY: api.internals.ns.emission('tab', 'press_key'),\n LIST_HEIGHT: api.internals.ns.emission('tab', 'list_height')\n};\n","import api from '../../api.js';\nimport { TabPanelDirection } from './tab-panel-direction.js';\nimport { TabKeys } from './tab-keys';\nimport { TabEmission } from './tab-emission';\n\n/**\n* TabGroup est la classe étendue de DiscosuresGroup\n* Correspond à un objet Tabs avec plusieurs tab-button & Tab (panel)\n*/\nclass TabsGroup extends api.core.DisclosuresGroup {\n constructor () {\n super('TabPanel');\n }\n\n static get instanceClassName () {\n return 'TabsGroup';\n }\n\n init () {\n super.init();\n\n this.listen('transitionend', this.transitionend.bind(this));\n this.addAscent(TabEmission.PRESS_KEY, this.pressKey.bind(this));\n this.addAscent(TabEmission.LIST_HEIGHT, this.setListHeight.bind(this));\n this.isRendering = true;\n }\n\n getIndex (defaultIndex = 0) {\n super.getIndex(defaultIndex);\n }\n\n get list () {\n return this.element.getDescendantInstances('TabsList', 'TabsGroup', true)[0];\n }\n\n setListHeight (value) {\n this.listHeight = value;\n }\n\n transitionend (e) {\n this.isPreventingTransition = true;\n }\n\n get buttonHasFocus () {\n return this.members.some(member => member.buttonHasFocus);\n }\n\n pressKey (key) {\n switch (key) {\n case TabKeys.LEFT:\n this.pressLeft();\n break;\n\n case TabKeys.RIGHT:\n this.pressRight();\n break;\n\n case TabKeys.HOME:\n this.pressHome();\n break;\n\n case TabKeys.END:\n this.pressEnd();\n break;\n }\n }\n\n /**\n * Selectionne l'element suivant de la liste si on est sur un bouton\n * Si on est à la fin on retourne au début\n */\n pressRight () {\n if (this.buttonHasFocus) {\n if (this.index < this.length - 1) {\n this.index++;\n } else {\n this.index = 0;\n }\n\n this.focus();\n }\n };\n\n /**\n * Selectionne l'element précédent de la liste si on est sur un bouton\n * Si on est au debut retourne a la fin\n */\n pressLeft () {\n if (this.buttonHasFocus) {\n if (this.index > 0) {\n this.index--;\n } else {\n this.index = this.length - 1;\n }\n\n this.focus();\n }\n };\n\n /**\n * Selectionne le permier element de la liste si on est sur un bouton\n */\n pressHome () {\n if (this.buttonHasFocus) {\n this.index = 0;\n this.focus();\n }\n };\n\n /**\n * Selectionne le dernier element de la liste si on est sur un bouton\n */\n pressEnd () {\n if (this.buttonHasFocus) {\n this.index = this.length - 1;\n this.focus();\n }\n };\n\n focus () {\n if (this.current) {\n this.current.focus();\n }\n }\n\n apply () {\n for (let i = 0; i < this._index; i++) this.members[i].translate(TabPanelDirection.START);\n if (this.current) this.current.translate(TabPanelDirection.NONE);\n for (let i = this._index + 1; i < this.length; i++) this.members[i].translate(TabPanelDirection.END);\n this.isPreventingTransition = false;\n }\n\n get isPreventingTransition () {\n return this._isPreventingTransition;\n }\n\n set isPreventingTransition (value) {\n if (this._isPreventingTransition === value) return;\n if (value) this.addClass(api.internals.motion.TransitionSelector.NONE);\n else this.removeClass(api.internals.motion.TransitionSelector.NONE);\n this._isPreventingTransition = value === true;\n }\n\n render () {\n if (this.current === null) return;\n this.node.scrollTop = 0;\n this.node.scrollLeft = 0;\n const paneHeight = Math.round(this.current.node.offsetHeight);\n if (this.panelHeight === paneHeight) return;\n this.panelHeight = paneHeight;\n this.style.setProperty('--tabs-height', (this.panelHeight + this.listHeight) + 'px');\n }\n}\n\nexport { TabsGroup };\n","import api from '../../api.js';\nimport { TabSelector } from './tab-selector';\nimport { TabKeys } from './tab-keys';\nimport { TabEmission } from './tab-emission';\n\nconst FOCALIZE_OFFSET = 16;\nconst SCROLL_OFFSET = 16; // valeur en px du scroll avant laquelle le shadow s'active ou se desactive\n\nclass TabsList extends api.core.Instance {\n static get instanceClassName () {\n return 'TabsList';\n }\n\n init () {\n this.listen('scroll', this.scroll.bind(this));\n this.listenKey(api.core.KeyCodes.RIGHT, this.ascend.bind(this, TabEmission.PRESS_KEY, TabKeys.RIGHT), true, true);\n this.listenKey(api.core.KeyCodes.LEFT, this.ascend.bind(this, TabEmission.PRESS_KEY, TabKeys.LEFT), true, true);\n this.listenKey(api.core.KeyCodes.HOME, this.ascend.bind(this, TabEmission.PRESS_KEY, TabKeys.HOME), true, true);\n this.listenKey(api.core.KeyCodes.END, this.ascend.bind(this, TabEmission.PRESS_KEY, TabKeys.END), true, true);\n this.isResizing = true;\n }\n\n focalize (btn) {\n const btnRect = btn.getRect();\n const listRect = this.getRect();\n const actualScroll = this.node.scrollLeft;\n if (btnRect.left < listRect.left) this.node.scrollTo(actualScroll - listRect.left + btnRect.left - FOCALIZE_OFFSET, 0);\n else if (btnRect.right > listRect.right) this.node.scrollTo(actualScroll - listRect.right + btnRect.right + FOCALIZE_OFFSET, 0);\n }\n\n get isScrolling () {\n return this._isScrolling;\n }\n\n set isScrolling (value) {\n if (this._isScrolling === value) return;\n this._isScrolling = value;\n this.apply();\n }\n\n apply () {\n if (this._isScrolling) {\n this.addClass(TabSelector.SHADOW);\n this.scroll();\n } else {\n this.removeClass(TabSelector.SHADOW_RIGHT);\n this.removeClass(TabSelector.SHADOW_LEFT);\n this.removeClass(TabSelector.SHADOW);\n }\n }\n\n /* ajoute la classe fr-table__shadow-left ou fr-table__shadow-right sur fr-table en fonction d'une valeur de scroll et du sens (right, left) */\n scroll () {\n const scrollLeft = this.node.scrollLeft;\n const isMin = scrollLeft <= SCROLL_OFFSET;\n const max = this.node.scrollWidth - this.node.clientWidth - SCROLL_OFFSET;\n\n const isMax = Math.abs(scrollLeft) >= max;\n const isRtl = document.documentElement.getAttribute('dir') === 'rtl';\n const minSelector = isRtl ? TabSelector.SHADOW_RIGHT : TabSelector.SHADOW_LEFT;\n const maxSelector = isRtl ? TabSelector.SHADOW_LEFT : TabSelector.SHADOW_RIGHT;\n\n if (isMin) {\n this.removeClass(minSelector);\n } else {\n this.addClass(minSelector);\n }\n\n if (isMax) {\n this.removeClass(maxSelector);\n } else {\n this.addClass(maxSelector);\n }\n }\n\n resize () {\n this.isScrolling = this.node.scrollWidth > this.node.clientWidth + SCROLL_OFFSET;\n const height = this.getRect().height;\n this.setProperty('--tabs-list-height', `${height}px`);\n this.ascend(TabEmission.LIST_HEIGHT, height);\n }\n\n dispose () {\n this.isScrolling = false;\n }\n}\n\nexport { TabsList };\n","import api from './api.js';\nimport { TabPanel } from './script/tab/tab-panel.js';\nimport { TabButton } from './script/tab/tab-button.js';\nimport { TabsGroup } from './script/tab/tabs-group.js';\nimport { TabsList } from './script/tab/tabs-list.js';\nimport { TabSelector } from './script/tab/tab-selector.js';\nimport { TabEmission } from './script/tab/tab-emission.js';\n\napi.tab = {\n TabPanel: TabPanel,\n TabButton: TabButton,\n TabsGroup: TabsGroup,\n TabsList: TabsList,\n TabSelector: TabSelector,\n TabEmission: TabEmission\n};\n\nexport default api;\n","import api from './index.js';\n\napi.internals.register(api.tab.TabSelector.PANEL, api.tab.TabPanel);\napi.internals.register(api.tab.TabSelector.GROUP, api.tab.TabsGroup);\napi.internals.register(api.tab.TabSelector.LIST, api.tab.TabsList);\n\nexport default api;\n"],"names":["api","window","TabButton","core","DisclosureButton","constructor","super","DisclosureType","SELECT","instanceClassName","handleClick","e","this","focus","apply","value","isPrimary","setAttribute","list","focalize","element","getAscendantInstance","TabSelector","TAB","internals","ns","selector","GROUP","PANEL","LIST","SHADOW","SHADOW_LEFT","SHADOW_RIGHT","PANEL_START","PANEL_END","TabPanelDirection","TabPanel","Disclosure","_direction","_isPreventingTransition","direction","removeClass","addClass","isPreventingTransition","motion","TransitionSelector","NONE","translate","initial","reset","group","retrieve","_electPrimaries","candidates","filter","candidate","node","contains","TabKeys","TabEmission","PRESS_KEY","emission","LIST_HEIGHT","TabsGroup","DisclosuresGroup","init","listen","transitionend","bind","addAscent","pressKey","setListHeight","isRendering","getIndex","defaultIndex","getDescendantInstances","listHeight","buttonHasFocus","members","some","member","key","pressLeft","pressRight","pressHome","pressEnd","index","length","current","i","_index","render","scrollTop","scrollLeft","paneHeight","Math","round","offsetHeight","panelHeight","style","setProperty","TabsList","Instance","scroll","listenKey","KeyCodes","RIGHT","ascend","LEFT","HOME","END","isResizing","btn","btnRect","getRect","listRect","actualScroll","left","scrollTo","right","isScrolling","_isScrolling","isMin","max","scrollWidth","clientWidth","isMax","abs","isRtl","document","documentElement","getAttribute","minSelector","maxSelector","resize","height","dispose","tab","register"],"mappings":"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"}