From 0f4d968b9d16864f4ffe878a039bc0ce77e8ab81 Mon Sep 17 00:00:00 2001 From: devleejb Date: Tue, 30 Jan 2024 18:35:38 +0900 Subject: [PATCH 01/22] Add intelligence button --- frontend/public/yorkie.png | Bin 0 -> 19146 bytes frontend/src/components/editor/Editor.tsx | 2 + .../components/editor/YorkieIntelligence.tsx | 62 +++++++++++++++ .../src/pages/workspace/document/Index.tsx | 2 + .../utils/intelligence/intelligencePivot.ts | 74 ++++++++++++++++++ 5 files changed, 140 insertions(+) create mode 100644 frontend/public/yorkie.png create mode 100644 frontend/src/components/editor/YorkieIntelligence.tsx create mode 100644 frontend/src/utils/intelligence/intelligencePivot.ts diff --git a/frontend/public/yorkie.png b/frontend/public/yorkie.png new file mode 100644 index 0000000000000000000000000000000000000000..6f57b5f045e5cad96c2884248487419ea0ca9f1e GIT binary patch literal 19146 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 Z{C{>hcH$eXc0~XH002ovPDHLkV1hV#!}tII literal 0 HcmV?d00001 diff --git a/frontend/src/components/editor/Editor.tsx b/frontend/src/components/editor/Editor.tsx index 618ed7cd..f6bdeb98 100644 --- a/frontend/src/components/editor/Editor.tsx +++ b/frontend/src/components/editor/Editor.tsx @@ -10,6 +10,7 @@ import { xcodeLight, xcodeDark } from "@uiw/codemirror-theme-xcode"; import { useCurrentTheme } from "../../hooks/useCurrentTheme"; import { keymap } from "@codemirror/view"; import { indentWithTab } from "@codemirror/commands"; +import { intelligencePivot } from "../../utils/intelligence/intelligencePivot"; function Editor() { const themeMode = useCurrentTheme(); @@ -42,6 +43,7 @@ function Editor() { }), EditorView.lineWrapping, keymap.of([indentWithTab]), + intelligencePivot, ], }); diff --git a/frontend/src/components/editor/YorkieIntelligence.tsx b/frontend/src/components/editor/YorkieIntelligence.tsx new file mode 100644 index 00000000..915e990a --- /dev/null +++ b/frontend/src/components/editor/YorkieIntelligence.tsx @@ -0,0 +1,62 @@ +import { Card, CardActionArea, Fade, Stack, Typography, useTheme } from "@mui/material"; +import { useEffect, useState } from "react"; +import { createPortal } from "react-dom"; +import { useDebounce } from "react-use"; + +function YorkieIntelligence() { + const theme = useTheme(); + const [draggedContents, setDraggedContents] = useState(""); + const [intelligencePivot, setIntelligencePivot] = useState(null); + const [debouncedPivot, setDebouncedPivot] = useState(null); + + useDebounce( + () => { + setDebouncedPivot(intelligencePivot); + }, + 500, + [intelligencePivot] + ); + + useEffect(() => { + document.addEventListener("selectionchange", function () { + const intelligencePivot = document.querySelector("#yorkie-intelligence"); + setIntelligencePivot(intelligencePivot); + + if (intelligencePivot) { + const selection = window.getSelection(); + setDraggedContents(selection!.toString()); + } + }); + }, []); + + if (!debouncedPivot) return; + + return createPortal( + + + + + + Yorkie Intelligence + + + + , + debouncedPivot + ); +} + +export default YorkieIntelligence; diff --git a/frontend/src/pages/workspace/document/Index.tsx b/frontend/src/pages/workspace/document/Index.tsx index b4aaa2b0..c707744a 100644 --- a/frontend/src/pages/workspace/document/Index.tsx +++ b/frontend/src/pages/workspace/document/Index.tsx @@ -8,6 +8,7 @@ import { useGetDocumentQuery } from "../../../hooks/api/workspaceDocument"; import { useGetWorkspaceQuery } from "../../../hooks/api/workspace"; import DocumentView from "../../../components/editor/DocumentView"; import { useYorkieDocument } from "../../../hooks/useYorkieDocument"; +import YorkieIntelligence from "../../../components/editor/YorkieIntelligence"; function DocumentIndex() { const dispatch = useDispatch(); @@ -36,6 +37,7 @@ function DocumentIndex() { return ( + ); } diff --git a/frontend/src/utils/intelligence/intelligencePivot.ts b/frontend/src/utils/intelligence/intelligencePivot.ts new file mode 100644 index 00000000..637a5dc5 --- /dev/null +++ b/frontend/src/utils/intelligence/intelligencePivot.ts @@ -0,0 +1,74 @@ +import * as cmView from "@codemirror/view"; + +import * as cmState from "@codemirror/state"; +import * as dom from "lib0/dom"; +import * as pair from "lib0/pair"; + +class IntelligencePivotWidget extends cmView.WidgetType { + selectionRange: cmState.SelectionRange | null; + + constructor(selectionRange: cmState.SelectionRange | null) { + super(); + this.selectionRange = selectionRange; + } + + toDOM() { + return dom.element("span", [ + pair.create("id", "yorkie-intelligence"), + pair.create("style", `position: relaitve;`), + ]) as HTMLElement; + } + + eq(widget: IntelligencePivotWidget) { + return widget.selectionRange === this.selectionRange; + } + + compare(widget: IntelligencePivotWidget) { + return widget.selectionRange === this.selectionRange; + } + + updateDOM() { + return false; + } + + get estimatedHeight() { + return -1; + } + + ignoreEvent() { + return true; + } +} + +export class IntelligencePivotPluginValue { + decorations: cmView.DecorationSet; + + constructor() { + this.decorations = cmState.RangeSet.of([]); + } + + update(update: cmView.ViewUpdate) { + const decorations: Array> = []; + const hasFocus = update.view.hasFocus && update.view.dom.ownerDocument.hasFocus(); + const selectionRange = hasFocus ? update.state.selection.main : null; + const isDragged = Boolean(selectionRange && selectionRange?.from !== selectionRange?.to); + + if (isDragged && selectionRange) { + decorations.push({ + from: selectionRange.from, + to: selectionRange.from, + value: cmView.Decoration.widget({ + side: 1, // the local cursor should be rendered outside the remote selection + block: false, + widget: new IntelligencePivotWidget(selectionRange), + }), + }); + } + + this.decorations = cmView.Decoration.set(decorations, true); + } +} + +export const intelligencePivot = cmView.ViewPlugin.fromClass(IntelligencePivotPluginValue, { + decorations: (v) => v.decorations, +}); From e13fecb58834f533b4ea389ff9fc39cf1fab9d27 Mon Sep 17 00:00:00 2001 From: devleejb Date: Tue, 30 Jan 2024 18:40:03 +0900 Subject: [PATCH 02/22] Update yorkie --- frontend/package-lock.json | 516 ++++++++++++------------ frontend/package.json | 2 +- frontend/src/hooks/useYorkieDocument.ts | 2 + 3 files changed, 261 insertions(+), 259 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 7f0dd7a6..ae3868b8 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -46,7 +46,7 @@ "react-social-login-buttons": "^3.9.1", "react-use": "^17.5.0", "redux-persist": "^6.0.0", - "yorkie-js-sdk": "^0.4.13" + "yorkie-js-sdk": "^0.4.15-rc" }, "devDependencies": { "@types/color": "^3.0.6", @@ -114,9 +114,9 @@ } }, "node_modules/@babel/core": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", - "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", + "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", @@ -124,11 +124,11 @@ "@babel/generator": "^7.23.6", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.7", - "@babel/parser": "^7.23.6", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6", + "@babel/helpers": "^7.23.9", + "@babel/parser": "^7.23.9", + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -321,14 +321,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", - "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", + "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", "dev": true, "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6" + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9" }, "engines": { "node": ">=6.9.0" @@ -348,9 +348,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", + "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -390,9 +390,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", - "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", + "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -401,23 +401,23 @@ } }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", + "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", - "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", + "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.23.5", @@ -426,8 +426,8 @@ "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.6", - "@babel/types": "^7.23.6", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -436,9 +436,9 @@ } }, "node_modules/@babel/types": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", - "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", + "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", "dependencies": { "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", @@ -489,9 +489,9 @@ } }, "node_modules/@codemirror/lang-html": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.7.tgz", - "integrity": "sha512-y9hWSSO41XlcL4uYwWyk0lEgTHcelWWfRuqmvcAmxfCs0HNWZdriWo/EU43S63SxEZpc1Hd50Itw7ktfQvfkUg==", + "version": "6.4.8", + "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.8.tgz", + "integrity": "sha512-tE2YK7wDlb9ZpAH6mpTPiYm6rhfdQKVDa5r9IwIFlwwgvVaKsCfuKKZoJGWsmMZIf3FQAuJ5CHMPLymOtg1hXw==", "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/lang-css": "^6.0.0", @@ -571,9 +571,9 @@ "integrity": "sha512-hm8XshYj5Fo30Bb922QX9hXB/bxOAVH+qaqHBzw5TKa72vOeslyGwd4X8M0c1dJ9JqxlaMceOQ8RsL9tC7gU0A==" }, "node_modules/@codemirror/view": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.23.0.tgz", - "integrity": "sha512-/51px9N4uW8NpuWkyUX+iam5+PM6io2fm+QmRnzwqBy5v/pwGg9T0kILFtYeum8hjuvENtgsGNKluOfqIICmeQ==", + "version": "6.23.1", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.23.1.tgz", + "integrity": "sha512-J2Xnn5lFYT1ZN/5ewEoMBCmLlL71lZ3mBdb7cUEuHhX2ESoSrNEucpsDXpX22EuTGm9LOgC9v4Z0wx+Ez8QmGA==", "dependencies": { "@codemirror/state": "^6.4.0", "style-mod": "^4.1.0", @@ -714,9 +714,9 @@ "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz", - "integrity": "sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", "cpu": [ "ppc64" ], @@ -730,9 +730,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.11.tgz", - "integrity": "sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", "cpu": [ "arm" ], @@ -746,9 +746,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz", - "integrity": "sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", "cpu": [ "arm64" ], @@ -762,9 +762,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.11.tgz", - "integrity": "sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", "cpu": [ "x64" ], @@ -778,9 +778,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz", - "integrity": "sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", "cpu": [ "arm64" ], @@ -794,9 +794,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz", - "integrity": "sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", "cpu": [ "x64" ], @@ -810,9 +810,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz", - "integrity": "sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", "cpu": [ "arm64" ], @@ -826,9 +826,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz", - "integrity": "sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", "cpu": [ "x64" ], @@ -842,9 +842,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz", - "integrity": "sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", "cpu": [ "arm" ], @@ -858,9 +858,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz", - "integrity": "sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", "cpu": [ "arm64" ], @@ -874,9 +874,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz", - "integrity": "sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", "cpu": [ "ia32" ], @@ -890,9 +890,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz", - "integrity": "sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", "cpu": [ "loong64" ], @@ -906,9 +906,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz", - "integrity": "sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", "cpu": [ "mips64el" ], @@ -922,9 +922,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz", - "integrity": "sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", "cpu": [ "ppc64" ], @@ -938,9 +938,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz", - "integrity": "sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", "cpu": [ "riscv64" ], @@ -954,9 +954,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz", - "integrity": "sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", "cpu": [ "s390x" ], @@ -970,9 +970,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz", - "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", "cpu": [ "x64" ], @@ -986,9 +986,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz", - "integrity": "sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", "cpu": [ "x64" ], @@ -1002,9 +1002,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz", - "integrity": "sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", "cpu": [ "x64" ], @@ -1018,9 +1018,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz", - "integrity": "sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", "cpu": [ "x64" ], @@ -1034,9 +1034,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz", - "integrity": "sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", "cpu": [ "arm64" ], @@ -1050,9 +1050,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz", - "integrity": "sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", "cpu": [ "ia32" ], @@ -1066,9 +1066,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz", - "integrity": "sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", "cpu": [ "x64" ], @@ -1175,28 +1175,28 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.3.tgz", - "integrity": "sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", + "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", "dependencies": { - "@floating-ui/utils": "^0.2.0" + "@floating-ui/utils": "^0.2.1" } }, "node_modules/@floating-ui/dom": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.4.tgz", - "integrity": "sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.1.tgz", + "integrity": "sha512-iA8qE43/H5iGozC3W0YSnVSW42Vh522yyM1gj+BqRwVsTNOyr231PsXDaV04yT39PsO0QL2QpbI/M0ZaLUQgRQ==", "dependencies": { - "@floating-ui/core": "^1.5.3", - "@floating-ui/utils": "^0.2.0" + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.1" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.6.tgz", - "integrity": "sha512-IB8aCRFxr8nFkdYZgH+Otd9EVQPJoynxeFRGTB8voPoZMRWo8XjYuCRgpI1btvuKY69XMiLnW+ym7zoBHM90Rw==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz", + "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==", "dependencies": { - "@floating-ui/dom": "^1.5.4" + "@floating-ui/dom": "^1.6.1" }, "peerDependencies": { "react": ">=16.8.0", @@ -1376,14 +1376,14 @@ } }, "node_modules/@mui/base": { - "version": "5.0.0-beta.32", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.32.tgz", - "integrity": "sha512-4VptvYeLUYMJhZapWBkD50GmKfOc0XT381KJcTK3ncZYIl8MdBhpR6l8jOyeP5cixUPBJhstjrnmQEAHjCLriw==", + "version": "5.0.0-beta.33", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.33.tgz", + "integrity": "sha512-WcSpoJUw/UYHXpvgtl4HyMar2Ar97illUpqiS/X1gtSBp6sdDW6kB2BJ9OlVQ+Kk/RL2GDp/WHA9sbjAYV35ow==", "dependencies": { "@babel/runtime": "^7.23.8", - "@floating-ui/react-dom": "^2.0.5", + "@floating-ui/react-dom": "^2.0.6", "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.5", + "@mui/utils": "^5.15.6", "@popperjs/core": "^2.11.8", "clsx": "^2.1.0", "prop-types": "^15.8.1" @@ -1407,18 +1407,18 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.15.5", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.5.tgz", - "integrity": "sha512-VhT8klyXy8GrWrARqLMoM6Nzz809Jc3Wn5wd7WOZfre2vFO1rBV1dBANAPBhBqpaQI0HCMRTWEYoSyOFgRnz4A==", + "version": "5.15.6", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.6.tgz", + "integrity": "sha512-0aoWS4qvk1uzm9JBs83oQmIMIQeTBUeqqu8u+3uo2tMznrB5fIKqQVCbCgq+4Tm4jG+5F7dIvnjvQ2aV7UKtdw==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui-org" } }, "node_modules/@mui/icons-material": { - "version": "5.15.5", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.5.tgz", - "integrity": "sha512-qiql0fd1JY7TZ1wm1RldvU7sL8QUatE9OC12i/qm5rnm/caTFyAfOyTIR7qqxorsJvoZGyrzwoMkal6Ij9kM0A==", + "version": "5.15.6", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.6.tgz", + "integrity": "sha512-GnkxMtlhs+8ieHLmCytg00ew0vMOiXGFCw8Ra9nxMsBjBqnrOI5gmXqUm+sGggeEU/HG8HyeqC1MX/IxOBJHzA==", "dependencies": { "@babel/runtime": "^7.23.8" }, @@ -1441,16 +1441,16 @@ } }, "node_modules/@mui/material": { - "version": "5.15.5", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.5.tgz", - "integrity": "sha512-2KfA39f/UWeQl0O22UJs3x1nG3chYlyu9wnux5vTnxUTLzkgYIzQIHaH+ZOGpv5JiZBMKktAPNfhqyhSaQ49qQ==", + "version": "5.15.6", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.6.tgz", + "integrity": "sha512-rw7bDdpi2kzfmcDN78lHp8swArJ5sBCKsn+4G3IpGfu44ycyWAWX0VdlvkjcR9Yrws2KIm7c+8niXpWHUDbWoA==", "dependencies": { "@babel/runtime": "^7.23.8", - "@mui/base": "5.0.0-beta.32", - "@mui/core-downloads-tracker": "^5.15.5", - "@mui/system": "^5.15.5", + "@mui/base": "5.0.0-beta.33", + "@mui/core-downloads-tracker": "^5.15.6", + "@mui/system": "^5.15.6", "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.5", + "@mui/utils": "^5.15.6", "@types/react-transition-group": "^4.4.10", "clsx": "^2.1.0", "csstype": "^3.1.2", @@ -1485,12 +1485,12 @@ } }, "node_modules/@mui/private-theming": { - "version": "5.15.5", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.5.tgz", - "integrity": "sha512-HU1KCyGNcJFsUamTbOM539ZDZJNI/XU7sZFdsN29glktUf+T6hNvDuO2ISinBiLTZy7Ab3R6DSSoYXRrLc4uwQ==", + "version": "5.15.6", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.6.tgz", + "integrity": "sha512-ZBX9E6VNUSscUOtU8uU462VvpvBS7eFl5VfxAzTRVQBHflzL+5KtnGrebgf6Nd6cdvxa1o0OomiaxSKoN2XDmg==", "dependencies": { "@babel/runtime": "^7.23.8", - "@mui/utils": "^5.15.5", + "@mui/utils": "^5.15.6", "prop-types": "^15.8.1" }, "engines": { @@ -1511,9 +1511,9 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.15.5", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.5.tgz", - "integrity": "sha512-xoMUd8h270thNL7ZsOzmlluIAMsQg/HT7SCdRjPBVle+XHgTKaiWiRy1ekDOsrrF0rhjME3T7xeeUq2G269UUw==", + "version": "5.15.6", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.6.tgz", + "integrity": "sha512-KAn8P8xP/WigFKMlEYUpU9z2o7jJnv0BG28Qu1dhNQVutsLVIFdRf5Nb+0ijp2qgtcmygQ0FtfRuXv5LYetZTg==", "dependencies": { "@babel/runtime": "^7.23.8", "@emotion/cache": "^11.11.0", @@ -1542,15 +1542,15 @@ } }, "node_modules/@mui/system": { - "version": "5.15.5", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.5.tgz", - "integrity": "sha512-DMv2vGjUKaDt/m0RlzvLjpKiS5V0LoBhiMUHf5pWdj6uoNlN4FuKUe4pFeYmQMIO5DnVZKybmpPepfkdfEH+Og==", + "version": "5.15.6", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.6.tgz", + "integrity": "sha512-J01D//u8IfXvaEHMBQX5aO2l7Q+P15nt96c4NskX7yp5/+UuZP8XCQJhtBtLuj+M2LLyXHYGmCPeblsmmscP2Q==", "dependencies": { "@babel/runtime": "^7.23.8", - "@mui/private-theming": "^5.15.5", - "@mui/styled-engine": "^5.15.5", + "@mui/private-theming": "^5.15.6", + "@mui/styled-engine": "^5.15.6", "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.5", + "@mui/utils": "^5.15.6", "clsx": "^2.1.0", "csstype": "^3.1.2", "prop-types": "^15.8.1" @@ -1594,9 +1594,9 @@ } }, "node_modules/@mui/utils": { - "version": "5.15.5", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.5.tgz", - "integrity": "sha512-jEywgaMGZWPSlVFO7ZZAyXxNeLmq5XBp5At9Ne/sGohRJdesUcdxvyi8TP3odJxwQuL5L6PJV+JQ4DyIDM849A==", + "version": "5.15.6", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.6.tgz", + "integrity": "sha512-qfEhf+zfU9aQdbzo1qrSWlbPQhH1nCgeYgwhOVnj9Bn39shJQitEnXpSQpSNag8+uty5Od6PxmlNKPTnPySRKA==", "dependencies": { "@babel/runtime": "^7.23.8", "@types/prop-types": "^15.7.11", @@ -1621,9 +1621,9 @@ } }, "node_modules/@mui/x-date-pickers": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-6.19.0.tgz", - "integrity": "sha512-/GccT+iFJTKjI6b9b0MWojyRKnizL/VYYAfPnR1q0wSVVXjYv7a1NK0uQlan4JbnovqoQCNVeTOCy/0bUJyD2Q==", + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-6.19.2.tgz", + "integrity": "sha512-/bdWZabexuz+1rKG15XryxiMGb5D0XVx65NU7CZYKm/1+HuUzc0FX9smKEa/YVZnLSNsAp6SULIyPZtAKE+3AA==", "dependencies": { "@babel/runtime": "^7.23.2", "@mui/base": "^5.0.0-beta.22", @@ -1781,12 +1781,12 @@ } }, "node_modules/@reduxjs/toolkit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.0.1.tgz", - "integrity": "sha512-fxIjrR9934cmS8YXIGd9e7s1XRsEU++aFc9DVNMFMRTM5Vtsg2DCRMj21eslGtDt43IUf9bJL3h5bwUlZleibA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.1.0.tgz", + "integrity": "sha512-nfJ/b4ZhzUevQ1ZPKjlDL6CMYxO4o7ZL7OSsvSOxzT/EN11LsBDgTqP7aedHtBrFSVoK7oTP1SbMWUwGb30NLg==", "dependencies": { "immer": "^10.0.3", - "redux": "^5.0.0", + "redux": "^5.0.1", "redux-thunk": "^3.1.0", "reselect": "^5.0.1" }, @@ -2219,16 +2219,16 @@ "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.19.0.tgz", - "integrity": "sha512-DUCUkQNklCQYnrBSSikjVChdc84/vMPDQSgJTHBZ64G9bA9w0Crc0rd2diujKbTdp6w2J47qkeHQLoi0rpLCdg==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.20.0.tgz", + "integrity": "sha512-fTwGQUnjhoYHeSF6m5pWNkzmDDdsKELYrOBxhjMrofPqCkoC2k3B2wvGHFxa1CTIqkEn88nlW1HVMztjo2K8Hg==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.19.0", - "@typescript-eslint/type-utils": "6.19.0", - "@typescript-eslint/utils": "6.19.0", - "@typescript-eslint/visitor-keys": "6.19.0", + "@typescript-eslint/scope-manager": "6.20.0", + "@typescript-eslint/type-utils": "6.20.0", + "@typescript-eslint/utils": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -2254,15 +2254,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.19.0.tgz", - "integrity": "sha512-1DyBLG5SH7PYCd00QlroiW60YJ4rWMuUGa/JBV0iZuqi4l4IK3twKPq5ZkEebmGqRjXWVgsUzfd3+nZveewgow==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.20.0.tgz", + "integrity": "sha512-bYerPDF/H5v6V76MdMYhjwmwgMA+jlPVqjSDq2cRqMi8bP5sR3Z+RLOiOMad3nsnmDVmn2gAFCyNgh/dIrfP/w==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.19.0", - "@typescript-eslint/types": "6.19.0", - "@typescript-eslint/typescript-estree": "6.19.0", - "@typescript-eslint/visitor-keys": "6.19.0", + "@typescript-eslint/scope-manager": "6.20.0", + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/typescript-estree": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0", "debug": "^4.3.4" }, "engines": { @@ -2282,13 +2282,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.0.tgz", - "integrity": "sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.20.0.tgz", + "integrity": "sha512-p4rvHQRDTI1tGGMDFQm+GtxP1ZHyAh64WANVoyEcNMpaTFn3ox/3CcgtIlELnRfKzSs/DwYlDccJEtr3O6qBvA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.19.0", - "@typescript-eslint/visitor-keys": "6.19.0" + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -2299,13 +2299,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.19.0.tgz", - "integrity": "sha512-mcvS6WSWbjiSxKCwBcXtOM5pRkPQ6kcDds/juxcy/727IQr3xMEcwr/YLHW2A2+Fp5ql6khjbKBzOyjuPqGi/w==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.20.0.tgz", + "integrity": "sha512-qnSobiJQb1F5JjN0YDRPHruQTrX7ICsmltXhkV536mp4idGAYrIyr47zF/JmkJtEcAVnIz4gUYJ7gOZa6SmN4g==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.19.0", - "@typescript-eslint/utils": "6.19.0", + "@typescript-eslint/typescript-estree": "6.20.0", + "@typescript-eslint/utils": "6.20.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -2326,9 +2326,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.0.tgz", - "integrity": "sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.20.0.tgz", + "integrity": "sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -2339,13 +2339,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.0.tgz", - "integrity": "sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.20.0.tgz", + "integrity": "sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.19.0", - "@typescript-eslint/visitor-keys": "6.19.0", + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2367,17 +2367,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.19.0.tgz", - "integrity": "sha512-QR41YXySiuN++/dC9UArYOg4X86OAYP83OWTewpVx5ct1IZhjjgTLocj7QNxGhWoTqknsgpl7L+hGygCO+sdYw==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.20.0.tgz", + "integrity": "sha512-/EKuw+kRu2vAqCoDwDCBtDRU6CTKbUmwwI7SH7AashZ+W+7o8eiyy6V2cdOqN49KsTcASWsC5QeghYuRDTyOOg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.19.0", - "@typescript-eslint/types": "6.19.0", - "@typescript-eslint/typescript-estree": "6.19.0", + "@typescript-eslint/scope-manager": "6.20.0", + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/typescript-estree": "6.20.0", "semver": "^7.5.4" }, "engines": { @@ -2392,12 +2392,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.0.tgz", - "integrity": "sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.20.0.tgz", + "integrity": "sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/types": "6.20.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -2575,9 +2575,9 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/axios": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", - "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", + "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", "dependencies": { "follow-redirects": "^1.15.4", "form-data": "^4.0.0", @@ -2649,9 +2649,9 @@ } }, "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "version": "4.22.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", + "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", "dev": true, "funding": [ { @@ -2668,8 +2668,8 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", + "caniuse-lite": "^1.0.30001580", + "electron-to-chromium": "^1.4.648", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, @@ -2689,9 +2689,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001579", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz", - "integrity": "sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==", + "version": "1.0.30001581", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001581.tgz", + "integrity": "sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ==", "dev": true, "funding": [ { @@ -3118,9 +3118,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.640", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.640.tgz", - "integrity": "sha512-z/6oZ/Muqk4BaE7P69bXhUhpJbUM9ZJeka43ZwxsDshKtePns4mhBlh8bU5+yrnOnz3fhG82XLzGUXazOmsWnA==", + "version": "1.4.650", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.650.tgz", + "integrity": "sha512-sYSQhJCJa4aGA1wYol5cMQgekDBlbVfTRavlGZVr3WZpDdOPcp6a6xUnFfrt8TqZhsBYYbDxJZCjGfHuGupCRQ==", "dev": true }, "node_modules/entities": { @@ -3151,9 +3151,9 @@ } }, "node_modules/esbuild": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", - "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", "dev": true, "hasInstallScript": true, "bin": { @@ -3163,29 +3163,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.11", - "@esbuild/android-arm": "0.19.11", - "@esbuild/android-arm64": "0.19.11", - "@esbuild/android-x64": "0.19.11", - "@esbuild/darwin-arm64": "0.19.11", - "@esbuild/darwin-x64": "0.19.11", - "@esbuild/freebsd-arm64": "0.19.11", - "@esbuild/freebsd-x64": "0.19.11", - "@esbuild/linux-arm": "0.19.11", - "@esbuild/linux-arm64": "0.19.11", - "@esbuild/linux-ia32": "0.19.11", - "@esbuild/linux-loong64": "0.19.11", - "@esbuild/linux-mips64el": "0.19.11", - "@esbuild/linux-ppc64": "0.19.11", - "@esbuild/linux-riscv64": "0.19.11", - "@esbuild/linux-s390x": "0.19.11", - "@esbuild/linux-x64": "0.19.11", - "@esbuild/netbsd-x64": "0.19.11", - "@esbuild/openbsd-x64": "0.19.11", - "@esbuild/sunos-x64": "0.19.11", - "@esbuild/win32-arm64": "0.19.11", - "@esbuild/win32-ia32": "0.19.11", - "@esbuild/win32-x64": "0.19.11" + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" } }, "node_modules/escalade": { @@ -3587,9 +3587,9 @@ "integrity": "sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==" }, "node_modules/fastq": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", - "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz", + "integrity": "sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -5190,9 +5190,9 @@ } }, "node_modules/micromark-util-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", - "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "funding": [ { "type": "GitHub Sponsors", @@ -5914,9 +5914,9 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/property-information": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.4.0.tgz", - "integrity": "sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.4.1.tgz", + "integrity": "sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -7254,9 +7254,9 @@ } }, "node_modules/yorkie-js-sdk": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/yorkie-js-sdk/-/yorkie-js-sdk-0.4.13.tgz", - "integrity": "sha512-6Im/SRxJoGcUOf5nHIQDDZnKbLBDUgD66xZxcrAXvZS4KblQnRU54/MdloIF9BzNJlJGwWSk9KjgYwLY73nntg==", + "version": "0.4.15-rc", + "resolved": "https://registry.npmjs.org/yorkie-js-sdk/-/yorkie-js-sdk-0.4.15-rc.tgz", + "integrity": "sha512-phH4zcT7qr908dclFtgs57fPT7F5sBdEtc+5VGL6kAEUOsIONtz/cPLsJCE2+RkGgCFQ8iCevhl9rr1dxE9kWA==", "dependencies": { "@types/google-protobuf": "^3.15.5", "@types/long": "^4.0.1", diff --git a/frontend/package.json b/frontend/package.json index c7a9668b..1c4a1e71 100755 --- a/frontend/package.json +++ b/frontend/package.json @@ -50,7 +50,7 @@ "react-social-login-buttons": "^3.9.1", "react-use": "^17.5.0", "redux-persist": "^6.0.0", - "yorkie-js-sdk": "^0.4.13" + "yorkie-js-sdk": "^0.4.15-rc" }, "devDependencies": { "@types/color": "^3.0.6", diff --git a/frontend/src/hooks/useYorkieDocument.ts b/frontend/src/hooks/useYorkieDocument.ts index d15ffecb..ae3e80b6 100644 --- a/frontend/src/hooks/useYorkieDocument.ts +++ b/frontend/src/hooks/useYorkieDocument.ts @@ -7,6 +7,8 @@ import { useSearchParams } from "react-router-dom"; import { useSelector } from "react-redux"; import { selectAuth } from "../store/authSlice"; +yorkie.setLogLevel(4); + export const useYorkieDocument = ( yorkieDocuentId?: string | null, presenceName?: string | null From 005f42b5ade27abc4f49733f4c13c0a160741602 Mon Sep 17 00:00:00 2001 From: JongBeom Lee Date: Wed, 31 Jan 2024 15:07:49 +0900 Subject: [PATCH 03/22] Add yorkie intelligence footer --- .../components/editor/YorkieIntelligence.tsx | 82 +++++++++++-------- .../editor/YorkieIntelligenceFooter.tsx | 24 ++++++ frontend/src/constants/intelligence.ts | 2 + .../utils/intelligence/intelligencePivot.ts | 19 ++++- 4 files changed, 91 insertions(+), 36 deletions(-) create mode 100644 frontend/src/components/editor/YorkieIntelligenceFooter.tsx create mode 100644 frontend/src/constants/intelligence.ts diff --git a/frontend/src/components/editor/YorkieIntelligence.tsx b/frontend/src/components/editor/YorkieIntelligence.tsx index 915e990a..a0d477db 100644 --- a/frontend/src/components/editor/YorkieIntelligence.tsx +++ b/frontend/src/components/editor/YorkieIntelligence.tsx @@ -2,60 +2,76 @@ import { Card, CardActionArea, Fade, Stack, Typography, useTheme } from "@mui/ma import { useEffect, useState } from "react"; import { createPortal } from "react-dom"; import { useDebounce } from "react-use"; +import { INTELLIGENCE_FOOTER_ID, INTELLIGENCE_HEADER_ID } from "../../constants/intelligence"; +import YorkieIntelligenceFooter from "./YorkieIntelligenceFooter"; function YorkieIntelligence() { const theme = useTheme(); + const [footerOpen, setFooterOpen] = useState(false); const [draggedContents, setDraggedContents] = useState(""); - const [intelligencePivot, setIntelligencePivot] = useState(null); + const [intelligenceHeaderPivot, setIntelligenceHeaderPivot] = useState(null); + const [intelligenceFooterPivot, setIntelligenceFooterPivot] = useState(null); const [debouncedPivot, setDebouncedPivot] = useState(null); useDebounce( () => { - setDebouncedPivot(intelligencePivot); + setDebouncedPivot(intelligenceHeaderPivot); }, 500, - [intelligencePivot] + [intelligenceHeaderPivot] ); useEffect(() => { document.addEventListener("selectionchange", function () { - const intelligencePivot = document.querySelector("#yorkie-intelligence"); - setIntelligencePivot(intelligencePivot); + const intelligenceHeaderPivot = document.getElementById(INTELLIGENCE_HEADER_ID); + const intelligenceFooterPivot = document.getElementById(INTELLIGENCE_FOOTER_ID); + setIntelligenceHeaderPivot(intelligenceHeaderPivot); + setIntelligenceFooterPivot(intelligenceFooterPivot); + setFooterOpen(false); - if (intelligencePivot) { + if (intelligenceHeaderPivot) { const selection = window.getSelection(); setDraggedContents(selection!.toString()); } }); }, []); - if (!debouncedPivot) return; - - return createPortal( - - - - - - Yorkie Intelligence - - - - , - debouncedPivot + const handleFooterOpen = () => { + setFooterOpen((prev) => !prev); + }; + + if (!debouncedPivot || !intelligenceFooterPivot) return; + + return ( + <> + {createPortal( + + + + + + Yorkie Intelligence + + + + , + debouncedPivot + )} + {footerOpen && createPortal(, intelligenceFooterPivot)} + ); } diff --git a/frontend/src/components/editor/YorkieIntelligenceFooter.tsx b/frontend/src/components/editor/YorkieIntelligenceFooter.tsx new file mode 100644 index 00000000..f9f7fa13 --- /dev/null +++ b/frontend/src/components/editor/YorkieIntelligenceFooter.tsx @@ -0,0 +1,24 @@ +import { Card, Fade, useTheme } from "@mui/material"; + +function YorkieIntelligenceFooter() { + const theme = useTheme(); + + return ( + + + + + + ); +} + +export default YorkieIntelligenceFooter; diff --git a/frontend/src/constants/intelligence.ts b/frontend/src/constants/intelligence.ts new file mode 100644 index 00000000..c73c0b97 --- /dev/null +++ b/frontend/src/constants/intelligence.ts @@ -0,0 +1,2 @@ +export const INTELLIGENCE_HEADER_ID = "yorkie-intelligence-header"; +export const INTELLIGENCE_FOOTER_ID = "yorkie-intelligence-footer"; diff --git a/frontend/src/utils/intelligence/intelligencePivot.ts b/frontend/src/utils/intelligence/intelligencePivot.ts index 637a5dc5..1623709b 100644 --- a/frontend/src/utils/intelligence/intelligencePivot.ts +++ b/frontend/src/utils/intelligence/intelligencePivot.ts @@ -3,18 +3,21 @@ import * as cmView from "@codemirror/view"; import * as cmState from "@codemirror/state"; import * as dom from "lib0/dom"; import * as pair from "lib0/pair"; +import { INTELLIGENCE_FOOTER_ID, INTELLIGENCE_HEADER_ID } from "../../constants/intelligence"; class IntelligencePivotWidget extends cmView.WidgetType { + id: string; selectionRange: cmState.SelectionRange | null; - constructor(selectionRange: cmState.SelectionRange | null) { + constructor(id: string, selectionRange: cmState.SelectionRange | null) { super(); + this.id = id; this.selectionRange = selectionRange; } toDOM() { return dom.element("span", [ - pair.create("id", "yorkie-intelligence"), + pair.create("id", this.id), pair.create("style", `position: relaitve;`), ]) as HTMLElement; } @@ -60,7 +63,17 @@ export class IntelligencePivotPluginValue { value: cmView.Decoration.widget({ side: 1, // the local cursor should be rendered outside the remote selection block: false, - widget: new IntelligencePivotWidget(selectionRange), + widget: new IntelligencePivotWidget(INTELLIGENCE_HEADER_ID, selectionRange), + }), + }); + + decorations.push({ + from: selectionRange.to, + to: selectionRange.to, + value: cmView.Decoration.widget({ + side: 1, // the local cursor should be rendered outside the remote selection + block: false, + widget: new IntelligencePivotWidget(INTELLIGENCE_FOOTER_ID, selectionRange), }), }); } From 52b32ef4b910272eddbb7f2d4515264a9854cb20 Mon Sep 17 00:00:00 2001 From: JongBeom Lee Date: Wed, 31 Jan 2024 17:27:46 +0900 Subject: [PATCH 04/22] Add intelligence feature calling --- frontend/package-lock.json | 15 +++ frontend/package.json | 1 + .../components/editor/YorkieIntelligence.tsx | 13 +-- .../editor/YorkieIntelligenceFeature.tsx | 97 +++++++++++++++++++ .../editor/YorkieIntelligenceFeatureList.tsx | 60 ++++++++++++ .../editor/YorkieIntelligenceFooter.tsx | 28 +++++- frontend/src/constants/intelligence.ts | 5 + frontend/src/hooks/api/intelligence.ts | 66 +++++++++++++ .../utils/intelligence/intelligencePivot.ts | 27 ++++-- 9 files changed, 293 insertions(+), 19 deletions(-) create mode 100644 frontend/src/components/editor/YorkieIntelligenceFeature.tsx create mode 100644 frontend/src/components/editor/YorkieIntelligenceFeatureList.tsx create mode 100644 frontend/src/hooks/api/intelligence.ts diff --git a/frontend/package-lock.json b/frontend/package-lock.json index ae3868b8..9d25692e 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -32,6 +32,7 @@ "codemirror-toolbar": "^0.0.3", "color": "^4.2.3", "lib0": "^0.2.88", + "match-sorter": "^6.3.3", "moment": "^2.30.1", "notistack": "^2.0.8", "randomcolor": "^0.6.2", @@ -4621,6 +4622,15 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/match-sorter": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.3.tgz", + "integrity": "sha512-sgiXxrRijEe0SzHKGX4HouCpfHRPnqteH42UdMEW7BlWy990ZkzcvonJGv4Uu9WE7Y1f8Yocm91+4qFPCbmNww==", + "dependencies": { + "@babel/runtime": "^7.23.8", + "remove-accents": "0.5.0" + } + }, "node_modules/mdast-util-find-and-replace": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", @@ -6432,6 +6442,11 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/remove-accents": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz", + "integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==" + }, "node_modules/reselect": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 1c4a1e71..9f13f061 100755 --- a/frontend/package.json +++ b/frontend/package.json @@ -36,6 +36,7 @@ "codemirror-toolbar": "^0.0.3", "color": "^4.2.3", "lib0": "^0.2.88", + "match-sorter": "^6.3.3", "moment": "^2.30.1", "notistack": "^2.0.8", "randomcolor": "^0.6.2", diff --git a/frontend/src/components/editor/YorkieIntelligence.tsx b/frontend/src/components/editor/YorkieIntelligence.tsx index a0d477db..c70cb310 100644 --- a/frontend/src/components/editor/YorkieIntelligence.tsx +++ b/frontend/src/components/editor/YorkieIntelligence.tsx @@ -8,7 +8,6 @@ import YorkieIntelligenceFooter from "./YorkieIntelligenceFooter"; function YorkieIntelligence() { const theme = useTheme(); const [footerOpen, setFooterOpen] = useState(false); - const [draggedContents, setDraggedContents] = useState(""); const [intelligenceHeaderPivot, setIntelligenceHeaderPivot] = useState(null); const [intelligenceFooterPivot, setIntelligenceFooterPivot] = useState(null); const [debouncedPivot, setDebouncedPivot] = useState(null); @@ -27,11 +26,9 @@ function YorkieIntelligence() { const intelligenceFooterPivot = document.getElementById(INTELLIGENCE_FOOTER_ID); setIntelligenceHeaderPivot(intelligenceHeaderPivot); setIntelligenceFooterPivot(intelligenceFooterPivot); - setFooterOpen(false); - if (intelligenceHeaderPivot) { - const selection = window.getSelection(); - setDraggedContents(selection!.toString()); + if (!intelligenceHeaderPivot) { + setFooterOpen(false); } }); }, []); @@ -70,7 +67,11 @@ function YorkieIntelligence() { , debouncedPivot )} - {footerOpen && createPortal(, intelligenceFooterPivot)} + {footerOpen && + createPortal( + , + intelligenceFooterPivot + )} ); } diff --git a/frontend/src/components/editor/YorkieIntelligenceFeature.tsx b/frontend/src/components/editor/YorkieIntelligenceFeature.tsx new file mode 100644 index 00000000..c1848817 --- /dev/null +++ b/frontend/src/components/editor/YorkieIntelligenceFeature.tsx @@ -0,0 +1,97 @@ +import { + Box, + Button, + CircularProgress, + FormControl, + IconButton, + InputAdornment, + Stack, + Typography, + useTheme, +} from "@mui/material"; +import { INTELLIGENCE_FOOTER_ID, IntelligenceFeature } from "../../constants/intelligence"; +import ContentCopyIcon from "@mui/icons-material/ContentCopy"; +import RefreshIcon from "@mui/icons-material/Refresh"; +import { FormContainer, TextFieldElement } from "react-hook-form-mui"; +import SendIcon from "@mui/icons-material/Send"; +import { useIntelligenceFeatureStream } from "../../hooks/api/intelligence"; +import { useEffect, useState } from "react"; + +interface YorkieIntelligenceFeatureProps { + title: string; + feature: IntelligenceFeature; +} + +function YorkieIntelligenceFeature(props: YorkieIntelligenceFeatureProps) { + const { title, feature } = props; + const theme = useTheme(); + const { data, memoryKey, isLoading, mutateAsync } = useIntelligenceFeatureStream(feature); + const [content, setContent] = useState(""); + const intelligenceFooterPivot = document.getElementById(INTELLIGENCE_FOOTER_ID); + + useEffect(() => { + setContent(intelligenceFooterPivot?.getAttribute("content") ?? ""); + }, [intelligenceFooterPivot]); + + useEffect(() => { + if (!content) return; + + mutateAsync(content); + }, [content, mutateAsync]); + + return ( + + + {title} + + {isLoading && } + {!isLoading && {data}} + + + + + + + + + + + + + + ), + endAdornment: ( + + + + + + ), + }} + /> + + + + + + ); +} + +export default YorkieIntelligenceFeature; diff --git a/frontend/src/components/editor/YorkieIntelligenceFeatureList.tsx b/frontend/src/components/editor/YorkieIntelligenceFeatureList.tsx new file mode 100644 index 00000000..98e97a7d --- /dev/null +++ b/frontend/src/components/editor/YorkieIntelligenceFeatureList.tsx @@ -0,0 +1,60 @@ +import { ListItemIcon, ListItemText, MenuItem, MenuList, Stack, TextField } from "@mui/material"; +import { useMemo, useState } from "react"; +import GitHubIcon from "@mui/icons-material/GitHub"; +import { matchSorter } from "match-sorter"; +import { IntelligenceFeature } from "../../constants/intelligence"; + +const featureInfoList = [ + { + title: "Write GitHub Issue", + icon: , + feature: IntelligenceFeature.GITHUB_ISSUE, + }, + { + title: "Write GitHub Pull Request", + icon: , + feature: IntelligenceFeature.GITHUB_PR, + }, +]; + +interface YorkieIntelligenceFeatureListProps { + onSelectFeature: (feature: IntelligenceFeature, title: string) => void; +} + +function YorkieIntelligenceFeatureList(props: YorkieIntelligenceFeatureListProps) { + const { onSelectFeature } = props; + const [featureText, setFeatureText] = useState(""); + const filteredFeatureInfoList = useMemo(() => { + return matchSorter(featureInfoList, featureText, { keys: ["title", "feature"] }); + }, [featureText]); + + const handleFeatureTextChange: React.ChangeEventHandler< + HTMLInputElement | HTMLTextAreaElement + > = (e) => { + setFeatureText(e.target.value); + }; + + return ( + + + + {filteredFeatureInfoList.map((featureInfo) => ( + onSelectFeature(featureInfo.feature, featureInfo.title)}> + {featureInfo.icon} + {featureInfo.title} + + ))} + + + ); +} + +export default YorkieIntelligenceFeatureList; diff --git a/frontend/src/components/editor/YorkieIntelligenceFooter.tsx b/frontend/src/components/editor/YorkieIntelligenceFooter.tsx index f9f7fa13..bcd0e428 100644 --- a/frontend/src/components/editor/YorkieIntelligenceFooter.tsx +++ b/frontend/src/components/editor/YorkieIntelligenceFooter.tsx @@ -1,21 +1,39 @@ import { Card, Fade, useTheme } from "@mui/material"; +import YorkieIntelligenceFeatureList from "./YorkieIntelligenceFeatureList"; +import { useState } from "react"; +import { IntelligenceFeature } from "../../constants/intelligence"; +import YorkieIntelligenceFeature from "./YorkieIntelligenceFeature"; function YorkieIntelligenceFooter() { - const theme = useTheme(); + const theme = useTheme(); + const [selectedTitle, setSelectedTitle] = useState(null); + const [selectedFeature, setSelectedFeature] = useState(null); + + const handleSelectFeature = (feature: IntelligenceFeature, title: string) => { + setSelectedFeature(feature); + setSelectedTitle(title); + }; return ( - + {selectedFeature && selectedTitle ? ( + + ) : ( + + )} ); diff --git a/frontend/src/constants/intelligence.ts b/frontend/src/constants/intelligence.ts index c73c0b97..8acfad22 100644 --- a/frontend/src/constants/intelligence.ts +++ b/frontend/src/constants/intelligence.ts @@ -1,2 +1,7 @@ export const INTELLIGENCE_HEADER_ID = "yorkie-intelligence-header"; export const INTELLIGENCE_FOOTER_ID = "yorkie-intelligence-footer"; + +export enum IntelligenceFeature { + GITHUB_ISSUE = "github-issue", + GITHUB_PR = "github-pr", +} \ No newline at end of file diff --git a/frontend/src/hooks/api/intelligence.ts b/frontend/src/hooks/api/intelligence.ts new file mode 100644 index 00000000..da91f0ba --- /dev/null +++ b/frontend/src/hooks/api/intelligence.ts @@ -0,0 +1,66 @@ +import { useCallback, useState } from "react"; +import { useSelector } from "react-redux"; +import { selectAuth } from "../../store/authSlice"; +import { selectDocument } from "../../store/documentSlice"; +import { IntelligenceFeature } from "../../constants/intelligence"; + +export const useIntelligenceFeatureStream = (feature: IntelligenceFeature) => { + const authStore = useSelector(selectAuth); + const documentSotre = useSelector(selectDocument); + const [data, setData] = useState(null); + const [memoryKey, setMemoryKey] = useState(null); + const [isLoading, setIsLoading] = useState(false); + + const mutateAsync = useCallback( + async (content: string) => { + setIsLoading(true); + setMemoryKey(null); + setData(null); + const response = await fetch( + `${import.meta.env.VITE_API_ADDR}/intelligence/${feature}`, + { + method: "POST", + headers: { + Authorization: `Bearer ${authStore.accessToken}`, + }, + body: JSON.stringify({ + documentId: documentSotre.data?.id, + content, + }), + } + ); + const reader = response.body?.getReader(); + let isFirst = true; + let result = ""; + + while (reader) { + const { done, value } = await reader.read(); + setIsLoading(false); + + if (done) { + break; + } + + let text = new TextDecoder().decode(value); + + if (isFirst) { + const splitted = text.split("\n"); + setMemoryKey(splitted[0]); + isFirst = false; + text = splitted.slice(1).join("\n"); + } + + result += text; + setData(result); + } + }, + [authStore.accessToken, documentSotre.data?.id, feature] + ); + + return { + data, + memoryKey, + isLoading, + mutateAsync, + }; +}; diff --git a/frontend/src/utils/intelligence/intelligencePivot.ts b/frontend/src/utils/intelligence/intelligencePivot.ts index 1623709b..e41bb893 100644 --- a/frontend/src/utils/intelligence/intelligencePivot.ts +++ b/frontend/src/utils/intelligence/intelligencePivot.ts @@ -7,17 +7,20 @@ import { INTELLIGENCE_FOOTER_ID, INTELLIGENCE_HEADER_ID } from "../../constants/ class IntelligencePivotWidget extends cmView.WidgetType { id: string; + content: string; selectionRange: cmState.SelectionRange | null; - constructor(id: string, selectionRange: cmState.SelectionRange | null) { + constructor(id: string, content: string, selectionRange: cmState.SelectionRange | null) { super(); this.id = id; + this.content = content; this.selectionRange = selectionRange; } toDOM() { return dom.element("span", [ pair.create("id", this.id), + pair.create("content", this.content), pair.create("style", `position: relaitve;`), ]) as HTMLElement; } @@ -52,18 +55,22 @@ export class IntelligencePivotPluginValue { update(update: cmView.ViewUpdate) { const decorations: Array> = []; - const hasFocus = update.view.hasFocus && update.view.dom.ownerDocument.hasFocus(); - const selectionRange = hasFocus ? update.state.selection.main : null; - const isDragged = Boolean(selectionRange && selectionRange?.from !== selectionRange?.to); + const selectionRange = update.state.selection.main; + const isDragged = selectionRange?.from !== selectionRange?.to; if (isDragged && selectionRange) { + const selectedContent = update.state.sliceDoc(selectionRange.from, selectionRange.to); decorations.push({ from: selectionRange.from, to: selectionRange.from, value: cmView.Decoration.widget({ - side: 1, // the local cursor should be rendered outside the remote selection + side: 1, block: false, - widget: new IntelligencePivotWidget(INTELLIGENCE_HEADER_ID, selectionRange), + widget: new IntelligencePivotWidget( + INTELLIGENCE_HEADER_ID, + selectedContent, + selectionRange + ), }), }); @@ -71,9 +78,13 @@ export class IntelligencePivotPluginValue { from: selectionRange.to, to: selectionRange.to, value: cmView.Decoration.widget({ - side: 1, // the local cursor should be rendered outside the remote selection + side: 1, block: false, - widget: new IntelligencePivotWidget(INTELLIGENCE_FOOTER_ID, selectionRange), + widget: new IntelligencePivotWidget( + INTELLIGENCE_FOOTER_ID, + selectedContent, + selectionRange + ), }), }); } From dba494953ab7f2b7a02593939acba8572301be1b Mon Sep 17 00:00:00 2001 From: JongBeom Lee Date: Wed, 31 Jan 2024 17:55:22 +0900 Subject: [PATCH 05/22] Remove deprecated import --- backend/src/intelligence/prompt/followup.ts | 2 +- backend/src/intelligence/prompt/github-issue.ts | 2 +- backend/src/intelligence/prompt/github-pr.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/src/intelligence/prompt/followup.ts b/backend/src/intelligence/prompt/followup.ts index b03cdcff..ffd2b276 100644 --- a/backend/src/intelligence/prompt/followup.ts +++ b/backend/src/intelligence/prompt/followup.ts @@ -1,4 +1,4 @@ -import { ChatPromptTemplate, MessagesPlaceholder } from "langchain/prompts"; +import { ChatPromptTemplate, MessagesPlaceholder } from "@langchain/core/prompts"; export const followUpPromptTemplate = ChatPromptTemplate.fromMessages([ [ diff --git a/backend/src/intelligence/prompt/github-issue.ts b/backend/src/intelligence/prompt/github-issue.ts index 76f59827..c2c193d6 100644 --- a/backend/src/intelligence/prompt/github-issue.ts +++ b/backend/src/intelligence/prompt/github-issue.ts @@ -1,4 +1,4 @@ -import { ChatPromptTemplate, FewShotChatMessagePromptTemplate } from "langchain/prompts"; +import { ChatPromptTemplate, FewShotChatMessagePromptTemplate } from "@langchain/core/prompts"; const examplePrompt = ChatPromptTemplate.fromTemplate( "## Title\n{title}\n## Issue Type\n{issueType}\n## Content\n{content}" diff --git a/backend/src/intelligence/prompt/github-pr.ts b/backend/src/intelligence/prompt/github-pr.ts index 66443aed..5856015c 100644 --- a/backend/src/intelligence/prompt/github-pr.ts +++ b/backend/src/intelligence/prompt/github-pr.ts @@ -1,4 +1,4 @@ -import { ChatPromptTemplate, FewShotChatMessagePromptTemplate } from "langchain/prompts"; +import { ChatPromptTemplate, FewShotChatMessagePromptTemplate } from "@langchain/core/prompts"; const examplePrompt = ChatPromptTemplate.fromTemplate("## Title\n{title}\n## Content\n{content}"); From 8ff282327b14ec29e992e8d8e8f8d08148dea297 Mon Sep 17 00:00:00 2001 From: JongBeom Lee Date: Wed, 31 Jan 2024 17:55:54 +0900 Subject: [PATCH 06/22] Add followup request --- .../editor/YorkieIntelligenceFeature.tsx | 47 +++++++++++++--- frontend/src/hooks/api/intelligence.ts | 53 +++++++++++++++++++ 2 files changed, 92 insertions(+), 8 deletions(-) diff --git a/frontend/src/components/editor/YorkieIntelligenceFeature.tsx b/frontend/src/components/editor/YorkieIntelligenceFeature.tsx index c1848817..751244b5 100644 --- a/frontend/src/components/editor/YorkieIntelligenceFeature.tsx +++ b/frontend/src/components/editor/YorkieIntelligenceFeature.tsx @@ -14,8 +14,10 @@ import ContentCopyIcon from "@mui/icons-material/ContentCopy"; import RefreshIcon from "@mui/icons-material/Refresh"; import { FormContainer, TextFieldElement } from "react-hook-form-mui"; import SendIcon from "@mui/icons-material/Send"; -import { useIntelligenceFeatureStream } from "../../hooks/api/intelligence"; -import { useEffect, useState } from "react"; +import { useIntelligenceFeatureStream, useIntelligenceStream } from "../../hooks/api/intelligence"; +import { useEffect, useMemo, useState } from "react"; +import clipboard from "clipboardy"; +import { useSnackbar } from "notistack"; interface YorkieIntelligenceFeatureProps { title: string; @@ -25,9 +27,25 @@ interface YorkieIntelligenceFeatureProps { function YorkieIntelligenceFeature(props: YorkieIntelligenceFeatureProps) { const { title, feature } = props; const theme = useTheme(); - const { data, memoryKey, isLoading, mutateAsync } = useIntelligenceFeatureStream(feature); + const { + data: featureData, + memoryKey, + isLoading: isFeatureLoading, + mutateAsync: mutateIntelligenceFeature, + } = useIntelligenceFeatureStream(feature); + const { + data: followUpData, + isLoading: isFollowUpLoading, + mutateAsync: mutateIntelligence, + } = useIntelligenceStream(memoryKey); const [content, setContent] = useState(""); const intelligenceFooterPivot = document.getElementById(INTELLIGENCE_FOOTER_ID); + const isLoading = useMemo( + () => isFeatureLoading || isFollowUpLoading, + [isFeatureLoading, isFollowUpLoading] + ); + const data = useMemo(() => followUpData || featureData, [featureData, followUpData]); + const { enqueueSnackbar } = useSnackbar(); useEffect(() => { setContent(intelligenceFooterPivot?.getAttribute("content") ?? ""); @@ -36,8 +54,21 @@ function YorkieIntelligenceFeature(props: YorkieIntelligenceFeatureProps) { useEffect(() => { if (!content) return; - mutateAsync(content); - }, [content, mutateAsync]); + mutateIntelligenceFeature(content); + }, [content, mutateIntelligenceFeature]); + + const handleCopyContent = async () => { + if (!data) return; + + await clipboard.write(data); + enqueueSnackbar("URL Copied!", { variant: "success" }); + }; + + const handleRetry = async () => { + mutateIntelligence( + "Regenerate a response the last thing you said." + ); + }; return ( @@ -48,10 +79,10 @@ function YorkieIntelligenceFeature(props: YorkieIntelligenceFeatureProps) { {!isLoading && {data}} - - @@ -60,7 +91,7 @@ function YorkieIntelligenceFeature(props: YorkieIntelligenceFeatureProps) { mutateIntelligence(data.content)} > { method: "POST", headers: { Authorization: `Bearer ${authStore.accessToken}`, + "Content-Type": "application/json", }, body: JSON.stringify({ documentId: documentSotre.data?.id, @@ -64,3 +65,55 @@ export const useIntelligenceFeatureStream = (feature: IntelligenceFeature) => { mutateAsync, }; }; + +export const useIntelligenceStream = (memoryKey: string | null) => { + const authStore = useSelector(selectAuth); + const documentSotre = useSelector(selectDocument); + const [data, setData] = useState(null); + const [isLoading, setIsLoading] = useState(false); + + const mutateAsync = useCallback( + async (content: string) => { + if (!memoryKey) return; + + setIsLoading(true); + setData(null); + const response = await fetch(`${import.meta.env.VITE_API_ADDR}/intelligence`, { + method: "POST", + headers: { + Authorization: `Bearer ${authStore.accessToken}`, + "Content-Type": "application/json", + }, + body: JSON.stringify({ + documentId: documentSotre.data?.id, + memoryKey, + content, + }), + }); + const reader = response.body?.getReader(); + let result = ""; + + while (reader) { + const { done, value } = await reader.read(); + setIsLoading(false); + + if (done) { + break; + } + + const text = new TextDecoder().decode(value); + + result += text; + setData(result); + } + }, + [authStore.accessToken, documentSotre.data?.id, memoryKey] + ); + + return { + data, + memoryKey, + isLoading, + mutateAsync, + }; +}; From 4882bd801dd0b9538c7a911d9012c58c8386f8dd Mon Sep 17 00:00:00 2001 From: JongBeom Lee Date: Wed, 31 Jan 2024 18:37:02 +0900 Subject: [PATCH 07/22] Add markdown viewer --- frontend/src/components/editor/Preview.tsx | 14 +++++++------- .../editor/YorkieIntelligenceFeature.tsx | 17 +++++++++++++---- frontend/src/index.css | 5 +++++ frontend/src/utils/document.ts | 7 +++++++ 4 files changed, 32 insertions(+), 11 deletions(-) diff --git a/frontend/src/components/editor/Preview.tsx b/frontend/src/components/editor/Preview.tsx index fb3d8340..6293d55c 100644 --- a/frontend/src/components/editor/Preview.tsx +++ b/frontend/src/components/editor/Preview.tsx @@ -5,6 +5,7 @@ import { selectEditor } from "../../store/editorSlice"; import { CircularProgress, Stack } from "@mui/material"; import { useEffect, useState } from "react"; import "./editor.css"; +import { addSoftLineBreak } from "../../utils/document"; function Preview() { const currentTheme = useCurrentTheme(); @@ -17,12 +18,7 @@ function Preview() { const updatePreviewContent = () => { const editorText = editorStore.doc?.getRoot().content?.toString() || ""; // Add soft line break - setContent( - editorText - .split("\n") - .map((line) => line + " ") - .join("\n") - ); + setContent(addSoftLineBreak(editorText)); }; updatePreviewContent(); @@ -46,9 +42,13 @@ function Preview() { return ( ); diff --git a/frontend/src/components/editor/YorkieIntelligenceFeature.tsx b/frontend/src/components/editor/YorkieIntelligenceFeature.tsx index 751244b5..837bbb0f 100644 --- a/frontend/src/components/editor/YorkieIntelligenceFeature.tsx +++ b/frontend/src/components/editor/YorkieIntelligenceFeature.tsx @@ -18,6 +18,8 @@ import { useIntelligenceFeatureStream, useIntelligenceStream } from "../../hooks import { useEffect, useMemo, useState } from "react"; import clipboard from "clipboardy"; import { useSnackbar } from "notistack"; +import MarkdownPreview from "@uiw/react-markdown-preview"; +import { useCurrentTheme } from "../../hooks/useCurrentTheme"; interface YorkieIntelligenceFeatureProps { title: string; @@ -27,6 +29,7 @@ interface YorkieIntelligenceFeatureProps { function YorkieIntelligenceFeature(props: YorkieIntelligenceFeatureProps) { const { title, feature } = props; const theme = useTheme(); + const currentTheme = useCurrentTheme(); const { data: featureData, memoryKey, @@ -65,9 +68,7 @@ function YorkieIntelligenceFeature(props: YorkieIntelligenceFeatureProps) { }; const handleRetry = async () => { - mutateIntelligence( - "Regenerate a response the last thing you said." - ); + mutateIntelligence("Regenerate a response the last thing you said."); }; return ( @@ -76,7 +77,15 @@ function YorkieIntelligenceFeature(props: YorkieIntelligenceFeatureProps) { {title} {isLoading && } - {!isLoading && {data}} + {!isLoading && ( + + )} + - mutateIntelligence(data.content)} - > + Date: Thu, 1 Feb 2024 13:04:38 +0900 Subject: [PATCH 09/22] Update package-lock.json --- frontend/package-lock.json | 886 ++++++++----------------------------- 1 file changed, 189 insertions(+), 697 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 171eb4ae..dad1a08b 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -32,8 +32,8 @@ "codemirror-toolbar": "^0.0.3", "color": "^4.2.3", "lib0": "^0.2.88", - "match-sorter": "^6.3.3", "lodash": "^4.17.21", + "match-sorter": "^6.3.3", "moment": "^2.30.1", "notistack": "^2.0.8", "randomcolor": "^0.6.2", @@ -117,9 +117,9 @@ } }, "node_modules/@babel/core": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", - "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", + "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", @@ -127,11 +127,11 @@ "@babel/generator": "^7.23.6", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.9", - "@babel/parser": "^7.23.9", - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9", + "@babel/helpers": "^7.23.7", + "@babel/parser": "^7.23.6", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -324,14 +324,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", - "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", + "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", "dev": true, "dependencies": { - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6" }, "engines": { "node": ">=6.9.0" @@ -351,9 +351,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", - "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -393,9 +393,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", - "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", + "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -404,23 +404,23 @@ } }, "node_modules/@babel/template": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", - "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.23.9", - "@babel/types": "^7.23.9" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", - "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", + "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.23.5", @@ -429,8 +429,8 @@ "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.9", - "@babel/types": "^7.23.9", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -439,9 +439,9 @@ } }, "node_modules/@babel/types": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", - "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", "dependencies": { "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", @@ -492,9 +492,9 @@ } }, "node_modules/@codemirror/lang-html": { - "version": "6.4.8", - "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.8.tgz", - "integrity": "sha512-tE2YK7wDlb9ZpAH6mpTPiYm6rhfdQKVDa5r9IwIFlwwgvVaKsCfuKKZoJGWsmMZIf3FQAuJ5CHMPLymOtg1hXw==", + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.7.tgz", + "integrity": "sha512-y9hWSSO41XlcL4uYwWyk0lEgTHcelWWfRuqmvcAmxfCs0HNWZdriWo/EU43S63SxEZpc1Hd50Itw7ktfQvfkUg==", "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/lang-css": "^6.0.0", @@ -574,9 +574,9 @@ "integrity": "sha512-hm8XshYj5Fo30Bb922QX9hXB/bxOAVH+qaqHBzw5TKa72vOeslyGwd4X8M0c1dJ9JqxlaMceOQ8RsL9tC7gU0A==" }, "node_modules/@codemirror/view": { - "version": "6.23.1", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.23.1.tgz", - "integrity": "sha512-J2Xnn5lFYT1ZN/5ewEoMBCmLlL71lZ3mBdb7cUEuHhX2ESoSrNEucpsDXpX22EuTGm9LOgC9v4Z0wx+Ez8QmGA==", + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.23.0.tgz", + "integrity": "sha512-/51px9N4uW8NpuWkyUX+iam5+PM6io2fm+QmRnzwqBy5v/pwGg9T0kILFtYeum8hjuvENtgsGNKluOfqIICmeQ==", "dependencies": { "@codemirror/state": "^6.4.0", "style-mod": "^4.1.0", @@ -716,74 +716,10 @@ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", - "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", - "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz", + "integrity": "sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==", "cpu": [ "arm64" ], @@ -796,294 +732,6 @@ "node": ">=12" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -1178,28 +826,28 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", - "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.3.tgz", + "integrity": "sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==", "dependencies": { - "@floating-ui/utils": "^0.2.1" + "@floating-ui/utils": "^0.2.0" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.1.tgz", - "integrity": "sha512-iA8qE43/H5iGozC3W0YSnVSW42Vh522yyM1gj+BqRwVsTNOyr231PsXDaV04yT39PsO0QL2QpbI/M0ZaLUQgRQ==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.4.tgz", + "integrity": "sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ==", "dependencies": { - "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.1" + "@floating-ui/core": "^1.5.3", + "@floating-ui/utils": "^0.2.0" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz", - "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.6.tgz", + "integrity": "sha512-IB8aCRFxr8nFkdYZgH+Otd9EVQPJoynxeFRGTB8voPoZMRWo8XjYuCRgpI1btvuKY69XMiLnW+ym7zoBHM90Rw==", "dependencies": { - "@floating-ui/dom": "^1.6.1" + "@floating-ui/dom": "^1.5.4" }, "peerDependencies": { "react": ">=16.8.0", @@ -1379,14 +1027,14 @@ } }, "node_modules/@mui/base": { - "version": "5.0.0-beta.33", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.33.tgz", - "integrity": "sha512-WcSpoJUw/UYHXpvgtl4HyMar2Ar97illUpqiS/X1gtSBp6sdDW6kB2BJ9OlVQ+Kk/RL2GDp/WHA9sbjAYV35ow==", + "version": "5.0.0-beta.32", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.32.tgz", + "integrity": "sha512-4VptvYeLUYMJhZapWBkD50GmKfOc0XT381KJcTK3ncZYIl8MdBhpR6l8jOyeP5cixUPBJhstjrnmQEAHjCLriw==", "dependencies": { "@babel/runtime": "^7.23.8", - "@floating-ui/react-dom": "^2.0.6", + "@floating-ui/react-dom": "^2.0.5", "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.6", + "@mui/utils": "^5.15.5", "@popperjs/core": "^2.11.8", "clsx": "^2.1.0", "prop-types": "^15.8.1" @@ -1410,18 +1058,18 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.15.6", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.6.tgz", - "integrity": "sha512-0aoWS4qvk1uzm9JBs83oQmIMIQeTBUeqqu8u+3uo2tMznrB5fIKqQVCbCgq+4Tm4jG+5F7dIvnjvQ2aV7UKtdw==", + "version": "5.15.5", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.5.tgz", + "integrity": "sha512-VhT8klyXy8GrWrARqLMoM6Nzz809Jc3Wn5wd7WOZfre2vFO1rBV1dBANAPBhBqpaQI0HCMRTWEYoSyOFgRnz4A==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui-org" } }, "node_modules/@mui/icons-material": { - "version": "5.15.6", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.6.tgz", - "integrity": "sha512-GnkxMtlhs+8ieHLmCytg00ew0vMOiXGFCw8Ra9nxMsBjBqnrOI5gmXqUm+sGggeEU/HG8HyeqC1MX/IxOBJHzA==", + "version": "5.15.5", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.5.tgz", + "integrity": "sha512-qiql0fd1JY7TZ1wm1RldvU7sL8QUatE9OC12i/qm5rnm/caTFyAfOyTIR7qqxorsJvoZGyrzwoMkal6Ij9kM0A==", "dependencies": { "@babel/runtime": "^7.23.8" }, @@ -1444,16 +1092,16 @@ } }, "node_modules/@mui/material": { - "version": "5.15.6", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.6.tgz", - "integrity": "sha512-rw7bDdpi2kzfmcDN78lHp8swArJ5sBCKsn+4G3IpGfu44ycyWAWX0VdlvkjcR9Yrws2KIm7c+8niXpWHUDbWoA==", + "version": "5.15.5", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.5.tgz", + "integrity": "sha512-2KfA39f/UWeQl0O22UJs3x1nG3chYlyu9wnux5vTnxUTLzkgYIzQIHaH+ZOGpv5JiZBMKktAPNfhqyhSaQ49qQ==", "dependencies": { "@babel/runtime": "^7.23.8", - "@mui/base": "5.0.0-beta.33", - "@mui/core-downloads-tracker": "^5.15.6", - "@mui/system": "^5.15.6", + "@mui/base": "5.0.0-beta.32", + "@mui/core-downloads-tracker": "^5.15.5", + "@mui/system": "^5.15.5", "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.6", + "@mui/utils": "^5.15.5", "@types/react-transition-group": "^4.4.10", "clsx": "^2.1.0", "csstype": "^3.1.2", @@ -1488,12 +1136,12 @@ } }, "node_modules/@mui/private-theming": { - "version": "5.15.6", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.6.tgz", - "integrity": "sha512-ZBX9E6VNUSscUOtU8uU462VvpvBS7eFl5VfxAzTRVQBHflzL+5KtnGrebgf6Nd6cdvxa1o0OomiaxSKoN2XDmg==", + "version": "5.15.5", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.5.tgz", + "integrity": "sha512-HU1KCyGNcJFsUamTbOM539ZDZJNI/XU7sZFdsN29glktUf+T6hNvDuO2ISinBiLTZy7Ab3R6DSSoYXRrLc4uwQ==", "dependencies": { "@babel/runtime": "^7.23.8", - "@mui/utils": "^5.15.6", + "@mui/utils": "^5.15.5", "prop-types": "^15.8.1" }, "engines": { @@ -1514,9 +1162,9 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.15.6", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.6.tgz", - "integrity": "sha512-KAn8P8xP/WigFKMlEYUpU9z2o7jJnv0BG28Qu1dhNQVutsLVIFdRf5Nb+0ijp2qgtcmygQ0FtfRuXv5LYetZTg==", + "version": "5.15.5", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.5.tgz", + "integrity": "sha512-xoMUd8h270thNL7ZsOzmlluIAMsQg/HT7SCdRjPBVle+XHgTKaiWiRy1ekDOsrrF0rhjME3T7xeeUq2G269UUw==", "dependencies": { "@babel/runtime": "^7.23.8", "@emotion/cache": "^11.11.0", @@ -1545,15 +1193,15 @@ } }, "node_modules/@mui/system": { - "version": "5.15.6", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.6.tgz", - "integrity": "sha512-J01D//u8IfXvaEHMBQX5aO2l7Q+P15nt96c4NskX7yp5/+UuZP8XCQJhtBtLuj+M2LLyXHYGmCPeblsmmscP2Q==", + "version": "5.15.5", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.5.tgz", + "integrity": "sha512-DMv2vGjUKaDt/m0RlzvLjpKiS5V0LoBhiMUHf5pWdj6uoNlN4FuKUe4pFeYmQMIO5DnVZKybmpPepfkdfEH+Og==", "dependencies": { "@babel/runtime": "^7.23.8", - "@mui/private-theming": "^5.15.6", - "@mui/styled-engine": "^5.15.6", + "@mui/private-theming": "^5.15.5", + "@mui/styled-engine": "^5.15.5", "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.6", + "@mui/utils": "^5.15.5", "clsx": "^2.1.0", "csstype": "^3.1.2", "prop-types": "^15.8.1" @@ -1597,9 +1245,9 @@ } }, "node_modules/@mui/utils": { - "version": "5.15.6", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.6.tgz", - "integrity": "sha512-qfEhf+zfU9aQdbzo1qrSWlbPQhH1nCgeYgwhOVnj9Bn39shJQitEnXpSQpSNag8+uty5Od6PxmlNKPTnPySRKA==", + "version": "5.15.5", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.5.tgz", + "integrity": "sha512-jEywgaMGZWPSlVFO7ZZAyXxNeLmq5XBp5At9Ne/sGohRJdesUcdxvyi8TP3odJxwQuL5L6PJV+JQ4DyIDM849A==", "dependencies": { "@babel/runtime": "^7.23.8", "@types/prop-types": "^15.7.11", @@ -1624,9 +1272,9 @@ } }, "node_modules/@mui/x-date-pickers": { - "version": "6.19.2", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-6.19.2.tgz", - "integrity": "sha512-/bdWZabexuz+1rKG15XryxiMGb5D0XVx65NU7CZYKm/1+HuUzc0FX9smKEa/YVZnLSNsAp6SULIyPZtAKE+3AA==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-6.19.0.tgz", + "integrity": "sha512-/GccT+iFJTKjI6b9b0MWojyRKnizL/VYYAfPnR1q0wSVVXjYv7a1NK0uQlan4JbnovqoQCNVeTOCy/0bUJyD2Q==", "dependencies": { "@babel/runtime": "^7.23.2", "@mui/base": "^5.0.0-beta.22", @@ -1784,12 +1432,12 @@ } }, "node_modules/@reduxjs/toolkit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.1.0.tgz", - "integrity": "sha512-nfJ/b4ZhzUevQ1ZPKjlDL6CMYxO4o7ZL7OSsvSOxzT/EN11LsBDgTqP7aedHtBrFSVoK7oTP1SbMWUwGb30NLg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.0.1.tgz", + "integrity": "sha512-fxIjrR9934cmS8YXIGd9e7s1XRsEU++aFc9DVNMFMRTM5Vtsg2DCRMj21eslGtDt43IUf9bJL3h5bwUlZleibA==", "dependencies": { "immer": "^10.0.3", - "redux": "^5.0.1", + "redux": "^5.0.0", "redux-thunk": "^3.1.0", "reselect": "^5.0.1" }, @@ -1814,32 +1462,6 @@ "node": ">=14.0.0" } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz", - "integrity": "sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz", - "integrity": "sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.9.6", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz", @@ -1853,136 +1475,6 @@ "darwin" ] }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz", - "integrity": "sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz", - "integrity": "sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz", - "integrity": "sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz", - "integrity": "sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz", - "integrity": "sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz", - "integrity": "sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz", - "integrity": "sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz", - "integrity": "sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz", - "integrity": "sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz", - "integrity": "sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/@swc/helpers": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.3.tgz", @@ -2228,16 +1720,16 @@ "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.20.0.tgz", - "integrity": "sha512-fTwGQUnjhoYHeSF6m5pWNkzmDDdsKELYrOBxhjMrofPqCkoC2k3B2wvGHFxa1CTIqkEn88nlW1HVMztjo2K8Hg==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.19.0.tgz", + "integrity": "sha512-DUCUkQNklCQYnrBSSikjVChdc84/vMPDQSgJTHBZ64G9bA9w0Crc0rd2diujKbTdp6w2J47qkeHQLoi0rpLCdg==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.20.0", - "@typescript-eslint/type-utils": "6.20.0", - "@typescript-eslint/utils": "6.20.0", - "@typescript-eslint/visitor-keys": "6.20.0", + "@typescript-eslint/scope-manager": "6.19.0", + "@typescript-eslint/type-utils": "6.19.0", + "@typescript-eslint/utils": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -2263,15 +1755,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.20.0.tgz", - "integrity": "sha512-bYerPDF/H5v6V76MdMYhjwmwgMA+jlPVqjSDq2cRqMi8bP5sR3Z+RLOiOMad3nsnmDVmn2gAFCyNgh/dIrfP/w==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.19.0.tgz", + "integrity": "sha512-1DyBLG5SH7PYCd00QlroiW60YJ4rWMuUGa/JBV0iZuqi4l4IK3twKPq5ZkEebmGqRjXWVgsUzfd3+nZveewgow==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.20.0", - "@typescript-eslint/types": "6.20.0", - "@typescript-eslint/typescript-estree": "6.20.0", - "@typescript-eslint/visitor-keys": "6.20.0", + "@typescript-eslint/scope-manager": "6.19.0", + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/typescript-estree": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0", "debug": "^4.3.4" }, "engines": { @@ -2291,13 +1783,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.20.0.tgz", - "integrity": "sha512-p4rvHQRDTI1tGGMDFQm+GtxP1ZHyAh64WANVoyEcNMpaTFn3ox/3CcgtIlELnRfKzSs/DwYlDccJEtr3O6qBvA==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.0.tgz", + "integrity": "sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.20.0", - "@typescript-eslint/visitor-keys": "6.20.0" + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -2308,13 +1800,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.20.0.tgz", - "integrity": "sha512-qnSobiJQb1F5JjN0YDRPHruQTrX7ICsmltXhkV536mp4idGAYrIyr47zF/JmkJtEcAVnIz4gUYJ7gOZa6SmN4g==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.19.0.tgz", + "integrity": "sha512-mcvS6WSWbjiSxKCwBcXtOM5pRkPQ6kcDds/juxcy/727IQr3xMEcwr/YLHW2A2+Fp5ql6khjbKBzOyjuPqGi/w==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.20.0", - "@typescript-eslint/utils": "6.20.0", + "@typescript-eslint/typescript-estree": "6.19.0", + "@typescript-eslint/utils": "6.19.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -2335,9 +1827,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.20.0.tgz", - "integrity": "sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.0.tgz", + "integrity": "sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -2348,13 +1840,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.20.0.tgz", - "integrity": "sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.0.tgz", + "integrity": "sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.20.0", - "@typescript-eslint/visitor-keys": "6.20.0", + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2376,17 +1868,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.20.0.tgz", - "integrity": "sha512-/EKuw+kRu2vAqCoDwDCBtDRU6CTKbUmwwI7SH7AashZ+W+7o8eiyy6V2cdOqN49KsTcASWsC5QeghYuRDTyOOg==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.19.0.tgz", + "integrity": "sha512-QR41YXySiuN++/dC9UArYOg4X86OAYP83OWTewpVx5ct1IZhjjgTLocj7QNxGhWoTqknsgpl7L+hGygCO+sdYw==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.20.0", - "@typescript-eslint/types": "6.20.0", - "@typescript-eslint/typescript-estree": "6.20.0", + "@typescript-eslint/scope-manager": "6.19.0", + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/typescript-estree": "6.19.0", "semver": "^7.5.4" }, "engines": { @@ -2401,12 +1893,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.20.0.tgz", - "integrity": "sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.0.tgz", + "integrity": "sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/types": "6.19.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -2584,9 +2076,9 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/axios": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", - "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", + "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", "dependencies": { "follow-redirects": "^1.15.4", "form-data": "^4.0.0", @@ -2658,9 +2150,9 @@ } }, "node_modules/browserslist": { - "version": "4.22.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", - "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", "dev": true, "funding": [ { @@ -2677,8 +2169,8 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001580", - "electron-to-chromium": "^1.4.648", + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, @@ -2698,9 +2190,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001581", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001581.tgz", - "integrity": "sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ==", + "version": "1.0.30001579", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz", + "integrity": "sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==", "dev": true, "funding": [ { @@ -3127,9 +2619,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.650", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.650.tgz", - "integrity": "sha512-sYSQhJCJa4aGA1wYol5cMQgekDBlbVfTRavlGZVr3WZpDdOPcp6a6xUnFfrt8TqZhsBYYbDxJZCjGfHuGupCRQ==", + "version": "1.4.640", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.640.tgz", + "integrity": "sha512-z/6oZ/Muqk4BaE7P69bXhUhpJbUM9ZJeka43ZwxsDshKtePns4mhBlh8bU5+yrnOnz3fhG82XLzGUXazOmsWnA==", "dev": true }, "node_modules/entities": { @@ -3160,9 +2652,9 @@ } }, "node_modules/esbuild": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", - "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", + "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==", "dev": true, "hasInstallScript": true, "bin": { @@ -3172,29 +2664,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" + "@esbuild/aix-ppc64": "0.19.11", + "@esbuild/android-arm": "0.19.11", + "@esbuild/android-arm64": "0.19.11", + "@esbuild/android-x64": "0.19.11", + "@esbuild/darwin-arm64": "0.19.11", + "@esbuild/darwin-x64": "0.19.11", + "@esbuild/freebsd-arm64": "0.19.11", + "@esbuild/freebsd-x64": "0.19.11", + "@esbuild/linux-arm": "0.19.11", + "@esbuild/linux-arm64": "0.19.11", + "@esbuild/linux-ia32": "0.19.11", + "@esbuild/linux-loong64": "0.19.11", + "@esbuild/linux-mips64el": "0.19.11", + "@esbuild/linux-ppc64": "0.19.11", + "@esbuild/linux-riscv64": "0.19.11", + "@esbuild/linux-s390x": "0.19.11", + "@esbuild/linux-x64": "0.19.11", + "@esbuild/netbsd-x64": "0.19.11", + "@esbuild/openbsd-x64": "0.19.11", + "@esbuild/sunos-x64": "0.19.11", + "@esbuild/win32-arm64": "0.19.11", + "@esbuild/win32-ia32": "0.19.11", + "@esbuild/win32-x64": "0.19.11" } }, "node_modules/escalade": { @@ -3596,9 +3088,9 @@ "integrity": "sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==" }, "node_modules/fastq": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz", - "integrity": "sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -5213,9 +4705,9 @@ } }, "node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", "funding": [ { "type": "GitHub Sponsors", @@ -5937,9 +5429,9 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/property-information": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.4.1.tgz", - "integrity": "sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.4.0.tgz", + "integrity": "sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" From 868711b181dcc9fe265f18f18293b9772a49cedd Mon Sep 17 00:00:00 2001 From: devleejb Date: Thu, 1 Feb 2024 13:06:02 +0900 Subject: [PATCH 10/22] Change image path --- frontend/src/components/editor/YorkieIntelligence.tsx | 8 ++------ .../src/components/editor/YorkieIntelligenceFeature.tsx | 2 +- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/frontend/src/components/editor/YorkieIntelligence.tsx b/frontend/src/components/editor/YorkieIntelligence.tsx index c70cb310..ad1c4675 100644 --- a/frontend/src/components/editor/YorkieIntelligence.tsx +++ b/frontend/src/components/editor/YorkieIntelligence.tsx @@ -59,7 +59,7 @@ function YorkieIntelligence() { onClick={handleFooterOpen} > - + Yorkie Intelligence @@ -67,11 +67,7 @@ function YorkieIntelligence() { , debouncedPivot )} - {footerOpen && - createPortal( - , - intelligenceFooterPivot - )} + {footerOpen && createPortal(, intelligenceFooterPivot)} ); } diff --git a/frontend/src/components/editor/YorkieIntelligenceFeature.tsx b/frontend/src/components/editor/YorkieIntelligenceFeature.tsx index 5d7c7646..c70a322b 100644 --- a/frontend/src/components/editor/YorkieIntelligenceFeature.tsx +++ b/frontend/src/components/editor/YorkieIntelligenceFeature.tsx @@ -116,7 +116,7 @@ function YorkieIntelligenceFeature(props: YorkieIntelligenceFeatureProps) { InputProps={{ startAdornment: ( - + ), endAdornment: ( From 5eb1d65077f3081412be755b86b5b0b5ddd22fff Mon Sep 17 00:00:00 2001 From: devleejb Date: Thu, 1 Feb 2024 14:05:14 +0900 Subject: [PATCH 11/22] Add scroll to feature --- .../editor/YorkieIntelligenceFeature.tsx | 36 ++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/frontend/src/components/editor/YorkieIntelligenceFeature.tsx b/frontend/src/components/editor/YorkieIntelligenceFeature.tsx index c70a322b..b7c1874e 100644 --- a/frontend/src/components/editor/YorkieIntelligenceFeature.tsx +++ b/frontend/src/components/editor/YorkieIntelligenceFeature.tsx @@ -83,25 +83,29 @@ function YorkieIntelligenceFeature(props: YorkieIntelligenceFeatureProps) { {isLoading && } {!isLoading && ( - + + + )} - - - - - - + {!isLoading && ( + + + + + + + )} From 6d53760872396ac52e6972fbe62f4251f47314a1 Mon Sep 17 00:00:00 2001 From: devleejb Date: Thu, 1 Feb 2024 14:26:48 +0900 Subject: [PATCH 12/22] Add insertion logic --- frontend/src/components/editor/Editor.tsx | 6 ++- .../editor/YorkieIntelligenceFeature.tsx | 46 ++++++++++++++++--- frontend/src/store/editorSlice.ts | 8 +++- frontend/src/store/store.ts | 5 +- 4 files changed, 53 insertions(+), 12 deletions(-) diff --git a/frontend/src/components/editor/Editor.tsx b/frontend/src/components/editor/Editor.tsx index f6bdeb98..254320ab 100644 --- a/frontend/src/components/editor/Editor.tsx +++ b/frontend/src/components/editor/Editor.tsx @@ -2,8 +2,8 @@ import { useCallback, useEffect, useState } from "react"; import { EditorState } from "@codemirror/state"; import { EditorView, basicSetup } from "codemirror"; import { markdown } from "@codemirror/lang-markdown"; -import { useSelector } from "react-redux"; -import { selectEditor } from "../../store/editorSlice"; +import { useDispatch, useSelector } from "react-redux"; +import { selectEditor, setCmView } from "../../store/editorSlice"; import { yorkieCodeMirror } from "../../utils/yorkie"; import toolbar, { markdownItems } from "codemirror-toolbar"; import { xcodeLight, xcodeDark } from "@uiw/codemirror-theme-xcode"; @@ -13,6 +13,7 @@ import { indentWithTab } from "@codemirror/commands"; import { intelligencePivot } from "../../utils/intelligence/intelligencePivot"; function Editor() { + const dispatch = useDispatch(); const themeMode = useCurrentTheme(); const [element, setElement] = useState(); const editorStore = useSelector(selectEditor); @@ -51,6 +52,7 @@ function Editor() { state, parent: element, }); + dispatch(setCmView(view)); return () => { view?.destroy(); diff --git a/frontend/src/components/editor/YorkieIntelligenceFeature.tsx b/frontend/src/components/editor/YorkieIntelligenceFeature.tsx index b7c1874e..27c3fe9f 100644 --- a/frontend/src/components/editor/YorkieIntelligenceFeature.tsx +++ b/frontend/src/components/editor/YorkieIntelligenceFeature.tsx @@ -21,6 +21,9 @@ import { useSnackbar } from "notistack"; import MarkdownPreview from "@uiw/react-markdown-preview"; import { useCurrentTheme } from "../../hooks/useCurrentTheme"; import { addSoftLineBreak } from "../../utils/document"; +import { useSelector } from "react-redux"; +import { selectEditor } from "../../store/editorSlice"; +import { Transaction } from "@codemirror/state"; interface YorkieIntelligenceFeatureProps { title: string; @@ -31,6 +34,7 @@ function YorkieIntelligenceFeature(props: YorkieIntelligenceFeatureProps) { const { title, feature } = props; const theme = useTheme(); const currentTheme = useCurrentTheme(); + const editorStore = useSelector(selectEditor); const { data: featureData, memoryKey, @@ -48,18 +52,21 @@ function YorkieIntelligenceFeature(props: YorkieIntelligenceFeatureProps) { () => isFeatureLoading || isFollowUpLoading, [isFeatureLoading, isFollowUpLoading] ); - const data = useMemo(() => followUpData || featureData, [featureData, followUpData]); + const data = useMemo( + () => "Test~\nTest~\nTest~\nTest~\n" || followUpData || featureData, + [featureData, followUpData] + ); const { enqueueSnackbar } = useSnackbar(); useEffect(() => { setContent(intelligenceFooterPivot?.getAttribute("content") ?? ""); }, [intelligenceFooterPivot]); - useEffect(() => { - if (!content) return; + // useEffect(() => { + // if (!content) return; - mutateIntelligenceFeature(content); - }, [content, mutateIntelligenceFeature]); + // mutateIntelligenceFeature(content); + // }, [content, mutateIntelligenceFeature]); const handleCopyContent = async () => { if (!data) return; @@ -76,6 +83,27 @@ function YorkieIntelligenceFeature(props: YorkieIntelligenceFeatureProps) { mutateIntelligence(data.content); }; + const handleAddContent = (replace: boolean = false) => { + if (!editorStore.cmView) return; + const selection = editorStore.cmView.state.selection.main; + let from = selection.to; + let to = selection.to; + let insert = data; + + if (replace) { + from = selection.from; + } else { + insert = `\n${insert}`; + } + + editorStore.cmView?.dispatch({ + changes: { from, to, insert }, + }); + editorStore.doc?.update((root) => { + root.content.edit(from, to, insert); + }); + }; + return ( @@ -102,8 +130,12 @@ function YorkieIntelligenceFeature(props: YorkieIntelligenceFeatureProps) { - - + + )} diff --git a/frontend/src/store/editorSlice.ts b/frontend/src/store/editorSlice.ts index 659120d1..0cd1e7c5 100644 --- a/frontend/src/store/editorSlice.ts +++ b/frontend/src/store/editorSlice.ts @@ -4,6 +4,7 @@ import { RootState } from "./store"; import * as yorkie from "yorkie-js-sdk"; import { YorkieCodeMirrorDocType, YorkieCodeMirrorPresenceType } from "../utils/yorkie/yorkieSync"; import { ShareRole } from "../utils/share"; +import { EditorView } from "codemirror"; export type EditorModeType = "edit" | "both" | "read"; export type CodePairDocType = yorkie.Document< @@ -16,6 +17,7 @@ export interface EditorState { shareRole: ShareRole | null; doc: CodePairDocType | null; client: yorkie.Client | null; + cmView: EditorView | null; } const initialState: EditorState = { @@ -23,6 +25,7 @@ const initialState: EditorState = { shareRole: null, doc: null, client: null, + cmView: null, }; export const editorSlice = createSlice({ @@ -41,10 +44,13 @@ export const editorSlice = createSlice({ setClient: (state, action: PayloadAction) => { state.client = action.payload; }, + setCmView: (state, action: PayloadAction) => { + state.cmView = action.payload; + }, }, }); -export const { setMode, setDoc, setClient, setShareRole } = editorSlice.actions; +export const { setMode, setDoc, setClient, setShareRole, setCmView } = editorSlice.actions; export const selectEditor = (state: RootState) => state.editor; diff --git a/frontend/src/store/store.ts b/frontend/src/store/store.ts index 9cd5faac..79710107 100644 --- a/frontend/src/store/store.ts +++ b/frontend/src/store/store.ts @@ -36,11 +36,12 @@ export const store = configureStore({ "persist/PERSIST", // redux-persist "editor/setDoc", "editor/setClient", + "editor/setCmView", ], - ignoredPaths: ["editor.doc", "editor.client"], + ignoredPaths: ["editor.doc", "editor.client", "editor.cmView"], }, immutableCheck: { - ignoredPaths: ["editor.doc", "editor.client"], + ignoredPaths: ["editor.doc", "editor.client", "editor.cmView"], }, }), }); From 6cc8c1d42f44730453a389e8e212ff92bb07c7c2 Mon Sep 17 00:00:00 2001 From: devleejb Date: Thu, 1 Feb 2024 14:49:46 +0900 Subject: [PATCH 13/22] Add replace / insert below --- .../components/editor/YorkieIntelligence.tsx | 6 ++- .../editor/YorkieIntelligenceFeature.tsx | 41 +++++++++++-------- .../editor/YorkieIntelligenceFooter.tsx | 8 +++- 3 files changed, 36 insertions(+), 19 deletions(-) diff --git a/frontend/src/components/editor/YorkieIntelligence.tsx b/frontend/src/components/editor/YorkieIntelligence.tsx index ad1c4675..f4d6473e 100644 --- a/frontend/src/components/editor/YorkieIntelligence.tsx +++ b/frontend/src/components/editor/YorkieIntelligence.tsx @@ -67,7 +67,11 @@ function YorkieIntelligence() { , debouncedPivot )} - {footerOpen && createPortal(, intelligenceFooterPivot)} + {footerOpen && + createPortal( + , + intelligenceFooterPivot + )} ); } diff --git a/frontend/src/components/editor/YorkieIntelligenceFeature.tsx b/frontend/src/components/editor/YorkieIntelligenceFeature.tsx index 27c3fe9f..e3dfa66f 100644 --- a/frontend/src/components/editor/YorkieIntelligenceFeature.tsx +++ b/frontend/src/components/editor/YorkieIntelligenceFeature.tsx @@ -23,15 +23,15 @@ import { useCurrentTheme } from "../../hooks/useCurrentTheme"; import { addSoftLineBreak } from "../../utils/document"; import { useSelector } from "react-redux"; import { selectEditor } from "../../store/editorSlice"; -import { Transaction } from "@codemirror/state"; interface YorkieIntelligenceFeatureProps { title: string; feature: IntelligenceFeature; + onClose: () => void; } function YorkieIntelligenceFeature(props: YorkieIntelligenceFeatureProps) { - const { title, feature } = props; + const { title, feature, onClose } = props; const theme = useTheme(); const currentTheme = useCurrentTheme(); const editorStore = useSelector(selectEditor); @@ -52,21 +52,18 @@ function YorkieIntelligenceFeature(props: YorkieIntelligenceFeatureProps) { () => isFeatureLoading || isFollowUpLoading, [isFeatureLoading, isFollowUpLoading] ); - const data = useMemo( - () => "Test~\nTest~\nTest~\nTest~\n" || followUpData || featureData, - [featureData, followUpData] - ); + const data = useMemo(() => followUpData || featureData, [featureData, followUpData]); const { enqueueSnackbar } = useSnackbar(); useEffect(() => { setContent(intelligenceFooterPivot?.getAttribute("content") ?? ""); }, [intelligenceFooterPivot]); - // useEffect(() => { - // if (!content) return; + useEffect(() => { + if (!content) return; - // mutateIntelligenceFeature(content); - // }, [content, mutateIntelligenceFeature]); + mutateIntelligenceFeature(content); + }, [content, mutateIntelligenceFeature]); const handleCopyContent = async () => { if (!data) return; @@ -86,22 +83,32 @@ function YorkieIntelligenceFeature(props: YorkieIntelligenceFeatureProps) { const handleAddContent = (replace: boolean = false) => { if (!editorStore.cmView) return; const selection = editorStore.cmView.state.selection.main; - let from = selection.to; - let to = selection.to; - let insert = data; + let from = Math.min(selection.to, selection.from); + let to = Math.max(selection.to, selection.from); + let insert = data as string; - if (replace) { - from = selection.from; - } else { + if (!replace) { + from = to; insert = `\n${insert}`; } + const selectionFrom = replace ? from : from + 1; + const selectionTo = from + insert.length; + editorStore.cmView?.dispatch({ changes: { from, to, insert }, + selection: { + anchor: selectionFrom, + head: selectionTo, + }, }); - editorStore.doc?.update((root) => { + editorStore.doc?.update((root, presence) => { root.content.edit(from, to, insert); + presence.set({ + selection: root.content.indexRangeToPosRange([selectionFrom, selectionTo]), + }); }); + onClose(); }; return ( diff --git a/frontend/src/components/editor/YorkieIntelligenceFooter.tsx b/frontend/src/components/editor/YorkieIntelligenceFooter.tsx index bcd0e428..b6198983 100644 --- a/frontend/src/components/editor/YorkieIntelligenceFooter.tsx +++ b/frontend/src/components/editor/YorkieIntelligenceFooter.tsx @@ -4,7 +4,12 @@ import { useState } from "react"; import { IntelligenceFeature } from "../../constants/intelligence"; import YorkieIntelligenceFeature from "./YorkieIntelligenceFeature"; -function YorkieIntelligenceFooter() { +interface YorkieIntelligenceFooterProps { + onClose: () => void; +} + +function YorkieIntelligenceFooter(props: YorkieIntelligenceFooterProps) { + const { onClose } = props; const theme = useTheme(); const [selectedTitle, setSelectedTitle] = useState(null); const [selectedFeature, setSelectedFeature] = useState(null); @@ -30,6 +35,7 @@ function YorkieIntelligenceFooter() { ) : ( From 1c06aa8b4fee504b989f09818b5ee606b4fd2263 Mon Sep 17 00:00:00 2001 From: devleejb Date: Thu, 1 Feb 2024 14:58:46 +0900 Subject: [PATCH 14/22] Add `isComplete` flag to stream API --- frontend/src/components/editor/Editor.tsx | 2 +- .../editor/YorkieIntelligenceFeature.tsx | 24 +++++++++++++++---- frontend/src/hooks/api/intelligence.ts | 8 +++++++ 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/frontend/src/components/editor/Editor.tsx b/frontend/src/components/editor/Editor.tsx index 254320ab..b38b5217 100644 --- a/frontend/src/components/editor/Editor.tsx +++ b/frontend/src/components/editor/Editor.tsx @@ -57,7 +57,7 @@ function Editor() { return () => { view?.destroy(); }; - }, [editorStore.client, editorStore.doc, element, themeMode]); + }, [dispatch, editorStore.client, editorStore.doc, element, themeMode]); return (
isFeatureLoading || isFollowUpLoading, [isFeatureLoading, isFollowUpLoading] ); + const isComplete = useMemo( + () => isFeatureComplete || isFollowUpComplete, + [isFeatureComplete, isFollowUpComplete] + ); const data = useMemo(() => followUpData || featureData, [featureData, followUpData]); const { enqueueSnackbar } = useSnackbar(); + const markdownPreviewRef = useRef(null); useEffect(() => { setContent(intelligenceFooterPivot?.getAttribute("content") ?? ""); @@ -65,6 +72,15 @@ function YorkieIntelligenceFeature(props: YorkieIntelligenceFeatureProps) { mutateIntelligenceFeature(content); }, [content, mutateIntelligenceFeature]); + useEffect(() => { + if (data && markdownPreviewRef.current) { + markdownPreviewRef.current.scrollTo({ + behavior: "smooth", + top: markdownPreviewRef.current.scrollHeight, + }); + } + }, [data]); + const handleCopyContent = async () => { if (!data) return; @@ -84,7 +100,7 @@ function YorkieIntelligenceFeature(props: YorkieIntelligenceFeatureProps) { if (!editorStore.cmView) return; const selection = editorStore.cmView.state.selection.main; let from = Math.min(selection.to, selection.from); - let to = Math.max(selection.to, selection.from); + const to = Math.max(selection.to, selection.from); let insert = data as string; if (!replace) { @@ -118,7 +134,7 @@ function YorkieIntelligenceFeature(props: YorkieIntelligenceFeatureProps) { {isLoading && } {!isLoading && ( - + - {!isLoading && ( + {!isComplete && ( + + + + + + ); +} + +export default CloseIntelligenceModal; From acf0e4153dc751e30992f6b957448fd7a9f27fbc Mon Sep 17 00:00:00 2001 From: devleejb Date: Thu, 1 Feb 2024 18:44:16 +0900 Subject: [PATCH 21/22] Add default height to intelligence --- .../editor/YorkieIntelligenceFeature.tsx | 25 +++++++++++-------- .../editor/YorkieIntelligenceFooter.tsx | 2 -- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/frontend/src/components/editor/YorkieIntelligenceFeature.tsx b/frontend/src/components/editor/YorkieIntelligenceFeature.tsx index 9f2fea27..c04ee28b 100644 --- a/frontend/src/components/editor/YorkieIntelligenceFeature.tsx +++ b/frontend/src/components/editor/YorkieIntelligenceFeature.tsx @@ -2,6 +2,7 @@ import { Box, Button, CircularProgress, + Fade, FormControl, IconButton, InputAdornment, @@ -143,19 +144,19 @@ function YorkieIntelligenceFeature(props: YorkieIntelligenceFeatureProps) { {title} {isLoading && } - {!isLoading && ( - + + {!isLoading && ( - - )} + )} + - {isComplete && ( + - )} + ), endAdornment: ( - - - - - + + + + + + + ), }} /> diff --git a/frontend/src/components/editor/YorkieIntelligenceFooter.tsx b/frontend/src/components/editor/YorkieIntelligenceFooter.tsx index a8a3027d..8dec43bc 100644 --- a/frontend/src/components/editor/YorkieIntelligenceFooter.tsx +++ b/frontend/src/components/editor/YorkieIntelligenceFooter.tsx @@ -71,8 +71,6 @@ function YorkieIntelligenceFooter(props: YorkieIntelligenceFooterProps) { horizontal: "left", }} onClose={handleCloseModalOpen} - disableScrollLock - disablePortal > Date: Thu, 1 Feb 2024 18:46:08 +0900 Subject: [PATCH 22/22] Fix lint --- frontend/src/components/editor/YorkieIntelligenceFooter.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/editor/YorkieIntelligenceFooter.tsx b/frontend/src/components/editor/YorkieIntelligenceFooter.tsx index 8dec43bc..3f757c40 100644 --- a/frontend/src/components/editor/YorkieIntelligenceFooter.tsx +++ b/frontend/src/components/editor/YorkieIntelligenceFooter.tsx @@ -35,7 +35,7 @@ function YorkieIntelligenceFooter(props: YorkieIntelligenceFooterProps) { return () => { setAnchorEl(undefined); }; - }, [anchorRef.current]); + }, []); const handleSelectFeature = (feature: IntelligenceFeature, title: string) => { setSelectedFeature(feature);