@blerp/design 1.3.17 → 1.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Blerp/BlerpImageRow.js +176 -57
- package/dist/cjs/Blerp/BlerpSavePopup.js +44 -40
- package/dist/cjs/Blerp/BlerpTitleRow.js +36 -19
- package/dist/cjs/Blerp/BlerpTopRow.js +110 -44
- package/dist/cjs/Blerp.js +9 -16
- package/dist/cjs/BlerpAudioContextProvider.js +2 -2
- package/dist/cjs/BlerpListView.js +318 -168
- package/dist/cjs/BlerpListViewPremium.js +155 -130
- package/dist/cjs/BlerpListViewSkeleton.js +60 -13
- package/dist/cjs/BlerpSkeleton.js +32 -9
- package/dist/cjs/CollectionCard.js +139 -60
- package/dist/cjs/CollectionListViewPremium.js +368 -297
- package/dist/cjs/CollectionSkeleton.js +74 -13
- package/dist/cjs/Dropdown.js +272 -172
- package/dist/cjs/EllipsisLoader.js +66 -21
- package/dist/cjs/GroupCard.js +64 -57
- package/dist/cjs/Icons/Icons.js +288 -426
- package/dist/cjs/ImageEditor.js +247 -0
- package/dist/cjs/ImageUpload.js +226 -0
- package/dist/cjs/NewBlerp.js +354 -160
- package/dist/cjs/NewBlerpTest.js +10 -792
- package/dist/cjs/NewCollectionModal.js +294 -310
- package/dist/cjs/PremiumCollectionCard.js +191 -454
- package/dist/cjs/PurchaseModals/CheckoutModal.js +1 -1
- package/dist/cjs/PurchaseModals/PremiumBlerpCheckoutModal.js +1 -1
- package/dist/cjs/PurchaseModals/PremiumCollectionCheckoutModal.js +1 -1
- package/dist/cjs/PurchaseModals/PremiumSubscriptionCheckoutModal.js +1 -1
- package/dist/cjs/ReactionButtons.js +26 -13
- package/dist/cjs/SnackbarContextProvider.js +200 -116
- package/dist/cjs/Theme.js +217 -90
- package/dist/cjs/Toggle.js +86 -32
- package/dist/cjs/UserCard.js +13 -32
- package/dist/cjs/UserPage/LibraryControls.js +180 -93
- package/dist/cjs/UserPage/UserLibraryHeader.js +23 -14
- package/dist/cjs/UserPage/UserProfileHeader.js +120 -105
- package/dist/cjs/UsernameWithPopout.js +12 -8
- package/dist/cjs/colors.js +15 -8
- package/dist/cjs/helpers.js +131 -0
- package/dist/cjs/index.js +92 -58
- package/dist/cjs/neo-components/Autocomplete.js +285 -0
- package/dist/cjs/neo-components/BottomNavigation.js +120 -0
- package/dist/cjs/neo-components/Box.js +48 -0
- package/dist/cjs/neo-components/Button.js +206 -0
- package/dist/cjs/neo-components/CircularProgress.js +92 -0
- package/dist/cjs/neo-components/Container.js +75 -0
- package/dist/cjs/neo-components/Dialog.js +441 -0
- package/dist/cjs/neo-components/Fab.js +237 -0
- package/dist/cjs/neo-components/FormControls.js +1057 -0
- package/dist/cjs/neo-components/Grid.js +256 -0
- package/dist/cjs/neo-components/IconButton.js +111 -0
- package/dist/cjs/neo-components/Input.js +495 -0
- package/dist/cjs/neo-components/Layout.js +1214 -0
- package/dist/cjs/neo-components/Misc.js +868 -0
- package/dist/cjs/neo-components/Navigation.js +1616 -0
- package/dist/cjs/neo-components/Paper.js +256 -0
- package/dist/cjs/neo-components/Stack.js +194 -0
- package/dist/cjs/neo-components/Stepper.js +291 -0
- package/dist/cjs/neo-components/Text.js +290 -0
- package/dist/cjs/neo-components/ThemeProvider.js +731 -0
- package/dist/cjs/neo-components/ToggleButton.js +223 -0
- package/dist/cjs/neo-components/createTheme.js +306 -0
- package/dist/cjs/neo-components/withSx.js +171 -0
- package/dist/cjs/neo-utils/sxToStyle.js +508 -0
- package/dist/esm/Blerp/BlerpImageRow.js +166 -46
- package/dist/esm/Blerp/BlerpSavePopup.js +35 -27
- package/dist/esm/Blerp/BlerpTitleRow.js +32 -13
- package/dist/esm/Blerp/BlerpTopRow.js +85 -16
- package/dist/esm/Blerp.js +4 -12
- package/dist/esm/BlerpAudioContextProvider.js +1 -2
- package/dist/esm/BlerpListView.js +313 -160
- package/dist/esm/BlerpListViewPremium.js +135 -109
- package/dist/esm/BlerpListViewSkeleton.js +60 -11
- package/dist/esm/BlerpSkeleton.js +32 -7
- package/dist/esm/CollectionCard.js +118 -38
- package/dist/esm/CollectionListViewPremium.js +367 -294
- package/dist/esm/CollectionSkeleton.js +73 -11
- package/dist/esm/Dropdown.js +260 -161
- package/dist/esm/EllipsisLoader.js +63 -18
- package/dist/esm/GroupCard.js +54 -46
- package/dist/esm/Icons/Icons.js +226 -367
- package/dist/esm/ImageEditor.js +240 -0
- package/dist/esm/ImageUpload.js +217 -0
- package/dist/esm/NewBlerp.js +282 -79
- package/dist/esm/NewBlerpTest.js +11 -781
- package/dist/esm/NewCollectionModal.js +289 -304
- package/dist/esm/PremiumCollectionCard.js +192 -451
- package/dist/esm/PurchaseModals/CheckoutModal.js +1 -1
- package/dist/esm/PurchaseModals/PremiumBlerpCheckoutModal.js +1 -1
- package/dist/esm/PurchaseModals/PremiumCollectionCheckoutModal.js +1 -1
- package/dist/esm/PurchaseModals/PremiumSubscriptionCheckoutModal.js +1 -1
- package/dist/esm/ReactionButtons.js +23 -8
- package/dist/esm/SnackbarContextProvider.js +196 -110
- package/dist/esm/Theme.js +187 -66
- package/dist/esm/Toggle.js +84 -29
- package/dist/esm/UserCard.js +1 -20
- package/dist/esm/UserPage/LibraryControls.js +159 -65
- package/dist/esm/UserPage/UserLibraryHeader.js +18 -10
- package/dist/esm/UserPage/UserProfileHeader.js +100 -79
- package/dist/esm/UsernameWithPopout.js +7 -4
- package/dist/esm/colors.js +11 -9
- package/dist/esm/helpers.js +122 -0
- package/dist/esm/icons.js +1 -1
- package/dist/esm/index.js +32 -2
- package/dist/esm/neo-components/Autocomplete.js +274 -0
- package/dist/esm/neo-components/BottomNavigation.js +109 -0
- package/dist/esm/neo-components/Box.js +36 -0
- package/dist/esm/neo-components/Button.js +194 -0
- package/dist/esm/neo-components/CircularProgress.js +81 -0
- package/dist/esm/neo-components/Container.js +63 -0
- package/dist/esm/neo-components/Dialog.js +423 -0
- package/dist/esm/neo-components/Fab.js +225 -0
- package/dist/esm/neo-components/FormControls.js +1041 -0
- package/dist/esm/neo-components/Grid.js +244 -0
- package/dist/esm/neo-components/IconButton.js +99 -0
- package/dist/esm/neo-components/Input.js +480 -0
- package/dist/esm/neo-components/Layout.js +1180 -0
- package/dist/esm/neo-components/Misc.js +850 -0
- package/dist/esm/neo-components/Navigation.js +1594 -0
- package/dist/esm/neo-components/Paper.js +243 -0
- package/dist/esm/neo-components/Stack.js +182 -0
- package/dist/esm/neo-components/Stepper.js +278 -0
- package/dist/esm/neo-components/Text.js +277 -0
- package/dist/esm/neo-components/ThemeProvider.js +718 -0
- package/dist/esm/neo-components/ToggleButton.js +214 -0
- package/dist/esm/neo-components/createTheme.js +297 -0
- package/dist/esm/neo-components/withSx.js +160 -0
- package/dist/esm/neo-utils/sxToStyle.js +502 -0
- package/package.json +19 -15
|
@@ -1,128 +1,141 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var _extends = require('@babel/runtime/helpers/extends');
|
|
4
|
+
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
5
|
+
var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
|
|
3
6
|
var React = require('react');
|
|
4
|
-
var AddRoundedIcon = require('@mui/icons-material/AddRounded');
|
|
5
|
-
var FacebookIcon = require('@mui/icons-material/Facebook');
|
|
6
|
-
var InstagramIcon = require('@mui/icons-material/Instagram');
|
|
7
|
-
var ModeEditRoundedIcon = require('@mui/icons-material/ModeEditRounded');
|
|
8
|
-
var PersonAddRoundedIcon = require('@mui/icons-material/PersonAddRounded');
|
|
9
|
-
var PinterestIcon = require('@mui/icons-material/Pinterest');
|
|
10
|
-
var TwitterIcon = require('@mui/icons-material/Twitter');
|
|
11
|
-
var YouTubeIcon = require('@mui/icons-material/YouTube');
|
|
12
|
-
var PersonRemoveRoundedIcon = require('@mui/icons-material/PersonRemoveRounded');
|
|
13
7
|
var index = require('../index.js');
|
|
14
8
|
var ScreenSizeHook = require('../ScreenSizeHook.js');
|
|
15
|
-
var
|
|
16
|
-
var
|
|
9
|
+
var helpers = require('../helpers.js');
|
|
10
|
+
var Theme = require('../Theme.js');
|
|
17
11
|
var Icons = require('../Icons/Icons.js');
|
|
18
12
|
|
|
19
13
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
20
14
|
|
|
15
|
+
var _extends__default = /*#__PURE__*/_interopDefaultLegacy(_extends);
|
|
16
|
+
var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
|
|
17
|
+
var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
|
|
21
18
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
22
|
-
var AddRoundedIcon__default = /*#__PURE__*/_interopDefaultLegacy(AddRoundedIcon);
|
|
23
|
-
var FacebookIcon__default = /*#__PURE__*/_interopDefaultLegacy(FacebookIcon);
|
|
24
|
-
var InstagramIcon__default = /*#__PURE__*/_interopDefaultLegacy(InstagramIcon);
|
|
25
|
-
var ModeEditRoundedIcon__default = /*#__PURE__*/_interopDefaultLegacy(ModeEditRoundedIcon);
|
|
26
|
-
var PersonAddRoundedIcon__default = /*#__PURE__*/_interopDefaultLegacy(PersonAddRoundedIcon);
|
|
27
|
-
var PinterestIcon__default = /*#__PURE__*/_interopDefaultLegacy(PinterestIcon);
|
|
28
|
-
var TwitterIcon__default = /*#__PURE__*/_interopDefaultLegacy(TwitterIcon);
|
|
29
|
-
var YouTubeIcon__default = /*#__PURE__*/_interopDefaultLegacy(YouTubeIcon);
|
|
30
|
-
var PersonRemoveRoundedIcon__default = /*#__PURE__*/_interopDefaultLegacy(PersonRemoveRoundedIcon);
|
|
31
19
|
|
|
32
|
-
const
|
|
33
|
-
|
|
20
|
+
const _excluded = ["path", "sx", "size"];
|
|
21
|
+
|
|
22
|
+
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; }
|
|
23
|
+
|
|
24
|
+
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; }
|
|
25
|
+
|
|
26
|
+
const Icon = _ref => {
|
|
27
|
+
let {
|
|
28
|
+
path,
|
|
29
|
+
sx,
|
|
30
|
+
size = "24px"
|
|
31
|
+
} = _ref,
|
|
32
|
+
props = _objectWithoutProperties__default["default"](_ref, _excluded);
|
|
33
|
+
|
|
34
|
+
return /*#__PURE__*/React__default["default"].createElement(index.Box, _extends__default["default"]({
|
|
35
|
+
component: "svg",
|
|
36
|
+
viewBox: "0 0 24 24",
|
|
37
|
+
width: size,
|
|
38
|
+
height: size,
|
|
39
|
+
fill: "currentColor",
|
|
40
|
+
sx: _objectSpread({
|
|
41
|
+
display: 'inline-block',
|
|
42
|
+
flexShrink: 0
|
|
43
|
+
}, sx)
|
|
44
|
+
}, props), /*#__PURE__*/React__default["default"].createElement("path", {
|
|
45
|
+
d: path
|
|
46
|
+
}));
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const paths = {
|
|
50
|
+
add: "M18 13h-5v5c0 .55-.45 1-1 1s-1-.45-1-1v-5H6c-.55 0-1-.45-1-1s.45-1 1-1h5V6c0-.55.45-1 1-1s1 .45 1 1v5h5c.55 0 1 .45 1 1s-.45 1-1 1z",
|
|
51
|
+
edit: "M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34a.9959.9959 0 00-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z",
|
|
52
|
+
personAdd: "M15 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm-9-2V7H4v3H1v2h3v3h2v-3h3v-2H6zm9 4c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z",
|
|
53
|
+
personRemove: "M15 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm-9-2V7H4v3H1v2h3v3h2v-3h3v-2H6zm9 4c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z",
|
|
54
|
+
// Simplified
|
|
55
|
+
facebook: "M5 3h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2m13 2h-2.5A3.5 3.5 0 0 0 12 8.5V11h-2v3h2v7h3v-7h3v-3h-3V9a1 1 0 0 1 1-1h2V5z",
|
|
56
|
+
twitter: "M22.46 6c-.77.35-1.6.58-2.46.69.88-.53 1.56-1.37 1.88-2.38-.83.5-1.75.85-2.72 1.05C18.37 4.5 17.26 4 16 4c-2.35 0-4.27 1.92-4.27 4.29 0 .34.04.67.11.98C8.28 9.09 5.11 7.38 3 4.79c-.37.63-.58 1.37-.58 2.15 0 1.48.75 2.78 1.89 3.54-.7 0-1.35-.2-1.92-.53v.05c0 2.03 1.44 3.73 3.35 4.12-.35.1-.73.15-1.12.15-.27 0-.54-.03-.8-.08.54 1.66 2.08 2.87 3.91 2.91-1.42 1.12-3.23 1.78-5.2 1.78-.34 0-.67-.02-1-.06C3.04 20.1 5.31 20.8 7.72 20.8c9.27 0 14.34-7.68 14.34-14.34 0-.22 0-.44-.01-.66.98-.7 1.84-1.59 2.51-2.6z",
|
|
57
|
+
instagram: "M7.8 2h8.4C19.4 2 22 4.6 22 7.8v8.4a5.8 5.8 0 0 1-5.8 5.8H7.8C4.6 22 2 19.4 2 16.2V7.8A5.8 5.8 0 0 1 7.8 2m-.2 2A3.6 3.6 0 0 0 4 7.6v8.8C4 18.39 5.61 20 7.6 20h8.8a3.6 3.6 0 0 0 3.6-3.6V7.6C20 5.61 18.39 4 16.4 4H7.6m9.65 1.5a1.25 1.25 0 0 1 1.25 1.25A1.25 1.25 0 0 1 17.25 8 1.25 1.25 0 0 1 16 6.75a1.25 1.25 0 0 1 1.25-1.25M12 7a5 5 0 0 1 5 5 5 5 0 0 1-5 5 5 5 0 0 1-5-5 5 5 0 0 1 5-5m0 2a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3z",
|
|
58
|
+
youtube: "M10 15l5.19-3L10 9v6m11.56-7.83c.13.47.22 1.1.28 1.9.07.8.1 1.49.1 2.09L22 12c0 2.19-.16 3.8-.44 4.83-.25.9-.83 1.48-1.73 1.73-.47.13-1.33.22-2.65.28-1.3.07-2.49.1-3.59.1L12 19c-4.19 0-6.8-.16-7.83-.44-.9-.25-1.48-.83-1.73-1.73-.13-.47-.22-1.1-.28-1.9-.07-.8-.1-1.49-.1-2.09L2 12c0-2.19.16-3.8.44-4.83.25-.9.83-1.48 1.73-1.73.47-.13 1.33-.22 2.65-.28 1.3-.07 2.49-.1 3.59-.1L12 5c4.19 0 6.8.16 7.83.44.9.25 1.48.83 1.73 1.73z",
|
|
59
|
+
pinterest: "M12.2 2C7.12 2 3 6.12 3 11.2c0 3.9 2.42 7.23 5.87 8.58-.08-.72-.15-1.83.03-2.62.16-.71 1.05-4.44 1.05-4.44s-.27-.54-.27-1.33c0-1.25.72-2.18 1.63-2.18.77 0 1.14.58 1.14 1.27 0 .77-.49 1.93-.74 3-.21.87.44 1.58 1.29 1.58 1.55 0 2.74-1.64 2.74-4 0-2.09-1.5-3.55-3.64-3.55-2.48 0-3.93 1.86-3.93 3.77 0 .75.29 1.55.65 1.99.07.09.08.17.06.25-.07.28-.22.88-.25.99-.04.16-.14.2-.32.11-1.19-.55-1.93-2.3-1.93-3.7 0-3.02 2.2-5.78 6.32-5.78 3.32 0 5.89 2.36 5.89 5.52 0 3.3-2.08 5.96-4.97 5.96-.97 0-1.88-.5-2.2-.1l-.59 2.27c-.22.82-.8 1.85-1.19 2.48 1.1.34 2.26.52 3.47.52 5.08 0 9.2-4.12 9.2-9.2C21.4 6.12 17.28 2 12.2 2z"
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const UserProfileHeader = _ref2 => {
|
|
63
|
+
var _userData$profileImag3, _userData$profileImag4, _userData$headerImage, _userData$headerImage2, _userData$headerImage3, _userData$headerImage4, _userData$profileImag5, _userData$profileImag6, _userData$socialLinks2;
|
|
34
64
|
|
|
35
65
|
let {
|
|
36
66
|
followUser,
|
|
37
67
|
isOwner,
|
|
38
68
|
userData,
|
|
39
69
|
openEdit
|
|
40
|
-
} =
|
|
41
|
-
const theme =
|
|
70
|
+
} = _ref2;
|
|
71
|
+
const theme = Theme.useBlerpTheme();
|
|
42
72
|
const [profileColors, setProfileColors] = React.useState(null);
|
|
43
73
|
const size = ScreenSizeHook.useWindowSize();
|
|
74
|
+
React.useEffect(() => {
|
|
75
|
+
var _userData$profileImag, _userData$profileImag2;
|
|
76
|
+
|
|
77
|
+
if (userData !== null && userData !== void 0 && (_userData$profileImag = userData.profileImage) !== null && _userData$profileImag !== void 0 && (_userData$profileImag2 = _userData$profileImag.original) !== null && _userData$profileImag2 !== void 0 && _userData$profileImag2.url) {
|
|
78
|
+
helpers.extractDominantColor(userData.profileImage.original.url, setProfileColors);
|
|
79
|
+
}
|
|
80
|
+
}, [userData === null || userData === void 0 ? void 0 : (_userData$profileImag3 = userData.profileImage) === null || _userData$profileImag3 === void 0 ? void 0 : (_userData$profileImag4 = _userData$profileImag3.original) === null || _userData$profileImag4 === void 0 ? void 0 : _userData$profileImag4.url]);
|
|
44
81
|
|
|
45
82
|
const renderSocialLinks = () => {
|
|
46
83
|
var _userData$socialLinks;
|
|
47
84
|
|
|
48
85
|
return userData === null || userData === void 0 ? void 0 : (_userData$socialLinks = userData.socialLinks) === null || _userData$socialLinks === void 0 ? void 0 : _userData$socialLinks.map((socialItem, index) => {
|
|
49
86
|
let icon;
|
|
87
|
+
const commonSx = {
|
|
88
|
+
color: "notBlack.main",
|
|
89
|
+
cursor: "pointer",
|
|
90
|
+
":hover": {
|
|
91
|
+
color: "starling.main"
|
|
92
|
+
}
|
|
93
|
+
};
|
|
50
94
|
|
|
51
95
|
switch (socialItem.name) {
|
|
52
96
|
case "twitch":
|
|
53
|
-
icon = /*#__PURE__*/React__default[
|
|
54
|
-
sx:
|
|
55
|
-
color: "notBlack.main",
|
|
56
|
-
cursor: "pointer",
|
|
57
|
-
":hover": {
|
|
58
|
-
color: "starling.main"
|
|
59
|
-
}
|
|
60
|
-
}
|
|
97
|
+
icon = /*#__PURE__*/React__default["default"].createElement(Icons.TwitchIcon, {
|
|
98
|
+
sx: commonSx
|
|
61
99
|
});
|
|
62
100
|
break;
|
|
63
101
|
|
|
64
102
|
case "twitter":
|
|
65
|
-
icon = /*#__PURE__*/React__default[
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
cursor: "pointer",
|
|
69
|
-
":hover": {
|
|
70
|
-
color: "starling.main"
|
|
71
|
-
}
|
|
72
|
-
}
|
|
103
|
+
icon = /*#__PURE__*/React__default["default"].createElement(Icon, {
|
|
104
|
+
path: paths.twitter,
|
|
105
|
+
sx: commonSx
|
|
73
106
|
});
|
|
74
107
|
break;
|
|
75
108
|
|
|
76
109
|
case "youtube":
|
|
77
|
-
icon = /*#__PURE__*/React__default[
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
cursor: "pointer",
|
|
81
|
-
":hover": {
|
|
82
|
-
color: "starling.main"
|
|
83
|
-
}
|
|
84
|
-
}
|
|
110
|
+
icon = /*#__PURE__*/React__default["default"].createElement(Icon, {
|
|
111
|
+
path: paths.youtube,
|
|
112
|
+
sx: commonSx
|
|
85
113
|
});
|
|
86
114
|
break;
|
|
87
115
|
|
|
88
116
|
case "instagram":
|
|
89
|
-
icon = /*#__PURE__*/React__default[
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
cursor: "pointer",
|
|
93
|
-
":hover": {
|
|
94
|
-
color: "starling.main"
|
|
95
|
-
}
|
|
96
|
-
}
|
|
117
|
+
icon = /*#__PURE__*/React__default["default"].createElement(Icon, {
|
|
118
|
+
path: paths.instagram,
|
|
119
|
+
sx: commonSx
|
|
97
120
|
});
|
|
98
121
|
break;
|
|
99
122
|
|
|
100
123
|
case "pinterest":
|
|
101
|
-
icon = /*#__PURE__*/React__default[
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
cursor: "pointer",
|
|
105
|
-
":hover": {
|
|
106
|
-
color: "starling.main"
|
|
107
|
-
}
|
|
108
|
-
}
|
|
124
|
+
icon = /*#__PURE__*/React__default["default"].createElement(Icon, {
|
|
125
|
+
path: paths.pinterest,
|
|
126
|
+
sx: commonSx
|
|
109
127
|
});
|
|
110
128
|
break;
|
|
111
129
|
|
|
112
130
|
case "facebook":
|
|
113
|
-
icon = /*#__PURE__*/React__default[
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
cursor: "pointer",
|
|
117
|
-
":hover": {
|
|
118
|
-
color: "starling.main"
|
|
119
|
-
}
|
|
120
|
-
}
|
|
131
|
+
icon = /*#__PURE__*/React__default["default"].createElement(Icon, {
|
|
132
|
+
path: paths.facebook,
|
|
133
|
+
sx: commonSx
|
|
121
134
|
});
|
|
122
135
|
break;
|
|
123
136
|
}
|
|
124
137
|
|
|
125
|
-
return /*#__PURE__*/React__default[
|
|
138
|
+
return /*#__PURE__*/React__default["default"].createElement("a", {
|
|
126
139
|
key: socialItem.name + index,
|
|
127
140
|
target: "_blank",
|
|
128
141
|
href: socialItem.link,
|
|
@@ -135,10 +148,7 @@ const UserProfileHeader = _ref => {
|
|
|
135
148
|
});
|
|
136
149
|
};
|
|
137
150
|
|
|
138
|
-
return /*#__PURE__*/React__default[
|
|
139
|
-
src: userData === null || userData === void 0 ? void 0 : (_userData$profileImag = userData.profileImage) === null || _userData$profileImag === void 0 ? void 0 : (_userData$profileImag2 = _userData$profileImag.original) === null || _userData$profileImag2 === void 0 ? void 0 : _userData$profileImag2.url,
|
|
140
|
-
getColors: colors => setProfileColors(colors)
|
|
141
|
-
}), /*#__PURE__*/React__default['default'].createElement(index.Stack, {
|
|
151
|
+
return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(index.Stack, {
|
|
142
152
|
width: "100%",
|
|
143
153
|
sx: {
|
|
144
154
|
height: "250px",
|
|
@@ -151,7 +161,7 @@ const UserProfileHeader = _ref => {
|
|
|
151
161
|
position: "relative",
|
|
152
162
|
overflow: "hidden"
|
|
153
163
|
}
|
|
154
|
-
}, isOwner && /*#__PURE__*/React__default[
|
|
164
|
+
}, isOwner && /*#__PURE__*/React__default["default"].createElement(index.IconButton, {
|
|
155
165
|
sx: {
|
|
156
166
|
position: "absolute",
|
|
157
167
|
top: "10px",
|
|
@@ -164,9 +174,10 @@ const UserProfileHeader = _ref => {
|
|
|
164
174
|
}
|
|
165
175
|
},
|
|
166
176
|
onClick: () => openEdit()
|
|
167
|
-
}, /*#__PURE__*/React__default[
|
|
168
|
-
|
|
169
|
-
|
|
177
|
+
}, /*#__PURE__*/React__default["default"].createElement(Icon, {
|
|
178
|
+
path: paths.edit,
|
|
179
|
+
size: "16px"
|
|
180
|
+
})), /*#__PURE__*/React__default["default"].createElement(index.Stack, {
|
|
170
181
|
direction: "row",
|
|
171
182
|
width: "80%",
|
|
172
183
|
maxWidth: "1300px",
|
|
@@ -175,7 +186,7 @@ const UserProfileHeader = _ref => {
|
|
|
175
186
|
justifyContent: "space-between",
|
|
176
187
|
alignItems: "flex-end",
|
|
177
188
|
height: "50%"
|
|
178
|
-
}, /*#__PURE__*/React__default[
|
|
189
|
+
}, /*#__PURE__*/React__default["default"].createElement(index.Box, {
|
|
179
190
|
sx: {
|
|
180
191
|
background: "linear-gradient(135deg, ".concat(profileColors ? profileColors[0] : theme.colors.ibisRed, ", ").concat(profileColors ? profileColors[1] : theme.colors.starling, ")"),
|
|
181
192
|
boxShadow: "5px 5px 15px #0000009c"
|
|
@@ -183,12 +194,12 @@ const UserProfileHeader = _ref => {
|
|
|
183
194
|
borderRadius: "8px",
|
|
184
195
|
width: "400px",
|
|
185
196
|
height: "100%"
|
|
186
|
-
}, /*#__PURE__*/React__default[
|
|
197
|
+
}, /*#__PURE__*/React__default["default"].createElement(index.Stack, {
|
|
187
198
|
direction: "row",
|
|
188
199
|
height: "100%",
|
|
189
200
|
alignItems: "center",
|
|
190
201
|
position: "relative"
|
|
191
|
-
}, /*#__PURE__*/React__default[
|
|
202
|
+
}, /*#__PURE__*/React__default["default"].createElement(index.IconButton, {
|
|
192
203
|
sx: {
|
|
193
204
|
position: "absolute",
|
|
194
205
|
padding: "5px",
|
|
@@ -211,13 +222,16 @@ const UserProfileHeader = _ref => {
|
|
|
211
222
|
}
|
|
212
223
|
});
|
|
213
224
|
}
|
|
214
|
-
}, isOwner ? /*#__PURE__*/React__default[
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
})
|
|
225
|
+
}, isOwner ? /*#__PURE__*/React__default["default"].createElement(Icon, {
|
|
226
|
+
path: paths.edit,
|
|
227
|
+
size: "20px"
|
|
228
|
+
}) : userData !== null && userData !== void 0 && userData.loggedInIsFollower ? /*#__PURE__*/React__default["default"].createElement(Icon, {
|
|
229
|
+
path: paths.personRemove,
|
|
230
|
+
size: "20px"
|
|
231
|
+
}) : /*#__PURE__*/React__default["default"].createElement(Icon, {
|
|
232
|
+
path: paths.personAdd,
|
|
233
|
+
size: "20px"
|
|
234
|
+
})), /*#__PURE__*/React__default["default"].createElement("img", {
|
|
221
235
|
style: {
|
|
222
236
|
borderRadius: "50%",
|
|
223
237
|
objectFit: "cover",
|
|
@@ -226,20 +240,20 @@ const UserProfileHeader = _ref => {
|
|
|
226
240
|
margin: "0 20px"
|
|
227
241
|
},
|
|
228
242
|
alt: "profile img",
|
|
229
|
-
src: userData === null || userData === void 0 ? void 0 : (_userData$
|
|
230
|
-
}), /*#__PURE__*/React__default[
|
|
243
|
+
src: userData === null || userData === void 0 ? void 0 : (_userData$profileImag5 = userData.profileImage) === null || _userData$profileImag5 === void 0 ? void 0 : (_userData$profileImag6 = _userData$profileImag5.original) === null || _userData$profileImag6 === void 0 ? void 0 : _userData$profileImag6.url
|
|
244
|
+
}), /*#__PURE__*/React__default["default"].createElement(index.Stack, {
|
|
231
245
|
marginLeft: "20px"
|
|
232
|
-
}, /*#__PURE__*/React__default[
|
|
246
|
+
}, /*#__PURE__*/React__default["default"].createElement(index.Stack, {
|
|
233
247
|
direction: "row"
|
|
234
|
-
}, /*#__PURE__*/React__default[
|
|
248
|
+
}, /*#__PURE__*/React__default["default"].createElement(index.Text, {
|
|
235
249
|
noWrap: true,
|
|
236
250
|
maxWidth: "200px",
|
|
237
251
|
color: "white.override",
|
|
238
252
|
lineHeight: "51px",
|
|
239
253
|
fontSize: size.width <= 600 ? "30px" : "47px"
|
|
240
|
-
}, userData === null || userData === void 0 ? void 0 : userData.username)), /*#__PURE__*/React__default[
|
|
254
|
+
}, userData === null || userData === void 0 ? void 0 : userData.username)), /*#__PURE__*/React__default["default"].createElement(index.Stack, {
|
|
241
255
|
direction: "row",
|
|
242
|
-
divider: /*#__PURE__*/React__default[
|
|
256
|
+
divider: /*#__PURE__*/React__default["default"].createElement(index.Divider, {
|
|
243
257
|
orientation: "vertical",
|
|
244
258
|
flexItem: true,
|
|
245
259
|
sx: {
|
|
@@ -247,13 +261,13 @@ const UserProfileHeader = _ref => {
|
|
|
247
261
|
margin: "5px"
|
|
248
262
|
}
|
|
249
263
|
})
|
|
250
|
-
}, /*#__PURE__*/React__default[
|
|
264
|
+
}, /*#__PURE__*/React__default["default"].createElement(index.Text, {
|
|
251
265
|
color: "white.override",
|
|
252
266
|
fontSize: "16px"
|
|
253
|
-
}, userData === null || userData === void 0 ? void 0 : userData.followerCount, " Followers"), /*#__PURE__*/React__default[
|
|
267
|
+
}, userData === null || userData === void 0 ? void 0 : userData.followerCount, " Followers"), /*#__PURE__*/React__default["default"].createElement(index.Text, {
|
|
254
268
|
color: "white.override",
|
|
255
269
|
fontSize: "16px"
|
|
256
|
-
}, userData === null || userData === void 0 ? void 0 : userData.followingCount, " Following"))))), /*#__PURE__*/React__default[
|
|
270
|
+
}, userData === null || userData === void 0 ? void 0 : userData.followingCount, " Following"))))), /*#__PURE__*/React__default["default"].createElement(index.Stack, {
|
|
257
271
|
direction: "row",
|
|
258
272
|
backgroundColor: "grey2.main",
|
|
259
273
|
borderRadius: "8px",
|
|
@@ -261,10 +275,10 @@ const UserProfileHeader = _ref => {
|
|
|
261
275
|
alignItems: "center",
|
|
262
276
|
marginTop: "20px",
|
|
263
277
|
justifyContent: "space-around"
|
|
264
|
-
}, isOwner ? (userData === null || userData === void 0 ? void 0 : (_userData$socialLinks2 = userData.socialLinks) === null || _userData$socialLinks2 === void 0 ? void 0 : _userData$socialLinks2.length) === 0 ? /*#__PURE__*/React__default[
|
|
278
|
+
}, isOwner ? (userData === null || userData === void 0 ? void 0 : (_userData$socialLinks2 = userData.socialLinks) === null || _userData$socialLinks2 === void 0 ? void 0 : _userData$socialLinks2.length) === 0 ? /*#__PURE__*/React__default["default"].createElement(index.Button, {
|
|
265
279
|
variant: "text",
|
|
266
280
|
onClick: () => openEdit()
|
|
267
|
-
}, "+ New Social") : /*#__PURE__*/React__default[
|
|
281
|
+
}, "+ New Social") : /*#__PURE__*/React__default["default"].createElement(index.IconButton, {
|
|
268
282
|
sx: {
|
|
269
283
|
cursor: "pointer",
|
|
270
284
|
color: "notBlack.main",
|
|
@@ -275,9 +289,10 @@ const UserProfileHeader = _ref => {
|
|
|
275
289
|
}
|
|
276
290
|
},
|
|
277
291
|
onClick: () => openEdit()
|
|
278
|
-
}, /*#__PURE__*/React__default[
|
|
279
|
-
|
|
280
|
-
|
|
292
|
+
}, /*#__PURE__*/React__default["default"].createElement(Icon, {
|
|
293
|
+
path: paths.add,
|
|
294
|
+
size: "16px"
|
|
295
|
+
})) : /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null), renderSocialLinks()))));
|
|
281
296
|
};
|
|
282
297
|
|
|
283
298
|
module.exports = UserProfileHeader;
|
|
@@ -2,14 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
+
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
5
6
|
var React = require('react');
|
|
6
7
|
var index = require('./index.js');
|
|
7
8
|
var UserCard = require('./UserCard.js');
|
|
8
9
|
|
|
9
10
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
10
11
|
|
|
12
|
+
var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
|
|
11
13
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
12
14
|
|
|
15
|
+
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; }
|
|
16
|
+
|
|
17
|
+
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; }
|
|
13
18
|
const UsernameWithPopout = _ref => {
|
|
14
19
|
let {
|
|
15
20
|
user,
|
|
@@ -21,7 +26,7 @@ const UsernameWithPopout = _ref => {
|
|
|
21
26
|
} = _ref;
|
|
22
27
|
const [userCardRef, setUserCardRef] = React.useState(null);
|
|
23
28
|
const openUserCard = Boolean(userCardRef);
|
|
24
|
-
return /*#__PURE__*/React__default[
|
|
29
|
+
return /*#__PURE__*/React__default["default"].createElement(index.Stack, {
|
|
25
30
|
direction: "row",
|
|
26
31
|
onClick: e => {
|
|
27
32
|
setUserCardRef(e.target);
|
|
@@ -34,7 +39,7 @@ const UsernameWithPopout = _ref => {
|
|
|
34
39
|
onMouseLeave: e => {
|
|
35
40
|
setUserCardRef(null);
|
|
36
41
|
}
|
|
37
|
-
}, /*#__PURE__*/React__default[
|
|
42
|
+
}, /*#__PURE__*/React__default["default"].createElement(index.Popover, {
|
|
38
43
|
open: openUserCard,
|
|
39
44
|
anchorEl: userCardRef,
|
|
40
45
|
anchorOrigin: {
|
|
@@ -65,14 +70,14 @@ const UsernameWithPopout = _ref => {
|
|
|
65
70
|
}
|
|
66
71
|
} // onClose={() => setUserCardRef(null)}
|
|
67
72
|
|
|
68
|
-
}, /*#__PURE__*/React__default[
|
|
73
|
+
}, /*#__PURE__*/React__default["default"].createElement(UserCard.UserCard, {
|
|
69
74
|
onUsernameClick: onUsernameClick,
|
|
70
75
|
onFollowerClick: onFollowerClick,
|
|
71
76
|
onCreatedClick: onCreatedClick,
|
|
72
77
|
collapsed: collapsed,
|
|
73
78
|
user: user
|
|
74
|
-
})), /*#__PURE__*/React__default[
|
|
75
|
-
sx: {
|
|
79
|
+
})), /*#__PURE__*/React__default["default"].createElement(index.Text, {
|
|
80
|
+
sx: _objectSpread({
|
|
76
81
|
fontWeight: "300",
|
|
77
82
|
fontSize: "12px",
|
|
78
83
|
color: "grey7.main",
|
|
@@ -83,9 +88,8 @@ const UsernameWithPopout = _ref => {
|
|
|
83
88
|
cursor: "pointer",
|
|
84
89
|
"&:hover": {
|
|
85
90
|
textDecoration: "underline"
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
},
|
|
91
|
+
}
|
|
92
|
+
}, textStyle),
|
|
89
93
|
onClick: onUsernameClick
|
|
90
94
|
}, user === null || user === void 0 ? void 0 : user.username));
|
|
91
95
|
};
|
package/dist/cjs/colors.js
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
+
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
6
|
+
|
|
7
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
8
|
+
|
|
9
|
+
var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
|
|
10
|
+
|
|
11
|
+
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; }
|
|
12
|
+
|
|
13
|
+
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; }
|
|
14
|
+
|
|
5
15
|
let colors = {
|
|
6
16
|
white: "#ffffff",
|
|
7
17
|
waxing: "#F3F3F3",
|
|
@@ -72,10 +82,8 @@ let overrideColors = {
|
|
|
72
82
|
buntingBlueOverride: colors.buntingBlue,
|
|
73
83
|
popnYellowOverride: colors.popnYellow
|
|
74
84
|
};
|
|
75
|
-
const lightColors = {
|
|
76
|
-
|
|
77
|
-
};
|
|
78
|
-
const darkColors = {
|
|
85
|
+
const lightColors = _objectSpread(_objectSpread({}, colors), overrideColors);
|
|
86
|
+
const darkColors = _objectSpread({
|
|
79
87
|
white: colors.black,
|
|
80
88
|
waxwing: colors.grey8Dark,
|
|
81
89
|
grey1: colors.grey1Dark,
|
|
@@ -97,9 +105,8 @@ const darkColors = {
|
|
|
97
105
|
seafoam: colors.seafoam,
|
|
98
106
|
seafoamDark: colors.seafoamDark,
|
|
99
107
|
buntingBlue: colors.buntingBlue,
|
|
100
|
-
popnYellow: colors.popnYellow
|
|
101
|
-
|
|
102
|
-
};
|
|
108
|
+
popnYellow: colors.popnYellow
|
|
109
|
+
}, overrideColors);
|
|
103
110
|
const lightPalette = {
|
|
104
111
|
primary: {
|
|
105
112
|
light: colors.ibisRed,
|
|
@@ -362,7 +369,7 @@ const darkPalette = {
|
|
|
362
369
|
|
|
363
370
|
exports.darkColors = darkColors;
|
|
364
371
|
exports.darkPalette = darkPalette;
|
|
365
|
-
exports
|
|
372
|
+
exports["default"] = colors;
|
|
366
373
|
exports.lightColors = lightColors;
|
|
367
374
|
exports.lightPalette = lightPalette;
|
|
368
375
|
exports.overrideColors = overrideColors;
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var React = require('react');
|
|
6
|
+
|
|
7
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
8
|
+
|
|
9
|
+
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
10
|
+
|
|
11
|
+
// Remove this import:
|
|
12
|
+
|
|
13
|
+
const extractDominantColor = (imageUrl, callback) => {
|
|
14
|
+
const img = new Image();
|
|
15
|
+
img.crossOrigin = "Anonymous";
|
|
16
|
+
img.src = imageUrl;
|
|
17
|
+
|
|
18
|
+
img.onload = () => {
|
|
19
|
+
const canvas = document.createElement("canvas");
|
|
20
|
+
const ctx = canvas.getContext("2d");
|
|
21
|
+
canvas.width = img.width;
|
|
22
|
+
canvas.height = img.height;
|
|
23
|
+
ctx.drawImage(img, 0, 0);
|
|
24
|
+
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
|
|
25
|
+
const data = imageData.data;
|
|
26
|
+
let r = 0,
|
|
27
|
+
g = 0,
|
|
28
|
+
b = 0;
|
|
29
|
+
|
|
30
|
+
for (let i = 0; i < data.length; i += 4) {
|
|
31
|
+
r += data[i];
|
|
32
|
+
g += data[i + 1];
|
|
33
|
+
b += data[i + 2];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const pixelCount = data.length / 4;
|
|
37
|
+
r = Math.floor(r / pixelCount);
|
|
38
|
+
g = Math.floor(g / pixelCount);
|
|
39
|
+
b = Math.floor(b / pixelCount);
|
|
40
|
+
callback(["rgb(".concat(r, ", ").concat(g, ", ").concat(b, ")")]);
|
|
41
|
+
};
|
|
42
|
+
}; // Custom palette extraction for components that need vibrant/darkVibrant colors
|
|
43
|
+
|
|
44
|
+
const useCustomPalette = imageUrl => {
|
|
45
|
+
const [palette, setPalette] = React__default["default"].useState({
|
|
46
|
+
loading: true,
|
|
47
|
+
data: {
|
|
48
|
+
vibrant: null,
|
|
49
|
+
darkVibrant: null
|
|
50
|
+
},
|
|
51
|
+
error: null
|
|
52
|
+
});
|
|
53
|
+
React__default["default"].useEffect(() => {
|
|
54
|
+
if (!imageUrl) {
|
|
55
|
+
setPalette({
|
|
56
|
+
loading: false,
|
|
57
|
+
data: {
|
|
58
|
+
vibrant: null,
|
|
59
|
+
darkVibrant: null
|
|
60
|
+
},
|
|
61
|
+
error: null
|
|
62
|
+
});
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const img = new Image();
|
|
67
|
+
img.crossOrigin = "Anonymous";
|
|
68
|
+
img.src = imageUrl;
|
|
69
|
+
|
|
70
|
+
img.onload = () => {
|
|
71
|
+
try {
|
|
72
|
+
const canvas = document.createElement("canvas");
|
|
73
|
+
const ctx = canvas.getContext("2d");
|
|
74
|
+
canvas.width = img.width;
|
|
75
|
+
canvas.height = img.height;
|
|
76
|
+
ctx.drawImage(img, 0, 0);
|
|
77
|
+
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
|
|
78
|
+
const data = imageData.data;
|
|
79
|
+
let r = 0,
|
|
80
|
+
g = 0,
|
|
81
|
+
b = 0;
|
|
82
|
+
|
|
83
|
+
for (let i = 0; i < data.length; i += 4) {
|
|
84
|
+
r += data[i];
|
|
85
|
+
g += data[i + 1];
|
|
86
|
+
b += data[i + 2];
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const pixelCount = data.length / 4;
|
|
90
|
+
r = Math.floor(r / pixelCount);
|
|
91
|
+
g = Math.floor(g / pixelCount);
|
|
92
|
+
b = Math.floor(b / pixelCount);
|
|
93
|
+
const vibrant = "rgb(".concat(Math.min(r + 20, 255), ", ").concat(Math.min(g + 20, 255), ", ").concat(Math.min(b + 20, 255), ")");
|
|
94
|
+
const darkVibrant = "rgb(".concat(Math.floor(r * 0.6), ", ").concat(Math.floor(g * 0.6), ", ").concat(Math.floor(b * 0.6), ")");
|
|
95
|
+
setPalette({
|
|
96
|
+
loading: false,
|
|
97
|
+
data: {
|
|
98
|
+
vibrant,
|
|
99
|
+
darkVibrant
|
|
100
|
+
},
|
|
101
|
+
error: null
|
|
102
|
+
});
|
|
103
|
+
} catch (error) {
|
|
104
|
+
console.error("Palette extraction failed:", error);
|
|
105
|
+
setPalette({
|
|
106
|
+
loading: false,
|
|
107
|
+
data: {
|
|
108
|
+
vibrant: null,
|
|
109
|
+
darkVibrant: null
|
|
110
|
+
},
|
|
111
|
+
error: error.message
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
img.onerror = () => {
|
|
117
|
+
setPalette({
|
|
118
|
+
loading: false,
|
|
119
|
+
data: {
|
|
120
|
+
vibrant: null,
|
|
121
|
+
darkVibrant: null
|
|
122
|
+
},
|
|
123
|
+
error: "Image failed to load"
|
|
124
|
+
});
|
|
125
|
+
};
|
|
126
|
+
}, [imageUrl]);
|
|
127
|
+
return palette;
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
exports.extractDominantColor = extractDominantColor;
|
|
131
|
+
exports.useCustomPalette = useCustomPalette;
|