diff --git a/.eslintrc.json b/.eslintrc.json index b3f1180..94186d2 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -22,5 +22,6 @@ ] }, "extends": ["next/core-web-vitals", "prettier"], - "plugins": ["prettier", "unused-imports"] + "plugins": ["prettier", "unused-imports"], + "ignorePatterns": ["src/enums"] } diff --git a/.prettierignore b/.prettierignore index 3501bb3..69dd450 100644 --- a/.prettierignore +++ b/.prettierignore @@ -4,4 +4,4 @@ node_modules/ out public *-lock.json -tsconfig.json +tsconfig.json \ No newline at end of file diff --git a/LICENSE b/LICENSE index f288702..85caea9 100644 --- a/LICENSE +++ b/LICENSE @@ -631,8 +631,8 @@ to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. - - Copyright (C) + JSON Crack + Copyright (C) 2023 Aykut Saraç This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -652,7 +652,7 @@ Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: - Copyright (C) + JSON Crack Copyright (C) 2023 Aykut Saraç This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. diff --git a/package.json b/package.json index 659c9ec..ba260dc 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "json-crack", "private": true, "version": "v3.0.0", + "license": "GPL-3.0", "author": "https://github.com/AykutSarac", "homepage": "https://jsoncrack.com", "scripts": { @@ -19,22 +20,21 @@ "@mantine/hooks": "^6.0.17", "@mantine/next": "^6.0.21", "@mantine/prism": "^6.0.21", - "@monaco-editor/react": "^4.5.2", + "@monaco-editor/react": "^4.6.0", "@sentry/nextjs": "^7.72.0", "@supabase/auth-helpers-nextjs": "^0.8.1", "@supabase/auth-helpers-react": "^0.4.2", "@supabase/supabase-js": "^2.36.0", "@tanstack/react-query": "^4.35.3", - "allotment": "^1.19.2", + "allotment": "^1.19.3", "axios": "^1.5.0", "dayjs": "^1.11.10", "html-to-image": "^1.11.11", "jq-in-the-browser": "^0.7.2", "jq-web": "^0.5.1", - "json-2-csv": "^4.1.0", + "json-2-csv": "^5.0.1", "json-to-ts": "^1.7.0", "jsonc-parser": "^3.2.0", - "jsongraph-react": "^0.0.12", "jsonwebtoken": "^9.0.2", "jxon": "^2.0.0-beta.5", "lodash.debounce": "^4.0.8", @@ -46,35 +46,33 @@ "react-dom": "^18.2.0", "react-ga4": "^2.1.0", "react-hot-toast": "^2.4.1", - "react-icons": "^4.11.0", + "react-icons": "^4.12.0", + "react-json-tree": "^0.18.0", "react-linkify-it": "^1.0.7", "react-simple-typewriter": "^5.0.1", "react-zoomable-ui": "^0.11.0", - "reaflow": "5.2.6", - "styled-components": "^6.0.8", + "reaflow": "5.2.8", + "styled-components": "^6.1.1", "toml": "^3.0.0", "use-long-press": "^3.1.5", - "zustand": "^4.4.0" + "zustand": "^4.4.7" }, "devDependencies": { "@next/bundle-analyzer": "^13.4.12", - "@testing-library/react": "^14.0.0", - "@trivago/prettier-plugin-sort-imports": "^4.2.0", - "@types/jsonwebtoken": "^9.0.3", - "@types/jxon": "^2.0.2", - "@types/lodash.debounce": "^4.0.7", - "@types/lodash.get": "^4.4.7", - "@types/lodash.set": "^4.3.7", + "@trivago/prettier-plugin-sort-imports": "^4.3.0", + "@types/jsonwebtoken": "^9.0.5", + "@types/jxon": "^2.0.5", + "@types/lodash.debounce": "^4.0.9", + "@types/lodash.get": "^4.4.9", + "@types/lodash.set": "^4.3.9", "@types/node": "^20.4.7", "@types/react": "18.2.18", - "@types/react-color": "^3.0.6", - "@types/react-syntax-highlighter": "^15.5.7", - "eslint": "8.46.0", + "eslint": "8.56.0", "eslint-config-next": "13.4.12", "eslint-config-prettier": "^8.10.0", "eslint-plugin-prettier": "^5.0.0", "eslint-plugin-unused-imports": "^3.0.0", - "prettier": "^3.0.1", + "prettier": "^3.1.1", "ts-node": "^10.9.1", "typescript": "5.1.6" } diff --git a/src/components/Graph/CustomNode/TextNode.tsx b/src/components/Graph/CustomNode/TextNode.tsx index 70c48bb..f18160a 100644 --- a/src/components/Graph/CustomNode/TextNode.tsx +++ b/src/components/Graph/CustomNode/TextNode.tsx @@ -4,8 +4,8 @@ import { MdLink, MdLinkOff } from "react-icons/md"; import { CustomNodeProps } from "src/components/Graph/CustomNode"; import useToggleHide from "src/hooks/useToggleHide"; import { isContentImage } from "src/lib/utils/graph/calculateNodeSize"; +import useConfig from "src/store/useConfig"; import useGraph from "src/store/useGraph"; -import useStored from "src/store/useStored"; import { TextRenderer } from "./TextRenderer"; import * as Styled from "./styles"; @@ -52,13 +52,13 @@ const Node: React.FC = ({ node, x, y, hasCollapse = false }) => data: { isParent, childrenCount, type }, } = node; const { validateHiddenNodes } = useToggleHide(); - const hideCollapse = useStored(state => state.hideCollapse); - const showChildrenCount = useStored(state => state.childrenCount); - const imagePreview = useStored(state => state.imagePreview); + const collapseButtonVisible = useConfig(state => state.collapseButtonVisible); + const childrenCountVisible = useConfig(state => state.childrenCountVisible); + const imagePreviewEnabled = useConfig(state => state.imagePreviewEnabled); const expandNodes = useGraph(state => state.expandNodes); const collapseNodes = useGraph(state => state.collapseNodes); const isExpanded = useGraph(state => state.collapsedParents.includes(id)); - const isImage = imagePreview && isContentImage(text as string); + const isImage = imagePreviewEnabled && isContentImage(text as string); const value = JSON.stringify(text).replaceAll('"', ""); const handleExpand = (e: React.MouseEvent) => { @@ -80,16 +80,16 @@ const Node: React.FC = ({ node, x, y, hasCollapse = false }) => data-x={x} data-y={y} data-key={JSON.stringify(text)} - $hasCollapse={isParent && hideCollapse} + $hasCollapse={isParent && collapseButtonVisible} > {value} - {isParent && childrenCount > 0 && showChildrenCount && ( + {isParent && childrenCount > 0 && childrenCountVisible && ( ({childrenCount}) )} - {isParent && hasCollapse && hideCollapse && ( + {isParent && hasCollapse && collapseButtonVisible && ( {isExpanded ? : } diff --git a/src/components/Graph/CustomNode/TextRenderer.tsx b/src/components/Graph/CustomNode/TextRenderer.tsx index 340804d..35c5fa9 100644 --- a/src/components/Graph/CustomNode/TextRenderer.tsx +++ b/src/components/Graph/CustomNode/TextRenderer.tsx @@ -25,15 +25,15 @@ const isURL = /(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})/gi; export const TextRenderer: React.FC<{ children: string }> = ({ children }) => { - if (isURL.test(children.replaceAll('"', ""))) { + if (isURL.test(children?.replaceAll('"', ""))) { return {children}; } - if (isColorFormat(children.replaceAll('"', ""))) { + if (isColorFormat(children?.replaceAll('"', ""))) { return ( - - {children.replaceAll('"', "")} + + {children?.replaceAll('"', "")} ); } diff --git a/src/components/Graph/index.tsx b/src/components/Graph/index.tsx index 8406f1f..4d5f313 100644 --- a/src/components/Graph/index.tsx +++ b/src/components/Graph/index.tsx @@ -1,14 +1,16 @@ import React from "react"; import dynamic from "next/dynamic"; import styled from "styled-components"; +import { toast } from "react-hot-toast"; import { Space } from "react-zoomable-ui"; import { ElkRoot } from "reaflow/dist/layout/useLayout"; import { useLongPress } from "use-long-press"; import { CustomNode } from "src/components/Graph/CustomNode"; +import { ViewMode } from "src/enums/viewMode.enum"; import useToggleHide from "src/hooks/useToggleHide"; import { Loading } from "src/layout/Loading"; +import useConfig from "src/store/useConfig"; import useGraph from "src/store/useGraph"; -import useStored from "src/store/useStored"; import useUser from "src/store/useUser"; import { NodeData } from "src/types/graph"; import { CustomEdge } from "./CustomEdge"; @@ -23,7 +25,7 @@ interface GraphProps { isWidget?: boolean; } -const StyledEditorWrapper = styled.div<{ $widget: boolean }>` +const StyledEditorWrapper = styled.div<{ $widget: boolean; $showRulers: boolean }>` position: absolute; width: 100%; height: ${({ $widget }) => ($widget ? "calc(100vh - 36px)" : "calc(100vh - 63px)")}; @@ -33,20 +35,24 @@ const StyledEditorWrapper = styled.div<{ $widget: boolean }>` --line-color-2: ${({ theme }) => theme.GRID_COLOR_SECONDARY}; background-color: var(--bg-color); - background-image: linear-gradient(var(--line-color-1) 1.5px, transparent 1.5px), - linear-gradient(90deg, var(--line-color-1) 1.5px, transparent 1.5px), - linear-gradient(var(--line-color-2) 1px, transparent 1px), - linear-gradient(90deg, var(--line-color-2) 1px, transparent 1px); - background-position: - -1.5px -1.5px, - -1.5px -1.5px, - -1px -1px, - -1px -1px; - background-size: - 100px 100px, - 100px 100px, - 20px 20px, - 20px 20px; + ${({ $showRulers }) => + $showRulers && + ` + background-image: linear-gradient(var(--line-color-1) 1.5px, transparent 1.5px), + linear-gradient(90deg, var(--line-color-1) 1.5px, transparent 1.5px), + linear-gradient(var(--line-color-2) 1px, transparent 1px), + linear-gradient(90deg, var(--line-color-2) 1px, transparent 1px); + background-position: + -1.5px -1.5px, + -1.5px -1.5px, + -1px -1px, + -1px -1px; + background-size: + 100px 100px, + 100px 100px, + 20px 20px, + 20px 20px; + `}; :active { cursor: move; @@ -76,7 +82,8 @@ const layoutOptions = { }; const PREMIUM_LIMIT = 200; -const ERROR_LIMIT = 3_000; +const ERROR_LIMIT_TREE = 5_000; +const ERROR_LIMIT = 10_000; const GraphCanvas = ({ isWidget }: GraphProps) => { const { validateHiddenNodes } = useToggleHide(); @@ -138,6 +145,7 @@ const GraphCanvas = ({ isWidget }: GraphProps) => { function getViewType(nodes: NodeData[]) { if (nodes.length > ERROR_LIMIT) return "error"; + if (nodes.length > ERROR_LIMIT_TREE) return "tree"; if (nodes.length > PREMIUM_LIMIT) return "premium"; return "graph"; } @@ -147,7 +155,9 @@ export const Graph = ({ isWidget = false }: GraphProps) => { const loading = useGraph(state => state.loading); const isPremium = useUser(state => state.premium); const viewType = useGraph(state => getViewType(state.nodes)); - const gesturesEnabled = useStored(state => state.gesturesEnabled); + const gesturesEnabled = useConfig(state => state.gesturesEnabled); + const rulersEnabled = useConfig(state => state.rulersEnabled); + const setViewMode = useConfig(state => state.setViewMode); const callback = React.useCallback(() => { const canvas = document.querySelector(".jsoncrack-canvas") as HTMLDivElement | null; @@ -166,7 +176,14 @@ export const Graph = ({ isWidget = false }: GraphProps) => { if ("activeElement" in document) (document.activeElement as HTMLElement)?.blur(); }, []); - if (viewType === "error") return ; + if (viewType === "error") { + return ; + } + + if (viewType === "tree") { + setViewMode(ViewMode.Tree); + toast("This document is too large to display as a graph. Switching to tree view."); + } if (viewType === "premium" && !isWidget) { if (!isPremium) return ; @@ -180,6 +197,7 @@ export const Graph = ({ isWidget = false }: GraphProps) => { onContextMenu={e => e.preventDefault()} onClick={blurOnClick} key={String(gesturesEnabled)} + $showRulers={rulersEnabled} {...bindLongPress()} > { const setError = useFile(state => state.setError); const jsonSchema = useFile(state => state.jsonSchema); const getHasChanges = useFile(state => state.getHasChanges); - const theme = useStored(state => (state.lightmode ? "light" : "vs-dark")); + const theme = useConfig(state => (state.darkmodeEnabled ? "vs-dark" : "light")); const fileType = useFile(state => state.format); React.useEffect(() => { diff --git a/src/containers/Editor/BottomBar.tsx b/src/containers/Editor/BottomBar.tsx index 661e1b1..7425637 100644 --- a/src/containers/Editor/BottomBar.tsx +++ b/src/containers/Editor/BottomBar.tsx @@ -11,22 +11,15 @@ import { AiOutlineLock, AiOutlineUnlock, } from "react-icons/ai"; +import { BiSolidDockLeft } from "react-icons/bi"; import { MdOutlineCheckCircleOutline } from "react-icons/md"; import { TbTransform } from "react-icons/tb"; -import { - VscAccount, - VscError, - VscFeedback, - VscSourceControl, - VscSync, - VscSyncIgnored, - VscWorkspaceTrusted, -} from "react-icons/vsc"; +import { VscError, VscFeedback, VscSourceControl, VscSync, VscSyncIgnored } from "react-icons/vsc"; import { documentSvc } from "src/services/document.service"; +import useConfig from "src/store/useConfig"; import useFile from "src/store/useFile"; import useGraph from "src/store/useGraph"; import useModal from "src/store/useModal"; -import useStored from "src/store/useStored"; import useUser from "src/store/useUser"; const StyledBottomBar = styled.div` @@ -51,6 +44,7 @@ const StyledLeft = styled.div` align-items: center; justify-content: left; gap: 4px; + padding-left: 8px; @media screen and (max-width: 480px) { display: none; @@ -95,15 +89,16 @@ export const BottomBar = () => { const { query, replace } = useRouter(); const data = useFile(state => state.fileData); const user = useUser(state => state.user); - const premium = useUser(state => state.premium); - const toggleLiveTransform = useStored(state => state.toggleLiveTransform); - const liveTransform = useStored(state => state.liveTransform); + const toggleLiveTransform = useConfig(state => state.toggleLiveTransform); + const liveTransformEnabled = useConfig(state => state.liveTransformEnabled); const hasChanges = useFile(state => state.hasChanges); const error = useFile(state => state.error); const getContents = useFile(state => state.getContents); const setContents = useFile(state => state.setContents); const nodeCount = useGraph(state => state.nodes.length); const fileName = useFile(state => state.fileData?.name); + const toggleFullscreen = useGraph(state => state.toggleFullscreen); + const fullscreen = useGraph(state => state.fullscreen); const setVisible = useModal(state => state.setVisible); const setHasChanges = useFile(state => state.setHasChanges); @@ -111,6 +106,8 @@ export const BottomBar = () => { const [isPrivate, setIsPrivate] = React.useState(false); const [isUpdating, setIsUpdating] = React.useState(false); + const toggleEditor = () => toggleFullscreen(!fullscreen); + React.useEffect(() => { setIsPrivate(data?.private ?? true); }, [data]); @@ -191,20 +188,10 @@ export const BottomBar = () => { )} - - - - - {user?.user_metadata.name ?? "Login"} - - + + - {!premium && ( - setVisible("premium")(true)}> - - Upgrade to Premium - - )} + {fileName && ( setVisible("cloud")(true)}> @@ -236,7 +223,7 @@ export const BottomBar = () => { {(data?.owner_email === user?.email || (!data && user)) && ( {hasChanges ? : } - {hasChanges ? (query?.json ? "Unsaved Changes" : "Create Document") : "Saved"} + {hasChanges || !user ? (query?.json ? "Unsaved Changes" : "Save to Cloud") : "Saved"} )} {data?.owner_email === user?.email && ( @@ -252,7 +239,7 @@ export const BottomBar = () => { Share - {liveTransform ? ( + {liveTransformEnabled ? ( toggleLiveTransform(false)}> Live Transform @@ -263,7 +250,7 @@ export const BottomBar = () => { Manual Transform )} - {!liveTransform && ( + {!liveTransformEnabled && ( setContents({})}> Transform diff --git a/src/containers/Editor/JsonEditor/index.tsx b/src/containers/Editor/JsonEditor/index.tsx index e2fe77e..5c2d380 100644 --- a/src/containers/Editor/JsonEditor/index.tsx +++ b/src/containers/Editor/JsonEditor/index.tsx @@ -123,7 +123,7 @@ const PromptInput = () => { export const JsonEditor: React.FC = () => { return ( - + {/* */} ); diff --git a/src/containers/Editor/LiveEditor/Tools.tsx b/src/containers/Editor/LiveEditor/Tools.tsx index 0918eaf..76b46e2 100644 --- a/src/containers/Editor/LiveEditor/Tools.tsx +++ b/src/containers/Editor/LiveEditor/Tools.tsx @@ -1,36 +1,51 @@ import React from "react"; +import Link from "next/link"; +import { useRouter } from "next/router"; import styled from "styled-components"; -import { Flex, Group, MediaQuery, Menu, Select, Text } from "@mantine/core"; -import { useHotkeys } from "@mantine/hooks"; +import { + Avatar, + Flex, + Group, + Input, + MediaQuery, + Menu, + SegmentedControl, + Select, + Text, +} from "@mantine/core"; +import { getHotkeyHandler, useHotkeys } from "@mantine/hooks"; import ReactGA from "react-ga4"; import toast from "react-hot-toast"; -import { AiOutlineFullscreen, AiOutlineMinus, AiOutlinePlus } from "react-icons/ai"; +import { AiOutlineFullscreen } from "react-icons/ai"; +import { BsCheck2 } from "react-icons/bs"; import { CgArrowsMergeAltH, CgArrowsShrinkH, CgChevronDown } from "react-icons/cg"; import { FiDownload } from "react-icons/fi"; -import { MdCenterFocusWeak } from "react-icons/md"; +import { MdOutlineWorkspacePremium } from "react-icons/md"; import { SiJsonwebtokens } from "react-icons/si"; import { TiFlowMerge } from "react-icons/ti"; import { VscCollapseAll, VscExpandAll, VscJson, - VscLayoutSidebarLeft, - VscLayoutSidebarLeftOff, - VscSettingsGear, VscTarget, VscSearchFuzzy, VscGroupByRefType, + VscSignOut, + VscFeedback, + VscSignIn, } from "react-icons/vsc"; import { SearchInput } from "src/components/SearchInput"; -import { FileFormat } from "src/enums/file"; +import { FileFormat } from "src/enums/file.enum"; +import { ViewMode } from "src/enums/viewMode.enum"; import { JSONCrackLogo } from "src/layout/JsonCrackLogo"; import { getNextDirection } from "src/lib/utils/graph/getNextDirection"; import { isIframe } from "src/lib/utils/widget"; +import useConfig from "src/store/useConfig"; import useFile from "src/store/useFile"; import useGraph from "src/store/useGraph"; -import useJC from "src/store/useJC"; import useJson from "src/store/useJson"; import useModal from "src/store/useModal"; +import useUser from "src/store/useUser"; export const StyledTools = styled.div` position: relative; @@ -94,17 +109,13 @@ function fullscreenBrowser() { const ViewMenu = () => { const [coreKey, setCoreKey] = React.useState("CTRL"); const toggleFold = useGraph(state => state.toggleFold); - const setDirection = useJC(state => state.graphRef?.setDirection); - const direction = useJC(state => state.graphRef?.direction); - const expandGraph = useJC(state => state.graphRef?.expandGraph); - const collapseGraph = useJC(state => state.graphRef?.collapseGraph); - const toggleFullscreen = useGraph(state => state.toggleFullscreen); - const focusFirstNode = useJC(state => state.graphRef?.focusFirstNode); + const setDirection = useGraph(state => state.setDirection); + const direction = useGraph(state => state.direction); + const expandGraph = useGraph(state => state.expandGraph); + const collapseGraph = useGraph(state => state.collapseGraph); + const focusFirstNode = useGraph(state => state.focusFirstNode); const foldNodes = useGraph(state => state.foldNodes); - const graphCollapsed = useJC(state => state.graphRef?.graphCollapsed); - const fullscreen = useGraph(state => state.fullscreen); - - const toggleEditor = () => toggleFullscreen(!fullscreen); + const graphCollapsed = useGraph(state => state.graphCollapsed); const toggleFoldNodes = () => { toggleFold(!foldNodes); @@ -124,7 +135,6 @@ const ViewMenu = () => { }; useHotkeys([ - ["mod+shift+e", toggleEditor], ["mod+shift+d", toggleDirection], ["mod+shift+f", toggleFoldNodes], ["mod+shift+c", toggleExpandCollapseGraph], @@ -144,7 +154,7 @@ const ViewMenu = () => { }, []); return ( - + @@ -153,25 +163,6 @@ const ViewMenu = () => { - { - toggleEditor(); - ReactGA.event({ - action: "toggle_hide_editor", - category: "User", - label: "Tools", - }); - }} - icon={fullscreen ? : } - rightSection={ - - {coreKey} Shift E - - } - > - {fullscreen ? "Show" : "Hide"} Editor - { @@ -238,16 +229,50 @@ const ViewMenu = () => { }; export const Tools: React.FC<{ isWidget?: boolean }> = ({ isWidget = false }) => { + const { push } = useRouter(); + const getJson = useJson(state => state.getJson); const setVisible = useModal(state => state.setVisible); - const centerView = useJC(state => state.graphRef?.centerView); - const zoomIn = useJC(state => state.graphRef?.zoomIn); - const zoomOut = useJC(state => state.graphRef?.zoomOut); + const centerView = useGraph(state => state.centerView); + const zoomIn = useGraph(state => state.zoomIn); + const zoomOut = useGraph(state => state.zoomOut); + const toggleGestures = useConfig(state => state.toggleGestures); + const toggleChildrenCount = useConfig(state => state.toggleChildrenCount); + const toggleDarkMode = useConfig(state => state.toggleDarkMode); + const toggleRulers = useConfig(state => state.toggleRulers); + const toggleCollapseButton = useConfig(state => state.toggleCollapseButton); + const setViewMode = useConfig(state => state.setViewMode); + const setZoomFactor = useGraph(state => state.setZoomFactor); + const toggleImagePreview = useConfig(state => state.toggleImagePreview); + const logout = useUser(state => state.logout); + + const user = useUser(state => state.user); + const premium = useUser(state => state.premium); + + const zoomFactor = useGraph(state => state.viewPort?.zoomFactor || 1); + const gesturesEnabled = useConfig(state => state.gesturesEnabled); + const childrenCountVisible = useConfig(state => state.childrenCountVisible); + const darkmodeEnabled = useConfig(state => state.darkmodeEnabled); + const viewMode = useConfig(state => state.viewMode); + const rulersEnabled = useConfig(state => state.rulersEnabled); + const collapseButtonVisible = useConfig(state => state.collapseButtonVisible); + const imagePreviewEnabled = useConfig(state => state.imagePreviewEnabled); const setFormat = useFile(state => state.setFormat); const format = useFile(state => state.format); + + const [tempZoomValue, setTempZoomValue] = React.useState(zoomFactor); const [logoURL, setLogoURL] = React.useState("CTRL"); + React.useEffect(() => { + if (!Number.isNaN(zoomFactor)) setTempZoomValue(zoomFactor); + }, [zoomFactor]); + + useHotkeys([ + ["shift+Digit0", () => setZoomFactor(100 / 100)], + ["shift+Digit1", centerView], + ]); + React.useEffect(() => { if (typeof window !== "undefined") { const url = !isIframe() @@ -303,11 +328,30 @@ export const Tools: React.FC<{ isWidget?: boolean }> = ({ isWidget = false }) => { value: FileFormat.CSV, label: "CSV" }, ]} /> + + + + + View Mode + + + + + + + setVisible("import")(true)}> Import - + @@ -348,31 +392,170 @@ export const Tools: React.FC<{ isWidget?: boolean }> = ({ isWidget = false }) => )} - - - - - - + + {!isWidget && ( setVisible("download")(true)}> )} - - - - - - - - setVisible("settings")(true)} - > - - + + {!isWidget && ( + + + + + {Math.round(zoomFactor * 100)}% + + + + + + + setTempZoomValue(e.currentTarget.valueAsNumber / 100)} + onKeyDown={getHotkeyHandler([["Enter", () => setZoomFactor(tempZoomValue)]])} + size="xs" + rightSection="%" + /> + + + Zoom in + + + Zoom out + + + Zoom to fit + + setZoomFactor(50 / 100)}> + Zoom to %50 + + setZoomFactor(100 / 100)}> + Zoom to %100 + + setZoomFactor(200 / 100)}> + Zoom to %200 + + + } + onClick={() => toggleRulers(!rulersEnabled)} + > + Rulers + + } + onClick={() => toggleGestures(!gesturesEnabled)} + > + Trackpad Gestures + + } + onClick={() => toggleChildrenCount(!childrenCountVisible)} + > + Item Count + + } + onClick={() => toggleImagePreview(!imagePreviewEnabled)} + > + Image Link Preview + + } + onClick={() => toggleCollapseButton(!collapseButtonVisible)} + > + Show Expand/Collapse + + + + )} + + {!isWidget && ( + + + + + {user?.user_metadata.name[0]} + + + + + {user ? ( + + {user?.user_metadata.name[0]} + + } + onClick={() => setVisible("account")(true)} + closeMenuOnClick + > + Account + + ) : ( + + }> + Sign in + + + )} + {!premium && ( + } + onClick={() => setVisible("premium")(true)} + closeMenuOnClick + > + + Get Premium + + + )} + } + onClick={() => toggleDarkMode(!darkmodeEnabled)} + > + Dark Mode + + {user && ( + <> + + } + onClick={() => setVisible("review")(true)} + closeMenuOnClick + > + Feedback + + } onClick={() => logout()} closeMenuOnClick> + Log out + + + )} + + + )} + + {!isWidget && ( + + + + )} ); diff --git a/src/containers/Editor/LiveEditor/index.tsx b/src/containers/Editor/LiveEditor/index.tsx index 47eeb04..922ae32 100644 --- a/src/containers/Editor/LiveEditor/index.tsx +++ b/src/containers/Editor/LiveEditor/index.tsx @@ -1,87 +1,145 @@ import React from "react"; -import styled from "styled-components"; -import { JSONGraph } from "jsongraph-react"; -import useGraph from "src/store/useGraph"; -import useJC from "src/store/useJC"; +import styled, { DefaultTheme, useTheme } from "styled-components"; +import { Menu, Text } from "@mantine/core"; +import { JSONTree } from "react-json-tree"; +import { Graph } from "src/components/Graph"; +import { TextRenderer } from "src/components/Graph/CustomNode/TextRenderer"; +import { firaMono } from "src/constants/fonts"; +import { ViewMode } from "src/enums/viewMode.enum"; +import useConfig from "src/store/useConfig"; import useJson from "src/store/useJson"; -import useModal from "src/store/useModal"; -import useStored from "src/store/useStored"; -import { NodeData } from "src/types/graph"; const StyledLiveEditor = styled.div` position: relative; height: 100%; + background: ${({ theme }) => theme.GRID_BG_COLOR}; + overflow: auto; + + & > ul { + margin-top: 0 !important; + padding: 12px !important; + font-family: ${firaMono.style.fontFamily}; + font-size: 14px; + font-weight: 500; + } `; -const LiveEditor: React.FC = () => { - const lightmode = useStored(state => state.lightmode); +type TextColorFn = { + theme: DefaultTheme; + $value?: string | unknown; +}; + +function getValueColor({ $value, theme }: TextColorFn) { + if ($value && !Number.isNaN(+$value)) return theme.NODE_COLORS.INTEGER; + if ($value === "true") return theme.NODE_COLORS.BOOL.TRUE; + if ($value === "false") return theme.NODE_COLORS.BOOL.FALSE; + if ($value === "null") return theme.NODE_COLORS.NULL; + + // default + return theme.NODE_COLORS.NODE_VALUE; +} + +function getLabelColor({ $type, theme }: { $type?: string; theme: DefaultTheme }) { + if ($type === "Object") return theme.NODE_COLORS.PARENT_OBJ; + if ($type === "Array") return theme.NODE_COLORS.PARENT_ARR; + return theme.NODE_COLORS.PARENT_OBJ; +} + +const View = () => { + const theme = useTheme(); const json = useJson(state => state.json); - const setJCRef = useJC(state => state.setJCRef); - const graphRef = useJC(state => state.graphRef); - const setSelectedNode = useGraph(state => state.setSelectedNode); - const setVisible = useModal(state => state.setVisible); + const viewMode = useConfig(state => state.viewMode); - console.log(graphRef); + if (viewMode === ViewMode.Graph) return ; - const handleNodeClick = React.useCallback( - (data: NodeData) => { - if (setSelectedNode) setSelectedNode(data); - setVisible("node")(true); - }, - [setSelectedNode, setVisible] - ); + if (viewMode === ViewMode.Tree) + return ( + { + return ( + + {keyPath[0]}: + + ); + }} + valueRenderer={(valueAsString, value) => { + return ( + + {JSON.stringify(value)} + + ); + }} + theme={{ + extend: { + overflow: "scroll", + height: "100%", + scheme: "monokai", + author: "wimer hazenberg (http://www.monokai.nl)", + base00: theme.GRID_BG_COLOR, + }, + }} + /> + ); +}; - const style = React.useMemo( - () => ({ - width: "100%", - height: "100%", - }), - [] - ); - - const handleLayoutChange = React.useCallback(() => { - // graphRef shouldn't be null here - console.log(graphRef); - setTimeout(graphRef?.centerView, 100); - }, [graphRef]); - - const layout = React.useMemo( - () => ({ - touchGestures: true, - theme: lightmode ? "light" : ("dark" as any), - }), - [lightmode] - ); +const LiveEditor: React.FC = () => { + const viewMode = useConfig(state => state.viewMode); + const [contextOpened, setContextOpened] = React.useState(false); + const [contextPosition, setContextPosition] = React.useState({ + x: 0, + y: 0, + }); return ( - - + { + e.preventDefault(); + setContextOpened(true); + setContextPosition({ x: e.pageX, y: e.pageY }); + }} + onClick={() => setContextOpened(false)} + > +
+ + + + Download as Image + + + Zoom to Fit + + + Rotate + + + +
+ +
); }; + export default LiveEditor; -// import React from "react"; -// import styled from "styled-components"; -// import { Graph } from "src/components/Graph"; - -// const StyledLiveEditor = styled.div` -// position: relative; -// height: 100%; -// `; - -// const LiveEditor: React.FC = () => { -// return ( -// -// -// -// ); -// }; - -// export default LiveEditor; diff --git a/src/containers/Modals/CloudModal/index.tsx b/src/containers/Modals/CloudModal/index.tsx index 481240a..3a42f52 100644 --- a/src/containers/Modals/CloudModal/index.tsx +++ b/src/containers/Modals/CloudModal/index.tsx @@ -28,7 +28,7 @@ import { AiOutlineLink } from "react-icons/ai"; import { FaTrash } from "react-icons/fa"; import { MdFileOpen } from "react-icons/md"; import { VscAdd, VscEdit, VscLock, VscUnlock } from "react-icons/vsc"; -import { FileFormat } from "src/enums/file"; +import { FileFormat } from "src/enums/file.enum"; import { documentSvc } from "src/services/document.service"; import useFile, { File } from "src/store/useFile"; import useUser from "src/store/useUser"; diff --git a/src/containers/Modals/JQModal/index.tsx b/src/containers/Modals/JQModal/index.tsx index 6262c7e..eb19bd7 100644 --- a/src/containers/Modals/JQModal/index.tsx +++ b/src/containers/Modals/JQModal/index.tsx @@ -3,12 +3,12 @@ import { Stack, Modal, Button, ModalProps, Text, Anchor, Group } from "@mantine/ import Editor from "@monaco-editor/react"; import { VscLinkExternal } from "react-icons/vsc"; import useJsonQuery from "src/hooks/useJsonQuery"; -import useStored from "src/store/useStored"; +import useConfig from "src/store/useConfig"; export const JQModal: React.FC = ({ opened, onClose }) => { const { updateJson } = useJsonQuery(); const [query, setQuery] = React.useState(""); - const lightmode = useStored(state => (state.lightmode ? "light" : "vs-dark")); + const darkmodeEnabled = useConfig(state => (state.darkmodeEnabled ? "vs-dark" : "light")); const onApply = () => { updateJson(query); @@ -27,7 +27,7 @@ export const JQModal: React.FC = ({ opened, onClose }) => { setQuery(e!)} height={300} language="markdown" diff --git a/src/containers/Modals/NodeModal/index.tsx b/src/containers/Modals/NodeModal/index.tsx index 75ed7f0..c9f201b 100644 --- a/src/containers/Modals/NodeModal/index.tsx +++ b/src/containers/Modals/NodeModal/index.tsx @@ -6,10 +6,10 @@ import vsDark from "prism-react-renderer/themes/vsDark"; import vsLight from "prism-react-renderer/themes/vsLight"; import { VscLock } from "react-icons/vsc"; import { isIframe } from "src/lib/utils/widget"; +import useConfig from "src/store/useConfig"; import useFile from "src/store/useFile"; import useGraph from "src/store/useGraph"; import useModal from "src/store/useModal"; -import useStored from "src/store/useStored"; import useUser from "src/store/useUser"; const dataToString = (data: any) => { @@ -49,7 +49,7 @@ export const NodeModal: React.FC = ({ opened, onClose }) => { const isPremium = useUser(state => state.premium); const editContents = useFile(state => state.editContents); const setVisible = useModal(state => state.setVisible); - const lightmode = useStored(state => (state.lightmode ? "light" : "vs-dark")); + const darkmodeEnabled = useConfig(state => (state.darkmodeEnabled ? "vs-dark" : "light")); const nodeData = useGraph(state => dataToString(state.selectedNode?.text)); const path = useGraph(state => state.selectedNode?.path); const isParent = useGraph(state => state.selectedNode?.data?.isParent); @@ -90,7 +90,7 @@ export const NodeModal: React.FC = ({ opened, onClose }) => { {editMode ? ( setValue(e!)} height={200} diff --git a/src/containers/Modals/SchemaModal/index.tsx b/src/containers/Modals/SchemaModal/index.tsx index 597e295..2376798 100644 --- a/src/containers/Modals/SchemaModal/index.tsx +++ b/src/containers/Modals/SchemaModal/index.tsx @@ -3,9 +3,9 @@ import { Stack, Modal, Button, ModalProps, Text, Anchor, Group } from "@mantine/ import Editor from "@monaco-editor/react"; import { toast } from "react-hot-toast"; import { VscLock } from "react-icons/vsc"; +import useConfig from "src/store/useConfig"; import useFile from "src/store/useFile"; import useModal from "src/store/useModal"; -import useStored from "src/store/useStored"; import useUser from "src/store/useUser"; export const SchemaModal: React.FC = ({ opened, onClose }) => { @@ -13,7 +13,7 @@ export const SchemaModal: React.FC = ({ opened, onClose }) => { const showPremiumModal = useModal(state => state.setVisible("premium")); const setJsonSchema = useFile(state => state.setJsonSchema); const [schema, setSchema] = React.useState(""); - const lightmode = useStored(state => (state.lightmode ? "light" : "vs-dark")); + const darkmodeEnabled = useConfig(state => (state.darkmodeEnabled ? "vs-dark" : "light")); const onApply = () => { if (!isPremium) return showPremiumModal(true); @@ -47,7 +47,7 @@ export const SchemaModal: React.FC = ({ opened, onClose }) => { setSchema(e!)} height={300} language="json" diff --git a/src/containers/Modals/SettingsModal/index.tsx b/src/containers/Modals/SettingsModal/index.tsx deleted file mode 100644 index c8da45e..0000000 --- a/src/containers/Modals/SettingsModal/index.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import React from "react"; -import { Modal, Group, Switch, Stack, ModalProps } from "@mantine/core"; -// import { VscLock } from "react-icons/vsc"; -// import useToggleHide from "src/hooks/useToggleHide"; -// import useGraph from "src/store/useGraph"; -// import useModal from "src/store/useModal"; -// import useUser from "src/store/useUser"; -import useStored from "src/store/useStored"; - -export const SettingsModal: React.FC = ({ opened, onClose }) => { - // const { validateHiddenNodes } = useToggleHide(); - // const setVisible = useModal(state => state.setVisible); - // const toggleCollapseAll = useGraph(state => state.toggleCollapseAll); - // const collapseAll = useGraph(state => state.collapseAll); - // const isPremium = useUser(state => state.premium); - const setLightTheme = useStored(state => state.setLightTheme); - const toggleHideCollapse = useStored(state => state.toggleHideCollapse); - const toggleChildrenCount = useStored(state => state.toggleChildrenCount); - const toggleImagePreview = useStored(state => state.toggleImagePreview); - const toggleGestures = useStored(state => state.toggleGestures); - - const hideCollapse = useStored(state => state.hideCollapse); - const childrenCount = useStored(state => state.childrenCount); - const imagePreview = useStored(state => state.imagePreview); - const lightmode = useStored(state => state.lightmode); - const gesturesEnabled = useStored(state => state.gesturesEnabled); - - return ( - - - - toggleGestures(e.currentTarget.checked)} - checked={gesturesEnabled} - /> - toggleImagePreview(e.currentTarget.checked)} - checked={imagePreview} - /> - toggleHideCollapse(e.currentTarget.checked)} - checked={hideCollapse} - /> - toggleChildrenCount(e.currentTarget.checked)} - checked={childrenCount} - /> - {/* - Collapse All by Default - - 35% Faster - -
- } - size="md" - color="violet" - onChange={e => { - if (isPremium) { - toggleCollapseAll(e.currentTarget.checked); - return validateHiddenNodes(); - } - setVisible("premium")(true); - onClose(); - }} - checked={collapseAll} - offLabel={isPremium ? null : } - /> */} - setLightTheme(e.currentTarget.checked)} - checked={lightmode} - /> - - - - ); -}; diff --git a/src/containers/Modals/index.ts b/src/containers/Modals/index.ts index 5fde116..bc7135a 100644 --- a/src/containers/Modals/index.ts +++ b/src/containers/Modals/index.ts @@ -4,7 +4,6 @@ export { DownloadModal } from "./DownloadModal"; export { ImportModal } from "./ImportModal"; export { AccountModal } from "./AccountModal"; export { NodeModal } from "./NodeModal"; -export { SettingsModal } from "./SettingsModal"; export { ShareModal } from "./ShareModal"; export { LoginModal } from "./LoginModal"; export { PremiumModal } from "./PremiumModal"; @@ -22,7 +21,6 @@ type Modal = | "import" | "account" | "node" - | "settings" | "share" | "login" | "premium" diff --git a/src/enums/file.ts b/src/enums/file.enum.ts similarity index 86% rename from src/enums/file.ts rename to src/enums/file.enum.ts index 702dd7a..c9d95ea 100644 --- a/src/enums/file.ts +++ b/src/enums/file.enum.ts @@ -1,3 +1,4 @@ +// eslint-disable export enum FileFormat { "JSON" = "json", "YAML" = "yaml", diff --git a/src/enums/viewMode.enum.ts b/src/enums/viewMode.enum.ts new file mode 100644 index 0000000..b253c0a --- /dev/null +++ b/src/enums/viewMode.enum.ts @@ -0,0 +1,4 @@ +export enum ViewMode { + Graph = "graph", + Tree = "tree", +} diff --git a/src/hooks/useFocusNode.ts b/src/hooks/useFocusNode.ts index 2b270a6..24b92e3 100644 --- a/src/hooks/useFocusNode.ts +++ b/src/hooks/useFocusNode.ts @@ -1,10 +1,10 @@ import React from "react"; import { useDebouncedValue } from "@mantine/hooks"; import { searchQuery, cleanupHighlight, highlightMatchedNodes } from "src/lib/utils/graph/search"; -import useJC from "src/store/useJC"; +import useGraph from "src/store/useGraph"; export const useFocusNode = () => { - const viewPort = useJC(state => state.graphRef?.viewPort); + const viewPort = useGraph(state => state.viewPort); const [selectedNode, setSelectedNode] = React.useState(0); const [nodeCount, setNodeCount] = React.useState(0); const [value, setValue] = React.useState(""); diff --git a/src/layout/EditorWrapper/index.tsx b/src/layout/EditorWrapper/index.tsx index ab69bd6..487a4d9 100644 --- a/src/layout/EditorWrapper/index.tsx +++ b/src/layout/EditorWrapper/index.tsx @@ -4,7 +4,7 @@ import { MantineProvider, MantineThemeOverride } from "@mantine/core"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { monaSans } from "src/constants/fonts"; import { lightTheme, darkTheme } from "src/constants/theme"; -import useStored from "src/store/useStored"; +import useConfig from "src/store/useConfig"; const queryClient = new QueryClient({ defaultOptions: { @@ -52,13 +52,13 @@ const mantineTheme: MantineThemeOverride = { }; export const EditorWrapper: React.FC<{ children: React.ReactNode }> = ({ children }) => { - const lightmode = useStored(state => state.lightmode); + const darkmodeEnabled = useConfig(state => state.darkmodeEnabled); return ( - + sizeCache.clear(), 120_000); export const calculateNodeSize = (text: Text, isParent = false) => { const { foldNodes } = useGraph.getState(); - const { imagePreview } = useStored.getState(); - const isImage = isContentImage(text) && imagePreview; + const { imagePreviewEnabled } = useConfig.getState(); + const isImage = isContentImage(text) && imagePreviewEnabled; const cacheKey = [text, isParent, foldNodes].toString(); diff --git a/src/lib/utils/json/jsonAdapter.ts b/src/lib/utils/json/jsonAdapter.ts index 5638c5c..2b928ac 100644 --- a/src/lib/utils/json/jsonAdapter.ts +++ b/src/lib/utils/json/jsonAdapter.ts @@ -3,7 +3,7 @@ import { csv2json, json2csv } from "json-2-csv"; import { parse } from "jsonc-parser"; import jxon from "jxon"; import toml from "toml"; -import { FileFormat } from "src/enums/file"; +import { FileFormat } from "src/enums/file.enum"; const keyExists = (obj: object, key: string) => { if (!obj || (typeof obj !== "object" && !Array.isArray(obj))) { diff --git a/src/services/document.service.ts b/src/services/document.service.ts index 3d13fd3..d043a82 100644 --- a/src/services/document.service.ts +++ b/src/services/document.service.ts @@ -1,6 +1,6 @@ import { PostgrestSingleResponse } from "@supabase/supabase-js"; import toast from "react-hot-toast"; -import { FileFormat } from "src/enums/file"; +import { FileFormat } from "src/enums/file.enum"; import { supabase } from "src/lib/api/supabase"; import { File } from "src/store/useFile"; import useUser from "src/store/useUser"; diff --git a/src/store/useConfig.ts b/src/store/useConfig.ts new file mode 100644 index 0000000..898bd66 --- /dev/null +++ b/src/store/useConfig.ts @@ -0,0 +1,50 @@ +import { create } from "zustand"; +import { persist } from "zustand/middleware"; +import { ViewMode } from "src/enums/viewMode.enum"; +import useGraph from "./useGraph"; + +const initialStates = { + darkmodeEnabled: false, + collapseButtonVisible: true, + childrenCountVisible: true, + imagePreviewEnabled: true, + liveTransformEnabled: true, + gesturesEnabled: false, + rulersEnabled: true, + viewMode: ViewMode.Graph, +}; + +export interface ConfigActions { + toggleDarkMode: (value: boolean) => void; + toggleCollapseButton: (value: boolean) => void; + toggleChildrenCount: (value: boolean) => void; + toggleImagePreview: (value: boolean) => void; + toggleLiveTransform: (value: boolean) => void; + toggleGestures: (value: boolean) => void; + toggleRulers: (value: boolean) => void; + setViewMode: (value: ViewMode) => void; +} + +const useConfig = create( + persist( + set => ({ + ...initialStates, + toggleRulers: rulersEnabled => set({ rulersEnabled }), + toggleGestures: gesturesEnabled => set({ gesturesEnabled }), + toggleLiveTransform: liveTransformEnabled => set({ liveTransformEnabled }), + toggleDarkMode: darkmodeEnabled => set({ darkmodeEnabled }), + toggleCollapseButton: collapseButtonVisible => set({ collapseButtonVisible }), + toggleChildrenCount: childrenCountVisible => set({ childrenCountVisible }), + toggleImagePreview: imagePreviewEnabled => { + set({ imagePreviewEnabled }); + useGraph.getState().setGraph(); + }, + setViewMode: viewMode => set({ viewMode }), + }), + { + name: "config", + } + ) +); + +export default useConfig; diff --git a/src/store/useFile.ts b/src/store/useFile.ts index e15d2ce..78bd1a4 100644 --- a/src/store/useFile.ts +++ b/src/store/useFile.ts @@ -5,13 +5,13 @@ import ReactGA from "react-ga4"; import { toast } from "react-hot-toast"; import { create } from "zustand"; import { defaultJson } from "src/constants/data"; -import { FileFormat } from "src/enums/file"; +import { FileFormat } from "src/enums/file.enum"; import { contentToJson, jsonToContent } from "src/lib/utils/json/jsonAdapter"; import { isIframe } from "src/lib/utils/widget"; import { documentSvc } from "src/services/document.service"; +import useConfig from "./useConfig"; import useGraph from "./useGraph"; import useJson from "./useJson"; -import useStored from "./useStored"; import useUser from "./useUser"; type SetContents = { @@ -125,7 +125,7 @@ const useFile = create()((set, get) => ({ const isFetchURL = window.location.href.includes("?"); const json = await contentToJson(get().contents, get().format); - if (!useStored.getState().liveTransform && skipUpdate) return; + if (!useConfig.getState().liveTransformEnabled && skipUpdate) return; if (get().hasChanges && contents && contents.length < 80_000 && !isIframe() && !isFetchURL) { sessionStorage.setItem("content", contents); diff --git a/src/store/useGraph.ts b/src/store/useGraph.ts index ee69606..da8f043 100644 --- a/src/store/useGraph.ts +++ b/src/store/useGraph.ts @@ -61,6 +61,7 @@ interface GraphActions { zoomOut: () => void; centerView: () => void; clearGraph: () => void; + setZoomFactor: (zoomFactor: number) => void; } const useGraph = create((set, get) => ({ @@ -193,6 +194,10 @@ const useGraph = create((set, get) => ({ elementExtraMarginForZoom: 100, }); }, + setZoomFactor: zoomFactor => { + const viewPort = get().viewPort; + viewPort?.camera?.recenter(viewPort.centerX, viewPort.centerY, zoomFactor); + }, zoomIn: () => { const viewPort = get().viewPort; viewPort?.camera?.recenter(viewPort.centerX, viewPort.centerY, viewPort.zoomFactor + 0.1); diff --git a/src/store/useJC.ts b/src/store/useJC.ts deleted file mode 100644 index f63fab8..0000000 --- a/src/store/useJC.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { GraphRef } from "jsongraph-react"; -import { create } from "zustand"; - -interface JCActions { - setJCRef: (graphRef: GraphRef) => void; -} - -const initialStates = { - graphRef: null as unknown as GraphRef, -}; - -export type JCStates = typeof initialStates; - -const useJC = create()(set => ({ - ...initialStates, - setJCRef: graphRef => set({ graphRef }), -})); - -export default useJC; diff --git a/src/store/useModal.ts b/src/store/useModal.ts index 425dac4..305ecd1 100644 --- a/src/store/useModal.ts +++ b/src/store/useModal.ts @@ -18,7 +18,6 @@ const initialStates: ModalState = { import: false, account: false, node: false, - settings: false, share: false, login: false, premium: false, diff --git a/src/store/useStored.ts b/src/store/useStored.ts deleted file mode 100644 index 06e91f7..0000000 --- a/src/store/useStored.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { create } from "zustand"; -import { persist } from "zustand/middleware"; -import useGraph from "./useGraph"; - -const initialStates = { - lightmode: false, - hideCollapse: true, - childrenCount: true, - imagePreview: true, - liveTransform: true, - gesturesEnabled: false, -}; - -export interface ConfigActions { - setLightTheme: (theme: boolean) => void; - toggleHideCollapse: (value: boolean) => void; - toggleChildrenCount: (value: boolean) => void; - toggleImagePreview: (value: boolean) => void; - toggleLiveTransform: (value: boolean) => void; - toggleGestures: (value: boolean) => void; -} - -const useStored = create( - persist( - set => ({ - ...initialStates, - toggleGestures: gesturesEnabled => set({ gesturesEnabled }), - toggleLiveTransform: liveTransform => set({ liveTransform }), - setLightTheme: (value: boolean) => - set({ - lightmode: value, - }), - toggleHideCollapse: (value: boolean) => set({ hideCollapse: value }), - toggleChildrenCount: (value: boolean) => set({ childrenCount: value }), - toggleImagePreview: (value: boolean) => { - set({ imagePreview: value }); - useGraph.getState().setGraph(); - }, - }), - { - name: "config", - } - ) -); - -export default useStored; diff --git a/yarn.lock b/yarn.lock index 1e47a74..54fccf0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,7 +7,7 @@ resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.22.5": +"@babel/code-frame@^7.0.0": version "7.22.10" resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz" integrity sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA== @@ -15,6 +15,14 @@ "@babel/highlight" "^7.22.10" chalk "^2.4.2" +"@babel/code-frame@^7.22.13": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== + dependencies: + "@babel/highlight" "^7.23.4" + chalk "^2.4.2" + "@babel/generator@7.17.7": version "7.17.7" resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz" @@ -24,32 +32,32 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.17.3": - version "7.22.10" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz" - integrity sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A== +"@babel/generator@^7.23.0": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== dependencies: - "@babel/types" "^7.22.10" + "@babel/types" "^7.23.6" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-environment-visitor@^7.16.7": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz" - integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== -"@babel/helper-function-name@^7.16.7": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz" - integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== dependencies: - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" -"@babel/helper-hoist-variables@^7.16.7": +"@babel/helper-hoist-variables@^7.22.5": version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== dependencies: "@babel/types" "^7.22.5" @@ -61,9 +69,9 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-split-export-declaration@^7.16.7": +"@babel/helper-split-export-declaration@^7.22.6": version "7.22.6" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== dependencies: "@babel/types" "^7.22.5" @@ -73,11 +81,21 @@ resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz" integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== + "@babel/helper-validator-identifier@^7.16.7", "@babel/helper-validator-identifier@^7.22.5": version "7.22.5" resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz" integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + "@babel/highlight@^7.22.10": version "7.22.10" resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz" @@ -87,11 +105,25 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.17.3", "@babel/parser@^7.20.5", "@babel/parser@^7.22.5": +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.20.5": version "7.22.10" resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz" integrity sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ== +"@babel/parser@^7.22.15", "@babel/parser@^7.23.0": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" + integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== + "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.7": version "7.22.10" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.10.tgz" @@ -99,28 +131,35 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz" - integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== +"@babel/runtime@^7.16.7", "@babel/runtime@^7.20.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.6.tgz#c05e610dc228855dc92ef1b53d07389ed8ab521d" + integrity sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ== dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/parser" "^7.22.5" - "@babel/types" "^7.22.5" + regenerator-runtime "^0.14.0" -"@babel/traverse@7.17.3": - version "7.17.3" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz" - integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== +"@babel/template@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" + integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.3" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.17.3" - "@babel/types" "^7.17.0" + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" + +"@babel/traverse@7.23.2": + version "7.23.2" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" + integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.23.0" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.23.0" + "@babel/types" "^7.23.0" debug "^4.1.0" globals "^11.1.0" @@ -132,7 +171,7 @@ "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" -"@babel/types@^7.17.0", "@babel/types@^7.22.10", "@babel/types@^7.22.5": +"@babel/types@^7.17.0", "@babel/types@^7.22.5": version "7.22.10" resolved "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz" integrity sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg== @@ -141,6 +180,15 @@ "@babel/helper-validator-identifier" "^7.22.5" to-fast-properties "^2.0.0" +"@babel/types@^7.22.15", "@babel/types@^7.23.0", "@babel/types@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" + integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== + dependencies: + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + "@cspotcode/source-map-support@^0.8.0": version "0.8.1" resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" @@ -277,10 +325,10 @@ resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz" integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw== -"@eslint/eslintrc@^2.1.1": - version "2.1.2" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz" - integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -292,10 +340,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@^8.46.0": - version "8.47.0" - resolved "https://registry.npmjs.org/@eslint/js/-/js-8.47.0.tgz" - integrity sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og== +"@eslint/js@8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" + integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== "@floating-ui/core@^1.4.1": version "1.4.1" @@ -333,12 +381,12 @@ resolved "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.1.tgz" integrity sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw== -"@humanwhocodes/config-array@^0.11.10": - version "0.11.10" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz" - integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== +"@humanwhocodes/config-array@^0.11.13": + version "0.11.13" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" + integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" + "@humanwhocodes/object-schema" "^2.0.1" debug "^4.1.1" minimatch "^3.0.5" @@ -347,10 +395,10 @@ resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/object-schema@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" + integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== "@jridgewell/gen-mapping@^0.3.2": version "0.3.3" @@ -451,72 +499,19 @@ resolved "https://registry.npmjs.org/@mantine/utils/-/utils-6.0.21.tgz" integrity sha512-33RVDRop5jiWFao3HKd3Yp7A9mEq4HAJxJPTuYm1NkdqX6aTKOQK7wT8v8itVodBp+sb4cJK6ZVdD1UurK/txQ== -"@monaco-editor/loader@^1.3.3": - version "1.3.3" - resolved "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.3.3.tgz" - integrity sha512-6KKF4CTzcJiS8BJwtxtfyYt9shBiEv32ateQ9T4UVogwn4HM/uPo9iJd2Dmbkpz8CM6Y0PDUpjnZzCwC+eYo2Q== +"@monaco-editor/loader@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.4.0.tgz#f08227057331ec890fa1e903912a5b711a2ad558" + integrity sha512-00ioBig0x642hytVspPl7DbQyaSWRaolYie/UFNjoTdvoKPzo6xrXLhTk9ixgIKcLH5b5vDOjVNiGyY+uDCUlg== dependencies: state-local "^1.0.6" -"@monaco-editor/react@^4.5.2": - version "4.5.2" - resolved "https://registry.npmjs.org/@monaco-editor/react/-/react-4.5.2.tgz" - integrity sha512-emcWu6vg1OpXPiYll4aPOaXe8bwYB4UaaNTwtArFLgMoNGBzRZb2Xn0Bra2HMIFM7QLgs7fCGunHO5LkfT2LBA== +"@monaco-editor/react@^4.6.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.6.0.tgz#bcc68671e358a21c3814566b865a54b191e24119" + integrity sha512-RFkU9/i7cN2bsq/iTkurMWOEErmYcY6JiQI3Jn+WeR/FGISH8JbHERjpS9oRuSOPvDMJI0Z8nJeKkbOs9sBYQw== dependencies: - "@monaco-editor/loader" "^1.3.3" - -"@motionone/animation@^10.15.1": - version "10.15.1" - resolved "https://registry.npmjs.org/@motionone/animation/-/animation-10.15.1.tgz" - integrity sha512-mZcJxLjHor+bhcPuIFErMDNyrdb2vJur8lSfMCsuCB4UyV8ILZLvK+t+pg56erv8ud9xQGK/1OGPt10agPrCyQ== - dependencies: - "@motionone/easing" "^10.15.1" - "@motionone/types" "^10.15.1" - "@motionone/utils" "^10.15.1" - tslib "^2.3.1" - -"@motionone/dom@^10.15.3": - version "10.16.2" - resolved "https://registry.npmjs.org/@motionone/dom/-/dom-10.16.2.tgz" - integrity sha512-bnuHdNbge1FutZXv+k7xub9oPWcF0hsu8y1HTH/qg6av58YI0VufZ3ngfC7p2xhMJMnoh0LXFma2EGTgPeCkeg== - dependencies: - "@motionone/animation" "^10.15.1" - "@motionone/generators" "^10.15.1" - "@motionone/types" "^10.15.1" - "@motionone/utils" "^10.15.1" - hey-listen "^1.0.8" - tslib "^2.3.1" - -"@motionone/easing@^10.15.1": - version "10.15.1" - resolved "https://registry.npmjs.org/@motionone/easing/-/easing-10.15.1.tgz" - integrity sha512-6hIHBSV+ZVehf9dcKZLT7p5PEKHGhDwky2k8RKkmOvUoYP3S+dXsKupyZpqx5apjd9f+php4vXk4LuS+ADsrWw== - dependencies: - "@motionone/utils" "^10.15.1" - tslib "^2.3.1" - -"@motionone/generators@^10.15.1": - version "10.15.1" - resolved "https://registry.npmjs.org/@motionone/generators/-/generators-10.15.1.tgz" - integrity sha512-67HLsvHJbw6cIbLA/o+gsm7h+6D4Sn7AUrB/GPxvujse1cGZ38F5H7DzoH7PhX+sjvtDnt2IhFYF2Zp1QTMKWQ== - dependencies: - "@motionone/types" "^10.15.1" - "@motionone/utils" "^10.15.1" - tslib "^2.3.1" - -"@motionone/types@^10.15.1": - version "10.15.1" - resolved "https://registry.npmjs.org/@motionone/types/-/types-10.15.1.tgz" - integrity sha512-iIUd/EgUsRZGrvW0jqdst8st7zKTzS9EsKkP+6c6n4MPZoQHwiHuVtTQLD6Kp0bsBLhNzKIBlHXponn/SDT4hA== - -"@motionone/utils@^10.15.1": - version "10.15.1" - resolved "https://registry.npmjs.org/@motionone/utils/-/utils-10.15.1.tgz" - integrity sha512-p0YncgU+iklvYr/Dq4NobTRdAPv9PveRDUXabPEeOjBLSO/1FNB2phNTZxOxpi1/GZwYpAoECEa0Wam+nsmhSw== - dependencies: - "@motionone/types" "^10.15.1" - hey-listen "^1.0.8" - tslib "^2.3.1" + "@monaco-editor/loader" "^1.4.0" "@next/bundle-analyzer@^13.4.12": version "13.4.19" @@ -969,37 +964,14 @@ "@tanstack/query-core" "4.35.3" use-sync-external-store "^1.2.0" -"@testing-library/dom@^9.0.0": - version "9.3.1" - resolved "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.1.tgz" - integrity sha512-0DGPd9AR3+iDTjGoMpxIkAsUihHZ3Ai6CneU6bRRrffXMgzCdlNk43jTrD2/5LT6CBb3MWTP8v510JzYtahD2w== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/runtime" "^7.12.5" - "@types/aria-query" "^5.0.1" - aria-query "5.1.3" - chalk "^4.1.0" - dom-accessibility-api "^0.5.9" - lz-string "^1.5.0" - pretty-format "^27.0.2" - -"@testing-library/react@^14.0.0": - version "14.0.0" - resolved "https://registry.npmjs.org/@testing-library/react/-/react-14.0.0.tgz" - integrity sha512-S04gSNJbYE30TlIMLTzv6QCTzt9AqIF5y6s6SzVFILNcNvbV/jU96GeiTPillGQo+Ny64M/5PV7klNYYgv5Dfg== - dependencies: - "@babel/runtime" "^7.12.5" - "@testing-library/dom" "^9.0.0" - "@types/react-dom" "^18.0.0" - -"@trivago/prettier-plugin-sort-imports@^4.2.0": - version "4.2.0" - resolved "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.2.0.tgz" - integrity sha512-YBepjbt+ZNBVmN3ev1amQH3lWCmHyt5qTbLCp/syXJRu/Kw2koXh44qayB1gMRxcL/gV8egmjN5xWSrYyfUtyw== +"@trivago/prettier-plugin-sort-imports@^4.3.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.3.0.tgz#725f411646b3942193a37041c84e0b2116339789" + integrity sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ== dependencies: "@babel/generator" "7.17.7" "@babel/parser" "^7.20.5" - "@babel/traverse" "7.17.3" + "@babel/traverse" "7.23.2" "@babel/types" "7.17.0" javascript-natural-sort "0.7.1" lodash "^4.17.21" @@ -1024,10 +996,10 @@ resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== -"@types/aria-query@^5.0.1": - version "5.0.1" - resolved "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz" - integrity sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q== +"@types/base16@^1.0.2": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/base16/-/base16-1.0.5.tgz#9a7df8eed525c6968d254dada2a2f653a28e73f6" + integrity sha512-OzOWrTluG9cwqidEzC/Q6FAmIPcnZfm8BFRlIx0+UIUqnuAmi5OS88O0RpT3Yz6qdmqObvUhasrbNsCofE4W9A== "@types/estree@*", "@types/estree@^1.0.0": version "1.0.1" @@ -1039,36 +1011,36 @@ resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/jsonwebtoken@^9.0.3": - version "9.0.3" - resolved "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz" - integrity sha512-b0jGiOgHtZ2jqdPgPnP6WLCXZk1T8p06A/vPGzUvxpFGgKMbjXJDjC5m52ErqBnIuWZFgGoIJyRdeG5AyreJjA== +"@types/jsonwebtoken@^9.0.5": + version "9.0.5" + resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.5.tgz#0bd9b841c9e6c5a937c17656e2368f65da025588" + integrity sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA== dependencies: "@types/node" "*" -"@types/jxon@^2.0.2": - version "2.0.2" - resolved "https://registry.npmjs.org/@types/jxon/-/jxon-2.0.2.tgz" - integrity sha512-L8GFQ77kdpe4cCwO6zn5aPpKfEAqgLtTxaieYDldR8xKn7d5Yk8F5NKwdYjcXFzMiArV943AXs4LKXlEskaK6g== +"@types/jxon@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@types/jxon/-/jxon-2.0.5.tgz#c740d9428bea052d5e47e50ac115a416f8fd0773" + integrity sha512-1wJFHjktfaRr8CLffq+bKcXpbqxUWoPwbcb9oR0bafk1hgh7nLdPajzkn3ILLyZebQfowVWaGhICcX57SVtJ6g== -"@types/lodash.debounce@^4.0.7": - version "4.0.7" - resolved "https://registry.npmjs.org/@types/lodash.debounce/-/lodash.debounce-4.0.7.tgz" - integrity sha512-X1T4wMZ+gT000M2/91SYj0d/7JfeNZ9PeeOldSNoE/lunLeQXKvkmIumI29IaKMotU/ln/McOIvgzZcQ/3TrSA== +"@types/lodash.debounce@^4.0.9": + version "4.0.9" + resolved "https://registry.yarnpkg.com/@types/lodash.debounce/-/lodash.debounce-4.0.9.tgz#0f5f21c507bce7521b5e30e7a24440975ac860a5" + integrity sha512-Ma5JcgTREwpLRwMM+XwBR7DaWe96nC38uCBDFKZWbNKD+osjVzdpnUSwBcqCptrp16sSOLBAUb50Car5I0TCsQ== dependencies: "@types/lodash" "*" -"@types/lodash.get@^4.4.7": - version "4.4.7" - resolved "https://registry.npmjs.org/@types/lodash.get/-/lodash.get-4.4.7.tgz" - integrity sha512-af34Mj+KdDeuzsJBxc/XeTtOx0SZHZNLd+hdrn+PcKGQs0EG2TJTzQAOTCZTgDJCArahlCzLWSy8c2w59JRz7Q== +"@types/lodash.get@^4.4.9": + version "4.4.9" + resolved "https://registry.yarnpkg.com/@types/lodash.get/-/lodash.get-4.4.9.tgz#6390714bf688321d9a445cbc8e90220635649713" + integrity sha512-J5dvW98sxmGnamqf+/aLP87PYXyrha9xIgc2ZlHl6OHMFR2Ejdxep50QfU0abO1+CH6+ugx+8wEUN1toImAinA== dependencies: "@types/lodash" "*" -"@types/lodash.set@^4.3.7": - version "4.3.7" - resolved "https://registry.npmjs.org/@types/lodash.set/-/lodash.set-4.3.7.tgz" - integrity sha512-bS5Wkg/nrT82YUfkNYPSccFrNZRL+irl7Yt4iM6OTSQ0VZJED2oUIVm15NkNtUAQ8SRhCe+axqERUV6MJgkeEg== +"@types/lodash.set@^4.3.9": + version "4.3.9" + resolved "https://registry.yarnpkg.com/@types/lodash.set/-/lodash.set-4.3.9.tgz#55d95bce407b42c6655f29b2d0811fd428e698f0" + integrity sha512-KOxyNkZpbaggVmqbpr82N2tDVTx05/3/j0f50Es1prxrWB0XYf9p3QNxqcbWb7P1Q9wlvsUSlCFnwlPCIJ46PQ== dependencies: "@types/lodash" "*" @@ -1077,6 +1049,11 @@ resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz" integrity sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g== +"@types/lodash@^4.14.178", "@types/lodash@^4.14.191": + version "4.14.202" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8" + integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ== + "@types/node@*", "@types/node@^20.4.7": version "20.5.1" resolved "https://registry.npmjs.org/@types/node/-/node-20.5.1.tgz" @@ -1097,37 +1074,6 @@ resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== -"@types/react-color@^3.0.6": - version "3.0.6" - resolved "https://registry.npmjs.org/@types/react-color/-/react-color-3.0.6.tgz" - integrity sha512-OzPIO5AyRmLA7PlOyISlgabpYUa3En74LP8mTMa0veCA719SvYQov4WLMsHvCgXP+L+KI9yGhYnqZafVGG0P4w== - dependencies: - "@types/react" "*" - "@types/reactcss" "*" - -"@types/react-dom@^18.0.0": - version "18.2.7" - resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz" - integrity sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA== - dependencies: - "@types/react" "*" - -"@types/react-syntax-highlighter@^15.5.7": - version "15.5.7" - resolved "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-15.5.7.tgz" - integrity sha512-bo5fEO5toQeyCp0zVHBeggclqf5SQ/Z5blfFmjwO5dkMVGPgmiwZsJh9nu/Bo5L7IHTuGWrja6LxJVE2uB5ZrQ== - dependencies: - "@types/react" "*" - -"@types/react@*": - version "18.2.20" - resolved "https://registry.npmjs.org/@types/react/-/react-18.2.20.tgz" - integrity sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - "@types/react@18.2.18": version "18.2.18" resolved "https://registry.npmjs.org/@types/react/-/react-18.2.18.tgz" @@ -1137,13 +1083,6 @@ "@types/scheduler" "*" csstype "^3.0.2" -"@types/reactcss@*": - version "1.2.6" - resolved "https://registry.npmjs.org/@types/reactcss/-/reactcss-1.2.6.tgz" - integrity sha512-qaIzpCuXNWomGR1Xq8SCFTtF4v8V27Y6f+b9+bzHiv087MylI/nTCqqdChNeWS7tslgROmYB7yeiruWX7WnqNg== - dependencies: - "@types/react" "*" - "@types/scheduler@*": version "0.16.3" resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz" @@ -1205,6 +1144,11 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" @@ -1237,10 +1181,10 @@ ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -allotment@^1.19.2: - version "1.19.2" - resolved "https://registry.npmjs.org/allotment/-/allotment-1.19.2.tgz" - integrity sha512-RiiCLa4AQATPsQDXvleyvdRzSsd2J7naLuY+eK1sn1zeXBKMdsCwWuICZ+ZCeDCrJXjVV+q/mHfB2LT7PEYmTw== +allotment@^1.19.3: + version "1.19.3" + resolved "https://registry.yarnpkg.com/allotment/-/allotment-1.19.3.tgz#c71575f53cef97a7e532af0eb5ef06e4615e8232" + integrity sha512-StPCZLGPNG9KhXeNCrqTkIK09s7D6+8n0w754SRY8PUvDXFLLovrFFo4ubd82fytRWS5bFntsWA5SX4sODxuiw== dependencies: classnames "^2.3.0" eventemitter3 "^5.0.0" @@ -1273,11 +1217,6 @@ ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - arg@^4.1.0: version "4.1.3" resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" @@ -1295,13 +1234,6 @@ aria-hidden@^1.1.3: dependencies: tslib "^2.0.0" -aria-query@5.1.3: - version "5.1.3" - resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz" - integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== - dependencies: - deep-equal "^2.0.5" - aria-query@^5.1.3: version "5.3.0" resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz" @@ -1479,6 +1411,11 @@ balanced-match@^1.0.0: resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base16@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" + integrity sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ== + big-integer@^1.6.44: version "1.6.51" resolved "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz" @@ -1645,7 +1582,7 @@ code-point-at@^1.0.0: resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== -color-convert@^1.9.0: +color-convert@^1.9.0, color-convert@^1.9.3: version "1.9.3" resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -1664,11 +1601,27 @@ color-name@1.1.3: resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== -color-name@~1.1.4: +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-string@^1.6.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== + dependencies: + color-convert "^1.9.3" + color-string "^1.6.0" + combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" @@ -1750,6 +1703,11 @@ csstype@3.0.9: resolved "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz" integrity sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw== +csstype@^3.0.10: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + csstype@^3.0.2, csstype@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz" @@ -1811,40 +1769,16 @@ decamelize@^1.1.1: resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== -deeks@3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/deeks/-/deeks-3.0.1.tgz" - integrity sha512-rBAWIXSKXvGQOdG5GLGaGMfOCHvvHln2fFJ2UW8cvJouoAhOiNiLGHLYYcyqpeNQ93vPBeRuzv1bAr8bvceakw== +deeks@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/deeks/-/deeks-3.0.2.tgz#49d908fb2b797554a139aede17176b11679eb89f" + integrity sha512-c6OmjIygIB/avwXwEQOiODS+nw6fEX4cvOdDMqdL7dt3dicV/xykAJ9AeVc/8/JTVQDuacjRc9KCMmXafL1Y4A== deep-copy@^1.4.1: version "1.4.2" resolved "https://registry.npmjs.org/deep-copy/-/deep-copy-1.4.2.tgz" integrity sha512-VxZwQ/1+WGQPl5nE67uLhh7OqdrmqI1OazrraO9Bbw/M8Bt6Mol/RxzDA6N6ZgRXpsG/W9PgUj8E1LHHBEq2GQ== -deep-equal@^2.0.5: - version "2.2.2" - resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz" - integrity sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - es-get-iterator "^1.1.3" - get-intrinsic "^1.2.1" - is-arguments "^1.1.1" - is-array-buffer "^3.0.2" - is-date-object "^1.0.5" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - isarray "^2.0.5" - object-is "^1.1.5" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.0" - side-channel "^1.0.4" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" - deep-equal@~1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz" @@ -1941,10 +1875,10 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -doc-path@4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/doc-path/-/doc-path-4.0.1.tgz" - integrity sha512-3EpO6FV6R1f4dimmTBhDCqqWZFZGTLGoagojNONcH3fWabtCh+SwSlzk2xNeajzaPvDAOxUUN6euh0JajTQ4Zg== +doc-path@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/doc-path/-/doc-path-4.0.2.tgz#157ddd33b86282bdf58cf4b9979bf9483cf9a95f" + integrity sha512-OqZEk7EM1aP3JpO+mq0pv1msEJWrzZVXu4q3YjEYJKc+Wt3/chac4KJdaGueK5IGemOwfptrLctG9I8xkb59qQ== doctrine@^2.1.0: version "2.1.0" @@ -1960,11 +1894,6 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-accessibility-api@^0.5.9: - version "0.5.16" - resolved "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz" - integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== - dom-serializer@^1.0.1: version "1.4.1" resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" @@ -2158,21 +2087,6 @@ es-array-method-boxes-properly@^1.0.0: resolved "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== -es-get-iterator@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz" - integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - is-arguments "^1.1.1" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.7" - isarray "^2.0.5" - stop-iteration-iterator "^1.0.0" - es-iterator-helpers@^1.0.12: version "1.0.13" resolved "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.13.tgz" @@ -2418,23 +2332,24 @@ eslint-scope@^7.2.2: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.2: +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: version "3.4.3" resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@8.46.0: - version "8.46.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz" - integrity sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg== +eslint@8.56.0: + version "8.56.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" + integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.1" - "@eslint/js" "^8.46.0" - "@humanwhocodes/config-array" "^0.11.10" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.56.0" + "@humanwhocodes/config-array" "^0.11.13" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -2442,7 +2357,7 @@ eslint@8.46.0: doctrine "^3.0.0" escape-string-regexp "^4.0.0" eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.2" + eslint-visitor-keys "^3.4.3" espree "^9.6.1" esquery "^1.4.2" esutils "^2.0.2" @@ -2658,25 +2573,12 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" -framer-motion@7.8.0: - version "7.8.0" - resolved "https://registry.npmjs.org/framer-motion/-/framer-motion-7.8.0.tgz" - integrity sha512-Yzbc0RGzKnkdRxPZbJIVtizX40hLGErXBRI6Uz1WE0OLNZpZqqZa9HaI/sdAhrx4215uczQ+m3C9PA+pwHf+gA== +framer-motion@^10.16.16: + version "10.16.16" + resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-10.16.16.tgz#a10a03e1190a717109163cfff212a84c8ad11b0c" + integrity sha512-je6j91rd7NmUX7L1XHouwJ4v3R+SO4umso2LUcgOct3rHZ0PajZ80ETYZTajzEXEl9DlKyzjyt4AvGQ+lrebOw== dependencies: - "@motionone/dom" "^10.15.3" - hey-listen "^1.0.8" - tslib "2.4.0" - optionalDependencies: - "@emotion/is-prop-valid" "^0.8.2" - -framer-motion@^7.6.7: - version "7.10.3" - resolved "https://registry.npmjs.org/framer-motion/-/framer-motion-7.10.3.tgz" - integrity sha512-k2ccYeZNSpPg//HTaqrU+4pRq9f9ZpaaN7rr0+Rx5zA4wZLbk547wtDzge2db1sB+1mnJ6r59P4xb+aEIi/W+w== - dependencies: - "@motionone/dom" "^10.15.3" - hey-listen "^1.0.8" - tslib "2.4.0" + tslib "^2.4.0" optionalDependencies: "@emotion/is-prop-valid" "^0.8.2" @@ -2955,11 +2857,6 @@ hasown@^2.0.0: dependencies: function-bind "^1.1.2" -hey-listen@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz" - integrity sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q== - hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz" @@ -3075,7 +2972,7 @@ inline-style-parser@0.1.1: resolved "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz" integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== -internal-slot@^1.0.3, internal-slot@^1.0.4, internal-slot@^1.0.5: +internal-slot@^1.0.3, internal-slot@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz" integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== @@ -3096,7 +2993,7 @@ invert-kv@^1.0.0: resolved "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz" integrity sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ== -is-arguments@^1.0.4, is-arguments@^1.1.1: +is-arguments@^1.0.4: version "1.1.1" resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== @@ -3118,6 +3015,11 @@ is-arrayish@^0.2.1: resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + is-async-function@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz" @@ -3209,7 +3111,7 @@ is-inside-container@^1.0.0: dependencies: is-docker "^3.0.0" -is-map@^2.0.1, is-map@^2.0.2: +is-map@^2.0.1: version "2.0.2" resolved "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz" integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== @@ -3251,7 +3153,7 @@ is-regex@^1.0.4, is-regex@^1.1.4, is-regex@~1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-set@^2.0.1, is-set@^2.0.2: +is-set@^2.0.1: version "2.0.2" resolved "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz" integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== @@ -3399,13 +3301,13 @@ jsesc@^2.5.1: resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -json-2-csv@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/json-2-csv/-/json-2-csv-4.1.0.tgz" - integrity sha512-O/8UMNeXOuQ3ztsuMpkr7ybE+GEL3KVwOX5qdXBt44Qabt3UdNCIuUMGPNMQ6LPxZZZHfw5UxjMclxZ4IU2lTQ== +json-2-csv@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-2-csv/-/json-2-csv-5.0.1.tgz#ffbdd597cfdcfa7ec805a039cbdba752dc3d8af4" + integrity sha512-rP9ChyMskS0angbvFdQ43SwEe72mEvqcY1/V2OeukQWxtlreUuZWhMlTdWjtd4L6kJxq+HPFTI06yqLvZiEVIA== dependencies: - deeks "3.0.1" - doc-path "4.0.1" + deeks "3.0.2" + doc-path "4.0.2" json-parse-even-better-errors@^2.3.0: version "2.3.1" @@ -3443,18 +3345,6 @@ jsonc-parser@^3.2.0: resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== -jsongraph-react@^0.0.12: - version "0.0.12" - resolved "https://registry.yarnpkg.com/jsongraph-react/-/jsongraph-react-0.0.12.tgz#e6625c08367079505e97c983264148ad02a1edf6" - integrity sha512-O67ynIFtO7ePGtCqcj5MVWDEjshEib/Jl+hi9WuU2T3+DIxfNobmfHn6iktI5S4Fr8JoXksmKcC4SPx8RQlS3g== - dependencies: - jsonc-parser "^3.2.0" - react-linkify-it "^1.0.8" - react-zoomable-ui "^0.11.0" - reaflow "^5.2.5" - use-long-press "^3.2.0" - zustand "^4.4.0" - jsonwebtoken@^9.0.2: version "9.0.2" resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz" @@ -3598,6 +3488,11 @@ lodash.clamp@^4.0.0: resolved "https://registry.npmjs.org/lodash.clamp/-/lodash.clamp-4.0.3.tgz" integrity sha512-HvzRFWjtcguTW7yd8NJBshuNaCa8aqNFtnswdT7f/cMd/1YKy5Zzoq4W/Oxvnx9l7aeY258uSdDfM793+eLsVg== +lodash.curry@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" + integrity sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA== + lodash.debounce@^4.0.0, lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" @@ -3682,11 +3577,6 @@ lru_map@^0.3.3: resolved "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz" integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== -lz-string@^1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz" - integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== - magic-string@^0.27.0: version "0.27.0" resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz" @@ -3905,7 +3795,7 @@ object-inspect@^1.13.1: resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== -object-is@^1.0.1, object-is@^1.1.5: +object-is@^1.0.1: version "1.1.5" resolved "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz" integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== @@ -4223,19 +4113,10 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^3.0.1: - version "3.0.2" - resolved "https://registry.npmjs.org/prettier/-/prettier-3.0.2.tgz" - integrity sha512-o2YR9qtniXvwEZlOKbveKfDQVyqxbEIWn48Z8m3ZJjBjcCmUy3xZGIv+7AkaeuaTr6yPXJjwv07ZWlsWbEy1rQ== - -pretty-format@^27.0.2: - version "27.5.1" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== - dependencies: - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^17.0.1" +prettier@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.1.1.tgz#6ba9f23165d690b6cbdaa88cb0807278f7019848" + integrity sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw== prism-react-renderer@^1.2.1: version "1.3.5" @@ -4276,16 +4157,29 @@ queue-microtask@^1.2.2: resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -rdk@^6.5.0: - version "6.5.0" - resolved "https://registry.npmjs.org/rdk/-/rdk-6.5.0.tgz" - integrity sha512-Jrv4YFVH07JI03wxwsQhosypdyqOHirzNU0pfmteIfylhSpaIi8VnAp3MbznD3/ZKZyt6YRj0kMtQopTwIxMUw== +rdk@^6.6.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/rdk/-/rdk-6.6.0.tgz#7cd6e28657d12177be8883852f5e83b47dd3be28" + integrity sha512-c+j6GNRVNri0kXassZjR5FGsVKn1/m7Sgafr2JDoV4eeXwNNaU+XVv46TwZLYSL29OhKuov6EJd0BCl6gY6sAg== dependencies: body-scroll-lock "^4.0.0-beta.0" classnames "^2.3.2" - framer-motion "7.8.0" + framer-motion "^10.16.16" popper.js "^1.16.1" +react-base16-styling@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.9.1.tgz#4906b4c0a51636f2dca2cea8b682175aa8bd0c92" + integrity sha512-1s0CY1zRBOQ5M3T61wetEpvQmsYSNtWEcdYzyZNxKa8t7oDvaOn9d21xrGezGAHFWLM7SHcktPuPTrvoqxSfKw== + dependencies: + "@babel/runtime" "^7.16.7" + "@types/base16" "^1.0.2" + "@types/lodash" "^4.14.178" + base16 "^1.0.0" + color "^3.2.1" + csstype "^3.0.10" + lodash.curry "^4.1.1" + react-cool-dimensions@^2.0.7: version "2.0.7" resolved "https://registry.npmjs.org/react-cool-dimensions/-/react-cool-dimensions-2.0.7.tgz" @@ -4316,22 +4210,26 @@ react-hot-toast@^2.4.1: dependencies: goober "^2.1.10" -react-icons@^4.11.0: - version "4.11.0" - resolved "https://registry.npmjs.org/react-icons/-/react-icons-4.11.0.tgz" - integrity sha512-V+4khzYcE5EBk/BvcuYRq6V/osf11ODUM2J8hg2FDSswRrGvqiYUYPRy4OdrWaQOBj4NcpJfmHZLNaD+VH0TyA== +react-icons@^4.12.0: + version "4.12.0" + resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.12.0.tgz#54806159a966961bfd5cdb26e492f4dafd6a8d78" + integrity sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw== react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-json-tree@^0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/react-json-tree/-/react-json-tree-0.18.0.tgz#3c4bec7b091f50dcc9c09652d89c8f4373ebf3ea" + integrity sha512-Qe6HKSXrr++n9Y31nkRJ3XvQMATISpqigH1vEKhLwB56+nk5thTP0ITThpjxY6ZG/ubpVq/aEHIcyLP/OPHxeA== + dependencies: + "@babel/runtime" "^7.20.6" + "@types/lodash" "^4.14.191" + react-base16-styling "^0.9.1" -react-linkify-it@^1.0.7, react-linkify-it@^1.0.8: +react-linkify-it@^1.0.7: version "1.0.8" resolved "https://registry.npmjs.org/react-linkify-it/-/react-linkify-it-1.0.8.tgz" integrity sha512-QjwhIaCXmJ2CiFIl4mIOYN+Z+OhwRLHNMKmWG9SSAzKgpltOnOQjzvj8ruhnvOhgKRc6yqjW0vH0J6LEbTm50Q== @@ -4443,10 +4341,10 @@ readable-stream@~1.0.17, readable-stream@~1.0.27-1: isarray "0.0.1" string_decoder "~0.10.x" -reaflow@5.2.6: - version "5.2.6" - resolved "https://registry.npmjs.org/reaflow/-/reaflow-5.2.6.tgz" - integrity sha512-jurx9X7CLYR7SI5len9uAhoyKWHNzu6gzn9NJWLFKeUHpvCC4CUBMvh4jXL1qPQJpV0kt6OGbiZREnpQvZ6G8A== +reaflow@5.2.8: + version "5.2.8" + resolved "https://registry.yarnpkg.com/reaflow/-/reaflow-5.2.8.tgz#2261ccba9eba38fd7a9b5c13088572579abcf257" + integrity sha512-TZNmJ6rZf3SeTW+ClIwbrchiNtIAltPrFgozRK475sgkIBmaOdQ2V1Xh7MNEYt0rjhlyQERYGOIChAAJRlHpcA== dependencies: "@juggle/resize-observer" "^3.4.0" calculate-size "^1.1.1" @@ -4454,33 +4352,11 @@ reaflow@5.2.6: d3-shape "^3.0.1" elkjs "^0.8.2" ellipsize "^0.2.0" - framer-motion "^7.6.7" + framer-motion "^10.16.16" kld-affine "^2.1.1" kld-intersections "^0.7.0" p-cancelable "^3.0.0" - rdk "^6.5.0" - react-cool-dimensions "^2.0.7" - react-fast-compare "^3.2.2" - react-use-gesture "^8.0.1" - reakeys "^1.3.1" - undoo "^0.5.0" - -reaflow@^5.2.5: - version "5.2.7" - resolved "https://registry.yarnpkg.com/reaflow/-/reaflow-5.2.7.tgz#23b95f836f1c90c8016d381930d68b9c19af84dc" - integrity sha512-5TrZWHarclyFNWi+ecrhrYzlN+WIO2muKJcscFZbH7/JfK6GPNbs3JBju/Un90a6i/4M6yUi15SUraCl8gzVjg== - dependencies: - "@juggle/resize-observer" "^3.4.0" - calculate-size "^1.1.1" - classnames "^2.3.2" - d3-shape "^3.0.1" - elkjs "^0.8.2" - ellipsize "^0.2.0" - framer-motion "^7.6.7" - kld-affine "^2.1.1" - kld-intersections "^0.7.0" - p-cancelable "^3.0.0" - rdk "^6.5.0" + rdk "^6.6.0" react-cool-dimensions "^2.0.7" react-fast-compare "^3.2.2" react-use-gesture "^8.0.1" @@ -4739,6 +4615,13 @@ signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + sirv@^1.0.7: version "1.0.19" resolved "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz" @@ -4801,13 +4684,6 @@ state-local@^1.0.6: resolved "https://registry.npmjs.org/state-local/-/state-local-1.0.7.tgz" integrity sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w== -stop-iteration-iterator@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz" - integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== - dependencies: - internal-slot "^1.0.4" - streamsearch@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" @@ -5001,10 +4877,10 @@ style-to-object@0.3.0: dependencies: inline-style-parser "0.1.1" -styled-components@^6.0.8: - version "6.1.0" - resolved "https://registry.npmjs.org/styled-components/-/styled-components-6.1.0.tgz" - integrity sha512-VWNfYYBuXzuLS/QYEeoPgMErP26WL+dX9//rEh80B2mmlS1yRxRxuL5eax4m6ybYEUoHWlTy2XOU32767mlMkg== +styled-components@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-6.1.1.tgz#a5414ada07fb1c17b96a26a05369daa4e2ad55e5" + integrity sha512-cpZZP5RrKRIClBW5Eby4JM1wElLVP4NQrJbJ0h10TidTyJf4SIIwa3zLXOoPb4gJi8MsJ8mjq5mu2IrEhZIAcQ== dependencies: "@emotion/is-prop-valid" "^1.2.1" "@emotion/unitless" "^0.8.0" @@ -5177,17 +5053,12 @@ tsconfig-paths@^3.14.2: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@2.4.0: - version "2.4.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - tslib@^1.8.1: version "1.14.1" resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, "tslib@^2.4.1 || ^1.9.3", tslib@^2.5.0, tslib@^2.6.0: +tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0, "tslib@^2.4.1 || ^1.9.3", tslib@^2.5.0, tslib@^2.6.0: version "2.6.2" resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== @@ -5331,7 +5202,7 @@ use-latest@^1.2.1: dependencies: use-isomorphic-layout-effect "^1.1.1" -use-long-press@^3.1.5, use-long-press@^3.2.0: +use-long-press@^3.1.5: version "3.2.0" resolved "https://registry.npmjs.org/use-long-press/-/use-long-press-3.2.0.tgz" integrity sha512-uq5o2qFR1VRjHn8Of7Fl344/AGvgk7C5Mcb4aSb1ZRVp6PkgdXJJLdRrlSTJQVkkQcDuqFbFc3mDX4COg7mRTA== @@ -5598,9 +5469,9 @@ zod@3.21.4: resolved "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz" integrity sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw== -zustand@^4.4.0: - version "4.4.1" - resolved "https://registry.npmjs.org/zustand/-/zustand-4.4.1.tgz" - integrity sha512-QCPfstAS4EBiTQzlaGP1gmorkh/UL1Leaj2tdj+zZCZ/9bm0WS7sI2wnfD5lpOszFqWJ1DcPnGoY8RDL61uokw== +zustand@^4.4.7: + version "4.4.7" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.4.7.tgz#355406be6b11ab335f59a66d2cf9815e8f24038c" + integrity sha512-QFJWJMdlETcI69paJwhSMJz7PPWjVP8Sjhclxmxmxv/RYI7ZOvR5BHX+ktH0we9gTWQMxcne8q1OY8xxz604gw== dependencies: use-sync-external-store "1.2.0"