From 97ecb7742094fe57aef3c1b10a9effa80f72e2a7 Mon Sep 17 00:00:00 2001 From: Sai Tharun Dusa Date: Thu, 19 Sep 2024 11:12:23 -0700 Subject: [PATCH 1/2] Feature: Introduction of Masonry Layout --- desktop-app/src/common/constants.ts | 1 + .../components/Masonry/MasonryLayout.tsx | 44 +++++++++ .../renderer/components/Previewer/index.tsx | 99 +++++++++++++------ .../components/ToolBar/Menu/Flyout/index.tsx | 3 + 4 files changed, 119 insertions(+), 28 deletions(-) create mode 100644 desktop-app/src/renderer/components/Masonry/MasonryLayout.tsx diff --git a/desktop-app/src/common/constants.ts b/desktop-app/src/common/constants.ts index d06dbbca7..6a04890c3 100644 --- a/desktop-app/src/common/constants.ts +++ b/desktop-app/src/common/constants.ts @@ -10,6 +10,7 @@ export const PREVIEW_LAYOUTS = { COLUMN: 'COLUMN', FLEX: 'FLEX', INDIVIDUAL: 'INDIVIDUAL', + MASONRY: 'MASONRY', } as const; export type PreviewLayout = diff --git a/desktop-app/src/renderer/components/Masonry/MasonryLayout.tsx b/desktop-app/src/renderer/components/Masonry/MasonryLayout.tsx new file mode 100644 index 000000000..710c52202 --- /dev/null +++ b/desktop-app/src/renderer/components/Masonry/MasonryLayout.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { Icon } from '@iconify/react'; +import { PREVIEW_LAYOUTS } from 'common/constants'; +import { useDispatch, useSelector } from 'react-redux'; +import useKeyboardShortcut, { + SHORTCUT_CHANNEL, +} from 'renderer/components/KeyboardShortcutsManager/useKeyboardShortcut'; +import Toggle from 'renderer/components/Toggle'; +import { selectLayout, setLayout } from 'renderer/store/features/renderer'; + +const MasonryLayout = () => { + const layout = useSelector(selectLayout); + const dispatch = useDispatch(); + + const handleLayout = () => { + if (layout === PREVIEW_LAYOUTS.MASONRY) + dispatch(setLayout(PREVIEW_LAYOUTS.FLEX)); + else dispatch(setLayout(PREVIEW_LAYOUTS.MASONRY)); + }; + + useKeyboardShortcut(SHORTCUT_CHANNEL.PREVIEW_LAYOUT, handleLayout); + + return ( +
+ Masonry Layout +
+ + { + if (e.target.checked) { + dispatch(setLayout(PREVIEW_LAYOUTS.MASONRY)); + } else { + dispatch(setLayout(PREVIEW_LAYOUTS.COLUMN)); + } + }} + /> + +
+
+ ); +}; + +export default MasonryLayout; diff --git a/desktop-app/src/renderer/components/Previewer/index.tsx b/desktop-app/src/renderer/components/Previewer/index.tsx index 62e87e20d..03b8e8f4c 100644 --- a/desktop-app/src/renderer/components/Previewer/index.tsx +++ b/desktop-app/src/renderer/components/Previewer/index.tsx @@ -9,10 +9,26 @@ import { import { getDevicesMap, Device as IDevice } from 'common/deviceList'; import { useState } from 'react'; import { selectLayout } from 'renderer/store/features/renderer'; +import Masonry from 'react-masonry-component'; import Device from './Device'; import DevtoolsResizer from './DevtoolsResizer'; import IndividualLayoutToolbar from './IndividualLayoutToolBar'; +interface MasonryProps { + options?: { + transitionDuration: number; + itemSelector?: string; + gutter?: number; + fitWidth?: boolean; + horizontalOrder?: boolean; + }; + className?: string; + elementType?: string; + children: React.ReactNode; +} + +const TypedMasonry: React.FC = Masonry as any; + const Previewer = () => { const activeSuite = useSelector(selectActiveSuite); const devices = activeSuite.devices.map((id) => getDevicesMap()[id]); @@ -20,8 +36,15 @@ const Previewer = () => { const isDevtoolsOpen = useSelector(selectIsDevtoolsOpen); const layout = useSelector(selectLayout); const [individualDevice, setIndividualDevice] = useState(devices[0]); - const isIndividualLayout = layout === PREVIEW_LAYOUTS.INDIVIDUAL; + const isMasonryLayout = layout === PREVIEW_LAYOUTS.MASONRY; // New state for Masonry layout + + const masonryOptions = { + columnWidth: 275, + gutter: 0, + fitWidth: true, + transitionDuration: 0, + }; return (
@@ -40,33 +63,53 @@ const Previewer = () => { 'justify-center': isIndividualLayout, })} > -
- {isIndividualLayout ? ( - <> - - - ) : ( - <> - {devices.map((device, idx) => ( - - ))} - - )} +
+
+ {isMasonryLayout ? ( + + {devices.map((device) => ( +
+ +
+ ))} +
+ ) : ( +
+ {isIndividualLayout ? ( + + ) : ( + devices.map((device, idx) => ( + + )) + )} +
+ )} +
{isDevtoolsOpen && dockPosition !== DOCK_POSITION.UNDOCKED ? ( diff --git a/desktop-app/src/renderer/components/ToolBar/Menu/Flyout/index.tsx b/desktop-app/src/renderer/components/ToolBar/Menu/Flyout/index.tsx index a05a7c872..a4ac6d3ac 100644 --- a/desktop-app/src/renderer/components/ToolBar/Menu/Flyout/index.tsx +++ b/desktop-app/src/renderer/components/ToolBar/Menu/Flyout/index.tsx @@ -2,6 +2,7 @@ import { useDispatch } from 'react-redux'; import Button from 'renderer/components/Button'; import { APP_VIEWS, setAppView } from 'renderer/store/features/ui'; +import MasonryLayout from 'renderer/components/Masonry/MasonryLayout'; import Devtools from './Devtools'; import UITheme from './UITheme'; import Zoom from './Zoom'; @@ -26,11 +27,13 @@ const MenuFlyout = ({ closeFlyout }: Props) => {
+ +
From b04b96c3b31870e441560efa88ccce7dc5c5db20 Mon Sep 17 00:00:00 2001 From: Sai Tharun Dusa Date: Thu, 19 Sep 2024 11:22:02 -0700 Subject: [PATCH 2/2] Masonry: auto-generated package.json files --- desktop-app/package-lock.json | 104 +++++++++++++- desktop-app/package.json | 1 + desktop-app/release/app/package-lock.json | 4 +- desktop-app/release/app/yarn.lock | 5 + desktop-app/yarn.lock | 168 +++++++++++++++++++++- 5 files changed, 271 insertions(+), 11 deletions(-) diff --git a/desktop-app/package-lock.json b/desktop-app/package-lock.json index c7c563011..db4ad2803 100644 --- a/desktop-app/package-lock.json +++ b/desktop-app/package-lock.json @@ -1,12 +1,12 @@ { "name": "Responsively-App", - "version": "1.13.0", + "version": "1.15.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "Responsively-App", - "version": "1.13.0", + "version": "1.15.0", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -38,6 +38,7 @@ "react-dnd-html5-backend": "^16.0.1", "react-dom": "^18.2.0", "react-markdown": "^8.0.7", + "react-masonry-component": "^6.3.0", "react-redux": "^8.0.5", "react-router-dom": "^6.3.0", "react-tabs": "^6.0.2", @@ -7139,6 +7140,12 @@ "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "license": "MIT" }, + "node_modules/batch-processor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz", + "integrity": "sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA==", + "license": "MIT" + }, "node_modules/beeper": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", @@ -8968,6 +8975,16 @@ "buffer": "^5.1.0" } }, + "node_modules/create-react-class": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz", + "integrity": "sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -9844,6 +9861,12 @@ "node": ">=6" } }, + "node_modules/desandro-matches-selector": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/desandro-matches-selector/-/desandro-matches-selector-2.0.2.tgz", + "integrity": "sha512-+1q0nXhdzg1IpIJdMKalUwvvskeKnYyEe3shPRwedNcWtnhEKT3ZxvFjzywHDeGcKViIxTCAoOYQWP1qD7VNyg==", + "license": "MIT" + }, "node_modules/destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", @@ -10723,6 +10746,15 @@ "node": ">=8" } }, + "node_modules/element-resize-detector": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.4.tgz", + "integrity": "sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==", + "license": "MIT", + "dependencies": { + "batch-processor": "1.0.0" + } + }, "node_modules/emitter": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/emitter/-/emitter-0.0.5.tgz", @@ -12354,6 +12386,12 @@ "node": ">= 0.6" } }, + "node_modules/ev-emitter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ev-emitter/-/ev-emitter-1.1.1.tgz", + "integrity": "sha512-ipiDYhdQSCZ4hSbX4rMW+XzNKMD1prg/sTvoVmSLkuQ1MVlwjJQQA+sW8tMYR3BLUr9KjodFV4pvzunvRhd33Q==", + "license": "MIT" + }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -13332,6 +13370,15 @@ "node": ">=0.10.0" } }, + "node_modules/fizzy-ui-utils": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fizzy-ui-utils/-/fizzy-ui-utils-2.0.7.tgz", + "integrity": "sha512-CZXDVXQ1If3/r8s0T+v+qVeMshhfcuq0rqIFgJnrtd+Bu8GmDmqMjntjUePypVtjHXKJ6V4sw9zeyox34n9aCg==", + "license": "MIT", + "dependencies": { + "desandro-matches-selector": "^2.0.0" + } + }, "node_modules/flagged-respawn": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", @@ -13686,6 +13733,12 @@ "node": ">=8.0.0" } }, + "node_modules/get-size": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/get-size/-/get-size-2.0.3.tgz", + "integrity": "sha512-lXNzT/h/dTjTxRbm9BXb+SGxxzkm97h/PCIKtlN/CBCxxmkkIVV21udumMS93MuVTDX583gqc94v3RjuHmI+2Q==", + "license": "MIT" + }, "node_modules/get-stdin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", @@ -15204,6 +15257,15 @@ "node": ">= 4" } }, + "node_modules/imagesloaded": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/imagesloaded/-/imagesloaded-4.1.4.tgz", + "integrity": "sha512-ltiBVcYpc/TYTF5nolkMNsnREHW+ICvfQ3Yla2Sgr71YFwQ86bDwV9hgpFhFtrGPuwEx5+LqOHIrdXBdoWwwsA==", + "license": "MIT", + "dependencies": { + "ev-emitter": "^1.0.0" + } + }, "node_modules/immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", @@ -18734,6 +18796,16 @@ "node": ">=0.10.0" } }, + "node_modules/masonry-layout": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/masonry-layout/-/masonry-layout-4.2.2.tgz", + "integrity": "sha512-iGtAlrpHNyxaR19CvKC3npnEcAwszXoyJiI8ARV2ePi7fmYhIud25MHK8Zx4P0LCC4d3TNO9+rFa1KoK1OEOaA==", + "license": "MIT", + "dependencies": { + "get-size": "^2.0.2", + "outlayer": "^2.1.0" + } + }, "node_modules/matcher": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", @@ -20487,6 +20559,17 @@ "node": ">=0.10.0" } }, + "node_modules/outlayer": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/outlayer/-/outlayer-2.1.1.tgz", + "integrity": "sha512-+GplXsCQ3VrbGujAeHEzP9SXsBmJxzn/YdDSQZL0xqBmAWBmortu2Y9Gwdp9J0bgDQ8/YNIPMoBM13nTwZfAhw==", + "license": "MIT", + "dependencies": { + "ev-emitter": "^1.0.0", + "fizzy-ui-utils": "^2.0.0", + "get-size": "^2.0.2" + } + }, "node_modules/output-file-sync": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", @@ -22335,6 +22418,23 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "license": "MIT" }, + "node_modules/react-masonry-component": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/react-masonry-component/-/react-masonry-component-6.3.0.tgz", + "integrity": "sha512-4ZI78nxMfCpU5yQiS6Rup07Ju++YzcOGAyvbMcl2GfpZTw8GRwT548lkKr0PJarNicRV1qE2D/NiT26UPg1T7A==", + "license": "MIT", + "dependencies": { + "create-react-class": "^15.6.2", + "element-resize-detector": "^1.1.9", + "imagesloaded": "^4.0.0", + "lodash": "^4.17.4", + "masonry-layout": "^4.2.0", + "prop-types": "^15.5.8" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.0-0 || ^16.0.0-0 || ^17.0.0" + } + }, "node_modules/react-redux": { "version": "8.0.5", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.5.tgz", diff --git a/desktop-app/package.json b/desktop-app/package.json index 11d5e406b..c825d14ec 100644 --- a/desktop-app/package.json +++ b/desktop-app/package.json @@ -101,6 +101,7 @@ "react-dnd-html5-backend": "^16.0.1", "react-dom": "^18.2.0", "react-markdown": "^8.0.7", + "react-masonry-component": "^6.3.0", "react-redux": "^8.0.5", "react-router-dom": "^6.3.0", "react-tabs": "^6.0.2", diff --git a/desktop-app/release/app/package-lock.json b/desktop-app/release/app/package-lock.json index e5923ea40..f0bf97bf0 100644 --- a/desktop-app/release/app/package-lock.json +++ b/desktop-app/release/app/package-lock.json @@ -1,12 +1,12 @@ { "name": "ResponsivelyApp", - "version": "1.13.0", + "version": "1.15.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "ResponsivelyApp", - "version": "1.13.0", + "version": "1.15.0", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/desktop-app/release/app/yarn.lock b/desktop-app/release/app/yarn.lock index aade561b5..a95ee0a19 100644 --- a/desktop-app/release/app/yarn.lock +++ b/desktop-app/release/app/yarn.lock @@ -470,6 +470,11 @@ fs-extra@3.0.1: jsonfile "^3.0.0" universalify "^0.1.0" +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" diff --git a/desktop-app/yarn.lock b/desktop-app/yarn.lock index 2133e0089..6d140a485 100644 --- a/desktop-app/yarn.lock +++ b/desktop-app/yarn.lock @@ -2298,6 +2298,14 @@ resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== +"@types/plist@^3.0.1": + version "3.0.2" + resolved "https://registry.npmjs.org/@types/plist/-/plist-3.0.2.tgz" + integrity sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw== + dependencies: + "@types/node" "*" + xmlbuilder ">=11.0.1" + "@types/prettier@^2.1.5": version "2.7.1" resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz" @@ -2417,6 +2425,11 @@ resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.2.tgz" integrity sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ== +"@types/verror@^1.10.3": + version "1.10.6" + resolved "https://registry.npmjs.org/@types/verror/-/verror-1.10.6.tgz" + integrity sha512-NNm+gdePAX1VGvPcGZCDKQZKYSiAWigKhKaz5KF94hG6f2s8de9Ow5+7AbXoeKxL8gavZfk4UquSAygOF2duEQ== + "@types/webpack-bundle-analyzer@^4.4.2": version "4.6.0" resolved "https://registry.npmjs.org/@types/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.6.0.tgz" @@ -3254,6 +3267,11 @@ asar@^3.1.0: optionalDependencies: "@types/glob" "^7.1.1" +assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz" @@ -3620,6 +3638,11 @@ base64id@~2.0.0, base64id@2.0.0: resolved "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz" integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== +batch-processor@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz" + integrity sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA== + batch@0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz" @@ -3871,7 +3894,7 @@ buffer-from@^1.0.0: resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer@^5.5.0: +buffer@^5.1.0, buffer@^5.5.0: version "5.7.1" resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -4600,6 +4623,11 @@ core-util-is@~1.0.0: resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + cors@~2.8.5: version "2.8.5" resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" @@ -4629,6 +4657,21 @@ cosmiconfig@^8.1.3: parse-json "^5.0.0" path-type "^4.0.0" +crc@^3.8.0: + version "3.8.0" + resolved "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz" + integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== + dependencies: + buffer "^5.1.0" + +create-react-class@^15.6.2: + version "15.7.0" + resolved "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz" + integrity sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng== + dependencies: + loose-envify "^1.3.1" + object-assign "^4.1.1" + create-require@^1.1.0: version "1.1.1" resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" @@ -5124,6 +5167,11 @@ dequal@^2.0.0: resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== +desandro-matches-selector@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/desandro-matches-selector/-/desandro-matches-selector-2.0.2.tgz" + integrity sha512-+1q0nXhdzg1IpIJdMKalUwvvskeKnYyEe3shPRwedNcWtnhEKT3ZxvFjzywHDeGcKViIxTCAoOYQWP1qD7VNyg== + destroy@~1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz" @@ -5254,6 +5302,20 @@ dmg-builder@23.6.0: optionalDependencies: dmg-license "^1.0.11" +dmg-license@^1.0.11: + version "1.0.11" + resolved "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz" + integrity sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q== + dependencies: + "@types/plist" "^3.0.1" + "@types/verror" "^1.10.3" + ajv "^6.10.0" + crc "^3.8.0" + iconv-corefoundation "^1.1.7" + plist "^3.0.4" + smart-buffer "^4.0.2" + verror "^1.10.0" + dnd-core@^16.0.1: version "16.0.1" resolved "https://registry.npmjs.org/dnd-core/-/dnd-core-16.0.1.tgz" @@ -5579,6 +5641,13 @@ electronmon@^2.0.2: runtime-required "^1.1.0" watchboy "^0.4.3" +element-resize-detector@^1.1.9: + version "1.2.4" + resolved "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.4.tgz" + integrity sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg== + dependencies: + batch-processor "1.0.0" + emitter@^0.0.5: version "0.0.5" resolved "https://registry.npmjs.org/emitter/-/emitter-0.0.5.tgz" @@ -6239,6 +6308,11 @@ etag@^1.8.1, etag@~1.8.1, etag@1.8.1: resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== +ev-emitter@^1.0.0: + version "1.1.1" + resolved "https://registry.npmjs.org/ev-emitter/-/ev-emitter-1.1.1.tgz" + integrity sha512-ipiDYhdQSCZ4hSbX4rMW+XzNKMD1prg/sTvoVmSLkuQ1MVlwjJQQA+sW8tMYR3BLUr9KjodFV4pvzunvRhd33Q== + eventemitter3@^4.0.0: version "4.0.7" resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" @@ -6397,6 +6471,11 @@ extract-zip@^2.0.1: optionalDependencies: "@types/yauzl" "^2.9.1" +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + fancy-log@^1.1.0: version "1.3.3" resolved "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz" @@ -6603,6 +6682,13 @@ first-chunk-stream@^1.0.0: resolved "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz" integrity sha512-ArRi5axuv66gEsyl3UuK80CzW7t56hem73YGNYxNWTGNKFJUadSb9Gu9SHijYEUi8ulQMf1bJomYNwSCPHhtTQ== +fizzy-ui-utils@^2.0.0: + version "2.0.7" + resolved "https://registry.npmjs.org/fizzy-ui-utils/-/fizzy-ui-utils-2.0.7.tgz" + integrity sha512-CZXDVXQ1If3/r8s0T+v+qVeMshhfcuq0rqIFgJnrtd+Bu8GmDmqMjntjUePypVtjHXKJ6V4sw9zeyox34n9aCg== + dependencies: + desandro-matches-selector "^2.0.0" + flagged-respawn@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz" @@ -6749,6 +6835,11 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== +fsevents@^2.3.2, fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" @@ -6827,6 +6918,11 @@ get-package-type@^0.1.0: resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== +get-size@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/get-size/-/get-size-2.0.3.tgz" + integrity sha512-lXNzT/h/dTjTxRbm9BXb+SGxxzkm97h/PCIKtlN/CBCxxmkkIVV21udumMS93MuVTDX583gqc94v3RjuHmI+2Q== + get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz" @@ -7547,6 +7643,14 @@ husky@^8.0.3: resolved "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz" integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== +iconv-corefoundation@^1.1.7: + version "1.1.7" + resolved "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz" + integrity sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ== + dependencies: + cli-truncate "^2.1.0" + node-addon-api "^1.6.3" + iconv-lite@^0.4.5: version "0.4.24" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" @@ -7590,6 +7694,13 @@ ignore@^5.1.8, ignore@^5.2.0: resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== +imagesloaded@^4.0.0: + version "4.1.4" + resolved "https://registry.npmjs.org/imagesloaded/-/imagesloaded-4.1.4.tgz" + integrity sha512-ltiBVcYpc/TYTF5nolkMNsnREHW+ICvfQ3Yla2Sgr71YFwQ86bDwV9hgpFhFtrGPuwEx5+LqOHIrdXBdoWwwsA== + dependencies: + ev-emitter "^1.0.0" + immediate@~3.0.5: version "3.0.6" resolved "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz" @@ -9247,7 +9358,7 @@ lodash@^3.9.3: resolved "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz" integrity sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ== -lodash@^4.17.10, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21: +lodash@^4.17.10, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4: version "4.17.21" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -9280,7 +9391,7 @@ longest@^1.0.1: resolved "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz" integrity sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg== -loose-envify@^1.1.0, loose-envify@^1.4.0: +loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -9398,6 +9509,14 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +masonry-layout@^4.2.0: + version "4.2.2" + resolved "https://registry.npmjs.org/masonry-layout/-/masonry-layout-4.2.2.tgz" + integrity sha512-iGtAlrpHNyxaR19CvKC3npnEcAwszXoyJiI8ARV2ePi7fmYhIud25MHK8Zx4P0LCC4d3TNO9+rFa1KoK1OEOaA== + dependencies: + get-size "^2.0.2" + outlayer "^2.1.0" + matcher@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz" @@ -10055,6 +10174,11 @@ node-abi@^3.0.0: dependencies: semver "^7.3.5" +node-addon-api@^1.6.3: + version "1.7.2" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz" + integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg== + node-api-version@^0.1.4: version "0.1.4" resolved "https://registry.npmjs.org/node-api-version/-/node-api-version-0.1.4.tgz" @@ -10442,6 +10566,15 @@ os@^0.1.2: resolved "https://registry.npmjs.org/os/-/os-0.1.2.tgz" integrity sha512-ZoXJkvAnljwvc56MbvhtKVWmSkzV712k42Is2mA0+0KTSRakq5XXuXpjZjgAt9ctzl51ojhQWakQQpmOvXWfjQ== +outlayer@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/outlayer/-/outlayer-2.1.1.tgz" + integrity sha512-+GplXsCQ3VrbGujAeHEzP9SXsBmJxzn/YdDSQZL0xqBmAWBmortu2Y9Gwdp9J0bgDQ8/YNIPMoBM13nTwZfAhw== + dependencies: + ev-emitter "^1.0.0" + fizzy-ui-utils "^2.0.0" + get-size "^2.0.2" + output-file-sync@^1.1.0: version "1.1.2" resolved "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz" @@ -11135,7 +11268,7 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.0.0, prop-types@^15.5.0, prop-types@^15.8.1: +prop-types@^15.0.0, prop-types@^15.5.0, prop-types@^15.5.8, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -11314,6 +11447,18 @@ react-markdown@^8.0.7: unist-util-visit "^4.0.0" vfile "^5.0.0" +react-masonry-component@^6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/react-masonry-component/-/react-masonry-component-6.3.0.tgz" + integrity sha512-4ZI78nxMfCpU5yQiS6Rup07Ju++YzcOGAyvbMcl2GfpZTw8GRwT548lkKr0PJarNicRV1qE2D/NiT26UPg1T7A== + dependencies: + create-react-class "^15.6.2" + element-resize-detector "^1.1.9" + imagesloaded "^4.0.0" + lodash "^4.17.4" + masonry-layout "^4.2.0" + prop-types "^15.5.8" + "react-redux@^7.2.1 || ^8.0.2", react-redux@^8.0.5: version "8.0.5" resolved "https://registry.npmjs.org/react-redux/-/react-redux-8.0.5.tgz" @@ -11371,7 +11516,7 @@ react-test-renderer@^18.2.0: react-shallow-renderer "^16.15.0" scheduler "^0.23.0" -"react@^16 || ^17 || ^18", "react@^16.0.0 || ^17.0.0 || ^18.0.0", "react@^16.13.1 || ^17.0.0 || ^18.0.0", "react@^16.8 || ^17.0 || ^18.0", "react@^16.8.0 || ^17 || ^18", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^16.9.0 || ^17.0.0 || ^18", react@^18.0.0, react@^18.2.0, "react@>= 16.14", react@>=16, react@>=16.13.1, react@>=16.8, react@>=16.8.0: +"react@^0.14.0 || ^15.0.0-0 || ^16.0.0-0 || ^17.0.0", "react@^16 || ^17 || ^18", "react@^16.0.0 || ^17.0.0 || ^18.0.0", "react@^16.13.1 || ^17.0.0 || ^18.0.0", "react@^16.8 || ^17.0 || ^18.0", "react@^16.8.0 || ^17 || ^18", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^16.9.0 || ^17.0.0 || ^18", react@^18.0.0, react@^18.2.0, "react@>= 16.14", react@>=16, react@>=16.13.1, react@>=16.8, react@>=16.8.0: version "18.2.0" resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== @@ -12362,7 +12507,7 @@ slice-ansi@^5.0.0: ansi-styles "^6.0.0" is-fullwidth-code-point "^4.0.0" -smart-buffer@^4.2.0: +smart-buffer@^4.0.2, smart-buffer@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== @@ -13685,6 +13830,15 @@ vary@^1, vary@~1.1.2: resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== +verror@^1.10.0: + version "1.10.1" + resolved "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz" + integrity sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + vfile-message@^3.0.0: version "3.1.3" resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.3.tgz" @@ -14089,7 +14243,7 @@ xml-name-validator@^4.0.0: resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz" integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== -xmlbuilder@^15.1.1: +xmlbuilder@^15.1.1, xmlbuilder@>=11.0.1: version "15.1.1" resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz" integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==