{"version":3,"file":"Collapsible-0425bd0b-C0PEJ6Hv.js","sources":["../../../node_modules/@trv-tds/react/node_modules/@trv-tds/webcomponents/dist/esm/Collapsible-0425bd0b.js"],"sourcesContent":["import { g as getTargetElements, r as runAnimation } from './animations-bdc8e492.js';\nimport { c as createCustomEvent } from './customEvent-11ac0ffa.js';\nimport { c as configFromDataAttributes } from './helpers-01739d22.js';\n\nconst TRIGGER_TARGET_ATTRIBUTE = 'data-toggle-collapse';\nconst TRIGGER_SELECTOR = `[${TRIGGER_TARGET_ATTRIBUTE}]`;\nconst inTransition = new WeakMap();\nconst durations = {\n 'fast': '200ms',\n 'medium-fast': '300ms',\n 'medium': '400ms',\n 'medium-slow': '600ms',\n 'slow': '1s'\n};\nconst events = {\n collapsing: 'tdsCollapsing',\n collapsed: 'tdsCollapsed',\n expanding: 'tdsExpanding',\n expanded: 'tdsExpanded'\n};\nconst defaultDuration = 'medium-fast';\nconst defaultConfig = {\n collapsibleDuration: defaultDuration,\n collapsibleNoOpacity: false\n};\nclass Collapsible {\n constructor(el, config) {\n this._config = defaultConfig;\n this.el = el;\n this.setConfig(configFromDataAttributes(el));\n if (config) {\n this.setConfig(config);\n }\n }\n setConfig(config) {\n this._config = { ...this._config, ...config };\n }\n toggle(trigger) {\n return doToggle(this, !this.isShown(), trigger);\n }\n show(trigger = null) {\n return doToggle(this, true, trigger);\n }\n hide(trigger = null) {\n return doToggle(this, false, trigger);\n }\n isShown() {\n const { el } = this;\n return el ? inTransition.get(el)?.expanding ?? !el.hidden : false;\n }\n get transitioning() {\n return !!inTransition.get(this.el);\n }\n}\nfunction getTriggers(el) {\n const allTriggers = document.querySelectorAll(TRIGGER_SELECTOR);\n return Array.prototype.filter.call(allTriggers, (trigger) => {\n const elements = getTargetElements(trigger, TRIGGER_TARGET_ATTRIBUTE);\n try {\n return elements.indexOf(el) > -1;\n }\n catch {\n /* istanbul ignore next */\n return false;\n }\n });\n}\nfunction doToggle(collapsible, expand, trigger) {\n const eventStart = expand ? events.expanding : events.collapsing;\n const action = expand ? 'expand' : 'collapse';\n let ret = true;\n if (collapsible.isShown() !== expand) {\n collapsible._triggerBy = trigger;\n if (ret = fireEvent(collapsible, eventStart)) {\n toggleCollapsible(collapsible, action);\n }\n }\n return ret;\n}\nfunction fireEvent(collapsible, type) {\n const trigger = collapsible._triggerBy;\n const event = createCustomEvent(type, {\n cancelable: type === events.expanding || type === events.collapsing,\n detail: {\n collapsible,\n trigger\n }\n });\n return collapsible.el.dispatchEvent(event);\n}\nfunction toggleCollapsible(collapsible, action) {\n const { el, _config } = collapsible;\n const transitioning = inTransition.get(collapsible.el);\n if (transitioning) {\n inTransition.set(el, { ...transitioning, reverse: true });\n return;\n }\n setTriggerAria(collapsible, action === 'expand');\n const show = action !== 'collapse';\n const includeOpacity = !_config.collapsibleNoOpacity;\n const { collapsibleDuration } = _config;\n const duration = prefersReducedMotion() ? 0 : durationToMilliseconds(collapsibleDuration);\n // if duration is 0, (immediate) do not change height but still fade in/fade out\n const opacityDuration = !includeOpacity ? 0 :\n duration ? (show ? duration : Math.ceil(duration * 1.5)) : 200;\n const computedStyles = window.getComputedStyle(el);\n // window.getComputedStyle returns a live object. Save current settings before\n // updates are applied \n const savedStyles = {\n paddingTop: computedStyles.paddingTop,\n paddingBottom: computedStyles.paddingBottom,\n borderTopWidth: computedStyles.borderTopWidth,\n borderBottomWidth: computedStyles.borderBottomWidth,\n opacity: computedStyles.opacity\n };\n const savedStyleAttr = el.getAttribute('style');\n const borderTop = savedStyles.borderTopWidth ? parseInt(savedStyles.borderTopWidth) : 0;\n const borderBottom = savedStyles.borderBottomWidth ? parseInt(savedStyles.borderBottomWidth) : 0;\n const styleHeight = el.style.height;\n inTransition.set(el, {\n expanding: show,\n reverse: false\n });\n const prep = () => {\n el.style.overflow = 'hidden';\n el.style.transitionProperty = 'all, opacity';\n el.style.transitionTimingFunction = 'ease';\n el.style.visibility = 'visible';\n if (show) {\n el.style.height = '0';\n el.style.paddingTop = '0';\n el.style.paddingBottom = '0';\n el.style.borderTopWidth = '0';\n el.style.borderBottomWidth = '0';\n if (includeOpacity) {\n el.style.opacity = '0';\n }\n el.hidden = false;\n }\n else {\n el.style.height = `${el.offsetHeight}px`;\n }\n };\n const set = () => {\n el.style.transitionDuration = `${duration}ms, ${opacityDuration}ms`;\n if (show) {\n const paddingTop = savedStyles.paddingTop ? parseInt(savedStyles.paddingTop) : 0;\n const paddingBottom = savedStyles.paddingBottom ? parseInt(savedStyles.paddingBottom) : 0;\n const addedHeight = paddingTop + paddingBottom + borderTop + borderBottom;\n const height = el.scrollHeight + addedHeight;\n el.style.height = styleHeight || (`${height}px`);\n el.style.paddingTop = savedStyles.paddingTop;\n el.style.paddingBottom = savedStyles.paddingBottom;\n el.style.borderTopWidth = savedStyles.borderTopWidth;\n el.style.borderBottomWidth = savedStyles.borderBottomWidth;\n if (includeOpacity) {\n el.style.opacity = savedStyles.opacity;\n }\n }\n else {\n el.style.height =\n el.style.paddingTop =\n el.style.paddingBottom =\n el.style.borderTopWidth =\n el.style.borderBottomWidth = duration ? '0' : '';\n if (includeOpacity) {\n el.style.opacity = '0';\n }\n }\n };\n const complete = () => {\n if (!show) {\n el.hidden = true;\n }\n if (savedStyleAttr) {\n el.setAttribute('style', savedStyleAttr);\n }\n else {\n el.removeAttribute('style');\n }\n const reverse = inTransition.get(el)?.reverse;\n inTransition.delete(el);\n const eventEnd = show ? events.expanded : events.collapsed;\n fireEvent(collapsible, eventEnd);\n if (reverse) {\n toggleCollapsible(collapsible, show ? 'collapse' : 'expand');\n }\n };\n const maxDuration = Math.max(duration, opacityDuration);\n if (maxDuration) {\n runAnimation(el, maxDuration, { prep, set, complete }, 'height');\n }\n else {\n // skip animation\n el.hidden = !show;\n complete();\n }\n}\nfunction setTriggerAria(collapsible, show) {\n const { _triggerBy } = collapsible;\n const triggers = getTriggers(collapsible.el);\n if (_triggerBy && triggers.indexOf(_triggerBy) === -1) {\n triggers.push(_triggerBy);\n }\n triggers.forEach(trigger => {\n trigger.setAttribute('aria-expanded', `${show}`);\n });\n}\nfunction durationToMilliseconds(collapsibleDuration) {\n // convert duration to ms to simply toggle logic\n let duration = collapsibleDuration;\n if (typeof collapsibleDuration === 'string') {\n const match = /^(\\d*\\.?\\d*)(s|ms)?$/.exec(durations[collapsibleDuration] || collapsibleDuration);\n if (match) {\n duration = parseFloat(match[1]);\n if (match[2] === 's') {\n duration *= 1000;\n }\n }\n else {\n duration = durationToMilliseconds(durations[defaultDuration]);\n }\n }\n return duration;\n}\nlet prefersReducedMotionResult = undefined;\nfunction prefersReducedMotion() {\n if (typeof prefersReducedMotionResult === 'undefined') {\n prefersReducedMotionResult = typeof window.matchMedia !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n }\n return prefersReducedMotionResult;\n}\n/**\n * If an application uses both Core and web components (like the doc site), this logic is called twice because this code\n * is also compiled into the web components library. When this happens, the two event handlers cancel each other breaking\n * collapsible implementation using data configuration. To prevent this from happening, we set a flag on the document object.\n * This is the simlest fix for now. In our next major version, we will consider a better way of preventing this duplicate\n * code overall. For instance, perhaps make @trv-tds/webcomponents dependent on @trv-tds/core.\n *\n * The reason this has not come up before V8 is that it required an application to use both Core and Web Components that use Collapsible and implementing\n * the data attribute configuration. With V8, the navigation is now the web component which uses Collpasible so the problem presents immediately\n */\nif (typeof document !== 'undefined' && !document.__tdsCollapsibleRegistered) {\n document.__tdsCollapsibleRegistered = true;\n document.addEventListener('click', (e) => {\n const target = e.target;\n const trigger = target.closest(TRIGGER_SELECTOR);\n const elements = trigger && getTargetElements(trigger, TRIGGER_TARGET_ATTRIBUTE);\n if (elements && elements.length) {\n elements.forEach((el) => {\n new Collapsible(el).toggle(trigger);\n });\n if (trigger.matches('a, area')) {\n e.preventDefault();\n }\n }\n });\n}\n\nexport { Collapsible as C };\n\n//# sourceMappingURL=Collapsible-0425bd0b.js.map"],"names":["TRIGGER_TARGET_ATTRIBUTE","TRIGGER_SELECTOR","inTransition","durations","events","defaultDuration","defaultConfig","Collapsible","el","config","configFromDataAttributes","trigger","doToggle","_a","getTriggers","allTriggers","elements","getTargetElements","collapsible","expand","eventStart","action","ret","fireEvent","toggleCollapsible","type","event","createCustomEvent","_config","transitioning","setTriggerAria","show","includeOpacity","collapsibleDuration","duration","prefersReducedMotion","durationToMilliseconds","opacityDuration","computedStyles","savedStyles","savedStyleAttr","borderTop","borderBottom","styleHeight","prep","set","paddingTop","paddingBottom","addedHeight","height","complete","reverse","eventEnd","maxDuration","runAnimation","_triggerBy","triggers","match","prefersReducedMotionResult","e"],"mappings":"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","x_google_ignoreList":[0]}