@artsy/palette 20.0.3 → 20.1.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/CHANGELOG.md +17 -0
- package/dist/elements/Dropdown/Dropdown.d.ts +2 -1
- package/dist/elements/Dropdown/Dropdown.js +32 -8
- package/dist/elements/Dropdown/Dropdown.js.map +1 -1
- package/dist/elements/Dropdown/Dropdown.story.d.ts +1 -0
- package/dist/elements/Dropdown/Dropdown.story.js +39 -1
- package/dist/elements/Dropdown/Dropdown.story.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
# v20.1.0 (Wed Jun 08 2022)
|
|
2
|
+
|
|
3
|
+
#### 🚀 Enhancement
|
|
4
|
+
|
|
5
|
+
- feat: add ability to open Dropdown by click [#1180](https://github.com/artsy/palette/pull/1180) ([@dimatretyak](https://github.com/dimatretyak))
|
|
6
|
+
|
|
7
|
+
#### 🐛 Bug Fix
|
|
8
|
+
|
|
9
|
+
- chore: specify `openDropdownByClick` in deps ([@dimatretyak](https://github.com/dimatretyak))
|
|
10
|
+
- feat: add click mode for Dropdown ([@dimatretyak](https://github.com/dimatretyak))
|
|
11
|
+
|
|
12
|
+
#### Authors: 1
|
|
13
|
+
|
|
14
|
+
- Dima Tretyak (Dzmitry Tratsiak) ([@dimatretyak](https://github.com/dimatretyak))
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
1
18
|
# v20.0.3 (Mon Jun 06 2022)
|
|
2
19
|
|
|
3
20
|
#### 🐛 Bug Fix
|
|
@@ -24,10 +24,11 @@ export interface DropdownProps extends BoxProps {
|
|
|
24
24
|
offset?: number;
|
|
25
25
|
/** Should the dropdown panel always be present in the DOM (vs removed when invisible) */
|
|
26
26
|
keepInDOM?: boolean;
|
|
27
|
+
openDropdownByClick?: boolean;
|
|
27
28
|
children: (dropdownActions: DropdownActions) => JSX.Element;
|
|
28
29
|
}
|
|
29
30
|
/**
|
|
30
31
|
* A `Dropdown` is a small modal-type element which is anchored, and can be
|
|
31
|
-
* positioned relative to, another element and designed to be transitioned in on hover.
|
|
32
|
+
* positioned relative to, another element and designed to be transitioned in on hover or on click.
|
|
32
33
|
*/
|
|
33
34
|
export declare const Dropdown: React.FC<DropdownProps>;
|
|
@@ -21,7 +21,7 @@ var _useUpdateEffect = require("../../utils/useUpdateEffect");
|
|
|
21
21
|
|
|
22
22
|
var _Box = require("../Box");
|
|
23
23
|
|
|
24
|
-
var _excluded = ["placement", "visible", "keepInDOM", "children", "offset", "dropdown"];
|
|
24
|
+
var _excluded = ["placement", "visible", "keepInDOM", "children", "offset", "dropdown", "openDropdownByClick"];
|
|
25
25
|
|
|
26
26
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
27
27
|
|
|
@@ -55,7 +55,7 @@ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) r
|
|
|
55
55
|
|
|
56
56
|
/**
|
|
57
57
|
* A `Dropdown` is a small modal-type element which is anchored, and can be
|
|
58
|
-
* positioned relative to, another element and designed to be transitioned in on hover.
|
|
58
|
+
* positioned relative to, another element and designed to be transitioned in on hover or on click.
|
|
59
59
|
*/
|
|
60
60
|
var Dropdown = function Dropdown(_ref) {
|
|
61
61
|
var _ref$placement = _ref.placement,
|
|
@@ -67,6 +67,7 @@ var Dropdown = function Dropdown(_ref) {
|
|
|
67
67
|
_ref$offset = _ref.offset,
|
|
68
68
|
offset = _ref$offset === void 0 ? 10 : _ref$offset,
|
|
69
69
|
dropdown = _ref.dropdown,
|
|
70
|
+
openDropdownByClick = _ref.openDropdownByClick,
|
|
70
71
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
71
72
|
|
|
72
73
|
var _useState = (0, _react.useState)(false),
|
|
@@ -105,6 +106,14 @@ var Dropdown = function Dropdown(_ref) {
|
|
|
105
106
|
}, 150);
|
|
106
107
|
};
|
|
107
108
|
|
|
109
|
+
var onToggleVisibility = function onToggleVisibility() {
|
|
110
|
+
if (visible) {
|
|
111
|
+
return onHide();
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
onVisible();
|
|
115
|
+
};
|
|
116
|
+
|
|
108
117
|
var _usePosition = (0, _utils.usePosition)({
|
|
109
118
|
position: placement,
|
|
110
119
|
offset: 0,
|
|
@@ -136,13 +145,23 @@ var Dropdown = function Dropdown(_ref) {
|
|
|
136
145
|
}
|
|
137
146
|
};
|
|
138
147
|
|
|
148
|
+
var handleClick = function handleClick(event) {
|
|
149
|
+
if (!panelRef.current || !openDropdownByClick) return;
|
|
150
|
+
|
|
151
|
+
if (panelRef.current.contains(event.target)) {
|
|
152
|
+
onHide();
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
|
|
139
156
|
document.addEventListener("keydown", handleKeyDown);
|
|
140
157
|
document.addEventListener("keyup", handleKeyUp);
|
|
158
|
+
document.addEventListener("click", handleClick);
|
|
141
159
|
return function () {
|
|
142
160
|
document.removeEventListener("keydown", handleKeyDown);
|
|
143
161
|
document.removeEventListener("keyup", handleKeyUp);
|
|
162
|
+
document.removeEventListener("click", handleClick);
|
|
144
163
|
};
|
|
145
|
-
}, [panelRef]);
|
|
164
|
+
}, [panelRef, openDropdownByClick]);
|
|
146
165
|
var activeRef = (0, _react.useRef)(false);
|
|
147
166
|
|
|
148
167
|
var handleMouseEnter = function handleMouseEnter() {
|
|
@@ -212,13 +231,17 @@ var Dropdown = function Dropdown(_ref) {
|
|
|
212
231
|
return _defineProperty({}, isFlipped ? "pr" : "pl", offset);
|
|
213
232
|
}
|
|
214
233
|
}, [placement, isFlipped, offset]);
|
|
215
|
-
|
|
234
|
+
|
|
235
|
+
var anchorProps = _objectSpread({
|
|
216
236
|
"aria-expanded": visible,
|
|
217
|
-
"aria-haspopup": true
|
|
237
|
+
"aria-haspopup": true
|
|
238
|
+
}, openDropdownByClick ? {
|
|
239
|
+
onClick: onToggleVisibility
|
|
240
|
+
} : {
|
|
218
241
|
onMouseEnter: onVisible,
|
|
219
242
|
onMouseLeave: onHide,
|
|
220
243
|
onClick: onVisible
|
|
221
|
-
};
|
|
244
|
+
});
|
|
222
245
|
|
|
223
246
|
var _usePortal = (0, _usePortal2.usePortal)(),
|
|
224
247
|
createPortal = _usePortal.createPortal;
|
|
@@ -240,12 +263,13 @@ var Dropdown = function Dropdown(_ref) {
|
|
|
240
263
|
ref: panelRef,
|
|
241
264
|
zIndex: 1,
|
|
242
265
|
display: "inline-block",
|
|
243
|
-
onMouseEnter: handleMouseEnter,
|
|
244
|
-
onMouseLeave: handleMouseLeave,
|
|
245
266
|
placement: placement,
|
|
246
267
|
style: _objectSpread({}, keepInDOM ? {
|
|
247
268
|
visibility: visible ? "visible" : "hidden"
|
|
248
269
|
} : {})
|
|
270
|
+
}, openDropdownByClick ? {} : {
|
|
271
|
+
onMouseEnter: handleMouseEnter,
|
|
272
|
+
onMouseLeave: handleMouseLeave
|
|
249
273
|
}, padding, rest), /*#__PURE__*/_react.default.createElement(Panel, {
|
|
250
274
|
bg: "white100",
|
|
251
275
|
border: "1px solid",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/Dropdown/Dropdown.tsx"],"names":["Dropdown","placement","visible","_visible","keepInDOM","children","offset","dropdown","rest","setVisible","panelRef","current","focus","anchorRef","timeoutRef","onVisible","clearTimeout","setTimeout","onHide","activeRef","position","active","tooltipRef","isFlipped","state","ref","onClickOutside","when","type","handleKeyDown","event","key","handleKeyUp","document","activeElement","contains","addEventListener","removeEventListener","handleMouseEnter","handleMouseLeave","transition","setTransition","translation","padding","anchorProps","onMouseEnter","onMouseLeave","onClick","createPortal","visibility","opacity","transform","Container","Box","Panel","FLAT_SHADOW"],"mappings":"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","sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from \"react\"\nimport styled from \"styled-components\"\nimport { FLAT_SHADOW } from \"../../helpers\"\nimport {\n Position,\n useClickOutside,\n useFocusLock,\n usePosition,\n} from \"../../utils\"\nimport { usePortal } from \"../../utils/usePortal\"\nimport { useUpdateEffect } from \"../../utils/useUpdateEffect\"\nimport { Box, BoxProps } from \"../Box\"\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\nexport interface DropdownProps extends BoxProps {\n placement?: Position\n /** Intially visible by default? */\n visible?: boolean\n dropdown:\n | React.ReactNode\n | ((\n dropdownActions: Pick<\n DropdownActions,\n \"onHide\" | \"onVisible\" | \"setVisible\" | \"visible\"\n >\n ) => void)\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 children: (dropdownActions: DropdownActions) => JSX.Element\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.\n */\nexport const Dropdown: React.FC<DropdownProps> = ({\n placement = \"top\",\n visible: _visible = false,\n keepInDOM,\n children,\n offset = 10,\n dropdown,\n ...rest\n}) => {\n const [visible, setVisible] = useState(false)\n\n // If prop updates/set initial visibility.\n useEffect(() => {\n setVisible(_visible)\n }, [_visible])\n\n // Yields focus back and forth between dropdown and anchor\n useUpdateEffect(() => {\n if (visible && panelRef.current) {\n panelRef.current.focus()\n return\n }\n\n if (!anchorRef.current) return\n anchorRef.current.focus()\n }, [visible])\n\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const onVisible = () => {\n timeoutRef.current && clearTimeout(timeoutRef.current)\n timeoutRef.current = setTimeout(() => {\n setVisible(true)\n }, 50)\n }\n\n const onHide = () => {\n timeoutRef.current && clearTimeout(timeoutRef.current)\n timeoutRef.current = setTimeout(() => {\n if (activeRef.current) return\n setVisible(false)\n }, 150)\n }\n\n const {\n anchorRef,\n tooltipRef: panelRef,\n state: { isFlipped },\n } = usePosition({\n position: placement,\n offset: 0,\n active: visible,\n })\n\n useClickOutside({\n ref: panelRef,\n onClickOutside: onHide,\n when: visible,\n type: \"click\",\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 document.addEventListener(\"keydown\", handleKeyDown)\n document.addEventListener(\"keyup\", handleKeyUp)\n\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown)\n document.removeEventListener(\"keyup\", handleKeyUp)\n }\n }, [panelRef])\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 setTimeout(() => {\n setTransition(visible)\n }, 0)\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 anchorProps: React.HTMLAttributes<HTMLElement> = {\n \"aria-expanded\": visible,\n \"aria-haspopup\": true,\n onMouseEnter: onVisible,\n onMouseLeave: onHide,\n onClick: onVisible,\n }\n\n const { createPortal } = usePortal()\n\n useFocusLock({ ref: panelRef, active: visible })\n\n return (\n <>\n {children({\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={1}\n display=\"inline-block\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n placement={placement}\n style={{\n ...(keepInDOM\n ? { visibility: visible ? \"visible\" : \"hidden\" }\n : {}),\n }}\n {...padding}\n {...rest}\n >\n <Panel\n bg=\"white100\"\n border=\"1px solid\"\n borderColor=\"black10\"\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 {typeof dropdown === \"function\"\n ? dropdown({ onVisible, onHide, setVisible, visible })\n : dropdown}\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)`\n transition: opacity 250ms ease-out, transform 250ms ease-out;\n box-shadow: ${FLAT_SHADOW};\n`\n"],"file":"Dropdown.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/Dropdown/Dropdown.tsx"],"names":["Dropdown","placement","visible","_visible","keepInDOM","children","offset","dropdown","openDropdownByClick","rest","setVisible","panelRef","current","focus","anchorRef","timeoutRef","onVisible","clearTimeout","setTimeout","onHide","activeRef","onToggleVisibility","position","active","tooltipRef","isFlipped","state","ref","onClickOutside","when","type","handleKeyDown","event","key","handleKeyUp","document","activeElement","contains","handleClick","target","addEventListener","removeEventListener","handleMouseEnter","handleMouseLeave","transition","setTransition","translation","padding","anchorProps","onClick","onMouseEnter","onMouseLeave","createPortal","visibility","opacity","transform","Container","Box","Panel","FLAT_SHADOW"],"mappings":"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","sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from \"react\"\nimport styled from \"styled-components\"\nimport { FLAT_SHADOW } from \"../../helpers\"\nimport {\n Position,\n useClickOutside,\n useFocusLock,\n usePosition,\n} from \"../../utils\"\nimport { usePortal } from \"../../utils/usePortal\"\nimport { useUpdateEffect } from \"../../utils/useUpdateEffect\"\nimport { Box, BoxProps } from \"../Box\"\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\nexport interface DropdownProps extends BoxProps {\n placement?: Position\n /** Intially visible by default? */\n visible?: boolean\n dropdown:\n | React.ReactNode\n | ((\n dropdownActions: Pick<\n DropdownActions,\n \"onHide\" | \"onVisible\" | \"setVisible\" | \"visible\"\n >\n ) => void)\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: (dropdownActions: DropdownActions) => JSX.Element\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: React.FC<DropdownProps> = ({\n placement = \"top\",\n visible: _visible = false,\n keepInDOM,\n children,\n offset = 10,\n dropdown,\n openDropdownByClick,\n ...rest\n}) => {\n const [visible, setVisible] = useState(false)\n\n // If prop updates/set initial visibility.\n useEffect(() => {\n setVisible(_visible)\n }, [_visible])\n\n // Yields focus back and forth between dropdown and anchor\n useUpdateEffect(() => {\n if (visible && panelRef.current) {\n panelRef.current.focus()\n return\n }\n\n if (!anchorRef.current) return\n anchorRef.current.focus()\n }, [visible])\n\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const onVisible = () => {\n timeoutRef.current && clearTimeout(timeoutRef.current)\n timeoutRef.current = setTimeout(() => {\n setVisible(true)\n }, 50)\n }\n\n const onHide = () => {\n timeoutRef.current && clearTimeout(timeoutRef.current)\n timeoutRef.current = setTimeout(() => {\n if (activeRef.current) return\n setVisible(false)\n }, 150)\n }\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 })\n\n useClickOutside({\n ref: panelRef,\n onClickOutside: onHide,\n when: visible,\n type: \"click\",\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\n if (panelRef.current.contains(event.target as 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])\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 setTimeout(() => {\n setTransition(visible)\n }, 0)\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 anchorProps: React.HTMLAttributes<HTMLElement> = {\n \"aria-expanded\": visible,\n \"aria-haspopup\": true,\n ...(openDropdownByClick\n ? {\n onClick: onToggleVisibility,\n }\n : {\n onMouseEnter: onVisible,\n onMouseLeave: onHide,\n onClick: onVisible,\n }),\n }\n\n const { createPortal } = usePortal()\n\n useFocusLock({ ref: panelRef, active: visible })\n\n return (\n <>\n {children({\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={1}\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 {...padding}\n {...rest}\n >\n <Panel\n bg=\"white100\"\n border=\"1px solid\"\n borderColor=\"black10\"\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 {typeof dropdown === \"function\"\n ? dropdown({ onVisible, onHide, setVisible, visible })\n : dropdown}\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)`\n transition: opacity 250ms ease-out, transform 250ms ease-out;\n box-shadow: ${FLAT_SHADOW};\n`\n"],"file":"Dropdown.js"}
|
|
@@ -5,7 +5,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" =
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.default = exports.KeepInDOM = exports.FocusOrder = exports.Default = exports.ChangeDimensions = void 0;
|
|
8
|
+
exports.default = exports.OpenDropdownByClick = exports.KeepInDOM = exports.FocusOrder = exports.Default = exports.ChangeDimensions = void 0;
|
|
9
9
|
|
|
10
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
11
|
|
|
@@ -208,4 +208,42 @@ var FocusOrder = function FocusOrder() {
|
|
|
208
208
|
|
|
209
209
|
exports.FocusOrder = FocusOrder;
|
|
210
210
|
FocusOrder.displayName = "FocusOrder";
|
|
211
|
+
|
|
212
|
+
var OpenDropdownByClick = function OpenDropdownByClick() {
|
|
213
|
+
var dropdown = /*#__PURE__*/_react.default.createElement(_Text.Text, {
|
|
214
|
+
variant: "sm-display"
|
|
215
|
+
}, /*#__PURE__*/_react.default.createElement(_.Clickable, {
|
|
216
|
+
display: "block",
|
|
217
|
+
width: "100%",
|
|
218
|
+
py: 1,
|
|
219
|
+
px: 2
|
|
220
|
+
}, "First"), /*#__PURE__*/_react.default.createElement(_.Clickable, {
|
|
221
|
+
display: "block",
|
|
222
|
+
width: "100%",
|
|
223
|
+
py: 1,
|
|
224
|
+
px: 2
|
|
225
|
+
}, "Second"), /*#__PURE__*/_react.default.createElement(_.Clickable, {
|
|
226
|
+
display: "block",
|
|
227
|
+
width: "100%",
|
|
228
|
+
py: 1,
|
|
229
|
+
px: 2
|
|
230
|
+
}, "Third"));
|
|
231
|
+
|
|
232
|
+
return /*#__PURE__*/_react.default.createElement(_.Flex, null, /*#__PURE__*/_react.default.createElement(_Dropdown.Dropdown, {
|
|
233
|
+
dropdown: dropdown,
|
|
234
|
+
openDropdownByClick: true
|
|
235
|
+
}, function (_ref6) {
|
|
236
|
+
var anchorRef = _ref6.anchorRef,
|
|
237
|
+
anchorProps = _ref6.anchorProps;
|
|
238
|
+
return /*#__PURE__*/_react.default.createElement(_Button.Button, _extends({
|
|
239
|
+
ref: anchorRef,
|
|
240
|
+
variant: "secondaryOutline",
|
|
241
|
+
size: "small",
|
|
242
|
+
mr: 1
|
|
243
|
+
}, anchorProps), "Click to display dropdown");
|
|
244
|
+
}));
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
exports.OpenDropdownByClick = OpenDropdownByClick;
|
|
248
|
+
OpenDropdownByClick.displayName = "OpenDropdownByClick";
|
|
211
249
|
//# sourceMappingURL=Dropdown.story.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/Dropdown/Dropdown.story.tsx"],"names":["title","Default","Object","keys","POSITION","map","placement","anchorRef","anchorProps","story","parameters","chromatic","disable","KeepInDOM","ChangeDimensions","height","setHeight","setInterval","Math","floor","random","FocusOrder","dropdown"],"mappings":"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","sourcesContent":["import React, { useEffect, useState } from \"react\"\nimport { States } from \"storybook-states\"\nimport { Clickable, Flex } from \"..\"\nimport { Position, POSITION } from \"../../utils\"\nimport { Box } from \"../Box\"\nimport { Button } from \"../Button\"\nimport { Text } from \"../Text\"\nimport { Dropdown, DropdownProps } from \"./Dropdown\"\n\nexport default {\n title: \"Components/Dropdown\",\n}\n\nexport const Default = () => {\n return (\n <States<Partial<DropdownProps>>\n states={Object.keys(POSITION).map((placement) => ({\n placement: placement as Position,\n }))}\n >\n <Dropdown\n placement=\"bottom\"\n visible\n dropdown={\n <Box width={300} p={2}>\n <Text\n as=\"a\"\n display=\"block\"\n variant=\"sm\"\n // @ts-expect-error MIGRATE_STRICT_MODE\n href=\"#\"\n >\n One\n </Text>\n\n <Text\n as=\"a\"\n display=\"block\"\n variant=\"sm\"\n // @ts-expect-error MIGRATE_STRICT_MODE\n href=\"#\"\n >\n Two\n </Text>\n\n <Text\n as=\"a\"\n display=\"block\"\n variant=\"sm\"\n // @ts-expect-error MIGRATE_STRICT_MODE\n href=\"#\"\n >\n Three\n </Text>\n </Box>\n }\n >\n {({ anchorRef, anchorProps }) => {\n return (\n <Box textAlign=\"center\">\n <Button\n ref={anchorRef}\n variant=\"secondaryOutline\"\n size=\"small\"\n {...anchorProps}\n >\n Hover to display dropdown\n </Button>\n </Box>\n )\n }}\n </Dropdown>\n </States>\n )\n}\n\nDefault.story = {\n parameters: { chromatic: { disable: true } },\n}\n\nexport const KeepInDOM = () => {\n return (\n <Dropdown\n placement=\"bottom\"\n keepInDOM\n dropdown={\n <Text p={2} variant=\"xs\">\n Content remains in DOM\n </Text>\n }\n >\n {({ anchorRef, anchorProps }) => {\n return (\n <Button\n ref={anchorRef}\n variant=\"secondaryOutline\"\n size=\"small\"\n {...anchorProps}\n >\n Hover to display dropdown\n </Button>\n )\n }}\n </Dropdown>\n )\n}\n\nKeepInDOM.story = {\n parameters: { chromatic: { disable: true } },\n}\n\nexport const ChangeDimensions = () => {\n const [height, setHeight] = useState(10)\n\n useEffect(() => {\n setInterval(() => {\n setHeight(Math.floor(Math.random() * 100))\n }, 1000)\n }, [])\n\n return (\n <Dropdown\n placement=\"top\"\n dropdown={<Box height={height} width={300} bg=\"rgba(0, 0, 0, 0.5)\" />}\n >\n {({ anchorRef, anchorProps }) => {\n return (\n <Button\n ref={anchorRef}\n variant=\"secondaryOutline\"\n size=\"small\"\n {...anchorProps}\n >\n Hover to display dropdown\n </Button>\n )\n }}\n </Dropdown>\n )\n}\n\nexport const FocusOrder = () => {\n const dropdown = (\n <Text variant=\"sm-display\">\n <Clickable display=\"block\" width=\"100%\" py={1} px={2}>\n First\n </Clickable>\n <Clickable display=\"block\" width=\"100%\" py={1} px={2}>\n Second\n </Clickable>\n <Clickable display=\"block\" width=\"100%\" py={1} px={2}>\n Third\n </Clickable>\n </Text>\n )\n\n return (\n <Flex>\n <Dropdown dropdown={dropdown}>\n {({ anchorRef, anchorProps }) => {\n return (\n <Button\n ref={anchorRef}\n variant=\"secondaryOutline\"\n size=\"small\"\n mr={1}\n {...anchorProps}\n >\n First Parent\n </Button>\n )\n }}\n </Dropdown>\n\n <Dropdown dropdown={dropdown}>\n {({ anchorRef, anchorProps }) => {\n return (\n <Button\n ref={anchorRef}\n variant=\"secondaryOutline\"\n size=\"small\"\n {...anchorProps}\n >\n Second Parent\n </Button>\n )\n }}\n </Dropdown>\n </Flex>\n )\n}\n"],"file":"Dropdown.story.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/Dropdown/Dropdown.story.tsx"],"names":["title","Default","Object","keys","POSITION","map","placement","anchorRef","anchorProps","story","parameters","chromatic","disable","KeepInDOM","ChangeDimensions","height","setHeight","setInterval","Math","floor","random","FocusOrder","dropdown","OpenDropdownByClick"],"mappings":"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","sourcesContent":["import React, { useEffect, useState } from \"react\"\nimport { States } from \"storybook-states\"\nimport { Clickable, Flex } from \"..\"\nimport { Position, POSITION } from \"../../utils\"\nimport { Box } from \"../Box\"\nimport { Button } from \"../Button\"\nimport { Text } from \"../Text\"\nimport { Dropdown, DropdownProps } from \"./Dropdown\"\n\nexport default {\n title: \"Components/Dropdown\",\n}\n\nexport const Default = () => {\n return (\n <States<Partial<DropdownProps>>\n states={Object.keys(POSITION).map((placement) => ({\n placement: placement as Position,\n }))}\n >\n <Dropdown\n placement=\"bottom\"\n visible\n dropdown={\n <Box width={300} p={2}>\n <Text\n as=\"a\"\n display=\"block\"\n variant=\"sm\"\n // @ts-expect-error MIGRATE_STRICT_MODE\n href=\"#\"\n >\n One\n </Text>\n\n <Text\n as=\"a\"\n display=\"block\"\n variant=\"sm\"\n // @ts-expect-error MIGRATE_STRICT_MODE\n href=\"#\"\n >\n Two\n </Text>\n\n <Text\n as=\"a\"\n display=\"block\"\n variant=\"sm\"\n // @ts-expect-error MIGRATE_STRICT_MODE\n href=\"#\"\n >\n Three\n </Text>\n </Box>\n }\n >\n {({ anchorRef, anchorProps }) => {\n return (\n <Box textAlign=\"center\">\n <Button\n ref={anchorRef}\n variant=\"secondaryOutline\"\n size=\"small\"\n {...anchorProps}\n >\n Hover to display dropdown\n </Button>\n </Box>\n )\n }}\n </Dropdown>\n </States>\n )\n}\n\nDefault.story = {\n parameters: { chromatic: { disable: true } },\n}\n\nexport const KeepInDOM = () => {\n return (\n <Dropdown\n placement=\"bottom\"\n keepInDOM\n dropdown={\n <Text p={2} variant=\"xs\">\n Content remains in DOM\n </Text>\n }\n >\n {({ anchorRef, anchorProps }) => {\n return (\n <Button\n ref={anchorRef}\n variant=\"secondaryOutline\"\n size=\"small\"\n {...anchorProps}\n >\n Hover to display dropdown\n </Button>\n )\n }}\n </Dropdown>\n )\n}\n\nKeepInDOM.story = {\n parameters: { chromatic: { disable: true } },\n}\n\nexport const ChangeDimensions = () => {\n const [height, setHeight] = useState(10)\n\n useEffect(() => {\n setInterval(() => {\n setHeight(Math.floor(Math.random() * 100))\n }, 1000)\n }, [])\n\n return (\n <Dropdown\n placement=\"top\"\n dropdown={<Box height={height} width={300} bg=\"rgba(0, 0, 0, 0.5)\" />}\n >\n {({ anchorRef, anchorProps }) => {\n return (\n <Button\n ref={anchorRef}\n variant=\"secondaryOutline\"\n size=\"small\"\n {...anchorProps}\n >\n Hover to display dropdown\n </Button>\n )\n }}\n </Dropdown>\n )\n}\n\nexport const FocusOrder = () => {\n const dropdown = (\n <Text variant=\"sm-display\">\n <Clickable display=\"block\" width=\"100%\" py={1} px={2}>\n First\n </Clickable>\n <Clickable display=\"block\" width=\"100%\" py={1} px={2}>\n Second\n </Clickable>\n <Clickable display=\"block\" width=\"100%\" py={1} px={2}>\n Third\n </Clickable>\n </Text>\n )\n\n return (\n <Flex>\n <Dropdown dropdown={dropdown}>\n {({ anchorRef, anchorProps }) => {\n return (\n <Button\n ref={anchorRef}\n variant=\"secondaryOutline\"\n size=\"small\"\n mr={1}\n {...anchorProps}\n >\n First Parent\n </Button>\n )\n }}\n </Dropdown>\n\n <Dropdown dropdown={dropdown}>\n {({ anchorRef, anchorProps }) => {\n return (\n <Button\n ref={anchorRef}\n variant=\"secondaryOutline\"\n size=\"small\"\n {...anchorProps}\n >\n Second Parent\n </Button>\n )\n }}\n </Dropdown>\n </Flex>\n )\n}\n\nexport const OpenDropdownByClick = () => {\n const dropdown = (\n <Text variant=\"sm-display\">\n <Clickable display=\"block\" width=\"100%\" py={1} px={2}>\n First\n </Clickable>\n <Clickable display=\"block\" width=\"100%\" py={1} px={2}>\n Second\n </Clickable>\n <Clickable display=\"block\" width=\"100%\" py={1} px={2}>\n Third\n </Clickable>\n </Text>\n )\n\n return (\n <Flex>\n <Dropdown dropdown={dropdown} openDropdownByClick>\n {({ anchorRef, anchorProps }) => {\n return (\n <Button\n ref={anchorRef}\n variant=\"secondaryOutline\"\n size=\"small\"\n mr={1}\n {...anchorProps}\n >\n Click to display dropdown\n </Button>\n )\n }}\n </Dropdown>\n </Flex>\n )\n}\n"],"file":"Dropdown.story.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@artsy/palette",
|
|
3
|
-
"version": "20.0
|
|
3
|
+
"version": "20.1.0",
|
|
4
4
|
"description": "Design system library for react components",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"publishConfig": {
|
|
@@ -178,5 +178,5 @@
|
|
|
178
178
|
"<rootDir>/www/"
|
|
179
179
|
]
|
|
180
180
|
},
|
|
181
|
-
"gitHead": "
|
|
181
|
+
"gitHead": "03da373e8eac3c7e9c9246d1f71163d688b3aff8"
|
|
182
182
|
}
|