chore: optimize bundle

This commit is contained in:
AykutSarac 2023-07-16 15:44:10 +03:00
parent 4787758551
commit 0e35c6a1e9
No known key found for this signature in database
60 changed files with 631 additions and 499 deletions

View File

@ -6,7 +6,24 @@
"space-in-parens": "error", "space-in-parens": "error",
"no-empty": "error", "no-empty": "error",
"no-multiple-empty-lines": "error", "no-multiple-empty-lines": "error",
"no-irregular-whitespace": "error" "no-irregular-whitespace": "error",
"strict": ["error", "never"],
"linebreak-style": ["error", "unix"],
"quotes": ["error", "double", { "avoidEscape": true }],
"semi": ["error", "always"],
"padding-line-between-statements": [
"error",
{ "blankLine": "always", "prev": ["const", "let", "var"], "next": "*" },
{ "blankLine": "any", "prev": ["const", "let", "var"], "next": ["const", "let", "var"] }
],
"space-before-function-paren": [
"error",
{
"anonymous": "always",
"named": "never",
"asyncArrow": "always"
}
]
}, },
"extends": ["next/core-web-vitals"], "extends": ["next/core-web-vitals"],
"plugins": ["prettier", "unused-imports"] "plugins": ["prettier", "unused-imports"]

View File

@ -1,9 +1,13 @@
const { withSentryConfig } = require("@sentry/nextjs"); const { withSentryConfig } = require("@sentry/nextjs");
const withBundleAnalyzer = require("@next/bundle-analyzer")({
enabled: process.env.ANALYZE === "true",
});
/** /**
* @type {import('next').NextConfig} * @type {import('next').NextConfig}
*/ */
const config = { const config = {
output: "export",
reactStrictMode: false, reactStrictMode: false,
productionBrowserSourceMaps: true, productionBrowserSourceMaps: true,
compiler: { compiler: {
@ -11,17 +15,20 @@ const config = {
}, },
}; };
module.exports = withSentryConfig( module.exports =
config, process.env.ANALYZE === "true"
{ ? withBundleAnalyzer(config)
silent: true, : withSentryConfig(
org: "aykut-sarac", config,
project: "json-crack", {
}, silent: true,
{ org: "aykut-sarac",
widenClientFileUpload: true, project: "json-crack",
hideSourceMaps: true, },
disableLogger: true, {
disableServerWebpackPlugin: true, widenClientFileUpload: true,
} hideSourceMaps: true,
); disableLogger: true,
disableServerWebpackPlugin: true,
}
);

View File

@ -1,59 +1,60 @@
{ {
"name": "json-crack", "name": "json-crack",
"private": true, "private": true,
"version": "v2.8.0", "version": "v3.0.0",
"author": "https://github.com/AykutSarac", "author": "https://github.com/AykutSarac",
"homepage": "https://jsoncrack.com", "homepage": "https://jsoncrack.com",
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",
"build": "next build && next export", "build": "next build",
"analyze": "ANALYZE=true npm run build",
"start": "next start", "start": "next start",
"lint": "tsc && eslint src && prettier --check src", "lint": "tsc && eslint src && prettier --check src",
"lint:fix": "prettier --write src & eslint --fix src", "lint:fix": "eslint --fix src & prettier --write src",
"deploy": "gh-pages -d out -t true" "deploy": "gh-pages -d out -t true"
}, },
"dependencies": { "dependencies": {
"@emotion/react": "^11.11.1", "@emotion/react": "^11.11.1",
"@emotion/server": "^11.11.0", "@emotion/server": "^11.11.0",
"@mantine/core": "^6.0.13", "@mantine/core": "^6.0.16",
"@mantine/form": "^6.0.13", "@mantine/form": "^6.0.16",
"@mantine/hooks": "^6.0.13", "@mantine/hooks": "^6.0.16",
"@mantine/next": "^6.0.13", "@mantine/next": "^6.0.16",
"@mantine/prism": "^6.0.13", "@mantine/prism": "^6.0.16",
"@monaco-editor/react": "^4.5.1", "@monaco-editor/react": "^4.5.1",
"@sentry/nextjs": "^7.55.2", "@sentry/nextjs": "^7.55.2",
"@tanstack/react-query": "^4.29.14", "@tanstack/react-query": "^4.29.25",
"allotment": "^1.19.0", "allotment": "^1.19.0",
"altogic": "^2.3.9", "altogic": "^2.3.9",
"axios": "^1.4.0", "axios": "^1.4.0",
"dayjs": "^1.11.8", "dayjs": "^1.11.9",
"html-to-image": "^1.11.11", "html-to-image": "^1.11.11",
"json-2-csv": "^4.0.0", "json-2-csv": "^4.0.0",
"jsonc-parser": "^3.2.0", "jsonc-parser": "^3.2.0",
"jsonwebtoken": "^9.0.0", "jsonwebtoken": "^9.0.1",
"jxon": "^2.0.0-beta.5", "jxon": "^2.0.0-beta.5",
"lodash.debounce": "^4.0.8", "lodash.debounce": "^4.0.8",
"lodash.get": "^4.4.2", "lodash.get": "^4.4.2",
"lodash.set": "^4.3.2", "lodash.set": "^4.3.2",
"lz-string": "^1.5.0", "lz-string": "^1.5.0",
"next": "13.2.3", "next": "13.3.0",
"react": "^18.2.0", "react": "^18.2.0",
"react-color": "^2.19.3", "react-color": "^2.19.3",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-hot-toast": "^2.4.1", "react-hot-toast": "^2.4.1",
"react-icons": "^4.9.0", "react-icons": "^4.10.1",
"react-linkify-it": "^1.0.7", "react-linkify-it": "^1.0.7",
"react-simple-typewriter": "^5.0.1", "react-simple-typewriter": "^5.0.1",
"react-syntax-highlighter": "^15.5.0", "react-syntax-highlighter": "^15.5.0",
"react-zoom-pan-pinch": "^3.0.8", "react-zoom-pan-pinch": "^3.1.0",
"reaflow": "5.1.2", "reaflow": "5.1.2",
"styled-components": "^5.3.8", "styled-components": "^5.3.8",
"toml": "^3.0.0", "toml": "^3.0.0",
"universal-cookie": "^4.0.4", "universal-cookie": "^4.0.4",
"zustand": "^4.3.8" "zustand": "^4.3.9"
}, },
"devDependencies": { "devDependencies": {
"@next/bundle-analyzer": "^13.4.3", "@next/bundle-analyzer": "^13.4.10",
"@testing-library/react": "^14.0.0", "@testing-library/react": "^14.0.0",
"@trivago/prettier-plugin-sort-imports": "^4.1.1", "@trivago/prettier-plugin-sort-imports": "^4.1.1",
"@types/jsonwebtoken": "^9.0.2", "@types/jsonwebtoken": "^9.0.2",
@ -61,17 +62,17 @@
"@types/lodash.get": "^4.4.7", "@types/lodash.get": "^4.4.7",
"@types/lodash.set": "^4.3.7", "@types/lodash.set": "^4.3.7",
"@types/lz-string": "^1.5.0", "@types/lz-string": "^1.5.0",
"@types/node": "^20.2.1", "@types/node": "^20.4.2",
"@types/react": "18.2.6", "@types/react": "18.2.6",
"@types/react-color": "^3.0.6", "@types/react-color": "^3.0.6",
"@types/react-syntax-highlighter": "^15.5.7", "@types/react-syntax-highlighter": "^15.5.7",
"@types/styled-components": "^5.1.26", "@types/styled-components": "^5.1.26",
"eslint": "8.43.0", "eslint": "8.45.0",
"eslint-config-next": "13.4.6", "eslint-config-next": "13.4.10",
"eslint-plugin-prettier": "^4.2.1", "eslint-plugin-prettier": "^5.0.0",
"eslint-plugin-unused-imports": "^2.0.0", "eslint-plugin-unused-imports": "^3.0.0",
"prettier": "^2.8.8", "prettier": "^3.0.0",
"ts-node": "^10.9.1", "ts-node": "^10.9.1",
"typescript": "5.0.4" "typescript": "5.1.6"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -1,13 +0,0 @@
import { APIError, createClient } from "altogic";
let envUrl = process.env.NEXT_PUBLIC_ALTOGIC_ENV_URL as string;
let clientKey = process.env.NEXT_PUBLIC_ALTOGIC_CLIENT_KEY as string;
const altogic = createClient(envUrl, clientKey);
export interface AltogicResponse<T> {
data: T;
errors: APIError | null;
}
export { altogic };

View File

@ -45,13 +45,17 @@ const AdWrapper = styled.div`
background: #fff; background: #fff;
box-shadow: 0 1px 4px 1px hsla(0, 0%, 0%, 0.15); box-shadow: 0 1px 4px 1px hsla(0, 0%, 0%, 0.15);
opacity: 0; opacity: 0;
transition: transform 0.2s ease-in-out, opacity 0.1s ease-in-out; transition:
transform 0.2s ease-in-out,
opacity 0.1s ease-in-out;
transform: scale(1) translateY(-50px); transform: scale(1) translateY(-50px);
} }
& #native-button:checked + .native-overlay { & #native-button:checked + .native-overlay {
opacity: 1; opacity: 1;
transition: transform 0.2s ease-in-out, opacity 0.4s ease-in-out; transition:
transform 0.2s ease-in-out,
opacity 0.4s ease-in-out;
transform: scale(1) translateY(0); transform: scale(1) translateY(0);
} }
@ -119,6 +123,7 @@ export const AdTest = () => {
if (window.innerWidth < 660) return; if (window.innerWidth < 660) return;
ref.current.innerHTML = ""; ref.current.innerHTML = "";
const s = document.createElement("script"); const s = document.createElement("script");
s.id = "_carbonads_js"; s.id = "_carbonads_js";
s.innerHTML = `(function() { s.innerHTML = `(function() {
if (typeof _bsa !== 'undefined' && _bsa) { if (typeof _bsa !== 'undefined' && _bsa) {

View File

@ -9,8 +9,9 @@ export const CarbonAds = () => {
if (!premium) { if (!premium) {
ref.current.innerHTML = ""; ref.current.innerHTML = "";
const s = document.createElement("script"); const s = document.createElement("script");
s.id = "_carbonads_js"; s.id = "_carbonads_js";
s.src = `//cdn.carbonads.com/carbon.js?serve=CE7IPKQL&placement=jsoncrackcom`; s.src = "//cdn.carbonads.com/carbon.js?serve=CE7IPKQL&placement=jsoncrackcom";
ref.current.appendChild(s); ref.current.appendChild(s);
} }
}, [premium]); }, [premium]);

View File

@ -5,11 +5,12 @@ import * as Styled from "./styles";
const Node: React.FC<CustomNodeProps> = ({ node, x, y }) => { const Node: React.FC<CustomNodeProps> = ({ node, x, y }) => {
const { text, width, height, data } = node; const { text, width, height, data } = node;
if (data.isEmpty) return null;
if (data?.isEmpty) return null;
return ( return (
<Styled.StyledForeignObject width={width} height={height} x={0} y={0} isObject> <Styled.StyledForeignObject width={width} height={height} x={0} y={0} isObject>
{text.map((val, idx) => { {(text as [string, unknown][]).map((val, idx) => {
return ( return (
<Styled.StyledRow <Styled.StyledRow
data-key={JSON.stringify(val)} data-key={JSON.stringify(val)}

View File

@ -2,9 +2,9 @@ import React from "react";
import styled from "styled-components"; import styled from "styled-components";
import { MdLink, MdLinkOff } from "react-icons/md"; import { MdLink, MdLinkOff } from "react-icons/md";
import { CustomNodeProps } from "src/components/CustomNode"; import { CustomNodeProps } from "src/components/CustomNode";
import { isContentImage } from "src/lib/utils/core/calculateNodeSize";
import useGraph from "src/store/useGraph"; import useGraph from "src/store/useGraph";
import useStored from "src/store/useStored"; import useStored from "src/store/useStored";
import { isContentImage } from "src/utils/core/calculateNodeSize";
import { TextRenderer } from "./TextRenderer"; import { TextRenderer } from "./TextRenderer";
import * as Styled from "./styles"; import * as Styled from "./styles";
@ -56,7 +56,7 @@ const Node: React.FC<CustomNodeProps> = ({ node, x, y, hasCollapse = false }) =>
const expandNodes = useGraph(state => state.expandNodes); const expandNodes = useGraph(state => state.expandNodes);
const collapseNodes = useGraph(state => state.collapseNodes); const collapseNodes = useGraph(state => state.collapseNodes);
const isExpanded = useGraph(state => state.collapsedParents.includes(id)); const isExpanded = useGraph(state => state.collapsedParents.includes(id));
const isImage = imagePreview && isContentImage(text); const isImage = imagePreview && isContentImage(text as string);
const handleExpand = (e: React.MouseEvent<HTMLButtonElement>) => { const handleExpand = (e: React.MouseEvent<HTMLButtonElement>) => {
e.stopPropagation(); e.stopPropagation();
@ -75,7 +75,7 @@ const Node: React.FC<CustomNodeProps> = ({ node, x, y, hasCollapse = false }) =>
> >
{isImage ? ( {isImage ? (
<StyledImageWrapper> <StyledImageWrapper>
<StyledImage src={text} width="70" height="70" loading="lazy" /> <StyledImage src={text as string} width="70" height="70" loading="lazy" />
</StyledImageWrapper> </StyledImageWrapper>
) : ( ) : (
<StyledTextNodeWrapper <StyledTextNodeWrapper

View File

@ -1,5 +1,6 @@
import React from "react"; import React from "react";
import { Node, NodeProps } from "reaflow"; import { Node, NodeProps } from "reaflow";
import { NodeData } from "src/types/models";
import { ObjectNode } from "./ObjectNode"; import { ObjectNode } from "./ObjectNode";
import { TextNode } from "./TextNode"; import { TextNode } from "./TextNode";

View File

@ -4,7 +4,7 @@ import Script from "next/script";
const isDevelopment = process.env.NODE_ENV === "development"; const isDevelopment = process.env.NODE_ENV === "development";
const GA_TRACKING_ID = process.env.NEXT_PUBLIC_GA_ID; const GA_TRACKING_ID = process.env.NEXT_PUBLIC_GA_ID;
export const GoogleAnalytics: React.FC = () => { const GoogleAnalytics: React.FC = () => {
if (isDevelopment) return null; if (isDevelopment) return null;
return ( return (
@ -30,3 +30,5 @@ export const GoogleAnalytics: React.FC = () => {
</> </>
); );
}; };
export default GoogleAnalytics;

View File

@ -64,20 +64,32 @@ const StyledPremiumView = styled.div`
.glowing span:nth-child(3n + 1)::before { .glowing span:nth-child(3n + 1)::before {
background: rgba(134, 255, 0, 1); background: rgba(134, 255, 0, 1);
box-shadow: 0 0 20px rgba(134, 255, 0, 1), 0 0 40px rgba(134, 255, 0, 1), box-shadow:
0 0 60px rgba(134, 255, 0, 1), 0 0 80px rgba(134, 255, 0, 1), 0 0 0 8px rgba(134, 255, 0, 0.1); 0 0 20px rgba(134, 255, 0, 1),
0 0 40px rgba(134, 255, 0, 1),
0 0 60px rgba(134, 255, 0, 1),
0 0 80px rgba(134, 255, 0, 1),
0 0 0 8px rgba(134, 255, 0, 0.1);
} }
.glowing span:nth-child(3n + 2)::before { .glowing span:nth-child(3n + 2)::before {
background: rgba(255, 214, 0, 1); background: rgba(255, 214, 0, 1);
box-shadow: 0 0 20px rgba(255, 214, 0, 1), 0 0 40px rgba(255, 214, 0, 1), box-shadow:
0 0 60px rgba(255, 214, 0, 1), 0 0 80px rgba(255, 214, 0, 1), 0 0 0 8px rgba(255, 214, 0, 0.1); 0 0 20px rgba(255, 214, 0, 1),
0 0 40px rgba(255, 214, 0, 1),
0 0 60px rgba(255, 214, 0, 1),
0 0 80px rgba(255, 214, 0, 1),
0 0 0 8px rgba(255, 214, 0, 0.1);
} }
.glowing span:nth-child(3n + 3)::before { .glowing span:nth-child(3n + 3)::before {
background: rgba(0, 226, 255, 1); background: rgba(0, 226, 255, 1);
box-shadow: 0 0 20px rgba(0, 226, 255, 1), 0 0 40px rgba(0, 226, 255, 1), box-shadow:
0 0 60px rgba(0, 226, 255, 1), 0 0 80px rgba(0, 226, 255, 1), 0 0 0 8px rgba(0, 226, 255, 0.1); 0 0 20px rgba(0, 226, 255, 1),
0 0 40px rgba(0, 226, 255, 1),
0 0 60px rgba(0, 226, 255, 1),
0 0 80px rgba(0, 226, 255, 1),
0 0 0 8px rgba(0, 226, 255, 0.1);
} }
.glowing span:nth-child(3n + 1) { .glowing span:nth-child(3n + 1) {

View File

@ -8,11 +8,14 @@ import useToggleHide from "src/hooks/useToggleHide";
import useGraph from "src/store/useGraph"; import useGraph from "src/store/useGraph";
import useModal from "src/store/useModal"; import useModal from "src/store/useModal";
import useUser from "src/store/useUser"; import useUser from "src/store/useUser";
import { NodeData } from "src/types/models";
import { Loading } from "../../layout/Loading"; import { Loading } from "../../layout/Loading";
import { ErrorView } from "./ErrorView"; import { ErrorView } from "./ErrorView";
import { PremiumView } from "./PremiumView"; import { PremiumView } from "./PremiumView";
const Canvas = dynamic(() => import("reaflow").then(r => r.Canvas)); const Canvas = dynamic(() => import("reaflow").then(r => r.Canvas), {
ssr: false,
});
interface GraphProps { interface GraphProps {
isWidget?: boolean; isWidget?: boolean;
@ -32,8 +35,16 @@ const StyledEditorWrapper = styled.div<{ widget: boolean }>`
linear-gradient(90deg, 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(var(--line-color-2) 1px, transparent 1px),
linear-gradient(90deg, 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-position:
background-size: 100px 100px, 100px 100px, 20px 20px, 20px 20px; -1.5px -1.5px,
-1.5px -1.5px,
-1px -1px,
-1px -1px;
background-size:
100px 100px,
100px 100px,
20px 20px,
20px 20px;
:active { :active {
cursor: move; cursor: move;
@ -116,6 +127,7 @@ export const Graph = ({ isWidget = false }: GraphProps) => {
const memoizedNode = React.useCallback( const memoizedNode = React.useCallback(
(props: JSX.IntrinsicAttributes & NodeProps<any>) => ( (props: JSX.IntrinsicAttributes & NodeProps<any>) => (
// @ts-ignore
<CustomNode {...props} onClick={handleNodeClick} animated={false} /> <CustomNode {...props} onClick={handleNodeClick} animated={false} />
), ),
[handleNodeClick] [handleNodeClick]

View File

@ -6,6 +6,7 @@ export const HovercardAds = () => {
React.useEffect(() => { React.useEffect(() => {
const isAvailable = document.querySelectorAll("#_hellobar_")[0]; const isAvailable = document.querySelectorAll("#_hellobar_")[0];
if (typeof window._bsa !== "undefined" && window._bsa && !!!isAvailable) { if (typeof window._bsa !== "undefined" && window._bsa && !!!isAvailable) {
window._bsa.init("hellobar", "CE7IPKQL", "placement:jsoncrackcom"); window._bsa.init("hellobar", "CE7IPKQL", "placement:jsoncrackcom");
} }

View File

@ -1,7 +1,7 @@
import localFont from "next/font/local"; import localFont from "next/font/local";
const monaSans = localFont({ const monaSans = localFont({
src: "../pages/Mona-Sans.woff2", src: "../assets/fonts/Mona-Sans.woff2",
variable: "--mona-sans", variable: "--mona-sans",
display: "swap", display: "swap",
fallback: ["Arial, Helvetica, sans-serif", "Tahoma, Verdana, sans-serif"], fallback: ["Arial, Helvetica, sans-serif", "Tahoma, Verdana, sans-serif"],

View File

@ -1,11 +0,0 @@
/* eslint unused-imports/no-unused-imports: 0 */
enum FileFormat {
"JSON" = "json",
"YAML" = "yaml",
"XML" = "xml",
"TOML" = "toml",
"CSV" = "csv",
}
export { FileFormat };

View File

@ -16,3 +16,5 @@ export const JsonEditor: React.FC = () => {
</StyledEditorWrapper> </StyledEditorWrapper>
); );
}; };
export default JsonEditor;

View File

@ -18,16 +18,16 @@ import {
VscSettingsGear, VscSettingsGear,
} from "react-icons/vsc"; } from "react-icons/vsc";
import { SearchInput } from "src/components/SearchInput"; import { SearchInput } from "src/components/SearchInput";
import { FileFormat } from "src/constants/file";
import { JSONCrackLogo } from "src/layout/JsonCrackLogo"; import { JSONCrackLogo } from "src/layout/JsonCrackLogo";
import { getNextDirection } from "src/lib/utils/graph/getNextDirection";
import { isIframe } from "src/lib/utils/widget";
import useFile from "src/store/useFile"; import useFile from "src/store/useFile";
import useGraph from "src/store/useGraph"; import useGraph from "src/store/useGraph";
import useJson from "src/store/useJson"; import useJson from "src/store/useJson";
import useModal from "src/store/useModal"; import useModal from "src/store/useModal";
import useStored from "src/store/useStored"; import useStored from "src/store/useStored";
import useUser from "src/store/useUser"; import useUser from "src/store/useUser";
import { getNextDirection } from "src/utils/graph/getNextDirection"; import { FileFormat } from "src/types/models";
import { isIframe } from "src/utils/widget";
export const StyledTools = styled.div` export const StyledTools = styled.div`
position: relative; position: relative;
@ -121,6 +121,7 @@ export const Tools: React.FC<{ isWidget?: boolean }> = ({ isWidget = false }) =>
const toggleDirection = () => { const toggleDirection = () => {
const nextDirection = getNextDirection(direction); const nextDirection = getNextDirection(direction);
setDirection(nextDirection); setDirection(nextDirection);
}; };
@ -149,6 +150,7 @@ export const Tools: React.FC<{ isWidget?: boolean }> = ({ isWidget = false }) =>
"mod+f", "mod+f",
() => { () => {
const input = document.querySelector("#search-node") as HTMLInputElement; const input = document.querySelector("#search-node") as HTMLInputElement;
input.focus(); input.focus();
}, },
], ],

View File

@ -3,7 +3,6 @@ import dynamic from "next/dynamic";
import styled from "styled-components"; import styled from "styled-components";
import { Allotment } from "allotment"; import { Allotment } from "allotment";
import "allotment/dist/style.css"; import "allotment/dist/style.css";
import { JsonEditor } from "src/containers/Editor/JsonEditor";
import useGraph from "src/store/useGraph"; import useGraph from "src/store/useGraph";
export const StyledEditor = styled(Allotment)` export const StyledEditor = styled(Allotment)`
@ -17,6 +16,10 @@ export const StyledEditor = styled(Allotment)`
} }
`; `;
const JsonEditor = dynamic(() => import("src/containers/Editor/JsonEditor"), {
ssr: false,
});
const LiveEditor = dynamic(() => import("src/containers/Editor/LiveEditor"), { const LiveEditor = dynamic(() => import("src/containers/Editor/LiveEditor"), {
ssr: false, ssr: false,
}); });

View File

@ -1,7 +1,7 @@
import React from "react"; import React from "react";
import { Modal, Group, Button, Divider, ModalProps, Text, Image, Anchor } from "@mantine/core"; import { Modal, Group, Button, Divider, ModalProps, Text, Image, Anchor } from "@mantine/core";
import { toast } from "react-hot-toast"; import { toast } from "react-hot-toast";
import { altogic } from "src/api/altogic"; import { altogic } from "src/lib/api/altogic";
export const CancelPremiumModal: React.FC<ModalProps> = ({ opened, onClose }) => { export const CancelPremiumModal: React.FC<ModalProps> = ({ opened, onClose }) => {
const [cancelling, setCancelling] = React.useState(false); const [cancelling, setCancelling] = React.useState(false);

View File

@ -43,6 +43,7 @@ const swatches = [
function downloadURI(uri: string, name: string) { function downloadURI(uri: string, name: string) {
var link = document.createElement("a"); var link = document.createElement("a");
link.download = name; link.download = name;
link.href = uri; link.href = uri;
document.body.appendChild(link); document.body.appendChild(link);

View File

@ -10,6 +10,7 @@ export const JWTModal: React.FC<ModalProps> = ({ opened, onClose }) => {
const resolve = () => { const resolve = () => {
if (!token) return; if (!token) return;
const json = decode(token); const json = decode(token);
setContents({ contents: JSON.stringify(json, null, 2) }); setContents({ contents: JSON.stringify(json, null, 2) });
setToken(""); setToken("");
onClose(); onClose();

View File

@ -6,12 +6,12 @@ import vsDark from "prism-react-renderer/themes/vsDark";
import vsLight from "prism-react-renderer/themes/vsLight"; import vsLight from "prism-react-renderer/themes/vsLight";
import { VscLock } from "react-icons/vsc"; import { VscLock } from "react-icons/vsc";
import { shallow } from "zustand/shallow"; import { shallow } from "zustand/shallow";
import { isIframe } from "src/lib/utils/widget";
import useFile from "src/store/useFile"; import useFile from "src/store/useFile";
import useGraph from "src/store/useGraph"; import useGraph from "src/store/useGraph";
import useModal from "src/store/useModal"; import useModal from "src/store/useModal";
import useStored from "src/store/useStored"; import useStored from "src/store/useStored";
import useUser from "src/store/useUser"; import useUser from "src/store/useUser";
import { isIframe } from "src/utils/widget";
const dataToString = (data: any) => { const dataToString = (data: any) => {
const text = Array.isArray(data) ? Object.fromEntries(data) : data; const text = Array.isArray(data) ? Object.fromEntries(data) : data;
@ -53,9 +53,9 @@ export const NodeModal: React.FC<ModalProps> = ({ opened, onClose }) => {
const lightmode = useStored(state => (state.lightmode ? "light" : "vs-dark")); const lightmode = useStored(state => (state.lightmode ? "light" : "vs-dark"));
const [nodeData, path, isParent] = useGraph( const [nodeData, path, isParent] = useGraph(
state => [ state => [
dataToString(state.selectedNode.text), dataToString(state.selectedNode?.text),
state.selectedNode.path, state.selectedNode?.path,
state.selectedNode.data?.isParent, state.selectedNode?.data?.isParent,
], ],
shallow shallow
); );

View File

@ -13,6 +13,7 @@ export const SchemaModal: React.FC<ModalProps> = ({ opened, onClose }) => {
const onApply = () => { const onApply = () => {
try { try {
const parsedSchema = JSON.parse(schema); const parsedSchema = JSON.parse(schema);
setJsonSchema(parsedSchema); setJsonSchema(parsedSchema);
toast.success("Applied schema!"); toast.success("Applied schema!");
onClose(); onClose();

View File

@ -1,7 +1,7 @@
import React from "react"; import React from "react";
import { useDebouncedValue } from "@mantine/hooks"; import { useDebouncedValue } from "@mantine/hooks";
import { searchQuery, cleanupHighlight, highlightMatchedNodes } from "src/lib/utils/graph/search";
import useGraph from "src/store/useGraph"; import useGraph from "src/store/useGraph";
import { searchQuery, cleanupHighlight, highlightMatchedNodes } from "src/utils/graph/search";
export const useFocusNode = () => { export const useFocusNode = () => {
const zoomPanPinch = useGraph(state => state.zoomPanPinch); const zoomPanPinch = useGraph(state => state.zoomPanPinch);
@ -34,6 +34,7 @@ export const useFocusNode = () => {
(ref.offsetLeft - y) * newScale + (ref.offsetLeft - y) * newScale +
ref.clientHeight / 8 - ref.clientHeight / 8 -
matchedNode.getBoundingClientRect().height / 8; matchedNode.getBoundingClientRect().height / 8;
highlightMatchedNodes(matchedNodes, selectedNode); highlightMatchedNodes(matchedNodes, selectedNode);
setNodeCount(matchedNodes.length); setNodeCount(matchedNodes.length);

View File

@ -16,15 +16,18 @@ const useToggleHide = () => {
const validateHiddenNodes = React.useCallback(() => { const validateHiddenNodes = React.useCallback(() => {
const hiddenItems = document.body.querySelectorAll(".hide"); const hiddenItems = document.body.querySelectorAll(".hide");
hiddenItems.forEach(item => item.classList.remove("hide")); hiddenItems.forEach(item => item.classList.remove("hide"));
if (nodeList.length) { if (nodeList.length) {
const selectedNodes = document.body.querySelectorAll(nodeList.join(",")); const selectedNodes = document.body.querySelectorAll(nodeList.join(","));
selectedNodes.forEach(node => node.classList.add("hide")); selectedNodes.forEach(node => node.classList.add("hide"));
} }
if (edgeList.length) { if (edgeList.length) {
const selectedEdges = document.body.querySelectorAll(edgeList.join(",")); const selectedEdges = document.body.querySelectorAll(edgeList.join(","));
selectedEdges.forEach(edge => edge.classList.add("hide")); selectedEdges.forEach(edge => edge.classList.add("hide"));
} }
}, [nodeList, edgeList]); }, [nodeList, edgeList]);

View File

@ -43,8 +43,9 @@ const isExternal = () => {
return false; return false;
}; };
export const ExternalMode = () => { const ExternalMode = () => {
const [isOpen, setOpen] = React.useState(false); const [isOpen, setOpen] = React.useState(false);
if (!isExternal()) return null; if (!isExternal()) return null;
const closeModal = () => setOpen(false); const closeModal = () => setOpen(false);
@ -84,3 +85,5 @@ export const ExternalMode = () => {
</StyledAlert> </StyledAlert>
); );
}; };
export default ExternalMode;

View File

@ -1,43 +1,29 @@
import React from "react"; import React from "react";
import { ModalProps } from "@mantine/core"; import { ModalProps } from "@mantine/core";
import { import * as Modals from "src/containers/Modals";
AccountModal, import { Modal } from "src/containers/Modals";
ClearModal,
DownloadModal,
ImportModal,
JWTModal,
LoginModal,
Modal,
NodeModal,
PremiumModal,
SchemaModal,
SettingsModal,
ShareModal,
CancelPremiumModal,
} from "src/containers/Modals";
import { CloudModal } from "src/containers/Modals/CloudModal";
import useModal from "src/store/useModal"; import useModal from "src/store/useModal";
import { EditorMantine } from "../EditorMantine"; import { EditorMantine } from "../EditorMantine";
type ModalComponent = { key: Modal; component: React.FC<ModalProps> }; type ModalComponent = { key: Modal; component: React.FC<ModalProps> };
const modalComponents: ModalComponent[] = [ const modalComponents: ModalComponent[] = [
{ key: "import", component: ImportModal }, { key: "import", component: Modals.ImportModal },
{ key: "clear", component: ClearModal }, { key: "clear", component: Modals.ClearModal },
{ key: "download", component: DownloadModal }, { key: "download", component: Modals.DownloadModal },
{ key: "settings", component: SettingsModal }, { key: "settings", component: Modals.SettingsModal },
{ key: "cloud", component: CloudModal }, { key: "cloud", component: Modals.CloudModal },
{ key: "account", component: AccountModal }, { key: "account", component: Modals.AccountModal },
{ key: "premium", component: PremiumModal }, { key: "premium", component: Modals.PremiumModal },
{ key: "login", component: LoginModal }, { key: "login", component: Modals.LoginModal },
{ key: "share", component: ShareModal }, { key: "share", component: Modals.ShareModal },
{ key: "jwt", component: JWTModal }, { key: "jwt", component: Modals.JWTModal },
{ key: "node", component: NodeModal }, { key: "node", component: Modals.NodeModal },
{ key: "schema", component: SchemaModal }, { key: "schema", component: Modals.SchemaModal },
{ key: "cancelPremium", component: CancelPremiumModal }, { key: "cancelPremium", component: Modals.CancelPremiumModal },
]; ];
export const ModalController = () => { const ModalController = () => {
const setVisible = useModal(state => state.setVisible); const setVisible = useModal(state => state.setVisible);
const modalStates = useModal(state => modalComponents.map(modal => state[modal.key])); const modalStates = useModal(state => modalComponents.map(modal => state[modal.key]));
@ -52,3 +38,5 @@ export const ModalController = () => {
</EditorMantine> </EditorMantine>
); );
}; };
export default ModalController;

14
src/lib/api/altogic.ts Normal file
View File

@ -0,0 +1,14 @@
import { APIError, createClient } from "altogic";
const envUrl = process.env.NEXT_PUBLIC_ALTOGIC_ENV_URL as string;
const clientKey = process.env.NEXT_PUBLIC_ALTOGIC_CLIENT_KEY as string;
const altogic = createClient(envUrl, clientKey);
interface AltogicResponse<T> {
data: T;
errors: APIError | null;
}
export { altogic };
export type { AltogicResponse };

View File

@ -1,11 +1,12 @@
import { NodeType } from "jsonc-parser";
import { Graph } from "../json/jsonParser"; import { Graph } from "../json/jsonParser";
import { calculateNodeSize } from "./calculateNodeSize"; import { calculateNodeSize } from "./calculateNodeSize";
type Props = { type Props = {
graph: Graph; graph: Graph;
text: any; text: string | [string, string][];
isEmpty?: boolean; isEmpty?: boolean;
type?: "string" | "number" | "boolean" | "object" | "array" | "null"; type?: NodeType;
}; };
export const addNodeToGraph = ({ graph, text, type = "null", isEmpty = false }: Props) => { export const addNodeToGraph = ({ graph, text, type = "null", isEmpty = false }: Props) => {

View File

@ -12,6 +12,7 @@ export const isContentImage = (value: string | [string, string][]) => {
const isImageURL = /(https?:\/\/.*\.(?:png|jpg|gif))/i.test(value); const isImageURL = /(https?:\/\/.*\.(?:png|jpg|gif))/i.test(value);
const isBase64 = value.startsWith("data:image/") && value.includes("base64"); const isBase64 = value.startsWith("data:image/") && value.includes("base64");
return isImageURL || isBase64; return isImageURL || isBase64;
}; };
@ -21,6 +22,7 @@ const calculateWidthAndHeight = (str: string, single = false) => {
if (!str) return { width: 45, height: 45 }; if (!str) return { width: 45, height: 45 };
const dummyElement = document.createElement("div"); const dummyElement = document.createElement("div");
dummyElement.style.whiteSpace = single ? "nowrap" : "pre-wrap"; dummyElement.style.whiteSpace = single ? "nowrap" : "pre-wrap";
dummyElement.innerHTML = str; dummyElement.innerHTML = str;
dummyElement.style.fontSize = "12px"; dummyElement.style.fontSize = "12px";
@ -34,6 +36,7 @@ const calculateWidthAndHeight = (str: string, single = false) => {
const width = dummyElement.offsetWidth + 4; const width = dummyElement.offsetWidth + 4;
const height = dummyElement.offsetHeight; const height = dummyElement.offsetHeight;
document.body.removeChild(dummyElement); document.body.removeChild(dummyElement);
return { width, height }; return { width, height };
@ -49,6 +52,7 @@ export const calculateNodeSize = (text: string | [string, string][], isParent =
// check cache // check cache
if (sizeCache.has(cacheKey)) { if (sizeCache.has(cacheKey)) {
const size = sizeCache.get(cacheKey); const size = sizeCache.get(cacheKey);
if (size) return size; if (size) return size;
} }
@ -59,6 +63,7 @@ export const calculateNodeSize = (text: string | [string, string][], isParent =
} }
let sizes = calculateWidthAndHeight(lines, typeof text === "string"); let sizes = calculateWidthAndHeight(lines, typeof text === "string");
if (isImage) sizes = { width: 80, height: 80 }; if (isImage) sizes = { width: 80, height: 80 };
if (foldNodes) sizes.width = 300; if (foldNodes) sizes.width = 300;
if (isParent && foldNodes) sizes.width = 170; if (isParent && foldNodes) sizes.width = 170;

View File

@ -33,13 +33,14 @@ function handleNoChildren(
if (parentType === "property" && nextType !== "object" && nextType !== "array") { if (parentType === "property" && nextType !== "object" && nextType !== "array") {
states.brothersParentId = myParentId; states.brothersParentId = myParentId;
if (nextType === undefined) { if (nextType === undefined && Array.isArray(states.brothersNode)) {
states.brothersNode.push([states.brotherKey, value]); states.brothersNode.push([states.brotherKey, value]);
} else { } else {
states.brotherKey = value; states.brotherKey = value;
} }
} else if (parentType === "array") { } else if (parentType === "array") {
const nodeFromArrayId = addNodeToGraph({ graph, text: String(value) }); const nodeFromArrayId = addNodeToGraph({ graph, text: String(value) });
if (myParentId) { if (myParentId) {
addEdgeToGraph(graph, myParentId, nodeFromArrayId); addEdgeToGraph(graph, myParentId, nodeFromArrayId);
} }
@ -77,8 +78,9 @@ function handleHasChildren(
const modifyNodes = [...graph.nodes]; const modifyNodes = [...graph.nodes];
const foundNode = modifyNodes[findNodeIndex]; const foundNode = modifyNodes[findNodeIndex];
foundNode.text = foundNode.text.concat(states.brothersNode); foundNode.text = foundNode.text.concat(states.brothersNode as any);
const { width, height } = calculateNodeSize(foundNode.text, false); const { width, height } = calculateNodeSize(foundNode.text, false);
foundNode.width = width; foundNode.width = width;
foundNode.height = height; foundNode.height = height;
@ -87,6 +89,7 @@ function handleHasChildren(
} }
} else { } else {
const brothersNodeId = addNodeToGraph({ graph, text: states.brothersNode }); const brothersNodeId = addNodeToGraph({ graph, text: states.brothersNode });
states.brothersNode = []; states.brothersNode = [];
if (states.brothersParentId) { if (states.brothersParentId) {
@ -142,6 +145,7 @@ function handleHasChildren(
const traverseArray = () => { const traverseArray = () => {
children.forEach((objectToTraverse, index, array) => { children.forEach((objectToTraverse, index, array) => {
const nextType = array[index + 1]?.type; const nextType = array[index + 1]?.type;
traverseObject(objectToTraverse, nextType); traverseObject(objectToTraverse, nextType);
}); });
}; };
@ -166,10 +170,11 @@ function handleHasChildren(
const modifyNodes = [...graph.nodes]; const modifyNodes = [...graph.nodes];
const findNodeIndex = modifyNodes.findIndex(e => e.id === findBrothersNode?.id); const findNodeIndex = modifyNodes.findIndex(e => e.id === findBrothersNode?.id);
if (modifyNodes[findNodeIndex]) { if (modifyNodes[findNodeIndex] && typeof states.brothersNode === "string") {
modifyNodes[findNodeIndex].text += states.brothersNode; modifyNodes[findNodeIndex].text += states.brothersNode;
const { width, height } = calculateNodeSize(modifyNodes[findNodeIndex].text, false); const { width, height } = calculateNodeSize(modifyNodes[findNodeIndex].text, false);
modifyNodes[findNodeIndex].width = width; modifyNodes[findNodeIndex].width = width;
modifyNodes[findNodeIndex].height = height; modifyNodes[findNodeIndex].height = height;
@ -178,6 +183,7 @@ function handleHasChildren(
} }
} else { } else {
const brothersNodeId = addNodeToGraph({ graph, text: states.brothersNode }); const brothersNodeId = addNodeToGraph({ graph, text: states.brothersNode });
states.brothersNode = []; states.brothersNode = [];
if (states.brothersParentId) { if (states.brothersParentId) {
@ -191,6 +197,7 @@ function handleHasChildren(
parentId: states.brothersParentId, parentId: states.brothersParentId,
objectsFromArrayId: states.objectsFromArray[states.objectsFromArray.length - 1], objectsFromArrayId: states.objectsFromArray[states.objectsFromArray.length - 1],
}; };
states.brothersNodeProps = [...states.brothersNodeProps, brothersNodeProps]; states.brothersNodeProps = [...states.brothersNodeProps, brothersNodeProps];
} }
} }
@ -213,6 +220,7 @@ function handleHasChildren(
graph.nodes = graph.nodes.map((node, index) => { graph.nodes = graph.nodes.map((node, index) => {
if (index === parentIndex) { if (index === parentIndex) {
const childrenCount = myChildren.length; const childrenCount = myChildren.length;
return { ...node, data: { ...node.data, childrenCount } }; return { ...node, data: { ...node.data, childrenCount } };
} }
return node; return node;

View File

@ -1,3 +1,5 @@
import { NodeData, EdgeData } from "src/types/models";
export const getChildrenEdges = (nodes: NodeData[], edges: EdgeData[]): EdgeData[] => { export const getChildrenEdges = (nodes: NodeData[], edges: EdgeData[]): EdgeData[] => {
const nodeIds = nodes.map(node => node.id); const nodeIds = nodes.map(node => node.id);

View File

@ -1,3 +1,5 @@
import { NodeData, EdgeData } from "src/types/models";
export const getOutgoers = ( export const getOutgoers = (
nodeId: string, nodeId: string,
nodes: NodeData[], nodes: NodeData[],
@ -9,6 +11,7 @@ export const getOutgoers = (
if (parent.includes(nodeId)) { if (parent.includes(nodeId)) {
const initialParentNode = nodes.find(n => n.id === nodeId); const initialParentNode = nodes.find(n => n.id === nodeId);
if (initialParentNode) outgoerNodes.push(initialParentNode); if (initialParentNode) outgoerNodes.push(initialParentNode);
} }

View File

@ -13,6 +13,7 @@ export const cleanupHighlight = () => {
export const highlightMatchedNodes = (nodes: NodeListOf<Element>, selectedNode: number) => { export const highlightMatchedNodes = (nodes: NodeListOf<Element>, selectedNode: number) => {
nodes.forEach(node => { nodes.forEach(node => {
const foreignObject = node.parentElement?.closest("foreignObject"); const foreignObject = node.parentElement?.closest("foreignObject");
if (foreignObject) { if (foreignObject) {
foreignObject.classList.add("searched"); foreignObject.classList.add("searched");
} }

View File

@ -1,3 +1,5 @@
import { NodeData, EdgeData } from "src/types/models";
export function getNodePath(nodes: NodeData[], edges: EdgeData[], nodeId: string) { export function getNodePath(nodes: NodeData[], edges: EdgeData[], nodeId: string) {
const { getParentsForNodeId } = require("reaflow"); const { getParentsForNodeId } = require("reaflow");
@ -16,6 +18,7 @@ export function getNodePath(nodes: NodeData[], edges: EdgeData[], nodeId: string
for (let i = 1; i < edges.length; i++) { for (let i = 1; i < edges.length; i++) {
const curNodeId = edges[i].from!; const curNodeId = edges[i].from!;
if (rootArrayElementIds.includes(curNodeId)) continue; if (rootArrayElementIds.includes(curNodeId)) continue;
if (!edgesMap.has(curNodeId)) { if (!edgesMap.has(curNodeId)) {
rootArrayElementIds.push(curNodeId); rootArrayElementIds.push(curNodeId);
@ -33,17 +36,18 @@ export function getNodePath(nodes: NodeData[], edges: EdgeData[], nodeId: string
const curNode = nodes[+curId - 1]; const curNode = nodes[+curId - 1];
if (!curNode) break; if (!curNode) break;
if (curNode.data.type === "array") { if (curNode.data?.type === "array") {
resolvedPath += `.${curNode.text}`; resolvedPath += `.${curNode.text}`;
if (i !== path.length - 1) { if (i !== path.length - 1) {
const toNodeId = path[i + 1]; const toNodeId = path[i + 1];
const idx = edgesMap.get(curId).indexOf(toNodeId); const idx = edgesMap.get(curId).indexOf(toNodeId);
resolvedPath += `[${idx}]`; resolvedPath += `[${idx}]`;
} }
} }
if (curNode.data.type === "object") { if (curNode.data?.type === "object") {
resolvedPath += `.${curNode.text}`; resolvedPath += `.${curNode.text}`;
} }
} }

View File

@ -2,7 +2,7 @@ import { load, dump } from "js-yaml";
import { csv2json, json2csv } from "json-2-csv"; import { csv2json, json2csv } from "json-2-csv";
import jxon from "jxon"; import jxon from "jxon";
import toml from "toml"; import toml from "toml";
import { FileFormat } from "src/constants/file"; import { FileFormat } from "src/types/models";
const keyExists = (obj: object, key: string) => { const keyExists = (obj: object, key: string) => {
if (!obj || (typeof obj !== "object" && !Array.isArray(obj))) { if (!obj || (typeof obj !== "object" && !Array.isArray(obj))) {
@ -12,6 +12,7 @@ const keyExists = (obj: object, key: string) => {
} else if (Array.isArray(obj)) { } else if (Array.isArray(obj)) {
for (let i = 0; i < obj.length; i++) { for (let i = 0; i < obj.length; i++) {
const result = keyExists(obj[i], key); const result = keyExists(obj[i], key);
if (result) { if (result) {
return result; return result;
} }
@ -19,6 +20,7 @@ const keyExists = (obj: object, key: string) => {
} else { } else {
for (const k in obj) { for (const k in obj) {
const result = keyExists(obj[k], key); const result = keyExists(obj[k], key);
if (result) { if (result) {
return result; return result;
} }
@ -31,6 +33,7 @@ const keyExists = (obj: object, key: string) => {
const contentToJson = async (value: string, format = FileFormat.JSON): Promise<object> => { const contentToJson = async (value: string, format = FileFormat.JSON): Promise<object> => {
try { try {
let json: object = {}; let json: object = {};
if (format === FileFormat.JSON) json = JSON.parse(value); if (format === FileFormat.JSON) json = JSON.parse(value);
if (format === FileFormat.YAML) json = load(value) as object; if (format === FileFormat.YAML) json = load(value) as object;
if (format === FileFormat.XML) json = jxon.stringToJs(value); if (format === FileFormat.XML) json = jxon.stringToJs(value);
@ -47,6 +50,7 @@ const contentToJson = async (value: string, format = FileFormat.JSON): Promise<o
const jsonToContent = async (json: string, format: FileFormat): Promise<string> => { const jsonToContent = async (json: string, format: FileFormat): Promise<string> => {
try { try {
let contents = json; let contents = json;
if (!json) return json; if (!json) return json;
if (format === FileFormat.JSON) contents = json; if (format === FileFormat.JSON) contents = json;
if (format === FileFormat.YAML) contents = dump(JSON.parse(json)); if (format === FileFormat.YAML) contents = dump(JSON.parse(json));

View File

@ -1,4 +1,5 @@
import { parseTree } from "jsonc-parser"; import { parseTree } from "jsonc-parser";
import { EdgeData, NodeData } from "src/types/models";
import { addEdgeToGraph } from "../core/addEdgeToGraph"; import { addEdgeToGraph } from "../core/addEdgeToGraph";
import { addNodeToGraph } from "../core/addNodeToGraph"; import { addNodeToGraph } from "../core/addNodeToGraph";
import { traverse } from "../core/traverse"; import { traverse } from "../core/traverse";
@ -15,7 +16,7 @@ export type States = {
objectsFromArray: number[]; objectsFromArray: number[];
objectsFromArrayId: number; objectsFromArrayId: number;
notHaveParent: string[]; notHaveParent: string[];
brothersNode: [string, string][]; brothersNode: [string, string][] | string;
brothersParentId: string | undefined; brothersParentId: string | undefined;
brotherKey: string; brotherKey: string;
brothersNodeProps: { brothersNodeProps: {
@ -48,6 +49,7 @@ export function parser(jsonStr: string): Graph {
try { try {
const states = initializeStates(); const states = initializeStates();
const parsedJsonTree = parseTree(jsonStr); const parsedJsonTree = parseTree(jsonStr);
if (!parsedJsonTree) { if (!parsedJsonTree) {
throw new Error("Invalid document"); throw new Error("Invalid document");
} }
@ -55,9 +57,11 @@ export function parser(jsonStr: string): Graph {
traverse({ states, objectToTraverse: parsedJsonTree }); traverse({ states, objectToTraverse: parsedJsonTree });
const { notHaveParent, graph } = states; const { notHaveParent, graph } = states;
if (notHaveParent.length > 1 && parsedJsonTree.type !== "array") { if (notHaveParent.length > 1 && parsedJsonTree.type !== "array") {
const emptyNode = { id: null, text: "", isEmpty: true, data: {} }; const emptyNode = { id: null, text: "", isEmpty: true, data: {} };
const emptyId = addNodeToGraph({ graph, ...emptyNode }); const emptyId = addNodeToGraph({ graph, ...emptyNode });
notHaveParent.forEach(childId => addEdgeToGraph(graph, emptyId, childId)); notHaveParent.forEach(childId => addEdgeToGraph(graph, emptyId, childId));
} }
@ -74,6 +78,8 @@ export function parser(jsonStr: string): Graph {
path: getNodePath(states.graph.nodes, states.graph.edges, node.id), path: getNodePath(states.graph.nodes, states.graph.edges, node.id),
})); }));
console.log(states.graph);
return states.graph; return states.graph;
} catch (error) { } catch (error) {
console.error(error); console.error(error);

View File

@ -1,15 +1,17 @@
import React from "react"; import React from "react";
import type { AppProps } from "next/app"; import type { AppProps } from "next/app";
import dynamic from "next/dynamic";
import { ThemeProvider } from "styled-components"; import { ThemeProvider } from "styled-components";
import { MantineProvider } from "@mantine/core"; import { MantineProvider } from "@mantine/core";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { Toaster } from "react-hot-toast";
import { GoogleAnalytics } from "src/components/GoogleAnalytics";
import { monaSans } from "src/constants/customFonts"; import { monaSans } from "src/constants/customFonts";
import GlobalStyle from "src/constants/globalStyle"; import GlobalStyle from "src/constants/globalStyle";
import { lightTheme } from "src/constants/theme"; import { lightTheme } from "src/constants/theme";
import { ExternalMode } from "src/layout/DevMode";
import { ModalController } from "src/layout/ModalController"; const Toaster = dynamic(() => import("react-hot-toast").then(c => c.Toaster));
const ExternalMode = dynamic(() => import("src/layout/ExternalMode"));
const GoogleAnalytics = dynamic(() => import("src/components/GoogleAnalytics"));
const ModalController = dynamic(() => import("src/layout/ModalController"));
const queryClient = new QueryClient({ const queryClient = new QueryClient({
defaultOptions: { defaultOptions: {

View File

@ -133,7 +133,9 @@ const Docs = () => {
where json is a string and options is an object that may contain the following: where json is a string and options is an object that may contain the following:
<MediaQuery smallerThan="sm" styles={{ display: "none" }}> <MediaQuery smallerThan="sm" styles={{ display: "none" }}>
<Prism w={500} language="json"> <Prism w={500} language="json">
{`{\n theme: "light" | "dark",\n direction: "TOP" | "RIGHT" | "DOWN" | "LEFT"\n}`} {
'{\n theme: "light" | "dark",\n direction: "TOP" | "RIGHT" | "DOWN" | "LEFT"\n}'
}
</Prism> </Prism>
</MediaQuery> </MediaQuery>
</StyledDescription> </StyledDescription>

View File

@ -1,17 +1,19 @@
import React from "react"; import React from "react";
import dynamic from "next/dynamic";
import Head from "next/head"; import Head from "next/head";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import styled from "styled-components"; import styled from "styled-components";
import { defaultJson } from "src/constants/data"; import { defaultJson } from "src/constants/data";
import { BottomBar } from "src/containers/Editor/BottomBar"; import { BottomBar } from "src/containers/Editor/BottomBar";
import { Tools } from "src/containers/Editor/LiveEditor/Tools"; import { Tools } from "src/containers/Editor/LiveEditor/Tools";
import Panes from "src/containers/Editor/Panes";
import { EditorMantine } from "src/layout/EditorMantine"; import { EditorMantine } from "src/layout/EditorMantine";
import { Loading } from "src/layout/Loading"; import { Loading } from "src/layout/Loading";
import useFile from "src/store/useFile"; import useFile from "src/store/useFile";
import useJson from "src/store/useJson"; import useJson from "src/store/useJson";
import useUser from "src/store/useUser"; import useUser from "src/store/useUser";
const Panes = dynamic(() => import("src/containers/Editor/Panes"));
export const StyledPageWrapper = styled.div` export const StyledPageWrapper = styled.div`
height: calc(100vh - 27px); height: calc(100vh - 27px);
width: 100%; width: 100%;

View File

@ -1,4 +1,5 @@
import React from "react"; import React from "react";
import dynamic from "next/dynamic";
import Head from "next/head"; import Head from "next/head";
import Link from "next/link"; import Link from "next/link";
import styled, { ThemeProvider } from "styled-components"; import styled, { ThemeProvider } from "styled-components";
@ -20,9 +21,10 @@ import { SiVisualstudiocode } from "react-icons/si";
import { Typewriter } from "react-simple-typewriter"; import { Typewriter } from "react-simple-typewriter";
import { HovercardAds } from "src/components/HovercardAds"; import { HovercardAds } from "src/components/HovercardAds";
import { lightTheme } from "src/constants/theme"; import { lightTheme } from "src/constants/theme";
import { Footer } from "src/layout/Footer";
import { Navbar } from "src/layout/Navbar"; import { Navbar } from "src/layout/Navbar";
const Footer = dynamic(() => import("src/layout/Footer").then(c => c.Footer));
const StyledHeroSection = styled.div` const StyledHeroSection = styled.div`
--bg-color: ${({ theme }) => theme.GRID_BG_COLOR}; --bg-color: ${({ theme }) => theme.GRID_BG_COLOR};
--line-color-1: ${({ theme }) => theme.GRID_COLOR_PRIMARY}; --line-color-1: ${({ theme }) => theme.GRID_COLOR_PRIMARY};
@ -33,8 +35,16 @@ const StyledHeroSection = styled.div`
linear-gradient(90deg, 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(var(--line-color-2) 1px, transparent 1px),
linear-gradient(90deg, 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-position:
background-size: 100px 100px, 100px 100px, 20px 20px, 20px 20px; -1.5px -1.5px,
-1.5px -1.5px,
-1px -1px,
-1px -1px;
background-size:
100px 100px,
100px 100px,
20px 20px,
20px 20px;
@media only screen and (max-width: 1240px) { @media only screen and (max-width: 1240px) {
flex-direction: column; flex-direction: column;
@ -252,7 +262,7 @@ const Features = () => (
</Stack> </Stack>
</Flex> </Flex>
<Flex py="lg" align="center" gap="lg" direction="row-reverse"> <Flex py="lg" align="center" gap="lg" direction="row-reverse">
<Image width={300} height={260} src="/assets/multidata.png" alt="multiple format support" /> <Image width={300} height={260} src="/assets/multidata.webp" alt="multiple format support" />
<Stack> <Stack>
<Text color="dark" fz="1.5rem" fw="bold"> <Text color="dark" fz="1.5rem" fw="bold">
DYNAMIC DATA VISUALIZATION DYNAMIC DATA VISUALIZATION

View File

@ -4,10 +4,10 @@ import { useRouter } from "next/router";
import styled from "styled-components"; import styled from "styled-components";
import { PaperProps, Center, Button, Group, Paper, Stack, TextInput, Text } from "@mantine/core"; import { PaperProps, Center, Button, Group, Paper, Stack, TextInput, Text } from "@mantine/core";
import { toast } from "react-hot-toast"; import { toast } from "react-hot-toast";
import { altogic } from "src/api/altogic";
import { Footer } from "src/layout/Footer"; import { Footer } from "src/layout/Footer";
import { JSONCrackLogo } from "src/layout/JsonCrackLogo"; import { JSONCrackLogo } from "src/layout/JsonCrackLogo";
import { Navbar } from "src/layout/Navbar"; import { Navbar } from "src/layout/Navbar";
import { altogic } from "src/lib/api/altogic";
import useUser from "src/store/useUser"; import useUser from "src/store/useUser";
const StyledPageWrapper = styled.div` const StyledPageWrapper = styled.div`

View File

@ -22,10 +22,10 @@ import { useForm } from "@mantine/form";
import { useToggle, upperFirst } from "@mantine/hooks"; import { useToggle, upperFirst } from "@mantine/hooks";
import { toast } from "react-hot-toast"; import { toast } from "react-hot-toast";
import { AiOutlineGithub, AiOutlineGoogle } from "react-icons/ai"; import { AiOutlineGithub, AiOutlineGoogle } from "react-icons/ai";
import { altogic } from "src/api/altogic";
import { Footer } from "src/layout/Footer"; import { Footer } from "src/layout/Footer";
import { JSONCrackLogo } from "src/layout/JsonCrackLogo"; import { JSONCrackLogo } from "src/layout/JsonCrackLogo";
import { Navbar } from "src/layout/Navbar"; import { Navbar } from "src/layout/Navbar";
import { altogic } from "src/lib/api/altogic";
import useUser from "src/store/useUser"; import useUser from "src/store/useUser";
export function AuthenticationForm(props: PaperProps) { export function AuthenticationForm(props: PaperProps) {
@ -54,6 +54,7 @@ export function AuthenticationForm(props: PaperProps) {
const onSubmit = (e: React.FormEvent<HTMLFormElement>) => { const onSubmit = (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault(); e.preventDefault();
const validate = form.validate(); const validate = form.validate();
if (validate.hasErrors) return; if (validate.hasErrors) return;
setLoading(true); setLoading(true);

View File

@ -1,8 +1,8 @@
import dayjs from "dayjs"; import dayjs from "dayjs";
import { decompressFromBase64 } from "lz-string"; import { decompressFromBase64 } from "lz-string";
import { altogic, AltogicResponse } from "src/api/altogic"; import { altogic, AltogicResponse } from "src/lib/api/altogic";
import { FileFormat } from "src/constants/file";
import { File } from "src/store/useFile"; import { File } from "src/store/useFile";
import { FileFormat } from "src/types/models";
const saveToCloud = async ( const saveToCloud = async (
id: string | null, id: string | null,
@ -21,6 +21,7 @@ const getFromCloud = async (id: string) => {
if (errors) throw errors; if (errors) throw errors;
const isCompressed = dayjs("2023-04-20T07:04:25.255Z").isAfter(data?.updatedAt); const isCompressed = dayjs("2023-04-20T07:04:25.255Z").isAfter(data?.updatedAt);
if (isCompressed) { if (isCompressed) {
return { ...data, json: decompressFromBase64(data.json) }; return { ...data, json: decompressFromBase64(data.json) };
} }
@ -29,7 +30,7 @@ const getFromCloud = async (id: string) => {
}; };
const getAllJson = async (): Promise<AltogicResponse<{ result: File[] }>> => const getAllJson = async (): Promise<AltogicResponse<{ result: File[] }>> =>
await altogic.endpoint.get(`json`); await altogic.endpoint.get("json");
const updateJson = async (id: string, data: object) => const updateJson = async (id: string, data: object) =>
await altogic.endpoint.put(`json/${id}`, { await altogic.endpoint.put(`json/${id}`, {

View File

@ -4,9 +4,9 @@ import _set from "lodash.set";
import { toast } from "react-hot-toast"; import { toast } from "react-hot-toast";
import { create } from "zustand"; import { create } from "zustand";
import { defaultJson } from "src/constants/data"; import { defaultJson } from "src/constants/data";
import { FileFormat } from "src/constants/file"; import { contentToJson, jsonToContent } from "src/lib/utils/json/jsonAdapter";
import { getFromCloud, saveToCloud } from "src/services/json"; import { getFromCloud, saveToCloud } from "src/services/json";
import { contentToJson, jsonToContent } from "src/utils/json/jsonAdapter"; import { FileFormat } from "src/types/models";
import useGraph from "./useGraph"; import useGraph from "./useGraph";
import useJson from "./useJson"; import useJson from "./useJson";
import useStored from "./useStored"; import useStored from "./useStored";
@ -99,9 +99,11 @@ const useFile = create<FileStates & JsonActions>()((set, get) => ({
setFormat: async format => { setFormat: async format => {
try { try {
const prevFormat = get().format; const prevFormat = get().format;
set({ format }); set({ format });
const contentJson = await contentToJson(get().contents, prevFormat); const contentJson = await contentToJson(get().contents, prevFormat);
const jsonContent = await jsonToContent(JSON.stringify(contentJson, null, 2), format); const jsonContent = await jsonToContent(JSON.stringify(contentJson, null, 2), format);
get().setContents({ contents: jsonContent, hasChanges: false }); get().setContents({ contents: jsonContent, hasChanges: false });
} catch (error) { } catch (error) {
get().clear(); get().clear();
@ -112,6 +114,7 @@ const useFile = create<FileStates & JsonActions>()((set, get) => ({
try { try {
set({ ...(contents && { contents }), error: null, hasChanges }); set({ ...(contents && { contents }), error: null, hasChanges });
const json = await contentToJson(get().contents, get().format); const json = await contentToJson(get().contents, get().format);
if (!useStored.getState().liveTransform && skipUpdate) return; if (!useStored.getState().liveTransform && skipUpdate) return;
debouncedUpdateJson(json); debouncedUpdateJson(json);
@ -164,6 +167,7 @@ const useFile = create<FileStates & JsonActions>()((set, get) => ({
if (isURL(id)) return get().fetchUrl(id); if (isURL(id)) return get().fetchUrl(id);
const file = await getFromCloud(id); const file = await getFromCloud(id);
get().setFile(file); get().setFile(file);
} catch (error) { } catch (error) {
useJson.setState({ loading: false }); useJson.setState({ loading: false });
@ -195,6 +199,7 @@ const useFile = create<FileStates & JsonActions>()((set, get) => ({
); );
const contents = await jsonToContent(JSON.stringify(newJson, null, 2), get().format); const contents = await jsonToContent(JSON.stringify(newJson, null, 2), get().format);
get().setContents({ contents }); get().setContents({ contents });
if (callback) callback(); if (callback) callback();
} catch (error) { } catch (error) {

View File

@ -1,29 +1,44 @@
import { ReactZoomPanPinchRef } from "react-zoom-pan-pinch"; import { ReactZoomPanPinchRef } from "react-zoom-pan-pinch";
import { CanvasDirection } from "reaflow/dist/layout/elkLayout"; import { CanvasDirection } from "reaflow/dist/layout/elkLayout";
import { create } from "zustand"; import { create } from "zustand";
import { getChildrenEdges } from "src/utils/graph/getChildrenEdges"; import { getChildrenEdges } from "src/lib/utils/graph/getChildrenEdges";
import { getOutgoers } from "src/utils/graph/getOutgoers"; import { getOutgoers } from "src/lib/utils/graph/getOutgoers";
import { parser } from "src/utils/json/jsonParser"; import { parser } from "src/lib/utils/json/jsonParser";
import { NodeData, EdgeData } from "src/types/models";
import useJson from "./useJson"; import useJson from "./useJson";
const initialStates = { export interface Graph {
zoomPanPinch: null as ReactZoomPanPinchRef | null, zoomPanPinch: ReactZoomPanPinchRef | null;
direction: "RIGHT" as CanvasDirection, direction: CanvasDirection;
loading: boolean;
graphCollapsed: boolean;
foldNodes: boolean;
fullscreen: boolean;
nodes: NodeData[];
edges: EdgeData[];
collapsedNodes: string[];
collapsedEdges: string[];
collapsedParents: string[];
selectedNode: NodeData | null;
path: string;
}
const initialStates: Graph = {
zoomPanPinch: null,
direction: "RIGHT",
loading: true, loading: true,
graphCollapsed: false, graphCollapsed: false,
foldNodes: false, foldNodes: false,
fullscreen: false, fullscreen: false,
nodes: [] as NodeData[], nodes: [],
edges: [] as EdgeData[], edges: [],
collapsedNodes: [] as string[], collapsedNodes: [],
collapsedEdges: [] as string[], collapsedEdges: [],
collapsedParents: [] as string[], collapsedParents: [],
selectedNode: {} as NodeData, selectedNode: null,
path: "", path: "",
}; };
export type Graph = typeof initialStates;
interface GraphActions { interface GraphActions {
setGraph: (json?: string, options?: Partial<Graph>[]) => void; setGraph: (json?: string, options?: Partial<Graph>[]) => void;
setLoading: (loading: boolean) => void; setLoading: (loading: boolean) => void;
@ -48,6 +63,7 @@ const useGraph = create<Graph & GraphActions>((set, get) => ({
setSelectedNode: nodeData => set({ selectedNode: nodeData }), setSelectedNode: nodeData => set({ selectedNode: nodeData }),
setGraph: (data, options) => { setGraph: (data, options) => {
const { nodes, edges } = parser(data ?? useJson.getState().json); const { nodes, edges } = parser(data ?? useJson.getState().json);
set({ set({
nodes, nodes,
edges, edges,
@ -119,7 +135,7 @@ const useGraph = create<Graph & GraphActions>((set, get) => ({
.map(edge => edge.to); .map(edge => edge.to);
const collapsedParents = get() const collapsedParents = get()
.nodes.filter(node => !parentNodesIds.includes(node.id) && node.data.isParent) .nodes.filter(node => !parentNodesIds.includes(node.id) && node.data?.isParent)
.map(node => node.id); .map(node => node.id);
const collapsedNodes = get() const collapsedNodes = get()
@ -151,6 +167,7 @@ const useGraph = create<Graph & GraphActions>((set, get) => ({
}, },
zoomIn: () => { zoomIn: () => {
const zoomPanPinch = get().zoomPanPinch; const zoomPanPinch = get().zoomPanPinch;
zoomPanPinch?.setTransform( zoomPanPinch?.setTransform(
zoomPanPinch?.state.positionX, zoomPanPinch?.state.positionX,
zoomPanPinch?.state.positionY, zoomPanPinch?.state.positionY,
@ -159,6 +176,7 @@ const useGraph = create<Graph & GraphActions>((set, get) => ({
}, },
zoomOut: () => { zoomOut: () => {
const zoomPanPinch = get().zoomPanPinch; const zoomPanPinch = get().zoomPanPinch;
zoomPanPinch?.setTransform( zoomPanPinch?.setTransform(
zoomPanPinch?.state.positionX, zoomPanPinch?.state.positionX,
zoomPanPinch?.state.positionY, zoomPanPinch?.state.positionY,
@ -168,6 +186,7 @@ const useGraph = create<Graph & GraphActions>((set, get) => ({
centerView: () => { centerView: () => {
const zoomPanPinch = get().zoomPanPinch; const zoomPanPinch = get().zoomPanPinch;
const canvas = document.querySelector(".jsoncrack-canvas") as HTMLElement; const canvas = document.querySelector(".jsoncrack-canvas") as HTMLElement;
if (zoomPanPinch && canvas) zoomPanPinch.zoomToElement(canvas); if (zoomPanPinch && canvas) zoomPanPinch.zoomToElement(canvas);
}, },
toggleFold: foldNodes => { toggleFold: foldNodes => {

View File

@ -1,8 +1,8 @@
import * as Sentry from "@sentry/nextjs"; import { setUser } from "@sentry/nextjs";
import toast from "react-hot-toast"; import toast from "react-hot-toast";
import { create } from "zustand"; import { create } from "zustand";
import { altogic } from "src/api/altogic"; import { altogic } from "src/lib/api/altogic";
import { AltogicAuth, User } from "src/typings/altogic"; import { AltogicAuth, User } from "src/types/altogic";
import useModal from "./useModal"; import useModal from "./useModal";
const isDevelopment = process.env.NODE_ENV === "development"; const isDevelopment = process.env.NODE_ENV === "development";
@ -43,9 +43,11 @@ const useUser = create<UserStates & UserActions>()(set => ({
setUser: (key, value) => set({ [key]: value }), setUser: (key, value) => set({ [key]: value }),
logout: async () => { logout: async () => {
const session = altogic.auth.getSession(); const session = altogic.auth.getSession();
if (!session) return; if (!session) return;
const { errors } = await altogic.auth.signOut(session.token); const { errors } = await altogic.auth.signOut(session.token);
if (errors?.items) return console.error(errors); if (errors?.items) return console.error(errors);
set(initialStates); set(initialStates);
@ -63,6 +65,7 @@ const useUser = create<UserStates & UserActions>()(set => ({
if (currentSession) { if (currentSession) {
const { user, errors } = await altogic.auth.getUserFromDB(); const { user, errors } = await altogic.auth.getUserFromDB();
if (errors?.items || !user) { if (errors?.items || !user) {
altogic.auth.clearLocalData(); altogic.auth.clearLocalData();
return; return;
@ -72,10 +75,11 @@ const useUser = create<UserStates & UserActions>()(set => ({
altogic.auth.setSession(currentSession); altogic.auth.setSession(currentSession);
const { data: premiumData } = await altogic.endpoint.get("/isPremium"); const { data: premiumData } = await altogic.endpoint.get("/isPremium");
Sentry.setUser({ id: user._id, email: user.email, username: user.name }); setUser({ id: user._id, email: user.email, username: user.name });
set({ user: user as User, isAuthenticated: true, premium: premiumData.premium }); set({ user: user as User, isAuthenticated: true, premium: premiumData.premium });
} else if (new URLSearchParams(window.location.search).get("access_token")) { } else if (new URLSearchParams(window.location.search).get("access_token")) {
const { errors, user } = await altogic.auth.getAuthGrant(); const { errors, user } = await altogic.auth.getAuthGrant();
if (errors?.items) { if (errors?.items) {
toast.error(errors.items[0].message); toast.error(errors.items[0].message);
return; return;
@ -84,7 +88,7 @@ const useUser = create<UserStates & UserActions>()(set => ({
if (user) { if (user) {
const { data: premiumData } = await altogic.endpoint.get("/isPremium"); const { data: premiumData } = await altogic.endpoint.get("/isPremium");
Sentry.setUser({ id: user._id, email: user.email, username: user.name }); setUser({ id: user._id, email: user.email, username: user.name });
set({ user: user as User, isAuthenticated: true, premium: premiumData.premium }); set({ user: user as User, isAuthenticated: true, premium: premiumData.premium });
} }
} }

30
src/types/models.ts Normal file
View File

@ -0,0 +1,30 @@
/* eslint unused-imports/no-unused-imports: 0 */
import { NodeType } from "jsonc-parser";
export interface NodeData {
id: string;
text: string | [string, string][];
width: number;
height: number;
path?: string;
data: {
type: NodeType;
isParent: boolean;
isEmpty: boolean;
childrenCount: number;
};
}
export interface EdgeData {
id: string;
from: string;
to: string;
}
export enum FileFormat {
"JSON" = "json",
"YAML" = "yaml",
"XML" = "xml",
"TOML" = "toml",
"CSV" = "csv",
}

View File

@ -1,32 +0,0 @@
interface NodeData<T = any> {
id: string;
disabled?: boolean;
text?: any;
path?: string;
height?: number;
width?: number;
isParent?: string;
ports?: PortData[];
icon?: IconData;
nodePadding?: number | [number, number] | [number, number, number, number];
data?: T;
className?: string;
layoutOptions?: ElkNodeLayoutOptions;
selectionDisabled?: boolean;
}
interface EdgeData<T = any> {
id: string;
disabled?: boolean;
text?: any;
from?: string;
to?: string;
fromPort?: string;
toPort?: string;
data?: T;
className?: string;
containerClassName?: string;
arrowHeadType?: any;
parent?: string;
selectionDisabled?: boolean;
}

View File

@ -15,7 +15,8 @@
"isolatedModules": true, "isolatedModules": true,
"jsx": "preserve", "jsx": "preserve",
"incremental": true, "incremental": true,
"noImplicitAny": false "noImplicitAny": false,
"typeRoots": ["types"]
}, },
"include": ["src", "next-env.d.ts",], "include": ["src", "next-env.d.ts",],
"exclude": ["node_modules"] "exclude": ["node_modules"]

594
yarn.lock
View File

@ -2,6 +2,11 @@
# yarn lockfile v1 # yarn lockfile v1
"@aashutoshrathi/word-wrap@^1.2.3":
version "1.2.6"
resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf"
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.18.6": "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.18.6":
version "7.18.6" version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a"
@ -316,14 +321,14 @@
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884"
integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==
"@eslint/eslintrc@^2.0.3": "@eslint/eslintrc@^2.1.0":
version "2.0.3" version "2.1.0"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.3.tgz#4910db5505f4d503f27774bf356e3704818a0331" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.0.tgz#82256f164cc9e0b59669efc19d57f8092706841d"
integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ== integrity sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==
dependencies: dependencies:
ajv "^6.12.4" ajv "^6.12.4"
debug "^4.3.2" debug "^4.3.2"
espree "^9.5.2" espree "^9.6.0"
globals "^13.19.0" globals "^13.19.0"
ignore "^5.2.0" ignore "^5.2.0"
import-fresh "^3.2.1" import-fresh "^3.2.1"
@ -331,10 +336,10 @@
minimatch "^3.1.2" minimatch "^3.1.2"
strip-json-comments "^3.1.1" strip-json-comments "^3.1.1"
"@eslint/js@8.43.0": "@eslint/js@8.44.0":
version "8.43.0" version "8.44.0"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.43.0.tgz#559ca3d9ddbd6bf907ad524320a0d14b85586af0" resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.44.0.tgz#961a5903c74139390478bdc808bcde3fc45ab7af"
integrity sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg== integrity sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==
"@floating-ui/core@^1.2.2": "@floating-ui/core@^1.2.2":
version "1.2.2" version "1.2.2"
@ -433,67 +438,67 @@
resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60"
integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA== integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==
"@mantine/core@^6.0.13": "@mantine/core@^6.0.16":
version "6.0.13" version "6.0.16"
resolved "https://registry.yarnpkg.com/@mantine/core/-/core-6.0.13.tgz#f05a952e1e2e3cc6eb24d4d77b6c96a1c23fb0bb" resolved "https://registry.yarnpkg.com/@mantine/core/-/core-6.0.16.tgz#bd5271ec907cf2d7df2f9b791bc5d406f75dafe1"
integrity sha512-FjVUGgat2qISV9WD1maVJa81y7H0JjKJ3m0cJj65PzgrXT20hzdEda7S3i4j+a8vUnx+836x5q/yS+RDHvoSlA== integrity sha512-ai7HfWo214JLmf+QNEmFfTaBgxreMpY/ZK7dIDNkFfCmDAWjFxwCSc7flh8NHX2ZJN5uTc82p2i0MLJ/GZ5xrA==
dependencies: dependencies:
"@floating-ui/react" "^0.19.1" "@floating-ui/react" "^0.19.1"
"@mantine/styles" "6.0.13" "@mantine/styles" "6.0.16"
"@mantine/utils" "6.0.13" "@mantine/utils" "6.0.16"
"@radix-ui/react-scroll-area" "1.0.2" "@radix-ui/react-scroll-area" "1.0.2"
react-remove-scroll "^2.5.5" react-remove-scroll "^2.5.5"
react-textarea-autosize "8.3.4" react-textarea-autosize "8.3.4"
"@mantine/form@^6.0.13": "@mantine/form@^6.0.16":
version "6.0.13" version "6.0.16"
resolved "https://registry.yarnpkg.com/@mantine/form/-/form-6.0.13.tgz#9d0e87efb0e139702b01f387fdec0d977ecdc385" resolved "https://registry.yarnpkg.com/@mantine/form/-/form-6.0.16.tgz#c6b7064a87df17dad82101a71ebe96ccd37e686f"
integrity sha512-oR/bnnJEd6T42N5pUhXYZ5RaKC4EZozEFW2jHCWDKIAJDjIgGUQrLL/tCjclQ2NwtghaoCTz+9zu32CuXer7TA== integrity sha512-4TwxJKGQQRx7rj5yb9WgS0z/Ud8ckg0mMCiD3grKTxDCp0g8Tvk2Df7ptWFx2n+hxhBYVwMQSKggWuuDMFWBNA==
dependencies: dependencies:
fast-deep-equal "^3.1.3" fast-deep-equal "^3.1.3"
klona "^2.0.5" klona "^2.0.5"
"@mantine/hooks@^6.0.13": "@mantine/hooks@^6.0.16":
version "6.0.13" version "6.0.16"
resolved "https://registry.yarnpkg.com/@mantine/hooks/-/hooks-6.0.13.tgz#d90fa315ee30a900e0d9a460c6bb00c9a65f18e0" resolved "https://registry.yarnpkg.com/@mantine/hooks/-/hooks-6.0.16.tgz#507c322347659424a915ec6b541d848f53abcf6a"
integrity sha512-fHuE3zXo5OP/Q1dMOTnegU6U+tI9GuhO2tgOz6szVuOxrrk0Hzuq1Na9NUSv27HShSRbAfQk+hvyIh+iVV7KXA== integrity sha512-DnfMYSTSjYxbQJ80TzKHO5gRXGTIQKxBnRQVc+n4RANTwgWMiwEmxIwqRjbulfLzIhEvplskhqGgElunIAfw7g==
"@mantine/next@^6.0.13": "@mantine/next@^6.0.16":
version "6.0.13" version "6.0.16"
resolved "https://registry.yarnpkg.com/@mantine/next/-/next-6.0.13.tgz#018d9dc8a93430d45176df505978f8025e420588" resolved "https://registry.yarnpkg.com/@mantine/next/-/next-6.0.16.tgz#3d266a96446a3da8ec8296f12b227e2e93cb4fc1"
integrity sha512-dUQ3cxZ/6f6hxegx6zV4aCPAgZSb9NlCQkDlELvtiAJXpIKtogOcVxxKWaDSEHD5YHVeV2f+CBPVqaa3LddiYg== integrity sha512-shIcYK/tK/jQpdJkzdgukgwwpqiBxoskaCJDcuZxPVckPYssKLscZlxaiyBShFmPqd1bxULJ0L9w+F73qibECw==
dependencies: dependencies:
"@mantine/ssr" "6.0.13" "@mantine/ssr" "6.0.16"
"@mantine/styles" "6.0.13" "@mantine/styles" "6.0.16"
"@mantine/prism@^6.0.13": "@mantine/prism@^6.0.16":
version "6.0.13" version "6.0.16"
resolved "https://registry.yarnpkg.com/@mantine/prism/-/prism-6.0.13.tgz#ef840bf2cd59d567db203bba167e9c77155eda39" resolved "https://registry.yarnpkg.com/@mantine/prism/-/prism-6.0.16.tgz#a183d6899bb1dd8e0b90725a7d00708d9b8c4518"
integrity sha512-048dxoEw4XeJAVh8sBzMguhk+pG8ULDPVGI+aQBsuoERezSV4WVqeKl1+ddoOew3qXbsH/UH4ox5lmf1S4WTwg== integrity sha512-bWnwRMA7fBfSMpZO2YHIsJ4yt3JTZmPp1nQ62JKpey7rfCJMMuzuCXagCHZthEChZZoQnwmndr4agEzuNIIxmA==
dependencies: dependencies:
"@mantine/utils" "6.0.13" "@mantine/utils" "6.0.16"
prism-react-renderer "^1.2.1" prism-react-renderer "^1.2.1"
"@mantine/ssr@6.0.13": "@mantine/ssr@6.0.16":
version "6.0.13" version "6.0.16"
resolved "https://registry.yarnpkg.com/@mantine/ssr/-/ssr-6.0.13.tgz#5ccfdc8b7c26e16c326b7f91200f6a38bb58965e" resolved "https://registry.yarnpkg.com/@mantine/ssr/-/ssr-6.0.16.tgz#020ea4d9509321206c1c0c4cdeb8d30fe2caac8c"
integrity sha512-IMeWkzTvBM5/LjAprdF6o0Xn6U8mv/Hi88YDZpTLDkRAc9QBEOy4P9zOmpHz3YLRFHQm+Hqr078YckDh5F+KXQ== integrity sha512-caF6MQrYMlydVZBvqsZWetA1UECZsYH6EOUix2VNwRGC66PdWFXW98IROBTYZGVixNB1gxcTrcXsoJ1UrsFJwA==
dependencies: dependencies:
"@mantine/styles" "6.0.13" "@mantine/styles" "6.0.16"
html-react-parser "1.4.12" html-react-parser "1.4.12"
"@mantine/styles@6.0.13": "@mantine/styles@6.0.16":
version "6.0.13" version "6.0.16"
resolved "https://registry.yarnpkg.com/@mantine/styles/-/styles-6.0.13.tgz#a3dc542e1613e7cc461dd8b11c6069b5dd8143d7" resolved "https://registry.yarnpkg.com/@mantine/styles/-/styles-6.0.16.tgz#625e5be80fc964fa6634f10e798c19f5a4c265ce"
integrity sha512-+27oX8ObiBv8jHHDxXKjqe+7cfTJyaAV/Ie00T49EE4LuHuS6nL4vlXHmqamFtDCj2ypEWBV0sdXDev/DNAXSg== integrity sha512-0rDE3BzJOKVdPAbnL3XokVWNYgo1z323UgAURdB+WvzwZY7PhblwvrxUDwvvV77qCUENg2vU0LKHqTQD1DDLTg==
dependencies: dependencies:
clsx "1.1.1" clsx "1.1.1"
csstype "3.0.9" csstype "3.0.9"
"@mantine/utils@6.0.13": "@mantine/utils@6.0.16":
version "6.0.13" version "6.0.16"
resolved "https://registry.yarnpkg.com/@mantine/utils/-/utils-6.0.13.tgz#a7adc128a2e7c07031c7221c1533800d0c80279a" resolved "https://registry.yarnpkg.com/@mantine/utils/-/utils-6.0.16.tgz#b39e47ef8fa4463322e9aa10cdd5980f4310b705"
integrity sha512-iqIU9wurqAeccVbWjM0yr1JGne5VP+ob55M03QAXOEN4+ck93VDTjCkZJR2RFhDcs5q0twQFoOmU/gULR8aKIA== integrity sha512-UFel9DbifL3zS8pTJlr6GfwGd6464OWXCJdUq0oLydgimbC1VV2PnptBr6FMwIpPVcxouLOtY1cChzwFH95PSA==
"@monaco-editor/loader@^1.3.3": "@monaco-editor/loader@^1.3.3":
version "1.3.3" version "1.3.3"
@ -562,89 +567,69 @@
hey-listen "^1.0.8" hey-listen "^1.0.8"
tslib "^2.3.1" tslib "^2.3.1"
"@next/bundle-analyzer@^13.4.3": "@next/bundle-analyzer@^13.4.10":
version "13.4.3" version "13.4.10"
resolved "https://registry.yarnpkg.com/@next/bundle-analyzer/-/bundle-analyzer-13.4.3.tgz#7e48a91eac582e32e4d235d8cf7503843f100000" resolved "https://registry.yarnpkg.com/@next/bundle-analyzer/-/bundle-analyzer-13.4.10.tgz#b4393f74567e6cedf6f31e6f3d0dfcbb2ef4d3dc"
integrity sha512-jzWk6eaCFaIXfIswyQQWnR6FN22HpWoSWe3nLa3JCNkNd2ksriJgn86oQyZRxgAPaEbVKQXBp8GZi8e5DrhVJg== integrity sha512-QwjRH/x1coj8+2Q2suXKez01Irc/rZQXiZ7qE96jj/xR1C+zze6cEdlhWzMlsBFlLmazBhFeOb0PeK6r4dVImA==
dependencies: dependencies:
webpack-bundle-analyzer "4.7.0" webpack-bundle-analyzer "4.7.0"
"@next/env@13.2.3": "@next/env@13.3.0":
version "13.2.3" version "13.3.0"
resolved "https://registry.yarnpkg.com/@next/env/-/env-13.2.3.tgz#77ca49edb3c1d7c5263bb8f2ebe686080e98279e" resolved "https://registry.yarnpkg.com/@next/env/-/env-13.3.0.tgz#cc2e49f03060a4684ce7ec7fd617a21bc5b9edba"
integrity sha512-FN50r/E+b8wuqyRjmGaqvqNDuWBWYWQiigfZ50KnSFH0f+AMQQyaZl+Zm2+CIpKk0fL9QxhLxOpTVA3xFHgFow== integrity sha512-AjppRV4uG3No7L1plinoTQETH+j2F10TEnrMfzbTUYwze5sBUPveeeBAPZPm8OkJZ1epq9OyYKhZrvbD6/9HCQ==
"@next/eslint-plugin-next@13.4.6": "@next/eslint-plugin-next@13.4.10":
version "13.4.6" version "13.4.10"
resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.6.tgz#6a291305226b3f762fdbc01e123efadeb63e5aaf" resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.10.tgz#ff19867396a7709ff75986645f2223787fbb2d9b"
integrity sha512-bPigeu0RI7bgy1ucBA2Yqcfg539y0Lzo38P2hIkrRB1GNvFSbYg6RTu8n6tGqPVrH3TTlPTNKLXG01wc+5NuwQ== integrity sha512-YJqyq6vk39JQfvaNtN83t/p5Jy45+bazRL+V4QI8FPd3FBqFYMEsULiwRLgSJMgFqkk4t4JbeZurz+gILEAFpA==
dependencies: dependencies:
glob "7.1.7" glob "7.1.7"
"@next/swc-android-arm-eabi@13.2.3": "@next/swc-darwin-arm64@13.3.0":
version "13.2.3" version "13.3.0"
resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.2.3.tgz#85eed560c87c7996558c868a117be9780778f192" resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.3.0.tgz#38f18e0639cd4c7edc6a38d4b83fe00f38eea4f2"
integrity sha512-mykdVaAXX/gm+eFO2kPeVjnOCKwanJ9mV2U0lsUGLrEdMUifPUjiXKc6qFAIs08PvmTMOLMNnUxqhGsJlWGKSw== integrity sha512-DmIQCNq6JtccLPPBzf0dgh2vzMWt5wjxbP71pCi5EWpWYE3MsP6FcRXi4MlAmFNDQOfcFXR2r7kBeG1LpZUh1w==
"@next/swc-android-arm64@13.2.3": "@next/swc-darwin-x64@13.3.0":
version "13.2.3" version "13.3.0"
resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.2.3.tgz#8ac54ca9795a48afc4631b4823a4864bd5db0129" resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.3.0.tgz#b670ed1fd1d231aa21279173ec52e3ad56dc6aeb"
integrity sha512-8XwHPpA12gdIFtope+n9xCtJZM3U4gH4vVTpUwJ2w1kfxFmCpwQ4xmeGSkR67uOg80yRMuF0h9V1ueo05sws5w== integrity sha512-oQoqFa88OGgwnYlnAGHVct618FRI/749se0N3S8t9Bzdv5CRbscnO0RcX901+YnNK4Q6yeiizfgO3b7kogtsZg==
"@next/swc-darwin-arm64@13.2.3": "@next/swc-linux-arm64-gnu@13.3.0":
version "13.2.3" version "13.3.0"
resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.2.3.tgz#f674e3c65aec505b6d218a662ade3fe248ccdbda" resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.3.0.tgz#b114935f6b4c94c123f6cac55a4823d483209ba5"
integrity sha512-TXOubiFdLpMfMtaRu1K5d1I9ipKbW5iS2BNbu8zJhoqrhk3Kp7aRKTxqFfWrbliAHhWVE/3fQZUYZOWSXVQi1w== integrity sha512-Wzz2p/WqAJUqTVoLo6H18WMeAXo3i+9DkPDae4oQG8LMloJ3if4NEZTnOnTUlro6cq+S/W4pTGa97nWTrOjbGw==
"@next/swc-darwin-x64@13.2.3": "@next/swc-linux-arm64-musl@13.3.0":
version "13.2.3" version "13.3.0"
resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.2.3.tgz#a15ea7fb4c46034a8f5e387906d0cad08387075a" resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.3.0.tgz#67a57309f8761c7d00d629d6785d56ed0567a0d2"
integrity sha512-GZctkN6bJbpjlFiS5pylgB2pifHvgkqLAPumJzxnxkf7kqNm6rOGuNjsROvOWVWXmKhrzQkREO/WPS2aWsr/yw== integrity sha512-xPVrIQOQo9WXJYgmoTlMnAD/HlR/1e1ZIWGbwIzEirXBVBqMARUulBEIKdC19zuvoJ477qZJgBDCKtKEykCpyQ==
"@next/swc-freebsd-x64@13.2.3": "@next/swc-linux-x64-gnu@13.3.0":
version "13.2.3" version "13.3.0"
resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.2.3.tgz#f7ac6ae4f7d706ff2431f33e40230a554c8c2cbc" resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.3.0.tgz#11bd2bea7c00b40be111c0dd16e71171f3792086"
integrity sha512-rK6GpmMt/mU6MPuav0/M7hJ/3t8HbKPCELw/Uqhi4732xoq2hJ2zbo2FkYs56y6w0KiXrIp4IOwNB9K8L/q62g== integrity sha512-jOFlpGuPD7W2tuXVJP4wt9a3cpNxWAPcloq5EfMJRiXsBBOjLVFZA7boXYxEBzSVgUiVVr1V9T0HFM7pULJ1qA==
"@next/swc-linux-arm-gnueabihf@13.2.3": "@next/swc-linux-x64-musl@13.3.0":
version "13.2.3" version "13.3.0"
resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.2.3.tgz#84ad9e9679d55542a23b590ad9f2e1e9b2df62f7" resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.3.0.tgz#d57e99f85890799b78719c3ea32a4624de8d701b"
integrity sha512-yeiCp/Odt1UJ4KUE89XkeaaboIDiVFqKP4esvoLKGJ0fcqJXMofj4ad3tuQxAMs3F+qqrz9MclqhAHkex1aPZA== integrity sha512-2OwKlzaBgmuet9XYHc3KwsEilzb04F540rlRXkAcjMHL7eCxB7uZIGtsVvKOnQLvC/elrUegwSw1+5f7WmfyOw==
"@next/swc-linux-arm64-gnu@13.2.3": "@next/swc-win32-arm64-msvc@13.3.0":
version "13.2.3" version "13.3.0"
resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.2.3.tgz#56f9175bc632d647c60b9e8bedc0875edf92d8b7" resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.3.0.tgz#0c209aa35d1c88b01e78259a89cd68f4139b5093"
integrity sha512-/miIopDOUsuNlvjBjTipvoyjjaxgkOuvlz+cIbbPcm1eFvzX2ltSfgMgty15GuOiR8Hub4FeTSiq3g2dmCkzGA== integrity sha512-OeHiA6YEvndxT46g+rzFK/MQTfftKxJmzslERMu9LDdC6Kez0bdrgEYed5eXFK2Z1viKZJCGRlhd06rBusyztA==
"@next/swc-linux-arm64-musl@13.2.3": "@next/swc-win32-ia32-msvc@13.3.0":
version "13.2.3" version "13.3.0"
resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.2.3.tgz#7d4cf00e8f1729a3de464da0624773f5d0d14888" resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.3.0.tgz#52ae74da1dd6d840c3743923367d27ed013803dd"
integrity sha512-sujxFDhMMDjqhruup8LLGV/y+nCPi6nm5DlFoThMJFvaaKr/imhkXuk8uCTq4YJDbtRxnjydFv2y8laBSJVC2g== integrity sha512-4aB7K9mcVK1lYEzpOpqWrXHEZympU3oK65fnNcY1Qc4HLJFLJj8AViuqQd4jjjPNuV4sl8jAwTz3gN5VNGWB7w==
"@next/swc-linux-x64-gnu@13.2.3": "@next/swc-win32-x64-msvc@13.3.0":
version "13.2.3" version "13.3.0"
resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.2.3.tgz#17de404910c4ebf7a1d366b19334d7e27e126ab0" resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.3.0.tgz#db7b55fee834dc8c2c484c696469e65bae2ee770"
integrity sha512-w5MyxPknVvC9LVnMenAYMXMx4KxPwXuJRMQFvY71uXg68n7cvcas85U5zkdrbmuZ+JvsO5SIG8k36/6X3nUhmQ== integrity sha512-Reer6rkLLcoOvB0dd66+Y7WrWVFH7sEEkF/4bJCIfsSKnTStTYaHtwIJAwbqnt9I392Tqvku0KkoqZOryWV9LQ==
"@next/swc-linux-x64-musl@13.2.3":
version "13.2.3"
resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.2.3.tgz#07cb7b7f3a3a98034e2533f82638a9b099ba4ab1"
integrity sha512-CTeelh8OzSOVqpzMFMFnVRJIFAFQoTsI9RmVJWW/92S4xfECGcOzgsX37CZ8K982WHRzKU7exeh7vYdG/Eh4CA==
"@next/swc-win32-arm64-msvc@13.2.3":
version "13.2.3"
resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.2.3.tgz#b9ac98c954c71ec9de45d3497a8585096b873152"
integrity sha512-7N1KBQP5mo4xf52cFCHgMjzbc9jizIlkTepe9tMa2WFvEIlKDfdt38QYcr9mbtny17yuaIw02FXOVEytGzqdOQ==
"@next/swc-win32-ia32-msvc@13.2.3":
version "13.2.3"
resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.2.3.tgz#5ec48653a48fd664e940c69c96bba698fdae92eb"
integrity sha512-LzWD5pTSipUXTEMRjtxES/NBYktuZdo7xExJqGDMnZU8WOI+v9mQzsmQgZS/q02eIv78JOCSemqVVKZBGCgUvA==
"@next/swc-win32-x64-msvc@13.2.3":
version "13.2.3"
resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.2.3.tgz#cd432f280beb8d8de5b7cd2501e9f502e9f3dd72"
integrity sha512-aLG2MaFs4y7IwaMTosz2r4mVbqRyCnMoFqOcmfTi7/mAS+G4IMH0vJp4oLdbshqiVoiVuKrAfqtXj55/m7Qu1Q==
"@nodelib/fs.scandir@2.1.5": "@nodelib/fs.scandir@2.1.5":
version "2.1.5" version "2.1.5"
@ -800,27 +785,27 @@
resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728" resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728"
integrity sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg== integrity sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==
"@sentry-internal/tracing@7.55.2": "@sentry-internal/tracing@7.58.1":
version "7.55.2" version "7.58.1"
resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.55.2.tgz#29687b8327cc9d980695603d451316706f2630ed" resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.58.1.tgz#9be915092793da7f1e63eb0c56c7663c6e639933"
integrity sha512-yBW+R7NfwLrOjpwOJHoOSvGDDoM3ZKod5OKXi7Gd5tYqVm1mCaL0n2/wlNMcGTbPbulLBtgzjoTU1bPJAGhmYw== integrity sha512-kOWKqyjYdDgvO6CacXneE9UrFQHT3BXF1UpCAlnHchW/TqRFmg89sJAEUjEPGzN7y6IaX1G4j2dBPDE0OFQi3w==
dependencies: dependencies:
"@sentry/core" "7.55.2" "@sentry/core" "7.58.1"
"@sentry/types" "7.55.2" "@sentry/types" "7.58.1"
"@sentry/utils" "7.55.2" "@sentry/utils" "7.58.1"
tslib "^1.9.3" tslib "^2.4.1 || ^1.9.3"
"@sentry/browser@7.55.2": "@sentry/browser@7.58.1":
version "7.55.2" version "7.58.1"
resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.55.2.tgz#32a5cf7cc2af14b83926ea04ea140e1024f000a6" resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.58.1.tgz#ad6ab07339f814c46add84e5dc4390b738f38730"
integrity sha512-RgA4KOD6t8XHVLm6D2oTh9KW19g3DoQ0QsrUmAq4+giSj2AyDW67VP2V4E72mCZ9Ln9AkNhY0Eh3XuD3opiFQA== integrity sha512-7+6Z/T7m0A/2/ImMCakpMOaWTPxmENzTdaojhkyVQKuYUZr7mCe4nco0jsongwY634zSUziuVsibi0jxMMTdBA==
dependencies: dependencies:
"@sentry-internal/tracing" "7.55.2" "@sentry-internal/tracing" "7.58.1"
"@sentry/core" "7.55.2" "@sentry/core" "7.58.1"
"@sentry/replay" "7.55.2" "@sentry/replay" "7.58.1"
"@sentry/types" "7.55.2" "@sentry/types" "7.58.1"
"@sentry/utils" "7.55.2" "@sentry/utils" "7.58.1"
tslib "^1.9.3" tslib "^2.4.1 || ^1.9.3"
"@sentry/cli@^1.74.6": "@sentry/cli@^1.74.6":
version "1.75.0" version "1.75.0"
@ -834,89 +819,89 @@
proxy-from-env "^1.1.0" proxy-from-env "^1.1.0"
which "^2.0.2" which "^2.0.2"
"@sentry/core@7.55.2": "@sentry/core@7.58.1":
version "7.55.2" version "7.58.1"
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.55.2.tgz#a3988393ab791eba5d7fe735dfecea5a615e9e50" resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.58.1.tgz#d4010f2b0bcfe87b57fa490c0c7ab7a567ed4707"
integrity sha512-clzQirownxqADv9+fopyMJTHzaoWedkN2+mi4ro1LxjLgROdXBFurMCC1nT+7cH/xvQ5gMIRkM/y/4gRtKy2Ew== integrity sha512-hpeB5fZ5T6Jg1CBqz486jHgWuJ5R/HD0wyYX+S3LDDsHCJo6V3TxNuoxYDlTTerRRfZdTwr9GYJXskehpU26IA==
dependencies: dependencies:
"@sentry/types" "7.55.2" "@sentry/types" "7.58.1"
"@sentry/utils" "7.55.2" "@sentry/utils" "7.58.1"
tslib "^1.9.3" tslib "^2.4.1 || ^1.9.3"
"@sentry/integrations@7.55.2": "@sentry/integrations@7.58.1":
version "7.55.2" version "7.58.1"
resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-7.55.2.tgz#f4d528f95a36748c10a5edf40e28207b2abe2d02" resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-7.58.1.tgz#da033779e244cbed56598f94382a9e1da2e50371"
integrity sha512-QgHx7MKMLMx1e5XgQyeUYtZA+xPc7IjS0MaZTpIRehtxD8Fg1tWkOxV4PP2nUXksLjfkoISo0jpYLtuDSCGFTw== integrity sha512-fKZV/QDPM7rIZhaJpFwgxD4rzWLtRuag7cOWfvHCsezJnhXEF8u45sBak/VWmSr8SbcvJAIJSZbWYi0N91hNHQ==
dependencies: dependencies:
"@sentry/types" "7.55.2" "@sentry/types" "7.58.1"
"@sentry/utils" "7.55.2" "@sentry/utils" "7.58.1"
localforage "^1.8.1" localforage "^1.8.1"
tslib "^1.9.3" tslib "^2.4.1 || ^1.9.3"
"@sentry/nextjs@^7.55.2": "@sentry/nextjs@^7.55.2":
version "7.55.2" version "7.58.1"
resolved "https://registry.yarnpkg.com/@sentry/nextjs/-/nextjs-7.55.2.tgz#03a6d6779b30d25bb87e4bbfaba4457b40eae0ab" resolved "https://registry.yarnpkg.com/@sentry/nextjs/-/nextjs-7.58.1.tgz#16f87ed26e4f8f474ee41f16f6e20a7ac7672904"
integrity sha512-YIq/gLMCCdcKmPln5zglWHKwQB8KWGblOJ19t/JuHSyffWXL1x1IYyBYgpdjzn6q0AgwsK4IM6TqTb3ISN8wLQ== integrity sha512-/wNVWNJ4vdVHBAvbnjbrRfAX3YhGvdC/CR9IAN5h0tTNjD/LFaHUN97/MUn9oZ7FpFgOOveM5bqK/5b6QRCBCg==
dependencies: dependencies:
"@rollup/plugin-commonjs" "24.0.0" "@rollup/plugin-commonjs" "24.0.0"
"@sentry/core" "7.55.2" "@sentry/core" "7.58.1"
"@sentry/integrations" "7.55.2" "@sentry/integrations" "7.58.1"
"@sentry/node" "7.55.2" "@sentry/node" "7.58.1"
"@sentry/react" "7.55.2" "@sentry/react" "7.58.1"
"@sentry/types" "7.55.2" "@sentry/types" "7.58.1"
"@sentry/utils" "7.55.2" "@sentry/utils" "7.58.1"
"@sentry/webpack-plugin" "1.20.0" "@sentry/webpack-plugin" "1.20.0"
chalk "3.0.0" chalk "3.0.0"
rollup "2.78.0" rollup "2.78.0"
stacktrace-parser "^0.1.10" stacktrace-parser "^0.1.10"
tslib "^1.9.3" tslib "^2.4.1 || ^1.9.3"
"@sentry/node@7.55.2": "@sentry/node@7.58.1":
version "7.55.2" version "7.58.1"
resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.55.2.tgz#4d63bc585816b64fc1ce67cbdfd896b5733eb804" resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.58.1.tgz#fc48b8f6ddfa0402cfdec3706cf162df60052b32"
integrity sha512-43lGfMFFUD38Xerc4DqIuQkEOETHCh31JHUTI6r/gXdzmcKpWRscgH4nAcAUoCu+Myrv0fVXsOa12FM4DPfr8A== integrity sha512-XsSu0xg5SYcltMbatnRBcIZw9pXwGJoGbYDLuPhhuqBz2mnQ0mQ9Try9dn/agDU7KZzT0IyA1qkPXk0NkMe3rw==
dependencies: dependencies:
"@sentry-internal/tracing" "7.55.2" "@sentry-internal/tracing" "7.58.1"
"@sentry/core" "7.55.2" "@sentry/core" "7.58.1"
"@sentry/types" "7.55.2" "@sentry/types" "7.58.1"
"@sentry/utils" "7.55.2" "@sentry/utils" "7.58.1"
cookie "^0.4.1" cookie "^0.4.1"
https-proxy-agent "^5.0.0" https-proxy-agent "^5.0.0"
lru_map "^0.3.3" lru_map "^0.3.3"
tslib "^1.9.3" tslib "^2.4.1 || ^1.9.3"
"@sentry/react@7.55.2": "@sentry/react@7.58.1":
version "7.55.2" version "7.58.1"
resolved "https://registry.yarnpkg.com/@sentry/react/-/react-7.55.2.tgz#2b13ffe30dd1e7f8fa6dc104e7b3736c8f41ae06" resolved "https://registry.yarnpkg.com/@sentry/react/-/react-7.58.1.tgz#b0901f75ceddaa0ffa5afd36964da50314cd6e69"
integrity sha512-7LqM8vQ73boESaOJ9TOmyVKfkUuLHMHU89ltKYsi4s6816Z6cuJ6UcAVUt0Ks4iLzNCVRVJ5OqeY37ge7pEaTA== integrity sha512-0fh2JfKBxPU6Pm11PBt/5DgDg+l0cKcOf1WGhCWsBcFmRE2gAax+Q09+1fWm6+dqtg3piVR8AEEU6ZCBk3l4OQ==
dependencies: dependencies:
"@sentry/browser" "7.55.2" "@sentry/browser" "7.58.1"
"@sentry/types" "7.55.2" "@sentry/types" "7.58.1"
"@sentry/utils" "7.55.2" "@sentry/utils" "7.58.1"
hoist-non-react-statics "^3.3.2" hoist-non-react-statics "^3.3.2"
tslib "^1.9.3" tslib "^2.4.1 || ^1.9.3"
"@sentry/replay@7.55.2": "@sentry/replay@7.58.1":
version "7.55.2" version "7.58.1"
resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.55.2.tgz#001eeb4d0dd900630ddfcea99185556b0699c12a" resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.58.1.tgz#daa389ba215f90f6579c388f67a9cf34b613c3a9"
integrity sha512-G9iAcI9bvy5X8fvdz0QxF3LJ8oGB0Vxt0iOPdRZYhjIcPbNpE3NaeT6xZlNX1pCcHLroE6BMRF/6TTalcl5Erw== integrity sha512-KKlpIxGrH1deTr/R3BErX8y16MnOzEylBVVn2I31BglLoZETFS9JAle6JNOgGxS5apFjwdQmD+69vX/mlVhMow==
dependencies: dependencies:
"@sentry/core" "7.55.2" "@sentry/core" "7.58.1"
"@sentry/types" "7.55.2" "@sentry/types" "7.58.1"
"@sentry/utils" "7.55.2" "@sentry/utils" "7.58.1"
"@sentry/types@7.55.2": "@sentry/types@7.58.1":
version "7.55.2" version "7.58.1"
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.55.2.tgz#1abd2e02308fcd9ff3e0ac0a56c6d67e36764964" resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.58.1.tgz#c67f99f9af82ea930cdf895d71ae049575e38bf7"
integrity sha512-mAtkA8wvUDrLjAAmy9tjn+NiXcxVz/ltbslTKaIW6JNgVRz5kMt1Ny8RJsgqaZqa4LFP8q+IvWw4Vd91kb57rA== integrity sha512-OnKG+yrilPBeVNQK3biF0u/4IDjwH+boJU1XzJOnYdMRO8uzTWxvaRqpt0C8sVE9VAetRi2eutkzOgCXZISRrw==
"@sentry/utils@7.55.2": "@sentry/utils@7.58.1":
version "7.55.2" version "7.58.1"
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.55.2.tgz#6a214c867c73305faac0997bdef4581f3bee0128" resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.58.1.tgz#b5e8ee53ce2f8ba7833a4a4e28044eaa1da9fa2f"
integrity sha512-Yv9XtbOESdN7bkK2AMrKsmKMF5OOVv5v5hVcOqXtSTw1t2oMAtRjXXqGpUo+TkdTOjeoX6dr19ozVFHaGvqHkw== integrity sha512-iC9xZJBHp4+MDrZjKwcmMUhI5sTmpUcttwmsJL9HA6ACW+L1XX2eGSDky5pSlhhVFR7q7jJnQ7YUlMQ/jcd8eQ==
dependencies: dependencies:
"@sentry/types" "7.55.2" "@sentry/types" "7.58.1"
tslib "^1.9.3" tslib "^2.4.1 || ^1.9.3"
"@sentry/webpack-plugin@1.20.0": "@sentry/webpack-plugin@1.20.0":
version "1.20.0" version "1.20.0"
@ -938,17 +923,17 @@
dependencies: dependencies:
tslib "^2.4.0" tslib "^2.4.0"
"@tanstack/query-core@4.29.14": "@tanstack/query-core@4.29.25":
version "4.29.14" version "4.29.25"
resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.29.14.tgz#569de51719a0f4445fabff775012d5c09a173b96" resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.29.25.tgz#605d357968a740544af6754004eed1dfd4587cb8"
integrity sha512-ElEAahtLWA7Y7c2Haw10KdEf2tx+XZl/Z8dmyWxZehxWK3TPL5qtXtb7kUEhvt/8u2cSP62fLxgh2qqzMMGnDQ== integrity sha512-DI4y4VC6Uw4wlTpOocEXDky69xeOScME1ezLKsj+hOk7DguC9fkqXtp6Hn39BVb9y0b5IBrY67q6kIX623Zj4Q==
"@tanstack/react-query@^4.29.14": "@tanstack/react-query@^4.29.25":
version "4.29.14" version "4.29.25"
resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.29.14.tgz#5e836d470c1c85d1aa3e53a6fc64f788dddb2ee5" resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.29.25.tgz#64df3260b65760fbd3c81ffae23b7b3802c71aa6"
integrity sha512-wh4bd/QIy85YgTDBtj/7/9ZkpRX41QdZuUL8xKoSzuMCukXvAE1/oJ4p0F15lqQq9W3g2pgcbr2Aa+CNvqABhg== integrity sha512-c1+Ezu+XboYrdAMdusK2fTdRqXPMgPAnyoTrzHOZQqr8Hqz6PNvV9DSKl8agUo6nXX4np7fdWabIprt+838dLg==
dependencies: dependencies:
"@tanstack/query-core" "4.29.14" "@tanstack/query-core" "4.29.25"
use-sync-external-store "^1.2.0" use-sync-external-store "^1.2.0"
"@testing-library/dom@^9.0.0": "@testing-library/dom@^9.0.0":
@ -1086,10 +1071,10 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.1.2.tgz#8fd63447e3f99aba6c3168fd2ec4580d5b97886f" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.1.2.tgz#8fd63447e3f99aba6c3168fd2ec4580d5b97886f"
integrity sha512-CTO/wa8x+rZU626cL2BlbCDzydgnFNgc19h4YvizpTO88MFQxab8wqisxaofQJ/9bLGugRdWIuX/TbIs6VVF6g== integrity sha512-CTO/wa8x+rZU626cL2BlbCDzydgnFNgc19h4YvizpTO88MFQxab8wqisxaofQJ/9bLGugRdWIuX/TbIs6VVF6g==
"@types/node@^20.2.1": "@types/node@^20.4.2":
version "20.3.1" version "20.4.2"
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.1.tgz#e8a83f1aa8b649377bb1fb5d7bac5cb90e784dfe" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.2.tgz#129cc9ae69f93824f92fac653eebfb4812ab4af9"
integrity sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg== integrity sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw==
"@types/parse-json@^4.0.0": "@types/parse-json@^4.0.0":
version "4.0.0" version "4.0.0"
@ -1221,11 +1206,16 @@ acorn-walk@^8.0.0, acorn-walk@^8.1.1:
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
acorn@^8.0.4, acorn@^8.4.1, acorn@^8.8.0: acorn@^8.0.4, acorn@^8.4.1:
version "8.8.2" version "8.8.2"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
acorn@^8.9.0:
version "8.10.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5"
integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
agent-base@6: agent-base@6:
version "6.0.2" version "6.0.2"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
@ -1461,6 +1451,13 @@ buffer-from@~0.1.1:
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-0.1.2.tgz#15f4b9bcef012044df31142c14333caf6e0260d0" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-0.1.2.tgz#15f4b9bcef012044df31142c14333caf6e0260d0"
integrity sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg== integrity sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==
busboy@1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893"
integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==
dependencies:
streamsearch "^1.1.0"
calculate-size@^1.1.1: calculate-size@^1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/calculate-size/-/calculate-size-1.1.1.tgz#ae7caa1c7795f82c4f035dc7be270e3581dae3ee" resolved "https://registry.yarnpkg.com/calculate-size/-/calculate-size-1.1.1.tgz#ae7caa1c7795f82c4f035dc7be270e3581dae3ee"
@ -1683,10 +1680,10 @@ damerau-levenshtein@^1.0.8:
resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7"
integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==
dayjs@^1.11.8: dayjs@^1.11.9:
version "1.11.8" version "1.11.9"
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.8.tgz#4282f139c8c19dd6d0c7bd571e30c2d0ba7698ea" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.9.tgz#9ca491933fadd0a60a2c19f6c237c03517d71d1a"
integrity sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ== integrity sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==
debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2:
version "4.3.4" version "4.3.4"
@ -2026,12 +2023,12 @@ escape-string-regexp@^4.0.0:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
eslint-config-next@13.4.6: eslint-config-next@13.4.10:
version "13.4.6" version "13.4.10"
resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-13.4.6.tgz#ccccf5dad45b23a56418d66caad5339116297308" resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-13.4.10.tgz#59eaa37c805337972351b9920b1c28a79a14173e"
integrity sha512-nlv4FYish1RYYHILbQwM5/rD37cOvEqtMfDjtQCYbXdE2O3MggqHu2q6IDeLE2Z6u8ZJyNPgWOA6OimWcxj3qw== integrity sha512-+JjcM6lQmFR5Mw0ORm9o1CR29+z/uajgSfYAPEGIBxOhTHBgCMs7ysuwi72o7LkMmA8E3N7/h09pSGZxs0s85g==
dependencies: dependencies:
"@next/eslint-plugin-next" "13.4.6" "@next/eslint-plugin-next" "13.4.10"
"@rushstack/eslint-patch" "^1.1.3" "@rushstack/eslint-patch" "^1.1.3"
"@typescript-eslint/parser" "^5.42.0" "@typescript-eslint/parser" "^5.42.0"
eslint-import-resolver-node "^0.3.6" eslint-import-resolver-node "^0.3.6"
@ -2039,7 +2036,7 @@ eslint-config-next@13.4.6:
eslint-plugin-import "^2.26.0" eslint-plugin-import "^2.26.0"
eslint-plugin-jsx-a11y "^6.5.1" eslint-plugin-jsx-a11y "^6.5.1"
eslint-plugin-react "^7.31.7" eslint-plugin-react "^7.31.7"
eslint-plugin-react-hooks "^4.5.0" eslint-plugin-react-hooks "5.0.0-canary-7118f5dd7-20230705"
eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.7: eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.7:
version "0.3.7" version "0.3.7"
@ -2113,17 +2110,18 @@ eslint-plugin-jsx-a11y@^6.5.1:
object.fromentries "^2.0.6" object.fromentries "^2.0.6"
semver "^6.3.0" semver "^6.3.0"
eslint-plugin-prettier@^4.2.1: eslint-plugin-prettier@^5.0.0:
version "4.2.1" version "5.0.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz#6887780ed95f7708340ec79acfdf60c35b9be57a"
integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== integrity sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==
dependencies: dependencies:
prettier-linter-helpers "^1.0.0" prettier-linter-helpers "^1.0.0"
synckit "^0.8.5"
eslint-plugin-react-hooks@^4.5.0: eslint-plugin-react-hooks@5.0.0-canary-7118f5dd7-20230705:
version "4.6.0" version "5.0.0-canary-7118f5dd7-20230705"
resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0-canary-7118f5dd7-20230705.tgz#4d55c50e186f1a2b0636433d2b0b2f592ddbccfd"
integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== integrity sha512-AZYbMo/NW9chdL7vk6HQzQhT+PvTAEVqWk9ziruUoW2kAOcN5qNyelv70e0F1VNQAbvutOC9oc+xfWycI9FxDw==
eslint-plugin-react@^7.31.7: eslint-plugin-react@^7.31.7:
version "7.32.2" version "7.32.2"
@ -2146,10 +2144,10 @@ eslint-plugin-react@^7.31.7:
semver "^6.3.0" semver "^6.3.0"
string.prototype.matchall "^4.0.8" string.prototype.matchall "^4.0.8"
eslint-plugin-unused-imports@^2.0.0: eslint-plugin-unused-imports@^3.0.0:
version "2.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-2.0.0.tgz#d8db8c4d0cfa0637a8b51ce3fd7d1b6bc3f08520" resolved "https://registry.yarnpkg.com/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.0.0.tgz#d25175b0072ff16a91892c3aa72a09ca3a9e69e7"
integrity sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A== integrity sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==
dependencies: dependencies:
eslint-rule-composer "^0.3.0" eslint-rule-composer "^0.3.0"
@ -2176,15 +2174,15 @@ eslint-visitor-keys@^3.4.1:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994"
integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==
eslint@8.43.0: eslint@8.45.0:
version "8.43.0" version "8.45.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.43.0.tgz#3e8c6066a57097adfd9d390b8fc93075f257a094" resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.45.0.tgz#bab660f90d18e1364352c0a6b7c6db8edb458b78"
integrity sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q== integrity sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==
dependencies: dependencies:
"@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/eslint-utils" "^4.2.0"
"@eslint-community/regexpp" "^4.4.0" "@eslint-community/regexpp" "^4.4.0"
"@eslint/eslintrc" "^2.0.3" "@eslint/eslintrc" "^2.1.0"
"@eslint/js" "8.43.0" "@eslint/js" "8.44.0"
"@humanwhocodes/config-array" "^0.11.10" "@humanwhocodes/config-array" "^0.11.10"
"@humanwhocodes/module-importer" "^1.0.1" "@humanwhocodes/module-importer" "^1.0.1"
"@nodelib/fs.walk" "^1.2.8" "@nodelib/fs.walk" "^1.2.8"
@ -2196,7 +2194,7 @@ eslint@8.43.0:
escape-string-regexp "^4.0.0" escape-string-regexp "^4.0.0"
eslint-scope "^7.2.0" eslint-scope "^7.2.0"
eslint-visitor-keys "^3.4.1" eslint-visitor-keys "^3.4.1"
espree "^9.5.2" espree "^9.6.0"
esquery "^1.4.2" esquery "^1.4.2"
esutils "^2.0.2" esutils "^2.0.2"
fast-deep-equal "^3.1.3" fast-deep-equal "^3.1.3"
@ -2206,7 +2204,6 @@ eslint@8.43.0:
globals "^13.19.0" globals "^13.19.0"
graphemer "^1.4.0" graphemer "^1.4.0"
ignore "^5.2.0" ignore "^5.2.0"
import-fresh "^3.0.0"
imurmurhash "^0.1.4" imurmurhash "^0.1.4"
is-glob "^4.0.0" is-glob "^4.0.0"
is-path-inside "^3.0.3" is-path-inside "^3.0.3"
@ -2216,17 +2213,16 @@ eslint@8.43.0:
lodash.merge "^4.6.2" lodash.merge "^4.6.2"
minimatch "^3.1.2" minimatch "^3.1.2"
natural-compare "^1.4.0" natural-compare "^1.4.0"
optionator "^0.9.1" optionator "^0.9.3"
strip-ansi "^6.0.1" strip-ansi "^6.0.1"
strip-json-comments "^3.1.0"
text-table "^0.2.0" text-table "^0.2.0"
espree@^9.5.2: espree@^9.6.0:
version "9.5.2" version "9.6.1"
resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b" resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f"
integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw== integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==
dependencies: dependencies:
acorn "^8.8.0" acorn "^8.9.0"
acorn-jsx "^5.3.2" acorn-jsx "^5.3.2"
eslint-visitor-keys "^3.4.1" eslint-visitor-keys "^3.4.1"
@ -2730,7 +2726,7 @@ immediate@~3.0.5:
resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==
import-fresh@^3.0.0, import-fresh@^3.2.1: import-fresh@^3.2.1:
version "3.3.0" version "3.3.0"
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
@ -3056,10 +3052,10 @@ jsonc-parser@^3.2.0:
resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76"
integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==
jsonwebtoken@^9.0.0: jsonwebtoken@^9.0.1:
version "9.0.0" version "9.0.1"
resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz#d0faf9ba1cc3a56255fe49c0961a67e520c1926d" resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz#81d8c901c112c24e497a55daf6b2be1225b40145"
integrity sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw== integrity sha512-K8wx7eJ5TPvEjuiVSkv167EVboBDv9PZdDoF7BgeQnBLVvZWW9clr2PsQHVJDTKaEIH5JBIwHujGcHp7GgI2eg==
dependencies: dependencies:
jws "^3.2.2" jws "^3.2.2"
lodash "^4.17.21" lodash "^4.17.21"
@ -3351,30 +3347,27 @@ natural-compare@^1.4.0:
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
next@13.2.3: next@13.3.0:
version "13.2.3" version "13.3.0"
resolved "https://registry.yarnpkg.com/next/-/next-13.2.3.tgz#92d170e7aca421321f230ff80c35c4751035f42e" resolved "https://registry.yarnpkg.com/next/-/next-13.3.0.tgz#40632d303d74fc8521faa0a5bf4a033a392749b1"
integrity sha512-nKFJC6upCPN7DWRx4+0S/1PIOT7vNlCT157w9AzbXEgKy6zkiPKEt5YyRUsRZkmpEqBVrGgOqNfwecTociyg+w== integrity sha512-OVTw8MpIPa12+DCUkPqRGPS3thlJPcwae2ZL4xti3iBff27goH024xy4q2lhlsdoYiKOi8Kz6uJoLW/GXwgfOA==
dependencies: dependencies:
"@next/env" "13.2.3" "@next/env" "13.3.0"
"@swc/helpers" "0.4.14" "@swc/helpers" "0.4.14"
busboy "1.6.0"
caniuse-lite "^1.0.30001406" caniuse-lite "^1.0.30001406"
postcss "8.4.14" postcss "8.4.14"
styled-jsx "5.1.1" styled-jsx "5.1.1"
optionalDependencies: optionalDependencies:
"@next/swc-android-arm-eabi" "13.2.3" "@next/swc-darwin-arm64" "13.3.0"
"@next/swc-android-arm64" "13.2.3" "@next/swc-darwin-x64" "13.3.0"
"@next/swc-darwin-arm64" "13.2.3" "@next/swc-linux-arm64-gnu" "13.3.0"
"@next/swc-darwin-x64" "13.2.3" "@next/swc-linux-arm64-musl" "13.3.0"
"@next/swc-freebsd-x64" "13.2.3" "@next/swc-linux-x64-gnu" "13.3.0"
"@next/swc-linux-arm-gnueabihf" "13.2.3" "@next/swc-linux-x64-musl" "13.3.0"
"@next/swc-linux-arm64-gnu" "13.2.3" "@next/swc-win32-arm64-msvc" "13.3.0"
"@next/swc-linux-arm64-musl" "13.2.3" "@next/swc-win32-ia32-msvc" "13.3.0"
"@next/swc-linux-x64-gnu" "13.2.3" "@next/swc-win32-x64-msvc" "13.3.0"
"@next/swc-linux-x64-musl" "13.2.3"
"@next/swc-win32-arm64-msvc" "13.2.3"
"@next/swc-win32-ia32-msvc" "13.2.3"
"@next/swc-win32-x64-msvc" "13.2.3"
node-fetch@2.6.7: node-fetch@2.6.7:
version "2.6.7" version "2.6.7"
@ -3484,17 +3477,17 @@ opener@^1.5.2:
resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598"
integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==
optionator@^0.9.1: optionator@^0.9.3:
version "0.9.1" version "0.9.3"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64"
integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==
dependencies: dependencies:
"@aashutoshrathi/word-wrap" "^1.2.3"
deep-is "^0.1.3" deep-is "^0.1.3"
fast-levenshtein "^2.0.6" fast-levenshtein "^2.0.6"
levn "^0.4.1" levn "^0.4.1"
prelude-ls "^1.2.1" prelude-ls "^1.2.1"
type-check "^0.4.0" type-check "^0.4.0"
word-wrap "^1.2.3"
p-cancelable@^3.0.0: p-cancelable@^3.0.0:
version "3.0.0" version "3.0.0"
@ -3610,10 +3603,10 @@ prettier-linter-helpers@^1.0.0:
dependencies: dependencies:
fast-diff "^1.1.2" fast-diff "^1.1.2"
prettier@^2.8.8: prettier@^3.0.0:
version "2.8.8" version "3.0.0"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.0.tgz#e7b19f691245a21d618c68bc54dc06122f6105ae"
integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== integrity sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==
pretty-format@^27.0.2: pretty-format@^27.0.2:
version "27.5.1" version "27.5.1"
@ -3728,10 +3721,10 @@ react-hot-toast@^2.4.1:
dependencies: dependencies:
goober "^2.1.10" goober "^2.1.10"
react-icons@^4.9.0: react-icons@^4.10.1:
version "4.9.0" version "4.10.1"
resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.9.0.tgz#ba44f436a053393adb1bdcafbc5c158b7b70d2a3" resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.10.1.tgz#3f3b5eec1f63c1796f6a26174a1091ca6437a500"
integrity sha512-ijUnFr//ycebOqujtqtV9PFS7JjhWg0QU6ykURVHuL4cbofvRCf3f6GMn9+fBktEFQOIVZnuAYLZdiyadRQRFg== integrity sha512-/ngzDP/77tlCfqthiiGNZeYFACw85fUjZtLbedmJ5DTlNDIwETxhwBzdOJ21zj4iJdvc0J3y7yOsX3PpxAJzrw==
react-is@^16.13.1, react-is@^16.7.0: react-is@^16.13.1, react-is@^16.7.0:
version "16.13.1" version "16.13.1"
@ -3811,10 +3804,10 @@ react-use-gesture@^8.0.1:
resolved "https://registry.yarnpkg.com/react-use-gesture/-/react-use-gesture-8.0.1.tgz#4360c0f7c9e26baf9fbe58f63fc9de7ef699c17f" resolved "https://registry.yarnpkg.com/react-use-gesture/-/react-use-gesture-8.0.1.tgz#4360c0f7c9e26baf9fbe58f63fc9de7ef699c17f"
integrity sha512-CXzUNkulUdgouaAlvAsC5ZVo0fi9KGSBSk81WrE4kOIcJccpANe9zZkAYr5YZZhqpicIFxitsrGVS4wmoMun9A== integrity sha512-CXzUNkulUdgouaAlvAsC5ZVo0fi9KGSBSk81WrE4kOIcJccpANe9zZkAYr5YZZhqpicIFxitsrGVS4wmoMun9A==
react-zoom-pan-pinch@^3.0.8: react-zoom-pan-pinch@^3.1.0:
version "3.0.8" version "3.1.0"
resolved "https://registry.yarnpkg.com/react-zoom-pan-pinch/-/react-zoom-pan-pinch-3.0.8.tgz#c649d644e8aef239afe678a65fd618e65746ddc9" resolved "https://registry.yarnpkg.com/react-zoom-pan-pinch/-/react-zoom-pan-pinch-3.1.0.tgz#d87a66fd22a97f5dd56b54076411a9dce1f448cd"
integrity sha512-z6O5SV5X+XBo/LLO59PgzNE2WT+tp8lw1w3M0y138jCXViwHWKK1MqorICbmSVSOOD5Fa2o6pcg1ppJj9vzqJA== integrity sha512-a3LlP8QPgTikvteCNkZ3X6wIWC0lrg1geP5WkUJyx2MXXAhHQek3r17N1nT/esOiWGuPIECnsd9AGoK8jOeGcg==
react@^18.2.0: react@^18.2.0:
version "18.2.0" version "18.2.0"
@ -4102,6 +4095,11 @@ stop-iteration-iterator@^1.0.0:
dependencies: dependencies:
internal-slot "^1.0.4" internal-slot "^1.0.4"
streamsearch@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764"
integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==
string.prototype.matchall@^4.0.8: string.prototype.matchall@^4.0.8:
version "4.0.8" version "4.0.8"
resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3"
@ -4167,7 +4165,7 @@ strip-bom@^3.0.0:
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: strip-json-comments@^3.1.1:
version "3.1.1" version "3.1.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
@ -4233,7 +4231,7 @@ supports-preserve-symlinks-flag@^1.0.0:
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
synckit@^0.8.4: synckit@^0.8.4, synckit@^0.8.5:
version "0.8.5" version "0.8.5"
resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3" resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3"
integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q== integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==
@ -4364,7 +4362,7 @@ tslib@2.4.0:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3"
integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
tslib@^1.8.1, tslib@^1.9.3: tslib@^1.8.1:
version "1.14.1" version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
@ -4374,6 +4372,11 @@ tslib@^2.0.0, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==
"tslib@^2.4.1 || ^1.9.3":
version "2.6.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3"
integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==
tsutils@^3.21.0: tsutils@^3.21.0:
version "3.21.0" version "3.21.0"
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
@ -4407,10 +4410,10 @@ typed-array-length@^1.0.4:
for-each "^0.3.3" for-each "^0.3.3"
is-typed-array "^1.1.9" is-typed-array "^1.1.9"
typescript@5.0.4: typescript@5.1.6:
version "5.0.4" version "5.1.6"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274"
integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==
unbox-primitive@^1.0.2: unbox-primitive@^1.0.2:
version "1.0.2" version "1.0.2"
@ -4572,11 +4575,6 @@ which@^2.0.1, which@^2.0.2:
dependencies: dependencies:
isexe "^2.0.0" isexe "^2.0.0"
word-wrap@^1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
wrappy@1: wrappy@1:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
@ -4634,9 +4632,9 @@ yocto-queue@^0.1.0:
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
zustand@^4.3.8: zustand@^4.3.9:
version "4.3.8" version "4.3.9"
resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.3.8.tgz#37113df8e9e1421b0be1b2dca02b49b76210e7c4" resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.3.9.tgz#a7d4332bbd75dfd25c6848180b3df1407217f2ad"
integrity sha512-4h28KCkHg5ii/wcFFJ5Fp+k1J3gJoasaIbppdgZFO4BPJnsNxL0mQXBSFgOgAdCdBj35aDTPvdAJReTMntFPGg== integrity sha512-Tat5r8jOMG1Vcsj8uldMyqYKC5IZvQif8zetmLHs9WoZlntTHmIoNM8TpLRY31ExncuUvUOXehd0kvahkuHjDw==
dependencies: dependencies:
use-sync-external-store "1.2.0" use-sync-external-store "1.2.0"