@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
@@ -1,15 +1,109 @@
1
- import _taggedTemplateLiteral from '@babel/runtime/helpers/taggedTemplateLiteral';
2
- import CloseRoundedIcon from '@mui/icons-material/CloseRounded';
3
- import FileUploadRoundedIcon from '@mui/icons-material/FileUploadRounded';
4
- import React, { useState, useRef, cloneElement } from 'react';
5
- import styled from 'styled-components';
6
- import ImageUploadModal from './ImageUploadModal.js';
7
- import { Button, Modal, Stack, Text, Input, Dropdown, Toggle } from './index.js';
1
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
+ import React, { useState, cloneElement, useEffect } from 'react';
3
+ import ReactDOM from 'react-dom';
4
+ import ImageUploadModal from './ImageUpload.js';
5
+ import { Button, Stack, Text, Input, Dropdown, Toggle } from './index.js';
8
6
  import { useWindowSize } from './ScreenSizeHook.js';
9
7
 
10
- var _templateObject;
11
- styled.div(_templateObject || (_templateObject = _taggedTemplateLiteral([""])));
12
- const NewCollectionModal = _ref => {
8
+ 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; }
9
+
10
+ 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(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; }
11
+
12
+ const COLORS = {
13
+ backdrop: "rgba(0, 0, 0, 0.8)",
14
+ bgModal: "#1E1F22",
15
+ // Dark Gray (Discord-like)
16
+ bgInput: "#2B2D31",
17
+ textMain: "#F2F3F5",
18
+ textMuted: "#B5BAC1",
19
+ border: "#3F4147",
20
+ primary: "#5865F2",
21
+ danger: "#DA373C"
22
+ }; // --- 1. Safe Portal Component (Prevents SSR Crashes) ---
23
+
24
+ const Portal = _ref => {
25
+ let {
26
+ children
27
+ } = _ref;
28
+ const [mounted, setMounted] = useState(false);
29
+ useEffect(() => {
30
+ setMounted(true); // Optional: Lock body scroll when modal is open
31
+
32
+ const originalStyle = window.getComputedStyle(document.body).overflow;
33
+ document.body.style.overflow = 'hidden';
34
+ return () => {
35
+ document.body.style.overflow = originalStyle;
36
+ };
37
+ }, []);
38
+ if (!mounted) return null;
39
+ return /*#__PURE__*/ReactDOM.createPortal(children, document.body);
40
+ }; // --- 2. The Robust Modal Wrapper ---
41
+
42
+
43
+ const DarkModal = _ref2 => {
44
+ let {
45
+ isOpen,
46
+ onClose,
47
+ children,
48
+ zIndex = 1300
49
+ } = _ref2;
50
+ if (!isOpen) return null;
51
+ return /*#__PURE__*/React.createElement(Portal, null, /*#__PURE__*/React.createElement("div", {
52
+ style: {
53
+ position: "fixed",
54
+ top: 0,
55
+ left: 0,
56
+ right: 0,
57
+ bottom: 0,
58
+ backgroundColor: COLORS.backdrop,
59
+ zIndex: zIndex,
60
+ display: "flex",
61
+ alignItems: "center",
62
+ justifyContent: "center",
63
+ backdropFilter: "blur(4px)",
64
+ animation: "fadeIn 0.2s ease-out"
65
+ },
66
+ onMouseDown: onClose // Close on backdrop click
67
+
68
+ }, /*#__PURE__*/React.createElement("div", {
69
+ onMouseDown: e => e.stopPropagation(),
70
+ style: {
71
+ position: 'relative',
72
+ zIndex: zIndex + 1
73
+ }
74
+ }, children)), /*#__PURE__*/React.createElement("style", null, "@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }"));
75
+ }; // --- Icons ---
76
+
77
+
78
+ const Icon = _ref3 => {
79
+ let {
80
+ path,
81
+ size = "24px",
82
+ style,
83
+ onClick
84
+ } = _ref3;
85
+ return /*#__PURE__*/React.createElement("svg", {
86
+ viewBox: "0 0 24 24",
87
+ width: size,
88
+ height: size,
89
+ fill: "currentColor",
90
+ style: _objectSpread({
91
+ display: 'inline-block',
92
+ flexShrink: 0,
93
+ cursor: onClick ? 'pointer' : 'default'
94
+ }, style),
95
+ onClick: onClick
96
+ }, /*#__PURE__*/React.createElement("path", {
97
+ d: path
98
+ }));
99
+ };
100
+
101
+ const paths = {
102
+ close: "M18.3 5.71a.9959.9959 0 00-1.41 0L12 10.59 7.11 5.7a.9959.9959 0 00-1.41 0c-.39.39-.39 1.02 0 1.41L10.59 12 5.7 16.89c-.39.39-.39 1.02 0 1.41.39.39 1.02.39 1.41 0L12 13.41l4.89 4.89c.39.39 1.02.39 1.41 0 .39-.39.39-1.02 0-1.41L13.41 12l4.89-4.89c.38-.38.38-1.02 0-1.4z",
103
+ upload: "M18 15v3H6v-3H4v3c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2v-3h-2zM7 9l1.41 1.41L11 7.83V16h2V7.83l2.59 2.58L17 9l-5-5-5 5z"
104
+ }; // --- MAIN COMPONENT ---
105
+
106
+ const NewCollectionModal = _ref4 => {
13
107
  var _collectionToBeEdited, _collectionToBeEdited2, _collectionToBeEdited3;
14
108
 
15
109
  let {
@@ -19,272 +113,173 @@ const NewCollectionModal = _ref => {
19
113
  collectionToBeEdited,
20
114
  handleChangePremium,
21
115
  onClose,
22
- children,
23
- isAdmin
24
- } = _ref;
25
- const [open, setopen] = useState(false);
116
+ isAdmin,
117
+ open: externalOpen // NEW: Controlled prop
118
+
119
+ } = _ref4;
120
+ // State for uncontrolled mode (triggered by button)
121
+ const [internalOpen, setInternalOpen] = useState(false); // Determine if controlled or uncontrolled
122
+
123
+ const isControlled = externalOpen !== undefined;
124
+ const isOpen = isControlled ? externalOpen : internalOpen;
26
125
  const [imageFile, setImageFile] = useState(collectionToBeEdited === null || collectionToBeEdited === void 0 ? void 0 : (_collectionToBeEdited = collectionToBeEdited.image) === null || _collectionToBeEdited === void 0 ? void 0 : _collectionToBeEdited.original);
27
126
  const [imageURL, setImageURL] = useState(collectionToBeEdited === null || collectionToBeEdited === void 0 ? void 0 : (_collectionToBeEdited2 = collectionToBeEdited.image) === null || _collectionToBeEdited2 === void 0 ? void 0 : (_collectionToBeEdited3 = _collectionToBeEdited2.original) === null || _collectionToBeEdited3 === void 0 ? void 0 : _collectionToBeEdited3.url);
28
- const [titleInput, setTitleInput] = useState(collectionToBeEdited === null || collectionToBeEdited === void 0 ? void 0 : collectionToBeEdited.title);
29
- const [descriptionInput, setDescriptionInput] = useState(collectionToBeEdited === null || collectionToBeEdited === void 0 ? void 0 : collectionToBeEdited.description);
127
+ const [titleInput, setTitleInput] = useState((collectionToBeEdited === null || collectionToBeEdited === void 0 ? void 0 : collectionToBeEdited.title) || "");
128
+ const [descriptionInput, setDescriptionInput] = useState((collectionToBeEdited === null || collectionToBeEdited === void 0 ? void 0 : collectionToBeEdited.description) || "");
30
129
  const [visibility, setVisibility] = useState((collectionToBeEdited === null || collectionToBeEdited === void 0 ? void 0 : collectionToBeEdited.visibility) || "PUBLIC");
31
- const [price, setPrice] = useState(collectionToBeEdited === null || collectionToBeEdited === void 0 ? void 0 : collectionToBeEdited.price);
32
- const triggerRef = useRef();
130
+ const [price, setPrice] = useState((collectionToBeEdited === null || collectionToBeEdited === void 0 ? void 0 : collectionToBeEdited.price) || 0);
33
131
  const [editImage, setEditImage] = useState(false);
34
- useState(false);
35
132
  const size = useWindowSize();
133
+ const isMobile = size.width <= 600;
36
134
 
37
135
  const handleClose = () => {
38
- setopen(false);
39
-
40
- if (onClose) {
41
- onClose();
42
- }
136
+ if (!isControlled) setInternalOpen(false);
137
+ if (onClose) onClose();
43
138
  };
44
139
 
45
- return /*#__PURE__*/React.createElement(React.Fragment, null, trigger ? /*#__PURE__*/cloneElement(trigger, {
46
- ref: triggerRef,
47
- onClick: () => setopen(true)
48
- }) : /*#__PURE__*/React.createElement(Button, {
49
- onClick: () => setopen(true),
140
+ return /*#__PURE__*/React.createElement(React.Fragment, null, trigger && !isControlled ? /*#__PURE__*/cloneElement(trigger, {
141
+ onClick: () => setInternalOpen(true)
142
+ }) : !isControlled && !trigger ? /*#__PURE__*/React.createElement(Button, {
143
+ onClick: () => setInternalOpen(true),
50
144
  color: "grey4",
51
145
  sx: {
52
146
  fontSize: "10px"
53
147
  }
54
- }, "Organize Collection"), /*#__PURE__*/React.createElement(Modal, {
55
- "aria-labelledby": "transition-modal-title",
56
- "aria-describedby": "transition-modal-description",
57
- open: open,
58
- onClose: () => handleClose(),
59
- closeAfterTransition: true
148
+ }, "Organize Collection") : null, /*#__PURE__*/React.createElement(DarkModal, {
149
+ isOpen: isOpen,
150
+ onClose: handleClose,
151
+ zIndex: 1300
60
152
  }, /*#__PURE__*/React.createElement(Stack, {
61
153
  sx: {
62
- position: "absolute",
63
- top: "50%",
64
- left: "50%",
65
- transform: "translate(-50%, -50%)",
66
- width: 600,
67
- height: 520,
154
+ width: isMobile ? "100vw" : "600px",
155
+ maxHeight: "90vh",
68
156
  overflowY: "auto",
69
- bgcolor: "white.main",
70
- border: "none",
71
- boxShadow: 24,
72
- borderRadius: "8px",
73
- pt: 2,
74
- px: 6,
75
- pb: 3,
76
- alignItems: "center",
77
- justifyContent: "flex-start",
78
- "@media(max-width: 600px)": {
79
- height: "100vh",
80
- width: "98vw"
81
- }
157
+ backgroundColor: COLORS.bgModal,
158
+ color: COLORS.textMain,
159
+ borderRadius: isMobile ? "0" : "16px",
160
+ border: "1px solid ".concat(COLORS.border),
161
+ padding: isMobile ? "20px" : "32px 48px 40px",
162
+ boxShadow: "0 20px 60px rgba(0,0,0,0.5)"
82
163
  }
83
- }, /*#__PURE__*/React.createElement(Modal, {
84
- sx: {
85
- backdropFilter: "blur(8px)",
86
- overflow: "scroll"
87
- },
88
- open: editImage,
89
- onClose: () => setEditImage(false),
90
- "aria-labelledby": "image-update-modal",
91
- "aria-describedby": "image-update-modal"
92
- }, /*#__PURE__*/React.createElement(Stack, {
93
- sx: {
94
- position: "absolute",
95
- height: size.width > 600 ? 600 : "100%",
96
- overflowY: "auto",
97
- top: size.width > 600 ? "48%" : "0",
98
- left: size.width > 600 ? "50%" : "0",
99
- transform: size.width > 600 ? "translate(-50%, -50%)" : "0",
100
- width: size.width > 600 ? 275 : "100vw",
101
- minWidth: "320px",
102
- bgcolor: "white.main",
103
- boxShadow: 24,
104
- borderRadius: size.width > 600 ? "8px" : "0",
105
- p: size.width > 600 ? 4 : 0,
106
- padding: size.width > 600 ? "16px 32px 32px" : "16px 0",
107
- ":focus": {
108
- border: "none",
109
- outline: "none"
110
- }
111
- }
112
- }, /*#__PURE__*/React.createElement(ImageUploadModal, {
113
- prevImage: collectionToBeEdited ? imageURL : undefined,
114
- updateImage: newImage => {
115
- setImageURL(URL.createObjectURL(newImage));
116
- setImageFile(newImage);
117
- },
118
- width: "150px",
119
- open: editImage,
120
- onClose: () => setEditImage(false),
121
- title: "Collection Image",
122
- sizeInfo: "Minimum size is 64px X 64px",
123
- isSquareImage: true
124
- }))), /*#__PURE__*/React.createElement(CloseRoundedIcon, {
125
- sx: {
126
- color: "notBlack.main",
164
+ }, /*#__PURE__*/React.createElement("div", {
165
+ onClick: handleClose,
166
+ style: {
127
167
  position: "absolute",
128
- right: 10,
129
- top: 10,
168
+ top: "20px",
169
+ right: "20px",
130
170
  cursor: "pointer",
131
- "@media(max-width: 600px)": {
132
- right: 50,
133
- top: 30
134
- }
135
- },
136
- onClick: () => handleClose()
137
- }), /*#__PURE__*/React.createElement(Stack, {
138
- sx: {
139
- minWidth: "320px"
171
+ padding: "8px",
172
+ color: COLORS.textMuted
140
173
  }
141
- }, /*#__PURE__*/React.createElement(Text, {
174
+ }, /*#__PURE__*/React.createElement(Icon, {
175
+ path: paths.close
176
+ })), /*#__PURE__*/React.createElement(Text, {
177
+ fontSize: "28px",
178
+ fontWeight: "700",
179
+ fontColor: COLORS.textMain,
142
180
  sx: {
143
- alignSelf: size.width > 600 ? "flex-start" : "center"
144
- },
145
- fontSize: "40px",
146
- margin: size.width > 600 ? "9px 0" : "24px 0 9px"
147
- }, collectionToBeEdited ? "Edit" : "New", " Collection"), /*#__PURE__*/React.createElement(Stack, {
148
- direction: size.width > 600 ? "row" : "column",
149
- sx: {
150
- width: "100%",
151
- marginTop: "8px",
152
- minHeight: size.width > 600 ? "272px" : "470px",
153
- justifyContent: size.width > 600 ? "center" : "space-between"
181
+ mb: 4
154
182
  }
155
- }, /*#__PURE__*/React.createElement(Stack, {
156
- alignItems: "center",
157
- justifyContent: "flex-start",
158
- marginRight: size.width > 600 ? size.width > 700 ? "48px" : "32px" : "0"
159
- }, /*#__PURE__*/React.createElement(Stack, {
160
- sx: {
161
- width: "180px",
162
- position: "relative",
163
- justifyContent: "flex-start",
164
- "&:hover": {
165
- width: "180px",
166
- background: "notBlack.main"
167
- }
183
+ }, collectionToBeEdited ? "Edit" : "New", " Collection"), /*#__PURE__*/React.createElement(Stack, {
184
+ direction: isMobile ? "column" : "row",
185
+ spacing: 4
186
+ }, /*#__PURE__*/React.createElement("div", {
187
+ onClick: () => setEditImage(true),
188
+ style: {
189
+ width: "160px",
190
+ height: "160px",
191
+ borderRadius: "12px",
192
+ backgroundColor: COLORS.bgInput,
193
+ border: "2px dashed ".concat(COLORS.border),
194
+ cursor: "pointer",
195
+ overflow: "hidden",
196
+ flexShrink: 0,
197
+ display: "flex",
198
+ alignItems: "center",
199
+ justifyContent: "center"
168
200
  }
169
201
  }, imageURL ? /*#__PURE__*/React.createElement("img", {
202
+ src: imageURL,
203
+ alt: "Preview",
170
204
  style: {
171
- objectFit: "cover",
172
- width: "100%",
173
- minWidth: "75px",
174
- height: "auto",
175
- borderRadius: "8px"
176
- },
177
- alt: "uploaded img",
178
- src: imageURL
179
- }) : /*#__PURE__*/React.createElement(Stack, {
180
- sx: {
181
- justifyContent: "center",
182
- width: "calc(100% - 2px)",
183
- minWidth: "75px",
184
- height: "176px",
185
- borderRadius: "8px",
186
- border: "1px solid",
187
- color: "grey3.main"
188
- }
189
- }, /*#__PURE__*/React.createElement(Text, {
190
- sx: {
191
- textAlign: "center"
192
- }
193
- }, "Click here to upload a photo for this collection")), /*#__PURE__*/React.createElement(Stack, {
194
- sx: {
195
- position: "absolute",
196
- justifyContent: "flex-end",
197
- alignItems: "flex-end",
198
- top: "0",
199
- right: "0",
200
205
  width: "100%",
201
206
  height: "100%",
202
- backgroundColor: "transparent",
203
- transition: "0.2s",
204
- "&:hover div": {
205
- transition: "0.2s",
206
- opacity: "1"
207
- }
208
- },
207
+ objectFit: "cover"
208
+ }
209
+ }) : /*#__PURE__*/React.createElement(Stack, {
210
+ alignItems: "center"
211
+ }, /*#__PURE__*/React.createElement(Icon, {
212
+ path: paths.upload,
209
213
  style: {
210
- borderRadius: "50%",
211
- zIndex: "6"
212
- },
213
- onClick: () => setEditImage(true)
214
- }, /*#__PURE__*/React.createElement(Stack, {
215
- alignItems: "center",
216
- justifyContent: "center",
217
- sx: {
218
- opacity: "0",
219
- position: "absolute",
220
- top: "0",
221
- bottom: "0",
222
- left: "0",
223
- right: "0",
224
- cursor: "pointer",
225
- width: "100%",
226
- transition: "opacity .2s",
227
- background: "black",
228
- borderRadius: "8px"
214
+ color: COLORS.textMuted
229
215
  }
230
- }, /*#__PURE__*/React.createElement(FileUploadRoundedIcon, {
216
+ }), /*#__PURE__*/React.createElement(Text, {
217
+ fontSize: "12px",
218
+ fontColor: COLORS.textMuted,
231
219
  sx: {
232
- color: "white.main",
233
- fontSize: "40px",
234
- height: "120px",
235
- width: "120px"
220
+ mt: 1
236
221
  }
237
- }))))), /*#__PURE__*/React.createElement(Stack, {
238
- justifyContent: "space-between",
222
+ }, "Upload"))), /*#__PURE__*/React.createElement(Stack, {
223
+ spacing: 3,
239
224
  sx: {
240
- // height: "220px",
241
- width: "64%",
242
- minWidth: "320px",
243
- position: "relative",
244
- top: size.width > 600 ? "-20px" : "0",
245
- margin: "0 auto"
225
+ flex: 1,
226
+ width: "100%"
246
227
  }
247
228
  }, /*#__PURE__*/React.createElement(Input, {
248
- disabled: !isAdmin && (collectionToBeEdited === null || collectionToBeEdited === void 0 ? void 0 : collectionToBeEdited.isPremium),
249
- color: "notBlack",
250
- label: "Collection Name",
229
+ label: "Name",
251
230
  value: titleInput,
252
231
  onChange: e => setTitleInput(e.target.value),
253
- variant: "standard",
232
+ variant: "filled",
233
+ fullWidth: true,
254
234
  sx: {
255
- margin: "0"
235
+ "& .MuiInputBase-root": {
236
+ color: COLORS.textMain
237
+ },
238
+ "& .MuiInputLabel-root": {
239
+ color: COLORS.textMuted
240
+ },
241
+ "& .MuiFilledInput-root": {
242
+ backgroundColor: COLORS.bgInput
243
+ }
256
244
  }
257
245
  }), /*#__PURE__*/React.createElement(Input, {
258
- disabled: !isAdmin && (collectionToBeEdited === null || collectionToBeEdited === void 0 ? void 0 : collectionToBeEdited.isPremium),
259
- label: "Add a description",
260
- variant: "filled",
261
- color: "notBlack",
246
+ label: "Description",
262
247
  value: descriptionInput,
263
248
  onChange: e => setDescriptionInput(e.target.value),
264
249
  multiline: true,
265
- rows: 4,
250
+ rows: 3,
251
+ fullWidth: true,
266
252
  sx: {
267
- fontSize: "16px",
268
- paddingBottom: "12px",
269
- marginTop: "18px"
253
+ "& .MuiInputBase-root": {
254
+ color: COLORS.textMain
255
+ },
256
+ "& .MuiInputLabel-root": {
257
+ color: COLORS.textMuted
258
+ },
259
+ "& .MuiFilledInput-root": {
260
+ backgroundColor: COLORS.bgInput
261
+ }
270
262
  }
271
263
  }), /*#__PURE__*/React.createElement(Stack, {
272
264
  direction: "row",
273
- alignItems: "center",
274
- justifyContent: "space-between"
275
- }, /*#__PURE__*/React.createElement(Stack, {
265
+ spacing: 2,
266
+ justifyContent: "space-between",
267
+ flexWrap: "wrap"
268
+ }, /*#__PURE__*/React.createElement(Stack, null, /*#__PURE__*/React.createElement(Text, {
269
+ fontSize: "12px",
270
+ fontColor: COLORS.textMuted,
276
271
  sx: {
277
- width: "40%"
272
+ mb: 1
278
273
  }
279
- }, /*#__PURE__*/React.createElement(Text, {
280
- marginBottom: "4px",
281
- fontSize: "18px"
282
- }, "Visibility:"), /*#__PURE__*/React.createElement(Dropdown, {
274
+ }, "VISIBILITY"), /*#__PURE__*/React.createElement(Dropdown, {
283
275
  sx: {
284
- height: "40px"
276
+ height: "40px",
277
+ color: COLORS.textMain,
278
+ backgroundColor: COLORS.bgInput,
279
+ border: "1px solid ".concat(COLORS.border)
285
280
  },
286
281
  buttonTitle: visibility,
287
- handleOptionClicked: option => setVisibility(option.name),
282
+ handleOptionClicked: opt => setVisibility(opt.name),
288
283
  options: [{
289
284
  name: "PUBLIC"
290
285
  }, {
@@ -292,100 +287,90 @@ const NewCollectionModal = _ref => {
292
287
  }, {
293
288
  name: "UNLISTED"
294
289
  }]
295
- })), isAdmin && /*#__PURE__*/React.createElement(Stack, {
290
+ })), isAdmin && /*#__PURE__*/React.createElement(Stack, null, /*#__PURE__*/React.createElement(Text, {
291
+ fontSize: "12px",
292
+ fontColor: COLORS.textMuted,
296
293
  sx: {
297
- width: "40%"
294
+ mb: 1
298
295
  }
299
- }, /*#__PURE__*/React.createElement(Text, {
300
- marginBottom: "4px",
301
- fontSize: "18px"
302
- }, "Premium:"), /*#__PURE__*/React.createElement(Toggle, {
296
+ }, "PREMIUM"), /*#__PURE__*/React.createElement(Toggle, {
303
297
  checked: collectionToBeEdited === null || collectionToBeEdited === void 0 ? void 0 : collectionToBeEdited.isPremium,
304
- onClick: () => {
305
- setVisibility("PUBLIC");
306
- handleChangePremium(!(collectionToBeEdited !== null && collectionToBeEdited !== void 0 && collectionToBeEdited.isPremium));
307
- }
308
- })), collectionToBeEdited !== null && collectionToBeEdited !== void 0 && collectionToBeEdited.isPremium ? /*#__PURE__*/React.createElement(Stack, {
298
+ onClick: () => handleChangePremium(!(collectionToBeEdited !== null && collectionToBeEdited !== void 0 && collectionToBeEdited.isPremium))
299
+ })), (collectionToBeEdited === null || collectionToBeEdited === void 0 ? void 0 : collectionToBeEdited.isPremium) && /*#__PURE__*/React.createElement(Stack, null, /*#__PURE__*/React.createElement(Text, {
300
+ fontSize: "12px",
301
+ fontColor: COLORS.textMuted,
309
302
  sx: {
310
- width: "40%"
303
+ mb: 1
311
304
  }
312
- }, /*#__PURE__*/React.createElement(Text, {
313
- marginBottom: "4px",
314
- fontSize: "18px"
315
- }, "Price:"), /*#__PURE__*/React.createElement(Input, {
316
- error: !(price > 0),
317
- size: "small",
318
- startAdornment: "$",
319
- variant: "standard",
320
- color: "grey6",
305
+ }, "PRICE"), /*#__PURE__*/React.createElement(Input, {
321
306
  value: price,
322
- onChange: e => {
323
- setPrice(e.target.value);
307
+ onChange: e => setPrice(e.target.value),
308
+ size: "small",
309
+ sx: {
310
+ "& input": {
311
+ color: COLORS.textMain
312
+ }
324
313
  }
325
- })) : /*#__PURE__*/React.createElement(React.Fragment, null)))), /*#__PURE__*/React.createElement(Button, {
326
- color: "primary",
327
- variant: "contained",
328
- fontSize: "32px",
314
+ }))))), /*#__PURE__*/React.createElement(Stack, {
315
+ alignItems: "center",
316
+ spacing: 2,
329
317
  sx: {
330
- width: "40%",
331
- minWidth: "200px",
332
- height: "48px",
333
- fontWeight: "16px",
334
- margin: size.width > 600 ? "0px auto 0" : "40px auto 0"
335
- },
336
- disableElevation: true,
318
+ mt: 5
319
+ }
320
+ }, /*#__PURE__*/React.createElement(Button, {
337
321
  onClick: () => {
338
- // what to do if this modal is being used to edit a collection
339
- if (collectionToBeEdited) {
340
- if (!(collectionToBeEdited !== null && collectionToBeEdited !== void 0 && collectionToBeEdited.isPremium) || collectionToBeEdited !== null && collectionToBeEdited !== void 0 && collectionToBeEdited.isPremium && price > 0) {
341
- handleCollection({
342
- _id: collectionToBeEdited._id,
343
- image: imageFile,
344
- title: titleInput,
345
- description: descriptionInput,
346
- visibility: visibility,
347
- price: price
348
- });
349
- handleClose();
350
- } else {
351
- console.log("price must be set higher than 0");
352
- } // what to do if this modal is being used to create a new collection
353
-
354
- } else {
355
- if (!(collectionToBeEdited !== null && collectionToBeEdited !== void 0 && collectionToBeEdited.isPremium) || collectionToBeEdited !== null && collectionToBeEdited !== void 0 && collectionToBeEdited.isPremium && price > 0) {
356
- handleCollection({
357
- image: imageFile,
358
- title: titleInput,
359
- description: descriptionInput,
360
- visibility: visibility,
361
- price: collectionToBeEdited !== null && collectionToBeEdited !== void 0 && collectionToBeEdited.isPremium ? price : 0
362
- });
363
- handleClose();
364
- } else {
365
- console.log("price must be set higher than 0");
366
- }
322
+ handleCollection({
323
+ _id: collectionToBeEdited === null || collectionToBeEdited === void 0 ? void 0 : collectionToBeEdited._id,
324
+ image: imageFile,
325
+ title: titleInput,
326
+ description: descriptionInput,
327
+ visibility,
328
+ price: collectionToBeEdited !== null && collectionToBeEdited !== void 0 && collectionToBeEdited.isPremium ? price : 0
329
+ }); // handleClose();
330
+ },
331
+ sx: {
332
+ backgroundColor: COLORS.primary,
333
+ color: "#FFF",
334
+ width: "100%",
335
+ maxWidth: "280px",
336
+ height: "44px",
337
+ borderRadius: "8px",
338
+ fontWeight: "600",
339
+ "&:hover": {
340
+ opacity: 0.9
367
341
  }
368
342
  }
369
- }, collectionToBeEdited ? "Save Changes" : "Create Collection"), collectionToBeEdited && deleteCollectionModal ? deleteCollectionModal : /*#__PURE__*/React.createElement(Button, {
370
- color: "primary",
343
+ }, collectionToBeEdited ? "Save Changes" : "Create Collection"), /*#__PURE__*/React.createElement(Button, {
371
344
  variant: "text",
372
- fontSize: "16px",
373
- disableElevation: true,
345
+ onClick: handleClose,
374
346
  sx: {
375
- margin: "10px auto"
376
- },
377
- onClick: () => {
378
- handleClose();
347
+ color: COLORS.textMuted
379
348
  }
380
- }, "Cancel"), /*#__PURE__*/React.createElement(Text, {
381
- fontSize: "14px",
382
- textAlign: "center",
383
- fontWeight: "lighter",
349
+ }, "Cancel")))), /*#__PURE__*/React.createElement(DarkModal, {
350
+ isOpen: editImage,
351
+ onClose: () => setEditImage(false),
352
+ zIndex: 1400
353
+ }, /*#__PURE__*/React.createElement(Stack, {
384
354
  sx: {
385
- width: "95%"
355
+ backgroundColor: COLORS.bgModal,
356
+ padding: "24px",
357
+ borderRadius: "12px",
358
+ width: isMobile ? "100vw" : "340px",
359
+ border: "1px solid ".concat(COLORS.border)
386
360
  }
387
- }, "By proceeding, you agree to allow Blerp access to the image you choose to upload. Please make sure you have the right to upload the image.")))));
361
+ }, /*#__PURE__*/React.createElement(ImageUploadModal, {
362
+ prevImage: collectionToBeEdited ? imageURL : undefined,
363
+ updateImage: newImage => {
364
+ setImageURL(URL.createObjectURL(newImage));
365
+ setImageFile(newImage);
366
+ },
367
+ width: "100%",
368
+ open: editImage,
369
+ onClose: () => setEditImage(false),
370
+ title: "Collection Image",
371
+ sizeInfo: "Minimum size is 64px X 64px",
372
+ isSquareImage: true
373
+ }))));
388
374
  };
389
375
 
390
- export default NewCollectionModal;
391
- export { NewCollectionModal };
376
+ export { NewCollectionModal, NewCollectionModal as default };