@artsy/palette 27.1.0 → 28.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/elements/Link/Link.d.ts +2 -1
- package/dist/elements/Link/Link.js +2 -1
- package/dist/elements/Link/Link.js.map +1 -1
- package/dist/elements/Pointer/Pointer.d.ts +21 -0
- package/dist/elements/Pointer/Pointer.js +161 -0
- package/dist/elements/Pointer/Pointer.js.map +1 -0
- package/dist/elements/Pointer/index.d.ts +1 -0
- package/dist/elements/Pointer/index.js +19 -0
- package/dist/elements/Pointer/index.js.map +1 -0
- package/dist/elements/Popover/Popover.d.ts +18 -5
- package/dist/elements/Popover/Popover.js +58 -40
- package/dist/elements/Popover/Popover.js.map +1 -1
- package/dist/elements/Popover/Popover.story.js +29 -4
- package/dist/elements/Popover/Popover.story.js.map +1 -1
- package/dist/elements/Tooltip/Tooltip.d.ts +18 -4
- package/dist/elements/Tooltip/Tooltip.js +44 -23
- package/dist/elements/Tooltip/Tooltip.js.map +1 -1
- package/dist/elements/Tooltip/Tooltip.story.js +8 -3
- package/dist/elements/Tooltip/Tooltip.story.js.map +1 -1
- package/dist/helpers/index.d.ts +1 -0
- package/dist/helpers/index.js +13 -0
- package/dist/helpers/index.js.map +1 -1
- package/package.json +2 -2
- package/CHANGELOG.md +0 -5634
|
@@ -10,7 +10,8 @@ export interface LinkProps extends BoxProps {
|
|
|
10
10
|
/**
|
|
11
11
|
* Basic <a> tag styled with additional LinkProps
|
|
12
12
|
*
|
|
13
|
-
* @deprecated
|
|
13
|
+
* @deprecated Do not use this component!
|
|
14
|
+
* Tip: If working on Force, please use RouterLink.
|
|
14
15
|
*/
|
|
15
16
|
export declare const Link: import("styled-components").StyledComponentClass<import("react").ClassAttributes<HTMLAnchorElement> & import("react").AnchorHTMLAttributes<HTMLAnchorElement> & LinkProps, any, import("react").ClassAttributes<HTMLAnchorElement> & import("react").AnchorHTMLAttributes<HTMLAnchorElement> & LinkProps>;
|
|
16
17
|
export {};
|
|
@@ -26,7 +26,8 @@ var backwardsCompatCompute = function backwardsCompatCompute(state, props) {
|
|
|
26
26
|
/**
|
|
27
27
|
* Basic <a> tag styled with additional LinkProps
|
|
28
28
|
*
|
|
29
|
-
* @deprecated
|
|
29
|
+
* @deprecated Do not use this component!
|
|
30
|
+
* Tip: If working on Force, please use RouterLink.
|
|
30
31
|
*/
|
|
31
32
|
|
|
32
33
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/Link/Link.tsx"],"names":["computeUnderline","state","behavior","blocklist","none","includes","backwardsCompatCompute","props","noUnderline","underlineBehavior","Link","styled","a","hoverColor","boxMixin","displayName","defaultProps"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;;;AAUA,IAAMA,gBAAgB,GAAG,SAAnBA,gBAAmB,CACvBC,KADuB,EAEvBC,QAFuB,EAGZ;AACX,MAAMC,SAA+B,GACnCF,KAAK,KAAK,OAAV,GAAoB,CAAC,MAAD,CAApB,GAA+B,CAAC,OAAD,EAAU,MAAV,CADjC;AAEA,MAAMG,IAAI,GAAGD,SAAS,CAACE,QAAV,CAAmBH,QAAnB,CAAb;AACA,SAAOE,IAAI,GAAG,MAAH,GAAY,WAAvB;AACD,CARD;;AAUA,IAAME,sBAAsB,GAAG,SAAzBA,sBAAyB,CAACL,KAAD,EAAgBM,KAAhB,EAAqC;AAClE,MAAML,QAAQ,GAAGK,KAAK,CAACC,WAAN,GAAoB,OAApB,GAA8BD,KAAK,CAACE,iBAArD;AACA,SAAOT,gBAAgB,CAACC,KAAD,EAAQC,QAAR,CAAvB;AACD,CAHD;AAKA;AACA;AACA;AACA;AACA;;;AACO,IAAMQ,IAAI,GAAGC,0BAAOC,CAAV;AAAA;AAAA;AAAA,8GACN,oBAAM,UAAN,CADM,EAGI,UAACL,KAAD;AAAA,SAAWD,sBAAsB,CAAC,QAAD,EAAWC,KAAX,CAAjC;AAAA,CAHJ,EAKM,UAACA,KAAD;AAAA,SAAWD,sBAAsB,CAAC,OAAD,EAAUC,KAAV,CAAjC;AAAA,CALN,EAMJ,UAACA,KAAD;AAAA,SACPA,KAAK,CAACM,UAAN,GAAmB,oBAAMN,KAAK,CAACM,UAAZ,CAAnB,GAA6C,oBAAM,UAAN,CADtC;AAAA,CANI,EASbC,aATa,CAAV;;;AAYPJ,IAAI,CAACK,WAAL,GAAmB,MAAnB;AAEAL,IAAI,CAACM,YAAL,GAAoB;AAClBP,EAAAA,iBAAiB,EAAE;AADD,CAApB","sourcesContent":["import styled from \"styled-components\"\nimport { color } from \"../../helpers\"\nimport { Color } from \"../../Theme\"\nimport { boxMixin, BoxProps } from \"../Box\"\n\ntype UnderlineBehaviors = \"default\" | \"hover\" | \"none\"\n\nexport interface LinkProps extends BoxProps {\n hoverColor?: Color\n noUnderline?: boolean\n underlineBehavior?: UnderlineBehaviors\n}\n\nconst computeUnderline = (\n state: string,\n behavior: UnderlineBehaviors\n): string => {\n const blocklist: UnderlineBehaviors[] =\n state === \"hover\" ? [\"none\"] : [\"hover\", \"none\"]\n const none = blocklist.includes(behavior)\n return none ? \"none\" : \"underline\"\n}\n\nconst backwardsCompatCompute = (state: string, props: LinkProps) => {\n const behavior = props.noUnderline ? \"hover\" : props.underlineBehavior\n return computeUnderline(state, behavior!)\n}\n\n/**\n * Basic <a> tag styled with additional LinkProps\n *\n * @deprecated If working
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/Link/Link.tsx"],"names":["computeUnderline","state","behavior","blocklist","none","includes","backwardsCompatCompute","props","noUnderline","underlineBehavior","Link","styled","a","hoverColor","boxMixin","displayName","defaultProps"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;;;AAUA,IAAMA,gBAAgB,GAAG,SAAnBA,gBAAmB,CACvBC,KADuB,EAEvBC,QAFuB,EAGZ;AACX,MAAMC,SAA+B,GACnCF,KAAK,KAAK,OAAV,GAAoB,CAAC,MAAD,CAApB,GAA+B,CAAC,OAAD,EAAU,MAAV,CADjC;AAEA,MAAMG,IAAI,GAAGD,SAAS,CAACE,QAAV,CAAmBH,QAAnB,CAAb;AACA,SAAOE,IAAI,GAAG,MAAH,GAAY,WAAvB;AACD,CARD;;AAUA,IAAME,sBAAsB,GAAG,SAAzBA,sBAAyB,CAACL,KAAD,EAAgBM,KAAhB,EAAqC;AAClE,MAAML,QAAQ,GAAGK,KAAK,CAACC,WAAN,GAAoB,OAApB,GAA8BD,KAAK,CAACE,iBAArD;AACA,SAAOT,gBAAgB,CAACC,KAAD,EAAQC,QAAR,CAAvB;AACD,CAHD;AAKA;AACA;AACA;AACA;AACA;AACA;;;AACO,IAAMQ,IAAI,GAAGC,0BAAOC,CAAV;AAAA;AAAA;AAAA,8GACN,oBAAM,UAAN,CADM,EAGI,UAACL,KAAD;AAAA,SAAWD,sBAAsB,CAAC,QAAD,EAAWC,KAAX,CAAjC;AAAA,CAHJ,EAKM,UAACA,KAAD;AAAA,SAAWD,sBAAsB,CAAC,OAAD,EAAUC,KAAV,CAAjC;AAAA,CALN,EAMJ,UAACA,KAAD;AAAA,SACPA,KAAK,CAACM,UAAN,GAAmB,oBAAMN,KAAK,CAACM,UAAZ,CAAnB,GAA6C,oBAAM,UAAN,CADtC;AAAA,CANI,EASbC,aATa,CAAV;;;AAYPJ,IAAI,CAACK,WAAL,GAAmB,MAAnB;AAEAL,IAAI,CAACM,YAAL,GAAoB;AAClBP,EAAAA,iBAAiB,EAAE;AADD,CAApB","sourcesContent":["import styled from \"styled-components\"\nimport { color } from \"../../helpers\"\nimport { Color } from \"../../Theme\"\nimport { boxMixin, BoxProps } from \"../Box\"\n\ntype UnderlineBehaviors = \"default\" | \"hover\" | \"none\"\n\nexport interface LinkProps extends BoxProps {\n hoverColor?: Color\n noUnderline?: boolean\n underlineBehavior?: UnderlineBehaviors\n}\n\nconst computeUnderline = (\n state: string,\n behavior: UnderlineBehaviors\n): string => {\n const blocklist: UnderlineBehaviors[] =\n state === \"hover\" ? [\"none\"] : [\"hover\", \"none\"]\n const none = blocklist.includes(behavior)\n return none ? \"none\" : \"underline\"\n}\n\nconst backwardsCompatCompute = (state: string, props: LinkProps) => {\n const behavior = props.noUnderline ? \"hover\" : props.underlineBehavior\n return computeUnderline(state, behavior!)\n}\n\n/**\n * Basic <a> tag styled with additional LinkProps\n *\n * @deprecated Do not use this component! \n * Tip: If working on Force, please use RouterLink. \n */\nexport const Link = styled.a<LinkProps>`\n color: ${color(\"black100\")};\n transition: color 0.25s;\n text-decoration: ${(props) => backwardsCompatCompute(\"normal\", props)};\n &:hover {\n text-decoration: ${(props) => backwardsCompatCompute(\"hover\", props)};\n color: ${(props) =>\n props.hoverColor ? color(props.hoverColor) : color(\"black100\")};\n }\n ${boxMixin};\n`\n\nLink.displayName = \"Link\"\n\nLink.defaultProps = {\n underlineBehavior: \"default\",\n}\n"],"file":"Link.js"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { FC } from "react";
|
|
2
|
+
import { Position } from "../../utils";
|
|
3
|
+
declare const POINTER_VARIANTS: {
|
|
4
|
+
defaultLight: {
|
|
5
|
+
backgroundColor: string;
|
|
6
|
+
};
|
|
7
|
+
defaultDark: {
|
|
8
|
+
backgroundColor: string;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
declare type PointerVariant = keyof typeof POINTER_VARIANTS;
|
|
12
|
+
export interface PointerProps {
|
|
13
|
+
isFlipped: boolean;
|
|
14
|
+
placement: Position;
|
|
15
|
+
variant?: PointerVariant;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Internal-use component for displaying a triangular pointer to an anchor node
|
|
19
|
+
*/
|
|
20
|
+
export declare const Pointer: FC<PointerProps>;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.Pointer = void 0;
|
|
9
|
+
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
|
|
12
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
13
|
+
|
|
14
|
+
var _styledSystem = require("styled-system");
|
|
15
|
+
|
|
16
|
+
var _helpers = require("../../helpers");
|
|
17
|
+
|
|
18
|
+
var _Box = require("../Box");
|
|
19
|
+
|
|
20
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
+
|
|
22
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
23
|
+
|
|
24
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
25
|
+
|
|
26
|
+
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
27
|
+
|
|
28
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
29
|
+
|
|
30
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
31
|
+
|
|
32
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
33
|
+
|
|
34
|
+
var POINTER_VARIANTS = {
|
|
35
|
+
defaultLight: {
|
|
36
|
+
backgroundColor: "white100"
|
|
37
|
+
},
|
|
38
|
+
defaultDark: {
|
|
39
|
+
backgroundColor: "black100"
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Internal-use component for displaying a triangular pointer to an anchor node
|
|
45
|
+
*/
|
|
46
|
+
var Pointer = function Pointer(_ref) {
|
|
47
|
+
var isFlipped = _ref.isFlipped,
|
|
48
|
+
placement = _ref.placement,
|
|
49
|
+
_ref$variant = _ref.variant,
|
|
50
|
+
variant = _ref$variant === void 0 ? "defaultLight" : _ref$variant;
|
|
51
|
+
var position = (0, _react.useMemo)(function () {
|
|
52
|
+
switch (placement) {
|
|
53
|
+
case "top-start":
|
|
54
|
+
return {
|
|
55
|
+
bottom: isFlipped ? "100%" : 0,
|
|
56
|
+
left: "".concat(POINTER_WIDTH, "px")
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
case "top":
|
|
60
|
+
return {
|
|
61
|
+
bottom: isFlipped ? "100%" : 0,
|
|
62
|
+
left: "calc(50% - ".concat(POINTER_WIDTH / 2, "px)")
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
case "top-end":
|
|
66
|
+
return {
|
|
67
|
+
bottom: isFlipped ? "100%" : 0,
|
|
68
|
+
right: "".concat(POINTER_WIDTH * 2, "px")
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
case "bottom-start":
|
|
72
|
+
return {
|
|
73
|
+
top: isFlipped ? "100%" : 0,
|
|
74
|
+
left: "".concat(POINTER_WIDTH, "px")
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
case "bottom":
|
|
78
|
+
return {
|
|
79
|
+
top: isFlipped ? "100%" : 0,
|
|
80
|
+
left: "calc(50% - ".concat(POINTER_WIDTH / 2, "px)")
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
case "bottom-end":
|
|
84
|
+
return {
|
|
85
|
+
top: isFlipped ? "100%" : 0,
|
|
86
|
+
right: "".concat(POINTER_WIDTH * 2, "px")
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
case "left-start":
|
|
90
|
+
return _objectSpread({
|
|
91
|
+
top: "".concat(POINTER_WIDTH, "px")
|
|
92
|
+
}, isFlipped ? {
|
|
93
|
+
left: "-".concat(POINTER_WIDTH / 2, "px")
|
|
94
|
+
} : {
|
|
95
|
+
right: "".concat(POINTER_WIDTH / 2, "px")
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
case "left":
|
|
99
|
+
return _objectSpread({
|
|
100
|
+
top: "50%"
|
|
101
|
+
}, isFlipped ? {
|
|
102
|
+
left: "-".concat(POINTER_WIDTH / 2, "px")
|
|
103
|
+
} : {
|
|
104
|
+
right: "".concat(POINTER_WIDTH / 2, "px")
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
case "left-end":
|
|
108
|
+
return _objectSpread({
|
|
109
|
+
bottom: "".concat(POINTER_WIDTH, "px")
|
|
110
|
+
}, isFlipped ? {
|
|
111
|
+
left: "-".concat(POINTER_WIDTH / 2, "px")
|
|
112
|
+
} : {
|
|
113
|
+
right: "".concat(POINTER_WIDTH / 2, "px")
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
case "right-start":
|
|
117
|
+
return _objectSpread({
|
|
118
|
+
top: "".concat(POINTER_WIDTH, "px")
|
|
119
|
+
}, isFlipped ? {
|
|
120
|
+
right: "".concat(POINTER_WIDTH / 2, "px")
|
|
121
|
+
} : {
|
|
122
|
+
left: "-".concat(POINTER_WIDTH / 2, "px")
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
case "right":
|
|
126
|
+
return _objectSpread({
|
|
127
|
+
top: "50%"
|
|
128
|
+
}, isFlipped ? {
|
|
129
|
+
right: "".concat(POINTER_WIDTH / 2, "px")
|
|
130
|
+
} : {
|
|
131
|
+
left: "-".concat(POINTER_WIDTH / 2, "px")
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
case "right-end":
|
|
135
|
+
return _objectSpread({
|
|
136
|
+
bottom: "".concat(POINTER_WIDTH, "px")
|
|
137
|
+
}, isFlipped ? {
|
|
138
|
+
right: "".concat(POINTER_WIDTH / 2, "px")
|
|
139
|
+
} : {
|
|
140
|
+
left: "-".concat(POINTER_WIDTH / 2, "px")
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
}, [isFlipped, placement]);
|
|
144
|
+
return /*#__PURE__*/_react.default.createElement(Container, _extends({
|
|
145
|
+
variant: variant
|
|
146
|
+
}, position));
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
exports.Pointer = Pointer;
|
|
150
|
+
Pointer.displayName = "Pointer";
|
|
151
|
+
var POINTER_SIZE = 10; // px
|
|
152
|
+
|
|
153
|
+
var POINTER_WIDTH = Math.sqrt(2 * Math.pow(10, 2)); // px
|
|
154
|
+
|
|
155
|
+
var Container = (0, _styledComponents.default)(_Box.Box).withConfig({
|
|
156
|
+
displayName: "Pointer__Container",
|
|
157
|
+
componentId: "sj9j6h-0"
|
|
158
|
+
})(["z-index:-1;position:absolute;&::after{content:\"\";position:absolute;width:", "px;height:", "px;transform-origin:0 0;transform:rotate(-45deg);box-shadow:", ";", "}"], POINTER_SIZE, POINTER_SIZE, _helpers.DROP_SHADOW, (0, _styledSystem.variant)({
|
|
159
|
+
variants: POINTER_VARIANTS
|
|
160
|
+
}));
|
|
161
|
+
//# sourceMappingURL=Pointer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/Pointer/Pointer.tsx"],"names":["POINTER_VARIANTS","defaultLight","backgroundColor","defaultDark","Pointer","isFlipped","placement","variant","position","bottom","left","POINTER_WIDTH","right","top","POINTER_SIZE","Math","sqrt","pow","Container","Box","DROP_SHADOW","variants"],"mappings":"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","sourcesContent":["import React, { FC, useMemo } from \"react\"\nimport styled from \"styled-components\"\nimport { variant } from \"styled-system\"\nimport { DROP_SHADOW } from \"../../helpers\"\nimport { Position } from \"../../utils\"\nimport { Box } from \"../Box\"\n\nconst POINTER_VARIANTS = {\n defaultLight: {\n backgroundColor: \"white100\",\n },\n defaultDark: {\n backgroundColor: \"black100\",\n },\n}\n\ntype PointerVariant = keyof typeof POINTER_VARIANTS\n\nexport interface PointerProps {\n isFlipped: boolean\n placement: Position\n variant?: PointerVariant\n}\n\n/**\n * Internal-use component for displaying a triangular pointer to an anchor node\n */\nexport const Pointer: FC<PointerProps> = ({\n isFlipped,\n placement,\n variant = \"defaultLight\",\n}) => {\n const position = useMemo(() => {\n switch (placement) {\n case \"top-start\":\n return {\n bottom: isFlipped ? \"100%\" : 0,\n left: `${POINTER_WIDTH}px`,\n }\n case \"top\":\n return {\n bottom: isFlipped ? \"100%\" : 0,\n left: `calc(50% - ${POINTER_WIDTH / 2}px)`,\n }\n case \"top-end\":\n return {\n bottom: isFlipped ? \"100%\" : 0,\n right: `${POINTER_WIDTH * 2}px`,\n }\n case \"bottom-start\":\n return {\n top: isFlipped ? \"100%\" : 0,\n left: `${POINTER_WIDTH}px`,\n }\n case \"bottom\":\n return {\n top: isFlipped ? \"100%\" : 0,\n left: `calc(50% - ${POINTER_WIDTH / 2}px)`,\n }\n case \"bottom-end\":\n return {\n top: isFlipped ? \"100%\" : 0,\n right: `${POINTER_WIDTH * 2}px`,\n }\n case \"left-start\":\n return {\n top: `${POINTER_WIDTH}px`,\n ...(isFlipped\n ? { left: `-${POINTER_WIDTH / 2}px` }\n : { right: `${POINTER_WIDTH / 2}px` }),\n }\n case \"left\":\n return {\n top: \"50%\",\n ...(isFlipped\n ? { left: `-${POINTER_WIDTH / 2}px` }\n : { right: `${POINTER_WIDTH / 2}px` }),\n }\n case \"left-end\":\n return {\n bottom: `${POINTER_WIDTH}px`,\n ...(isFlipped\n ? { left: `-${POINTER_WIDTH / 2}px` }\n : { right: `${POINTER_WIDTH / 2}px` }),\n }\n case \"right-start\":\n return {\n top: `${POINTER_WIDTH}px`,\n ...(isFlipped\n ? { right: `${POINTER_WIDTH / 2}px` }\n : { left: `-${POINTER_WIDTH / 2}px` }),\n }\n case \"right\":\n return {\n top: \"50%\",\n ...(isFlipped\n ? { right: `${POINTER_WIDTH / 2}px` }\n : { left: `-${POINTER_WIDTH / 2}px` }),\n }\n case \"right-end\":\n return {\n bottom: `${POINTER_WIDTH}px`,\n ...(isFlipped\n ? { right: `${POINTER_WIDTH / 2}px` }\n : { left: `-${POINTER_WIDTH / 2}px` }),\n }\n }\n }, [isFlipped, placement])\n\n return <Container variant={variant} {...position} />\n}\n\nconst POINTER_SIZE = 10 // px\nconst POINTER_WIDTH = Math.sqrt(2 * Math.pow(10, 2)) // px\n\nconst Container = styled(Box)<{ variant: PointerVariant }>`\n z-index: -1;\n position: absolute;\n\n &::after {\n content: \"\";\n position: absolute;\n width: ${POINTER_SIZE}px;\n height: ${POINTER_SIZE}px;\n transform-origin: 0 0;\n transform: rotate(-45deg);\n box-shadow: ${DROP_SHADOW};\n ${variant({ variants: POINTER_VARIANTS })}\n }\n`\n"],"file":"Pointer.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./Pointer";
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
|
|
7
|
+
var _Pointer = require("./Pointer");
|
|
8
|
+
|
|
9
|
+
Object.keys(_Pointer).forEach(function (key) {
|
|
10
|
+
if (key === "default" || key === "__esModule") return;
|
|
11
|
+
if (key in exports && exports[key] === _Pointer[key]) return;
|
|
12
|
+
Object.defineProperty(exports, key, {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function get() {
|
|
15
|
+
return _Pointer[key];
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/Pointer/index.ts"],"names":[],"mappings":";;;;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["export * from \"./Pointer\"\n"],"file":"index.js"}
|
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { Position } from "../../utils";
|
|
3
3
|
import { BoxProps } from "../Box";
|
|
4
|
+
export declare const POPOVER_VARIANTS: {
|
|
5
|
+
defaultLight: {
|
|
6
|
+
backgroundColor: string;
|
|
7
|
+
color: string;
|
|
8
|
+
};
|
|
9
|
+
defaultDark: {
|
|
10
|
+
backgroundColor: string;
|
|
11
|
+
color: string;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
export declare type PopoverVariant = keyof typeof POPOVER_VARIANTS;
|
|
4
15
|
export interface PopoverActions {
|
|
5
16
|
/** Call to show popover */
|
|
6
17
|
onVisible(): void;
|
|
@@ -10,13 +21,15 @@ export interface PopoverActions {
|
|
|
10
21
|
anchorRef: React.MutableRefObject<HTMLElement>;
|
|
11
22
|
}
|
|
12
23
|
export interface PopoverProps extends BoxProps {
|
|
13
|
-
title?: React.ReactNode;
|
|
14
|
-
placement?: Position;
|
|
15
|
-
/** Intially visible by default? */
|
|
16
|
-
visible?: boolean;
|
|
17
|
-
popover: React.ReactNode;
|
|
18
24
|
children: ({ anchorRef, onVisible, onHide }: PopoverActions) => JSX.Element;
|
|
19
25
|
onClose?: () => void;
|
|
26
|
+
placement?: Position;
|
|
27
|
+
/** Display triangular pointer back to anchor node */
|
|
28
|
+
pointer?: boolean;
|
|
29
|
+
popover: React.ReactNode;
|
|
30
|
+
variant?: PopoverVariant;
|
|
31
|
+
/** Initial default visibility */
|
|
32
|
+
visible?: boolean;
|
|
20
33
|
}
|
|
21
34
|
/**
|
|
22
35
|
* A `Popover` is a small modal-type element which is anchored, and can be
|
|
@@ -5,15 +5,15 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" =
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.Popover = void 0;
|
|
8
|
+
exports.Popover = exports.POPOVER_VARIANTS = void 0;
|
|
9
9
|
|
|
10
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
11
|
|
|
12
12
|
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
13
13
|
|
|
14
|
-
var
|
|
14
|
+
var _styledSystem = require("styled-system");
|
|
15
15
|
|
|
16
|
-
var
|
|
16
|
+
var _helpers = require("../../helpers");
|
|
17
17
|
|
|
18
18
|
var _svgs = require("../../svgs");
|
|
19
19
|
|
|
@@ -25,13 +25,9 @@ var _Box = require("../Box");
|
|
|
25
25
|
|
|
26
26
|
var _Clickable = require("../Clickable");
|
|
27
27
|
|
|
28
|
-
var
|
|
29
|
-
|
|
30
|
-
var _Spacer = require("../Spacer");
|
|
28
|
+
var _Pointer = require("../Pointer");
|
|
31
29
|
|
|
32
|
-
var
|
|
33
|
-
|
|
34
|
-
var _excluded = ["title", "placement", "visible", "children", "popover", "onClose"];
|
|
30
|
+
var _excluded = ["children", "onClose", "placement", "pointer", "popover", "variant", "visible"];
|
|
35
31
|
|
|
36
32
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
37
33
|
|
|
@@ -57,19 +53,34 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return
|
|
|
57
53
|
|
|
58
54
|
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
59
55
|
|
|
56
|
+
var POPOVER_VARIANTS = {
|
|
57
|
+
defaultLight: {
|
|
58
|
+
backgroundColor: "white100",
|
|
59
|
+
color: "black100"
|
|
60
|
+
},
|
|
61
|
+
defaultDark: {
|
|
62
|
+
backgroundColor: "black100",
|
|
63
|
+
color: "white100"
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
exports.POPOVER_VARIANTS = POPOVER_VARIANTS;
|
|
67
|
+
|
|
60
68
|
/**
|
|
61
69
|
* A `Popover` is a small modal-type element which is anchored, and can be
|
|
62
70
|
* positioned relative to, another element.
|
|
63
71
|
*/
|
|
64
72
|
var Popover = function Popover(_ref) {
|
|
65
|
-
var
|
|
73
|
+
var children = _ref.children,
|
|
74
|
+
onClose = _ref.onClose,
|
|
66
75
|
_ref$placement = _ref.placement,
|
|
67
76
|
placement = _ref$placement === void 0 ? "top" : _ref$placement,
|
|
77
|
+
_ref$pointer = _ref.pointer,
|
|
78
|
+
pointer = _ref$pointer === void 0 ? false : _ref$pointer,
|
|
79
|
+
popover = _ref.popover,
|
|
80
|
+
_ref$variant = _ref.variant,
|
|
81
|
+
variant = _ref$variant === void 0 ? "defaultLight" : _ref$variant,
|
|
68
82
|
_ref$visible = _ref.visible,
|
|
69
83
|
_visible = _ref$visible === void 0 ? false : _ref$visible,
|
|
70
|
-
children = _ref.children,
|
|
71
|
-
popover = _ref.popover,
|
|
72
|
-
onClose = _ref.onClose,
|
|
73
84
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
74
85
|
|
|
75
86
|
var _useState = (0, _react.useState)(false),
|
|
@@ -120,7 +131,8 @@ var Popover = function Popover(_ref) {
|
|
|
120
131
|
active: visible
|
|
121
132
|
}),
|
|
122
133
|
anchorRef = _usePosition.anchorRef,
|
|
123
|
-
tooltipRef = _usePosition.tooltipRef
|
|
134
|
+
tooltipRef = _usePosition.tooltipRef,
|
|
135
|
+
isFlipped = _usePosition.state.isFlipped;
|
|
124
136
|
|
|
125
137
|
(0, _utils.useClickOutside)({
|
|
126
138
|
ref: tooltipRef,
|
|
@@ -132,44 +144,50 @@ var Popover = function Popover(_ref) {
|
|
|
132
144
|
anchorRef: anchorRef,
|
|
133
145
|
onVisible: onVisible,
|
|
134
146
|
onHide: onHide
|
|
135
|
-
}), visible && /*#__PURE__*/_react.default.createElement(Tip,
|
|
147
|
+
}), visible && /*#__PURE__*/_react.default.createElement(Tip, {
|
|
136
148
|
tabIndex: 0,
|
|
137
149
|
ref: tooltipRef,
|
|
138
150
|
zIndex: 1,
|
|
139
151
|
display: "inline-block",
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
},
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
},
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
x: 4
|
|
151
|
-
})), /*#__PURE__*/_react.default.createElement(_Spacer.Spacer, {
|
|
152
|
-
y: 0.5
|
|
153
|
-
})), /*#__PURE__*/_react.default.createElement(_Clickable.Clickable, {
|
|
154
|
-
position: "absolute",
|
|
155
|
-
right: 0,
|
|
156
|
-
top: 0,
|
|
157
|
-
pt: 2,
|
|
158
|
-
px: 1,
|
|
159
|
-
mx: 0.5,
|
|
152
|
+
position: "relative",
|
|
153
|
+
variant: variant
|
|
154
|
+
}, pointer && /*#__PURE__*/_react.default.createElement(_Pointer.Pointer, {
|
|
155
|
+
variant: variant,
|
|
156
|
+
placement: placement,
|
|
157
|
+
isFlipped: isFlipped
|
|
158
|
+
}), /*#__PURE__*/_react.default.createElement(Close, {
|
|
159
|
+
position: "relative",
|
|
160
|
+
zIndex: 2,
|
|
161
|
+
p: 1,
|
|
160
162
|
onClick: handleHide,
|
|
161
163
|
"aria-label": "Close"
|
|
162
164
|
}, /*#__PURE__*/_react.default.createElement(_svgs.CloseIcon, {
|
|
163
|
-
fill: "
|
|
165
|
+
fill: "currentColor",
|
|
164
166
|
display: "block"
|
|
165
|
-
})),
|
|
166
|
-
|
|
167
|
-
|
|
167
|
+
})), /*#__PURE__*/_react.default.createElement(Panel, _extends({
|
|
168
|
+
variant: variant,
|
|
169
|
+
position: "relative",
|
|
170
|
+
py: 2,
|
|
171
|
+
px: 1,
|
|
172
|
+
zIndex: 1
|
|
173
|
+
}, rest), popover)));
|
|
168
174
|
};
|
|
169
175
|
|
|
170
176
|
exports.Popover = Popover;
|
|
171
177
|
var Tip = (0, _styledComponents.default)(_Box.Box).withConfig({
|
|
172
178
|
displayName: "Popover__Tip",
|
|
173
179
|
componentId: "x2qqfz-0"
|
|
174
|
-
})(["position:fixed;z-index:1;text-align:left;transition:opacity 250ms ease-out;box-shadow:", ";"], _helpers.DROP_SHADOW)
|
|
180
|
+
})(["position:fixed;z-index:1;text-align:left;transition:opacity 250ms ease-out;box-shadow:", ";", ""], _helpers.DROP_SHADOW, (0, _styledSystem.variant)({
|
|
181
|
+
variants: POPOVER_VARIANTS
|
|
182
|
+
}));
|
|
183
|
+
var Panel = (0, _styledComponents.default)(_Box.Box).withConfig({
|
|
184
|
+
displayName: "Popover__Panel",
|
|
185
|
+
componentId: "x2qqfz-1"
|
|
186
|
+
})(["", ""], (0, _styledSystem.variant)({
|
|
187
|
+
variants: POPOVER_VARIANTS
|
|
188
|
+
}));
|
|
189
|
+
var Close = (0, _styledComponents.default)(_Clickable.Clickable).withConfig({
|
|
190
|
+
displayName: "Popover__Close",
|
|
191
|
+
componentId: "x2qqfz-2"
|
|
192
|
+
})(["float:right;"]);
|
|
175
193
|
//# sourceMappingURL=Popover.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/Popover/Popover.tsx"],"names":["
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/Popover/Popover.tsx"],"names":["POPOVER_VARIANTS","defaultLight","backgroundColor","color","defaultDark","Popover","children","onClose","placement","pointer","popover","variant","visible","_visible","rest","setVisible","tooltipRef","current","focus","anchorRef","onVisible","onHide","handleHide","handleKeydown","event","key","document","addEventListener","removeEventListener","position","offset","active","isFlipped","state","ref","onClickOutside","when","type","Tip","Box","DROP_SHADOW","variants","Panel","Close","Clickable"],"mappings":"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","sourcesContent":["import React, { useCallback, useEffect, useState } from \"react\"\nimport styled from \"styled-components\"\nimport { variant } from \"styled-system\"\nimport { DROP_SHADOW } from \"../../helpers\"\nimport { CloseIcon } from \"../../svgs\"\nimport { Position, useClickOutside, usePosition } from \"../../utils\"\nimport { useUpdateEffect } from \"../../utils/useUpdateEffect\"\nimport { Box, BoxProps } from \"../Box\"\nimport { Clickable } from \"../Clickable\"\nimport { Pointer } from \"../Pointer\"\n\nexport const POPOVER_VARIANTS = {\n defaultLight: {\n backgroundColor: \"white100\",\n color: \"black100\",\n },\n defaultDark: {\n backgroundColor: \"black100\",\n color: \"white100\",\n },\n}\n\nexport type PopoverVariant = keyof typeof POPOVER_VARIANTS\n\nexport interface PopoverActions {\n /** Call to show popover */\n onVisible(): void\n /** Call to hide popover */\n onHide(): void\n /** Pass ref to element you want the popover to be anchored to */\n anchorRef: React.MutableRefObject<HTMLElement>\n}\n\nexport interface PopoverProps extends BoxProps {\n children: ({ anchorRef, onVisible, onHide }: PopoverActions) => JSX.Element\n onClose?: () => void\n placement?: Position\n /** Display triangular pointer back to anchor node */\n pointer?: boolean\n popover: React.ReactNode\n variant?: PopoverVariant\n /** Initial default visibility */\n visible?: boolean\n}\n\n/**\n * A `Popover` is a small modal-type element which is anchored, and can be\n * positioned relative to, another element.\n */\nexport const Popover: React.FC<PopoverProps> = ({\n children,\n onClose,\n placement = \"top\",\n pointer = false,\n popover,\n variant = \"defaultLight\",\n visible: _visible = false,\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 popover and anchor\n useUpdateEffect(() => {\n if (visible && tooltipRef.current) {\n tooltipRef.current.focus()\n return\n }\n\n if (!anchorRef.current) return\n anchorRef.current.focus()\n }, [visible])\n\n const onVisible = useCallback(() => {\n setVisible(true)\n }, [])\n\n const onHide = useCallback(() => {\n setVisible(false)\n }, [])\n\n const handleHide = useCallback(() => {\n onHide()\n onClose?.()\n }, [onHide, onClose])\n\n useEffect(() => {\n const handleKeydown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n handleHide()\n }\n }\n\n document.addEventListener(\"keydown\", handleKeydown)\n\n return () => {\n document.removeEventListener(\"keydown\", handleKeydown)\n }\n }, [handleHide])\n\n const {\n anchorRef,\n tooltipRef,\n state: { isFlipped },\n } = usePosition({\n position: placement,\n offset: 10,\n active: visible,\n })\n\n useClickOutside({\n ref: tooltipRef,\n onClickOutside: handleHide,\n when: visible,\n type: \"click\",\n })\n\n return (\n <>\n {children({ anchorRef: anchorRef as any, onVisible, onHide })}\n\n {visible && (\n <Tip\n tabIndex={0}\n ref={tooltipRef as any}\n zIndex={1}\n display=\"inline-block\"\n position=\"relative\"\n variant={variant}\n >\n {pointer && (\n <Pointer\n variant={variant}\n placement={placement}\n isFlipped={isFlipped}\n />\n )}\n\n <Close\n position=\"relative\"\n zIndex={2}\n p={1}\n onClick={handleHide}\n aria-label=\"Close\"\n >\n <CloseIcon fill=\"currentColor\" display=\"block\" />\n </Close>\n\n <Panel\n variant={variant}\n position=\"relative\"\n py={2}\n px={1}\n zIndex={1}\n {...rest}\n >\n {popover}\n </Panel>\n </Tip>\n )}\n </>\n )\n}\n\nconst Tip = styled(Box)<{ variant?: PopoverVariant }>`\n position: fixed;\n z-index: 1;\n text-align: left;\n transition: opacity 250ms ease-out;\n box-shadow: ${DROP_SHADOW};\n ${variant({ variants: POPOVER_VARIANTS })}\n`\n\nconst Panel = styled(Box)<{ variant?: PopoverVariant }>`\n ${variant({ variants: POPOVER_VARIANTS })}\n`\n\nconst Close = styled(Clickable)`\n float: right;\n`\n"],"file":"Popover.js"}
|
|
@@ -34,10 +34,34 @@ exports.default = _default;
|
|
|
34
34
|
var Default = function Default() {
|
|
35
35
|
return /*#__PURE__*/_react.default.createElement(_storybookStates.States, {
|
|
36
36
|
states: [{}, {
|
|
37
|
-
title: "Example Title",
|
|
38
37
|
visible: true
|
|
39
38
|
}, {
|
|
40
39
|
onClose: (0, _addonActions.action)("onClose")
|
|
40
|
+
}, {
|
|
41
|
+
visible: true,
|
|
42
|
+
popover: /*#__PURE__*/_react.default.createElement(_Text.Text, {
|
|
43
|
+
variant: "xs",
|
|
44
|
+
width: 300
|
|
45
|
+
}, "| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \u2014 (Content interaction with close button.)")
|
|
46
|
+
}, {
|
|
47
|
+
pointer: true,
|
|
48
|
+
visible: true,
|
|
49
|
+
p: 0,
|
|
50
|
+
popover: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, new Array(4).fill(0).map(function (_, i) {
|
|
51
|
+
return /*#__PURE__*/_react.default.createElement(_Text.Text, {
|
|
52
|
+
key: i,
|
|
53
|
+
variant: "sm-display",
|
|
54
|
+
overflowEllipsis: true,
|
|
55
|
+
bg: "red10",
|
|
56
|
+
px: 1,
|
|
57
|
+
py: 0.5
|
|
58
|
+
}, "Example Item");
|
|
59
|
+
}))
|
|
60
|
+
}, {
|
|
61
|
+
variant: "defaultDark",
|
|
62
|
+
placement: "bottom",
|
|
63
|
+
visible: true,
|
|
64
|
+
pointer: true
|
|
41
65
|
}]
|
|
42
66
|
}, /*#__PURE__*/_react.default.createElement(_Popover.Popover, {
|
|
43
67
|
placement: "bottom",
|
|
@@ -81,7 +105,9 @@ var Placement = function Placement() {
|
|
|
81
105
|
popover: /*#__PURE__*/_react.default.createElement(_Text.Text, {
|
|
82
106
|
variant: "xs"
|
|
83
107
|
}, JSON.stringify(props)),
|
|
84
|
-
visible: true
|
|
108
|
+
visible: true,
|
|
109
|
+
variant: "defaultDark",
|
|
110
|
+
pointer: true
|
|
85
111
|
}, props), function (_ref2) {
|
|
86
112
|
var anchorRef = _ref2.anchorRef;
|
|
87
113
|
return /*#__PURE__*/_react.default.createElement(_Text.Text, {
|
|
@@ -91,8 +117,7 @@ var Placement = function Placement() {
|
|
|
91
117
|
p: 1,
|
|
92
118
|
maxWidth: "50%",
|
|
93
119
|
mx: "auto",
|
|
94
|
-
bg: "
|
|
95
|
-
color: "white100"
|
|
120
|
+
bg: "black10"
|
|
96
121
|
}, JSON.stringify(props));
|
|
97
122
|
});
|
|
98
123
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/Popover/Popover.story.tsx"],"names":["CONTENT","title","Default","visible","onClose","onVisible","anchorRef","story","parameters","chromatic","disable","Placement","Object","keys","POSITION","
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/Popover/Popover.story.tsx"],"names":["CONTENT","title","Default","visible","onClose","popover","pointer","p","Array","fill","map","_","i","variant","placement","onVisible","anchorRef","story","parameters","chromatic","disable","Placement","Object","keys","POSITION","props","JSON","stringify"],"mappings":"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","sourcesContent":["import { action } from \"@storybook/addon-actions\"\nimport React from \"react\"\nimport { States } from \"storybook-states\"\nimport { Position, POSITION } from \"../../utils\"\nimport { Box } from \"../Box\"\nimport { Button } from \"../Button\"\nimport { Text } from \"../Text\"\nimport { Popover, PopoverProps } from \"./Popover\"\n\nconst CONTENT =\n \"Lorem ipsum dolor sit amet consectetur adipisicing elit. Modi eius autem aliquid cumque, mollitia incidunt totam. Id ut quae hic in quisquam, cupiditate iure nobis, provident minus voluptatem tenetur consequatur.\"\n\nexport default {\n title: \"Components/Popover\",\n}\n\nexport const Default = () => {\n return (\n <States<Partial<PopoverProps>>\n states={[\n {},\n { visible: true },\n { onClose: action(\"onClose\") },\n {\n visible: true,\n popover: (\n <Text variant=\"xs\" width={300}>\n | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |\n | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |\n | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |\n | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |\n | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |\n | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |\n | | | — (Content interaction with close button.)\n </Text>\n ),\n },\n {\n pointer: true,\n visible: true,\n p: 0,\n popover: (\n <>\n {new Array(4).fill(0).map((_, i) => (\n <Text\n key={i}\n variant=\"sm-display\"\n overflowEllipsis\n bg=\"red10\"\n px={1}\n py={0.5}\n >\n Example Item\n </Text>\n ))}\n </>\n ),\n },\n {\n variant: \"defaultDark\",\n placement: \"bottom\",\n visible: true,\n pointer: true,\n },\n ]}\n >\n <Popover\n placement=\"bottom\"\n popover={\n <Text variant=\"xs\" width={300}>\n {CONTENT}\n </Text>\n }\n >\n {({ onVisible, anchorRef }) => {\n return (\n <Box textAlign=\"center\">\n <Button\n ref={anchorRef}\n variant=\"secondaryBlack\"\n size=\"small\"\n onClick={onVisible}\n >\n Click to display popover\n </Button>\n </Box>\n )\n }}\n </Popover>\n </States>\n )\n}\n\nDefault.story = {\n parameters: { chromatic: { disable: true } },\n}\n\nexport const Placement = () => {\n return (\n <States<Partial<PopoverProps>>\n states={Object.keys(POSITION).map((placement) => ({\n placement: placement as Position,\n }))}\n >\n {(props) => {\n return (\n <Popover\n popover={<Text variant=\"xs\">{JSON.stringify(props)}</Text>}\n visible\n variant=\"defaultDark\"\n pointer\n {...props}\n >\n {({ anchorRef }) => {\n return (\n <Text\n ref={anchorRef as any}\n variant=\"xs\"\n textAlign=\"center\"\n p={1}\n maxWidth=\"50%\"\n mx=\"auto\"\n bg=\"black10\"\n >\n {JSON.stringify(props)}\n </Text>\n )\n }}\n </Popover>\n )\n }}\n </States>\n )\n}\n\nPlacement.story = {\n parameters: { chromatic: { disable: true } },\n}\n"],"file":"Popover.story.js"}
|
|
@@ -1,12 +1,26 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { Position } from "../../utils/usePosition";
|
|
3
|
-
|
|
3
|
+
import { BoxProps } from "../Box";
|
|
4
|
+
export declare const TOOLTIP_VARIANTS: {
|
|
5
|
+
defaultLight: {
|
|
6
|
+
backgroundColor: string;
|
|
7
|
+
color: string;
|
|
8
|
+
};
|
|
9
|
+
defaultDark: {
|
|
10
|
+
backgroundColor: string;
|
|
11
|
+
color: string;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
export declare type TooltipVariant = keyof typeof TOOLTIP_VARIANTS;
|
|
15
|
+
export interface TooltipProps extends BoxProps {
|
|
16
|
+
/** Anchor element to attach to tooltip */
|
|
17
|
+
children: React.ReactElement<any, string | React.JSXElementConstructor<any>>;
|
|
18
|
+
/** Content of tooltip */
|
|
4
19
|
content: React.ReactNode;
|
|
5
20
|
placement?: Position;
|
|
6
|
-
|
|
7
|
-
|
|
21
|
+
pointer?: boolean;
|
|
22
|
+
variant?: TooltipVariant;
|
|
8
23
|
visible?: boolean;
|
|
9
|
-
children: React.ReactElement<any, string | React.JSXElementConstructor<any>>;
|
|
10
24
|
}
|
|
11
25
|
/**
|
|
12
26
|
* A tooltip
|