{"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]}