@artsy/palette 18.4.2 → 18.5.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,20 @@
1
+ # v18.5.0 (Thu Oct 28 2021)
2
+
3
+ #### 🚀 Enhancement
4
+
5
+ - feat(toasts): supports retracting toasts [#1065](https://github.com/artsy/palette/pull/1065) ([@dzucconi](https://github.com/dzucconi))
6
+
7
+ #### 🐛 Bug Fix
8
+
9
+ - chore(chromatic): disables stories ([@dzucconi](https://github.com/dzucconi))
10
+ - feat(toasts): supports retracting toasts ([@dzucconi](https://github.com/dzucconi))
11
+
12
+ #### Authors: 1
13
+
14
+ - Damon ([@dzucconi](https://github.com/dzucconi))
15
+
16
+ ---
17
+
1
18
  # v18.4.2 (Mon Oct 25 2021)
2
19
 
3
20
  #### 🐛 Bug Fix
@@ -8,5 +8,10 @@ export declare const SpinnerWithDelayedShow: {
8
8
  (): JSX.Element;
9
9
  story: {
10
10
  name: string;
11
+ parameters: {
12
+ chromatic: {
13
+ disable: boolean;
14
+ };
15
+ };
11
16
  };
12
17
  };
@@ -32,6 +32,11 @@ var SpinnerWithDelayedShow = function SpinnerWithDelayedShow() {
32
32
  exports.SpinnerWithDelayedShow = SpinnerWithDelayedShow;
33
33
  SpinnerWithDelayedShow.displayName = "SpinnerWithDelayedShow";
34
34
  SpinnerWithDelayedShow.story = {
35
- name: "Spinner with delayed show"
35
+ name: "Spinner with delayed show",
36
+ parameters: {
37
+ chromatic: {
38
+ disable: true
39
+ }
40
+ }
36
41
  };
37
42
  //# sourceMappingURL=Spinner.story.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/Spinner/Spinner.story.tsx"],"names":["title","DefaultSpinner","SpinnerWithDelayedShow","story","name"],"mappings":";;;;;;;AAAA;;AACA;;;;eAEe;AACbA,EAAAA,KAAK,EAAE;AADM,C;;;AAIR,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,GAAM;AAClC,sBAAO,6BAAC,gBAAD,OAAP;AACD,CAFM;;;AAAMA,c;;AAIN,IAAMC,sBAAsB,GAAG,SAAzBA,sBAAyB,GAAM;AAC1C,sBAAO,6BAAC,gBAAD;AAAS,IAAA,KAAK,EAAE;AAAhB,IAAP;AACD,CAFM;;;AAAMA,sB;AAIbA,sBAAsB,CAACC,KAAvB,GAA+B;AAC7BC,EAAAA,IAAI,EAAE;AADuB,CAA/B","sourcesContent":["import React from \"react\"\nimport { Spinner } from \"./Spinner\"\n\nexport default {\n title: \"Components/Spinner\",\n}\n\nexport const DefaultSpinner = () => {\n return <Spinner />\n}\n\nexport const SpinnerWithDelayedShow = () => {\n return <Spinner delay={1000} />\n}\n\nSpinnerWithDelayedShow.story = {\n name: \"Spinner with delayed show\",\n}\n"],"file":"Spinner.story.js"}
1
+ {"version":3,"sources":["../../../src/elements/Spinner/Spinner.story.tsx"],"names":["title","DefaultSpinner","SpinnerWithDelayedShow","story","name","parameters","chromatic","disable"],"mappings":";;;;;;;AAAA;;AACA;;;;eAEe;AACbA,EAAAA,KAAK,EAAE;AADM,C;;;AAIR,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,GAAM;AAClC,sBAAO,6BAAC,gBAAD,OAAP;AACD,CAFM;;;AAAMA,c;;AAIN,IAAMC,sBAAsB,GAAG,SAAzBA,sBAAyB,GAAM;AAC1C,sBAAO,6BAAC,gBAAD;AAAS,IAAA,KAAK,EAAE;AAAhB,IAAP;AACD,CAFM;;;AAAMA,sB;AAIbA,sBAAsB,CAACC,KAAvB,GAA+B;AAC7BC,EAAAA,IAAI,EAAE,2BADuB;AAE7BC,EAAAA,UAAU,EAAE;AAAEC,IAAAA,SAAS,EAAE;AAAEC,MAAAA,OAAO,EAAE;AAAX;AAAb;AAFiB,CAA/B","sourcesContent":["import React from \"react\"\nimport { Spinner } from \"./Spinner\"\n\nexport default {\n title: \"Components/Spinner\",\n}\n\nexport const DefaultSpinner = () => {\n return <Spinner />\n}\n\nexport const SpinnerWithDelayedShow = () => {\n return <Spinner delay={1000} />\n}\n\nSpinnerWithDelayedShow.story = {\n name: \"Spinner with delayed show\",\n parameters: { chromatic: { disable: true } },\n}\n"],"file":"Spinner.story.js"}
@@ -2,13 +2,14 @@ import React from "react";
2
2
  import { BoxProps } from "../Box";
3
3
  export declare type ToastVariant = keyof typeof TOAST_VARIANTS;
4
4
  export interface ToastProps extends BoxProps {
5
+ id: string;
5
6
  action?: {
6
7
  label: string;
7
8
  onClick(): void;
8
9
  };
9
10
  description?: string;
10
11
  message: string;
11
- onClose?(): void;
12
+ onClose?(id: string): void;
12
13
  variant?: ToastVariant;
13
14
  }
14
15
  export declare const Toast: React.FC<ToastProps>;
@@ -28,11 +28,16 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return
28
28
  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; }
29
29
 
30
30
  var Toast = function Toast(_ref) {
31
- var action = _ref.action,
31
+ var id = _ref.id,
32
+ action = _ref.action,
32
33
  description = _ref.description,
33
34
  message = _ref.message,
34
35
  onClose = _ref.onClose,
35
- rest = _objectWithoutProperties(_ref, ["action", "description", "message", "onClose"]);
36
+ rest = _objectWithoutProperties(_ref, ["id", "action", "description", "message", "onClose"]);
37
+
38
+ var handleClick = function handleClick() {
39
+ onClose === null || onClose === void 0 ? void 0 : onClose(id);
40
+ };
36
41
 
37
42
  return /*#__PURE__*/_react.default.createElement(Container, _extends({
38
43
  width: "100%",
@@ -42,10 +47,10 @@ var Toast = function Toast(_ref) {
42
47
  color: "white100",
43
48
  role: "button",
44
49
  tabIndex: 0,
45
- onClick: onClose,
50
+ onClick: handleClick,
46
51
  onKeyPress: function onKeyPress(event) {
47
52
  if (event.key === "Enter" || event.key === " ") {
48
- onClose === null || onClose === void 0 ? void 0 : onClose();
53
+ onClose === null || onClose === void 0 ? void 0 : onClose(id);
49
54
  }
50
55
  },
51
56
  style: {
@@ -91,7 +96,7 @@ exports.TOAST_VARIANTS = TOAST_VARIANTS;
91
96
  var Container = (0, _styledComponents.default)(_Box.Box).withConfig({
92
97
  displayName: "Toast__Container",
93
98
  componentId: "sc-1c067m4-0"
94
- })(["", ""], (0, _styledSystem.variant)({
99
+ })(["", " user-select:none;"], (0, _styledSystem.variant)({
95
100
  variants: TOAST_VARIANTS
96
101
  }));
97
102
  //# sourceMappingURL=Toast.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/Toasts/Toast.tsx"],"names":["Toast","action","description","message","onClose","rest","event","key","cursor","onClick","label","TOAST_VARIANTS","backgroundColor","color","alert","success","error","Container","Box","variants"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;AAeO,IAAMA,KAA2B,GAAG,SAA9BA,KAA8B,OAMrC;AAAA,MALJC,MAKI,QALJA,MAKI;AAAA,MAJJC,WAII,QAJJA,WAII;AAAA,MAHJC,OAGI,QAHJA,OAGI;AAAA,MAFJC,OAEI,QAFJA,OAEI;AAAA,MADDC,IACC;;AACJ,sBACE,6BAAC,SAAD;AACE,IAAA,KAAK,EAAC,MADR;AAEE,IAAA,EAAE,EAAE,CAFN;AAGE,IAAA,EAAE,EAAE,CAHN;AAIE,IAAA,EAAE,EAAC,UAJL;AAKE,IAAA,KAAK,EAAC,UALR;AAME,IAAA,IAAI,EAAC,QANP;AAOE,IAAA,QAAQ,EAAE,CAPZ;AAQE,IAAA,OAAO,EAAED,OARX;AASE,IAAA,UAAU,EAAE,oBAACE,KAAD,EAAW;AACrB,UAAIA,KAAK,CAACC,GAAN,KAAc,OAAd,IAAyBD,KAAK,CAACC,GAAN,KAAc,GAA3C,EAAgD;AAC9CH,QAAAA,OAAO,SAAP,IAAAA,OAAO,WAAP,YAAAA,OAAO;AACR;AACF,KAbH;AAcE,IAAA,KAAK,EAAE;AAAEI,MAAAA,MAAM,EAAE;AAAV;AAdT,KAeMH,IAfN,gBAiBE,6BAAC,UAAD;AAAM,IAAA,UAAU,EAAC,YAAjB;AAA8B,IAAA,cAAc,EAAC;AAA7C,kBACE,6BAAC,UAAD;AAAM,IAAA,OAAO,EAAC;AAAd,KAAoBF,OAApB,CADF,EAGGF,MAAM,iBACL,6BAAC,oBAAD;AACE,IAAA,OAAO,EAAEA,MAAM,CAACQ,OADlB;AAEE,IAAA,cAAc,EAAC,WAFjB;AAGE,IAAA,KAAK,EAAC;AAHR,kBAKE,6BAAC,UAAD;AAAM,IAAA,OAAO,EAAC;AAAd,KAAoBR,MAAM,CAACS,KAA3B,CALF,CAJJ,CAjBF,EA+BGR,WAAW,iBAAI,6BAAC,UAAD;AAAM,IAAA,OAAO,EAAC;AAAd,KAAoBA,WAApB,CA/BlB,CADF;AAmCD,CA1CM;;;AAAMF,K;AA4CN,IAAMW,cAAc,GAAG;AAC5BR,EAAAA,OAAO,EAAE;AACPS,IAAAA,eAAe,EAAE,UADV;AAEPC,IAAAA,KAAK,EAAE;AAFA,GADmB;AAK5BC,EAAAA,KAAK,EAAE;AACLF,IAAAA,eAAe,EAAE,SADZ;AAELC,IAAAA,KAAK,EAAE;AAFF,GALqB;AAS5BE,EAAAA,OAAO,EAAE;AACPH,IAAAA,eAAe,EAAE,UADV;AAEPC,IAAAA,KAAK,EAAE;AAFA,GATmB;AAa5BG,EAAAA,KAAK,EAAE;AACLJ,IAAAA,eAAe,EAAE,QADZ;AAELC,IAAAA,KAAK,EAAE;AAFF;AAbqB,CAAvB;;AAmBP,IAAMI,SAAS,GAAG,+BAAOC,QAAP,CAAH;AAAA;AAAA;AAAA,aACX,2BAAQ;AAAEC,EAAAA,QAAQ,EAAER;AAAZ,CAAR,CADW,CAAf","sourcesContent":["import React from \"react\"\nimport styled from \"styled-components\"\nimport { variant } from \"styled-system\"\nimport { Box, BoxProps } from \"../Box\"\nimport { Flex } from \"../Flex\"\nimport { Clickable } from \"../Clickable\"\nimport { Text } from \"../Text\"\n\nexport type ToastVariant = keyof typeof TOAST_VARIANTS\n\nexport interface ToastProps extends BoxProps {\n action?: {\n label: string\n onClick(): void\n }\n description?: string\n message: string\n onClose?(): void\n variant?: ToastVariant\n}\n\nexport const Toast: React.FC<ToastProps> = ({\n action,\n description,\n message,\n onClose,\n ...rest\n}) => {\n return (\n <Container\n width=\"100%\"\n px={2}\n py={1}\n bg=\"black100\"\n color=\"white100\"\n role=\"button\"\n tabIndex={0}\n onClick={onClose}\n onKeyPress={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n onClose?.()\n }\n }}\n style={{ cursor: \"pointer\" }}\n {...rest}\n >\n <Flex alignItems=\"flex-start\" justifyContent=\"space-between\">\n <Text variant=\"md\">{message}</Text>\n\n {action && (\n <Clickable\n onClick={action.onClick}\n textDecoration=\"underline\"\n color=\"rgba(255, 255, 255, 0.9)\"\n >\n <Text variant=\"xs\">{action.label}</Text>\n </Clickable>\n )}\n </Flex>\n\n {description && <Text variant=\"xs\">{description}</Text>}\n </Container>\n )\n}\n\nexport const TOAST_VARIANTS = {\n message: {\n backgroundColor: \"black100\",\n color: \"white100\",\n },\n alert: {\n backgroundColor: \"blue100\",\n color: \"white100\",\n },\n success: {\n backgroundColor: \"green100\",\n color: \"white100\",\n },\n error: {\n backgroundColor: \"red100\",\n color: \"white100\",\n },\n}\n\nconst Container = styled(Box)`\n ${variant({ variants: TOAST_VARIANTS })}\n`\n"],"file":"Toast.js"}
1
+ {"version":3,"sources":["../../../src/elements/Toasts/Toast.tsx"],"names":["Toast","id","action","description","message","onClose","rest","handleClick","event","key","cursor","onClick","label","TOAST_VARIANTS","backgroundColor","color","alert","success","error","Container","Box","variants"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;AAgBO,IAAMA,KAA2B,GAAG,SAA9BA,KAA8B,OAOrC;AAAA,MANJC,EAMI,QANJA,EAMI;AAAA,MALJC,MAKI,QALJA,MAKI;AAAA,MAJJC,WAII,QAJJA,WAII;AAAA,MAHJC,OAGI,QAHJA,OAGI;AAAA,MAFJC,OAEI,QAFJA,OAEI;AAAA,MADDC,IACC;;AACJ,MAAMC,WAAW,GAAG,SAAdA,WAAc,GAAM;AACxBF,IAAAA,OAAO,SAAP,IAAAA,OAAO,WAAP,YAAAA,OAAO,CAAGJ,EAAH,CAAP;AACD,GAFD;;AAIA,sBACE,6BAAC,SAAD;AACE,IAAA,KAAK,EAAC,MADR;AAEE,IAAA,EAAE,EAAE,CAFN;AAGE,IAAA,EAAE,EAAE,CAHN;AAIE,IAAA,EAAE,EAAC,UAJL;AAKE,IAAA,KAAK,EAAC,UALR;AAME,IAAA,IAAI,EAAC,QANP;AAOE,IAAA,QAAQ,EAAE,CAPZ;AAQE,IAAA,OAAO,EAAEM,WARX;AASE,IAAA,UAAU,EAAE,oBAACC,KAAD,EAAW;AACrB,UAAIA,KAAK,CAACC,GAAN,KAAc,OAAd,IAAyBD,KAAK,CAACC,GAAN,KAAc,GAA3C,EAAgD;AAC9CJ,QAAAA,OAAO,SAAP,IAAAA,OAAO,WAAP,YAAAA,OAAO,CAAGJ,EAAH,CAAP;AACD;AACF,KAbH;AAcE,IAAA,KAAK,EAAE;AAAES,MAAAA,MAAM,EAAE;AAAV;AAdT,KAeMJ,IAfN,gBAiBE,6BAAC,UAAD;AAAM,IAAA,UAAU,EAAC,YAAjB;AAA8B,IAAA,cAAc,EAAC;AAA7C,kBACE,6BAAC,UAAD;AAAM,IAAA,OAAO,EAAC;AAAd,KAAoBF,OAApB,CADF,EAGGF,MAAM,iBACL,6BAAC,oBAAD;AACE,IAAA,OAAO,EAAEA,MAAM,CAACS,OADlB;AAEE,IAAA,cAAc,EAAC,WAFjB;AAGE,IAAA,KAAK,EAAC;AAHR,kBAKE,6BAAC,UAAD;AAAM,IAAA,OAAO,EAAC;AAAd,KAAoBT,MAAM,CAACU,KAA3B,CALF,CAJJ,CAjBF,EA+BGT,WAAW,iBAAI,6BAAC,UAAD;AAAM,IAAA,OAAO,EAAC;AAAd,KAAoBA,WAApB,CA/BlB,CADF;AAmCD,CA/CM;;;AAAMH,K;AAiDN,IAAMa,cAAc,GAAG;AAC5BT,EAAAA,OAAO,EAAE;AACPU,IAAAA,eAAe,EAAE,UADV;AAEPC,IAAAA,KAAK,EAAE;AAFA,GADmB;AAK5BC,EAAAA,KAAK,EAAE;AACLF,IAAAA,eAAe,EAAE,SADZ;AAELC,IAAAA,KAAK,EAAE;AAFF,GALqB;AAS5BE,EAAAA,OAAO,EAAE;AACPH,IAAAA,eAAe,EAAE,UADV;AAEPC,IAAAA,KAAK,EAAE;AAFA,GATmB;AAa5BG,EAAAA,KAAK,EAAE;AACLJ,IAAAA,eAAe,EAAE,QADZ;AAELC,IAAAA,KAAK,EAAE;AAFF;AAbqB,CAAvB;;AAmBP,IAAMI,SAAS,GAAG,+BAAOC,QAAP,CAAH;AAAA;AAAA;AAAA,+BACX,2BAAQ;AAAEC,EAAAA,QAAQ,EAAER;AAAZ,CAAR,CADW,CAAf","sourcesContent":["import React from \"react\"\nimport styled from \"styled-components\"\nimport { variant } from \"styled-system\"\nimport { Box, BoxProps } from \"../Box\"\nimport { Flex } from \"../Flex\"\nimport { Clickable } from \"../Clickable\"\nimport { Text } from \"../Text\"\n\nexport type ToastVariant = keyof typeof TOAST_VARIANTS\n\nexport interface ToastProps extends BoxProps {\n id: string\n action?: {\n label: string\n onClick(): void\n }\n description?: string\n message: string\n onClose?(id: string): void\n variant?: ToastVariant\n}\n\nexport const Toast: React.FC<ToastProps> = ({\n id,\n action,\n description,\n message,\n onClose,\n ...rest\n}) => {\n const handleClick = () => {\n onClose?.(id)\n }\n\n return (\n <Container\n width=\"100%\"\n px={2}\n py={1}\n bg=\"black100\"\n color=\"white100\"\n role=\"button\"\n tabIndex={0}\n onClick={handleClick}\n onKeyPress={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n onClose?.(id)\n }\n }}\n style={{ cursor: \"pointer\" }}\n {...rest}\n >\n <Flex alignItems=\"flex-start\" justifyContent=\"space-between\">\n <Text variant=\"md\">{message}</Text>\n\n {action && (\n <Clickable\n onClick={action.onClick}\n textDecoration=\"underline\"\n color=\"rgba(255, 255, 255, 0.9)\"\n >\n <Text variant=\"xs\">{action.label}</Text>\n </Clickable>\n )}\n </Flex>\n\n {description && <Text variant=\"xs\">{description}</Text>}\n </Container>\n )\n}\n\nexport const TOAST_VARIANTS = {\n message: {\n backgroundColor: \"black100\",\n color: \"white100\",\n },\n alert: {\n backgroundColor: \"blue100\",\n color: \"white100\",\n },\n success: {\n backgroundColor: \"green100\",\n color: \"white100\",\n },\n error: {\n backgroundColor: \"red100\",\n color: \"white100\",\n },\n}\n\nconst Container = styled(Box)`\n ${variant({ variants: TOAST_VARIANTS })}\n user-select: none;\n`\n"],"file":"Toast.js"}
@@ -37,6 +37,7 @@ var Default = function Default() {
37
37
  }
38
38
  }]
39
39
  }, /*#__PURE__*/_react.default.createElement(_Toast.Toast, {
40
+ id: "example",
40
41
  message: "Message Title",
41
42
  description: "This is placeholder text."
42
43
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/Toasts/Toast.story.tsx"],"names":["title","Default","variant","action","label","onClick"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;;;eAEe;AACbA,EAAAA,KAAK,EAAE;AADM,C;;;AAIR,IAAMC,OAAO,GAAG,SAAVA,OAAU,GAAM;AAC3B,sBACE,6BAAC,uBAAD;AACE,IAAA,MAAM,EAAE,CACN;AAAEC,MAAAA,OAAO,EAAE;AAAX,KADM,EAEN;AAAEA,MAAAA,OAAO,EAAE;AAAX,KAFM,EAGN;AAAEA,MAAAA,OAAO,EAAE;AAAX,KAHM,EAIN;AAAEA,MAAAA,OAAO,EAAE;AAAX,KAJM,EAKN;AAAEC,MAAAA,MAAM,EAAE;AAAEC,QAAAA,KAAK,EAAE,MAAT;AAAiBC,QAAAA,OAAO,EAAE,0BAAO,SAAP;AAA1B;AAAV,KALM;AADV,kBASE,6BAAC,YAAD;AAAO,IAAA,OAAO,EAAC,eAAf;AAA+B,IAAA,WAAW,EAAC;AAA3C,IATF,CADF;AAaD,CAdM;;;AAAMJ,O","sourcesContent":["import { action } from \"@storybook/addon-actions\"\nimport React from \"react\"\nimport { States } from \"storybook-states\"\nimport { Toast, ToastProps } from \"./Toast\"\n\nexport default {\n title: \"Components/Toast\",\n}\n\nexport const Default = () => {\n return (\n <States<Partial<ToastProps>>\n states={[\n { variant: \"message\" },\n { variant: \"alert\" },\n { variant: \"success\" },\n { variant: \"error\" },\n { action: { label: \"Undo\", onClick: action(\"onClick\") } },\n ]}\n >\n <Toast message=\"Message Title\" description=\"This is placeholder text.\" />\n </States>\n )\n}\n"],"file":"Toast.story.js"}
1
+ {"version":3,"sources":["../../../src/elements/Toasts/Toast.story.tsx"],"names":["title","Default","variant","action","label","onClick"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;;;eAEe;AACbA,EAAAA,KAAK,EAAE;AADM,C;;;AAIR,IAAMC,OAAO,GAAG,SAAVA,OAAU,GAAM;AAC3B,sBACE,6BAAC,uBAAD;AACE,IAAA,MAAM,EAAE,CACN;AAAEC,MAAAA,OAAO,EAAE;AAAX,KADM,EAEN;AAAEA,MAAAA,OAAO,EAAE;AAAX,KAFM,EAGN;AAAEA,MAAAA,OAAO,EAAE;AAAX,KAHM,EAIN;AAAEA,MAAAA,OAAO,EAAE;AAAX,KAJM,EAKN;AAAEC,MAAAA,MAAM,EAAE;AAAEC,QAAAA,KAAK,EAAE,MAAT;AAAiBC,QAAAA,OAAO,EAAE,0BAAO,SAAP;AAA1B;AAAV,KALM;AADV,kBASE,6BAAC,YAAD;AACE,IAAA,EAAE,EAAC,SADL;AAEE,IAAA,OAAO,EAAC,eAFV;AAGE,IAAA,WAAW,EAAC;AAHd,IATF,CADF;AAiBD,CAlBM;;;AAAMJ,O","sourcesContent":["import { action } from \"@storybook/addon-actions\"\nimport React from \"react\"\nimport { States } from \"storybook-states\"\nimport { Toast, ToastProps } from \"./Toast\"\n\nexport default {\n title: \"Components/Toast\",\n}\n\nexport const Default = () => {\n return (\n <States<Partial<ToastProps>>\n states={[\n { variant: \"message\" },\n { variant: \"alert\" },\n { variant: \"success\" },\n { variant: \"error\" },\n { action: { label: \"Undo\", onClick: action(\"onClick\") } },\n ]}\n >\n <Toast\n id=\"example\"\n message=\"Message Title\"\n description=\"This is placeholder text.\"\n />\n </States>\n )\n}\n"],"file":"Toast.story.js"}
@@ -41,12 +41,11 @@ var Toasts = function Toasts(_ref) {
41
41
  })
42
42
  }, takeRight(toasts, limit).map(function (_ref2) {
43
43
  var id = _ref2.id,
44
- close = _ref2.close,
45
- rest = _objectWithoutProperties(_ref2, ["id", "close"]);
44
+ rest = _objectWithoutProperties(_ref2, ["id"]);
46
45
 
47
46
  return /*#__PURE__*/_react.default.createElement(_Toast.Toast, _extends({
48
47
  key: id,
49
- onClose: close
48
+ id: id
50
49
  }, rest));
51
50
  }))), /*#__PURE__*/_react.default.createElement(_VisuallyHidden.VisuallyHidden, {
52
51
  "aria-live": "assertive",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/Toasts/Toasts.tsx"],"names":["Toasts","limit","rest","toasts","takeRight","map","id","close","toast","i","message","description","xs","length","slice"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;AAMO,IAAMA,MAA6B,GAAG,SAAhCA,MAAgC,OAA4B;AAAA,wBAAzBC,KAAyB;AAAA,MAAzBA,KAAyB,2BAAjB,CAAiB;AAAA,MAAXC,IAAW;;AAAA,mBACpD,4BADoD;AAAA,MAC/DC,MAD+D,cAC/DA,MAD+D;;AAGvE,sBACE,yEACE,6BAAC,QAAD,EAASD,IAAT,eACE,6BAAC,UAAD;AAAM,IAAA,SAAS,eAAE,6BAAC,cAAD;AAAQ,MAAA,EAAE,EAAE;AAAZ;AAAjB,KACGE,SAAS,CAACD,MAAD,EAASF,KAAT,CAAT,CAAyBI,GAAzB,CAA6B;AAAA,QAAGC,EAAH,SAAGA,EAAH;AAAA,QAAOC,KAAP,SAAOA,KAAP;AAAA,QAAiBL,IAAjB;;AAAA,wBAC5B,6BAAC,YAAD;AAAO,MAAA,GAAG,EAAEI,EAAZ;AAAgB,MAAA,OAAO,EAAEC;AAAzB,OAAoCL,IAApC,EAD4B;AAAA,GAA7B,CADH,CADF,CADF,eASE,6BAAC,8BAAD;AACE,iBAAU,WADZ;AAEE,mBAAY,MAFd;AAGE,qBAAc;AAHhB,KAKGC,MAAM,CAACE,GAAP,CAAW,UAACG,KAAD,EAAQC,CAAR,EAAc;AACxB,wBACE;AAAK,MAAA,GAAG,EAAEA;AAAV,OACGD,KAAK,CAACE,OADT,SACqBF,KAAK,CAACG,WAD3B,CADF;AAKD,GANA,CALH,CATF,CADF;AAyBD,CA5BM;;;;AA8BP,IAAMP,SAAS,GAAG,SAAZA,SAAY,CAAKQ,EAAL,EAA4B;AAAA,MAAdX,KAAc,uEAAN,CAAM;;AAC5C,MAAIW,EAAE,CAACC,MAAH,GAAYZ,KAAhB,EAAuB;AACrB,WAAOW,EAAP;AACD;;AAED,SAAOA,EAAE,CAACE,KAAH,CAASF,EAAE,CAACC,MAAH,GAAYZ,KAArB,EAA4BW,EAAE,CAACC,MAA/B,CAAP;AACD,CAND","sourcesContent":["import React from \"react\"\nimport { VisuallyHidden } from \"../VisuallyHidden\"\nimport { Box, BoxProps } from \"../Box\"\nimport { Join } from \"../Join\"\nimport { Spacer } from \"../Spacer\"\nimport { Toast } from \"./Toast\"\nimport { useToasts } from \"./useToasts\"\n\nexport interface ToastsProps extends BoxProps {\n limit?: number\n}\n\nexport const Toasts: React.FC<ToastsProps> = ({ limit = 5, ...rest }) => {\n const { toasts } = useToasts()\n\n return (\n <>\n <Box {...rest}>\n <Join separator={<Spacer mt={1} />}>\n {takeRight(toasts, limit).map(({ id, close, ...rest }) => (\n <Toast key={id} onClose={close} {...rest} />\n ))}\n </Join>\n </Box>\n\n <VisuallyHidden\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n aria-relevant=\"additions\"\n >\n {toasts.map((toast, i) => {\n return (\n <div key={i}>\n {toast.message} - {toast.description}\n </div>\n )\n })}\n </VisuallyHidden>\n </>\n )\n}\n\nconst takeRight = <T,>(xs: T[], limit = 1) => {\n if (xs.length < limit) {\n return xs\n }\n\n return xs.slice(xs.length - limit, xs.length)\n}\n"],"file":"Toasts.js"}
1
+ {"version":3,"sources":["../../../src/elements/Toasts/Toasts.tsx"],"names":["Toasts","limit","rest","toasts","takeRight","map","id","toast","i","message","description","xs","length","slice"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;AAMO,IAAMA,MAA6B,GAAG,SAAhCA,MAAgC,OAA4B;AAAA,wBAAzBC,KAAyB;AAAA,MAAzBA,KAAyB,2BAAjB,CAAiB;AAAA,MAAXC,IAAW;;AAAA,mBACpD,4BADoD;AAAA,MAC/DC,MAD+D,cAC/DA,MAD+D;;AAGvE,sBACE,yEACE,6BAAC,QAAD,EAASD,IAAT,eACE,6BAAC,UAAD;AAAM,IAAA,SAAS,eAAE,6BAAC,cAAD;AAAQ,MAAA,EAAE,EAAE;AAAZ;AAAjB,KACGE,SAAS,CAACD,MAAD,EAASF,KAAT,CAAT,CAAyBI,GAAzB,CAA6B;AAAA,QAAGC,EAAH,SAAGA,EAAH;AAAA,QAAUJ,IAAV;;AAAA,wBAC5B,6BAAC,YAAD;AAAO,MAAA,GAAG,EAAEI,EAAZ;AAAgB,MAAA,EAAE,EAAEA;AAApB,OAA4BJ,IAA5B,EAD4B;AAAA,GAA7B,CADH,CADF,CADF,eASE,6BAAC,8BAAD;AACE,iBAAU,WADZ;AAEE,mBAAY,MAFd;AAGE,qBAAc;AAHhB,KAKGC,MAAM,CAACE,GAAP,CAAW,UAACE,KAAD,EAAQC,CAAR,EAAc;AACxB,wBACE;AAAK,MAAA,GAAG,EAAEA;AAAV,OACGD,KAAK,CAACE,OADT,SACqBF,KAAK,CAACG,WAD3B,CADF;AAKD,GANA,CALH,CATF,CADF;AAyBD,CA5BM;;;;AA8BP,IAAMN,SAAS,GAAG,SAAZA,SAAY,CAAKO,EAAL,EAA4B;AAAA,MAAdV,KAAc,uEAAN,CAAM;;AAC5C,MAAIU,EAAE,CAACC,MAAH,GAAYX,KAAhB,EAAuB;AACrB,WAAOU,EAAP;AACD;;AAED,SAAOA,EAAE,CAACE,KAAH,CAASF,EAAE,CAACC,MAAH,GAAYX,KAArB,EAA4BU,EAAE,CAACC,MAA/B,CAAP;AACD,CAND","sourcesContent":["import React from \"react\"\nimport { VisuallyHidden } from \"../VisuallyHidden\"\nimport { Box, BoxProps } from \"../Box\"\nimport { Join } from \"../Join\"\nimport { Spacer } from \"../Spacer\"\nimport { Toast } from \"./Toast\"\nimport { useToasts } from \"./useToasts\"\n\nexport interface ToastsProps extends BoxProps {\n limit?: number\n}\n\nexport const Toasts: React.FC<ToastsProps> = ({ limit = 5, ...rest }) => {\n const { toasts } = useToasts()\n\n return (\n <>\n <Box {...rest}>\n <Join separator={<Spacer mt={1} />}>\n {takeRight(toasts, limit).map(({ id, ...rest }) => (\n <Toast key={id} id={id} {...rest} />\n ))}\n </Join>\n </Box>\n\n <VisuallyHidden\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n aria-relevant=\"additions\"\n >\n {toasts.map((toast, i) => {\n return (\n <div key={i}>\n {toast.message} - {toast.description}\n </div>\n )\n })}\n </VisuallyHidden>\n </>\n )\n}\n\nconst takeRight = <T,>(xs: T[], limit = 1) => {\n if (xs.length < limit) {\n return xs\n }\n\n return xs.slice(xs.length - limit, xs.length)\n}\n"],"file":"Toasts.js"}
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
2
 
3
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
+
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
6
8
  exports.Demo = exports.default = void 0;
7
9
 
8
- var _react = _interopRequireDefault(require("react"));
10
+ var _react = _interopRequireWildcard(require("react"));
9
11
 
10
12
  var _storybookStates = require("storybook-states");
11
13
 
@@ -13,13 +15,39 @@ var _Flex = require("../Flex");
13
15
 
14
16
  var _Button = require("../Button");
15
17
 
18
+ var _Text = require("../Text");
19
+
16
20
  var _Toast = require("./Toast");
17
21
 
18
22
  var _Toasts = require("./Toasts");
19
23
 
20
24
  var _useToasts2 = require("./useToasts");
21
25
 
22
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
26
+ var _ = require("..");
27
+
28
+ function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
29
+
30
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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; }
31
+
32
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
33
+
34
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
35
+
36
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
37
+
38
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
39
+
40
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
41
+
42
+ 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."); }
43
+
44
+ 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); }
45
+
46
+ 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; }
47
+
48
+ 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; }
49
+
50
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
23
51
 
24
52
  var _default = {
25
53
  title: "Components/Toasts"
@@ -28,7 +56,13 @@ exports.default = _default;
28
56
 
29
57
  var Demo = function Demo() {
30
58
  var _useToasts = (0, _useToasts2.useToasts)(),
31
- sendToast = _useToasts.sendToast;
59
+ sendToast = _useToasts.sendToast,
60
+ retractToast = _useToasts.retractToast;
61
+
62
+ var _useState = (0, _react.useState)([]),
63
+ _useState2 = _slicedToArray(_useState, 2),
64
+ activeToasts = _useState2[0],
65
+ setActiveToasts = _useState2[1];
32
66
 
33
67
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Flex.Flex, {
34
68
  mb: 1
@@ -40,16 +74,63 @@ var Demo = function Demo() {
40
74
  size: "small",
41
75
  mr: 1,
42
76
  onClick: function onClick() {
43
- sendToast({
77
+ var _sendToast = sendToast({
44
78
  variant: variant,
45
79
  message: "".concat(captialized, " Title"),
46
- description: "This is example text."
80
+ description: "This is example text.",
81
+ onClose: function onClose(closedID) {
82
+ setActiveToasts(function (activeToasts) {
83
+ return activeToasts.filter(function (id) {
84
+ return id !== closedID;
85
+ });
86
+ });
87
+ }
88
+ }),
89
+ id = _sendToast.id;
90
+
91
+ setActiveToasts(function (activeToasts) {
92
+ return [].concat(_toConsumableArray(activeToasts), [id]);
47
93
  });
48
94
  }
49
95
  }, captialized);
50
- })), /*#__PURE__*/_react.default.createElement(_storybookStates.States, null, /*#__PURE__*/_react.default.createElement(_Toasts.Toasts, {
96
+ }), /*#__PURE__*/_react.default.createElement(_Button.Button, {
97
+ size: "small",
98
+ variant: "secondaryGray",
99
+ onClick: function onClick() {
100
+ var _sendToast2 = sendToast({
101
+ variant: "message",
102
+ message: "Until manually dismissed",
103
+ description: "This toast will hang around until it's manually dismissed.",
104
+ ttl: Infinity,
105
+ onClose: function onClose(closedID) {
106
+ setActiveToasts(function (activeToasts) {
107
+ return activeToasts.filter(function (id) {
108
+ return id !== closedID;
109
+ });
110
+ });
111
+ }
112
+ }),
113
+ id = _sendToast2.id;
114
+
115
+ setActiveToasts(function (activeToasts) {
116
+ return [].concat(_toConsumableArray(activeToasts), [id]);
117
+ });
118
+ }
119
+ }, "Until manually dismissed")), /*#__PURE__*/_react.default.createElement(_storybookStates.States, null, /*#__PURE__*/_react.default.createElement(_Toasts.Toasts, {
51
120
  limit: 7
52
- })));
121
+ })), activeToasts.length > 0 && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_.Separator, {
122
+ my: 1
123
+ }), /*#__PURE__*/_react.default.createElement(_Text.Text, {
124
+ variant: "xs"
125
+ }, /*#__PURE__*/_react.default.createElement("u", null, "Active toasts:"), activeToasts.map(function (id) {
126
+ return /*#__PURE__*/_react.default.createElement(_.Clickable, {
127
+ key: id,
128
+ display: "block",
129
+ onClick: function onClick() {
130
+ return retractToast(id);
131
+ }
132
+ }, "Remove ", id);
133
+ }))));
53
134
  };
54
135
 
55
136
  exports.Demo = Demo;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/Toasts/Toasts.story.tsx"],"names":["title","Demo","sendToast","Object","keys","TOAST_VARIANTS","map","variant","captialized","charAt","toUpperCase","slice","message","description","decorators","Story"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;eAEe;AACbA,EAAAA,KAAK,EAAE;AADM,C;;;AAIR,IAAMC,IAAI,GAAG,SAAPA,IAAO,GAAM;AAAA,mBACF,4BADE;AAAA,MAChBC,SADgB,cAChBA,SADgB;;AAGxB,sBACE,yEACE,6BAAC,UAAD;AAAM,IAAA,EAAE,EAAE;AAAV,KACIC,MAAM,CAACC,IAAP,CAAYC,qBAAZ,CAAD,CAAgDC,GAAhD,CAAoD,UAACC,OAAD,EAAa;AAChE,QAAMC,WAAW,GAAGD,OAAO,CAACE,MAAR,CAAe,CAAf,EAAkBC,WAAlB,KAAkCH,OAAO,CAACI,KAAR,CAAc,CAAd,CAAtD;AAEA,wBACE,6BAAC,cAAD;AACE,MAAA,GAAG,EAAEJ,OADP;AAEE,MAAA,OAAO,EAAC,kBAFV;AAGE,MAAA,IAAI,EAAC,OAHP;AAIE,MAAA,EAAE,EAAE,CAJN;AAKE,MAAA,OAAO,EAAE,mBAAM;AACbL,QAAAA,SAAS,CAAC;AACRK,UAAAA,OAAO,EAAPA,OADQ;AAERK,UAAAA,OAAO,YAAKJ,WAAL,WAFC;AAGRK,UAAAA,WAAW,EAAE;AAHL,SAAD,CAAT;AAKD;AAXH,OAaGL,WAbH,CADF;AAiBD,GApBA,CADH,CADF,eAyBE,6BAAC,uBAAD,qBACE,6BAAC,cAAD;AAAQ,IAAA,KAAK,EAAE;AAAf,IADF,CAzBF,CADF;AA+BD,CAlCM;;;AAoCPP,IAAI,CAACa,UAAL,GAAkB,CAChB,UAACC,KAAD;AAAA,sBACE,6BAAC,0BAAD,qBACE,6BAAC,KAAD,OADF,CADF;AAAA,CADgB,CAAlB","sourcesContent":["import React from \"react\"\nimport { States } from \"storybook-states\"\nimport { Flex } from \"../Flex\"\nimport { Button } from \"../Button\"\nimport { ToastVariant, TOAST_VARIANTS } from \"./Toast\"\nimport { Toasts } from \"./Toasts\"\nimport { ToastsProvider, useToasts } from \"./useToasts\"\n\nexport default {\n title: \"Components/Toasts\",\n}\n\nexport const Demo = () => {\n const { sendToast } = useToasts()\n\n return (\n <>\n <Flex mb={1}>\n {(Object.keys(TOAST_VARIANTS) as ToastVariant[]).map((variant) => {\n const captialized = variant.charAt(0).toUpperCase() + variant.slice(1)\n\n return (\n <Button\n key={variant}\n variant=\"secondaryOutline\"\n size=\"small\"\n mr={1}\n onClick={() => {\n sendToast({\n variant,\n message: `${captialized} Title`,\n description: \"This is example text.\",\n })\n }}\n >\n {captialized}\n </Button>\n )\n })}\n </Flex>\n\n <States>\n <Toasts limit={7} />\n </States>\n </>\n )\n}\n\nDemo.decorators = [\n (Story) => (\n <ToastsProvider>\n <Story />\n </ToastsProvider>\n ),\n]\n"],"file":"Toasts.story.js"}
1
+ {"version":3,"sources":["../../../src/elements/Toasts/Toasts.story.tsx"],"names":["title","Demo","sendToast","retractToast","activeToasts","setActiveToasts","Object","keys","TOAST_VARIANTS","map","variant","captialized","charAt","toUpperCase","slice","message","description","onClose","closedID","filter","id","ttl","Infinity","length","decorators","Story"],"mappings":"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","sourcesContent":["import React, { useState } from \"react\"\nimport { States } from \"storybook-states\"\nimport { Flex } from \"../Flex\"\nimport { Button } from \"../Button\"\nimport { Text } from \"../Text\"\nimport { ToastVariant, TOAST_VARIANTS } from \"./Toast\"\nimport { Toasts } from \"./Toasts\"\nimport { ToastsProvider, useToasts } from \"./useToasts\"\nimport { Clickable, Separator } from \"..\"\n\nexport default {\n title: \"Components/Toasts\",\n}\n\nexport const Demo = () => {\n const { sendToast, retractToast } = useToasts()\n\n const [activeToasts, setActiveToasts] = useState<string[]>([])\n\n return (\n <>\n <Flex mb={1}>\n {(Object.keys(TOAST_VARIANTS) as ToastVariant[]).map((variant) => {\n const captialized = variant.charAt(0).toUpperCase() + variant.slice(1)\n\n return (\n <Button\n key={variant}\n variant=\"secondaryOutline\"\n size=\"small\"\n mr={1}\n onClick={() => {\n const { id } = sendToast({\n variant,\n message: `${captialized} Title`,\n description: \"This is example text.\",\n onClose: (closedID) => {\n setActiveToasts((activeToasts) => {\n return activeToasts.filter((id) => id !== closedID)\n })\n },\n })\n\n setActiveToasts((activeToasts) => [...activeToasts, id])\n }}\n >\n {captialized}\n </Button>\n )\n })}\n\n <Button\n size=\"small\"\n variant=\"secondaryGray\"\n onClick={() => {\n const { id } = sendToast({\n variant: \"message\",\n message: \"Until manually dismissed\",\n description:\n \"This toast will hang around until it's manually dismissed.\",\n ttl: Infinity,\n onClose: (closedID) => {\n setActiveToasts((activeToasts) => {\n return activeToasts.filter((id) => id !== closedID)\n })\n },\n })\n\n setActiveToasts((activeToasts) => [...activeToasts, id])\n }}\n >\n Until manually dismissed\n </Button>\n </Flex>\n\n <States>\n <Toasts limit={7} />\n </States>\n\n {activeToasts.length > 0 && (\n <>\n <Separator my={1} />\n\n <Text variant=\"xs\">\n <u>Active toasts:</u>\n\n {activeToasts.map((id) => {\n return (\n <Clickable\n key={id}\n display=\"block\"\n onClick={() => retractToast(id)}\n >\n Remove {id}\n </Clickable>\n )\n })}\n </Text>\n </>\n )}\n </>\n )\n}\n\nDemo.decorators = [\n (Story) => (\n <ToastsProvider>\n <Story />\n </ToastsProvider>\n ),\n]\n"],"file":"Toasts.story.js"}
@@ -3,21 +3,30 @@ import { ToastProps } from "./Toast";
3
3
  interface Toast extends ToastProps {
4
4
  id: string;
5
5
  ttl: number;
6
- close(): void;
6
+ onClose(id: string): void;
7
7
  }
8
- declare type Payload = Omit<Toast, "id" | "ttl" | "close"> & {
8
+ declare type Payload = Omit<Toast, "id" | "ttl" | "onClose"> & {
9
9
  ttl?: number;
10
+ onClose?(id: string): void;
10
11
  };
11
12
  declare type State = {
12
13
  toasts: Toast[];
13
14
  };
14
15
  export declare const ToastsContext: React.Context<{
15
16
  state: State;
16
- sendToast(toast: Payload): void;
17
+ sendToast(toast: Payload): {
18
+ id: string;
19
+ handleClose: () => void;
20
+ };
21
+ retractToast(id: string): void;
17
22
  }>;
18
23
  export declare const ToastsProvider: React.FC;
19
24
  export declare const useToasts: () => {
20
25
  toasts: Toast[];
21
- sendToast: (toast: Payload) => void;
26
+ sendToast: (toast: Payload) => {
27
+ id: string;
28
+ handleClose: () => void;
29
+ };
30
+ retractToast: (id: string) => void;
22
31
  };
23
32
  export {};
@@ -64,7 +64,14 @@ var ToastsContext = /*#__PURE__*/(0, _react.createContext)({
64
64
  state: {
65
65
  toasts: []
66
66
  },
67
- sendToast: function sendToast() {// noop
67
+ sendToast: function sendToast() {
68
+ return {
69
+ id: "",
70
+ handleClose: function handleClose() {// NOOP
71
+ }
72
+ };
73
+ },
74
+ retractToast: function retractToast() {// NOOP
68
75
  }
69
76
  });
70
77
  exports.ToastsContext = ToastsContext;
@@ -79,54 +86,64 @@ var ToastsProvider = function ToastsProvider(_ref2) {
79
86
  state = _useReducer2[0],
80
87
  dispatch = _useReducer2[1];
81
88
 
82
- var timeouts = (0, _react.useRef)(new Map());
89
+ var activeToasts = (0, _react.useRef)(new Map());
90
+ var retractToast = (0, _react.useCallback)(function (id) {
91
+ var _toast$onClose;
92
+
93
+ var toast = activeToasts.current.get(id);
94
+ if (!toast) return;
95
+ clearTimeout(toast.timeout);
96
+ activeToasts.current.delete(id);
97
+ dispatch({
98
+ type: "RETRACT",
99
+ payload: {
100
+ id: id
101
+ }
102
+ });
103
+ (_toast$onClose = toast.onClose) === null || _toast$onClose === void 0 ? void 0 : _toast$onClose.call(toast, id);
104
+ }, []);
83
105
  var sendToast = (0, _react.useCallback)(function (_ref3) {
84
106
  var _ref3$ttl = _ref3.ttl,
85
107
  ttl = _ref3$ttl === void 0 ? 6000 : _ref3$ttl,
86
- rest = _objectWithoutProperties(_ref3, ["ttl"]);
108
+ onClose = _ref3.onClose,
109
+ rest = _objectWithoutProperties(_ref3, ["ttl", "onClose"]);
87
110
 
88
111
  var id = generateId();
89
112
 
90
- var close = function close() {
91
- clearTimeout(timeouts.current.get(id));
92
- timeouts.current.delete(id);
93
- dispatch({
94
- type: "RETRACT",
95
- payload: {
96
- id: id
97
- }
98
- });
113
+ var handleClose = function handleClose() {
114
+ retractToast(id);
99
115
  };
100
116
 
101
117
  dispatch({
102
118
  type: "SEND",
103
- payload: _objectSpread(_objectSpread({
104
- id: id
105
- }, rest), {}, {
119
+ payload: _objectSpread(_objectSpread({}, rest), {}, {
120
+ id: id,
106
121
  ttl: ttl,
107
- close: close
122
+ onClose: handleClose
108
123
  })
109
124
  });
110
- timeouts.current.set(id, window.setTimeout(function () {
111
- timeouts.current.delete(id);
112
- dispatch({
113
- type: "RETRACT",
114
- payload: {
115
- id: id
116
- }
117
- });
118
- }, ttl));
119
- }, []);
125
+ activeToasts.current.set(id, {
126
+ timeout: ttl !== Infinity ? window.setTimeout(handleClose, ttl) : -1,
127
+ onClose: onClose
128
+ });
129
+ return {
130
+ id: id,
131
+ handleClose: handleClose
132
+ };
133
+ }, [retractToast]);
120
134
  (0, _react.useEffect)(function () {
121
- var handles = timeouts.current;
135
+ var toasts = activeToasts.current;
122
136
  return function () {
123
- handles.forEach(clearTimeout);
137
+ toasts.forEach(function (toast) {
138
+ return clearTimeout(toast.timeout);
139
+ });
124
140
  };
125
141
  }, []);
126
142
  return /*#__PURE__*/_react.default.createElement(ToastsContext.Provider, {
127
143
  value: {
128
144
  state: state,
129
- sendToast: sendToast
145
+ sendToast: sendToast,
146
+ retractToast: retractToast
130
147
  }
131
148
  }, children);
132
149
  };
@@ -137,11 +154,13 @@ ToastsProvider.displayName = "ToastsProvider";
137
154
  var useToasts = function useToasts() {
138
155
  var _useContext = (0, _react.useContext)(ToastsContext),
139
156
  toasts = _useContext.state.toasts,
140
- sendToast = _useContext.sendToast;
157
+ sendToast = _useContext.sendToast,
158
+ retractToast = _useContext.retractToast;
141
159
 
142
160
  return {
143
161
  toasts: toasts,
144
- sendToast: sendToast
162
+ sendToast: sendToast,
163
+ retractToast: retractToast
145
164
  };
146
165
  };
147
166
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/Toasts/useToasts.tsx"],"names":["reducer","state","action","type","toasts","payload","filter","id","ToastsContext","sendToast","ToastsProvider","children","dispatch","timeouts","Map","ttl","rest","generateId","close","clearTimeout","current","get","delete","set","window","setTimeout","handles","forEach","useToasts","Math","random","toString","slice"],"mappings":"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","sourcesContent":["import React, {\n createContext,\n useContext,\n useReducer,\n useCallback,\n useRef,\n useEffect,\n} from \"react\"\nimport { ToastProps } from \"./Toast\"\n\ninterface Toast extends ToastProps {\n id: string\n ttl: number\n close(): void\n}\n\ntype Payload = Omit<Toast, \"id\" | \"ttl\" | \"close\"> & { ttl?: number }\n\ntype State = { toasts: Toast[] }\n\ntype Action =\n | { type: \"SEND\"; payload: Toast }\n | { type: \"RETRACT\"; payload: { id: string } }\n\nconst reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case \"SEND\":\n return { ...state, toasts: [...state.toasts, action.payload] }\n\n case \"RETRACT\":\n return {\n ...state,\n toasts: state.toasts.filter(({ id }) => {\n return id !== action.payload.id\n }),\n }\n }\n}\n\nexport const ToastsContext = createContext<{\n state: State\n sendToast(toast: Payload): void\n}>({\n state: { toasts: [] },\n sendToast: () => {\n // noop\n },\n})\n\nexport const ToastsProvider: React.FC = ({ children }) => {\n const [state, dispatch] = useReducer(reducer, { toasts: [] })\n\n const timeouts = useRef<Map<string, number>>(new Map())\n\n const sendToast = useCallback(({ ttl = 6000, ...rest }: Payload) => {\n const id = generateId()\n\n const close = () => {\n clearTimeout(timeouts.current.get(id))\n timeouts.current.delete(id)\n dispatch({ type: \"RETRACT\", payload: { id } })\n }\n\n dispatch({ type: \"SEND\", payload: { id, ...rest, ttl, close } })\n\n timeouts.current.set(\n id,\n window.setTimeout(() => {\n timeouts.current.delete(id)\n dispatch({ type: \"RETRACT\", payload: { id } })\n }, ttl)\n )\n }, [])\n\n useEffect(() => {\n const handles = timeouts.current\n\n return () => {\n handles.forEach(clearTimeout)\n }\n }, [])\n\n return (\n <ToastsContext.Provider value={{ state, sendToast }}>\n {children}\n </ToastsContext.Provider>\n )\n}\n\nexport const useToasts = () => {\n const {\n state: { toasts },\n sendToast,\n } = useContext(ToastsContext)\n\n return { toasts, sendToast }\n}\n\nconst generateId = () => Math.random().toString(26).slice(2)\n"],"file":"useToasts.js"}
1
+ {"version":3,"sources":["../../../src/elements/Toasts/useToasts.tsx"],"names":["reducer","state","action","type","toasts","payload","filter","id","ToastsContext","sendToast","handleClose","retractToast","ToastsProvider","children","dispatch","activeToasts","Map","toast","current","get","clearTimeout","timeout","delete","onClose","ttl","rest","generateId","set","Infinity","window","setTimeout","forEach","useToasts","Math","random","toString","slice"],"mappings":"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","sourcesContent":["import React, {\n createContext,\n useContext,\n useReducer,\n useCallback,\n useRef,\n useEffect,\n} from \"react\"\nimport { ToastProps } from \"./Toast\"\n\ninterface Toast extends ToastProps {\n id: string\n ttl: number\n onClose(id: string): void\n}\n\ntype Payload = Omit<Toast, \"id\" | \"ttl\" | \"onClose\"> & {\n ttl?: number\n onClose?(id: string): void\n}\n\ntype State = { toasts: Toast[] }\n\ntype Action =\n | { type: \"SEND\"; payload: Toast }\n | { type: \"RETRACT\"; payload: { id: string } }\n\nconst reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case \"SEND\":\n return { ...state, toasts: [...state.toasts, action.payload] }\n\n case \"RETRACT\":\n return {\n ...state,\n toasts: state.toasts.filter(({ id }) => {\n return id !== action.payload.id\n }),\n }\n }\n}\n\nexport const ToastsContext = createContext<{\n state: State\n sendToast(toast: Payload): { id: string; handleClose: () => void }\n retractToast(id: string): void\n}>({\n state: { toasts: [] },\n sendToast: () => {\n return {\n id: \"\",\n handleClose: () => {\n // NOOP\n },\n }\n },\n retractToast: () => {\n // NOOP\n },\n})\n\nexport const ToastsProvider: React.FC = ({ children }) => {\n const [state, dispatch] = useReducer(reducer, { toasts: [] })\n\n const activeToasts = useRef<\n Map<\n string,\n {\n timeout: number\n onClose?: (id: string) => void\n }\n >\n >(new Map())\n\n const retractToast = useCallback((id: string) => {\n const toast = activeToasts.current.get(id)\n\n if (!toast) return\n\n clearTimeout(toast.timeout)\n\n activeToasts.current.delete(id)\n\n dispatch({ type: \"RETRACT\", payload: { id } })\n\n toast.onClose?.(id)\n }, [])\n\n const sendToast = useCallback(\n ({ ttl = 6000, onClose, ...rest }: Payload) => {\n const id = generateId()\n\n const handleClose = () => {\n retractToast(id)\n }\n\n dispatch({\n type: \"SEND\",\n payload: { ...rest, id, ttl, onClose: handleClose },\n })\n\n activeToasts.current.set(id, {\n timeout: ttl !== Infinity ? window.setTimeout(handleClose, ttl) : -1,\n onClose,\n })\n\n return { id, handleClose }\n },\n [retractToast]\n )\n\n useEffect(() => {\n const toasts = activeToasts.current\n\n return () => {\n toasts.forEach((toast) => clearTimeout(toast.timeout))\n }\n }, [])\n\n return (\n <ToastsContext.Provider value={{ state, sendToast, retractToast }}>\n {children}\n </ToastsContext.Provider>\n )\n}\n\nexport const useToasts = () => {\n const {\n state: { toasts },\n sendToast,\n retractToast,\n } = useContext(ToastsContext)\n\n return { toasts, sendToast, retractToast }\n}\n\nconst generateId = () => Math.random().toString(26).slice(2)\n"],"file":"useToasts.js"}
@@ -4,6 +4,15 @@ declare const _default: {
4
4
  };
5
5
  export default _default;
6
6
  export declare const Default: () => JSX.Element;
7
- export declare const _Clickable: () => JSX.Element;
7
+ export declare const _Clickable: {
8
+ (): JSX.Element;
9
+ story: {
10
+ parameters: {
11
+ chromatic: {
12
+ disable: boolean;
13
+ };
14
+ };
15
+ };
16
+ };
8
17
  export declare const Placement: () => JSX.Element;
9
18
  export declare const IconExample: () => JSX.Element;
@@ -76,6 +76,13 @@ var _Clickable = function _Clickable() {
76
76
 
77
77
  exports._Clickable = _Clickable;
78
78
  _Clickable.displayName = "_Clickable";
79
+ _Clickable.story = {
80
+ parameters: {
81
+ chromatic: {
82
+ disable: true
83
+ }
84
+ }
85
+ };
79
86
 
80
87
  var Placement = function Placement() {
81
88
  return /*#__PURE__*/_react.default.createElement(_storybookStates.States, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/Tooltip/Tooltip.story.tsx"],"names":["CONTENT","title","Default","placement","width","visible","_Clickable","Placement","Object","keys","POSITION","map","props","JSON","stringify","IconExample","lineHeight"],"mappings":"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","sourcesContent":["import { action } from \"@storybook/addon-actions\"\nimport React from \"react\"\nimport { States } from \"storybook-states\"\nimport { HelpIcon } from \"../../svgs\"\nimport { Position, POSITION } from \"../../utils/usePosition\"\nimport { Box } from \"../Box\"\nimport { Clickable } from \"../Clickable\"\nimport { Text } from \"../Text\"\nimport { Tooltip, TooltipProps } from \"./Tooltip\"\n\nconst CONTENT =\n \"Lorem ipsum dolor sit amet consectetur adipisicing elit. Omnis odio laudantium sint possimus debitis commodi iusto odit, sunt facilis consequuntur, hic rem doloremque illum provident temporibus atque. Ducimus, commodi necessitatibus?\"\n\nexport default {\n title: \"Components/Tooltip\",\n}\n\nexport const Default = () => {\n return (\n <States<Partial<TooltipProps>>\n states={[\n { placement: \"top-start\" },\n { placement: \"bottom\", width: 600 },\n { placement: \"bottom\", visible: true },\n ]}\n >\n <Tooltip content={CONTENT}>\n <Text\n variant=\"xs\"\n textAlign=\"center\"\n p={1}\n bg=\"black100\"\n color=\"white100\"\n >\n This text has a tooltip\n </Text>\n </Tooltip>\n </States>\n )\n}\n\nexport const _Clickable = () => {\n return (\n <States<Partial<TooltipProps>> states={[{}]}>\n <Tooltip content={CONTENT}>\n <Clickable onClick={action(\"onClick\")}>\n <Text\n variant=\"xs\"\n textAlign=\"center\"\n p={1}\n bg=\"black100\"\n color=\"white100\"\n >\n This text has a tooltip and is clickable\n </Text>\n </Clickable>\n </Tooltip>\n </States>\n )\n}\n\nexport const Placement = () => {\n return (\n <States<Partial<TooltipProps>>\n states={Object.keys(POSITION).map((placement) => ({\n placement: placement as Position,\n }))}\n >\n {(props) => {\n return (\n <Tooltip content={JSON.stringify(props)} visible {...props}>\n <Text\n variant=\"xs\"\n textAlign=\"center\"\n p={1}\n maxWidth=\"50%\"\n mx=\"auto\"\n bg=\"black100\"\n color=\"white100\"\n >\n {JSON.stringify(props)}\n </Text>\n </Tooltip>\n )\n }}\n </States>\n )\n}\n\nexport const IconExample = () => {\n return (\n <Text variant=\"xs\" display=\"flex\" alignItems=\"center\" lineHeight={1}>\n Hover (or focus) the icon to display the tooltip.{\" \"}\n <Tooltip content={CONTENT} placement=\"bottom\">\n {/* Icons don't forwardRefs so we have to wrap in a span */}\n <Box as=\"span\" style={{ lineHeight: 0 }}>\n <HelpIcon ml={0.5} />\n </Box>\n </Tooltip>\n </Text>\n )\n}\n"],"file":"Tooltip.story.js"}
1
+ {"version":3,"sources":["../../../src/elements/Tooltip/Tooltip.story.tsx"],"names":["CONTENT","title","Default","placement","width","visible","_Clickable","story","parameters","chromatic","disable","Placement","Object","keys","POSITION","map","props","JSON","stringify","IconExample","lineHeight"],"mappings":"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","sourcesContent":["import { action } from \"@storybook/addon-actions\"\nimport React from \"react\"\nimport { States } from \"storybook-states\"\nimport { HelpIcon } from \"../../svgs\"\nimport { Position, POSITION } from \"../../utils/usePosition\"\nimport { Box } from \"../Box\"\nimport { Clickable } from \"../Clickable\"\nimport { Text } from \"../Text\"\nimport { Tooltip, TooltipProps } from \"./Tooltip\"\n\nconst CONTENT =\n \"Lorem ipsum dolor sit amet consectetur adipisicing elit. Omnis odio laudantium sint possimus debitis commodi iusto odit, sunt facilis consequuntur, hic rem doloremque illum provident temporibus atque. Ducimus, commodi necessitatibus?\"\n\nexport default {\n title: \"Components/Tooltip\",\n}\n\nexport const Default = () => {\n return (\n <States<Partial<TooltipProps>>\n states={[\n { placement: \"top-start\" },\n { placement: \"bottom\", width: 600 },\n { placement: \"bottom\", visible: true },\n ]}\n >\n <Tooltip content={CONTENT}>\n <Text\n variant=\"xs\"\n textAlign=\"center\"\n p={1}\n bg=\"black100\"\n color=\"white100\"\n >\n This text has a tooltip\n </Text>\n </Tooltip>\n </States>\n )\n}\n\nexport const _Clickable = () => {\n return (\n <States<Partial<TooltipProps>> states={[{}]}>\n <Tooltip content={CONTENT}>\n <Clickable onClick={action(\"onClick\")}>\n <Text\n variant=\"xs\"\n textAlign=\"center\"\n p={1}\n bg=\"black100\"\n color=\"white100\"\n >\n This text has a tooltip and is clickable\n </Text>\n </Clickable>\n </Tooltip>\n </States>\n )\n}\n\n_Clickable.story = {\n parameters: { chromatic: { disable: true } },\n}\n\nexport const Placement = () => {\n return (\n <States<Partial<TooltipProps>>\n states={Object.keys(POSITION).map((placement) => ({\n placement: placement as Position,\n }))}\n >\n {(props) => {\n return (\n <Tooltip content={JSON.stringify(props)} visible {...props}>\n <Text\n variant=\"xs\"\n textAlign=\"center\"\n p={1}\n maxWidth=\"50%\"\n mx=\"auto\"\n bg=\"black100\"\n color=\"white100\"\n >\n {JSON.stringify(props)}\n </Text>\n </Tooltip>\n )\n }}\n </States>\n )\n}\n\nexport const IconExample = () => {\n return (\n <Text variant=\"xs\" display=\"flex\" alignItems=\"center\" lineHeight={1}>\n Hover (or focus) the icon to display the tooltip.{\" \"}\n <Tooltip content={CONTENT} placement=\"bottom\">\n {/* Icons don't forwardRefs so we have to wrap in a span */}\n <Box as=\"span\" style={{ lineHeight: 0 }}>\n <HelpIcon ml={0.5} />\n </Box>\n </Tooltip>\n </Text>\n )\n}\n"],"file":"Tooltip.story.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@artsy/palette",
3
- "version": "18.4.2",
3
+ "version": "18.5.0",
4
4
  "description": "Design system library for react components",
5
5
  "main": "dist/index.js",
6
6
  "publishConfig": {
@@ -175,5 +175,5 @@
175
175
  "<rootDir>/www/"
176
176
  ]
177
177
  },
178
- "gitHead": "bf61c1fcf1b7f8a7f8130bed737c325caf36adec"
178
+ "gitHead": "bfee1e6d498a377a8fc4d5f0ffc6d3a4dac5ae7a"
179
179
  }