{"version":3,"file":"components-slide-toggle.js","mappings":"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","sources":["webpack://silverstripe-base/./node_modules/slide-element/dist/index.es.js","webpack://silverstripe-base/./themes/app/src/scripts/common/slide.js","webpack://silverstripe-base/./themes/app/src/scripts/components/slide-toggle.js"],"sourcesContent":["const afterNextRepaint = (callback) => {\n return new Promise((resolve) => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n callback(resolve);\n });\n });\n });\n};\nlet defaultOptions = {\n easing: \"ease\",\n duration: 250,\n fill: \"backwards\",\n display: \"block\",\n overflow: \"hidden\"\n};\nlet nonAnimatableOptions = [\"overflow\", \"display\"];\nlet SlideController = (element, options) => {\n let mergedOptions = Object.assign({}, defaultOptions, options);\n let openDisplayValue = mergedOptions.display;\n let closedDisplayValue = \"none\";\n let setDisplay = (value) => element.style.display = value;\n let getHeight = () => element.clientHeight + \"px\";\n let getComputed = () => window.getComputedStyle(element);\n let setOverflow = (set) => element.style.overflow = set ? mergedOptions.overflow : \"\";\n let getAnimations = () => element.getAnimations();\n let createAnimation = (willOpen, lowerBound) => {\n var _a;\n nonAnimatableOptions.forEach((property) => delete mergedOptions[property]);\n let currentHeight = getHeight();\n let frames = [currentHeight, lowerBound].map((height) => ({\n height,\n paddingTop: \"0px\",\n paddingBottom: \"0px\"\n }));\n let { paddingTop, paddingBottom } = getComputed();\n frames[0].paddingTop = paddingTop;\n frames[0].paddingBottom = paddingBottom;\n if (willOpen) {\n frames[0].height = currentHeight;\n frames.reverse();\n }\n if ((_a = window.matchMedia(\"(prefers-reduced-motion: reduce)\")) == null ? void 0 : _a.matches) {\n mergedOptions.duration = 0;\n }\n let animation = element.animate(frames, mergedOptions);\n animation.id = (+willOpen).toString();\n return animation;\n };\n let triggerAnimation = async (willOpen) => {\n let finishedAnimations = getAnimations().map((a) => a.finish());\n await afterNextRepaint(async (resolve) => {\n let currentHeight = willOpen ? getHeight() : \"0px\";\n if (willOpen)\n setDisplay(openDisplayValue);\n setOverflow(true);\n await createAnimation(willOpen, currentHeight).finished;\n setOverflow(false);\n if (!willOpen)\n setDisplay(closedDisplayValue);\n resolve();\n });\n return finishedAnimations.length ? null : willOpen;\n };\n let up2 = async () => triggerAnimation(false);\n let down2 = async () => triggerAnimation(true);\n let toggle2 = async () => {\n var _a;\n let existingAnimationId = (_a = getAnimations()[0]) == null ? void 0 : _a.id;\n let condition = existingAnimationId ? existingAnimationId === \"1\" : element.offsetHeight;\n return (condition ? up2 : down2)();\n };\n return {\n up: up2,\n down: down2,\n toggle: toggle2\n };\n};\nlet down = (element, options = {}) => SlideController(element, options).down();\nlet up = (element, options = {}) => SlideController(element, options).up();\nlet toggle = (element, options = {}) => SlideController(element, options).toggle();\nexport {\n down,\n toggle,\n up\n};\n","import { up, down, toggle } from \"slide-element\";\n\nexport const slideUp = (element, duration = 400, display = \"block\", easing = \"ease-out\") => {\n element.classList.add(\"is-sliding\");\n\n const slide = up(element, {\n duration,\n display,\n easing,\n });\n\n slide.then(() => {\n element.classList.remove(\"is-sliding\");\n });\n\n return slide;\n};\n\nexport const slideDown = (element, duration = 400, display = \"block\", easing = \"ease-out\") => {\n element.classList.add(\"is-sliding\");\n\n const slide = down(element, {\n duration,\n display,\n easing,\n });\n\n slide.then(() => {\n element.classList.remove(\"is-sliding\");\n });\n\n return slide;\n};\n\nexport const slideToggle = (element, duration = 400, display = \"block\", easing = \"ease-out\") => {\n element.classList.add(\"is-sliding\");\n\n const slide = toggle(element, {\n duration,\n display,\n easing,\n });\n\n slide.then(() => {\n element.classList.remove(\"is-sliding\");\n });\n\n return slide;\n};\n","import \"@styles/components/slide-toggle.css\";\nimport { on, off, fire } from \"delegated-events\";\nimport { slideToggle } from \"@common/slide\";\n\nconst handleToggle = async (e) => {\n if (e.type === \"keyup\" && e.keyCode !== 13) {\n return;\n }\n\n if (e.target.closest(\"[data-scroll]\")) {\n return;\n }\n\n const trigger = e.target.closest(\"[data-slide-toggle]\");\n\n if (!trigger) {\n return;\n }\n\n const target = document.getElementById(trigger.getAttribute(\"aria-controls\"));\n\n if (!target) {\n return;\n }\n\n const otherTriggers = Array.from(\n document.querySelectorAll(`[data-slide-toggle][aria-controls=\"${trigger.getAttribute(\"aria-controls\")}\"]`),\n ).filter((x) => x !== trigger);\n\n if (trigger.getAttribute(\"aria-expanded\") === \"false\") {\n trigger.setAttribute(\"aria-expanded\", \"true\");\n otherTriggers.forEach((x) => x.setAttribute(\"aria-expanded\", \"true\"));\n\n const holder = trigger.closest(\"[data-slide-toggle-holder]\");\n\n if (holder) {\n holder.classList.add(\"is-active\");\n } else {\n trigger.parentNode.classList.add(\"is-active\");\n otherTriggers.forEach((x) => x.parentNode.classList.add(\"is-active\"));\n }\n\n await slideToggle(target);\n\n fire(document.documentElement, \"slidetoggle:open\", { trigger });\n } else {\n slideToggle(target);\n trigger.setAttribute(\"aria-expanded\", \"false\");\n otherTriggers.forEach((x) => x.setAttribute(\"aria-expanded\", \"false\"));\n\n const holder = trigger.closest(\"[data-slide-toggle-holder]\");\n\n if (holder) {\n holder.classList.remove(\"is-active\");\n } else {\n trigger.parentNode.classList.remove(\"is-active\");\n otherTriggers.forEach((x) => x.parentNode.classList.remove(\"is-active\"));\n }\n\n fire(document.documentElement, \"slidetoggle:close\", { trigger });\n }\n};\n\nconst handleOpenedDefault = () => {\n document.querySelectorAll(\"[data-slide-toggle-opened-default]\").forEach((el) => {\n const trigger = el.closest(\"[data-slide-toggle]\");\n const target = document.getElementById(trigger.getAttribute(\"aria-controls\"));\n\n if (trigger && target) {\n trigger.setAttribute(\"aria-expanded\", \"true\");\n target.classList.remove(\"hidden\");\n }\n });\n};\n\nexport default {\n init: () => {\n const clickArgs = [\"click\", \"[data-slide-toggle]\", handleToggle];\n\n off(...clickArgs);\n on(...clickArgs);\n\n handleOpenedDefault();\n },\n};\n"],"names":["defaultOptions","easing","duration","fill","display","overflow","nonAnimatableOptions","SlideController","element","options","mergedOptions","Object","assign","openDisplayValue","setDisplay","value","style","getHeight","clientHeight","setOverflow","set","getAnimations","triggerAnimation","async","willOpen","finishedAnimations","map","a","finish","callback","resolve","currentHeight","lowerBound","_a","forEach","property","frames","height","paddingTop","paddingBottom","window","getComputedStyle","reverse","matchMedia","matches","animation","animate","id","toString","createAnimation","finished","Promise","requestAnimationFrame","length","up2","down2","up","down","toggle","existingAnimationId","offsetHeight","slideUp","classList","add","slide","then","remove","slideDown","slideToggle","handleToggle","e","type","keyCode","target","closest","trigger","document","getElementById","getAttribute","otherTriggers","Array","from","querySelectorAll","filter","x","setAttribute","holder","parentNode","fire","documentElement","init","clickArgs","off","on","el"],"sourceRoot":""}