diff --git a/playground/src/pages/CustomExample.tsx b/playground/src/pages/CustomExample.tsx index aaec033..9949d84 100644 --- a/playground/src/pages/CustomExample.tsx +++ b/playground/src/pages/CustomExample.tsx @@ -30,8 +30,10 @@ const Prev: React.FC = ({ goBack }) => ( ); -const Close: React.FC = () => ( - +const Close: React.FC = ({ close, PositionalWrapper }) => ( + + close()} /> + ); const ContentOverride: React.FC = ({ children }) => ( diff --git a/src/ReactGrandTour.tsx b/src/ReactGrandTour.tsx index 940875f..f4785b8 100644 --- a/src/ReactGrandTour.tsx +++ b/src/ReactGrandTour.tsx @@ -10,8 +10,8 @@ import { StepButton, StepButtonWrapper, Step, - Close, EmptyClose, + CloseButton, } from './components'; import ReactGrandTourContext from './Context'; @@ -35,7 +35,7 @@ const ReactGrandTour: React.FC = ({ steps: defaultSteps = [], openAt = 0, scrollIntoViewOptions = { behavior: 'smooth', block: 'center' }, - closeButton = Close, + closeButton = CloseButton, currentStepLabel = CurrentStepLabel, nextStepButton = NextStepButton, previousStepButton = PreviousStepButton, diff --git a/src/components/CloseButton.tsx b/src/components/CloseButton.tsx index de23cca..5e4ce8c 100644 --- a/src/components/CloseButton.tsx +++ b/src/components/CloseButton.tsx @@ -1,17 +1,20 @@ import React from 'react'; import { CloseButtonProps } from '../types'; +import { Close } from '../components/Icons'; -const CloseButton: React.FC = ({ close, children }) => ( - +const CloseButton: React.FC = ({ close, PositionalWrapper }) => ( + + + ); export default CloseButton; diff --git a/src/components/CloseButtonPositionalWrapper.tsx b/src/components/CloseButtonPositionalWrapper.tsx new file mode 100644 index 0000000..dba1b9d --- /dev/null +++ b/src/components/CloseButtonPositionalWrapper.tsx @@ -0,0 +1,7 @@ +import React, { PropsWithChildren } from 'react'; + +const CloseButtonPositionalWrapper: React.FC> = ({ children }) => ( +
{children}
+); + +export default CloseButtonPositionalWrapper; diff --git a/src/components/Modal.tsx b/src/components/Modal.tsx index d9c3305..083e5b1 100644 --- a/src/components/Modal.tsx +++ b/src/components/Modal.tsx @@ -8,6 +8,7 @@ import { } from '../types'; import CloseButton from './CloseButton'; import { isSafari } from '../lib'; +import CloseButtonPositionalWrapper from './CloseButtonPositionalWrapper'; export type ModalProps = Partial & ComponentVisibility & { @@ -30,7 +31,7 @@ const Modal = ({ renderedContent: content, scrollToElement, arrow: Arrow, - closeButton: CloseButtonOverride, + closeButton: CloseButton, currentStepLabel: CurrentStepLabel, dialogWrapper: DialogWrapper, nextStepButton: NextStepButton, @@ -95,13 +96,10 @@ const Modal = ({ ), [allSteps, stepIndex, changeStep, StepButton, StepButtonWrapper], ); + const closeButton = useMemo( - () => ( - - - - ), - [close, CloseButtonOverride], + () => , + [close, CloseButton], ); return ( diff --git a/src/styles.ts b/src/styles.ts index b6ce7f7..8cc544e 100644 --- a/src/styles.ts +++ b/src/styles.ts @@ -111,14 +111,16 @@ const styles = ({ 'flex-wrap': 'wrap', 'align-items': 'center', }, + 'close-button-position': { + position: 'absolute', + top: '12px', + right: '15px', + }, 'close-button': { 'background-color': 'transparent', border: 'none', color: closeButtonColor, cursor: 'pointer', - position: 'absolute', - top: '12px', - right: '15px', ':hover': { color: closeButtonHoverColor, }, diff --git a/src/types.ts b/src/types.ts index 6be0c6c..7d8bbbb 100644 --- a/src/types.ts +++ b/src/types.ts @@ -183,7 +183,11 @@ export type ModalPosition = { export type ArrowDirection = 'up' | 'left' | 'down' | 'right' | null; -export type CloseButtonProps = { close: ReactGrandTourProps['onClose'] }; +export type CloseButtonProps = { + close: ReactGrandTourProps['onClose']; + PositionalWrapper: React.FC>; +}; + export type CurrentStepLabelProps = { currentStep: number; totalSteps: number }; export type NextStepButtonProps = { currentStep: number;