@matthesketh/react-guidetour 1.0.0
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/LICENSE +15 -0
- package/README.md +41 -0
- package/dist/index.d.mts +496 -0
- package/dist/index.d.ts +496 -0
- package/dist/index.js +2168 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +2127 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +76 -0
- package/src/components/Beacon.tsx +135 -0
- package/src/components/Overlay.tsx +238 -0
- package/src/components/Portal.tsx +37 -0
- package/src/components/Spotlight.tsx +18 -0
- package/src/components/Step.tsx +255 -0
- package/src/components/Tooltip/CloseButton.tsx +31 -0
- package/src/components/Tooltip/Container.tsx +75 -0
- package/src/components/Tooltip/index.tsx +140 -0
- package/src/components/index.tsx +410 -0
- package/src/defaults.ts +62 -0
- package/src/global.d.ts +8 -0
- package/src/index.tsx +5 -0
- package/src/literals/index.ts +51 -0
- package/src/modules/dom.ts +277 -0
- package/src/modules/helpers.tsx +268 -0
- package/src/modules/scope.ts +136 -0
- package/src/modules/step.ts +120 -0
- package/src/modules/store.ts +325 -0
- package/src/styles.ts +191 -0
- package/src/types/common.ts +110 -0
- package/src/types/components.ts +382 -0
- package/src/types/index.ts +2 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/literals/index.ts","../src/components/index.tsx","../src/modules/dom.ts","../src/modules/helpers.tsx","../src/modules/step.ts","../src/defaults.ts","../src/styles.ts","../src/modules/store.ts","../src/components/Overlay.tsx","../src/components/Spotlight.tsx","../src/components/Portal.tsx","../src/components/Step.tsx","../src/modules/scope.ts","../src/components/Beacon.tsx","../src/components/Tooltip/CloseButton.tsx","../src/components/Tooltip/Container.tsx","../src/components/Tooltip/index.tsx"],"sourcesContent":["export const ACTIONS = {\n INIT: 'init',\n START: 'start',\n STOP: 'stop',\n RESET: 'reset',\n PREV: 'prev',\n NEXT: 'next',\n GO: 'go',\n CLOSE: 'close',\n SKIP: 'skip',\n UPDATE: 'update',\n} as const;\n\nexport const EVENTS = {\n TOUR_START: 'tour:start',\n STEP_BEFORE: 'step:before',\n BEACON: 'beacon',\n TOOLTIP: 'tooltip',\n STEP_AFTER: 'step:after',\n TOUR_END: 'tour:end',\n TOUR_STATUS: 'tour:status',\n TARGET_NOT_FOUND: 'error:target_not_found',\n ERROR: 'error',\n} as const;\n\nexport const LIFECYCLE = {\n INIT: 'init',\n READY: 'ready',\n BEACON: 'beacon',\n TOOLTIP: 'tooltip',\n COMPLETE: 'complete',\n ERROR: 'error',\n} as const;\n\nexport const ORIGIN = {\n BUTTON_CLOSE: 'button_close',\n BUTTON_PRIMARY: 'button_primary',\n KEYBOARD: 'keyboard',\n OVERLAY: 'overlay',\n} as const;\n\nexport const STATUS = {\n IDLE: 'idle',\n READY: 'ready',\n WAITING: 'waiting',\n RUNNING: 'running',\n PAUSED: 'paused',\n SKIPPED: 'skipped',\n FINISHED: 'finished',\n ERROR: 'error',\n} as const;\n","import { ReactNode, useCallback, useEffect, useRef, useState } from 'react';\nimport isEqual from '@gilbarbara/deep-equal';\nimport is from 'is-lite';\nimport treeChanges from 'tree-changes';\n\nimport {\n canUseDOM,\n getElement,\n getScrollParent,\n getScrollTo,\n hasCustomScrollParent,\n scrollTo,\n} from '~/modules/dom';\nimport { log, shouldScroll } from '~/modules/helpers';\nimport { getMergedStep, validateSteps } from '~/modules/step';\nimport createStore from '~/modules/store';\n\nimport { ACTIONS, EVENTS, LIFECYCLE, STATUS } from '~/literals';\n\nimport Overlay from '~/components/Overlay';\nimport Portal from '~/components/Portal';\n\nimport { Actions, CallBackProps, Props, State, Status, StoreHelpers } from '~/types';\n\nimport Step from './Step';\n\nconst defaultPropsValues = {\n continuous: false,\n debug: false,\n disableCloseOnEsc: false,\n disableOverlay: false,\n disableOverlayClose: false,\n disableScrolling: false,\n disableScrollParentFix: false,\n hideBackButton: false,\n run: true,\n scrollOffset: 20,\n scrollDuration: 300,\n scrollToFirstStep: false,\n showSkipButton: false,\n showProgress: false,\n spotlightClicks: false,\n spotlightPadding: 10,\n steps: [],\n};\n\nfunction Joyride(inputProps: Props) {\n const props = { ...defaultPropsValues, ...inputProps };\n const {\n callback: callbackProp,\n continuous,\n debug,\n disableCloseOnEsc,\n getHelpers,\n nonce,\n run,\n scrollDuration,\n scrollOffset,\n scrollToFirstStep,\n stepIndex,\n steps,\n } = props;\n\n const storeRef = useRef(\n createStore({\n ...props,\n controlled: run && is.number(stepIndex),\n }),\n );\n const helpersRef = useRef<StoreHelpers>(storeRef.current.getHelpers());\n const [state, setState] = useState<State>(storeRef.current.getState());\n const previousStateRef = useRef<State>(state);\n const previousPropsRef = useRef(props);\n const mountedRef = useRef(false);\n\n const store = storeRef.current;\n const helpers = helpersRef.current;\n\n const triggerCallback = useCallback(\n (data: CallBackProps) => {\n if (is.function(callbackProp)) {\n callbackProp(data);\n }\n },\n [callbackProp],\n );\n\n const handleKeyboard = useCallback(\n (event: KeyboardEvent) => {\n const { index: currentIndex, lifecycle } = storeRef.current.getState();\n const currentSteps = props.steps;\n const currentStep = currentSteps[currentIndex];\n\n if (lifecycle === LIFECYCLE.TOOLTIP) {\n if (event.code === 'Escape' && currentStep && !currentStep.disableCloseOnEsc) {\n storeRef.current.close('keyboard');\n }\n }\n },\n [props.steps],\n );\n\n const handleClickOverlay = useCallback(() => {\n const currentState = storeRef.current.getState();\n const step = getMergedStep(props, steps[currentState.index]);\n\n if (!step.disableOverlayClose) {\n helpers.close('overlay');\n }\n }, [props, steps, helpers]);\n\n // Set up store listener and keyboard handler\n useEffect(() => {\n store.addListener(setState);\n\n log({\n title: 'init',\n data: [\n { key: 'props', value: props },\n { key: 'state', value: state },\n ],\n debug,\n });\n\n if (getHelpers) {\n getHelpers(helpers);\n }\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Mount effect - start tour and add keyboard listener\n useEffect(() => {\n if (!canUseDOM()) {\n return;\n }\n\n if (validateSteps(steps, debug) && run) {\n store.start();\n }\n\n if (!disableCloseOnEsc) {\n document.body.addEventListener('keydown', handleKeyboard, { passive: true });\n }\n\n mountedRef.current = true;\n\n return () => {\n if (!disableCloseOnEsc) {\n document.body.removeEventListener('keydown', handleKeyboard);\n }\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n // componentDidUpdate for props changes\n useEffect(() => {\n if (!mountedRef.current || !canUseDOM()) {\n return;\n }\n\n const previousProps = previousPropsRef.current;\n const { changedProps } = treeChanges(previousProps, props) as any;\n const changedPropsFn = (key: string) => {\n const prev = (previousProps as any)[key];\n const curr = (props as any)[key];\n return prev !== curr;\n };\n\n const stepsChanged = !isEqual(previousProps.steps, steps);\n\n if (stepsChanged) {\n if (validateSteps(steps, debug)) {\n store.setSteps(steps);\n } else {\n // eslint-disable-next-line no-console\n console.warn('Steps are not valid', steps);\n }\n }\n\n if (changedPropsFn('run')) {\n if (run) {\n store.start(stepIndex);\n } else {\n store.stop();\n }\n }\n\n const stepIndexChanged = is.number(stepIndex) && changedPropsFn('stepIndex');\n\n if (stepIndexChanged) {\n const currentState = store.getState();\n let nextAction: Actions =\n is.number(previousProps.stepIndex) && previousProps.stepIndex < stepIndex!\n ? ACTIONS.NEXT\n : ACTIONS.PREV;\n\n if (currentState.action === ACTIONS.STOP) {\n nextAction = ACTIONS.START;\n }\n\n if (!([STATUS.FINISHED, STATUS.SKIPPED] as Array<Status>).includes(currentState.status)) {\n store.update({\n action: currentState.action === ACTIONS.CLOSE ? ACTIONS.CLOSE : nextAction,\n index: stepIndex,\n lifecycle: LIFECYCLE.INIT,\n });\n }\n }\n\n previousPropsRef.current = props;\n });\n\n // componentDidUpdate for state changes\n useEffect(() => {\n if (!mountedRef.current || !canUseDOM()) {\n return;\n }\n\n const previousState = previousStateRef.current;\n const { action, controlled, index, lifecycle, status } = state;\n const { changed, changedFrom } = treeChanges(previousState, state);\n const step = getMergedStep(props, steps[index]);\n const target = getElement(step.target);\n\n // Update the index if the first step is not found\n if (!controlled && status === STATUS.RUNNING && index === 0 && !target) {\n store.update({ index: index + 1 });\n triggerCallback({\n ...state,\n type: EVENTS.TARGET_NOT_FOUND,\n step,\n });\n }\n\n const callbackData = {\n ...state,\n index,\n step,\n };\n const isAfterAction = changed('action', [\n ACTIONS.NEXT,\n ACTIONS.PREV,\n ACTIONS.SKIP,\n ACTIONS.CLOSE,\n ]);\n\n if (isAfterAction && changed('status', STATUS.PAUSED)) {\n const previousStep = getMergedStep(props, steps[previousState.index]);\n\n triggerCallback({\n ...callbackData,\n index: previousState.index,\n lifecycle: LIFECYCLE.COMPLETE,\n step: previousStep,\n type: EVENTS.STEP_AFTER,\n });\n }\n\n if (changed('status', [STATUS.FINISHED, STATUS.SKIPPED])) {\n const previousStep = getMergedStep(props, steps[previousState.index]);\n\n if (!controlled) {\n triggerCallback({\n ...callbackData,\n index: previousState.index,\n lifecycle: LIFECYCLE.COMPLETE,\n step: previousStep,\n type: EVENTS.STEP_AFTER,\n });\n }\n\n triggerCallback({\n ...callbackData,\n type: EVENTS.TOUR_END,\n // Return the last step when the tour is finished\n step: previousStep,\n index: previousState.index,\n });\n store.reset();\n } else if (changedFrom('status', [STATUS.IDLE, STATUS.READY], STATUS.RUNNING)) {\n triggerCallback({\n ...callbackData,\n type: EVENTS.TOUR_START,\n });\n } else if (changed('status') || changed('action', ACTIONS.RESET)) {\n triggerCallback({\n ...callbackData,\n type: EVENTS.TOUR_STATUS,\n });\n }\n\n // Scroll to step\n scrollToStep(previousState);\n\n previousStateRef.current = state;\n });\n\n function scrollToStep(previousState: State) {\n const { index, lifecycle, status } = state;\n const {\n disableScrollParentFix = false,\n } = props;\n const step = getMergedStep(props, steps[index]);\n\n const target = getElement(step.target);\n const shouldScrollToStep = shouldScroll({\n isFirstStep: index === 0,\n lifecycle,\n previousLifecycle: previousState.lifecycle,\n scrollToFirstStep,\n step,\n target,\n });\n\n if (status === STATUS.RUNNING && shouldScrollToStep) {\n const hasCustomScroll = hasCustomScrollParent(target, disableScrollParentFix);\n const scrollParent = getScrollParent(target, disableScrollParentFix);\n let scrollY = Math.floor(getScrollTo(target, scrollOffset, disableScrollParentFix)) || 0;\n\n log({\n title: 'scrollToStep',\n data: [\n { key: 'index', value: index },\n { key: 'lifecycle', value: lifecycle },\n { key: 'status', value: status },\n ],\n debug,\n });\n\n const beaconPopper = store.getPopper('beacon');\n const tooltipPopper = store.getPopper('tooltip');\n\n if (lifecycle === LIFECYCLE.BEACON && beaconPopper) {\n const placement = beaconPopper.state?.placement ?? '';\n const popperTop = beaconPopper.state?.rects?.popper?.y ?? 0;\n\n if (!['bottom'].includes(placement) && !hasCustomScroll) {\n scrollY = Math.floor(popperTop - scrollOffset);\n }\n } else if (lifecycle === LIFECYCLE.TOOLTIP && tooltipPopper) {\n const placement = tooltipPopper.state?.placement ?? '';\n const popperTop = tooltipPopper.state?.rects?.popper?.y ?? 0;\n const flipped = tooltipPopper.state?.modifiersData?.flip?.overflows != null;\n\n if (['top', 'right', 'left'].includes(placement) && !flipped && !hasCustomScroll) {\n scrollY = Math.floor(popperTop - scrollOffset);\n } else {\n scrollY -= step.spotlightPadding;\n }\n }\n\n scrollY = scrollY >= 0 ? scrollY : 0;\n\n if (status === STATUS.RUNNING) {\n scrollTo(scrollY, { element: scrollParent as Element, duration: scrollDuration }).then(\n () => {\n setTimeout(() => {\n store.getPopper('tooltip')?.update();\n }, 10);\n },\n );\n }\n }\n }\n\n if (!canUseDOM()) {\n return null;\n }\n\n const { index, lifecycle, status } = state;\n const isRunning = status === STATUS.RUNNING;\n const content: Record<string, ReactNode> = {};\n\n if (isRunning && steps[index]) {\n const step = getMergedStep(props, steps[index]);\n\n content.step = (\n <Step\n {...state}\n callback={triggerCallback}\n continuous={continuous}\n debug={debug}\n helpers={helpers}\n nonce={nonce}\n shouldScroll={!step.disableScrolling && (index !== 0 || scrollToFirstStep)}\n step={step}\n store={store}\n />\n );\n\n content.overlay = (\n <Portal id=\"react-joyride-portal\">\n <Overlay\n {...step}\n continuous={continuous}\n debug={debug}\n lifecycle={lifecycle}\n onClickOverlay={handleClickOverlay}\n />\n </Portal>\n );\n }\n\n return (\n <div className=\"react-joyride\">\n {content.step}\n {content.overlay}\n </div>\n );\n}\n\nexport default Joyride;\n","import scroll from 'scroll';\nimport scrollParent from 'scrollparent';\n\nexport function canUseDOM() {\n return !!(typeof window !== 'undefined' && window.document?.createElement);\n}\n\n/**\n * Find the bounding client rect\n */\nexport function getClientRect(element: HTMLElement | null) {\n if (!element) {\n return null;\n }\n\n return element.getBoundingClientRect();\n}\n\n/**\n * Helper function to get the browser-normalized \"document height\"\n */\nexport function getDocumentHeight(median = false): number {\n const { body, documentElement } = document;\n\n if (!body || !documentElement) {\n return 0;\n }\n\n if (median) {\n const heights = [\n body.scrollHeight,\n body.offsetHeight,\n documentElement.clientHeight,\n documentElement.scrollHeight,\n documentElement.offsetHeight,\n ].sort((a, b) => a - b);\n const middle = Math.floor(heights.length / 2);\n\n if (heights.length % 2 === 0) {\n return (heights[middle - 1] + heights[middle]) / 2;\n }\n\n return heights[middle];\n }\n\n return Math.max(\n body.scrollHeight,\n body.offsetHeight,\n documentElement.clientHeight,\n documentElement.scrollHeight,\n documentElement.offsetHeight,\n );\n}\n\n/**\n * Find and return the target DOM element based on a step's 'target'.\n */\nexport function getElement(element: string | HTMLElement): HTMLElement | null {\n if (typeof element === 'string') {\n try {\n return document.querySelector(element);\n } catch (error: any) {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n\n return null;\n }\n }\n\n return element;\n}\n\n/**\n * Get computed style property\n */\nexport function getStyleComputedProperty(el: HTMLElement): CSSStyleDeclaration | null {\n if (!el || el.nodeType !== 1) {\n return null;\n }\n\n return getComputedStyle(el);\n}\n\n/**\n * Get scroll parent with fix\n */\nexport function getScrollParent(\n element: HTMLElement | null,\n skipFix: boolean,\n forListener?: boolean,\n) {\n if (!element) {\n return scrollDocument();\n }\n\n const parent = scrollParent(element) as HTMLElement;\n\n if (parent) {\n if (parent.isSameNode(scrollDocument())) {\n if (forListener) {\n return document;\n }\n\n return scrollDocument();\n }\n\n const hasScrolling = parent.scrollHeight > parent.offsetHeight;\n\n if (!hasScrolling && !skipFix) {\n parent.style.overflow = 'initial';\n\n return scrollDocument();\n }\n }\n\n return parent;\n}\n\n/**\n * Check if the element has custom scroll parent\n */\nexport function hasCustomScrollParent(element: HTMLElement | null, skipFix: boolean): boolean {\n if (!element) {\n return false;\n }\n\n const parent = getScrollParent(element, skipFix);\n\n return parent ? !parent.isSameNode(scrollDocument()) : false;\n}\n\n/**\n * Check if the element has custom offset parent\n */\nexport function hasCustomOffsetParent(element: HTMLElement): boolean {\n return element.offsetParent !== document.body;\n}\n\n/**\n * Check if an element has fixed/sticky position\n */\nexport function hasPosition(el: HTMLElement | Node | null, type: string = 'fixed'): boolean {\n if (!el || !(el instanceof HTMLElement)) {\n return false;\n }\n\n const { nodeName } = el;\n const styles = getStyleComputedProperty(el);\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n\n if (styles && styles.position === type) {\n return true;\n }\n\n if (!el.parentNode) {\n return false;\n }\n\n return hasPosition(el.parentNode, type);\n}\n\n/**\n * Check if the element is visible\n */\nexport function isElementVisible(element: HTMLElement): element is HTMLElement {\n if (!element) {\n return false;\n }\n\n let parentElement: HTMLElement | null = element;\n\n while (parentElement) {\n if (parentElement === document.body) {\n break;\n }\n\n if (parentElement instanceof HTMLElement) {\n const { display, visibility } = getComputedStyle(parentElement);\n\n if (display === 'none' || visibility === 'hidden') {\n return false;\n }\n }\n\n parentElement = parentElement.parentElement ?? null;\n }\n\n return true;\n}\n\n/**\n * Find and return the target DOM element based on a step's 'target'.\n */\nexport function getElementPosition(\n element: HTMLElement | null,\n offset: number,\n skipFix: boolean,\n): number {\n const elementRect = getClientRect(element);\n const parent = getScrollParent(element, skipFix);\n const hasScrollParent = hasCustomScrollParent(element, skipFix);\n const isFixedTarget = hasPosition(element);\n let parentTop = 0;\n let top = elementRect?.top ?? 0;\n\n if (hasScrollParent && isFixedTarget) {\n const offsetTop = element?.offsetTop ?? 0;\n const parentScrollTop = (parent as HTMLElement)?.scrollTop ?? 0;\n\n top = offsetTop - parentScrollTop;\n } else if (parent instanceof HTMLElement) {\n parentTop = parent.scrollTop;\n\n if (!hasScrollParent && !hasPosition(element)) {\n top += parentTop;\n }\n\n if (!parent.isSameNode(scrollDocument())) {\n top += scrollDocument().scrollTop;\n }\n }\n\n return Math.floor(top - offset);\n}\n\n/**\n * Get the scrollTop position\n */\nexport function getScrollTo(element: HTMLElement | null, offset: number, skipFix: boolean): number {\n if (!element) {\n return 0;\n }\n\n const { offsetTop = 0, scrollTop = 0 } = scrollParent(element) ?? {};\n let top = element.getBoundingClientRect().top + scrollTop;\n\n if (!!offsetTop && (hasCustomScrollParent(element, skipFix) || hasCustomOffsetParent(element))) {\n top -= offsetTop;\n }\n\n const output = Math.floor(top - offset);\n\n return output < 0 ? 0 : output;\n}\n\nexport function scrollDocument(): Element | HTMLElement {\n return document.scrollingElement ?? document.documentElement;\n}\n\n/**\n * Scroll to position\n */\nexport function scrollTo(\n value: number,\n options: { duration?: number; element: Element | HTMLElement },\n): Promise<void> {\n const { duration, element } = options;\n\n return new Promise((resolve, reject) => {\n const { scrollTop } = element;\n\n const limit = value > scrollTop ? value - scrollTop : scrollTop - value;\n\n scroll.top(element as HTMLElement, value, { duration: limit < 100 ? 50 : duration }, error => {\n if (error && error.message !== 'Element already at target scroll position') {\n return reject(error);\n }\n\n return resolve();\n });\n });\n}\n","import { cloneElement, FC, isValidElement, ReactElement, ReactNode } from 'react';\nimport innerText from 'react-innertext';\nimport is from 'is-lite';\n\nimport { LIFECYCLE } from '~/literals';\n\nimport { AnyObject, Lifecycle, NarrowPlainObject, Step } from '~/types';\n\nimport { hasPosition } from './dom';\n\ninterface GetReactNodeTextOptions {\n defaultValue?: any;\n step?: number;\n steps?: number;\n}\n\ninterface LogOptions {\n /** The data to be logged */\n data: any;\n /** display the log */\n debug?: boolean;\n /** The title the logger was called from */\n title: string;\n /** If true, the message will be a warning */\n warn?: boolean;\n}\n\ninterface ShouldScrollOptions {\n isFirstStep: boolean;\n lifecycle: Lifecycle;\n previousLifecycle: Lifecycle;\n scrollToFirstStep: boolean;\n step: Step;\n target: HTMLElement | null;\n}\n\n/**\n * Detect Safari browser (used for mix-blend-mode workaround)\n */\nexport function isSafari(): boolean {\n if (typeof window === 'undefined' || typeof navigator === 'undefined') {\n return false;\n }\n\n return /(Version\\/([\\d._]+).*Safari|CriOS|FxiOS| Mobile\\/)/.test(navigator.userAgent);\n}\n\n/**\n * Get Object type\n */\nexport function getObjectType(value: unknown): string {\n return Object.prototype.toString.call(value).slice(8, -1).toLowerCase();\n}\n\nexport function getReactNodeText(input: ReactNode, options: GetReactNodeTextOptions = {}): string {\n const { defaultValue, step, steps } = options;\n let text = innerText(input);\n\n if (!text) {\n if (\n isValidElement(input) &&\n !Object.values((input as any).props).length &&\n getObjectType(input.type) === 'function'\n ) {\n const component = (input.type as FC)({});\n\n text = getReactNodeText(component as ReactNode, options);\n } else {\n text = innerText(defaultValue);\n }\n } else if ((text.includes('{step}') || text.includes('{steps}')) && step && steps) {\n text = text.replace('{step}', step.toString()).replace('{steps}', steps.toString());\n }\n\n return text;\n}\n\nexport function hasValidKeys(object: Record<string, unknown>, keys?: Array<string>): boolean {\n if (!is.plainObject(object) || !is.array(keys)) {\n return false;\n }\n\n return Object.keys(object).every(d => keys.includes(d));\n}\n\n/**\n * Convert hex to RGB\n */\nexport function hexToRGB(hex: string): Array<number> {\n const shorthandRegex = /^#?([\\da-f])([\\da-f])([\\da-f])$/i;\n const properHex = hex.replace(shorthandRegex, (_m, r, g, b) => r + r + g + g + b + b);\n\n const result = /^#?([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})$/i.exec(properHex);\n\n return result ? [parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)] : [];\n}\n\n/**\n * Decide if the step shouldn't skip the beacon\n */\nexport function hideBeacon(step: Step): boolean {\n return step.disableBeacon || step.placement === 'center';\n}\n\n/**\n * Log method calls if debug is enabled\n */\nexport function log({ data, debug = false, title, warn = false }: LogOptions) {\n /* eslint-disable no-console */\n const logFn = warn ? console.warn || console.error : console.log;\n\n if (debug) {\n if (title && data) {\n console.groupCollapsed(\n `%creact-guidetour: ${title}`,\n 'color: #ff0044; font-weight: bold; font-size: 12px;',\n );\n\n if (Array.isArray(data)) {\n data.forEach(d => {\n if (is.plainObject(d) && d.key) {\n logFn.apply(console, [d.key, d.value]);\n } else {\n logFn.apply(console, [d]);\n }\n });\n } else {\n logFn.apply(console, [data]);\n }\n\n console.groupEnd();\n } else {\n console.error('Missing title or data props');\n }\n }\n /* eslint-enable */\n}\n\n/**\n * A function that does nothing.\n */\nexport function noop() {\n return undefined;\n}\n\n/**\n * Type-safe Object.keys()\n */\nexport function objectKeys<T extends AnyObject>(input: T) {\n return Object.keys(input) as Array<keyof T>;\n}\n\n/**\n * Remove properties from an object\n */\nexport function omit<T extends Record<string, any>, K extends keyof T>(\n input: NarrowPlainObject<T>,\n ...filter: K[]\n) {\n if (!is.plainObject(input)) {\n throw new TypeError('Expected an object');\n }\n\n const output: any = {};\n\n for (const key in input) {\n /* istanbul ignore else */\n if ({}.hasOwnProperty.call(input, key)) {\n if (!filter.includes(key as unknown as K)) {\n output[key] = input[key];\n }\n }\n }\n\n return output as Omit<T, K>;\n}\n\n/**\n * Select properties from an object\n */\nexport function pick<T extends Record<string, any>, K extends keyof T>(\n input: NarrowPlainObject<T>,\n ...filter: K[]\n) {\n if (!is.plainObject(input)) {\n throw new TypeError('Expected an object');\n }\n\n if (!filter.length) {\n return input;\n }\n\n const output: any = {};\n\n for (const key in input) {\n /* istanbul ignore else */\n if ({}.hasOwnProperty.call(input, key)) {\n if (filter.includes(key as unknown as K)) {\n output[key] = input[key];\n }\n }\n }\n\n return output as Pick<T, K>;\n}\n\nexport function replaceLocaleContent(input: ReactNode, step: number, steps: number): ReactNode {\n const replacer = (text: string) =>\n text.replace('{step}', String(step)).replace('{steps}', String(steps));\n\n if (getObjectType(input) === 'string') {\n return replacer(input as string);\n }\n\n if (!isValidElement(input)) {\n return input;\n }\n\n const { children } = (input as any).props;\n\n if (getObjectType(children) === 'string' && children.includes('{step}')) {\n return cloneElement(input as ReactElement<any>, {\n children: replacer(children),\n });\n }\n\n if (Array.isArray(children)) {\n return cloneElement(input as ReactElement<any>, {\n children: children.map((child: ReactNode) => {\n if (typeof child === 'string') {\n return replacer(child);\n }\n\n return replaceLocaleContent(child, step, steps);\n }),\n });\n }\n\n if (getObjectType(input.type) === 'function' && !Object.values((input as any).props).length) {\n const component = (input.type as FC)({});\n\n return replaceLocaleContent(component as ReactNode, step, steps);\n }\n\n return input;\n}\n\nexport function shouldScroll(options: ShouldScrollOptions): boolean {\n const { isFirstStep, lifecycle, previousLifecycle, scrollToFirstStep, step, target } = options;\n\n return (\n !step.disableScrolling &&\n (!isFirstStep || scrollToFirstStep || lifecycle === LIFECYCLE.TOOLTIP) &&\n step.placement !== 'center' &&\n (!step.isFixed || !hasPosition(target)) && // fixed steps don't need to scroll\n previousLifecycle !== lifecycle &&\n ([LIFECYCLE.BEACON, LIFECYCLE.TOOLTIP] as Array<Lifecycle>).includes(lifecycle)\n );\n}\n\n/**\n * Block execution\n */\nexport function sleep(seconds = 1) {\n return new Promise(resolve => {\n setTimeout(resolve, seconds * 1000);\n });\n}\n","import deepmerge from 'deepmerge';\nimport is from 'is-lite';\n\nimport { defaultFloaterProps, defaultLocale, defaultStep } from '~/defaults';\nimport getStyles from '~/styles';\nimport { Props, Step, StepMerged } from '~/types';\n\nimport { getElement, hasCustomScrollParent } from './dom';\nimport { log, omit, pick } from './helpers';\n\nfunction getTourProps(props: Props) {\n return pick(\n props,\n 'beaconComponent',\n 'disableCloseOnEsc',\n 'disableOverlay',\n 'disableOverlayClose',\n 'disableScrolling',\n 'disableScrollParentFix',\n 'floaterProps',\n 'hideBackButton',\n 'hideCloseButton',\n 'locale',\n 'showProgress',\n 'showSkipButton',\n 'spotlightClicks',\n 'spotlightPadding',\n 'styles',\n 'tooltipComponent',\n );\n}\n\nexport function getMergedStep(props: Props, currentStep?: Step): StepMerged {\n const step = currentStep ?? {};\n const mergedStep = deepmerge.all([defaultStep, getTourProps(props), step], {\n isMergeableObject: is.plainObject,\n }) as StepMerged;\n\n const mergedStyles = getStyles(props, mergedStep);\n const scrollParent = hasCustomScrollParent(\n getElement(mergedStep.target),\n mergedStep.disableScrollParentFix,\n );\n const floaterProps = deepmerge.all([\n defaultFloaterProps,\n props.floaterProps ?? {},\n mergedStep.floaterProps ?? {},\n ]) as any;\n\n // Set react-floater props\n floaterProps.offset = mergedStep.offset;\n floaterProps.styles = deepmerge(floaterProps.styles ?? {}, mergedStyles.floaterStyles);\n\n floaterProps.offset += props.spotlightPadding ?? mergedStep.spotlightPadding ?? 0;\n\n if (mergedStep.placementBeacon && floaterProps.wrapperOptions) {\n floaterProps.wrapperOptions.placement = mergedStep.placementBeacon;\n }\n\n if (scrollParent && floaterProps.modifiers?.preventOverflow) {\n floaterProps.modifiers.preventOverflow.options = {\n ...floaterProps.modifiers.preventOverflow.options,\n boundary: 'window',\n };\n }\n\n return {\n ...mergedStep,\n locale: deepmerge.all([defaultLocale, props.locale ?? {}, mergedStep.locale || {}]),\n floaterProps,\n styles: omit(mergedStyles, 'floaterStyles'),\n };\n}\n\n/**\n * Validate if a step is valid\n */\nexport function validateStep(step: Step, debug: boolean = false): boolean {\n if (!is.plainObject(step)) {\n log({\n title: 'validateStep',\n data: 'step must be an object',\n warn: true,\n debug,\n });\n\n return false;\n }\n\n if (!step.target) {\n log({\n title: 'validateStep',\n data: 'target is missing from the step',\n warn: true,\n debug,\n });\n\n return false;\n }\n\n return true;\n}\n\n/**\n * Validate if steps are valid\n */\nexport function validateSteps(steps: Array<Step>, debug: boolean = false): boolean {\n if (!is.array(steps)) {\n log({\n title: 'validateSteps',\n data: 'steps must be an array',\n warn: true,\n debug,\n });\n\n return false;\n }\n\n return steps.every(d => validateStep(d, debug));\n}\n","import { noop } from '~/modules/helpers';\n\nimport { Locale, Props, Step } from '~/types';\n\nexport const defaultFloaterProps = {\n wrapperOptions: {\n offset: -18,\n position: true,\n },\n};\n\nexport const defaultLocale: Locale = {\n back: 'Back',\n close: 'Close',\n last: 'Last',\n next: 'Next',\n nextLabelWithProgress: 'Next (Step {step} of {steps})',\n open: 'Open the dialog',\n skip: 'Skip',\n};\n\nexport const defaultStep = {\n event: 'click',\n placement: 'bottom',\n offset: 10,\n disableBeacon: false,\n disableCloseOnEsc: false,\n disableOverlay: false,\n disableOverlayClose: false,\n disableScrollParentFix: false,\n disableScrolling: false,\n hideBackButton: false,\n hideCloseButton: false,\n hideFooter: false,\n isFixed: false,\n locale: defaultLocale,\n showProgress: false,\n showSkipButton: false,\n spotlightClicks: false,\n spotlightPadding: 10,\n} satisfies Omit<Step, 'content' | 'target'>;\n\nexport const defaultProps = {\n continuous: false,\n debug: false,\n disableCloseOnEsc: false,\n disableOverlay: false,\n disableOverlayClose: false,\n disableScrolling: false,\n disableScrollParentFix: false,\n getHelpers: noop(),\n hideBackButton: false,\n run: true,\n scrollOffset: 20,\n scrollDuration: 300,\n scrollToFirstStep: false,\n showSkipButton: false,\n showProgress: false,\n spotlightClicks: false,\n spotlightPadding: 10,\n steps: [],\n} satisfies Props;\n","import deepmerge from 'deepmerge';\n\nimport { hexToRGB } from './modules/helpers';\nimport { Props, StepMerged, StylesOptions, StylesWithFloaterStyles } from './types';\n\nconst defaultOptions = {\n arrowColor: '#fff',\n backgroundColor: '#fff',\n beaconSize: 36,\n overlayColor: 'rgba(0, 0, 0, 0.5)',\n primaryColor: '#f04',\n spotlightShadow: '0 0 15px rgba(0, 0, 0, 0.5)',\n textColor: '#333',\n width: 380,\n zIndex: 100,\n} satisfies StylesOptions;\n\nconst buttonBase = {\n backgroundColor: 'transparent',\n border: 0,\n borderRadius: 0,\n color: '#555',\n cursor: 'pointer',\n fontSize: 16,\n lineHeight: 1,\n padding: 8,\n WebkitAppearance: 'none',\n};\n\nconst spotlight = {\n borderRadius: 4,\n position: 'absolute',\n};\n\nexport default function getStyles(props: Props, step: StepMerged) {\n const { floaterProps, styles } = props;\n const mergedFloaterProps = deepmerge(step.floaterProps ?? {}, floaterProps ?? {});\n const mergedStyles = deepmerge(styles ?? {}, step.styles ?? {});\n const options = deepmerge(defaultOptions, mergedStyles.options || {}) satisfies StylesOptions;\n const hideBeacon = step.placement === 'center' || step.disableBeacon;\n let { width } = options;\n\n if (window.innerWidth > 480) {\n width = 380;\n }\n\n if ('width' in options) {\n width =\n typeof options.width === 'number' && window.innerWidth < options.width\n ? window.innerWidth - 30\n : options.width;\n }\n\n const overlay = {\n bottom: 0,\n left: 0,\n overflow: 'hidden',\n position: 'absolute',\n right: 0,\n top: 0,\n zIndex: options.zIndex,\n };\n\n const defaultStyles = {\n beacon: {\n ...buttonBase,\n display: hideBeacon ? 'none' : 'inline-block',\n height: options.beaconSize,\n position: 'relative',\n width: options.beaconSize,\n zIndex: options.zIndex,\n },\n beaconInner: {\n animation: 'joyride-beacon-inner 1.2s infinite ease-in-out',\n backgroundColor: options.primaryColor,\n borderRadius: '50%',\n display: 'block',\n height: '50%',\n left: '50%',\n opacity: 0.7,\n position: 'absolute',\n top: '50%',\n transform: 'translate(-50%, -50%)',\n width: '50%',\n },\n beaconOuter: {\n animation: 'joyride-beacon-outer 1.2s infinite ease-in-out',\n backgroundColor: `rgba(${hexToRGB(options.primaryColor).join(',')}, 0.2)`,\n border: `2px solid ${options.primaryColor}`,\n borderRadius: '50%',\n boxSizing: 'border-box',\n display: 'block',\n height: '100%',\n left: 0,\n opacity: 0.9,\n position: 'absolute',\n top: 0,\n transformOrigin: 'center',\n width: '100%',\n },\n tooltip: {\n backgroundColor: options.backgroundColor,\n borderRadius: 5,\n boxSizing: 'border-box',\n color: options.textColor,\n fontSize: 16,\n maxWidth: '100%',\n padding: 15,\n position: 'relative',\n width,\n },\n tooltipContainer: {\n lineHeight: 1.4,\n textAlign: 'center',\n },\n tooltipTitle: {\n fontSize: 18,\n margin: 0,\n },\n tooltipContent: {\n padding: '20px 10px',\n },\n tooltipFooter: {\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'flex-end',\n marginTop: 15,\n },\n tooltipFooterSpacer: {\n flex: 1,\n },\n buttonNext: {\n ...buttonBase,\n backgroundColor: options.primaryColor,\n borderRadius: 4,\n color: '#fff',\n },\n buttonBack: {\n ...buttonBase,\n color: options.primaryColor,\n marginLeft: 'auto',\n marginRight: 5,\n },\n buttonClose: {\n ...buttonBase,\n color: options.textColor,\n height: 14,\n padding: 15,\n position: 'absolute',\n right: 0,\n top: 0,\n width: 14,\n },\n buttonSkip: {\n ...buttonBase,\n color: options.textColor,\n fontSize: 14,\n },\n overlay: {\n ...overlay,\n backgroundColor: options.overlayColor,\n mixBlendMode: 'hard-light',\n },\n overlayLegacy: {\n ...overlay,\n },\n overlayLegacyCenter: {\n ...overlay,\n backgroundColor: options.overlayColor,\n },\n spotlight: {\n ...spotlight,\n backgroundColor: 'gray',\n },\n spotlightLegacy: {\n ...spotlight,\n boxShadow: `0 0 0 9999px ${options.overlayColor}, ${options.spotlightShadow}`,\n },\n floaterStyles: {\n arrow: {\n color: mergedFloaterProps?.styles?.arrow?.color ?? options.arrowColor,\n },\n options: {\n zIndex: options.zIndex + 100,\n },\n },\n options,\n };\n\n return deepmerge(defaultStyles, mergedStyles) as StylesWithFloaterStyles;\n}\n","import is from 'is-lite';\n\nimport { ACTIONS, LIFECYCLE, STATUS } from '~/literals';\n\nimport { Origin, State, Status, Step, StoreHelpers, StoreOptions } from '~/types';\n\nimport { hasValidKeys, objectKeys, omit } from './helpers';\n\ntype StateWithContinuous = State & { continuous: boolean };\ntype Listener = (state: State) => void;\ntype PopperData = any;\n\nconst defaultState: State = {\n action: 'init',\n controlled: false,\n index: 0,\n lifecycle: LIFECYCLE.INIT,\n origin: null,\n size: 0,\n status: STATUS.IDLE,\n};\nconst validKeys = objectKeys(omit(defaultState, 'controlled', 'size'));\n\nclass Store {\n private beaconPopper: PopperData | null;\n private tooltipPopper: PopperData | null;\n private data: Map<string, any> = new Map();\n private listener: Listener | null;\n private store: Map<string, any> = new Map();\n\n constructor(options?: StoreOptions) {\n const { continuous = false, stepIndex, steps = [] } = options ?? {};\n\n this.setState(\n {\n action: ACTIONS.INIT,\n controlled: is.number(stepIndex),\n continuous,\n index: is.number(stepIndex) ? stepIndex : 0,\n lifecycle: LIFECYCLE.INIT,\n origin: null,\n status: steps.length ? STATUS.READY : STATUS.IDLE,\n },\n true,\n );\n\n this.beaconPopper = null;\n this.tooltipPopper = null;\n this.listener = null;\n this.setSteps(steps);\n }\n\n public getState(): State {\n if (!this.store.size) {\n return { ...defaultState };\n }\n\n return {\n action: this.store.get('action') || '',\n controlled: this.store.get('controlled') || false,\n index: parseInt(this.store.get('index'), 10),\n lifecycle: this.store.get('lifecycle') || '',\n origin: this.store.get('origin') || null,\n size: this.store.get('size') || 0,\n status: (this.store.get('status') as Status) || '',\n };\n }\n\n private getNextState(state: Partial<State>, force: boolean = false): State {\n const { action, controlled, index, size, status } = this.getState();\n const newIndex = is.number(state.index) ? state.index : index;\n const nextIndex = controlled && !force ? index : Math.min(Math.max(newIndex, 0), size);\n\n return {\n action: state.action ?? action,\n controlled,\n index: nextIndex,\n lifecycle: state.lifecycle ?? LIFECYCLE.INIT,\n origin: state.origin ?? null,\n size: state.size ?? size,\n status: nextIndex === size ? STATUS.FINISHED : (state.status ?? status),\n };\n }\n\n private getSteps(): Array<Step> {\n const steps = this.data.get('steps');\n\n return Array.isArray(steps) ? steps : [];\n }\n\n private hasUpdatedState(oldState: State): boolean {\n const before = JSON.stringify(oldState);\n const after = JSON.stringify(this.getState());\n\n return before !== after;\n }\n\n private setState(nextState: Partial<StateWithContinuous>, initial: boolean = false) {\n const state = this.getState();\n\n const {\n action,\n index,\n lifecycle,\n origin = null,\n size,\n status,\n } = {\n ...state,\n ...nextState,\n };\n\n this.store.set('action', action);\n this.store.set('index', index);\n this.store.set('lifecycle', lifecycle);\n this.store.set('origin', origin);\n this.store.set('size', size);\n this.store.set('status', status);\n\n if (initial) {\n this.store.set('controlled', nextState.controlled);\n this.store.set('continuous', nextState.continuous);\n }\n\n if (this.listener && this.hasUpdatedState(state)) {\n this.listener(this.getState());\n }\n }\n\n public addListener = (listener: Listener) => {\n this.listener = listener;\n };\n\n public setSteps = (steps: Array<Step>) => {\n const { size, status } = this.getState();\n const state = {\n size: steps.length,\n status,\n };\n\n this.data.set('steps', steps);\n\n if (status === STATUS.WAITING && !size && steps.length) {\n state.status = STATUS.RUNNING;\n }\n\n this.setState(state);\n };\n\n public getHelpers(): StoreHelpers {\n return {\n close: this.close,\n go: this.go,\n info: this.info,\n next: this.next,\n open: this.open,\n prev: this.prev,\n reset: this.reset,\n skip: this.skip,\n };\n }\n\n public getPopper = (name: 'beacon' | 'tooltip'): PopperData | null => {\n if (name === 'beacon') {\n return this.beaconPopper;\n }\n\n return this.tooltipPopper;\n };\n\n public setPopper = (name: 'beacon' | 'tooltip', popper: PopperData) => {\n if (name === 'beacon') {\n this.beaconPopper = popper;\n } else {\n this.tooltipPopper = popper;\n }\n };\n\n public cleanupPoppers = () => {\n this.beaconPopper = null;\n this.tooltipPopper = null;\n };\n\n public close = (origin: Origin | null = null) => {\n const { index, status } = this.getState();\n\n if (status !== STATUS.RUNNING) {\n return;\n }\n\n this.setState({\n ...this.getNextState({ action: ACTIONS.CLOSE, index: index + 1, origin }),\n });\n };\n\n public go = (nextIndex: number) => {\n const { controlled, status } = this.getState();\n\n if (controlled || status !== STATUS.RUNNING) {\n return;\n }\n\n const step = this.getSteps()[nextIndex];\n\n this.setState({\n ...this.getNextState({ action: ACTIONS.GO, index: nextIndex }),\n status: step ? status : STATUS.FINISHED,\n });\n };\n\n public info = (): State => this.getState();\n\n public next = () => {\n const { index, status } = this.getState();\n\n if (status !== STATUS.RUNNING) {\n return;\n }\n\n this.setState(this.getNextState({ action: ACTIONS.NEXT, index: index + 1 }));\n };\n\n public open = () => {\n const { status } = this.getState();\n\n if (status !== STATUS.RUNNING) {\n return;\n }\n\n this.setState({\n ...this.getNextState({ action: ACTIONS.UPDATE, lifecycle: LIFECYCLE.TOOLTIP }),\n });\n };\n\n public prev = () => {\n const { index, status } = this.getState();\n\n if (status !== STATUS.RUNNING) {\n return;\n }\n\n this.setState({\n ...this.getNextState({ action: ACTIONS.PREV, index: index - 1 }),\n });\n };\n\n public reset = (restart = false) => {\n const { controlled } = this.getState();\n\n if (controlled) {\n return;\n }\n\n this.setState({\n ...this.getNextState({ action: ACTIONS.RESET, index: 0 }),\n status: restart ? STATUS.RUNNING : STATUS.READY,\n });\n };\n\n public skip = () => {\n const { status } = this.getState();\n\n if (status !== STATUS.RUNNING) {\n return;\n }\n\n this.setState({\n action: ACTIONS.SKIP,\n lifecycle: LIFECYCLE.INIT,\n status: STATUS.SKIPPED,\n });\n };\n\n public start = (nextIndex?: number) => {\n const { index, size } = this.getState();\n\n this.setState({\n ...this.getNextState(\n {\n action: ACTIONS.START,\n index: is.number(nextIndex) ? nextIndex : index,\n },\n true,\n ),\n status: size ? STATUS.RUNNING : STATUS.WAITING,\n });\n };\n\n public stop = (advance = false) => {\n const { index, status } = this.getState();\n\n if (([STATUS.FINISHED, STATUS.SKIPPED] as Array<Status>).includes(status)) {\n return;\n }\n\n this.setState({\n ...this.getNextState({ action: ACTIONS.STOP, index: index + (advance ? 1 : 0) }),\n status: STATUS.PAUSED,\n });\n };\n\n public update = (state: Partial<State>) => {\n if (!hasValidKeys(state, validKeys)) {\n throw new Error(`State is not valid. Valid keys: ${validKeys.join(', ')}`);\n }\n\n this.setState({\n ...this.getNextState(\n {\n ...this.getState(),\n ...state,\n action: state.action ?? ACTIONS.UPDATE,\n origin: state.origin ?? null,\n },\n true,\n ),\n });\n };\n}\n\nexport type StoreInstance = ReturnType<typeof createStore>;\n\nexport default function createStore(options?: StoreOptions) {\n return new Store(options);\n}\n","import * as React from 'react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport treeChanges from 'tree-changes';\n\nimport {\n getClientRect,\n getDocumentHeight,\n getElement,\n getElementPosition,\n getScrollParent,\n hasCustomScrollParent,\n hasPosition,\n} from '~/modules/dom';\nimport { isSafari, log } from '~/modules/helpers';\n\nimport { LIFECYCLE } from '~/literals';\n\nimport { Lifecycle, OverlayProps } from '~/types';\n\nimport Spotlight from './Spotlight';\n\ninterface SpotlightStyles extends React.CSSProperties {\n height: number;\n left: number;\n top: number;\n width: number;\n}\n\nexport default function JoyrideOverlay(props: OverlayProps) {\n const {\n continuous,\n debug,\n disableOverlay,\n disableOverlayClose,\n disableScrolling,\n disableScrollParentFix = false,\n lifecycle,\n onClickOverlay,\n placement,\n spotlightClicks,\n spotlightPadding = 0,\n styles,\n target,\n } = props;\n\n const [isScrolling, setIsScrolling] = useState(false);\n const [mouseOverSpotlight, setMouseOverSpotlight] = useState(false);\n const [showSpotlight, setShowSpotlight] = useState(true);\n const [, setForceRender] = useState(0);\n\n const isActiveRef = useRef(false);\n const resizeTimeoutRef = useRef<number | undefined>(undefined);\n const scrollTimeoutRef = useRef<number | undefined>(undefined);\n const scrollParentRef = useRef<Document | Element | undefined>(undefined);\n const previousPropsRef = useRef(props);\n\n const getSpotlightStyles = useCallback((): SpotlightStyles => {\n const element = getElement(target);\n const elementRect = getClientRect(element);\n const isFixedTarget = hasPosition(element);\n const top = getElementPosition(element, spotlightPadding, disableScrollParentFix);\n\n return {\n ...styles.spotlight,\n height: Math.round((elementRect?.height ?? 0) + spotlightPadding * 2),\n left: Math.round((elementRect?.left ?? 0) - spotlightPadding),\n opacity: showSpotlight ? 1 : 0,\n pointerEvents: spotlightClicks ? 'none' : 'auto',\n position: isFixedTarget ? 'fixed' : 'absolute',\n top,\n transition: 'opacity 0.2s',\n width: Math.round((elementRect?.width ?? 0) + spotlightPadding * 2),\n } satisfies React.CSSProperties;\n }, [target, spotlightPadding, disableScrollParentFix, styles.spotlight, showSpotlight, spotlightClicks]);\n\n const handleMouseMove = useCallback((event: MouseEvent) => {\n const spotStyles = getSpotlightStyles();\n const { height, left, position, top, width } = spotStyles;\n\n const offsetY = position === 'fixed' ? event.clientY : event.pageY;\n const offsetX = position === 'fixed' ? event.clientX : event.pageX;\n const inSpotlightHeight = offsetY >= top && offsetY <= top + height;\n const inSpotlightWidth = offsetX >= left && offsetX <= left + width;\n const inSpotlight = inSpotlightWidth && inSpotlightHeight;\n\n setMouseOverSpotlight(prev => {\n if (inSpotlight !== prev) {\n return inSpotlight;\n }\n return prev;\n });\n }, [getSpotlightStyles]);\n\n const handleScroll = useCallback(() => {\n const element = getElement(target);\n\n if (scrollParentRef.current !== document) {\n setIsScrolling(prev => {\n if (!prev) {\n setShowSpotlight(false);\n return true;\n }\n return prev;\n });\n\n clearTimeout(scrollTimeoutRef.current);\n\n scrollTimeoutRef.current = window.setTimeout(() => {\n if (isActiveRef.current) {\n setIsScrolling(false);\n setShowSpotlight(true);\n }\n }, 50);\n } else if (hasPosition(element, 'sticky')) {\n setForceRender(c => c + 1);\n }\n }, [target]);\n\n const handleResize = useCallback(() => {\n clearTimeout(resizeTimeoutRef.current);\n\n resizeTimeoutRef.current = window.setTimeout(() => {\n if (isActiveRef.current) {\n setForceRender(c => c + 1);\n }\n }, 100);\n }, []);\n\n // Mount/unmount\n useEffect(() => {\n const element = getElement(target);\n scrollParentRef.current = getScrollParent(element ?? document.body, disableScrollParentFix, true);\n isActiveRef.current = true;\n\n if (process.env.NODE_ENV !== 'production') {\n if (!disableScrolling && hasCustomScrollParent(element, true)) {\n log({\n title: 'step has a custom scroll parent and can cause trouble with scrolling',\n data: [{ key: 'parent', value: scrollParentRef.current }],\n debug,\n });\n }\n }\n\n window.addEventListener('resize', handleResize);\n\n return () => {\n isActiveRef.current = false;\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('resize', handleResize);\n clearTimeout(resizeTimeoutRef.current);\n clearTimeout(scrollTimeoutRef.current);\n scrollParentRef.current?.removeEventListener('scroll', handleScroll);\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n // componentDidUpdate equivalent\n useEffect(() => {\n const previousProps = previousPropsRef.current;\n const { changed } = treeChanges(previousProps, props);\n\n if (changed('target') || changed('disableScrollParentFix')) {\n const element = getElement(target);\n scrollParentRef.current = getScrollParent(element ?? document.body, disableScrollParentFix, true);\n }\n\n if (changed('lifecycle', LIFECYCLE.TOOLTIP)) {\n scrollParentRef.current?.addEventListener('scroll', handleScroll, { passive: true });\n\n setTimeout(() => {\n if (!isScrolling) {\n setShowSpotlight(true);\n }\n }, 100);\n }\n\n if (changed('spotlightClicks') || changed('disableOverlay') || changed('lifecycle')) {\n if (spotlightClicks && lifecycle === LIFECYCLE.TOOLTIP) {\n window.addEventListener('mousemove', handleMouseMove, false);\n } else if (lifecycle !== LIFECYCLE.TOOLTIP) {\n window.removeEventListener('mousemove', handleMouseMove);\n }\n }\n\n previousPropsRef.current = props;\n });\n\n const hideSpotlight = () => {\n const hiddenLifecycles = [\n LIFECYCLE.INIT,\n LIFECYCLE.BEACON,\n LIFECYCLE.COMPLETE,\n LIFECYCLE.ERROR,\n ] as Lifecycle[];\n\n return (\n disableOverlay ||\n (continuous ? hiddenLifecycles.includes(lifecycle) : lifecycle !== LIFECYCLE.TOOLTIP)\n );\n };\n\n if (hideSpotlight()) {\n return null;\n }\n\n const spotlightStyles = getSpotlightStyles();\n\n const overlayStyles: React.CSSProperties = {\n cursor: disableOverlayClose ? 'default' : 'pointer',\n height: getDocumentHeight(),\n pointerEvents: mouseOverSpotlight ? 'none' : 'auto',\n ...styles.overlay,\n };\n\n let spotlight = placement !== 'center' && showSpotlight && (\n <Spotlight styles={spotlightStyles} />\n );\n\n // Hack for Safari bug with mix-blend-mode with z-index\n if (isSafari()) {\n const { mixBlendMode, zIndex, ...safariOverlay } = overlayStyles;\n\n spotlight = <div style={{ ...safariOverlay }}>{spotlight}</div>;\n delete overlayStyles.backgroundColor;\n }\n\n return (\n <div\n className=\"react-joyride__overlay\"\n data-test-id=\"overlay\"\n onClick={onClickOverlay}\n role=\"presentation\"\n style={overlayStyles}\n >\n {spotlight}\n </div>\n );\n}\n","import * as React from 'react';\n\ninterface Props {\n styles: React.CSSProperties;\n}\n\nfunction JoyrideSpotlight({ styles }: Props) {\n return (\n <div\n key=\"JoyrideSpotlight\"\n className=\"react-joyride__spotlight\"\n data-test-id=\"spotlight\"\n style={styles}\n />\n );\n}\n\nexport default JoyrideSpotlight;\n","import { ReactElement, useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { canUseDOM } from '~/modules/dom';\n\ninterface Props {\n children: ReactElement;\n id: string;\n}\n\nexport default function JoyridePortal({ children, id }: Props) {\n const nodeRef = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n if (!canUseDOM()) {\n return;\n }\n\n const node = document.createElement('div');\n node.id = id;\n document.body.appendChild(node);\n nodeRef.current = node;\n\n return () => {\n if (node.parentNode === document.body) {\n document.body.removeChild(node);\n }\n nodeRef.current = null;\n };\n }, [id]);\n\n if (!canUseDOM() || !nodeRef.current) {\n return null;\n }\n\n return createPortal(children, nodeRef.current);\n}\n","import { useCallback, useEffect, useRef } from 'react';\nimport Floater, { Props as FloaterProps } from 'react-floater';\nimport is from 'is-lite';\nimport treeChanges from 'tree-changes';\n\nimport { getElement, isElementVisible } from '~/modules/dom';\nimport { hideBeacon, log } from '~/modules/helpers';\nimport Scope from '~/modules/scope';\nimport { validateStep } from '~/modules/step';\n\nimport { ACTIONS, EVENTS, LIFECYCLE, STATUS } from '~/literals';\n\nimport { StepProps } from '~/types';\n\nimport Beacon from './Beacon';\nimport Tooltip from './Tooltip/index';\n\nexport default function JoyrideStep(props: StepProps) {\n const {\n action,\n callback,\n continuous,\n controlled,\n debug,\n helpers,\n index,\n lifecycle,\n nonce,\n shouldScroll,\n size,\n status,\n step,\n store,\n } = props;\n\n const scopeRef = useRef<Scope | null>(null);\n const tooltipRef = useRef<HTMLElement | null>(null);\n const previousPropsRef = useRef(props);\n\n const setTooltipRef = useCallback((element: HTMLElement) => {\n tooltipRef.current = element;\n }, []);\n\n const handleClickHoverBeacon = useCallback((event: React.MouseEvent<HTMLElement>) => {\n if (event.type === 'mouseenter' && step.event !== 'hover') {\n return;\n }\n\n store.update({ lifecycle: LIFECYCLE.TOOLTIP });\n }, [step.event, store]);\n\n const setPopper: FloaterProps['getPopper'] = useCallback((popper: any, type: any) => {\n if (type === 'wrapper') {\n store.setPopper('beacon', popper);\n } else {\n store.setPopper('tooltip', popper);\n }\n\n if (\n store.getPopper('beacon') &&\n (store.getPopper('tooltip') || step.placement === 'center') &&\n lifecycle === LIFECYCLE.INIT\n ) {\n store.update({\n action,\n lifecycle: LIFECYCLE.READY,\n });\n }\n\n if (step.floaterProps?.getPopper) {\n step.floaterProps.getPopper(popper, type);\n }\n }, [action, lifecycle, step.placement, step.floaterProps, store]);\n\n // Log on mount\n useEffect(() => {\n log({\n title: `step:${index}`,\n data: [{ key: 'props', value: props }],\n debug,\n });\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Cleanup scope on unmount\n useEffect(() => {\n return () => {\n scopeRef.current?.removeScope();\n };\n }, []);\n\n // componentDidUpdate equivalent\n useEffect(() => {\n const previousProps = previousPropsRef.current;\n const { changed, changedFrom } = treeChanges(previousProps, props);\n const state = helpers.info();\n\n const skipBeacon =\n continuous && action !== ACTIONS.CLOSE && (index > 0 || action === ACTIONS.PREV);\n const hasStoreChanged =\n changed('action') || changed('index') || changed('lifecycle') || changed('status');\n const isInitial = changedFrom('lifecycle', [LIFECYCLE.TOOLTIP, LIFECYCLE.INIT], LIFECYCLE.INIT);\n const isAfterAction = changed('action', [\n ACTIONS.NEXT,\n ACTIONS.PREV,\n ACTIONS.SKIP,\n ACTIONS.CLOSE,\n ]);\n const isControlled = controlled && index === previousProps.index;\n\n if (isAfterAction && (isInitial || isControlled)) {\n callback({\n ...state,\n index: previousProps.index,\n lifecycle: LIFECYCLE.COMPLETE,\n step: previousProps.step,\n type: EVENTS.STEP_AFTER,\n });\n }\n\n if (\n step.placement === 'center' &&\n status === STATUS.RUNNING &&\n changed('index') &&\n action !== ACTIONS.START &&\n lifecycle === LIFECYCLE.INIT\n ) {\n store.update({ lifecycle: LIFECYCLE.READY });\n }\n\n if (hasStoreChanged) {\n const element = getElement(step.target);\n const elementExists = !!element;\n const hasRenderedTarget = elementExists && isElementVisible(element);\n\n if (hasRenderedTarget) {\n if (\n changedFrom('status', STATUS.READY, STATUS.RUNNING) ||\n changedFrom('lifecycle', LIFECYCLE.INIT, LIFECYCLE.READY)\n ) {\n callback({\n ...state,\n step,\n type: EVENTS.STEP_BEFORE,\n });\n }\n } else {\n // eslint-disable-next-line no-console\n console.warn(elementExists ? 'Target not visible' : 'Target not mounted', step);\n callback({\n ...state,\n type: EVENTS.TARGET_NOT_FOUND,\n step,\n });\n\n if (!controlled) {\n store.update({ index: index + (action === ACTIONS.PREV ? -1 : 1) });\n }\n }\n }\n\n if (changedFrom('lifecycle', LIFECYCLE.INIT, LIFECYCLE.READY)) {\n store.update({\n lifecycle: hideBeacon(step) || skipBeacon ? LIFECYCLE.TOOLTIP : LIFECYCLE.BEACON,\n });\n }\n\n if (changed('index')) {\n log({\n title: `step:${lifecycle}`,\n data: [{ key: 'props', value: props }],\n debug,\n });\n }\n\n if (changed('lifecycle', LIFECYCLE.BEACON)) {\n callback({\n ...state,\n step,\n type: EVENTS.BEACON,\n });\n }\n\n if (changed('lifecycle', LIFECYCLE.TOOLTIP)) {\n callback({\n ...state,\n step,\n type: EVENTS.TOOLTIP,\n });\n\n if (shouldScroll && tooltipRef.current) {\n scopeRef.current = new Scope(tooltipRef.current, { selector: '[data-action=primary]' });\n scopeRef.current.setFocus();\n }\n }\n\n if (changedFrom('lifecycle', [LIFECYCLE.TOOLTIP, LIFECYCLE.INIT], LIFECYCLE.INIT)) {\n scopeRef.current?.removeScope();\n store.cleanupPoppers();\n }\n\n previousPropsRef.current = props;\n });\n\n const target = getElement(step.target);\n\n if (!validateStep(step) || !is.domElement(target)) {\n return null;\n }\n\n const isOpen = hideBeacon(step) || lifecycle === LIFECYCLE.TOOLTIP;\n\n const TooltipComponent = () => (\n <Tooltip\n continuous={continuous}\n helpers={helpers}\n index={index}\n isLastStep={index + 1 === size}\n setTooltipRef={setTooltipRef}\n size={size}\n step={step}\n />\n );\n\n // Omit content/component from step.floaterProps to avoid conflict with RequireExactlyOne\n const { content: _c, component: _comp, ...safeFloaterProps } = (step.floaterProps ?? {}) as any;\n\n return (\n <div key={`JoyrideStep-${index}`} className=\"react-joyride__step\">\n <Floater\n {...safeFloaterProps}\n component={TooltipComponent}\n debug={debug}\n getPopper={setPopper}\n id={`react-joyride-step-${index}`}\n open={isOpen}\n placement={step.placement}\n target={step.target}\n >\n <Beacon\n beaconComponent={step.beaconComponent}\n continuous={continuous}\n index={index}\n isLastStep={index + 1 === size}\n locale={step.locale}\n nonce={nonce}\n onClickOrHover={handleClickHoverBeacon}\n shouldFocus={shouldScroll}\n size={size}\n step={step}\n styles={step.styles}\n />\n </Floater>\n </div>\n );\n}\n","interface ScopeOptions {\n code?: string;\n selector: string | null;\n}\n\nexport default class Scope {\n element: HTMLElement;\n options: ScopeOptions;\n\n constructor(element: HTMLElement, options: ScopeOptions) {\n if (!(element instanceof HTMLElement)) {\n throw new TypeError('Invalid parameter: element must be an HTMLElement');\n }\n\n this.element = element;\n this.options = options;\n\n window.addEventListener('keydown', this.handleKeyDown, false);\n\n this.setFocus();\n }\n\n canBeTabbed = (element: HTMLElement): boolean => {\n const { tabIndex } = element;\n\n if (tabIndex === null || tabIndex < 0) {\n return false;\n }\n\n return this.canHaveFocus(element);\n };\n\n canHaveFocus = (element: HTMLElement): boolean => {\n const validTabNodes = /input|select|textarea|button|object/;\n const nodeName = element.nodeName.toLowerCase();\n\n const isValid =\n (validTabNodes.test(nodeName) && !element.getAttribute('disabled')) ||\n (nodeName === 'a' && !!element.getAttribute('href'));\n\n return isValid && this.isVisible(element);\n };\n\n findValidTabElements = (): Array<HTMLElement> =>\n [].slice.call(this.element.querySelectorAll('*'), 0).filter(this.canBeTabbed);\n\n handleKeyDown = (event: KeyboardEvent) => {\n const { code = 'Tab' } = this.options;\n\n if (event.code === code) {\n this.interceptTab(event);\n }\n };\n\n interceptTab = (event: KeyboardEvent) => {\n event.preventDefault();\n const elements = this.findValidTabElements();\n const { shiftKey } = event;\n\n if (!elements.length) {\n return;\n }\n\n let x = document.activeElement ? elements.indexOf(document.activeElement as HTMLElement) : 0;\n\n if (x === -1 || (!shiftKey && x + 1 === elements.length)) {\n x = 0;\n } else if (shiftKey && x === 0) {\n x = elements.length - 1;\n } else {\n x += shiftKey ? -1 : 1;\n }\n\n elements[x].focus();\n };\n\n // eslint-disable-next-line class-methods-use-this\n isHidden = (element: HTMLElement) => {\n const noSize = element.offsetWidth <= 0 && element.offsetHeight <= 0;\n const style = window.getComputedStyle(element);\n\n if (noSize && !element.innerHTML) {\n return true;\n }\n\n return (\n (noSize && style.getPropertyValue('overflow') !== 'visible') ||\n style.getPropertyValue('display') === 'none'\n );\n };\n\n isVisible = (element: HTMLElement): boolean => {\n let parentElement: HTMLElement | null = element;\n\n while (parentElement) {\n if (parentElement instanceof HTMLElement) {\n if (parentElement === document.body) {\n break;\n }\n\n if (this.isHidden(parentElement)) {\n return false;\n }\n\n parentElement = parentElement.parentNode as HTMLElement;\n }\n }\n\n return true;\n };\n\n removeScope = () => {\n window.removeEventListener('keydown', this.handleKeyDown);\n };\n\n checkFocus = (target: HTMLElement) => {\n if (document.activeElement !== target) {\n target.focus();\n window.requestAnimationFrame(() => this.checkFocus(target));\n }\n };\n\n setFocus = () => {\n const { selector } = this.options;\n\n if (!selector) {\n return;\n }\n\n const target = this.element.querySelector(selector);\n\n if (target) {\n window.requestAnimationFrame(() => this.checkFocus(target as HTMLElement));\n }\n };\n}\n","import { useCallback, useEffect, useRef } from 'react';\nimport is from 'is-lite';\n\nimport { getReactNodeText } from '~/modules/helpers';\n\nimport { BeaconProps } from '~/types';\n\nexport default function JoyrideBeacon(props: BeaconProps) {\n const {\n beaconComponent,\n continuous,\n index,\n isLastStep,\n locale,\n nonce,\n onClickOrHover,\n shouldFocus,\n size,\n step,\n styles,\n } = props;\n const beaconRef = useRef<HTMLElement | null>(null);\n\n const setBeaconRef = useCallback((c: HTMLElement | null) => {\n beaconRef.current = c;\n }, []);\n\n // Inject beacon animation styles\n useEffect(() => {\n if (beaconComponent) {\n return;\n }\n\n const head = document.head || document.getElementsByTagName('head')[0];\n const style = document.createElement('style');\n\n style.id = 'joyride-beacon-animation';\n\n if (nonce) {\n style.setAttribute('nonce', nonce);\n }\n\n const css = `\n @keyframes joyride-beacon-inner {\n 20% {\n opacity: 0.9;\n }\n\n 90% {\n opacity: 0.7;\n }\n }\n\n @keyframes joyride-beacon-outer {\n 0% {\n transform: scale(1);\n }\n\n 45% {\n opacity: 0.7;\n transform: scale(0.75);\n }\n\n 100% {\n opacity: 0.9;\n transform: scale(1);\n }\n }\n `;\n\n style.appendChild(document.createTextNode(css));\n head.appendChild(style);\n\n return () => {\n const existingStyle = document.getElementById('joyride-beacon-animation');\n\n if (existingStyle?.parentNode) {\n existingStyle.parentNode.removeChild(existingStyle);\n }\n };\n }, [beaconComponent, nonce]);\n\n // Focus beacon on mount\n useEffect(() => {\n if (process.env.NODE_ENV !== 'production') {\n if (!is.domElement(beaconRef.current)) {\n console.warn('beacon is not a valid DOM element'); // eslint-disable-line no-console\n }\n }\n\n setTimeout(() => {\n if (is.domElement(beaconRef.current) && shouldFocus) {\n beaconRef.current.focus();\n }\n }, 0);\n }, [shouldFocus]);\n\n const title = getReactNodeText(locale.open);\n const sharedProps = {\n 'aria-label': title,\n onClick: onClickOrHover,\n onMouseEnter: onClickOrHover,\n ref: setBeaconRef,\n title,\n };\n\n if (beaconComponent) {\n const BeaconComponent = beaconComponent;\n\n return (\n <BeaconComponent\n continuous={continuous}\n index={index}\n isLastStep={isLastStep}\n size={size}\n step={step}\n {...sharedProps}\n />\n );\n }\n\n return (\n <button\n key=\"JoyrideBeacon\"\n className=\"react-joyride__beacon\"\n data-test-id=\"button-beacon\"\n style={styles.beacon}\n type=\"button\"\n {...sharedProps}\n >\n <span style={styles.beaconInner} />\n <span style={styles.beaconOuter} />\n </button>\n );\n}\n","import React, { CSSProperties } from 'react';\n\ninterface Props {\n styles: CSSProperties;\n}\n\nfunction JoyrideTooltipCloseButton({ styles, ...props }: Props) {\n const { color, height, width, ...style } = styles;\n\n return (\n <button style={style} type=\"button\" {...props}>\n <svg\n height={typeof height === 'number' ? `${height}px` : height}\n preserveAspectRatio=\"xMidYMid\"\n version=\"1.1\"\n viewBox=\"0 0 18 18\"\n width={typeof width === 'number' ? `${width}px` : width}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g>\n <path\n d=\"M8.13911129,9.00268191 L0.171521827,17.0258467 C-0.0498027049,17.248715 -0.0498027049,17.6098394 0.171521827,17.8327545 C0.28204354,17.9443526 0.427188206,17.9998706 0.572051765,17.9998706 C0.71714958,17.9998706 0.862013139,17.9443526 0.972581703,17.8327545 L9.0000937,9.74924618 L17.0276057,17.8327545 C17.1384085,17.9443526 17.2832721,17.9998706 17.4281356,17.9998706 C17.5729992,17.9998706 17.718097,17.9443526 17.8286656,17.8327545 C18.0499901,17.6098862 18.0499901,17.2487618 17.8286656,17.0258467 L9.86135722,9.00268191 L17.8340066,0.973848225 C18.0553311,0.750979934 18.0553311,0.389855532 17.8340066,0.16694039 C17.6126821,-0.0556467968 17.254037,-0.0556467968 17.0329467,0.16694039 L9.00042166,8.25611765 L0.967006424,0.167268345 C0.745681892,-0.0553188426 0.387317931,-0.0553188426 0.165993399,0.167268345 C-0.0553311331,0.390136635 -0.0553311331,0.751261038 0.165993399,0.974176179 L8.13920499,9.00268191 L8.13911129,9.00268191 Z\"\n fill={color}\n />\n </g>\n </svg>\n </button>\n );\n}\n\nexport default JoyrideTooltipCloseButton;\n","import * as React from 'react';\n\nimport { getReactNodeText } from '~/modules/helpers';\n\nimport { TooltipRenderProps } from '~/types';\n\nimport CloseButton from './CloseButton';\n\nfunction JoyrideTooltipContainer(props: TooltipRenderProps) {\n const { backProps, closeProps, index, isLastStep, primaryProps, skipProps, step, tooltipProps } =\n props;\n const { content, hideBackButton, hideCloseButton, hideFooter, showSkipButton, styles, title } =\n step;\n const output: Record<string, React.ReactNode> = {};\n\n output.primary = (\n <button\n data-test-id=\"button-primary\"\n style={styles.buttonNext}\n type=\"button\"\n {...primaryProps}\n />\n );\n\n if (showSkipButton && !isLastStep) {\n output.skip = (\n <button\n aria-live=\"off\"\n data-test-id=\"button-skip\"\n style={styles.buttonSkip}\n type=\"button\"\n {...skipProps}\n />\n );\n }\n\n if (!hideBackButton && index > 0) {\n output.back = (\n <button data-test-id=\"button-back\" style={styles.buttonBack} type=\"button\" {...backProps} />\n );\n }\n\n output.close = !hideCloseButton && (\n <CloseButton data-test-id=\"button-close\" styles={styles.buttonClose} {...closeProps} />\n );\n\n return (\n <div\n key=\"JoyrideTooltip\"\n aria-label={getReactNodeText(title ?? content)}\n className=\"react-joyride__tooltip\"\n style={styles.tooltip}\n {...tooltipProps}\n >\n <div style={styles.tooltipContainer}>\n {title && (\n <h1 aria-label={getReactNodeText(title)} style={styles.tooltipTitle}>\n {title}\n </h1>\n )}\n <div style={styles.tooltipContent}>{content}</div>\n </div>\n {!hideFooter && (\n <div style={styles.tooltipFooter}>\n <div style={styles.tooltipFooterSpacer}>{output.skip}</div>\n {output.back}\n {output.primary}\n </div>\n )}\n {output.close}\n </div>\n );\n}\n\nexport default JoyrideTooltipContainer;\n","import * as React from 'react';\n\nimport { getReactNodeText, replaceLocaleContent } from '~/modules/helpers';\n\nimport { TooltipProps } from '~/types';\n\nimport Container from './Container';\n\nexport default function JoyrideTooltip(props: TooltipProps) {\n const { continuous, helpers, index, isLastStep, setTooltipRef, size, step } = props;\n\n const handleClickBack = (event: React.MouseEvent<HTMLElement>) => {\n event.preventDefault();\n helpers.prev();\n };\n\n const handleClickClose = (event: React.MouseEvent<HTMLElement>) => {\n event.preventDefault();\n helpers.close('button_close');\n };\n\n const handleClickPrimary = (event: React.MouseEvent<HTMLElement>) => {\n event.preventDefault();\n\n if (!continuous) {\n helpers.close('button_primary');\n\n return;\n }\n\n helpers.next();\n };\n\n const handleClickSkip = (event: React.MouseEvent<HTMLElement>) => {\n event.preventDefault();\n helpers.skip();\n };\n\n const getElementsProps = () => {\n const { back, close, last, next, nextLabelWithProgress, skip } = step.locale;\n\n const backText = getReactNodeText(back);\n const closeText = getReactNodeText(close);\n const lastText = getReactNodeText(last);\n const nextText = getReactNodeText(next);\n const skipText = getReactNodeText(skip);\n\n let primary = close;\n let primaryText = closeText;\n\n if (continuous) {\n primary = next;\n primaryText = nextText;\n\n if (step.showProgress && !isLastStep) {\n const labelWithProgress = getReactNodeText(nextLabelWithProgress, {\n step: index + 1,\n steps: size,\n });\n\n primary = replaceLocaleContent(nextLabelWithProgress, index + 1, size);\n primaryText = labelWithProgress;\n }\n\n if (isLastStep) {\n primary = last;\n primaryText = lastText;\n }\n }\n\n return {\n backProps: {\n 'aria-label': backText,\n children: back,\n 'data-action': 'back',\n onClick: handleClickBack,\n role: 'button',\n title: backText,\n },\n closeProps: {\n 'aria-label': closeText,\n children: close,\n 'data-action': 'close',\n onClick: handleClickClose,\n role: 'button',\n title: closeText,\n },\n primaryProps: {\n 'aria-label': primaryText,\n children: primary,\n 'data-action': 'primary',\n onClick: handleClickPrimary,\n role: 'button',\n title: primaryText,\n },\n skipProps: {\n 'aria-label': skipText,\n children: skip,\n 'data-action': 'skip',\n onClick: handleClickSkip,\n role: 'button',\n title: skipText,\n },\n tooltipProps: {\n 'aria-modal': true,\n ref: setTooltipRef,\n role: 'alertdialog',\n },\n };\n };\n\n const { beaconComponent, tooltipComponent, ...cleanStep } = step;\n\n if (tooltipComponent) {\n const renderProps = {\n ...getElementsProps(),\n continuous,\n index,\n isLastStep,\n size,\n step: cleanStep,\n setTooltipRef,\n };\n\n const TooltipComponent = tooltipComponent;\n\n return <TooltipComponent {...renderProps} />;\n }\n\n return (\n <Container\n {...getElementsProps()}\n continuous={continuous}\n index={index}\n isLastStep={isLastStep}\n size={size}\n step={step}\n />\n );\n}\n"],"mappings":"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","names":["useCallback","useEffect","useRef","useState","is","treeChanges","deepmerge","is","hideBeacon","deepmerge","is","scrollParent","is","is","jsx","spotlight","useEffect","useRef","useRef","useEffect","useCallback","useEffect","useRef","is","treeChanges","useCallback","useEffect","useRef","is","jsx","useRef","useCallback","useEffect","is","jsx","jsx","jsxs","jsx","jsx","shouldScroll","useRef","useCallback","_a","useEffect","treeChanges","is","jsx","jsxs","useRef","is","useState","useCallback","lifecycle","useEffect","treeChanges","index","status","scrollParent","_a"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@matthesketh/react-guidetour",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "React 19 guided tour component. Modernised fork of react-joyride by Gil Barbara.",
|
|
5
|
+
"author": "Matt Hesketh",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/wrxck/react-guidetour.git"
|
|
10
|
+
},
|
|
11
|
+
"keywords": [
|
|
12
|
+
"react",
|
|
13
|
+
"react-component",
|
|
14
|
+
"tooltips",
|
|
15
|
+
"guided-tour",
|
|
16
|
+
"walkthroughs",
|
|
17
|
+
"tour",
|
|
18
|
+
"react-19"
|
|
19
|
+
],
|
|
20
|
+
"main": "./dist/index.js",
|
|
21
|
+
"module": "./dist/index.mjs",
|
|
22
|
+
"exports": {
|
|
23
|
+
"import": "./dist/index.mjs",
|
|
24
|
+
"require": "./dist/index.js"
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
"dist",
|
|
28
|
+
"src"
|
|
29
|
+
],
|
|
30
|
+
"types": "dist/index.d.ts",
|
|
31
|
+
"sideEffects": false,
|
|
32
|
+
"peerDependencies": {
|
|
33
|
+
"react": "^19.0.0",
|
|
34
|
+
"react-dom": "^19.0.0"
|
|
35
|
+
},
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"@gilbarbara/deep-equal": "^0.3.1",
|
|
38
|
+
"deep-diff": "^1.0.2",
|
|
39
|
+
"deepmerge": "^4.3.1",
|
|
40
|
+
"is-lite": "^1.2.1",
|
|
41
|
+
"react-floater": "^0.10.0",
|
|
42
|
+
"react-innertext": "^1.1.5",
|
|
43
|
+
"scroll": "^3.0.1",
|
|
44
|
+
"scrollparent": "^2.1.0",
|
|
45
|
+
"tree-changes": "^0.11.2",
|
|
46
|
+
"type-fest": "^4.27.0"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@types/node": "^25.5.0",
|
|
50
|
+
"@types/react": "^19.0.0",
|
|
51
|
+
"@types/react-dom": "^19.0.0",
|
|
52
|
+
"@types/scroll": "^3.0.3",
|
|
53
|
+
"@types/scrollparent": "^2.0.3",
|
|
54
|
+
"react": "^19.0.0",
|
|
55
|
+
"react-dom": "^19.0.0",
|
|
56
|
+
"tsup": "^8.3.5",
|
|
57
|
+
"typescript": "^5.6.3"
|
|
58
|
+
},
|
|
59
|
+
"tsup": {
|
|
60
|
+
"dts": true,
|
|
61
|
+
"entry": [
|
|
62
|
+
"src/index.tsx"
|
|
63
|
+
],
|
|
64
|
+
"format": [
|
|
65
|
+
"cjs",
|
|
66
|
+
"esm"
|
|
67
|
+
],
|
|
68
|
+
"target": "es2018",
|
|
69
|
+
"sourcemap": true,
|
|
70
|
+
"splitting": false
|
|
71
|
+
},
|
|
72
|
+
"scripts": {
|
|
73
|
+
"build": "tsup",
|
|
74
|
+
"watch": "tsup --watch"
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef } from 'react';
|
|
2
|
+
import is from 'is-lite';
|
|
3
|
+
|
|
4
|
+
import { getReactNodeText } from '~/modules/helpers';
|
|
5
|
+
|
|
6
|
+
import { BeaconProps } from '~/types';
|
|
7
|
+
|
|
8
|
+
export default function JoyrideBeacon(props: BeaconProps) {
|
|
9
|
+
const {
|
|
10
|
+
beaconComponent,
|
|
11
|
+
continuous,
|
|
12
|
+
index,
|
|
13
|
+
isLastStep,
|
|
14
|
+
locale,
|
|
15
|
+
nonce,
|
|
16
|
+
onClickOrHover,
|
|
17
|
+
shouldFocus,
|
|
18
|
+
size,
|
|
19
|
+
step,
|
|
20
|
+
styles,
|
|
21
|
+
} = props;
|
|
22
|
+
const beaconRef = useRef<HTMLElement | null>(null);
|
|
23
|
+
|
|
24
|
+
const setBeaconRef = useCallback((c: HTMLElement | null) => {
|
|
25
|
+
beaconRef.current = c;
|
|
26
|
+
}, []);
|
|
27
|
+
|
|
28
|
+
// Inject beacon animation styles
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
if (beaconComponent) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const head = document.head || document.getElementsByTagName('head')[0];
|
|
35
|
+
const style = document.createElement('style');
|
|
36
|
+
|
|
37
|
+
style.id = 'joyride-beacon-animation';
|
|
38
|
+
|
|
39
|
+
if (nonce) {
|
|
40
|
+
style.setAttribute('nonce', nonce);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const css = `
|
|
44
|
+
@keyframes joyride-beacon-inner {
|
|
45
|
+
20% {
|
|
46
|
+
opacity: 0.9;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
90% {
|
|
50
|
+
opacity: 0.7;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@keyframes joyride-beacon-outer {
|
|
55
|
+
0% {
|
|
56
|
+
transform: scale(1);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
45% {
|
|
60
|
+
opacity: 0.7;
|
|
61
|
+
transform: scale(0.75);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
100% {
|
|
65
|
+
opacity: 0.9;
|
|
66
|
+
transform: scale(1);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
`;
|
|
70
|
+
|
|
71
|
+
style.appendChild(document.createTextNode(css));
|
|
72
|
+
head.appendChild(style);
|
|
73
|
+
|
|
74
|
+
return () => {
|
|
75
|
+
const existingStyle = document.getElementById('joyride-beacon-animation');
|
|
76
|
+
|
|
77
|
+
if (existingStyle?.parentNode) {
|
|
78
|
+
existingStyle.parentNode.removeChild(existingStyle);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
}, [beaconComponent, nonce]);
|
|
82
|
+
|
|
83
|
+
// Focus beacon on mount
|
|
84
|
+
useEffect(() => {
|
|
85
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
86
|
+
if (!is.domElement(beaconRef.current)) {
|
|
87
|
+
console.warn('beacon is not a valid DOM element'); // eslint-disable-line no-console
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
setTimeout(() => {
|
|
92
|
+
if (is.domElement(beaconRef.current) && shouldFocus) {
|
|
93
|
+
beaconRef.current.focus();
|
|
94
|
+
}
|
|
95
|
+
}, 0);
|
|
96
|
+
}, [shouldFocus]);
|
|
97
|
+
|
|
98
|
+
const title = getReactNodeText(locale.open);
|
|
99
|
+
const sharedProps = {
|
|
100
|
+
'aria-label': title,
|
|
101
|
+
onClick: onClickOrHover,
|
|
102
|
+
onMouseEnter: onClickOrHover,
|
|
103
|
+
ref: setBeaconRef,
|
|
104
|
+
title,
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
if (beaconComponent) {
|
|
108
|
+
const BeaconComponent = beaconComponent;
|
|
109
|
+
|
|
110
|
+
return (
|
|
111
|
+
<BeaconComponent
|
|
112
|
+
continuous={continuous}
|
|
113
|
+
index={index}
|
|
114
|
+
isLastStep={isLastStep}
|
|
115
|
+
size={size}
|
|
116
|
+
step={step}
|
|
117
|
+
{...sharedProps}
|
|
118
|
+
/>
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return (
|
|
123
|
+
<button
|
|
124
|
+
key="JoyrideBeacon"
|
|
125
|
+
className="react-joyride__beacon"
|
|
126
|
+
data-test-id="button-beacon"
|
|
127
|
+
style={styles.beacon}
|
|
128
|
+
type="button"
|
|
129
|
+
{...sharedProps}
|
|
130
|
+
>
|
|
131
|
+
<span style={styles.beaconInner} />
|
|
132
|
+
<span style={styles.beaconOuter} />
|
|
133
|
+
</button>
|
|
134
|
+
);
|
|
135
|
+
}
|