UNPKG

41.2 kBSource Map (JSON)View Raw
1{"version":3,"file":"reactjs-popup.esm.js","sources":["../src/hooks.tsx","../src/styles.ts","../src/Utils.ts","../src/index.tsx"],"sourcesContent":["import { useEffect, RefObject, useLayoutEffect } from 'react';\n\nexport const useOnEscape = (\n handler: (event: KeyboardEvent) => void,\n active = true\n) => {\n useEffect(() => {\n if (!active) return;\n const listener = (event: KeyboardEvent) => {\n // check if key is an Escape\n if (event.key === 'Escape') handler(event);\n };\n document.addEventListener('keyup', listener);\n\n return () => {\n if (!active) return;\n document.removeEventListener('keyup', listener);\n };\n }, [handler, active]);\n};\n\nexport const useRepositionOnResize = (handler: () => void, active = true) => {\n useEffect(() => {\n if (!active) return;\n const listener = () => {\n handler();\n };\n\n window.addEventListener('resize', listener);\n\n return () => {\n if (!active) return;\n window.removeEventListener('resize', listener);\n };\n }, [handler, active]);\n};\n\nexport const useOnClickOutside = (\n ref: RefObject<HTMLElement> | RefObject<HTMLElement>[],\n handler: (event: TouchEvent | MouseEvent) => void,\n active = true\n) => {\n useEffect(() => {\n if (!active) return;\n const listener = (event: TouchEvent | MouseEvent) => {\n // Do nothing if clicking ref's element or descendent elements\n const refs = Array.isArray(ref) ? ref : [ref];\n\n let contains = false;\n refs.forEach(r => {\n if (!r.current || r.current.contains(event.target as Node)) {\n contains = true;\n return;\n }\n });\n event.stopPropagation();\n if (!contains) handler(event);\n };\n\n document.addEventListener('mousedown', listener);\n document.addEventListener('touchstart', listener);\n\n return () => {\n if (!active) return;\n document.removeEventListener('mousedown', listener);\n document.removeEventListener('touchstart', listener);\n };\n }, [ref, handler, active]);\n};\n\n// Make sure that user is not able TAB out of the Modal content on Open\nexport const useTabbing = (\n contentRef: RefObject<HTMLElement>,\n active = true\n) => {\n useEffect(() => {\n if (!active) return;\n const listener = (event: KeyboardEvent) => {\n // check if key is an Tab\n if (event.keyCode === 9) {\n const els = contentRef?.current?.querySelectorAll(\n 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), [tabindex=\"0\"]'\n );\n\n const focusableEls = Array.prototype.slice.call(els);\n if (focusableEls.length === 1) {\n event.preventDefault();\n return;\n }\n\n const firstFocusableEl = focusableEls[0];\n const lastFocusableEl = focusableEls[focusableEls.length - 1];\n if (event.shiftKey && document.activeElement === firstFocusableEl) {\n event.preventDefault();\n lastFocusableEl.focus();\n } else if (document.activeElement === lastFocusableEl) {\n event.preventDefault();\n firstFocusableEl.focus();\n }\n }\n };\n\n document.addEventListener('keydown', listener);\n\n return () => {\n if (!active) return;\n document.removeEventListener('keydown', listener);\n };\n }, [contentRef, active]);\n};\n\nexport const useIsomorphicLayoutEffect =\n typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n","import React from 'react';\n\ntype PopupStyle = {\n popupContent: {\n tooltip: React.CSSProperties;\n modal: React.CSSProperties;\n };\n popupArrow: React.CSSProperties;\n overlay: {\n tooltip: React.CSSProperties;\n modal: React.CSSProperties;\n };\n};\n\nconst Style: PopupStyle = {\n popupContent: {\n tooltip: {\n position: 'absolute',\n zIndex: 999,\n },\n modal: {\n position: 'relative',\n margin: 'auto',\n },\n },\n popupArrow: {\n height: '8px',\n width: '16px',\n position: 'absolute',\n background: 'transparent',\n color: '#FFF',\n zIndex: -1,\n },\n overlay: {\n tooltip: {\n position: 'fixed',\n top: '0',\n bottom: '0',\n left: '0',\n right: '0',\n zIndex: 999,\n },\n modal: {\n position: 'fixed',\n top: '0',\n bottom: '0',\n left: '0',\n right: '0',\n display: 'flex',\n zIndex: 999,\n },\n },\n};\n\nexport default Style;\n","/* Algo to calculate position\n 1. center position for popup content : the center of the trigger will be the center of the content content\n so the popup content position will be like this :\n top => the y of the center for the trigger element : trigger.top + trigger.height/2\n left => the x of the center for the trigger element : trigger.left + trigger.width/2\n\n 2. translate position according to the first position attribute passed in the function argument\n for example :\n position = 'left top'\n we need to handle the first argument in the position: 'left' => that's mean we need to translate the popup content according to the X axis by - content.width/2\n\n 3.translate position according to the first position attribute passed in the function argument\n for example :\n position = 'left top'\n the second argument 'top' => translate popup content by + content.height*4/5\n\n 4. check if calculated position is going out of bounds of wrapper box or not. If yes repeat 1-3 for next position enum. By default wrapper box is window element\n*/\nimport { PopupPosition } from './types';\n\nexport const POSITION_TYPES: PopupPosition[] = [\n 'top left',\n 'top center',\n 'top right',\n 'right top',\n 'right center',\n 'right bottom',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n 'left top',\n 'left center',\n 'left bottom',\n //'center center',\n];\n\ntype CordsType = {\n top: number;\n left: number;\n transform: string;\n arrowLeft: string;\n arrowTop: string;\n};\n\nconst getCoordinatesForPosition = (\n triggerBounding: DOMRect,\n ContentBounding: DOMRect,\n position: PopupPosition, //PopupPosition | PopupPosition[],\n arrow: boolean,\n { offsetX, offsetY }: { offsetX: number; offsetY: number }\n): CordsType => {\n const margin = arrow ? 8 : 0;\n const args = position.split(' ');\n // the step N 1 : center the popup content => ok\n const CenterTop = triggerBounding.top + triggerBounding.height / 2;\n const CenterLeft = triggerBounding.left + triggerBounding.width / 2;\n const { height, width } = ContentBounding;\n let top = CenterTop - height / 2;\n let left = CenterLeft - width / 2;\n let transform = '';\n let arrowTop = '0%';\n let arrowLeft = '0%';\n // the step N 2 : => ok\n switch (args[0]) {\n case 'top':\n top -= height / 2 + triggerBounding.height / 2 + margin;\n transform = `rotate(180deg) translateX(50%)`;\n arrowTop = '100%';\n arrowLeft = '50%';\n break;\n case 'bottom':\n top += height / 2 + triggerBounding.height / 2 + margin;\n transform = `rotate(0deg) translateY(-100%) translateX(-50%)`;\n arrowLeft = '50%';\n break;\n case 'left':\n left -= width / 2 + triggerBounding.width / 2 + margin;\n transform = ` rotate(90deg) translateY(50%) translateX(-25%)`;\n arrowLeft = '100%';\n arrowTop = '50%';\n break;\n case 'right':\n left += width / 2 + triggerBounding.width / 2 + margin;\n transform = `rotate(-90deg) translateY(-150%) translateX(25%)`;\n arrowTop = '50%';\n break;\n default:\n }\n switch (args[1]) {\n case 'top':\n top = triggerBounding.top;\n arrowTop = `${triggerBounding.height / 2}px`;\n break;\n case 'bottom':\n top = triggerBounding.top - height + triggerBounding.height;\n arrowTop = `${height - triggerBounding.height / 2}px`;\n break;\n case 'left':\n left = triggerBounding.left;\n arrowLeft = `${triggerBounding.width / 2}px`;\n break;\n case 'right':\n left = triggerBounding.left - width + triggerBounding.width;\n arrowLeft = `${width - triggerBounding.width / 2}px`;\n break;\n default:\n }\n\n top = args[0] === 'top' ? top - offsetY : top + offsetY;\n left = args[0] === 'left' ? left - offsetX : left + offsetX;\n\n return { top, left, transform, arrowLeft, arrowTop };\n};\n\nexport const getTooltipBoundary = (keepTooltipInside: string | Boolean) => {\n // add viewport\n let boundingBox = {\n top: 0,\n left: 0,\n /* eslint-disable-next-line no-undef */\n width: window.innerWidth,\n /* eslint-disable-next-line no-undef */\n height: window.innerHeight,\n };\n if (typeof keepTooltipInside === 'string') {\n /* eslint-disable-next-line no-undef */\n const selector = document.querySelector(keepTooltipInside);\n if (process.env.NODE_ENV !== 'production') {\n if (selector === null)\n throw new Error(\n `${keepTooltipInside} selector does not exist : keepTooltipInside must be a valid html selector 'class' or 'Id' or a boolean value`\n );\n }\n if (selector !== null) boundingBox = selector.getBoundingClientRect();\n }\n\n return boundingBox;\n};\n\nconst calculatePosition = (\n triggerBounding: DOMRect,\n ContentBounding: DOMRect,\n position: PopupPosition | PopupPosition[],\n arrow: boolean,\n { offsetX, offsetY }: { offsetX: number; offsetY: number },\n keepTooltipInside: string | boolean\n): CordsType => {\n let bestCoords: CordsType = {\n arrowLeft: '0%',\n arrowTop: '0%',\n left: 0,\n top: 0,\n transform: 'rotate(135deg)',\n };\n let i = 0;\n const wrapperBox = getTooltipBoundary(keepTooltipInside);\n let positions = Array.isArray(position) ? position : [position];\n\n // keepTooltipInside would be activated if the keepTooltipInside exist or the position is Array\n if (keepTooltipInside || Array.isArray(position))\n positions = [...positions, ...POSITION_TYPES];\n\n // add viewPort for WarpperBox\n // wrapperBox.top = wrapperBox.top + window.scrollY;\n // wrapperBox.left = wrapperBox.left + window.scrollX;\n\n while (i < positions.length) {\n bestCoords = getCoordinatesForPosition(\n triggerBounding,\n ContentBounding,\n positions[i],\n arrow,\n { offsetX, offsetY }\n );\n\n const contentBox = {\n top: bestCoords.top,\n left: bestCoords.left,\n width: ContentBounding.width,\n height: ContentBounding.height,\n };\n\n if (\n contentBox.top <= wrapperBox.top ||\n contentBox.left <= wrapperBox.left ||\n contentBox.top + contentBox.height >=\n wrapperBox.top + wrapperBox.height ||\n contentBox.left + contentBox.width >= wrapperBox.left + wrapperBox.width\n ) {\n i++;\n } else {\n break;\n }\n }\n\n return bestCoords;\n};\n\nexport default calculatePosition;\n","import React, {\n useState,\n useRef,\n useEffect,\n forwardRef,\n useImperativeHandle,\n} from 'react';\nimport ReactDOM from 'react-dom';\nimport { PopupProps, PopupActions } from './types';\nimport {\n useOnEscape,\n useRepositionOnResize,\n useOnClickOutside,\n useTabbing,\n useIsomorphicLayoutEffect,\n} from './hooks';\n\nimport './index.css';\n\nimport styles from './styles';\nimport calculatePosition from './Utils';\n\nlet popupIdCounter = 0;\n\nconst getRootPopup = () => {\n let PopupRoot = document.getElementById('popup-root');\n\n if (PopupRoot === null) {\n PopupRoot = document.createElement('div');\n PopupRoot.setAttribute('id', 'popup-root');\n document.body.appendChild(PopupRoot);\n }\n\n return PopupRoot;\n};\n\nexport const Popup = forwardRef<PopupActions, PopupProps>(\n (\n {\n trigger = null,\n onOpen = () => {},\n onClose = () => {},\n defaultOpen = false,\n open = undefined,\n disabled = false,\n nested = false,\n closeOnDocumentClick = true,\n repositionOnResize = true,\n closeOnEscape = true,\n on = ['click'],\n contentStyle = {},\n arrowStyle = {},\n overlayStyle = {},\n className = '',\n position = 'bottom center',\n modal = false,\n lockScroll = false,\n arrow = true,\n offsetX = 0,\n offsetY = 0,\n mouseEnterDelay = 100,\n mouseLeaveDelay = 100,\n keepTooltipInside = false,\n children,\n },\n ref\n ) => {\n const [isOpen, setIsOpen] = useState<boolean>(open || defaultOpen);\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLElement>(null);\n const arrowRef = useRef<HTMLDivElement>(null);\n const focusedElBeforeOpen = useRef<Element | null>(null);\n const popupId = useRef<string>(`popup-${++popupIdCounter}`);\n\n const isModal = modal ? true : !trigger;\n const timeOut = useRef<any>(0);\n\n useIsomorphicLayoutEffect(() => {\n if (isOpen) {\n focusedElBeforeOpen.current = document.activeElement;\n setPosition();\n focusContentOnOpen(); // for accessibility\n lockScrolll();\n } else {\n resetScroll();\n }\n return () => {\n clearTimeout(timeOut.current);\n };\n }, [isOpen]);\n\n // for uncontrolled popup we need to sync isOpen with open prop\n useEffect(() => {\n if (typeof open === 'boolean') {\n if (open) openPopup();\n else closePopup();\n }\n }, [open, disabled]);\n\n const openPopup = (event?: React.SyntheticEvent) => {\n if (isOpen || disabled) return;\n setIsOpen(true);\n setTimeout(() => onOpen(event), 0);\n };\n\n const closePopup = (\n event?: React.SyntheticEvent | KeyboardEvent | TouchEvent | MouseEvent\n ) => {\n if (!isOpen || disabled) return;\n setIsOpen(false);\n if (isModal) (focusedElBeforeOpen.current as HTMLElement)?.focus();\n setTimeout(() => onClose(event), 0);\n };\n\n const togglePopup = (event?: React.SyntheticEvent) => {\n event?.stopPropagation();\n if (!isOpen) openPopup(event);\n else closePopup(event);\n };\n\n const onMouseEnter = (event?: React.SyntheticEvent) => {\n clearTimeout(timeOut.current);\n timeOut.current = setTimeout(() => openPopup(event), mouseEnterDelay);\n };\n\n const onContextMenu = (event?: React.SyntheticEvent) => {\n event?.preventDefault();\n togglePopup();\n };\n\n const onMouseLeave = (event?: React.SyntheticEvent) => {\n clearTimeout(timeOut.current);\n timeOut.current = setTimeout(() => closePopup(event), mouseLeaveDelay);\n };\n\n const lockScrolll = () => {\n if (isModal && lockScroll)\n document.getElementsByTagName('body')[0].style.overflow = 'hidden'; // migrate to document.body\n };\n\n const resetScroll = () => {\n if (isModal && lockScroll)\n document.getElementsByTagName('body')[0].style.overflow = 'auto';\n };\n const focusContentOnOpen = () => {\n const focusableEls = contentRef?.current?.querySelectorAll(\n 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), [tabindex=\"0\"]'\n );\n const firstEl = Array.prototype.slice.call(focusableEls)[0];\n firstEl?.focus();\n };\n\n useImperativeHandle(ref, () => ({\n open: () => {\n openPopup();\n },\n close: () => {\n closePopup();\n },\n toggle: () => {\n togglePopup();\n },\n }));\n\n // set Position\n const setPosition = () => {\n if (isModal || !isOpen) return;\n if (!triggerRef?.current || !triggerRef?.current || !contentRef?.current)\n return; /// show error as one of ref is undefined\n const trigger = triggerRef.current.getBoundingClientRect();\n const content = contentRef.current.getBoundingClientRect();\n\n const cords = calculatePosition(\n trigger,\n content,\n position,\n arrow,\n {\n offsetX,\n offsetY,\n },\n keepTooltipInside\n );\n contentRef.current.style.top = `${cords.top + window.scrollY}px`;\n contentRef.current.style.left = `${cords.left + window.scrollX}px`;\n if (arrow && !!arrowRef.current) {\n arrowRef.current.style.transform = cords.transform;\n arrowRef.current.style.setProperty('-ms-transform', cords.transform);\n arrowRef.current.style.setProperty(\n '-webkit-transform',\n cords.transform\n );\n arrowRef.current.style.top =\n arrowStyle.top?.toString() || cords.arrowTop;\n arrowRef.current.style.left =\n arrowStyle.left?.toString() || cords.arrowLeft;\n }\n };\n // hooks\n useOnEscape(closePopup, closeOnEscape); // can be optimized if we disabled for hover\n useTabbing(contentRef, isOpen && isModal);\n useRepositionOnResize(setPosition, repositionOnResize);\n useOnClickOutside(\n !!trigger ? [contentRef, triggerRef] : [contentRef],\n closePopup,\n closeOnDocumentClick && !nested\n ); // we need to add a ne\n // render the trigger element and add events\n const renderTrigger = () => {\n const triggerProps: any = {\n key: 'T',\n ref: triggerRef,\n 'aria-describedby': popupId.current,\n };\n const onAsArray = Array.isArray(on) ? on : [on];\n for (let i = 0, len = onAsArray.length; i < len; i++) {\n switch (onAsArray[i]) {\n case 'click':\n triggerProps.onClick = togglePopup;\n break;\n case 'right-click':\n triggerProps.onContextMenu = onContextMenu;\n break;\n case 'hover':\n triggerProps.onMouseEnter = onMouseEnter;\n triggerProps.onMouseLeave = onMouseLeave;\n break;\n case 'focus':\n triggerProps.onFocus = onMouseEnter;\n triggerProps.onBlur = onMouseLeave;\n break;\n default:\n }\n }\n\n if (typeof trigger === 'function') {\n const comp = trigger(isOpen);\n return !!trigger && React.cloneElement(comp, triggerProps);\n }\n\n return !!trigger && React.cloneElement(trigger, triggerProps);\n };\n\n const addWarperAction = () => {\n const popupContentStyle = isModal\n ? styles.popupContent.modal\n : styles.popupContent.tooltip;\n\n const childrenElementProps: any = {\n className: `popup-content ${\n className !== ''\n ? className\n .split(' ')\n .map(c => `${c}-content`)\n .join(' ')\n : ''\n }`,\n style: {\n ...popupContentStyle,\n ...contentStyle,\n pointerEvents: 'auto', //closeOnDocumentClick && nested ? 'auto' : 'none',\n },\n ref: contentRef,\n onClick: (e: any) => {\n e.stopPropagation();\n },\n };\n if (!modal && on.indexOf('hover') >= 0) {\n childrenElementProps.onMouseEnter = onMouseEnter;\n childrenElementProps.onMouseLeave = onMouseLeave;\n }\n return childrenElementProps;\n };\n\n const renderContent = () => {\n return (\n <div\n {...addWarperAction()}\n key=\"C\"\n role={isModal ? 'dialog' : 'tooltip'}\n id={popupId.current}\n >\n {arrow && !isModal && (\n <div ref={arrowRef} style={styles.popupArrow}>\n <svg\n data-testid=\"arrow\"\n className={`popup-arrow ${\n className !== ''\n ? className\n .split(' ')\n .map(c => `${c}-arrow`)\n .join(' ')\n : ''\n }`}\n viewBox=\"0 0 32 16\"\n style={{\n position: 'absolute',\n ...arrowStyle,\n }}\n >\n <path d=\"M16 0l16 16H0z\" fill=\"currentcolor\" />\n </svg>\n </div>\n )}\n {children && typeof children === 'function'\n ? children(closePopup, isOpen)\n : children}\n </div>\n );\n };\n\n const overlay = !(on.indexOf('hover') >= 0);\n const ovStyle = isModal ? styles.overlay.modal : styles.overlay.tooltip;\n\n const content = [\n overlay && (\n <div\n key=\"O\"\n data-testid=\"overlay\"\n data-popup={isModal ? 'modal' : 'tooltip'}\n className={`popup-overlay ${\n className !== ''\n ? className\n .split(' ')\n .map(c => `${c}-overlay`)\n .join(' ')\n : ''\n }`}\n style={{\n ...ovStyle,\n ...overlayStyle,\n pointerEvents:\n (closeOnDocumentClick && nested) || isModal ? 'auto' : 'none',\n }}\n onClick={closeOnDocumentClick && nested ? closePopup : undefined}\n tabIndex={-1}\n >\n {isModal && renderContent()}\n </div>\n ),\n\n !isModal && renderContent(),\n ];\n\n return (\n <>\n {renderTrigger()}\n {isOpen && ReactDOM.createPortal(content, getRootPopup())}\n </>\n );\n }\n);\n\nexport default Popup;\n"],"names":["useOnEscape","handler","active","useEffect","listener","event","key","document","addEventListener","removeEventListener","useRepositionOnResize","window","useOnClickOutside","ref","refs","Array","isArray","contains","forEach","r","current","target","stopPropagation","useTabbing","contentRef","keyCode","els","querySelectorAll","focusableEls","prototype","slice","call","length","preventDefault","firstFocusableEl","lastFocusableEl","shiftKey","activeElement","focus","useIsomorphicLayoutEffect","useLayoutEffect","Style","popupContent","tooltip","position","zIndex","modal","margin","popupArrow","height","width","background","color","overlay","top","bottom","left","right","display","POSITION_TYPES","getCoordinatesForPosition","triggerBounding","ContentBounding","arrow","offsetX","offsetY","args","split","CenterTop","CenterLeft","transform","arrowTop","arrowLeft","getTooltipBoundary","keepTooltipInside","boundingBox","innerWidth","innerHeight","selector","querySelector","process","env","NODE_ENV","Error","getBoundingClientRect","calculatePosition","bestCoords","i","wrapperBox","positions","contentBox","popupIdCounter","getRootPopup","PopupRoot","getElementById","createElement","setAttribute","body","appendChild","Popup","forwardRef","trigger","onOpen","onClose","defaultOpen","open","undefined","disabled","nested","closeOnDocumentClick","repositionOnResize","closeOnEscape","on","contentStyle","arrowStyle","overlayStyle","className","lockScroll","mouseEnterDelay","mouseLeaveDelay","children","useState","isOpen","setIsOpen","triggerRef","useRef","arrowRef","focusedElBeforeOpen","popupId","isModal","timeOut","setPosition","focusContentOnOpen","lockScrolll","resetScroll","clearTimeout","openPopup","closePopup","setTimeout","togglePopup","onMouseEnter","onContextMenu","onMouseLeave","getElementsByTagName","style","overflow","firstEl","useImperativeHandle","close","toggle","content","cords","scrollY","scrollX","setProperty","toString","renderTrigger","triggerProps","onAsArray","len","onClick","onFocus","onBlur","comp","React","cloneElement","addWarperAction","popupContentStyle","styles","childrenElementProps","map","c","join","pointerEvents","e","indexOf","renderContent","role","id","viewBox","d","fill","ovStyle","tabIndex","ReactDOM","createPortal"],"mappings":"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"}
\No newline at end of file