@artsy/palette 46.1.0 → 46.2.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.
|
@@ -7,6 +7,7 @@ exports.Dropdown = void 0;
|
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
9
9
|
var _utils = require("../../utils");
|
|
10
|
+
var _useDidMount = require("../../utils/useDidMount");
|
|
10
11
|
var _usePortal = require("../../utils/usePortal");
|
|
11
12
|
var _Box = require("../Box");
|
|
12
13
|
var _reactFocusOn = require("react-focus-on");
|
|
@@ -220,6 +221,7 @@ const Dropdown = ({
|
|
|
220
221
|
const {
|
|
221
222
|
createPortal
|
|
222
223
|
} = (0, _usePortal.usePortal)();
|
|
224
|
+
const isClient = (0, _useDidMount.useDidMount)();
|
|
223
225
|
const isPointer = !openDropdownByClick && pointerRef.current;
|
|
224
226
|
const focusEnabled = visible && !isPointer;
|
|
225
227
|
const [maxHeight, setMaxHeight] = (0, _react.useState)(0);
|
|
@@ -245,15 +247,9 @@ const Dropdown = ({
|
|
|
245
247
|
window.removeEventListener("scroll", calculate);
|
|
246
248
|
};
|
|
247
249
|
}, [anchorRef, offset, placement, visible]);
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
anchorProps,
|
|
252
|
-
onVisible,
|
|
253
|
-
onHide,
|
|
254
|
-
setVisible,
|
|
255
|
-
visible
|
|
256
|
-
}), (visible || keepInDOM) && createPortal( /*#__PURE__*/(0, _jsxRuntime.jsx)(Container, {
|
|
250
|
+
const dropdownPanel = (0, _react.useMemo)(() => {
|
|
251
|
+
if (!(visible || keepInDOM)) return null;
|
|
252
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Container, {
|
|
257
253
|
"aria-label": "Press escape to close",
|
|
258
254
|
tabIndex: 0,
|
|
259
255
|
ref: panelRef,
|
|
@@ -302,7 +298,18 @@ const Dropdown = ({
|
|
|
302
298
|
})
|
|
303
299
|
})
|
|
304
300
|
})
|
|
305
|
-
})
|
|
301
|
+
});
|
|
302
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
303
|
+
}, [visible, keepInDOM, dropdownZIndex, placement, openDropdownByClick, maxHeight, offset, _transition, transition, translation, focusEnabled, returnFocus, dropdown, padding]);
|
|
304
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
305
|
+
children: [children?.({
|
|
306
|
+
anchorRef: anchorRef,
|
|
307
|
+
anchorProps,
|
|
308
|
+
onVisible,
|
|
309
|
+
onHide,
|
|
310
|
+
setVisible,
|
|
311
|
+
visible
|
|
312
|
+
}), dropdownPanel && (!isClient && keepInDOM ? dropdownPanel : createPortal(dropdownPanel))]
|
|
306
313
|
});
|
|
307
314
|
};
|
|
308
315
|
exports.Dropdown = Dropdown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dropdown.js","names":["_react","_interopRequireWildcard","require","_styledComponents","_interopRequireDefault","_utils","_usePortal","_Box","_reactFocusOn","_themeGet","_esToolkit","_jsxRuntime","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","Dropdown","placement","visible","_visible","keepInDOM","children","offset","dropdown","dropdownZIndex","openDropdownByClick","transition","_transition","flip","returnFocus","delay","rest","setVisible","useState","useEffect","timeoutRef","useRef","setVisibility","useCallback","isPointer","defaultDelay","finalDelay","current","clearTimeout","setTimeout","activeRef","pointerRef","onVisible","onHide","onToggleVisibility","anchorRef","tooltipRef","panelRef","state","isFlipped","usePosition","position","active","padding","handleKeyDown","event","handleKeyUp","document","activeElement","contains","handleClick","target","tagName","toLowerCase","isClosableElement","element","closest","addEventListener","removeEventListener","handleMouseEnter","handleMouseLeave","setTransition","requestAnimationFrame","translation","useMemo","handlePointerVisible","handlePointerHide","anchorProps","onClick","onMouseEnter","onMouseLeave","createPortal","usePortal","focusEnabled","maxHeight","setMaxHeight","calculate","debounce","nextMaxHeight","calculateMaxHeight","anchorRect","getBoundingClientRect","window","passive","jsxs","Fragment","jsx","Container","tabIndex","ref","zIndex","display","style","visibility","Panel","opacity","transform","FocusOn","noIsolation","enabled","onClickOutside","Pane","exports","styled","Box","withConfig","displayName","componentId","themeGet"],"sources":["../../../../src/elements/Dropdown/Dropdown.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\"\nimport styled from \"styled-components\"\nimport { calculateMaxHeight, Position, usePosition } from \"../../utils\"\nimport { usePortal } from \"../../utils/usePortal\"\nimport { Box, BoxProps } from \"../Box\"\nimport { FocusOn } from \"react-focus-on\"\nimport { themeGet } from \"@styled-system/theme-get\"\nimport { debounce } from \"es-toolkit\"\n\nexport interface DropdownActions {\n /** Call to show dropdown */\n onVisible(): void\n /** Call to hide dropdown */\n onHide(): void\n /** Manipulate visible directly */\n setVisible(value: boolean): void\n /** Pass ref to element you want the dropdown to be anchored to */\n anchorRef: React.MutableRefObject<HTMLElement>\n /** Spread props on element you want the dropdown to be anchored to */\n anchorProps: React.HTMLAttributes<HTMLElement>\n /** Whether or not the dropdown is visible */\n visible: boolean\n}\n\ntype Children =\n | React.ReactNode\n | ((dropdownActions: DropdownActions) => React.ReactNode)\n\nexport interface DropdownProps extends Omit<BoxProps, \"children\"> {\n placement?: Position\n /** Intially visible by default? */\n visible?: boolean\n /** Whether or not we should animate the dropdown transition */\n transition?: boolean\n dropdown:\n | React.ReactNode\n | ((\n dropdownActions: Pick<\n DropdownActions,\n \"onHide\" | \"onVisible\" | \"setVisible\" | \"visible\"\n >\n ) => void)\n /** Custom zIndex to assign to the dropdown panel */\n dropdownZIndex?: number\n /** Distance in pixels from anchor */\n offset?: number\n /** Should the dropdown panel always be present in the DOM (vs removed when invisible) */\n keepInDOM?: boolean\n openDropdownByClick?: boolean\n children: Children\n /** Optionally disable flipping (default: `true`) */\n flip?: boolean\n /** Whether to return focus to the previous element when the dropdown closes (default: `true`) */\n returnFocus?: boolean\n /** Delay in milliseconds before showing the dropdown on hover (ignored when openDropdownByClick is true) */\n delay?: number\n}\n\n/**\n * A `Dropdown` is a small modal-type element which is anchored, and can be\n * positioned relative to, another element and designed to be transitioned in on hover or on click.\n */\nexport const Dropdown = ({\n placement = \"bottom\",\n visible: _visible = false,\n keepInDOM,\n children,\n offset = 10,\n dropdown,\n dropdownZIndex = 1,\n openDropdownByClick,\n transition: _transition = true,\n flip = true,\n returnFocus = true,\n delay = 0,\n ...rest\n}: DropdownProps) => {\n const [visible, setVisible] = useState(false)\n\n // If prop updates/set initial visibility.\n useEffect(() => {\n setVisible(_visible)\n }, [_visible])\n\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // We need to keep the pointer state in sync with the visibility state, else we\n // wind up with focus isolation out of sync.\n const setVisibility = useCallback(\n ({\n visible,\n isPointer = false,\n }: {\n visible: boolean\n isPointer?: boolean\n }) => {\n // Use custom delay when opening via pointer interaction (hover), but only if not using click mode\n const defaultDelay = _transition ? (visible ? 50 : 150) : visible ? 1 : 50\n const finalDelay =\n visible && isPointer && !openDropdownByClick ? delay : defaultDelay\n\n timeoutRef.current && clearTimeout(timeoutRef.current)\n timeoutRef.current = setTimeout(() => {\n if (!visible && activeRef.current) return\n pointerRef.current = isPointer\n setVisible(visible)\n }, finalDelay)\n },\n [_transition, delay, openDropdownByClick]\n )\n\n const onVisible = () => {\n setVisibility({ visible: true })\n }\n\n const onHide = useCallback(() => {\n setVisibility({ visible: false })\n }, [setVisibility])\n\n const onToggleVisibility = () => {\n if (visible) {\n return onHide()\n }\n\n onVisible()\n }\n\n const {\n anchorRef,\n tooltipRef: panelRef,\n state: { isFlipped },\n } = usePosition({\n position: placement,\n offset: 0,\n active: visible,\n flip,\n padding: offset,\n })\n\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onHide()\n }\n }\n\n // Close dropdown when focus leaves element\n const handleKeyUp = (event: KeyboardEvent) => {\n if (!panelRef.current) return\n\n if (\n event.key === \"Tab\" &&\n !(\n panelRef.current === document.activeElement ||\n panelRef.current.contains(document.activeElement)\n )\n ) {\n onHide()\n }\n }\n\n const handleClick = (event: MouseEvent) => {\n if (!panelRef.current || !openDropdownByClick) return\n const target = event.target as Element\n const tagName = target.tagName.toLowerCase()\n let isClosableElement = tagName === \"a\"\n let element: Element | null = target\n\n // Find parent link element\n if (!isClosableElement) {\n element = target.closest(\"a\")\n isClosableElement = !!element\n }\n\n if (isClosableElement && element && panelRef.current.contains(element)) {\n onHide()\n }\n }\n\n document.addEventListener(\"keydown\", handleKeyDown)\n document.addEventListener(\"keyup\", handleKeyUp)\n document.addEventListener(\"click\", handleClick)\n\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown)\n document.removeEventListener(\"keyup\", handleKeyUp)\n document.removeEventListener(\"click\", handleClick)\n }\n }, [panelRef, openDropdownByClick, onHide])\n\n const activeRef = useRef(false)\n\n const handleMouseEnter = () => {\n activeRef.current = true\n }\n\n const handleMouseLeave = () => {\n activeRef.current = false\n onHide()\n }\n\n const [transition, setTransition] = useState(false)\n\n // Wait for next tick so that animation runs\n useEffect(() => {\n requestAnimationFrame(() => {\n setTransition(visible)\n })\n }, [visible])\n\n const translation = useMemo(() => {\n switch (placement) {\n case \"top-start\":\n case \"top\":\n case \"top-end\":\n return `translateY(10px)`\n case \"bottom-start\":\n case \"bottom\":\n case \"bottom-end\":\n return `translateY(-10px)`\n case \"left-start\":\n case \"left\":\n case \"left-end\":\n return `translateX(10px)`\n case \"right-start\":\n case \"right\":\n case \"right-end\":\n return `translateX(-10px)`\n }\n }, [placement])\n\n // Fills offset gap between anchor and panel to prevent mouseout\n const padding = useMemo(() => {\n switch (placement) {\n case \"top-start\":\n case \"top\":\n case \"top-end\":\n return { [isFlipped ? \"pt\" : \"pb\"]: offset }\n case \"bottom-start\":\n case \"bottom\":\n case \"bottom-end\":\n return { [isFlipped ? \"pb\" : \"pt\"]: offset }\n case \"left-start\":\n case \"left\":\n case \"left-end\":\n return { [isFlipped ? \"pl\" : \"pr\"]: offset }\n case \"right-start\":\n case \"right\":\n case \"right-end\":\n return { [isFlipped ? \"pr\" : \"pl\"]: offset }\n }\n }, [placement, isFlipped, offset])\n\n const pointerRef = useRef(false)\n\n const handlePointerVisible = () => {\n setVisibility({ visible: true, isPointer: true })\n }\n\n const handlePointerHide = () => {\n setVisibility({ visible: false, isPointer: false })\n }\n\n const anchorProps: React.HTMLAttributes<HTMLElement> = {\n \"aria-expanded\": visible,\n \"aria-haspopup\": true,\n ...(openDropdownByClick\n ? {\n onClick: onToggleVisibility,\n }\n : {\n onMouseEnter: handlePointerVisible,\n onMouseLeave: handlePointerHide,\n onClick: onVisible,\n }),\n }\n\n const { createPortal } = usePortal()\n\n const isPointer = !openDropdownByClick && pointerRef.current\n const focusEnabled = visible && !isPointer\n\n const [maxHeight, setMaxHeight] = useState(0)\n\n useEffect(() => {\n const calculate = debounce(() => {\n if (!anchorRef.current) return\n\n const nextMaxHeight = calculateMaxHeight({\n anchorRect: anchorRef.current.getBoundingClientRect(),\n position: placement,\n offset,\n })\n\n setMaxHeight(nextMaxHeight)\n }, 500)\n\n window.addEventListener(\"resize\", calculate, { passive: true })\n window.addEventListener(\"scroll\", calculate, { passive: true })\n calculate()\n\n return () => {\n window.removeEventListener(\"resize\", calculate)\n window.removeEventListener(\"scroll\", calculate)\n }\n }, [anchorRef, offset, placement, visible])\n\n return (\n <>\n {(children as any)?.({\n anchorRef: anchorRef as any,\n anchorProps,\n onVisible,\n onHide,\n setVisible,\n visible,\n })}\n\n {(visible || keepInDOM) &&\n createPortal(\n <Container\n aria-label=\"Press escape to close\"\n tabIndex={0}\n ref={panelRef as any}\n zIndex={dropdownZIndex}\n display=\"inline-block\"\n placement={placement}\n style={{\n ...(keepInDOM\n ? { visibility: visible ? \"visible\" : \"hidden\" }\n : {}),\n }}\n {...(openDropdownByClick\n ? {}\n : {\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n })}\n maxHeight={maxHeight + offset}\n {...padding}\n {...rest}\n >\n <Panel\n transition={_transition}\n maxHeight={maxHeight}\n style={\n transition\n ? // In\n { opacity: 1, transform: \"translate(0)\" }\n : // Out\n {\n opacity: 0,\n transform: translation,\n }\n }\n >\n <FocusOn\n noIsolation\n enabled={focusEnabled}\n onClickOutside={onHide}\n returnFocus={returnFocus}\n >\n <Pane maxHeight={maxHeight}>\n {typeof dropdown === \"function\"\n ? (dropdown as any)({\n onVisible,\n onHide,\n setVisible,\n visible,\n })\n : dropdown}\n </Pane>\n </FocusOn>\n </Panel>\n </Container>\n )}\n </>\n )\n}\n\nconst Container = styled(Box)<{ placement: Position } & BoxProps>`\n position: fixed;\n text-align: left;\n outline: 0;\n`\n\nconst Panel = styled(Box)<{ transition: boolean; maxHeight: number }>`\n transition: ${({ transition }) =>\n transition ? \"opacity 250ms ease-out, transform 250ms ease-out\" : \"none\"};\n`\n\nconst Pane = styled(Box)`\n > div {\n max-height: ${({ maxHeight }) => (maxHeight ? `${maxHeight}px` : \"100vh\")};\n box-shadow: ${themeGet(\"effects.flatShadow\")};\n background-color: ${themeGet(\"colors.mono0\")};\n border: 1px solid ${themeGet(\"colors.mono10\")};\n overflow-y: auto;\n }\n`\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Dropdown.js","names":["_react","_interopRequireWildcard","require","_styledComponents","_interopRequireDefault","_utils","_useDidMount","_usePortal","_Box","_reactFocusOn","_themeGet","_esToolkit","_jsxRuntime","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","Dropdown","placement","visible","_visible","keepInDOM","children","offset","dropdown","dropdownZIndex","openDropdownByClick","transition","_transition","flip","returnFocus","delay","rest","setVisible","useState","useEffect","timeoutRef","useRef","setVisibility","useCallback","isPointer","defaultDelay","finalDelay","current","clearTimeout","setTimeout","activeRef","pointerRef","onVisible","onHide","onToggleVisibility","anchorRef","tooltipRef","panelRef","state","isFlipped","usePosition","position","active","padding","handleKeyDown","event","handleKeyUp","document","activeElement","contains","handleClick","target","tagName","toLowerCase","isClosableElement","element","closest","addEventListener","removeEventListener","handleMouseEnter","handleMouseLeave","setTransition","requestAnimationFrame","translation","useMemo","handlePointerVisible","handlePointerHide","anchorProps","onClick","onMouseEnter","onMouseLeave","createPortal","usePortal","isClient","useDidMount","focusEnabled","maxHeight","setMaxHeight","calculate","debounce","nextMaxHeight","calculateMaxHeight","anchorRect","getBoundingClientRect","window","passive","dropdownPanel","jsx","Container","tabIndex","ref","zIndex","display","style","visibility","Panel","opacity","transform","FocusOn","noIsolation","enabled","onClickOutside","Pane","jsxs","Fragment","exports","styled","Box","withConfig","displayName","componentId","themeGet"],"sources":["../../../../src/elements/Dropdown/Dropdown.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\"\nimport styled from \"styled-components\"\nimport { calculateMaxHeight, Position, usePosition } from \"../../utils\"\nimport { useDidMount } from \"../../utils/useDidMount\"\nimport { usePortal } from \"../../utils/usePortal\"\nimport { Box, BoxProps } from \"../Box\"\nimport { FocusOn } from \"react-focus-on\"\nimport { themeGet } from \"@styled-system/theme-get\"\nimport { debounce } from \"es-toolkit\"\n\nexport interface DropdownActions {\n /** Call to show dropdown */\n onVisible(): void\n /** Call to hide dropdown */\n onHide(): void\n /** Manipulate visible directly */\n setVisible(value: boolean): void\n /** Pass ref to element you want the dropdown to be anchored to */\n anchorRef: React.MutableRefObject<HTMLElement>\n /** Spread props on element you want the dropdown to be anchored to */\n anchorProps: React.HTMLAttributes<HTMLElement>\n /** Whether or not the dropdown is visible */\n visible: boolean\n}\n\ntype Children =\n | React.ReactNode\n | ((dropdownActions: DropdownActions) => React.ReactNode)\n\nexport interface DropdownProps extends Omit<BoxProps, \"children\"> {\n placement?: Position\n /** Intially visible by default? */\n visible?: boolean\n /** Whether or not we should animate the dropdown transition */\n transition?: boolean\n dropdown:\n | React.ReactNode\n | ((\n dropdownActions: Pick<\n DropdownActions,\n \"onHide\" | \"onVisible\" | \"setVisible\" | \"visible\"\n >\n ) => void)\n /** Custom zIndex to assign to the dropdown panel */\n dropdownZIndex?: number\n /** Distance in pixels from anchor */\n offset?: number\n /** Should the dropdown panel always be present in the DOM (vs removed when invisible) */\n keepInDOM?: boolean\n openDropdownByClick?: boolean\n children: Children\n /** Optionally disable flipping (default: `true`) */\n flip?: boolean\n /** Whether to return focus to the previous element when the dropdown closes (default: `true`) */\n returnFocus?: boolean\n /** Delay in milliseconds before showing the dropdown on hover (ignored when openDropdownByClick is true) */\n delay?: number\n}\n\n/**\n * A `Dropdown` is a small modal-type element which is anchored, and can be\n * positioned relative to, another element and designed to be transitioned in on hover or on click.\n */\nexport const Dropdown = ({\n placement = \"bottom\",\n visible: _visible = false,\n keepInDOM,\n children,\n offset = 10,\n dropdown,\n dropdownZIndex = 1,\n openDropdownByClick,\n transition: _transition = true,\n flip = true,\n returnFocus = true,\n delay = 0,\n ...rest\n}: DropdownProps) => {\n const [visible, setVisible] = useState(false)\n\n // If prop updates/set initial visibility.\n useEffect(() => {\n setVisible(_visible)\n }, [_visible])\n\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // We need to keep the pointer state in sync with the visibility state, else we\n // wind up with focus isolation out of sync.\n const setVisibility = useCallback(\n ({\n visible,\n isPointer = false,\n }: {\n visible: boolean\n isPointer?: boolean\n }) => {\n // Use custom delay when opening via pointer interaction (hover), but only if not using click mode\n const defaultDelay = _transition ? (visible ? 50 : 150) : visible ? 1 : 50\n const finalDelay =\n visible && isPointer && !openDropdownByClick ? delay : defaultDelay\n\n timeoutRef.current && clearTimeout(timeoutRef.current)\n timeoutRef.current = setTimeout(() => {\n if (!visible && activeRef.current) return\n pointerRef.current = isPointer\n setVisible(visible)\n }, finalDelay)\n },\n [_transition, delay, openDropdownByClick]\n )\n\n const onVisible = () => {\n setVisibility({ visible: true })\n }\n\n const onHide = useCallback(() => {\n setVisibility({ visible: false })\n }, [setVisibility])\n\n const onToggleVisibility = () => {\n if (visible) {\n return onHide()\n }\n\n onVisible()\n }\n\n const {\n anchorRef,\n tooltipRef: panelRef,\n state: { isFlipped },\n } = usePosition({\n position: placement,\n offset: 0,\n active: visible,\n flip,\n padding: offset,\n })\n\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onHide()\n }\n }\n\n // Close dropdown when focus leaves element\n const handleKeyUp = (event: KeyboardEvent) => {\n if (!panelRef.current) return\n\n if (\n event.key === \"Tab\" &&\n !(\n panelRef.current === document.activeElement ||\n panelRef.current.contains(document.activeElement)\n )\n ) {\n onHide()\n }\n }\n\n const handleClick = (event: MouseEvent) => {\n if (!panelRef.current || !openDropdownByClick) return\n const target = event.target as Element\n const tagName = target.tagName.toLowerCase()\n let isClosableElement = tagName === \"a\"\n let element: Element | null = target\n\n // Find parent link element\n if (!isClosableElement) {\n element = target.closest(\"a\")\n isClosableElement = !!element\n }\n\n if (isClosableElement && element && panelRef.current.contains(element)) {\n onHide()\n }\n }\n\n document.addEventListener(\"keydown\", handleKeyDown)\n document.addEventListener(\"keyup\", handleKeyUp)\n document.addEventListener(\"click\", handleClick)\n\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown)\n document.removeEventListener(\"keyup\", handleKeyUp)\n document.removeEventListener(\"click\", handleClick)\n }\n }, [panelRef, openDropdownByClick, onHide])\n\n const activeRef = useRef(false)\n\n const handleMouseEnter = () => {\n activeRef.current = true\n }\n\n const handleMouseLeave = () => {\n activeRef.current = false\n onHide()\n }\n\n const [transition, setTransition] = useState(false)\n\n // Wait for next tick so that animation runs\n useEffect(() => {\n requestAnimationFrame(() => {\n setTransition(visible)\n })\n }, [visible])\n\n const translation = useMemo(() => {\n switch (placement) {\n case \"top-start\":\n case \"top\":\n case \"top-end\":\n return `translateY(10px)`\n case \"bottom-start\":\n case \"bottom\":\n case \"bottom-end\":\n return `translateY(-10px)`\n case \"left-start\":\n case \"left\":\n case \"left-end\":\n return `translateX(10px)`\n case \"right-start\":\n case \"right\":\n case \"right-end\":\n return `translateX(-10px)`\n }\n }, [placement])\n\n // Fills offset gap between anchor and panel to prevent mouseout\n const padding = useMemo(() => {\n switch (placement) {\n case \"top-start\":\n case \"top\":\n case \"top-end\":\n return { [isFlipped ? \"pt\" : \"pb\"]: offset }\n case \"bottom-start\":\n case \"bottom\":\n case \"bottom-end\":\n return { [isFlipped ? \"pb\" : \"pt\"]: offset }\n case \"left-start\":\n case \"left\":\n case \"left-end\":\n return { [isFlipped ? \"pl\" : \"pr\"]: offset }\n case \"right-start\":\n case \"right\":\n case \"right-end\":\n return { [isFlipped ? \"pr\" : \"pl\"]: offset }\n }\n }, [placement, isFlipped, offset])\n\n const pointerRef = useRef(false)\n\n const handlePointerVisible = () => {\n setVisibility({ visible: true, isPointer: true })\n }\n\n const handlePointerHide = () => {\n setVisibility({ visible: false, isPointer: false })\n }\n\n const anchorProps: React.HTMLAttributes<HTMLElement> = {\n \"aria-expanded\": visible,\n \"aria-haspopup\": true,\n ...(openDropdownByClick\n ? {\n onClick: onToggleVisibility,\n }\n : {\n onMouseEnter: handlePointerVisible,\n onMouseLeave: handlePointerHide,\n onClick: onVisible,\n }),\n }\n\n const { createPortal } = usePortal()\n const isClient = useDidMount()\n\n const isPointer = !openDropdownByClick && pointerRef.current\n const focusEnabled = visible && !isPointer\n\n const [maxHeight, setMaxHeight] = useState(0)\n\n useEffect(() => {\n const calculate = debounce(() => {\n if (!anchorRef.current) return\n\n const nextMaxHeight = calculateMaxHeight({\n anchorRect: anchorRef.current.getBoundingClientRect(),\n position: placement,\n offset,\n })\n\n setMaxHeight(nextMaxHeight)\n }, 500)\n\n window.addEventListener(\"resize\", calculate, { passive: true })\n window.addEventListener(\"scroll\", calculate, { passive: true })\n calculate()\n\n return () => {\n window.removeEventListener(\"resize\", calculate)\n window.removeEventListener(\"scroll\", calculate)\n }\n }, [anchorRef, offset, placement, visible])\n\n const dropdownPanel = useMemo(() => {\n if (!(visible || keepInDOM)) return null\n\n return (\n <Container\n aria-label=\"Press escape to close\"\n tabIndex={0}\n ref={panelRef as any}\n zIndex={dropdownZIndex}\n display=\"inline-block\"\n placement={placement}\n style={{\n ...(keepInDOM ? { visibility: visible ? \"visible\" : \"hidden\" } : {}),\n }}\n {...(openDropdownByClick\n ? {}\n : { onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave })}\n maxHeight={maxHeight + offset}\n {...padding}\n {...rest}\n >\n <Panel\n transition={_transition}\n maxHeight={maxHeight}\n style={\n transition\n ? // In\n { opacity: 1, transform: \"translate(0)\" }\n : // Out\n { opacity: 0, transform: translation }\n }\n >\n <FocusOn\n noIsolation\n enabled={focusEnabled}\n onClickOutside={onHide}\n returnFocus={returnFocus}\n >\n <Pane maxHeight={maxHeight}>\n {typeof dropdown === \"function\"\n ? (dropdown as any)({\n onVisible,\n onHide,\n setVisible,\n visible,\n })\n : dropdown}\n </Pane>\n </FocusOn>\n </Panel>\n </Container>\n )\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n visible,\n keepInDOM,\n dropdownZIndex,\n placement,\n openDropdownByClick,\n maxHeight,\n offset,\n _transition,\n transition,\n translation,\n focusEnabled,\n returnFocus,\n dropdown,\n padding,\n ])\n\n return (\n <>\n {(children as any)?.({\n anchorRef: anchorRef as any,\n anchorProps,\n onVisible,\n onHide,\n setVisible,\n visible,\n })}\n\n {/* During SSR, `createPortal` returns null because the DOM isn't available.\n When `keepInDOM` is true, render directly in the tree so the content\n is present in the server-rendered HTML. After hydration, it moves to a portal. */}\n {dropdownPanel &&\n (!isClient && keepInDOM ? dropdownPanel : createPortal(dropdownPanel))}\n </>\n )\n}\n\nconst Container = styled(Box)<{ placement: Position } & BoxProps>`\n position: fixed;\n text-align: left;\n outline: 0;\n`\n\nconst Panel = styled(Box)<{ transition: boolean; maxHeight: number }>`\n transition: ${({ transition }) =>\n transition ? \"opacity 250ms ease-out, transform 250ms ease-out\" : \"none\"};\n`\n\nconst Pane = styled(Box)`\n > div {\n max-height: ${({ maxHeight }) => (maxHeight ? `${maxHeight}px` : \"100vh\")};\n box-shadow: ${themeGet(\"effects.flatShadow\")};\n background-color: ${themeGet(\"colors.mono0\")};\n border: 1px solid ${themeGet(\"colors.mono10\")};\n overflow-y: auto;\n }\n`\n"],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
2
2
|
import styled from "styled-components";
|
|
3
3
|
import { calculateMaxHeight, usePosition } from "../../utils";
|
|
4
|
+
import { useDidMount } from "../../utils/useDidMount";
|
|
4
5
|
import { usePortal } from "../../utils/usePortal";
|
|
5
6
|
import { Box } from "../Box";
|
|
6
7
|
import { FocusOn } from "react-focus-on";
|
|
@@ -211,6 +212,7 @@ export const Dropdown = ({
|
|
|
211
212
|
const {
|
|
212
213
|
createPortal
|
|
213
214
|
} = usePortal();
|
|
215
|
+
const isClient = useDidMount();
|
|
214
216
|
const isPointer = !openDropdownByClick && pointerRef.current;
|
|
215
217
|
const focusEnabled = visible && !isPointer;
|
|
216
218
|
const [maxHeight, setMaxHeight] = useState(0);
|
|
@@ -236,15 +238,9 @@ export const Dropdown = ({
|
|
|
236
238
|
window.removeEventListener("scroll", calculate);
|
|
237
239
|
};
|
|
238
240
|
}, [anchorRef, offset, placement, visible]);
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
anchorProps,
|
|
243
|
-
onVisible,
|
|
244
|
-
onHide,
|
|
245
|
-
setVisible,
|
|
246
|
-
visible
|
|
247
|
-
}), (visible || keepInDOM) && createPortal( /*#__PURE__*/_jsx(Container, {
|
|
241
|
+
const dropdownPanel = useMemo(() => {
|
|
242
|
+
if (!(visible || keepInDOM)) return null;
|
|
243
|
+
return /*#__PURE__*/_jsx(Container, {
|
|
248
244
|
"aria-label": "Press escape to close",
|
|
249
245
|
tabIndex: 0,
|
|
250
246
|
ref: panelRef,
|
|
@@ -293,7 +289,18 @@ export const Dropdown = ({
|
|
|
293
289
|
})
|
|
294
290
|
})
|
|
295
291
|
})
|
|
296
|
-
})
|
|
292
|
+
});
|
|
293
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
294
|
+
}, [visible, keepInDOM, dropdownZIndex, placement, openDropdownByClick, maxHeight, offset, _transition, transition, translation, focusEnabled, returnFocus, dropdown, padding]);
|
|
295
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
296
|
+
children: [children?.({
|
|
297
|
+
anchorRef: anchorRef,
|
|
298
|
+
anchorProps,
|
|
299
|
+
onVisible,
|
|
300
|
+
onHide,
|
|
301
|
+
setVisible,
|
|
302
|
+
visible
|
|
303
|
+
}), dropdownPanel && (!isClient && keepInDOM ? dropdownPanel : createPortal(dropdownPanel))]
|
|
297
304
|
});
|
|
298
305
|
};
|
|
299
306
|
const Container = styled(Box).withConfig({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dropdown.js","names":["React","useCallback","useEffect","useMemo","useRef","useState","styled","calculateMaxHeight","usePosition","usePortal","Box","FocusOn","themeGet","debounce","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","Dropdown","placement","visible","_visible","keepInDOM","children","offset","dropdown","dropdownZIndex","openDropdownByClick","transition","_transition","flip","returnFocus","delay","rest","setVisible","timeoutRef","setVisibility","isPointer","defaultDelay","finalDelay","current","clearTimeout","setTimeout","activeRef","pointerRef","onVisible","onHide","onToggleVisibility","anchorRef","tooltipRef","panelRef","state","isFlipped","position","active","padding","handleKeyDown","event","key","handleKeyUp","document","activeElement","contains","handleClick","target","tagName","toLowerCase","isClosableElement","element","closest","addEventListener","removeEventListener","handleMouseEnter","handleMouseLeave","setTransition","requestAnimationFrame","translation","handlePointerVisible","handlePointerHide","anchorProps","onClick","onMouseEnter","onMouseLeave","createPortal","focusEnabled","maxHeight","setMaxHeight","calculate","nextMaxHeight","anchorRect","getBoundingClientRect","window","passive","Container","tabIndex","ref","zIndex","display","style","visibility","Panel","opacity","transform","noIsolation","enabled","onClickOutside","Pane","withConfig","displayName","componentId"],"sources":["../../../../src/elements/Dropdown/Dropdown.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\"\nimport styled from \"styled-components\"\nimport { calculateMaxHeight, Position, usePosition } from \"../../utils\"\nimport { usePortal } from \"../../utils/usePortal\"\nimport { Box, BoxProps } from \"../Box\"\nimport { FocusOn } from \"react-focus-on\"\nimport { themeGet } from \"@styled-system/theme-get\"\nimport { debounce } from \"es-toolkit\"\n\nexport interface DropdownActions {\n /** Call to show dropdown */\n onVisible(): void\n /** Call to hide dropdown */\n onHide(): void\n /** Manipulate visible directly */\n setVisible(value: boolean): void\n /** Pass ref to element you want the dropdown to be anchored to */\n anchorRef: React.MutableRefObject<HTMLElement>\n /** Spread props on element you want the dropdown to be anchored to */\n anchorProps: React.HTMLAttributes<HTMLElement>\n /** Whether or not the dropdown is visible */\n visible: boolean\n}\n\ntype Children =\n | React.ReactNode\n | ((dropdownActions: DropdownActions) => React.ReactNode)\n\nexport interface DropdownProps extends Omit<BoxProps, \"children\"> {\n placement?: Position\n /** Intially visible by default? */\n visible?: boolean\n /** Whether or not we should animate the dropdown transition */\n transition?: boolean\n dropdown:\n | React.ReactNode\n | ((\n dropdownActions: Pick<\n DropdownActions,\n \"onHide\" | \"onVisible\" | \"setVisible\" | \"visible\"\n >\n ) => void)\n /** Custom zIndex to assign to the dropdown panel */\n dropdownZIndex?: number\n /** Distance in pixels from anchor */\n offset?: number\n /** Should the dropdown panel always be present in the DOM (vs removed when invisible) */\n keepInDOM?: boolean\n openDropdownByClick?: boolean\n children: Children\n /** Optionally disable flipping (default: `true`) */\n flip?: boolean\n /** Whether to return focus to the previous element when the dropdown closes (default: `true`) */\n returnFocus?: boolean\n /** Delay in milliseconds before showing the dropdown on hover (ignored when openDropdownByClick is true) */\n delay?: number\n}\n\n/**\n * A `Dropdown` is a small modal-type element which is anchored, and can be\n * positioned relative to, another element and designed to be transitioned in on hover or on click.\n */\nexport const Dropdown = ({\n placement = \"bottom\",\n visible: _visible = false,\n keepInDOM,\n children,\n offset = 10,\n dropdown,\n dropdownZIndex = 1,\n openDropdownByClick,\n transition: _transition = true,\n flip = true,\n returnFocus = true,\n delay = 0,\n ...rest\n}: DropdownProps) => {\n const [visible, setVisible] = useState(false)\n\n // If prop updates/set initial visibility.\n useEffect(() => {\n setVisible(_visible)\n }, [_visible])\n\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // We need to keep the pointer state in sync with the visibility state, else we\n // wind up with focus isolation out of sync.\n const setVisibility = useCallback(\n ({\n visible,\n isPointer = false,\n }: {\n visible: boolean\n isPointer?: boolean\n }) => {\n // Use custom delay when opening via pointer interaction (hover), but only if not using click mode\n const defaultDelay = _transition ? (visible ? 50 : 150) : visible ? 1 : 50\n const finalDelay =\n visible && isPointer && !openDropdownByClick ? delay : defaultDelay\n\n timeoutRef.current && clearTimeout(timeoutRef.current)\n timeoutRef.current = setTimeout(() => {\n if (!visible && activeRef.current) return\n pointerRef.current = isPointer\n setVisible(visible)\n }, finalDelay)\n },\n [_transition, delay, openDropdownByClick]\n )\n\n const onVisible = () => {\n setVisibility({ visible: true })\n }\n\n const onHide = useCallback(() => {\n setVisibility({ visible: false })\n }, [setVisibility])\n\n const onToggleVisibility = () => {\n if (visible) {\n return onHide()\n }\n\n onVisible()\n }\n\n const {\n anchorRef,\n tooltipRef: panelRef,\n state: { isFlipped },\n } = usePosition({\n position: placement,\n offset: 0,\n active: visible,\n flip,\n padding: offset,\n })\n\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onHide()\n }\n }\n\n // Close dropdown when focus leaves element\n const handleKeyUp = (event: KeyboardEvent) => {\n if (!panelRef.current) return\n\n if (\n event.key === \"Tab\" &&\n !(\n panelRef.current === document.activeElement ||\n panelRef.current.contains(document.activeElement)\n )\n ) {\n onHide()\n }\n }\n\n const handleClick = (event: MouseEvent) => {\n if (!panelRef.current || !openDropdownByClick) return\n const target = event.target as Element\n const tagName = target.tagName.toLowerCase()\n let isClosableElement = tagName === \"a\"\n let element: Element | null = target\n\n // Find parent link element\n if (!isClosableElement) {\n element = target.closest(\"a\")\n isClosableElement = !!element\n }\n\n if (isClosableElement && element && panelRef.current.contains(element)) {\n onHide()\n }\n }\n\n document.addEventListener(\"keydown\", handleKeyDown)\n document.addEventListener(\"keyup\", handleKeyUp)\n document.addEventListener(\"click\", handleClick)\n\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown)\n document.removeEventListener(\"keyup\", handleKeyUp)\n document.removeEventListener(\"click\", handleClick)\n }\n }, [panelRef, openDropdownByClick, onHide])\n\n const activeRef = useRef(false)\n\n const handleMouseEnter = () => {\n activeRef.current = true\n }\n\n const handleMouseLeave = () => {\n activeRef.current = false\n onHide()\n }\n\n const [transition, setTransition] = useState(false)\n\n // Wait for next tick so that animation runs\n useEffect(() => {\n requestAnimationFrame(() => {\n setTransition(visible)\n })\n }, [visible])\n\n const translation = useMemo(() => {\n switch (placement) {\n case \"top-start\":\n case \"top\":\n case \"top-end\":\n return `translateY(10px)`\n case \"bottom-start\":\n case \"bottom\":\n case \"bottom-end\":\n return `translateY(-10px)`\n case \"left-start\":\n case \"left\":\n case \"left-end\":\n return `translateX(10px)`\n case \"right-start\":\n case \"right\":\n case \"right-end\":\n return `translateX(-10px)`\n }\n }, [placement])\n\n // Fills offset gap between anchor and panel to prevent mouseout\n const padding = useMemo(() => {\n switch (placement) {\n case \"top-start\":\n case \"top\":\n case \"top-end\":\n return { [isFlipped ? \"pt\" : \"pb\"]: offset }\n case \"bottom-start\":\n case \"bottom\":\n case \"bottom-end\":\n return { [isFlipped ? \"pb\" : \"pt\"]: offset }\n case \"left-start\":\n case \"left\":\n case \"left-end\":\n return { [isFlipped ? \"pl\" : \"pr\"]: offset }\n case \"right-start\":\n case \"right\":\n case \"right-end\":\n return { [isFlipped ? \"pr\" : \"pl\"]: offset }\n }\n }, [placement, isFlipped, offset])\n\n const pointerRef = useRef(false)\n\n const handlePointerVisible = () => {\n setVisibility({ visible: true, isPointer: true })\n }\n\n const handlePointerHide = () => {\n setVisibility({ visible: false, isPointer: false })\n }\n\n const anchorProps: React.HTMLAttributes<HTMLElement> = {\n \"aria-expanded\": visible,\n \"aria-haspopup\": true,\n ...(openDropdownByClick\n ? {\n onClick: onToggleVisibility,\n }\n : {\n onMouseEnter: handlePointerVisible,\n onMouseLeave: handlePointerHide,\n onClick: onVisible,\n }),\n }\n\n const { createPortal } = usePortal()\n\n const isPointer = !openDropdownByClick && pointerRef.current\n const focusEnabled = visible && !isPointer\n\n const [maxHeight, setMaxHeight] = useState(0)\n\n useEffect(() => {\n const calculate = debounce(() => {\n if (!anchorRef.current) return\n\n const nextMaxHeight = calculateMaxHeight({\n anchorRect: anchorRef.current.getBoundingClientRect(),\n position: placement,\n offset,\n })\n\n setMaxHeight(nextMaxHeight)\n }, 500)\n\n window.addEventListener(\"resize\", calculate, { passive: true })\n window.addEventListener(\"scroll\", calculate, { passive: true })\n calculate()\n\n return () => {\n window.removeEventListener(\"resize\", calculate)\n window.removeEventListener(\"scroll\", calculate)\n }\n }, [anchorRef, offset, placement, visible])\n\n return (\n <>\n {(children as any)?.({\n anchorRef: anchorRef as any,\n anchorProps,\n onVisible,\n onHide,\n setVisible,\n visible,\n })}\n\n {(visible || keepInDOM) &&\n createPortal(\n <Container\n aria-label=\"Press escape to close\"\n tabIndex={0}\n ref={panelRef as any}\n zIndex={dropdownZIndex}\n display=\"inline-block\"\n placement={placement}\n style={{\n ...(keepInDOM\n ? { visibility: visible ? \"visible\" : \"hidden\" }\n : {}),\n }}\n {...(openDropdownByClick\n ? {}\n : {\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n })}\n maxHeight={maxHeight + offset}\n {...padding}\n {...rest}\n >\n <Panel\n transition={_transition}\n maxHeight={maxHeight}\n style={\n transition\n ? // In\n { opacity: 1, transform: \"translate(0)\" }\n : // Out\n {\n opacity: 0,\n transform: translation,\n }\n }\n >\n <FocusOn\n noIsolation\n enabled={focusEnabled}\n onClickOutside={onHide}\n returnFocus={returnFocus}\n >\n <Pane maxHeight={maxHeight}>\n {typeof dropdown === \"function\"\n ? (dropdown as any)({\n onVisible,\n onHide,\n setVisible,\n visible,\n })\n : dropdown}\n </Pane>\n </FocusOn>\n </Panel>\n </Container>\n )}\n </>\n )\n}\n\nconst Container = styled(Box)<{ placement: Position } & BoxProps>`\n position: fixed;\n text-align: left;\n outline: 0;\n`\n\nconst Panel = styled(Box)<{ transition: boolean; maxHeight: number }>`\n transition: ${({ transition }) =>\n transition ? \"opacity 250ms ease-out, transform 250ms ease-out\" : \"none\"};\n`\n\nconst Pane = styled(Box)`\n > div {\n max-height: ${({ maxHeight }) => (maxHeight ? `${maxHeight}px` : \"100vh\")};\n box-shadow: ${themeGet(\"effects.flatShadow\")};\n background-color: ${themeGet(\"colors.mono0\")};\n border: 1px solid ${themeGet(\"colors.mono10\")};\n overflow-y: auto;\n }\n`\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAChF,OAAOC,MAAM,MAAM,mBAAmB;AACtC,SAASC,kBAAkB,EAAYC,WAAW;AAClD,SAASC,SAAS;AAClB,SAASC,GAAG;AACZ,SAASC,OAAO,QAAQ,gBAAgB;AACxC,SAASC,QAAQ,QAAQ,0BAA0B;AACnD,SAASC,QAAQ,QAAQ,YAAY;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAmDrC;AACA;AACA;AACA;AACA,OAAO,MAAMC,QAAQ,GAAGA,CAAC;EACvBC,SAAS,GAAG,QAAQ;EACpBC,OAAO,EAAEC,QAAQ,GAAG,KAAK;EACzBC,SAAS;EACTC,QAAQ;EACRC,MAAM,GAAG,EAAE;EACXC,QAAQ;EACRC,cAAc,GAAG,CAAC;EAClBC,mBAAmB;EACnBC,UAAU,EAAEC,WAAW,GAAG,IAAI;EAC9BC,IAAI,GAAG,IAAI;EACXC,WAAW,GAAG,IAAI;EAClBC,KAAK,GAAG,CAAC;EACT,GAAGC;AACU,CAAC,KAAK;EACnB,MAAM,CAACb,OAAO,EAAEc,UAAU,CAAC,GAAG/B,QAAQ,CAAC,KAAK,CAAC;;EAE7C;EACAH,SAAS,CAAC,MAAM;IACdkC,UAAU,CAACb,QAAQ,CAAC;EACtB,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;EAEd,MAAMc,UAAU,GAAGjC,MAAM,CAAuC,IAAI,CAAC;;EAErE;EACA;EACA,MAAMkC,aAAa,GAAGrC,WAAW,CAC/B,CAAC;IACCqB,OAAO;IACPiB,SAAS,GAAG;EAId,CAAC,KAAK;IACJ;IACA,MAAMC,YAAY,GAAGT,WAAW,GAAIT,OAAO,GAAG,EAAE,GAAG,GAAG,GAAIA,OAAO,GAAG,CAAC,GAAG,EAAE;IAC1E,MAAMmB,UAAU,GACdnB,OAAO,IAAIiB,SAAS,IAAI,CAACV,mBAAmB,GAAGK,KAAK,GAAGM,YAAY;IAErEH,UAAU,CAACK,OAAO,IAAIC,YAAY,CAACN,UAAU,CAACK,OAAO,CAAC;IACtDL,UAAU,CAACK,OAAO,GAAGE,UAAU,CAAC,MAAM;MACpC,IAAI,CAACtB,OAAO,IAAIuB,SAAS,CAACH,OAAO,EAAE;MACnCI,UAAU,CAACJ,OAAO,GAAGH,SAAS;MAC9BH,UAAU,CAACd,OAAO,CAAC;IACrB,CAAC,EAAEmB,UAAU,CAAC;EAChB,CAAC,EACD,CAACV,WAAW,EAAEG,KAAK,EAAEL,mBAAmB,CAAC,CAC1C;EAED,MAAMkB,SAAS,GAAGA,CAAA,KAAM;IACtBT,aAAa,CAAC;MAAEhB,OAAO,EAAE;IAAK,CAAC,CAAC;EAClC,CAAC;EAED,MAAM0B,MAAM,GAAG/C,WAAW,CAAC,MAAM;IAC/BqC,aAAa,CAAC;MAAEhB,OAAO,EAAE;IAAM,CAAC,CAAC;EACnC,CAAC,EAAE,CAACgB,aAAa,CAAC,CAAC;EAEnB,MAAMW,kBAAkB,GAAGA,CAAA,KAAM;IAC/B,IAAI3B,OAAO,EAAE;MACX,OAAO0B,MAAM,EAAE;IACjB;IAEAD,SAAS,EAAE;EACb,CAAC;EAED,MAAM;IACJG,SAAS;IACTC,UAAU,EAAEC,QAAQ;IACpBC,KAAK,EAAE;MAAEC;IAAU;EACrB,CAAC,GAAG9C,WAAW,CAAC;IACd+C,QAAQ,EAAElC,SAAS;IACnBK,MAAM,EAAE,CAAC;IACT8B,MAAM,EAAElC,OAAO;IACfU,IAAI;IACJyB,OAAO,EAAE/B;EACX,CAAC,CAAC;EAEFxB,SAAS,CAAC,MAAM;IACd,MAAMwD,aAAa,GAAIC,KAAoB,IAAK;MAC9C,IAAIA,KAAK,CAACC,GAAG,KAAK,QAAQ,EAAE;QAC1BZ,MAAM,EAAE;MACV;IACF,CAAC;;IAED;IACA,MAAMa,WAAW,GAAIF,KAAoB,IAAK;MAC5C,IAAI,CAACP,QAAQ,CAACV,OAAO,EAAE;MAEvB,IACEiB,KAAK,CAACC,GAAG,KAAK,KAAK,IACnB,EACER,QAAQ,CAACV,OAAO,KAAKoB,QAAQ,CAACC,aAAa,IAC3CX,QAAQ,CAACV,OAAO,CAACsB,QAAQ,CAACF,QAAQ,CAACC,aAAa,CAAC,CAClD,EACD;QACAf,MAAM,EAAE;MACV;IACF,CAAC;IAED,MAAMiB,WAAW,GAAIN,KAAiB,IAAK;MACzC,IAAI,CAACP,QAAQ,CAACV,OAAO,IAAI,CAACb,mBAAmB,EAAE;MAC/C,MAAMqC,MAAM,GAAGP,KAAK,CAACO,MAAiB;MACtC,MAAMC,OAAO,GAAGD,MAAM,CAACC,OAAO,CAACC,WAAW,EAAE;MAC5C,IAAIC,iBAAiB,GAAGF,OAAO,KAAK,GAAG;MACvC,IAAIG,OAAuB,GAAGJ,MAAM;;MAEpC;MACA,IAAI,CAACG,iBAAiB,EAAE;QACtBC,OAAO,GAAGJ,MAAM,CAACK,OAAO,CAAC,GAAG,CAAC;QAC7BF,iBAAiB,GAAG,CAAC,CAACC,OAAO;MAC/B;MAEA,IAAID,iBAAiB,IAAIC,OAAO,IAAIlB,QAAQ,CAACV,OAAO,CAACsB,QAAQ,CAACM,OAAO,CAAC,EAAE;QACtEtB,MAAM,EAAE;MACV;IACF,CAAC;IAEDc,QAAQ,CAACU,gBAAgB,CAAC,SAAS,EAAEd,aAAa,CAAC;IACnDI,QAAQ,CAACU,gBAAgB,CAAC,OAAO,EAAEX,WAAW,CAAC;IAC/CC,QAAQ,CAACU,gBAAgB,CAAC,OAAO,EAAEP,WAAW,CAAC;IAE/C,OAAO,MAAM;MACXH,QAAQ,CAACW,mBAAmB,CAAC,SAAS,EAAEf,aAAa,CAAC;MACtDI,QAAQ,CAACW,mBAAmB,CAAC,OAAO,EAAEZ,WAAW,CAAC;MAClDC,QAAQ,CAACW,mBAAmB,CAAC,OAAO,EAAER,WAAW,CAAC;IACpD,CAAC;EACH,CAAC,EAAE,CAACb,QAAQ,EAAEvB,mBAAmB,EAAEmB,MAAM,CAAC,CAAC;EAE3C,MAAMH,SAAS,GAAGzC,MAAM,CAAC,KAAK,CAAC;EAE/B,MAAMsE,gBAAgB,GAAGA,CAAA,KAAM;IAC7B7B,SAAS,CAACH,OAAO,GAAG,IAAI;EAC1B,CAAC;EAED,MAAMiC,gBAAgB,GAAGA,CAAA,KAAM;IAC7B9B,SAAS,CAACH,OAAO,GAAG,KAAK;IACzBM,MAAM,EAAE;EACV,CAAC;EAED,MAAM,CAAClB,UAAU,EAAE8C,aAAa,CAAC,GAAGvE,QAAQ,CAAC,KAAK,CAAC;;EAEnD;EACAH,SAAS,CAAC,MAAM;IACd2E,qBAAqB,CAAC,MAAM;MAC1BD,aAAa,CAACtD,OAAO,CAAC;IACxB,CAAC,CAAC;EACJ,CAAC,EAAE,CAACA,OAAO,CAAC,CAAC;EAEb,MAAMwD,WAAW,GAAG3E,OAAO,CAAC,MAAM;IAChC,QAAQkB,SAAS;MACf,KAAK,WAAW;MAChB,KAAK,KAAK;MACV,KAAK,SAAS;QACZ,OAAQ,kBAAiB;MAC3B,KAAK,cAAc;MACnB,KAAK,QAAQ;MACb,KAAK,YAAY;QACf,OAAQ,mBAAkB;MAC5B,KAAK,YAAY;MACjB,KAAK,MAAM;MACX,KAAK,UAAU;QACb,OAAQ,kBAAiB;MAC3B,KAAK,aAAa;MAClB,KAAK,OAAO;MACZ,KAAK,WAAW;QACd,OAAQ,mBAAkB;IAAA;EAEhC,CAAC,EAAE,CAACA,SAAS,CAAC,CAAC;;EAEf;EACA,MAAMoC,OAAO,GAAGtD,OAAO,CAAC,MAAM;IAC5B,QAAQkB,SAAS;MACf,KAAK,WAAW;MAChB,KAAK,KAAK;MACV,KAAK,SAAS;QACZ,OAAO;UAAE,CAACiC,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG5B;QAAO,CAAC;MAC9C,KAAK,cAAc;MACnB,KAAK,QAAQ;MACb,KAAK,YAAY;QACf,OAAO;UAAE,CAAC4B,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG5B;QAAO,CAAC;MAC9C,KAAK,YAAY;MACjB,KAAK,MAAM;MACX,KAAK,UAAU;QACb,OAAO;UAAE,CAAC4B,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG5B;QAAO,CAAC;MAC9C,KAAK,aAAa;MAClB,KAAK,OAAO;MACZ,KAAK,WAAW;QACd,OAAO;UAAE,CAAC4B,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG5B;QAAO,CAAC;IAAA;EAElD,CAAC,EAAE,CAACL,SAAS,EAAEiC,SAAS,EAAE5B,MAAM,CAAC,CAAC;EAElC,MAAMoB,UAAU,GAAG1C,MAAM,CAAC,KAAK,CAAC;EAEhC,MAAM2E,oBAAoB,GAAGA,CAAA,KAAM;IACjCzC,aAAa,CAAC;MAAEhB,OAAO,EAAE,IAAI;MAAEiB,SAAS,EAAE;IAAK,CAAC,CAAC;EACnD,CAAC;EAED,MAAMyC,iBAAiB,GAAGA,CAAA,KAAM;IAC9B1C,aAAa,CAAC;MAAEhB,OAAO,EAAE,KAAK;MAAEiB,SAAS,EAAE;IAAM,CAAC,CAAC;EACrD,CAAC;EAED,MAAM0C,WAA8C,GAAG;IACrD,eAAe,EAAE3D,OAAO;IACxB,eAAe,EAAE,IAAI;IACrB,IAAIO,mBAAmB,GACnB;MACEqD,OAAO,EAAEjC;IACX,CAAC,GACD;MACEkC,YAAY,EAAEJ,oBAAoB;MAClCK,YAAY,EAAEJ,iBAAiB;MAC/BE,OAAO,EAAEnC;IACX,CAAC;EACP,CAAC;EAED,MAAM;IAAEsC;EAAa,CAAC,GAAG5E,SAAS,EAAE;EAEpC,MAAM8B,SAAS,GAAG,CAACV,mBAAmB,IAAIiB,UAAU,CAACJ,OAAO;EAC5D,MAAM4C,YAAY,GAAGhE,OAAO,IAAI,CAACiB,SAAS;EAE1C,MAAM,CAACgD,SAAS,EAAEC,YAAY,CAAC,GAAGnF,QAAQ,CAAC,CAAC,CAAC;EAE7CH,SAAS,CAAC,MAAM;IACd,MAAMuF,SAAS,GAAG5E,QAAQ,CAAC,MAAM;MAC/B,IAAI,CAACqC,SAAS,CAACR,OAAO,EAAE;MAExB,MAAMgD,aAAa,GAAGnF,kBAAkB,CAAC;QACvCoF,UAAU,EAAEzC,SAAS,CAACR,OAAO,CAACkD,qBAAqB,EAAE;QACrDrC,QAAQ,EAAElC,SAAS;QACnBK;MACF,CAAC,CAAC;MAEF8D,YAAY,CAACE,aAAa,CAAC;IAC7B,CAAC,EAAE,GAAG,CAAC;IAEPG,MAAM,CAACrB,gBAAgB,CAAC,QAAQ,EAAEiB,SAAS,EAAE;MAAEK,OAAO,EAAE;IAAK,CAAC,CAAC;IAC/DD,MAAM,CAACrB,gBAAgB,CAAC,QAAQ,EAAEiB,SAAS,EAAE;MAAEK,OAAO,EAAE;IAAK,CAAC,CAAC;IAC/DL,SAAS,EAAE;IAEX,OAAO,MAAM;MACXI,MAAM,CAACpB,mBAAmB,CAAC,QAAQ,EAAEgB,SAAS,CAAC;MAC/CI,MAAM,CAACpB,mBAAmB,CAAC,QAAQ,EAAEgB,SAAS,CAAC;IACjD,CAAC;EACH,CAAC,EAAE,CAACvC,SAAS,EAAExB,MAAM,EAAEL,SAAS,EAAEC,OAAO,CAAC,CAAC;EAE3C,oBACEH,KAAA,CAAAF,SAAA;IAAAQ,QAAA,GACIA,QAAQ,GAAW;MACnByB,SAAS,EAAEA,SAAgB;MAC3B+B,WAAW;MACXlC,SAAS;MACTC,MAAM;MACNZ,UAAU;MACVd;IACF,CAAC,CAAC,EAED,CAACA,OAAO,IAAIE,SAAS,KACpB6D,YAAY,eACVtE,IAAA,CAACgF,SAAS;MACR,cAAW,uBAAuB;MAClCC,QAAQ,EAAE,CAAE;MACZC,GAAG,EAAE7C,QAAgB;MACrB8C,MAAM,EAAEtE,cAAe;MACvBuE,OAAO,EAAC,cAAc;MACtB9E,SAAS,EAAEA,SAAU;MACrB+E,KAAK,EAAE;QACL,IAAI5E,SAAS,GACT;UAAE6E,UAAU,EAAE/E,OAAO,GAAG,SAAS,GAAG;QAAS,CAAC,GAC9C,CAAC,CAAC;MACR,CAAE;MAAA,IACGO,mBAAmB,GACpB,CAAC,CAAC,GACF;QACEsD,YAAY,EAAET,gBAAgB;QAC9BU,YAAY,EAAET;MAChB,CAAC;MACLY,SAAS,EAAEA,SAAS,GAAG7D,MAAO;MAAA,GAC1B+B,OAAO;MAAA,GACPtB,IAAI;MAAAV,QAAA,eAERV,IAAA,CAACuF,KAAK;QACJxE,UAAU,EAAEC,WAAY;QACxBwD,SAAS,EAAEA,SAAU;QACrBa,KAAK,EACHtE,UAAU;QACN;QACA;UAAEyE,OAAO,EAAE,CAAC;UAAEC,SAAS,EAAE;QAAe,CAAC;QACzC;QACA;UACED,OAAO,EAAE,CAAC;UACVC,SAAS,EAAE1B;QACb,CACL;QAAArD,QAAA,eAEDV,IAAA,CAACJ,OAAO;UACN8F,WAAW;UACXC,OAAO,EAAEpB,YAAa;UACtBqB,cAAc,EAAE3D,MAAO;UACvBf,WAAW,EAAEA,WAAY;UAAAR,QAAA,eAEzBV,IAAA,CAAC6F,IAAI;YAACrB,SAAS,EAAEA,SAAU;YAAA9D,QAAA,EACxB,OAAOE,QAAQ,KAAK,UAAU,GAC1BA,QAAQ,CAAS;cAChBoB,SAAS;cACTC,MAAM;cACNZ,UAAU;cACVd;YACF,CAAC,CAAC,GACFK;UAAQ;QACP;MACC;IACJ,EACE,CACb;EAAA,EACF;AAEP,CAAC;AAED,MAAMoE,SAAS,GAAGzF,MAAM,CAACI,GAAG,CAAC,CAAAmG,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,iDAI5B;AAED,MAAMT,KAAK,GAAGhG,MAAM,CAACI,GAAG,CAAC,CAAAmG,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,yBACT,CAAC;EAAEjF;AAAW,CAAC,KAC3BA,UAAU,GAAG,kDAAkD,GAAG,MAAM,CAC3E;AAED,MAAM8E,IAAI,GAAGtG,MAAM,CAACI,GAAG,CAAC,CAAAmG,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,4GAEN,CAAC;EAAExB;AAAU,CAAC,KAAMA,SAAS,GAAI,GAAEA,SAAU,IAAG,GAAG,OAAQ,EAC3D3E,QAAQ,CAAC,oBAAoB,CAAC,EACxBA,QAAQ,CAAC,cAAc,CAAC,EACxBA,QAAQ,CAAC,eAAe,CAAC,CAGhD"}
|
|
1
|
+
{"version":3,"file":"Dropdown.js","names":["React","useCallback","useEffect","useMemo","useRef","useState","styled","calculateMaxHeight","usePosition","useDidMount","usePortal","Box","FocusOn","themeGet","debounce","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","Dropdown","placement","visible","_visible","keepInDOM","children","offset","dropdown","dropdownZIndex","openDropdownByClick","transition","_transition","flip","returnFocus","delay","rest","setVisible","timeoutRef","setVisibility","isPointer","defaultDelay","finalDelay","current","clearTimeout","setTimeout","activeRef","pointerRef","onVisible","onHide","onToggleVisibility","anchorRef","tooltipRef","panelRef","state","isFlipped","position","active","padding","handleKeyDown","event","key","handleKeyUp","document","activeElement","contains","handleClick","target","tagName","toLowerCase","isClosableElement","element","closest","addEventListener","removeEventListener","handleMouseEnter","handleMouseLeave","setTransition","requestAnimationFrame","translation","handlePointerVisible","handlePointerHide","anchorProps","onClick","onMouseEnter","onMouseLeave","createPortal","isClient","focusEnabled","maxHeight","setMaxHeight","calculate","nextMaxHeight","anchorRect","getBoundingClientRect","window","passive","dropdownPanel","Container","tabIndex","ref","zIndex","display","style","visibility","Panel","opacity","transform","noIsolation","enabled","onClickOutside","Pane","withConfig","displayName","componentId"],"sources":["../../../../src/elements/Dropdown/Dropdown.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\"\nimport styled from \"styled-components\"\nimport { calculateMaxHeight, Position, usePosition } from \"../../utils\"\nimport { useDidMount } from \"../../utils/useDidMount\"\nimport { usePortal } from \"../../utils/usePortal\"\nimport { Box, BoxProps } from \"../Box\"\nimport { FocusOn } from \"react-focus-on\"\nimport { themeGet } from \"@styled-system/theme-get\"\nimport { debounce } from \"es-toolkit\"\n\nexport interface DropdownActions {\n /** Call to show dropdown */\n onVisible(): void\n /** Call to hide dropdown */\n onHide(): void\n /** Manipulate visible directly */\n setVisible(value: boolean): void\n /** Pass ref to element you want the dropdown to be anchored to */\n anchorRef: React.MutableRefObject<HTMLElement>\n /** Spread props on element you want the dropdown to be anchored to */\n anchorProps: React.HTMLAttributes<HTMLElement>\n /** Whether or not the dropdown is visible */\n visible: boolean\n}\n\ntype Children =\n | React.ReactNode\n | ((dropdownActions: DropdownActions) => React.ReactNode)\n\nexport interface DropdownProps extends Omit<BoxProps, \"children\"> {\n placement?: Position\n /** Intially visible by default? */\n visible?: boolean\n /** Whether or not we should animate the dropdown transition */\n transition?: boolean\n dropdown:\n | React.ReactNode\n | ((\n dropdownActions: Pick<\n DropdownActions,\n \"onHide\" | \"onVisible\" | \"setVisible\" | \"visible\"\n >\n ) => void)\n /** Custom zIndex to assign to the dropdown panel */\n dropdownZIndex?: number\n /** Distance in pixels from anchor */\n offset?: number\n /** Should the dropdown panel always be present in the DOM (vs removed when invisible) */\n keepInDOM?: boolean\n openDropdownByClick?: boolean\n children: Children\n /** Optionally disable flipping (default: `true`) */\n flip?: boolean\n /** Whether to return focus to the previous element when the dropdown closes (default: `true`) */\n returnFocus?: boolean\n /** Delay in milliseconds before showing the dropdown on hover (ignored when openDropdownByClick is true) */\n delay?: number\n}\n\n/**\n * A `Dropdown` is a small modal-type element which is anchored, and can be\n * positioned relative to, another element and designed to be transitioned in on hover or on click.\n */\nexport const Dropdown = ({\n placement = \"bottom\",\n visible: _visible = false,\n keepInDOM,\n children,\n offset = 10,\n dropdown,\n dropdownZIndex = 1,\n openDropdownByClick,\n transition: _transition = true,\n flip = true,\n returnFocus = true,\n delay = 0,\n ...rest\n}: DropdownProps) => {\n const [visible, setVisible] = useState(false)\n\n // If prop updates/set initial visibility.\n useEffect(() => {\n setVisible(_visible)\n }, [_visible])\n\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // We need to keep the pointer state in sync with the visibility state, else we\n // wind up with focus isolation out of sync.\n const setVisibility = useCallback(\n ({\n visible,\n isPointer = false,\n }: {\n visible: boolean\n isPointer?: boolean\n }) => {\n // Use custom delay when opening via pointer interaction (hover), but only if not using click mode\n const defaultDelay = _transition ? (visible ? 50 : 150) : visible ? 1 : 50\n const finalDelay =\n visible && isPointer && !openDropdownByClick ? delay : defaultDelay\n\n timeoutRef.current && clearTimeout(timeoutRef.current)\n timeoutRef.current = setTimeout(() => {\n if (!visible && activeRef.current) return\n pointerRef.current = isPointer\n setVisible(visible)\n }, finalDelay)\n },\n [_transition, delay, openDropdownByClick]\n )\n\n const onVisible = () => {\n setVisibility({ visible: true })\n }\n\n const onHide = useCallback(() => {\n setVisibility({ visible: false })\n }, [setVisibility])\n\n const onToggleVisibility = () => {\n if (visible) {\n return onHide()\n }\n\n onVisible()\n }\n\n const {\n anchorRef,\n tooltipRef: panelRef,\n state: { isFlipped },\n } = usePosition({\n position: placement,\n offset: 0,\n active: visible,\n flip,\n padding: offset,\n })\n\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onHide()\n }\n }\n\n // Close dropdown when focus leaves element\n const handleKeyUp = (event: KeyboardEvent) => {\n if (!panelRef.current) return\n\n if (\n event.key === \"Tab\" &&\n !(\n panelRef.current === document.activeElement ||\n panelRef.current.contains(document.activeElement)\n )\n ) {\n onHide()\n }\n }\n\n const handleClick = (event: MouseEvent) => {\n if (!panelRef.current || !openDropdownByClick) return\n const target = event.target as Element\n const tagName = target.tagName.toLowerCase()\n let isClosableElement = tagName === \"a\"\n let element: Element | null = target\n\n // Find parent link element\n if (!isClosableElement) {\n element = target.closest(\"a\")\n isClosableElement = !!element\n }\n\n if (isClosableElement && element && panelRef.current.contains(element)) {\n onHide()\n }\n }\n\n document.addEventListener(\"keydown\", handleKeyDown)\n document.addEventListener(\"keyup\", handleKeyUp)\n document.addEventListener(\"click\", handleClick)\n\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown)\n document.removeEventListener(\"keyup\", handleKeyUp)\n document.removeEventListener(\"click\", handleClick)\n }\n }, [panelRef, openDropdownByClick, onHide])\n\n const activeRef = useRef(false)\n\n const handleMouseEnter = () => {\n activeRef.current = true\n }\n\n const handleMouseLeave = () => {\n activeRef.current = false\n onHide()\n }\n\n const [transition, setTransition] = useState(false)\n\n // Wait for next tick so that animation runs\n useEffect(() => {\n requestAnimationFrame(() => {\n setTransition(visible)\n })\n }, [visible])\n\n const translation = useMemo(() => {\n switch (placement) {\n case \"top-start\":\n case \"top\":\n case \"top-end\":\n return `translateY(10px)`\n case \"bottom-start\":\n case \"bottom\":\n case \"bottom-end\":\n return `translateY(-10px)`\n case \"left-start\":\n case \"left\":\n case \"left-end\":\n return `translateX(10px)`\n case \"right-start\":\n case \"right\":\n case \"right-end\":\n return `translateX(-10px)`\n }\n }, [placement])\n\n // Fills offset gap between anchor and panel to prevent mouseout\n const padding = useMemo(() => {\n switch (placement) {\n case \"top-start\":\n case \"top\":\n case \"top-end\":\n return { [isFlipped ? \"pt\" : \"pb\"]: offset }\n case \"bottom-start\":\n case \"bottom\":\n case \"bottom-end\":\n return { [isFlipped ? \"pb\" : \"pt\"]: offset }\n case \"left-start\":\n case \"left\":\n case \"left-end\":\n return { [isFlipped ? \"pl\" : \"pr\"]: offset }\n case \"right-start\":\n case \"right\":\n case \"right-end\":\n return { [isFlipped ? \"pr\" : \"pl\"]: offset }\n }\n }, [placement, isFlipped, offset])\n\n const pointerRef = useRef(false)\n\n const handlePointerVisible = () => {\n setVisibility({ visible: true, isPointer: true })\n }\n\n const handlePointerHide = () => {\n setVisibility({ visible: false, isPointer: false })\n }\n\n const anchorProps: React.HTMLAttributes<HTMLElement> = {\n \"aria-expanded\": visible,\n \"aria-haspopup\": true,\n ...(openDropdownByClick\n ? {\n onClick: onToggleVisibility,\n }\n : {\n onMouseEnter: handlePointerVisible,\n onMouseLeave: handlePointerHide,\n onClick: onVisible,\n }),\n }\n\n const { createPortal } = usePortal()\n const isClient = useDidMount()\n\n const isPointer = !openDropdownByClick && pointerRef.current\n const focusEnabled = visible && !isPointer\n\n const [maxHeight, setMaxHeight] = useState(0)\n\n useEffect(() => {\n const calculate = debounce(() => {\n if (!anchorRef.current) return\n\n const nextMaxHeight = calculateMaxHeight({\n anchorRect: anchorRef.current.getBoundingClientRect(),\n position: placement,\n offset,\n })\n\n setMaxHeight(nextMaxHeight)\n }, 500)\n\n window.addEventListener(\"resize\", calculate, { passive: true })\n window.addEventListener(\"scroll\", calculate, { passive: true })\n calculate()\n\n return () => {\n window.removeEventListener(\"resize\", calculate)\n window.removeEventListener(\"scroll\", calculate)\n }\n }, [anchorRef, offset, placement, visible])\n\n const dropdownPanel = useMemo(() => {\n if (!(visible || keepInDOM)) return null\n\n return (\n <Container\n aria-label=\"Press escape to close\"\n tabIndex={0}\n ref={panelRef as any}\n zIndex={dropdownZIndex}\n display=\"inline-block\"\n placement={placement}\n style={{\n ...(keepInDOM ? { visibility: visible ? \"visible\" : \"hidden\" } : {}),\n }}\n {...(openDropdownByClick\n ? {}\n : { onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave })}\n maxHeight={maxHeight + offset}\n {...padding}\n {...rest}\n >\n <Panel\n transition={_transition}\n maxHeight={maxHeight}\n style={\n transition\n ? // In\n { opacity: 1, transform: \"translate(0)\" }\n : // Out\n { opacity: 0, transform: translation }\n }\n >\n <FocusOn\n noIsolation\n enabled={focusEnabled}\n onClickOutside={onHide}\n returnFocus={returnFocus}\n >\n <Pane maxHeight={maxHeight}>\n {typeof dropdown === \"function\"\n ? (dropdown as any)({\n onVisible,\n onHide,\n setVisible,\n visible,\n })\n : dropdown}\n </Pane>\n </FocusOn>\n </Panel>\n </Container>\n )\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n visible,\n keepInDOM,\n dropdownZIndex,\n placement,\n openDropdownByClick,\n maxHeight,\n offset,\n _transition,\n transition,\n translation,\n focusEnabled,\n returnFocus,\n dropdown,\n padding,\n ])\n\n return (\n <>\n {(children as any)?.({\n anchorRef: anchorRef as any,\n anchorProps,\n onVisible,\n onHide,\n setVisible,\n visible,\n })}\n\n {/* During SSR, `createPortal` returns null because the DOM isn't available.\n When `keepInDOM` is true, render directly in the tree so the content\n is present in the server-rendered HTML. After hydration, it moves to a portal. */}\n {dropdownPanel &&\n (!isClient && keepInDOM ? dropdownPanel : createPortal(dropdownPanel))}\n </>\n )\n}\n\nconst Container = styled(Box)<{ placement: Position } & BoxProps>`\n position: fixed;\n text-align: left;\n outline: 0;\n`\n\nconst Panel = styled(Box)<{ transition: boolean; maxHeight: number }>`\n transition: ${({ transition }) =>\n transition ? \"opacity 250ms ease-out, transform 250ms ease-out\" : \"none\"};\n`\n\nconst Pane = styled(Box)`\n > div {\n max-height: ${({ maxHeight }) => (maxHeight ? `${maxHeight}px` : \"100vh\")};\n box-shadow: ${themeGet(\"effects.flatShadow\")};\n background-color: ${themeGet(\"colors.mono0\")};\n border: 1px solid ${themeGet(\"colors.mono10\")};\n overflow-y: auto;\n }\n`\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@artsy/palette",
|
|
3
|
-
"version": "46.
|
|
3
|
+
"version": "46.2.0",
|
|
4
4
|
"description": "Design system library for react components",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -203,5 +203,5 @@
|
|
|
203
203
|
"url": "http://localhost"
|
|
204
204
|
}
|
|
205
205
|
},
|
|
206
|
-
"gitHead": "
|
|
206
|
+
"gitHead": "cdfe9c42cf34e7b280d90af4d09656bf2b33a774"
|
|
207
207
|
}
|