{"version":3,"file":"component-controller-importer-DUFOKQSP.js","sources":["../../../app/frontend/components/ui/slider/controller.ts","../../../app/frontend/src/global/component-controller-importer.js"],"sourcesContent":["import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['viewport', 'container', 'prevButton', 'nextButton'];\n\n declare readonly viewportTarget: HTMLElement;\n declare readonly hasViewportTarget: boolean;\n declare readonly containerTarget: HTMLElement;\n declare readonly prevButtonTarget?: HTMLButtonElement;\n declare readonly hasPrevButtonTarget: boolean;\n declare readonly nextButtonTarget?: HTMLButtonElement;\n declare readonly hasNextButtonTarget: boolean;\n\n private resizeObserver!: ResizeObserver;\n\n private onScroll = () => this.updateButtonStates();\n\n connect(): void {\n if (!this.hasViewportTarget) return;\n this.updateButtonStates();\n this.containerTarget.addEventListener('scroll', this.onScroll);\n\n this.resizeObserver = new ResizeObserver(() => {\n this.updateButtonStates();\n });\n this.resizeObserver.observe(this.containerTarget);\n }\n\n disconnect(): void {\n this.containerTarget.removeEventListener('scroll', this.onScroll);\n\n if (this.resizeObserver) {\n this.resizeObserver.unobserve(this.containerTarget);\n this.resizeObserver.disconnect();\n }\n }\n\n next() {\n const targetPosition = this.getNextScrollPosition();\n if (targetPosition !== null) {\n this.containerTarget.scrollTo({ left: targetPosition, behavior: 'smooth' });\n }\n }\n\n prev() {\n const targetPosition = this.getPrevScrollPosition();\n if (targetPosition !== null) {\n this.containerTarget.scrollTo({ left: targetPosition, behavior: 'smooth' });\n }\n }\n\n private getSlidesPositions(): number[] {\n const slides = Array.from(this.containerTarget.children) as HTMLElement[];\n const containerRect = this.containerTarget.getBoundingClientRect();\n return slides.map(slide => {\n const slideRect = slide.getBoundingClientRect();\n return slideRect.left - containerRect.left + this.containerTarget.scrollLeft;\n });\n }\n\n private getNextScrollPosition(): number | null {\n const positions = this.getSlidesPositions();\n const currentScrollLeft = this.containerTarget.scrollLeft;\n for (let position of positions) {\n if (position - 1 > currentScrollLeft) {\n return position;\n }\n }\n return null;\n }\n\n private getPrevScrollPosition(): number | null {\n const positions = this.getSlidesPositions();\n const currentScrollLeft = this.containerTarget.scrollLeft;\n for (let i = positions.length - 1; i >= 0; i--) {\n if (positions[i] + 1 < currentScrollLeft) {\n return positions[i];\n }\n }\n return 0;\n }\n\n private updateButtonStates = () => {\n const { scrollLeft, scrollWidth, clientWidth } = this.containerTarget;\n const maxScrollLeft = scrollWidth - clientWidth;\n\n const firstSlide = this.containerTarget.firstElementChild as HTMLElement;\n const firstSlidePadding = parseInt(getComputedStyle(firstSlide).paddingLeft) || 0;\n\n const threshold = 5;\n\n if (this.hasPrevButtonTarget) {\n this.prevButtonTarget!.disabled = scrollLeft <= firstSlidePadding + threshold;\n }\n if (this.hasNextButtonTarget) {\n this.nextButtonTarget!.disabled = maxScrollLeft - scrollLeft <= threshold;\n }\n };\n}\n","const importComponentControllers = (application) => {\n const controllers = import.meta.glob('@components/**/controller.{js,ts}', {\n eager: true\n });\n\n Object.entries(controllers).forEach(([path, controller]) => {\n const name = path\n .match(/components\\/(.+)\\/controller\\.(js|ts)$/)[1]\n .replaceAll('/', '--')\n .replaceAll('_', '-');\n application.register(name, controller.default);\n });\n};\n\nexport { importComponentControllers };\n"],"names":["controller","Controller","__publicField","scrollLeft","scrollWidth","clientWidth","maxScrollLeft","firstSlide","firstSlidePadding","threshold","targetPosition","slides","containerRect","slide","positions","currentScrollLeft","position","i","importComponentControllers","application","__vite_glob_0_0","__vite_glob_0_1","__vite_glob_0_2","__vite_glob_0_3","__vite_glob_0_4","__vite_glob_0_5","__vite_glob_0_6","__vite_glob_0_7","path","name"],"mappings":"kTAEA,MAAAA,UAA6BC,CAAW,CAAxC,kCAWUC,EAAA,uBAEAA,EAAA,gBAAW,IAAM,KAAK,mBAAmB,GAmEzCA,EAAA,0BAAqB,IAAM,CACjC,KAAM,CAAE,WAAAC,EAAY,YAAAC,EAAa,YAAAC,GAAgB,KAAK,gBAChDC,EAAgBF,EAAcC,EAE9BE,EAAa,KAAK,gBAAgB,kBAClCC,EAAoB,SAAS,iBAAiBD,CAAU,EAAE,WAAW,GAAK,EAE1EE,EAAY,EAEd,KAAK,sBACF,KAAA,iBAAkB,SAAWN,GAAcK,EAAoBC,GAElE,KAAK,sBACF,KAAA,iBAAkB,SAAWH,EAAgBH,GAAcM,EAEpE,GAhFA,SAAgB,CACT,KAAK,oBACV,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,iBAAiB,SAAU,KAAK,QAAQ,EAExD,KAAA,eAAiB,IAAI,eAAe,IAAM,CAC7C,KAAK,mBAAmB,CAAA,CACzB,EACI,KAAA,eAAe,QAAQ,KAAK,eAAe,EAAA,CAGlD,YAAmB,CACjB,KAAK,gBAAgB,oBAAoB,SAAU,KAAK,QAAQ,EAE5D,KAAK,iBACF,KAAA,eAAe,UAAU,KAAK,eAAe,EAClD,KAAK,eAAe,WAAW,EACjC,CAGF,MAAO,CACC,MAAAC,EAAiB,KAAK,sBAAsB,EAC9CA,IAAmB,MACrB,KAAK,gBAAgB,SAAS,CAAE,KAAMA,EAAgB,SAAU,SAAU,CAC5E,CAGF,MAAO,CACC,MAAAA,EAAiB,KAAK,sBAAsB,EAC9CA,IAAmB,MACrB,KAAK,gBAAgB,SAAS,CAAE,KAAMA,EAAgB,SAAU,SAAU,CAC5E,CAGM,oBAA+B,CACrC,MAAMC,EAAS,MAAM,KAAK,KAAK,gBAAgB,QAAQ,EACjDC,EAAgB,KAAK,gBAAgB,sBAAsB,EAC1D,OAAAD,EAAO,IAAaE,GACPA,EAAM,sBAAsB,EAC7B,KAAOD,EAAc,KAAO,KAAK,gBAAgB,UACnE,CAAA,CAGK,uBAAuC,CACvC,MAAAE,EAAY,KAAK,mBAAmB,EACpCC,EAAoB,KAAK,gBAAgB,WAC/C,QAASC,KAAYF,EACf,GAAAE,EAAW,EAAID,EACV,OAAAC,EAGJ,OAAA,IAAA,CAGD,uBAAuC,CACvC,MAAAF,EAAY,KAAK,mBAAmB,EACpCC,EAAoB,KAAK,gBAAgB,WAC/C,QAASE,EAAIH,EAAU,OAAS,EAAGG,GAAK,EAAGA,IACzC,GAAIH,EAAUG,CAAC,EAAI,EAAIF,EACrB,OAAOD,EAAUG,CAAC,EAGf,MAAA,EAAA,CAmBX,CA/FEf,EADFF,EACS,UAAU,CAAC,WAAY,YAAa,aAAc,YAAY,gHCHjEkB,EAA8BC,GAAgB,CAKlD,OAAO,QAJa,OAAA,OAAA,CAAA,4CAAAC,EAAA,6CAAAC,EAAA,wDAAAC,EAAA,wCAAAC,EAAA,qCAAAC,EAAA,0CAAAC,EAAA,sCAAAC,EAAA,4CAAAC,CAAA,CAElB,CAEwB,EAAE,QAAQ,CAAC,CAACC,EAAM5B,CAAU,IAAM,CAC1D,MAAM6B,EAAOD,EACV,MAAM,wCAAwC,EAAE,CAAC,EACjD,WAAW,IAAK,IAAI,EACpB,WAAW,IAAK,GAAG,EACtBT,EAAY,SAASU,EAAM7B,EAAW,OAAO,CACjD,CAAG,CACH"}