{"version":3,"sources":["webpack://slidetoggle/webpack/universalModuleDefinition","webpack://slidetoggle/webpack/bootstrap","webpack://slidetoggle/./src/utils/Numbers.ts","webpack://slidetoggle/./src/utils/Element.ts","webpack://slidetoggle/./src/utils/Event.ts","webpack://slidetoggle/webpack/runtime/define property getters","webpack://slidetoggle/webpack/runtime/hasOwnProperty shorthand","webpack://slidetoggle/webpack/runtime/make namespace object","webpack://slidetoggle/./src/utils/Animate.ts","webpack://slidetoggle/./src/common/hide.ts","webpack://slidetoggle/./src/common/show.ts","webpack://slidetoggle/./src/common/toggle.ts"],"names":["root","factory","exports","module","define","amd","this","Numbers","Element","Events","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","parseOrElse","str","or","parseInt","isElement","element","HTMLElement","setStyles","styles","keys","map","style","getBoxStyles","computedValue","window","getComputedStyle","height","padding","top","paddingTop","bottom","paddingBottom","border","borderTopWidth","borderBottomWidth","getElement","elementFromSelector","document","querySelector","Error","setAttribute","attribute","getAttribute","on","event","callback","addEventListener","destroy","removeEventListener","Animate","Hide","slideToggleAttribute","onRequestAnimationFrame","requestAnimationFrame","getTransition","options","miliseconds","shouldCollapse","hide","isHidden","onAnimationStart","boxStyles","transition","overflow","onAnimationEnd","show","isShown","elementDisplayStyle","display","Show","Toggle","onHideEnd","onClose","onShowEnd","onOpen","toggle"],"mappings":"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","file":"slidetoggle.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"slidetoggle\"] = factory();\n\telse\n\t\troot[\"slidetoggle\"] = factory();\n})(this, function() {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","export namespace Numbers {\n export const parseOrElse = (str: string, or = '0') => {\n if (str) {\n return parseInt(str);\n }\n return or && typeof or === 'string' ? parseInt(or) : 0;\n };\n}\n","import { Numbers } from './Numbers';\n\nexport namespace Element {\n type CSSStyles = Partial<\n Omit<\n {\n [K in keyof CSSStyleDeclaration]-?: K extends string\n ? CSSStyleDeclaration[K] extends string\n ? CSSStyleDeclaration[K]\n : never\n : never;\n },\n 'length' | 'parentRule'\n >\n >;\n export type ElementType = HTMLElement | string;\n\n const isElement = (element: ElementType | null): element is HTMLElement => element instanceof HTMLElement;\n\n export const setStyles = (element: HTMLElement, styles: CSSStyles) => {\n Object.keys(styles).map(key => {\n element.style[key] = styles[key];\n });\n };\n\n export const getBoxStyles = (element: HTMLElement) => {\n const computedValue = window.getComputedStyle(element);\n return {\n height: Numbers.parseOrElse(computedValue.height),\n padding: {\n top: Numbers.parseOrElse(computedValue.paddingTop),\n bottom: Numbers.parseOrElse(computedValue.paddingBottom),\n },\n border: {\n top: Numbers.parseOrElse(computedValue.borderTopWidth),\n bottom: Numbers.parseOrElse(computedValue.borderBottomWidth),\n },\n };\n };\n\n export const getElement = (element: ElementType) => {\n if (isElement(element)) {\n return element;\n }\n const elementFromSelector = document.querySelector(element);\n if (isElement(elementFromSelector)) {\n return elementFromSelector;\n }\n throw new Error('Your element does not exist in the DOM.');\n };\n\n export const setAttribute = (element: HTMLElement, attribute: string, value: string) => {\n element.setAttribute(attribute, value);\n };\n\n export const getAttribute = (element: HTMLElement, attribute: string) => {\n return element.getAttribute(attribute);\n };\n}\n","export namespace Events {\n export const on = (element: HTMLElement, event: string, callback: (event: Event) => void) => {\n element.addEventListener(event, callback);\n return {\n destroy: () => element && element.removeEventListener(event, callback),\n };\n };\n}\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { Types } from '../common/types';\nimport { Element } from './Element';\nimport { Events } from './Event';\n\nexport namespace Animate {\n const slideToggleAttribute = 'data-slide-toggle';\n\n const onRequestAnimationFrame = (callback: () => void) => {\n requestAnimationFrame(callback);\n };\n\n const getTransition = (options: Types.Options) => {\n const { miliseconds = 200, transitionFunction = 'linear' } = options;\n return `all ${miliseconds}ms ${transitionFunction} 0s`;\n };\n\n const isHidden = (element: HTMLElement) => Element.getAttribute(element, slideToggleAttribute) === 'false';\n\n const isShown = (element: HTMLElement) => Element.getAttribute(element, slideToggleAttribute) === 'true';\n\n export const shouldCollapse = (element: HTMLElement) => {\n const attribute = Element.getAttribute(element, slideToggleAttribute);\n if (!attribute) {\n const { height } = Element.getBoxStyles(element);\n return height && height > 0;\n }\n return Element.getAttribute(element, slideToggleAttribute) === 'true';\n };\n\n export const hide = (element: HTMLElement, options: Types.Options) => {\n if (isHidden(element)) {\n return;\n }\n\n options.onAnimationStart?.();\n\n const { height, ...boxStyles } = Element.getBoxStyles(element);\n\n Element.setStyles(element, { transition: '' });\n\n onRequestAnimationFrame(() => {\n Element.setStyles(element, {\n overflow: 'hidden',\n height: `${height}px`,\n paddingTop: `${boxStyles.padding.top}px`,\n paddingBottom: `${boxStyles.padding.bottom}px`,\n borderTopWidth: `${boxStyles.border.top}px`,\n borderBottomWidth: `${boxStyles.border.bottom}px`,\n transition: getTransition(options),\n });\n\n onRequestAnimationFrame(() => {\n Element.setStyles(element, {\n height: '0',\n paddingTop: '0',\n paddingBottom: '0',\n borderTopWidth: '0',\n borderBottomWidth: '0',\n });\n\n const event = Events.on(element, 'transitionend', () => {\n event.destroy();\n options.onAnimationEnd?.();\n });\n });\n });\n\n Element.setAttribute(element, slideToggleAttribute, 'false');\n };\n\n export const show = (element: HTMLElement, options: Types.ShowOptions) => {\n if (isShown(element)) {\n return;\n }\n\n const { elementDisplayStyle = 'block' } = options;\n\n options.onAnimationStart?.();\n\n Element.setStyles(element, {\n transition: '',\n display: elementDisplayStyle,\n height: 'auto',\n paddingTop: '',\n paddingBottom: '',\n borderTopWidth: '',\n borderBottomWidth: '',\n });\n\n const { height, ...boxStyles } = Element.getBoxStyles(element);\n\n Element.setStyles(element, {\n display: 'none',\n });\n\n onRequestAnimationFrame(() => {\n Element.setStyles(element, {\n display: elementDisplayStyle,\n overflow: 'hidden',\n height: '0',\n paddingTop: '0',\n paddingBottom: '0',\n borderTopWidth: '0',\n borderBottomWidth: '0',\n transition: getTransition(options),\n });\n onRequestAnimationFrame(() => {\n Element.setStyles(element, {\n height: `${height}px`,\n paddingTop: `${boxStyles.padding.top}px`,\n paddingBottom: `${boxStyles.padding.bottom}px`,\n borderTopWidth: `${boxStyles.border.top}px`,\n borderBottomWidth: `${boxStyles.border.bottom}px`,\n });\n\n const event = Events.on(element, 'transitionend', () => {\n Element.setStyles(element, {\n height: '',\n overflow: '',\n paddingTop: '',\n paddingBottom: '',\n borderTopWidth: '',\n borderBottomWidth: '',\n });\n event.destroy();\n options.onAnimationEnd?.();\n });\n });\n });\n\n Element.setAttribute(element, slideToggleAttribute, 'true');\n };\n}\n","import { Animate, Element } from '../utils';\nimport { Types } from './types';\n\nnamespace Hide {\n export const on = (element: HTMLElement, options: Types.Options) => {\n Animate.hide(element, options);\n };\n}\n\nexport const hide = (element: Element.ElementType, options: Types.Options) => {\n Hide.on(Element.getElement(element), options);\n};\n","import { Animate, Element } from '../utils';\nimport { Types } from './types';\n\nnamespace Show {\n export const on = (element: HTMLElement, options: Types.Options) => {\n Animate.show(element, options);\n };\n}\n\nexport const show = (element: Element.ElementType, options: Types.ShowOptions) => {\n Show.on(Element.getElement(element), options);\n};\n","import { Animate, Element } from '../utils';\nimport { Types } from './types';\n\nnamespace Toggle {\n const onHideEnd = (options: Types.ToggleOptions) => {\n return () => {\n options.onClose?.();\n options.onAnimationEnd?.();\n }\n }\n\n const onShowEnd = (options: Types.ToggleOptions) => {\n return () => {\n options.onOpen?.();\n options.onAnimationEnd?.();\n }\n }\n\n export const on = (element: HTMLElement, options: Types.ToggleOptions) => {\n if (Animate.shouldCollapse(element)) {\n Animate.hide(element, {...options, onAnimationEnd: onHideEnd(options) });\n } else {\n Animate.show(element, {...options, onAnimationEnd: onShowEnd(options) });\n }\n };\n}\n\nexport const toggle = (element: Element.ElementType, options: Types.ToggleOptions) => {\n Toggle.on(Element.getElement(element), options);\n};\n"],"sourceRoot":""}