diff --git a/.github/labeler.yml b/.github/labeler.yml index 208c99e..1e3f1a8 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -1,63 +1,82 @@ # Automatically assigns labels to PRs based on file changes -# General Labels -'๐ŸŸข dependencies': - - 'package.json' - - 'pnpm-lock.yaml' - - 'yarn.lock' - - 'npm-shrinkwrap.json' +# General Labels +'๐Ÿฌ dependencies': + - changed-files: + - any-glob-to-any-file: + - 'package.json' + - 'pnpm-lock.yaml' + - 'yarn.lock' + - 'npm-shrinkwrap.json' -'changelog': - - 'CHANGELOG.md' +'๐Ÿ•” changelog': + - changed-files: + - any-glob-to-any-file: ['CHANGELOG.md'] -# โšก Electron-Specific Labels -'electron-main': - - 'src/main/**' - - 'electron/**' +# Electron-Specific Labels +'โšก electron-main': + - changed-files: + - any-glob-to-any-file: + - 'src/main/**' + - 'electron/**' 'electron-renderer': - - 'src/renderer/**' - - 'src/components/**' - - 'src/pages/**' + - changed-files: + - any-glob-to-any-file: + - 'src/renderer/**' + - 'src/components/**' + - 'src/pages/**' -# UI & Frontend +# UI & Frontend '๐ŸŽจ ui': - - 'src/renderer/assets/**' - - 'src/styles/**' - - 'src/css/**' + - changed-files: + - any-glob-to-any-file: + - 'src/renderer/assets/**' + - 'src/styles/**' + - 'src/css/**' -# Build & Configuration +# Build & Configuration '๐Ÿ—๏ธ build': - - 'webpack.config.js' - - 'vite.config.js' - - 'babel.config.js' - - 'tsconfig.json' - - 'esbuild.config.js' - - '.eslintrc.js' - - '.prettierrc' - - 'scripts/**' + - changed-files: + - any-glob-to-any-file: + - 'webpack.config.js' + - 'vite.config.js' + - 'babel.config.js' + - 'tsconfig.json' + - 'esbuild.config.js' + - '.eslintrc.js' + - '.prettierrc' + - 'scripts/**' # Testing '๐Ÿงช tests': - - 'tests/**' - - '__tests__/**' - - 'jest.config.js' - - 'vitest.config.js' + - changed-files: + - any-glob-to-any-file: + - 'tests/**' + - '__tests__/**' + - 'jest.config.js' + - 'vitest.config.js' # CI/CD & GitHub Actions '๐Ÿ› ๏ธ ci/cd': - - '.github/workflows/**' - - '.github/labeler.yml' + - changed-files: + - any-glob-to-any-file: + - '.github/workflows/**' + - '.github/labeler.yml' # Documentation '๐Ÿ“„ docs': - - 'docs/**' - - 'README.md' - - 'CONTRIBUTING.md' - - 'docs/**/*.md' + - changed-files: + - any-glob-to-any-file: + - 'docs/**' + - 'README.md' + - 'CONTRIBUTING.md' + - 'docs/**/*.md' # Hotfix '๐Ÿ”ฅ hotfix': - - 'src/**' - - 'electron/**' - - 'package.json' + - changed-files: + - any-glob-to-any-file: + - 'src/**' + - 'electron/**' + - 'package.json' diff --git a/.github/workflows/label.yml b/.github/workflows/label.yml index 978db2f..4723611 100644 --- a/.github/workflows/label.yml +++ b/.github/workflows/label.yml @@ -19,3 +19,4 @@ jobs: - uses: actions/labeler@v5 with: repo-token: '${{ secrets.GITHUB_TOKEN }}' + configuration-path: .github/labeler.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index efeb549..d984c7e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -60,11 +60,6 @@ jobs: - name: Install Dependencies run: pnpm install --frozen-lockfile - # - name: Generate Release Notes - # run: | - # pnpm add -g conventional-changelog-cli - # conventional-changelog -p angular -i CHANGELOG.md -s -r 0 - - name: Build env: ELECTRON_BUILDER_ALLOWED_EXECUTABLES: '*' diff --git a/.husky/commit-msg b/.husky/commit-msg index 1f17d27..81e3fa4 100644 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -1,3 +1,5 @@ +pnpm commit-msg + # Read commit message from file commit_message="$(cat "$1")" @@ -51,7 +53,7 @@ This commit fixes the authentication system by properly handling token validation and improving error messages. ------------------------------------------------------- -๐Ÿ‘‰ Please add a meaningful description and try again. +๐Ÿ‘‰ Please add a meaningful description. EOF fi @@ -77,9 +79,7 @@ Current format: $commit_message ------------------------------------------------------- -๐Ÿ‘‰ Please format your commit message correctly and try again. +๐Ÿ‘‰ Please format your commit message correctly. EOF fi - -pnpm commit-msg diff --git a/.vscode/settings.json b/.vscode/settings.json index 6f0c2d1..7046068 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,5 +8,5 @@ "[json]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, - "cSpell.words": ["treo"] + "cSpell.words": ["islast", "treo"] } diff --git a/package.json b/package.json index 6928a6d..141171f 100644 --- a/package.json +++ b/package.json @@ -3,9 +3,13 @@ "version": "1.1.5", "description": "An Electron application with React and TypeScript", "main": "./out/main/index.js", - "author": "example.com", + "author": "your-ehsan", "homepage": "https://electron-vite.org", "type": "module", + "repository": { + "url": "https://github.com/Your-Ehsan/Treo.git", + "type": "git" + }, "scripts": { "db:generate": "drizzle-kit generate", "db:migrate": "drizzle-kit migrate", @@ -33,10 +37,11 @@ "dependencies": { "@electron-toolkit/preload": "^3.0.1", "@electron-toolkit/utils": "^4.0.0", - "@hookform/resolvers": "^4.1.1", + "@hookform/resolvers": "^4.1.2", "@radix-ui/react-avatar": "^1.1.2", "@radix-ui/react-checkbox": "^1.1.3", "@radix-ui/react-collapsible": "^1.1.2", + "@radix-ui/react-context-menu": "^2.2.6", "@radix-ui/react-dialog": "^1.1.5", "@radix-ui/react-dropdown-menu": "^2.1.5", "@radix-ui/react-icons": "^1.3.2", @@ -54,8 +59,8 @@ "@radix-ui/react-toggle": "^1.1.2", "@radix-ui/react-toggle-group": "^1.1.2", "@radix-ui/react-tooltip": "^1.1.7", - "@tanstack/react-query": "^5.66.9", - "@tanstack/react-router": "^1.111.3", + "@tanstack/react-query": "^5.66.11", + "@tanstack/react-router": "^1.112.0", "@tiptap/extension-code-block-lowlight": "^2.11.5", "@tiptap/extension-color": "^2.11.5", "@tiptap/extension-heading": "^2.11.5", @@ -74,10 +79,10 @@ "clsx": "^2.1.1", "cmdk": "1.0.4", "date-fns": "^4.1.0", - "drizzle-orm": "^0.39.1", + "drizzle-orm": "^0.40.0", "highlight.js": "^11.11.1", "lowlight": "^3.3.0", - "lucide-react": "^0.475.0", + "lucide-react": "^0.477.0", "react-day-picker": "9.5.1", "react-hook-form": "^7.54.2", "react-medium-image-zoom": "^5.2.14", @@ -94,23 +99,23 @@ "@electron-toolkit/eslint-config-prettier": "^3.0.0", "@electron-toolkit/eslint-config-ts": "^3.0.0", "@electron-toolkit/tsconfig": "^1.0.1", - "@tailwindcss/postcss": "^4.0.8", + "@tailwindcss/postcss": "^4.0.9", "@tanstack/router-devtools": "^1.109.2", "@tanstack/router-plugin": "^1.109.2", "@types/better-sqlite3": "^7.6.12", - "@types/node": "^22.13.5", + "@types/node": "^22.13.8", "@types/react": "^19.0.10", "@types/react-dom": "^19.0.4", "@vitejs/plugin-react": "^4.3.4", "conventional-changelog-cli": "^5.0.0", "cross-env": "^7.0.3", - "drizzle-kit": "^0.30.4", - "electron": "^34.2.0", + "drizzle-kit": "^0.30.5", + "electron": "^34.3.0", "electron-builder": "^25.1.8", "electron-vite": "^3.0.0", "eslint": "^9.21.0", "eslint-plugin-react": "^7.37.4", - "eslint-plugin-react-hooks": "^5.1.0", + "eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-refresh": "^0.4.19", "husky": "^9.1.7", "lint-staged": "^15.4.3", @@ -118,10 +123,10 @@ "prettier": "^3.5.2", "react": "^19.0.0", "react-dom": "^19.0.0", - "tailwindcss": "^4.0.8", + "tailwindcss": "^4.0.9", "tsc-files": "^1.1.4", "typescript": "^5.7.3", - "vite": "^6.1.1" + "vite": "^6.2.0" }, "pnpm": { "onlyBuiltDependencies": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 47403ad..4cc3e70 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,13 +10,13 @@ importers: dependencies: '@electron-toolkit/preload': specifier: ^3.0.1 - version: 3.0.1(electron@34.2.0) + version: 3.0.1(electron@34.3.0) '@electron-toolkit/utils': specifier: ^4.0.0 - version: 4.0.0(electron@34.2.0) + version: 4.0.0(electron@34.3.0) '@hookform/resolvers': - specifier: ^4.1.1 - version: 4.1.1(react-hook-form@7.54.2(react@19.0.0)) + specifier: ^4.1.2 + version: 4.1.3(react-hook-form@7.54.2(react@19.0.0)) '@radix-ui/react-avatar': specifier: ^1.1.2 version: 1.1.3(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -26,6 +26,9 @@ importers: '@radix-ui/react-collapsible': specifier: ^1.1.2 version: 1.1.3(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-context-menu': + specifier: ^2.2.6 + version: 2.2.6(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-dialog': specifier: ^1.1.5 version: 1.1.6(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -78,11 +81,11 @@ importers: specifier: ^1.1.7 version: 1.1.8(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@tanstack/react-query': - specifier: ^5.66.9 - version: 5.66.9(react@19.0.0) + specifier: ^5.66.11 + version: 5.67.1(react@19.0.0) '@tanstack/react-router': - specifier: ^1.111.3 - version: 1.111.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: ^1.112.0 + version: 1.112.17(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@tiptap/extension-code-block-lowlight': specifier: ^2.11.5 version: 2.11.5(@tiptap/core@2.11.5(@tiptap/pm@2.11.5))(@tiptap/extension-code-block@2.11.5(@tiptap/core@2.11.5(@tiptap/pm@2.11.5))(@tiptap/pm@2.11.5))(@tiptap/pm@2.11.5)(highlight.js@11.11.1)(lowlight@3.3.0) @@ -138,8 +141,8 @@ importers: specifier: ^4.1.0 version: 4.1.0 drizzle-orm: - specifier: ^0.39.1 - version: 0.39.3(@types/better-sqlite3@7.6.12)(better-sqlite3@11.8.1) + specifier: ^0.40.0 + version: 0.40.0(@types/better-sqlite3@7.6.12)(better-sqlite3@11.8.1)(gel@2.0.1) highlight.js: specifier: ^11.11.1 version: 11.11.1 @@ -147,8 +150,8 @@ importers: specifier: ^3.3.0 version: 3.3.0 lucide-react: - specifier: ^0.475.0 - version: 0.475.0(react@19.0.0) + specifier: ^0.477.0 + version: 0.477.0(react@19.0.0) react-day-picker: specifier: 9.5.1 version: 9.5.1(react@19.0.0) @@ -166,7 +169,7 @@ importers: version: 3.0.2 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@4.0.8) + version: 1.0.7(tailwindcss@4.0.10) tiptap-extension-global-drag-handle: specifier: ^0.1.16 version: 0.1.18 @@ -179,34 +182,34 @@ importers: devDependencies: '@commitlint/cli': specifier: ^19.7.1 - version: 19.7.1(@types/node@22.13.5)(typescript@5.7.3) + version: 19.7.1(@types/node@22.13.9)(typescript@5.8.2) '@commitlint/config-conventional': specifier: ^19.7.1 version: 19.7.1 '@electron-toolkit/eslint-config-prettier': specifier: ^3.0.0 - version: 3.0.0(eslint@9.21.0(jiti@2.4.2))(prettier@3.5.2) + version: 3.0.0(eslint@9.21.0(jiti@2.4.2))(prettier@3.5.3) '@electron-toolkit/eslint-config-ts': specifier: ^3.0.0 - version: 3.0.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + version: 3.0.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) '@electron-toolkit/tsconfig': specifier: ^1.0.1 - version: 1.0.1(@types/node@22.13.5) + version: 1.0.1(@types/node@22.13.9) '@tailwindcss/postcss': - specifier: ^4.0.8 - version: 4.0.8 + specifier: ^4.0.9 + version: 4.0.10 '@tanstack/router-devtools': specifier: ^1.109.2 - version: 1.109.2(@tanstack/react-router@1.111.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(csstype@3.1.3)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 1.112.17(@tanstack/react-router@1.112.17(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(csstype@3.1.3)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@tanstack/router-plugin': specifier: ^1.109.2 - version: 1.109.2(@tanstack/react-router@1.111.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.3)(yaml@2.7.0)) + version: 1.112.17(@tanstack/react-router@1.112.17(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(vite@6.2.0(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0)) '@types/better-sqlite3': specifier: ^7.6.12 version: 7.6.12 '@types/node': - specifier: ^22.13.5 - version: 22.13.5 + specifier: ^22.13.8 + version: 22.13.9 '@types/react': specifier: ^19.0.10 version: 19.0.10 @@ -215,7 +218,7 @@ importers: version: 19.0.4(@types/react@19.0.10) '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.3.4(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.3)(yaml@2.7.0)) + version: 4.3.4(vite@6.2.0(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0)) conventional-changelog-cli: specifier: ^5.0.0 version: 5.0.0(conventional-commits-filter@5.0.0) @@ -223,17 +226,17 @@ importers: specifier: ^7.0.3 version: 7.0.3 drizzle-kit: - specifier: ^0.30.4 - version: 0.30.4 + specifier: ^0.30.5 + version: 0.30.5 electron: - specifier: ^34.2.0 - version: 34.2.0 + specifier: ^34.3.0 + version: 34.3.0 electron-builder: specifier: ^25.1.8 version: 25.1.8(electron-builder-squirrel-windows@25.1.8) electron-vite: specifier: ^3.0.0 - version: 3.0.0(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.3)(yaml@2.7.0)) + version: 3.0.0(vite@6.2.0(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0)) eslint: specifier: ^9.21.0 version: 9.21.0(jiti@2.4.2) @@ -241,8 +244,8 @@ importers: specifier: ^7.37.4 version: 7.37.4(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-react-hooks: - specifier: ^5.1.0 - version: 5.1.0(eslint@9.21.0(jiti@2.4.2)) + specifier: ^5.2.0 + version: 5.2.0(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-react-refresh: specifier: ^0.4.19 version: 0.4.19(eslint@9.21.0(jiti@2.4.2)) @@ -257,7 +260,7 @@ importers: version: 8.5.3 prettier: specifier: ^3.5.2 - version: 3.5.2 + version: 3.5.3 react: specifier: ^19.0.0 version: 19.0.0 @@ -265,17 +268,17 @@ importers: specifier: ^19.0.0 version: 19.0.0(react@19.0.0) tailwindcss: - specifier: ^4.0.8 - version: 4.0.8 + specifier: ^4.0.9 + version: 4.0.10 tsc-files: specifier: ^1.1.4 - version: 1.1.4(typescript@5.7.3) + version: 1.1.4(typescript@5.8.2) typescript: specifier: ^5.7.3 - version: 5.7.3 + version: 5.8.2 vite: - specifier: ^6.1.1 - version: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.3)(yaml@2.7.0) + specifier: ^6.2.0 + version: 6.2.0(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0) packages: @@ -1135,10 +1138,6 @@ packages: resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.20.0': - resolution: {integrity: sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.21.0': resolution: {integrity: sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1169,8 +1168,8 @@ packages: '@gar/promisify@1.1.3': resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} - '@hookform/resolvers@4.1.1': - resolution: {integrity: sha512-S9YN1RgNWG+klUz5uQaV6rjE4pr6Py2tamj7ekshzLcMyg+/Pal1KZAYgGszV0+doiy41dUiQgXL3uRS9stndQ==} + '@hookform/resolvers@4.1.3': + resolution: {integrity: sha512-Jsv6UOWYTrEFJ/01ZrnwVXs7KDvP8XIo115i++5PWvNkNvkrsTfGiLS6w+eJ57CYtUtDQalUWovCZDHFJ8u1VQ==} peerDependencies: react-hook-form: ^7.0.0 @@ -1249,6 +1248,9 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} deprecated: This functionality has been moved to @npmcli/fs + '@petamoriken/float16@3.9.1': + resolution: {integrity: sha512-j+ejhYwY6PeB+v1kn7lZFACUIG97u90WxMuGosILFsl9d4Ovi0sjk0GlPfoEcx+FzvXZDAfioD+NGnnPamXgMA==} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1340,6 +1342,19 @@ packages: '@types/react': optional: true + '@radix-ui/react-context-menu@2.2.6': + resolution: {integrity: sha512-aUP99QZ3VU84NPsHeaFt4cQUNgJqFsLLOt/RbbWXszZ6MP0DpDyjkFZORr4RpAEx3sUBk+Kc8h13yGtC5Qw8dg==} + 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-context@1.1.1': resolution: {integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==} peerDependencies: @@ -1771,98 +1786,98 @@ packages: '@remirror/core-constants@3.0.0': resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==} - '@rollup/rollup-android-arm-eabi@4.34.8': - resolution: {integrity: sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==} + '@rollup/rollup-android-arm-eabi@4.34.9': + resolution: {integrity: sha512-qZdlImWXur0CFakn2BJ2znJOdqYZKiedEPEVNTBrpfPjc/YuTGcaYZcdmNFTkUj3DU0ZM/AElcM8Ybww3xVLzA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.34.8': - resolution: {integrity: sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==} + '@rollup/rollup-android-arm64@4.34.9': + resolution: {integrity: sha512-4KW7P53h6HtJf5Y608T1ISKvNIYLWRKMvfnG0c44M6In4DQVU58HZFEVhWINDZKp7FZps98G3gxwC1sb0wXUUg==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.34.8': - resolution: {integrity: sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==} + '@rollup/rollup-darwin-arm64@4.34.9': + resolution: {integrity: sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.34.8': - resolution: {integrity: sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==} + '@rollup/rollup-darwin-x64@4.34.9': + resolution: {integrity: sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.34.8': - resolution: {integrity: sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==} + '@rollup/rollup-freebsd-arm64@4.34.9': + resolution: {integrity: sha512-2lzjQPJbN5UnHm7bHIUKFMulGTQwdvOkouJDpPysJS+QFBGDJqcfh+CxxtG23Ik/9tEvnebQiylYoazFMAgrYw==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.34.8': - resolution: {integrity: sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==} + '@rollup/rollup-freebsd-x64@4.34.9': + resolution: {integrity: sha512-SLl0hi2Ah2H7xQYd6Qaiu01kFPzQ+hqvdYSoOtHYg/zCIFs6t8sV95kaoqjzjFwuYQLtOI0RZre/Ke0nPaQV+g==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.34.8': - resolution: {integrity: sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==} + '@rollup/rollup-linux-arm-gnueabihf@4.34.9': + resolution: {integrity: sha512-88I+D3TeKItrw+Y/2ud4Tw0+3CxQ2kLgu3QvrogZ0OfkmX/DEppehus7L3TS2Q4lpB+hYyxhkQiYPJ6Mf5/dPg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.34.8': - resolution: {integrity: sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==} + '@rollup/rollup-linux-arm-musleabihf@4.34.9': + resolution: {integrity: sha512-3qyfWljSFHi9zH0KgtEPG4cBXHDFhwD8kwg6xLfHQ0IWuH9crp005GfoUUh/6w9/FWGBwEHg3lxK1iHRN1MFlA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.34.8': - resolution: {integrity: sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==} + '@rollup/rollup-linux-arm64-gnu@4.34.9': + resolution: {integrity: sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.34.8': - resolution: {integrity: sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==} + '@rollup/rollup-linux-arm64-musl@4.34.9': + resolution: {integrity: sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.34.8': - resolution: {integrity: sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==} + '@rollup/rollup-linux-loongarch64-gnu@4.34.9': + resolution: {integrity: sha512-dRAgTfDsn0TE0HI6cmo13hemKpVHOEyeciGtvlBTkpx/F65kTvShtY/EVyZEIfxFkV5JJTuQ9tP5HGBS0hfxIg==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.34.8': - resolution: {integrity: sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==} + '@rollup/rollup-linux-powerpc64le-gnu@4.34.9': + resolution: {integrity: sha512-PHcNOAEhkoMSQtMf+rJofwisZqaU8iQ8EaSps58f5HYll9EAY5BSErCZ8qBDMVbq88h4UxaNPlbrKqfWP8RfJA==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.34.8': - resolution: {integrity: sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==} + '@rollup/rollup-linux-riscv64-gnu@4.34.9': + resolution: {integrity: sha512-Z2i0Uy5G96KBYKjeQFKbbsB54xFOL5/y1P5wNBsbXB8yE+At3oh0DVMjQVzCJRJSfReiB2tX8T6HUFZ2k8iaKg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.34.8': - resolution: {integrity: sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==} + '@rollup/rollup-linux-s390x-gnu@4.34.9': + resolution: {integrity: sha512-U+5SwTMoeYXoDzJX5dhDTxRltSrIax8KWwfaaYcynuJw8mT33W7oOgz0a+AaXtGuvhzTr2tVKh5UO8GVANTxyQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.34.8': - resolution: {integrity: sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==} + '@rollup/rollup-linux-x64-gnu@4.34.9': + resolution: {integrity: sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.34.8': - resolution: {integrity: sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==} + '@rollup/rollup-linux-x64-musl@4.34.9': + resolution: {integrity: sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.34.8': - resolution: {integrity: sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==} + '@rollup/rollup-win32-arm64-msvc@4.34.9': + resolution: {integrity: sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.34.8': - resolution: {integrity: sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==} + '@rollup/rollup-win32-ia32-msvc@4.34.9': + resolution: {integrity: sha512-KB48mPtaoHy1AwDNkAJfHXvHp24H0ryZog28spEs0V48l3H1fr4i37tiyHsgKZJnCmvxsbATdZGBpbmxTE3a9w==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.34.8': - resolution: {integrity: sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==} + '@rollup/rollup-win32-x64-msvc@4.34.9': + resolution: {integrity: sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==} cpu: [x64] os: [win32] @@ -1870,100 +1885,103 @@ packages: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} + '@standard-schema/utils@0.3.0': + resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} + '@szmarczak/http-timer@4.0.6': resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} - '@tailwindcss/node@4.0.8': - resolution: {integrity: sha512-FKArQpbrbwv08TNT0k7ejYXpF+R8knZFAatNc0acOxbgeqLzwb86r+P3LGOjIeI3Idqe9CVkZrh4GlsJLJKkkw==} + '@tailwindcss/node@4.0.10': + resolution: {integrity: sha512-5YuI8pXfNkg5Ng12wgMic6jrFe4K8+eVmaC1kLsbA6g7iMgrj5fyl4hoLqHjmBDGpJXKxUAjwMSuJmc4oetnrg==} - '@tailwindcss/oxide-android-arm64@4.0.8': - resolution: {integrity: sha512-We7K79+Sm4mwJHk26Yzu/GAj7C7myemm7PeXvpgMxyxO70SSFSL3uCcqFbz9JA5M5UPkrl7N9fkBe/Y0iazqpA==} + '@tailwindcss/oxide-android-arm64@4.0.10': + resolution: {integrity: sha512-HymaBJV/oB7fAMabW/EdWBrNskw9BOXoChYVnk/n3xq9LpK3eWNOcLeB4P52Bks+OpAyv8u0I/0WdrOkPRPv0A==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.0.8': - resolution: {integrity: sha512-Lv9Isi2EwkCTG1sRHNDi0uRNN1UGFdEThUAGFrydRmQZnraGLMjN8gahzg2FFnOizDl7LB2TykLUuiw833DSNg==} + '@tailwindcss/oxide-darwin-arm64@4.0.10': + resolution: {integrity: sha512-PJtNobUOQCydEpBbOmVhP+diTD8JEM7HRxgX9O72SODg+ynKDM0fNDkqKOX0CFR6+mCdOwRQdhnoulM6hM27TA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.0.8': - resolution: {integrity: sha512-fWfywfYIlSWtKoqWTjukTHLWV3ARaBRjXCC2Eo0l6KVpaqGY4c2y8snUjp1xpxUtpqwMvCvFWFaleMoz1Vhzlw==} + '@tailwindcss/oxide-darwin-x64@4.0.10': + resolution: {integrity: sha512-jUqYWjThIoLEUTX5WGwukGh0js+RGGFqjt0YhQnDyCDofBD/CBxOdbrsXX6CnYmbGw+a3BDrl0r3xbPY2fX8Mw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.0.8': - resolution: {integrity: sha512-SO+dyvjJV9G94bnmq2288Ke0BIdvrbSbvtPLaQdqjqHR83v5L2fWADyFO+1oecHo9Owsk8MxcXh1agGVPIKIqw==} + '@tailwindcss/oxide-freebsd-x64@4.0.10': + resolution: {integrity: sha512-m4SdTo/MkZJX2FEyiOjtQAsKG17q9d/RJXTlXDu6owVIM/U9TG0Vy3XdW/L4Yh0mHsayhHUJVIpvV0ZaWMs7nQ==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.8': - resolution: {integrity: sha512-ZSHggWiEblQNV69V0qUK5vuAtHP+I+S2eGrKGJ5lPgwgJeAd6GjLsVBN+Mqn2SPVfYM3BOpS9jX/zVg9RWQVDQ==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.10': + resolution: {integrity: sha512-cdq+Xa4cgYOYgg2n8RdL2/COIuW0FZJRvSg+AtGuZWG0omVS9XIf/wLlL+ln7pCTMt9zGOX1Yyryfrw12tYw4Q==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.0.8': - resolution: {integrity: sha512-xWpr6M0OZLDNsr7+bQz+3X7zcnDJZJ1N9gtBWCtfhkEtDjjxYEp+Lr5L5nc/yXlL4MyCHnn0uonGVXy3fhxaVA==} + '@tailwindcss/oxide-linux-arm64-gnu@4.0.10': + resolution: {integrity: sha512-6PMpTsv8vE0xiaPnpOptSvO99JkIqW9KrtmPYp/Khr6i9AkVmf95XGQxqcgwlU7Gdo7eb02fK5z0c5crK/pTew==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-arm64-musl@4.0.8': - resolution: {integrity: sha512-5tz2IL7LN58ssGEq7h/staD7pu/izF/KeMWdlJ86WDe2Ah46LF3ET6ZGKTr5eZMrnEA0M9cVFuSPprKRHNgjeg==} + '@tailwindcss/oxide-linux-arm64-musl@4.0.10': + resolution: {integrity: sha512-tI264V1H4yxRnYaOzYWm+5x94QtoreoBpVkX0OpQTycvnv6JPUC6wqsZkrDwpphaDitUGY+mv7rGQZ5vzB/Tlg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-x64-gnu@4.0.8': - resolution: {integrity: sha512-KSzMkhyrxAQyY2o194NKVKU9j/c+NFSoMvnHWFaNHKi3P1lb+Vq1UC19tLHrmxSkKapcMMu69D7+G1+FVGNDXQ==} + '@tailwindcss/oxide-linux-x64-gnu@4.0.10': + resolution: {integrity: sha512-Xe15DqfzcYzozbhhgTUeZNnmnr56HdnqeollvLumxKvrCicDFkeZimz299Czyw4GeRUHZgcdccwr+Do3/Y2aZA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-linux-x64-musl@4.0.8': - resolution: {integrity: sha512-yFYKG5UtHTRimjtqxUWXBgI4Tc6NJe3USjRIVdlTczpLRxq/SFwgzGl5JbatCxgSRDPBFwRrNPxq+ukfQFGdrw==} + '@tailwindcss/oxide-linux-x64-musl@4.0.10': + resolution: {integrity: sha512-L0NTk+UPpx4l/xD0G+UDBYhu6whA7xh415nErEnliFK8KV5lQlWz66icpHLmT4fTpAZTBaD+ul+GorlL1D1xCg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-win32-arm64-msvc@4.0.8': - resolution: {integrity: sha512-tndGujmCSba85cRCnQzXgpA2jx5gXimyspsUYae5jlPyLRG0RjXbDshFKOheVXU4TLflo7FSG8EHCBJ0EHTKdQ==} + '@tailwindcss/oxide-win32-arm64-msvc@4.0.10': + resolution: {integrity: sha512-IXNvUmLBmTJNcMofOl8B0fzNvwUFPNvFE799THaEPgi16zj+WqFLVQh4N5+zuI1vgtZTaIJrZmqHhjqNPLOItg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.0.8': - resolution: {integrity: sha512-T77jroAc0p4EHVVgTUiNeFn6Nj3jtD3IeNId2X+0k+N1XxfNipy81BEkYErpKLiOkNhpNFjPee8/ZVas29b2OQ==} + '@tailwindcss/oxide-win32-x64-msvc@4.0.10': + resolution: {integrity: sha512-K/51OZBREcq2J4JE8r9qdX2qjnVfUrm8AT4R+Pd9E27AiIyr7IkLQQjR3mj2Lpb/jUtQ8NS0KkJ1nXMoQpSlkQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.0.8': - resolution: {integrity: sha512-KfMcuAu/Iw+DcV1e8twrFyr2yN8/ZDC/odIGta4wuuJOGkrkHZbvJvRNIbQNhGh7erZTYV6Ie0IeD6WC9Y8Hcw==} + '@tailwindcss/oxide@4.0.10': + resolution: {integrity: sha512-vAPYXF1c2yH8jmepA82on3kLpgrHZQ0B7Q2tPeASXnKxJx3GP/Fe0j1RB6PDmR5UntwA0y0Z0bZYwLcnw4/OGw==} engines: {node: '>= 10'} - '@tailwindcss/postcss@4.0.8': - resolution: {integrity: sha512-SUwlrXjn1ycmUbA0o0n3Y0LqlXqxN5R8HR+ti+OBbRS79wl2seDmiypEs3xJCuQXe07ol81s1AmRMitBmPveJA==} + '@tailwindcss/postcss@4.0.10': + resolution: {integrity: sha512-3NEomQtd/JrNAaSkuklBLGQkyCpxZjOW8rf64x4lx+Umo7gh0kzwe83QmUF/GrVNgO6TdrCyHf4+41GZGR3EIg==} - '@tanstack/history@1.99.13': - resolution: {integrity: sha512-JMd7USmnp8zV8BRGIjALqzPxazvKtQ7PGXQC7n39HpbqdsmfV2ePCzieO84IvN+mwsTrXErpbjI4BfKCa+ZNCg==} + '@tanstack/history@1.112.8': + resolution: {integrity: sha512-+EPOvUtnA3PnIBF2oUhggdy7UrVimLZd1SpULhV1UiesNgKtmLjArO7ZdGPrRq7pRXhc8V0ZAWTI9vfplhZfeA==} engines: {node: '>=12'} - '@tanstack/query-core@5.66.4': - resolution: {integrity: sha512-skM/gzNX4shPkqmdTCSoHtJAPMTtmIJNS0hE+xwTTUVYwezArCT34NMermABmBVUg5Ls5aiUXEDXfqwR1oVkcA==} + '@tanstack/query-core@5.67.1': + resolution: {integrity: sha512-AkFmuukVejyqVIjEQoFhLb3q+xHl7JG8G9cANWTMe3s8iKzD9j1VBSYXgCjy6vm6xM8cUCR9zP2yqWxY9pTWOA==} - '@tanstack/react-query@5.66.9': - resolution: {integrity: sha512-NRI02PHJsP5y2gAuWKP+awamTIBFBSKMnO6UVzi03GTclmHHHInH5UzVgzi5tpu4+FmGfsdT7Umqegobtsp23A==} + '@tanstack/react-query@5.67.1': + resolution: {integrity: sha512-fH5u4JLwB6A+wLFdi8wWBWAYoJV5deYif2OveJ26ktAWjU499uvVFS1wPWnyEyq5LvZX1MZInvv9QRaIZANRaQ==} peerDependencies: react: ^18 || ^19 - '@tanstack/react-router@1.111.3': - resolution: {integrity: sha512-OsqAuExa4WF7+BbjENWlb4dHRousxU5jahJHUPyO0gaUcWwzaVloJKi8lTFTd1PWQ8waz5V7BedkV67hd8syUw==} + '@tanstack/react-router@1.112.17': + resolution: {integrity: sha512-UYd9FspQAFs9uxSwHBWQ7LIO1M7FcKVCpYm+vdYJABj6RRMelWuBOOIXgYhMJaGBPazQO3wZVytkW+RW+iwA1A==} engines: {node: '>=12'} peerDependencies: react: '>=18.0.0 || >=19.0.0' @@ -1975,15 +1993,15 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/router-core@1.111.3': - resolution: {integrity: sha512-q+CHuOhTgqHudVKijL89jIdLe5A00RzV8ZMMSi4qiHGnggm4nisF8eSE3dFQaic1+YFk1wR7dfFA2hvkr1hFIA==} + '@tanstack/router-core@1.112.12': + resolution: {integrity: sha512-nuKEl7qEDO/F4+d7RdAHmxGAq6Sc1SJyCRthnxycSANMTK8bAT6gVoAaag/BJgl4aKgmP1iSHPVv8slcVpmPrQ==} engines: {node: '>=12'} - '@tanstack/router-devtools@1.109.2': - resolution: {integrity: sha512-jz3o5srcbFSUTNJHvBlDGcAW+Q2YETbJAiCiSZ7sjaNhNd3odPwGw0JLc4Dh1mkL0Vp94L7eJdIBfmNMBuOR9w==} + '@tanstack/router-devtools@1.112.17': + resolution: {integrity: sha512-BfbmYGY3pqAO5Z3qKzW+ei5cjkd1Lb4xXhzIVU8r2kGTREfAenxVtheIcV4mu2HZ0Jgs85D4T7upDGJZyogxXw==} engines: {node: '>=12'} peerDependencies: - '@tanstack/react-router': ^1.109.2 + '@tanstack/react-router': ^1.112.17 csstype: ^3.0.10 react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' @@ -1991,21 +2009,21 @@ packages: csstype: optional: true - '@tanstack/router-generator@1.109.2': - resolution: {integrity: sha512-CCEH19Vl+ukMkP9gOZPg85U7rMwwlWxJ4hRMPgU7DIyMlzuvv7l6earvXzuGCKLN0m20TO0QuqjJfCFIKkP2RA==} + '@tanstack/router-generator@1.112.17': + resolution: {integrity: sha512-UPpRyKMWlHG56KoUOYSM6JwJkj31+CXw9nrIiHjhSSyyR6Quk0fY+DPACGKM2Qh+3kUgQ9GXUhXahTdUyjWNyQ==} engines: {node: '>=12'} peerDependencies: - '@tanstack/react-router': ^1.109.2 + '@tanstack/react-router': ^1.112.17 peerDependenciesMeta: '@tanstack/react-router': optional: true - '@tanstack/router-plugin@1.109.2': - resolution: {integrity: sha512-Tap6WQIE6elQkTSJpnBxUZDMNGkaqjEPXiotM2VVpD6qy4euZmYdUV1rAgtD2w8AM18XecIC4tBprNLchLYG3A==} + '@tanstack/router-plugin@1.112.17': + resolution: {integrity: sha512-EIm+T4S3c1R180OAK1VviyUJmM5Z1Iagwu0E3oHs4vCc4fDVP55IEPpYp7C1rNP8HjobmErv+CN7a6h1YDiFQQ==} engines: {node: '>=12'} peerDependencies: '@rsbuild/core': '>=1.0.2' - '@tanstack/react-router': ^1.109.2 + '@tanstack/react-router': ^1.112.17 vite: '>=5.0.0 || >=6.0.0' vite-plugin-solid: ^2.11.2 webpack: '>=5.92.0' @@ -2263,11 +2281,11 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@20.17.19': - resolution: {integrity: sha512-LEwC7o1ifqg/6r2gn9Dns0f1rhK+fPFDoMiceTJ6kWmVk6bgXBI/9IOWfVan4WiAavK9pIVWdX0/e3J+eEUh5A==} + '@types/node@20.17.23': + resolution: {integrity: sha512-8PCGZ1ZJbEZuYNTMqywO+Sj4vSKjSjT6Ua+6RFOYlEvIvKQABPtrNkoVSLSKDb4obYcMhspVKmsw8Cm10NFRUg==} - '@types/node@22.13.5': - resolution: {integrity: sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==} + '@types/node@22.13.9': + resolution: {integrity: sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2295,57 +2313,57 @@ packages: '@types/use-sync-external-store@0.0.6': resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} - '@types/verror@1.10.10': - resolution: {integrity: sha512-l4MM0Jppn18hb9xmM6wwD1uTdShpf9Pn80aXTStnK1C94gtPvJcV2FrDmbOQUAQfJ1cKZHktkQUDwEqaAKXMMg==} + '@types/verror@1.10.11': + resolution: {integrity: sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==} '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.24.1': - resolution: {integrity: sha512-ll1StnKtBigWIGqvYDVuDmXJHVH4zLVot1yQ4fJtLpL7qacwkxJc1T0bptqw+miBQ/QfUbhl1TcQ4accW5KUyA==} + '@typescript-eslint/eslint-plugin@8.26.0': + resolution: {integrity: sha512-cLr1J6pe56zjKYajK6SSSre6nl1Gj6xDp1TY0trpgPzjVbgDwd09v2Ws37LABxzkicmUjhEeg/fAUjPJJB1v5Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.24.1': - resolution: {integrity: sha512-Tqoa05bu+t5s8CTZFaGpCH2ub3QeT9YDkXbPd3uQ4SfsLoh1/vv2GEYAioPoxCWJJNsenXlC88tRjwoHNts1oQ==} + '@typescript-eslint/parser@8.26.0': + resolution: {integrity: sha512-mNtXP9LTVBy14ZF3o7JG69gRPBK/2QWtQd0j0oH26HcY/foyJJau6pNUez7QrM5UHnSvwlQcJXKsk0I99B9pOA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/scope-manager@8.24.1': - resolution: {integrity: sha512-OdQr6BNBzwRjNEXMQyaGyZzgg7wzjYKfX2ZBV3E04hUCBDv3GQCHiz9RpqdUIiVrMgJGkXm3tcEh4vFSHreS2Q==} + '@typescript-eslint/scope-manager@8.26.0': + resolution: {integrity: sha512-E0ntLvsfPqnPwng8b8y4OGuzh/iIOm2z8U3S9zic2TeMLW61u5IH2Q1wu0oSTkfrSzwbDJIB/Lm8O3//8BWMPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.24.1': - resolution: {integrity: sha512-/Do9fmNgCsQ+K4rCz0STI7lYB4phTtEXqqCAs3gZW0pnK7lWNkvWd5iW545GSmApm4AzmQXmSqXPO565B4WVrw==} + '@typescript-eslint/type-utils@8.26.0': + resolution: {integrity: sha512-ruk0RNChLKz3zKGn2LwXuVoeBcUMh+jaqzN461uMMdxy5H9epZqIBtYj7UiPXRuOpaALXGbmRuZQhmwHhaS04Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/types@8.24.1': - resolution: {integrity: sha512-9kqJ+2DkUXiuhoiYIUvIYjGcwle8pcPpdlfkemGvTObzgmYfJ5d0Qm6jwb4NBXP9W1I5tss0VIAnWFumz3mC5A==} + '@typescript-eslint/types@8.26.0': + resolution: {integrity: sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.24.1': - resolution: {integrity: sha512-UPyy4MJ/0RE648DSKQe9g0VDSehPINiejjA6ElqnFaFIhI6ZEiZAkUI0D5MCk0bQcTf/LVqZStvQ6K4lPn/BRg==} + '@typescript-eslint/typescript-estree@8.26.0': + resolution: {integrity: sha512-tiJ1Hvy/V/oMVRTbEOIeemA2XoylimlDQ03CgPPNaHYZbpsc78Hmngnt+WXZfJX1pjQ711V7g0H7cSJThGYfPQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.24.1': - resolution: {integrity: sha512-OOcg3PMMQx9EXspId5iktsI3eMaXVwlhC8BvNnX6B5w9a4dVgpkQZuU8Hy67TolKcl+iFWq0XX+jbDGN4xWxjQ==} + '@typescript-eslint/utils@8.26.0': + resolution: {integrity: sha512-2L2tU3FVwhvU14LndnQCA2frYC8JnPDVKyQtWFPf8IYFMt/ykEN1bPolNhNbCVgOmdzTlWdusCTKA/9nKrf8Ig==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/visitor-keys@8.24.1': - resolution: {integrity: sha512-EwVHlp5l+2vp8CoqJm9KikPZgi3gbdZAtabKT9KPShGeOcJhsv4Zdo3oc8T8I0uKEmYoU4ItyxbptjF08enaxg==} + '@typescript-eslint/visitor-keys@8.26.0': + resolution: {integrity: sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@vitejs/plugin-react@4.3.4': @@ -2370,8 +2388,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} engines: {node: '>=0.4.0'} hasBin: true @@ -2425,8 +2443,8 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - ansis@3.16.0: - resolution: {integrity: sha512-sU7d/tfZiYrsIAXbdL/CNZld5bCkruzwT5KmqmadCJYxuLxHAOBjidxD5+iLmN/6xEfjcQq1l7OpsiCBlc4LzA==} + ansis@3.17.0: + resolution: {integrity: sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==} engines: {node: '>=14'} anymatch@3.1.3: @@ -2618,16 +2636,16 @@ packages: resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} engines: {node: '>= 0.4'} - call-bound@1.0.3: - resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001700: - resolution: {integrity: sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==} + caniuse-lite@1.0.30001702: + resolution: {integrity: sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -2950,11 +2968,6 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - detect-libc@1.0.3: - resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} - engines: {node: '>=0.10'} - hasBin: true - detect-libc@2.0.3: resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} @@ -3000,12 +3013,12 @@ packages: resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} - drizzle-kit@0.30.4: - resolution: {integrity: sha512-B2oJN5UkvwwNHscPWXDG5KqAixu7AUzZ3qbe++KU9SsQ+cZWR4DXEPYcvWplyFAno0dhRJECNEhNxiDmFaPGyQ==} + drizzle-kit@0.30.5: + resolution: {integrity: sha512-l6dMSE100u7sDaTbLczibrQZjA35jLsHNqIV+jmhNVO3O8jzM6kywMOmV9uOz9ZVSCMPQhAZEFjL/qDPVrqpUA==} hasBin: true - drizzle-orm@0.39.3: - resolution: {integrity: sha512-EZ8ZpYvDIvKU9C56JYLOmUskazhad+uXZCTCRN4OnRMsL+xAJ05dv1eCpAG5xzhsm1hqiuC5kAZUCS924u2DTw==} + drizzle-orm@0.40.0: + resolution: {integrity: sha512-7ptk/HQiMSrEZHnAsSlBESXWj52VwgMmyTEfoNmpNN2ZXpcz13LwHfXTIghsAEud7Z5UJhDOp8U07ujcqme7wg==} peerDependencies: '@aws-sdk/client-rds-data': '>=3' '@cloudflare/workers-types': '>=4' @@ -3026,6 +3039,7 @@ packages: better-sqlite3: '>=7' bun-types: '*' expo-sqlite: '>=14.0.0' + gel: '>=2' knex: '*' kysely: '*' mysql2: '>=2' @@ -3073,6 +3087,8 @@ packages: optional: true expo-sqlite: optional: true + gel: + optional: true knex: optional: true kysely: @@ -3113,8 +3129,8 @@ packages: electron-publish@25.1.7: resolution: {integrity: sha512-+jbTkR9m39eDBMP4gfbqglDd6UvBC7RLh5Y0MhFSsc6UkGHj9Vj9TWobxevHYMMqmoujL11ZLjfPpMX+Pt6YEg==} - electron-to-chromium@1.5.103: - resolution: {integrity: sha512-P6+XzIkfndgsrjROJWfSvVEgNHtPgbhVyTkwLjUM2HU/h7pZRORgaTlHqfAikqxKmdJMLW8fftrdGWbd/Ds0FA==} + electron-to-chromium@1.5.112: + resolution: {integrity: sha512-oen93kVyqSb3l+ziUgzIOlWt/oOuy4zRmpwestMn4rhFWAoFJeFuCVte9F2fASjeZZo7l/Cif9TiyrdW4CwEMA==} electron-vite@3.0.0: resolution: {integrity: sha512-Uf8NpF4OB2Juo1Vq8pobkLVp9BZTO70VwkW7fKXSCkod0SRkc7Dkw7ddR6b1fbsgT7lcZ0HD29WRxsCcbkHXUw==} @@ -3127,8 +3143,8 @@ packages: '@swc/core': optional: true - electron@34.2.0: - resolution: {integrity: sha512-SYwBJNeXBTm1q/ErybQMUBZAYqEreBUqBwTrNkw1rV4YatDZk5Aittpcus3PPeC4UoI/tqmJ946uG8AKHTd6CA==} + electron@34.3.0: + resolution: {integrity: sha512-I238qRnYTAsuwJ/rS7HGaFNY4NNKAcjX8nlj7mnNmj1TK3z4HvNoD1r7Zud81DYDFx8AITuLd76EPrEnnfF9Bg==} engines: {node: '>= 12.20.55'} hasBin: true @@ -3159,6 +3175,10 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} + env-paths@3.0.0: + resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + environment@1.1.0: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} engines: {node: '>=18'} @@ -3237,8 +3257,8 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-config-prettier@10.0.1: - resolution: {integrity: sha512-lZBts941cyJyeaooiKxAtzoPHTN+GbQTJFAIdQbRhA4/8whaAraEh47Whw/ZFfrjNSnlAxqfm9i0XVAEkULjCw==} + eslint-config-prettier@10.0.2: + resolution: {integrity: sha512-1105/17ZIMjmCOJOPNfVdbXafLCLj3hPmkmB7dLgt7XsQ/zkxSuDerE/xgO3RxoHysR1N1whmquY0lSn2O0VLg==} hasBin: true peerDependencies: eslint: '>=7.0.0' @@ -3257,8 +3277,8 @@ packages: eslint-config-prettier: optional: true - eslint-plugin-react-hooks@5.1.0: - resolution: {integrity: sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==} + eslint-plugin-react-hooks@5.2.0: + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 @@ -3358,8 +3378,8 @@ packages: fast-uri@3.0.6: resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} - fastq@1.19.0: - resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} @@ -3378,8 +3398,8 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - find-up-simple@1.0.0: - resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} + find-up-simple@1.0.1: + resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} engines: {node: '>=18'} find-up@5.0.0: @@ -3401,8 +3421,8 @@ packages: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} - foreground-child@3.3.0: - resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} form-data@4.0.2: @@ -3455,6 +3475,11 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} deprecated: This package is no longer supported. + gel@2.0.1: + resolution: {integrity: sha512-gfem3IGvqKqXwEq7XseBogyaRwGsQGuE7Cw/yQsjLGdgiyqX92G1xENPCE0ltunPGcsJIa6XBOTx/PK169mOqw==} + engines: {node: '>= 18.0.0'} + hasBin: true + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -3467,8 +3492,8 @@ packages: resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} engines: {node: '>=18'} - get-intrinsic@1.2.7: - resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} get-nonce@1.0.1: @@ -3877,6 +3902,10 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isexe@3.1.1: + resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} + engines: {node: '>=16'} + iterator.prototype@1.1.5: resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} engines: {node: '>= 0.4'} @@ -3959,68 +3988,68 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lightningcss-darwin-arm64@1.29.1: - resolution: {integrity: sha512-HtR5XJ5A0lvCqYAoSv2QdZZyoHNttBpa5EP9aNuzBQeKGfbyH5+UipLWvVzpP4Uml5ej4BYs5I9Lco9u1fECqw==} + lightningcss-darwin-arm64@1.29.2: + resolution: {integrity: sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] - lightningcss-darwin-x64@1.29.1: - resolution: {integrity: sha512-k33G9IzKUpHy/J/3+9MCO4e+PzaFblsgBjSGlpAaFikeBFm8B/CkO3cKU9oI4g+fjS2KlkLM/Bza9K/aw8wsNA==} + lightningcss-darwin-x64@1.29.2: + resolution: {integrity: sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] - lightningcss-freebsd-x64@1.29.1: - resolution: {integrity: sha512-0SUW22fv/8kln2LnIdOCmSuXnxgxVC276W5KLTwoehiO0hxkacBxjHOL5EtHD8BAXg2BvuhsJPmVMasvby3LiQ==} + lightningcss-freebsd-x64@1.29.2: + resolution: {integrity: sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] - lightningcss-linux-arm-gnueabihf@1.29.1: - resolution: {integrity: sha512-sD32pFvlR0kDlqsOZmYqH/68SqUMPNj+0pucGxToXZi4XZgZmqeX/NkxNKCPsswAXU3UeYgDSpGhu05eAufjDg==} + lightningcss-linux-arm-gnueabihf@1.29.2: + resolution: {integrity: sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] - lightningcss-linux-arm64-gnu@1.29.1: - resolution: {integrity: sha512-0+vClRIZ6mmJl/dxGuRsE197o1HDEeeRk6nzycSy2GofC2JsY4ifCRnvUWf/CUBQmlrvMzt6SMQNMSEu22csWQ==} + lightningcss-linux-arm64-gnu@1.29.2: + resolution: {integrity: sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - lightningcss-linux-arm64-musl@1.29.1: - resolution: {integrity: sha512-UKMFrG4rL/uHNgelBsDwJcBqVpzNJbzsKkbI3Ja5fg00sgQnHw/VrzUTEc4jhZ+AN2BvQYz/tkHu4vt1kLuJyw==} + lightningcss-linux-arm64-musl@1.29.2: + resolution: {integrity: sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - lightningcss-linux-x64-gnu@1.29.1: - resolution: {integrity: sha512-u1S+xdODy/eEtjADqirA774y3jLcm8RPtYztwReEXoZKdzgsHYPl0s5V52Tst+GKzqjebkULT86XMSxejzfISw==} + lightningcss-linux-x64-gnu@1.29.2: + resolution: {integrity: sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - lightningcss-linux-x64-musl@1.29.1: - resolution: {integrity: sha512-L0Tx0DtaNUTzXv0lbGCLB/c/qEADanHbu4QdcNOXLIe1i8i22rZRpbT3gpWYsCh9aSL9zFujY/WmEXIatWvXbw==} + lightningcss-linux-x64-musl@1.29.2: + resolution: {integrity: sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - lightningcss-win32-arm64-msvc@1.29.1: - resolution: {integrity: sha512-QoOVnkIEFfbW4xPi+dpdft/zAKmgLgsRHfJalEPYuJDOWf7cLQzYg0DEh8/sn737FaeMJxHZRc1oBreiwZCjog==} + lightningcss-win32-arm64-msvc@1.29.2: + resolution: {integrity: sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] - lightningcss-win32-x64-msvc@1.29.1: - resolution: {integrity: sha512-NygcbThNBe4JElP+olyTI/doBNGJvLs3bFCRPdvuCcxZCcCZ71B858IHpdm7L1btZex0FvCmM17FK98Y9MRy1Q==} + lightningcss-win32-x64-msvc@1.29.2: + resolution: {integrity: sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] - lightningcss@1.29.1: - resolution: {integrity: sha512-FmGoeD4S05ewj+AkhTY+D+myDvXI6eL27FjHIjoyUkO/uw7WZD1fBVs0QxeYWa7E17CUHJaYX/RUGISCtcrG4Q==} + lightningcss@1.29.2: + resolution: {integrity: sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==} engines: {node: '>= 12.0.0'} lilconfig@3.1.3: @@ -4128,8 +4157,8 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} - lucide-react@0.475.0: - resolution: {integrity: sha512-NJzvVu1HwFVeZ+Gwq2q00KygM1aBhy/ZrhY9FsAgJtpB+E4R7uxRk9M2iKvHa6/vNxZydIB59htha4c2vvwvVg==} + lucide-react@0.477.0: + resolution: {integrity: sha512-yCf7aYxerFZAbd8jHJxjwe1j7jEMPptjnaOqdYeirFnEy85cNR3/L+o0I875CYFYya+eEVzZSbNuRk8BZPDpVw==} peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -4502,8 +4531,8 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} - prettier@3.5.2: - resolution: {integrity: sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==} + prettier@3.5.3: + resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} engines: {node: '>=14'} hasBin: true @@ -4535,8 +4564,8 @@ packages: prosemirror-collab@1.3.1: resolution: {integrity: sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==} - prosemirror-commands@1.6.2: - resolution: {integrity: sha512-0nDHH++qcf/BuPLYvmqZTUUsPJUCPBUXt0J1ErTcDIS369CTp773itzLGIgIXG4LJXOlwYCr44+Mh4ii6MP1QA==} + prosemirror-commands@1.7.0: + resolution: {integrity: sha512-6toodS4R/Aah5pdsrIwnTYPEjW70SlO5a66oo5Kk+CIrgJz3ukOoS+FYDGqvQlAX5PxoGWDX1oD++tn5X3pyRA==} prosemirror-dropcursor@1.8.1: resolution: {integrity: sha512-M30WJdJZLyXHi3N8vxN6Zh5O8ZBbQCz0gURTfPmTIBNQ5pxrdU7A58QkNqfa98YEjSAL1HUyyU34f6Pm5xBSGw==} @@ -4565,8 +4594,8 @@ packages: prosemirror-schema-basic@1.2.3: resolution: {integrity: sha512-h+H0OQwZVqMon1PNn0AG9cTfx513zgIG2DY00eJ00Yvgb3UD+GQ/VlWW5rcaxacpCGT1Yx8nuhwXk4+QbXUfJA==} - prosemirror-schema-list@1.5.0: - resolution: {integrity: sha512-gg1tAfH1sqpECdhIHOA/aLg2VH3ROKBWQ4m8Qp9mBKrOxQRW61zc+gMCI8nh22gnBzd1t2u1/NPLmO3nAa3ssg==} + prosemirror-schema-list@1.5.1: + resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==} prosemirror-state@1.4.3: resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} @@ -4581,11 +4610,11 @@ packages: prosemirror-state: ^1.4.2 prosemirror-view: ^1.33.8 - prosemirror-transform@1.10.2: - resolution: {integrity: sha512-2iUq0wv2iRoJO/zj5mv8uDUriOHWzXRnOTVgCzSXnktS/2iQRa3UUQwVlkBlYZFtygw6Nh1+X4mGqoYBINn5KQ==} + prosemirror-transform@1.10.3: + resolution: {integrity: sha512-Nhh/+1kZGRINbEHmVu39oynhcap4hWTs/BlU7NnxWj3+l0qi8I1mu67v6mMdEe/ltD8hHvU4FV6PHiCw2VSpMw==} - prosemirror-view@1.38.0: - resolution: {integrity: sha512-O45kxXQTaP9wPdXhp8TKqCR+/unS/gnfg9Q93svQcB3j0mlp2XSPAmsPefxHADwzC+fbNS404jqRxm3UQaGvgw==} + prosemirror-view@1.38.1: + resolution: {integrity: sha512-4FH/uM1A4PNyrxXbD+RAbAsf0d/mM0D/wAKSVVWK7o0A9Q/oOXJBrw786mBf2Vnrs/Edly6dH6Z2gsb7zWwaUw==} pump@3.0.2: resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} @@ -4758,8 +4787,8 @@ packages: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} rfdc@1.4.1: @@ -4774,8 +4803,8 @@ packages: resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} engines: {node: '>=8.0'} - rollup@4.34.8: - resolution: {integrity: sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==} + rollup@4.34.9: + resolution: {integrity: sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -4854,6 +4883,10 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shell-quote@1.8.2: + resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} + engines: {node: '>= 0.4'} + side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -5034,8 +5067,8 @@ packages: peerDependencies: tailwindcss: '>=3.0.0 || insiders' - tailwindcss@4.0.8: - resolution: {integrity: sha512-Me7N5CKR+D2A1xdWA5t5+kjjT7bwnxZOE6/yDI/ixJdJokszsn2n++mdU5yJwrsTpqFX2B9ZNMBJDwcqk9C9lw==} + tailwindcss@4.0.10: + resolution: {integrity: sha512-Z8U/6E2BWSdDkt3IWPiphoV+8V6aNzRmu2SriSbuhm6i3QIcY3TdUJzUP5NX8M8MZuIl+v4/77Rer8u4YSrSsg==} tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} @@ -5130,8 +5163,8 @@ packages: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} engines: {node: '>=10'} - type-fest@4.35.0: - resolution: {integrity: sha512-2/AwEFQDFEy30iOLjrvHDIH7e4HEWH+f1Yl1bI5XMqzuoCUqwYCdxachgsgv0og/JdVZUhbfjcJAoHj5L1753A==} + type-fest@4.37.0: + resolution: {integrity: sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==} engines: {node: '>=16'} typed-array-buffer@1.0.3: @@ -5150,15 +5183,15 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript-eslint@8.24.1: - resolution: {integrity: sha512-cw3rEdzDqBs70TIcb0Gdzbt6h11BSs2pS0yaq7hDWDBtCCSei1pPSUXE9qUdQ/Wm9NgFg8mKtMt1b8fTHIl1jA==} + typescript-eslint@8.26.0: + resolution: {integrity: sha512-PtVz9nAnuNJuAVeUFvwztjuUgSnJInODAUx47VDwWPXzd5vismPOtPtt83tzNXyOjVQbPRp786D6WFW/M2koIA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - typescript@5.7.3: - resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} engines: {node: '>=14.17'} hasBin: true @@ -5204,8 +5237,8 @@ packages: resolution: {integrity: sha512-m1ekpSwuOT5hxkJeZGRxO7gXbXT3gF26NjQ7GdVHoLoF8/nopLcd/QfPigpCy7i51oFHiRJg/CyHhj4vs2+KGw==} engines: {node: '>=18.12.0'} - update-browserslist-db@1.1.2: - resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -5251,8 +5284,8 @@ packages: resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} engines: {node: '>=0.6.0'} - vite@6.1.1: - resolution: {integrity: sha512-4GgM54XrwRfrOp297aIYspIti66k56v16ZnqHvrIM7mG+HjDlAwS7p+Srr7J6fGvEdOJ5JcQ/D9T7HhtdXDTzA==} + vite@6.2.0: + resolution: {integrity: sha512-7dPxoo+WsT/64rDcwoOjk76XHj+TqNTIvHKcuMQ1k4/SeHDaQt5GFAeLYzrimZrMpn/O6DtdI03WUjdxuPM0oQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -5321,6 +5354,11 @@ packages: engines: {node: '>= 8'} hasBin: true + which@4.0.0: + resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} + engines: {node: ^16.13.0 || >=18.0.0} + hasBin: true + wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} @@ -5545,11 +5583,11 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@commitlint/cli@19.7.1(@types/node@22.13.5)(typescript@5.7.3)': + '@commitlint/cli@19.7.1(@types/node@22.13.9)(typescript@5.8.2)': dependencies: '@commitlint/format': 19.5.0 '@commitlint/lint': 19.7.1 - '@commitlint/load': 19.6.1(@types/node@22.13.5)(typescript@5.7.3) + '@commitlint/load': 19.6.1(@types/node@22.13.9)(typescript@5.8.2) '@commitlint/read': 19.5.0 '@commitlint/types': 19.5.0 tinyexec: 0.3.2 @@ -5596,15 +5634,15 @@ snapshots: '@commitlint/rules': 19.6.0 '@commitlint/types': 19.5.0 - '@commitlint/load@19.6.1(@types/node@22.13.5)(typescript@5.7.3)': + '@commitlint/load@19.6.1(@types/node@22.13.9)(typescript@5.8.2)': dependencies: '@commitlint/config-validator': 19.5.0 '@commitlint/execute-rule': 19.5.0 '@commitlint/resolve-extends': 19.5.0 '@commitlint/types': 19.5.0 chalk: 5.4.1 - cosmiconfig: 9.0.0(typescript@5.7.3) - cosmiconfig-typescript-loader: 6.1.0(@types/node@22.13.5)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3) + cosmiconfig: 9.0.0(typescript@5.8.2) + cosmiconfig-typescript-loader: 6.1.0(@types/node@22.13.9)(cosmiconfig@9.0.0(typescript@5.8.2))(typescript@5.8.2) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -5672,37 +5710,37 @@ snapshots: '@drizzle-team/brocli@0.10.2': {} - '@electron-toolkit/eslint-config-prettier@3.0.0(eslint@9.21.0(jiti@2.4.2))(prettier@3.5.2)': + '@electron-toolkit/eslint-config-prettier@3.0.0(eslint@9.21.0(jiti@2.4.2))(prettier@3.5.3)': dependencies: eslint: 9.21.0(jiti@2.4.2) - eslint-config-prettier: 10.0.1(eslint@9.21.0(jiti@2.4.2)) - eslint-plugin-prettier: 5.2.3(eslint-config-prettier@10.0.1(eslint@9.21.0(jiti@2.4.2)))(eslint@9.21.0(jiti@2.4.2))(prettier@3.5.2) - prettier: 3.5.2 + eslint-config-prettier: 10.0.2(eslint@9.21.0(jiti@2.4.2)) + eslint-plugin-prettier: 5.2.3(eslint-config-prettier@10.0.2(eslint@9.21.0(jiti@2.4.2)))(eslint@9.21.0(jiti@2.4.2))(prettier@3.5.3) + prettier: 3.5.3 transitivePeerDependencies: - '@types/eslint' - '@electron-toolkit/eslint-config-ts@3.0.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@electron-toolkit/eslint-config-ts@3.0.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: - '@eslint/js': 9.20.0 + '@eslint/js': 9.21.0 eslint: 9.21.0(jiti@2.4.2) globals: 15.15.0 - typescript-eslint: 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + typescript-eslint: 8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@electron-toolkit/preload@3.0.1(electron@34.2.0)': + '@electron-toolkit/preload@3.0.1(electron@34.3.0)': dependencies: - electron: 34.2.0 + electron: 34.3.0 - '@electron-toolkit/tsconfig@1.0.1(@types/node@22.13.5)': + '@electron-toolkit/tsconfig@1.0.1(@types/node@22.13.9)': dependencies: - '@types/node': 22.13.5 + '@types/node': 22.13.9 - '@electron-toolkit/utils@4.0.0(electron@34.2.0)': + '@electron-toolkit/utils@4.0.0(electron@34.3.0)': dependencies: - electron: 34.2.0 + electron: 34.3.0 '@electron/asar@3.3.1': dependencies: @@ -6103,8 +6141,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.20.0': {} - '@eslint/js@9.21.0': {} '@eslint/object-schema@2.1.6': {} @@ -6133,9 +6169,9 @@ snapshots: '@gar/promisify@1.1.3': {} - '@hookform/resolvers@4.1.1(react-hook-form@7.54.2(react@19.0.0))': + '@hookform/resolvers@4.1.3(react-hook-form@7.54.2(react@19.0.0))': dependencies: - caniuse-lite: 1.0.30001700 + '@standard-schema/utils': 0.3.0 react-hook-form: 7.54.2(react@19.0.0) '@humanfs/core@0.19.1': {} @@ -6202,7 +6238,7 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.0 + fastq: 1.19.1 '@npmcli/fs@2.1.2': dependencies: @@ -6214,6 +6250,8 @@ snapshots: mkdirp: 1.0.4 rimraf: 3.0.2 + '@petamoriken/float16@3.9.1': {} + '@pkgjs/parseargs@0.11.0': optional: true @@ -6296,6 +6334,20 @@ snapshots: optionalDependencies: '@types/react': 19.0.10 + '@radix-ui/react-context-menu@2.2.6(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-context': 1.1.1(@types/react@19.0.10)(react@19.0.0) + '@radix-ui/react-menu': 2.1.6(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.10)(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.10)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.10 + '@types/react-dom': 19.0.4(@types/react@19.0.10) + '@radix-ui/react-context@1.1.1(@types/react@19.0.10)(react@19.0.0)': dependencies: react: 19.0.0 @@ -6762,145 +6814,147 @@ snapshots: '@remirror/core-constants@3.0.0': {} - '@rollup/rollup-android-arm-eabi@4.34.8': + '@rollup/rollup-android-arm-eabi@4.34.9': optional: true - '@rollup/rollup-android-arm64@4.34.8': + '@rollup/rollup-android-arm64@4.34.9': optional: true - '@rollup/rollup-darwin-arm64@4.34.8': + '@rollup/rollup-darwin-arm64@4.34.9': optional: true - '@rollup/rollup-darwin-x64@4.34.8': + '@rollup/rollup-darwin-x64@4.34.9': optional: true - '@rollup/rollup-freebsd-arm64@4.34.8': + '@rollup/rollup-freebsd-arm64@4.34.9': optional: true - '@rollup/rollup-freebsd-x64@4.34.8': + '@rollup/rollup-freebsd-x64@4.34.9': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.34.8': + '@rollup/rollup-linux-arm-gnueabihf@4.34.9': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.34.8': + '@rollup/rollup-linux-arm-musleabihf@4.34.9': optional: true - '@rollup/rollup-linux-arm64-gnu@4.34.8': + '@rollup/rollup-linux-arm64-gnu@4.34.9': optional: true - '@rollup/rollup-linux-arm64-musl@4.34.8': + '@rollup/rollup-linux-arm64-musl@4.34.9': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.34.8': + '@rollup/rollup-linux-loongarch64-gnu@4.34.9': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.34.8': + '@rollup/rollup-linux-powerpc64le-gnu@4.34.9': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.34.8': + '@rollup/rollup-linux-riscv64-gnu@4.34.9': optional: true - '@rollup/rollup-linux-s390x-gnu@4.34.8': + '@rollup/rollup-linux-s390x-gnu@4.34.9': optional: true - '@rollup/rollup-linux-x64-gnu@4.34.8': + '@rollup/rollup-linux-x64-gnu@4.34.9': optional: true - '@rollup/rollup-linux-x64-musl@4.34.8': + '@rollup/rollup-linux-x64-musl@4.34.9': optional: true - '@rollup/rollup-win32-arm64-msvc@4.34.8': + '@rollup/rollup-win32-arm64-msvc@4.34.9': optional: true - '@rollup/rollup-win32-ia32-msvc@4.34.8': + '@rollup/rollup-win32-ia32-msvc@4.34.9': optional: true - '@rollup/rollup-win32-x64-msvc@4.34.8': + '@rollup/rollup-win32-x64-msvc@4.34.9': optional: true '@sindresorhus/is@4.6.0': {} + '@standard-schema/utils@0.3.0': {} + '@szmarczak/http-timer@4.0.6': dependencies: defer-to-connect: 2.0.1 - '@tailwindcss/node@4.0.8': + '@tailwindcss/node@4.0.10': dependencies: enhanced-resolve: 5.18.1 jiti: 2.4.2 - tailwindcss: 4.0.8 + tailwindcss: 4.0.10 - '@tailwindcss/oxide-android-arm64@4.0.8': + '@tailwindcss/oxide-android-arm64@4.0.10': optional: true - '@tailwindcss/oxide-darwin-arm64@4.0.8': + '@tailwindcss/oxide-darwin-arm64@4.0.10': optional: true - '@tailwindcss/oxide-darwin-x64@4.0.8': + '@tailwindcss/oxide-darwin-x64@4.0.10': optional: true - '@tailwindcss/oxide-freebsd-x64@4.0.8': + '@tailwindcss/oxide-freebsd-x64@4.0.10': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.8': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.10': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.0.8': + '@tailwindcss/oxide-linux-arm64-gnu@4.0.10': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.0.8': + '@tailwindcss/oxide-linux-arm64-musl@4.0.10': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.0.8': + '@tailwindcss/oxide-linux-x64-gnu@4.0.10': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.0.8': + '@tailwindcss/oxide-linux-x64-musl@4.0.10': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.0.8': + '@tailwindcss/oxide-win32-arm64-msvc@4.0.10': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.0.8': + '@tailwindcss/oxide-win32-x64-msvc@4.0.10': optional: true - '@tailwindcss/oxide@4.0.8': + '@tailwindcss/oxide@4.0.10': optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.0.8 - '@tailwindcss/oxide-darwin-arm64': 4.0.8 - '@tailwindcss/oxide-darwin-x64': 4.0.8 - '@tailwindcss/oxide-freebsd-x64': 4.0.8 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.0.8 - '@tailwindcss/oxide-linux-arm64-gnu': 4.0.8 - '@tailwindcss/oxide-linux-arm64-musl': 4.0.8 - '@tailwindcss/oxide-linux-x64-gnu': 4.0.8 - '@tailwindcss/oxide-linux-x64-musl': 4.0.8 - '@tailwindcss/oxide-win32-arm64-msvc': 4.0.8 - '@tailwindcss/oxide-win32-x64-msvc': 4.0.8 - - '@tailwindcss/postcss@4.0.8': + '@tailwindcss/oxide-android-arm64': 4.0.10 + '@tailwindcss/oxide-darwin-arm64': 4.0.10 + '@tailwindcss/oxide-darwin-x64': 4.0.10 + '@tailwindcss/oxide-freebsd-x64': 4.0.10 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.0.10 + '@tailwindcss/oxide-linux-arm64-gnu': 4.0.10 + '@tailwindcss/oxide-linux-arm64-musl': 4.0.10 + '@tailwindcss/oxide-linux-x64-gnu': 4.0.10 + '@tailwindcss/oxide-linux-x64-musl': 4.0.10 + '@tailwindcss/oxide-win32-arm64-msvc': 4.0.10 + '@tailwindcss/oxide-win32-x64-msvc': 4.0.10 + + '@tailwindcss/postcss@4.0.10': dependencies: '@alloc/quick-lru': 5.2.0 - '@tailwindcss/node': 4.0.8 - '@tailwindcss/oxide': 4.0.8 - lightningcss: 1.29.1 + '@tailwindcss/node': 4.0.10 + '@tailwindcss/oxide': 4.0.10 + lightningcss: 1.29.2 postcss: 8.5.3 - tailwindcss: 4.0.8 + tailwindcss: 4.0.10 - '@tanstack/history@1.99.13': {} + '@tanstack/history@1.112.8': {} - '@tanstack/query-core@5.66.4': {} + '@tanstack/query-core@5.67.1': {} - '@tanstack/react-query@5.66.9(react@19.0.0)': + '@tanstack/react-query@5.67.1(react@19.0.0)': dependencies: - '@tanstack/query-core': 5.66.4 + '@tanstack/query-core': 5.67.1 react: 19.0.0 - '@tanstack/react-router@1.111.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@tanstack/react-router@1.112.17(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@tanstack/history': 1.99.13 + '@tanstack/history': 1.112.8 '@tanstack/react-store': 0.7.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@tanstack/router-core': 1.111.3 + '@tanstack/router-core': 1.112.12 jsesc: 3.1.0 react: 19.0.0 react-dom: 19.0.0(react@19.0.0) @@ -6914,14 +6968,14 @@ snapshots: react-dom: 19.0.0(react@19.0.0) use-sync-external-store: 1.4.0(react@19.0.0) - '@tanstack/router-core@1.111.3': + '@tanstack/router-core@1.112.12': dependencies: - '@tanstack/history': 1.99.13 + '@tanstack/history': 1.112.8 '@tanstack/store': 0.7.0 - '@tanstack/router-devtools@1.109.2(@tanstack/react-router@1.111.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(csstype@3.1.3)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@tanstack/router-devtools@1.112.17(@tanstack/react-router@1.112.17(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(csstype@3.1.3)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@tanstack/react-router': 1.111.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@tanstack/react-router': 1.112.17(react-dom@19.0.0(react@19.0.0))(react@19.0.0) clsx: 2.1.1 goober: 2.1.16(csstype@3.1.3) react: 19.0.0 @@ -6929,16 +6983,16 @@ snapshots: optionalDependencies: csstype: 3.1.3 - '@tanstack/router-generator@1.109.2(@tanstack/react-router@1.111.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))': + '@tanstack/router-generator@1.112.17(@tanstack/react-router@1.112.17(react-dom@19.0.0(react@19.0.0))(react@19.0.0))': dependencies: '@tanstack/virtual-file-routes': 1.99.0 - prettier: 3.5.2 + prettier: 3.5.3 tsx: 4.19.3 zod: 3.24.2 optionalDependencies: - '@tanstack/react-router': 1.111.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@tanstack/react-router': 1.112.17(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@tanstack/router-plugin@1.109.2(@tanstack/react-router@1.111.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.3)(yaml@2.7.0))': + '@tanstack/router-plugin@1.112.17(@tanstack/react-router@1.112.17(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(vite@6.2.0(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0))': dependencies: '@babel/core': 7.26.9 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.9) @@ -6946,7 +7000,8 @@ snapshots: '@babel/template': 7.26.9 '@babel/traverse': 7.26.9 '@babel/types': 7.26.9 - '@tanstack/router-generator': 1.109.2(@tanstack/react-router@1.111.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)) + '@tanstack/router-core': 1.112.12 + '@tanstack/router-generator': 1.112.17(@tanstack/react-router@1.112.17(react-dom@19.0.0(react@19.0.0))(react@19.0.0)) '@tanstack/router-utils': 1.102.2 '@tanstack/virtual-file-routes': 1.99.0 '@types/babel__core': 7.20.5 @@ -6957,8 +7012,8 @@ snapshots: unplugin: 2.2.0 zod: 3.24.2 optionalDependencies: - '@tanstack/react-router': 1.111.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - vite: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.3)(yaml@2.7.0) + '@tanstack/react-router': 1.112.17(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + vite: 6.2.0(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0) transitivePeerDependencies: - supports-color @@ -6966,7 +7021,7 @@ snapshots: dependencies: '@babel/generator': 7.26.9 '@babel/parser': 7.26.9 - ansis: 3.16.0 + ansis: 3.17.0 diff: 7.0.0 '@tanstack/store@0.7.0': {} @@ -7110,7 +7165,7 @@ snapshots: dependencies: prosemirror-changeset: 2.2.1 prosemirror-collab: 1.3.1 - prosemirror-commands: 1.6.2 + prosemirror-commands: 1.7.0 prosemirror-dropcursor: 1.8.1 prosemirror-gapcursor: 1.3.2 prosemirror-history: 1.4.1 @@ -7120,12 +7175,12 @@ snapshots: prosemirror-menu: 1.2.4 prosemirror-model: 1.24.1 prosemirror-schema-basic: 1.2.3 - prosemirror-schema-list: 1.5.0 + prosemirror-schema-list: 1.5.1 prosemirror-state: 1.4.3 prosemirror-tables: 1.6.4 - prosemirror-trailing-node: 3.0.0(prosemirror-model@1.24.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.0) - prosemirror-transform: 1.10.2 - prosemirror-view: 1.38.0 + prosemirror-trailing-node: 3.0.0(prosemirror-model@1.24.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1) + prosemirror-transform: 1.10.3 + prosemirror-view: 1.38.1 '@tiptap/react@2.11.5(@tiptap/core@2.11.5(@tiptap/pm@2.11.5))(@tiptap/pm@2.11.5)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: @@ -7188,18 +7243,18 @@ snapshots: '@types/better-sqlite3@7.6.12': dependencies: - '@types/node': 22.13.5 + '@types/node': 22.13.9 '@types/cacheable-request@6.0.3': dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 22.13.5 + '@types/node': 22.13.9 '@types/responselike': 1.0.3 '@types/conventional-commits-parser@5.0.1': dependencies: - '@types/node': 22.13.5 + '@types/node': 22.13.9 '@types/debug@4.1.12': dependencies: @@ -7209,7 +7264,7 @@ snapshots: '@types/fs-extra@9.0.13': dependencies: - '@types/node': 22.13.5 + '@types/node': 22.13.9 '@types/hast@3.0.4': dependencies: @@ -7221,7 +7276,7 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 22.13.5 + '@types/node': 22.13.9 '@types/linkify-it@5.0.0': {} @@ -7234,11 +7289,11 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@20.17.19': + '@types/node@20.17.23': dependencies: undici-types: 6.19.8 - '@types/node@22.13.5': + '@types/node@22.13.9': dependencies: undici-types: 6.20.0 @@ -7246,7 +7301,7 @@ snapshots: '@types/plist@3.0.5': dependencies: - '@types/node': 22.13.5 + '@types/node': 22.13.9 xmlbuilder: 15.1.1 optional: true @@ -7260,7 +7315,7 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 22.13.5 + '@types/node': 22.13.9 '@types/semver@7.5.8': {} @@ -7268,99 +7323,99 @@ snapshots: '@types/use-sync-external-store@0.0.6': {} - '@types/verror@1.10.10': + '@types/verror@1.10.11': optional: true '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.13.5 + '@types/node': 22.13.9 optional: true - '@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.26.0(@typescript-eslint/parser@8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.24.1 - '@typescript-eslint/type-utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.24.1 + '@typescript-eslint/parser': 8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/scope-manager': 8.26.0 + '@typescript-eslint/type-utils': 8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/utils': 8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.26.0 eslint: 9.21.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + ts-api-utils: 2.0.1(typescript@5.8.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/parser@8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: - '@typescript-eslint/scope-manager': 8.24.1 - '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.24.1 + '@typescript-eslint/scope-manager': 8.26.0 + '@typescript-eslint/types': 8.26.0 + '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.26.0 debug: 4.4.0 eslint: 9.21.0(jiti@2.4.2) - typescript: 5.7.3 + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.24.1': + '@typescript-eslint/scope-manager@8.26.0': dependencies: - '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/visitor-keys': 8.24.1 + '@typescript-eslint/types': 8.26.0 + '@typescript-eslint/visitor-keys': 8.26.0 - '@typescript-eslint/type-utils@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: - '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.8.2) + '@typescript-eslint/utils': 8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) debug: 4.4.0 eslint: 9.21.0(jiti@2.4.2) - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + ts-api-utils: 2.0.1(typescript@5.8.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.24.1': {} + '@typescript-eslint/types@8.26.0': {} - '@typescript-eslint/typescript-estree@8.24.1(typescript@5.7.3)': + '@typescript-eslint/typescript-estree@8.26.0(typescript@5.8.2)': dependencies: - '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/visitor-keys': 8.24.1 + '@typescript-eslint/types': 8.26.0 + '@typescript-eslint/visitor-keys': 8.26.0 debug: 4.4.0 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.1 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + ts-api-utils: 2.0.1(typescript@5.8.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/utils@8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.24.1 - '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.26.0 + '@typescript-eslint/types': 8.26.0 + '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.8.2) eslint: 9.21.0(jiti@2.4.2) - typescript: 5.7.3 + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.24.1': + '@typescript-eslint/visitor-keys@8.26.0': dependencies: - '@typescript-eslint/types': 8.24.1 + '@typescript-eslint/types': 8.26.0 eslint-visitor-keys: 4.2.0 - '@vitejs/plugin-react@4.3.4(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.3)(yaml@2.7.0))': + '@vitejs/plugin-react@4.3.4(vite@6.2.0(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0))': dependencies: '@babel/core': 7.26.9 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.9) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.9) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.3)(yaml@2.7.0) + vite: 6.2.0(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0) transitivePeerDependencies: - supports-color @@ -7373,11 +7428,11 @@ snapshots: abbrev@1.1.1: {} - acorn-jsx@5.3.2(acorn@8.14.0): + acorn-jsx@5.3.2(acorn@8.14.1): dependencies: - acorn: 8.14.0 + acorn: 8.14.1 - acorn@8.14.0: {} + acorn@8.14.1: {} add-stream@1.0.0: {} @@ -7430,7 +7485,7 @@ snapshots: ansi-styles@6.2.1: {} - ansis@3.16.0: {} + ansis@3.17.0: {} anymatch@3.1.3: dependencies: @@ -7530,7 +7585,7 @@ snapshots: array-buffer-byte-length@1.0.2: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 is-array-buffer: 3.0.5 array-ify@1.0.0: {} @@ -7541,7 +7596,7 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.23.9 es-object-atoms: 1.1.1 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 is-string: 1.1.1 array.prototype.findlast@1.2.5: @@ -7582,7 +7637,7 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.23.9 es-errors: 1.3.0 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 assert-plus@1.0.0: @@ -7659,10 +7714,10 @@ snapshots: browserslist@4.24.4: dependencies: - caniuse-lite: 1.0.30001700 - electron-to-chromium: 1.5.103 + caniuse-lite: 1.0.30001702 + electron-to-chromium: 1.5.112 node-releases: 2.0.19 - update-browserslist-db: 1.1.2(browserslist@4.24.4) + update-browserslist-db: 1.1.3(browserslist@4.24.4) buffer-crc32@0.2.13: {} @@ -7747,17 +7802,17 @@ snapshots: dependencies: call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 set-function-length: 1.2.2 - call-bound@1.0.3: + call-bound@1.0.4: dependencies: call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 callsites@3.1.0: {} - caniuse-lite@1.0.30001700: {} + caniuse-lite@1.0.30001702: {} chalk@4.1.2: dependencies: @@ -7876,7 +7931,7 @@ snapshots: config-file-ts@0.2.8-rc1: dependencies: glob: 10.4.5 - typescript: 5.7.3 + typescript: 5.8.2 console-control-strings@1.1.0: {} @@ -7981,21 +8036,21 @@ snapshots: core-util-is@1.0.3: {} - cosmiconfig-typescript-loader@6.1.0(@types/node@22.13.5)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3): + cosmiconfig-typescript-loader@6.1.0(@types/node@22.13.9)(cosmiconfig@9.0.0(typescript@5.8.2))(typescript@5.8.2): dependencies: - '@types/node': 22.13.5 - cosmiconfig: 9.0.0(typescript@5.7.3) + '@types/node': 22.13.9 + cosmiconfig: 9.0.0(typescript@5.8.2) jiti: 2.4.2 - typescript: 5.7.3 + typescript: 5.8.2 - cosmiconfig@9.0.0(typescript@5.7.3): + cosmiconfig@9.0.0(typescript@5.8.2): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.2 crc-32@1.2.2: {} @@ -8027,19 +8082,19 @@ snapshots: data-view-buffer@1.0.2: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 is-data-view: 1.0.2 data-view-byte-length@1.0.2: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 is-data-view: 1.0.2 data-view-byte-offset@1.0.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 is-data-view: 1.0.2 @@ -8083,8 +8138,6 @@ snapshots: dequal@2.0.3: {} - detect-libc@1.0.3: {} - detect-libc@2.0.3: {} detect-node-es@1.1.0: {} @@ -8121,7 +8174,7 @@ snapshots: dmg-license@1.0.11: dependencies: '@types/plist': 3.0.5 - '@types/verror': 1.10.10 + '@types/verror': 1.10.11 ajv: 6.12.6 crc: 3.8.0 iconv-corefoundation: 1.1.7 @@ -8144,19 +8197,21 @@ snapshots: dotenv@16.4.7: {} - drizzle-kit@0.30.4: + drizzle-kit@0.30.5: dependencies: '@drizzle-team/brocli': 0.10.2 '@esbuild-kit/esm-loader': 2.6.5 esbuild: 0.19.12 esbuild-register: 3.6.0(esbuild@0.19.12) + gel: 2.0.1 transitivePeerDependencies: - supports-color - drizzle-orm@0.39.3(@types/better-sqlite3@7.6.12)(better-sqlite3@11.8.1): + drizzle-orm@0.40.0(@types/better-sqlite3@7.6.12)(better-sqlite3@11.8.1)(gel@2.0.1): optionalDependencies: '@types/better-sqlite3': 7.6.12 better-sqlite3: 11.8.1 + gel: 2.0.1 dunder-proto@1.0.1: dependencies: @@ -8210,9 +8265,9 @@ snapshots: transitivePeerDependencies: - supports-color - electron-to-chromium@1.5.103: {} + electron-to-chromium@1.5.112: {} - electron-vite@3.0.0(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.3)(yaml@2.7.0)): + electron-vite@3.0.0(vite@6.2.0(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0)): dependencies: '@babel/core': 7.26.9 '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.9) @@ -8220,14 +8275,14 @@ snapshots: esbuild: 0.24.2 magic-string: 0.30.17 picocolors: 1.1.1 - vite: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.3)(yaml@2.7.0) + vite: 6.2.0(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0) transitivePeerDependencies: - supports-color - electron@34.2.0: + electron@34.3.0: dependencies: '@electron/get': 2.0.3 - '@types/node': 20.17.19 + '@types/node': 20.17.23 extract-zip: 2.0.1 transitivePeerDependencies: - supports-color @@ -8256,6 +8311,8 @@ snapshots: env-paths@2.2.1: {} + env-paths@3.0.0: {} + environment@1.1.0: {} err-code@2.0.3: {} @@ -8270,7 +8327,7 @@ snapshots: arraybuffer.prototype.slice: 1.0.4 available-typed-arrays: 1.0.7 call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 data-view-buffer: 1.0.2 data-view-byte-length: 1.0.2 data-view-byte-offset: 1.0.1 @@ -8280,7 +8337,7 @@ snapshots: es-set-tostringtag: 2.1.0 es-to-primitive: 1.3.0 function.prototype.name: 1.1.8 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 get-proto: 1.0.1 get-symbol-description: 1.1.0 globalthis: 1.0.4 @@ -8325,13 +8382,13 @@ snapshots: es-iterator-helpers@1.2.1: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-properties: 1.2.1 es-abstract: 1.23.9 es-errors: 1.3.0 es-set-tostringtag: 2.1.0 function-bind: 1.1.2 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 globalthis: 1.0.4 gopd: 1.2.0 has-property-descriptors: 1.0.2 @@ -8348,7 +8405,7 @@ snapshots: es-set-tostringtag@2.1.0: dependencies: es-errors: 1.3.0 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 has-tostringtag: 1.0.2 hasown: 2.0.2 @@ -8483,20 +8540,20 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.0.1(eslint@9.21.0(jiti@2.4.2)): + eslint-config-prettier@10.0.2(eslint@9.21.0(jiti@2.4.2)): dependencies: eslint: 9.21.0(jiti@2.4.2) - eslint-plugin-prettier@5.2.3(eslint-config-prettier@10.0.1(eslint@9.21.0(jiti@2.4.2)))(eslint@9.21.0(jiti@2.4.2))(prettier@3.5.2): + eslint-plugin-prettier@5.2.3(eslint-config-prettier@10.0.2(eslint@9.21.0(jiti@2.4.2)))(eslint@9.21.0(jiti@2.4.2))(prettier@3.5.3): dependencies: eslint: 9.21.0(jiti@2.4.2) - prettier: 3.5.2 + prettier: 3.5.3 prettier-linter-helpers: 1.0.0 synckit: 0.9.2 optionalDependencies: - eslint-config-prettier: 10.0.1(eslint@9.21.0(jiti@2.4.2)) + eslint-config-prettier: 10.0.2(eslint@9.21.0(jiti@2.4.2)) - eslint-plugin-react-hooks@5.1.0(eslint@9.21.0(jiti@2.4.2)): + eslint-plugin-react-hooks@5.2.0(eslint@9.21.0(jiti@2.4.2)): dependencies: eslint: 9.21.0(jiti@2.4.2) @@ -8578,8 +8635,8 @@ snapshots: espree@10.3.0: dependencies: - acorn: 8.14.0 - acorn-jsx: 5.3.2(acorn@8.14.0) + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) eslint-visitor-keys: 4.2.0 esquery@1.6.0: @@ -8643,9 +8700,9 @@ snapshots: fast-uri@3.0.6: {} - fastq@1.19.0: + fastq@1.19.1: dependencies: - reusify: 1.0.4 + reusify: 1.1.0 fd-slicer@1.1.0: dependencies: @@ -8665,7 +8722,7 @@ snapshots: dependencies: to-regex-range: 5.0.1 - find-up-simple@1.0.0: {} + find-up-simple@1.0.1: {} find-up@5.0.0: dependencies: @@ -8689,7 +8746,7 @@ snapshots: dependencies: is-callable: 1.2.7 - foreground-child@3.3.0: + foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 signal-exit: 4.1.0 @@ -8742,7 +8799,7 @@ snapshots: function.prototype.name@1.1.8: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-properties: 1.2.1 functions-have-names: 1.2.3 hasown: 2.0.2 @@ -8761,13 +8818,24 @@ snapshots: strip-ansi: 6.0.1 wide-align: 1.1.5 + gel@2.0.1: + dependencies: + '@petamoriken/float16': 3.9.1 + debug: 4.4.0 + env-paths: 3.0.0 + semver: 7.7.1 + shell-quote: 1.8.2 + which: 4.0.0 + transitivePeerDependencies: + - supports-color + gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} get-east-asian-width@1.3.0: {} - get-intrinsic@1.2.7: + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 @@ -8795,9 +8863,9 @@ snapshots: get-symbol-description@1.1.0: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 get-tsconfig@4.10.0: dependencies: @@ -8837,7 +8905,7 @@ snapshots: glob@10.4.5: dependencies: - foreground-child: 3.3.0 + foreground-child: 3.3.1 jackspeak: 3.4.3 minimatch: 9.0.5 minipass: 7.1.2 @@ -9051,15 +9119,15 @@ snapshots: is-array-buffer@3.0.5: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 - get-intrinsic: 1.2.7 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 is-arrayish@0.2.1: {} is-async-function@2.1.1: dependencies: async-function: 1.0.0 - call-bound: 1.0.3 + call-bound: 1.0.4 get-proto: 1.0.1 has-tostringtag: 1.0.2 safe-regex-test: 1.1.0 @@ -9074,7 +9142,7 @@ snapshots: is-boolean-object@1.2.2: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 has-tostringtag: 1.0.2 is-callable@1.2.7: {} @@ -9089,20 +9157,20 @@ snapshots: is-data-view@1.0.2: dependencies: - call-bound: 1.0.3 - get-intrinsic: 1.2.7 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 is-typed-array: 1.1.15 is-date-object@1.1.0: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 has-tostringtag: 1.0.2 is-extglob@2.1.1: {} is-finalizationregistry@1.1.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 is-fullwidth-code-point@3.0.0: {} @@ -9114,7 +9182,7 @@ snapshots: is-generator-function@1.1.0: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 get-proto: 1.0.1 has-tostringtag: 1.0.2 safe-regex-test: 1.1.0 @@ -9131,7 +9199,7 @@ snapshots: is-number-object@1.1.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 has-tostringtag: 1.0.2 is-number@7.0.0: {} @@ -9140,7 +9208,7 @@ snapshots: is-regex@1.2.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 gopd: 1.2.0 has-tostringtag: 1.0.2 hasown: 2.0.2 @@ -9149,18 +9217,18 @@ snapshots: is-shared-array-buffer@1.0.4: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 is-stream@3.0.0: {} is-string@1.1.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 has-tostringtag: 1.0.2 is-symbol@1.1.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 has-symbols: 1.1.0 safe-regex-test: 1.1.0 @@ -9178,12 +9246,12 @@ snapshots: is-weakref@1.1.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 is-weakset@2.0.4: dependencies: - call-bound: 1.0.3 - get-intrinsic: 1.2.7 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 isarray@1.0.0: {} @@ -9195,11 +9263,13 @@ snapshots: isexe@2.0.0: {} + isexe@3.1.1: {} + iterator.prototype@1.1.5: dependencies: define-data-property: 1.1.4 es-object-atoms: 1.1.1 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 get-proto: 1.0.1 has-symbols: 1.1.0 set-function-name: 2.0.2 @@ -9278,50 +9348,50 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lightningcss-darwin-arm64@1.29.1: + lightningcss-darwin-arm64@1.29.2: optional: true - lightningcss-darwin-x64@1.29.1: + lightningcss-darwin-x64@1.29.2: optional: true - lightningcss-freebsd-x64@1.29.1: + lightningcss-freebsd-x64@1.29.2: optional: true - lightningcss-linux-arm-gnueabihf@1.29.1: + lightningcss-linux-arm-gnueabihf@1.29.2: optional: true - lightningcss-linux-arm64-gnu@1.29.1: + lightningcss-linux-arm64-gnu@1.29.2: optional: true - lightningcss-linux-arm64-musl@1.29.1: + lightningcss-linux-arm64-musl@1.29.2: optional: true - lightningcss-linux-x64-gnu@1.29.1: + lightningcss-linux-x64-gnu@1.29.2: optional: true - lightningcss-linux-x64-musl@1.29.1: + lightningcss-linux-x64-musl@1.29.2: optional: true - lightningcss-win32-arm64-msvc@1.29.1: + lightningcss-win32-arm64-msvc@1.29.2: optional: true - lightningcss-win32-x64-msvc@1.29.1: + lightningcss-win32-x64-msvc@1.29.2: optional: true - lightningcss@1.29.1: + lightningcss@1.29.2: dependencies: - detect-libc: 1.0.3 + detect-libc: 2.0.3 optionalDependencies: - lightningcss-darwin-arm64: 1.29.1 - lightningcss-darwin-x64: 1.29.1 - lightningcss-freebsd-x64: 1.29.1 - lightningcss-linux-arm-gnueabihf: 1.29.1 - lightningcss-linux-arm64-gnu: 1.29.1 - lightningcss-linux-arm64-musl: 1.29.1 - lightningcss-linux-x64-gnu: 1.29.1 - lightningcss-linux-x64-musl: 1.29.1 - lightningcss-win32-arm64-msvc: 1.29.1 - lightningcss-win32-x64-msvc: 1.29.1 + lightningcss-darwin-arm64: 1.29.2 + lightningcss-darwin-x64: 1.29.2 + lightningcss-freebsd-x64: 1.29.2 + lightningcss-linux-arm-gnueabihf: 1.29.2 + lightningcss-linux-arm64-gnu: 1.29.2 + lightningcss-linux-arm64-musl: 1.29.2 + lightningcss-linux-x64-gnu: 1.29.2 + lightningcss-linux-x64-musl: 1.29.2 + lightningcss-win32-arm64-msvc: 1.29.2 + lightningcss-win32-x64-msvc: 1.29.2 lilconfig@3.1.3: {} @@ -9430,7 +9500,7 @@ snapshots: lru-cache@7.18.3: {} - lucide-react@0.475.0(react@19.0.0): + lucide-react@0.477.0(react@19.0.0): dependencies: react: 19.0.0 @@ -9644,7 +9714,7 @@ snapshots: object.assign@4.1.7: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-properties: 1.2.1 es-object-atoms: 1.1.1 has-symbols: 1.1.0 @@ -9666,7 +9736,7 @@ snapshots: object.values@1.2.1: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-properties: 1.2.1 es-object-atoms: 1.1.1 @@ -9711,7 +9781,7 @@ snapshots: own-keys@1.0.1: dependencies: - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 object-keys: 1.1.1 safe-push-apply: 1.0.0 @@ -9754,7 +9824,7 @@ snapshots: dependencies: '@babel/code-frame': 7.26.2 index-to-position: 0.1.2 - type-fest: 4.35.0 + type-fest: 4.37.0 path-exists@4.0.0: {} @@ -9818,7 +9888,7 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier@3.5.2: {} + prettier@3.5.3: {} process-nextick-args@2.0.1: {} @@ -9839,42 +9909,42 @@ snapshots: prosemirror-changeset@2.2.1: dependencies: - prosemirror-transform: 1.10.2 + prosemirror-transform: 1.10.3 prosemirror-collab@1.3.1: dependencies: prosemirror-state: 1.4.3 - prosemirror-commands@1.6.2: + prosemirror-commands@1.7.0: dependencies: prosemirror-model: 1.24.1 prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.2 + prosemirror-transform: 1.10.3 prosemirror-dropcursor@1.8.1: dependencies: prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.2 - prosemirror-view: 1.38.0 + prosemirror-transform: 1.10.3 + prosemirror-view: 1.38.1 prosemirror-gapcursor@1.3.2: dependencies: prosemirror-keymap: 1.2.2 prosemirror-model: 1.24.1 prosemirror-state: 1.4.3 - prosemirror-view: 1.38.0 + prosemirror-view: 1.38.1 prosemirror-history@1.4.1: dependencies: prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.2 - prosemirror-view: 1.38.0 + prosemirror-transform: 1.10.3 + prosemirror-view: 1.38.1 rope-sequence: 1.3.4 prosemirror-inputrules@1.4.0: dependencies: prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.2 + prosemirror-transform: 1.10.3 prosemirror-keymap@1.2.2: dependencies: @@ -9890,7 +9960,7 @@ snapshots: prosemirror-menu@1.2.4: dependencies: crelt: 1.0.6 - prosemirror-commands: 1.6.2 + prosemirror-commands: 1.7.0 prosemirror-history: 1.4.1 prosemirror-state: 1.4.3 @@ -9902,43 +9972,43 @@ snapshots: dependencies: prosemirror-model: 1.24.1 - prosemirror-schema-list@1.5.0: + prosemirror-schema-list@1.5.1: dependencies: prosemirror-model: 1.24.1 prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.2 + prosemirror-transform: 1.10.3 prosemirror-state@1.4.3: dependencies: prosemirror-model: 1.24.1 - prosemirror-transform: 1.10.2 - prosemirror-view: 1.38.0 + prosemirror-transform: 1.10.3 + prosemirror-view: 1.38.1 prosemirror-tables@1.6.4: dependencies: prosemirror-keymap: 1.2.2 prosemirror-model: 1.24.1 prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.2 - prosemirror-view: 1.38.0 + prosemirror-transform: 1.10.3 + prosemirror-view: 1.38.1 - prosemirror-trailing-node@3.0.0(prosemirror-model@1.24.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.0): + prosemirror-trailing-node@3.0.0(prosemirror-model@1.24.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1): dependencies: '@remirror/core-constants': 3.0.0 escape-string-regexp: 4.0.0 prosemirror-model: 1.24.1 prosemirror-state: 1.4.3 - prosemirror-view: 1.38.0 + prosemirror-view: 1.38.1 - prosemirror-transform@1.10.2: + prosemirror-transform@1.10.3: dependencies: prosemirror-model: 1.24.1 - prosemirror-view@1.38.0: + prosemirror-view@1.38.1: dependencies: prosemirror-model: 1.24.1 prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.2 + prosemirror-transform: 1.10.3 pump@3.0.2: dependencies: @@ -10027,16 +10097,16 @@ snapshots: read-package-up@11.0.0: dependencies: - find-up-simple: 1.0.0 + find-up-simple: 1.0.1 read-pkg: 9.0.1 - type-fest: 4.35.0 + type-fest: 4.37.0 read-pkg@9.0.1: dependencies: '@types/normalize-package-data': 2.4.4 normalize-package-data: 6.0.2 parse-json: 8.1.0 - type-fest: 4.35.0 + type-fest: 4.37.0 unicorn-magic: 0.1.0 readable-stream@2.3.8: @@ -10070,7 +10140,7 @@ snapshots: es-abstract: 1.23.9 es-errors: 1.3.0 es-object-atoms: 1.1.1 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 get-proto: 1.0.1 which-builtin-type: 1.2.1 @@ -10121,7 +10191,7 @@ snapshots: retry@0.12.0: {} - reusify@1.0.4: {} + reusify@1.1.0: {} rfdc@1.4.1: {} @@ -10139,29 +10209,29 @@ snapshots: sprintf-js: 1.1.3 optional: true - rollup@4.34.8: + rollup@4.34.9: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.34.8 - '@rollup/rollup-android-arm64': 4.34.8 - '@rollup/rollup-darwin-arm64': 4.34.8 - '@rollup/rollup-darwin-x64': 4.34.8 - '@rollup/rollup-freebsd-arm64': 4.34.8 - '@rollup/rollup-freebsd-x64': 4.34.8 - '@rollup/rollup-linux-arm-gnueabihf': 4.34.8 - '@rollup/rollup-linux-arm-musleabihf': 4.34.8 - '@rollup/rollup-linux-arm64-gnu': 4.34.8 - '@rollup/rollup-linux-arm64-musl': 4.34.8 - '@rollup/rollup-linux-loongarch64-gnu': 4.34.8 - '@rollup/rollup-linux-powerpc64le-gnu': 4.34.8 - '@rollup/rollup-linux-riscv64-gnu': 4.34.8 - '@rollup/rollup-linux-s390x-gnu': 4.34.8 - '@rollup/rollup-linux-x64-gnu': 4.34.8 - '@rollup/rollup-linux-x64-musl': 4.34.8 - '@rollup/rollup-win32-arm64-msvc': 4.34.8 - '@rollup/rollup-win32-ia32-msvc': 4.34.8 - '@rollup/rollup-win32-x64-msvc': 4.34.8 + '@rollup/rollup-android-arm-eabi': 4.34.9 + '@rollup/rollup-android-arm64': 4.34.9 + '@rollup/rollup-darwin-arm64': 4.34.9 + '@rollup/rollup-darwin-x64': 4.34.9 + '@rollup/rollup-freebsd-arm64': 4.34.9 + '@rollup/rollup-freebsd-x64': 4.34.9 + '@rollup/rollup-linux-arm-gnueabihf': 4.34.9 + '@rollup/rollup-linux-arm-musleabihf': 4.34.9 + '@rollup/rollup-linux-arm64-gnu': 4.34.9 + '@rollup/rollup-linux-arm64-musl': 4.34.9 + '@rollup/rollup-linux-loongarch64-gnu': 4.34.9 + '@rollup/rollup-linux-powerpc64le-gnu': 4.34.9 + '@rollup/rollup-linux-riscv64-gnu': 4.34.9 + '@rollup/rollup-linux-s390x-gnu': 4.34.9 + '@rollup/rollup-linux-x64-gnu': 4.34.9 + '@rollup/rollup-linux-x64-musl': 4.34.9 + '@rollup/rollup-win32-arm64-msvc': 4.34.9 + '@rollup/rollup-win32-ia32-msvc': 4.34.9 + '@rollup/rollup-win32-x64-msvc': 4.34.9 fsevents: 2.3.3 rope-sequence@1.3.4: {} @@ -10173,8 +10243,8 @@ snapshots: safe-array-concat@1.1.3: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 - get-intrinsic: 1.2.7 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 has-symbols: 1.1.0 isarray: 2.0.5 @@ -10189,7 +10259,7 @@ snapshots: safe-regex-test@1.1.0: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 is-regex: 1.2.1 @@ -10222,7 +10292,7 @@ snapshots: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 gopd: 1.2.0 has-property-descriptors: 1.0.2 @@ -10245,6 +10315,8 @@ snapshots: shebang-regex@3.0.0: {} + shell-quote@1.8.2: {} + side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 @@ -10252,16 +10324,16 @@ snapshots: side-channel-map@1.0.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 object-inspect: 1.13.4 side-channel-weakmap@1.0.2: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 object-inspect: 1.13.4 side-channel-map: 1.0.1 @@ -10377,12 +10449,12 @@ snapshots: string.prototype.matchall@4.0.12: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-properties: 1.2.1 es-abstract: 1.23.9 es-errors: 1.3.0 es-object-atoms: 1.1.1 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 gopd: 1.2.0 has-symbols: 1.1.0 internal-slot: 1.1.0 @@ -10398,7 +10470,7 @@ snapshots: string.prototype.trim@1.2.10: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-data-property: 1.1.4 define-properties: 1.2.1 es-abstract: 1.23.9 @@ -10408,7 +10480,7 @@ snapshots: string.prototype.trimend@1.0.9: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-properties: 1.2.1 es-object-atoms: 1.1.1 @@ -10459,11 +10531,11 @@ snapshots: tailwind-merge@3.0.2: {} - tailwindcss-animate@1.0.7(tailwindcss@4.0.8): + tailwindcss-animate@1.0.7(tailwindcss@4.0.10): dependencies: - tailwindcss: 4.0.8 + tailwindcss: 4.0.10 - tailwindcss@4.0.8: {} + tailwindcss@4.0.10: {} tapable@2.2.1: {} @@ -10532,13 +10604,13 @@ snapshots: dependencies: utf8-byte-length: 1.0.5 - ts-api-utils@2.0.1(typescript@5.7.3): + ts-api-utils@2.0.1(typescript@5.8.2): dependencies: - typescript: 5.7.3 + typescript: 5.8.2 - tsc-files@1.1.4(typescript@5.7.3): + tsc-files@1.1.4(typescript@5.8.2): dependencies: - typescript: 5.7.3 + typescript: 5.8.2 tslib@2.8.1: {} @@ -10560,11 +10632,11 @@ snapshots: type-fest@0.13.1: optional: true - type-fest@4.35.0: {} + type-fest@4.37.0: {} typed-array-buffer@1.0.3: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 is-typed-array: 1.1.15 @@ -10595,17 +10667,17 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3): + typescript-eslint@8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/parser': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/eslint-plugin': 8.26.0(@typescript-eslint/parser@8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/parser': 8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/utils': 8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) eslint: 9.21.0(jiti@2.4.2) - typescript: 5.7.3 + typescript: 5.8.2 transitivePeerDependencies: - supports-color - typescript@5.7.3: {} + typescript@5.8.2: {} uc.micro@2.1.0: {} @@ -10614,7 +10686,7 @@ snapshots: unbox-primitive@1.1.0: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 has-bigints: 1.1.0 has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 @@ -10639,10 +10711,10 @@ snapshots: unplugin@2.2.0: dependencies: - acorn: 8.14.0 + acorn: 8.14.1 webpack-virtual-modules: 0.6.2 - update-browserslist-db@1.1.2(browserslist@4.24.4): + update-browserslist-db@1.1.3(browserslist@4.24.4): dependencies: browserslist: 4.24.4 escalade: 3.2.0 @@ -10687,16 +10759,16 @@ snapshots: extsprintf: 1.4.1 optional: true - vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.3)(yaml@2.7.0): + vite@6.2.0(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0): dependencies: - esbuild: 0.24.2 + esbuild: 0.25.0 postcss: 8.5.3 - rollup: 4.34.8 + rollup: 4.34.9 optionalDependencies: - '@types/node': 22.13.5 + '@types/node': 22.13.9 fsevents: 2.3.3 jiti: 2.4.2 - lightningcss: 1.29.1 + lightningcss: 1.29.2 tsx: 4.19.3 yaml: 2.7.0 @@ -10718,7 +10790,7 @@ snapshots: which-builtin-type@1.2.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 function.prototype.name: 1.1.8 has-tostringtag: 1.0.2 is-async-function: 2.1.1 @@ -10743,7 +10815,7 @@ snapshots: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 for-each: 0.3.5 gopd: 1.2.0 has-tostringtag: 1.0.2 @@ -10752,6 +10824,10 @@ snapshots: dependencies: isexe: 2.0.0 + which@4.0.0: + dependencies: + isexe: 3.1.1 + wide-align@1.1.5: dependencies: string-width: 4.2.3 diff --git a/resources/database/migrations/0007_wild_kronos.sql b/resources/database/migrations/0007_wild_kronos.sql new file mode 100644 index 0000000..5d7e021 --- /dev/null +++ b/resources/database/migrations/0007_wild_kronos.sql @@ -0,0 +1,2 @@ +ALTER TABLE `clipboard` ADD `pinned` integer DEFAULT false NOT NULL;--> statement-breakpoint +CREATE UNIQUE INDEX `notes_id_unique` ON `notes` (`id`); \ No newline at end of file diff --git a/resources/database/migrations/0008_demonic_shiva.sql b/resources/database/migrations/0008_demonic_shiva.sql new file mode 100644 index 0000000..21ad1ad --- /dev/null +++ b/resources/database/migrations/0008_demonic_shiva.sql @@ -0,0 +1,18 @@ +PRAGMA foreign_keys=OFF;--> statement-breakpoint +CREATE TABLE `__new_notes` ( + `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + `title` text NOT NULL, + `description` text NOT NULL, + `favorite` integer DEFAULT false NOT NULL, + `content` blob NOT NULL, + `labels` blob, + `createdAt` integer NOT NULL, + `updatedAt` integer DEFAULT 1740926069220 NOT NULL +); +--> statement-breakpoint +INSERT INTO `__new_notes`("id", "title", "description", "favorite", "content", "labels", "createdAt", "updatedAt") SELECT "id", "title", "description", "favorite", "content", "labels", "createdAt", "updatedAt" FROM `notes`;--> statement-breakpoint +DROP TABLE `notes`;--> statement-breakpoint +ALTER TABLE `__new_notes` RENAME TO `notes`;--> statement-breakpoint +PRAGMA foreign_keys=ON;--> statement-breakpoint +CREATE UNIQUE INDEX `notes_id_unique` ON `notes` (`id`);--> statement-breakpoint +ALTER TABLE `clipboard` ADD `updatedAt` integer DEFAULT 1740926069220 NOT NULL; \ No newline at end of file diff --git a/resources/database/migrations/0009_removed default updatedat value.sql b/resources/database/migrations/0009_removed default updatedat value.sql new file mode 100644 index 0000000..9bc28b4 --- /dev/null +++ b/resources/database/migrations/0009_removed default updatedat value.sql @@ -0,0 +1,29 @@ +PRAGMA foreign_keys=OFF;--> statement-breakpoint +CREATE TABLE `__new_clipboard` ( + `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + `pinned` integer DEFAULT false NOT NULL, + `type` text NOT NULL, + `content` text NOT NULL, + `createdAt` integer NOT NULL, + `updatedAt` integer NOT NULL +); +--> statement-breakpoint +INSERT INTO `__new_clipboard`("id", "pinned", "type", "content", "createdAt", "updatedAt") SELECT "id", "pinned", "type", "content", "createdAt", "updatedAt" FROM `clipboard`;--> statement-breakpoint +DROP TABLE `clipboard`;--> statement-breakpoint +ALTER TABLE `__new_clipboard` RENAME TO `clipboard`;--> statement-breakpoint +PRAGMA foreign_keys=ON;--> statement-breakpoint +CREATE TABLE `__new_notes` ( + `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + `title` text NOT NULL, + `description` text NOT NULL, + `favorite` integer DEFAULT false NOT NULL, + `content` blob NOT NULL, + `labels` blob, + `createdAt` integer NOT NULL, + `updatedAt` integer NOT NULL +); +--> statement-breakpoint +INSERT INTO `__new_notes`("id", "title", "description", "favorite", "content", "labels", "createdAt", "updatedAt") SELECT "id", "title", "description", "favorite", "content", "labels", "createdAt", "updatedAt" FROM `notes`;--> statement-breakpoint +DROP TABLE `notes`;--> statement-breakpoint +ALTER TABLE `__new_notes` RENAME TO `notes`;--> statement-breakpoint +CREATE UNIQUE INDEX `notes_id_unique` ON `notes` (`id`); \ No newline at end of file diff --git a/resources/database/migrations/meta/0007_snapshot.json b/resources/database/migrations/meta/0007_snapshot.json new file mode 100644 index 0000000..ce98a92 --- /dev/null +++ b/resources/database/migrations/meta/0007_snapshot.json @@ -0,0 +1,137 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "1a558430-a87d-4ad9-a0a3-6b26164ebbbc", + "prevId": "00186e7f-6619-4cb4-baab-04410aa0e24f", + "tables": { + "clipboard": { + "name": "clipboard", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "pinned": { + "name": "pinned", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "createdAt": { + "name": "createdAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "notes": { + "name": "notes", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "favorite": { + "name": "favorite", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "content": { + "name": "content", + "type": "blob", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "labels": { + "name": "labels", + "type": "blob", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "createdAt": { + "name": "createdAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updatedAt": { + "name": "updatedAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "notes_id_unique": { + "name": "notes_id_unique", + "columns": ["id"], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} diff --git a/resources/database/migrations/meta/0008_snapshot.json b/resources/database/migrations/meta/0008_snapshot.json new file mode 100644 index 0000000..be5cd97 --- /dev/null +++ b/resources/database/migrations/meta/0008_snapshot.json @@ -0,0 +1,146 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "76dd9379-adcd-4e44-b14a-f826c19d5058", + "prevId": "1a558430-a87d-4ad9-a0a3-6b26164ebbbc", + "tables": { + "clipboard": { + "name": "clipboard", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "pinned": { + "name": "pinned", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "createdAt": { + "name": "createdAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updatedAt": { + "name": "updatedAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 1740926069220 + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "notes": { + "name": "notes", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "favorite": { + "name": "favorite", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "content": { + "name": "content", + "type": "blob", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "labels": { + "name": "labels", + "type": "blob", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "createdAt": { + "name": "createdAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updatedAt": { + "name": "updatedAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 1740926069220 + } + }, + "indexes": { + "notes_id_unique": { + "name": "notes_id_unique", + "columns": ["id"], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} diff --git a/resources/database/migrations/meta/0009_snapshot.json b/resources/database/migrations/meta/0009_snapshot.json new file mode 100644 index 0000000..023feb1 --- /dev/null +++ b/resources/database/migrations/meta/0009_snapshot.json @@ -0,0 +1,144 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "78a82d2f-f157-464a-9226-8fb1aa026f71", + "prevId": "76dd9379-adcd-4e44-b14a-f826c19d5058", + "tables": { + "clipboard": { + "name": "clipboard", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "pinned": { + "name": "pinned", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "createdAt": { + "name": "createdAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updatedAt": { + "name": "updatedAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "notes": { + "name": "notes", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "favorite": { + "name": "favorite", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "content": { + "name": "content", + "type": "blob", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "labels": { + "name": "labels", + "type": "blob", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "createdAt": { + "name": "createdAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updatedAt": { + "name": "updatedAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "notes_id_unique": { + "name": "notes_id_unique", + "columns": ["id"], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} diff --git a/resources/database/migrations/meta/_journal.json b/resources/database/migrations/meta/_journal.json index c9c5a5e..b8f78d6 100644 --- a/resources/database/migrations/meta/_journal.json +++ b/resources/database/migrations/meta/_journal.json @@ -50,6 +50,27 @@ "when": 1740400576615, "tag": "0006_great_supreme_intelligence", "breakpoints": true + }, + { + "idx": 7, + "version": "6", + "when": 1740820458118, + "tag": "0007_wild_kronos", + "breakpoints": true + }, + { + "idx": 8, + "version": "6", + "when": 1740926069238, + "tag": "0008_demonic_shiva", + "breakpoints": true + }, + { + "idx": 9, + "version": "6", + "when": 1740926349270, + "tag": "0009_removed default updatedat value", + "breakpoints": true } ] } diff --git a/src/main/drizzle/schema.ts b/src/main/drizzle/schema.ts index a9710bc..ef149ea 100644 --- a/src/main/drizzle/schema.ts +++ b/src/main/drizzle/schema.ts @@ -4,14 +4,20 @@ import { sqliteTable, text, integer, blob } from 'drizzle-orm/sqlite-core' export const ClipboardType = ['text', 'file'] as const export type ClipboardTypeType = (typeof ClipboardType)[number] // "text" | "file" +const createdAt = integer() + .notNull() + .$defaultFn(() => Date.now()) // Stores timestamp +const updatedAt = integer() + .notNull() + .$onUpdateFn(() => Date.now()) // Define SQLite table using Drizzle ORM export const clipboardSchema = sqliteTable('clipboard', { id: integer().primaryKey({ autoIncrement: true }), + pinned: integer({ mode: 'boolean' }).notNull().default(false), type: text({ enum: ClipboardType }).notNull(), // Ensures only "text" or "file" content: text().notNull(), // Stores text or file path - createdAt: integer() - .notNull() - .$defaultFn(() => Date.now()) // Stores timestamp + createdAt, + updatedAt }) export const notesSchema = sqliteTable('notes', { @@ -21,10 +27,6 @@ export const notesSchema = sqliteTable('notes', { favorite: integer({ mode: 'boolean' }).notNull().default(false), content: blob().notNull(), // content is going to be JSON labels: blob(), // content is going to be JSON - createdAt: integer() - .notNull() - .$defaultFn(() => Date.now()), // Stores timestamp - updatedAt: integer() - .notNull() - .$onUpdateFn(() => Date.now()) // Stores timestamp + createdAt, // Stores timestamp + updatedAt }) diff --git a/src/main/index.ts b/src/main/index.ts index e45f2b6..114011c 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -2,12 +2,12 @@ import { db, runMigrate } from './drizzle/db' import { app, ipcMain, globalShortcut, Tray, Menu, clipboard } from 'electron' import { electronApp, optimizer } from '@electron-toolkit/utils' import { clipboardSchema } from './drizzle/schema' -import { and, between, desc, eq, like, sql } from 'drizzle-orm' +import { desc, eq } from 'drizzle-orm' import { copyFileSync, existsSync, mkdirSync } from 'fs' import { basename, join } from 'path' import { createWindow } from './utils/create-window' import { icon } from './utils/resources' -import { ClipboardDataType, SearchClipboardParams } from 'src/types/database' +import { SearchClipboardParams } from 'src/types/database' import { pasteFromClipboard } from './utils/paste-from-clipboard' import { createNote, @@ -17,51 +17,14 @@ import { toggleFavoriteNote, updateNote } from './utils/notes-operations' +import { + deleteClipboardEntry, + searchClipboard, + togglePinnedClipboardEntry +} from './utils/clipboard-operations' runMigrate() -// Function to search clipboard entries with pagination -async function searchClipboard({ - searchTerm, - fromDate = Date.now() - 24 * 60 * 60 * 1000 * 3, // 3 days before - toDate = Date.now(), - limit = 10, // Default limit (page size) - page = 1 // Default page number -}: SearchClipboardParams): Promise { - const offset = (page - 1) * limit // Calculate offset - - const results = await db - .select() - .from(clipboardSchema) - .where( - and( - like(clipboardSchema.content, `%${searchTerm}%`), // Partial match search - between(clipboardSchema.createdAt, fromDate, toDate) // Date range filter - ) - ) - .orderBy(desc(clipboardSchema.createdAt)) // Latest first - .limit(limit) - .offset(offset) - - // Fetch total count for pagination - const [{ count }] = await db - .select({ count: sql`COUNT(*)` }) - .from(clipboardSchema) - .where( - and( - like(clipboardSchema.content, `%${searchTerm}%`), - between(clipboardSchema.createdAt, fromDate, toDate) - ) - ) - - return { - results, - total: count, // Total number of results - totalPages: Math.ceil(count / limit), // Total pages - currentPage: page - } -} - // This method will be called when Electron has finished // initialization and is ready to create browser windows. // Some APIs can only be used after this event occurs. @@ -69,10 +32,6 @@ app.whenReady().then(() => { // Set app user model id for windows electronApp.setAppUserModelId('com.electron') electronApp.setAutoLaunch(import.meta.env.PROD) - // Register a 'CommandOrControl+X' shortcut listener. - // Default open or close DevTools by F12 in development - // and ignore CommandOrControl + R in production. - // see https://github.com/alex8088/electron-toolkit/tree/master/packages/utils app.on('browser-window-created', (_, window) => { optimizer.watchWindowShortcuts(window) }) @@ -142,7 +101,7 @@ app.whenReady().then(() => { copyWidgetWindow.close() // copyWidgetWindow.hide() }) - + // TODO - make this workable. Right Now it is not being used ipcMain.handle('save-file', async (_event, filePath) => { const userDataPath = app.getPath('userData') const fileName = basename(filePath) @@ -164,21 +123,20 @@ app.whenReady().then(() => { ipcMain.handle('handle-window', async () => { return true }) - ipcMain.handle('paste', () => { - if (copyWidgetWindow.isVisible()) { - copyWidgetWindow.minimize() - copyWidgetWindow.hide() - } + copyWidgetWindow.minimize() + copyWidgetWindow.hide() pasteFromClipboard() + return true }) - ipcMain.handle('create-note', (_, values) => createNote(values)) ipcMain.handle('update-note', (_, values) => updateNote(values)) ipcMain.handle('delete-note', (_, id) => deleteNote(id)) ipcMain.handle('get-note', (_, id) => getNoteById(id)) ipcMain.handle('get-all-notes', getAllNotes) ipcMain.handle('toggle-favorite-note', (_, values) => toggleFavoriteNote(values)) + ipcMain.handle('toggle-pinned-clipboard-entry', (_, values) => togglePinnedClipboardEntry(values)) + ipcMain.handle('delete-clipboard-entry', (_, values) => deleteClipboardEntry(values)) let previousContent = clipboard.readText() async function checkClipboard(): Promise { @@ -193,12 +151,9 @@ app.whenReady().then(() => { // Check the clipboard every second setInterval(checkClipboard, 1000) - mainWindow.on('ready-to-show', () => mainWindow.show()) - // app.on('ready-to-show', () => { - // appWindow.show() - // }) + if (import.meta.env.DEV) mainWindow.on('ready-to-show', () => mainWindow.show()) - // TODO --- This Logic needs to done ASAP + // TODO --- This Logic needs to done // app.on('activate', function () { // // On macOS it's common to re-create a window in the app when the // // dock icon is clicked and there are no other windows open. diff --git a/src/main/utils/clipboard-operations.ts b/src/main/utils/clipboard-operations.ts new file mode 100644 index 0000000..a7a3da0 --- /dev/null +++ b/src/main/utils/clipboard-operations.ts @@ -0,0 +1,80 @@ +import { ClipboardDataType, SearchClipboardParams } from 'src/types/database' +import { db } from '../drizzle/db' +import { clipboardSchema } from '../drizzle/schema' +import { and, between, desc, eq, like, sql } from 'drizzle-orm' + +// Function to search clipboard entries with pagination +export async function searchClipboard({ + searchTerm, + fromDate = Date.now() - 24 * 60 * 60 * 1000 * 7, // 7 days before + toDate = Date.now(), + limit = 10, // Default limit (page size) + page = 1 // Default page number +}: SearchClipboardParams): Promise { + const offset = (page - 1) * limit // Calculate offset + const whereCondition = and( + like(clipboardSchema.content, '%' + searchTerm + '%'), + between(clipboardSchema.createdAt, fromDate, toDate) + ) + + const results = await db + .select() + .from(clipboardSchema) + .where(whereCondition) + .orderBy(desc(clipboardSchema.pinned), desc(clipboardSchema.updatedAt)) // Latest first + .limit(limit) + .offset(offset) + + // Fetch total count for pagination + const [{ count }] = await db + .select({ count: sql`COUNT(*)` }) + .from(clipboardSchema) + .where(whereCondition) + + return { + results, + total: count, // Total number of results + totalPages: Math.ceil(count / limit), // Total pages + currentPage: page + } +} + +// Function to delete a clipboard entry +export async function deleteClipboardEntry(id: string): Promise<{ + error?: unknown + result?: string +}> { + try { + await db.delete(clipboardSchema).where(eq(clipboardSchema.id, Number(id))) + return { result: 'success' } + } catch (error) { + console.error(error) + return { error } + } +} + +// Function to toggle pin a clipboard entry +export async function togglePinnedClipboardEntry({ + id, + pinned +}: { + id: string + pinned: boolean +}): Promise<{ + result?: string + error?: unknown +}> { + try { + await db + .update(clipboardSchema) + .set({ + pinned, + updatedAt: Date.now() // Update timestamp + }) + .where(eq(clipboardSchema.id, Number(id))) + return { result: 'success' } + } catch (error) { + console.error(error) + return { error } + } +} diff --git a/src/main/utils/paste-from-clipboard.ts b/src/main/utils/paste-from-clipboard.ts index 93db1e0..2aeea67 100644 --- a/src/main/utils/paste-from-clipboard.ts +++ b/src/main/utils/paste-from-clipboard.ts @@ -1,4 +1,3 @@ -// Electron App (JavaScript - Production-Ready) import { exec } from 'child_process' import pasteScript from '../../../resources/paste.ps1?asset&asarUnpack' @@ -6,30 +5,7 @@ export function pasteFromClipboard(): void { exec(`powershell.exe -ExecutionPolicy Bypass -File "${pasteScript}"`, (error) => { if (error) { console.error('PowerShell Error:', error) - // console.log(`Error pasting: ${error.message}`) // More informative error message return } - - // console.log('PowerShell Output:', stdout) // Keep for detailed debugging - - // Process output and provide user feedback (more robust) - // if (stdout.includes('[Error]')) { - // // Check for errors logged by PowerShell - // const errorMessage = stdout.match(/\[Error\] (.*)/)?.[1] || 'An error occurred.' - // console.log(errorMessage) - // } - // else if (stdout.includes('Clipboard is empty')) { - // console.log('Nothing to paste. Clipboard is empty.') - // } else if (stdout.includes('Pasted Text')) { - // console.log('Text pasted successfully!') // Or handle the text in your app - // } else if (stdout.includes('Pasted Files')) { - // console.log('Files pasted successfully!') // Or handle the files in your app - // } else if (stdout.includes('Pasted Image')) { - // console.log('Image pasted successfully!') // Or handle the image in your app - // } else if (stdout.includes('Clipboard format not supported')) { - // console.log('Clipboard content type is not supported') - // } else { - // console.log('Paste operation completed.') // Generic success message - // } }) } diff --git a/src/preload/index.d.ts b/src/preload/index.d.ts index 8e08c79..c42e8eb 100644 --- a/src/preload/index.d.ts +++ b/src/preload/index.d.ts @@ -7,6 +7,9 @@ interface ClipboardDataItem { type: 'text' | 'file' content: string createdAt: number + pinned: boolean + updatedAt: number + favorite: boolean } // Define the structure of the clipboard data response @@ -70,6 +73,14 @@ interface RendererAPI { result?: string error?: unknown }> + togglePinnedClipboardEntry: (values: { id: string; pinned: boolean }) => Promise<{ + result?: string + error?: unknown + }> + deleteClipboardEntry: (id: string) => Promise<{ + result?: string + error?: unknown + }> } // Extend the global Window interface to include the Electron API and custom API diff --git a/src/preload/index.ts b/src/preload/index.ts index 46b0805..f785b43 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -17,7 +17,10 @@ const api = { deleteNote: (id): Promise => ipcRenderer.invoke('delete-note', id), getNote: (id): Promise => ipcRenderer.invoke('get-note', id), getAllNotes: (): Promise => ipcRenderer.invoke('get-all-notes'), - toggleFavoriteNote: (values): Promise => ipcRenderer.invoke('toggle-favorite-note', values) + toggleFavoriteNote: (values): Promise => ipcRenderer.invoke('toggle-favorite-note', values), + togglePinnedClipboardEntry: (values): Promise => + ipcRenderer.invoke('toggle-pinned-clipboard-entry', values), + deleteClipboardEntry: (id): Promise => ipcRenderer.invoke('delete-clipboard-entry', id) } // Use `contextBridge` APIs to expose Electron APIs to // renderer only if context isolation is enabled, otherwise diff --git a/src/renderer/src/assets/main.css b/src/renderer/src/assets/main.css index cb02b91..898060f 100644 --- a/src/renderer/src/assets/main.css +++ b/src/renderer/src/assets/main.css @@ -1,5 +1,7 @@ @import './base.css'; + @import 'highlight.js/styles/github-dark-dimmed.min.css'; +@custom-variant dark (&:is(.dark *)); .body-transparent { @apply bg-transparent; @@ -45,3 +47,12 @@ .dark .drag-handle { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10' style='fill: rgba(255, 255, 255, 0.5)'%3E%3Cpath d='M3,2 C2.44771525,2 2,1.55228475 2,1 C2,0.44771525 2.44771525,0 3,0 C3.55228475,0 4,0.44771525 4,1 C4,1.55228475 3.55228475,2 3,2 Z M3,6 C2.44771525,6 2,5.55228475 2,5 C2,4.44771525 2.44771525,4 3,4 C3.55228475,4 4,4.44771525 4,5 C4,5.55228475 3.55228475,6 3,6 Z M3,10 C2.44771525,10 2,9.55228475 2,9 C2,8.44771525 2.44771525,8 3,8 C3.55228475,8 4,8.44771525 4,9 C4,9.55228475 3.55228475,10 3,10 Z M7,2 C6.44771525,2 6,1.55228475 6,1 C6,0.44771525 6.44771525,0 7,0 C7.55228475,0 8,0.44771525 8,1 C8,1.55228475 7.55228475,2 7,2 Z M7,6 C6.44771525,6 6,5.55228475 6,5 C6,4.44771525 6.44771525,4 7,4 C7.55228475,4 8,4.44771525 8,5 C8,5.55228475 7.55228475,6 7,6 Z M7,10 C6.44771525,10 6,9.55228475 6,9 C6,8.44771525 6.44771525,8 7,8 C7.55228475,8 8,8.44771525 8,9 C8,9.55228475 7.55228475,10 7,10 Z'%3E%3C/path%3E%3C/svg%3E"); } + +@layer base { + * { + @apply border-border outline-ring/50; + } + body { + @apply bg-background text-foreground; + } +} diff --git a/src/renderer/src/components/app-sidebar.tsx b/src/renderer/src/components/app-sidebar.tsx index c888ee5..f6a757a 100644 --- a/src/renderer/src/components/app-sidebar.tsx +++ b/src/renderer/src/components/app-sidebar.tsx @@ -26,11 +26,11 @@ const data = { items: [ { title: 'View All', - url: '#' + url: '/' }, { title: 'Starred', - url: '#' + url: '/starred' } ] }, diff --git a/src/renderer/src/components/home/components/note-editor.tsx b/src/renderer/src/components/home/components/note-editor.tsx index 9fb41d8..469c69e 100644 --- a/src/renderer/src/components/home/components/note-editor.tsx +++ b/src/renderer/src/components/home/components/note-editor.tsx @@ -86,7 +86,7 @@ export function NoteEditor({ onFocus={() => setOpen(false)} output="json" placeholder="This is your placeholder..." - throttleDelay={1000} // 1 sec + throttleDelay={2000} // 2 sec value={content} /> ) diff --git a/src/renderer/src/components/ui/context-menu.tsx b/src/renderer/src/components/ui/context-menu.tsx new file mode 100644 index 0000000..8853a27 --- /dev/null +++ b/src/renderer/src/components/ui/context-menu.tsx @@ -0,0 +1,232 @@ +import * as React from 'react' +import * as ContextMenuPrimitive from '@radix-ui/react-context-menu' +import { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react' +import { cn } from '@renderer/utils' + +function ContextMenu({ + ...props +}: React.ComponentProps): React.JSX.Element { + return +} + +function ContextMenuTrigger({ + ...props +}: React.ComponentProps): React.JSX.Element { + return +} + +function ContextMenuGroup({ + ...props +}: React.ComponentProps): React.JSX.Element { + return +} + +function ContextMenuPortal({ + ...props +}: React.ComponentProps): React.JSX.Element { + return +} + +function ContextMenuSub({ + ...props +}: React.ComponentProps): React.JSX.Element { + return +} + +function ContextMenuRadioGroup({ + ...props +}: React.ComponentProps): React.JSX.Element { + return +} + +function ContextMenuSubTrigger({ + className, + inset, + children, + ...props +}: React.ComponentProps & { + inset?: boolean +}): React.JSX.Element { + return ( + + {children} + + + ) +} + +function ContextMenuSubContent({ + className, + ...props +}: React.ComponentProps): React.JSX.Element { + return ( + + ) +} + +function ContextMenuContent({ + className, + ...props +}: React.ComponentProps): React.JSX.Element { + return ( + + + + ) +} + +function ContextMenuItem({ + className, + inset, + variant = 'default', + ...props +}: React.ComponentProps & { + inset?: boolean + variant?: 'default' | 'destructive' +}): React.JSX.Element { + return ( + + ) +} + +function ContextMenuCheckboxItem({ + className, + children, + checked, + ...props +}: React.ComponentProps): React.JSX.Element { + return ( + + + + + + + {children} + + ) +} + +function ContextMenuRadioItem({ + className, + children, + ...props +}: React.ComponentProps): React.JSX.Element { + return ( + + + + + + + {children} + + ) +} + +function ContextMenuLabel({ + className, + inset, + ...props +}: React.ComponentProps & { + inset?: boolean +}): React.JSX.Element { + return ( + + ) +} + +function ContextMenuSeparator({ + className, + ...props +}: React.ComponentProps): React.JSX.Element { + return ( + + ) +} + +function ContextMenuShortcut({ + className, + ...props +}: React.ComponentProps<'span'>): React.JSX.Element { + return ( + + ) +} + +export { + ContextMenu, + ContextMenuTrigger, + ContextMenuContent, + ContextMenuItem, + ContextMenuCheckboxItem, + ContextMenuRadioItem, + ContextMenuLabel, + ContextMenuSeparator, + ContextMenuShortcut, + ContextMenuGroup, + ContextMenuPortal, + ContextMenuSub, + ContextMenuSubContent, + ContextMenuSubTrigger, + ContextMenuRadioGroup +} diff --git a/src/renderer/src/constants/mutation-keys.ts b/src/renderer/src/constants/mutation-keys.ts index 3caf1b1..1f0e1fd 100644 --- a/src/renderer/src/constants/mutation-keys.ts +++ b/src/renderer/src/constants/mutation-keys.ts @@ -1,5 +1,7 @@ export const mutationKeys = { 'delete-note': 'delete-note', 'create-note': 'create-note', - 'update-note': 'update-note' + 'update-note': 'update-note', + 'delete-clipboard-entry': 'delete-clipboard-entry', + 'pinned-clipboard-entry': 'pinned-clipboard-entry' } diff --git a/src/renderer/src/routes/(home)/_home.tsx b/src/renderer/src/routes/(home)/_home.tsx index c09c362..9e9fd07 100644 --- a/src/renderer/src/routes/(home)/_home.tsx +++ b/src/renderer/src/routes/(home)/_home.tsx @@ -1,12 +1,11 @@ +import React from 'react' import InteractiveGrid from '@renderer/components/animata/interactive-grid' import { Note } from '@renderer/components/home' -import { CreateNoteButton } from '@renderer/components/shared/create-note-button' import { Loading } from '@renderer/components/shared/loading' import { allNoteKey } from '@renderer/constants/query-keys' import { useQuery } from '@tanstack/react-query' import { createFileRoute } from '@tanstack/react-router' import { FilePenLineIcon } from 'lucide-react' -import React from 'react' export const Route = createFileRoute('/(home)/_home')({ component: function Home(): React.JSX.Element { @@ -22,7 +21,6 @@ export const Route = createFileRoute('/(home)/_home')({

- Select or Create Note

@@ -34,11 +32,6 @@ export const Route = createFileRoute('/(home)/_home')({
) - return ( - <> - - - - ) + return } }) diff --git a/src/renderer/src/routes/__root.tsx b/src/renderer/src/routes/__root.tsx index 85caa7e..64b443e 100644 --- a/src/renderer/src/routes/__root.tsx +++ b/src/renderer/src/routes/__root.tsx @@ -20,7 +20,6 @@ export const Route = createRootRoute({ -
@@ -43,7 +42,6 @@ export const Route = createRootRoute({ - {import.meta.env.DEV ? : null} ) diff --git a/src/renderer/src/store/copy-widget-store.ts b/src/renderer/src/store/copy-widget-store.ts index 06f5f2e..8bcad13 100644 --- a/src/renderer/src/store/copy-widget-store.ts +++ b/src/renderer/src/store/copy-widget-store.ts @@ -1,26 +1,22 @@ import { create } from 'zustand' -interface PopoverInterface { +interface CopyWidgetState { index: number - isOpen: boolean + opened: 'detailed' | null } // Define the interface for the copyWidget store interface copyWidgetStoreInterface { - popover: Partial + state: Partial searchQuery: string - setPopover: (values: Partial) => void + setState: (values: Partial) => void setSearchQuery: (value: string) => void } // Create the Zustand store export const copyWidgetStore = create()((set) => ({ - popover: { index: 0, isOpen: false }, + state: { index: 0, isOpen: false }, searchQuery: '', - setPopover(values): void { - return set({ popover: values }) - }, - setSearchQuery(value): void { - return set({ searchQuery: value }) - } + setState: (values): void => set({ state: values }), + setSearchQuery: (value): void => set({ searchQuery: value }) })) diff --git a/src/renderer/src/types/clipboard.ts b/src/renderer/src/types/clipboard.ts index 968c48f..7c0c58e 100644 --- a/src/renderer/src/types/clipboard.ts +++ b/src/renderer/src/types/clipboard.ts @@ -3,4 +3,12 @@ export interface ClipboardDataItem { type: 'text' | 'file' content: string createdAt: number + currentPage: number + pinned: boolean +} +export interface ClipboardDataType { + results: ClipboardDataItem[] + total: number + totalPages: number + currentPage: number } diff --git a/src/renderer/src/windows/copy-widget/app/components/delete-action.tsx b/src/renderer/src/windows/copy-widget/app/components/delete-action.tsx new file mode 100644 index 0000000..c16bf6e --- /dev/null +++ b/src/renderer/src/windows/copy-widget/app/components/delete-action.tsx @@ -0,0 +1,82 @@ +import React from 'react' +import { TrashIcon } from '@radix-ui/react-icons' +import { SimpleTooltip } from '@renderer/components/shared/simple-tooltip' +import { Button } from '@renderer/components/ui/button' +import { copyWidgetStore } from '@renderer/store/copy-widget-store' +import { InfiniteData, useMutation, useQueryClient } from '@tanstack/react-query' +import { mutationKeys } from '@renderer/constants/mutation-keys' +import { queryKeys } from '@renderer/constants/query-keys' +import { ClipboardDataType } from '@renderer/types/clipboard' +import { toast } from '@renderer/hooks/use-toast' + +interface DeleteActionProps { + id: number + currentPage: number + inputRef: React.RefObject +} + +export function DeleteAction({ id, currentPage, inputRef }: DeleteActionProps): React.JSX.Element { + const { setState, searchQuery } = copyWidgetStore() + const queryClient = useQueryClient() + const { mutate } = useMutation({ + mutationKey: [mutationKeys['delete-clipboard-entry'], id], + mutationFn: (entryId: string) => window.api.deleteClipboardEntry(entryId), + + async onMutate(clipboardId) { + // Cancel ongoing queries + await queryClient.cancelQueries({ queryKey: [queryKeys['clipboard-data']] }) + + // Get a snapshot of the current state + const snapshot = queryClient.getQueryData([queryKeys['clipboard-data'], searchQuery]) + + // Optimistically update the cache + queryClient.setQueryData | undefined>( + [queryKeys['clipboard-data'], searchQuery], + (previousEntities) => { + if (!previousEntities) return previousEntities + return { + ...previousEntities, + pages: previousEntities.pages.map((page) => { + if (page.currentPage !== currentPage) return page // Skip non-matching pages + // Return a new page object with a filtered results array + return { + ...page, + results: page.results.filter((item) => item.id !== Number(clipboardId)) + } + }) + } + } + ) + + return { snapshot } + }, + onError(error) { + toast({ + title: 'Failed to Delete โŒ ', + description: error.message, + variant: 'destructive' + }) + }, + onSettled() { + toast({ + title: 'Deleted successfully' + }) + } + }) + return ( + + ) +} diff --git a/src/renderer/src/windows/copy-widget/app/components/pin-action.tsx b/src/renderer/src/windows/copy-widget/app/components/pin-action.tsx new file mode 100644 index 0000000..02abb8c --- /dev/null +++ b/src/renderer/src/windows/copy-widget/app/components/pin-action.tsx @@ -0,0 +1,71 @@ +import React from 'react' +import { DrawingPinFilledIcon, DrawingPinIcon } from '@radix-ui/react-icons' +import { SimpleTooltip } from '@renderer/components/shared/simple-tooltip' +import { Button } from '@renderer/components/ui/button' +import { mutationKeys } from '@renderer/constants/mutation-keys' +import { queryKeys } from '@renderer/constants/query-keys' +import { copyWidgetStore } from '@renderer/store/copy-widget-store' +import { ClipboardDataType } from '@renderer/types/clipboard' +import { InfiniteData, useMutation, useQueryClient } from '@tanstack/react-query' + +interface PinActionProps { + inputRef: React.RefObject + id: number + currentPage: number + pinned: boolean +} + +export function PinAction({ id, currentPage, pinned }: PinActionProps): React.JSX.Element { + const { searchQuery } = copyWidgetStore() + const queryClient = useQueryClient() + const { mutate } = useMutation({ + mutationKey: [mutationKeys['pinned-clipboard-entry'], id], + mutationFn: (values: { id: string; pinned: boolean }) => + window.api.togglePinnedClipboardEntry(values), + async onMutate(clipboardId) { + // Cancel ongoing queries + await queryClient.cancelQueries({ queryKey: [queryKeys['clipboard-data']] }) + // Get a snapshot of the current state + const snapshot = queryClient.getQueryData([queryKeys['clipboard-data'], searchQuery]) + // Optimistically update the cache + queryClient.setQueryData | undefined>( + [queryKeys['clipboard-data'], searchQuery], + (previousEntities) => { + if (!previousEntities) return previousEntities + return { + ...previousEntities, + pages: previousEntities.pages.map((page) => { + if (page.currentPage !== currentPage) return page // Skip non-matching pages + // Return a new page object with a filtered results array + return { + ...page, + results: page.results.map((entity) => + entity.id.toString() === clipboardId.id + ? { + ...entity, + pinned: clipboardId.pinned, + updatedAt: Date.now() + } + : entity + ) + } + }) + } + } + ) + return { snapshot } + } + }) + return ( + + ) +} diff --git a/src/renderer/src/windows/copy-widget/app/components/rich-text.tsx b/src/renderer/src/windows/copy-widget/app/components/rich-text.tsx index 4f0ca2c..ca8c5fe 100644 --- a/src/renderer/src/windows/copy-widget/app/components/rich-text.tsx +++ b/src/renderer/src/windows/copy-widget/app/components/rich-text.tsx @@ -1,12 +1,18 @@ import hljs from 'highlight.js' +import { useMemo } from 'react' export function RichText({ content }: { readonly content: string }): React.JSX.Element { const text = hljs.highlightAuto(content) - + const innerHtml = useMemo( + () => ({ + __html: text.value + }), + [text.value] + ) return (
       
-        
+        
       
     
) diff --git a/src/renderer/src/windows/copy-widget/app/components/widget-command-item.tsx b/src/renderer/src/windows/copy-widget/app/components/widget-command-item.tsx index 56af1e1..ceb2a51 100644 --- a/src/renderer/src/windows/copy-widget/app/components/widget-command-item.tsx +++ b/src/renderer/src/windows/copy-widget/app/components/widget-command-item.tsx @@ -4,10 +4,13 @@ import { CommandItem } from '@renderer/components/ui/command' import { Popover, PopoverContent, PopoverTrigger } from '@renderer/components/ui/popover' import { copyWidgetStore } from '@renderer/store/copy-widget-store' import { ClipboardDataItem } from '@renderer/types/clipboard' -import { cleanText, copyToClipboard } from '@renderer/utils' -import { ArrowRightIcon, SearchIcon } from 'lucide-react' +import { copyToClipboard } from '@renderer/utils' import { RichText } from './rich-text' - +import { CaretRightIcon, DrawingPinFilledIcon, TextIcon } from '@radix-ui/react-icons' +import { SimpleTooltip } from '@renderer/components/shared/simple-tooltip' +import { formatDistanceToNow } from 'date-fns' +import { DeleteAction } from './delete-action' +import { PinAction } from './pin-action' interface WidgetCommandItemProps extends ClipboardDataItem { inputRef: React.RefObject itemRef: React.RefObject @@ -18,65 +21,89 @@ export function WidgetCommandItem({ createdAt, id, inputRef, + currentPage, itemRef, - lastItem + lastItem, + pinned }: WidgetCommandItemProps): React.JSX.Element { - const { popover, setPopover } = copyWidgetStore() + const { state, setState } = copyWidgetStore() + return ( { inputRef.current?.focus() - setPopover({ isOpen: open }) + setState({ opened: open ? 'detailed' : null }) }} - open={popover.index === id && popover.isOpen} > - + { copyToClipboard(content) window.api.pasteCopied() }} - ref={itemRef} - value={`${id}-${createdAt}`} >
- - -

{content}

+ +

{content}

- -
- + + + {pinned ? : null}
- e.stopPropagation()} - side="right" >
-

Detailed View

- - +
+
+

Detailed View

+ + copied about  + {formatDistanceToNow(new Date(Number(createdAt)), { + addSuffix: true, + includeSeconds: true + })} + +
+
+ + +
+
+
diff --git a/src/renderer/src/windows/copy-widget/app/index.tsx b/src/renderer/src/windows/copy-widget/app/index.tsx index 01ec08b..1a0dff3 100644 --- a/src/renderer/src/windows/copy-widget/app/index.tsx +++ b/src/renderer/src/windows/copy-widget/app/index.tsx @@ -1,13 +1,7 @@ import { useRef, useEffect } from 'react' import { LoaderCircleIcon, Loader2Icon } from 'lucide-react' import { Dialog, DialogContent } from '@renderer/components/ui/dialog' -import { - Command, - CommandEmpty, - CommandGroup, - CommandInput, - CommandList -} from '@renderer/components/ui/command' +import { Command, CommandEmpty, CommandInput, CommandList } from '@renderer/components/ui/command' import { CommandLoading, Command as CommandPrimitive } from 'cmdk' import { cn } from '@renderer/utils' import { useInfiniteQuery } from '@tanstack/react-query' @@ -19,9 +13,9 @@ export function CopyWidget(): React.JSX.Element { const listEndRef = useRef(null) const inputRef = useRef>(null) const itemRef = useRef>(null) - const { popover, searchQuery, setPopover, setSearchQuery } = copyWidgetStore() + const { state, searchQuery, setState, setSearchQuery } = copyWidgetStore() const { data, isLoading, fetchNextPage, isFetchingNextPage, hasNextPage } = useInfiniteQuery({ - queryKey: [queryKeys['clipboard-data']], + queryKey: [queryKeys['clipboard-data'], searchQuery], queryFn: ({ pageParam }) => window.api.search({ page: pageParam, searchTerm: searchQuery, limit: 15 }), initialPageParam: 1, @@ -59,26 +53,46 @@ export function CopyWidget(): React.JSX.Element { } }, [fetchNextPage, hasNextPage, isFetchingNextPage]) - // The Command container catches keyboard events const handleKeyDown = (e: React.KeyboardEvent): void => { + const selectedElement = document.querySelector('[data-selected="true"]') as HTMLElement | null + if (!selectedElement) return + const elemIndex = Number(selectedElement.dataset.index ?? -1) + const isLastItem = selectedElement.dataset.islast === 'true' if (e.key === 'ArrowRight' && (e.metaKey || e.ctrlKey)) { - // @ts-expect-error --- TODO !fix this type later - const elemIndex = Number(document.querySelector('[data-selected="true"]')?.dataset.index) - setPopover({ index: elemIndex, isOpen: elemIndex > 0 }) + setState({ index: elemIndex, opened: elemIndex >= 0 ? 'detailed' : null }) } else { - setPopover({ isOpen: false }) + setState({ opened: null }) inputRef.current?.focus() } - - if (e.key === 'ArrowDown') { - // @ts-expect-error --- TODO !fix this type later - if (document.querySelector('[data-selected="true"]')?.dataset.islast === 'true') { - if (hasNextPage && !isFetchingNextPage) fetchNextPage() + if (e.key === 'ArrowDown' && isLastItem) { + if (hasNextPage && !isFetchingNextPage) { + fetchNextPage() } } } - // Flatten all pages to get total items count - const allItems = data?.pages.flatMap((page) => page.results) || [] + + // Ensure that `data.pages` exists and is properly typed before mapping + const allItems = + data?.pages + .flatMap((page) => + page.results.map((result) => ({ + ...result, + currentPage: page.currentPage + })) + ) + .sort((a, b) => { + // Ensure `pinned` is treated as a boolean (convert to number for sorting) + const pinnedA = Number(a.pinned) + const pinnedB = Number(b.pinned) + + if (pinnedB !== pinnedA) { + return pinnedB - pinnedA // Pinned items first + } + + // Ensure `updatedAt` is a valid date before comparison + return new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime() // Sort by newest date first + }) || [] + const lastItem = allItems.at(-5) function onOpenChange(): void { @@ -90,7 +104,9 @@ export function CopyWidget(): React.JSX.Element { return ( - + No results found. )} - - {allItems.map((clipboardData) => ( - - ))} + {allItems.map((clipboardData) => ( + + ))} -
- {hasNextPage ? ( - - ) : ( - - No More data available - - )} -
-
+
+ {hasNextPage && isFetchingNextPage ? ( + + ) : ( + + No More data available + + )} +
diff --git a/src/renderer/src/windows/copy-widget/index.tsx b/src/renderer/src/windows/copy-widget/index.tsx index 5e457e8..774c41a 100644 --- a/src/renderer/src/windows/copy-widget/index.tsx +++ b/src/renderer/src/windows/copy-widget/index.tsx @@ -4,12 +4,17 @@ import ReactDOM from 'react-dom/client' import { ThemeProvider } from '@renderer/providers/theme-provider' import { QueryProvider } from '@renderer/providers/query-provider' import { CopyWidget } from './app' +import { TooltipProvider } from '@renderer/components/ui/tooltip' +import { Toaster } from '@renderer/components/ui/toaster' ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( - + + + +