@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.
- package/README.md +212 -51
- package/dist/autoplay.js +25 -9
- package/dist/autoplay.js.map +1 -1
- package/dist/autoplay.mjs +25 -9
- package/dist/autoplay.mjs.map +1 -1
- package/dist/captioned.js +25 -9
- package/dist/captioned.js.map +1 -1
- package/dist/captioned.mjs +25 -9
- package/dist/captioned.mjs.map +1 -1
- package/dist/custom-animations/cube-animation.css +1 -1
- package/dist/custom-animations/cube-animation.d.mts +3 -0
- package/dist/custom-animations/cube-animation.d.ts +3 -0
- package/dist/custom-animations/cube-animation.js +13 -0
- package/dist/custom-animations/cube-animation.mjs +10 -0
- package/dist/custom-animations/fall-animation.d.mts +3 -0
- package/dist/custom-animations/fall-animation.d.ts +3 -0
- package/dist/custom-animations/fall-animation.js +11 -0
- package/dist/custom-animations/fall-animation.mjs +8 -0
- package/dist/custom-animations/fold-out-animation.d.mts +3 -0
- package/dist/custom-animations/fold-out-animation.d.ts +3 -0
- package/dist/custom-animations/fold-out-animation.js +12 -0
- package/dist/custom-animations/fold-out-animation.mjs +9 -0
- package/dist/custom-animations/open-animation.d.mts +3 -0
- package/dist/custom-animations/open-animation.d.ts +3 -0
- package/dist/custom-animations/open-animation.js +12 -0
- package/dist/custom-animations/open-animation.mjs +9 -0
- package/dist/custom-animations/scale-out-animation.d.mts +3 -0
- package/dist/custom-animations/scale-out-animation.d.ts +3 -0
- package/dist/custom-animations/scale-out-animation.js +11 -0
- package/dist/custom-animations/scale-out-animation.mjs +8 -0
- package/dist/index.js +25 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +25 -9
- package/dist/index.mjs.map +1 -1
- package/dist/lettering.js +25 -9
- package/dist/lettering.js.map +1 -1
- package/dist/lettering.mjs +25 -9
- package/dist/lettering.mjs.map +1 -1
- package/dist/navigation.d.mts +1 -0
- package/dist/navigation.d.ts +1 -0
- package/dist/navigation.js +45 -31
- package/dist/navigation.js.map +1 -1
- package/dist/navigation.mjs +45 -31
- package/dist/navigation.mjs.map +1 -1
- package/package.json +14 -4
package/dist/navigation.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hoc/navigation/context.tsx","../src/hoc/navigation/link.tsx","../src/hoc/navigation/withNavigationContext.tsx","../src/hoc/navigation/withNavigationHandlers.tsx"],"sourcesContent":["// navigation/context.tsx\nimport React, {\n createContext,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\n\nexport type NavigationState = {\n slug: string;\n goto: string;\n navigating: boolean;\n pop: boolean;\n};\n\nexport type SetNavigation = (next: Partial<NavigationState> | string) => void;\n\nexport const Context = createContext<[NavigationState, SetNavigation]>([\n { slug: '', goto: '', navigating: false, pop: false },\n () => {},\n]);\n\nconst getCleanPath = (path: unknown) =>\n String(path || '')\n .replace(/^\\//, '')\n .replace(/\\/$/, '');\n\nexport type ProviderProps = {\n slug: string;\n defaultSlug?: string;\n children?: React.ReactNode;\n};\n\nexport const Provider: React.FC<ProviderProps> = ({\n slug,\n defaultSlug = '',\n children,\n}) => {\n const cleanPage = useMemo(() => {\n const cleanPageRaw = getCleanPath(slug);\n return cleanPageRaw || defaultSlug || '';\n }, [slug, defaultSlug]);\n\n const [state, setState] = useState<NavigationState>(() => ({\n slug: cleanPage,\n goto: cleanPage,\n navigating: false,\n pop: false,\n }));\n\n // Re-anchor when slug prop changes, but don't clobber in-flight nav.\n useEffect(() => {\n if (!cleanPage) return;\n\n setState((prev) => {\n // If we're mid-transition, don't force navigating=false or stomp goto.\n if (prev.navigating === true) {\n return {\n ...prev,\n slug: cleanPage,\n // keep goto as-is while navigating; end-handler will reconcile\n };\n }\n\n return {\n ...prev,\n slug: cleanPage,\n goto: cleanPage,\n navigating: false,\n pop: false,\n };\n });\n }, [cleanPage]);\n\n const setNavigation = useCallback<SetNavigation>(\n (params) => {\n if (params && typeof params === 'object') {\n setState((prev) => ({ ...prev, ...params }));\n return;\n }\n\n const nextRaw = getCleanPath(params);\n const next = nextRaw || defaultSlug || '';\n\n setState((prev) => ({ ...prev, goto: next }));\n },\n [defaultSlug]\n );\n\n return (\n <Context.Provider value={[state, setNavigation]}>\n {children}\n </Context.Provider>\n );\n};","// navigation/link.tsx\nimport React, { useCallback, useMemo } from 'react';\nimport withNavigationContext from './withNavigationContext';\nimport type { NavigationState, SetNavigation } from './context';\n\ntype Fullpage = {\n navigation: NavigationState;\n navigate: SetNavigation;\n};\n\nconst isModifiedClick = (e: React.MouseEvent) =>\n e.metaKey || e.altKey || e.ctrlKey || e.shiftKey || e.button !== 0;\n\nconst isExternalHref = (href: unknown) => {\n const h = String(href || '');\n return (\n /^([a-z][a-z0-9+.-]*:)?\\/\\//i.test(h) ||\n /^mailto:/i.test(h) ||\n /^tel:/i.test(h)\n );\n};\n\nconst cleanHrefToGoto = (href: unknown) =>\n String(href || '')\n .replace(/^\\//, '')\n .replace(/\\/$/, '');\n\nexport type LinkProps = Omit<\n React.AnchorHTMLAttributes<HTMLAnchorElement>,\n 'href' | 'className' | 'onClick'\n> & {\n fullpage?: Fullpage;\n href: string;\n className?: string | null;\n onClick?: React.MouseEventHandler<HTMLAnchorElement>;\n children?: React.ReactNode;\n};\n\nexport default withNavigationContext((props: LinkProps) => {\n const { fullpage, children, href, className = null, onClick, ...extra } =\n props;\n\n const navigation = fullpage?.navigation;\n const navigate = fullpage?.navigate;\n\n const goto = useMemo(() => cleanHrefToGoto(href), [href]);\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLAnchorElement>) => {\n // let user handler run first\n if (typeof onClick === 'function') onClick(event);\n if (event.defaultPrevented) return;\n\n // no nav context / no href / external => let browser handle\n if (!navigation || typeof navigate !== 'function' || !href) return;\n if (isExternalHref(href)) return;\n\n // allow middle click / cmd-click / ctrl-click / shift-click etc.\n if (isModifiedClick(event)) return;\n\n event.preventDefault();\n\n // ignore clicks while a transition is in progress\n if (navigation.navigating === true) return;\n\n // IMPORTANT: allow \"/\" to map to empty goto (Provider/handlers decide fallback)\n const nextGoto = goto;\n\n // noop if already targeting same goto\n if (nextGoto === navigation.goto) return;\n\n navigate({\n ...navigation,\n pop: false, // click-driven\n goto: nextGoto,\n });\n },\n [onClick, navigation, navigate, href, goto]\n );\n\n return (\n <a\n className={className || undefined}\n onClick={handleClick}\n href={href}\n {...extra}\n >\n {children}\n </a>\n );\n});","// navigation/withNavigationContext.tsx\nimport React, { useContext, useMemo } from 'react';\nimport { Context } from './context';\nimport type { NavigationState, SetNavigation } from './context';\n\nexport type Fullpage = {\n navigation: NavigationState;\n navigate: SetNavigation;\n};\n\nexport type WithNavigationInjectedProps = {\n fullpage: Fullpage;\n};\n\nconst FALLBACK_NAV: NavigationState = {\n slug: '',\n goto: '',\n navigating: false,\n pop: false,\n};\n\nexport default function withNavigationContext<P extends object>(\n Component: React.ComponentType<P & WithNavigationInjectedProps>\n) {\n function WithNavigationContext(props: P) {\n const value = useContext(Context);\n\n const navigation: NavigationState =\n (value && (value as any)[0]) || FALLBACK_NAV;\n\n const navigate: SetNavigation =\n (value && (value as any)[1]) || ((() => {}) as SetNavigation);\n\n const fullpage = useMemo<Fullpage>(\n () => ({\n navigation,\n navigate,\n }),\n [navigation, navigate]\n );\n\n return <Component {...props} fullpage={fullpage} />;\n }\n\n WithNavigationContext.displayName = `withNavigationContext(${\n (Component as any).displayName || (Component as any).name || 'Component'\n })`;\n\n return WithNavigationContext;\n}\n","// navigation/withNavigationHandlers.tsx (drop-in replacement)\nimport React, { useCallback, useEffect, useRef } from 'react';\nimport { frameThrower } from '@rcaferati/wac';\nimport withNavigationContext, {\n type WithNavigationInjectedProps,\n} from './withNavigationContext';\nimport type { NavigationState } from './context';\n\n// --- helpers -------------------------------------------------------------\n\nconst getCleanPath = (path: unknown) =>\n String(path || '')\n .replace(/^\\//, '')\n .replace(/\\/$/, '');\n\nconst getUrlSlug = (): string => {\n if (typeof window === 'undefined') return '';\n return getCleanPath(window.location.pathname) || '';\n};\n\ntype MediaLike = { slug?: string } | null | undefined;\n\ntype TransitionInfoLike = {\n currentMedia?: MediaLike;\n nextMedia?: MediaLike;\n} & Record<string, any>;\n\ntype TransitionRejectInfoLike = TransitionInfoLike & {\n forceTransition?: () => void;\n};\n\ntype HandlerProps = {\n onTransitionReject?: (info: any) => void;\n onTransitionStart?: (info: any) => void;\n onTransitionEnd?: (info: any) => void;\n};\n\n// -------------------------------------------------------------------------\n\nexport default function withNavigationHandlers<P extends object>(\n Component: React.ComponentType<P>\n) {\n type Props = P & HandlerProps & Partial<WithNavigationInjectedProps>;\n\n function WithNavigationHandlers(props: Props) {\n const {\n fullpage,\n onTransitionReject,\n onTransitionStart,\n onTransitionEnd,\n ...extra\n } = props as any;\n\n const navigation = fullpage?.navigation as NavigationState | undefined;\n const navigate = fullpage?.navigate as ((next: any) => void) | undefined;\n\n const navRef = useRef<NavigationState | undefined>(navigation);\n const navigateRef = useRef<typeof navigate>(navigate);\n\n // keep refs hot synchronously (avoid stale reads in callbacks)\n navRef.current = navigation;\n navigateRef.current = navigate;\n\n // What we *actually* landed on visually (authoritative). Only set on tx:end.\n const landedSlugRef = useRef<string>('');\n\n // Retry hook (available after a reject payload happens)\n const forceRef = useRef<(() => void) | null>(null);\n\n // Real transition lifecycle (engine reality)\n const txInFlightRef = useRef(false);\n\n // One-shot latch: \"next transitionStart is URL-driven (pop/sync), do NOT pushState\"\n // IMPORTANT: this is NOT stored in NavigationState to avoid sticky mode bugs.\n const urlDrivenStartLatchRef = useRef(false);\n\n // sync loop control (latest-wins)\n const syncRunningRef = useRef(false);\n const syncSeqRef = useRef(0);\n\n // ---- navigation -------------------------------------------------------\n\n const safeNavigate = useCallback(\n (next: NavigationState, reason: string) => {\n void reason; // keep callsites readable; avoid unused-param lint\n const fn = navigateRef.current;\n if (typeof fn !== 'function') return;\n fn(next);\n },\n []\n );\n\n const armForceRetry = useCallback((forceTransition?: unknown) => {\n if (typeof forceTransition === 'function') {\n forceRef.current = forceTransition as () => void;\n }\n }, []);\n\n // =========================================================================\n // URL Sync + Retry (latest-wins)\n // =========================================================================\n const syncToUrl = useCallback(\n async (reason: string) => {\n void reason; // retained for callsite intent; no logging\n if (typeof window === 'undefined') return;\n\n const initialUrlSlug = getUrlSlug();\n if (!initialUrlSlug) return;\n\n // latest-wins: cancel older runner\n if (syncRunningRef.current) {\n syncSeqRef.current += 1;\n }\n\n syncRunningRef.current = true;\n const mySeq = ++syncSeqRef.current;\n\n const MAX_TICKS = 240;\n\n try {\n for (let tick = 1; tick <= MAX_TICKS; tick++) {\n await frameThrower(1);\n\n if (mySeq !== syncSeqRef.current) {\n return;\n }\n\n const nav = (navRef.current || {\n slug: '',\n goto: '',\n navigating: false,\n pop: false,\n }) as NavigationState;\n\n const urlNow = getUrlSlug();\n if (!urlNow) continue;\n\n // 1) Ensure the controlled \"selected\" (goto) matches the URL.\n // Mark the next transitionStart as URL-driven so it must NOT pushState.\n if (nav.goto !== urlNow) {\n urlDrivenStartLatchRef.current = true;\n\n safeNavigate(\n {\n ...nav,\n pop: true,\n goto: urlNow,\n navigating: !!nav.navigating, // preserve (not trusted, but keep behavior)\n } as any,\n `syncToUrl:align-goto(tick:${tick})`\n );\n continue;\n }\n\n // 2) Never declare \"done\" while a real engine transition is in-flight.\n if (txInFlightRef.current === true) {\n continue;\n }\n\n // 3) Done when the *actual landed slide* matches the URL.\n if (landedSlugRef.current === urlNow) {\n return;\n }\n\n // 4) Not landed yet, not in-flight, goto matches URL -> re-trigger (if possible).\n const force = forceRef.current;\n if (typeof force === 'function') {\n // Avoid spamming: retry at a modest cadence.\n if (tick % 6 === 0) {\n try {\n force();\n } catch {\n // ignore\n }\n }\n }\n }\n } finally {\n if (syncSeqRef.current === mySeq) {\n syncRunningRef.current = false;\n }\n }\n },\n [safeNavigate]\n );\n\n // ---- popstate ----------------------------------------------------------\n\n const popSeqRef = useRef(0);\n\n const handlePopState = useCallback(() => {\n if (typeof window === 'undefined') return;\n const popSeq = ++popSeqRef.current;\n syncToUrl(`popstate#${popSeq}`);\n }, [syncToUrl]);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n window.addEventListener('popstate', handlePopState);\n return () => window.removeEventListener('popstate', handlePopState);\n }, [handlePopState]);\n\n // ---- transition handlers ----------------------------------------------\n\n const handleTransitionStart = useCallback(\n (element: TransitionInfoLike) => {\n if (typeof window === 'undefined') return;\n\n const nav = (navRef.current || {\n slug: '',\n goto: '',\n navigating: false,\n pop: false,\n }) as NavigationState;\n\n const cleanPath = getUrlSlug();\n const nextSlug = element?.nextMedia?.slug || '';\n\n // Real engine lifecycle\n txInFlightRef.current = true;\n\n // Consume the one-shot latch (URL-driven start => do NOT pushState).\n const urlDrivenStart = urlDrivenStartLatchRef.current === true;\n urlDrivenStartLatchRef.current = false;\n\n // pushState only for click-driven transitions (not URL-driven pop/sync).\n if (nextSlug && cleanPath !== nextSlug && !urlDrivenStart) {\n window.history.pushState({}, '', `/${nextSlug}`);\n }\n\n safeNavigate(\n {\n ...nav,\n goto: nextSlug || nav.goto,\n slug: nav.slug || cleanPath,\n navigating: true,\n pop: urlDrivenStart ? true : false,\n } as any,\n 'onTransitionStart'\n );\n\n if (onTransitionStart) onTransitionStart(element);\n },\n [onTransitionStart, safeNavigate]\n );\n\n const handleTransitionEnd = useCallback(\n (element: TransitionInfoLike) => {\n if (typeof window === 'undefined') return;\n\n const nav = (navRef.current || {\n slug: '',\n goto: '',\n navigating: false,\n pop: false,\n }) as NavigationState;\n\n const currentSlug = element?.currentMedia?.slug || '';\n const urlSlug = getUrlSlug();\n\n // Real engine lifecycle ends here (authoritative)\n txInFlightRef.current = false;\n\n if (currentSlug) landedSlugRef.current = currentSlug;\n\n const mismatch = !!(urlSlug && currentSlug && urlSlug !== currentSlug);\n\n // If mismatch, immediately set goto to URL so controlled selected follows it.\n safeNavigate(\n {\n ...nav,\n navigating: false,\n pop: mismatch ? true : false,\n slug: currentSlug || nav.slug,\n goto: mismatch ? urlSlug : currentSlug || nav.goto,\n } as any,\n mismatch\n ? 'onTransitionEnd:mismatch(set-goto=url)'\n : 'onTransitionEnd'\n );\n\n if (onTransitionEnd) onTransitionEnd(element);\n\n if (mismatch) {\n syncToUrl('onTransitionEnd:url-mismatch');\n } else {\n // Safe point to clear the retry hook only when reality matches the URL.\n forceRef.current = null;\n }\n },\n [onTransitionEnd, safeNavigate, syncToUrl]\n );\n\n const handleTransitionReject = useCallback(\n (element: TransitionRejectInfoLike) => {\n if (typeof window === 'undefined') return;\n\n const nav = (navRef.current || {\n slug: '',\n goto: '',\n navigating: false,\n pop: false,\n }) as NavigationState;\n\n const urlSlug = getUrlSlug();\n\n // NOTE: DO NOT overwrite landedSlugRef here.\n // Rejects can happen during an unrelated in-flight transition (loading churn),\n // and pretending we've \"landed\" breaks sync completion logic.\n\n // Always arm forceTransition when we receive it.\n armForceRetry(element?.forceTransition);\n\n // Best-effort \"where are we\" for nav bookkeeping.\n const currentSlug =\n element?.currentMedia?.slug ||\n nav.slug ||\n landedSlugRef.current ||\n nav.goto ||\n '';\n\n const mismatch = !!(urlSlug && currentSlug && urlSlug !== currentSlug);\n\n // Prefer keeping goto pointing at the URL (authoritative) when available,\n // so controlled selected continues to request the URL target.\n const desiredGoto =\n urlSlug || element?.nextMedia?.slug || nav.goto || currentSlug;\n\n safeNavigate(\n {\n ...nav,\n slug: currentSlug || nav.slug,\n goto: desiredGoto,\n navigating: false,\n pop: !!urlSlug, // treat as URL-driven alignment context\n } as any,\n mismatch ? 'onTransitionReject:mismatch' : 'onTransitionReject'\n );\n\n // If URL says we should be elsewhere, kick sync loop (it will wait if tx is in-flight).\n if (urlSlug && landedSlugRef.current !== urlSlug) {\n syncToUrl(\n mismatch\n ? 'onTransitionReject:url-mismatch'\n : 'onTransitionReject:retry'\n );\n }\n\n if (onTransitionReject) onTransitionReject(element);\n },\n [armForceRetry, onTransitionReject, safeNavigate, syncToUrl]\n );\n\n return (\n <Component\n {...(extra as any)}\n buttons\n fillParent\n bullets={false}\n infinite={false}\n selected={navigation ? navigation.goto : (extra as any).selected}\n onTransitionReject={handleTransitionReject}\n onTransitionStart={handleTransitionStart}\n onTransitionEnd={handleTransitionEnd}\n />\n );\n }\n\n WithNavigationHandlers.displayName = `withNavigationHandlers(${\n (Component as any).displayName || (Component as any).name || 'Component'\n })`;\n\n return withNavigationContext(WithNavigationHandlers as any) as any;\n}\n"],"mappings":"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","names":["React","useCallback","useMemo","React","useMemo","useMemo","React","useMemo","useCallback","React","React","useCallback","useEffect","getCleanPath","useCallback","useEffect","React"]}
|
|
1
|
+
{"version":3,"sources":["../src/hoc/navigation/context.tsx","../src/hoc/navigation/link.tsx","../src/hoc/navigation/withNavigationContext.tsx","../src/hoc/navigation/withNavigationHandlers.tsx"],"sourcesContent":["// navigation/context.tsx\nimport React, {\n createContext,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\n\nexport type NavigationState = {\n slug: string;\n goto: string;\n navigating: boolean;\n pop: boolean;\n defaultSlug?: string;\n};\n\nexport type SetNavigation = (next: Partial<NavigationState> | string) => void;\n\nexport const Context = createContext<[NavigationState, SetNavigation]>([\n { slug: '', goto: '', navigating: false, pop: false, defaultSlug: '' },\n () => {},\n]);\n\nconst getCleanPath = (path: unknown) =>\n String(path || '')\n .replace(/^\\//, '')\n .replace(/\\/$/, '');\n\nexport type ProviderProps = {\n slug: string;\n defaultSlug?: string;\n children?: React.ReactNode;\n};\n\nexport const Provider: React.FC<ProviderProps> = ({\n slug,\n defaultSlug = '',\n children,\n}) => {\n const cleanPage = useMemo(() => {\n const cleanPageRaw = getCleanPath(slug);\n return cleanPageRaw || defaultSlug || '';\n }, [slug, defaultSlug]);\n\n const [state, setState] = useState<NavigationState>(() => ({\n slug: cleanPage,\n goto: cleanPage,\n navigating: false,\n pop: false,\n defaultSlug,\n }));\n\n // Re-anchor when slug prop changes, but don't clobber in-flight nav.\n useEffect(() => {\n setState((prev) => {\n // If we're mid-transition, don't force navigating=false or stomp goto.\n if (prev.navigating === true) {\n return {\n ...prev,\n slug: cleanPage,\n defaultSlug,\n // keep goto as-is while navigating; end-handler will reconcile\n };\n }\n\n return {\n ...prev,\n slug: cleanPage,\n goto: cleanPage,\n navigating: false,\n pop: false,\n defaultSlug,\n };\n });\n }, [cleanPage, defaultSlug]);\n\n const setNavigation = useCallback<SetNavigation>(\n (params) => {\n if (params && typeof params === 'object') {\n setState((prev) => ({ ...prev, ...params }));\n return;\n }\n\n const nextRaw = getCleanPath(params);\n const next = nextRaw || defaultSlug || '';\n\n setState((prev) => ({ ...prev, goto: next }));\n },\n [defaultSlug]\n );\n\n return (\n <Context.Provider value={[state, setNavigation]}>\n {children}\n </Context.Provider>\n );\n};\n","// navigation/link.tsx\nimport React, { useCallback, useMemo } from 'react';\nimport withNavigationContext from './withNavigationContext';\nimport type { NavigationState, SetNavigation } from './context';\n\ntype Fullpage = {\n navigation: NavigationState;\n navigate: SetNavigation;\n};\n\nconst isModifiedClick = (e: React.MouseEvent) =>\n e.metaKey || e.altKey || e.ctrlKey || e.shiftKey || e.button !== 0;\n\nconst isExternalHref = (href: unknown) => {\n const h = String(href || '');\n return (\n /^([a-z][a-z0-9+.-]*:)?\\/\\//i.test(h) ||\n /^mailto:/i.test(h) ||\n /^tel:/i.test(h)\n );\n};\n\nconst cleanHrefToGoto = (href: unknown) =>\n String(href || '')\n .replace(/^\\//, '')\n .replace(/\\/$/, '');\n\nexport type LinkProps = Omit<\n React.AnchorHTMLAttributes<HTMLAnchorElement>,\n 'href' | 'className' | 'onClick'\n> & {\n fullpage?: Fullpage;\n href: string;\n className?: string | null;\n onClick?: React.MouseEventHandler<HTMLAnchorElement>;\n children?: React.ReactNode;\n};\n\nexport default withNavigationContext((props: LinkProps) => {\n const { fullpage, children, href, className = null, onClick, ...extra } =\n props;\n\n const navigation = fullpage?.navigation;\n const navigate = fullpage?.navigate;\n\n const goto = useMemo(() => cleanHrefToGoto(href), [href]);\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLAnchorElement>) => {\n // let user handler run first\n if (typeof onClick === 'function') onClick(event);\n if (event.defaultPrevented) return;\n\n // no nav context / no href / external => let browser handle\n if (!navigation || typeof navigate !== 'function' || !href) return;\n if (isExternalHref(href)) return;\n\n // allow middle click / cmd-click / ctrl-click / shift-click etc.\n if (isModifiedClick(event)) return;\n\n event.preventDefault();\n\n // ignore clicks while a transition is in progress\n if (navigation.navigating === true) return;\n\n // IMPORTANT: allow \"/\" to map to empty goto (Provider/handlers decide fallback)\n const nextGoto = goto;\n\n // noop if already targeting same goto\n if (nextGoto === navigation.goto) return;\n\n navigate({\n ...navigation,\n pop: false, // click-driven\n goto: nextGoto,\n });\n },\n [onClick, navigation, navigate, href, goto]\n );\n\n return (\n <a\n className={className || undefined}\n onClick={handleClick}\n href={href}\n {...extra}\n >\n {children}\n </a>\n );\n});","// navigation/withNavigationContext.tsx\nimport React, { useContext, useMemo } from 'react';\nimport { Context } from './context';\nimport type { NavigationState, SetNavigation } from './context';\n\nexport type Fullpage = {\n navigation: NavigationState;\n navigate: SetNavigation;\n};\n\nexport type WithNavigationInjectedProps = {\n fullpage: Fullpage;\n};\n\nconst FALLBACK_NAV: NavigationState = {\n slug: '',\n goto: '',\n navigating: false,\n pop: false,\n};\n\nexport default function withNavigationContext<P extends object>(\n Component: React.ComponentType<P & WithNavigationInjectedProps>\n) {\n function WithNavigationContext(props: P) {\n const value = useContext(Context);\n\n const navigation: NavigationState =\n (value && (value as any)[0]) || FALLBACK_NAV;\n\n const navigate: SetNavigation =\n (value && (value as any)[1]) || ((() => {}) as SetNavigation);\n\n const fullpage = useMemo<Fullpage>(\n () => ({\n navigation,\n navigate,\n }),\n [navigation, navigate]\n );\n\n return <Component {...props} fullpage={fullpage} />;\n }\n\n WithNavigationContext.displayName = `withNavigationContext(${\n (Component as any).displayName || (Component as any).name || 'Component'\n })`;\n\n return WithNavigationContext;\n}\n","// navigation/withNavigationHandlers.tsx (drop-in replacement)\nimport React, { useCallback, useEffect, useRef } from 'react';\nimport { frameThrower } from '@rcaferati/wac';\nimport withNavigationContext, {\n type WithNavigationInjectedProps,\n} from './withNavigationContext';\nimport type { NavigationState } from './context';\n\n// --- helpers -------------------------------------------------------------\n\nconst getCleanPath = (path: unknown) =>\n String(path || '')\n .replace(/^\\//, '')\n .replace(/\\/$/, '');\n\nconst getUrlSlug = (): string => {\n if (typeof window === 'undefined') return '';\n return getCleanPath(window.location.pathname) || '';\n};\n\nconst getDefaultSlug = (navigation?: NavigationState): string =>\n navigation?.defaultSlug || '';\n\nconst resolveUrlSlug = (\n rawSlug: string,\n navigation?: NavigationState\n): string => {\n return rawSlug === '' ? getDefaultSlug(navigation) : rawSlug;\n};\n\nconst getHistoryPath = (slug: string): string => {\n return slug === '' ? '/' : `/${slug}`;\n};\n\nconst getMediaSlug = (media?: MediaLike): string | undefined => {\n return typeof media?.slug === 'string' ? media.slug : undefined;\n};\n\nconst firstDefined = (...values: Array<string | undefined>): string | undefined => {\n return values.find((value) => value !== undefined);\n};\n\ntype MediaLike = { slug?: string } | null | undefined;\n\ntype TransitionInfoLike = {\n currentMedia?: MediaLike;\n nextMedia?: MediaLike;\n} & Record<string, any>;\n\ntype TransitionRejectInfoLike = TransitionInfoLike & {\n forceTransition?: () => void;\n};\n\ntype HandlerProps = {\n onTransitionReject?: (info: any) => void;\n onTransitionStart?: (info: any) => void;\n onTransitionEnd?: (info: any) => void;\n};\n\n// -------------------------------------------------------------------------\n\nexport default function withNavigationHandlers<P extends object>(\n Component: React.ComponentType<P>\n) {\n type Props = P & HandlerProps & Partial<WithNavigationInjectedProps>;\n\n function WithNavigationHandlers(props: Props) {\n const {\n fullpage,\n onTransitionReject,\n onTransitionStart,\n onTransitionEnd,\n ...extra\n } = props as any;\n\n const navigation = fullpage?.navigation as NavigationState | undefined;\n const navigate = fullpage?.navigate as ((next: any) => void) | undefined;\n\n const navRef = useRef<NavigationState | undefined>(navigation);\n const navigateRef = useRef<typeof navigate>(navigate);\n\n // keep refs hot synchronously (avoid stale reads in callbacks)\n navRef.current = navigation;\n navigateRef.current = navigate;\n\n // What we *actually* landed on visually (authoritative). Only set on tx:end.\n const landedSlugRef = useRef<string>('');\n\n // Retry hook (available after a reject payload happens)\n const forceRef = useRef<(() => void) | null>(null);\n\n // Real transition lifecycle (engine reality)\n const txInFlightRef = useRef(false);\n\n // One-shot latch: \"next transitionStart is URL-driven (pop/sync), do NOT pushState\"\n // IMPORTANT: this is NOT stored in NavigationState to avoid sticky mode bugs.\n const urlDrivenStartLatchRef = useRef(false);\n\n // sync loop control (latest-wins)\n const syncRunningRef = useRef(false);\n const syncSeqRef = useRef(0);\n\n // ---- navigation -------------------------------------------------------\n\n const safeNavigate = useCallback(\n (next: NavigationState, reason: string) => {\n void reason; // keep callsites readable; avoid unused-param lint\n const fn = navigateRef.current;\n if (typeof fn !== 'function') return;\n fn(next);\n },\n []\n );\n\n const armForceRetry = useCallback((forceTransition?: unknown) => {\n if (typeof forceTransition === 'function') {\n forceRef.current = forceTransition as () => void;\n }\n }, []);\n\n // =========================================================================\n // URL Sync + Retry (latest-wins)\n // =========================================================================\n const syncToUrl = useCallback(\n async (reason: string) => {\n void reason; // retained for callsite intent; no logging\n if (typeof window === 'undefined') return;\n\n // latest-wins: cancel older runner\n if (syncRunningRef.current) {\n syncSeqRef.current += 1;\n }\n\n syncRunningRef.current = true;\n const mySeq = ++syncSeqRef.current;\n\n const MAX_TICKS = 240;\n\n try {\n for (let tick = 1; tick <= MAX_TICKS; tick++) {\n await frameThrower(1);\n\n if (mySeq !== syncSeqRef.current) {\n return;\n }\n\n const nav = (navRef.current || {\n slug: '',\n goto: '',\n navigating: false,\n pop: false,\n }) as NavigationState;\n\n const urlNow = resolveUrlSlug(getUrlSlug(), nav);\n\n // 1) Ensure the controlled \"selected\" (goto) matches the URL.\n // Mark the next transitionStart as URL-driven so it must NOT pushState.\n if (nav.goto !== urlNow) {\n urlDrivenStartLatchRef.current = true;\n\n safeNavigate(\n {\n ...nav,\n pop: true,\n goto: urlNow,\n navigating: !!nav.navigating, // preserve (not trusted, but keep behavior)\n } as any,\n `syncToUrl:align-goto(tick:${tick})`\n );\n continue;\n }\n\n // 2) Never declare \"done\" while a real engine transition is in-flight.\n if (txInFlightRef.current === true) {\n continue;\n }\n\n // 3) Done when the *actual landed slide* matches the URL.\n if (landedSlugRef.current === urlNow) {\n return;\n }\n\n // 4) Not landed yet, not in-flight, goto matches URL -> re-trigger (if possible).\n const force = forceRef.current;\n if (typeof force === 'function') {\n // Avoid spamming: retry at a modest cadence.\n if (tick % 6 === 0) {\n try {\n force();\n } catch {\n // ignore\n }\n }\n }\n }\n } finally {\n if (syncSeqRef.current === mySeq) {\n syncRunningRef.current = false;\n }\n }\n },\n [safeNavigate]\n );\n\n // ---- popstate ----------------------------------------------------------\n\n const popSeqRef = useRef(0);\n\n const handlePopState = useCallback(() => {\n if (typeof window === 'undefined') return;\n const popSeq = ++popSeqRef.current;\n syncToUrl(`popstate#${popSeq}`);\n }, [syncToUrl]);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n window.addEventListener('popstate', handlePopState);\n return () => window.removeEventListener('popstate', handlePopState);\n }, [handlePopState]);\n\n // ---- transition handlers ----------------------------------------------\n\n const handleTransitionStart = useCallback(\n (element: TransitionInfoLike) => {\n if (typeof window === 'undefined') return;\n\n const nav = (navRef.current || {\n slug: '',\n goto: '',\n navigating: false,\n pop: false,\n }) as NavigationState;\n\n const cleanPath = getUrlSlug();\n const nextSlug = getMediaSlug(element?.nextMedia);\n\n // Real engine lifecycle\n txInFlightRef.current = true;\n\n // Consume the one-shot latch (URL-driven start => do NOT pushState).\n const urlDrivenStart = urlDrivenStartLatchRef.current === true;\n urlDrivenStartLatchRef.current = false;\n\n // pushState only for click-driven transitions (not URL-driven pop/sync).\n if (\n nextSlug !== undefined &&\n cleanPath !== nextSlug &&\n !urlDrivenStart\n ) {\n window.history.pushState({}, '', getHistoryPath(nextSlug));\n }\n\n safeNavigate(\n {\n ...nav,\n goto: nextSlug !== undefined ? nextSlug : nav.goto,\n slug: nav.slug,\n navigating: true,\n pop: urlDrivenStart ? true : false,\n } as any,\n 'onTransitionStart'\n );\n\n if (onTransitionStart) onTransitionStart(element);\n },\n [onTransitionStart, safeNavigate]\n );\n\n const handleTransitionEnd = useCallback(\n (element: TransitionInfoLike) => {\n if (typeof window === 'undefined') return;\n\n const nav = (navRef.current || {\n slug: '',\n goto: '',\n navigating: false,\n pop: false,\n }) as NavigationState;\n\n const currentSlug =\n firstDefined(getMediaSlug(element?.currentMedia), nav.goto, nav.slug) || '';\n const urlSlug = resolveUrlSlug(getUrlSlug(), nav);\n\n // Real engine lifecycle ends here (authoritative)\n txInFlightRef.current = false;\n\n landedSlugRef.current = currentSlug;\n\n const mismatch = urlSlug !== currentSlug;\n\n // If mismatch, immediately set goto to URL so controlled selected follows it.\n safeNavigate(\n {\n ...nav,\n navigating: false,\n pop: mismatch ? true : false,\n slug: currentSlug,\n goto: mismatch ? urlSlug : currentSlug,\n } as any,\n mismatch\n ? 'onTransitionEnd:mismatch(set-goto=url)'\n : 'onTransitionEnd'\n );\n\n if (onTransitionEnd) onTransitionEnd(element);\n\n if (mismatch) {\n syncToUrl('onTransitionEnd:url-mismatch');\n } else {\n // Safe point to clear the retry hook only when reality matches the URL.\n forceRef.current = null;\n }\n },\n [onTransitionEnd, safeNavigate, syncToUrl]\n );\n\n const handleTransitionReject = useCallback(\n (element: TransitionRejectInfoLike) => {\n if (typeof window === 'undefined') return;\n\n const nav = (navRef.current || {\n slug: '',\n goto: '',\n navigating: false,\n pop: false,\n }) as NavigationState;\n\n const urlSlug = resolveUrlSlug(getUrlSlug(), nav);\n\n // NOTE: DO NOT overwrite landedSlugRef here.\n // Rejects can happen during an unrelated in-flight transition (loading churn),\n // and pretending we've \"landed\" breaks sync completion logic.\n\n // Always arm forceTransition when we receive it.\n armForceRetry(element?.forceTransition);\n\n // Best-effort \"where are we\" for nav bookkeeping.\n const currentSlug =\n firstDefined(\n getMediaSlug(element?.currentMedia),\n nav.slug,\n landedSlugRef.current,\n nav.goto\n ) || '';\n\n const mismatch = urlSlug !== currentSlug;\n\n // Prefer keeping goto pointing at the URL (authoritative) when available,\n // so controlled selected continues to request the URL target.\n const desiredGoto =\n firstDefined(urlSlug, getMediaSlug(element?.nextMedia), nav.goto, currentSlug) ||\n '';\n\n safeNavigate(\n {\n ...nav,\n slug: currentSlug,\n goto: desiredGoto,\n navigating: false,\n pop: true, // treat as URL-driven alignment context\n } as any,\n mismatch ? 'onTransitionReject:mismatch' : 'onTransitionReject'\n );\n\n // If URL says we should be elsewhere, kick sync loop (it will wait if tx is in-flight).\n if (landedSlugRef.current !== urlSlug) {\n syncToUrl(\n mismatch\n ? 'onTransitionReject:url-mismatch'\n : 'onTransitionReject:retry'\n );\n }\n\n if (onTransitionReject) onTransitionReject(element);\n },\n [armForceRetry, onTransitionReject, safeNavigate, syncToUrl]\n );\n\n return (\n <Component\n {...(extra as any)}\n buttons\n fillParent\n bullets={false}\n infinite={false}\n selected={navigation ? navigation.goto : (extra as any).selected}\n onTransitionReject={handleTransitionReject}\n onTransitionStart={handleTransitionStart}\n onTransitionEnd={handleTransitionEnd}\n />\n );\n }\n\n WithNavigationHandlers.displayName = `withNavigationHandlers(${\n (Component as any).displayName || (Component as any).name || 'Component'\n })`;\n\n return withNavigationContext(WithNavigationHandlers as any) as any;\n}\n"],"mappings":"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","names":["React","useCallback","useMemo","React","useMemo","useMemo","React","useMemo","useCallback","React","React","useCallback","useEffect","getCleanPath","useCallback","useEffect","React"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rcaferati/react-awesome-slider",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.2",
|
|
4
4
|
"description": "React Awesome Slider is a 60fps performant, extendable, highly customisable, production ready React Component that renders a media (image/video) gallery slider carousel.",
|
|
5
5
|
"author": "Rafael Caferati",
|
|
6
6
|
"license": "MIT",
|
|
@@ -59,7 +59,13 @@
|
|
|
59
59
|
"./styles.css": "./dist/styles.css",
|
|
60
60
|
"./captioned.css": "./dist/captioned.css",
|
|
61
61
|
"./lettering.css": "./dist/lettering.css",
|
|
62
|
-
"./custom-animations/*":
|
|
62
|
+
"./custom-animations/*": {
|
|
63
|
+
"types": "./dist/custom-animations/*.d.ts",
|
|
64
|
+
"import": "./dist/custom-animations/*.mjs",
|
|
65
|
+
"require": "./dist/custom-animations/*.js",
|
|
66
|
+
"default": "./dist/custom-animations/*.mjs"
|
|
67
|
+
},
|
|
68
|
+
"./custom-animations/*.css": "./dist/custom-animations/*.css",
|
|
63
69
|
"./dist/*": "./dist/*",
|
|
64
70
|
"./package.json": "./package.json"
|
|
65
71
|
},
|
|
@@ -79,6 +85,9 @@
|
|
|
79
85
|
],
|
|
80
86
|
"navigation": [
|
|
81
87
|
"dist/navigation.d.ts"
|
|
88
|
+
],
|
|
89
|
+
"custom-animations/*": [
|
|
90
|
+
"dist/custom-animations/*.d.ts"
|
|
82
91
|
]
|
|
83
92
|
}
|
|
84
93
|
},
|
|
@@ -97,8 +106,9 @@
|
|
|
97
106
|
"build:css": "sass --no-source-map --silence-deprecation=import src/core/styles.scss dist/styles.css && sass --no-source-map --silence-deprecation=import src/hoc/animated-lettering/styles.scss dist/lettering.css && sass --no-source-map --silence-deprecation=import src/hoc/captioned-images/styles.scss dist/captioned.css",
|
|
98
107
|
"build:animations": "node scripts/build-animations.mjs",
|
|
99
108
|
"prepare": "npm run build",
|
|
109
|
+
"start": "npm run storybook",
|
|
100
110
|
"storybook": "storybook dev -p 6006",
|
|
101
|
-
"build-storybook": "storybook build",
|
|
111
|
+
"build-storybook": "storybook build -o storybook-static",
|
|
102
112
|
"test": "vitest",
|
|
103
113
|
"test:run": "vitest run",
|
|
104
114
|
"test:watch": "vitest --watch",
|
|
@@ -167,6 +177,6 @@
|
|
|
167
177
|
]
|
|
168
178
|
},
|
|
169
179
|
"volta": {
|
|
170
|
-
"node": "24.14.
|
|
180
|
+
"node": "24.14.1"
|
|
171
181
|
}
|
|
172
182
|
}
|