diff --git a/apps/studio-prototype/package.json b/apps/studio-prototype/package.json index 025f9affb6e..2adca9f9bdf 100644 --- a/apps/studio-prototype/package.json +++ b/apps/studio-prototype/package.json @@ -16,6 +16,7 @@ "next-themes": "^0.3.0", "react": "^18", "react-dom": "^18", + "react-hotkeys-hook": "^4.5.0", "ui": "*" }, "devDependencies": { diff --git a/apps/studio-prototype/src/app/[org]/side-nav-menu-icon.tsx b/apps/studio-prototype/src/app/[org]/side-nav-menu-icon.tsx index 9a06e0242ad..24bc32f02ca 100644 --- a/apps/studio-prototype/src/app/[org]/side-nav-menu-icon.tsx +++ b/apps/studio-prototype/src/app/[org]/side-nav-menu-icon.tsx @@ -25,13 +25,7 @@ export default function SideNavMenuIcon({ product }: { product: any }) {
diff --git a/apps/studio-prototype/src/app/[org]/table-editor/[id]/page.tsx b/apps/studio-prototype/src/app/[org]/table-editor/[id]/page.tsx new file mode 100644 index 00000000000..34fdbc4cf2e --- /dev/null +++ b/apps/studio-prototype/src/app/[org]/table-editor/[id]/page.tsx @@ -0,0 +1,5 @@ +'use client' + +export default function EditorIdRender() { + return
+} diff --git a/apps/studio-prototype/src/app/[org]/table-editor/layout.tsx b/apps/studio-prototype/src/app/[org]/table-editor/layout.tsx index 4c1a78f7e71..a3a08b73533 100644 --- a/apps/studio-prototype/src/app/[org]/table-editor/layout.tsx +++ b/apps/studio-prototype/src/app/[org]/table-editor/layout.tsx @@ -1,3 +1,4 @@ +import TabHeader from './tab-header' import TableEditorItemsPanel from './table-editor-items-panel' export default function TableEditorLayout({ @@ -8,7 +9,10 @@ export default function TableEditorLayout({ return (
- {children} +
+ + {children} +
) } diff --git a/apps/studio-prototype/src/app/[org]/table-editor/page.tsx b/apps/studio-prototype/src/app/[org]/table-editor/page.tsx index b7e065e267e..72f089f8e59 100644 --- a/apps/studio-prototype/src/app/[org]/table-editor/page.tsx +++ b/apps/studio-prototype/src/app/[org]/table-editor/page.tsx @@ -1,7 +1,8 @@ +import TabHeader from './tab-header' + export default function TableEditorPage() { return (
-
table editor
) diff --git a/apps/studio-prototype/src/app/[org]/table-editor/tab-header.tsx b/apps/studio-prototype/src/app/[org]/table-editor/tab-header.tsx new file mode 100644 index 00000000000..f63403afc2d --- /dev/null +++ b/apps/studio-prototype/src/app/[org]/table-editor/tab-header.tsx @@ -0,0 +1,48 @@ +'use client' + +import { useConfig } from '@/src/hooks/use-config' +import { PanelLeftClose, PanelLeftOpen } from 'lucide-react' +import { cn } from 'ui' + +export default function TabHeader() { + const [config, setConfig] = useConfig() + return ( +
+ {config.tableEditor.sidePanelOpen ? ( + + setConfig({ + ...config, + tableEditor: { + ...config.tableEditor, + sidePanelOpen: false, + }, + }) + } + /> + ) : ( + + setConfig({ + ...config, + tableEditor: { + ...config.tableEditor, + sidePanelOpen: true, + }, + }) + } + /> + )} +
+ ) +} diff --git a/apps/studio-prototype/src/app/[org]/table-editor/table-editor-items-panel.tsx b/apps/studio-prototype/src/app/[org]/table-editor/table-editor-items-panel.tsx index 40359b2f471..1749c7707eb 100644 --- a/apps/studio-prototype/src/app/[org]/table-editor/table-editor-items-panel.tsx +++ b/apps/studio-prototype/src/app/[org]/table-editor/table-editor-items-panel.tsx @@ -1,24 +1,42 @@ 'use client' +import { useConfig } from '@/src/hooks/use-config' +import useShortcut from '@/src/hooks/use-shortcut' import { useParams, usePathname } from 'next/navigation' import { cn } from 'ui' +import { useHotkeys } from 'react-hotkeys-hook' export default function TableEditorItemsPanel() { const { org } = useParams() const pathname = usePathname() - const isActive = pathname === `/${org}/table-editor` + const [config, setConfig] = useConfig() + const isActive = config.tableEditor.sidePanelOpen + + useHotkeys( + 'meta+b', + () => + setConfig((prev) => ({ + ...prev, + tableEditor: { + ...prev.tableEditor, + sidePanelOpen: !prev.tableEditor.sidePanelOpen, + }, + })), + [config.tableEditor.sidePanelOpen] + ) return (
('config', { radius: 0.5, organization: 'Summers-Muir', project: 'Sonsing', + tableEditor: { + sidePanelOpen: true, + }, }) export function useConfig() { diff --git a/apps/studio-prototype/src/hooks/use-shortcut.ts b/apps/studio-prototype/src/hooks/use-shortcut.ts new file mode 100644 index 00000000000..9ae5f69c26c --- /dev/null +++ b/apps/studio-prototype/src/hooks/use-shortcut.ts @@ -0,0 +1,50 @@ +import { useEffect, useState } from 'react' + +const useShortcut = (shortcutKeys: string[], callback: (event: KeyboardEvent) => void) => { + const [pressedKeys, setPressedKeys] = useState(new Set()) + + useEffect(() => { + const handleKeyDown = (event: KeyboardEvent) => { + const key = event.key.toLowerCase() + const keys = shortcutKeys.map((key) => key.toLowerCase()) + + // Add key to pressedKeys + setPressedKeys((prevKeys) => new Set(prevKeys).add(key)) + + // Check if all keys are pressed + const allKeysPressed = keys.every((key) => { + if (key === 'meta') return event.metaKey + if (key === 'control') return event.ctrlKey + if (key === 'shift') return event.shiftKey + if (key === 'alt') return event.altKey + return pressedKeys.has(key) + }) + + if (allKeysPressed) { + event.preventDefault() + callback(event) + } + } + + const handleKeyUp = (event: KeyboardEvent) => { + const key = event.key.toLowerCase() + setPressedKeys((prevKeys) => { + const newKeys = new Set(prevKeys) + newKeys.delete(key) + return newKeys + }) + } + + window.addEventListener('keydown', handleKeyDown) + window.addEventListener('keyup', handleKeyUp) + + return () => { + window.removeEventListener('keydown', handleKeyDown) + window.removeEventListener('keyup', handleKeyUp) + } + }, [shortcutKeys, callback, pressedKeys]) + + return null +} + +export default useShortcut diff --git a/apps/studio-prototype/tailwind.config.ts b/apps/studio-prototype/tailwind.config.ts index 8071791796a..f7486d79946 100644 --- a/apps/studio-prototype/tailwind.config.ts +++ b/apps/studio-prototype/tailwind.config.ts @@ -6,6 +6,7 @@ module.exports = config({ './src/pages/**/*.{js,ts,jsx,tsx,mdx}', './src/components/**/*.{js,ts,jsx,tsx,mdx}', './src/app/**/*.{js,ts,jsx,tsx,mdx}', + './src/config/**/*.{js,ts,jsx,tsx,mdx}', './components/**/*.{js,ts,jsx,tsx}', './registry/**/*.{js,ts,jsx,tsx}', // purge styles from grid library diff --git a/package-lock.json b/package-lock.json index 34d265c07be..c709deefeea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1363,13 +1363,18 @@ "apps/studio-prototype": { "version": "0.1.0", "dependencies": { + "@glideapps/glide-data-grid": "^6.0.3", "icons": "*", "jotai": "^2.8.0", + "lodash": "^4.17.21", "lucide-react": "^0.338.0", + "marked": "^13.0.0", "next": "14.2.4", "next-themes": "^0.3.0", "react": "^18", "react-dom": "^18", + "react-hotkeys-hook": "^4.5.0", + "react-responsive-carousel": "^3.2.23", "ui": "*" }, "devDependencies": { @@ -1384,6 +1389,17 @@ "typescript": "^5" } }, + "apps/studio-prototype/node_modules/marked": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-13.0.0.tgz", + "integrity": "sha512-VTeDCd9txf4KLLljUZ0nljE/Incb9SrWuueE44QVuU0pkOdh4sfCeW1Z6lPcxyDRSVY6rm8db/0OPaN75RNUmw==", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, "apps/studio/node_modules/@heroicons/react": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-2.1.3.tgz", @@ -4131,6 +4147,22 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", "dev": true, @@ -4194,7 +4226,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -4206,7 +4237,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -4795,7 +4825,6 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz", "integrity": "sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==", - "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7", @@ -6297,6 +6326,23 @@ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, + "node_modules/@glideapps/glide-data-grid": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@glideapps/glide-data-grid/-/glide-data-grid-6.0.3.tgz", + "integrity": "sha512-YXKggiNOaEemf0jP0jORq2EQKz+zXms+6mGzZc+q0mLMjmgzzoGLOQC1uYcynXSj1R61bd27JcPFsoH+Gj37Vg==", + "dependencies": { + "@linaria/react": "^4.5.3", + "canvas-hypertxt": "^1.0.3", + "react-number-format": "^5.0.0" + }, + "peerDependencies": { + "lodash": "^4.17.19", + "marked": "^4.0.10", + "react": "^16.12.0 || 17.x || 18.x", + "react-dom": "^16.12.0 || 17.x || 18.x", + "react-responsive-carousel": "^3.2.7" + } + }, "node_modules/@graphiql/react": { "version": "0.19.4", "license": "MIT", @@ -7599,6 +7645,143 @@ "@lezer/common": "^1.0.0" } }, + "node_modules/@linaria/core": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/@linaria/core/-/core-4.5.4.tgz", + "integrity": "sha512-vMs/5iU0stxjfbBCxobIgY+wSQx4G8ukNwrhjPVD+6bF9QrTwi5rl0mKaCMxaGMjnfsLRiiM3i+hnWLIEYLdSg==", + "dependencies": { + "@linaria/logger": "^4.5.0", + "@linaria/tags": "^4.5.4", + "@linaria/utils": "^4.5.3" + }, + "engines": { + "node": "^12.16.0 || >=13.7.0" + } + }, + "node_modules/@linaria/logger": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@linaria/logger/-/logger-4.5.0.tgz", + "integrity": "sha512-XdQLk242Cpcsc9a3Cz1ktOE5ysTo2TpxdeFQEPwMm8Z/+F/S6ZxBDdHYJL09srXWz3hkJr3oS2FPuMZNH1HIxw==", + "dependencies": { + "debug": "^4.1.1", + "picocolors": "^1.0.0" + }, + "engines": { + "node": "^12.16.0 || >=13.7.0" + } + }, + "node_modules/@linaria/react": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/@linaria/react/-/react-4.5.4.tgz", + "integrity": "sha512-/dhCVCsfdGPfQCPV0q5yy+DDlFXepvfXrw/os2fC+Xo1v9J/9gyiaBBWHzcumauvNNFj8aN6vRkj89fMujPHew==", + "dependencies": { + "@emotion/is-prop-valid": "^1.2.0", + "@linaria/core": "^4.5.4", + "@linaria/tags": "^4.5.4", + "@linaria/utils": "^4.5.3", + "minimatch": "^9.0.3", + "react-html-attributes": "^1.4.6", + "ts-invariant": "^0.10.3" + }, + "engines": { + "node": "^12.16.0 || >=13.7.0" + }, + "peerDependencies": { + "react": ">=16" + } + }, + "node_modules/@linaria/react/node_modules/@emotion/is-prop-valid": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@linaria/react/node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@linaria/react/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@linaria/react/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@linaria/tags": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/@linaria/tags/-/tags-4.5.4.tgz", + "integrity": "sha512-HPxLB6HlJWLi6o8+8lTLegOmDnbMbuzEE+zzunaPZEGSoIIYx8HAv5VbY/sG/zNyxDElk6laiAwEVWN8h5/zxg==", + "dependencies": { + "@babel/generator": "^7.22.9", + "@linaria/logger": "^4.5.0", + "@linaria/utils": "^4.5.3" + }, + "engines": { + "node": "^12.16.0 || >=13.7.0" + } + }, + "node_modules/@linaria/utils": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/@linaria/utils/-/utils-4.5.3.tgz", + "integrity": "sha512-tSpxA3Zn0DKJ2n/YBnYAgiDY+MNvkmzAHrD8R9PKrpGaZ+wz1jQEmE1vGn1cqh8dJyWK0NzPAA8sf1cqa+RmAg==", + "dependencies": { + "@babel/core": "^7.22.9", + "@babel/generator": "^7.22.9", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.8", + "@babel/types": "^7.22.5", + "@linaria/logger": "^4.5.0", + "babel-merge": "^3.0.0", + "find-up": "^5.0.0", + "minimatch": "^9.0.3" + }, + "engines": { + "node": "^12.16.0 || >=13.7.0" + } + }, + "node_modules/@linaria/utils/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@linaria/utils/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@mapbox/node-pre-gyp": { "version": "1.0.11", "license": "BSD-3-Clause", @@ -16652,6 +16835,27 @@ "node": ">=8" } }, + "node_modules/babel-merge": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/babel-merge/-/babel-merge-3.0.0.tgz", + "integrity": "sha512-eBOBtHnzt9xvnjpYNI5HmaPp/b2vMveE5XggzqHnQeHJ8mFIBrBv6WZEVIj5jJ2uwTItkqKo9gWzEEcBxEq0yw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dependencies": { + "deepmerge": "^2.2.1", + "object.omit": "^3.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-merge/node_modules/deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", "dev": true, @@ -17193,6 +17397,11 @@ } ] }, + "node_modules/canvas-hypertxt": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/canvas-hypertxt/-/canvas-hypertxt-1.0.3.tgz", + "integrity": "sha512-+VsMpRr64jYgKq2IeFUNel3vCZH/IzS+iXSHxmUV3IUH5dXlC9xHz4AwtPZisDxZ5MWcuK0V+TXgPKFPiZnxzg==" + }, "node_modules/capital-case": { "version": "1.0.4", "dev": true, @@ -23042,6 +23251,11 @@ "dev": true, "license": "ISC" }, + "node_modules/html-element-attributes": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-element-attributes/-/html-element-attributes-1.3.1.tgz", + "integrity": "sha512-UrRKgp5sQmRnDy4TEwAUsu14XBUlzKB8U3hjIYDjcZ3Hbp86Jtftzxfgrv6E/ii/h78tsaZwAnAE8HwnHr0dPA==" + }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "devOptional": true, @@ -26406,7 +26620,8 @@ }, "node_modules/lodash": { "version": "4.17.21", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash-es": { "version": "4.17.21", @@ -26758,7 +26973,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "dev": true, "bin": { "marked": "bin/marked.js" }, @@ -32206,6 +32420,39 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.omit": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-3.0.0.tgz", + "integrity": "sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==", + "dependencies": { + "is-extendable": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.omit/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.omit/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object.pick": { "version": "1.3.0", "license": "MIT", @@ -34216,6 +34463,17 @@ "react-dom": ">= 16.3.0" } }, + "node_modules/react-easy-swipe": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/react-easy-swipe/-/react-easy-swipe-0.0.21.tgz", + "integrity": "sha512-OeR2jAxdoqUMHIn/nS9fgreI5hSpgGoL5ezdal4+oO7YSSgJR8ga+PkYGJrSrJ9MKlPcQjMQXnketrD7WNmNsg==", + "dependencies": { + "prop-types": "^15.5.8" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/react-element-to-jsx-string": { "version": "15.0.0", "dev": true, @@ -34327,6 +34585,23 @@ "react-dom": ">=16" } }, + "node_modules/react-hotkeys-hook": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/react-hotkeys-hook/-/react-hotkeys-hook-4.5.0.tgz", + "integrity": "sha512-Samb85GSgAWFQNvVt3PS90LPPGSf9mkH/r4au81ZP1yOIFayLC3QAvqTgGtJ8YEDMXtPmaVBs6NgipHO6h4Mug==", + "peerDependencies": { + "react": ">=16.8.1", + "react-dom": ">=16.8.1" + } + }, + "node_modules/react-html-attributes": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/react-html-attributes/-/react-html-attributes-1.4.6.tgz", + "integrity": "sha512-uS3MmThNKFH2EZUQQw4k5pIcU7XIr208UE5dktrj/GOH1CMagqxDl4DCLpt3o2l9x+IB5nVYBeN3Cr4IutBXAg==", + "dependencies": { + "html-element-attributes": "^1.0.0" + } + }, "node_modules/react-inlinesvg": { "version": "4.0.4", "license": "MIT", @@ -34414,6 +34689,18 @@ "url": "https://github.com/sponsors/gregberge" } }, + "node_modules/react-number-format": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-5.4.0.tgz", + "integrity": "sha512-NWdICrqLhI7rAS8yUeLVd6Wr4cN7UjJ9IBTS0f/a9i7UB4x4Ti70kGnksBtZ7o4Z7YRbvCMMR/jQmkoOBa/4fg==", + "dependencies": { + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-onclickoutside": { "version": "6.13.0", "license": "MIT", @@ -34552,6 +34839,16 @@ "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/react-responsive-carousel": { + "version": "3.2.23", + "resolved": "https://registry.npmjs.org/react-responsive-carousel/-/react-responsive-carousel-3.2.23.tgz", + "integrity": "sha512-pqJLsBaKHWJhw/ItODgbVoziR2z4lpcJg+YwmRlSk4rKH32VE633mAtZZ9kDXjy4wFO+pgUZmDKPsPe1fPmHCg==", + "dependencies": { + "classnames": "^2.2.5", + "prop-types": "^15.5.8", + "react-easy-swipe": "^0.0.21" + } + }, "node_modules/react-simple-maps": { "version": "4.0.0-beta.6", "resolved": "https://registry.npmjs.org/react-simple-maps/-/react-simple-maps-4.0.0-beta.6.tgz", @@ -39671,6 +39968,17 @@ "version": "0.1.13", "license": "Apache-2.0" }, + "node_modules/ts-invariant": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.10.3.tgz", + "integrity": "sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ts-jest": { "version": "29.1.2", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.2.tgz",