@artsy/palette 18.7.4 → 18.8.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 CHANGED
@@ -1,3 +1,15 @@
1
+ # v18.8.0 (Thu Nov 25 2021)
2
+
3
+ #### 🚀 Enhancement
4
+
5
+ - feat(NX02486): adjusts the modal to the new design [#1076](https://github.com/artsy/palette/pull/1076) ([@araujobarret](https://github.com/araujobarret))
6
+
7
+ #### Authors: 1
8
+
9
+ - Carlos Alberto de Araujo Barreto ([@araujobarret](https://github.com/araujobarret))
10
+
11
+ ---
12
+
1
13
  # v18.7.4 (Wed Nov 24 2021)
2
14
 
3
15
  #### 🐛 Bug Fix
@@ -1,4 +1,4 @@
1
- import { SFC } from "react";
1
+ import { FC } from "react";
2
2
  /**
3
3
  * FIXME: This whole thing needs to be rebuilt from scratch
4
4
  */
@@ -21,7 +21,7 @@ export declare enum ModalWidth {
21
21
  }
22
22
  /**
23
23
  * Modal.
24
- * Spec: https://app.zeplin.io/project/5acd19ff49a1429169c3128b/screen/5c75ad115c1db5628cc03c2a
24
+ * Spec: https://www.figma.com/file/m6gDpKHEWDbYJyrwsVZDBr/Artsy-3.0-Design-System?node-id=6150%3A7290
25
25
  */
26
- export declare const Modal: SFC<ModalProps>;
26
+ export declare const Modal: FC<ModalProps>;
27
27
  export {};
@@ -7,6 +7,8 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.Modal = exports.ModalWidth = void 0;
9
9
 
10
+ var _themeGet = require("@styled-system/theme-get");
11
+
10
12
  var _react = _interopRequireWildcard(require("react"));
11
13
 
12
14
  var _styledComponents = _interopRequireDefault(require("styled-components"));
@@ -21,11 +23,15 @@ var _Box = require("../Box");
21
23
 
22
24
  var _Flex = require("../Flex");
23
25
 
26
+ var _Join = require("../Join");
27
+
24
28
  var _Spacer = require("../Spacer");
25
29
 
26
- var _Typography = require("../Typography");
30
+ var _Text = require("../Text");
27
31
 
28
- var _templateObject, _templateObject2, _templateObject3, _templateObject4;
32
+ var _useOnScroll2 = require("../../utils/useOnScroll");
33
+
34
+ var _templateObject, _templateObject2;
29
35
 
30
36
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
31
37
 
@@ -50,7 +56,7 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
50
56
  var ModalWidth;
51
57
  /**
52
58
  * Modal.
53
- * Spec: https://app.zeplin.io/project/5acd19ff49a1429169c3128b/screen/5c75ad115c1db5628cc03c2a
59
+ * Spec: https://www.figma.com/file/m6gDpKHEWDbYJyrwsVZDBr/Artsy-3.0-Design-System?node-id=6150%3A7290
54
60
  */
55
61
 
56
62
  exports.ModalWidth = ModalWidth;
@@ -78,6 +84,10 @@ var Modal = function Modal(_ref) {
78
84
  fadeIn = _useState2[0],
79
85
  setFadeIn = _useState2[1];
80
86
 
87
+ var _useOnScroll = (0, _useOnScroll2.useOnScroll)(),
88
+ isScrolled = _useOnScroll.isScrolled,
89
+ elementRef = _useOnScroll.elementRef;
90
+
81
91
  var handleEscapeKey = function handleEscapeKey(event) {
82
92
  if (event && event.key === "Escape") {
83
93
  onClose();
@@ -126,39 +136,64 @@ var Modal = function Modal(_ref) {
126
136
  isWide: isWide,
127
137
  show: show,
128
138
  className: fadeIn ? "fadeIn" : ""
129
- }, /*#__PURE__*/_react.default.createElement(ModalFlexContent, null, !hideCloseButton && /*#__PURE__*/_react.default.createElement(CloseIconWrapper, {
139
+ }, /*#__PURE__*/_react.default.createElement(ModalFlexContent, null, /*#__PURE__*/_react.default.createElement(ModalStickyHeader, {
140
+ position: "sticky",
141
+ top: 0,
142
+ display: "flex",
143
+ justifyContent: "center",
144
+ flexDirection: "column",
145
+ isScrolled: isScrolled,
146
+ px: 2
147
+ }, /*#__PURE__*/_react.default.createElement(_Spacer.Spacer, {
148
+ my: 1
149
+ }), /*#__PURE__*/_react.default.createElement(_Flex.Flex, null, /*#__PURE__*/_react.default.createElement(_Box.Box, {
150
+ pr: 6,
151
+ flex: 1
152
+ }, /*#__PURE__*/_react.default.createElement(_Join.Join, {
153
+ separator: /*#__PURE__*/_react.default.createElement(_Spacer.Spacer, {
154
+ py: 1
155
+ })
156
+ }, hasLogo && /*#__PURE__*/_react.default.createElement(Logo, {
157
+ my: 1
158
+ }), title && /*#__PURE__*/_react.default.createElement(_Text.Text, {
159
+ variant: "lg",
160
+ color: "black100",
161
+ py: hasLogo ? 0 : 1
162
+ }, title))), !hideCloseButton && /*#__PURE__*/_react.default.createElement(CloseIconWrapper, {
163
+ my: 1,
130
164
  onClick: function onClick() {
131
165
  return onClose();
132
166
  }
133
167
  }, /*#__PURE__*/_react.default.createElement(_svgs.CloseIcon, {
134
168
  fill: "black60"
169
+ }))), /*#__PURE__*/_react.default.createElement(_Spacer.Spacer, {
170
+ py: 1
135
171
  })), /*#__PURE__*/_react.default.createElement(ModalScrollContent, {
136
172
  hasLogo: hasLogo,
137
- modalWidth: modalWidth
138
- }, hasLogo && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Flex.Flex, {
139
- justifyContent: "center"
140
- }, /*#__PURE__*/_react.default.createElement(Logo, null)), /*#__PURE__*/_react.default.createElement(_Spacer.Spacer, {
141
- mb: 2
142
- })), title && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Flex.Flex, {
143
- justifyContent: "center"
144
- }, /*#__PURE__*/_react.default.createElement(_Typography.Sans, {
145
- size: "5t",
146
- textAlign: "center",
147
- color: "black100"
148
- }, title)), /*#__PURE__*/_react.default.createElement(_Spacer.Spacer, {
149
- mb: hasLogo ? 2 : [1, 2]
150
- })), children), FixedButton && /*#__PURE__*/_react.default.createElement(FixedButtonWrapper, null, FixedButton))))));
173
+ modalWidth: modalWidth,
174
+ px: 2,
175
+ py: 1,
176
+ pb: 2
177
+ }, /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(Sentinel, {
178
+ ref: elementRef
179
+ }), children)), FixedButton && /*#__PURE__*/_react.default.createElement(FixedButtonWrapper, {
180
+ isScrolled: isScrolled,
181
+ p: 2
182
+ }, FixedButton))))));
151
183
  };
152
184
 
153
185
  exports.Modal = Modal;
154
186
  var FixedButtonWrapper = (0, _styledComponents.default)(_Flex.Flex).withConfig({
155
187
  displayName: "Modal__FixedButtonWrapper",
156
188
  componentId: "qjtwq0-0"
157
- })(["border-top:1px solid ", ";padding:", "px;", ";flex:0 0 auto;"], (0, _helpers.color)("black10"), (0, _helpers.space)(3), _helpers.media.xs(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n padding: ", "px;\n "])), (0, _helpers.space)(2)));
189
+ })(["box-shadow:", ";flex:0 0 auto;transition:box-shadow 250ms ease-in-out;"], function (_ref2) {
190
+ var isScrolled = _ref2.isScrolled;
191
+ return isScrolled ? _helpers.DROP_SHADOW : "none";
192
+ });
158
193
  var ModalOuterWrapper = (0, _styledComponents.default)(_Box.Box).withConfig({
159
194
  displayName: "Modal__ModalOuterWrapper",
160
195
  componentId: "qjtwq0-1"
161
- })(["position:fixed;top:0;left:0;z-index:9999;width:100vw;height:100vh;background-color:rgba(229,229,229,0.5);opacity:0;pointer-events:", ";&.fadeIn{transition:opacity 250ms ease;transition-delay:1ms;opacity:1;}"], function (props) {
196
+ })(["position:fixed;top:0;left:0;z-index:9999;width:100vw;height:100vh;background-color:", ";opacity:0;pointer-events:", ";&.fadeIn{transition:opacity 250ms ease;transition-delay:1ms;opacity:1;}"], (0, _themeGet.themeGet)("colors.black5"), function (props) {
162
197
  return props.show ? "auto" : "none";
163
198
  });
164
199
  var ModalWrapper = (0, _styledComponents.default)(_Flex.Flex).withConfig({
@@ -168,29 +203,41 @@ var ModalWrapper = (0, _styledComponents.default)(_Flex.Flex).withConfig({
168
203
  var ModalElement = (0, _styledComponents.default)(_Box.Box).withConfig({
169
204
  displayName: "Modal__ModalElement",
170
205
  componentId: "qjtwq0-3"
171
- })(["position:absolute;border-radius:5px;height:", ";max-height:calc(100vh - 80px);min-height:58px;overflow:hidden;background-color:", ";box-shadow:0px 4px 15px rgba(0,0,0,0.15);width:", ";", ";transform:translateY(2000px);&.fadeIn{transition:all 400ms cubic-bezier(0.075,0.82,0.165,1);transition-delay:1ms;transform:translateY(0px);}"], function (props) {
206
+ })(["position:absolute;height:", ";max-height:calc(100vh - 80px);min-height:58px;overflow:hidden;background-color:", ";box-shadow:", ";width:", ";", ";transform:translateY(2000px);&.fadeIn{transition:all 400ms cubic-bezier(0.075,0.82,0.165,1);transition-delay:1ms;transform:translateY(0px);}"], function (props) {
172
207
  return props.height ? props.height : "auto";
173
- }, (0, _helpers.color)("white100"), function (props) {
208
+ }, (0, _themeGet.themeGet)("colors.white100"), _helpers.DROP_SHADOW, function (props) {
174
209
  return props.modalWidth || (props.isWide ? ModalWidth.Wide : ModalWidth.Normal);
175
- }, _helpers.media.xs(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n max-height: 100vh;\n height: 100vh;\n width: 100vw;\n border-radius: 0;\n "]))));
210
+ }, _helpers.media.xs(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n max-height: 100vh;\n height: 100vh;\n width: 100vw;\n border-radius: 0;\n "]))));
176
211
  var ModalFlexContent = (0, _styledComponents.default)(_Flex.Flex).withConfig({
177
212
  displayName: "Modal__ModalFlexContent",
178
213
  componentId: "qjtwq0-4"
179
- })(["position:relative;flex-direction:column;width:100%;overflow:hidden;max-height:calc(100vh - 80px);", ";"], _helpers.media.xs(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n max-height: 100vh;\n "]))));
214
+ })(["position:relative;flex-direction:column;width:100%;overflow:hidden;max-height:calc(100vh - 80px);", ";"], _helpers.media.xs(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n max-height: 100vh;\n "]))));
215
+ var ModalStickyHeader = (0, _styledComponents.default)(_Box.Box).withConfig({
216
+ displayName: "Modal__ModalStickyHeader",
217
+ componentId: "qjtwq0-5"
218
+ })(["box-shadow:", ";transition:box-shadow 250ms ease-in-out;"], function (_ref3) {
219
+ var isScrolled = _ref3.isScrolled;
220
+ return isScrolled ? _helpers.DROP_SHADOW : "none";
221
+ });
180
222
  var ModalScrollContent = (0, _styledComponents.default)(_Flex.Flex).withConfig({
181
223
  displayName: "Modal__ModalScrollContent",
182
- componentId: "qjtwq0-5"
183
- })(["overflow:auto;flex-direction:column;padding:", "px;", ";"], function (props) {
184
- return (0, _helpers.space)(props.hasLogo || props.modalWidth === ModalWidth.Narrow ? 2 : 3);
185
- }, _helpers.media.xs(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n padding: ", "px;\n "])), (0, _helpers.space)(2)));
186
- var CloseIconWrapper = (0, _styledComponents.default)(_Box.Box).withConfig({
187
- displayName: "Modal__CloseIconWrapper",
188
224
  componentId: "qjtwq0-6"
189
- })(["position:absolute;top:", "px;right:", "px;cursor:pointer;"], (0, _helpers.space)(2), (0, _helpers.space)(2));
225
+ })(["overflow:auto;flex-direction:column;"]);
226
+ var CloseIconWrapper = (0, _styledComponents.default)(_Flex.Flex).withConfig({
227
+ displayName: "Modal__CloseIconWrapper",
228
+ componentId: "qjtwq0-7"
229
+ })(["cursor:pointer;"]);
190
230
  var Logo = (0, _styledComponents.default)(_ArtsyLogoBlackIcon.ArtsyLogoBlackIcon).withConfig({
191
231
  displayName: "Modal__Logo",
192
- componentId: "qjtwq0-7"
193
- })(["width:100px;"]);
232
+ componentId: "qjtwq0-8"
233
+ })(["width:78px;"]); // This <div> is positioned such that when it leaves the top of
234
+ // the ModalScrollContent we use IntersectionObserver within the hook
235
+ // to switch on and of the shadows of the sticky elements
236
+
237
+ var Sentinel = (0, _styledComponents.default)(_Box.Box).withConfig({
238
+ displayName: "Modal__Sentinel",
239
+ componentId: "qjtwq0-9"
240
+ })(["position:relative;width:100%;height:0;"]);
194
241
  Modal.displayName = "Modal";
195
242
  ModalWrapper.displayName = "ModalWrapper";
196
243
  ModalScrollContent.displayName = "ModalScrollContent";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/Modal/Modal.tsx"],"names":["ModalWidth","Modal","children","FixedButton","title","show","modalWidth","isWide","hasLogo","onClose","hideCloseButton","wrapperRef","fadeIn","setFadeIn","handleEscapeKey","event","key","document","addEventListener","body","style","overflowY","removeEventListener","handleWrapperClick","target","current","FixedButtonWrapper","Flex","media","xs","ModalOuterWrapper","Box","props","ModalWrapper","ModalElement","height","Wide","Normal","ModalFlexContent","ModalScrollContent","Narrow","CloseIconWrapper","Logo","ArtsyLogoBlackIcon","displayName"],"mappings":"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","sourcesContent":["import React, { SFC, useEffect, useRef, useState } from \"react\"\nimport styled from \"styled-components\"\nimport { color, media, space } from \"../../helpers\"\nimport { CloseIcon } from \"../../svgs\"\nimport { ArtsyLogoBlackIcon } from \"../../svgs/ArtsyLogoBlackIcon\"\nimport { Box } from \"../Box\"\nimport { Flex } from \"../Flex\"\nimport { Spacer } from \"../Spacer\"\nimport { Sans } from \"../Typography\"\n\n/**\n * FIXME: This whole thing needs to be rebuilt from scratch\n */\n\ninterface ModalProps {\n FixedButton?: JSX.Element\n refreshModalContentKey?: string\n hasLogo?: boolean\n height?: string\n modalWidth?: ModalWidth\n isWide?: boolean\n onClose: () => void\n show?: boolean\n title?: string\n /*\n * Hide the X button if we don't want the user to be able to exit the modal without another action closing the modal\n */\n hideCloseButton?: boolean\n}\n\ninterface TransitionElementProps {\n isWide?: boolean\n show?: boolean\n modalWidth?: ModalWidth\n}\n\ninterface ModalScrollContentProps {\n hasLogo?: boolean\n modalWidth?: ModalWidth\n}\n\nexport enum ModalWidth {\n Narrow = \"300px\",\n Normal = \"440px\",\n Wide = \"900px\",\n}\n\n/**\n * Modal.\n * Spec: https://app.zeplin.io/project/5acd19ff49a1429169c3128b/screen/5c75ad115c1db5628cc03c2a\n */\nexport const Modal: SFC<ModalProps> = ({\n children,\n FixedButton,\n title,\n show,\n modalWidth, // modalWidth overwrites isWide if present\n isWide,\n hasLogo,\n onClose,\n hideCloseButton,\n}) => {\n const wrapperRef = useRef(null)\n const [fadeIn, setFadeIn] = useState(false)\n\n const handleEscapeKey = (event) => {\n if (event && event.key === \"Escape\") {\n onClose()\n }\n }\n\n useEffect(() => {\n if (show) {\n setFadeIn(true)\n\n if (!hideCloseButton) {\n // Binds key event for escape to close modal\n document.addEventListener(\"keyup\", handleEscapeKey, true)\n }\n // Fixes the body to disable scroll\n document.body.style.overflowY = \"hidden\"\n } else {\n setFadeIn(false)\n document.body.style.overflowY = \"visible\"\n document.removeEventListener(\"keyup\", handleEscapeKey, true)\n }\n\n return document.removeEventListener(\"keyup\", handleEscapeKey, true)\n }, [show])\n\n const handleWrapperClick = (event) => {\n // If modal X icon is hidden we don't want to close the modal when the wrapper is clicked\n if (!hideCloseButton && event.target === wrapperRef.current) {\n onClose()\n }\n }\n\n if (!show) {\n return null\n }\n\n return (\n <>\n <ModalOuterWrapper show={show} className={fadeIn ? \"fadeIn\" : \"\"}>\n <ModalWrapper ref={wrapperRef} onClick={handleWrapperClick}>\n <ModalElement\n modalWidth={modalWidth}\n isWide={isWide}\n show={show}\n className={fadeIn ? \"fadeIn\" : \"\"}\n >\n <ModalFlexContent>\n {!hideCloseButton && (\n <CloseIconWrapper onClick={() => onClose()}>\n <CloseIcon fill=\"black60\" />\n </CloseIconWrapper>\n )}\n <ModalScrollContent hasLogo={hasLogo} modalWidth={modalWidth}>\n {hasLogo && (\n <>\n <Flex justifyContent=\"center\">\n <Logo />\n </Flex>\n <Spacer mb={2} />\n </>\n )}\n {title && (\n <>\n <Flex justifyContent=\"center\">\n <Sans size=\"5t\" textAlign=\"center\" color=\"black100\">\n {title}\n </Sans>\n </Flex>\n <Spacer mb={hasLogo ? 2 : [1, 2]} />\n </>\n )}\n {children}\n </ModalScrollContent>\n {FixedButton && (\n <FixedButtonWrapper>{FixedButton}</FixedButtonWrapper>\n )}\n </ModalFlexContent>\n </ModalElement>\n </ModalWrapper>\n </ModalOuterWrapper>\n </>\n )\n}\n\nconst FixedButtonWrapper = styled(Flex)`\n border-top: 1px solid ${color(\"black10\")};\n padding: ${space(3)}px;\n ${media.xs`\n padding: ${space(2)}px;\n `};\n flex: 0 0 auto;\n`\n\nconst ModalOuterWrapper = styled(Box)<TransitionElementProps>`\n position: fixed;\n top: 0;\n left: 0;\n z-index: 9999;\n width: 100vw;\n height: 100vh;\n background-color: rgba(229, 229, 229, 0.5);\n opacity: 0;\n pointer-events: ${(props) => (props.show ? \"auto\" : \"none\")};\n\n &.fadeIn {\n transition: opacity 250ms ease;\n transition-delay: 1ms;\n opacity: 1;\n }\n`\n\nconst ModalWrapper = styled(Flex)`\n position: relative;\n width: 100%;\n height: 100%;\n overflow: hidden;\n justify-content: center;\n align-items: center;\n`\n\nconst ModalElement = styled(Box)<TransitionElementProps>`\n position: absolute;\n border-radius: 5px;\n height: ${(props) => (props.height ? props.height : \"auto\") as any};\n max-height: calc(100vh - 80px);\n min-height: 58px;\n overflow: hidden;\n background-color: ${color(\"white100\")};\n box-shadow: 0px 4px 15px rgba(0, 0, 0, 0.15);\n width: ${(props) =>\n props.modalWidth || (props.isWide ? ModalWidth.Wide : ModalWidth.Normal)};\n ${media.xs`\n max-height: 100vh;\n height: 100vh;\n width: 100vw;\n border-radius: 0;\n `};\n\n transform: translateY(2000px);\n &.fadeIn {\n transition: all 400ms cubic-bezier(0.075, 0.82, 0.165, 1); /* easeOutCirc */\n transition-delay: 1ms;\n transform: translateY(0px);\n }\n`\n\nconst ModalFlexContent = styled(Flex)<ModalScrollContentProps>`\n position: relative;\n flex-direction: column;\n width: 100%;\n overflow: hidden;\n max-height: calc(100vh - 80px);\n ${media.xs`\n max-height: 100vh;\n `};\n`\n\nconst ModalScrollContent = styled(Flex)<ModalScrollContentProps>`\n overflow: auto;\n flex-direction: column;\n padding: ${(props) =>\n space(props.hasLogo || props.modalWidth === ModalWidth.Narrow ? 2 : 3)}px;\n ${media.xs`\n padding: ${space(2)}px;\n `};\n`\n\nconst CloseIconWrapper = styled(Box)`\n position: absolute;\n top: ${space(2)}px;\n right: ${space(2)}px;\n cursor: pointer;\n`\n\nconst Logo = styled(ArtsyLogoBlackIcon)`\n width: 100px;\n`\n\nModal.displayName = \"Modal\"\nModalWrapper.displayName = \"ModalWrapper\"\nModalScrollContent.displayName = \"ModalScrollContent\"\n"],"file":"Modal.js"}
1
+ {"version":3,"sources":["../../../src/elements/Modal/Modal.tsx"],"names":["ModalWidth","Modal","children","FixedButton","title","show","modalWidth","isWide","hasLogo","onClose","hideCloseButton","wrapperRef","fadeIn","setFadeIn","isScrolled","elementRef","handleEscapeKey","event","key","document","addEventListener","body","style","overflowY","removeEventListener","handleWrapperClick","target","current","FixedButtonWrapper","Flex","DROP_SHADOW","ModalOuterWrapper","Box","props","ModalWrapper","ModalElement","height","Wide","Normal","media","xs","ModalFlexContent","ModalStickyHeader","ModalScrollContent","CloseIconWrapper","Logo","ArtsyLogoBlackIcon","Sentinel","displayName"],"mappings":"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","sourcesContent":["import { themeGet } from \"@styled-system/theme-get\"\nimport React, { FC, useEffect, useRef, useState } from \"react\"\nimport styled from \"styled-components\"\nimport { DROP_SHADOW, media } from \"../../helpers\"\nimport { CloseIcon } from \"../../svgs\"\nimport { ArtsyLogoBlackIcon } from \"../../svgs/ArtsyLogoBlackIcon\"\nimport { Box } from \"../Box\"\nimport { Flex } from \"../Flex\"\nimport { Join } from \"../Join\"\nimport { Spacer } from \"../Spacer\"\nimport { Text } from \"../Text\"\nimport { useOnScroll } from \"../../utils/useOnScroll\"\n\n/**\n * FIXME: This whole thing needs to be rebuilt from scratch\n */\n\ninterface ModalProps {\n FixedButton?: JSX.Element\n refreshModalContentKey?: string\n hasLogo?: boolean\n height?: string\n modalWidth?: ModalWidth\n isWide?: boolean\n onClose: () => void\n show?: boolean\n title?: string\n /*\n * Hide the X button if we don't want the user to be able to exit the modal without another action closing the modal\n */\n hideCloseButton?: boolean\n}\n\ninterface TransitionElementProps {\n isWide?: boolean\n show?: boolean\n modalWidth?: ModalWidth\n}\n\ninterface ModalScrollContentProps {\n hasLogo?: boolean\n modalWidth?: ModalWidth\n}\n\nexport enum ModalWidth {\n Narrow = \"300px\",\n Normal = \"440px\",\n Wide = \"900px\",\n}\n\n/**\n * Modal.\n * Spec: https://www.figma.com/file/m6gDpKHEWDbYJyrwsVZDBr/Artsy-3.0-Design-System?node-id=6150%3A7290\n */\nexport const Modal: FC<ModalProps> = ({\n children,\n FixedButton,\n title,\n show,\n modalWidth, // modalWidth overwrites isWide if present\n isWide,\n hasLogo,\n onClose,\n hideCloseButton,\n}) => {\n const wrapperRef = useRef(null)\n const [fadeIn, setFadeIn] = useState(false)\n const { isScrolled, elementRef } = useOnScroll()\n\n const handleEscapeKey = (event) => {\n if (event && event.key === \"Escape\") {\n onClose()\n }\n }\n\n useEffect(() => {\n if (show) {\n setFadeIn(true)\n\n if (!hideCloseButton) {\n // Binds key event for escape to close modal\n document.addEventListener(\"keyup\", handleEscapeKey, true)\n }\n // Fixes the body to disable scroll\n document.body.style.overflowY = \"hidden\"\n } else {\n setFadeIn(false)\n document.body.style.overflowY = \"visible\"\n document.removeEventListener(\"keyup\", handleEscapeKey, true)\n }\n\n return document.removeEventListener(\"keyup\", handleEscapeKey, true)\n }, [show])\n\n const handleWrapperClick = (event) => {\n // If modal X icon is hidden we don't want to close the modal when the wrapper is clicked\n if (!hideCloseButton && event.target === wrapperRef.current) {\n onClose()\n }\n }\n\n if (!show) {\n return null\n }\n\n return (\n <>\n <ModalOuterWrapper show={show} className={fadeIn ? \"fadeIn\" : \"\"}>\n <ModalWrapper ref={wrapperRef} onClick={handleWrapperClick}>\n <ModalElement\n modalWidth={modalWidth}\n isWide={isWide}\n show={show}\n className={fadeIn ? \"fadeIn\" : \"\"}\n >\n <ModalFlexContent>\n <ModalStickyHeader\n position=\"sticky\"\n top={0}\n display=\"flex\"\n justifyContent=\"center\"\n flexDirection=\"column\"\n isScrolled={isScrolled}\n px={2}\n >\n <Spacer my={1} />\n <Flex>\n <Box pr={6} flex={1}>\n <Join separator={<Spacer py={1} />}>\n {hasLogo && <Logo my={1} />}\n {title && (\n <Text\n variant=\"lg\"\n color=\"black100\"\n py={hasLogo ? 0 : 1}\n >\n {title}\n </Text>\n )}\n </Join>\n </Box>\n\n {!hideCloseButton && (\n <CloseIconWrapper my={1} onClick={() => onClose()}>\n <CloseIcon fill=\"black60\" />\n </CloseIconWrapper>\n )}\n </Flex>\n <Spacer py={1} />\n </ModalStickyHeader>\n\n <ModalScrollContent\n hasLogo={hasLogo}\n modalWidth={modalWidth}\n px={2}\n py={1}\n pb={2}\n >\n <>\n <Sentinel ref={elementRef} />\n {children}\n </>\n </ModalScrollContent>\n\n {FixedButton && (\n <FixedButtonWrapper isScrolled={isScrolled} p={2}>\n {FixedButton}\n </FixedButtonWrapper>\n )}\n </ModalFlexContent>\n </ModalElement>\n </ModalWrapper>\n </ModalOuterWrapper>\n </>\n )\n}\n\ninterface ShadowOnScroll {\n isScrolled?: boolean\n}\n\nconst FixedButtonWrapper = styled(Flex)<ShadowOnScroll>`\n box-shadow: ${({ isScrolled }) => (isScrolled ? DROP_SHADOW : \"none\")};\n flex: 0 0 auto;\n transition: box-shadow 250ms ease-in-out;\n`\n\nconst ModalOuterWrapper = styled(Box)<TransitionElementProps>`\n position: fixed;\n top: 0;\n left: 0;\n z-index: 9999;\n width: 100vw;\n height: 100vh;\n background-color: ${themeGet(\"colors.black5\")};\n opacity: 0;\n pointer-events: ${(props) => (props.show ? \"auto\" : \"none\")};\n\n &.fadeIn {\n transition: opacity 250ms ease;\n transition-delay: 1ms;\n opacity: 1;\n }\n`\n\nconst ModalWrapper = styled(Flex)`\n position: relative;\n width: 100%;\n height: 100%;\n overflow: hidden;\n justify-content: center;\n align-items: center;\n`\n\nconst ModalElement = styled(Box)<TransitionElementProps>`\n position: absolute;\n height: ${(props) => (props.height ? props.height : \"auto\") as any};\n max-height: calc(100vh - 80px);\n min-height: 58px;\n overflow: hidden;\n background-color: ${themeGet(\"colors.white100\")};\n box-shadow: ${DROP_SHADOW};\n width: ${(props) =>\n props.modalWidth || (props.isWide ? ModalWidth.Wide : ModalWidth.Normal)};\n\n ${media.xs`\n max-height: 100vh;\n height: 100vh;\n width: 100vw;\n border-radius: 0;\n `};\n\n transform: translateY(2000px);\n &.fadeIn {\n transition: all 400ms cubic-bezier(0.075, 0.82, 0.165, 1); /* easeOutCirc */\n transition-delay: 1ms;\n transform: translateY(0px);\n }\n`\n\nconst ModalFlexContent = styled(Flex)<ModalScrollContentProps>`\n position: relative;\n flex-direction: column;\n width: 100%;\n overflow: hidden;\n max-height: calc(100vh - 80px);\n ${media.xs`\n max-height: 100vh;\n `};\n`\n\nconst ModalStickyHeader = styled(Box)<ModalScrollContentProps & ShadowOnScroll>`\n box-shadow: ${({ isScrolled }) => (isScrolled ? DROP_SHADOW : \"none\")};\n transition: box-shadow 250ms ease-in-out;\n`\n\nconst ModalScrollContent = styled(Flex)<ModalScrollContentProps>`\n overflow: auto;\n flex-direction: column;\n`\n\nconst CloseIconWrapper = styled(Flex)`\n cursor: pointer;\n`\n\nconst Logo = styled(ArtsyLogoBlackIcon)`\n width: 78px;\n`\n\n// This <div> is positioned such that when it leaves the top of\n// the ModalScrollContent we use IntersectionObserver within the hook\n// to switch on and of the shadows of the sticky elements\nconst Sentinel = styled(Box)`\n position: relative;\n width: 100%;\n height: 0;\n`\n\nModal.displayName = \"Modal\"\nModalWrapper.displayName = \"ModalWrapper\"\nModalScrollContent.displayName = \"ModalScrollContent\"\n"],"file":"Modal.js"}
@@ -13,7 +13,7 @@ export declare const Default: {
13
13
  };
14
14
  };
15
15
  };
16
- export declare const WithTitle: {
16
+ export declare const Title: {
17
17
  (): JSX.Element;
18
18
  story: {
19
19
  name: string;
@@ -24,7 +24,7 @@ export declare const WithTitle: {
24
24
  };
25
25
  };
26
26
  };
27
- export declare const WithLogo: {
27
+ export declare const LongTitle: {
28
28
  (): JSX.Element;
29
29
  story: {
30
30
  name: string;
@@ -35,7 +35,7 @@ export declare const WithLogo: {
35
35
  };
36
36
  };
37
37
  };
38
- export declare const ModalWithFixedButton: {
38
+ export declare const Logo: {
39
39
  (): JSX.Element;
40
40
  story: {
41
41
  name: string;
@@ -46,7 +46,51 @@ export declare const ModalWithFixedButton: {
46
46
  };
47
47
  };
48
48
  };
49
- export declare const WideModal: {
49
+ export declare const LogoAndTitle: {
50
+ (): JSX.Element;
51
+ story: {
52
+ name: string;
53
+ parameters: {
54
+ chromatic: {
55
+ delay: number;
56
+ };
57
+ };
58
+ };
59
+ };
60
+ export declare const FixedButton: {
61
+ (): JSX.Element;
62
+ story: {
63
+ name: string;
64
+ parameters: {
65
+ chromatic: {
66
+ delay: number;
67
+ };
68
+ };
69
+ };
70
+ };
71
+ export declare const FixedButtonNoTitle: {
72
+ (): JSX.Element;
73
+ story: {
74
+ name: string;
75
+ parameters: {
76
+ chromatic: {
77
+ delay: number;
78
+ };
79
+ };
80
+ };
81
+ };
82
+ export declare const FixedButtonNoLogo: {
83
+ (): JSX.Element;
84
+ story: {
85
+ name: string;
86
+ parameters: {
87
+ chromatic: {
88
+ delay: number;
89
+ };
90
+ };
91
+ };
92
+ };
93
+ export declare const Wide: {
50
94
  (): JSX.Element;
51
95
  story: {
52
96
  name: string;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.WideModal = exports.ModalWithFixedButton = exports.WithLogo = exports.WithTitle = exports.Default = exports.default = void 0;
6
+ exports.Wide = exports.FixedButtonNoLogo = exports.FixedButtonNoTitle = exports.FixedButton = exports.LogoAndTitle = exports.Logo = exports.LongTitle = exports.Title = exports.Default = exports.default = void 0;
7
7
 
8
8
  var _react = _interopRequireDefault(require("react"));
9
9
 
@@ -17,6 +17,7 @@ var _default = {
17
17
  title: "Components/Modal"
18
18
  };
19
19
  exports.default = _default;
20
+ var content = "\n Chicharrones marfa tumeric squid four loko flexitarian celiac hell of hot chicken \n jianbing salvia enamel pin woke. Migas you probably haven't heard of them church-key \n pok pok banh mi yr ennui ethical subway tile authentic. Sartorial retro roof party, \n gastropub bicycle rights drinking vinegar microdosing swag DIY deep v. Viral hella pop-up, \n banh mi squid poke chambray yuccie biodiesel occupy scenester.\n";
20
21
 
21
22
  var Default = function Default() {
22
23
  return /*#__PURE__*/_react.default.createElement(_Modal.Modal, {
@@ -24,7 +25,7 @@ var Default = function Default() {
24
25
  onClose: function onClose() {
25
26
  return null;
26
27
  }
27
- }, "Some example content");
28
+ }, content);
28
29
  };
29
30
 
30
31
  exports.Default = Default;
@@ -37,20 +38,20 @@ Default.story = {
37
38
  }
38
39
  };
39
40
 
40
- var WithTitle = function WithTitle() {
41
+ var Title = function Title() {
41
42
  return /*#__PURE__*/_react.default.createElement(_Modal.Modal, {
42
43
  show: true,
43
44
  title: "Modal Title",
44
45
  onClose: function onClose() {
45
46
  return null;
46
47
  }
47
- }, "Some example content");
48
+ }, content);
48
49
  };
49
50
 
50
- exports.WithTitle = WithTitle;
51
- WithTitle.displayName = "WithTitle";
52
- WithTitle.story = {
53
- name: "With title",
51
+ exports.Title = Title;
52
+ Title.displayName = "Title";
53
+ Title.story = {
54
+ name: "Title",
54
55
  parameters: {
55
56
  chromatic: {
56
57
  delay: 500
@@ -58,21 +59,112 @@ WithTitle.story = {
58
59
  }
59
60
  };
60
61
 
61
- var WithLogo = function WithLogo() {
62
+ var LongTitle = function LongTitle() {
63
+ return /*#__PURE__*/_react.default.createElement(_Modal.Modal, {
64
+ show: true,
65
+ title: "Modal Title with a longer title or headline text that runs on for mutliple lines",
66
+ onClose: function onClose() {
67
+ return null;
68
+ }
69
+ }, content);
70
+ };
71
+
72
+ exports.LongTitle = LongTitle;
73
+ LongTitle.displayName = "LongTitle";
74
+ LongTitle.story = {
75
+ name: "Long title",
76
+ parameters: {
77
+ chromatic: {
78
+ delay: 500
79
+ }
80
+ }
81
+ };
82
+
83
+ var Logo = function Logo() {
84
+ return /*#__PURE__*/_react.default.createElement(_Modal.Modal, {
85
+ show: true,
86
+ hasLogo: true,
87
+ onClose: function onClose() {
88
+ return null;
89
+ }
90
+ }, content);
91
+ };
92
+
93
+ exports.Logo = Logo;
94
+ Logo.displayName = "Logo";
95
+ Logo.story = {
96
+ name: "Logo",
97
+ parameters: {
98
+ chromatic: {
99
+ delay: 500
100
+ }
101
+ }
102
+ };
103
+
104
+ var LogoAndTitle = function LogoAndTitle() {
105
+ return /*#__PURE__*/_react.default.createElement(_Modal.Modal, {
106
+ show: true,
107
+ hasLogo: true,
108
+ title: "Modal Title",
109
+ onClose: function onClose() {
110
+ return null;
111
+ }
112
+ }, content);
113
+ };
114
+
115
+ exports.LogoAndTitle = LogoAndTitle;
116
+ LogoAndTitle.displayName = "LogoAndTitle";
117
+ LogoAndTitle.story = {
118
+ name: "Logo and title",
119
+ parameters: {
120
+ chromatic: {
121
+ delay: 500
122
+ }
123
+ }
124
+ };
125
+
126
+ var FixedButton = function FixedButton() {
62
127
  return /*#__PURE__*/_react.default.createElement(_Modal.Modal, {
63
128
  show: true,
64
129
  title: "Modal Title",
65
130
  hasLogo: true,
66
131
  onClose: function onClose() {
67
132
  return null;
133
+ },
134
+ FixedButton: /*#__PURE__*/_react.default.createElement(_Button.Button, {
135
+ width: "100%"
136
+ }, "Click me")
137
+ }, content.repeat(5));
138
+ };
139
+
140
+ exports.FixedButton = FixedButton;
141
+ FixedButton.displayName = "FixedButton";
142
+ FixedButton.story = {
143
+ name: "Fixed button",
144
+ parameters: {
145
+ chromatic: {
146
+ delay: 500
68
147
  }
69
- }, "Some example content");
148
+ }
149
+ };
150
+
151
+ var FixedButtonNoTitle = function FixedButtonNoTitle() {
152
+ return /*#__PURE__*/_react.default.createElement(_Modal.Modal, {
153
+ show: true,
154
+ hasLogo: true,
155
+ onClose: function onClose() {
156
+ return null;
157
+ },
158
+ FixedButton: /*#__PURE__*/_react.default.createElement(_Button.Button, {
159
+ width: "100%"
160
+ }, "Click me")
161
+ }, content.repeat(5));
70
162
  };
71
163
 
72
- exports.WithLogo = WithLogo;
73
- WithLogo.displayName = "WithLogo";
74
- WithLogo.story = {
75
- name: "With logo",
164
+ exports.FixedButtonNoTitle = FixedButtonNoTitle;
165
+ FixedButtonNoTitle.displayName = "FixedButtonNoTitle";
166
+ FixedButtonNoTitle.story = {
167
+ name: "Fixed button no title",
76
168
  parameters: {
77
169
  chromatic: {
78
170
  delay: 500
@@ -80,7 +172,7 @@ WithLogo.story = {
80
172
  }
81
173
  };
82
174
 
83
- var ModalWithFixedButton = function ModalWithFixedButton() {
175
+ var FixedButtonNoLogo = function FixedButtonNoLogo() {
84
176
  return /*#__PURE__*/_react.default.createElement(_Modal.Modal, {
85
177
  show: true,
86
178
  title: "Modal Title",
@@ -90,13 +182,13 @@ var ModalWithFixedButton = function ModalWithFixedButton() {
90
182
  FixedButton: /*#__PURE__*/_react.default.createElement(_Button.Button, {
91
183
  width: "100%"
92
184
  }, "Click me")
93
- }, "Some example content");
185
+ }, content.repeat(5));
94
186
  };
95
187
 
96
- exports.ModalWithFixedButton = ModalWithFixedButton;
97
- ModalWithFixedButton.displayName = "ModalWithFixedButton";
98
- ModalWithFixedButton.story = {
99
- name: "Modal with fixed button",
188
+ exports.FixedButtonNoLogo = FixedButtonNoLogo;
189
+ FixedButtonNoLogo.displayName = "FixedButtonNoLogo";
190
+ FixedButtonNoLogo.story = {
191
+ name: "Fixed button no logo",
100
192
  parameters: {
101
193
  chromatic: {
102
194
  delay: 500
@@ -104,7 +196,7 @@ ModalWithFixedButton.story = {
104
196
  }
105
197
  };
106
198
 
107
- var WideModal = function WideModal() {
199
+ var Wide = function Wide() {
108
200
  return /*#__PURE__*/_react.default.createElement(_Modal.Modal, {
109
201
  show: true,
110
202
  title: "Modal Title",
@@ -112,13 +204,13 @@ var WideModal = function WideModal() {
112
204
  onClose: function onClose() {
113
205
  return null;
114
206
  }
115
- }, "Some example content");
207
+ }, content);
116
208
  };
117
209
 
118
- exports.WideModal = WideModal;
119
- WideModal.displayName = "WideModal";
120
- WideModal.story = {
121
- name: "Wide modal",
210
+ exports.Wide = Wide;
211
+ Wide.displayName = "Wide";
212
+ Wide.story = {
213
+ name: "Wide",
122
214
  parameters: {
123
215
  chromatic: {
124
216
  delay: 500
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/Modal/Modal.story.tsx"],"names":["title","Default","story","parameters","chromatic","delay","WithTitle","name","WithLogo","ModalWithFixedButton","WideModal"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;eAEe;AACbA,EAAAA,KAAK,EAAE;AADM,C;;;AAIR,IAAMC,OAAO,GAAG,SAAVA,OAAU,GAAM;AAC3B,sBACE,6BAAC,YAAD;AAAO,IAAA,IAAI,MAAX;AAAY,IAAA,OAAO,EAAE;AAAA,aAAM,IAAN;AAAA;AAArB,4BADF;AAKD,CANM;;;AAAMA,O;AAQbA,OAAO,CAACC,KAAR,GAAgB;AACdC,EAAAA,UAAU,EAAE;AAAEC,IAAAA,SAAS,EAAE;AAAEC,MAAAA,KAAK,EAAE;AAAT;AAAb;AADE,CAAhB;;AAIO,IAAMC,SAAS,GAAG,SAAZA,SAAY,GAAM;AAC7B,sBACE,6BAAC,YAAD;AAAO,IAAA,IAAI,MAAX;AAAY,IAAA,KAAK,EAAC,aAAlB;AAAgC,IAAA,OAAO,EAAE;AAAA,aAAM,IAAN;AAAA;AAAzC,4BADF;AAKD,CANM;;;AAAMA,S;AAQbA,SAAS,CAACJ,KAAV,GAAkB;AAChBK,EAAAA,IAAI,EAAE,YADU;AAEhBJ,EAAAA,UAAU,EAAE;AAAEC,IAAAA,SAAS,EAAE;AAAEC,MAAAA,KAAK,EAAE;AAAT;AAAb;AAFI,CAAlB;;AAKO,IAAMG,QAAQ,GAAG,SAAXA,QAAW,GAAM;AAC5B,sBACE,6BAAC,YAAD;AAAO,IAAA,IAAI,MAAX;AAAY,IAAA,KAAK,EAAC,aAAlB;AAAgC,IAAA,OAAO,MAAvC;AAAwC,IAAA,OAAO,EAAE;AAAA,aAAM,IAAN;AAAA;AAAjD,4BADF;AAKD,CANM;;;AAAMA,Q;AAQbA,QAAQ,CAACN,KAAT,GAAiB;AACfK,EAAAA,IAAI,EAAE,WADS;AAEfJ,EAAAA,UAAU,EAAE;AAAEC,IAAAA,SAAS,EAAE;AAAEC,MAAAA,KAAK,EAAE;AAAT;AAAb;AAFG,CAAjB;;AAKO,IAAMI,oBAAoB,GAAG,SAAvBA,oBAAuB,GAAM;AACxC,sBACE,6BAAC,YAAD;AACE,IAAA,IAAI,MADN;AAEE,IAAA,KAAK,EAAC,aAFR;AAGE,IAAA,OAAO,EAAE;AAAA,aAAM,IAAN;AAAA,KAHX;AAIE,IAAA,WAAW,eAAE,6BAAC,cAAD;AAAQ,MAAA,KAAK,EAAC;AAAd;AAJf,4BADF;AAUD,CAXM;;;AAAMA,oB;AAabA,oBAAoB,CAACP,KAArB,GAA6B;AAC3BK,EAAAA,IAAI,EAAE,yBADqB;AAE3BJ,EAAAA,UAAU,EAAE;AAAEC,IAAAA,SAAS,EAAE;AAAEC,MAAAA,KAAK,EAAE;AAAT;AAAb;AAFe,CAA7B;;AAKO,IAAMK,SAAS,GAAG,SAAZA,SAAY,GAAM;AAC7B,sBACE,6BAAC,YAAD;AAAO,IAAA,IAAI,MAAX;AAAY,IAAA,KAAK,EAAC,aAAlB;AAAgC,IAAA,MAAM,MAAtC;AAAuC,IAAA,OAAO,EAAE;AAAA,aAAM,IAAN;AAAA;AAAhD,4BADF;AAKD,CANM;;;AAAMA,S;AAQbA,SAAS,CAACR,KAAV,GAAkB;AAChBK,EAAAA,IAAI,EAAE,YADU;AAEhBJ,EAAAA,UAAU,EAAE;AAAEC,IAAAA,SAAS,EAAE;AAAEC,MAAAA,KAAK,EAAE;AAAT;AAAb;AAFI,CAAlB","sourcesContent":["import React from \"react\"\nimport { Button } from \"../Button\"\nimport { Modal } from \"./Modal\"\n\nexport default {\n title: \"Components/Modal\",\n}\n\nexport const Default = () => {\n return (\n <Modal show onClose={() => null}>\n Some example content\n </Modal>\n )\n}\n\nDefault.story = {\n parameters: { chromatic: { delay: 500 } },\n}\n\nexport const WithTitle = () => {\n return (\n <Modal show title=\"Modal Title\" onClose={() => null}>\n Some example content\n </Modal>\n )\n}\n\nWithTitle.story = {\n name: \"With title\",\n parameters: { chromatic: { delay: 500 } },\n}\n\nexport const WithLogo = () => {\n return (\n <Modal show title=\"Modal Title\" hasLogo onClose={() => null}>\n Some example content\n </Modal>\n )\n}\n\nWithLogo.story = {\n name: \"With logo\",\n parameters: { chromatic: { delay: 500 } },\n}\n\nexport const ModalWithFixedButton = () => {\n return (\n <Modal\n show\n title=\"Modal Title\"\n onClose={() => null}\n FixedButton={<Button width=\"100%\">Click me</Button>}\n >\n Some example content\n </Modal>\n )\n}\n\nModalWithFixedButton.story = {\n name: \"Modal with fixed button\",\n parameters: { chromatic: { delay: 500 } },\n}\n\nexport const WideModal = () => {\n return (\n <Modal show title=\"Modal Title\" isWide onClose={() => null}>\n Some example content\n </Modal>\n )\n}\n\nWideModal.story = {\n name: \"Wide modal\",\n parameters: { chromatic: { delay: 500 } },\n}\n"],"file":"Modal.story.js"}
1
+ {"version":3,"sources":["../../../src/elements/Modal/Modal.story.tsx"],"names":["title","content","Default","story","parameters","chromatic","delay","Title","name","LongTitle","Logo","LogoAndTitle","FixedButton","repeat","FixedButtonNoTitle","FixedButtonNoLogo","Wide"],"mappings":"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","sourcesContent":["import React from \"react\"\nimport { Button } from \"../Button\"\nimport { Modal } from \"./Modal\"\n\nexport default {\n title: \"Components/Modal\",\n}\n\nconst content = `\n Chicharrones marfa tumeric squid four loko flexitarian celiac hell of hot chicken \n jianbing salvia enamel pin woke. Migas you probably haven't heard of them church-key \n pok pok banh mi yr ennui ethical subway tile authentic. Sartorial retro roof party, \n gastropub bicycle rights drinking vinegar microdosing swag DIY deep v. Viral hella pop-up, \n banh mi squid poke chambray yuccie biodiesel occupy scenester.\n`\n\nexport const Default = () => {\n return (\n <Modal show onClose={() => null}>\n {content}\n </Modal>\n )\n}\n\nDefault.story = {\n parameters: { chromatic: { delay: 500 } },\n}\n\nexport const Title = () => {\n return (\n <Modal show title=\"Modal Title\" onClose={() => null}>\n {content}\n </Modal>\n )\n}\n\nTitle.story = {\n name: \"Title\",\n parameters: { chromatic: { delay: 500 } },\n}\n\nexport const LongTitle = () => {\n return (\n <Modal\n show\n title=\"Modal Title with a longer title or headline text that runs on for mutliple lines\"\n onClose={() => null}\n >\n {content}\n </Modal>\n )\n}\n\nLongTitle.story = {\n name: \"Long title\",\n parameters: { chromatic: { delay: 500 } },\n}\n\nexport const Logo = () => {\n return (\n <Modal show hasLogo onClose={() => null}>\n {content}\n </Modal>\n )\n}\n\nLogo.story = {\n name: \"Logo\",\n parameters: { chromatic: { delay: 500 } },\n}\n\nexport const LogoAndTitle = () => {\n return (\n <Modal show hasLogo title=\"Modal Title\" onClose={() => null}>\n {content}\n </Modal>\n )\n}\n\nLogoAndTitle.story = {\n name: \"Logo and title\",\n parameters: { chromatic: { delay: 500 } },\n}\n\nexport const FixedButton = () => {\n return (\n <Modal\n show\n title=\"Modal Title\"\n hasLogo\n onClose={() => null}\n FixedButton={<Button width=\"100%\">Click me</Button>}\n >\n {content.repeat(5)}\n </Modal>\n )\n}\n\nFixedButton.story = {\n name: \"Fixed button\",\n parameters: { chromatic: { delay: 500 } },\n}\n\nexport const FixedButtonNoTitle = () => {\n return (\n <Modal\n show\n hasLogo\n onClose={() => null}\n FixedButton={<Button width=\"100%\">Click me</Button>}\n >\n {content.repeat(5)}\n </Modal>\n )\n}\n\nFixedButtonNoTitle.story = {\n name: \"Fixed button no title\",\n parameters: { chromatic: { delay: 500 } },\n}\n\nexport const FixedButtonNoLogo = () => {\n return (\n <Modal\n show\n title=\"Modal Title\"\n onClose={() => null}\n FixedButton={<Button width=\"100%\">Click me</Button>}\n >\n {content.repeat(5)}\n </Modal>\n )\n}\n\nFixedButtonNoLogo.story = {\n name: \"Fixed button no logo\",\n parameters: { chromatic: { delay: 500 } },\n}\n\nexport const Wide = () => {\n return (\n <Modal show title=\"Modal Title\" isWide onClose={() => null}>\n {content}\n </Modal>\n )\n}\n\nWide.story = {\n name: \"Wide\",\n parameters: { chromatic: { delay: 500 } },\n}\n"],"file":"Modal.story.js"}
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ /**
3
+ * useOnScroll is used to track if an element is scrolled vertically or not
4
+ */
5
+ export declare const useOnScroll: () => {
6
+ isScrolled: boolean;
7
+ elementRef: import("react").MutableRefObject<null>;
8
+ };
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useOnScroll = void 0;
7
+
8
+ var _react = require("react");
9
+
10
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
11
+
12
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
13
+
14
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
15
+
16
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
17
+
18
+ function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
19
+
20
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
21
+
22
+ /**
23
+ * useOnScroll is used to track if an element is scrolled vertically or not
24
+ */
25
+ var useOnScroll = function useOnScroll() {
26
+ var _useState = (0, _react.useState)(false),
27
+ _useState2 = _slicedToArray(_useState, 2),
28
+ isScrolled = _useState2[0],
29
+ setIsScrolled = _useState2[1];
30
+
31
+ var elementRef = (0, _react.useRef)(null);
32
+ var node = elementRef.current;
33
+ (0, _react.useEffect)(function () {
34
+ if (!("IntersectionObserver" in window)) return;
35
+ if (!node) return;
36
+ var observer = new IntersectionObserver(function (_ref) {
37
+ var _ref2 = _slicedToArray(_ref, 1),
38
+ entry = _ref2[0];
39
+
40
+ setIsScrolled(!entry.isIntersecting);
41
+ }, {
42
+ root: null,
43
+ rootMargin: "0px",
44
+ threshold: 1.0
45
+ });
46
+ observer.observe(node);
47
+ return function () {
48
+ observer.unobserve(node);
49
+ };
50
+ }, [node, isScrolled]);
51
+ return {
52
+ isScrolled: isScrolled,
53
+ elementRef: elementRef
54
+ };
55
+ };
56
+
57
+ exports.useOnScroll = useOnScroll;
58
+ //# sourceMappingURL=useOnScroll.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/useOnScroll.ts"],"names":["useOnScroll","isScrolled","setIsScrolled","elementRef","node","current","window","observer","IntersectionObserver","entry","isIntersecting","root","rootMargin","threshold","observe","unobserve"],"mappings":";;;;;;;AAAA;;;;;;;;;;;;;;AAEA;AACA;AACA;AACO,IAAMA,WAAW,GAAG,SAAdA,WAAc,GAAM;AAAA,kBACK,qBAAS,KAAT,CADL;AAAA;AAAA,MACxBC,UADwB;AAAA,MACZC,aADY;;AAE/B,MAAMC,UAAU,GAAG,mBAAO,IAAP,CAAnB;AACA,MAAMC,IAAI,GAAGD,UAAU,CAACE,OAAxB;AAEA,wBAAU,YAAM;AACd,QAAI,EAAE,0BAA0BC,MAA5B,CAAJ,EAAyC;AACzC,QAAI,CAACF,IAAL,EAAW;AAEX,QAAMG,QAAQ,GAAG,IAAIC,oBAAJ,CACf,gBAAa;AAAA;AAAA,UAAXC,KAAW;;AACXP,MAAAA,aAAa,CAAC,CAACO,KAAK,CAACC,cAAR,CAAb;AACD,KAHc,EAIf;AACEC,MAAAA,IAAI,EAAE,IADR;AAEEC,MAAAA,UAAU,EAAE,KAFd;AAGEC,MAAAA,SAAS,EAAE;AAHb,KAJe,CAAjB;AAWAN,IAAAA,QAAQ,CAACO,OAAT,CAAiBV,IAAjB;AAEA,WAAO,YAAM;AACXG,MAAAA,QAAQ,CAACQ,SAAT,CAAmBX,IAAnB;AACD,KAFD;AAGD,GApBD,EAoBG,CAACA,IAAD,EAAOH,UAAP,CApBH;AAsBA,SAAO;AAAEA,IAAAA,UAAU,EAAVA,UAAF;AAAcE,IAAAA,UAAU,EAAVA;AAAd,GAAP;AACD,CA5BM","sourcesContent":["import { useEffect, useState, useRef } from \"react\"\n\n/**\n * useOnScroll is used to track if an element is scrolled vertically or not\n */\nexport const useOnScroll = () => {\n const [isScrolled, setIsScrolled] = useState(false)\n const elementRef = useRef(null)\n const node = elementRef.current\n\n useEffect(() => {\n if (!(\"IntersectionObserver\" in window)) return\n if (!node) return\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n setIsScrolled(!entry.isIntersecting)\n },\n {\n root: null,\n rootMargin: \"0px\",\n threshold: 1.0,\n }\n )\n\n observer.observe(node)\n\n return () => {\n observer.unobserve(node)\n }\n }, [node, isScrolled])\n\n return { isScrolled, elementRef }\n}\n"],"file":"useOnScroll.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@artsy/palette",
3
- "version": "18.7.4",
3
+ "version": "18.8.0",
4
4
  "description": "Design system library for react components",
5
5
  "main": "dist/index.js",
6
6
  "publishConfig": {
@@ -174,5 +174,5 @@
174
174
  "<rootDir>/www/"
175
175
  ]
176
176
  },
177
- "gitHead": "1e1f87f0c407adf58f5e663e5cc5b380ca9f4b6c"
177
+ "gitHead": "b28d6d4136e809c3b2e2c9a5bf52eae35bdf78f8"
178
178
  }