{"version":3,"file":"embla-carousel-class-names.cjs.js","sources":["../src/components/Options.ts","../src/components/utils.ts","../src/components/ClassNames.ts"],"sourcesContent":["import { CreateOptionsType } from 'embla-carousel'\n\nexport type ClassNameOptionType = string | string[]\n\nexport type ClassNamesListType = {\n snapped: string[]\n inView: string[]\n draggable: string[]\n dragging: string[]\n loop: string[]\n}\n\nexport type OptionsType = CreateOptionsType<{\n [Key in keyof ClassNamesListType]: ClassNameOptionType\n}>\n\nexport const defaultOptions: OptionsType = {\n active: true,\n breakpoints: {},\n snapped: 'is-snapped',\n inView: 'is-in-view',\n draggable: 'is-draggable',\n dragging: 'is-dragging',\n loop: 'is-loop'\n}\n","import { ClassNameOptionType } from './Options'\n\nexport function normalizeClassNames(classNames: ClassNameOptionType): string[] {\n const normalized = Array.isArray(classNames) ? classNames : [classNames]\n return normalized.filter(Boolean)\n}\n\nexport function removeClass(node: HTMLElement, classNames: string[]): void {\n if (!node || !classNames.length) return\n node.classList.remove(...classNames)\n}\n\nexport function addClass(node: HTMLElement, classNames: string[]): void {\n if (!node || !classNames.length) return\n node.classList.add(...classNames)\n}\n","import { defaultOptions, OptionsType, ClassNamesListType } from './Options'\nimport { addClass, normalizeClassNames, removeClass } from './utils'\nimport {\n CreatePluginType,\n OptionsHandlerType,\n EmblaCarouselType,\n EmblaEventType\n} from 'embla-carousel'\n\ndeclare module 'embla-carousel' {\n interface EmblaPluginsType {\n classNames: ClassNamesType\n }\n}\n\nexport type ClassNamesType = CreatePluginType<{}, OptionsType>\n\nexport type ClassNamesOptionsType = ClassNamesType['options']\n\nfunction ClassNames(userOptions: ClassNamesOptionsType = {}): ClassNamesType {\n let options: OptionsType\n let emblaApi: EmblaCarouselType\n let root: HTMLElement\n let slides: HTMLElement[]\n let snappedIndexes: number[] = []\n let inViewIndexes: number[] = []\n\n const selectedEvents: EmblaEventType[] = ['select']\n const draggingEvents: EmblaEventType[] = ['pointerDown', 'pointerUp']\n const inViewEvents: EmblaEventType[] = ['slidesInView']\n const classNames: ClassNamesListType = {\n snapped: [],\n inView: [],\n draggable: [],\n dragging: [],\n loop: []\n }\n\n function init(\n emblaApiInstance: EmblaCarouselType,\n optionsHandler: OptionsHandlerType\n ): void {\n emblaApi = emblaApiInstance\n\n const { mergeOptions, optionsAtMedia } = optionsHandler\n const optionsBase = mergeOptions(defaultOptions, ClassNames.globalOptions)\n const allOptions = mergeOptions(optionsBase, userOptions)\n options = optionsAtMedia(allOptions)\n\n root = emblaApi.rootNode()\n slides = emblaApi.slideNodes()\n\n const { watchDrag, loop } = emblaApi.internalEngine().options\n const isDraggable = !!watchDrag\n\n if (options.loop && loop) {\n classNames.loop = normalizeClassNames(options.loop)\n addClass(root, classNames.loop)\n }\n\n if (options.draggable && isDraggable) {\n classNames.draggable = normalizeClassNames(options.draggable)\n addClass(root, classNames.draggable)\n }\n\n if (options.dragging) {\n classNames.dragging = normalizeClassNames(options.dragging)\n draggingEvents.forEach((evt) => emblaApi.on(evt, toggleDraggingClass))\n }\n\n if (options.snapped) {\n classNames.snapped = normalizeClassNames(options.snapped)\n selectedEvents.forEach((evt) => emblaApi.on(evt, toggleSnappedClasses))\n toggleSnappedClasses()\n }\n\n if (options.inView) {\n classNames.inView = normalizeClassNames(options.inView)\n inViewEvents.forEach((evt) => emblaApi.on(evt, toggleInViewClasses))\n toggleInViewClasses()\n }\n }\n\n function destroy(): void {\n draggingEvents.forEach((evt) => emblaApi.off(evt, toggleDraggingClass))\n selectedEvents.forEach((evt) => emblaApi.off(evt, toggleSnappedClasses))\n inViewEvents.forEach((evt) => emblaApi.off(evt, toggleInViewClasses))\n\n removeClass(root, classNames.loop)\n removeClass(root, classNames.draggable)\n removeClass(root, classNames.dragging)\n toggleSlideClasses([], snappedIndexes, classNames.snapped)\n toggleSlideClasses([], inViewIndexes, classNames.inView)\n\n Object.keys(classNames).forEach((classNameKey) => {\n const key = classNameKey\n classNames[key] = []\n })\n }\n\n function toggleDraggingClass(\n _: EmblaCarouselType,\n evt: EmblaEventType\n ): void {\n const toggleClass = evt === 'pointerDown' ? addClass : removeClass\n toggleClass(root, classNames.dragging)\n }\n\n function toggleSlideClasses(\n addClassIndexes: number[] = [],\n removeClassIndexes: number[] = [],\n classNames: string[]\n ): number[] {\n const removeClassSlides = removeClassIndexes.map((index) => slides[index])\n const addClassSlides = addClassIndexes.map((index) => slides[index])\n\n removeClassSlides.forEach((slide) => removeClass(slide, classNames))\n addClassSlides.forEach((slide) => addClass(slide, classNames))\n\n return addClassIndexes\n }\n\n function toggleSnappedClasses(): void {\n const { slideRegistry } = emblaApi.internalEngine()\n const newSnappedIndexes = slideRegistry[emblaApi.selectedScrollSnap()]\n\n snappedIndexes = toggleSlideClasses(\n newSnappedIndexes,\n snappedIndexes,\n classNames.snapped\n )\n }\n\n function toggleInViewClasses(): void {\n const newInViewIndexes = emblaApi.slidesInView()\n\n inViewIndexes = toggleSlideClasses(\n newInViewIndexes,\n inViewIndexes,\n classNames.inView\n )\n }\n\n const self: ClassNamesType = {\n name: 'classNames',\n options: userOptions,\n init,\n destroy\n }\n return self\n}\n\ndeclare namespace ClassNames {\n let globalOptions: ClassNamesOptionsType | undefined\n}\n\nClassNames.globalOptions = undefined\n\nexport default ClassNames\n"],"names":["defaultOptions","active","breakpoints","snapped","inView","draggable","dragging","loop","normalizeClassNames","classNames","normalized","Array","isArray","filter","Boolean","removeClass","node","length","classList","remove","addClass","add","ClassNames","userOptions","options","emblaApi","root","slides","snappedIndexes","inViewIndexes","selectedEvents","draggingEvents","inViewEvents","init","emblaApiInstance","optionsHandler","mergeOptions","optionsAtMedia","optionsBase","globalOptions","allOptions","rootNode","slideNodes","watchDrag","internalEngine","isDraggable","forEach","evt","on","toggleDraggingClass","toggleSnappedClasses","toggleInViewClasses","destroy","off","toggleSlideClasses","Object","keys","classNameKey","key","_","toggleClass","addClassIndexes","removeClassIndexes","removeClassSlides","map","index","addClassSlides","slide","slideRegistry","newSnappedIndexes","selectedScrollSnap","newInViewIndexes","slidesInView","self","name","undefined"],"mappings":";;AAgBO,MAAMA,cAAc,GAAgB;AACzCC,EAAAA,MAAM,EAAE,IAAI;EACZC,WAAW,EAAE,EAAE;AACfC,EAAAA,OAAO,EAAE,YAAY;AACrBC,EAAAA,MAAM,EAAE,YAAY;AACpBC,EAAAA,SAAS,EAAE,cAAc;AACzBC,EAAAA,QAAQ,EAAE,aAAa;AACvBC,EAAAA,IAAI,EAAE;CACP;;ACtBK,SAAUC,mBAAmBA,CAACC,UAA+B,EAAA;AACjE,EAAA,MAAMC,UAAU,GAAGC,KAAK,CAACC,OAAO,CAACH,UAAU,CAAC,GAAGA,UAAU,GAAG,CAACA,UAAU,CAAC;AACxE,EAAA,OAAOC,UAAU,CAACG,MAAM,CAACC,OAAO,CAAC;AACnC;AAEgB,SAAAC,WAAWA,CAACC,IAAiB,EAAEP,UAAoB,EAAA;AACjE,EAAA,IAAI,CAACO,IAAI,IAAI,CAACP,UAAU,CAACQ,MAAM,EAAE;AACjCD,EAAAA,IAAI,CAACE,SAAS,CAACC,MAAM,CAAC,GAAGV,UAAU,CAAC;AACtC;AAEgB,SAAAW,QAAQA,CAACJ,IAAiB,EAAEP,UAAoB,EAAA;AAC9D,EAAA,IAAI,CAACO,IAAI,IAAI,CAACP,UAAU,CAACQ,MAAM,EAAE;AACjCD,EAAAA,IAAI,CAACE,SAAS,CAACG,GAAG,CAAC,GAAGZ,UAAU,CAAC;AACnC;;ACIA,SAASa,UAAUA,CAACC,WAAA,GAAqC,EAAE,EAAA;AACzD,EAAA,IAAIC,OAAoB;AACxB,EAAA,IAAIC,QAA2B;AAC/B,EAAA,IAAIC,IAAiB;AACrB,EAAA,IAAIC,MAAqB;EACzB,IAAIC,cAAc,GAAa,EAAE;EACjC,IAAIC,aAAa,GAAa,EAAE;AAEhC,EAAA,MAAMC,cAAc,GAAqB,CAAC,QAAQ,CAAC;AACnD,EAAA,MAAMC,cAAc,GAAqB,CAAC,aAAa,EAAE,WAAW,CAAC;AACrE,EAAA,MAAMC,YAAY,GAAqB,CAAC,cAAc,CAAC;AACvD,EAAA,MAAMvB,UAAU,GAAuB;AACrCN,IAAAA,OAAO,EAAE,EAAE;AACXC,IAAAA,MAAM,EAAE,EAAE;AACVC,IAAAA,SAAS,EAAE,EAAE;AACbC,IAAAA,QAAQ,EAAE,EAAE;AACZC,IAAAA,IAAI,EAAE;GACP;AAED,EAAA,SAAS0B,IAAIA,CACXC,gBAAmC,EACnCC,cAAkC,EAAA;AAElCV,IAAAA,QAAQ,GAAGS,gBAAgB;IAE3B,MAAM;MAAEE,YAAY;AAAEC,MAAAA;AAAgB,KAAA,GAAGF,cAAc;IACvD,MAAMG,WAAW,GAAGF,YAAY,CAACpC,cAAc,EAAEsB,UAAU,CAACiB,aAAa,CAAC;AAC1E,IAAA,MAAMC,UAAU,GAAGJ,YAAY,CAACE,WAAW,EAAEf,WAAW,CAAC;AACzDC,IAAAA,OAAO,GAAGa,cAAc,CAACG,UAAU,CAAC;AAEpCd,IAAAA,IAAI,GAAGD,QAAQ,CAACgB,QAAQ,EAAE;AAC1Bd,IAAAA,MAAM,GAAGF,QAAQ,CAACiB,UAAU,EAAE;IAE9B,MAAM;MAAEC,SAAS;AAAEpC,MAAAA;AAAM,KAAA,GAAGkB,QAAQ,CAACmB,cAAc,EAAE,CAACpB,OAAO;AAC7D,IAAA,MAAMqB,WAAW,GAAG,CAAC,CAACF,SAAS;AAE/B,IAAA,IAAInB,OAAO,CAACjB,IAAI,IAAIA,IAAI,EAAE;MACxBE,UAAU,CAACF,IAAI,GAAGC,mBAAmB,CAACgB,OAAO,CAACjB,IAAI,CAAC;AACnDa,MAAAA,QAAQ,CAACM,IAAI,EAAEjB,UAAU,CAACF,IAAI,CAAC;AACjC;AAEA,IAAA,IAAIiB,OAAO,CAACnB,SAAS,IAAIwC,WAAW,EAAE;MACpCpC,UAAU,CAACJ,SAAS,GAAGG,mBAAmB,CAACgB,OAAO,CAACnB,SAAS,CAAC;AAC7De,MAAAA,QAAQ,CAACM,IAAI,EAAEjB,UAAU,CAACJ,SAAS,CAAC;AACtC;IAEA,IAAImB,OAAO,CAAClB,QAAQ,EAAE;MACpBG,UAAU,CAACH,QAAQ,GAAGE,mBAAmB,CAACgB,OAAO,CAAClB,QAAQ,CAAC;AAC3DyB,MAAAA,cAAc,CAACe,OAAO,CAAEC,GAAG,IAAKtB,QAAQ,CAACuB,EAAE,CAACD,GAAG,EAAEE,mBAAmB,CAAC,CAAC;AACxE;IAEA,IAAIzB,OAAO,CAACrB,OAAO,EAAE;MACnBM,UAAU,CAACN,OAAO,GAAGK,mBAAmB,CAACgB,OAAO,CAACrB,OAAO,CAAC;AACzD2B,MAAAA,cAAc,CAACgB,OAAO,CAAEC,GAAG,IAAKtB,QAAQ,CAACuB,EAAE,CAACD,GAAG,EAAEG,oBAAoB,CAAC,CAAC;AACvEA,MAAAA,oBAAoB,EAAE;AACxB;IAEA,IAAI1B,OAAO,CAACpB,MAAM,EAAE;MAClBK,UAAU,CAACL,MAAM,GAAGI,mBAAmB,CAACgB,OAAO,CAACpB,MAAM,CAAC;AACvD4B,MAAAA,YAAY,CAACc,OAAO,CAAEC,GAAG,IAAKtB,QAAQ,CAACuB,EAAE,CAACD,GAAG,EAAEI,mBAAmB,CAAC,CAAC;AACpEA,MAAAA,mBAAmB,EAAE;AACvB;AACF;EAEA,SAASC,OAAOA,GAAA;AACdrB,IAAAA,cAAc,CAACe,OAAO,CAAEC,GAAG,IAAKtB,QAAQ,CAAC4B,GAAG,CAACN,GAAG,EAAEE,mBAAmB,CAAC,CAAC;AACvEnB,IAAAA,cAAc,CAACgB,OAAO,CAAEC,GAAG,IAAKtB,QAAQ,CAAC4B,GAAG,CAACN,GAAG,EAAEG,oBAAoB,CAAC,CAAC;AACxElB,IAAAA,YAAY,CAACc,OAAO,CAAEC,GAAG,IAAKtB,QAAQ,CAAC4B,GAAG,CAACN,GAAG,EAAEI,mBAAmB,CAAC,CAAC;AAErEpC,IAAAA,WAAW,CAACW,IAAI,EAAEjB,UAAU,CAACF,IAAI,CAAC;AAClCQ,IAAAA,WAAW,CAACW,IAAI,EAAEjB,UAAU,CAACJ,SAAS,CAAC;AACvCU,IAAAA,WAAW,CAACW,IAAI,EAAEjB,UAAU,CAACH,QAAQ,CAAC;IACtCgD,kBAAkB,CAAC,EAAE,EAAE1B,cAAc,EAAEnB,UAAU,CAACN,OAAO,CAAC;IAC1DmD,kBAAkB,CAAC,EAAE,EAAEzB,aAAa,EAAEpB,UAAU,CAACL,MAAM,CAAC;IAExDmD,MAAM,CAACC,IAAI,CAAC/C,UAAU,CAAC,CAACqC,OAAO,CAAEW,YAAY,IAAI;MAC/C,MAAMC,GAAG,GAA6BD,YAAY;AAClDhD,MAAAA,UAAU,CAACiD,GAAG,CAAC,GAAG,EAAE;AACtB,KAAC,CAAC;AACJ;AAEA,EAAA,SAAST,mBAAmBA,CAC1BU,CAAoB,EACpBZ,GAAmB,EAAA;IAEnB,MAAMa,WAAW,GAAGb,GAAG,KAAK,aAAa,GAAG3B,QAAQ,GAAGL,WAAW;AAClE6C,IAAAA,WAAW,CAAClC,IAAI,EAAEjB,UAAU,CAACH,QAAQ,CAAC;AACxC;EAEA,SAASgD,kBAAkBA,CACzBO,eAA4B,GAAA,EAAE,EAC9BC,kBAA+B,GAAA,EAAE,EACjCrD,UAAoB,EAAA;AAEpB,IAAA,MAAMsD,iBAAiB,GAAGD,kBAAkB,CAACE,GAAG,CAAEC,KAAK,IAAKtC,MAAM,CAACsC,KAAK,CAAC,CAAC;AAC1E,IAAA,MAAMC,cAAc,GAAGL,eAAe,CAACG,GAAG,CAAEC,KAAK,IAAKtC,MAAM,CAACsC,KAAK,CAAC,CAAC;IAEpEF,iBAAiB,CAACjB,OAAO,CAAEqB,KAAK,IAAKpD,WAAW,CAACoD,KAAK,EAAE1D,UAAU,CAAC,CAAC;IACpEyD,cAAc,CAACpB,OAAO,CAAEqB,KAAK,IAAK/C,QAAQ,CAAC+C,KAAK,EAAE1D,UAAU,CAAC,CAAC;AAE9D,IAAA,OAAOoD,eAAe;AACxB;EAEA,SAASX,oBAAoBA,GAAA;IAC3B,MAAM;AAAEkB,MAAAA;AAAe,KAAA,GAAG3C,QAAQ,CAACmB,cAAc,EAAE;IACnD,MAAMyB,iBAAiB,GAAGD,aAAa,CAAC3C,QAAQ,CAAC6C,kBAAkB,EAAE,CAAC;IAEtE1C,cAAc,GAAG0B,kBAAkB,CACjCe,iBAAiB,EACjBzC,cAAc,EACdnB,UAAU,CAACN,OAAO,CACnB;AACH;EAEA,SAASgD,mBAAmBA,GAAA;AAC1B,IAAA,MAAMoB,gBAAgB,GAAG9C,QAAQ,CAAC+C,YAAY,EAAE;IAEhD3C,aAAa,GAAGyB,kBAAkB,CAChCiB,gBAAgB,EAChB1C,aAAa,EACbpB,UAAU,CAACL,MAAM,CAClB;AACH;AAEA,EAAA,MAAMqE,IAAI,GAAmB;AAC3BC,IAAAA,IAAI,EAAE,YAAY;AAClBlD,IAAAA,OAAO,EAAED,WAAW;IACpBU,IAAI;AACJmB,IAAAA;GACD;AACD,EAAA,OAAOqB,IAAI;AACb;AAMAnD,UAAU,CAACiB,aAAa,GAAGoC,SAAS;;;;"}