@rcaferati/react-awesome-slider 5.0.0 → 5.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/README.md +212 -51
  2. package/dist/autoplay.js +25 -9
  3. package/dist/autoplay.js.map +1 -1
  4. package/dist/autoplay.mjs +25 -9
  5. package/dist/autoplay.mjs.map +1 -1
  6. package/dist/captioned.js +25 -9
  7. package/dist/captioned.js.map +1 -1
  8. package/dist/captioned.mjs +25 -9
  9. package/dist/captioned.mjs.map +1 -1
  10. package/dist/custom-animations/cube-animation.css +1 -1
  11. package/dist/custom-animations/cube-animation.d.mts +3 -0
  12. package/dist/custom-animations/cube-animation.d.ts +3 -0
  13. package/dist/custom-animations/cube-animation.js +13 -0
  14. package/dist/custom-animations/cube-animation.mjs +10 -0
  15. package/dist/custom-animations/fall-animation.d.mts +3 -0
  16. package/dist/custom-animations/fall-animation.d.ts +3 -0
  17. package/dist/custom-animations/fall-animation.js +11 -0
  18. package/dist/custom-animations/fall-animation.mjs +8 -0
  19. package/dist/custom-animations/fold-out-animation.d.mts +3 -0
  20. package/dist/custom-animations/fold-out-animation.d.ts +3 -0
  21. package/dist/custom-animations/fold-out-animation.js +12 -0
  22. package/dist/custom-animations/fold-out-animation.mjs +9 -0
  23. package/dist/custom-animations/open-animation.d.mts +3 -0
  24. package/dist/custom-animations/open-animation.d.ts +3 -0
  25. package/dist/custom-animations/open-animation.js +12 -0
  26. package/dist/custom-animations/open-animation.mjs +9 -0
  27. package/dist/custom-animations/scale-out-animation.d.mts +3 -0
  28. package/dist/custom-animations/scale-out-animation.d.ts +3 -0
  29. package/dist/custom-animations/scale-out-animation.js +11 -0
  30. package/dist/custom-animations/scale-out-animation.mjs +8 -0
  31. package/dist/index.js +25 -9
  32. package/dist/index.js.map +1 -1
  33. package/dist/index.mjs +25 -9
  34. package/dist/index.mjs.map +1 -1
  35. package/dist/lettering.js +25 -9
  36. package/dist/lettering.js.map +1 -1
  37. package/dist/lettering.mjs +25 -9
  38. package/dist/lettering.mjs.map +1 -1
  39. package/dist/navigation.d.mts +1 -0
  40. package/dist/navigation.d.ts +1 -0
  41. package/dist/navigation.js +45 -31
  42. package/dist/navigation.js.map +1 -1
  43. package/dist/navigation.mjs +45 -31
  44. package/dist/navigation.mjs.map +1 -1
  45. package/package.json +14 -4
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hoc/animated-lettering/index.tsx","../src/core/index.tsx","../src/core/helpers.ts","../src/helpers/components.ts","../src/core/engine.ts","../src/core/model.ts","../src/core/bullets.tsx","../src/core/buttons.tsx","../src/core/media.tsx","../src/hoc/animated-lettering/hoc.tsx"],"sourcesContent":["// hoc/animated-lettering/index.tsx\nimport React from 'react';\nimport AwesomeSlider from '../../index';\nimport Hoc from './hoc';\n\nconst LetteringComponent = Hoc(AwesomeSlider);\n\ntype Props = React.ComponentProps<typeof LetteringComponent>;\n\nexport default function Lettering(props: Props) {\n return <LetteringComponent transitionDelay={100} {...props} />;\n}\n","import React, {\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useImperativeHandle,\n} from 'react';\nimport { onceNextCssLayout } from '@rcaferati/wac';\n\nimport type { MediaItem, ClassNames, CssModuleMerged } from './helpers';\nimport { mergeStyles, classListAdd, classListRemove } from './helpers';\n\nimport createEngine from './engine';\nimport createModel from './model';\n\nimport Bullets from './bullets';\nimport Buttons from './buttons';\nimport type { ButtonsMountInfo } from './buttons';\nimport Media from './media';\n\nconst ROOTELM = 'awssld';\n\nexport type BulletsPosition = 'outside' | 'inside';\n\nexport type AwesomeSliderProps = {\n animation?: string | null;\n bullets?: boolean;\n /**\n * Controls where bullets sit relative to the slider box.\n * - outside: default classic behavior (bottom: -40px)\n * - inside: places bullets into the slide area (bottom: 40px)\n */\n bulletsPosition?: BulletsPosition;\n\n buttonContentLeft?: React.ReactNode;\n buttonContentRight?: React.ReactNode;\n buttons?: boolean;\n children?: React.ReactNode;\n className?: string | null;\n controlsReturnDelay?: number;\n cssModule?: any;\n customContent?: React.ReactNode;\n onLoadStart?: ((payload: any) => void) | null;\n disabled?: boolean;\n fillParent?: boolean;\n infinite?: boolean;\n media?: MediaItem[];\n name?: string;\n onFirstMount?: ((info: any) => void) | null;\n onResetSlider?: ((info: any) => void) | null;\n onStartupRelease?: ((info: any) => void) | null;\n onTransitionEnd?: ((info: any) => void) | null;\n onTransitionRequest?: ((info: any) => void) | null;\n onTransitionStart?: ((info: any) => void) | null;\n organicArrows?: boolean;\n rootElement?: string;\n selected?: any;\n startup?: boolean;\n startupDelay?: number;\n startupScreen?: any;\n style?: React.CSSProperties;\n transitionDelay?: number;\n mobileTouch?: boolean;\n\n onTransitionReject?: ((info: any) => void) | null;\n};\n\ntype AwesomeSliderState = {\n index: number | null;\n boxA: any;\n boxB: any;\n};\n\ntype BoxKey = 'boxA' | 'boxB';\n\nconst DEFAULT_PROPS: Required<\n Pick<\n AwesomeSliderProps,\n | 'animation'\n | 'bullets'\n | 'bulletsPosition'\n | 'buttonContentLeft'\n | 'buttonContentRight'\n | 'buttons'\n | 'children'\n | 'className'\n | 'controlsReturnDelay'\n | 'cssModule'\n | 'customContent'\n | 'onLoadStart'\n | 'disabled'\n | 'fillParent'\n | 'infinite'\n | 'media'\n | 'name'\n | 'onFirstMount'\n | 'onResetSlider'\n | 'onStartupRelease'\n | 'onTransitionEnd'\n | 'onTransitionRequest'\n | 'onTransitionStart'\n | 'onTransitionReject'\n | 'organicArrows'\n | 'rootElement'\n | 'selected'\n | 'startup'\n | 'startupDelay'\n | 'startupScreen'\n | 'style'\n | 'transitionDelay'\n | 'mobileTouch'\n >\n> = {\n animation: null,\n bullets: true,\n bulletsPosition: 'outside',\n\n buttonContentLeft: null,\n buttonContentRight: null,\n buttons: true,\n children: null,\n className: null,\n controlsReturnDelay: 0,\n cssModule: null,\n customContent: null,\n onLoadStart: null,\n disabled: false,\n fillParent: false,\n infinite: true,\n media: [],\n name: 'awesome-slider',\n onFirstMount: null,\n onResetSlider: null,\n onStartupRelease: null,\n onTransitionEnd: null,\n onTransitionRequest: null,\n onTransitionStart: null,\n onTransitionReject: null,\n organicArrows: true,\n rootElement: ROOTELM,\n selected: 0,\n startup: true,\n startupDelay: 0,\n startupScreen: null,\n style: {},\n transitionDelay: 0,\n mobileTouch: true,\n};\n\ntype RuntimeCtx = {\n // reacty\n props: AwesomeSliderProps;\n state: AwesomeSliderState;\n setState: (patch: any, cb?: () => void) => void;\n\n // runtime\n _mounted: boolean;\n _timeouts: Set<ReturnType<typeof setTimeout>>;\n _setTimeout: (fn: () => void, ms: number) => any;\n\n rootElement: string;\n classNames: ClassNames;\n\n // dom\n slider: HTMLDivElement | null;\n wrapper: HTMLDivElement | null;\n container: HTMLDivElement | null;\n boxA: HTMLDivElement | null;\n boxB: HTMLDivElement | null;\n\n // boxes\n active: BoxKey;\n loader: BoxKey;\n\n // indices\n index: number | null;\n nextIndex: number | null;\n\n // flags\n loading: boolean;\n direction: boolean;\n started: boolean;\n\n // touch\n touchEnabled: boolean;\n animating: boolean;\n touchStartPoint: number | null;\n\n // media/cache\n media: MediaItem[] | null; // IMPORTANT: stays null until setupStartup runs\n loaded: string[];\n bar: HTMLDivElement | null;\n\n // controls\n buttons: ButtonsMountInfo | null;\n activeArrow: Element | null;\n activeArrowClass: string | null;\n\n // engine/model\n engine: any;\n model: any;\n\n // bridge\n getInfo: () => any;\n releaseTransition: () => void;\n\n // dynamic: ctx[ctx.active] -> ctx.boxA/ctx.boxB\n [k: string]: any;\n};\n\nexport type AwesomeSliderHandle = {\n getInfo: () => any;\n goTo: (args: { index: any; direction: boolean; touch?: boolean }) => void;\n resetSlider: (index?: number) => void;\n};\n\nfunction createInitialCtx(p: AwesomeSliderProps): RuntimeCtx {\n const ctx: RuntimeCtx = {\n props: p,\n state: { index: null, boxA: null, boxB: null },\n setState: () => {},\n\n _mounted: false,\n _timeouts: new Set(),\n _setTimeout: () => 0,\n\n rootElement: p.rootElement || ROOTELM,\n classNames: {} as any,\n\n slider: null,\n wrapper: null,\n container: null,\n boxA: null,\n boxB: null,\n\n active: 'boxA',\n loader: 'boxB',\n\n index: null,\n nextIndex: null,\n\n loading: false,\n direction: true,\n started: false,\n\n touchEnabled: false,\n animating: false,\n touchStartPoint: null,\n\n media: null, // ✅ critical for correct first init\n loaded: [],\n bar: null,\n\n buttons: null,\n activeArrow: null,\n activeArrowClass: null,\n\n engine: null as any,\n model: null as any,\n\n getInfo: () => ({}),\n releaseTransition: () => {},\n };\n\n ctx._setTimeout = (fn, ms) => {\n const id = setTimeout(() => {\n ctx._timeouts.delete(id);\n fn();\n }, ms);\n ctx._timeouts.add(id);\n return id;\n };\n\n return ctx;\n}\n\nconst AwesomeSlider = forwardRef<AwesomeSliderHandle, AwesomeSliderProps>(\n (incomingProps, ref) => {\n // merge defaults exactly once per render (don’t rely on React defaultProps)\n const props = useMemo(\n () => ({ ...DEFAULT_PROPS, ...incomingProps }),\n [incomingProps]\n );\n\n // ✅ compute css var for bullets position\n const bulletsBottomVar = useMemo(() => {\n // outside => -40px (classic)\n // inside => 40px (into the slide area)\n return props.bulletsPosition === 'inside' ? '40px' : '-40px';\n }, [props.bulletsPosition]);\n\n // ✅ merge into root style (inline CSS vars)\n const rootStyle = useMemo(() => {\n const s = (props.style || {}) as any;\n return {\n ...s,\n ['--control-bullets-bottom']: bulletsBottomVar,\n } as React.CSSProperties;\n }, [props.style, bulletsBottomVar]);\n\n const ctxRef = useRef<RuntimeCtx | null>(null);\n const cbQueueRef = useRef<(() => void)[]>([]);\n const prevPropsRef = useRef<AwesomeSliderProps | null>(null);\n\n const [state, setState] = useState<AwesomeSliderState>(() => {\n const p0 = { ...DEFAULT_PROPS, ...incomingProps };\n\n const ctx = createInitialCtx(p0);\n ctxRef.current = ctx;\n\n ctx.engine = createEngine(() => ctxRef.current as any);\n ctx.model = createModel(() => ctxRef.current as any, ctx.engine);\n\n ctx.getInfo = () => ctx.model.getInfo();\n ctx.releaseTransition = () => ctx.engine.releaseTransition();\n\n // ✅ must run before first render (initial screen correctness)\n ctx.model.setupStartup(p0 as any);\n\n return ctx.state;\n });\n\n const setStateWithCb = useCallback(\n (patch: any, cb?: () => void) => {\n if (cb) cbQueueRef.current.push(cb);\n setState((prev) => {\n const nextPatch = typeof patch === 'function' ? patch(prev) : patch;\n return { ...prev, ...nextPatch };\n });\n },\n [setState]\n );\n\n // keep ctx in sync every render\n const ctx = ctxRef.current!;\n ctx.props = props;\n ctx.state = state;\n ctx.rootElement = props.rootElement || ROOTELM;\n ctx.setState = setStateWithCb;\n\n // flush queued \"setState callbacks\" after commit\n useLayoutEffect(() => {\n const c = ctxRef.current;\n if (!c) return;\n\n const q = cbQueueRef.current;\n if (!q.length) return;\n\n cbQueueRef.current = [];\n for (const fn of q) {\n if (c._mounted) fn();\n }\n }, [state]);\n\n // mount/unmount behavior (mirrors componentDidMount/WillUnmount)\n useLayoutEffect(() => {\n const c = ctxRef.current!;\n c._mounted = true;\n\n if (c.boxA) classListAdd(c.boxA, c.classNames.active);\n\n if (c.props.startupScreen) {\n if (c.buttons) {\n classListAdd(c.buttons.element, c.classNames.controlsHidden);\n classListAdd(c.buttons.element, c.classNames.controlsActive);\n }\n if (c.props.startup === true && (c.media || []).length > 0) {\n c.model.startup();\n }\n }\n\n if (c.props.onFirstMount) {\n c.props.onFirstMount({ ...c.getInfo() });\n }\n\n if (c.buttons) {\n onceNextCssLayout().then(() => {\n const cc = ctxRef.current;\n if (!cc || !cc._mounted) return;\n if (cc.buttons && cc.buttons.element) {\n classListRemove(cc.buttons.element, cc.classNames.controlsHidden);\n }\n });\n }\n\n return () => {\n const cc = ctxRef.current;\n if (!cc) return;\n cc._mounted = false;\n for (const id of cc._timeouts) clearTimeout(id);\n cc._timeouts.clear();\n };\n }, []);\n\n // props-change logic (mirrors componentDidUpdate guard)\n useEffect(() => {\n const c = ctxRef.current!;\n const prev = prevPropsRef.current;\n\n if (!prev) {\n prevPropsRef.current = props;\n return;\n }\n\n const didPropsChange =\n prev.children !== props.children ||\n prev.media !== props.media ||\n prev.cssModule !== props.cssModule ||\n prev.className !== props.className ||\n prev.animation !== props.animation ||\n prev.disabled !== props.disabled ||\n prev.fillParent !== props.fillParent ||\n prev.infinite !== props.infinite ||\n prev.organicArrows !== props.organicArrows ||\n prev.rootElement !== props.rootElement ||\n prev.startup !== props.startup ||\n prev.startupScreen !== props.startupScreen ||\n prev.name !== props.name ||\n prev.selected !== props.selected ||\n prev.bulletsPosition !== props.bulletsPosition; // ✅ include for completeness\n\n if (!didPropsChange) {\n prevPropsRef.current = props;\n return;\n }\n\n c.model.checkChildren(props as any, prev as any);\n c.model.setupClassNames(mergeStyles(props.cssModule));\n\n if (props.name !== prev.name) {\n c.model.resetSlider(c.model.getIndex(props.selected));\n prevPropsRef.current = props;\n return;\n }\n\n if (props.startup === true && c.started === false) {\n c.model.startup();\n prevPropsRef.current = props;\n return;\n }\n\n if (props.selected !== prev.selected) {\n const index = c.model.getIndex(props.selected);\n\n const direction =\n props.infinite === true &&\n index === 0 &&\n c.index === (c.media || []).length - 1\n ? true\n : !(c.index! > index);\n\n c.model.goTo({ index, direction });\n prevPropsRef.current = props;\n return;\n }\n\n c.model.refreshSlider();\n prevPropsRef.current = props;\n }, [\n props.children,\n props.media,\n props.cssModule,\n props.className,\n props.animation,\n props.disabled,\n props.fillParent,\n props.infinite,\n props.organicArrows,\n props.rootElement,\n props.startup,\n props.startupScreen,\n props.name,\n props.selected,\n props.bulletsPosition, // ✅\n ]);\n\n // imperative ref (best-effort compat vs old class refs)\n useImperativeHandle(\n ref,\n () => ({\n getInfo: () => ctxRef.current!.model.getInfo(),\n goTo: (args) => ctxRef.current!.model.goTo(args),\n resetSlider: (index?: number) =>\n ctxRef.current!.model.resetSlider(index),\n }),\n []\n );\n\n // handlers read/write ctxRef (no stale closures)\n const clickNext = useCallback(() => {\n const c = ctxRef.current!;\n const next = c.index === null ? 0 : c.index + 1;\n c.model.onTransitionRequest('next', next);\n c.model.goTo({ index: next, direction: true });\n }, []);\n\n const clickPrev = useCallback(() => {\n const c = ctxRef.current!;\n const prev = (c.index ?? 0) - 1;\n c.model.onTransitionRequest('prev', prev);\n c.model.goTo({ index: prev, direction: false });\n }, []);\n\n const touchStart = useCallback(\n (event: React.TouchEvent<HTMLDivElement>) => {\n const c = ctxRef.current!;\n if (c.animating) return;\n if (c.index === null) return;\n c.touchStartPoint = event.nativeEvent.touches[0].clientX;\n },\n []\n );\n\n const touchMove = useCallback((event: React.TouchEvent<HTMLDivElement>) => {\n const c = ctxRef.current!;\n if (c.animating || !c.touchStartPoint) return;\n\n let diff = event.nativeEvent.touches[0].clientX - c.touchStartPoint;\n\n const activeEl = (c as any)[c.active] as HTMLDivElement | null;\n const loaderEl = (c as any)[c.loader] as HTMLDivElement | null;\n if (!activeEl || !loaderEl) return;\n\n const direction = !(diff > 0);\n const abs = Math.abs(diff);\n\n if (c.touchEnabled === false) {\n if (abs > 20) {\n c.touchEnabled = true;\n c.touchStartPoint = event.nativeEvent.touches[0].clientX;\n }\n return;\n }\n\n if (abs >= 10) {\n if (c.loading === false) {\n c.model.goTo({\n index: direction ? (c.index ?? 0) + 1 : (c.index ?? 0) - 1,\n direction,\n touch: true,\n });\n } else if (c.direction === true) {\n diff += 10;\n if (Math.abs(diff) > activeEl.offsetWidth)\n diff = -activeEl.offsetWidth;\n else if (diff > 0) diff = 0;\n\n activeEl.style.transform = `translate3d(${diff}px, 0, 0)`;\n loaderEl.style.transform = `translate3d(calc(100% + ${diff}px), 0, 0)`;\n } else {\n diff -= 10;\n if (Math.abs(diff) > activeEl.offsetWidth)\n diff = activeEl.offsetWidth;\n else if (diff < 0) diff = 0;\n\n activeEl.style.transform = `translate3d(${diff}px, 0, 0)`;\n loaderEl.style.transform = `translate3d(calc(-100% + ${diff}px), 0, 0)`;\n }\n }\n }, []);\n\n const touchEnd = useCallback(() => {\n const c = ctxRef.current!;\n if (c.animating || !c.touchStartPoint || !c.loading) return;\n\n c.touchStartPoint = null;\n c.animating = true;\n c.touchEnabled = false;\n\n c.engine.animateMobileEnd(() => {\n const cc = ctxRef.current!;\n if (!cc._mounted) return;\n\n cc.index = cc.nextIndex;\n cc.setState({ index: cc.index });\n\n cc.model.onTransitionEnd();\n\n cc.animating = false;\n cc.loading = false;\n\n cc.model.unchargeIndex();\n });\n }, []);\n\n const setSliderRef = useCallback((el: HTMLDivElement | null) => {\n const c = ctxRef.current!;\n c.slider = el;\n }, []);\n\n const setWrapperRef = useCallback((el: HTMLDivElement | null) => {\n const c = ctxRef.current!;\n c.wrapper = el;\n }, []);\n\n const setContainerRef = useCallback((el: HTMLDivElement | null) => {\n const c = ctxRef.current!;\n c.container = el;\n }, []);\n\n const setBoxARef = useCallback((el: HTMLDivElement | null) => {\n const c = ctxRef.current!;\n c.boxA = el;\n }, []);\n\n const setBoxBRef = useCallback((el: HTMLDivElement | null) => {\n const c = ctxRef.current!;\n c.boxB = el;\n }, []);\n\n const renderBox = (box: 'A' | 'B') => {\n const c = ctxRef.current!;\n const extra: Partial<React.HTMLAttributes<HTMLDivElement>> = {};\n\n if (c.props.mobileTouch) {\n extra.onTouchStart = touchStart as any;\n extra.onTouchMove = touchMove as any;\n extra.onTouchEnd = touchEnd as any;\n }\n\n const refFn = box === 'A' ? setBoxARef : setBoxBRef;\n\n return (\n <div ref={refFn} className={c.classNames.box} {...extra}>\n {(state as any)[`box${box}`] && (\n <Media\n media={(state as any)[`box${box}`]}\n className={c.classNames.content}\n />\n )}\n </div>\n );\n };\n\n const rootElement = ctx.rootElement;\n\n return (\n <div\n ref={setSliderRef}\n className={ctx.model.getRootClassName()}\n style={rootStyle}\n >\n <div ref={setWrapperRef} className={ctx.classNames.wrapper}>\n <div ref={setContainerRef} className={ctx.classNames.container}>\n {renderBox('A')}\n {renderBox('B')}\n </div>\n\n {props.buttons && (\n <Buttons\n rootElement={rootElement}\n cssModule={mergeStyles(props.cssModule) as CssModuleMerged}\n onMount={(btns: ButtonsMountInfo) => {\n ctxRef.current!.buttons = btns;\n }}\n onNext={clickNext}\n onPrev={clickPrev}\n organicArrows={props.organicArrows}\n buttonContentLeft={props.buttonContentLeft}\n buttonContentRight={props.buttonContentRight}\n />\n )}\n\n {props.customContent}\n </div>\n\n {props.bullets && (\n <Bullets\n cssModule={mergeStyles(props.cssModule) as CssModuleMerged}\n rootElement={rootElement}\n media={(ctx.media || []) as any}\n selected={state.index as any}\n onClick={(info: any) => {\n ctx.model.onTransitionRequest('bullet', info.index);\n ctx.model.goTo(info);\n }}\n />\n )}\n </div>\n );\n }\n);\n\nAwesomeSlider.displayName = 'AwesomeSlider';\n\nexport default AwesomeSlider;\n","/* eslint-disable no-continue */\n/* eslint-disable no-restricted-syntax */\nimport { Children, isValidElement } from 'react';\nimport { classToModules, getClassName } from '../helpers/components';\n\nexport type CssModule = Record<string, string>;\nexport type CssModuleInput = CssModule | null | undefined;\nexport type CssModuleMerged = CssModule | null;\n\nexport type MediaItem = Record<string, any> & {\n source?: string;\n slug?: string;\n ['data-src']?: string;\n ['data-slug']?: string;\n};\n\nconst splitClasses = (classString: unknown): string[] =>\n typeof classString === 'string'\n ? classString.trim().split(/\\s+/).filter(Boolean)\n : [];\n\nexport const classListAdd = (\n element: Element | null | undefined,\n classString: unknown\n): void => {\n if (!element) return;\n const tokens = splitClasses(classString);\n if (!tokens.length) return;\n tokens.forEach((c) => element.classList.add(c));\n};\n\nexport const classListRemove = (\n element: Element | null | undefined,\n classString: unknown\n): void => {\n if (!element) return;\n const tokens = splitClasses(classString);\n if (!tokens.length) return;\n tokens.forEach((c) => element.classList.remove(c));\n};\n\nexport const getAnyClassName = (className: unknown): string => {\n const tokens = splitClasses(className);\n return tokens[0] || '';\n};\n\nexport const mergeStyles = (styles: unknown): CssModuleMerged => {\n const arr = Array.isArray(styles) ? styles : [styles];\n const modules = arr.filter(\n (m): m is CssModule => !!m && typeof m === 'object' && !Array.isArray(m)\n );\n\n if (modules.length === 0) return null;\n if (modules.length === 1) return modules[0];\n\n const out: CssModule = { ...modules[0] };\n\n for (let i = 1; i < modules.length; i += 1) {\n const mod = modules[i];\n for (const [key, val] of Object.entries(mod)) {\n if (!val) continue;\n out[key] = out[key] ? `${out[key]} ${val}` : val;\n }\n }\n\n return out;\n};\n\nexport type GetRootClassNameArgs = {\n rootElement: string;\n cssModule: CssModuleMerged;\n disabled?: boolean;\n organicArrows?: boolean;\n className?: string | null;\n total: number;\n current: number | null;\n infinite?: boolean;\n animation?: string | null;\n fillParent?: boolean;\n};\n\nexport function getRootClassName({\n rootElement,\n cssModule,\n disabled,\n organicArrows,\n className,\n total,\n current,\n infinite,\n animation,\n fillParent,\n}: GetRootClassNameArgs): string {\n let classNames: string[] = [rootElement];\n\n if (animation) classNames.push(`${rootElement}--${animation}`);\n if (organicArrows === true) classNames.push(`${rootElement}--organic-arrows`);\n if (disabled === true) classNames.push(`${rootElement}--disabled`);\n if (fillParent) classNames.push(`${rootElement}--fill-parent`);\n\n if (infinite === false && typeof current === 'number') {\n if (current === 0) classNames.push(`${rootElement}--first`);\n if (current === total - 1) classNames.push(`${rootElement}--last`);\n }\n\n // keep existing behavior: only module-map if it looks like a module map\n if (cssModule && cssModule[rootElement]) {\n classNames = classToModules(classNames, cssModule as any) as any;\n }\n\n if (className) classNames.push(...splitClasses(className));\n\n return classNames.join(' ').trim();\n}\n\nexport function transformChildren(children: unknown): MediaItem[] {\n const media: MediaItem[] = [];\n const items = Children.toArray(children as any);\n\n items.forEach((child) => {\n if (!isValidElement(child)) return;\n\n const props: Record<string, any> = (child as any).props || {};\n const item: MediaItem = { ...props };\n\n if (props['data-src']) item.source = props['data-src'];\n if (props['data-slug']) item.slug = props['data-slug'];\n\n media.push(item);\n });\n\n return media;\n}\n\nexport type ClassNames = {\n boxA: string;\n boxB: string;\n box: string;\n container: string;\n wrapper: string;\n bar: string;\n barActive: string;\n barEnd: string;\n content: string;\n contentStatic: string;\n contentMoveLeft: string;\n contentMoveRight: string;\n controlsHidden: string;\n controlsActive: string;\n animated: string;\n animatedMobile: string;\n contentExit: string;\n exit: string;\n active: string;\n moveLeft: string;\n moveRight: string;\n startUp: string;\n bulletsLoading: string;\n};\n\nexport function setupClassNames(\n rootElement: string,\n cssModule: CssModuleMerged\n): ClassNames {\n return {\n boxA: getClassName(`${rootElement}__boxA`, cssModule as any),\n boxB: getClassName(`${rootElement}__boxB`, cssModule as any),\n box: getClassName(`${rootElement}__box`, cssModule as any),\n container: getClassName(`${rootElement}__container`, cssModule as any),\n wrapper: getClassName(`${rootElement}__wrapper`, cssModule as any),\n bar: getClassName(`${rootElement}__bar`, cssModule as any),\n barActive: getClassName(`${rootElement}__bar--active`, cssModule as any),\n barEnd: getClassName(`${rootElement}__bar--end`, cssModule as any),\n content: getClassName(`${rootElement}__content`, cssModule as any),\n contentStatic: getClassName(\n `${rootElement}__content--static`,\n cssModule as any\n ),\n contentMoveLeft: getClassName(\n `${rootElement}__content--moveLeft`,\n cssModule as any\n ),\n contentMoveRight: getClassName(\n `${rootElement}__content--moveRight`,\n cssModule as any\n ),\n controlsHidden: getClassName(\n `${rootElement}__controls--hidden`,\n cssModule as any\n ),\n controlsActive: getClassName(\n `${rootElement}__controls--active`,\n cssModule as any\n ),\n animated: getClassName(`${rootElement}--animated`, cssModule as any),\n animatedMobile: getClassName(\n `${rootElement}--animated-mobile`,\n cssModule as any\n ),\n contentExit: getClassName(\n `${rootElement}__content--exit`,\n cssModule as any\n ),\n exit: getClassName(`${rootElement}--exit`, cssModule as any),\n active: getClassName(`${rootElement}--active`, cssModule as any),\n moveLeft: getClassName(`${rootElement}--moveLeft`, cssModule as any),\n moveRight: getClassName(`${rootElement}--moveRight`, cssModule as any),\n startUp: getClassName(`${rootElement}__startUp`, cssModule as any),\n bulletsLoading: getClassName(\n `${rootElement}__bullets--loading`,\n cssModule as any\n ),\n };\n}\n","// helpers/components.ts\n\nexport class MediaLoader {\n private image?: HTMLImageElement;\n private video?: HTMLVideoElement;\n\n private resolve: ((ok: boolean) => void) | null = null;\n\n private loaded = 0;\n private toLoad = 0;\n private resolver: ((ok: boolean) => void) | null = null;\n\n constructor() {\n if (typeof window !== 'undefined') {\n this.image = new Image();\n this.video = document.createElement('video');\n this.video.preload = 'auto';\n this.video.muted = true; // helps some browsers actually load metadata\n\n this.events();\n }\n }\n\n private events() {\n // In SSR / no-dom environments, nothing to wire.\n if (!this.video || !this.image) return;\n\n // Video: resolve true on loadeddata, false on error\n this.video.addEventListener('loadeddata', () => {\n if (this.resolve) this.resolve(true);\n });\n this.video.addEventListener('error', () => {\n if (this.resolve) this.resolve(false);\n });\n\n // Image: resolve true on load, false on error\n this.image.onload = () => this.resolve && this.resolve(true);\n this.image.onerror = () => this.resolve && this.resolve(false);\n }\n\n load(url?: string | null): Promise<boolean> {\n return new Promise((resolve) => {\n if (!url) {\n resolve(true);\n return;\n }\n\n // SSR fallback: can't actually preload, but don't deadlock.\n if (!this.image || !this.video) {\n resolve(true);\n return;\n }\n\n this.resolve = resolve;\n\n // Heuristic: treat extensionless as image\n const isVideo = /\\.(mp4|webm)(\\?|#|$)/i.test(url);\n if (isVideo) {\n try {\n this.video.setAttribute('src', url);\n if (typeof this.video.load === 'function') this.video.load();\n } catch {\n resolve(false);\n }\n return;\n }\n\n // default image\n this.image.src = url;\n\n // if cached and dimensions already known, resolve immediately\n if (\n this.image.complete &&\n (this.image.naturalWidth > 0 || this.image.naturalHeight > 0)\n ) {\n resolve(true);\n }\n });\n }\n\n private loadImage(url: string) {\n const image = new Image();\n let done = false;\n\n const finish = () => {\n if (done) return;\n done = true;\n this.pumpLoaded();\n };\n\n image.onload = finish;\n image.onerror = finish;\n image.src = url;\n\n // cached fast-path\n if (image.complete && (image.naturalWidth > 0 || image.naturalHeight > 0)) {\n finish();\n }\n }\n\n private loadVideo(url: string) {\n const video = document.createElement('video');\n video.preload = 'auto';\n video.muted = true;\n\n let done = false;\n const finish = () => {\n if (done) return;\n done = true;\n this.pumpLoaded();\n };\n\n video.addEventListener('loadeddata', finish);\n video.addEventListener('error', finish);\n\n try {\n video.setAttribute('src', url);\n if (typeof video.load === 'function') video.load();\n } catch {\n finish();\n }\n }\n\n private pumpLoaded() {\n this.loaded += 1;\n if (this.loaded >= this.toLoad) {\n if (this.resolver) this.resolver(true);\n }\n }\n\n private startLoad(url?: string | null) {\n if (!url) {\n this.pumpLoaded();\n return;\n }\n\n const isVideo = /\\.(mp4|webm)(\\?|#|$)/i.test(url);\n\n if (isVideo) {\n this.loadVideo(url);\n return;\n }\n\n // ✅ IMPORTANT: extensionless URLs are treated as images\n this.loadImage(url);\n }\n\n loadMultiple(urls: unknown): Promise<boolean> {\n const list: string[] = Array.isArray(urls)\n ? (urls.filter((u) => typeof u === 'string') as string[])\n : [];\n\n this.loaded = 0;\n this.toLoad = list.length;\n\n return new Promise((resolve) => {\n this.resolver = resolve;\n\n if (this.toLoad === 0) {\n resolve(true);\n return;\n }\n\n list.forEach((url) => {\n this.startLoad(url);\n });\n });\n }\n}\n\nexport function serialize(\n obj: Record<string, any>,\n separator: string = '&'\n): string {\n return Object.entries(obj)\n .map(([key, val]) => `${key}=${val}`)\n .join(separator);\n}\n\nexport function classToModules(\n classNames: string[] = [],\n cssModule?: Record<string, string> | null\n): string[] {\n if (!cssModule) {\n return classNames.join(' ').trim().split(' ').filter(Boolean);\n }\n const result: string[] = [];\n let i = classNames.length;\n while (i--) {\n const k = classNames[i];\n if (cssModule[k]) result.push(cssModule[k]);\n }\n return result;\n}\n\nexport function getClassName(\n className: string = '',\n cssModule?: Record<string, string> | null\n): string {\n if (cssModule) {\n return cssModule[className] || className;\n }\n return className;\n}\n","/* eslint-disable no-continue */\n/* eslint-disable no-restricted-syntax */\nimport {\n onceNextCssLayout,\n onceTransitionEnd,\n onceAnimationEnd,\n} from '@rcaferati/wac';\nimport { getClassName, MediaLoader } from '../helpers/components';\nimport {\n mergeStyles,\n getAnyClassName,\n classListAdd,\n classListRemove,\n} from './helpers';\n\nimport type { MediaItem } from './helpers';\nimport type { SliderBoxKey, CtxLike } from './model';\n\nconst mediaLoader = new MediaLoader();\n\nconst parseTimeMaxMs = (cssTime: string): number => {\n const parts = String(cssTime || '')\n .split(',')\n .map((p) => p.trim())\n .filter(Boolean);\n\n let max = 0;\n for (const p of parts) {\n if (p.endsWith('ms')) {\n const n = Number.parseFloat(p);\n if (!Number.isNaN(n)) max = Math.max(max, n);\n } else if (p.endsWith('s')) {\n const n = Number.parseFloat(p);\n if (!Number.isNaN(n)) max = Math.max(max, n * 1000);\n }\n }\n return max;\n};\n\nconst readSnapshot = (el: HTMLElement | Element | null) => {\n if (!el || typeof window === 'undefined') return null;\n const node = el as HTMLElement;\n const cs = window.getComputedStyle(node);\n return {\n tag: node.tagName,\n className: node.className,\n animationName: cs.animationName,\n animationDuration: cs.animationDuration,\n animationDelay: cs.animationDelay,\n animationIterationCount: cs.animationIterationCount,\n animationPlayState: cs.animationPlayState,\n transitionProperty: cs.transitionProperty,\n transitionDuration: cs.transitionDuration,\n transitionDelay: cs.transitionDelay,\n };\n};\n\nconst getTransitionTotalMs = (el: Element | null) => {\n const snap = readSnapshot(el);\n if (!snap) return 0;\n return (\n parseTimeMaxMs(snap.transitionDuration) +\n parseTimeMaxMs(snap.transitionDelay)\n );\n};\n\nconst getAnimationTotalMs = (el: Element | null) => {\n const snap = readSnapshot(el);\n if (!snap) return 0;\n return (\n parseTimeMaxMs(snap.animationDuration) + parseTimeMaxMs(snap.animationDelay)\n );\n};\n\nconst withTimeout = <T>(\n p: Promise<T>,\n ms: number,\n _label: string,\n _meta?: any\n): Promise<\n | { ok: true; value: T }\n | { ok: false; reason: 'timeout' | 'error'; error?: any }\n> =>\n new Promise((resolve) => {\n let done = false;\n\n const t = setTimeout(\n () => {\n if (done) return;\n done = true;\n resolve({ ok: false, reason: 'timeout' });\n },\n Math.max(0, ms | 0)\n );\n\n p.then((v) => {\n if (done) return;\n done = true;\n clearTimeout(t);\n resolve({ ok: true, value: v });\n }).catch((e) => {\n if (done) return;\n done = true;\n clearTimeout(t);\n resolve({ ok: false, reason: 'error', error: e });\n });\n });\n\nexport type EngineCtxLike = Pick<\n CtxLike,\n | 'props'\n | 'classNames'\n | 'rootElement'\n | 'active'\n | 'loader'\n | 'index'\n | 'nextIndex'\n | 'loading'\n | 'direction'\n | '_mounted'\n | '_setTimeout'\n> & {\n boxA: HTMLElement;\n boxB: HTMLElement;\n\n loaded: string[];\n bar: HTMLDivElement | null;\n\n buttons: {\n element: HTMLElement;\n next: HTMLElement;\n prev: HTMLElement;\n } | null;\n\n // ✅ HTMLElement so it can be passed to onceTransitionEnd typings\n activeArrow: HTMLElement | null;\n activeArrowClass: string | null;\n\n active: SliderBoxKey;\n loader: SliderBoxKey;\n\n releaseTransition: () => void;\n getInfo: () => Record<string, any>;\n};\n\nexport type EngineLike = {\n getProgressBar: () => HTMLDivElement | null;\n startBarAnimation: (args: {\n active: HTMLElement;\n }) => Promise<HTMLDivElement | null>;\n endBarAnimation: (callback: () => void) => void;\n\n pushLoaded: (urls: string[]) => void;\n checkLoadedUrls: (urls: string[]) => boolean;\n loadContent: (\n active: HTMLElement,\n media: MediaItem\n ) => Promise<HTMLDivElement | null>;\n\n startAnimationMobile: () => void;\n animateMobileEnd: (callback?: () => void) => void;\n\n runAnimation: (args: any) => void;\n startAnimation: (\n direction: boolean,\n media: MediaItem,\n callback: (res: { release?: boolean }) => void\n ) => void;\n\n releaseTransition: () => void;\n\n activateArrows: (direction: boolean, callback?: () => void) => void;\n};\n\nexport function createEngine(getCtx: () => EngineCtxLike): EngineLike {\n return {\n getProgressBar() {\n const ctx = getCtx();\n if (typeof document === 'undefined') return null;\n const bar = document.createElement('div');\n bar.className = ctx.classNames.bar;\n return bar;\n },\n\n startBarAnimation({ active }: { active: HTMLElement }) {\n return new Promise((resolve) => {\n const ctx = getCtx();\n const bar = this.getProgressBar();\n ctx.bar = bar;\n\n if (!bar || !active) {\n resolve(null);\n return;\n }\n\n active.appendChild(bar);\n\n onceNextCssLayout()\n .then(() => onceNextCssLayout())\n .then(() => {\n const c = getCtx();\n if (!c._mounted) return;\n classListAdd(bar, c.classNames.barActive);\n resolve(bar);\n });\n });\n },\n\n endBarAnimation(callback: () => void) {\n const ctx = getCtx();\n const bar = ctx.bar;\n\n if (!bar) {\n callback();\n return;\n }\n\n onceNextCssLayout().then(() => {\n const c = getCtx();\n if (!c._mounted) return;\n\n classListAdd(bar, c.classNames.barEnd);\n\n const totalMs = getTransitionTotalMs(bar);\n if (!totalMs) {\n callback();\n return;\n }\n\n const waitMs = Math.max(250, Math.ceil(totalMs) + 250);\n\n withTimeout(\n onceTransitionEnd(bar),\n waitMs,\n 'endBarAnimation/onceTransitionEnd',\n { totalMs }\n ).then(() => {\n const cc = getCtx();\n if (!cc._mounted) return;\n callback();\n });\n });\n },\n\n pushLoaded(urls: string[]) {\n const ctx = getCtx();\n ctx.loaded = [...ctx.loaded, ...urls];\n },\n\n checkLoadedUrls(urls: string[]) {\n const ctx = getCtx();\n return urls.every((url) => ctx.loaded.includes(url));\n },\n\n async loadContent(active: HTMLElement, media: MediaItem) {\n const ctx = getCtx();\n\n // --- callback-based loader (user-provided) ----------------------------\n if (ctx.props.onLoadStart || (media && (media as any).onLoadStart)) {\n const caller =\n ctx.props.onLoadStart || (media && (media as any).onLoadStart);\n\n await this.startBarAnimation({ active });\n\n return await new Promise<HTMLDivElement | null>((resolve, reject) => {\n try {\n caller({\n next: () => {\n this.endBarAnimation(() => {\n resolve(getCtx().bar);\n });\n },\n error: (e: any) => reject(e),\n ...getCtx().getInfo(),\n });\n } catch (e) {\n reject(e);\n }\n });\n }\n\n // --- default media loading -------------------------------------------\n if (media && ((media as any).source || (media as any).preload)) {\n const urls: string[] = (media as any).preload\n ? (media as any).preload\n : (((media as any).source && [(media as any).source]) as any) || [];\n\n if (this.checkLoadedUrls(urls) === true) return null;\n\n await this.startBarAnimation({ active });\n\n const settle = await withTimeout(\n mediaLoader.loadMultiple(urls),\n 8000,\n 'MediaLoader.loadMultiple',\n { urls }\n );\n\n if (settle.ok) {\n const c = getCtx();\n if (!c._mounted) return null;\n this.pushLoaded(urls);\n }\n\n await new Promise<void>((resolve) => {\n this.endBarAnimation(() => resolve());\n });\n\n return getCtx().bar;\n }\n\n return null;\n },\n\n // --- Mobile animation ---------------------------------------------------\n\n startAnimationMobile() {\n const ctx = getCtx();\n const active = (ctx as any)[ctx.active] as HTMLElement;\n const loader = (ctx as any)[ctx.loader] as HTMLElement;\n\n const contentEnterMoveClass = ctx.direction\n ? ctx.classNames.contentMoveRight\n : ctx.classNames.contentMoveLeft;\n\n const contentExitMoveClass = ctx.direction\n ? ctx.classNames.contentMoveLeft\n : ctx.classNames.contentMoveRight;\n\n const activeContent = active.querySelector(\n `.${getAnyClassName(ctx.classNames.content)}`\n ) as Element;\n\n const loaderContent = loader.querySelector(\n `.${getAnyClassName(ctx.classNames.content)}`\n ) as Element;\n\n classListAdd(activeContent, contentExitMoveClass);\n classListAdd(activeContent, ctx.classNames.contentExit);\n\n classListAdd(loaderContent, contentEnterMoveClass);\n classListAdd(loaderContent, ctx.classNames.contentStatic);\n\n classListAdd(active, ctx.classNames.animated);\n classListAdd(loader, ctx.classNames.animated);\n },\n\n animateMobileEnd(callback?: () => void) {\n const ctx = getCtx();\n const active = (ctx as any)[ctx.active] as HTMLElement;\n const loader = (ctx as any)[ctx.loader] as HTMLElement;\n\n const exitPosition = ctx.direction\n ? ctx.classNames.moveLeft\n : ctx.classNames.moveRight;\n\n const contentEnterMoveClass = ctx.direction\n ? ctx.classNames.contentMoveRight\n : ctx.classNames.contentMoveLeft;\n\n const contentExitMoveClass = ctx.direction\n ? ctx.classNames.contentMoveLeft\n : ctx.classNames.contentMoveRight;\n\n const loaderContent = loader.querySelector(\n `.${getAnyClassName(ctx.classNames.content)}`\n ) as Element;\n\n const activeContent = active.querySelector(\n `.${getAnyClassName(ctx.classNames.content)}`\n ) as Element;\n\n classListRemove(loaderContent, ctx.classNames.contentStatic);\n classListAdd(loader, ctx.classNames.animatedMobile);\n classListAdd(active, ctx.classNames.animatedMobile);\n\n onceNextCssLayout().then(() => {\n const c = getCtx();\n if (!c._mounted) return;\n\n loader.style.transform = 'translate3d(0, 0, 0)';\n active.style.transform = `translate3d(${c.direction ? '-' : ''}100%, 0, 0)`;\n\n const totalMs = getTransitionTotalMs(active);\n const waitMs = totalMs ? Math.max(250, Math.ceil(totalMs) + 250) : 0;\n\n const done = () => {\n const cc = getCtx();\n if (!cc._mounted) return;\n if (!cc.loading) return;\n\n classListRemove(active, cc.classNames.animated);\n classListRemove(loader, cc.classNames.animated);\n classListAdd(loader, cc.classNames.active);\n classListRemove(active, cc.classNames.active);\n classListRemove(active, exitPosition);\n classListRemove(loader, cc.classNames.animatedMobile);\n classListRemove(active, cc.classNames.animatedMobile);\n classListRemove(activeContent, contentExitMoveClass);\n classListRemove(activeContent, cc.classNames.contentExit);\n classListRemove(loaderContent, contentEnterMoveClass);\n\n if (cc.buttons) {\n cc._setTimeout(() => {\n const ccc = getCtx();\n if (ccc.buttons) {\n classListRemove(\n ccc.buttons.element,\n ccc.classNames.controlsActive\n );\n }\n }, cc.props.controlsReturnDelay || 0);\n }\n\n if (cc.activeArrow) {\n classListRemove(cc.activeArrow, cc.activeArrowClass || '');\n cc.activeArrow = null;\n cc.activeArrowClass = null;\n }\n\n cc.active = cc.active === 'boxA' ? 'boxB' : 'boxA';\n cc.loader = cc.active === 'boxA' ? 'boxB' : 'boxA';\n\n if (callback) callback();\n };\n\n if (!waitMs) {\n done();\n return;\n }\n\n withTimeout(\n onceTransitionEnd(active),\n waitMs,\n 'animateMobileEnd/onceTransitionEnd',\n { totalMs }\n ).then(() => done());\n });\n },\n\n // --- Desktop animation --------------------------------------------------\n\n runAnimation(args: any) {\n const {\n active,\n media,\n contentExitMoveClass,\n contentEnterMoveClass,\n activeContentElement,\n loaderContentElement,\n loader,\n loaderPosition,\n exitPosition,\n callback,\n transitionDelay,\n } = args;\n\n this.loadContent(active, media).then((bar) => {\n const ctx = getCtx();\n if (!ctx._mounted) return;\n\n classListAdd(activeContentElement, contentExitMoveClass);\n classListAdd(activeContentElement, ctx.classNames.contentExit);\n classListAdd(loaderContentElement, contentEnterMoveClass);\n classListAdd(loaderContentElement, ctx.classNames.contentStatic);\n\n ctx._setTimeout(() => {\n const c = getCtx();\n if (!c._mounted) return;\n\n onceNextCssLayout().then(() => {\n const cc = getCtx();\n if (!cc._mounted) return;\n\n classListAdd(active, cc.classNames.animated);\n classListAdd(loader, cc.classNames.animated);\n classListRemove(loaderContentElement, cc.classNames.contentStatic);\n classListAdd(active, cc.classNames.exit);\n classListAdd(loader, loaderPosition);\n classListAdd(active, exitPosition);\n\n const animTotal = getAnimationTotalMs(active);\n const waitMs = animTotal\n ? Math.max(300, Math.ceil(animTotal) + 300)\n : 0;\n\n const finish = () => {\n const ccc = getCtx();\n if (!ccc._mounted) return;\n\n classListAdd(loader, ccc.classNames.active);\n classListRemove(loader, loaderPosition);\n classListRemove(loader, ccc.classNames.animated);\n classListRemove(active, ccc.classNames.animated);\n classListRemove(active, ccc.classNames.active);\n classListRemove(active, exitPosition);\n classListRemove(active, ccc.classNames.exit);\n classListRemove(activeContentElement, contentExitMoveClass);\n classListRemove(activeContentElement, ccc.classNames.contentExit);\n classListRemove(loaderContentElement, contentEnterMoveClass);\n\n if (bar && active.contains(bar)) active.removeChild(bar);\n\n if (ccc.buttons) {\n ccc._setTimeout(() => {\n const c4 = getCtx();\n if (c4.buttons) {\n classListRemove(\n c4.buttons.element,\n c4.classNames.controlsActive\n );\n }\n }, ccc.props.controlsReturnDelay || 0);\n }\n\n ccc.active = ccc.active === 'boxA' ? 'boxB' : 'boxA';\n ccc.loader = ccc.active === 'boxA' ? 'boxB' : 'boxA';\n\n const release = !ccc.activeArrow;\n\n if (ccc.activeArrow) {\n const arrow = ccc.activeArrow; // HTMLElement (type-safe)\n\n onceTransitionEnd(arrow, {\n tolerance: ccc.index === null ? 0 : 2,\n }).then(() => {\n const c5 = getCtx();\n if (!c5._mounted) return;\n c5.releaseTransition();\n });\n\n classListRemove(arrow, ccc.activeArrowClass || '');\n ccc.activeArrow = null;\n ccc.activeArrowClass = null;\n }\n\n callback({ release });\n };\n\n if (!waitMs) {\n finish();\n return;\n }\n\n withTimeout(\n onceAnimationEnd(active),\n waitMs,\n 'runAnimation/onceAnimationEnd',\n { animTotal }\n ).then(() => finish());\n });\n }, transitionDelay);\n });\n },\n\n releaseTransition() {\n const ctx = getCtx();\n ctx.loading = false;\n },\n\n startAnimation(\n direction: boolean,\n media: MediaItem,\n callback: (res: { release?: boolean }) => void\n ) {\n const ctx = getCtx();\n\n const active = (ctx as any)[ctx.active] as HTMLElement;\n const loader = (ctx as any)[ctx.loader] as HTMLElement;\n\n const loaderPosition = direction\n ? ctx.classNames.moveRight\n : ctx.classNames.moveLeft;\n\n const exitPosition = direction\n ? ctx.classNames.moveLeft\n : ctx.classNames.moveRight;\n\n const contentEnterMoveClass = direction\n ? ctx.classNames.contentMoveRight\n : ctx.classNames.contentMoveLeft;\n\n const contentExitMoveClass = direction\n ? ctx.classNames.contentMoveLeft\n : ctx.classNames.contentMoveRight;\n\n const activeContentElement = active.querySelector(\n `.${getAnyClassName(ctx.classNames.content)}`\n ) as Element;\n\n const loaderContentElement = loader.querySelector(\n `.${getAnyClassName(ctx.classNames.content)}`\n ) as Element;\n\n active.style.removeProperty('transform');\n loader.style.removeProperty('transform');\n\n this.runAnimation({\n active,\n media,\n contentExitMoveClass,\n contentEnterMoveClass,\n activeContentElement,\n loaderContentElement,\n loader,\n loaderPosition,\n exitPosition,\n callback,\n transitionDelay: ctx.props.transitionDelay || 0,\n });\n },\n\n activateArrows(direction: boolean, callback?: () => void) {\n const ctx = getCtx();\n const dirName = direction ? 'right' : 'left';\n const mergedStyles = mergeStyles(ctx.props.cssModule);\n\n const arrowClass = getAnyClassName(\n getClassName(\n `${ctx.rootElement}__controls__arrow-${dirName}`,\n mergedStyles as any\n )\n );\n\n if (ctx.buttons) {\n const activeArrowRoot = direction ? ctx.buttons.next : ctx.buttons.prev;\n ctx.activeArrow = activeArrowRoot.querySelector(\n `.${arrowClass}`\n ) as HTMLElement | null;\n }\n\n if (\n !ctx.activeArrow ||\n (ctx.buttons &&\n ctx.buttons.element &&\n ctx.buttons.element.classList.contains(ctx.classNames.controlsActive))\n ) {\n if (callback) callback();\n return;\n }\n\n ctx.activeArrowClass = getClassName(\n `${ctx.rootElement}__controls__arrow-${dirName}--active`,\n mergedStyles as any\n );\n\n onceTransitionEnd(ctx.activeArrow, {\n tolerance: ctx.index === null ? 0 : 2,\n }).then(() => {\n const c = getCtx();\n if (!c._mounted) return;\n if (callback) callback();\n });\n\n if (ctx.buttons && ctx.buttons.element) {\n classListAdd(ctx.buttons.element, ctx.classNames.controlsActive);\n classListAdd(ctx.activeArrow, ctx.activeArrowClass);\n }\n },\n };\n}\n\nexport default createEngine;\n","/* eslint-disable no-continue */\n/* eslint-disable no-restricted-syntax */\nimport {\n getRootClassName,\n setupClassNames,\n transformChildren,\n mergeStyles,\n} from './helpers';\n\nimport type { ClassNames, CssModuleMerged, MediaItem } from './helpers';\n\n// ---- Types -----------------------------------------------------------------\n\nexport type SliderBoxKey = 'boxA' | 'boxB';\n\nexport type SliderState = {\n index: number | null;\n boxA: any;\n boxB: any;\n};\n\nexport type TransitionInfo = {\n slides: number;\n currentIndex: number | null;\n currentSlide: HTMLElement | null;\n currentMedia: MediaItem | undefined;\n element: HTMLElement | null;\n [k: string]: any;\n};\n\nexport type TransitionRejectInfo = TransitionInfo & {\n forceTransition: () => void;\n};\n\nexport type SliderPropsLike = {\n animation?: string | null;\n className?: string | null;\n cssModule?: any;\n disabled?: boolean;\n fillParent?: boolean;\n infinite?: boolean;\n organicArrows?: boolean;\n startup?: boolean;\n startupDelay?: number;\n startupScreen?: any;\n selected?: any;\n name?: string;\n\n children?: any;\n media?: MediaItem[];\n\n onLoadStart?: ((payload: any) => void) | null;\n onFirstMount?: ((info: any) => void) | null;\n onResetSlider?: ((info: any) => void) | null;\n onStartupRelease?: ((info: any) => void) | null;\n\n onTransitionStart?: ((info: any) => void) | null;\n onTransitionEnd?: ((info: any) => void) | null;\n onTransitionRequest?: ((info: any) => void) | null;\n onTransitionReject?: ((info: TransitionRejectInfo) => void) | null;\n\n controlsReturnDelay?: number;\n transitionDelay?: number;\n};\n\nexport type EngineLike = {\n activateArrows: (direction: boolean, callback?: () => void) => void;\n startAnimationMobile: () => void;\n startAnimation: (\n direction: boolean,\n media: MediaItem,\n callback: (res: { release?: boolean }) => void\n ) => void;\n releaseTransition: () => void;\n};\n\nexport type CtxLike = {\n // \"reacty\" bits\n props: SliderPropsLike;\n state: SliderState;\n setState: (patch: any, cb?: () => void) => void;\n\n // runtime fields used by model\n rootElement: string;\n classNames: ClassNames;\n media: MediaItem[];\n\n active: SliderBoxKey;\n loader: SliderBoxKey;\n\n index: number | null;\n nextIndex: number | null;\n\n loading: boolean;\n direction: boolean;\n started: boolean;\n\n _mounted: boolean;\n _setTimeout: (fn: () => void, ms: number) => any;\n\n // DOM refs (for info payloads)\n slider: HTMLElement | null;\n\n // dynamic boxes on ctx: ctx.boxA / ctx.boxB\n boxA: HTMLElement | null;\n boxB: HTMLElement | null;\n\n // misc used in goTo\n renderedLoader?: boolean;\n\n // EngineCtxLike includes \"getInfo\" via Pick<CtxLike,...>.\n getInfo: () => TransitionInfo;\n};\n\n// ---- API -------------------------------------------------------------------\n\nexport type GoToArgs = {\n index: any;\n direction: boolean;\n touch?: boolean;\n};\n\nexport type CreateModel = (\n getCtx: () => CtxLike,\n engine: EngineLike\n) => {\n onTransitionStart: () => void;\n onTransitionRequest: (event: string, index: number) => void;\n onTransitionEnd: () => void;\n\n getRootClassName: () => string;\n setupClassNames: (cssModule: CssModuleMerged) => void;\n\n setupStartup: (props: SliderPropsLike) => void;\n\n getInfo: () => TransitionInfo;\n\n getIndex: (index: any) => number;\n checkIndex: (index: number) => number;\n\n checkChildren: (props: SliderPropsLike, prevProps?: SliderPropsLike) => void;\n\n refreshSlider: () => void;\n\n startup: () => void;\n resetSlider: (index?: number) => void;\n\n chargeIndex: (index: number, callback: (media: MediaItem) => void) => void;\n unchargeIndex: () => void;\n\n goTo: (args: GoToArgs) => void;\n};\n\n// ---- Implementation --------------------------------------------------------\n\nexport const createModel: CreateModel = (getCtx, engine) => {\n const api = {\n onTransitionStart() {\n const ctx = getCtx();\n const nextMedia = ctx.media[ctx.nextIndex ?? 0];\n\n const data = {\n ...api.getInfo(),\n nextSlide: (ctx as any)[ctx.loader] as HTMLElement | null,\n nextIndex: ctx.nextIndex,\n nextMedia,\n };\n\n if (ctx.props.onTransitionStart) ctx.props.onTransitionStart(data);\n\n const currentMedia = ctx.media[ctx.index ?? 0];\n if (currentMedia && (currentMedia as any).onTransitionStartOut) {\n (currentMedia as any).onTransitionStartOut(data);\n }\n if (nextMedia && (nextMedia as any).onTransitionStartIn) {\n (nextMedia as any).onTransitionStartIn(data);\n }\n },\n\n onTransitionRequest(event: string, index: number) {\n const ctx = getCtx();\n const nextIndex = api.checkIndex(index);\n const nextMedia = ctx.media[nextIndex];\n\n const data = {\n eventName: event,\n ...api.getInfo(),\n nextSlide: null,\n nextIndex,\n nextMedia,\n };\n\n if (ctx.props.onTransitionRequest) ctx.props.onTransitionRequest(data);\n\n const currentMedia = ctx.media[ctx.index ?? 0];\n if (currentMedia && (currentMedia as any).onTransitionRequestOut) {\n (currentMedia as any).onTransitionRequestOut(data);\n }\n if (nextMedia && (nextMedia as any).onTransitionRequestIn) {\n (nextMedia as any).onTransitionRequestIn(data);\n }\n },\n\n onTransitionEnd() {\n const ctx = getCtx();\n const data = { ...api.getInfo() };\n\n if (ctx.props.onTransitionEnd) ctx.props.onTransitionEnd(data);\n\n const currentMedia = ctx.media[ctx.index ?? 0];\n if (currentMedia && (currentMedia as any).onTransitionEnd) {\n (currentMedia as any).onTransitionEnd(data);\n }\n },\n\n getRootClassName() {\n const ctx = getCtx();\n const {\n animation,\n className,\n cssModule,\n disabled,\n fillParent,\n infinite,\n organicArrows,\n } = ctx.props;\n\n return getRootClassName({\n animation: animation ?? null,\n className: className ?? null,\n cssModule: mergeStyles(cssModule),\n current: ctx.state.index,\n disabled: !!disabled,\n fillParent: !!fillParent,\n infinite: infinite !== false,\n organicArrows: organicArrows !== false,\n rootElement: ctx.rootElement,\n total: ctx.media.length,\n });\n },\n\n setupClassNames(cssModule: CssModuleMerged) {\n const ctx = getCtx();\n ctx.classNames = setupClassNames(ctx.rootElement, cssModule);\n },\n\n setupStartup(props: SliderPropsLike) {\n const ctx = getCtx();\n\n api.checkChildren(props);\n api.setupClassNames(mergeStyles(props.cssModule));\n\n if (props.startupScreen) {\n const nextIndex = api.getIndex(props.selected);\n ctx.index = null;\n\n (ctx as any).state = {\n index: ctx.index,\n boxA: {\n className: ctx.classNames.startUp,\n children: props.startupScreen,\n },\n boxB: ctx.media[nextIndex] || null,\n } satisfies SliderState;\n } else {\n ctx.started = true;\n ctx.index = api.getIndex(props.selected);\n\n (ctx as any).state = {\n index: ctx.index,\n boxA: ctx.media[ctx.index] || null,\n boxB: null,\n } satisfies SliderState;\n }\n },\n\n getInfo(): TransitionInfo {\n const ctx = getCtx();\n return {\n slides: ctx.media.length,\n currentIndex: ctx.index,\n currentSlide: (ctx as any)[ctx.active] as HTMLElement | null,\n currentMedia: ctx.media[ctx.index ?? 0],\n element: ctx.slider,\n };\n },\n\n getIndex(index: any): number {\n const ctx = getCtx();\n let nextIndex = 0;\n\n if (typeof index === 'number') return index;\n\n if (typeof index === 'string') {\n const found = ctx.media.findIndex((m: any) => m && m.slug === index);\n nextIndex = found >= 0 ? found : 0;\n }\n\n return nextIndex;\n },\n\n checkIndex(index: number): number {\n const ctx = getCtx();\n return index > ctx.media.length - 1\n ? 0\n : index < 0\n ? ctx.media.length - 1\n : index;\n },\n\n checkChildren(props: SliderPropsLike, prevProps?: SliderPropsLike) {\n const ctx = getCtx();\n const prevChildren = prevProps ? prevProps.children : ctx.props.children;\n\n if (props.children) {\n if (props.children !== prevChildren || (prevChildren && !ctx.media)) {\n ctx.media = transformChildren(props.children) as MediaItem[];\n return;\n }\n }\n\n if (props.media && props.media.length) {\n ctx.media = props.media;\n return;\n }\n\n if (!ctx.media) ctx.media = [];\n },\n\n refreshSlider() {\n const ctx = getCtx();\n\n if (\n ctx.loading === true ||\n ctx.props.startup === false ||\n ctx.index === null\n ) {\n return;\n }\n\n const index = ctx.index;\n const nextActive = ctx.media[api.getIndex(index)] || null;\n\n if (\n ctx.state.index === index &&\n (ctx.state as any)[ctx.active] === nextActive &&\n (ctx.state as any)[ctx.loader] == null\n ) {\n return;\n }\n\n ctx.setState({\n index,\n [ctx.active]: nextActive,\n [ctx.loader]: null,\n });\n },\n\n startup() {\n const ctx = getCtx();\n ctx.started = true;\n\n ctx._setTimeout(() => {\n const c = getCtx();\n if (!c._mounted) return;\n\n api.goTo({\n index: c.props.selected,\n direction: true,\n touch: false,\n });\n }, ctx.props.startupDelay || 75);\n },\n\n resetSlider(index = 0) {\n const ctx = getCtx();\n ctx.index = index;\n\n ctx.setState(\n {\n index,\n [ctx.active]: ctx.media[api.getIndex(index)],\n [ctx.loader]: null,\n },\n () => {\n const c = getCtx();\n if (!c._mounted) return;\n\n if (c.props.onResetSlider) {\n c.props.onResetSlider({ ...api.getInfo() });\n }\n }\n );\n },\n\n chargeIndex(index: number, callback: (media: MediaItem) => void) {\n const ctx = getCtx();\n ctx.nextIndex = api.checkIndex(index);\n\n const media = ctx.media[ctx.nextIndex];\n\n ctx.setState(\n {\n [ctx.loader]: {\n loader: true,\n ...media,\n },\n },\n () => {\n callback(media);\n }\n );\n },\n\n unchargeIndex() {\n const ctx = getCtx();\n ctx.setState({ [ctx.loader]: null });\n },\n\n goTo({ index, direction, touch = false }: GoToArgs) {\n const ctx = getCtx();\n const nextIndex = api.getIndex(index);\n\n if (ctx.loading === true || nextIndex === ctx.index) {\n if (ctx.props.onTransitionReject) {\n ctx.props.onTransitionReject({\n ...api.getInfo(),\n forceTransition: () => {\n api.goTo({ index, direction, touch });\n },\n });\n }\n return;\n }\n\n ctx.loading = true;\n ctx.direction = direction;\n\n if (touch === true) {\n api.chargeIndex(nextIndex, () => {\n engine.activateArrows(direction);\n api.onTransitionStart();\n engine.startAnimationMobile();\n });\n return;\n }\n\n engine.activateArrows(direction, () => {\n api.chargeIndex(nextIndex, (media) => {\n ctx.renderedLoader = true;\n\n api.onTransitionStart();\n\n engine.startAnimation(direction, media, ({ release = true }) => {\n const c = getCtx();\n c.index = c.nextIndex;\n\n c.setState({ index: c.index }, () => {\n const cc = getCtx();\n if (!cc._mounted) return;\n\n api.onTransitionEnd();\n if (release === true) {\n engine.releaseTransition();\n }\n });\n });\n });\n });\n },\n };\n\n return api;\n};\n\nexport default createModel;\n","import React, { memo, useCallback, useMemo } from 'react';\nimport { getClassName } from '../helpers/components';\nimport type { CssModuleMerged, MediaItem } from './helpers';\n\nexport type BulletClickInfo = {\n index: number;\n direction: boolean;\n};\n\nexport type BulletsProps = {\n cssModule?: CssModuleMerged;\n rootElement: string;\n media?: MediaItem[];\n onClick?: (info: BulletClickInfo) => void;\n selected?: number;\n};\n\nfunction Bullets({\n cssModule = null,\n rootElement,\n media = [],\n onClick = () => {},\n selected = 0,\n}: BulletsProps) {\n const loadingClass = useMemo(\n () => getClassName(`${rootElement}__bullets--loading`, cssModule as any),\n [rootElement, cssModule]\n );\n\n const activeClass = useMemo(\n () => getClassName(`${rootElement}__bullets--active`, cssModule as any),\n [rootElement, cssModule]\n );\n\n const onBulletClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n const button = event.currentTarget;\n\n // Preserve existing behavior: add loading class immediately\n if (loadingClass) button.classList.add(loadingClass);\n\n const indexAttr = button.getAttribute('data-index');\n const index = Number.parseInt(indexAttr || '0', 10);\n const direction = !(selected > index);\n\n onClick({ index, direction });\n },\n [loadingClass, onClick, selected]\n );\n\n return (\n <nav className={getClassName(`${rootElement}__bullets`, cssModule as any)}>\n {media.map((_, index) => {\n const isActive = index === selected;\n\n return (\n <button\n key={`bullet-${index}`}\n type=\"button\"\n data-index={index}\n onClick={onBulletClick}\n className={isActive ? activeClass : undefined}\n aria-label={`Go to slide ${index + 1}`}\n aria-current={isActive ? 'true' : undefined}\n >\n {index}\n </button>\n );\n })}\n </nav>\n );\n}\n\nexport default memo(Bullets);\n","import React, { memo, useLayoutEffect, useRef } from 'react';\nimport { getClassName } from '../helpers/components';\nimport type { CssModuleMerged } from './helpers';\n\nexport type ButtonsMountInfo = {\n element: HTMLDivElement | null;\n next: HTMLButtonElement | null;\n prev: HTMLButtonElement | null;\n};\n\nexport type ButtonsProps = {\n cssModule?: CssModuleMerged;\n rootElement: string;\n\n onMount: (info: ButtonsMountInfo) => void;\n onNext: (e: React.MouseEvent<HTMLButtonElement>) => void;\n onPrev: (e: React.MouseEvent<HTMLButtonElement>) => void;\n\n buttonContentLeft?: React.ReactNode;\n buttonContentRight?: React.ReactNode;\n organicArrows?: boolean;\n};\n\nfunction Buttons({\n cssModule = null,\n rootElement,\n onMount,\n onNext,\n onPrev,\n buttonContentLeft = null,\n buttonContentRight = null,\n organicArrows = true,\n}: ButtonsProps) {\n const controlsRef = useRef<HTMLDivElement | null>(null);\n const nextRef = useRef<HTMLButtonElement | null>(null);\n const prevRef = useRef<HTMLButtonElement | null>(null);\n\n // ✅ layout effect runs during commit, before parent componentDidMount\n useLayoutEffect(() => {\n onMount({\n element: controlsRef.current,\n next: nextRef.current,\n prev: prevRef.current,\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div\n ref={controlsRef}\n className={[\n getClassName(`${rootElement}__controls`, cssModule as any),\n getClassName(`${rootElement}__controls--hidden`, cssModule as any),\n ].join(' ')}\n >\n {/* ✅ preserve original order: next first */}\n <button\n ref={nextRef}\n type=\"button\"\n aria-label=\"next\"\n className={getClassName(`${rootElement}__next`, cssModule as any)}\n onClick={onNext}\n >\n {organicArrows ? (\n <span\n className={getClassName(\n `${rootElement}__controls__arrow-right`,\n cssModule as any\n )}\n />\n ) : (\n buttonContentRight\n )}\n </button>\n\n <button\n ref={prevRef}\n type=\"button\"\n aria-label=\"previous\"\n className={getClassName(`${rootElement}__prev`, cssModule as any)}\n onClick={onPrev}\n >\n {organicArrows ? (\n <span\n className={getClassName(\n `${rootElement}__controls__arrow-left`,\n cssModule as any\n )}\n />\n ) : (\n buttonContentLeft\n )}\n </button>\n </div>\n );\n}\n\nexport default memo(Buttons);\n","/* eslint-disable no-useless-computed-key */\n/* eslint-disable no-continue */\n/* eslint-disable no-restricted-syntax */\nimport React, { memo, useEffect, useMemo, useRef } from 'react';\n\ntype CssLike = React.CSSProperties | undefined;\n\nexport type MediaItem = {\n source?: string;\n preload?: string[];\n slug?: string;\n loader?: boolean;\n\n title?: string;\n alt?: string;\n style?: CssLike;\n className?: string;\n\n children?: React.ReactNode;\n\n // legacy attribute mirrors used by transformChildren / markup patterns\n ['data-src']?: string;\n ['data-alt']?: string;\n ['data-title']?: string;\n ['data-slug']?: string;\n\n // transition hooks (ignored here, but can exist)\n onTransitionEnd?: (...args: any[]) => any;\n onTransitionStartOut?: (...args: any[]) => any;\n onTransitionStartIn?: (...args: any[]) => any;\n onTransitionRequestOut?: (...args: any[]) => any;\n onTransitionRequestIn?: (...args: any[]) => any;\n\n // allow arbitrary extra fields; we will filter for safe DOM props\n [key: string]: any;\n};\n\nexport type MediaProps = {\n media: MediaItem;\n className: string;\n};\n\nconst VIDEO_RE = /\\.(mp4|webm)(\\?|#|$)/i;\nconst isVideoSrc = (src: unknown) => VIDEO_RE.test(String(src || ''));\n\n// Only forward safe props to the DOM container.\n// (Prevents React warnings from arrays/objects/functions on <div>.)\nconst pickDomProps = (\n obj: Record<string, any> | null | undefined\n): React.HTMLAttributes<HTMLDivElement> & Record<string, any> => {\n const out: Record<string, any> = {};\n if (!obj || typeof obj !== 'object') return out as any;\n\n for (const [k, v] of Object.entries(obj)) {\n if (v == null) continue;\n\n // allow data-/aria- passthrough\n if (k.startsWith('data-') || k.startsWith('aria-')) {\n out[k] = v;\n continue;\n }\n\n // allow event handlers (onClick, onMouseEnter, etc)\n if (/^on[A-Z]/.test(k) && typeof v === 'function') {\n out[k] = v;\n continue;\n }\n\n // a small set of common safe DOM props\n if (\n k === 'id' ||\n k === 'role' ||\n k === 'tabIndex' ||\n k === 'title' ||\n k === 'draggable'\n ) {\n out[k] = v;\n }\n }\n\n return out as any;\n};\n\nfunction Media({ media, className }: MediaProps) {\n const {\n source,\n children,\n style,\n className: mediaClass,\n\n // strip slider-internal / transition hooks\n loader,\n onTransitionEnd,\n onTransitionStartOut,\n onTransitionStartIn,\n onTransitionRequestOut,\n onTransitionRequestIn,\n\n // strip legacy child attribute mirrors\n ['data-src']: dataSrc,\n ['data-alt']: dataAlt,\n\n // used for video/img metadata\n title,\n alt,\n ['data-title']: dataTitle,\n ['data-alt']: dataAlt2,\n ['data-slug']: dataSlug,\n slug,\n\n preload,\n\n ...extra\n } = media || ({} as MediaItem);\n\n void loader;\n void onTransitionEnd;\n void onTransitionStartOut;\n void onTransitionStartIn;\n void onTransitionRequestOut;\n void onTransitionRequestIn;\n void dataAlt;\n void dataSlug;\n void slug;\n void preload;\n\n const domProps = useMemo(() => pickDomProps(extra), [extra]);\n\n const imgRef = useRef<HTMLImageElement | null>(null);\n const videoRef = useRef<HTMLVideoElement | null>(null);\n\n // Keep the refs \"used\" (no side effects needed without logs)\n useEffect(() => {\n void imgRef.current;\n void videoRef.current;\n }, [source, dataSrc]);\n\n const background = useMemo(() => {\n if (!source) return null;\n\n if (isVideoSrc(source)) {\n // NOTE: keep controls like original behavior\n return (\n <video\n ref={videoRef}\n title={title || dataTitle}\n src={source}\n controls\n playsInline\n />\n );\n }\n\n return (\n <img\n ref={imgRef}\n src={source}\n alt={alt || title || dataAlt2 || ''}\n loading=\"lazy\"\n decoding=\"async\"\n />\n );\n }, [source, title, alt, dataTitle, dataAlt2]);\n\n return (\n <div className={className} style={style || undefined} {...domProps}>\n {background}\n {children ? (\n <div className={mediaClass || undefined}>{children}</div>\n ) : null}\n </div>\n );\n}\n\nexport default memo(Media);\n","// hoc/animated-lettering/hoc.tsx\nimport React, { useMemo } from 'react';\n\ntype Screen = {\n backgroundColor?: string;\n children: React.ReactNode[]; // strings are fine too\n};\n\nexport type LetteringHocProps = {\n screens: Screen[];\n name?: string;\n children?: React.ReactNode;\n};\n\nexport default function LetteringHoc<P extends object>(\n WrappedComponent: React.ComponentType<P>\n) {\n const Component: React.FC<P & LetteringHocProps> = (props) => {\n const { screens, name, children, ...rest } = props as LetteringHocProps & P;\n\n const renderedScreens = useMemo(() => {\n const base = name || 'awesome-slider';\n\n return (screens || []).map((screen, index) => (\n <div\n key={`${base}-screen-${index}`}\n style={{ backgroundColor: screen?.backgroundColor }}\n >\n {(screen?.children || []).map((text, tIndex) => (\n <p key={`${base}${index}-text-${tIndex}`}>{text}</p>\n ))}\n </div>\n ));\n }, [screens, name]);\n\n return (\n <WrappedComponent {...(rest as P)}>\n {renderedScreens}\n {children /* keep passthrough compatibility */}\n </WrappedComponent>\n );\n };\n\n Component.displayName = `LetteringHoc(${\n (WrappedComponent as any).displayName ||\n (WrappedComponent as any).name ||\n 'Component'\n })`;\n\n return Component;\n}"],"mappings":"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","names":["React","React","useCallback","useEffect","useLayoutEffect","useMemo","useRef","onceNextCssLayout","React","memo","React","memo","React","memo","useMemo","useRef","useMemo","useRef","ctx","useCallback","useLayoutEffect","onceNextCssLayout","useEffect","React","React","useMemo","React"]}
1
+ {"version":3,"sources":["../src/hoc/animated-lettering/index.tsx","../src/core/index.tsx","../src/core/helpers.ts","../src/helpers/components.ts","../src/core/engine.ts","../src/core/model.ts","../src/core/bullets.tsx","../src/core/buttons.tsx","../src/core/media.tsx","../src/hoc/animated-lettering/hoc.tsx"],"sourcesContent":["// hoc/animated-lettering/index.tsx\nimport React from 'react';\nimport AwesomeSlider from '../../index';\nimport Hoc from './hoc';\n\nconst LetteringComponent = Hoc(AwesomeSlider);\n\ntype Props = React.ComponentProps<typeof LetteringComponent>;\n\nexport default function Lettering(props: Props) {\n return <LetteringComponent transitionDelay={100} {...props} />;\n}\n","import React, {\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useImperativeHandle,\n} from 'react';\nimport { onceNextCssLayout } from '@rcaferati/wac';\n\nimport type { MediaItem, ClassNames, CssModuleMerged } from './helpers';\nimport { mergeStyles, classListAdd, classListRemove } from './helpers';\n\nimport createEngine from './engine';\nimport createModel from './model';\n\nimport Bullets from './bullets';\nimport Buttons from './buttons';\nimport type { ButtonsMountInfo } from './buttons';\nimport Media from './media';\n\nconst ROOTELM = 'awssld';\n\nexport type BulletsPosition = 'outside' | 'inside';\n\nexport type AwesomeSliderProps = {\n animation?: string | null;\n bullets?: boolean;\n /**\n * Controls where bullets sit relative to the slider box.\n * - outside: default classic behavior (bottom: -40px)\n * - inside: places bullets into the slide area (bottom: 40px)\n */\n bulletsPosition?: BulletsPosition;\n\n buttonContentLeft?: React.ReactNode;\n buttonContentRight?: React.ReactNode;\n buttons?: boolean;\n children?: React.ReactNode;\n className?: string | null;\n controlsReturnDelay?: number;\n cssModule?: any;\n customContent?: React.ReactNode;\n onLoadStart?: ((payload: any) => void) | null;\n disabled?: boolean;\n fillParent?: boolean;\n infinite?: boolean;\n media?: MediaItem[];\n name?: string;\n onFirstMount?: ((info: any) => void) | null;\n onResetSlider?: ((info: any) => void) | null;\n onStartupRelease?: ((info: any) => void) | null;\n onTransitionEnd?: ((info: any) => void) | null;\n onTransitionRequest?: ((info: any) => void) | null;\n onTransitionStart?: ((info: any) => void) | null;\n organicArrows?: boolean;\n rootElement?: string;\n selected?: any;\n startup?: boolean;\n startupDelay?: number;\n startupScreen?: any;\n style?: React.CSSProperties;\n transitionDelay?: number;\n mobileTouch?: boolean;\n\n onTransitionReject?: ((info: any) => void) | null;\n};\n\ntype AwesomeSliderState = {\n index: number | null;\n boxA: any;\n boxB: any;\n};\n\ntype BoxKey = 'boxA' | 'boxB';\n\nconst DEFAULT_PROPS: Required<\n Pick<\n AwesomeSliderProps,\n | 'animation'\n | 'bullets'\n | 'bulletsPosition'\n | 'buttonContentLeft'\n | 'buttonContentRight'\n | 'buttons'\n | 'children'\n | 'className'\n | 'controlsReturnDelay'\n | 'cssModule'\n | 'customContent'\n | 'onLoadStart'\n | 'disabled'\n | 'fillParent'\n | 'infinite'\n | 'media'\n | 'name'\n | 'onFirstMount'\n | 'onResetSlider'\n | 'onStartupRelease'\n | 'onTransitionEnd'\n | 'onTransitionRequest'\n | 'onTransitionStart'\n | 'onTransitionReject'\n | 'organicArrows'\n | 'rootElement'\n | 'selected'\n | 'startup'\n | 'startupDelay'\n | 'startupScreen'\n | 'style'\n | 'transitionDelay'\n | 'mobileTouch'\n >\n> = {\n animation: null,\n bullets: true,\n bulletsPosition: 'outside',\n\n buttonContentLeft: null,\n buttonContentRight: null,\n buttons: true,\n children: null,\n className: null,\n controlsReturnDelay: 0,\n cssModule: null,\n customContent: null,\n onLoadStart: null,\n disabled: false,\n fillParent: false,\n infinite: true,\n media: [],\n name: 'awesome-slider',\n onFirstMount: null,\n onResetSlider: null,\n onStartupRelease: null,\n onTransitionEnd: null,\n onTransitionRequest: null,\n onTransitionStart: null,\n onTransitionReject: null,\n organicArrows: true,\n rootElement: ROOTELM,\n selected: 0,\n startup: true,\n startupDelay: 0,\n startupScreen: null,\n style: {},\n transitionDelay: 0,\n mobileTouch: true,\n};\n\ntype RuntimeCtx = {\n // reacty\n props: AwesomeSliderProps;\n state: AwesomeSliderState;\n setState: (patch: any, cb?: () => void) => void;\n\n // runtime\n _mounted: boolean;\n _timeouts: Set<ReturnType<typeof setTimeout>>;\n _setTimeout: (fn: () => void, ms: number) => any;\n\n rootElement: string;\n classNames: ClassNames;\n\n // dom\n slider: HTMLDivElement | null;\n wrapper: HTMLDivElement | null;\n container: HTMLDivElement | null;\n boxA: HTMLDivElement | null;\n boxB: HTMLDivElement | null;\n\n // boxes\n active: BoxKey;\n loader: BoxKey;\n\n // indices\n index: number | null;\n nextIndex: number | null;\n\n // flags\n loading: boolean;\n direction: boolean;\n started: boolean;\n\n // touch\n touchEnabled: boolean;\n animating: boolean;\n touchStartPoint: number | null;\n\n // media/cache\n media: MediaItem[] | null; // IMPORTANT: stays null until setupStartup runs\n loaded: string[];\n bar: HTMLDivElement | null;\n\n // controls\n buttons: ButtonsMountInfo | null;\n activeArrow: Element | null;\n activeArrowClass: string | null;\n\n // engine/model\n engine: any;\n model: any;\n\n // bridge\n getInfo: () => any;\n releaseTransition: () => void;\n\n // dynamic: ctx[ctx.active] -> ctx.boxA/ctx.boxB\n [k: string]: any;\n};\n\nexport type AwesomeSliderHandle = {\n getInfo: () => any;\n goTo: (args: { index: any; direction: boolean; touch?: boolean }) => void;\n resetSlider: (index?: number) => void;\n};\n\nfunction createInitialCtx(p: AwesomeSliderProps): RuntimeCtx {\n const ctx: RuntimeCtx = {\n props: p,\n state: { index: null, boxA: null, boxB: null },\n setState: () => {},\n\n _mounted: false,\n _timeouts: new Set(),\n _setTimeout: () => 0,\n\n rootElement: p.rootElement || ROOTELM,\n classNames: {} as any,\n\n slider: null,\n wrapper: null,\n container: null,\n boxA: null,\n boxB: null,\n\n active: 'boxA',\n loader: 'boxB',\n\n index: null,\n nextIndex: null,\n\n loading: false,\n direction: true,\n started: false,\n\n touchEnabled: false,\n animating: false,\n touchStartPoint: null,\n\n media: null, // ✅ critical for correct first init\n loaded: [],\n bar: null,\n\n buttons: null,\n activeArrow: null,\n activeArrowClass: null,\n\n engine: null as any,\n model: null as any,\n\n getInfo: () => ({}),\n releaseTransition: () => {},\n };\n\n ctx._setTimeout = (fn, ms) => {\n const id = setTimeout(() => {\n ctx._timeouts.delete(id);\n fn();\n }, ms);\n ctx._timeouts.add(id);\n return id;\n };\n\n return ctx;\n}\n\nconst AwesomeSlider = forwardRef<AwesomeSliderHandle, AwesomeSliderProps>(\n (incomingProps, ref) => {\n // merge defaults exactly once per render (don’t rely on React defaultProps)\n const props = useMemo(\n () => ({ ...DEFAULT_PROPS, ...incomingProps }),\n [incomingProps]\n );\n\n // ✅ compute css var for bullets position\n const bulletsBottomVar = useMemo(() => {\n // outside => -40px (classic)\n // inside => 40px (into the slide area)\n return props.bulletsPosition === 'inside' ? '40px' : '-40px';\n }, [props.bulletsPosition]);\n\n // ✅ merge into root style (inline CSS vars)\n const rootStyle = useMemo(() => {\n const s = (props.style || {}) as any;\n return {\n ...s,\n ['--control-bullets-bottom']: bulletsBottomVar,\n } as React.CSSProperties;\n }, [props.style, bulletsBottomVar]);\n\n const ctxRef = useRef<RuntimeCtx | null>(null);\n const cbQueueRef = useRef<(() => void)[]>([]);\n const prevPropsRef = useRef<AwesomeSliderProps | null>(null);\n\n const [state, setState] = useState<AwesomeSliderState>(() => {\n const p0 = { ...DEFAULT_PROPS, ...incomingProps };\n\n const ctx = createInitialCtx(p0);\n ctxRef.current = ctx;\n\n ctx.engine = createEngine(() => ctxRef.current as any);\n ctx.model = createModel(() => ctxRef.current as any, ctx.engine);\n\n ctx.getInfo = () => ctx.model.getInfo();\n ctx.releaseTransition = () => ctx.engine.releaseTransition();\n\n // ✅ must run before first render (initial screen correctness)\n ctx.model.setupStartup(p0 as any);\n\n return ctx.state;\n });\n\n const setStateWithCb = useCallback(\n (patch: any, cb?: () => void) => {\n if (cb) cbQueueRef.current.push(cb);\n setState((prev) => {\n const nextPatch = typeof patch === 'function' ? patch(prev) : patch;\n return { ...prev, ...nextPatch };\n });\n },\n [setState]\n );\n\n // keep ctx in sync every render\n const ctx = ctxRef.current!;\n ctx.props = props;\n ctx.state = state;\n ctx.rootElement = props.rootElement || ROOTELM;\n ctx.setState = setStateWithCb;\n\n // flush queued \"setState callbacks\" after commit\n useLayoutEffect(() => {\n const c = ctxRef.current;\n if (!c) return;\n\n const q = cbQueueRef.current;\n if (!q.length) return;\n\n cbQueueRef.current = [];\n for (const fn of q) {\n if (c._mounted) fn();\n }\n }, [state]);\n\n // mount/unmount behavior (mirrors componentDidMount/WillUnmount)\n useLayoutEffect(() => {\n const c = ctxRef.current!;\n c._mounted = true;\n\n if (c.boxA) classListAdd(c.boxA, c.classNames.active);\n\n if (c.props.startupScreen) {\n if (c.buttons) {\n classListAdd(c.buttons.element, c.classNames.controlsHidden);\n classListAdd(c.buttons.element, c.classNames.controlsActive);\n }\n if (c.props.startup === true && (c.media || []).length > 0) {\n c.model.startup();\n }\n }\n\n if (c.props.onFirstMount) {\n c.props.onFirstMount({ ...c.getInfo() });\n }\n\n if (c.buttons) {\n onceNextCssLayout().then(() => {\n const cc = ctxRef.current;\n if (!cc || !cc._mounted) return;\n if (cc.buttons && cc.buttons.element) {\n classListRemove(cc.buttons.element, cc.classNames.controlsHidden);\n }\n });\n }\n\n return () => {\n const cc = ctxRef.current;\n if (!cc) return;\n cc._mounted = false;\n for (const id of cc._timeouts) clearTimeout(id);\n cc._timeouts.clear();\n };\n }, []);\n\n // props-change logic (mirrors componentDidUpdate guard)\n useEffect(() => {\n const c = ctxRef.current!;\n const prev = prevPropsRef.current;\n\n if (!prev) {\n prevPropsRef.current = props;\n return;\n }\n\n const didPropsChange =\n prev.children !== props.children ||\n prev.media !== props.media ||\n prev.cssModule !== props.cssModule ||\n prev.className !== props.className ||\n prev.animation !== props.animation ||\n prev.disabled !== props.disabled ||\n prev.fillParent !== props.fillParent ||\n prev.infinite !== props.infinite ||\n prev.organicArrows !== props.organicArrows ||\n prev.rootElement !== props.rootElement ||\n prev.startup !== props.startup ||\n prev.startupScreen !== props.startupScreen ||\n prev.name !== props.name ||\n prev.selected !== props.selected ||\n prev.bulletsPosition !== props.bulletsPosition; // ✅ include for completeness\n\n if (!didPropsChange) {\n prevPropsRef.current = props;\n return;\n }\n\n c.model.checkChildren(props as any, prev as any);\n c.model.setupClassNames(mergeStyles(props.cssModule));\n\n if (props.name !== prev.name) {\n c.model.resetSlider(c.model.getIndex(props.selected));\n prevPropsRef.current = props;\n return;\n }\n\n if (props.startup === true && c.started === false) {\n c.model.startup();\n prevPropsRef.current = props;\n return;\n }\n\n if (props.selected !== prev.selected) {\n const index = c.model.getIndex(props.selected);\n\n const direction =\n props.infinite === true &&\n index === 0 &&\n c.index === (c.media || []).length - 1\n ? true\n : !(c.index! > index);\n\n c.model.goTo({ index, direction });\n prevPropsRef.current = props;\n return;\n }\n\n c.model.refreshSlider();\n prevPropsRef.current = props;\n }, [\n props.children,\n props.media,\n props.cssModule,\n props.className,\n props.animation,\n props.disabled,\n props.fillParent,\n props.infinite,\n props.organicArrows,\n props.rootElement,\n props.startup,\n props.startupScreen,\n props.name,\n props.selected,\n props.bulletsPosition, // ✅\n ]);\n\n // imperative ref (best-effort compat vs old class refs)\n useImperativeHandle(\n ref,\n () => ({\n getInfo: () => ctxRef.current!.model.getInfo(),\n goTo: (args) => ctxRef.current!.model.goTo(args),\n resetSlider: (index?: number) =>\n ctxRef.current!.model.resetSlider(index),\n }),\n []\n );\n\n // handlers read/write ctxRef (no stale closures)\n const clickNext = useCallback(() => {\n const c = ctxRef.current!;\n const next = c.index === null ? 0 : c.index + 1;\n c.model.onTransitionRequest('next', next);\n c.model.goTo({ index: next, direction: true });\n }, []);\n\n const clickPrev = useCallback(() => {\n const c = ctxRef.current!;\n const prev = (c.index ?? 0) - 1;\n c.model.onTransitionRequest('prev', prev);\n c.model.goTo({ index: prev, direction: false });\n }, []);\n\n const touchStart = useCallback(\n (event: React.TouchEvent<HTMLDivElement>) => {\n const c = ctxRef.current!;\n if (c.animating) return;\n if (c.index === null) return;\n c.touchStartPoint = event.nativeEvent.touches[0].clientX;\n },\n []\n );\n\n const touchMove = useCallback((event: React.TouchEvent<HTMLDivElement>) => {\n const c = ctxRef.current!;\n if (c.animating || !c.touchStartPoint) return;\n\n let diff = event.nativeEvent.touches[0].clientX - c.touchStartPoint;\n\n const activeEl = (c as any)[c.active] as HTMLDivElement | null;\n const loaderEl = (c as any)[c.loader] as HTMLDivElement | null;\n if (!activeEl || !loaderEl) return;\n\n const direction = !(diff > 0);\n const abs = Math.abs(diff);\n\n if (c.touchEnabled === false) {\n if (abs > 20) {\n c.touchEnabled = true;\n c.touchStartPoint = event.nativeEvent.touches[0].clientX;\n }\n return;\n }\n\n if (abs >= 10) {\n if (c.loading === false) {\n c.model.goTo({\n index: direction ? (c.index ?? 0) + 1 : (c.index ?? 0) - 1,\n direction,\n touch: true,\n });\n } else if (c.direction === true) {\n diff += 10;\n if (Math.abs(diff) > activeEl.offsetWidth)\n diff = -activeEl.offsetWidth;\n else if (diff > 0) diff = 0;\n\n activeEl.style.transform = `translate3d(${diff}px, 0, 0)`;\n loaderEl.style.transform = `translate3d(calc(100% + ${diff}px), 0, 0)`;\n } else {\n diff -= 10;\n if (Math.abs(diff) > activeEl.offsetWidth)\n diff = activeEl.offsetWidth;\n else if (diff < 0) diff = 0;\n\n activeEl.style.transform = `translate3d(${diff}px, 0, 0)`;\n loaderEl.style.transform = `translate3d(calc(-100% + ${diff}px), 0, 0)`;\n }\n }\n }, []);\n\n const touchEnd = useCallback(() => {\n const c = ctxRef.current!;\n if (c.animating || !c.touchStartPoint || !c.loading) return;\n\n c.touchStartPoint = null;\n c.animating = true;\n c.touchEnabled = false;\n\n c.engine.animateMobileEnd(() => {\n const cc = ctxRef.current!;\n if (!cc._mounted) return;\n\n cc.index = cc.nextIndex;\n cc.setState({ index: cc.index });\n\n cc.model.onTransitionEnd();\n\n cc.animating = false;\n cc.loading = false;\n\n cc.model.unchargeIndex();\n });\n }, []);\n\n const setSliderRef = useCallback((el: HTMLDivElement | null) => {\n const c = ctxRef.current!;\n c.slider = el;\n }, []);\n\n const setWrapperRef = useCallback((el: HTMLDivElement | null) => {\n const c = ctxRef.current!;\n c.wrapper = el;\n }, []);\n\n const setContainerRef = useCallback((el: HTMLDivElement | null) => {\n const c = ctxRef.current!;\n c.container = el;\n }, []);\n\n const setBoxARef = useCallback((el: HTMLDivElement | null) => {\n const c = ctxRef.current!;\n c.boxA = el;\n }, []);\n\n const setBoxBRef = useCallback((el: HTMLDivElement | null) => {\n const c = ctxRef.current!;\n c.boxB = el;\n }, []);\n\n const renderBox = (box: 'A' | 'B') => {\n const c = ctxRef.current!;\n const extra: Partial<React.HTMLAttributes<HTMLDivElement>> = {};\n\n if (c.props.mobileTouch) {\n extra.onTouchStart = touchStart as any;\n extra.onTouchMove = touchMove as any;\n extra.onTouchEnd = touchEnd as any;\n }\n\n const refFn = box === 'A' ? setBoxARef : setBoxBRef;\n\n return (\n <div ref={refFn} className={c.classNames.box} {...extra}>\n {(state as any)[`box${box}`] && (\n <Media\n media={(state as any)[`box${box}`]}\n className={c.classNames.content}\n />\n )}\n </div>\n );\n };\n\n const rootElement = ctx.rootElement;\n\n return (\n <div\n ref={setSliderRef}\n className={ctx.model.getRootClassName()}\n style={rootStyle}\n >\n <div ref={setWrapperRef} className={ctx.classNames.wrapper}>\n <div ref={setContainerRef} className={ctx.classNames.container}>\n {renderBox('A')}\n {renderBox('B')}\n </div>\n\n {props.buttons && (\n <Buttons\n rootElement={rootElement}\n cssModule={mergeStyles(props.cssModule) as CssModuleMerged}\n onMount={(btns: ButtonsMountInfo) => {\n ctxRef.current!.buttons = btns;\n }}\n onNext={clickNext}\n onPrev={clickPrev}\n organicArrows={props.organicArrows}\n buttonContentLeft={props.buttonContentLeft}\n buttonContentRight={props.buttonContentRight}\n />\n )}\n\n {props.customContent}\n </div>\n\n {props.bullets && (\n <Bullets\n cssModule={mergeStyles(props.cssModule) as CssModuleMerged}\n rootElement={rootElement}\n media={(ctx.media || []) as any}\n selected={state.index as any}\n onClick={(info: any) => {\n ctx.model.onTransitionRequest('bullet', info.index);\n ctx.model.goTo(info);\n }}\n />\n )}\n </div>\n );\n }\n);\n\nAwesomeSlider.displayName = 'AwesomeSlider';\n\nexport default AwesomeSlider;\n","/* eslint-disable no-continue */\n/* eslint-disable no-restricted-syntax */\nimport { Children, isValidElement } from 'react';\nimport { classToModules, getClassName } from '../helpers/components';\n\nexport type CssModule = Record<string, string>;\nexport type CssModuleInput = CssModule | null | undefined;\nexport type CssModuleMerged = CssModule | null;\n\nexport type MediaItem = Record<string, any> & {\n source?: string;\n slug?: string;\n ['data-src']?: string;\n ['data-slug']?: string;\n};\n\nconst splitClasses = (classString: unknown): string[] =>\n typeof classString === 'string'\n ? classString.trim().split(/\\s+/).filter(Boolean)\n : [];\n\nexport const classListAdd = (\n element: Element | null | undefined,\n classString: unknown\n): void => {\n if (!element) return;\n const tokens = splitClasses(classString);\n if (!tokens.length) return;\n tokens.forEach((c) => element.classList.add(c));\n};\n\nexport const classListRemove = (\n element: Element | null | undefined,\n classString: unknown\n): void => {\n if (!element) return;\n const tokens = splitClasses(classString);\n if (!tokens.length) return;\n tokens.forEach((c) => element.classList.remove(c));\n};\n\nexport const getAnyClassName = (className: unknown): string => {\n const tokens = splitClasses(className);\n return tokens[0] || '';\n};\n\nexport const mergeStyles = (styles: unknown): CssModuleMerged => {\n const arr = Array.isArray(styles) ? styles : [styles];\n const modules = arr.filter(\n (m): m is CssModule => !!m && typeof m === 'object' && !Array.isArray(m)\n );\n\n if (modules.length === 0) return null;\n if (modules.length === 1) return modules[0];\n\n const out: CssModule = { ...modules[0] };\n\n for (let i = 1; i < modules.length; i += 1) {\n const mod = modules[i];\n for (const [key, val] of Object.entries(mod)) {\n if (!val) continue;\n out[key] = out[key] ? `${out[key]} ${val}` : val;\n }\n }\n\n return out;\n};\n\nexport type GetRootClassNameArgs = {\n rootElement: string;\n cssModule: CssModuleMerged;\n disabled?: boolean;\n organicArrows?: boolean;\n className?: string | null;\n total: number;\n current: number | null;\n infinite?: boolean;\n animation?: string | null;\n fillParent?: boolean;\n};\n\nexport function getRootClassName({\n rootElement,\n cssModule,\n disabled,\n organicArrows,\n className,\n total,\n current,\n infinite,\n animation,\n fillParent,\n}: GetRootClassNameArgs): string {\n let classNames: string[] = [rootElement];\n\n if (animation) classNames.push(`${rootElement}--${animation}`);\n if (organicArrows === true) classNames.push(`${rootElement}--organic-arrows`);\n if (disabled === true) classNames.push(`${rootElement}--disabled`);\n if (fillParent) classNames.push(`${rootElement}--fill-parent`);\n\n if (infinite === false && typeof current === 'number') {\n if (current === 0) classNames.push(`${rootElement}--first`);\n if (current === total - 1) classNames.push(`${rootElement}--last`);\n }\n\n // keep existing behavior: only module-map if it looks like a module map\n if (cssModule && cssModule[rootElement]) {\n classNames = classToModules(classNames, cssModule as any) as any;\n }\n\n if (className) classNames.push(...splitClasses(className));\n\n return classNames.join(' ').trim();\n}\n\nexport function transformChildren(children: unknown): MediaItem[] {\n const media: MediaItem[] = [];\n const items = Children.toArray(children as any);\n\n items.forEach((child) => {\n if (!isValidElement(child)) return;\n\n const props: Record<string, any> = (child as any).props || {};\n const item: MediaItem = { ...props };\n\n if (props['data-src']) item.source = props['data-src'];\n if (props['data-slug']) item.slug = props['data-slug'];\n\n media.push(item);\n });\n\n return media;\n}\n\nexport type ClassNames = {\n boxA: string;\n boxB: string;\n box: string;\n container: string;\n wrapper: string;\n bar: string;\n barActive: string;\n barEnd: string;\n content: string;\n contentStatic: string;\n contentMoveLeft: string;\n contentMoveRight: string;\n controlsHidden: string;\n controlsActive: string;\n animated: string;\n animatedMobile: string;\n contentExit: string;\n exit: string;\n active: string;\n moveLeft: string;\n moveRight: string;\n startUp: string;\n bulletsLoading: string;\n};\n\nexport function setupClassNames(\n rootElement: string,\n cssModule: CssModuleMerged\n): ClassNames {\n return {\n boxA: getClassName(`${rootElement}__boxA`, cssModule as any),\n boxB: getClassName(`${rootElement}__boxB`, cssModule as any),\n box: getClassName(`${rootElement}__box`, cssModule as any),\n container: getClassName(`${rootElement}__container`, cssModule as any),\n wrapper: getClassName(`${rootElement}__wrapper`, cssModule as any),\n bar: getClassName(`${rootElement}__bar`, cssModule as any),\n barActive: getClassName(`${rootElement}__bar--active`, cssModule as any),\n barEnd: getClassName(`${rootElement}__bar--end`, cssModule as any),\n content: getClassName(`${rootElement}__content`, cssModule as any),\n contentStatic: getClassName(\n `${rootElement}__content--static`,\n cssModule as any\n ),\n contentMoveLeft: getClassName(\n `${rootElement}__content--moveLeft`,\n cssModule as any\n ),\n contentMoveRight: getClassName(\n `${rootElement}__content--moveRight`,\n cssModule as any\n ),\n controlsHidden: getClassName(\n `${rootElement}__controls--hidden`,\n cssModule as any\n ),\n controlsActive: getClassName(\n `${rootElement}__controls--active`,\n cssModule as any\n ),\n animated: getClassName(`${rootElement}--animated`, cssModule as any),\n animatedMobile: getClassName(\n `${rootElement}--animated-mobile`,\n cssModule as any\n ),\n contentExit: getClassName(\n `${rootElement}__content--exit`,\n cssModule as any\n ),\n exit: getClassName(`${rootElement}--exit`, cssModule as any),\n active: getClassName(`${rootElement}--active`, cssModule as any),\n moveLeft: getClassName(`${rootElement}--moveLeft`, cssModule as any),\n moveRight: getClassName(`${rootElement}--moveRight`, cssModule as any),\n startUp: getClassName(`${rootElement}__startUp`, cssModule as any),\n bulletsLoading: getClassName(\n `${rootElement}__bullets--loading`,\n cssModule as any\n ),\n };\n}\n","// helpers/components.ts\n\nexport class MediaLoader {\n private image?: HTMLImageElement;\n private video?: HTMLVideoElement;\n\n private resolve: ((ok: boolean) => void) | null = null;\n\n private loaded = 0;\n private toLoad = 0;\n private resolver: ((ok: boolean) => void) | null = null;\n\n constructor() {\n if (typeof window !== 'undefined') {\n this.image = new Image();\n this.video = document.createElement('video');\n this.video.preload = 'auto';\n this.video.muted = true; // helps some browsers actually load metadata\n\n this.events();\n }\n }\n\n private events() {\n // In SSR / no-dom environments, nothing to wire.\n if (!this.video || !this.image) return;\n\n // Video: resolve true on loadeddata, false on error\n this.video.addEventListener('loadeddata', () => {\n if (this.resolve) this.resolve(true);\n });\n this.video.addEventListener('error', () => {\n if (this.resolve) this.resolve(false);\n });\n\n // Image: resolve true on load, false on error\n this.image.onload = () => this.resolve && this.resolve(true);\n this.image.onerror = () => this.resolve && this.resolve(false);\n }\n\n load(url?: string | null): Promise<boolean> {\n return new Promise((resolve) => {\n if (!url) {\n resolve(true);\n return;\n }\n\n // SSR fallback: can't actually preload, but don't deadlock.\n if (!this.image || !this.video) {\n resolve(true);\n return;\n }\n\n this.resolve = resolve;\n\n // Heuristic: treat extensionless as image\n const isVideo = /\\.(mp4|webm)(\\?|#|$)/i.test(url);\n if (isVideo) {\n try {\n this.video.setAttribute('src', url);\n if (typeof this.video.load === 'function') this.video.load();\n } catch {\n resolve(false);\n }\n return;\n }\n\n // default image\n this.image.src = url;\n\n // if cached and dimensions already known, resolve immediately\n if (\n this.image.complete &&\n (this.image.naturalWidth > 0 || this.image.naturalHeight > 0)\n ) {\n resolve(true);\n }\n });\n }\n\n private loadImage(url: string) {\n const image = new Image();\n let done = false;\n\n const finish = () => {\n if (done) return;\n done = true;\n this.pumpLoaded();\n };\n\n image.onload = finish;\n image.onerror = finish;\n image.src = url;\n\n // cached fast-path\n if (image.complete && (image.naturalWidth > 0 || image.naturalHeight > 0)) {\n finish();\n }\n }\n\n private loadVideo(url: string) {\n const video = document.createElement('video');\n video.preload = 'auto';\n video.muted = true;\n\n let done = false;\n const finish = () => {\n if (done) return;\n done = true;\n this.pumpLoaded();\n };\n\n video.addEventListener('loadeddata', finish);\n video.addEventListener('error', finish);\n\n try {\n video.setAttribute('src', url);\n if (typeof video.load === 'function') video.load();\n } catch {\n finish();\n }\n }\n\n private pumpLoaded() {\n this.loaded += 1;\n if (this.loaded >= this.toLoad) {\n if (this.resolver) this.resolver(true);\n }\n }\n\n private startLoad(url?: string | null) {\n if (!url) {\n this.pumpLoaded();\n return;\n }\n\n const isVideo = /\\.(mp4|webm)(\\?|#|$)/i.test(url);\n\n if (isVideo) {\n this.loadVideo(url);\n return;\n }\n\n // ✅ IMPORTANT: extensionless URLs are treated as images\n this.loadImage(url);\n }\n\n loadMultiple(urls: unknown): Promise<boolean> {\n const list: string[] = Array.isArray(urls)\n ? (urls.filter((u) => typeof u === 'string') as string[])\n : [];\n\n this.loaded = 0;\n this.toLoad = list.length;\n\n return new Promise((resolve) => {\n this.resolver = resolve;\n\n if (this.toLoad === 0) {\n resolve(true);\n return;\n }\n\n list.forEach((url) => {\n this.startLoad(url);\n });\n });\n }\n}\n\nexport function serialize(\n obj: Record<string, any>,\n separator: string = '&'\n): string {\n return Object.entries(obj)\n .map(([key, val]) => `${key}=${val}`)\n .join(separator);\n}\n\nexport function classToModules(\n classNames: string[] = [],\n cssModule?: Record<string, string> | null\n): string[] {\n if (!cssModule) {\n return classNames.join(' ').trim().split(' ').filter(Boolean);\n }\n const result: string[] = [];\n let i = classNames.length;\n while (i--) {\n const k = classNames[i];\n if (cssModule[k]) result.push(cssModule[k]);\n }\n return result;\n}\n\nexport function getClassName(\n className: string = '',\n cssModule?: Record<string, string> | null\n): string {\n if (cssModule) {\n return cssModule[className] || className;\n }\n return className;\n}\n","/* eslint-disable no-continue */\n/* eslint-disable no-restricted-syntax */\nimport {\n onceNextCssLayout,\n onceTransitionEnd,\n onceAnimationEnd,\n} from '@rcaferati/wac';\nimport { getClassName, MediaLoader } from '../helpers/components';\nimport {\n mergeStyles,\n getAnyClassName,\n classListAdd,\n classListRemove,\n} from './helpers';\n\nimport type { MediaItem } from './helpers';\nimport type { SliderBoxKey, CtxLike } from './model';\n\nconst mediaLoader = new MediaLoader();\n\nconst parseTimeMaxMs = (cssTime: string): number => {\n const parts = String(cssTime || '')\n .split(',')\n .map((p) => p.trim())\n .filter(Boolean);\n\n let max = 0;\n for (const p of parts) {\n if (p.endsWith('ms')) {\n const n = Number.parseFloat(p);\n if (!Number.isNaN(n)) max = Math.max(max, n);\n } else if (p.endsWith('s')) {\n const n = Number.parseFloat(p);\n if (!Number.isNaN(n)) max = Math.max(max, n * 1000);\n }\n }\n return max;\n};\n\nconst readSnapshot = (el: HTMLElement | Element | null) => {\n if (!el || typeof window === 'undefined') return null;\n const node = el as HTMLElement;\n const cs = window.getComputedStyle(node);\n return {\n tag: node.tagName,\n className: node.className,\n animationName: cs.animationName,\n animationDuration: cs.animationDuration,\n animationDelay: cs.animationDelay,\n animationIterationCount: cs.animationIterationCount,\n animationPlayState: cs.animationPlayState,\n transitionProperty: cs.transitionProperty,\n transitionDuration: cs.transitionDuration,\n transitionDelay: cs.transitionDelay,\n };\n};\n\nconst getTransitionTotalMs = (el: Element | null) => {\n const snap = readSnapshot(el);\n if (!snap) return 0;\n return (\n parseTimeMaxMs(snap.transitionDuration) +\n parseTimeMaxMs(snap.transitionDelay)\n );\n};\n\nconst getAnimationTotalMs = (el: Element | null) => {\n const snap = readSnapshot(el);\n if (!snap) return 0;\n return (\n parseTimeMaxMs(snap.animationDuration) + parseTimeMaxMs(snap.animationDelay)\n );\n};\n\nconst withTimeout = <T>(\n p: Promise<T>,\n ms: number,\n _label: string,\n _meta?: any\n): Promise<\n | { ok: true; value: T }\n | { ok: false; reason: 'timeout' | 'error'; error?: any }\n> =>\n new Promise((resolve) => {\n let done = false;\n\n const t = setTimeout(\n () => {\n if (done) return;\n done = true;\n resolve({ ok: false, reason: 'timeout' });\n },\n Math.max(0, ms | 0)\n );\n\n p.then((v) => {\n if (done) return;\n done = true;\n clearTimeout(t);\n resolve({ ok: true, value: v });\n }).catch((e) => {\n if (done) return;\n done = true;\n clearTimeout(t);\n resolve({ ok: false, reason: 'error', error: e });\n });\n });\n\nexport type EngineCtxLike = Pick<\n CtxLike,\n | 'props'\n | 'classNames'\n | 'rootElement'\n | 'active'\n | 'loader'\n | 'index'\n | 'nextIndex'\n | 'loading'\n | 'direction'\n | '_mounted'\n | '_setTimeout'\n> & {\n boxA: HTMLElement;\n boxB: HTMLElement;\n\n loaded: string[];\n bar: HTMLDivElement | null;\n\n buttons: {\n element: HTMLElement;\n next: HTMLElement;\n prev: HTMLElement;\n } | null;\n\n // ✅ HTMLElement so it can be passed to onceTransitionEnd typings\n activeArrow: HTMLElement | null;\n activeArrowClass: string | null;\n\n active: SliderBoxKey;\n loader: SliderBoxKey;\n\n releaseTransition: () => void;\n getInfo: () => Record<string, any>;\n};\n\nexport type EngineLike = {\n getProgressBar: () => HTMLDivElement | null;\n startBarAnimation: (args: {\n active: HTMLElement;\n }) => Promise<HTMLDivElement | null>;\n endBarAnimation: (callback: () => void) => void;\n\n pushLoaded: (urls: string[]) => void;\n checkLoadedUrls: (urls: string[]) => boolean;\n loadContent: (\n active: HTMLElement,\n media: MediaItem\n ) => Promise<HTMLDivElement | null>;\n\n startAnimationMobile: () => void;\n animateMobileEnd: (callback?: () => void) => void;\n\n runAnimation: (args: any) => void;\n startAnimation: (\n direction: boolean,\n media: MediaItem,\n callback: (res: { release?: boolean }) => void\n ) => void;\n\n releaseTransition: () => void;\n\n activateArrows: (direction: boolean, callback?: () => void) => void;\n};\n\nexport function createEngine(getCtx: () => EngineCtxLike): EngineLike {\n return {\n getProgressBar() {\n const ctx = getCtx();\n if (typeof document === 'undefined') return null;\n const bar = document.createElement('div');\n bar.className = ctx.classNames.bar;\n return bar;\n },\n\n startBarAnimation({ active }: { active: HTMLElement }) {\n return new Promise((resolve) => {\n const ctx = getCtx();\n const bar = this.getProgressBar();\n ctx.bar = bar;\n\n if (!bar || !active) {\n resolve(null);\n return;\n }\n\n active.appendChild(bar);\n\n onceNextCssLayout()\n .then(() => onceNextCssLayout())\n .then(() => {\n const c = getCtx();\n if (!c._mounted) return;\n classListAdd(bar, c.classNames.barActive);\n resolve(bar);\n });\n });\n },\n\n endBarAnimation(callback: () => void) {\n const ctx = getCtx();\n const bar = ctx.bar;\n\n if (!bar) {\n callback();\n return;\n }\n\n onceNextCssLayout().then(() => {\n const c = getCtx();\n if (!c._mounted) return;\n\n classListAdd(bar, c.classNames.barEnd);\n\n const totalMs = getTransitionTotalMs(bar);\n if (!totalMs) {\n callback();\n return;\n }\n\n const waitMs = Math.max(250, Math.ceil(totalMs) + 250);\n\n withTimeout(\n onceTransitionEnd(bar),\n waitMs,\n 'endBarAnimation/onceTransitionEnd',\n { totalMs }\n ).then(() => {\n const cc = getCtx();\n if (!cc._mounted) return;\n callback();\n });\n });\n },\n\n pushLoaded(urls: string[]) {\n const ctx = getCtx();\n ctx.loaded = [...ctx.loaded, ...urls];\n },\n\n checkLoadedUrls(urls: string[]) {\n const ctx = getCtx();\n return urls.every((url) => ctx.loaded.includes(url));\n },\n\n async loadContent(active: HTMLElement, media: MediaItem) {\n const ctx = getCtx();\n\n // --- callback-based loader (user-provided) ----------------------------\n if (ctx.props.onLoadStart || (media && (media as any).onLoadStart)) {\n const caller =\n ctx.props.onLoadStart || (media && (media as any).onLoadStart);\n\n await this.startBarAnimation({ active });\n\n return await new Promise<HTMLDivElement | null>((resolve, reject) => {\n try {\n caller({\n next: () => {\n this.endBarAnimation(() => {\n resolve(getCtx().bar);\n });\n },\n error: (e: any) => reject(e),\n ...getCtx().getInfo(),\n });\n } catch (e) {\n reject(e);\n }\n });\n }\n\n // --- default media loading -------------------------------------------\n if (media && ((media as any).source || (media as any).preload)) {\n const urls: string[] = (media as any).preload\n ? (media as any).preload\n : (((media as any).source && [(media as any).source]) as any) || [];\n\n if (this.checkLoadedUrls(urls) === true) return null;\n\n await this.startBarAnimation({ active });\n\n const settle = await withTimeout(\n mediaLoader.loadMultiple(urls),\n 8000,\n 'MediaLoader.loadMultiple',\n { urls }\n );\n\n if (settle.ok) {\n const c = getCtx();\n if (!c._mounted) return null;\n this.pushLoaded(urls);\n }\n\n await new Promise<void>((resolve) => {\n this.endBarAnimation(() => resolve());\n });\n\n return getCtx().bar;\n }\n\n return null;\n },\n\n // --- Mobile animation ---------------------------------------------------\n\n startAnimationMobile() {\n const ctx = getCtx();\n const active = (ctx as any)[ctx.active] as HTMLElement;\n const loader = (ctx as any)[ctx.loader] as HTMLElement;\n\n const contentEnterMoveClass = ctx.direction\n ? ctx.classNames.contentMoveRight\n : ctx.classNames.contentMoveLeft;\n\n const contentExitMoveClass = ctx.direction\n ? ctx.classNames.contentMoveLeft\n : ctx.classNames.contentMoveRight;\n\n const activeContent = active.querySelector(\n `.${getAnyClassName(ctx.classNames.content)}`\n ) as Element;\n\n const loaderContent = loader.querySelector(\n `.${getAnyClassName(ctx.classNames.content)}`\n ) as Element;\n\n classListAdd(activeContent, contentExitMoveClass);\n classListAdd(activeContent, ctx.classNames.contentExit);\n\n classListAdd(loaderContent, contentEnterMoveClass);\n classListAdd(loaderContent, ctx.classNames.contentStatic);\n\n classListAdd(active, ctx.classNames.animated);\n classListAdd(loader, ctx.classNames.animated);\n },\n\n animateMobileEnd(callback?: () => void) {\n const ctx = getCtx();\n const active = (ctx as any)[ctx.active] as HTMLElement;\n const loader = (ctx as any)[ctx.loader] as HTMLElement;\n\n const exitPosition = ctx.direction\n ? ctx.classNames.moveLeft\n : ctx.classNames.moveRight;\n\n const contentEnterMoveClass = ctx.direction\n ? ctx.classNames.contentMoveRight\n : ctx.classNames.contentMoveLeft;\n\n const contentExitMoveClass = ctx.direction\n ? ctx.classNames.contentMoveLeft\n : ctx.classNames.contentMoveRight;\n\n const loaderContent = loader.querySelector(\n `.${getAnyClassName(ctx.classNames.content)}`\n ) as Element;\n\n const activeContent = active.querySelector(\n `.${getAnyClassName(ctx.classNames.content)}`\n ) as Element;\n\n classListRemove(loaderContent, ctx.classNames.contentStatic);\n classListAdd(loader, ctx.classNames.animatedMobile);\n classListAdd(active, ctx.classNames.animatedMobile);\n\n onceNextCssLayout().then(() => {\n const c = getCtx();\n if (!c._mounted) return;\n\n loader.style.transform = 'translate3d(0, 0, 0)';\n active.style.transform = `translate3d(${c.direction ? '-' : ''}100%, 0, 0)`;\n\n const totalMs = getTransitionTotalMs(active);\n const waitMs = totalMs ? Math.max(250, Math.ceil(totalMs) + 250) : 0;\n\n const done = () => {\n const cc = getCtx();\n if (!cc._mounted) return;\n if (!cc.loading) return;\n\n classListRemove(active, cc.classNames.animated);\n classListRemove(loader, cc.classNames.animated);\n classListAdd(loader, cc.classNames.active);\n classListRemove(active, cc.classNames.active);\n classListRemove(active, exitPosition);\n classListRemove(loader, cc.classNames.animatedMobile);\n classListRemove(active, cc.classNames.animatedMobile);\n classListRemove(activeContent, contentExitMoveClass);\n classListRemove(activeContent, cc.classNames.contentExit);\n classListRemove(loaderContent, contentEnterMoveClass);\n\n if (cc.buttons) {\n cc._setTimeout(() => {\n const ccc = getCtx();\n if (ccc.buttons) {\n classListRemove(\n ccc.buttons.element,\n ccc.classNames.controlsActive\n );\n }\n }, cc.props.controlsReturnDelay || 0);\n }\n\n if (cc.activeArrow) {\n classListRemove(cc.activeArrow, cc.activeArrowClass || '');\n cc.activeArrow = null;\n cc.activeArrowClass = null;\n }\n\n cc.active = cc.active === 'boxA' ? 'boxB' : 'boxA';\n cc.loader = cc.active === 'boxA' ? 'boxB' : 'boxA';\n\n if (callback) callback();\n };\n\n if (!waitMs) {\n done();\n return;\n }\n\n withTimeout(\n onceTransitionEnd(active),\n waitMs,\n 'animateMobileEnd/onceTransitionEnd',\n { totalMs }\n ).then(() => done());\n });\n },\n\n // --- Desktop animation --------------------------------------------------\n\n runAnimation(args: any) {\n const {\n active,\n media,\n contentExitMoveClass,\n contentEnterMoveClass,\n activeContentElement,\n loaderContentElement,\n loader,\n loaderPosition,\n exitPosition,\n callback,\n transitionDelay,\n } = args;\n\n this.loadContent(active, media).then((bar) => {\n const ctx = getCtx();\n if (!ctx._mounted) return;\n\n classListAdd(activeContentElement, contentExitMoveClass);\n classListAdd(activeContentElement, ctx.classNames.contentExit);\n classListAdd(loaderContentElement, contentEnterMoveClass);\n classListAdd(loaderContentElement, ctx.classNames.contentStatic);\n\n ctx._setTimeout(() => {\n const c = getCtx();\n if (!c._mounted) return;\n\n onceNextCssLayout().then(() => {\n const cc = getCtx();\n if (!cc._mounted) return;\n\n classListAdd(active, cc.classNames.animated);\n classListAdd(loader, cc.classNames.animated);\n classListRemove(loaderContentElement, cc.classNames.contentStatic);\n classListAdd(active, cc.classNames.exit);\n classListAdd(loader, loaderPosition);\n classListAdd(active, exitPosition);\n\n const activeAnimTotal = getAnimationTotalMs(active);\n const loaderAnimTotal = getAnimationTotalMs(loader);\n const waitTargets: Promise<\n | { ok: true; value: Event }\n | { ok: false; reason: 'timeout' | 'error'; error?: any }\n >[] = [];\n\n if (activeAnimTotal) {\n waitTargets.push(\n withTimeout(\n onceAnimationEnd(active),\n Math.max(300, Math.ceil(activeAnimTotal) + 300),\n 'runAnimation/onceAnimationEnd(active)',\n { animTotal: activeAnimTotal }\n )\n );\n }\n\n if (loaderAnimTotal) {\n waitTargets.push(\n withTimeout(\n onceAnimationEnd(loader),\n Math.max(300, Math.ceil(loaderAnimTotal) + 300),\n 'runAnimation/onceAnimationEnd(loader)',\n { animTotal: loaderAnimTotal }\n )\n );\n }\n\n const finish = () => {\n const ccc = getCtx();\n if (!ccc._mounted) return;\n\n classListAdd(loader, ccc.classNames.active);\n classListRemove(loader, loaderPosition);\n classListRemove(loader, ccc.classNames.animated);\n classListRemove(active, ccc.classNames.animated);\n classListRemove(active, ccc.classNames.active);\n classListRemove(active, exitPosition);\n classListRemove(active, ccc.classNames.exit);\n classListRemove(activeContentElement, contentExitMoveClass);\n classListRemove(activeContentElement, ccc.classNames.contentExit);\n classListRemove(loaderContentElement, contentEnterMoveClass);\n\n if (bar && active.contains(bar)) active.removeChild(bar);\n\n if (ccc.buttons) {\n ccc._setTimeout(() => {\n const c4 = getCtx();\n if (c4.buttons) {\n classListRemove(\n c4.buttons.element,\n c4.classNames.controlsActive\n );\n }\n }, ccc.props.controlsReturnDelay || 0);\n }\n\n ccc.active = ccc.active === 'boxA' ? 'boxB' : 'boxA';\n ccc.loader = ccc.active === 'boxA' ? 'boxB' : 'boxA';\n\n const release = !ccc.activeArrow;\n\n if (ccc.activeArrow) {\n const arrow = ccc.activeArrow; // HTMLElement (type-safe)\n\n onceTransitionEnd(arrow, {\n tolerance: ccc.index === null ? 0 : 2,\n }).then(() => {\n const c5 = getCtx();\n if (!c5._mounted) return;\n c5.releaseTransition();\n });\n\n classListRemove(arrow, ccc.activeArrowClass || '');\n ccc.activeArrow = null;\n ccc.activeArrowClass = null;\n }\n\n callback({ release });\n };\n\n if (!waitTargets.length) {\n finish();\n return;\n }\n\n Promise.all(waitTargets).then(() => finish());\n });\n }, transitionDelay);\n });\n },\n\n releaseTransition() {\n const ctx = getCtx();\n ctx.loading = false;\n },\n\n startAnimation(\n direction: boolean,\n media: MediaItem,\n callback: (res: { release?: boolean }) => void\n ) {\n const ctx = getCtx();\n\n const active = (ctx as any)[ctx.active] as HTMLElement;\n const loader = (ctx as any)[ctx.loader] as HTMLElement;\n\n const loaderPosition = direction\n ? ctx.classNames.moveRight\n : ctx.classNames.moveLeft;\n\n const exitPosition = direction\n ? ctx.classNames.moveLeft\n : ctx.classNames.moveRight;\n\n const contentEnterMoveClass = direction\n ? ctx.classNames.contentMoveRight\n : ctx.classNames.contentMoveLeft;\n\n const contentExitMoveClass = direction\n ? ctx.classNames.contentMoveLeft\n : ctx.classNames.contentMoveRight;\n\n const activeContentElement = active.querySelector(\n `.${getAnyClassName(ctx.classNames.content)}`\n ) as Element;\n\n const loaderContentElement = loader.querySelector(\n `.${getAnyClassName(ctx.classNames.content)}`\n ) as Element;\n\n active.style.removeProperty('transform');\n loader.style.removeProperty('transform');\n\n this.runAnimation({\n active,\n media,\n contentExitMoveClass,\n contentEnterMoveClass,\n activeContentElement,\n loaderContentElement,\n loader,\n loaderPosition,\n exitPosition,\n callback,\n transitionDelay: ctx.props.transitionDelay || 0,\n });\n },\n\n activateArrows(direction: boolean, callback?: () => void) {\n const ctx = getCtx();\n const dirName = direction ? 'right' : 'left';\n const mergedStyles = mergeStyles(ctx.props.cssModule);\n\n const arrowClass = getAnyClassName(\n getClassName(\n `${ctx.rootElement}__controls__arrow-${dirName}`,\n mergedStyles as any\n )\n );\n\n if (ctx.buttons) {\n const activeArrowRoot = direction ? ctx.buttons.next : ctx.buttons.prev;\n ctx.activeArrow = activeArrowRoot.querySelector(\n `.${arrowClass}`\n ) as HTMLElement | null;\n }\n\n if (\n !ctx.activeArrow ||\n (ctx.buttons &&\n ctx.buttons.element &&\n ctx.buttons.element.classList.contains(ctx.classNames.controlsActive))\n ) {\n if (callback) callback();\n return;\n }\n\n ctx.activeArrowClass = getClassName(\n `${ctx.rootElement}__controls__arrow-${dirName}--active`,\n mergedStyles as any\n );\n\n onceTransitionEnd(ctx.activeArrow, {\n tolerance: ctx.index === null ? 0 : 2,\n }).then(() => {\n const c = getCtx();\n if (!c._mounted) return;\n if (callback) callback();\n });\n\n if (ctx.buttons && ctx.buttons.element) {\n classListAdd(ctx.buttons.element, ctx.classNames.controlsActive);\n classListAdd(ctx.activeArrow, ctx.activeArrowClass);\n }\n },\n };\n}\n\nexport default createEngine;\n","/* eslint-disable no-continue */\n/* eslint-disable no-restricted-syntax */\nimport {\n getRootClassName,\n setupClassNames,\n transformChildren,\n mergeStyles,\n} from './helpers';\n\nimport type { ClassNames, CssModuleMerged, MediaItem } from './helpers';\n\n// ---- Types -----------------------------------------------------------------\n\nexport type SliderBoxKey = 'boxA' | 'boxB';\n\nexport type SliderState = {\n index: number | null;\n boxA: any;\n boxB: any;\n};\n\nexport type TransitionInfo = {\n slides: number;\n currentIndex: number | null;\n currentSlide: HTMLElement | null;\n currentMedia: MediaItem | undefined;\n element: HTMLElement | null;\n [k: string]: any;\n};\n\nexport type TransitionRejectInfo = TransitionInfo & {\n forceTransition: () => void;\n};\n\nexport type SliderPropsLike = {\n animation?: string | null;\n className?: string | null;\n cssModule?: any;\n disabled?: boolean;\n fillParent?: boolean;\n infinite?: boolean;\n organicArrows?: boolean;\n startup?: boolean;\n startupDelay?: number;\n startupScreen?: any;\n selected?: any;\n name?: string;\n\n children?: any;\n media?: MediaItem[];\n\n onLoadStart?: ((payload: any) => void) | null;\n onFirstMount?: ((info: any) => void) | null;\n onResetSlider?: ((info: any) => void) | null;\n onStartupRelease?: ((info: any) => void) | null;\n\n onTransitionStart?: ((info: any) => void) | null;\n onTransitionEnd?: ((info: any) => void) | null;\n onTransitionRequest?: ((info: any) => void) | null;\n onTransitionReject?: ((info: TransitionRejectInfo) => void) | null;\n\n controlsReturnDelay?: number;\n transitionDelay?: number;\n};\n\nexport type EngineLike = {\n activateArrows: (direction: boolean, callback?: () => void) => void;\n startAnimationMobile: () => void;\n startAnimation: (\n direction: boolean,\n media: MediaItem,\n callback: (res: { release?: boolean }) => void\n ) => void;\n releaseTransition: () => void;\n};\n\nexport type CtxLike = {\n // \"reacty\" bits\n props: SliderPropsLike;\n state: SliderState;\n setState: (patch: any, cb?: () => void) => void;\n\n // runtime fields used by model\n rootElement: string;\n classNames: ClassNames;\n media: MediaItem[];\n\n active: SliderBoxKey;\n loader: SliderBoxKey;\n\n index: number | null;\n nextIndex: number | null;\n\n loading: boolean;\n direction: boolean;\n started: boolean;\n\n _mounted: boolean;\n _setTimeout: (fn: () => void, ms: number) => any;\n\n // DOM refs (for info payloads)\n slider: HTMLElement | null;\n\n // dynamic boxes on ctx: ctx.boxA / ctx.boxB\n boxA: HTMLElement | null;\n boxB: HTMLElement | null;\n\n // misc used in goTo\n renderedLoader?: boolean;\n\n // EngineCtxLike includes \"getInfo\" via Pick<CtxLike,...>.\n getInfo: () => TransitionInfo;\n};\n\n// ---- API -------------------------------------------------------------------\n\nexport type GoToArgs = {\n index: any;\n direction: boolean;\n touch?: boolean;\n};\n\nexport type CreateModel = (\n getCtx: () => CtxLike,\n engine: EngineLike\n) => {\n onTransitionStart: () => void;\n onTransitionRequest: (event: string, index: number) => void;\n onTransitionEnd: () => void;\n\n getRootClassName: () => string;\n setupClassNames: (cssModule: CssModuleMerged) => void;\n\n setupStartup: (props: SliderPropsLike) => void;\n\n getInfo: () => TransitionInfo;\n\n getIndex: (index: any) => number;\n checkIndex: (index: number) => number;\n\n checkChildren: (props: SliderPropsLike, prevProps?: SliderPropsLike) => void;\n\n refreshSlider: () => void;\n\n startup: () => void;\n resetSlider: (index?: number) => void;\n\n chargeIndex: (index: number, callback: (media: MediaItem) => void) => void;\n unchargeIndex: () => void;\n\n goTo: (args: GoToArgs) => void;\n};\n\n// ---- Implementation --------------------------------------------------------\n\nexport const createModel: CreateModel = (getCtx, engine) => {\n const api = {\n onTransitionStart() {\n const ctx = getCtx();\n const nextMedia = ctx.media[ctx.nextIndex ?? 0];\n\n const data = {\n ...api.getInfo(),\n nextSlide: (ctx as any)[ctx.loader] as HTMLElement | null,\n nextIndex: ctx.nextIndex,\n nextMedia,\n };\n\n if (ctx.props.onTransitionStart) ctx.props.onTransitionStart(data);\n\n const currentMedia = ctx.media[ctx.index ?? 0];\n if (currentMedia && (currentMedia as any).onTransitionStartOut) {\n (currentMedia as any).onTransitionStartOut(data);\n }\n if (nextMedia && (nextMedia as any).onTransitionStartIn) {\n (nextMedia as any).onTransitionStartIn(data);\n }\n },\n\n onTransitionRequest(event: string, index: number) {\n const ctx = getCtx();\n const nextIndex = api.checkIndex(index);\n const nextMedia = ctx.media[nextIndex];\n\n const data = {\n eventName: event,\n ...api.getInfo(),\n nextSlide: null,\n nextIndex,\n nextMedia,\n };\n\n if (ctx.props.onTransitionRequest) ctx.props.onTransitionRequest(data);\n\n const currentMedia = ctx.media[ctx.index ?? 0];\n if (currentMedia && (currentMedia as any).onTransitionRequestOut) {\n (currentMedia as any).onTransitionRequestOut(data);\n }\n if (nextMedia && (nextMedia as any).onTransitionRequestIn) {\n (nextMedia as any).onTransitionRequestIn(data);\n }\n },\n\n onTransitionEnd() {\n const ctx = getCtx();\n const data = { ...api.getInfo() };\n\n if (ctx.props.onTransitionEnd) ctx.props.onTransitionEnd(data);\n\n const currentMedia = ctx.media[ctx.index ?? 0];\n if (currentMedia && (currentMedia as any).onTransitionEnd) {\n (currentMedia as any).onTransitionEnd(data);\n }\n },\n\n getRootClassName() {\n const ctx = getCtx();\n const {\n animation,\n className,\n cssModule,\n disabled,\n fillParent,\n infinite,\n organicArrows,\n } = ctx.props;\n\n return getRootClassName({\n animation: animation ?? null,\n className: className ?? null,\n cssModule: mergeStyles(cssModule),\n current: ctx.state.index,\n disabled: !!disabled,\n fillParent: !!fillParent,\n infinite: infinite !== false,\n organicArrows: organicArrows !== false,\n rootElement: ctx.rootElement,\n total: ctx.media.length,\n });\n },\n\n setupClassNames(cssModule: CssModuleMerged) {\n const ctx = getCtx();\n ctx.classNames = setupClassNames(ctx.rootElement, cssModule);\n },\n\n setupStartup(props: SliderPropsLike) {\n const ctx = getCtx();\n\n api.checkChildren(props);\n api.setupClassNames(mergeStyles(props.cssModule));\n\n if (props.startupScreen) {\n const nextIndex = api.getIndex(props.selected);\n ctx.index = null;\n\n (ctx as any).state = {\n index: ctx.index,\n boxA: {\n className: ctx.classNames.startUp,\n children: props.startupScreen,\n },\n boxB: ctx.media[nextIndex] || null,\n } satisfies SliderState;\n } else {\n ctx.started = true;\n ctx.index = api.getIndex(props.selected);\n\n (ctx as any).state = {\n index: ctx.index,\n boxA: ctx.media[ctx.index] || null,\n boxB: null,\n } satisfies SliderState;\n }\n },\n\n getInfo(): TransitionInfo {\n const ctx = getCtx();\n return {\n slides: ctx.media.length,\n currentIndex: ctx.index,\n currentSlide: (ctx as any)[ctx.active] as HTMLElement | null,\n currentMedia: ctx.media[ctx.index ?? 0],\n element: ctx.slider,\n };\n },\n\n getIndex(index: any): number {\n const ctx = getCtx();\n let nextIndex = 0;\n\n if (typeof index === 'number') return index;\n\n if (typeof index === 'string') {\n const found = ctx.media.findIndex((m: any) => m && m.slug === index);\n nextIndex = found >= 0 ? found : 0;\n }\n\n return nextIndex;\n },\n\n checkIndex(index: number): number {\n const ctx = getCtx();\n return index > ctx.media.length - 1\n ? 0\n : index < 0\n ? ctx.media.length - 1\n : index;\n },\n\n checkChildren(props: SliderPropsLike, prevProps?: SliderPropsLike) {\n const ctx = getCtx();\n const prevChildren = prevProps ? prevProps.children : ctx.props.children;\n\n if (props.children) {\n if (props.children !== prevChildren || (prevChildren && !ctx.media)) {\n ctx.media = transformChildren(props.children) as MediaItem[];\n return;\n }\n }\n\n if (props.media && props.media.length) {\n ctx.media = props.media;\n return;\n }\n\n if (!ctx.media) ctx.media = [];\n },\n\n refreshSlider() {\n const ctx = getCtx();\n\n if (\n ctx.loading === true ||\n ctx.props.startup === false ||\n ctx.index === null\n ) {\n return;\n }\n\n const index = ctx.index;\n const nextActive = ctx.media[api.getIndex(index)] || null;\n\n if (\n ctx.state.index === index &&\n (ctx.state as any)[ctx.active] === nextActive &&\n (ctx.state as any)[ctx.loader] == null\n ) {\n return;\n }\n\n ctx.setState({\n index,\n [ctx.active]: nextActive,\n [ctx.loader]: null,\n });\n },\n\n startup() {\n const ctx = getCtx();\n ctx.started = true;\n\n ctx._setTimeout(() => {\n const c = getCtx();\n if (!c._mounted) return;\n\n api.goTo({\n index: c.props.selected,\n direction: true,\n touch: false,\n });\n }, ctx.props.startupDelay || 75);\n },\n\n resetSlider(index = 0) {\n const ctx = getCtx();\n ctx.index = index;\n\n ctx.setState(\n {\n index,\n [ctx.active]: ctx.media[api.getIndex(index)],\n [ctx.loader]: null,\n },\n () => {\n const c = getCtx();\n if (!c._mounted) return;\n\n if (c.props.onResetSlider) {\n c.props.onResetSlider({ ...api.getInfo() });\n }\n }\n );\n },\n\n chargeIndex(index: number, callback: (media: MediaItem) => void) {\n const ctx = getCtx();\n ctx.nextIndex = api.checkIndex(index);\n\n const media = ctx.media[ctx.nextIndex];\n\n ctx.setState(\n {\n [ctx.loader]: {\n loader: true,\n ...media,\n },\n },\n () => {\n callback(media);\n }\n );\n },\n\n unchargeIndex() {\n const ctx = getCtx();\n ctx.setState({ [ctx.loader]: null });\n },\n\n goTo({ index, direction, touch = false }: GoToArgs) {\n const ctx = getCtx();\n const nextIndex = api.getIndex(index);\n\n if (ctx.loading === true || nextIndex === ctx.index) {\n if (ctx.props.onTransitionReject) {\n ctx.props.onTransitionReject({\n ...api.getInfo(),\n forceTransition: () => {\n api.goTo({ index, direction, touch });\n },\n });\n }\n return;\n }\n\n ctx.loading = true;\n ctx.direction = direction;\n\n if (touch === true) {\n api.chargeIndex(nextIndex, () => {\n engine.activateArrows(direction);\n api.onTransitionStart();\n engine.startAnimationMobile();\n });\n return;\n }\n\n engine.activateArrows(direction, () => {\n api.chargeIndex(nextIndex, (media) => {\n ctx.renderedLoader = true;\n\n api.onTransitionStart();\n\n engine.startAnimation(direction, media, ({ release = true }) => {\n const c = getCtx();\n c.index = c.nextIndex;\n\n c.setState({ index: c.index }, () => {\n const cc = getCtx();\n if (!cc._mounted) return;\n\n api.onTransitionEnd();\n if (release === true) {\n engine.releaseTransition();\n }\n });\n });\n });\n });\n },\n };\n\n return api;\n};\n\nexport default createModel;\n","import React, { memo, useCallback, useMemo } from 'react';\nimport { getClassName } from '../helpers/components';\nimport type { CssModuleMerged, MediaItem } from './helpers';\n\nexport type BulletClickInfo = {\n index: number;\n direction: boolean;\n};\n\nexport type BulletsProps = {\n cssModule?: CssModuleMerged;\n rootElement: string;\n media?: MediaItem[];\n onClick?: (info: BulletClickInfo) => void;\n selected?: number;\n};\n\nfunction Bullets({\n cssModule = null,\n rootElement,\n media = [],\n onClick = () => {},\n selected = 0,\n}: BulletsProps) {\n const loadingClass = useMemo(\n () => getClassName(`${rootElement}__bullets--loading`, cssModule as any),\n [rootElement, cssModule]\n );\n\n const activeClass = useMemo(\n () => getClassName(`${rootElement}__bullets--active`, cssModule as any),\n [rootElement, cssModule]\n );\n\n const onBulletClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n const button = event.currentTarget;\n\n // Preserve existing behavior: add loading class immediately\n if (loadingClass) button.classList.add(loadingClass);\n\n const indexAttr = button.getAttribute('data-index');\n const index = Number.parseInt(indexAttr || '0', 10);\n const direction = !(selected > index);\n\n onClick({ index, direction });\n },\n [loadingClass, onClick, selected]\n );\n\n return (\n <nav className={getClassName(`${rootElement}__bullets`, cssModule as any)}>\n {media.map((_, index) => {\n const isActive = index === selected;\n\n return (\n <button\n key={`bullet-${index}`}\n type=\"button\"\n data-index={index}\n onClick={onBulletClick}\n className={isActive ? activeClass : undefined}\n aria-label={`Go to slide ${index + 1}`}\n aria-current={isActive ? 'true' : undefined}\n >\n {index}\n </button>\n );\n })}\n </nav>\n );\n}\n\nexport default memo(Bullets);\n","import React, { memo, useLayoutEffect, useRef } from 'react';\nimport { getClassName } from '../helpers/components';\nimport type { CssModuleMerged } from './helpers';\n\nexport type ButtonsMountInfo = {\n element: HTMLDivElement | null;\n next: HTMLButtonElement | null;\n prev: HTMLButtonElement | null;\n};\n\nexport type ButtonsProps = {\n cssModule?: CssModuleMerged;\n rootElement: string;\n\n onMount: (info: ButtonsMountInfo) => void;\n onNext: (e: React.MouseEvent<HTMLButtonElement>) => void;\n onPrev: (e: React.MouseEvent<HTMLButtonElement>) => void;\n\n buttonContentLeft?: React.ReactNode;\n buttonContentRight?: React.ReactNode;\n organicArrows?: boolean;\n};\n\nfunction Buttons({\n cssModule = null,\n rootElement,\n onMount,\n onNext,\n onPrev,\n buttonContentLeft = null,\n buttonContentRight = null,\n organicArrows = true,\n}: ButtonsProps) {\n const controlsRef = useRef<HTMLDivElement | null>(null);\n const nextRef = useRef<HTMLButtonElement | null>(null);\n const prevRef = useRef<HTMLButtonElement | null>(null);\n\n // ✅ layout effect runs during commit, before parent componentDidMount\n useLayoutEffect(() => {\n onMount({\n element: controlsRef.current,\n next: nextRef.current,\n prev: prevRef.current,\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div\n ref={controlsRef}\n className={[\n getClassName(`${rootElement}__controls`, cssModule as any),\n getClassName(`${rootElement}__controls--hidden`, cssModule as any),\n ].join(' ')}\n >\n {/* ✅ preserve original order: next first */}\n <button\n ref={nextRef}\n type=\"button\"\n aria-label=\"next\"\n className={getClassName(`${rootElement}__next`, cssModule as any)}\n onClick={onNext}\n >\n {organicArrows ? (\n <span\n className={getClassName(\n `${rootElement}__controls__arrow-right`,\n cssModule as any\n )}\n />\n ) : (\n buttonContentRight\n )}\n </button>\n\n <button\n ref={prevRef}\n type=\"button\"\n aria-label=\"previous\"\n className={getClassName(`${rootElement}__prev`, cssModule as any)}\n onClick={onPrev}\n >\n {organicArrows ? (\n <span\n className={getClassName(\n `${rootElement}__controls__arrow-left`,\n cssModule as any\n )}\n />\n ) : (\n buttonContentLeft\n )}\n </button>\n </div>\n );\n}\n\nexport default memo(Buttons);\n","/* eslint-disable no-useless-computed-key */\n/* eslint-disable no-continue */\n/* eslint-disable no-restricted-syntax */\nimport React, { memo, useEffect, useMemo, useRef } from 'react';\n\ntype CssLike = React.CSSProperties | undefined;\n\nexport type MediaItem = {\n source?: string;\n preload?: string[];\n slug?: string;\n loader?: boolean;\n\n title?: string;\n alt?: string;\n style?: CssLike;\n className?: string;\n\n children?: React.ReactNode;\n\n // legacy attribute mirrors used by transformChildren / markup patterns\n ['data-src']?: string;\n ['data-alt']?: string;\n ['data-title']?: string;\n ['data-slug']?: string;\n\n // transition hooks (ignored here, but can exist)\n onTransitionEnd?: (...args: any[]) => any;\n onTransitionStartOut?: (...args: any[]) => any;\n onTransitionStartIn?: (...args: any[]) => any;\n onTransitionRequestOut?: (...args: any[]) => any;\n onTransitionRequestIn?: (...args: any[]) => any;\n\n // allow arbitrary extra fields; we will filter for safe DOM props\n [key: string]: any;\n};\n\nexport type MediaProps = {\n media: MediaItem;\n className: string;\n};\n\nconst VIDEO_RE = /\\.(mp4|webm)(\\?|#|$)/i;\nconst isVideoSrc = (src: unknown) => VIDEO_RE.test(String(src || ''));\n\n// Only forward safe props to the DOM container.\n// (Prevents React warnings from arrays/objects/functions on <div>.)\nconst pickDomProps = (\n obj: Record<string, any> | null | undefined\n): React.HTMLAttributes<HTMLDivElement> & Record<string, any> => {\n const out: Record<string, any> = {};\n if (!obj || typeof obj !== 'object') return out as any;\n\n for (const [k, v] of Object.entries(obj)) {\n if (v == null) continue;\n\n // allow data-/aria- passthrough\n if (k.startsWith('data-') || k.startsWith('aria-')) {\n out[k] = v;\n continue;\n }\n\n // allow event handlers (onClick, onMouseEnter, etc)\n if (/^on[A-Z]/.test(k) && typeof v === 'function') {\n out[k] = v;\n continue;\n }\n\n // a small set of common safe DOM props\n if (\n k === 'id' ||\n k === 'role' ||\n k === 'tabIndex' ||\n k === 'title' ||\n k === 'draggable'\n ) {\n out[k] = v;\n }\n }\n\n return out as any;\n};\n\nfunction Media({ media, className }: MediaProps) {\n const {\n source,\n children,\n style,\n className: mediaClass,\n\n // strip slider-internal / transition hooks\n loader,\n onTransitionEnd,\n onTransitionStartOut,\n onTransitionStartIn,\n onTransitionRequestOut,\n onTransitionRequestIn,\n\n // strip legacy child attribute mirrors\n ['data-src']: dataSrc,\n ['data-alt']: dataAlt,\n\n // used for video/img metadata\n title,\n alt,\n ['data-title']: dataTitle,\n ['data-alt']: dataAlt2,\n ['data-slug']: dataSlug,\n slug,\n\n preload,\n\n ...extra\n } = media || ({} as MediaItem);\n\n void loader;\n void onTransitionEnd;\n void onTransitionStartOut;\n void onTransitionStartIn;\n void onTransitionRequestOut;\n void onTransitionRequestIn;\n void dataAlt;\n void dataSlug;\n void slug;\n void preload;\n\n const domProps = useMemo(() => pickDomProps(extra), [extra]);\n\n const imgRef = useRef<HTMLImageElement | null>(null);\n const videoRef = useRef<HTMLVideoElement | null>(null);\n\n // Keep the refs \"used\" (no side effects needed without logs)\n useEffect(() => {\n void imgRef.current;\n void videoRef.current;\n }, [source, dataSrc]);\n\n const background = useMemo(() => {\n if (!source) return null;\n\n if (isVideoSrc(source)) {\n // NOTE: keep controls like original behavior\n return (\n <video\n ref={videoRef}\n title={title || dataTitle}\n src={source}\n controls\n playsInline\n />\n );\n }\n\n return (\n <img\n ref={imgRef}\n src={source}\n alt={alt || title || dataAlt2 || ''}\n loading=\"lazy\"\n decoding=\"async\"\n />\n );\n }, [source, title, alt, dataTitle, dataAlt2]);\n\n return (\n <div className={className} style={style || undefined} {...domProps}>\n {background}\n {children ? (\n <div className={mediaClass || undefined}>{children}</div>\n ) : null}\n </div>\n );\n}\n\nexport default memo(Media);\n","// hoc/animated-lettering/hoc.tsx\nimport React, { useMemo } from 'react';\n\ntype Screen = {\n backgroundColor?: string;\n children: React.ReactNode[]; // strings are fine too\n};\n\nexport type LetteringHocProps = {\n screens: Screen[];\n name?: string;\n children?: React.ReactNode;\n};\n\nexport default function LetteringHoc<P extends object>(\n WrappedComponent: React.ComponentType<P>\n) {\n const Component: React.FC<P & LetteringHocProps> = (props) => {\n const { screens, name, children, ...rest } = props as LetteringHocProps & P;\n\n const renderedScreens = useMemo(() => {\n const base = name || 'awesome-slider';\n\n return (screens || []).map((screen, index) => (\n <div\n key={`${base}-screen-${index}`}\n style={{ backgroundColor: screen?.backgroundColor }}\n >\n {(screen?.children || []).map((text, tIndex) => (\n <p key={`${base}${index}-text-${tIndex}`}>{text}</p>\n ))}\n </div>\n ));\n }, [screens, name]);\n\n return (\n <WrappedComponent {...(rest as P)}>\n {renderedScreens}\n {children /* keep passthrough compatibility */}\n </WrappedComponent>\n );\n };\n\n Component.displayName = `LetteringHoc(${\n (WrappedComponent as any).displayName ||\n (WrappedComponent as any).name ||\n 'Component'\n })`;\n\n return Component;\n}"],"mappings":"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","names":["React","React","useCallback","useEffect","useLayoutEffect","useMemo","useRef","onceNextCssLayout","React","memo","React","memo","React","memo","useMemo","useRef","useMemo","useRef","ctx","useCallback","useLayoutEffect","onceNextCssLayout","useEffect","React","React","useMemo","React"]}
@@ -5,6 +5,7 @@ type NavigationState = {
5
5
  goto: string;
6
6
  navigating: boolean;
7
7
  pop: boolean;
8
+ defaultSlug?: string;
8
9
  };
9
10
  type SetNavigation = (next: Partial<NavigationState> | string) => void;
10
11
  declare const Context: any;
@@ -5,6 +5,7 @@ type NavigationState = {
5
5
  goto: string;
6
6
  navigating: boolean;
7
7
  pop: boolean;
8
+ defaultSlug?: string;
8
9
  };
9
10
  type SetNavigation = (next: Partial<NavigationState> | string) => void;
10
11
  declare const Context: any;