From b843f8fa63f975a4778ccc2e7d26259b767a3be1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A2=A8=E7=B6=A0BG?= Date: Sun, 6 Oct 2024 00:53:20 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(editor)=EF=BC=9AAdd=20Editor?= =?UTF-8?q?=20Component?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 12 + pnpm-lock.yaml | 1927 ++++++++++++++++- public/assets/icons/add.svg | 1 + public/assets/icons/arrow-clockwise.svg | 4 + .../assets/icons/arrow-counterclockwise.svg | 4 + public/assets/icons/bell.svg | 3 + public/assets/icons/close.svg | 1 + public/assets/icons/comment.svg | 1 + public/assets/icons/delete-modal.svg | 5 + public/assets/icons/delete.svg | 1 + public/assets/icons/doc.svg | 1 + public/assets/icons/edit.svg | 1 + public/assets/icons/file.svg | 24 + public/assets/icons/h1.svg | 3 + public/assets/icons/h2.svg | 3 + public/assets/icons/h3.svg | 3 + public/assets/icons/journal-text.svg | 5 + public/assets/icons/justify.svg | 3 + public/assets/icons/loader.svg | 26 + public/assets/icons/logo-icon.svg | 11 + public/assets/icons/logo.svg | 12 + public/assets/icons/more.svg | 1 + public/assets/icons/share.svg | 3 + public/assets/icons/text-center.svg | 3 + public/assets/icons/text-left.svg | 3 + public/assets/icons/text-paragraph.svg | 3 + public/assets/icons/text-right.svg | 3 + public/assets/icons/type-bold.svg | 3 + public/assets/icons/type-italic.svg | 3 + public/assets/icons/type-strikethrough.svg | 3 + public/assets/icons/type-underline.svg | 3 + public/assets/images/doc.png | Bin 0 -> 12859 bytes public/assets/images/logo.png | Bin 0 -> 9800 bytes public/assets/images/modal.png | Bin 0 -> 118843 bytes public/next.svg | 1 + public/vercel.svg | 1 + src/app/(root)/page.tsx | 4 +- src/common/components/editor/Editor.tsx | 90 + .../editor/plugins/FloatingToolbarPlugin.tsx | 261 +++ src/common/components/editor/plugins/Theme.ts | 43 + .../editor/plugins/ToolbarPlugin.tsx | 288 +++ src/common/styles/dark-theme.scss | 462 ++++ src/common/styles/globals.scss | 32 +- src/common/styles/light-theme.scss | 465 ++++ src/common/types/index.d.ts | 80 + 45 files changed, 3714 insertions(+), 92 deletions(-) create mode 100644 public/assets/icons/add.svg create mode 100644 public/assets/icons/arrow-clockwise.svg create mode 100644 public/assets/icons/arrow-counterclockwise.svg create mode 100644 public/assets/icons/bell.svg create mode 100644 public/assets/icons/close.svg create mode 100644 public/assets/icons/comment.svg create mode 100644 public/assets/icons/delete-modal.svg create mode 100644 public/assets/icons/delete.svg create mode 100644 public/assets/icons/doc.svg create mode 100644 public/assets/icons/edit.svg create mode 100644 public/assets/icons/file.svg create mode 100644 public/assets/icons/h1.svg create mode 100644 public/assets/icons/h2.svg create mode 100644 public/assets/icons/h3.svg create mode 100644 public/assets/icons/journal-text.svg create mode 100644 public/assets/icons/justify.svg create mode 100644 public/assets/icons/loader.svg create mode 100644 public/assets/icons/logo-icon.svg create mode 100644 public/assets/icons/logo.svg create mode 100644 public/assets/icons/more.svg create mode 100644 public/assets/icons/share.svg create mode 100644 public/assets/icons/text-center.svg create mode 100644 public/assets/icons/text-left.svg create mode 100644 public/assets/icons/text-paragraph.svg create mode 100644 public/assets/icons/text-right.svg create mode 100644 public/assets/icons/type-bold.svg create mode 100644 public/assets/icons/type-italic.svg create mode 100644 public/assets/icons/type-strikethrough.svg create mode 100644 public/assets/icons/type-underline.svg create mode 100644 public/assets/images/doc.png create mode 100644 public/assets/images/logo.png create mode 100644 public/assets/images/modal.png create mode 100644 public/next.svg create mode 100644 public/vercel.svg create mode 100644 src/common/components/editor/Editor.tsx create mode 100644 src/common/components/editor/plugins/FloatingToolbarPlugin.tsx create mode 100644 src/common/components/editor/plugins/Theme.ts create mode 100644 src/common/components/editor/plugins/ToolbarPlugin.tsx create mode 100644 src/common/styles/dark-theme.scss create mode 100644 src/common/styles/light-theme.scss create mode 100644 src/common/types/index.d.ts diff --git a/package.json b/package.json index 43c40ff..59241cd 100644 --- a/package.json +++ b/package.json @@ -11,9 +11,21 @@ "prepare": "husky install" }, "dependencies": { + "@floating-ui/react-dom": "^2.1.2", + "@lexical/react": "^0.18.0", + "@lexical/rich-text": "^0.18.0", + "@lexical/selection": "^0.18.0", + "@lexical/utils": "^0.18.0", + "@liveblocks/client": "^2.8.2", + "@liveblocks/node": "^2.8.2", + "@liveblocks/react": "^2.8.2", + "@liveblocks/react-lexical": "^2.8.2", + "@liveblocks/react-ui": "^2.8.2", "@radix-ui/react-slot": "^1.1.0", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", + "jsm-editor": "^0.0.12", + "lexical": "^0.18.0", "lucide-react": "^0.447.0", "next": "14.2.14", "react": "^18", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 009a602..3fa3437 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,6 +7,36 @@ settings: importers: .: dependencies: + '@floating-ui/react-dom': + specifier: ^2.1.2 + version: 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@lexical/react': + specifier: ^0.18.0 + version: 0.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(yjs@13.6.19) + '@lexical/rich-text': + specifier: ^0.18.0 + version: 0.18.0 + '@lexical/selection': + specifier: ^0.18.0 + version: 0.18.0 + '@lexical/utils': + specifier: ^0.18.0 + version: 0.18.0 + '@liveblocks/client': + specifier: ^2.8.2 + version: 2.8.2 + '@liveblocks/node': + specifier: ^2.8.2 + version: 2.8.2 + '@liveblocks/react': + specifier: ^2.8.2 + version: 2.8.2(react@18.3.1) + '@liveblocks/react-lexical': + specifier: ^2.8.2 + version: 2.8.2(@lexical/react@0.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(yjs@13.6.19))(@lexical/utils@0.18.0)(@lexical/yjs@0.18.0(yjs@13.6.19))(@types/react-dom@18.3.0)(@types/react@18.3.11)(lexical@0.18.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@liveblocks/react-ui': + specifier: ^2.8.2 + version: 2.8.2(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': specifier: ^1.1.0 version: 1.1.0(@types/react@18.3.11)(react@18.3.1) @@ -16,6 +46,12 @@ importers: clsx: specifier: ^2.1.1 version: 2.1.1 + jsm-editor: + specifier: ^0.0.12 + version: 0.0.12(@lexical/react@0.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(yjs@13.6.19))(@lexical/rich-text@0.18.0)(@lexical/selection@0.18.0)(@lexical/utils@0.18.0)(lexical@0.18.0) + lexical: + specifier: ^0.18.0 + version: 0.18.0 lucide-react: specifier: ^0.447.0 version: 0.447.0(react@18.3.1) @@ -98,6 +134,13 @@ packages: } engines: { node: '>=10' } + '@babel/runtime@7.25.7': + resolution: + { + integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==, + } + engines: { node: '>=6.9.0' } + '@eslint-community/eslint-utils@4.4.0': resolution: { @@ -128,6 +171,33 @@ packages: } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + '@floating-ui/core@1.6.8': + resolution: + { + integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==, + } + + '@floating-ui/dom@1.6.11': + resolution: + { + integrity: sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==, + } + + '@floating-ui/react-dom@2.1.2': + resolution: + { + integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==, + } + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.8': + resolution: + { + integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==, + } + '@humanwhocodes/config-array@0.13.0': resolution: { @@ -190,6 +260,201 @@ packages: integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==, } + '@juggle/resize-observer@3.4.0': + resolution: + { + integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==, + } + + '@lexical/clipboard@0.18.0': + resolution: + { + integrity: sha512-ybc+hx14wj0n2ZjdOkLcZ02MRB3UprXjpLDXlByFIuVcZpUxVcp3NzA0UBPOKXYKvdt0bmgjnAsFWM5OSbwS0w==, + } + + '@lexical/code@0.18.0': + resolution: + { + integrity: sha512-VB8fRHIrB8QTqyZUvGBMVWP2tpKe3ArOjPdWAqgrS8MVFldqUhuTHcW+XJFkVxcEBYCXynNT29YRYtQhfQ+vDQ==, + } + + '@lexical/devtools-core@0.18.0': + resolution: + { + integrity: sha512-gVgtEkLwGjz1frOmDpFJzDPFxPgAcC9n5ZaaZWHo5GLcptnQmkuLm1t+UInQWujXhFmcyJzfiqDaMJ8EIcb2Ww==, + } + peerDependencies: + react: '>=17.x' + react-dom: '>=17.x' + + '@lexical/dragon@0.18.0': + resolution: + { + integrity: sha512-toD/y2/TgtG+eFVKXf65kDk/Mv02FwgmcGH18nyAabZnO1TLBaMYPkGFdTTZ8hVmQxqIu9nZuLWUbdIBMs8UWw==, + } + + '@lexical/hashtag@0.18.0': + resolution: + { + integrity: sha512-bm+Sv7keguVYbUY0ngd+iAv2Owd3dePzdVkzkmw9Al8GPXkE5ll8fjq6Xjw2u3OVhf+9pTnesIo/AS7H+h0exw==, + } + + '@lexical/history@0.18.0': + resolution: + { + integrity: sha512-c87J4ke1Sae03coElJay2Ikac/4OcA2OmhtNbt2gAi/XBtcsP4mPuz1yZfZf9XIe+weekObgjinvZekQ2AFw0g==, + } + + '@lexical/html@0.18.0': + resolution: + { + integrity: sha512-8lhba1DFnnobXgYm4Rk5Gr2tZedD4Gl6A/NKCt7whO/CET63vT3UnK2ggcVVgtIJG530Cv0bdZoJbJu5DauI5w==, + } + + '@lexical/link@0.18.0': + resolution: + { + integrity: sha512-GCYcbNTSTwJk0lr+GMc8nn6Meq44BZs3QL2d1B0skpZAspd8yI53sRS6HDy5P+jW5P0dzyZr/XJAU4U+7zsEEg==, + } + + '@lexical/list@0.18.0': + resolution: + { + integrity: sha512-DEWs9Scbg3+STZeE2O0OoG8SWnKnxQccObBzyeHRjn4GAN6JA7lgcAzfrdgp0fNWTbMM/ku876MmXKGnqhvg9Q==, + } + + '@lexical/mark@0.18.0': + resolution: + { + integrity: sha512-QA4YWfTP5WWnCnoH/RmfcsSZyhhd7oeFWDpfP7S8Bbmhz6kiPwGcsVr+uRQBBT56AqEX167xX2rX8JR6FiYZqA==, + } + + '@lexical/markdown@0.18.0': + resolution: + { + integrity: sha512-uSWwcK8eJw5C+waEhU5WoX8W+JxNZbKuFnZwsn5nsp+iQgqMj4qY6g0yJub4sq8vvh6jjl4vVXhXTq2up9aykw==, + } + + '@lexical/offset@0.18.0': + resolution: + { + integrity: sha512-KGlboyLSxQAH5PMOlJmyvHlbYXZneVnKiHpfyBV5IUX5kuyB/eZbQEYcJP9saekfQ5Xb1FWXWmsZEo+sWtrrZA==, + } + + '@lexical/overflow@0.18.0': + resolution: + { + integrity: sha512-3ATTwttVgZtVLq60ZUWbpbXBbpuMa3PZD5CxSP3nulviL+2I4phvacV4WUN+8wMeq+PGmuarl+cYfrFL02ii3g==, + } + + '@lexical/plain-text@0.18.0': + resolution: + { + integrity: sha512-L6yQpiwW0ZacY1oNwvRBxSuW2TZaUcveZLheJc8JzGcZoVxzII/CAbLZG8691VbNuKsbOURiNXZIsgwujKmo4Q==, + } + + '@lexical/react@0.18.0': + resolution: + { + integrity: sha512-DLvIbTsjvFIFqm+9zvAjEwuZHAbSxzZf1AGqf1lLctlL/Ran0f+8EZOv5jttELTe7xISZ2+xSXTLRfyxhNwGXQ==, + } + peerDependencies: + react: '>=17.x' + react-dom: '>=17.x' + + '@lexical/rich-text@0.18.0': + resolution: + { + integrity: sha512-xMANCB7WueMsmWK8qxik5FZN4ApyaHWHQILS9r4FTbdv/DlNepsR7Pt8kg2317xZ56NAueQLIdyyKYXG1nBrHw==, + } + + '@lexical/selection@0.18.0': + resolution: + { + integrity: sha512-mJoMhmxeZLfM9K2JMYETs9u179IkHQUlgtYG5GZJHjKx2iUn+9KvJ9RVssq+Lusi7C/N42wWPGNHDPdUvFtxXg==, + } + + '@lexical/table@0.18.0': + resolution: + { + integrity: sha512-TeTAnuFAAgVjm1QE8adRB3GFWN+DUUiS4vzGq+ynPRCtNdpmW27NmTkRMyxKsetUtt7nIFfj4DvLvor4RwqIpA==, + } + + '@lexical/text@0.18.0': + resolution: + { + integrity: sha512-MTHSBeq3K0+lqSsP5oysBMnY4tPVhB8kAa2xBnEc3dYgXFxEEvJwZahbHNX93EPObtJkxXfUuI63Al4G3lYK8A==, + } + + '@lexical/utils@0.18.0': + resolution: + { + integrity: sha512-4s9dVpBZjqIaA/1q2GtfWFjKsv2Wqhjer0Zw2mcl1TIVN0zreXxcTKN316QppAWmSQJxVGvkWHjjaZJwl6/TSw==, + } + + '@lexical/yjs@0.18.0': + resolution: + { + integrity: sha512-rl7Rl9XIb3ygQEEHOFtACdXs3BE+UUUmdyNqB6kK9A6IRGz+w4Azp+qzt8It/t+c0oaSYHpAtcLNXg1amJz+kA==, + } + peerDependencies: + yjs: '>=13.5.22' + + '@liveblocks/client@2.8.2': + resolution: + { + integrity: sha512-pDZ6qGn6JTeKdsLNuQK/y1eMFlilxIfaGW1ZVgQ903OSLLAs1HvQip4M5OUiHIoq9W/pHUwK7prD9dQs8vs6xw==, + } + + '@liveblocks/core@2.8.2': + resolution: + { + integrity: sha512-Wwn/KY0tQ8YnCdnIcNJCJvPNg8iH/qvBLAu9kOTVDdRuH9d0H5dcWUGPGSKtAm4KXQwgqGS3Pm2nALd3lbU+wA==, + } + + '@liveblocks/node@2.8.2': + resolution: + { + integrity: sha512-58HKV1TIfVea0l1v/UmdoG3aEUOhuuTidpwIFmxcahEiA5lfAuI4/Q7pYGBgASh8xBivvvBqnR9wnqTk8zgsfw==, + } + + '@liveblocks/react-lexical@2.8.2': + resolution: + { + integrity: sha512-x0kBVhwwHPJKOAn1yKl+M1TeQfmBSSsQT2HfTJRJ7Pd+7wr1RHzHOysrOZ8lnZyqVEimaOWwZrLd7B3zGeu+vw==, + } + peerDependencies: + '@lexical/react': 0.16.1 + '@lexical/utils': 0.16.1 + '@lexical/yjs': 0.16.1 + lexical: 0.16.1 + react: ^16.14.0 || ^17 || ^18 + react-dom: ^16.14.0 || ^17 || ^18 + + '@liveblocks/react-ui@2.8.2': + resolution: + { + integrity: sha512-ZyGvHdYJaxkunHsyzf8X+dDpEcWqE3FeRlDuZFVB5y+g32IWHxZpHy2sx08d1AyIwViiprVuVjaWUz5e7oBbmw==, + } + peerDependencies: + react: ^16.14.0 || ^17 || ^18 + + '@liveblocks/react@2.8.2': + resolution: + { + integrity: sha512-N2K1fIBBmD+e/x+f9ph/SauoK86HGn/02l4lG2jV+9FCykrJ0tpjMw5gMxB82AnLx1rui1GZ/aT9F8yDCBe1uQ==, + } + peerDependencies: + react: ^16.14.0 || ^17 || ^18 + + '@liveblocks/yjs@2.8.2': + resolution: + { + integrity: sha512-oPxmexzEcppAUNLOa5qhiSxMZRJWYfWKUHn7Hk3ETaxti1UbM3xmLRT74rh2hAG3ZaZj7c/AvWIQIOISu5CIYQ==, + } + peerDependencies: + yjs: ^13.6.1 + '@next/env@14.2.14': resolution: { @@ -287,45 +552,419 @@ packages: cpu: [x64] os: [win32] - '@nodelib/fs.scandir@2.1.5': + '@nodelib/fs.scandir@2.1.5': + resolution: + { + integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, + } + engines: { node: '>= 8' } + + '@nodelib/fs.stat@2.0.5': + resolution: + { + integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, + } + engines: { node: '>= 8' } + + '@nodelib/fs.walk@1.2.8': + resolution: + { + integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, + } + engines: { node: '>= 8' } + + '@nolyfill/is-core-module@1.0.39': + resolution: + { + integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==, + } + engines: { node: '>=12.4.0' } + + '@pkgjs/parseargs@0.11.0': + resolution: + { + integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==, + } + engines: { node: '>=14' } + + '@radix-ui/primitive@1.1.0': + resolution: + { + integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==, + } + + '@radix-ui/react-arrow@1.1.0': + resolution: + { + integrity: sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==, + } + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-collection@1.1.0': + resolution: + { + integrity: sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==, + } + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-compose-refs@1.1.0': + resolution: + { + integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==, + } + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-context@1.1.0': + resolution: + { + integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==, + } + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-context@1.1.1': + resolution: + { + integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==, + } + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-direction@1.1.0': + resolution: + { + integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==, + } + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dismissable-layer@1.1.1': + resolution: + { + integrity: sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==, + } + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-dropdown-menu@2.1.2': + resolution: + { + integrity: sha512-GVZMR+eqK8/Kes0a36Qrv+i20bAPXSn8rCBTHx30w+3ECnR5o3xixAlqcVaYvLeyKUsm0aqyhWfmUcqufM8nYA==, + } + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-focus-guards@1.1.1': + resolution: + { + integrity: sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==, + } + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-focus-scope@1.1.0': + resolution: + { + integrity: sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==, + } + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-id@1.1.0': + resolution: + { + integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==, + } + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-menu@2.1.2': + resolution: + { + integrity: sha512-lZ0R4qR2Al6fZ4yCCZzu/ReTFrylHFxIqy7OezIpWF4bL0o9biKo0pFIvkaew3TyZ9Fy5gYVrR5zCGZBVbO1zg==, + } + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popover@1.1.2': + resolution: + { + integrity: sha512-u2HRUyWW+lOiA2g0Le0tMmT55FGOEWHwPFt1EPfbLly7uXQExFo5duNKqG2DzmFXIdqOeNd+TpE8baHWJCyP9w==, + } + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popper@1.2.0': + resolution: + { + integrity: sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==, + } + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-portal@1.1.2': + resolution: + { + integrity: sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==, + } + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-presence@1.1.1': + resolution: + { + integrity: sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==, + } + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-primitive@2.0.0': + resolution: + { + integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==, + } + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-roving-focus@1.1.0': + resolution: + { + integrity: sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==, + } + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-slot@1.1.0': + resolution: + { + integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==, + } + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-toggle@1.1.0': + resolution: + { + integrity: sha512-gwoxaKZ0oJ4vIgzsfESBuSgJNdc0rv12VhHgcqN0TEJmmZixXG/2XpsLK8kzNWYcnaoRIEEQc0bEi3dIvdUpjw==, + } + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-tooltip@1.1.3': + resolution: + { + integrity: sha512-Z4w1FIS0BqVFI2c1jZvb/uDVJijJjJ2ZMuPV81oVgTZ7g3BZxobplnMVvXtFWgtozdvYJ+MFWtwkM5S2HnAong==, + } + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-use-callback-ref@1.1.0': resolution: { - integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, + integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==, } - engines: { node: '>= 8' } + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - '@nodelib/fs.stat@2.0.5': + '@radix-ui/react-use-controllable-state@1.1.0': resolution: { - integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, + integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==, } - engines: { node: '>= 8' } + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - '@nodelib/fs.walk@1.2.8': + '@radix-ui/react-use-escape-keydown@1.1.0': resolution: { - integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, + integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==, } - engines: { node: '>= 8' } + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - '@nolyfill/is-core-module@1.0.39': + '@radix-ui/react-use-layout-effect@1.1.0': resolution: { - integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==, + integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==, } - engines: { node: '>=12.4.0' } + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - '@pkgjs/parseargs@0.11.0': + '@radix-ui/react-use-rect@1.1.0': resolution: { - integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==, + integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==, } - engines: { node: '>=14' } + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - '@radix-ui/react-compose-refs@1.1.0': + '@radix-ui/react-use-size@1.1.0': resolution: { - integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==, + integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==, } peerDependencies: '@types/react': '*' @@ -334,17 +973,27 @@ packages: '@types/react': optional: true - '@radix-ui/react-slot@1.1.0': + '@radix-ui/react-visually-hidden@1.1.0': resolution: { - integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==, + integrity: sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==, } peerDependencies: '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true + '@types/react-dom': + optional: true + + '@radix-ui/rect@1.1.0': + resolution: + { + integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==, + } '@rtsao/scc@1.1.0': resolution: @@ -358,6 +1007,12 @@ packages: integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==, } + '@stablelib/base64@1.0.1': + resolution: + { + integrity: sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ==, + } + '@swc/counter@0.1.3': resolution: { @@ -370,12 +1025,24 @@ packages: integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==, } + '@types/is-hotkey@0.1.10': + resolution: + { + integrity: sha512-RvC8KMw5BCac1NvRRyaHgMMEtBaZ6wh0pyPTBu7izn4Sj/AX9Y4aXU5c7rX8PnM/knsuUpC1IeoBkANtxBypsQ==, + } + '@types/json5@0.0.29': resolution: { integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==, } + '@types/lodash@4.17.10': + resolution: + { + integrity: sha512-YpS0zzoduEhuOWjAotS6A5AVCva7X4lVlYLF0FYHAY9sdraBfnatttHItlWeZdGhuEkf+OzMNg2ZYAx8t+52uQ==, + } + '@types/node@20.16.10': resolution: { @@ -569,6 +1236,13 @@ packages: integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, } + aria-hidden@1.2.4: + resolution: + { + integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==, + } + engines: { node: '>=10' } + aria-query@5.1.3: resolution: { @@ -778,6 +1452,13 @@ packages: integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==, } + cliui@8.0.1: + resolution: + { + integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, + } + engines: { node: '>=12' } + clsx@2.0.0: resolution: { @@ -825,6 +1506,12 @@ packages: } engines: { node: '>= 6' } + compute-scroll-into-view@3.1.0: + resolution: + { + integrity: sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==, + } + concat-map@0.0.1: resolution: { @@ -929,12 +1616,25 @@ packages: } engines: { node: '>= 0.4' } + detect-node-es@1.1.0: + resolution: + { + integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==, + } + didyoumean@1.2.2: resolution: { integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==, } + direction@1.0.4: + resolution: + { + integrity: sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ==, + } + hasBin: true + dlv@1.1.3: resolution: { @@ -1054,6 +1754,13 @@ packages: } engines: { node: '>= 0.4' } + escalade@3.2.0: + resolution: + { + integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==, + } + engines: { node: '>=6' } + escape-string-regexp@4.0.0: resolution: { @@ -1284,6 +1991,12 @@ packages: integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, } + fast-sha256@1.3.0: + resolution: + { + integrity: sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==, + } + fastq@1.17.1: resolution: { @@ -1337,6 +2050,13 @@ packages: } engines: { node: '>=14' } + fs-extra@10.1.0: + resolution: + { + integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==, + } + engines: { node: '>=12' } + fs.realpath@1.0.0: resolution: { @@ -1370,6 +2090,13 @@ packages: integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, } + get-caller-file@2.0.5: + resolution: + { + integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, + } + engines: { node: 6.* || 8.* || >= 10.* } + get-east-asian-width@1.2.0: resolution: { @@ -1384,6 +2111,13 @@ packages: } engines: { node: '>= 0.4' } + get-nonce@1.0.1: + resolution: + { + integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==, + } + engines: { node: '>=6' } + get-stream@8.0.1: resolution: { @@ -1541,6 +2275,12 @@ packages: } engines: { node: '>= 4' } + immer@10.1.1: + resolution: + { + integrity: sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==, + } + immutable@4.3.7: resolution: { @@ -1581,6 +2321,12 @@ packages: } engines: { node: '>= 0.4' } + invariant@2.2.4: + resolution: + { + integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==, + } + is-arguments@1.1.1: resolution: { @@ -1704,6 +2450,12 @@ packages: } engines: { node: '>=0.10.0' } + is-hotkey@0.2.0: + resolution: + { + integrity: sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==, + } + is-map@2.0.3: resolution: { @@ -1739,6 +2491,13 @@ packages: } engines: { node: '>=8' } + is-plain-object@5.0.0: + resolution: + { + integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==, + } + engines: { node: '>=0.10.0' } + is-regex@1.1.4: resolution: { @@ -1820,6 +2579,12 @@ packages: integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, } + isomorphic.js@0.2.5: + resolution: + { + integrity: sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==, + } + iterator.prototype@1.1.2: resolution: { @@ -1846,6 +2611,12 @@ packages: } hasBin: true + js-base64@3.7.7: + resolution: + { + integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==, + } + js-tokens@4.0.0: resolution: { @@ -1859,6 +2630,19 @@ packages: } hasBin: true + jsm-editor@0.0.12: + resolution: + { + integrity: sha512-G8czmO+eLS2TgcsYxejks8s7B1WRJxED9kJL16c0G/oAFpd+1rAsm3Ca3hwiMq4TuyqCTnOKyAoUsEXFU8HbPw==, + } + hasBin: true + peerDependencies: + '@lexical/react': ^0.16.1 + '@lexical/rich-text': ^0.16.1 + '@lexical/selection': ^0.16.1 + '@lexical/utils': ^0.16.1 + lexical: ^0.16.1 + json-buffer@3.0.1: resolution: { @@ -1884,6 +2668,12 @@ packages: } hasBin: true + jsonfile@6.1.0: + resolution: + { + integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==, + } + jsx-ast-utils@3.3.5: resolution: { @@ -1917,6 +2707,20 @@ packages: } engines: { node: '>= 0.8.0' } + lexical@0.18.0: + resolution: + { + integrity: sha512-3K/B0RpzjoW+Wj2E455wWXxkqxqK8UgdIiuqkOqdOsoSSo5mCkHOU6eVw7Nlmlr1MFvAMzGmz4RPn8NZaLQ2Mw==, + } + + lib0@0.2.98: + resolution: + { + integrity: sha512-XteTiNO0qEXqqweWx+b21p/fBnNHUA1NwAtJNJek1oPrewEZs2uiT4gWivHKr9GqCjDPAhchz0UQO8NwU3bBNA==, + } + engines: { node: '>=16' } + hasBin: true + lilconfig@2.1.0: resolution: { @@ -1965,6 +2769,12 @@ packages: integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, } + lodash@4.17.21: + resolution: + { + integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, + } + log-update@6.1.0: resolution: { @@ -2100,6 +2910,18 @@ packages: sass: optional: true + node-fetch@2.7.0: + resolution: + { + integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==, + } + engines: { node: 4.x || >=6.0.0 } + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + normalize-path@3.0.0: resolution: { @@ -2476,6 +3298,13 @@ packages: engines: { node: '>=14' } hasBin: true + prismjs@1.29.0: + resolution: + { + integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==, + } + engines: { node: '>=6' } + prop-types@15.8.1: resolution: { @@ -2503,12 +3332,70 @@ packages: peerDependencies: react: ^18.3.1 + react-error-boundary@3.1.4: + resolution: + { + integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==, + } + engines: { node: '>=10', npm: '>=6' } + peerDependencies: + react: '>=16.13.1' + react-is@16.13.1: resolution: { integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==, } + react-remove-scroll-bar@2.3.6: + resolution: + { + integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==, + } + engines: { node: '>=10' } + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.6.0: + resolution: + { + integrity: sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==, + } + engines: { node: '>=10' } + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-style-singleton@2.2.1: + resolution: + { + integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==, + } + engines: { node: '>=10' } + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-virtuoso@4.10.4: + resolution: + { + integrity: sha512-G/gprhTbK+lzMxoo/iStcZxVEGph/cIhc3WANEpt92RuMw+LiCZOmBfKoeoZOHlm/iyftTrDJhGaTCpxyucnkQ==, + } + engines: { node: '>=10' } + peerDependencies: + react: '>=16 || >=17 || >= 18' + react-dom: '>=16 || >=17 || >= 18' + react@18.3.1: resolution: { @@ -2543,6 +3430,12 @@ packages: } engines: { node: '>= 0.4' } + regenerator-runtime@0.14.1: + resolution: + { + integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==, + } + regexp.prototype.flags@1.5.3: resolution: { @@ -2550,6 +3443,13 @@ packages: } engines: { node: '>= 0.4' } + require-directory@2.1.1: + resolution: + { + integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, + } + engines: { node: '>=0.10.0' } + resolve-from@4.0.0: resolution: { @@ -2639,6 +3539,12 @@ packages: integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==, } + scroll-into-view-if-needed@3.1.0: + resolution: + { + integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==, + } + semver@6.3.1: resolution: { @@ -2673,28 +3579,60 @@ packages: { integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, } - engines: { node: '>=8' } + engines: { node: '>=8' } + + shebang-regex@3.0.0: + resolution: + { + integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, + } + engines: { node: '>=8' } + + side-channel@1.0.6: + resolution: + { + integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==, + } + engines: { node: '>= 0.4' } + + signal-exit@4.1.0: + resolution: + { + integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==, + } + engines: { node: '>=14' } + + slate-history@0.100.0: + resolution: + { + integrity: sha512-x5rUuWLNtH97hs9PrFovGgt3Qc5zkTm/5mcUB+0NR/TK923eLax4HsL6xACLHMs245nI6aJElyM1y6hN0y5W/Q==, + } + peerDependencies: + slate: '>=0.65.3' - shebang-regex@3.0.0: + slate-hyperscript@0.100.0: resolution: { - integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, + integrity: sha512-fb2KdAYg6RkrQGlqaIi4wdqz3oa0S4zKNBJlbnJbNOwa23+9FLD6oPVx9zUGqCSIpy+HIpOeqXrg0Kzwh/Ii4A==, } - engines: { node: '>=8' } + peerDependencies: + slate: '>=0.65.3' - side-channel@1.0.6: + slate-react@0.102.0: resolution: { - integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==, + integrity: sha512-SAcFsK5qaOxXjm0hr/t2pvIxfRv6HJGzmWkG58TdH4LdJCsgKS1n6hQOakHPlRVCwPgwvngB6R+t3pPjv8MqwA==, } - engines: { node: '>= 0.4' } + peerDependencies: + react: '>=18.2.0' + react-dom: '>=18.2.0' + slate: '>=0.99.0' - signal-exit@4.1.0: + slate@0.102.0: resolution: { - integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==, + integrity: sha512-RT+tHgqOyZVB1oFV9Pv99ajwh4OUCN9p28QWdnDTIzaN/kZxMsHeQN39UNAgtkZTVVVygFqeg7/R2jiptCvfyA==, } - engines: { node: '>=14' } slice-ansi@5.0.0: resolution: @@ -2919,6 +3857,18 @@ packages: integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==, } + tiny-invariant@1.3.1: + resolution: + { + integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==, + } + + tiny-warning@1.0.3: + resolution: + { + integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==, + } + to-regex-range@5.0.1: resolution: { @@ -2926,6 +3876,12 @@ packages: } engines: { node: '>=8.0' } + tr46@0.0.3: + resolution: + { + integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==, + } + ts-api-utils@1.3.0: resolution: { @@ -3015,18 +3971,71 @@ packages: integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==, } + universalify@2.0.1: + resolution: + { + integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==, + } + engines: { node: '>= 10.0.0' } + uri-js@4.4.1: resolution: { integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, } + use-callback-ref@1.3.2: + resolution: + { + integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==, + } + engines: { node: '>=10' } + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + use-sidecar@1.1.2: + resolution: + { + integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==, + } + engines: { node: '>=10' } + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + use-sync-external-store@1.2.2: + resolution: + { + integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==, + } + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + util-deprecate@1.0.2: resolution: { integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, } + webidl-conversions@3.0.1: + resolution: + { + integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==, + } + + whatwg-url@5.0.0: + resolution: + { + integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==, + } + which-boxed-primitive@1.0.2: resolution: { @@ -3096,6 +4105,13 @@ packages: integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, } + y18n@5.0.8: + resolution: + { + integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, + } + engines: { node: '>=10' } + yaml@2.5.1: resolution: { @@ -3104,6 +4120,27 @@ packages: engines: { node: '>= 14' } hasBin: true + yargs-parser@21.1.1: + resolution: + { + integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, + } + engines: { node: '>=12' } + + yargs@17.7.2: + resolution: + { + integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==, + } + engines: { node: '>=12' } + + yjs@13.6.19: + resolution: + { + integrity: sha512-GNKw4mEUn5yWU2QPHRx8jppxmCm9KzbBhB4qJLUJFiiYD0g/tDVgXQ7aPkyh01YO28kbs2J/BEbWBagjuWyejw==, + } + engines: { node: '>=16.0.0', npm: '>=8.0.0' } + yocto-queue@0.1.0: resolution: { @@ -3114,6 +4151,10 @@ packages: snapshots: '@alloc/quick-lru@5.2.0': {} + '@babel/runtime@7.25.7': + dependencies: + regenerator-runtime: 0.14.1 + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)': dependencies: eslint: 8.57.1 @@ -3137,6 +4178,23 @@ snapshots: '@eslint/js@8.57.1': {} + '@floating-ui/core@1.6.8': + dependencies: + '@floating-ui/utils': 0.2.8 + + '@floating-ui/dom@1.6.11': + dependencies: + '@floating-ui/core': 1.6.8 + '@floating-ui/utils': 0.2.8 + + '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/dom': 1.6.11 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@floating-ui/utils@0.2.8': {} + '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 @@ -3158,90 +4216,601 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@jridgewell/gen-mapping@0.3.5': + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@juggle/resize-observer@3.4.0': {} + + '@lexical/clipboard@0.18.0': + dependencies: + '@lexical/html': 0.18.0 + '@lexical/list': 0.18.0 + '@lexical/selection': 0.18.0 + '@lexical/utils': 0.18.0 + lexical: 0.18.0 + + '@lexical/code@0.18.0': + dependencies: + '@lexical/utils': 0.18.0 + lexical: 0.18.0 + prismjs: 1.29.0 + + '@lexical/devtools-core@0.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@lexical/html': 0.18.0 + '@lexical/link': 0.18.0 + '@lexical/mark': 0.18.0 + '@lexical/table': 0.18.0 + '@lexical/utils': 0.18.0 + lexical: 0.18.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@lexical/dragon@0.18.0': + dependencies: + lexical: 0.18.0 + + '@lexical/hashtag@0.18.0': + dependencies: + '@lexical/utils': 0.18.0 + lexical: 0.18.0 + + '@lexical/history@0.18.0': + dependencies: + '@lexical/utils': 0.18.0 + lexical: 0.18.0 + + '@lexical/html@0.18.0': + dependencies: + '@lexical/selection': 0.18.0 + '@lexical/utils': 0.18.0 + lexical: 0.18.0 + + '@lexical/link@0.18.0': + dependencies: + '@lexical/utils': 0.18.0 + lexical: 0.18.0 + + '@lexical/list@0.18.0': + dependencies: + '@lexical/utils': 0.18.0 + lexical: 0.18.0 + + '@lexical/mark@0.18.0': + dependencies: + '@lexical/utils': 0.18.0 + lexical: 0.18.0 + + '@lexical/markdown@0.18.0': + dependencies: + '@lexical/code': 0.18.0 + '@lexical/link': 0.18.0 + '@lexical/list': 0.18.0 + '@lexical/rich-text': 0.18.0 + '@lexical/text': 0.18.0 + '@lexical/utils': 0.18.0 + lexical: 0.18.0 + + '@lexical/offset@0.18.0': + dependencies: + lexical: 0.18.0 + + '@lexical/overflow@0.18.0': + dependencies: + lexical: 0.18.0 + + '@lexical/plain-text@0.18.0': + dependencies: + '@lexical/clipboard': 0.18.0 + '@lexical/selection': 0.18.0 + '@lexical/utils': 0.18.0 + lexical: 0.18.0 + + '@lexical/react@0.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(yjs@13.6.19)': + dependencies: + '@lexical/clipboard': 0.18.0 + '@lexical/code': 0.18.0 + '@lexical/devtools-core': 0.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@lexical/dragon': 0.18.0 + '@lexical/hashtag': 0.18.0 + '@lexical/history': 0.18.0 + '@lexical/link': 0.18.0 + '@lexical/list': 0.18.0 + '@lexical/mark': 0.18.0 + '@lexical/markdown': 0.18.0 + '@lexical/overflow': 0.18.0 + '@lexical/plain-text': 0.18.0 + '@lexical/rich-text': 0.18.0 + '@lexical/selection': 0.18.0 + '@lexical/table': 0.18.0 + '@lexical/text': 0.18.0 + '@lexical/utils': 0.18.0 + '@lexical/yjs': 0.18.0(yjs@13.6.19) + lexical: 0.18.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-error-boundary: 3.1.4(react@18.3.1) + transitivePeerDependencies: + - yjs + + '@lexical/rich-text@0.18.0': + dependencies: + '@lexical/clipboard': 0.18.0 + '@lexical/selection': 0.18.0 + '@lexical/utils': 0.18.0 + lexical: 0.18.0 + + '@lexical/selection@0.18.0': + dependencies: + lexical: 0.18.0 + + '@lexical/table@0.18.0': + dependencies: + '@lexical/clipboard': 0.18.0 + '@lexical/utils': 0.18.0 + lexical: 0.18.0 + + '@lexical/text@0.18.0': + dependencies: + lexical: 0.18.0 + + '@lexical/utils@0.18.0': + dependencies: + '@lexical/list': 0.18.0 + '@lexical/selection': 0.18.0 + '@lexical/table': 0.18.0 + lexical: 0.18.0 + + '@lexical/yjs@0.18.0(yjs@13.6.19)': + dependencies: + '@lexical/offset': 0.18.0 + '@lexical/selection': 0.18.0 + lexical: 0.18.0 + yjs: 13.6.19 + + '@liveblocks/client@2.8.2': + dependencies: + '@liveblocks/core': 2.8.2 + + '@liveblocks/core@2.8.2': {} + + '@liveblocks/node@2.8.2': + dependencies: + '@liveblocks/core': 2.8.2 + '@stablelib/base64': 1.0.1 + fast-sha256: 1.3.0 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + '@liveblocks/react-lexical@2.8.2(@lexical/react@0.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(yjs@13.6.19))(@lexical/utils@0.18.0)(@lexical/yjs@0.18.0(yjs@13.6.19))(@types/react-dom@18.3.0)(@types/react@18.3.11)(lexical@0.18.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@lexical/react': 0.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(yjs@13.6.19) + '@lexical/utils': 0.18.0 + '@lexical/yjs': 0.18.0(yjs@13.6.19) + '@liveblocks/client': 2.8.2 + '@liveblocks/core': 2.8.2 + '@liveblocks/react': 2.8.2(react@18.3.1) + '@liveblocks/react-ui': 2.8.2(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@liveblocks/yjs': 2.8.2(yjs@13.6.19) + lexical: 0.18.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + use-sync-external-store: 1.2.2(react@18.3.1) + yjs: 13.6.19 + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + + '@liveblocks/react-ui@2.8.2(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@liveblocks/client': 2.8.2 + '@liveblocks/core': 2.8.2 + '@liveblocks/react': 2.8.2(react@18.3.1) + '@radix-ui/react-dropdown-menu': 2.1.2(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-popover': 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-toggle': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-tooltip': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-virtuoso: 4.10.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + slate: 0.102.0 + slate-history: 0.100.0(slate@0.102.0) + slate-hyperscript: 0.100.0(slate@0.102.0) + slate-react: 0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.102.0) + use-sync-external-store: 1.2.2(react@18.3.1) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + - react-dom + + '@liveblocks/react@2.8.2(react@18.3.1)': + dependencies: + '@liveblocks/client': 2.8.2 + '@liveblocks/core': 2.8.2 + react: 18.3.1 + use-sync-external-store: 1.2.2(react@18.3.1) + + '@liveblocks/yjs@2.8.2(yjs@13.6.19)': + dependencies: + '@liveblocks/client': 2.8.2 + '@liveblocks/core': 2.8.2 + js-base64: 3.7.7 + yjs: 13.6.19 + + '@next/env@14.2.14': {} + + '@next/eslint-plugin-next@14.2.14': + dependencies: + glob: 10.3.10 + + '@next/swc-darwin-arm64@14.2.14': + optional: true + + '@next/swc-darwin-x64@14.2.14': + optional: true + + '@next/swc-linux-arm64-gnu@14.2.14': + optional: true + + '@next/swc-linux-arm64-musl@14.2.14': + optional: true + + '@next/swc-linux-x64-gnu@14.2.14': + optional: true + + '@next/swc-linux-x64-musl@14.2.14': + optional: true + + '@next/swc-win32-arm64-msvc@14.2.14': + optional: true + + '@next/swc-win32-ia32-msvc@14.2.14': + optional: true + + '@next/swc-win32-x64-msvc@14.2.14': + optional: true + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@nolyfill/is-core-module@1.0.39': {} + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@radix-ui/primitive@1.1.0': {} + + '@radix-ui/react-arrow@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.11 + '@types/react-dom': 18.3.0 + + '@radix-ui/react-collection@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.11)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.11 + '@types/react-dom': 18.3.0 + + '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.11)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.11 + + '@radix-ui/react-context@1.1.0(@types/react@18.3.11)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.11 + + '@radix-ui/react-context@1.1.1(@types/react@18.3.11)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.11 + + '@radix-ui/react-direction@1.1.0(@types/react@18.3.11)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.11 + + '@radix-ui/react-dismissable-layer@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.11)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.11 + '@types/react-dom': 18.3.0 - '@jridgewell/set-array@1.2.1': {} + '@radix-ui/react-dropdown-menu@2.1.2(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-menu': 2.1.2(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.11)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.11 + '@types/react-dom': 18.3.0 - '@jridgewell/sourcemap-codec@1.5.0': {} + '@radix-ui/react-focus-guards@1.1.1(@types/react@18.3.11)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.11 - '@jridgewell/trace-mapping@0.3.25': + '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.11)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.11 + '@types/react-dom': 18.3.0 - '@next/env@14.2.14': {} + '@radix-ui/react-id@1.1.0(@types/react@18.3.11)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.11)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.11 - '@next/eslint-plugin-next@14.2.14': + '@radix-ui/react-menu@2.1.2(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - glob: 10.3.10 + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.11)(react@18.3.1) + aria-hidden: 1.2.4 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.6.0(@types/react@18.3.11)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.11 + '@types/react-dom': 18.3.0 - '@next/swc-darwin-arm64@14.2.14': - optional: true + '@radix-ui/react-popover@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.11)(react@18.3.1) + aria-hidden: 1.2.4 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.6.0(@types/react@18.3.11)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.11 + '@types/react-dom': 18.3.0 - '@next/swc-darwin-x64@14.2.14': - optional: true + '@radix-ui/react-popper@1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-arrow': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/rect': 1.1.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.11 + '@types/react-dom': 18.3.0 - '@next/swc-linux-arm64-gnu@14.2.14': - optional: true + '@radix-ui/react-portal@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.11)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.11 + '@types/react-dom': 18.3.0 - '@next/swc-linux-arm64-musl@14.2.14': - optional: true + '@radix-ui/react-presence@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.11)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.11 + '@types/react-dom': 18.3.0 - '@next/swc-linux-x64-gnu@14.2.14': - optional: true + '@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.11)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.11 + '@types/react-dom': 18.3.0 - '@next/swc-linux-x64-musl@14.2.14': - optional: true + '@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.11)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.11 + '@types/react-dom': 18.3.0 - '@next/swc-win32-arm64-msvc@14.2.14': - optional: true + '@radix-ui/react-slot@1.1.0(@types/react@18.3.11)(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.11)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.11 - '@next/swc-win32-ia32-msvc@14.2.14': - optional: true + '@radix-ui/react-toggle@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.11)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.11 + '@types/react-dom': 18.3.0 - '@next/swc-win32-x64-msvc@14.2.14': - optional: true + '@radix-ui/react-tooltip@1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.11 + '@types/react-dom': 18.3.0 - '@nodelib/fs.scandir@2.1.5': + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.11)(react@18.3.1)': dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.11 - '@nodelib/fs.stat@2.0.5': {} + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.11)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.11)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.11 - '@nodelib/fs.walk@1.2.8': + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.11)(react@18.3.1)': dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.11)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.11 - '@nolyfill/is-core-module@1.0.39': {} + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.11)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.11 - '@pkgjs/parseargs@0.11.0': - optional: true + '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.11)(react@18.3.1)': + dependencies: + '@radix-ui/rect': 1.1.0 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.11 - '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.11)(react@18.3.1)': + '@radix-ui/react-use-size@1.1.0(@types/react@18.3.11)(react@18.3.1)': dependencies: + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.11)(react@18.3.1) react: 18.3.1 optionalDependencies: '@types/react': 18.3.11 - '@radix-ui/react-slot@1.1.0(@types/react@18.3.11)(react@18.3.1)': + '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.11 + '@types/react-dom': 18.3.0 + + '@radix-ui/rect@1.1.0': {} '@rtsao/scc@1.1.0': {} '@rushstack/eslint-patch@1.10.4': {} + '@stablelib/base64@1.0.1': {} + '@swc/counter@0.1.3': {} '@swc/helpers@0.5.5': @@ -3249,8 +4818,12 @@ snapshots: '@swc/counter': 0.1.3 tslib: 2.7.0 + '@types/is-hotkey@0.1.10': {} + '@types/json5@0.0.29': {} + '@types/lodash@4.17.10': {} + '@types/node@20.16.10': dependencies: undici-types: 6.19.8 @@ -3387,6 +4960,10 @@ snapshots: argparse@2.0.1: {} + aria-hidden@1.2.4: + dependencies: + tslib: 2.7.0 + aria-query@5.1.3: dependencies: deep-equal: 2.2.3 @@ -3539,6 +5116,12 @@ snapshots: client-only@0.0.1: {} + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + clsx@2.0.0: {} clsx@2.1.1: {} @@ -3555,6 +5138,8 @@ snapshots: commander@4.1.1: {} + compute-scroll-into-view@3.1.0: {} + concat-map@0.0.1: {} cross-spawn@7.0.3: @@ -3630,8 +5215,12 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + detect-node-es@1.1.0: {} + didyoumean@1.2.2: {} + direction@1.0.4: {} + dlv@1.1.3: {} doctrine@2.1.0: @@ -3761,6 +5350,8 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.0.4 + escalade@3.2.0: {} + escape-string-regexp@4.0.0: {} eslint-config-next@14.2.14(eslint@8.57.1)(typescript@5.6.2): @@ -4006,6 +5597,8 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-sha256@1.3.0: {} + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -4040,6 +5633,12 @@ snapshots: cross-spawn: 7.0.3 signal-exit: 4.1.0 + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -4056,6 +5655,8 @@ snapshots: functions-have-names@1.2.3: {} + get-caller-file@2.0.5: {} + get-east-asian-width@1.2.0: {} get-intrinsic@1.2.4: @@ -4066,6 +5667,8 @@ snapshots: has-symbols: 1.0.3 hasown: 2.0.2 + get-nonce@1.0.1: {} + get-stream@8.0.1: {} get-symbol-description@1.0.2: @@ -4155,6 +5758,8 @@ snapshots: ignore@5.3.2: {} + immer@10.1.1: {} + immutable@4.3.7: {} import-fresh@3.3.0: @@ -4177,6 +5782,10 @@ snapshots: hasown: 2.0.2 side-channel: 1.0.6 + invariant@2.2.4: + dependencies: + loose-envify: 1.4.0 + is-arguments@1.1.1: dependencies: call-bind: 1.0.7 @@ -4244,6 +5853,8 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-hotkey@0.2.0: {} + is-map@2.0.3: {} is-negative-zero@2.0.3: {} @@ -4256,6 +5867,8 @@ snapshots: is-path-inside@3.0.3: {} + is-plain-object@5.0.0: {} + is-regex@1.1.4: dependencies: call-bind: 1.0.7 @@ -4296,6 +5909,8 @@ snapshots: isexe@2.0.0: {} + isomorphic.js@0.2.5: {} + iterator.prototype@1.1.2: dependencies: define-properties: 1.2.1 @@ -4318,12 +5933,27 @@ snapshots: jiti@1.21.6: {} + js-base64@3.7.7: {} + js-tokens@4.0.0: {} js-yaml@4.1.0: dependencies: argparse: 2.0.1 + jsm-editor@0.0.12(@lexical/react@0.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(yjs@13.6.19))(@lexical/rich-text@0.18.0)(@lexical/selection@0.18.0)(@lexical/utils@0.18.0)(lexical@0.18.0): + dependencies: + '@lexical/react': 0.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(yjs@13.6.19) + '@lexical/rich-text': 0.18.0 + '@lexical/selection': 0.18.0 + '@lexical/utils': 0.18.0 + '@types/react-dom': 18.3.0 + fs-extra: 10.1.0 + lexical: 0.18.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + yargs: 17.7.2 + json-buffer@3.0.1: {} json-schema-traverse@0.4.1: {} @@ -4334,6 +5964,12 @@ snapshots: dependencies: minimist: 1.2.8 + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 @@ -4356,6 +5992,12 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + lexical@0.18.0: {} + + lib0@0.2.98: + dependencies: + isomorphic.js: 0.2.5 + lilconfig@2.1.0: {} lilconfig@3.1.2: {} @@ -4392,6 +6034,8 @@ snapshots: lodash.merge@4.6.2: {} + lodash@4.17.21: {} + log-update@6.1.0: dependencies: ansi-escapes: 7.0.0 @@ -4473,6 +6117,10 @@ snapshots: - '@babel/core' - babel-plugin-macros + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + normalize-path@3.0.0: {} npm-run-path@5.3.0: @@ -4644,6 +6292,8 @@ snapshots: prettier@3.3.3: {} + prismjs@1.29.0: {} + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 @@ -4660,8 +6310,46 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 + react-error-boundary@3.1.4(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.7 + react: 18.3.1 + react-is@16.13.1: {} + react-remove-scroll-bar@2.3.6(@types/react@18.3.11)(react@18.3.1): + dependencies: + react: 18.3.1 + react-style-singleton: 2.2.1(@types/react@18.3.11)(react@18.3.1) + tslib: 2.7.0 + optionalDependencies: + '@types/react': 18.3.11 + + react-remove-scroll@2.6.0(@types/react@18.3.11)(react@18.3.1): + dependencies: + react: 18.3.1 + react-remove-scroll-bar: 2.3.6(@types/react@18.3.11)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.11)(react@18.3.1) + tslib: 2.7.0 + use-callback-ref: 1.3.2(@types/react@18.3.11)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.3.11)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.11 + + react-style-singleton@2.2.1(@types/react@18.3.11)(react@18.3.1): + dependencies: + get-nonce: 1.0.1 + invariant: 2.2.4 + react: 18.3.1 + tslib: 2.7.0 + optionalDependencies: + '@types/react': 18.3.11 + + react-virtuoso@4.10.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react@18.3.1: dependencies: loose-envify: 1.4.0 @@ -4686,6 +6374,8 @@ snapshots: globalthis: 1.0.4 which-builtin-type: 1.1.4 + regenerator-runtime@0.14.1: {} + regexp.prototype.flags@1.5.3: dependencies: call-bind: 1.0.7 @@ -4693,6 +6383,8 @@ snapshots: es-errors: 1.3.0 set-function-name: 2.0.2 + require-directory@2.1.1: {} + resolve-from@4.0.0: {} resolve-pkg-maps@1.0.0: {} @@ -4749,6 +6441,10 @@ snapshots: dependencies: loose-envify: 1.4.0 + scroll-into-view-if-needed@3.1.0: + dependencies: + compute-scroll-into-view: 3.1.0 + semver@6.3.1: {} semver@7.6.3: {} @@ -4784,6 +6480,37 @@ snapshots: signal-exit@4.1.0: {} + slate-history@0.100.0(slate@0.102.0): + dependencies: + is-plain-object: 5.0.0 + slate: 0.102.0 + + slate-hyperscript@0.100.0(slate@0.102.0): + dependencies: + is-plain-object: 5.0.0 + slate: 0.102.0 + + slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.102.0): + dependencies: + '@juggle/resize-observer': 3.4.0 + '@types/is-hotkey': 0.1.10 + '@types/lodash': 4.17.10 + direction: 1.0.4 + is-hotkey: 0.2.0 + is-plain-object: 5.0.0 + lodash: 4.17.21 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + scroll-into-view-if-needed: 3.1.0 + slate: 0.102.0 + tiny-invariant: 1.3.1 + + slate@0.102.0: + dependencies: + immer: 10.1.1 + is-plain-object: 5.0.0 + tiny-warning: 1.0.3 + slice-ansi@5.0.0: dependencies: ansi-styles: 6.2.1 @@ -4946,10 +6673,16 @@ snapshots: dependencies: any-promise: 1.3.0 + tiny-invariant@1.3.1: {} + + tiny-warning@1.0.3: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 + tr46@0.0.3: {} + ts-api-utils@1.3.0(typescript@5.6.2): dependencies: typescript: 5.6.2 @@ -5014,12 +6747,40 @@ snapshots: undici-types@6.19.8: {} + universalify@2.0.1: {} + uri-js@4.4.1: dependencies: punycode: 2.3.1 + use-callback-ref@1.3.2(@types/react@18.3.11)(react@18.3.1): + dependencies: + react: 18.3.1 + tslib: 2.7.0 + optionalDependencies: + '@types/react': 18.3.11 + + use-sidecar@1.1.2(@types/react@18.3.11)(react@18.3.1): + dependencies: + detect-node-es: 1.1.0 + react: 18.3.1 + tslib: 2.7.0 + optionalDependencies: + '@types/react': 18.3.11 + + use-sync-external-store@1.2.2(react@18.3.1): + dependencies: + react: 18.3.1 + util-deprecate@1.0.2: {} + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 @@ -5084,6 +6845,24 @@ snapshots: wrappy@1.0.2: {} + y18n@5.0.8: {} + yaml@2.5.1: {} + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yjs@13.6.19: + dependencies: + lib0: 0.2.98 + yocto-queue@0.1.0: {} diff --git a/public/assets/icons/add.svg b/public/assets/icons/add.svg new file mode 100644 index 0000000..6a0e78b --- /dev/null +++ b/public/assets/icons/add.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/icons/arrow-clockwise.svg b/public/assets/icons/arrow-clockwise.svg new file mode 100644 index 0000000..b072eb0 --- /dev/null +++ b/public/assets/icons/arrow-clockwise.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/assets/icons/arrow-counterclockwise.svg b/public/assets/icons/arrow-counterclockwise.svg new file mode 100644 index 0000000..b0b23b9 --- /dev/null +++ b/public/assets/icons/arrow-counterclockwise.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/assets/icons/bell.svg b/public/assets/icons/bell.svg new file mode 100644 index 0000000..6f73aff --- /dev/null +++ b/public/assets/icons/bell.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/assets/icons/close.svg b/public/assets/icons/close.svg new file mode 100644 index 0000000..5fff3ef --- /dev/null +++ b/public/assets/icons/close.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/icons/comment.svg b/public/assets/icons/comment.svg new file mode 100644 index 0000000..de84bc7 --- /dev/null +++ b/public/assets/icons/comment.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/icons/delete-modal.svg b/public/assets/icons/delete-modal.svg new file mode 100644 index 0000000..2b88298 --- /dev/null +++ b/public/assets/icons/delete-modal.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/assets/icons/delete.svg b/public/assets/icons/delete.svg new file mode 100644 index 0000000..a140ddb --- /dev/null +++ b/public/assets/icons/delete.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/icons/doc.svg b/public/assets/icons/doc.svg new file mode 100644 index 0000000..0df2bcd --- /dev/null +++ b/public/assets/icons/doc.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/icons/edit.svg b/public/assets/icons/edit.svg new file mode 100644 index 0000000..58979e6 --- /dev/null +++ b/public/assets/icons/edit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/icons/file.svg b/public/assets/icons/file.svg new file mode 100644 index 0000000..5518b3a --- /dev/null +++ b/public/assets/icons/file.svg @@ -0,0 +1,24 @@ + + + + \ No newline at end of file diff --git a/public/assets/icons/h1.svg b/public/assets/icons/h1.svg new file mode 100644 index 0000000..e71bdc2 --- /dev/null +++ b/public/assets/icons/h1.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/assets/icons/h2.svg b/public/assets/icons/h2.svg new file mode 100644 index 0000000..ecc48c5 --- /dev/null +++ b/public/assets/icons/h2.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/assets/icons/h3.svg b/public/assets/icons/h3.svg new file mode 100644 index 0000000..b61fb5b --- /dev/null +++ b/public/assets/icons/h3.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/assets/icons/journal-text.svg b/public/assets/icons/journal-text.svg new file mode 100644 index 0000000..9b66f43 --- /dev/null +++ b/public/assets/icons/journal-text.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/assets/icons/justify.svg b/public/assets/icons/justify.svg new file mode 100644 index 0000000..009bd72 --- /dev/null +++ b/public/assets/icons/justify.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/assets/icons/loader.svg b/public/assets/icons/loader.svg new file mode 100644 index 0000000..2652fc8 --- /dev/null +++ b/public/assets/icons/loader.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/assets/icons/logo-icon.svg b/public/assets/icons/logo-icon.svg new file mode 100644 index 0000000..306941e --- /dev/null +++ b/public/assets/icons/logo-icon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/public/assets/icons/logo.svg b/public/assets/icons/logo.svg new file mode 100644 index 0000000..cf00b09 --- /dev/null +++ b/public/assets/icons/logo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/public/assets/icons/more.svg b/public/assets/icons/more.svg new file mode 100644 index 0000000..2b91124 --- /dev/null +++ b/public/assets/icons/more.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/icons/share.svg b/public/assets/icons/share.svg new file mode 100644 index 0000000..dc703b0 --- /dev/null +++ b/public/assets/icons/share.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/assets/icons/text-center.svg b/public/assets/icons/text-center.svg new file mode 100644 index 0000000..2887a99 --- /dev/null +++ b/public/assets/icons/text-center.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/assets/icons/text-left.svg b/public/assets/icons/text-left.svg new file mode 100644 index 0000000..0452611 --- /dev/null +++ b/public/assets/icons/text-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/assets/icons/text-paragraph.svg b/public/assets/icons/text-paragraph.svg new file mode 100644 index 0000000..9779bea --- /dev/null +++ b/public/assets/icons/text-paragraph.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/assets/icons/text-right.svg b/public/assets/icons/text-right.svg new file mode 100644 index 0000000..34686b0 --- /dev/null +++ b/public/assets/icons/text-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/assets/icons/type-bold.svg b/public/assets/icons/type-bold.svg new file mode 100644 index 0000000..276d133 --- /dev/null +++ b/public/assets/icons/type-bold.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/assets/icons/type-italic.svg b/public/assets/icons/type-italic.svg new file mode 100644 index 0000000..3ac6b09 --- /dev/null +++ b/public/assets/icons/type-italic.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/assets/icons/type-strikethrough.svg b/public/assets/icons/type-strikethrough.svg new file mode 100644 index 0000000..1c940e4 --- /dev/null +++ b/public/assets/icons/type-strikethrough.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/assets/icons/type-underline.svg b/public/assets/icons/type-underline.svg new file mode 100644 index 0000000..c299b8b --- /dev/null +++ b/public/assets/icons/type-underline.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/assets/images/doc.png b/public/assets/images/doc.png new file mode 100644 index 0000000000000000000000000000000000000000..4e68277ff696faa6c8ceda8491072f4d52e87c28 GIT binary patch literal 12859 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

Ni0?(SU{f-Rs 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 literal 0 HcmV?d00001 diff --git a/public/assets/images/logo.png b/public/assets/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7cd9c7305f066d29e410cdebd52abbec695fe9a0 GIT binary patch literal 9800 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 iR>sO$87t%O`S||@Aeqcaxtg2+0000 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Ν9Vba9l)IqDs|vc;pMDfDx6)V-{r4h{+9fIW;~>6 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 Q0000007*qoM6N<$g3Fot)&Kwi literal 0 HcmV?d00001 diff --git a/public/next.svg b/public/next.svg new file mode 100644 index 0000000..5174b28 --- /dev/null +++ b/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/vercel.svg b/public/vercel.svg new file mode 100644 index 0000000..d2f8422 --- /dev/null +++ b/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/app/(root)/page.tsx b/src/app/(root)/page.tsx index baf7375..36afcea 100644 --- a/src/app/(root)/page.tsx +++ b/src/app/(root)/page.tsx @@ -1,11 +1,11 @@ import { NextPage } from 'next'; -import { Button } from '@/common/components/ui/button'; +import { Editor } from '@/common/components/editor/Editor'; const HomePage: NextPage = () => { return (

); }; diff --git a/src/common/components/editor/Editor.tsx b/src/common/components/editor/Editor.tsx new file mode 100644 index 0000000..5ed4ed6 --- /dev/null +++ b/src/common/components/editor/Editor.tsx @@ -0,0 +1,90 @@ +'use client'; + +import { AutoFocusPlugin } from '@lexical/react/LexicalAutoFocusPlugin'; +import { LexicalComposer } from '@lexical/react/LexicalComposer'; +import { ContentEditable } from '@lexical/react/LexicalContentEditable'; +import { LexicalErrorBoundary } from '@lexical/react/LexicalErrorBoundary'; +import { HistoryPlugin } from '@lexical/react/LexicalHistoryPlugin'; +import { RichTextPlugin } from '@lexical/react/LexicalRichTextPlugin'; +import { HeadingNode } from '@lexical/rich-text'; +import { useThreads } from '@liveblocks/react/suspense'; +import { + FloatingComposer, + FloatingThreads, + liveblocksConfig, + LiveblocksPlugin, + useEditorStatus, +} from '@liveblocks/react-lexical'; + +import FloatingToolbarPlugin from './plugins/FloatingToolbarPlugin'; +import Theme from './plugins/Theme'; +import ToolbarPlugin from './plugins/ToolbarPlugin'; +import Comments from '../Comments'; +import { DeleteModal } from '../DeleteModal'; +import Loader from '../Loader'; + +// Catch any errors that occur during Lexical updates and log them +// or throw them as needed. If you don't throw them, Lexical will +// try to recover gracefully without losing user data. + +function Placeholder() { + return
Enter some rich text...
; +} + +export function Editor({ + roomId, + currentUserType, +}: { + roomId: string; + currentUserType: UserType; +}) { + const status = useEditorStatus(); + const { threads } = useThreads(); + + const initialConfig = liveblocksConfig({ + namespace: 'Editor', + nodes: [HeadingNode], + onError: (error: Error) => { + console.error(error); + throw error; + }, + theme: Theme, + editable: currentUserType === 'editor', + }); + + return ( + +
+
+ + {currentUserType === 'editor' && } +
+ +
+ {status === 'not-loaded' || status === 'loading' ? ( + + ) : ( +
+ + } + placeholder={} + ErrorBoundary={LexicalErrorBoundary} + /> + {currentUserType === 'editor' && } + + +
+ )} + + + + + + +
+
+
+ ); +} diff --git a/src/common/components/editor/plugins/FloatingToolbarPlugin.tsx b/src/common/components/editor/plugins/FloatingToolbarPlugin.tsx new file mode 100644 index 0000000..db09b38 --- /dev/null +++ b/src/common/components/editor/plugins/FloatingToolbarPlugin.tsx @@ -0,0 +1,261 @@ +import { + autoUpdate, + flip, + hide, + limitShift, + offset, + shift, + size, + useFloating, +} from '@floating-ui/react-dom'; +import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'; +import { OPEN_FLOATING_COMPOSER_COMMAND } from '@liveblocks/react-lexical'; +import type { LexicalEditor, LexicalNode } from 'lexical'; +import { $getSelection, $isRangeSelection, $isTextNode } from 'lexical'; +import Image from 'next/image'; +import { useEffect, useLayoutEffect, useState } from 'react'; +import { createPortal } from 'react-dom'; + +export default function FloatingToolbar() { + const [editor] = useLexicalComposerContext(); + + const [range, setRange] = useState(null); + + useEffect(() => { + editor.registerUpdateListener(({ tags }) => { + return editor.getEditorState().read(() => { + // Ignore selection updates related to collaboration + if (tags.has('collaboration')) return; + + const selection = $getSelection(); + if (!$isRangeSelection(selection) || selection.isCollapsed()) { + setRange(null); + return; + } + + const { anchor, focus } = selection; + + const range = createDOMRange( + editor, + anchor.getNode(), + anchor.offset, + focus.getNode(), + focus.offset + ); + + setRange(range); + }); + }); + }, [editor]); + + if (range === null) return null; + + return ( + + ); +} + +function Toolbar({ + range, + onRangeChange, + container, +}: { + range: Range; + onRangeChange: (range: Range | null) => void; + container: HTMLElement; +}) { + const [editor] = useLexicalComposerContext(); + + const padding = 20; + + const { + refs: { setReference, setFloating }, + strategy, + x, + y, + } = useFloating({ + strategy: 'fixed', + placement: 'bottom', + middleware: [ + flip({ padding, crossAxis: false }), + offset(10), + hide({ padding }), + shift({ padding, limiter: limitShift() }), + size({ padding }), + ], + whileElementsMounted: (...args) => { + return autoUpdate(...args, { + animationFrame: true, + }); + }, + }); + + useLayoutEffect(() => { + setReference({ + getBoundingClientRect: () => range.getBoundingClientRect(), + }); + }, [setReference, range]); + + return createPortal( +
+
+ +
+
, + container + ); +} + +/** + * MIT License + * Copyright (c) Meta Platforms, Inc. and affiliates. + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +function getDOMTextNode(element: Node | null): Text | null { + let node = element; + + while (node !== null) { + if (node.nodeType === Node.TEXT_NODE) { + return node as Text; + } + + node = node.firstChild; + } + + return null; +} + +function getDOMIndexWithinParent(node: ChildNode): [ParentNode, number] { + const parent = node.parentNode; + + if (parent === null) { + throw new Error('Should never happen'); + } + + return [parent, Array.from(parent.childNodes).indexOf(node)]; +} + +/** + * Creates a selection range for the DOM. + * @param editor - The lexical editor. + * @param anchorNode - The anchor node of a selection. + * @param _anchorOffset - The amount of space offset from the anchor to the focus. + * @param focusNode - The current focus. + * @param _focusOffset - The amount of space offset from the focus to the anchor. + * @returns The range of selection for the DOM that was created. + */ +export function createDOMRange( + editor: LexicalEditor, + anchorNode: LexicalNode, + _anchorOffset: number, + focusNode: LexicalNode, + _focusOffset: number +): Range | null { + const anchorKey = anchorNode.getKey(); + const focusKey = focusNode.getKey(); + const range = document.createRange(); + let anchorDOM: Node | Text | null = editor.getElementByKey(anchorKey); + let focusDOM: Node | Text | null = editor.getElementByKey(focusKey); + let anchorOffset = _anchorOffset; + let focusOffset = _focusOffset; + + if ($isTextNode(anchorNode)) { + anchorDOM = getDOMTextNode(anchorDOM); + } + + if ($isTextNode(focusNode)) { + focusDOM = getDOMTextNode(focusDOM); + } + + if ( + anchorNode === undefined || + focusNode === undefined || + anchorDOM === null || + focusDOM === null + ) { + return null; + } + + if (anchorDOM.nodeName === 'BR') { + [anchorDOM, anchorOffset] = getDOMIndexWithinParent(anchorDOM as ChildNode); + } + + if (focusDOM.nodeName === 'BR') { + [focusDOM, focusOffset] = getDOMIndexWithinParent(focusDOM as ChildNode); + } + + const firstChild = anchorDOM.firstChild; + + if ( + anchorDOM === focusDOM && + firstChild !== null && + firstChild.nodeName === 'BR' && + anchorOffset === 0 && + focusOffset === 0 + ) { + focusOffset = 1; + } + + try { + range.setStart(anchorDOM, anchorOffset); + range.setEnd(focusDOM, focusOffset); + } catch (e) { + return null; + } + + if ( + range.collapsed && + (anchorOffset !== focusOffset || anchorKey !== focusKey) + ) { + // Range is backwards, we need to reverse it + range.setStart(focusDOM, focusOffset); + range.setEnd(anchorDOM, anchorOffset); + } + + return range; +} diff --git a/src/common/components/editor/plugins/Theme.ts b/src/common/components/editor/plugins/Theme.ts new file mode 100644 index 0000000..69e806e --- /dev/null +++ b/src/common/components/editor/plugins/Theme.ts @@ -0,0 +1,43 @@ +/* eslint-disable import/no-anonymous-default-export */ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ +export default { + code: 'editor-code', + heading: { + h1: 'editor-heading-h1', + h2: 'editor-heading-h2', + h3: 'editor-heading-h3', + h4: 'editor-heading-h4', + h5: 'editor-heading-h5', + }, + image: 'editor-image', + link: 'editor-link', + list: { + listitem: 'editor-listitem', + nested: { + listitem: 'editor-nested-listitem', + }, + ol: 'editor-list-ol', + ul: 'editor-list-ul', + }, + ltr: 'ltr', + paragraph: 'editor-paragraph', + placeholder: 'editor-placeholder', + quote: 'editor-quote', + rtl: 'rtl', + text: { + bold: 'editor-text-bold', + code: 'editor-text-code', + hashtag: 'editor-text-hashtag', + italic: 'editor-text-italic', + overflowed: 'editor-text-overflowed', + strikethrough: 'editor-text-strikethrough', + underline: 'editor-text-underline', + underlineStrikethrough: 'editor-text-underlineStrikethrough', + }, +}; diff --git a/src/common/components/editor/plugins/ToolbarPlugin.tsx b/src/common/components/editor/plugins/ToolbarPlugin.tsx new file mode 100644 index 0000000..76163cb --- /dev/null +++ b/src/common/components/editor/plugins/ToolbarPlugin.tsx @@ -0,0 +1,288 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ +import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'; +import { + $createHeadingNode, + $createQuoteNode, + $isHeadingNode, +} from '@lexical/rich-text'; +import { $setBlocksType } from '@lexical/selection'; +import { $findMatchingParent, mergeRegister } from '@lexical/utils'; +import { + $createParagraphNode, + $getSelection, + $isRangeSelection, + $isRootOrShadowRoot, + CAN_REDO_COMMAND, + CAN_UNDO_COMMAND, + FORMAT_ELEMENT_COMMAND, + FORMAT_TEXT_COMMAND, + REDO_COMMAND, + SELECTION_CHANGE_COMMAND, + UNDO_COMMAND, +} from 'lexical'; +import { + useCallback, + useEffect, + useRef, + useState, + useSyncExternalStore, +} from 'react'; + +const LowPriority = 1; + +function Divider() { + return
; +} + +export default function ToolbarPlugin() { + const [editor] = useLexicalComposerContext(); + const toolbarRef = useRef(null); + const [canUndo, setCanUndo] = useState(false); + const [canRedo, setCanRedo] = useState(false); + const [isBold, setIsBold] = useState(false); + const [isItalic, setIsItalic] = useState(false); + const [isUnderline, setIsUnderline] = useState(false); + const [isStrikethrough, setIsStrikethrough] = useState(false); + const activeBlock = useActiveBlock(); + + const $updateToolbar = useCallback(() => { + const selection = $getSelection(); + if ($isRangeSelection(selection)) { + // Update text format + setIsBold(selection.hasFormat('bold')); + setIsItalic(selection.hasFormat('italic')); + setIsUnderline(selection.hasFormat('underline')); + setIsStrikethrough(selection.hasFormat('strikethrough')); + } + }, []); + + useEffect(() => { + return mergeRegister( + editor.registerUpdateListener(({ editorState }) => { + editorState.read(() => { + $updateToolbar(); + }); + }), + editor.registerCommand( + SELECTION_CHANGE_COMMAND, + (_payload, _newEditor) => { + $updateToolbar(); + return false; + }, + LowPriority + ), + editor.registerCommand( + CAN_UNDO_COMMAND, + (payload) => { + setCanUndo(payload); + return false; + }, + LowPriority + ), + editor.registerCommand( + CAN_REDO_COMMAND, + (payload) => { + setCanRedo(payload); + return false; + }, + LowPriority + ) + ); + }, [editor, $updateToolbar]); + + function toggleBlock(type: 'h1' | 'h2' | 'h3' | 'quote') { + const selection = $getSelection(); + + if (activeBlock === type) { + return $setBlocksType(selection, () => $createParagraphNode()); + } + + if (type === 'h1') { + return $setBlocksType(selection, () => $createHeadingNode('h1')); + } + + if (type === 'h2') { + return $setBlocksType(selection, () => $createHeadingNode('h2')); + } + + if (type === 'h3') { + return $setBlocksType(selection, () => $createHeadingNode('h3')); + } + + if (type === 'quote') { + return $setBlocksType(selection, () => $createQuoteNode()); + } + } + + return ( +
+ + + + + + + + + + + + + + + + {' '} +
+ ); +} + +function useActiveBlock() { + const [editor] = useLexicalComposerContext(); + + const subscribe = useCallback( + (onStoreChange: () => void) => { + return editor.registerUpdateListener(onStoreChange); + }, + [editor] + ); + + const getSnapshot = useCallback(() => { + return editor.getEditorState().read(() => { + const selection = $getSelection(); + if (!$isRangeSelection(selection)) return null; + + const anchor = selection.anchor.getNode(); + let element = + anchor.getKey() === 'root' + ? anchor + : $findMatchingParent(anchor, (e) => { + const parent = e.getParent(); + return parent !== null && $isRootOrShadowRoot(parent); + }); + + if (element === null) { + element = anchor.getTopLevelElementOrThrow(); + } + + if ($isHeadingNode(element)) { + return element.getTag(); + } + + return element.getType(); + }); + }, [editor]); + + return useSyncExternalStore(subscribe, getSnapshot, getSnapshot); +} diff --git a/src/common/styles/dark-theme.scss b/src/common/styles/dark-theme.scss new file mode 100644 index 0000000..8222d28 --- /dev/null +++ b/src/common/styles/dark-theme.scss @@ -0,0 +1,462 @@ +/* ======================== Lexical Editor */ + +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +body { + margin: 0; + font-family: + system-ui, + -apple-system, + BlinkMacSystemFont, + '.SFNSText-Regular', + sans-serif; + font-weight: 500; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.other h2 { + font-size: 18px; + color: #444; + margin-bottom: 7px; +} + +.other a { + color: #777; + text-decoration: underline; + font-size: 14px; +} + +.other ul { + padding: 0; + margin: 0; + list-style-type: none; +} + +.App { + font-family: sans-serif; + text-align: center; +} + +.ltr { + text-align: left; +} + +.rtl { + text-align: right; +} + +.editor-container { + border-radius: 2px; + color: #000; + line-height: 20px; + font-weight: 400; + text-align: left; +} + +.editor-inner { + background: #0b1527; + position: relative; +} + +.editor-input { + min-height: 400px; + resize: none; + font-size: 15px; + caret-color: rgb(5, 5, 5); + position: relative; + tab-size: 1; + outline: 0; + padding: 40px; + caret-color: #444; + color: #b4c6ee; +} + +.editor-placeholder { + color: #b4c6ee; + overflow: hidden; + position: absolute; + text-overflow: ellipsis; + top: 40px; + left: 40px; + font-size: 15px; + user-select: none; + display: inline-block; + pointer-events: none; +} + +.editor-text-bold { + font-weight: bold; +} + +.editor-text-italic { + font-style: italic; +} + +.editor-text-underline { + text-decoration: underline; +} + +.editor-text-strikethrough { + text-decoration: line-through; +} + +.editor-text-underlineStrikethrough { + text-decoration: underline line-through; +} + +.editor-text-code { + background-color: rgb(240, 242, 245); + padding: 1px 0.25rem; + font-family: Menlo, Consolas, Monaco, monospace; + font-size: 94%; +} + +.editor-link { + color: rgb(33, 111, 219); + text-decoration: none; +} + +.tree-view-output { + display: block; + background: #222; + color: #fff; + padding: 5px; + font-size: 12px; + white-space: pre-wrap; + margin: 1px auto 10px auto; + max-height: 250px; + position: relative; + border-bottom-left-radius: 10px; + border-bottom-right-radius: 10px; + overflow: auto; + line-height: 14px; +} + +.editor-code { + background-color: rgb(240, 242, 245); + font-family: Menlo, Consolas, Monaco, monospace; + display: block; + padding: 8px 8px 8px 52px; + line-height: 1.53; + font-size: 13px; + margin: 0; + margin-top: 8px; + margin-bottom: 8px; + tab-size: 2; + /* white-space: pre; */ + overflow-x: auto; + position: relative; +} + +.editor-code:before { + content: attr(data-gutter); + position: absolute; + background-color: #eee; + left: 0; + top: 0; + border-right: 1px solid #ccc; + padding: 8px; + color: #777; + white-space: pre-wrap; + text-align: right; + min-width: 25px; +} +.editor-code:after { + content: attr(data-highlight-language); + top: 0; + right: 3px; + padding: 3px; + font-size: 10px; + text-transform: uppercase; + position: absolute; + color: rgba(0, 0, 0, 0.5); +} + +.editor-tokenComment { + color: slategray; +} + +.editor-tokenPunctuation { + color: #999; +} + +.editor-tokenProperty { + color: #905; +} + +.editor-tokenSelector { + color: #690; +} + +.editor-tokenOperator { + color: #9a6e3a; +} + +.editor-tokenAttr { + color: #07a; +} + +.editor-tokenVariable { + color: #e90; +} + +.editor-tokenFunction { + color: #dd4a68; +} + +.editor-paragraph { + margin: 0; + margin-bottom: 8px; + position: relative; +} + +.editor-paragraph:last-child { + margin-bottom: 0; +} + +.editor-heading-h1 { + font-size: 2rem; + margin: 0; + margin-bottom: 12px; + padding: 0; +} + +.editor-heading-h2 { + font-size: 1.5rem; + margin: 0; + padding: 0; +} + +.editor-heading-h3 { + font-size: 1.25rem; + margin: 0; + padding: 0; +} + +.editor-quote { + margin: 0; + margin-left: 20px; + font-size: 15px; + color: rgb(101, 103, 107); + border-left-color: rgb(206, 208, 212); + border-left-width: 4px; + border-left-style: solid; + padding-left: 16px; +} + +.editor-list-ol { + padding: 0; + margin: 0; + margin-left: 16px; +} + +.editor-list-ul { + padding: 0; + margin: 0; + margin-left: 16px; +} + +.editor-listitem { + margin: 8px 32px 8px 32px; +} + +.editor-nested-listitem { + list-style-type: none; +} + +pre::-webkit-scrollbar { + background: transparent; + width: 10px; +} + +pre::-webkit-scrollbar-thumb { + background: #999; +} + +.debug-timetravel-panel { + overflow: hidden; + padding: 0 0 10px 0; + margin: auto; + display: flex; +} + +.debug-timetravel-panel-slider { + padding: 0; + flex: 8; +} + +.debug-timetravel-panel-button { + padding: 0; + border: 0; + background: none; + flex: 1; + color: #fff; + font-size: 12px; +} + +.debug-timetravel-panel-button:hover { + text-decoration: underline; +} + +.debug-timetravel-button { + border: 0; + padding: 0; + font-size: 12px; + top: 10px; + right: 15px; + position: absolute; + background: none; + color: #fff; +} + +.debug-timetravel-button:hover { + text-decoration: underline; +} + +.toolbar { + display: flex; + margin-bottom: 1px; + background: #09111f; + padding: 4px; + border-top-left-radius: 10px; + border-top-right-radius: 10px; + vertical-align: middle; +} + +.toolbar button.toolbar-item { + border: 0; + display: flex; + background: none; + border-radius: 0px; + padding: 8px; + cursor: pointer; + vertical-align: middle; +} + +.toolbar button.toolbar-item:disabled { + cursor: not-allowed; +} + +.toolbar button.toolbar-item.spaced { + margin-right: 2px; +} + +.toolbar button.toolbar-item i.format { + background-size: contain; + display: inline-block; + height: 18px; + width: 18px; + margin-top: 2px; + vertical-align: -0.25em; + display: flex; + opacity: 0.6; +} + +.toolbar button.toolbar-item:disabled i.format { + opacity: 0.2; +} + +.toolbar button.toolbar-item.active { + background-color: #0f1c34; +} + +.toolbar button.toolbar-item.active i { + opacity: 1; +} + +.toolbar .toolbar-item:hover:not([disabled]) { + background-color: #0f1c34; +} + +.toolbar .divider { + width: 1px; + background-color: #0f1c34; + margin: 0 4px; +} + +.toolbar .toolbar-item .text { + display: flex; + line-height: 20px; + width: 200px; + vertical-align: middle; + font-size: 14px; + color: #777; + text-overflow: ellipsis; + width: 70px; + overflow: hidden; + height: 20px; + text-align: left; +} + +.toolbar .toolbar-item .icon { + display: flex; + width: 20px; + height: 20px; + user-select: none; + margin-right: 8px; + line-height: 16px; + background-size: contain; +} + +.toolbar-item .format { + filter: invert(1); +} + +i.undo { + background-image: url(/assets/icons/arrow-counterclockwise.svg); +} + +i.redo { + background-image: url(/assets/icons/arrow-clockwise.svg); +} + +i.bold { + background-image: url(/assets/icons/type-bold.svg); +} + +i.italic { + background-image: url(/assets/icons/type-italic.svg); +} + +i.underline { + background-image: url(/assets/icons/type-underline.svg); +} + +i.strikethrough { + background-image: url(/assets/icons/type-strikethrough.svg); +} + +i.left-align { + background-image: url(/assets/icons/text-left.svg); +} + +i.center-align { + background-image: url(/assets/icons/text-center.svg); +} + +i.right-align { + background-image: url(/assets/icons/text-right.svg); +} + +i.justify-align { + background-image: url(/assets/icons/justify.svg); +} + +i.h1 { + background-image: url(/assets/icons/h1.svg); +} + +i.h2 { + background-image: url(/assets/icons/h2.svg); +} + +i.h3 { + background-image: url(/assets/icons/h3.svg); +} diff --git a/src/common/styles/globals.scss b/src/common/styles/globals.scss index 1723217..22f99e4 100644 --- a/src/common/styles/globals.scss +++ b/src/common/styles/globals.scss @@ -2,10 +2,10 @@ @tailwind components; @tailwind utilities; -// @import '@liveblocks/react-ui/styles.css'; -// @import '@liveblocks/react-lexical/styles.css'; +// @import '@liveblocks/react-ui/styles.scss'; +// @import '@liveblocks/react-lexical/styles.scss'; -// @import '../styles/dark-theme.css'; +@import './dark-theme.scss'; @layer base { :root { @@ -50,7 +50,7 @@ } .shad-dialog { - @apply bg-doc w-full max-w-[400px] rounded-xl border-none bg-cover px-5 py-7 shadow-xl sm:min-w-[500px] !important; + @apply w-full max-w-[400px] rounded-xl border-none bg-doc bg-cover px-5 py-7 shadow-xl sm:min-w-[500px] !important; } .shad-dialog button { @@ -66,15 +66,15 @@ } .shad-select-item { - @apply bg-dark-200 focus:bg-dark-300 hover:bg-dark-300 cursor-pointer text-blue-100 focus:text-blue-100 !important; + @apply cursor-pointer bg-dark-200 text-blue-100 hover:bg-dark-300 focus:bg-dark-300 focus:text-blue-100 !important; } .shad-popover { - @apply bg-dark-200 w-[460px] border-none shadow-lg !important; + @apply w-[460px] border-none bg-dark-200 shadow-lg !important; } .floating-toolbar { - @apply bg-dark-350 flex w-full min-w-max items-center justify-center gap-2 rounded-lg p-1.5 shadow-xl; + @apply flex w-full min-w-max items-center justify-center gap-2 rounded-lg bg-dark-350 p-1.5 shadow-xl; } .floating-toolbar-btn { @@ -82,7 +82,7 @@ } .toolbar-wrapper { - @apply custom-scrollbar border-dark-300 bg-dark-100 z-50 w-screen overflow-auto border-y pl-3 pr-4 shadow-sm; + @apply custom-scrollbar z-50 w-screen overflow-auto border-y border-dark-300 bg-dark-100 pl-3 pr-4 shadow-sm; } .editor-wrapper { @@ -90,7 +90,7 @@ } .header { - @apply bg-dark-100 flex min-h-[92px] w-full min-w-full flex-nowrap items-center justify-between gap-2 px-4; + @apply flex min-h-[92px] w-full min-w-full flex-nowrap items-center justify-between gap-2 bg-dark-100 px-4; } .document-list-container { @@ -102,11 +102,11 @@ } .document-list-item { - @apply bg-doc flex items-center justify-between gap-4 rounded-lg bg-cover p-5 shadow-xl; + @apply flex items-center justify-between gap-4 rounded-lg bg-doc bg-cover p-5 shadow-xl; } .document-list-empty { - @apply bg-dark-200 flex w-full max-w-[730px] flex-col items-center justify-center gap-5 rounded-lg px-10 py-8; + @apply flex w-full max-w-[730px] flex-col items-center justify-center gap-5 rounded-lg bg-dark-200 px-10 py-8; } .document-title-input { @@ -114,11 +114,11 @@ } .document-title { - @apply border-dark-400 line-clamp-1 text-base font-semibold leading-[24px] sm:pl-0 sm:text-xl; + @apply line-clamp-1 border-dark-400 text-base font-semibold leading-[24px] sm:pl-0 sm:text-xl; } .view-only-tag { - @apply bg-dark-400/50 rounded-md px-2 py-0.5 text-xs text-blue-100/50; + @apply rounded-md bg-dark-400/50 px-2 py-0.5 text-xs text-blue-100/50; } .collaborators-list { @@ -126,7 +126,7 @@ } .share-input { - @apply bg-dark-400 h-11 flex-1 border-none focus-visible:ring-0 focus-visible:ring-offset-0 !important; + @apply h-11 flex-1 border-none bg-dark-400 focus-visible:ring-0 focus-visible:ring-offset-0 !important; } .remove-btn { @@ -138,11 +138,11 @@ } .comment-composer { - @apply border-dark-300 bg-dark-200 w-full max-w-[800px] border shadow-sm lg:w-[350px]; + @apply w-full max-w-[800px] border border-dark-300 bg-dark-200 shadow-sm lg:w-[350px]; } .comment-thread { - @apply border-dark-300 bg-dark-200 w-full max-w-[800px] border shadow-sm transition-all lg:w-[350px]; + @apply w-full max-w-[800px] border border-dark-300 bg-dark-200 shadow-sm transition-all lg:w-[350px]; } .loader { diff --git a/src/common/styles/light-theme.scss b/src/common/styles/light-theme.scss new file mode 100644 index 0000000..24c4b96 --- /dev/null +++ b/src/common/styles/light-theme.scss @@ -0,0 +1,465 @@ +/* ======================== Lexical Editor */ + +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +body { + margin: 0; + font-family: + system-ui, + -apple-system, + BlinkMacSystemFont, + '.SFNSText-Regular', + sans-serif; + font-weight: 500; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* CLERK STYLES OVERRIDES */ +.cl-avatarBox { + width: 36px; + height: 36px; + border: 2px solid #2196f3; +} + +/* LEXICAL EDITOR STYLES */ +.other h2 { + font-size: 18px; + color: #444; + margin-bottom: 7px; +} + +.other a { + color: #777; + text-decoration: underline; + font-size: 14px; +} + +.other ul { + padding: 0; + margin: 0; + list-style-type: none; +} + +.App { + font-family: sans-serif; + text-align: center; +} + +.ltr { + text-align: left; +} + +.rtl { + text-align: right; +} + +.editor-container { + border-radius: 2px; + color: #000; + line-height: 20px; + font-weight: 400; + text-align: left; +} + +.editor-inner { + background: #fff; + position: relative; +} + +.editor-input { + min-height: 400px; + resize: none; + font-size: 15px; + caret-color: rgb(5, 5, 5); + position: relative; + tab-size: 1; + outline: 0; + padding: 40px; + caret-color: #444; +} + +.editor-placeholder { + color: #999; + overflow: hidden; + position: absolute; + text-overflow: ellipsis; + top: 40px; + left: 40px; + font-size: 15px; + user-select: none; + display: inline-block; + pointer-events: none; +} + +.editor-text-bold { + font-weight: bold; +} + +.editor-text-italic { + font-style: italic; +} + +.editor-text-underline { + text-decoration: underline; +} + +.editor-text-strikethrough { + text-decoration: line-through; +} + +.editor-text-underlineStrikethrough { + text-decoration: underline line-through; +} + +.editor-text-code { + background-color: rgb(240, 242, 245); + padding: 1px 0.25rem; + font-family: Menlo, Consolas, Monaco, monospace; + font-size: 94%; +} + +.editor-link { + color: rgb(33, 111, 219); + text-decoration: none; +} + +.tree-view-output { + display: block; + background: #222; + color: #fff; + padding: 5px; + font-size: 12px; + white-space: pre-wrap; + margin: 1px auto 10px auto; + max-height: 250px; + position: relative; + border-bottom-left-radius: 10px; + border-bottom-right-radius: 10px; + overflow: auto; + line-height: 14px; +} + +.editor-code { + background-color: rgb(240, 242, 245); + font-family: Menlo, Consolas, Monaco, monospace; + display: block; + padding: 8px 8px 8px 52px; + line-height: 1.53; + font-size: 13px; + margin: 0; + margin-top: 8px; + margin-bottom: 8px; + tab-size: 2; + white-space: pre; + overflow-x: auto; + position: relative; +} + +.editor-code:before { + content: attr(data-gutter); + position: absolute; + background-color: #eee; + left: 0; + top: 0; + border-right: 1px solid #ccc; + padding: 8px; + color: #777; + white-space: pre-wrap; + text-align: right; + min-width: 25px; +} +.editor-code:after { + content: attr(data-highlight-language); + top: 0; + right: 3px; + padding: 3px; + font-size: 10px; + text-transform: uppercase; + position: absolute; + color: rgba(0, 0, 0, 0.5); +} + +.editor-tokenComment { + color: slategray; +} + +.editor-tokenPunctuation { + color: #999; +} + +.editor-tokenProperty { + color: #905; +} + +.editor-tokenSelector { + color: #690; +} + +.editor-tokenOperator { + color: #9a6e3a; +} + +.editor-tokenAttr { + color: #07a; +} + +.editor-tokenVariable { + color: #e90; +} + +.editor-tokenFunction { + color: #dd4a68; +} + +.editor-paragraph { + margin: 0; + margin-bottom: 8px; + position: relative; +} + +.editor-paragraph:last-child { + margin-bottom: 0; +} + +.editor-heading-h1 { + font-size: 2rem; + margin: 0; + margin-bottom: 12px; + padding: 0; +} + +.editor-heading-h2 { + font-size: 1.5rem; + margin: 0; + padding: 0; +} + +.editor-heading-h3 { + font-size: 1.25rem; + margin: 0; + padding: 0; +} + +.editor-quote { + margin: 0; + margin-left: 20px; + font-size: 15px; + color: rgb(101, 103, 107); + border-left-color: rgb(206, 208, 212); + border-left-width: 4px; + border-left-style: solid; + padding-left: 16px; +} + +.editor-list-ol { + padding: 0; + margin: 0; + margin-left: 16px; +} + +.editor-list-ul { + padding: 0; + margin: 0; + margin-left: 16px; +} + +.editor-listitem { + margin: 8px 32px 8px 32px; +} + +.editor-nested-listitem { + list-style-type: none; +} + +pre::-webkit-scrollbar { + background: transparent; + width: 10px; +} + +pre::-webkit-scrollbar-thumb { + background: #999; +} + +.debug-timetravel-panel { + overflow: hidden; + padding: 0 0 10px 0; + margin: auto; + display: flex; +} + +.debug-timetravel-panel-slider { + padding: 0; + flex: 8; +} + +.debug-timetravel-panel-button { + padding: 0; + border: 0; + background: none; + flex: 1; + color: #fff; + font-size: 12px; +} + +.debug-timetravel-panel-button:hover { + text-decoration: underline; +} + +.debug-timetravel-button { + border: 0; + padding: 0; + font-size: 12px; + top: 10px; + right: 15px; + position: absolute; + background: none; + color: #fff; +} + +.debug-timetravel-button:hover { + text-decoration: underline; +} + +.toolbar { + display: flex; + margin-bottom: 1px; + background: #fff; + padding: 4px; + border-top-left-radius: 10px; + border-top-right-radius: 10px; + vertical-align: middle; +} + +.toolbar button.toolbar-item { + border: 0; + display: flex; + background: none; + border-radius: 10px; + padding: 8px; + cursor: pointer; + vertical-align: middle; +} + +.toolbar button.toolbar-item:disabled { + cursor: not-allowed; +} + +.toolbar button.toolbar-item.spaced { + margin-right: 2px; +} + +.toolbar button.toolbar-item i.format { + background-size: contain; + display: inline-block; + height: 18px; + width: 18px; + margin-top: 2px; + vertical-align: -0.25em; + display: flex; + opacity: 0.6; +} + +.toolbar button.toolbar-item:disabled i.format { + opacity: 0.2; +} + +.toolbar button.toolbar-item.active { + background-color: rgba(223, 232, 250, 0.3); +} + +.toolbar button.toolbar-item.active i { + opacity: 1; +} + +.toolbar .toolbar-item:hover:not([disabled]) { + background-color: #eee; +} + +.toolbar .divider { + width: 1px; + background-color: #eee; + margin: 0 4px; +} + +.toolbar .toolbar-item .text { + display: flex; + line-height: 20px; + width: 200px; + vertical-align: middle; + font-size: 14px; + color: #777; + text-overflow: ellipsis; + width: 70px; + overflow: hidden; + height: 20px; + text-align: left; +} + +.toolbar .toolbar-item .icon { + display: flex; + width: 20px; + height: 20px; + user-select: none; + margin-right: 8px; + line-height: 16px; + background-size: contain; +} + +i.undo { + background-image: url(/assets/icons/arrow-counterclockwise.svg); +} + +i.redo { + background-image: url(/assets/icons/arrow-clockwise.svg); +} + +i.bold { + background-image: url(/assets/icons/type-bold.svg); +} + +i.italic { + background-image: url(/assets/icons/type-italic.svg); +} + +i.underline { + background-image: url(/assets/icons/type-underline.svg); +} + +i.strikethrough { + background-image: url(/assets/icons/type-strikethrough.svg); +} + +i.left-align { + background-image: url(/assets/icons/text-left.svg); +} + +i.center-align { + background-image: url(/assets/icons/text-center.svg); +} + +i.right-align { + background-image: url(/assets/icons/text-right.svg); +} + +i.justify-align { + background-image: url(/assets/icons/justify.svg); +} + +i.h1 { + background-image: url(/assets/icons/h1.svg); +} + +i.h2 { + background-image: url(/assets/icons/h2.svg); +} + +i.h3 { + background-image: url(/assets/icons/h3.svg); +} diff --git a/src/common/types/index.d.ts b/src/common/types/index.d.ts new file mode 100644 index 0000000..e58698c --- /dev/null +++ b/src/common/types/index.d.ts @@ -0,0 +1,80 @@ +/* eslint-disable no-unused-vars */ +declare type SearchParamProps = { + params: { [key: string]: string }; + searchParams: { [key: string]: string | string[] | undefined }; +}; + +declare type AccessType = ['room:write'] | ['room:read', 'room:presence:write']; + +declare type RoomAccesses = Record; + +declare type UserType = 'creator' | 'editor' | 'viewer'; + +declare type RoomMetadata = { + creatorId: string; + email: string; + title: string; +}; + +declare type CreateDocumentParams = { + userId: string; + email: string; +}; + +declare type User = { + id: string; + name: string; + email: string; + avatar: string; + color: string; + userType?: UserType; +}; + +declare type ShareDocumentParams = { + roomId: string; + email: string; + userType: UserType; + updatedBy: User; +}; + +declare type UserTypeSelectorParams = { + userType: string; + setUserType: React.Dispatch>; + onClickHandler?: (value: string) => void; +}; + +declare type ShareDocumentDialogProps = { + roomId: string; + collaborators: User[]; + creatorId: string; + currentUserType: UserType; +}; + +declare type HeaderProps = { + children: React.ReactNode; + className?: string; +}; + +declare type CollaboratorProps = { + roomId: string; + email: string; + creatorId: string; + collaborator: User; + user: User; +}; + +declare type CollaborativeRoomProps = { + roomId: string; + roomMetadata: RoomMetadata; + users: User[]; + currentUserType: UserType; +}; + +declare type AddDocumentBtnProps = { + userId: string; + email: string; +}; + +declare type DeleteModalProps = { roomId: string }; + +declare type ThreadWrapperProps = { thread: ThreadData };