@blerp/design 1.3.16 → 1.4.1

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.
Files changed (128) hide show
  1. package/dist/cjs/Blerp/BlerpImageRow.js +176 -57
  2. package/dist/cjs/Blerp/BlerpSavePopup.js +44 -40
  3. package/dist/cjs/Blerp/BlerpTitleRow.js +36 -19
  4. package/dist/cjs/Blerp/BlerpTopRow.js +110 -44
  5. package/dist/cjs/Blerp.js +9 -16
  6. package/dist/cjs/BlerpAudioContextProvider.js +2 -2
  7. package/dist/cjs/BlerpListView.js +318 -168
  8. package/dist/cjs/BlerpListViewPremium.js +155 -130
  9. package/dist/cjs/BlerpListViewSkeleton.js +60 -13
  10. package/dist/cjs/BlerpSkeleton.js +32 -9
  11. package/dist/cjs/CollectionCard.js +139 -60
  12. package/dist/cjs/CollectionListViewPremium.js +368 -297
  13. package/dist/cjs/CollectionSkeleton.js +74 -13
  14. package/dist/cjs/Dropdown.js +272 -172
  15. package/dist/cjs/EllipsisLoader.js +66 -21
  16. package/dist/cjs/GroupCard.js +64 -57
  17. package/dist/cjs/Icons/Icons.js +288 -426
  18. package/dist/cjs/ImageEditor.js +247 -0
  19. package/dist/cjs/ImageUpload.js +226 -0
  20. package/dist/cjs/NewBlerp.js +354 -160
  21. package/dist/cjs/NewBlerpTest.js +10 -792
  22. package/dist/cjs/NewCollectionModal.js +294 -310
  23. package/dist/cjs/PremiumCollectionCard.js +191 -454
  24. package/dist/cjs/PurchaseModals/CheckoutModal.js +1 -1
  25. package/dist/cjs/PurchaseModals/PremiumBlerpCheckoutModal.js +1 -1
  26. package/dist/cjs/PurchaseModals/PremiumCollectionCheckoutModal.js +1 -1
  27. package/dist/cjs/PurchaseModals/PremiumSubscriptionCheckoutModal.js +1 -1
  28. package/dist/cjs/ReactionButtons.js +26 -13
  29. package/dist/cjs/SnackbarContextProvider.js +200 -116
  30. package/dist/cjs/Theme.js +217 -90
  31. package/dist/cjs/Toggle.js +86 -32
  32. package/dist/cjs/UserCard.js +13 -32
  33. package/dist/cjs/UserPage/LibraryControls.js +180 -93
  34. package/dist/cjs/UserPage/UserLibraryHeader.js +23 -14
  35. package/dist/cjs/UserPage/UserProfileHeader.js +120 -105
  36. package/dist/cjs/UsernameWithPopout.js +12 -8
  37. package/dist/cjs/colors.js +15 -8
  38. package/dist/cjs/helpers.js +131 -0
  39. package/dist/cjs/index.js +98 -52
  40. package/dist/cjs/neo-components/Autocomplete.js +280 -0
  41. package/dist/cjs/neo-components/BottomNavigation.js +120 -0
  42. package/dist/cjs/neo-components/Box.js +48 -0
  43. package/dist/cjs/neo-components/Button.js +206 -0
  44. package/dist/cjs/neo-components/CircularProgress.js +92 -0
  45. package/dist/cjs/neo-components/Container.js +75 -0
  46. package/dist/cjs/neo-components/Dialog.js +441 -0
  47. package/dist/cjs/neo-components/Fab.js +237 -0
  48. package/dist/cjs/neo-components/FormControls.js +1057 -0
  49. package/dist/cjs/neo-components/Grid.js +256 -0
  50. package/dist/cjs/neo-components/IconButton.js +111 -0
  51. package/dist/cjs/neo-components/Input.js +493 -0
  52. package/dist/cjs/neo-components/Layout.js +1213 -0
  53. package/dist/cjs/neo-components/Misc.js +858 -0
  54. package/dist/cjs/neo-components/Navigation.js +1578 -0
  55. package/dist/cjs/neo-components/Paper.js +256 -0
  56. package/dist/cjs/neo-components/Stack.js +194 -0
  57. package/dist/cjs/neo-components/Stepper.js +291 -0
  58. package/dist/cjs/neo-components/Text.js +290 -0
  59. package/dist/cjs/neo-components/ThemeProvider.js +731 -0
  60. package/dist/cjs/neo-components/ToggleButton.js +223 -0
  61. package/dist/cjs/neo-components/createTheme.js +306 -0
  62. package/dist/cjs/neo-components/withSx.js +164 -0
  63. package/dist/cjs/neo-utils/sxToStyle.js +508 -0
  64. package/dist/esm/Blerp/BlerpImageRow.js +166 -46
  65. package/dist/esm/Blerp/BlerpSavePopup.js +35 -27
  66. package/dist/esm/Blerp/BlerpTitleRow.js +32 -13
  67. package/dist/esm/Blerp/BlerpTopRow.js +85 -16
  68. package/dist/esm/Blerp.js +4 -12
  69. package/dist/esm/BlerpAudioContextProvider.js +1 -2
  70. package/dist/esm/BlerpListView.js +313 -160
  71. package/dist/esm/BlerpListViewPremium.js +135 -109
  72. package/dist/esm/BlerpListViewSkeleton.js +60 -11
  73. package/dist/esm/BlerpSkeleton.js +32 -7
  74. package/dist/esm/CollectionCard.js +118 -38
  75. package/dist/esm/CollectionListViewPremium.js +367 -294
  76. package/dist/esm/CollectionSkeleton.js +73 -11
  77. package/dist/esm/Dropdown.js +260 -161
  78. package/dist/esm/EllipsisLoader.js +63 -18
  79. package/dist/esm/GroupCard.js +54 -46
  80. package/dist/esm/Icons/Icons.js +226 -367
  81. package/dist/esm/ImageEditor.js +240 -0
  82. package/dist/esm/ImageUpload.js +217 -0
  83. package/dist/esm/NewBlerp.js +282 -79
  84. package/dist/esm/NewBlerpTest.js +11 -781
  85. package/dist/esm/NewCollectionModal.js +289 -304
  86. package/dist/esm/PremiumCollectionCard.js +192 -451
  87. package/dist/esm/PurchaseModals/CheckoutModal.js +1 -1
  88. package/dist/esm/PurchaseModals/PremiumBlerpCheckoutModal.js +1 -1
  89. package/dist/esm/PurchaseModals/PremiumCollectionCheckoutModal.js +1 -1
  90. package/dist/esm/PurchaseModals/PremiumSubscriptionCheckoutModal.js +1 -1
  91. package/dist/esm/ReactionButtons.js +23 -8
  92. package/dist/esm/SnackbarContextProvider.js +196 -110
  93. package/dist/esm/Theme.js +187 -66
  94. package/dist/esm/Toggle.js +84 -29
  95. package/dist/esm/UserCard.js +1 -20
  96. package/dist/esm/UserPage/LibraryControls.js +159 -65
  97. package/dist/esm/UserPage/UserLibraryHeader.js +18 -10
  98. package/dist/esm/UserPage/UserProfileHeader.js +100 -79
  99. package/dist/esm/UsernameWithPopout.js +7 -4
  100. package/dist/esm/colors.js +11 -9
  101. package/dist/esm/helpers.js +122 -0
  102. package/dist/esm/icons.js +1 -1
  103. package/dist/esm/index.js +39 -3
  104. package/dist/esm/neo-components/Autocomplete.js +269 -0
  105. package/dist/esm/neo-components/BottomNavigation.js +109 -0
  106. package/dist/esm/neo-components/Box.js +36 -0
  107. package/dist/esm/neo-components/Button.js +194 -0
  108. package/dist/esm/neo-components/CircularProgress.js +81 -0
  109. package/dist/esm/neo-components/Container.js +63 -0
  110. package/dist/esm/neo-components/Dialog.js +423 -0
  111. package/dist/esm/neo-components/Fab.js +225 -0
  112. package/dist/esm/neo-components/FormControls.js +1041 -0
  113. package/dist/esm/neo-components/Grid.js +244 -0
  114. package/dist/esm/neo-components/IconButton.js +99 -0
  115. package/dist/esm/neo-components/Input.js +478 -0
  116. package/dist/esm/neo-components/Layout.js +1179 -0
  117. package/dist/esm/neo-components/Misc.js +840 -0
  118. package/dist/esm/neo-components/Navigation.js +1556 -0
  119. package/dist/esm/neo-components/Paper.js +243 -0
  120. package/dist/esm/neo-components/Stack.js +182 -0
  121. package/dist/esm/neo-components/Stepper.js +278 -0
  122. package/dist/esm/neo-components/Text.js +277 -0
  123. package/dist/esm/neo-components/ThemeProvider.js +718 -0
  124. package/dist/esm/neo-components/ToggleButton.js +214 -0
  125. package/dist/esm/neo-components/createTheme.js +297 -0
  126. package/dist/esm/neo-components/withSx.js +153 -0
  127. package/dist/esm/neo-utils/sxToStyle.js +502 -0
  128. package/package.json +19 -15
@@ -8,7 +8,7 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
8
8
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
9
9
 
10
10
  const NeedToReplace = props => {
11
- return /*#__PURE__*/React__default['default'].createElement(index.Stack, {
11
+ return /*#__PURE__*/React__default["default"].createElement(index.Stack, {
12
12
  sx: {
13
13
  backgroundColor: "white.main",
14
14
  width: "900px",
@@ -8,7 +8,7 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
8
8
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
9
9
 
10
10
  const NeedToReplace = props => {
11
- return /*#__PURE__*/React__default['default'].createElement(index.Stack, {
11
+ return /*#__PURE__*/React__default["default"].createElement(index.Stack, {
12
12
  sx: {
13
13
  backgroundColor: "white.main",
14
14
  width: "900px",
@@ -8,7 +8,7 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
8
8
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
9
9
 
10
10
  const NeedToReplace = props => {
11
- return /*#__PURE__*/React__default['default'].createElement(index.Stack, {
11
+ return /*#__PURE__*/React__default["default"].createElement(index.Stack, {
12
12
  sx: {
13
13
  backgroundColor: "white.main",
14
14
  width: "900px",
@@ -8,7 +8,7 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
8
8
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
9
9
 
10
10
  const NeedToReplace = props => {
11
- return /*#__PURE__*/React__default['default'].createElement(index.Stack, {
11
+ return /*#__PURE__*/React__default["default"].createElement(index.Stack, {
12
12
  sx: {
13
13
  backgroundColor: "white.main",
14
14
  width: "900px",
@@ -1,18 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var _taggedTemplateLiteral = require('@babel/runtime/helpers/taggedTemplateLiteral');
4
3
  var React = require('react');
5
- var styled = require('styled-components');
6
4
  var index = require('./index.js');
5
+ var Theme = require('./Theme.js');
7
6
 
8
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
9
8
 
10
- var _taggedTemplateLiteral__default = /*#__PURE__*/_interopDefaultLegacy(_taggedTemplateLiteral);
11
9
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
12
- var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
13
10
 
14
- var _templateObject;
15
- const ReactionButton = styled__default['default'].div(_templateObject || (_templateObject = _taggedTemplateLiteral__default['default'](["\n border-radius: 50%;\n width: 30px;\n height: 30px;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 8px;\n transition: 0.2s;\n margin-right: 0;\n cursor: pointer;\n background-color: ", ";\n\n &:hover {\n background-color: ", ";\n }\n"])), props => props.active ? props.theme.colors.ibisRed : props.theme.colors.grey5, props => props.theme.colors.ibisRed);
16
11
  const reactionIconUrls = {
17
12
  FUNNY: "https://cdn.blerp.com/blerp_products/Icons/Funny%403x.svg",
18
13
  HAPPY: "https://cdn.blerp.com/blerp_products/Icons/Happy%403x.svg",
@@ -29,31 +24,49 @@ const ReactionButtons = _ref => {
29
24
  bite,
30
25
  handleClick
31
26
  } = _ref;
32
- return /*#__PURE__*/React__default['default'].createElement(index.Grid, {
27
+ const theme = Theme.useBlerpTheme();
28
+ const [hoveredReaction, setHoveredReaction] = React__default["default"].useState(null);
29
+ return /*#__PURE__*/React__default["default"].createElement(index.Grid, {
33
30
  display: "grid",
34
31
  gridTemplateColumns: "repeat(4, 1fr)",
35
32
  alignItems: "center",
36
33
  marginTop: "16px",
37
34
  gap: 1
38
35
  }, Object.keys(reactionIconUrls).map(reaction => {
39
- var _bite$userReactions, _bite$userReactions$r;
36
+ var _bite$userReactions, _bite$userReactions$r, _theme$colors, _theme$colors2;
40
37
 
41
- return /*#__PURE__*/React__default['default'].createElement(index.Grid, {
38
+ const isActive = bite === null || bite === void 0 ? void 0 : (_bite$userReactions = bite.userReactions) === null || _bite$userReactions === void 0 ? void 0 : (_bite$userReactions$r = _bite$userReactions.reactions) === null || _bite$userReactions$r === void 0 ? void 0 : _bite$userReactions$r.includes(reaction);
39
+ const isHovered = hoveredReaction === reaction;
40
+ return /*#__PURE__*/React__default["default"].createElement(index.Grid, {
42
41
  key: "".concat(reaction, "-button"),
43
42
  gridColumn: "span 1",
44
43
  display: "flex",
45
44
  justifyContent: "center"
46
- }, /*#__PURE__*/React__default['default'].createElement(index.Tooltip, {
45
+ }, /*#__PURE__*/React__default["default"].createElement(index.Tooltip, {
47
46
  title: reaction
48
- }, /*#__PURE__*/React__default['default'].createElement(ReactionButton, {
49
- active: bite === null || bite === void 0 ? void 0 : (_bite$userReactions = bite.userReactions) === null || _bite$userReactions === void 0 ? void 0 : (_bite$userReactions$r = _bite$userReactions.reactions) === null || _bite$userReactions$r === void 0 ? void 0 : _bite$userReactions$r.includes(reaction),
47
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
48
+ style: {
49
+ borderRadius: "50%",
50
+ width: "30px",
51
+ height: "30px",
52
+ display: "flex",
53
+ justifyContent: "center",
54
+ alignItems: "center",
55
+ padding: "8px",
56
+ transition: "0.2s",
57
+ marginRight: 0,
58
+ cursor: "pointer",
59
+ backgroundColor: isActive || isHovered ? (theme === null || theme === void 0 ? void 0 : (_theme$colors = theme.colors) === null || _theme$colors === void 0 ? void 0 : _theme$colors.ibisRed) || "#e74c3c" : (theme === null || theme === void 0 ? void 0 : (_theme$colors2 = theme.colors) === null || _theme$colors2 === void 0 ? void 0 : _theme$colors2.grey5) || "#bbb"
60
+ },
61
+ onMouseEnter: () => setHoveredReaction(reaction),
62
+ onMouseLeave: () => setHoveredReaction(null),
50
63
  onClick: () => {
51
64
  var _bite$userReactions2, _bite$userReactions2$;
52
65
 
53
66
  let isRemove = bite === null || bite === void 0 ? void 0 : (_bite$userReactions2 = bite.userReactions) === null || _bite$userReactions2 === void 0 ? void 0 : (_bite$userReactions2$ = _bite$userReactions2.reactions) === null || _bite$userReactions2$ === void 0 ? void 0 : _bite$userReactions2$.includes(reaction);
54
67
  handleClick(reaction, isRemove);
55
68
  }
56
- }, /*#__PURE__*/React__default['default'].createElement("img", {
69
+ }, /*#__PURE__*/React__default["default"].createElement("img", {
57
70
  alt: "reaction-".concat(reaction),
58
71
  width: "100%",
59
72
  height: "100%",
@@ -2,38 +2,18 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var _extends = require('@babel/runtime/helpers/extends');
5
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
6
6
  var React = require('react');
7
- var Slide = require('@mui/material/Slide');
8
- var Fade = require('@mui/material/Fade');
9
- var index = require('./index.js');
10
7
 
11
8
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
12
9
 
13
- var _extends__default = /*#__PURE__*/_interopDefaultLegacy(_extends);
10
+ var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
14
11
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
15
- var Slide__default = /*#__PURE__*/_interopDefaultLegacy(Slide);
16
- var Fade__default = /*#__PURE__*/_interopDefaultLegacy(Fade);
17
-
18
- /*
19
- snackbarContext.triggerSnackbar({
20
- message: `Added to ${collection.title}`,
21
- severity: "success",
22
- actionButton: (
23
- <Button
24
- color="inherit"
25
- variant="text"
26
- size="small"
27
- onClick={() => {
28
- globalContext.setActiveBoard(collection);
29
- }}>
30
- View
31
- </Button>
32
- ),
33
- });
34
- */
35
12
 
36
- const SnackbarContext = /*#__PURE__*/React__default['default'].createContext({
13
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
14
+
15
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
16
+ const SnackbarContext = /*#__PURE__*/React__default["default"].createContext({
37
17
  snackbarValues: {
38
18
  open: false,
39
19
  message: "Set a message",
@@ -44,31 +24,130 @@ const SnackbarContext = /*#__PURE__*/React__default['default'].createContext({
44
24
  slideDirection: "up",
45
25
  transitionType: "slide",
46
26
  severity: "success",
47
- actionButton: /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null),
48
- autoHideDuration: 5000,
49
- sx: null
27
+ actionButton: null,
28
+ autoHideDuration: 5000
50
29
  },
51
30
  triggerSnackbar: () => null
52
31
  });
32
+ const severityStyles = {
33
+ success: {
34
+ background: "#4caf50",
35
+ color: "#fff"
36
+ },
37
+ error: {
38
+ background: "#f44336",
39
+ color: "#fff"
40
+ },
41
+ warning: {
42
+ background: "#ff9800",
43
+ color: "#fff"
44
+ },
45
+ info: {
46
+ background: "#2196f3",
47
+ color: "#fff"
48
+ }
49
+ };
50
+ const severityIcons = {
51
+ success: /*#__PURE__*/React__default["default"].createElement("svg", {
52
+ width: "20",
53
+ height: "20",
54
+ viewBox: "0 0 24 24",
55
+ fill: "currentColor"
56
+ }, /*#__PURE__*/React__default["default"].createElement("path", {
57
+ d: "M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"
58
+ })),
59
+ error: /*#__PURE__*/React__default["default"].createElement("svg", {
60
+ width: "20",
61
+ height: "20",
62
+ viewBox: "0 0 24 24",
63
+ fill: "currentColor"
64
+ }, /*#__PURE__*/React__default["default"].createElement("path", {
65
+ d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"
66
+ })),
67
+ warning: /*#__PURE__*/React__default["default"].createElement("svg", {
68
+ width: "20",
69
+ height: "20",
70
+ viewBox: "0 0 24 24",
71
+ fill: "currentColor"
72
+ }, /*#__PURE__*/React__default["default"].createElement("path", {
73
+ d: "M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"
74
+ })),
75
+ info: /*#__PURE__*/React__default["default"].createElement("svg", {
76
+ width: "20",
77
+ height: "20",
78
+ viewBox: "0 0 24 24",
79
+ fill: "currentColor"
80
+ }, /*#__PURE__*/React__default["default"].createElement("path", {
81
+ d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"
82
+ }))
83
+ };
84
+
85
+ const getPositionStyles = position => {
86
+ const styles = {
87
+ position: "fixed",
88
+ zIndex: 9999,
89
+ display: "flex",
90
+ justifyContent: "center"
91
+ };
53
92
 
54
- const SnackbarProvider = props => {
93
+ if (position.vertical === "top") {
94
+ styles.top = "24px";
95
+ } else {
96
+ styles.bottom = "24px";
97
+ }
98
+
99
+ if (position.horizontal === "left") {
100
+ styles.left = "24px";
101
+ } else if (position.horizontal === "right") {
102
+ styles.right = "24px";
103
+ } else {
104
+ styles.left = "50%";
105
+ styles.transform = "translateX(-50%)";
106
+ }
107
+
108
+ return styles;
109
+ };
110
+
111
+ const getAnimationKeyframes = (direction, transitionType) => {
112
+ if (transitionType === "fade") {
113
+ return "\n @keyframes snackbarEnter {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n @keyframes snackbarExit {\n from { opacity: 1; }\n to { opacity: 0; }\n }\n ";
114
+ }
115
+
116
+ const translations = {
117
+ up: "translateY(100%)",
118
+ down: "translateY(-100%)",
119
+ left: "translateX(100%)",
120
+ right: "translateX(-100%)"
121
+ };
122
+ return "\n @keyframes snackbarEnter {\n from { \n transform: ".concat(translations[direction], ";\n opacity: 0;\n }\n to { \n transform: translateY(0) translateX(0);\n opacity: 1;\n }\n }\n @keyframes snackbarExit {\n from { \n transform: translateY(0) translateX(0);\n opacity: 1;\n }\n to { \n transform: ").concat(translations[direction], ";\n opacity: 0;\n }\n }\n ");
123
+ };
124
+
125
+ const SnackbarProvider = _ref => {
126
+ let {
127
+ children
128
+ } = _ref;
55
129
  const [open, setOpen] = React.useState(false);
130
+ const [exiting, setExiting] = React.useState(false);
56
131
  const [snackbarValues, setSnackbarValues] = React.useState({
57
132
  message: "Set a message",
58
133
  position: {
59
134
  vertical: "bottom",
60
135
  horizontal: "center"
61
136
  },
62
- color: "grey8",
63
137
  transitionType: "slide",
64
138
  slideDirection: "up",
65
139
  severity: "success",
66
- actionButton: /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null),
67
- autoHideDuration: 5000,
68
- sx: null
140
+ actionButton: null,
141
+ autoHideDuration: 5000
69
142
  });
70
-
71
- const triggerSnackbar = _ref => {
143
+ const handleClose = React.useCallback(() => {
144
+ setExiting(true);
145
+ setTimeout(() => {
146
+ setOpen(false);
147
+ setExiting(false);
148
+ }, 225);
149
+ }, []);
150
+ const triggerSnackbar = React.useCallback(_ref2 => {
72
151
  let {
73
152
  message = "Set a message",
74
153
  position = {
@@ -78,93 +157,98 @@ const SnackbarProvider = props => {
78
157
  slideDirection = "up",
79
158
  transitionType = "slide",
80
159
  severity = "success",
81
- color,
82
- actionButton = /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null),
83
- autoHideDuration = 5000,
84
- sx
85
- } = _ref;
86
-
87
- if (!color) {
88
- switch (severity) {
89
- case "success":
90
- color = "grey3"; // figure out how to fix seafoam text
91
-
92
- break;
93
-
94
- case "error":
95
- color = "ibisRed";
96
- break;
97
-
98
- default:
99
- color = "notBlack";
100
- break;
101
- }
102
- }
160
+ actionButton = null,
161
+ autoHideDuration = 5000
162
+ } = _ref2;
163
+
164
+ // Close any existing snackbar first
165
+ if (open) {
166
+ setExiting(true);
167
+ setTimeout(() => {
168
+ setExiting(false);
169
+ setOpen(true);
170
+ setSnackbarValues({
171
+ message,
172
+ position,
173
+ transitionType,
174
+ slideDirection,
175
+ severity,
176
+ actionButton,
177
+ autoHideDuration
178
+ });
179
+ }, 225);
180
+ } else {
181
+ setOpen(true);
182
+ setSnackbarValues({
183
+ message,
184
+ position,
185
+ transitionType,
186
+ slideDirection,
187
+ severity,
188
+ actionButton,
189
+ autoHideDuration
190
+ });
191
+ } // Auto-hide
103
192
 
104
- setOpen(true);
105
- setSnackbarValues({
106
- message,
107
- position,
108
- color,
109
- transitionType,
110
- slideDirection,
111
- severity,
112
- actionButton,
113
- autoHideDuration,
114
- sx
115
- });
116
- setTimeout(() => {
117
- setOpen(false);
118
- }, autoHideDuration);
119
- };
120
193
 
121
- return /*#__PURE__*/React__default['default'].createElement(SnackbarContext.Provider, {
194
+ setTimeout(handleClose, autoHideDuration);
195
+ }, [open, handleClose]);
196
+ const positionStyles = getPositionStyles(snackbarValues.position);
197
+ const keyframes = getAnimationKeyframes(snackbarValues.slideDirection, snackbarValues.transitionType);
198
+ return /*#__PURE__*/React__default["default"].createElement(SnackbarContext.Provider, {
122
199
  value: {
123
- snackbarValues: snackbarValues,
124
- setSnackbarValues: setSnackbarValues,
200
+ snackbarValues,
201
+ setSnackbarValues,
125
202
  triggerSnackbar: props => {
126
- // TODO: figure out why setTimeout is needed to show every time
127
- setTimeout(() => {
128
- triggerSnackbar(props);
129
- });
203
+ setTimeout(() => triggerSnackbar(props), 0);
130
204
  }
131
205
  }
132
- }, /*#__PURE__*/React__default['default'].createElement(index.Snackbar, {
133
- anchorOrigin: { ...snackbarValues.position
134
- },
135
- autoHideDuration: snackbarValues.autoHideDuration,
136
- open: open,
137
- sx: {
138
- minWidth: "30%",
139
- ...snackbarValues.sx
140
- },
141
- TransitionComponent: props => {
142
- if (snackbarValues.transitionType === "fade") {
143
- return /*#__PURE__*/React__default['default'].createElement(Fade__default['default'], _extends__default['default']({}, props, {
144
- direction: snackbarValues.slideDirection,
145
- unmountOnExit: true
146
- }));
147
- } else {
148
- return /*#__PURE__*/React__default['default'].createElement(Slide__default['default'], _extends__default['default']({}, props, {
149
- direction: snackbarValues.slideDirection,
150
- unmountOnExit: true
151
- }));
152
- }
153
- },
154
- onClose: () => setOpen(false),
155
- key: "snackbar-toast"
156
- }, /*#__PURE__*/React__default['default'].createElement(index.Alert, {
157
- severity: snackbarValues.severity,
158
- variant: "filled",
159
- color: snackbarValues.color,
160
- action: snackbarValues.actionButton,
161
- sx: {
162
- width: "100%",
163
- "& svg": {
164
- color: "inherit"
165
- }
206
+ }, open && /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("style", null, keyframes), /*#__PURE__*/React__default["default"].createElement("div", {
207
+ style: positionStyles
208
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
209
+ role: "alert",
210
+ style: _objectSpread({
211
+ display: "flex",
212
+ alignItems: "center",
213
+ gap: "12px",
214
+ padding: "12px 16px",
215
+ borderRadius: "8px",
216
+ boxShadow: "0 4px 12px rgba(0,0,0,0.15)",
217
+ minWidth: "280px",
218
+ maxWidth: "560px",
219
+ animation: "".concat(exiting ? "snackbarExit" : "snackbarEnter", " 225ms cubic-bezier(0.4, 0, 0.2, 1)")
220
+ }, severityStyles[snackbarValues.severity])
221
+ }, /*#__PURE__*/React__default["default"].createElement("span", {
222
+ style: {
223
+ display: "flex",
224
+ flexShrink: 0
166
225
  }
167
- }, snackbarValues.message)), props.children);
226
+ }, severityIcons[snackbarValues.severity]), /*#__PURE__*/React__default["default"].createElement("span", {
227
+ style: {
228
+ flex: 1,
229
+ fontSize: "14px",
230
+ fontWeight: 500
231
+ }
232
+ }, snackbarValues.message), snackbarValues.actionButton, /*#__PURE__*/React__default["default"].createElement("button", {
233
+ onClick: handleClose,
234
+ style: {
235
+ background: "transparent",
236
+ border: "none",
237
+ color: "inherit",
238
+ cursor: "pointer",
239
+ padding: "4px",
240
+ display: "flex",
241
+ opacity: 0.7
242
+ },
243
+ "aria-label": "Close"
244
+ }, /*#__PURE__*/React__default["default"].createElement("svg", {
245
+ width: "18",
246
+ height: "18",
247
+ viewBox: "0 0 24 24",
248
+ fill: "currentColor"
249
+ }, /*#__PURE__*/React__default["default"].createElement("path", {
250
+ d: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"
251
+ })))))), children);
168
252
  };
169
253
 
170
254
  exports.SnackbarContext = SnackbarContext;