From 7fb1a7fba8f74386bfebd727f09b17cdeac6746e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bla=C5=BE=20Aristovnik?=
<125830696+barisgit@users.noreply.github.com>
Date: Sun, 20 Apr 2025 23:28:41 +0200
Subject: [PATCH 01/15] Public demo ready version (#16)
* Feature: Granular Permissions (#5)
* Add granular permission control, setup backend and framework, prepare to use permissions elsewhere
* Refactor permission handling and improve permission logic across the application
* Add on pull request trigger to development branch in ci action (#6)
Self explanatory
* Switch to using Tanstack Query for api calls (#7)
* Change trpc provider and implementations to use tanstack query
* Implement react query calls in all components, implement simple html rendering on server
* Add typecheck gh action
* Change type to module and fix imports in required files (#8)
* Add mock file creation for typecheck (#9)
* Standardise client/server renderers for markdown (#10)
* Add mock file creation for typecheck
* Standardise server and client markdown to html renderers to have similar output and shared plugins
* Standardize server and preview markdown renderers
* Refactor layout components for improved styling and consistency, fix rendering links
* Make server component for markdown rendering clearly separate
* Fix lint and linter config errors (#11)
* Add mock file creation for typecheck
* Standardise server and client markdown to html renderers to have similar output and shared plugins
* Standardize server and preview markdown renderers
* Refactor layout components for improved styling and consistency, fix rendering links
* Make server component for markdown rendering clearly separate
* Add lint plugins and fix linter errors
* Add T3 Validated Environment (#12)
* Add validated t3 environment
* Add missing file
* Improve editor UX/UI and functionality (#14)
* Add validated t3 environment
* Add missing file
* Modernise editor and asset manager
* Add syntax highlighting to markdown editor
* Add ScrollArea to asset manager
* Add search modal and make search ui better, with pagination
* Improved tagging functionality
* Fix transaction type linter error
Added cache time back for images
* Improve security and add utility components for gating access (#15)
* Implement same security level for images as well
* Implement trpc panel for api docs
* Fix build issues with server code on client
* Implement backbone functions for page and component security - client and server side (client side are not meant for security, only UX)
* Implement security hooks and component in other pages
* Add guest user group to groups and make unassignable
* Refactor permission components to be more structurized and less confusing
* Fix RequirePermission component to support any
* Fix type errors
* Add PermissionGates to some wiki pages
---
.env.example | 4 +-
.github/workflows/ci.yml | 22 +-
.gitignore | 3 +
.vscode/settings.json | 3 +-
docs/permissions.md | 278 ++
package.json | 99 +-
pnpm-lock.yaml | 4394 ++++++++++++-----
scripts/README.md | 11 +-
scripts/create-admin.ts | 102 -
scripts/rebuildRenderedHtml.ts | 13 +
scripts/setup-db.js | 201 -
scripts/setup-db.ts | 328 ++
src/app/(auth)/layout.tsx | 7 +
src/app/(auth)/login/page.tsx | 54 +
src/app/(auth)/register/page.tsx | 51 +
src/app/[...path]/not-found.tsx | 12 +-
src/app/[...path]/page.tsx | 60 +-
src/app/admin/[404]/page.tsx | 7 +
src/app/admin/assets/page.tsx | 341 +-
src/app/admin/dashboard/page.tsx | 197 +
src/app/admin/example/page.tsx | 86 +
src/app/admin/groups/[id]/edit/page.tsx | 90 +
.../groups/[id]/users/add-users-modal.tsx | 219 +
src/app/admin/groups/[id]/users/page.tsx | 98 +
.../groups/[id]/users/remove-user-modal.tsx | 109 +
src/app/admin/groups/group-form.tsx | 469 ++
src/app/admin/groups/groups-list.tsx | 129 +
src/app/admin/groups/new/page.tsx | 41 +
src/app/admin/groups/page.tsx | 65 +
src/app/admin/layout.tsx | 35 +
src/app/admin/not-found.tsx | 15 +
src/app/admin/page.tsx | 4 +-
src/app/admin/permissions/page.tsx | 43 +
.../admin/permissions/permissions-table.tsx | 112 +
src/app/admin/users/page.tsx | 430 ++
src/app/api/assets/[id]/route.ts | 68 +-
src/app/api/assets/upload/route.ts | 68 -
src/app/api/docs/route.ts | 52 +
src/app/api/trpc/[trpc]/route.ts | 6 +-
src/app/create/page.tsx | 40 +-
src/app/layout.tsx | 118 +-
src/app/login/page.tsx | 20 -
src/app/page.tsx | 8 +-
src/app/register/page.tsx | 26 -
src/app/tags/[tag]/page.tsx | 28 +-
src/app/tags/page.tsx | 2 +-
src/app/wiki/getting-started/page.tsx | 41 +-
src/app/wiki/page.tsx | 2 +-
src/components/auth/LogOutButton.tsx | 12 +
src/components/auth/LoginForm.tsx | 46 +-
src/components/auth/PermissionsExample.tsx | 67 +
src/components/auth/RegisterForm.tsx | 72 +-
.../auth/permission/client/gate.tsx | 180 +
.../auth/permission/client/index.ts | 35 +
.../auth/permission/client/require.tsx | 104 +
src/components/auth/permission/provider.tsx | 94 +
.../auth/permission/server-gate.tsx | 164 +
.../auth/permission/server/gate.tsx | 186 +
.../auth/permission/server/index.ts | 11 +
.../auth/permission/server/require.tsx | 101 +
.../auth/permission/utils/context.ts | 68 +
.../auth/permission/utils/path-utils.ts | 28 +
.../auth/permission/utils/usePermissions.ts | 13 +
src/components/layout/AdminButton.tsx | 35 +
src/components/layout/AdminLayout.tsx | 391 +-
src/components/layout/Header.tsx | 7 +-
src/components/layout/MainLayout.tsx | 4 +-
src/components/layout/SearchBar.tsx | 179 -
src/components/layout/SearchModal.tsx | 354 ++
src/components/layout/Sidebar.tsx | 505 +-
src/components/ui/avatar.tsx | 3 +-
src/components/ui/badge.tsx | 166 +-
src/components/ui/button.tsx | 3 +-
src/components/ui/code-block.tsx | 149 +
src/components/ui/command.tsx | 153 +
src/components/ui/dialog.tsx | 122 +
src/components/ui/input.tsx | 22 +
src/components/ui/label.tsx | 26 +
src/components/ui/radio.tsx | 16 +-
src/components/ui/scroll-area.tsx | 48 +
src/components/ui/select.tsx | 159 +
src/components/ui/table.tsx | 120 +
src/components/ui/textarea.tsx | 22 +
src/components/ui/tooltip.tsx | 32 +
src/components/wiki/AllPagesList.tsx | 88 +
src/components/wiki/AssetManager.tsx | 924 ++--
src/components/wiki/BackButton.tsx | 27 +
src/components/wiki/CreatePageButton.tsx | 13 +-
src/components/wiki/HighlightedMarkdown.tsx | 147 -
src/components/wiki/PageLocationEditor.tsx | 77 +-
src/components/wiki/WikiBrowser.tsx | 35 +-
src/components/wiki/WikiEditor.tsx | 1225 +++--
src/components/wiki/WikiFolderTree.tsx | 104 +-
src/components/wiki/WikiLockInfo.tsx | 120 +-
src/components/wiki/WikiPage.tsx | 367 +-
src/components/wiki/WikiPageList.tsx | 118 +-
src/components/wiki/markdown/plugins.ts | 5 -
src/config/AppConfig.ts | 37 +-
src/env.ts | 63 +
src/lib/auth.ts | 83 +-
src/lib/db/index.ts | 7 +-
src/lib/db/migrate.ts | 152 +-
src/lib/db/schema.ts | 290 +-
src/lib/db/seed.ts | 47 +
src/lib/db/seeds/.gitignore | 2 +
src/lib/db/seeds/custom-seeds.example.ts | 21 +
src/lib/db/seeds/permissions.ts | 288 ++
src/lib/env.ts | 36 -
src/lib/hooks/useNotification.ts | 15 +-
src/lib/markdown/README.md | 103 +
src/lib/markdown/client-factory.ts | 89 +
src/lib/markdown/client.tsx | 255 +
.../markdown/components/CodeComponent.tsx | 0
src/lib/markdown/components/LinkComponent.tsx | 18 +
.../markdown/components/ListComponent.tsx | 0
.../markdown/components/ListItemComponent.tsx | 0
.../wiki => lib}/markdown/components/index.ts | 10 +-
src/lib/markdown/core/config.ts | 31 +
src/lib/markdown/core/plugins.ts | 108 +
src/lib/markdown/index.ts | 17 +
src/lib/markdown/plugins/index.ts | 13 +
.../markdown/plugins/remarkAttrs.ts | 0
.../plugins/server-only/loggerPlugin.ts | 61 +
.../plugins/server-only/rehypeWikiLinks.ts | 283 ++
src/lib/markdown/server-factory.ts | 118 +
src/lib/markdown/server.tsx | 91 +
.../wiki => lib}/markdown/utils/highlight.ts | 56 +-
src/lib/markdown/utils/testing.ts | 145 +
src/lib/permissions/client.ts | 67 +
src/lib/permissions/index.ts | 23 +
src/lib/permissions/registry.ts | 218 +
src/lib/permissions/server.ts | 14 +
src/lib/permissions/types.ts | 40 +
src/lib/permissions/validation.ts | 144 +
src/lib/services/assets.ts | 123 +-
src/lib/services/authorization.ts | 468 ++
src/lib/services/groups.ts | 443 ++
src/lib/services/index.ts | 28 +
src/lib/services/markdown.ts | 89 +
src/lib/services/permissions.ts | 101 +
src/lib/services/search.ts | 213 +-
src/lib/services/tags.ts | 27 +-
src/lib/services/users.ts | 62 +-
src/lib/services/wiki.ts | 264 +-
src/lib/trpc/client.ts | 10 +-
src/lib/trpc/index.ts | 172 +-
src/lib/trpc/providers.tsx | 74 +-
src/lib/trpc/routers/assets.ts | 149 +-
src/lib/trpc/routers/auth.ts | 139 +
src/lib/trpc/routers/groups.ts | 273 +
src/lib/trpc/routers/index.ts | 10 +
src/lib/trpc/routers/permissions.ts | 101 +
src/lib/trpc/routers/search.ts | 29 +-
src/lib/trpc/routers/tags.ts | 38 +
src/lib/trpc/routers/user.ts | 167 +-
src/lib/trpc/routers/users.ts | 34 +
src/lib/trpc/routers/wiki.ts | 215 +-
src/lib/utils.ts | 15 +
src/lib/utils/pagination.ts | 130 +
src/lib/utils/server-auth-helpers.ts | 72 +
src/providers/index.tsx | 50 +
src/styles/globals.css | 138 +-
src/styles/markdown.css | 57 +-
src/types/db.d.ts | 3 +
tailwind.config.js | 18 +-
tsconfig.json | 9 +-
166 files changed, 17624 insertions(+), 4600 deletions(-)
create mode 100644 docs/permissions.md
delete mode 100644 scripts/create-admin.ts
create mode 100644 scripts/rebuildRenderedHtml.ts
delete mode 100755 scripts/setup-db.js
create mode 100644 scripts/setup-db.ts
create mode 100644 src/app/(auth)/layout.tsx
create mode 100644 src/app/(auth)/login/page.tsx
create mode 100644 src/app/(auth)/register/page.tsx
create mode 100644 src/app/admin/[404]/page.tsx
create mode 100644 src/app/admin/dashboard/page.tsx
create mode 100644 src/app/admin/example/page.tsx
create mode 100644 src/app/admin/groups/[id]/edit/page.tsx
create mode 100644 src/app/admin/groups/[id]/users/add-users-modal.tsx
create mode 100644 src/app/admin/groups/[id]/users/page.tsx
create mode 100644 src/app/admin/groups/[id]/users/remove-user-modal.tsx
create mode 100644 src/app/admin/groups/group-form.tsx
create mode 100644 src/app/admin/groups/groups-list.tsx
create mode 100644 src/app/admin/groups/new/page.tsx
create mode 100644 src/app/admin/groups/page.tsx
create mode 100644 src/app/admin/layout.tsx
create mode 100644 src/app/admin/not-found.tsx
create mode 100644 src/app/admin/permissions/page.tsx
create mode 100644 src/app/admin/permissions/permissions-table.tsx
create mode 100644 src/app/admin/users/page.tsx
delete mode 100644 src/app/api/assets/upload/route.ts
create mode 100644 src/app/api/docs/route.ts
delete mode 100644 src/app/login/page.tsx
delete mode 100644 src/app/register/page.tsx
create mode 100644 src/components/auth/LogOutButton.tsx
create mode 100644 src/components/auth/PermissionsExample.tsx
create mode 100644 src/components/auth/permission/client/gate.tsx
create mode 100644 src/components/auth/permission/client/index.ts
create mode 100644 src/components/auth/permission/client/require.tsx
create mode 100644 src/components/auth/permission/provider.tsx
create mode 100644 src/components/auth/permission/server-gate.tsx
create mode 100644 src/components/auth/permission/server/gate.tsx
create mode 100644 src/components/auth/permission/server/index.ts
create mode 100644 src/components/auth/permission/server/require.tsx
create mode 100644 src/components/auth/permission/utils/context.ts
create mode 100644 src/components/auth/permission/utils/path-utils.ts
create mode 100644 src/components/auth/permission/utils/usePermissions.ts
create mode 100644 src/components/layout/AdminButton.tsx
delete mode 100644 src/components/layout/SearchBar.tsx
create mode 100644 src/components/layout/SearchModal.tsx
create mode 100644 src/components/ui/code-block.tsx
create mode 100644 src/components/ui/command.tsx
create mode 100644 src/components/ui/dialog.tsx
create mode 100644 src/components/ui/input.tsx
create mode 100644 src/components/ui/label.tsx
create mode 100644 src/components/ui/scroll-area.tsx
create mode 100644 src/components/ui/select.tsx
create mode 100644 src/components/ui/table.tsx
create mode 100644 src/components/ui/textarea.tsx
create mode 100644 src/components/ui/tooltip.tsx
create mode 100644 src/components/wiki/AllPagesList.tsx
create mode 100644 src/components/wiki/BackButton.tsx
delete mode 100644 src/components/wiki/HighlightedMarkdown.tsx
delete mode 100644 src/components/wiki/markdown/plugins.ts
create mode 100644 src/env.ts
create mode 100644 src/lib/db/seed.ts
create mode 100644 src/lib/db/seeds/.gitignore
create mode 100644 src/lib/db/seeds/custom-seeds.example.ts
create mode 100644 src/lib/db/seeds/permissions.ts
delete mode 100644 src/lib/env.ts
create mode 100644 src/lib/markdown/README.md
create mode 100644 src/lib/markdown/client-factory.ts
create mode 100644 src/lib/markdown/client.tsx
rename src/{components/wiki => lib}/markdown/components/CodeComponent.tsx (100%)
create mode 100644 src/lib/markdown/components/LinkComponent.tsx
rename src/{components/wiki => lib}/markdown/components/ListComponent.tsx (100%)
rename src/{components/wiki => lib}/markdown/components/ListItemComponent.tsx (100%)
rename src/{components/wiki => lib}/markdown/components/index.ts (59%)
create mode 100644 src/lib/markdown/core/config.ts
create mode 100644 src/lib/markdown/core/plugins.ts
create mode 100644 src/lib/markdown/index.ts
create mode 100644 src/lib/markdown/plugins/index.ts
rename src/{components/wiki => lib}/markdown/plugins/remarkAttrs.ts (100%)
create mode 100644 src/lib/markdown/plugins/server-only/loggerPlugin.ts
create mode 100644 src/lib/markdown/plugins/server-only/rehypeWikiLinks.ts
create mode 100644 src/lib/markdown/server-factory.ts
create mode 100644 src/lib/markdown/server.tsx
rename src/{components/wiki => lib}/markdown/utils/highlight.ts (65%)
create mode 100644 src/lib/markdown/utils/testing.ts
create mode 100644 src/lib/permissions/client.ts
create mode 100644 src/lib/permissions/index.ts
create mode 100644 src/lib/permissions/registry.ts
create mode 100644 src/lib/permissions/server.ts
create mode 100644 src/lib/permissions/types.ts
create mode 100644 src/lib/permissions/validation.ts
create mode 100644 src/lib/services/authorization.ts
create mode 100644 src/lib/services/groups.ts
create mode 100644 src/lib/services/markdown.ts
create mode 100644 src/lib/services/permissions.ts
create mode 100644 src/lib/trpc/routers/auth.ts
create mode 100644 src/lib/trpc/routers/groups.ts
create mode 100644 src/lib/trpc/routers/permissions.ts
create mode 100644 src/lib/trpc/routers/tags.ts
create mode 100644 src/lib/trpc/routers/users.ts
create mode 100644 src/lib/utils/pagination.ts
create mode 100644 src/lib/utils/server-auth-helpers.ts
create mode 100644 src/providers/index.tsx
create mode 100644 src/types/db.d.ts
diff --git a/.env.example b/.env.example
index 845d8e5..a3494a6 100644
--- a/.env.example
+++ b/.env.example
@@ -10,4 +10,6 @@ GITHUB_CLIENT_ID=your-github-client-id
GITHUB_CLIENT_SECRET=your-github-client-secret
GOOGLE_CLIENT_ID=your-google-client-id
-GOOGLE_CLIENT_SECRET=your-google-client-secret
\ No newline at end of file
+GOOGLE_CLIENT_SECRET=your-google-client-secret
+
+NEXT_PUBLIC_DEV_MODE=true
\ No newline at end of file
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 8fe12f1..5c26d67 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -7,6 +7,7 @@ on:
pull_request:
branches:
- main
+ - development
workflow_dispatch: # Allows manual triggering
jobs:
@@ -24,9 +25,26 @@ jobs:
- run: pnpm install
- run: pnpm lint
+ typecheck:
+ name: Typecheck
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: pnpm/action-setup@v2
+ with:
+ version: 9
+ - uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ - run: pnpm install
+ # Copy the example custom-seeds file to satisfy TypeScript during CI
+ - name: Create custom-seeds.ts from example for typecheck
+ run: cp src/lib/db/seeds/custom-seeds.example.ts src/lib/db/seeds/custom-seeds.ts
+ - run: pnpm typecheck
+
build:
name: Build
- needs: lint
+ needs: [lint, typecheck]
if: github.ref == 'refs/heads/main' || github.event.pull_request.base.ref == 'main'
runs-on: ubuntu-latest
steps:
@@ -38,4 +56,4 @@ jobs:
with:
node-version: 20
- run: pnpm install
- - run: pnpm build
+ - run: pnpm build
diff --git a/.gitignore b/.gitignore
index 7b8da95..67d2bbe 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,3 +40,6 @@ yarn-error.log*
# typescript
*.tsbuildinfo
next-env.d.ts
+
+# drizzle
+/drizzle
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 0e3cc49..b10e44f 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,6 +1,7 @@
{
"files.associations": {
- "*.css": "tailwindcss",
+ "globals.css": "tailwindcss",
+ "markdown.css": "tailwindcss",
"*.scss": "tailwindcss"
}
}
diff --git a/docs/permissions.md b/docs/permissions.md
new file mode 100644
index 0000000..97d9af1
--- /dev/null
+++ b/docs/permissions.md
@@ -0,0 +1,278 @@
+# Custom Permission System Documentation
+
+This document outlines the custom permission system used in NextWiki, providing components for controlling access based on user permissions and authentication status, both on the server and client side.
+
+## General Overview
+
+The permission system is built upon several core concepts:
+
+1. **Permission Registry (`src/lib/permissions/registry.ts`):** A central TypeScript file defining all available permissions in the system using a structured format (`module:resource:action`, e.g., `wiki:page:read`). This registry is the single source of truth for what permissions *can* exist.
+2. **Database Schema (`src/lib/db/schema.ts`):**
+ * `permissions`: Stores the permissions defined in the registry, adding a unique ID.
+ * `groups`: Defines user groups (e.g., Administrators, Editors, Viewers, Guests).
+ * `userGroups`: Links users to groups (many-to-many).
+ * `groupPermissions`: Links groups to specific permissions (many-to-many).
+ * `groupModulePermissions`, `groupActionPermissions`: Allow broader permissions based on module or action for a group (experimental/potentially less used).
+ * `pagePermissions`: Allows overriding permissions on a per-page basis (not fully covered in this doc).
+3. **Seeding (`src/lib/db/seeds/permissions.ts`):** Scripts to populate the `permissions` table from the registry and create default groups (`Administrators`, `Editors`, `Viewers`, `Guests`) with sensible default permission assignments.
+4. **Services:**
+ * `permissionService (`src/lib/services/permissions.ts`): Basic CRUD for the `permissions` table.
+ * `authorizationService` (`src/lib/services/authorization.ts`): The core logic for checking if a user (or guest) has a specific permission based on their group memberships and the permissions assigned to those groups. Handles fetching user groups and querying relevant permission tables.
+5. **Components (`src/components/auth/permission/`):** React components (both Server and Client) that utilize the `authorizationService` or the client-side `PermissionProvider` context to enforce access control declaratively in the UI.
+
+## Server-Side Components
+
+These components run on the server and provide the primary mechanism for enforcing access control before rendering a page or layout.
+
+### `PermissionGate`
+
+**Location:** `src/components/auth/permission/server/gate.tsx`
+
+This is an asynchronous Server Component designed for robust permission checks, typically used in layout files (`src/app/layout.tsx`) or higher-order components to gate access to entire sections or pages based on server-side session and permission data. It automatically detects the current pathname using request headers.
+
+**Props:**
+
+* `permission` (Optional `PermissionIdentifier`): The specific permission required to access the `Authorized` slot.
+* `permissions` (Optional `PermissionIdentifier[]`): An array of permissions. Access is granted if the user has *any* of these permissions. Use either `permission` or `permissions`, not both.
+* `publicPaths` (Optional `string[]`): An array of pathnames (e.g., `'/login'`, `'/register'`, `'/api/*'`) that should always be accessible, regardless of the permission check or authentication status. Supports wildcards. Automatically checks against the current path from headers.
+* `allowGuests` (Optional `boolean`, default: `false`): If `true`, allows unauthenticated users access if they have the required guest permissions defined in the system.
+* `children`: Must contain the slot components (`Authorized`, `Unauthorized`, `NotLoggedIn`).
+
+**Slots (Used as Children):**
+
+These components are used *inside* `PermissionGate` to define what content is shown or action is taken:
+
+* **`PermissionGate.Authorized`**: Renders its children if the user is authorized (has permission or path is public).
+* **`PermissionGate.Unauthorized`**: Renders its children if the user is logged in BUT lacks the required permission (and the path is not public).
+ * `redirectTo` (Optional `string`): If provided, performs a server-side redirect to this path instead of rendering children.
+* **`PermissionGate.NotLoggedIn`**: Renders its children if the user is not logged in (and the path is not public).
+ * `redirectTo` (Optional `string`): If provided, performs a server-side redirect to this path instead of rendering children.
+
+**Usage Example (`src/app/layout.tsx`):**
+
+```tsx
+import { PermissionGate } from "~/components/auth/permission/server";
+import { LogOutButton } from "~/components/auth/LogOutButton";
+import RootLayoutContent from "./RootLayoutContent"; // Example main content
+
+// ...
+
+
+
+ {children}
+
+
+ {/* Fallback content if redirect isn't used, or displayed briefly */}
+ Access Denied Content
+
+
+ {/* Fallback content if redirect isn't used, or displayed briefly */}
+ Redirecting to Login...
+
+
+```
+
+### `RequirePermission`
+
+**Location:** `src/components/auth/permission/server/require.tsx`
+
+A simpler asynchronous Server Component for conditionally rendering a specific piece of UI based on permission checks. It uses the `authorizationService` directly and automatically detects the current pathname using request headers if `publicPaths` is used.
+
+**Props:**
+
+* `permission` (Optional `PermissionIdentifier`): The single permission required. Use either this or `permissions`, not both.
+* `permissions` (Optional `PermissionIdentifier[]`): An array of permissions. Access is granted if the user has *any* of these. Use either this or `permission`, not both.
+* `publicPaths` (Optional `string[]`): An array of pathnames exempt from the permission check. If provided, the component will automatically check the current path from headers against this list.
+* `allowGuests` (Optional `boolean`, default: `false`): Considers guest permissions.
+* `children`: The content to render if permission is granted (or path is public).
+
+**Behavior:** Renders `children` if the user has the required permission(s) or the current path is in `publicPaths`. Otherwise, it renders `null`. Throws an error if both `permission` and `permissions` are provided, or if neither is provided.
+
+**Usage Example (Inside a Server Component):**
+
+```tsx
+import { RequirePermission } from "~/components/auth/permission/server";
+
+async function MyServerComponent() {
+ // No need to manually get pathname for publicPaths check
+ return (
+
+
Admin Section
+
+ You can update settings.
+ {/* */}
+
+
+ You can view users OR groups.
+ {/* / */}
+
+
+ );
+}
+```
+
+## Client-Side Permission Management
+
+Client-side components rely on a provider to fetch and distribute permission state.
+
+### `PermissionProvider`
+
+**Location:** `src/components/auth/permission/provider.tsx` (Exported via `client/index.ts`)
+
+This Client Component fetches the current user's permissions using tRPC (`auth.getMyPermissions`) based on their `next-auth` session status. It wraps the application (typically in `src/providers/index.tsx`) and makes permission data available via React Context.
+
+**Setup (`src/providers/index.tsx`):**
+
+```tsx
+"use client";
+// ... other imports
+import { PermissionProvider } from "~/components/auth/permission/client";
+
+export function Providers({ children }: ProvidersProps) {
+ return (
+
+
+
+ {/* <--- PermissionProvider wraps content */}
+
+ {children}
+
+
+
+
+
+
+ );
+}
+```
+
+### `usePermissions` Hook
+
+**Location:** `src/components/auth/permission/utils/usePermissions.ts`
+
+This hook is the standard way to access the permission context provided by `PermissionProvider`. It **must** be used within a Client Component that is a descendant of `PermissionProvider`.
+
+**Return Values (Context Data):**
+
+* `permissions`: Raw array of user's permission objects (`Permission[]`).
+* `permissionNames`: Array of permission identifier strings (`PermissionIdentifier[]`).
+* `permissionMap`: A Record for efficient lookups (`Record`).
+* `isLoading`: Boolean indicating if session status or permissions are still being fetched.
+* `isGuest`: Boolean, `true` if the user is unauthenticated (`useSession` status is "unauthenticated").
+* `isAuthenticated`: Boolean, `true` if the user is authenticated (`useSession` status is "authenticated").
+* `hasPermission(permission: PermissionIdentifier)`: Function to check if the user has a specific permission. Returns `false` while loading.
+* `hasAnyPermission(permissions: PermissionIdentifier[])`: Function to check if the user has at least one of the specified permissions. Returns `false` while loading or if the input array is empty.
+* `reloadPermissions()`: Function to manually trigger a refetch of user permissions.
+
+**Usage Example (Inside a Client Component):**
+
+```tsx
+"use client";
+
+import { usePermissions } from "~/components/auth/permission/utils/usePermissions";
+import { Button } from "~/components/ui/button";
+import { Skeleton } from "~/components/ui/skeleton";
+
+function MyToolbar() {
+ // Consumes context from PermissionProvider higher up the tree
+ const { hasPermission, isLoading, isAuthenticated } = usePermissions();
+
+ if (isLoading) {
+ return ; // Show loading state
+ }
+
+ if (!isAuthenticated) {
+ return Please log in to see actions.
;
+ }
+
+ return (
+
+ {hasPermission("admin:users:create") ? (
+ Create User
+ ) : (
+ Create User
+ )}
+ {/* Other toolbar items */}
+
+ );
+}
+```
+
+## Client-Side Components
+
+These Client Components utilize the `PermissionProvider` context for dynamically showing/hiding UI elements based on permissions. They provide *UI-level control only* and do not offer true security on their own (sensitive data/actions should always be protected server-side).
+
+### `ClientPermissionGate`
+
+**Location:** `src/components/auth/permission/client/gate.tsx`
+
+A client-side equivalent to `PermissionGate`, using the same slot-based approach (`Authorized`, `Unauthorized`, `NotLoggedIn`). It renders content based on the permissions available in the `PermissionContext`. Useful for controlling larger UI sections on the client without needing server-side checks for every interaction.
+
+**Props:**
+
+* `permission` (Optional `PermissionIdentifier`): Check for a single permission.
+* `permissions` (Optional `PermissionIdentifier[]`): Check if the user has *any* permission in the list. Use either `permission` or `permissions`.
+* `publicPaths` (Optional `string[]`): Client-side check using `usePathname`. If the current path matches, the `Authorized` slot is rendered regardless of permissions.
+* `allowGuests` (Optional `boolean`, default: `false`): If `true`, considers guest status from the context.
+* `children`: Must contain the slot components (`Authorized`, `Unauthorized`, `NotLoggedIn`).
+
+**Slots (Used as Children):**
+
+* **`ClientPermissionGate.Authorized`**: Renders children if authorized based on context/props.
+* **`ClientPermissionGate.Unauthorized`**: Renders children if authenticated but lacks permission (and path not public).
+ * `redirectTo` (Optional `string`): If provided, performs a *client-side* redirect using `useRouter` instead of rendering children.
+* **`ClientPermissionGate.NotLoggedIn`**: Renders children if unauthenticated (and path not public).
+ * `redirectTo` (Optional `string`): If provided, performs a *client-side* redirect instead of rendering children.
+
+### `ClientRequirePermission`
+
+**Location:** `src/components/auth/permission/client/require.tsx`
+
+A simpler Client Component for conditionally rendering a specific piece of UI based on permission checks using the `usePermissions` context.
+
+**Props:**
+
+* `permission` (Optional `PermissionIdentifier`): The single permission required. Use either this or `permissions`, not both.
+* `permissions` (Optional `PermissionIdentifier[]`): An array of permissions. Access is granted if the user has *any* of these. Use either this or `permission`, not both.
+* `publicPaths` (Optional `string[]`): Client-side path check using `usePathname`.
+* `allowGuests` (Optional `boolean`, default: `false`): Considers guest status from context.
+* `children`: The content to render if permission is granted (or path is public).
+* `fallback` (Optional `ReactNode`): Content to render if permission is denied or during loading. Defaults to `null`.
+
+**Behavior:** Renders `children` if the user has the required permission(s) from context or the current path is in `publicPaths`. Renders `fallback` (or `null`) otherwise. Logs a warning if both `permission` and `permissions` are provided, or if neither is provided.
+
+**Usage Example:**
+
+```tsx
+import { ClientRequirePermission } from "~/components/auth/permission/client";
+import { DeleteButton } from "./DeleteButton";
+import { EditButton } from "./EditButton";
+
+function PageActions({ pageId }: { pageId: string }) {
+ return (
+
+
+
+
+
+
+
+
+ );
+}
+```
+
+## Relationship & Use Cases
+
+* **`PermissionGate` (Server):** Use in layouts (`layout.tsx`) for primary, secure access control to pages/routes. Handles initial load protection and server-side redirects. Best for gating entire pages/sections.
+* **`RequirePermission` (Server):** Use within Server Components when you need to conditionally render smaller parts of the UI based on permissions, without the complexity of slots or redirects. Automatically checks path if `publicPaths` is used.
+* **`PermissionProvider` (Client):** Essential setup component. Wrap your application (in `src/providers/index.tsx`) to enable client-side permission checks. Fetches and provides the context.
+* **`usePermissions` (Client Hook):** Use within Client Components (that are descendants of `PermissionProvider`) to get fine-grained access to permission state (`isLoading`, `isGuest`, `hasPermission`, etc.) for conditional logic or rendering.
+* **`ClientPermissionGate` (Client):** Use within Client Components when you need the slot-based pattern (`Authorized`, `Unauthorized`, `NotLoggedIn`) for larger UI sections, potentially with client-side redirects. UI only.
+* **`ClientRequirePermission` (Client):** Use within Client Components for the common case of simply showing/hiding a small element (like a button or menu item) based on a single permission or a set of permissions (any match). UI only.
+
+**Security Note:** Client-side checks (`usePermissions`, `ClientPermissionGate`, `ClientRequirePermission`) are for UI convenience only. Always enforce critical security rules and data access on the server-side using `PermissionGate`, `RequirePermission`, or directly within your API routes/server actions using `authorizationService`.
\ No newline at end of file
diff --git a/package.json b/package.json
index 34be7f7..f5f9dbd 100644
--- a/package.json
+++ b/package.json
@@ -2,81 +2,114 @@
"name": "next-wiki",
"version": "0.1.0",
"private": true,
- "packageManager": "pnpm@9.14.2",
+ "packageManager": "pnpm@10.8.1",
+ "type": "module",
"scripts": {
"dev": "next dev --turbopack",
"build": "next build",
"start": "next start",
"lint": "next lint",
+ "typecheck": "tsc --noEmit",
"db:generate": "drizzle-kit generate",
"db:push": "drizzle-kit push",
"db:migrate": "tsx src/lib/db/migrate.ts",
- "db:setup": "node scripts/setup-db.js",
+ "db:setup": "tsx scripts/setup-db.ts",
+ "db:seed": "env-cmd -f .env NODE_ENV=development tsx src/lib/db/seed.ts",
+ "db:studio": "drizzle-kit studio",
+ "rebuild-rendered-html": "env-cmd -f .env tsx scripts/rebuildRenderedHtml.ts",
"watch-css": "tailwindcss -i ./src/styles/globals.css -o ./public/output.css --watch"
},
"dependencies": {
"@auth/drizzle-adapter": "^1.8.0",
"@codemirror/lang-markdown": "^6.3.2",
+ "@codemirror/language": "^6.11.0",
+ "@codemirror/language-data": "^6.5.1",
"@codemirror/state": "^6.5.2",
- "@neondatabase/serverless": "^0.10.4",
- "@radix-ui/react-popover": "^1.1.6",
- "@radix-ui/react-tabs": "^1.1.3",
- "@tailwindcss/cli": "^4.0.15",
+ "@heroicons/react": "^2.2.0",
+ "@lezer/highlight": "^1.2.1",
+ "@neondatabase/serverless": "^1.0.0",
+ "@radix-ui/react-dialog": "^1.1.10",
+ "@radix-ui/react-icons": "^1.3.2",
+ "@radix-ui/react-label": "^2.1.3",
+ "@radix-ui/react-popover": "^1.1.7",
+ "@radix-ui/react-scroll-area": "^1.2.4",
+ "@radix-ui/react-select": "^2.1.7",
+ "@radix-ui/react-tabs": "^1.1.4",
+ "@radix-ui/react-tooltip": "^1.2.0",
+ "@t3-oss/env-nextjs": "^0.12.0",
+ "@tailwindcss/cli": "^4.1.4",
"@tailwindcss/typography": "^0.5.16",
- "@tanstack/react-query": "^5.69.0",
- "@trpc/client": "^11.0.0",
- "@trpc/next": "^11.0.0",
- "@trpc/react-query": "^11.0.0",
- "@trpc/server": "^11.0.0",
- "@types/pg": "^8.11.11",
+ "@tanstack/react-query": "^5.74.4",
+ "@tanstack/react-query-devtools": "^5.74.4",
+ "@trpc/client": "^11.1.0",
+ "@trpc/next": "^11.1.0",
+ "@trpc/react-query": "^11.1.0",
+ "@trpc/server": "^11.1.0",
+ "@trpc/tanstack-react-query": "^11.1.0",
+ "@types/pg": "^8.11.13",
+ "@types/react-syntax-highlighter": "^15.5.13",
"@uiw/codemirror-theme-tokyo-night-storm": "^4.23.10",
+ "@uiw/codemirror-theme-xcode": "^4.23.10",
"@uiw/codemirror-themes": "^4.23.10",
"@uiw/react-codemirror": "^4.23.10",
"bcrypt": "^5.1.1",
+ "cmdk": "^1.1.1",
"date-fns": "^4.1.0",
- "dotenv": "^16.4.7",
- "drizzle-orm": "^0.41.0",
+ "dotenv": "^16.5.0",
+ "drizzle-orm": "^0.42.0",
"highlight.js": "^11.11.1",
- "next": "15.2.3",
+ "next": "15.3.1",
"next-auth": "^4.24.11",
"pg": "^8.14.1",
- "react": "^19.0.0",
- "react-dom": "^19.0.0",
+ "react": "^19.1.0",
+ "react-dom": "^19.1.0",
"react-markdown": "^10.1.0",
+ "react-syntax-highlighter": "^15.6.1",
"rehype-highlight": "^7.0.2",
+ "rehype-stringify": "^10.0.1",
+ "remark": "^15.0.1",
"remark-breaks": "^4.0.0",
"remark-directive": "^4.0.0",
"remark-directive-rehype": "^0.4.2",
"remark-emoji": "^5.0.1",
"remark-gfm": "^4.0.1",
- "sonner": "^2.0.1",
- "trpc": "^0.10.4",
+ "remark-parse": "^11.0.0",
+ "remark-rehype": "^11.1.2",
+ "server-only": "^0.0.1",
+ "sonner": "^2.0.3",
+ "trpc": "^0.11.3",
+ "unified": "^11.0.5",
"unist": "^0.0.1",
"unist-util-visit": "^5.0.0",
- "zod": "^3.24.2"
+ "zod": "^3.24.3"
},
"devDependencies": {
- "@eslint/eslintrc": "^3",
- "@radix-ui/react-slot": "^1.1.2",
+ "@eslint/eslintrc": "^3.3.1",
+ "@next/eslint-plugin-next": "^15.3.1",
+ "@radix-ui/react-slot": "^1.2.0",
"@shadcn/ui": "^0.0.4",
- "@tailwindcss/postcss": "^4",
+ "@tailwindcss/postcss": "^4.1.4",
"@types/bcrypt": "^5.0.2",
- "@types/node": "^20",
- "@types/react": "^19",
- "@types/react-dom": "^19",
+ "@types/hast": "^3.0.4",
+ "@types/node": "^22.14.1",
+ "@types/react": "^19.1.2",
+ "@types/react-dom": "^19.1.2",
"@types/unist": "^3.0.3",
"autoprefixer": "^10.4.21",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
- "drizzle-kit": "^0.30.5",
+ "drizzle-kit": "^0.31.0",
"env-cmd": "^10.1.0",
- "eslint": "^9",
- "eslint-config-next": "15.2.3",
- "lucide-react": "^0.483.0",
+ "eslint": "^9.24.0",
+ "eslint-config-next": "15.3.1",
+ "eslint-plugin-react-hooks": "^5.2.0",
+ "gray-matter": "^4.0.3",
+ "lucide-react": "^0.488.0",
"postcss": "^8.5.3",
- "tailwind-merge": "^3.0.2",
- "tailwindcss": "^4.0.15",
+ "tailwind-merge": "^3.2.0",
+ "tailwindcss": "^4.1.4",
+ "trpc-ui": "^1.0.15",
"tsx": "^4.19.3",
- "typescript": "^5"
+ "typescript": "^5.8.3"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e4ae242..25bf5b5 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -14,87 +14,144 @@ importers:
'@codemirror/lang-markdown':
specifier: ^6.3.2
version: 6.3.2
+ '@codemirror/language':
+ specifier: ^6.11.0
+ version: 6.11.0
+ '@codemirror/language-data':
+ specifier: ^6.5.1
+ version: 6.5.1
'@codemirror/state':
specifier: ^6.5.2
version: 6.5.2
+ '@heroicons/react':
+ specifier: ^2.2.0
+ version: 2.2.0(react@19.1.0)
+ '@lezer/highlight':
+ specifier: ^1.2.1
+ version: 1.2.1
'@neondatabase/serverless':
- specifier: ^0.10.4
- version: 0.10.4
+ specifier: ^1.0.0
+ version: 1.0.0
+ '@radix-ui/react-dialog':
+ specifier: ^1.1.10
+ version: 1.1.10(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-icons':
+ specifier: ^1.3.2
+ version: 1.3.2(react@19.1.0)
+ '@radix-ui/react-label':
+ specifier: ^2.1.3
+ version: 2.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@radix-ui/react-popover':
- specifier: ^1.1.6
- version: 1.1.6(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ specifier: ^1.1.7
+ version: 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-scroll-area':
+ specifier: ^1.2.4
+ version: 1.2.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-select':
+ specifier: ^2.1.7
+ version: 2.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@radix-ui/react-tabs':
- specifier: ^1.1.3
- version: 1.1.3(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ specifier: ^1.1.4
+ version: 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-tooltip':
+ specifier: ^1.2.0
+ version: 1.2.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@t3-oss/env-nextjs':
+ specifier: ^0.12.0
+ version: 0.12.0(typescript@5.8.3)(zod@3.24.3)
'@tailwindcss/cli':
- specifier: ^4.0.15
- version: 4.0.15
+ specifier: ^4.1.4
+ version: 4.1.4
'@tailwindcss/typography':
specifier: ^0.5.16
- version: 0.5.16(tailwindcss@4.0.15)
+ version: 0.5.16(tailwindcss@4.1.4)
'@tanstack/react-query':
- specifier: ^5.69.0
- version: 5.69.0(react@19.0.0)
+ specifier: ^5.74.4
+ version: 5.74.4(react@19.1.0)
+ '@tanstack/react-query-devtools':
+ specifier: ^5.74.4
+ version: 5.74.4(@tanstack/react-query@5.74.4(react@19.1.0))(react@19.1.0)
'@trpc/client':
- specifier: ^11.0.0
- version: 11.0.0(@trpc/server@11.0.0(typescript@5.8.2))(typescript@5.8.2)
+ specifier: ^11.1.0
+ version: 11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3)
'@trpc/next':
- specifier: ^11.0.0
- version: 11.0.0(@tanstack/react-query@5.69.0(react@19.0.0))(@trpc/client@11.0.0(@trpc/server@11.0.0(typescript@5.8.2))(typescript@5.8.2))(@trpc/react-query@11.0.0(@tanstack/react-query@5.69.0(react@19.0.0))(@trpc/client@11.0.0(@trpc/server@11.0.0(typescript@5.8.2))(typescript@5.8.2))(@trpc/server@11.0.0(typescript@5.8.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.8.2))(@trpc/server@11.0.0(typescript@5.8.2))(next@15.2.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.8.2)
+ specifier: ^11.1.0
+ version: 11.1.0(@tanstack/react-query@5.74.4(react@19.1.0))(@trpc/client@11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3))(@trpc/react-query@11.1.0(@tanstack/react-query@5.74.4(react@19.1.0))(@trpc/client@11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.1.0(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3))(@trpc/server@11.1.0(typescript@5.8.3))(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)
'@trpc/react-query':
- specifier: ^11.0.0
- version: 11.0.0(@tanstack/react-query@5.69.0(react@19.0.0))(@trpc/client@11.0.0(@trpc/server@11.0.0(typescript@5.8.2))(typescript@5.8.2))(@trpc/server@11.0.0(typescript@5.8.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.8.2)
+ specifier: ^11.1.0
+ version: 11.1.0(@tanstack/react-query@5.74.4(react@19.1.0))(@trpc/client@11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.1.0(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)
'@trpc/server':
- specifier: ^11.0.0
- version: 11.0.0(typescript@5.8.2)
+ specifier: ^11.1.0
+ version: 11.1.0(typescript@5.8.3)
+ '@trpc/tanstack-react-query':
+ specifier: ^11.1.0
+ version: 11.1.0(@tanstack/react-query@5.74.4(react@19.1.0))(@trpc/client@11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.1.0(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)
'@types/pg':
- specifier: ^8.11.11
- version: 8.11.11
+ specifier: ^8.11.13
+ version: 8.11.13
+ '@types/react-syntax-highlighter':
+ specifier: ^15.5.13
+ version: 15.5.13
'@uiw/codemirror-theme-tokyo-night-storm':
specifier: ^4.23.10
- version: 4.23.10(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+ version: 4.23.10(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.5)
+ '@uiw/codemirror-theme-xcode':
+ specifier: ^4.23.10
+ version: 4.23.10(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.5)
'@uiw/codemirror-themes':
specifier: ^4.23.10
- version: 4.23.10(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+ version: 4.23.10(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.5)
'@uiw/react-codemirror':
specifier: ^4.23.10
- version: 4.23.10(@babel/runtime@7.26.10)(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.11.0)(@codemirror/lint@6.8.4)(@codemirror/search@6.5.10)(@codemirror/state@6.5.2)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.36.4)(codemirror@6.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ version: 4.23.10(@babel/runtime@7.27.0)(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.11.0)(@codemirror/lint@6.8.5)(@codemirror/search@6.5.10)(@codemirror/state@6.5.2)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.36.5)(codemirror@6.0.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
bcrypt:
specifier: ^5.1.1
version: 5.1.1
+ cmdk:
+ specifier: ^1.1.1
+ version: 1.1.1(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
date-fns:
specifier: ^4.1.0
version: 4.1.0
dotenv:
- specifier: ^16.4.7
- version: 16.4.7
+ specifier: ^16.5.0
+ version: 16.5.0
drizzle-orm:
- specifier: ^0.41.0
- version: 0.41.0(@neondatabase/serverless@0.10.4)(@types/pg@8.11.11)(gel@2.0.1)(pg@8.14.1)
+ specifier: ^0.42.0
+ version: 0.42.0(@neondatabase/serverless@1.0.0)(@types/pg@8.11.13)(pg@8.14.1)
highlight.js:
specifier: ^11.11.1
version: 11.11.1
next:
- specifier: 15.2.3
- version: 15.2.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ specifier: 15.3.1
+ version: 15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
next-auth:
specifier: ^4.24.11
- version: 4.24.11(next@15.2.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ version: 4.24.11(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
pg:
specifier: ^8.14.1
version: 8.14.1
react:
- specifier: ^19.0.0
- version: 19.0.0
+ specifier: ^19.1.0
+ version: 19.1.0
react-dom:
- specifier: ^19.0.0
- version: 19.0.0(react@19.0.0)
+ specifier: ^19.1.0
+ version: 19.1.0(react@19.1.0)
react-markdown:
specifier: ^10.1.0
- version: 10.1.0(@types/react@19.0.12)(react@19.0.0)
+ version: 10.1.0(@types/react@19.1.2)(react@19.1.0)
+ react-syntax-highlighter:
+ specifier: ^15.6.1
+ version: 15.6.1(react@19.1.0)
rehype-highlight:
specifier: ^7.0.2
version: 7.0.2
+ rehype-stringify:
+ specifier: ^10.0.1
+ version: 10.0.1
+ remark:
+ specifier: ^15.0.1
+ version: 15.0.1
remark-breaks:
specifier: ^4.0.0
version: 4.0.0
@@ -110,12 +167,24 @@ importers:
remark-gfm:
specifier: ^4.0.1
version: 4.0.1
+ remark-parse:
+ specifier: ^11.0.0
+ version: 11.0.0
+ remark-rehype:
+ specifier: ^11.1.2
+ version: 11.1.2
+ server-only:
+ specifier: ^0.0.1
+ version: 0.0.1
sonner:
- specifier: ^2.0.1
- version: 2.0.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ specifier: ^2.0.3
+ version: 2.0.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
trpc:
- specifier: ^0.10.4
- version: 0.10.4
+ specifier: ^0.11.3
+ version: 0.11.3
+ unified:
+ specifier: ^11.0.5
+ version: 11.0.5
unist:
specifier: ^0.0.1
version: 0.0.1
@@ -123,33 +192,39 @@ importers:
specifier: ^5.0.0
version: 5.0.0
zod:
- specifier: ^3.24.2
- version: 3.24.2
+ specifier: ^3.24.3
+ version: 3.24.3
devDependencies:
'@eslint/eslintrc':
- specifier: ^3
+ specifier: ^3.3.1
version: 3.3.1
+ '@next/eslint-plugin-next':
+ specifier: ^15.3.1
+ version: 15.3.1
'@radix-ui/react-slot':
- specifier: ^1.1.2
- version: 1.1.2(@types/react@19.0.12)(react@19.0.0)
+ specifier: ^1.2.0
+ version: 1.2.0(@types/react@19.1.2)(react@19.1.0)
'@shadcn/ui':
specifier: ^0.0.4
version: 0.0.4
'@tailwindcss/postcss':
- specifier: ^4
- version: 4.0.15
+ specifier: ^4.1.4
+ version: 4.1.4
'@types/bcrypt':
specifier: ^5.0.2
version: 5.0.2
+ '@types/hast':
+ specifier: ^3.0.4
+ version: 3.0.4
'@types/node':
- specifier: ^20
- version: 20.17.25
+ specifier: ^22.14.1
+ version: 22.14.1
'@types/react':
- specifier: ^19
- version: 19.0.12
+ specifier: ^19.1.2
+ version: 19.1.2
'@types/react-dom':
- specifier: ^19
- version: 19.0.4(@types/react@19.0.12)
+ specifier: ^19.1.2
+ version: 19.1.2(@types/react@19.1.2)
'@types/unist':
specifier: ^3.0.3
version: 3.0.3
@@ -163,35 +238,44 @@ importers:
specifier: ^2.1.1
version: 2.1.1
drizzle-kit:
- specifier: ^0.30.5
- version: 0.30.5
+ specifier: ^0.31.0
+ version: 0.31.0
env-cmd:
specifier: ^10.1.0
version: 10.1.0
eslint:
- specifier: ^9
- version: 9.23.0(jiti@2.4.2)
+ specifier: ^9.24.0
+ version: 9.24.0(jiti@2.4.2)
eslint-config-next:
- specifier: 15.2.3
- version: 15.2.3(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)
+ specifier: 15.3.1
+ version: 15.3.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
+ eslint-plugin-react-hooks:
+ specifier: ^5.2.0
+ version: 5.2.0(eslint@9.24.0(jiti@2.4.2))
+ gray-matter:
+ specifier: ^4.0.3
+ version: 4.0.3
lucide-react:
- specifier: ^0.483.0
- version: 0.483.0(react@19.0.0)
+ specifier: ^0.488.0
+ version: 0.488.0(react@19.1.0)
postcss:
specifier: ^8.5.3
version: 8.5.3
tailwind-merge:
- specifier: ^3.0.2
- version: 3.0.2
+ specifier: ^3.2.0
+ version: 3.2.0
tailwindcss:
- specifier: ^4.0.15
- version: 4.0.15
+ specifier: ^4.1.4
+ version: 4.1.4
+ trpc-ui:
+ specifier: ^1.0.15
+ version: 1.0.15(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@mui/material@5.17.1(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@trpc/server@11.1.0(typescript@5.8.3))(@types/react@19.1.2)(monaco-editor@0.52.2)(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(zod@3.24.3)
tsx:
specifier: ^4.19.3
version: 4.19.3
typescript:
- specifier: ^5
- version: 5.8.2
+ specifier: ^5.8.3
+ version: 5.8.3
packages:
@@ -216,33 +300,124 @@ packages:
'@auth/drizzle-adapter@1.8.0':
resolution: {integrity: sha512-cxApE0h5WcyDsgGix9hzmWmCz0qxvmMJexAOQmI6R/YXYxrZ/mKBKu0BlfgQBR6z2XvNWl4wbEGchwSenSCksQ==}
- '@babel/runtime@7.26.10':
- resolution: {integrity: sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==}
+ '@babel/code-frame@7.26.2':
+ resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/generator@7.27.0':
+ resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.25.9':
+ resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-string-parser@7.25.9':
+ resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.25.9':
+ resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.27.0':
+ resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/runtime@7.27.0':
+ resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/template@7.27.0':
+ resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.27.0':
+ resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.27.0':
+ resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==}
engines: {node: '>=6.9.0'}
'@codemirror/autocomplete@6.18.6':
resolution: {integrity: sha512-PHHBXFomUs5DF+9tCOM/UoW6XQ4R44lLNNhRaW9PKPTU0D7lIjRg3ElxaJnTwsl/oHiR93WSXDBrekhoUGCPtg==}
- '@codemirror/commands@6.8.0':
- resolution: {integrity: sha512-q8VPEFaEP4ikSlt6ZxjB3zW72+7osfAYW9i8Zu943uqbKuz6utc1+F170hyLUCUltXORjQXRyYQNfkckzA/bPQ==}
+ '@codemirror/commands@6.8.1':
+ resolution: {integrity: sha512-KlGVYufHMQzxbdQONiLyGQDUW0itrLZwq3CcY7xpv9ZLRHqzkBSoteocBHtMCoY7/Ci4xhzSrToIeLg7FxHuaw==}
+
+ '@codemirror/lang-angular@0.1.3':
+ resolution: {integrity: sha512-xgeWGJQQl1LyStvndWtruUvb4SnBZDAu/gvFH/ZU+c0W25tQR8e5hq7WTwiIY2dNxnf+49mRiGI/9yxIwB6f5w==}
+
+ '@codemirror/lang-cpp@6.0.2':
+ resolution: {integrity: sha512-6oYEYUKHvrnacXxWxYa6t4puTlbN3dgV662BDfSH8+MfjQjVmP697/KYTDOqpxgerkvoNm7q5wlFMBeX8ZMocg==}
'@codemirror/lang-css@6.3.1':
resolution: {integrity: sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==}
+ '@codemirror/lang-go@6.0.1':
+ resolution: {integrity: sha512-7fNvbyNylvqCphW9HD6WFnRpcDjr+KXX/FgqXy5H5ZS0eC5edDljukm/yNgYkwTsgp2busdod50AOTIy6Jikfg==}
+
'@codemirror/lang-html@6.4.9':
resolution: {integrity: sha512-aQv37pIMSlueybId/2PVSP6NPnmurFDVmZwzc7jszd2KAF8qd4VBbvNYPXWQq90WIARjsdVkPbw29pszmHws3Q==}
+ '@codemirror/lang-java@6.0.1':
+ resolution: {integrity: sha512-OOnmhH67h97jHzCuFaIEspbmsT98fNdhVhmA3zCxW0cn7l8rChDhZtwiwJ/JOKXgfm4J+ELxQihxaI7bj7mJRg==}
+
'@codemirror/lang-javascript@6.2.3':
resolution: {integrity: sha512-8PR3vIWg7pSu7ur8A07pGiYHgy3hHj+mRYRCSG8q+mPIrl0F02rgpGv+DsQTHRTc30rydOsf5PZ7yjKFg2Ackw==}
+ '@codemirror/lang-json@6.0.1':
+ resolution: {integrity: sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==}
+
+ '@codemirror/lang-less@6.0.2':
+ resolution: {integrity: sha512-EYdQTG22V+KUUk8Qq582g7FMnCZeEHsyuOJisHRft/mQ+ZSZ2w51NupvDUHiqtsOy7It5cHLPGfHQLpMh9bqpQ==}
+
+ '@codemirror/lang-liquid@6.2.3':
+ resolution: {integrity: sha512-yeN+nMSrf/lNii3FJxVVEGQwFG0/2eDyH6gNOj+TGCa0hlNO4bhQnoO5ISnd7JOG+7zTEcI/GOoyraisFVY7jQ==}
+
'@codemirror/lang-markdown@6.3.2':
resolution: {integrity: sha512-c/5MYinGbFxYl4itE9q/rgN/sMTjOr8XL5OWnC+EaRMLfCbVUmmubTJfdgpfcSS2SCaT7b+Q+xi3l6CgoE+BsA==}
+ '@codemirror/lang-php@6.0.1':
+ resolution: {integrity: sha512-ublojMdw/PNWa7qdN5TMsjmqkNuTBD3k6ndZ4Z0S25SBAiweFGyY68AS3xNcIOlb6DDFDvKlinLQ40vSLqf8xA==}
+
+ '@codemirror/lang-python@6.1.7':
+ resolution: {integrity: sha512-mZnFTsL4lW5p9ch8uKNKeRU3xGGxr1QpESLilfON2E3fQzOa/OygEMkaDvERvXDJWJA9U9oN/D4w0ZuUzNO4+g==}
+
+ '@codemirror/lang-rust@6.0.1':
+ resolution: {integrity: sha512-344EMWFBzWArHWdZn/NcgkwMvZIWUR1GEBdwG8FEp++6o6vT6KL9V7vGs2ONsKxxFUPXKI0SPcWhyYyl2zPYxQ==}
+
+ '@codemirror/lang-sass@6.0.2':
+ resolution: {integrity: sha512-l/bdzIABvnTo1nzdY6U+kPAC51czYQcOErfzQ9zSm9D8GmNPD0WTW8st/CJwBTPLO8jlrbyvlSEcN20dc4iL0Q==}
+
+ '@codemirror/lang-sql@6.8.0':
+ resolution: {integrity: sha512-aGLmY4OwGqN3TdSx3h6QeA1NrvaYtF7kkoWR/+W7/JzB0gQtJ+VJxewlnE3+VImhA4WVlhmkJr109PefOOhjLg==}
+
+ '@codemirror/lang-vue@0.1.3':
+ resolution: {integrity: sha512-QSKdtYTDRhEHCfo5zOShzxCmqKJvgGrZwDQSdbvCRJ5pRLWBS7pD/8e/tH44aVQT6FKm0t6RVNoSUWHOI5vNug==}
+
+ '@codemirror/lang-wast@6.0.2':
+ resolution: {integrity: sha512-Imi2KTpVGm7TKuUkqyJ5NRmeFWF7aMpNiwHnLQe0x9kmrxElndyH0K6H/gXtWwY6UshMRAhpENsgfpSwsgmC6Q==}
+
+ '@codemirror/lang-xml@6.1.0':
+ resolution: {integrity: sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==}
+
+ '@codemirror/lang-yaml@6.1.2':
+ resolution: {integrity: sha512-dxrfG8w5Ce/QbT7YID7mWZFKhdhsaTNOYjOkSIMt1qmC4VQnXSDSYVHHHn8k6kJUfIhtLo8t1JJgltlxWdsITw==}
+
+ '@codemirror/language-data@6.5.1':
+ resolution: {integrity: sha512-0sWxeUSNlBr6OmkqybUTImADFUP0M3P0IiSde4nc24bz/6jIYzqYSgkOSLS+CBIoW1vU8Q9KUWXscBXeoMVC9w==}
+
'@codemirror/language@6.11.0':
resolution: {integrity: sha512-A7+f++LodNNc1wGgoRDTt78cOwWm9KVezApgjOMp1W4hM0898nsqBXwF+sbePE7ZRcjN7Sa1Z5m2oN27XkmEjQ==}
- '@codemirror/lint@6.8.4':
- resolution: {integrity: sha512-u4q7PnZlJUojeRe8FJa/njJcMctISGgPQ4PnWsd9268R4ZTtU+tfFYmwkBvgcrK2+QQ8tYFVALVb5fVJykKc5A==}
+ '@codemirror/legacy-modes@6.5.0':
+ resolution: {integrity: sha512-dNw5pwTqtR1giYjaJyEajunLqxGavZqV0XRtVZyMJnNOD2HmK9DMUmuCAr6RMFGRJ4l8OeQDjpI/us+R09mQsw==}
+
+ '@codemirror/lint@6.8.5':
+ resolution: {integrity: sha512-s3n3KisH7dx3vsoeGMxsbRAgKe4O1vbrnKBClm99PU0fWxmxsx5rR2PfqQgIt+2MMJBHbiJ5rfIdLYfB9NNvsA==}
'@codemirror/search@6.5.10':
resolution: {integrity: sha512-RMdPdmsrUf53pb2VwflKGHEe1XVM07hI7vV2ntgw1dmqhimpatSJKva4VA9h4TLUDOD4EIF02201oZurpnEFsg==}
@@ -253,20 +428,74 @@ packages:
'@codemirror/theme-one-dark@6.1.2':
resolution: {integrity: sha512-F+sH0X16j/qFLMAfbciKTxVOwkdAS336b7AXTKOZhy8BR3eH/RelsnLgLFINrpST63mmN2OuwUt0W2ndUgYwUA==}
- '@codemirror/view@6.36.4':
- resolution: {integrity: sha512-ZQ0V5ovw/miKEXTvjgzRyjnrk9TwriUB1k4R5p7uNnHR9Hus+D1SXHGdJshijEzPFjU25xea/7nhIeSqYFKdbA==}
+ '@codemirror/view@6.36.5':
+ resolution: {integrity: sha512-cd+FZEUlu3GQCYnguYm3EkhJ8KJVisqqUsCOKedBoAt/d9c76JUUap6U0UrpElln5k6VyrEOYliMuDAKIeDQLg==}
'@drizzle-team/brocli@0.10.2':
resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==}
- '@emnapi/core@1.3.1':
- resolution: {integrity: sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==}
+ '@emnapi/core@1.4.3':
+ resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==}
+
+ '@emnapi/runtime@1.4.3':
+ resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==}
+
+ '@emnapi/wasi-threads@1.0.2':
+ resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==}
+
+ '@emotion/babel-plugin@11.13.5':
+ resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==}
+
+ '@emotion/cache@11.14.0':
+ resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==}
+
+ '@emotion/hash@0.9.2':
+ resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==}
+
+ '@emotion/is-prop-valid@1.3.1':
+ resolution: {integrity: sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==}
+
+ '@emotion/memoize@0.9.0':
+ resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==}
+
+ '@emotion/react@11.14.0':
+ resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: '>=16.8.0'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@emotion/serialize@1.3.3':
+ resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==}
+
+ '@emotion/sheet@1.4.0':
+ resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==}
+
+ '@emotion/styled@11.14.0':
+ resolution: {integrity: sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==}
+ peerDependencies:
+ '@emotion/react': ^11.0.0-rc.0
+ '@types/react': '*'
+ react: '>=16.8.0'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@emotion/unitless@0.10.0':
+ resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==}
- '@emnapi/runtime@1.3.1':
- resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==}
+ '@emotion/use-insertion-effect-with-fallbacks@1.2.0':
+ resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==}
+ peerDependencies:
+ react: '>=16.8.0'
- '@emnapi/wasi-threads@1.0.1':
- resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==}
+ '@emotion/utils@1.4.2':
+ resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==}
+
+ '@emotion/weak-memoize@0.4.0':
+ resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==}
'@esbuild-kit/core-utils@3.3.2':
resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==}
@@ -276,14 +505,8 @@ packages:
resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==}
deprecated: 'Merged into tsx: https://tsx.is'
- '@esbuild/aix-ppc64@0.19.12':
- resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==}
- engines: {node: '>=12'}
- cpu: [ppc64]
- os: [aix]
-
- '@esbuild/aix-ppc64@0.25.1':
- resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==}
+ '@esbuild/aix-ppc64@0.25.2':
+ resolution: {integrity: sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
@@ -294,14 +517,8 @@ packages:
cpu: [arm64]
os: [android]
- '@esbuild/android-arm64@0.19.12':
- resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [android]
-
- '@esbuild/android-arm64@0.25.1':
- resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==}
+ '@esbuild/android-arm64@0.25.2':
+ resolution: {integrity: sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
@@ -312,14 +529,8 @@ packages:
cpu: [arm]
os: [android]
- '@esbuild/android-arm@0.19.12':
- resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [android]
-
- '@esbuild/android-arm@0.25.1':
- resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==}
+ '@esbuild/android-arm@0.25.2':
+ resolution: {integrity: sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
@@ -330,14 +541,8 @@ packages:
cpu: [x64]
os: [android]
- '@esbuild/android-x64@0.19.12':
- resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [android]
-
- '@esbuild/android-x64@0.25.1':
- resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==}
+ '@esbuild/android-x64@0.25.2':
+ resolution: {integrity: sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
@@ -348,14 +553,8 @@ packages:
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-arm64@0.19.12':
- resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [darwin]
-
- '@esbuild/darwin-arm64@0.25.1':
- resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==}
+ '@esbuild/darwin-arm64@0.25.2':
+ resolution: {integrity: sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
@@ -366,14 +565,8 @@ packages:
cpu: [x64]
os: [darwin]
- '@esbuild/darwin-x64@0.19.12':
- resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [darwin]
-
- '@esbuild/darwin-x64@0.25.1':
- resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==}
+ '@esbuild/darwin-x64@0.25.2':
+ resolution: {integrity: sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
@@ -384,14 +577,8 @@ packages:
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-arm64@0.19.12':
- resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [freebsd]
-
- '@esbuild/freebsd-arm64@0.25.1':
- resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==}
+ '@esbuild/freebsd-arm64@0.25.2':
+ resolution: {integrity: sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
@@ -402,14 +589,8 @@ packages:
cpu: [x64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.19.12':
- resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [freebsd]
-
- '@esbuild/freebsd-x64@0.25.1':
- resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==}
+ '@esbuild/freebsd-x64@0.25.2':
+ resolution: {integrity: sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
@@ -420,14 +601,8 @@ packages:
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm64@0.19.12':
- resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [linux]
-
- '@esbuild/linux-arm64@0.25.1':
- resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==}
+ '@esbuild/linux-arm64@0.25.2':
+ resolution: {integrity: sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
@@ -438,14 +613,8 @@ packages:
cpu: [arm]
os: [linux]
- '@esbuild/linux-arm@0.19.12':
- resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [linux]
-
- '@esbuild/linux-arm@0.25.1':
- resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==}
+ '@esbuild/linux-arm@0.25.2':
+ resolution: {integrity: sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
@@ -456,14 +625,8 @@ packages:
cpu: [ia32]
os: [linux]
- '@esbuild/linux-ia32@0.19.12':
- resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [linux]
-
- '@esbuild/linux-ia32@0.25.1':
- resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==}
+ '@esbuild/linux-ia32@0.25.2':
+ resolution: {integrity: sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
@@ -474,14 +637,8 @@ packages:
cpu: [loong64]
os: [linux]
- '@esbuild/linux-loong64@0.19.12':
- resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==}
- engines: {node: '>=12'}
- cpu: [loong64]
- os: [linux]
-
- '@esbuild/linux-loong64@0.25.1':
- resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==}
+ '@esbuild/linux-loong64@0.25.2':
+ resolution: {integrity: sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
@@ -492,14 +649,8 @@ packages:
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-mips64el@0.19.12':
- resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==}
- engines: {node: '>=12'}
- cpu: [mips64el]
- os: [linux]
-
- '@esbuild/linux-mips64el@0.25.1':
- resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==}
+ '@esbuild/linux-mips64el@0.25.2':
+ resolution: {integrity: sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
@@ -510,14 +661,8 @@ packages:
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-ppc64@0.19.12':
- resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==}
- engines: {node: '>=12'}
- cpu: [ppc64]
- os: [linux]
-
- '@esbuild/linux-ppc64@0.25.1':
- resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==}
+ '@esbuild/linux-ppc64@0.25.2':
+ resolution: {integrity: sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
@@ -528,14 +673,8 @@ packages:
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-riscv64@0.19.12':
- resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==}
- engines: {node: '>=12'}
- cpu: [riscv64]
- os: [linux]
-
- '@esbuild/linux-riscv64@0.25.1':
- resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==}
+ '@esbuild/linux-riscv64@0.25.2':
+ resolution: {integrity: sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
@@ -546,14 +685,8 @@ packages:
cpu: [s390x]
os: [linux]
- '@esbuild/linux-s390x@0.19.12':
- resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==}
- engines: {node: '>=12'}
- cpu: [s390x]
- os: [linux]
-
- '@esbuild/linux-s390x@0.25.1':
- resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==}
+ '@esbuild/linux-s390x@0.25.2':
+ resolution: {integrity: sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
@@ -564,20 +697,14 @@ packages:
cpu: [x64]
os: [linux]
- '@esbuild/linux-x64@0.19.12':
- resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [linux]
-
- '@esbuild/linux-x64@0.25.1':
- resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==}
+ '@esbuild/linux-x64@0.25.2':
+ resolution: {integrity: sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
- '@esbuild/netbsd-arm64@0.25.1':
- resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==}
+ '@esbuild/netbsd-arm64@0.25.2':
+ resolution: {integrity: sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
@@ -588,20 +715,14 @@ packages:
cpu: [x64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.19.12':
- resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [netbsd]
-
- '@esbuild/netbsd-x64@0.25.1':
- resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==}
+ '@esbuild/netbsd-x64@0.25.2':
+ resolution: {integrity: sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
- '@esbuild/openbsd-arm64@0.25.1':
- resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==}
+ '@esbuild/openbsd-arm64@0.25.2':
+ resolution: {integrity: sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
@@ -612,14 +733,8 @@ packages:
cpu: [x64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.19.12':
- resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [openbsd]
-
- '@esbuild/openbsd-x64@0.25.1':
- resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==}
+ '@esbuild/openbsd-x64@0.25.2':
+ resolution: {integrity: sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
@@ -630,14 +745,8 @@ packages:
cpu: [x64]
os: [sunos]
- '@esbuild/sunos-x64@0.19.12':
- resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [sunos]
-
- '@esbuild/sunos-x64@0.25.1':
- resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==}
+ '@esbuild/sunos-x64@0.25.2':
+ resolution: {integrity: sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
@@ -648,14 +757,8 @@ packages:
cpu: [arm64]
os: [win32]
- '@esbuild/win32-arm64@0.19.12':
- resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [win32]
-
- '@esbuild/win32-arm64@0.25.1':
- resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==}
+ '@esbuild/win32-arm64@0.25.2':
+ resolution: {integrity: sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
@@ -666,14 +769,8 @@ packages:
cpu: [ia32]
os: [win32]
- '@esbuild/win32-ia32@0.19.12':
- resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [win32]
-
- '@esbuild/win32-ia32@0.25.1':
- resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==}
+ '@esbuild/win32-ia32@0.25.2':
+ resolution: {integrity: sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
@@ -684,20 +781,14 @@ packages:
cpu: [x64]
os: [win32]
- '@esbuild/win32-x64@0.19.12':
- resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [win32]
-
- '@esbuild/win32-x64@0.25.1':
- resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==}
+ '@esbuild/win32-x64@0.25.2':
+ resolution: {integrity: sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
- '@eslint-community/eslint-utils@4.5.1':
- resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==}
+ '@eslint-community/eslint-utils@4.6.1':
+ resolution: {integrity: sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
@@ -706,32 +797,36 @@ packages:
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
- '@eslint/config-array@0.19.2':
- resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==}
+ '@eslint/config-array@0.20.0':
+ resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/config-helpers@0.2.0':
- resolution: {integrity: sha512-yJLLmLexii32mGrhW29qvU3QBVTu0GUmEf/J4XsBtVhp4JkIUFN/BjWqTF63yRvGApIDpZm5fa97LtYtINmfeQ==}
+ '@eslint/config-helpers@0.2.1':
+ resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/core@0.12.0':
resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@eslint/core@0.13.0':
+ resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
'@eslint/eslintrc@3.3.1':
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/js@9.23.0':
- resolution: {integrity: sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==}
+ '@eslint/js@9.24.0':
+ resolution: {integrity: sha512-uIY/y3z0uvOGX8cp1C2fiC4+ZmBhp6yZWkojtHL1YEMnRt1Y63HB9TM17proGEmeG7HeUY+UP36F0aknKYTpYA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.6':
resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/plugin-kit@0.2.7':
- resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==}
+ '@eslint/plugin-kit@0.2.8':
+ resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@floating-ui/core@1.6.9':
@@ -749,6 +844,11 @@ packages:
'@floating-ui/utils@0.2.9':
resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==}
+ '@heroicons/react@2.2.0':
+ resolution: {integrity: sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ==}
+ peerDependencies:
+ react: '>= 16 || ^19.0.0-rc'
+
'@humanfs/core@0.19.1':
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
engines: {node: '>=18.18.0'}
@@ -769,116 +869,145 @@ packages:
resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==}
engines: {node: '>=18.18'}
- '@img/sharp-darwin-arm64@0.33.5':
- resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==}
+ '@img/sharp-darwin-arm64@0.34.1':
+ resolution: {integrity: sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [darwin]
- '@img/sharp-darwin-x64@0.33.5':
- resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==}
+ '@img/sharp-darwin-x64@0.34.1':
+ resolution: {integrity: sha512-VfuYgG2r8BpYiOUN+BfYeFo69nP/MIwAtSJ7/Zpxc5QF3KS22z8Pvg3FkrSFJBPNQ7mmcUcYQFBmEQp7eu1F8Q==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [darwin]
- '@img/sharp-libvips-darwin-arm64@1.0.4':
- resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==}
+ '@img/sharp-libvips-darwin-arm64@1.1.0':
+ resolution: {integrity: sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==}
cpu: [arm64]
os: [darwin]
- '@img/sharp-libvips-darwin-x64@1.0.4':
- resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==}
+ '@img/sharp-libvips-darwin-x64@1.1.0':
+ resolution: {integrity: sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==}
cpu: [x64]
os: [darwin]
- '@img/sharp-libvips-linux-arm64@1.0.4':
- resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==}
+ '@img/sharp-libvips-linux-arm64@1.1.0':
+ resolution: {integrity: sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==}
cpu: [arm64]
os: [linux]
- '@img/sharp-libvips-linux-arm@1.0.5':
- resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==}
+ '@img/sharp-libvips-linux-arm@1.1.0':
+ resolution: {integrity: sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==}
cpu: [arm]
os: [linux]
- '@img/sharp-libvips-linux-s390x@1.0.4':
- resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==}
+ '@img/sharp-libvips-linux-ppc64@1.1.0':
+ resolution: {integrity: sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-s390x@1.1.0':
+ resolution: {integrity: sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==}
cpu: [s390x]
os: [linux]
- '@img/sharp-libvips-linux-x64@1.0.4':
- resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==}
+ '@img/sharp-libvips-linux-x64@1.1.0':
+ resolution: {integrity: sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==}
cpu: [x64]
os: [linux]
- '@img/sharp-libvips-linuxmusl-arm64@1.0.4':
- resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==}
+ '@img/sharp-libvips-linuxmusl-arm64@1.1.0':
+ resolution: {integrity: sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==}
cpu: [arm64]
os: [linux]
- '@img/sharp-libvips-linuxmusl-x64@1.0.4':
- resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==}
+ '@img/sharp-libvips-linuxmusl-x64@1.1.0':
+ resolution: {integrity: sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==}
cpu: [x64]
os: [linux]
- '@img/sharp-linux-arm64@0.33.5':
- resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==}
+ '@img/sharp-linux-arm64@0.34.1':
+ resolution: {integrity: sha512-kX2c+vbvaXC6vly1RDf/IWNXxrlxLNpBVWkdpRq5Ka7OOKj6nr66etKy2IENf6FtOgklkg9ZdGpEu9kwdlcwOQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [linux]
- '@img/sharp-linux-arm@0.33.5':
- resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==}
+ '@img/sharp-linux-arm@0.34.1':
+ resolution: {integrity: sha512-anKiszvACti2sGy9CirTlNyk7BjjZPiML1jt2ZkTdcvpLU1YH6CXwRAZCA2UmRXnhiIftXQ7+Oh62Ji25W72jA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm]
os: [linux]
- '@img/sharp-linux-s390x@0.33.5':
- resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==}
+ '@img/sharp-linux-s390x@0.34.1':
+ resolution: {integrity: sha512-7s0KX2tI9mZI2buRipKIw2X1ufdTeaRgwmRabt5bi9chYfhur+/C1OXg3TKg/eag1W+6CCWLVmSauV1owmRPxA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [s390x]
os: [linux]
- '@img/sharp-linux-x64@0.33.5':
- resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==}
+ '@img/sharp-linux-x64@0.34.1':
+ resolution: {integrity: sha512-wExv7SH9nmoBW3Wr2gvQopX1k8q2g5V5Iag8Zk6AVENsjwd+3adjwxtp3Dcu2QhOXr8W9NusBU6XcQUohBZ5MA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [linux]
- '@img/sharp-linuxmusl-arm64@0.33.5':
- resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==}
+ '@img/sharp-linuxmusl-arm64@0.34.1':
+ resolution: {integrity: sha512-DfvyxzHxw4WGdPiTF0SOHnm11Xv4aQexvqhRDAoD00MzHekAj9a/jADXeXYCDFH/DzYruwHbXU7uz+H+nWmSOQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [linux]
- '@img/sharp-linuxmusl-x64@0.33.5':
- resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==}
+ '@img/sharp-linuxmusl-x64@0.34.1':
+ resolution: {integrity: sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [linux]
- '@img/sharp-wasm32@0.33.5':
- resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==}
+ '@img/sharp-wasm32@0.34.1':
+ resolution: {integrity: sha512-YDybQnYrLQfEpzGOQe7OKcyLUCML4YOXl428gOOzBgN6Gw0rv8dpsJ7PqTHxBnXnwXr8S1mYFSLSa727tpz0xg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [wasm32]
- '@img/sharp-win32-ia32@0.33.5':
- resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==}
+ '@img/sharp-win32-ia32@0.34.1':
+ resolution: {integrity: sha512-WKf/NAZITnonBf3U1LfdjoMgNO5JYRSlhovhRhMxXVdvWYveM4kM3L8m35onYIdh75cOMCo1BexgVQcCDzyoWw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [ia32]
os: [win32]
- '@img/sharp-win32-x64@0.33.5':
- resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==}
+ '@img/sharp-win32-x64@0.34.1':
+ resolution: {integrity: sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [win32]
+ '@jridgewell/gen-mapping@0.3.8':
+ resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/set-array@1.2.1':
+ resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.5.0':
+ resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
+
+ '@jridgewell/trace-mapping@0.3.25':
+ resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+
'@lezer/common@1.2.3':
resolution: {integrity: sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==}
- '@lezer/css@1.1.10':
- resolution: {integrity: sha512-V5/89eDapjeAkWPBpWEfQjZ1Hag3aYUUJOL8213X0dFRuXJ4BXa5NKl9USzOnaLod4AOpmVCkduir2oKwZYZtg==}
+ '@lezer/cpp@1.1.3':
+ resolution: {integrity: sha512-ykYvuFQKGsRi6IcE+/hCSGUhb/I4WPjd3ELhEblm2wS2cOznDFzO+ubK2c+ioysOnlZ3EduV+MVQFCPzAIoY3w==}
+
+ '@lezer/css@1.1.11':
+ resolution: {integrity: sha512-FuAnusbLBl1SEAtfN8NdShxYJiESKw9LAFysfea1T96jD3ydBn12oYjaSG1a04BQRIUd93/0D8e5CV1cUMkmQg==}
+
+ '@lezer/go@1.0.0':
+ resolution: {integrity: sha512-co9JfT3QqX1YkrMmourYw2Z8meGC50Ko4d54QEcQbEYpvdUvN4yb0NBZdn/9ertgvjsySxHsKzH3lbm3vqJ4Jw==}
'@lezer/highlight@1.2.1':
resolution: {integrity: sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==}
@@ -886,8 +1015,14 @@ packages:
'@lezer/html@1.3.10':
resolution: {integrity: sha512-dqpT8nISx/p9Do3AchvYGV3qYc4/rKr3IBZxlHmpIKam56P47RSHkSF5f13Vu9hebS1jM0HmtJIwLbWz1VIY6w==}
- '@lezer/javascript@1.4.21':
- resolution: {integrity: sha512-lL+1fcuxWYPURMM/oFZLEDm0XuLN128QPV+VuGtKpeaOGdcl9F2LYC3nh1S9LkPqx9M0mndZFdXCipNAZpzIkQ==}
+ '@lezer/java@1.1.3':
+ resolution: {integrity: sha512-yHquUfujwg6Yu4Fd1GNHCvidIvJwi/1Xu2DaKl/pfWIA2c1oXkVvawH3NyXhCaFx4OdlYBVX5wvz2f7Aoa/4Xw==}
+
+ '@lezer/javascript@1.5.0':
+ resolution: {integrity: sha512-i/uZt1eoiojC3BRsjtiYZjT8DhzgZvWiKJjpXW3Jc2y4FkXY9YoBLKx+jSct+ynUINv5GtRxjTK7hBNhujPwrg==}
+
+ '@lezer/json@1.0.3':
+ resolution: {integrity: sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==}
'@lezer/lr@1.4.2':
resolution: {integrity: sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==}
@@ -895,6 +1030,24 @@ packages:
'@lezer/markdown@1.4.2':
resolution: {integrity: sha512-iYewCigG/517D0xJPQd7RGaCjZAFwROiH8T9h7OTtz0bRVtkxzFhGBFJ9JGKgBBs4uuo1cvxzyQ5iKhDLMcLUQ==}
+ '@lezer/php@1.0.2':
+ resolution: {integrity: sha512-GN7BnqtGRpFyeoKSEqxvGvhJQiI4zkgmYnDk/JIyc7H7Ifc1tkPnUn/R2R8meH3h/aBf5rzjvU8ZQoyiNDtDrA==}
+
+ '@lezer/python@1.1.18':
+ resolution: {integrity: sha512-31FiUrU7z9+d/ElGQLJFXl+dKOdx0jALlP3KEOsGTex8mvj+SoE1FgItcHWK/axkxCHGUSpqIHt6JAWfWu9Rhg==}
+
+ '@lezer/rust@1.0.2':
+ resolution: {integrity: sha512-Lz5sIPBdF2FUXcWeCu1//ojFAZqzTQNRga0aYv6dYXqJqPfMdCAI0NzajWUd4Xijj1IKJLtjoXRPMvTKWBcqKg==}
+
+ '@lezer/sass@1.0.7':
+ resolution: {integrity: sha512-8HLlOkuX/SMHOggI2DAsXUw38TuURe+3eQ5hiuk9QmYOUyC55B1dYEIMkav5A4IELVaW4e1T4P9WRiI5ka4mdw==}
+
+ '@lezer/xml@1.0.6':
+ resolution: {integrity: sha512-CdDwirL0OEaStFue/66ZmFSeppuL6Dwjlk8qk153mSQwiSH/Dlri4GNymrNWnUmPl2Um7QfV1FO9KFUyX3Twww==}
+
+ '@lezer/yaml@1.0.3':
+ resolution: {integrity: sha512-GuBLekbw9jDBDhGur82nuwkxKQ+a3W5H0GfaAthDXcAu+XdpS43VlnxA9E9hllkpSP5ellRDKjLLj7Lu9Wr6xA==}
+
'@mapbox/node-pre-gyp@1.0.11':
resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==}
hasBin: true
@@ -902,62 +1055,150 @@ packages:
'@marijn/find-cluster-break@1.0.2':
resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==}
- '@napi-rs/wasm-runtime@0.2.7':
- resolution: {integrity: sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw==}
+ '@monaco-editor/loader@1.5.0':
+ resolution: {integrity: sha512-hKoGSM+7aAc7eRTRjpqAZucPmoNOC4UUbknb/VNoTkEIkCPhqV8LfbsgM1webRM7S/z21eHEx9Fkwx8Z/C/+Xw==}
+
+ '@monaco-editor/react@4.7.0':
+ resolution: {integrity: sha512-cyzXQCtO47ydzxpQtCGSQGOC8Gk3ZUeBXFAxD+CWXYFo5OqZyZUonFl0DwUlTyAfRHntBfw2p3w4s9R6oe1eCA==}
+ peerDependencies:
+ monaco-editor: '>= 0.25.0 < 1'
+ 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
+
+ '@mui/core-downloads-tracker@5.17.1':
+ resolution: {integrity: sha512-OcZj+cs6EfUD39IoPBOgN61zf1XFVY+imsGoBDwXeSq2UHJZE3N59zzBOVjclck91Ne3e9gudONOeILvHCIhUA==}
+
+ '@mui/material@5.17.1':
+ resolution: {integrity: sha512-2B33kQf+GmPnrvXXweWAx+crbiUEsxCdCN979QDYnlH9ox4pd+0/IBriWLV+l6ORoBF60w39cWjFnJYGFdzXcw==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ '@emotion/react': ^11.5.0
+ '@emotion/styled': ^11.3.0
+ '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
+ react: ^17.0.0 || ^18.0.0 || ^19.0.0
+ react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0
+ peerDependenciesMeta:
+ '@emotion/react':
+ optional: true
+ '@emotion/styled':
+ optional: true
+ '@types/react':
+ optional: true
+
+ '@mui/private-theming@5.17.1':
+ resolution: {integrity: sha512-XMxU0NTYcKqdsG8LRmSoxERPXwMbp16sIXPcLVgLGII/bVNagX0xaheWAwFv8+zDK7tI3ajllkuD3GZZE++ICQ==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
+ react: ^17.0.0 || ^18.0.0 || ^19.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@mui/styled-engine@5.16.14':
+ resolution: {integrity: sha512-UAiMPZABZ7p8mUW4akDV6O7N3+4DatStpXMZwPlt+H/dA0lt67qawN021MNND+4QTpjaiMYxbhKZeQcyWCbuKw==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ '@emotion/react': ^11.4.1
+ '@emotion/styled': ^11.3.0
+ react: ^17.0.0 || ^18.0.0 || ^19.0.0
+ peerDependenciesMeta:
+ '@emotion/react':
+ optional: true
+ '@emotion/styled':
+ optional: true
+
+ '@mui/system@5.17.1':
+ resolution: {integrity: sha512-aJrmGfQpyF0U4D4xYwA6ueVtQcEMebET43CUmKMP7e7iFh3sMIF3sBR0l8Urb4pqx1CBjHAaWgB0ojpND4Q3Jg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ '@emotion/react': ^11.5.0
+ '@emotion/styled': ^11.3.0
+ '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
+ react: ^17.0.0 || ^18.0.0 || ^19.0.0
+ peerDependenciesMeta:
+ '@emotion/react':
+ optional: true
+ '@emotion/styled':
+ optional: true
+ '@types/react':
+ optional: true
+
+ '@mui/types@7.2.24':
+ resolution: {integrity: sha512-3c8tRt/CbWZ+pEg7QpSwbdxOk36EfmhbKf6AGZsD1EcLDLTSZoxxJ86FVtcjxvjuhdyBiWKSTGZFaXCnidO2kw==}
+ peerDependencies:
+ '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@mui/utils@5.17.1':
+ resolution: {integrity: sha512-jEZ8FTqInt2WzxDV8bhImWBqeQRD99c/id/fq83H0ER9tFl+sfZlaAoCdznGvbSQQ9ividMxqSV2c7cC1vBcQg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
+ react: ^17.0.0 || ^18.0.0 || ^19.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@napi-rs/wasm-runtime@0.2.9':
+ resolution: {integrity: sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg==}
- '@neondatabase/serverless@0.10.4':
- resolution: {integrity: sha512-2nZuh3VUO9voBauuh+IGYRhGU/MskWHt1IuZvHcJw6GLjDgtqj/KViKo7SIrLdGLdot7vFbiRRw+BgEy3wT9HA==}
+ '@neondatabase/serverless@1.0.0':
+ resolution: {integrity: sha512-XWmEeWpBXIoksZSDN74kftfTnXFEGZ3iX8jbANWBc+ag6dsiQuvuR4LgB0WdCOKMb5AQgjqgufc0TgAsZubUYw==}
+ engines: {node: '>=19.0.0'}
- '@next/env@15.2.3':
- resolution: {integrity: sha512-a26KnbW9DFEUsSxAxKBORR/uD9THoYoKbkpFywMN/AFvboTt94b8+g/07T8J6ACsdLag8/PDU60ov4rPxRAixw==}
+ '@next/env@15.3.1':
+ resolution: {integrity: sha512-cwK27QdzrMblHSn9DZRV+DQscHXRuJv6MydlJRpFSqJWZrTYMLzKDeyueJNN9MGd8NNiUKzDQADAf+dMLXX7YQ==}
- '@next/eslint-plugin-next@15.2.3':
- resolution: {integrity: sha512-eNSOIMJtjs+dp4Ms1tB1PPPJUQHP3uZK+OQ7iFY9qXpGO6ojT6imCL+KcUOqE/GXGidWbBZJzYdgAdPHqeCEPA==}
+ '@next/eslint-plugin-next@15.3.1':
+ resolution: {integrity: sha512-oEs4dsfM6iyER3jTzMm4kDSbrQJq8wZw5fmT6fg2V3SMo+kgG+cShzLfEV20senZzv8VF+puNLheiGPlBGsv2A==}
- '@next/swc-darwin-arm64@15.2.3':
- resolution: {integrity: sha512-uaBhA8aLbXLqwjnsHSkxs353WrRgQgiFjduDpc7YXEU0B54IKx3vU+cxQlYwPCyC8uYEEX7THhtQQsfHnvv8dw==}
+ '@next/swc-darwin-arm64@15.3.1':
+ resolution: {integrity: sha512-hjDw4f4/nla+6wysBL07z52Gs55Gttp5Bsk5/8AncQLJoisvTBP0pRIBK/B16/KqQyH+uN4Ww8KkcAqJODYH3w==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
- '@next/swc-darwin-x64@15.2.3':
- resolution: {integrity: sha512-pVwKvJ4Zk7h+4hwhqOUuMx7Ib02u3gDX3HXPKIShBi9JlYllI0nU6TWLbPT94dt7FSi6mSBhfc2JrHViwqbOdw==}
+ '@next/swc-darwin-x64@15.3.1':
+ resolution: {integrity: sha512-q+aw+cJ2ooVYdCEqZVk+T4Ni10jF6Fo5DfpEV51OupMaV5XL6pf3GCzrk6kSSZBsMKZtVC1Zm/xaNBFpA6bJ2g==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
- '@next/swc-linux-arm64-gnu@15.2.3':
- resolution: {integrity: sha512-50ibWdn2RuFFkOEUmo9NCcQbbV9ViQOrUfG48zHBCONciHjaUKtHcYFiCwBVuzD08fzvzkWuuZkd4AqbvKO7UQ==}
+ '@next/swc-linux-arm64-gnu@15.3.1':
+ resolution: {integrity: sha512-wBQ+jGUI3N0QZyWmmvRHjXjTWFy8o+zPFLSOyAyGFI94oJi+kK/LIZFJXeykvgXUk1NLDAEFDZw/NVINhdk9FQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@next/swc-linux-arm64-musl@15.2.3':
- resolution: {integrity: sha512-2gAPA7P652D3HzR4cLyAuVYwYqjG0mt/3pHSWTCyKZq/N/dJcUAEoNQMyUmwTZWCJRKofB+JPuDVP2aD8w2J6Q==}
+ '@next/swc-linux-arm64-musl@15.3.1':
+ resolution: {integrity: sha512-IIxXEXRti/AulO9lWRHiCpUUR8AR/ZYLPALgiIg/9ENzMzLn3l0NSxVdva7R/VDcuSEBo0eGVCe3evSIHNz0Hg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@next/swc-linux-x64-gnu@15.2.3':
- resolution: {integrity: sha512-ODSKvrdMgAJOVU4qElflYy1KSZRM3M45JVbeZu42TINCMG3anp7YCBn80RkISV6bhzKwcUqLBAmOiWkaGtBA9w==}
+ '@next/swc-linux-x64-gnu@15.3.1':
+ resolution: {integrity: sha512-bfI4AMhySJbyXQIKH5rmLJ5/BP7bPwuxauTvVEiJ/ADoddaA9fgyNNCcsbu9SlqfHDoZmfI6g2EjzLwbsVTr5A==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@next/swc-linux-x64-musl@15.2.3':
- resolution: {integrity: sha512-ZR9kLwCWrlYxwEoytqPi1jhPd1TlsSJWAc+H/CJHmHkf2nD92MQpSRIURR1iNgA/kuFSdxB8xIPt4p/T78kwsg==}
+ '@next/swc-linux-x64-musl@15.3.1':
+ resolution: {integrity: sha512-FeAbR7FYMWR+Z+M5iSGytVryKHiAsc0x3Nc3J+FD5NVbD5Mqz7fTSy8CYliXinn7T26nDMbpExRUI/4ekTvoiA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@next/swc-win32-arm64-msvc@15.2.3':
- resolution: {integrity: sha512-+G2FrDcfm2YDbhDiObDU/qPriWeiz/9cRR0yMWJeTLGGX6/x8oryO3tt7HhodA1vZ8r2ddJPCjtLcpaVl7TE2Q==}
+ '@next/swc-win32-arm64-msvc@15.3.1':
+ resolution: {integrity: sha512-yP7FueWjphQEPpJQ2oKmshk/ppOt+0/bB8JC8svPUZNy0Pi3KbPx2Llkzv1p8CoQa+D2wknINlJpHf3vtChVBw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
- '@next/swc-win32-x64-msvc@15.2.3':
- resolution: {integrity: sha512-gHYS9tc+G2W0ZC8rBL+H6RdtXIyk40uLiaos0yj5US85FNhbFEndMA2nW3z47nzOWiSvXTZ5kBClc3rD0zJg0w==}
+ '@next/swc-win32-x64-msvc@15.3.1':
+ resolution: {integrity: sha512-3PMvF2zRJAifcRNni9uMk/gulWfWS+qVI/pagd+4yLF5bcXPZPPH2xlYRYOsUjmCJOXSTAC2PjRzbhsRzR2fDQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
@@ -1063,14 +1304,17 @@ packages:
resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==}
engines: {node: '>= 10.0.0'}
- '@petamoriken/float16@3.9.2':
- resolution: {integrity: sha512-VgffxawQde93xKxT3qap3OH+meZf7VaSB5Sqd4Rqc+FP5alWbpOyan/7tRbOAvynjpG3GpdtAuGU/NdhQpmrog==}
+ '@popperjs/core@2.11.8':
+ resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==}
+
+ '@radix-ui/number@1.1.1':
+ resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==}
- '@radix-ui/primitive@1.1.1':
- resolution: {integrity: sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==}
+ '@radix-ui/primitive@1.1.2':
+ resolution: {integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==}
- '@radix-ui/react-arrow@1.1.2':
- resolution: {integrity: sha512-G+KcpzXHq24iH0uGG/pF8LyzpFJYGD4RfLjCIBfGdSLXvjLHST31RUiRVrupIBMvIppMgSzQ6l66iAxl03tdlg==}
+ '@radix-ui/react-arrow@1.1.3':
+ resolution: {integrity: sha512-2dvVU4jva0qkNZH6HHWuSz5FN5GeU5tymvCgutF8WaXz9WnD1NgUhy73cqzkjkN4Zkn8lfTPv5JIfrC221W+Nw==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1082,8 +1326,8 @@ packages:
'@types/react-dom':
optional: true
- '@radix-ui/react-collection@1.1.2':
- resolution: {integrity: sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw==}
+ '@radix-ui/react-collection@1.1.3':
+ resolution: {integrity: sha512-mM2pxoQw5HJ49rkzwOs7Y6J4oYH22wS8BfK2/bBxROlI4xuR0c4jEenQP63LlTlDkO6Buj2Vt+QYAYcOgqtrXA==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1095,8 +1339,8 @@ packages:
'@types/react-dom':
optional: true
- '@radix-ui/react-compose-refs@1.1.1':
- resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==}
+ '@radix-ui/react-compose-refs@1.1.2':
+ resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -1104,8 +1348,8 @@ packages:
'@types/react':
optional: true
- '@radix-ui/react-context@1.1.1':
- resolution: {integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==}
+ '@radix-ui/react-context@1.1.2':
+ resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -1113,39 +1357,43 @@ packages:
'@types/react':
optional: true
- '@radix-ui/react-direction@1.1.0':
- resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==}
+ '@radix-ui/react-dialog@1.1.10':
+ resolution: {integrity: sha512-m6pZb0gEM5uHPSb+i2nKKGQi/HMSVjARMsLMWQfKDP+eJ6B+uqryHnXhpnohTWElw+vEcMk/o4wJODtdRKHwqg==}
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-dismissable-layer@1.1.5':
- resolution: {integrity: sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg==}
+ '@radix-ui/react-direction@1.1.1':
+ resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==}
peerDependencies:
'@types/react': '*'
- '@types/react-dom': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
- react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
- '@types/react-dom':
- optional: true
- '@radix-ui/react-focus-guards@1.1.1':
- resolution: {integrity: sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==}
+ '@radix-ui/react-dismissable-layer@1.1.6':
+ resolution: {integrity: sha512-7gpgMT2gyKym9Jz2ZhlRXSg2y6cNQIK8d/cqBZ0RBCaps8pFryCWXiUKI+uHGFrhMrbGUP7U6PWgiXzIxoyF3Q==}
peerDependencies:
'@types/react': '*'
+ '@types/react-dom': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
+ '@types/react-dom':
+ optional: true
- '@radix-ui/react-focus-scope@1.1.2':
- resolution: {integrity: sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA==}
+ '@radix-ui/react-dismissable-layer@1.1.7':
+ resolution: {integrity: sha512-j5+WBUdhccJsmH5/H0K6RncjDtoALSEr6jbkaZu+bjw6hOPOhHycr6vEUujl+HBK8kjUfWcoCJXxP6e4lUlMZw==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1157,8 +1405,8 @@ packages:
'@types/react-dom':
optional: true
- '@radix-ui/react-id@1.1.0':
- resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==}
+ '@radix-ui/react-focus-guards@1.1.2':
+ resolution: {integrity: sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -1166,8 +1414,8 @@ packages:
'@types/react':
optional: true
- '@radix-ui/react-popover@1.1.6':
- resolution: {integrity: sha512-NQouW0x4/GnkFJ/pRqsIS3rM/k97VzKnVb2jB7Gq7VEGPy5g7uNV1ykySFt7eWSp3i2uSGFwaJcvIRJBAHmmFg==}
+ '@radix-ui/react-focus-scope@1.1.3':
+ resolution: {integrity: sha512-4XaDlq0bPt7oJwR+0k0clCiCO/7lO7NKZTAaJBYxDNQT/vj4ig0/UvctrRscZaFREpRvUTkpKR96ov1e6jptQg==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1179,8 +1427,8 @@ packages:
'@types/react-dom':
optional: true
- '@radix-ui/react-popper@1.2.2':
- resolution: {integrity: sha512-Rvqc3nOpwseCyj/rgjlJDYAgyfw7OC1tTkKn2ivhaMGcYt8FSBlahHOZak2i3QwkRXUXgGgzeEe2RuqeEHuHgA==}
+ '@radix-ui/react-focus-scope@1.1.4':
+ resolution: {integrity: sha512-r2annK27lIW5w9Ho5NyQgqs0MmgZSTIKXWpVCJaLC1q2kZrZkcqnmHkCHMEmv8XLvsLlurKMPT+kbKkRkm/xVA==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1192,21 +1440,22 @@ packages:
'@types/react-dom':
optional: true
- '@radix-ui/react-portal@1.1.4':
- resolution: {integrity: sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA==}
+ '@radix-ui/react-icons@1.3.2':
+ resolution: {integrity: sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==}
+ peerDependencies:
+ react: ^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc
+
+ '@radix-ui/react-id@1.1.1':
+ resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==}
peerDependencies:
'@types/react': '*'
- '@types/react-dom': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
- react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
- '@types/react-dom':
- optional: true
- '@radix-ui/react-presence@1.1.2':
- resolution: {integrity: sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==}
+ '@radix-ui/react-label@2.1.3':
+ resolution: {integrity: sha512-zwSQ1NzSKG95yA0tvBMgv6XPHoqapJCcg9nsUBaQQ66iRBhZNhlpaQG2ERYYX4O4stkYFK5rxj5NsWfO9CS+Hg==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1218,8 +1467,8 @@ packages:
'@types/react-dom':
optional: true
- '@radix-ui/react-primitive@2.0.2':
- resolution: {integrity: sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==}
+ '@radix-ui/react-popover@1.1.7':
+ resolution: {integrity: sha512-I38OYWDmJF2kbO74LX8UsFydSHWOJuQ7LxPnTefjxxvdvPLempvAnmsyX9UsBlywcbSGpRH7oMLfkUf+ij4nrw==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1231,8 +1480,8 @@ packages:
'@types/react-dom':
optional: true
- '@radix-ui/react-roving-focus@1.1.2':
- resolution: {integrity: sha512-zgMQWkNO169GtGqRvYrzb0Zf8NhMHS2DuEB/TiEmVnpr5OqPU3i8lfbxaAmC2J/KYuIQxyoQQ6DxepyXp61/xw==}
+ '@radix-ui/react-popper@1.2.3':
+ resolution: {integrity: sha512-iNb9LYUMkne9zIahukgQmHlSBp9XWGeQQ7FvUGNk45ywzOb6kQa+Ca38OphXlWDiKvyneo9S+KSJsLfLt8812A==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1244,17 +1493,21 @@ packages:
'@types/react-dom':
optional: true
- '@radix-ui/react-slot@1.1.2':
- resolution: {integrity: sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==}
+ '@radix-ui/react-portal@1.1.5':
+ resolution: {integrity: sha512-ps/67ZqsFm+Mb6lSPJpfhRLrVL2i2fntgCmGMqqth4eaGUf+knAuuRtWVJrNjUhExgmdRqftSgzpf0DF0n6yXA==}
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-tabs@1.1.3':
- resolution: {integrity: sha512-9mFyI30cuRDImbmFF6O2KUJdgEOsGh9Vmx9x/Dh9tOhL7BngmQPQfwW4aejKm5OHpfWIdmeV6ySyuxoOGjtNng==}
+ '@radix-ui/react-portal@1.1.6':
+ resolution: {integrity: sha512-XmsIl2z1n/TsYFLIdYam2rmFwf9OC/Sh2avkbmVMDuBZIe7hSpM0cYnWPAo7nHOVx8zTuwDZGByfcqLdnzp3Vw==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1266,17 +1519,157 @@ packages:
'@types/react-dom':
optional: true
- '@radix-ui/react-use-callback-ref@1.1.0':
- resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==}
+ '@radix-ui/react-presence@1.1.3':
+ resolution: {integrity: sha512-IrVLIhskYhH3nLvtcBLQFZr61tBG7wx7O3kEmdzcYwRGAEBmBicGGL7ATzNgruYJ3xBTbuzEEq9OXJM3PAX3tA==}
peerDependencies:
'@types/react': '*'
+ '@types/react-dom': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
+ '@types/react-dom':
+ optional: true
- '@radix-ui/react-use-controllable-state@1.1.0':
- resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==}
+ '@radix-ui/react-primitive@2.0.3':
+ resolution: {integrity: sha512-Pf/t/GkndH7CQ8wE2hbkXA+WyZ83fhQQn5DDmwDiDo6AwN/fhaH8oqZ0jRjMrO2iaMhDi6P1HRx6AZwyMinY1g==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-primitive@2.1.0':
+ resolution: {integrity: sha512-/J/FhLdK0zVcILOwt5g+dH4KnkonCtkVJsa2G6JmvbbtZfBEI1gMsO3QMjseL4F/SwfAMt1Vc/0XKYKq+xJ1sw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-roving-focus@1.1.3':
+ resolution: {integrity: sha512-ufbpLUjZiOg4iYgb2hQrWXEPYX6jOLBbR27bDyAff5GYMRrCzcze8lukjuXVUQvJ6HZe8+oL+hhswDcjmcgVyg==}
+ 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-scroll-area@1.2.4':
+ resolution: {integrity: sha512-G9rdWTQjOR4sk76HwSdROhPU0jZWpfozn9skU1v4N0/g9k7TmswrJn8W8WMU+aYktnLLpk5LX6fofj2bGe5NFQ==}
+ 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-select@2.1.7':
+ resolution: {integrity: sha512-exzGIRtc7S8EIM2KjFg+7lJZsH7O7tpaBaJbBNVDnOZNhtoQ2iV+iSNfi2Wth0m6h3trJkMVvzAehB3c6xj/3Q==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-slot@1.2.0':
+ resolution: {integrity: sha512-ujc+V6r0HNDviYqIK3rW4ffgYiZ8g5DEHrGJVk4x7kTlLXRDILnKX9vAUYeIsLOoDpDJ0ujpqMkjH4w2ofuo6w==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-tabs@1.1.4':
+ resolution: {integrity: sha512-fuHMHWSf5SRhXke+DbHXj2wVMo+ghVH30vhX3XVacdXqDl+J4XWafMIGOOER861QpBx1jxgwKXL2dQnfrsd8MQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-tooltip@1.2.0':
+ resolution: {integrity: sha512-b1Sdc75s7zN9B8ONQTGBSHL3XS8+IcjcOIY51fhM4R1Hx8s0YbgqgyNZiri4qcYMVZK8hfCZVBiyCm7N9rs0rw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-use-callback-ref@1.1.1':
+ resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-controllable-state@1.1.1':
+ resolution: {integrity: sha512-YnEXIy8/ga01Y1PN0VfaNH//MhA91JlEGVBDxDzROqwrAtG5Yr2QGEPz8A/rJA3C7ZAHryOYGaUv8fLSW2H/mg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-controllable-state@1.2.2':
+ resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-effect-event@0.0.2':
+ resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-escape-keydown@1.1.1':
+ resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -1284,8 +1677,8 @@ packages:
'@types/react':
optional: true
- '@radix-ui/react-use-escape-keydown@1.1.0':
- resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==}
+ '@radix-ui/react-use-layout-effect@1.1.1':
+ resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -1293,8 +1686,8 @@ packages:
'@types/react':
optional: true
- '@radix-ui/react-use-layout-effect@1.1.0':
- resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==}
+ '@radix-ui/react-use-previous@1.1.1':
+ resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -1302,8 +1695,8 @@ packages:
'@types/react':
optional: true
- '@radix-ui/react-use-rect@1.1.0':
- resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==}
+ '@radix-ui/react-use-rect@1.1.1':
+ resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -1311,8 +1704,8 @@ packages:
'@types/react':
optional: true
- '@radix-ui/react-use-size@1.1.0':
- resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==}
+ '@radix-ui/react-use-size@1.1.1':
+ resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -1320,8 +1713,21 @@ packages:
'@types/react':
optional: true
- '@radix-ui/rect@1.1.0':
- resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==}
+ '@radix-ui/react-visually-hidden@1.1.3':
+ resolution: {integrity: sha512-oXSF3ZQRd5fvomd9hmUCb2EHSZbPp3ZSHAHJJU/DlF9XoFkJBBW8RHU/E8WEH+RbSfJd/QFA0sl8ClJXknBwHQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/rect@1.1.1':
+ resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==}
'@rtsao/scc@1.1.0':
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
@@ -1337,119 +1743,180 @@ packages:
resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
engines: {node: '>=10'}
+ '@stoplight/json-schema-sampler@0.3.0':
+ resolution: {integrity: sha512-G7QImi2xr9+8iPEg0D9YUi1BWhIiiEm19aMb91oWBSdxuhezOAqqRP3XNY6wczHV9jLWW18f+KkghTy9AG0BQA==}
+
'@swc/counter@0.1.3':
resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
'@swc/helpers@0.5.15':
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
- '@tailwindcss/cli@4.0.15':
- resolution: {integrity: sha512-52RdNZCpij4O8+25N9sfWZPG124e6ahmIS1uMHcJrdw10UdpPUFgSJtyMwf7COVOnkx0nkXfmp8CcYomPCrQ1Q==}
+ '@t3-oss/env-core@0.12.0':
+ resolution: {integrity: sha512-lOPj8d9nJJTt81mMuN9GMk8x5veOt7q9m11OSnCBJhwp1QrL/qR+M8Y467ULBSm9SunosryWNbmQQbgoiMgcdw==}
+ peerDependencies:
+ typescript: '>=5.0.0'
+ valibot: ^1.0.0-beta.7 || ^1.0.0
+ zod: ^3.24.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ valibot:
+ optional: true
+ zod:
+ optional: true
+
+ '@t3-oss/env-nextjs@0.12.0':
+ resolution: {integrity: sha512-rFnvYk1049RnNVUPvY8iQ55AuQh1Rr+qZzQBh3t++RttCGK4COpXGNxS4+45afuQq02lu+QAOy/5955aU8hRKw==}
+ peerDependencies:
+ typescript: '>=5.0.0'
+ valibot: ^1.0.0-beta.7 || ^1.0.0
+ zod: ^3.24.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ valibot:
+ optional: true
+ zod:
+ optional: true
+
+ '@tailwindcss/cli@4.1.4':
+ resolution: {integrity: sha512-gP05Qihh+cZ2FqD5fa0WJXx3KEk2YWUYv/RBKAyiOg0V4vYVDr/xlLc0sacpnVEXM45BVUR9U2hsESufYs6YTA==}
hasBin: true
- '@tailwindcss/node@4.0.15':
- resolution: {integrity: sha512-IODaJjNmiasfZX3IoS+4Em3iu0fD2HS0/tgrnkYfW4hyUor01Smnr5eY3jc4rRgaTDrJlDmBTHbFO0ETTDaxWA==}
+ '@tailwindcss/node@4.1.4':
+ resolution: {integrity: sha512-MT5118zaiO6x6hNA04OWInuAiP1YISXql8Z+/Y8iisV5nuhM8VXlyhRuqc2PEviPszcXI66W44bCIk500Oolhw==}
- '@tailwindcss/oxide-android-arm64@4.0.15':
- resolution: {integrity: sha512-EBuyfSKkom7N+CB3A+7c0m4+qzKuiN0WCvzPvj5ZoRu4NlQadg/mthc1tl5k9b5ffRGsbDvP4k21azU4VwVk3Q==}
+ '@tailwindcss/oxide-android-arm64@4.1.4':
+ resolution: {integrity: sha512-xMMAe/SaCN/vHfQYui3fqaBDEXMu22BVwQ33veLc8ep+DNy7CWN52L+TTG9y1K397w9nkzv+Mw+mZWISiqhmlA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [android]
- '@tailwindcss/oxide-darwin-arm64@4.0.15':
- resolution: {integrity: sha512-ObVAnEpLepMhV9VoO0JSit66jiN5C4YCqW3TflsE9boo2Z7FIjV80RFbgeL2opBhtxbaNEDa6D0/hq/EP03kgQ==}
+ '@tailwindcss/oxide-darwin-arm64@4.1.4':
+ resolution: {integrity: sha512-JGRj0SYFuDuAGilWFBlshcexev2hOKfNkoX+0QTksKYq2zgF9VY/vVMq9m8IObYnLna0Xlg+ytCi2FN2rOL0Sg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
- '@tailwindcss/oxide-darwin-x64@4.0.15':
- resolution: {integrity: sha512-IElwoFhUinOr9MyKmGTPNi1Rwdh68JReFgYWibPWTGuevkHkLWKEflZc2jtI5lWZ5U9JjUnUfnY43I4fEXrc4g==}
+ '@tailwindcss/oxide-darwin-x64@4.1.4':
+ resolution: {integrity: sha512-sdDeLNvs3cYeWsEJ4H1DvjOzaGios4QbBTNLVLVs0XQ0V95bffT3+scptzYGPMjm7xv4+qMhCDrkHwhnUySEzA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
- '@tailwindcss/oxide-freebsd-x64@4.0.15':
- resolution: {integrity: sha512-6BLLqyx7SIYRBOnTZ8wgfXANLJV5TQd3PevRJZp0vn42eO58A2LykRKdvL1qyPfdpmEVtF+uVOEZ4QTMqDRAWA==}
+ '@tailwindcss/oxide-freebsd-x64@4.1.4':
+ resolution: {integrity: sha512-VHxAqxqdghM83HslPhRsNhHo91McsxRJaEnShJOMu8mHmEj9Ig7ToHJtDukkuLWLzLboh2XSjq/0zO6wgvykNA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [freebsd]
- '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.15':
- resolution: {integrity: sha512-Zy63EVqO9241Pfg6G0IlRIWyY5vNcWrL5dd2WAKVJZRQVeolXEf1KfjkyeAAlErDj72cnyXObEZjMoPEKHpdNw==}
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.4':
+ resolution: {integrity: sha512-OTU/m/eV4gQKxy9r5acuesqaymyeSCnsx1cFto/I1WhPmi5HDxX1nkzb8KYBiwkHIGg7CTfo/AcGzoXAJBxLfg==}
engines: {node: '>= 10'}
cpu: [arm]
os: [linux]
- '@tailwindcss/oxide-linux-arm64-gnu@4.0.15':
- resolution: {integrity: sha512-2NemGQeaTbtIp1Z2wyerbVEJZTkAWhMDOhhR5z/zJ75yMNf8yLnE+sAlyf6yGDNr+1RqvWrRhhCFt7i0CIxe4Q==}
+ '@tailwindcss/oxide-linux-arm64-gnu@4.1.4':
+ resolution: {integrity: sha512-hKlLNvbmUC6z5g/J4H+Zx7f7w15whSVImokLPmP6ff1QqTVE+TxUM9PGuNsjHvkvlHUtGTdDnOvGNSEUiXI1Ww==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@tailwindcss/oxide-linux-arm64-musl@4.0.15':
- resolution: {integrity: sha512-342GVnhH/6PkVgKtEzvNVuQ4D+Q7B7qplvuH20Cfz9qEtydG6IQczTZ5IT4JPlh931MG1NUCVxg+CIorr1WJyw==}
+ '@tailwindcss/oxide-linux-arm64-musl@4.1.4':
+ resolution: {integrity: sha512-X3As2xhtgPTY/m5edUtddmZ8rCruvBvtxYLMw9OsZdH01L2gS2icsHRwxdU0dMItNfVmrBezueXZCHxVeeb7Aw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@tailwindcss/oxide-linux-x64-gnu@4.0.15':
- resolution: {integrity: sha512-g76GxlKH124RuGqacCEFc2nbzRl7bBrlC8qDQMiUABkiifDRHOIUjgKbLNG4RuR9hQAD/MKsqZ7A8L08zsoBrw==}
+ '@tailwindcss/oxide-linux-x64-gnu@4.1.4':
+ resolution: {integrity: sha512-2VG4DqhGaDSmYIu6C4ua2vSLXnJsb/C9liej7TuSO04NK+JJJgJucDUgmX6sn7Gw3Cs5ZJ9ZLrnI0QRDOjLfNQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@tailwindcss/oxide-linux-x64-musl@4.0.15':
- resolution: {integrity: sha512-Gg/Y1XrKEvKpq6WeNt2h8rMIKOBj/W3mNa5NMvkQgMC7iO0+UNLrYmt6zgZufht66HozNpn+tJMbbkZ5a3LczA==}
+ '@tailwindcss/oxide-linux-x64-musl@4.1.4':
+ resolution: {integrity: sha512-v+mxVgH2kmur/X5Mdrz9m7TsoVjbdYQT0b4Z+dr+I4RvreCNXyCFELZL/DO0M1RsidZTrm6O1eMnV6zlgEzTMQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@tailwindcss/oxide-win32-arm64-msvc@4.0.15':
- resolution: {integrity: sha512-7QtSSJwYZ7ZK1phVgcNZpuf7c7gaCj8Wb0xjliligT5qCGCp79OV2n3SJummVZdw4fbTNKUOYMO7m1GinppZyA==}
+ '@tailwindcss/oxide-wasm32-wasi@4.1.4':
+ resolution: {integrity: sha512-2TLe9ir+9esCf6Wm+lLWTMbgklIjiF0pbmDnwmhR9MksVOq+e8aP3TSsXySnBDDvTTVd/vKu1aNttEGj3P6l8Q==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+ bundledDependencies:
+ - '@napi-rs/wasm-runtime'
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+ - '@tybys/wasm-util'
+ - '@emnapi/wasi-threads'
+ - tslib
+
+ '@tailwindcss/oxide-win32-arm64-msvc@4.1.4':
+ resolution: {integrity: sha512-VlnhfilPlO0ltxW9/BgfLI5547PYzqBMPIzRrk4W7uupgCt8z6Trw/tAj6QUtF2om+1MH281Pg+HHUJoLesmng==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
- '@tailwindcss/oxide-win32-x64-msvc@4.0.15':
- resolution: {integrity: sha512-JQ5H+5MLhOjpgNp6KomouE0ZuKmk3hO5h7/ClMNAQ8gZI2zkli3IH8ZqLbd2DVfXDbdxN2xvooIEeIlkIoSCqw==}
+ '@tailwindcss/oxide-win32-x64-msvc@4.1.4':
+ resolution: {integrity: sha512-+7S63t5zhYjslUGb8NcgLpFXD+Kq1F/zt5Xv5qTv7HaFTG/DHyHD9GA6ieNAxhgyA4IcKa/zy7Xx4Oad2/wuhw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
- '@tailwindcss/oxide@4.0.15':
- resolution: {integrity: sha512-e0uHrKfPu7JJGMfjwVNyt5M0u+OP8kUmhACwIRlM+JNBuReDVQ63yAD1NWe5DwJtdaHjugNBil76j+ks3zlk6g==}
+ '@tailwindcss/oxide@4.1.4':
+ resolution: {integrity: sha512-p5wOpXyOJx7mKh5MXh5oKk+kqcz8T+bA3z/5VWWeQwFrmuBItGwz8Y2CHk/sJ+dNb9B0nYFfn0rj/cKHZyjahQ==}
engines: {node: '>= 10'}
- '@tailwindcss/postcss@4.0.15':
- resolution: {integrity: sha512-qyrpoDKIO7wzkRbKCvGLo7gXRjT9/Njf7ZJiJhG4njrfZkvOhjwnaHpYbpxYeDysEg+9pB1R4jcd+vQ7ZUDsmQ==}
+ '@tailwindcss/postcss@4.1.4':
+ resolution: {integrity: sha512-bjV6sqycCEa+AQSt2Kr7wpGF1bOZJ5wsqnLEkqSbM/JEHxx/yhMH8wHmdkPyApF9xhHeMSwnnkDUUMMM/hYnXw==}
'@tailwindcss/typography@0.5.16':
resolution: {integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==}
peerDependencies:
tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1'
- '@tanstack/query-core@5.69.0':
- resolution: {integrity: sha512-Kn410jq6vs1P8Nm+ZsRj9H+U3C0kjuEkYLxbiCyn3MDEiYor1j2DGVULqAz62SLZtUZ/e9Xt6xMXiJ3NJ65WyQ==}
+ '@tanstack/query-core@5.74.4':
+ resolution: {integrity: sha512-YuG0A0+3i9b2Gfo9fkmNnkUWh5+5cFhWBN0pJAHkHilTx6A0nv8kepkk4T4GRt4e5ahbtFj2eTtkiPcVU1xO4A==}
+
+ '@tanstack/query-devtools@5.73.3':
+ resolution: {integrity: sha512-hBQyYwsOuO7QOprK75NzfrWs/EQYjgFA0yykmcvsV62q0t6Ua97CU3sYgjHx0ZvxkXSOMkY24VRJ5uv9f5Ik4w==}
+
+ '@tanstack/react-query-devtools@5.74.4':
+ resolution: {integrity: sha512-PGCAcytQMmeagoeGG45ccBhrC1x0/5OlNjsM1FAb9OfsQZIhPzjwjhGcwmMu6TbT4RIHgvjxLwC5NHgkUwJQzw==}
+ peerDependencies:
+ '@tanstack/react-query': ^5.74.4
+ react: ^18 || ^19
- '@tanstack/react-query@5.69.0':
- resolution: {integrity: sha512-Ift3IUNQqTcaFa1AiIQ7WCb/PPy8aexZdq9pZWLXhfLcLxH0+PZqJ2xFImxCpdDZrFRZhLJrh76geevS5xjRhA==}
+ '@tanstack/react-query@5.74.4':
+ resolution: {integrity: sha512-mAbxw60d4ffQ4qmRYfkO1xzRBPUEf/72Dgo3qqea0J66nIKuDTLEqQt0ku++SDFlMGMnB6uKDnEG1xD/TDse4Q==}
peerDependencies:
react: ^18 || ^19
- '@trpc/client@11.0.0':
- resolution: {integrity: sha512-U2THlxsdr4ykAX5lpTU8k5WRADPQ+68Ex2gfUht3MlCxGK7njBmNSSzjpQSWNt7tMI/xsYrddFiRlmEPrh+Cbg==}
+ '@textea/json-viewer@3.5.0':
+ resolution: {integrity: sha512-codh4YXkWPtMjucpn1krGxyJLQA2QhpfM0y3Sur7D/mONOnESoI5ZLmX3ZFo9heXPndDQgzCHsjpErvkN5+hxw==}
peerDependencies:
- '@trpc/server': 11.0.0
+ '@emotion/react': ^11
+ '@emotion/styled': ^11
+ '@mui/material': ^5
+ react: ^17 || ^18
+ react-dom: ^17 || ^18
+
+ '@trpc/client@11.1.0':
+ resolution: {integrity: sha512-Q3pL4p7AddxI/ZJTEFo1utKSdasDFjZPECIPsKDkthEt52k530JkYVltTdLkYFKrNWXKKBo8MN7NwchelczoRw==}
+ peerDependencies:
+ '@trpc/server': 11.1.0
typescript: '>=5.7.2'
- '@trpc/next@11.0.0':
- resolution: {integrity: sha512-HpowgsF0jfXG30jEBVK8v90ltbEZiQZq/x0rsjScfZuedkAfapqZvrsrkzv6Pkemz7sxaxJcZB3HEqXxWfkGoA==}
+ '@trpc/next@11.1.0':
+ resolution: {integrity: sha512-P8/qpfvRs7IIDdFBrcyMfxXumgf5p7K+dig6NpxpNYs4bqVJfBnAbATYEplmLhw/Dcksqo5ZoI0+0A19wLm8Ug==}
peerDependencies:
'@tanstack/react-query': ^5.59.15
- '@trpc/client': 11.0.0
- '@trpc/react-query': 11.0.0
- '@trpc/server': 11.0.0
- next: '>=15.2.2'
+ '@trpc/client': 11.1.0
+ '@trpc/react-query': 11.1.0
+ '@trpc/server': 11.1.0
+ next: '*'
react: '>=16.8.0'
react-dom: '>=16.8.0'
typescript: '>=5.7.2'
@@ -1459,19 +1926,29 @@ packages:
'@trpc/react-query':
optional: true
- '@trpc/react-query@11.0.0':
- resolution: {integrity: sha512-HeE9bBLA6nqC2xk5wlNZIPQ5vmyli3tgNNab8fTE489+ksNMKxaIx66pZKsMJIorDcP1wS0rWNV+GroU0iR98g==}
+ '@trpc/react-query@11.1.0':
+ resolution: {integrity: sha512-qdqKdFM8hVy/YSBCg1/3VO+IgB6Nbul3Fk1SA3lefGf0bkYZdWVVyKab8HBAfOWlMsuRufhVLPdKYmnjzBrK9g==}
peerDependencies:
'@tanstack/react-query': ^5.67.1
- '@trpc/client': 11.0.0
- '@trpc/server': 11.0.0
+ '@trpc/client': 11.1.0
+ '@trpc/server': 11.1.0
react: '>=18.2.0'
react-dom: '>=18.2.0'
typescript: '>=5.7.2'
- '@trpc/server@11.0.0':
- resolution: {integrity: sha512-xY9q/b/wR/tWGYTm5xmRjivkYD2EZZXmOKmHuNJRYZuLbieeNUsdfQRjJC409WB1pjKWInomhHwuA8bahZJ4lQ==}
+ '@trpc/server@11.1.0':
+ resolution: {integrity: sha512-uAJ7ikejeujVkf53XFJ/0W8nr7bDjul+Szk5Rsepq97Hb/WS1RkRXdyX4KqAyCE9b1vDFCJVJwSxiIZdRtbTZQ==}
+ peerDependencies:
+ typescript: '>=5.7.2'
+
+ '@trpc/tanstack-react-query@11.1.0':
+ resolution: {integrity: sha512-BRK5QWKAVHqvDyqjnGYp+53sgb5xE3MB1+fxrBKylVR1lFEeFQvUHwwY3Dtr/Pcq0mmxALytCsBVEGTiQCHnEw==}
peerDependencies:
+ '@tanstack/react-query': ^5.67.1
+ '@trpc/client': 11.1.0
+ '@trpc/server': 11.1.0
+ react: '>=18.2.0'
+ react-dom: '>=18.2.0'
typescript: '>=5.7.2'
'@tybys/wasm-util@0.9.0':
@@ -1486,8 +1963,8 @@ packages:
'@types/estree-jsx@1.0.5':
resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
- '@types/estree@1.0.6':
- resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
+ '@types/estree@1.0.7':
+ resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
'@types/hast@2.3.10':
resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==}
@@ -1507,22 +1984,33 @@ packages:
'@types/ms@2.1.0':
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
- '@types/node@20.17.25':
- resolution: {integrity: sha512-bT+r2haIlplJUYtlZrEanFHdPIZTeiMeh/fSOEbOOfWf9uTn+lg8g0KU6Q3iMgjd9FLuuMAgfCNSkjUbxL6E3Q==}
+ '@types/node@22.14.1':
+ resolution: {integrity: sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==}
+
+ '@types/parse-json@4.0.2':
+ resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
- '@types/pg@8.11.11':
- resolution: {integrity: sha512-kGT1qKM8wJQ5qlawUrEkXgvMSXoV213KfMGXcwfDwUIfUHXqXYXOfS1nE1LINRJVVVx5wCm70XnFlMHaIcQAfw==}
+ '@types/pg@8.11.13':
+ resolution: {integrity: sha512-6kXByGkvRvwXLuyaWzsebs2du6+XuAB2CuMsuzP7uaihQahshVgSmB22Pmh0vQMkQ1h5+PZU0d+Di1o+WpVWJg==}
- '@types/pg@8.11.6':
- resolution: {integrity: sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==}
+ '@types/prop-types@15.7.14':
+ resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==}
- '@types/react-dom@19.0.4':
- resolution: {integrity: sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==}
+ '@types/react-dom@19.1.2':
+ resolution: {integrity: sha512-XGJkWF41Qq305SKWEILa1O8vzhb3aOo3ogBlSmiqNko/WmRb6QIaweuZCXjKygVDXpzXb5wyxKTSOsmkuqj+Qw==}
peerDependencies:
'@types/react': ^19.0.0
- '@types/react@19.0.12':
- resolution: {integrity: sha512-V6Ar115dBDrjbtXSrS+/Oruobc+qVbbUxDFC1RSbRqLt5SYvxxyIDrSC85RWml54g+jfNeEMZhEj7wW07ONQhA==}
+ '@types/react-syntax-highlighter@15.5.13':
+ resolution: {integrity: sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==}
+
+ '@types/react-transition-group@4.4.12':
+ resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==}
+ peerDependencies:
+ '@types/react': '*'
+
+ '@types/react@19.1.2':
+ resolution: {integrity: sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==}
'@types/unist@2.0.11':
resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
@@ -1530,51 +2018,51 @@ packages:
'@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
- '@typescript-eslint/eslint-plugin@8.27.0':
- resolution: {integrity: sha512-4henw4zkePi5p252c8ncBLzLce52SEUz2Ebj8faDnuUXz2UuHEONYcJ+G0oaCF+bYCWVZtrGzq3FD7YXetmnSA==}
+ '@typescript-eslint/eslint-plugin@8.30.1':
+ resolution: {integrity: sha512-v+VWphxMjn+1t48/jO4t950D6KR8JaJuNXzi33Ve6P8sEmPr5k6CEXjdGwT6+LodVnEa91EQCtwjWNUCPweo+Q==}
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.9.0'
- '@typescript-eslint/parser@8.27.0':
- resolution: {integrity: sha512-XGwIabPallYipmcOk45DpsBSgLC64A0yvdAkrwEzwZ2viqGqRUJ8eEYoPz0CWnutgAFbNMPdsGGvzjSmcWVlEA==}
+ '@typescript-eslint/parser@8.30.1':
+ resolution: {integrity: sha512-H+vqmWwT5xoNrXqWs/fesmssOW70gxFlgcMlYcBaWNPIEWDgLa4W9nkSPmhuOgLnXq9QYgkZ31fhDyLhleCsAg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.9.0'
- '@typescript-eslint/scope-manager@8.27.0':
- resolution: {integrity: sha512-8oI9GwPMQmBryaaxG1tOZdxXVeMDte6NyJA4i7/TWa4fBwgnAXYlIQP+uYOeqAaLJ2JRxlG9CAyL+C+YE9Xknw==}
+ '@typescript-eslint/scope-manager@8.30.1':
+ resolution: {integrity: sha512-+C0B6ChFXZkuaNDl73FJxRYT0G7ufVPOSQkqkpM/U198wUwUFOtgo1k/QzFh1KjpBitaK7R1tgjVz6o9HmsRPg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/type-utils@8.27.0':
- resolution: {integrity: sha512-wVArTVcz1oJOIEJxui/nRhV0TXzD/zMSOYi/ggCfNq78EIszddXcJb7r4RCp/oBrjt8n9A0BSxRMKxHftpDxDA==}
+ '@typescript-eslint/type-utils@8.30.1':
+ resolution: {integrity: sha512-64uBF76bfQiJyHgZISC7vcNz3adqQKIccVoKubyQcOnNcdJBvYOILV1v22Qhsw3tw3VQu5ll8ND6hycgAR5fEA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.9.0'
- '@typescript-eslint/types@8.27.0':
- resolution: {integrity: sha512-/6cp9yL72yUHAYq9g6DsAU+vVfvQmd1a8KyA81uvfDE21O2DwQ/qxlM4AR8TSdAu+kJLBDrEHKC5/W2/nxsY0A==}
+ '@typescript-eslint/types@8.30.1':
+ resolution: {integrity: sha512-81KawPfkuulyWo5QdyG/LOKbspyyiW+p4vpn4bYO7DM/hZImlVnFwrpCTnmNMOt8CvLRr5ojI9nU1Ekpw4RcEw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.27.0':
- resolution: {integrity: sha512-BnKq8cqPVoMw71O38a1tEb6iebEgGA80icSxW7g+kndx0o6ot6696HjG7NdgfuAVmVEtwXUr3L8R9ZuVjoQL6A==}
+ '@typescript-eslint/typescript-estree@8.30.1':
+ resolution: {integrity: sha512-kQQnxymiUy9tTb1F2uep9W6aBiYODgq5EMSk6Nxh4Z+BDUoYUSa029ISs5zTzKBFnexQEh71KqwjKnRz58lusQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <5.9.0'
- '@typescript-eslint/utils@8.27.0':
- resolution: {integrity: sha512-njkodcwH1yvmo31YWgRHNb/x1Xhhq4/m81PhtvmRngD8iHPehxffz1SNCO+kwaePhATC+kOa/ggmvPoPza5i0Q==}
+ '@typescript-eslint/utils@8.30.1':
+ resolution: {integrity: sha512-T/8q4R9En2tcEsWPQgB5BQ0XJVOtfARcUvOa8yJP3fh9M/mXraLxZrkCfGb6ChrO/V3W+Xbd04RacUEqk1CFEQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.9.0'
- '@typescript-eslint/visitor-keys@8.27.0':
- resolution: {integrity: sha512-WsXQwMkILJvffP6z4U3FYJPlbf/j07HIxmDjZpbNvBJkMfvwXj5ACRkkHwBDvLBbDbtX5TdU64/rcvKJ/vuInQ==}
+ '@typescript-eslint/visitor-keys@8.30.1':
+ resolution: {integrity: sha512-aEhgas7aJ6vZnNFC7K4/vMGDGyOiqWcYZPpIWrTKuTAlsvDNKy2GFDqh9smL+iq069ZvR0YzEeq0B8NJlLzjFA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@uiw/codemirror-extensions-basic-setup@4.23.10':
@@ -1591,6 +2079,9 @@ packages:
'@uiw/codemirror-theme-tokyo-night-storm@4.23.10':
resolution: {integrity: sha512-ZSWtQFKXl5M112HANpmMQljNB2H/M5mEO+KXMz+7+kMQB5+QIq5eNlCxFmDQIWvpMayXbjkubeB/QrqnHFxQZg==}
+ '@uiw/codemirror-theme-xcode@4.23.10':
+ resolution: {integrity: sha512-meYMRLr0mTqGZerihSTKpjceRkxbFfpnXX9RyDZFwloydxzWY/6iGEt1/RMY+cWoxgjBYSiunqtU0qgQH0WAuA==}
+
'@uiw/codemirror-themes@4.23.10':
resolution: {integrity: sha512-dU0UgEEgEXCAYpxuVDQ6fovE82XsqgHZckTJOH6Bs8xCi3Z7dwBKO4pXuiA8qGDwTOXOMjSzfi+pRViDm7OfWw==}
peerDependencies:
@@ -1612,58 +2103,83 @@ packages:
'@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
- '@unrs/rspack-resolver-binding-darwin-arm64@1.2.2':
- resolution: {integrity: sha512-i7z0B+C0P8Q63O/5PXJAzeFtA1ttY3OR2VSJgGv18S+PFNwD98xHgAgPOT1H5HIV6jlQP8Avzbp09qxJUdpPNw==}
+ '@unrs/resolver-binding-darwin-arm64@1.5.0':
+ resolution: {integrity: sha512-YmocNlEcX/AgJv8gI41bhjMOTcKcea4D2nRIbZj+MhRtSH5+vEU8r/pFuTuoF+JjVplLsBueU+CILfBPVISyGQ==}
cpu: [arm64]
os: [darwin]
- '@unrs/rspack-resolver-binding-darwin-x64@1.2.2':
- resolution: {integrity: sha512-YEdFzPjIbDUCfmehC6eS+AdJYtFWY35YYgWUnqqTM2oe/N58GhNy5yRllxYhxwJ9GcfHoNc6Ubze1yjkNv+9Qg==}
+ '@unrs/resolver-binding-darwin-x64@1.5.0':
+ resolution: {integrity: sha512-qpUrXgH4e/0xu1LOhPEdfgSY3vIXOxDQv370NEL8npN8h40HcQDA+Pl2r4HBW6tTXezWIjxUFcP7tj529RZtDw==}
cpu: [x64]
os: [darwin]
- '@unrs/rspack-resolver-binding-freebsd-x64@1.2.2':
- resolution: {integrity: sha512-TU4ntNXDgPN2giQyyzSnGWf/dVCem5lvwxg0XYvsvz35h5H19WrhTmHgbrULMuypCB3aHe1enYUC9rPLDw45mA==}
+ '@unrs/resolver-binding-freebsd-x64@1.5.0':
+ resolution: {integrity: sha512-3tX8r8vgjvZzaJZB4jvxUaaFCDCb3aWDCpZN3EjhGnnwhztslI05KSG5NY/jNjlcZ5QWZ7dEZZ/rNBFsmTaSPw==}
cpu: [x64]
os: [freebsd]
- '@unrs/rspack-resolver-binding-linux-arm-gnueabihf@1.2.2':
- resolution: {integrity: sha512-ik3w4/rU6RujBvNWiDnKdXi1smBhqxEDhccNi/j2rHaMjm0Fk49KkJ6XKsoUnD2kZ5xaMJf9JjailW/okfUPIw==}
+ '@unrs/resolver-binding-linux-arm-gnueabihf@1.5.0':
+ resolution: {integrity: sha512-FH+ixzBKaUU9fWOj3TYO+Yn/eO6kYvMLV9eNJlJlkU7OgrxkCmiMS6wUbyT0KA3FOZGxnEQ2z3/BHgYm2jqeLA==}
+ cpu: [arm]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-arm-musleabihf@1.5.0':
+ resolution: {integrity: sha512-pxCgXMgwB/4PfqFQg73lMhmWwcC0j5L+dNXhZoz/0ek0iS/oAWl65fxZeT/OnU7fVs52MgdP2q02EipqJJXHSg==}
cpu: [arm]
os: [linux]
- '@unrs/rspack-resolver-binding-linux-arm64-gnu@1.2.2':
- resolution: {integrity: sha512-fp4Azi8kHz6TX8SFmKfyScZrMLfp++uRm2srpqRjsRZIIBzH74NtSkdEUHImR4G7f7XJ+sVZjCc6KDDK04YEpQ==}
+ '@unrs/resolver-binding-linux-arm64-gnu@1.5.0':
+ resolution: {integrity: sha512-FX2FV7vpLE/+Z0NZX9/1pwWud5Wocm/2PgpUXbT5aSV3QEB10kBPJAzssOQylvdj8mOHoKl5pVkXpbCwww/T2g==}
cpu: [arm64]
os: [linux]
- '@unrs/rspack-resolver-binding-linux-arm64-musl@1.2.2':
- resolution: {integrity: sha512-gMiG3DCFioJxdGBzhlL86KcFgt9HGz0iDhw0YVYPsShItpN5pqIkNrI+L/Q/0gfDiGrfcE0X3VANSYIPmqEAlQ==}
+ '@unrs/resolver-binding-linux-arm64-musl@1.5.0':
+ resolution: {integrity: sha512-+gF97xst1BZb28T3nwwzEtq2ewCoMDGKsenYsZuvpmNrW0019G1iUAunZN+FG55L21y+uP7zsGX06OXDQ/viKw==}
cpu: [arm64]
os: [linux]
- '@unrs/rspack-resolver-binding-linux-x64-gnu@1.2.2':
- resolution: {integrity: sha512-n/4n2CxaUF9tcaJxEaZm+lqvaw2gflfWQ1R9I7WQgYkKEKbRKbpG/R3hopYdUmLSRI4xaW1Cy0Bz40eS2Yi4Sw==}
+ '@unrs/resolver-binding-linux-ppc64-gnu@1.5.0':
+ resolution: {integrity: sha512-5bEmVcQw9js8JYM2LkUBw5SeELSIxX+qKf9bFrfFINKAp4noZ//hUxLpbF7u/3gTBN1GsER6xOzIZlw/VTdXtA==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-riscv64-gnu@1.5.0':
+ resolution: {integrity: sha512-GGk/8TPUsf1Q99F+lzMdjE6sGL26uJCwQ9TlvBs8zR3cLQNw/MIumPN7zrs3GFGySjnwXc8gA6J3HKbejywmqA==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-s390x-gnu@1.5.0':
+ resolution: {integrity: sha512-5uRkFYYVNAeVaA4W/CwugjFN3iDOHCPqsBLCCOoJiMfFMMz4evBRsg+498OFa9w6VcTn2bD5aI+RRayaIgk2Sw==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-x64-gnu@1.5.0':
+ resolution: {integrity: sha512-j905CZH3nehYy6NimNqC2B14pxn4Ltd7guKMyPTzKehbFXTUgihQS/ZfHQTdojkMzbSwBOSgq1dOrY+IpgxDsA==}
cpu: [x64]
os: [linux]
- '@unrs/rspack-resolver-binding-linux-x64-musl@1.2.2':
- resolution: {integrity: sha512-cHyhAr6rlYYbon1L2Ag449YCj3p6XMfcYTP0AQX+KkQo025d1y/VFtPWvjMhuEsE2lLvtHm7GdJozj6BOMtzVg==}
+ '@unrs/resolver-binding-linux-x64-musl@1.5.0':
+ resolution: {integrity: sha512-dmLevQTuzQRwu5A+mvj54R5aye5I4PVKiWqGxg8tTaYP2k2oTs/3Mo8mgnhPk28VoYCi0fdFYpgzCd4AJndQvQ==}
cpu: [x64]
os: [linux]
- '@unrs/rspack-resolver-binding-wasm32-wasi@1.2.2':
- resolution: {integrity: sha512-eogDKuICghDLGc32FtP+WniG38IB1RcGOGz0G3z8406dUdjJvxfHGuGs/dSlM9YEp/v0lEqhJ4mBu6X2nL9pog==}
+ '@unrs/resolver-binding-wasm32-wasi@1.5.0':
+ resolution: {integrity: sha512-LtJMhwu7avhoi+kKfAZOKN773RtzLBVVF90YJbB0wyMpUj9yQPeA+mteVUI9P70OG/opH47FeV5AWeaNWWgqJg==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
- '@unrs/rspack-resolver-binding-win32-arm64-msvc@1.2.2':
- resolution: {integrity: sha512-7sWRJumhpXSi2lccX8aQpfFXHsSVASdWndLv8AmD8nDRA/5PBi8IplQVZNx2mYRx6+Bp91Z00kuVqpXO9NfCTg==}
+ '@unrs/resolver-binding-win32-arm64-msvc@1.5.0':
+ resolution: {integrity: sha512-FTZBxLL4SO1mgIM86KykzJmPeTPisBDHQV6xtfDXbTMrentuZ6SdQKJUV5BWaoUK3p8kIULlrCcucqdCnk8Npg==}
cpu: [arm64]
os: [win32]
- '@unrs/rspack-resolver-binding-win32-x64-msvc@1.2.2':
- resolution: {integrity: sha512-hewo/UMGP1a7O6FG/ThcPzSJdm/WwrYDNkdGgWl6M18H6K6MSitklomWpT9MUtT5KGj++QJb06va/14QBC4pvw==}
+ '@unrs/resolver-binding-win32-ia32-msvc@1.5.0':
+ resolution: {integrity: sha512-i5bB7vJ1waUsFciU/FKLd4Zw0VnAkvhiJ4//jYQXyDUuiLKodmtQZVTcOPU7pp97RrNgCFtXfC1gnvj/DHPJTw==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@unrs/resolver-binding-win32-x64-msvc@1.5.0':
+ resolution: {integrity: sha512-wAvXp4k7jhioi4SebXW/yfzzYwsUCr9kIX4gCsUFKpCTUf8Mi7vScJXI3S+kupSUf0LbVHudR8qBbe2wFMSNUw==}
cpu: [x64]
os: [win32]
@@ -1707,6 +2223,9 @@ packages:
engines: {node: '>=10'}
deprecated: This package is no longer supported.
+ argparse@1.0.10:
+ resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
@@ -1780,6 +2299,10 @@ packages:
resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
engines: {node: '>= 0.4'}
+ babel-plugin-macros@3.1.0:
+ resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==}
+ engines: {node: '>=10', npm: '>=6'}
+
bail@2.0.2:
resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
@@ -1837,8 +2360,8 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
- caniuse-lite@1.0.30001706:
- resolution: {integrity: sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==}
+ caniuse-lite@1.0.30001714:
+ resolution: {integrity: sha512-mtgapdwDLSSBnCI3JokHM7oEQBLxiJKVRtg10AxM1AyeiKcM96f0Mkbqeq+1AbiCtvMcHRulAAEMu693JrSWqg==}
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
@@ -1858,12 +2381,21 @@ packages:
character-entities-html4@2.1.0:
resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
+ character-entities-legacy@1.1.4:
+ resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==}
+
character-entities-legacy@3.0.0:
resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
+ character-entities@1.2.4:
+ resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==}
+
character-entities@2.0.2:
resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
+ character-reference-invalid@1.1.4:
+ resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==}
+
character-reference-invalid@2.0.1:
resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
@@ -1893,6 +2425,12 @@ packages:
resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
engines: {node: '>=6'}
+ cmdk@1.1.1:
+ resolution: {integrity: sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==}
+ peerDependencies:
+ react: ^18 || ^19 || ^19.0.0-rc
+ react-dom: ^18 || ^19 || ^19.0.0-rc
+
codemirror@6.0.1:
resolution: {integrity: sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==}
@@ -1914,6 +2452,9 @@ packages:
resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
engines: {node: '>=12.5.0'}
+ comma-separated-tokens@1.0.8:
+ resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==}
+
comma-separated-tokens@2.0.3:
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
@@ -1931,10 +2472,20 @@ packages:
console-control-strings@1.1.0:
resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
+ convert-source-map@1.9.0:
+ resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
+
cookie@0.7.2:
resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
engines: {node: '>= 0.6'}
+ copy-to-clipboard@3.3.3:
+ resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==}
+
+ cosmiconfig@7.1.0:
+ resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
+ engines: {node: '>=10'}
+
crelt@1.0.6:
resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==}
@@ -2040,16 +2591,19 @@ packages:
resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
engines: {node: '>=0.10.0'}
- dotenv@16.4.7:
- resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==}
+ dom-helpers@5.2.1:
+ resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==}
+
+ dotenv@16.5.0:
+ resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==}
engines: {node: '>=12'}
- drizzle-kit@0.30.5:
- resolution: {integrity: sha512-l6dMSE100u7sDaTbLczibrQZjA35jLsHNqIV+jmhNVO3O8jzM6kywMOmV9uOz9ZVSCMPQhAZEFjL/qDPVrqpUA==}
+ drizzle-kit@0.31.0:
+ resolution: {integrity: sha512-pcKVT+GbfPA+bUovPIilgVOoq+onNBo/YQBG86sf3/GFHkN6lRJPm1l7dKN0IMAk57RQoIm4GUllRrasLlcaSg==}
hasBin: true
- drizzle-orm@0.41.0:
- resolution: {integrity: sha512-7A4ZxhHk9gdlXmTdPj/lREtP+3u8KvZ4yEN6MYVxBzZGex5Wtdc+CWSbu7btgF6TB0N+MNPrvW7RKBbxJchs/Q==}
+ drizzle-orm@0.42.0:
+ resolution: {integrity: sha512-pS8nNJm2kBNZwrOjTHJfdKkaU+KuUQmV/vk5D57NojDq4FG+0uAYGMulXtYT///HfgsMF0hnFFvu1ezI3OwOkg==}
peerDependencies:
'@aws-sdk/client-rds-data': '>=3'
'@cloudflare/workers-types': '>=4'
@@ -2059,7 +2613,7 @@ packages:
'@neondatabase/serverless': '>=0.10.0'
'@op-engineering/op-sqlite': '>=2'
'@opentelemetry/api': ^1.4.1
- '@planetscale/database': '>=1'
+ '@planetscale/database': '>=1.13'
'@prisma/client': '*'
'@tidbcloud/serverless': '*'
'@types/better-sqlite3': '*'
@@ -2141,8 +2695,8 @@ packages:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
- electron-to-chromium@1.5.123:
- resolution: {integrity: sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA==}
+ electron-to-chromium@1.5.138:
+ resolution: {integrity: sha512-FWlQc52z1dXqm+9cCJ2uyFgJkESd+16j6dBEjsgDNuHjBpuIzL8/lRc0uvh1k8RNI6waGo6tcy2DvwkTBJOLDg==}
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -2165,9 +2719,8 @@ packages:
engines: {node: '>=8.0.0'}
hasBin: true
- env-paths@3.0.0:
- resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ error-ex@1.3.2:
+ resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
es-abstract@1.23.9:
resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==}
@@ -2211,13 +2764,8 @@ packages:
engines: {node: '>=12'}
hasBin: true
- esbuild@0.19.12:
- resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==}
- engines: {node: '>=12'}
- hasBin: true
-
- esbuild@0.25.1:
- resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==}
+ esbuild@0.25.2:
+ resolution: {integrity: sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==}
engines: {node: '>=18'}
hasBin: true
@@ -2233,8 +2781,8 @@ packages:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
- eslint-config-next@15.2.3:
- resolution: {integrity: sha512-VDQwbajhNMFmrhLWVyUXCqsGPN+zz5G8Ys/QwFubfsxTIrkqdx3N3x3QPW+pERz8bzGPP0IgEm8cNbZcd8PFRQ==}
+ eslint-config-next@15.3.1:
+ resolution: {integrity: sha512-GnmyVd9TE/Ihe3RrvcafFhXErErtr2jS0JDeCSp3vWvy86AXwHsRBt0E3MqP/m8ACS1ivcsi5uaqjbhsG18qKw==}
peerDependencies:
eslint: ^7.23.0 || ^8.0.0 || ^9.0.0
typescript: '>=3.3.1'
@@ -2245,8 +2793,8 @@ packages:
eslint-import-resolver-node@0.3.9:
resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
- eslint-import-resolver-typescript@3.9.1:
- resolution: {integrity: sha512-euxa5rTGqHeqVxmOHT25hpk58PxkQ4mNoX6Yun4ooGaCHAxOCojJYNvjmyeOQxj/LyW+3fulH0+xtk+p2kPPTw==}
+ eslint-import-resolver-typescript@3.10.0:
+ resolution: {integrity: sha512-aV3/dVsT0/H9BtpNwbaqvl+0xGMRGzncLyhm793NFGvbwGGvzyAykqWZ8oZlZuGwuHkwJjhWJkG1cM3ynvd2pQ==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
eslint: '*'
@@ -2301,8 +2849,8 @@ packages:
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
- eslint-plugin-react@7.37.4:
- resolution: {integrity: sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==}
+ eslint-plugin-react@7.37.5:
+ resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==}
engines: {node: '>=4'}
peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
@@ -2319,8 +2867,8 @@ packages:
resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- eslint@9.23.0:
- resolution: {integrity: sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==}
+ eslint@9.24.0:
+ resolution: {integrity: sha512-eh/jxIEJyZrvbWRe4XuVclLPDYSYYYgLy5zXGGxD6j8zjSAxFEzI2fL/8xNq6O2yKqVt+eF2YhV+hxjV6UKXwQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
@@ -2333,6 +2881,11 @@ packages:
resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ esprima@4.0.1:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+ engines: {node: '>=4'}
+ hasBin: true
+
esquery@1.6.0:
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
engines: {node: '>=0.10'}
@@ -2356,6 +2909,10 @@ packages:
resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==}
engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0}
+ extend-shallow@2.0.1:
+ resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
+ engines: {node: '>=0.10.0'}
+
extend@3.0.2:
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
@@ -2379,6 +2936,9 @@ packages:
fastq@1.19.1:
resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
+ fault@1.0.4:
+ resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==}
+
fdir@6.4.3:
resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==}
peerDependencies:
@@ -2399,6 +2959,9 @@ packages:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
+ find-root@1.1.0:
+ resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
+
find-up@5.0.0:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
@@ -2418,6 +2981,13 @@ packages:
resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
engines: {node: '>= 0.4'}
+ foreach@2.0.6:
+ resolution: {integrity: sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==}
+
+ format@0.2.2:
+ resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==}
+ engines: {node: '>=0.4.x'}
+
formdata-polyfill@4.0.10:
resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
engines: {node: '>=12.20.0'}
@@ -2451,16 +3021,14 @@ packages:
functions-have-names@1.2.3:
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+ fuzzysort@2.0.4:
+ resolution: {integrity: sha512-Api1mJL+Ad7W7vnDZnWq5pGaXJjyencT+iKGia2PlHUcSsSzWwIQ3S1isiMpwpavjYtGd2FzhUIhnnhOULZgDw==}
+
gauge@3.0.2:
resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==}
engines: {node: '>=10'}
deprecated: This package is no longer supported.
- gel@2.0.1:
- resolution: {integrity: sha512-gfem3IGvqKqXwEq7XseBogyaRwGsQGuE7Cw/yQsjLGdgiyqX92G1xENPCE0ltunPGcsJIa6XBOTx/PK169mOqw==}
- engines: {node: '>= 18.0.0'}
- hasBin: true
-
get-intrinsic@1.3.0:
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'}
@@ -2496,6 +3064,10 @@ packages:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Glob versions prior to v9 are no longer supported
+ globals@11.12.0:
+ resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
+ engines: {node: '>=4'}
+
globals@14.0.0:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
@@ -2514,6 +3086,10 @@ packages:
graphemer@1.4.0:
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
+ gray-matter@4.0.3:
+ resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==}
+ engines: {node: '>=6.0'}
+
has-bigints@1.1.0:
resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
engines: {node: '>= 0.4'}
@@ -2547,9 +3123,15 @@ packages:
hast-util-is-element@3.0.0:
resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==}
+ hast-util-parse-selector@2.2.5:
+ resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==}
+
hast-util-parse-selector@3.1.1:
resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==}
+ hast-util-to-html@9.0.5:
+ resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==}
+
hast-util-to-jsx-runtime@2.3.6:
resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==}
@@ -2559,16 +3141,31 @@ packages:
hast-util-whitespace@3.0.0:
resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
+ hastscript@6.0.0:
+ resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==}
+
hastscript@7.2.0:
resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==}
+ highlight.js@10.7.3:
+ resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==}
+
highlight.js@11.11.1:
resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==}
engines: {node: '>=12.0.0'}
+ highlightjs-vue@1.0.0:
+ resolution: {integrity: sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==}
+
+ hoist-non-react-statics@3.3.2:
+ resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
+
html-url-attributes@3.0.1:
resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==}
+ html-void-elements@3.0.0:
+ resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
+
https-proxy-agent@5.0.1:
resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
engines: {node: '>= 6'}
@@ -2596,6 +3193,9 @@ packages:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+ inherits@2.0.3:
+ resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==}
+
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
@@ -2606,9 +3206,15 @@ packages:
resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
engines: {node: '>= 0.4'}
+ is-alphabetical@1.0.4:
+ resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==}
+
is-alphabetical@2.0.1:
resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
+ is-alphanumerical@1.0.4:
+ resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==}
+
is-alphanumerical@2.0.1:
resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
@@ -2616,6 +3222,9 @@ packages:
resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
engines: {node: '>= 0.4'}
+ is-arrayish@0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+
is-arrayish@0.3.2:
resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
@@ -2631,8 +3240,8 @@ packages:
resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
engines: {node: '>= 0.4'}
- is-bun-module@1.3.0:
- resolution: {integrity: sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==}
+ is-bun-module@2.0.0:
+ resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==}
is-callable@1.2.7:
resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
@@ -2650,9 +3259,16 @@ packages:
resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
engines: {node: '>= 0.4'}
+ is-decimal@1.0.4:
+ resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==}
+
is-decimal@2.0.1:
resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
+ is-extendable@0.1.1:
+ resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
+ engines: {node: '>=0.10.0'}
+
is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
@@ -2673,6 +3289,9 @@ packages:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
+ is-hexadecimal@1.0.4:
+ resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==}
+
is-hexadecimal@2.0.1:
resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
@@ -2746,10 +3365,6 @@ 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'}
@@ -2767,13 +3382,28 @@ packages:
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+ js-yaml@3.14.1:
+ resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
+ hasBin: true
+
js-yaml@4.1.0:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+ json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+
+ json-pointer@0.6.2:
+ resolution: {integrity: sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==}
+
json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
@@ -2794,6 +3424,10 @@ packages:
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+ kind-of@6.0.3:
+ resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
+ engines: {node: '>=0.10.0'}
+
kleur@3.0.3:
resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
engines: {node: '>=6'}
@@ -2873,6 +3507,9 @@ packages:
resolution: {integrity: sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==}
engines: {node: '>= 12.0.0'}
+ lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+
locate-path@6.0.0:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
@@ -2897,6 +3534,9 @@ packages:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
+ lowlight@1.20.0:
+ resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==}
+
lowlight@3.3.0:
resolution: {integrity: sha512-0JNhgFoPvP6U6lE/UdVsSq99tn6DhjjpAj5MxG49ewd2mOBVtwWYIT8ClyABhq198aXXODMU6Ox8DrGy/CpTZQ==}
@@ -2904,8 +3544,8 @@ packages:
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
engines: {node: '>=10'}
- lucide-react@0.483.0:
- resolution: {integrity: sha512-WldsY17Qb/T3VZdMnVQ9C3DDIP7h1ViDTHVdVGnLZcvHNg30zH/MTQ04RTORjexoGmpsXroiQXZ4QyR0kBy0FA==}
+ lucide-react@0.488.0:
+ resolution: {integrity: sha512-ronlL0MyKut4CEzBY/ai2ZpKPxyWO4jUqdAkm2GNK5Zn3Rj+swDz+3lvyAUXN0PNqPKIX6XM9Xadwz/skLs/pQ==}
peerDependencies:
react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
@@ -3099,11 +3739,17 @@ packages:
resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
engines: {node: '>= 8'}
+ mitt@3.0.1:
+ resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
+
mkdirp@1.0.4:
resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
engines: {node: '>=10'}
hasBin: true
+ monaco-editor@0.52.2:
+ resolution: {integrity: sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ==}
+
mri@1.2.0:
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
engines: {node: '>=4'}
@@ -3136,8 +3782,8 @@ packages:
nodemailer:
optional: true
- next@15.2.3:
- resolution: {integrity: sha512-x6eDkZxk2rPpu46E1ZVUWIBhYCLszmUY6fvHBFcbzJ9dD+qRX6vcHusaqqDlnY+VngKzKbAiG2iRCkPbmi8f7w==}
+ next@15.3.1:
+ resolution: {integrity: sha512-8+dDV0xNLOgHlyBxP1GwHGVaNXsmp+2NhZEYrXr24GWLHtt27YrBPbPuHvzlhi7kZNYjeJNR93IF5zfFu5UL0g==}
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
hasBin: true
peerDependencies:
@@ -3204,8 +3850,26 @@ packages:
resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==}
deprecated: This package is no longer supported.
- oauth4webapi@3.3.1:
- resolution: {integrity: sha512-ZwX7UqYrP3Lr+Glhca3a1/nF2jqf7VVyJfhGuW5JtrfDUxt0u+IoBPzFjZ2dd7PJGkdM6CFPVVYzuDYKHv101A==}
+ nuqs@2.4.3:
+ resolution: {integrity: sha512-BgtlYpvRwLYiJuWzxt34q2bXu/AIS66sLU1QePIMr2LWkb+XH0vKXdbLSgn9t6p7QKzwI7f38rX3Wl9llTXQ8Q==}
+ peerDependencies:
+ '@remix-run/react': '>=2'
+ next: '>=14.2.0'
+ react: '>=18.2.0 || ^19.0.0-0'
+ react-router: ^6 || ^7
+ react-router-dom: ^6 || ^7
+ peerDependenciesMeta:
+ '@remix-run/react':
+ optional: true
+ next:
+ optional: true
+ react-router:
+ optional: true
+ react-router-dom:
+ optional: true
+
+ oauth4webapi@3.5.0:
+ resolution: {integrity: sha512-DF3mLWNuxPkxJkHmWxbSFz4aE5CjWOsm465VBfBdWzmzX4Mg3vF8icxK+iKqfdWrIumBJ2TaoNQWx+SQc2bsPQ==}
oauth@0.9.15:
resolution: {integrity: sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==}
@@ -3291,9 +3955,20 @@ packages:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
+ parse-entities@2.0.0:
+ resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==}
+
parse-entities@4.0.2:
resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==}
+ parse-json@5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+
+ parse-ms@3.0.0:
+ resolution: {integrity: sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==}
+ engines: {node: '>=12'}
+
path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
@@ -3313,6 +3988,13 @@ packages:
path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+ path-type@4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+ engines: {node: '>=8'}
+
+ path@0.12.7:
+ resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==}
+
pg-cloudflare@1.1.1:
resolution: {integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==}
@@ -3433,50 +4115,89 @@ packages:
preact@10.24.3:
resolution: {integrity: sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==}
- preact@10.26.4:
- resolution: {integrity: sha512-KJhO7LBFTjP71d83trW+Ilnjbo+ySsaAgCfXOXUlmGzJ4ygYPWmysm77yg4emwfmoz3b22yvH5IsVFHbhUaH5w==}
+ preact@10.26.5:
+ resolution: {integrity: sha512-fmpDkgfGU6JYux9teDWLhj9mKN55tyepwYbxHgQuIxbWQzgFg5vk7Mrrtfx7xRxq798ynkY4DDDxZr235Kk+4w==}
prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
+ pretty-bytes@6.1.1:
+ resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==}
+ engines: {node: ^14.13.1 || >=16.0.0}
+
pretty-format@3.8.0:
resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==}
- prompts@2.4.2:
- resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
+ pretty-ms@8.0.0:
+ resolution: {integrity: sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==}
+ engines: {node: '>=14.16'}
+
+ prismjs@1.27.0:
+ resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==}
+ engines: {node: '>=6'}
+
+ prismjs@1.30.0:
+ resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==}
+ engines: {node: '>=6'}
+
+ process@0.11.10:
+ resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
+ engines: {node: '>= 0.6.0'}
+
+ prompts@2.4.2:
+ resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
engines: {node: '>= 6'}
prop-types@15.8.1:
resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
+ property-information@5.6.0:
+ resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==}
+
property-information@6.5.0:
resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
property-information@7.0.0:
resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==}
+ punycode@1.4.1:
+ resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==}
+
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
+ qs@6.14.0:
+ resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
+ engines: {node: '>=0.6'}
+
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
- react-dom@19.0.0:
- resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==}
+ react-dom@19.1.0:
+ resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==}
peerDependencies:
- react: ^19.0.0
+ react: ^19.1.0
react-is@16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
+ react-is@19.1.0:
+ resolution: {integrity: sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==}
+
react-markdown@10.1.0:
resolution: {integrity: sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==}
peerDependencies:
'@types/react': '>=18'
react: '>=18'
+ react-markdown@9.1.0:
+ resolution: {integrity: sha512-xaijuJB0kzGiUdG7nc2MOMDUDBWPyGAjZtUrow9XxUeua8IqeP+VlIfAZ3bphpcLTnSZXz6z9jcVC/TCwbfgdw==}
+ peerDependencies:
+ '@types/react': '>=18'
+ react: '>=18'
+
react-remove-scroll-bar@2.3.8:
resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==}
engines: {node: '>=10'}
@@ -3507,8 +4228,19 @@ packages:
'@types/react':
optional: true
- react@19.0.0:
- resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==}
+ react-syntax-highlighter@15.6.1:
+ resolution: {integrity: sha512-OqJ2/vL7lEeV5zTJyG7kmARppUjiB9h9udl4qHQjjgEos66z00Ia0OckwYfRxCSFrW8RJIBnsBwQsHZbVPspqg==}
+ peerDependencies:
+ react: '>= 0.14.0'
+
+ react-transition-group@4.4.5:
+ resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==}
+ peerDependencies:
+ react: '>=16.6.0'
+ react-dom: '>=16.6.0'
+
+ react@19.1.0:
+ resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==}
engines: {node: '>=0.10.0'}
readable-stream@3.6.2:
@@ -3519,6 +4251,9 @@ packages:
resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
engines: {node: '>= 0.4'}
+ refractor@3.6.0:
+ resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==}
+
regenerator-runtime@0.14.1:
resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
@@ -3529,6 +4264,9 @@ packages:
rehype-highlight@7.0.2:
resolution: {integrity: sha512-k158pK7wdC2qL3M5NcZROZ2tR/l7zOzjxXd5VGdcfIyoijjQqpHd3JKtYSBDpDZ38UI2WJWuFAtkMDxmx5kstA==}
+ rehype-stringify@10.0.1:
+ resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==}
+
remark-breaks@4.0.0:
resolution: {integrity: sha512-IjEjJOkH4FuJvHZVIW0QCDWxcG96kCq7An/KVH2NfJe6rKZU2AsHeB3OEjPNRxi4QC34Xdx7I2KGYn6IpT7gxQ==}
@@ -3549,12 +4287,15 @@ packages:
remark-parse@11.0.0:
resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
- remark-rehype@11.1.1:
- resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==}
+ remark-rehype@11.1.2:
+ resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==}
remark-stringify@11.0.0:
resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
+ remark@15.0.1:
+ resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==}
+
resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
@@ -3584,9 +4325,6 @@ packages:
deprecated: Rimraf versions prior to v4 are no longer supported
hasBin: true
- rspack-resolver@1.2.2:
- resolution: {integrity: sha512-Fwc19jMBA3g+fxDJH2B4WxwZjE0VaaOL7OX/A4Wn5Zv7bOD/vyPZhzXfaO73Xc2GAlfi96g5fGUa378WbIGfFw==}
-
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
@@ -3605,8 +4343,12 @@ packages:
resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
engines: {node: '>= 0.4'}
- scheduler@0.25.0:
- resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==}
+ scheduler@0.26.0:
+ resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==}
+
+ section-matter@1.0.0:
+ resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==}
+ engines: {node: '>=4'}
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
@@ -3617,6 +4359,9 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ server-only@0.0.1:
+ resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==}
+
set-blocking@2.0.0:
resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
@@ -3632,8 +4377,8 @@ packages:
resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
engines: {node: '>= 0.4'}
- sharp@0.33.5:
- resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==}
+ sharp@0.34.1:
+ resolution: {integrity: sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
shebang-command@2.0.0:
@@ -3644,10 +4389,6 @@ 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'}
@@ -3677,8 +4418,8 @@ packages:
resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==}
engines: {node: '>=8'}
- sonner@2.0.1:
- resolution: {integrity: sha512-FRBphaehZ5tLdLcQ8g2WOIRE+Y7BCfWi5Zyd8bCvBjiW8TxxAyoWZIxS661Yz6TGPqFQ4VLzOF89WEYhfynSFQ==}
+ sonner@2.0.3:
+ resolution: {integrity: sha512-njQ4Hht92m0sMqqHVDL32V2Oun9W1+PHO9NDv9FHfJjT3JT22IG4Jpo3FPQy+mouRKCXFWO+r67v6MrHX2zeIA==}
peerDependencies:
react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc
react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc
@@ -3690,10 +4431,17 @@ packages:
source-map-support@0.5.21:
resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+ source-map@0.5.7:
+ resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
+ engines: {node: '>=0.10.0'}
+
source-map@0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
+ space-separated-tokens@1.1.5:
+ resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==}
+
space-separated-tokens@2.0.2:
resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
@@ -3701,9 +4449,15 @@ packages:
resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
engines: {node: '>= 10.x'}
+ sprintf-js@1.0.3:
+ resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+
stable-hash@0.0.5:
resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==}
+ state-local@1.0.7:
+ resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==}
+
stdin-discarder@0.1.0:
resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -3712,6 +4466,10 @@ packages:
resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
engines: {node: '>=10.0.0'}
+ string-byte-length@1.6.0:
+ resolution: {integrity: sha512-h9KzyolUa+9q6yHPCGzvPOta0VpWqG0/x0o1on22PZL0t+8txWXl0JCkRG/Gvi58HnyDvT1YCzDH2bAOpEc++g==}
+ engines: {node: '>=14.18.0'}
+
string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
@@ -3753,6 +4511,10 @@ packages:
resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
engines: {node: '>=12'}
+ strip-bom-string@1.0.0:
+ resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==}
+ engines: {node: '>=0.10.0'}
+
strip-bom@3.0.0:
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
engines: {node: '>=4'}
@@ -3787,6 +4549,9 @@ packages:
babel-plugin-macros:
optional: true
+ stylis@4.2.0:
+ resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==}
+
supports-color@7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
@@ -3795,11 +4560,14 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
- tailwind-merge@3.0.2:
- resolution: {integrity: sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw==}
+ tailwind-merge@2.6.0:
+ resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==}
+
+ tailwind-merge@3.2.0:
+ resolution: {integrity: sha512-FQT/OVqCD+7edmmJpsgCsY820RTD5AkBryuG5IUqR5YQZSdj5xlH5nLgH7YPths7WsLPSpSBNneJdM8aS8aeFA==}
- tailwindcss@4.0.15:
- resolution: {integrity: sha512-6ZMg+hHdMJpjpeCCFasX7K+U615U9D+7k5/cDK/iRwl6GptF24+I/AbKgOnXhVKePzrEyIXutLv36n4cRsq3Sg==}
+ tailwindcss@4.1.4:
+ resolution: {integrity: sha512-1ZIUqtPITFbv/DxRmDr5/agPqJwF69d24m9qmM1939TJehgY539CtzeZRjbLt5G6fSy/7YqqYsfvoTEw9xUI2A==}
tapable@2.2.1:
resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
@@ -3817,6 +4585,9 @@ packages:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
+ toggle-selection@1.0.6:
+ resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==}
+
tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
@@ -3826,8 +4597,15 @@ packages:
trough@2.2.0:
resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
- trpc@0.10.4:
- resolution: {integrity: sha512-vVkppPeA3feP6CRrQJDb2xaNRjbX3fLo072Q40ruRdagRKjWrF7OJx3s1QbuDfhDNhM4DaeMBLmdvLYV2W5bEw==}
+ trpc-ui@1.0.15:
+ resolution: {integrity: sha512-bM+cBeQgFFrDD1TNuvbsre+WXuLYbxsEoI6W4Zg402dqpMdeWD9NxEr/K4ZVaZGzbV+RAUqUZSlS4X8AMmbUpA==}
+ peerDependencies:
+ '@trpc/server': ^11.0.0-next-beta.264
+ zod: ^3.19.1
+
+ trpc@0.11.3:
+ resolution: {integrity: sha512-vfj6WrxYk8XDZzCsFNLwo5WhlKi4IYmVRzRgRQAlcK8zH4sY0yIAlJ7Nd1lZcGFe985GfP2LZLoEsCrMsIl/tA==}
+ deprecated: superseded by @trpc/*-packages - see tRPC.io
ts-api-utils@2.1.0:
resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
@@ -3866,8 +4644,8 @@ packages:
resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
engines: {node: '>= 0.4'}
- typescript@5.8.2:
- resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==}
+ typescript@5.8.3:
+ resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
engines: {node: '>=14.17'}
hasBin: true
@@ -3875,8 +4653,8 @@ packages:
resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
engines: {node: '>= 0.4'}
- undici-types@6.19.8:
- resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
unicode-emoji-modifier-base@1.0.0:
resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==}
@@ -3914,6 +4692,9 @@ packages:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
engines: {node: '>= 10.0.0'}
+ unrs-resolver@1.5.0:
+ resolution: {integrity: sha512-6aia3Oy7SEe0MuUGQm2nsyob0L2+g57w178K5SE/3pvSGAIp28BB2O921fKx424Ahc/gQ6v0DXFbhcpyhGZdOA==}
+
update-browserslist-db@1.1.3:
resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
hasBin: true
@@ -3923,6 +4704,10 @@ packages:
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ url@0.11.4:
+ resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==}
+ engines: {node: '>= 0.4'}
+
use-callback-ref@1.3.3:
resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==}
engines: {node: '>=10'}
@@ -3943,9 +4728,17 @@ packages:
'@types/react':
optional: true
+ use-sync-external-store@1.5.0:
+ resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+ util@0.10.4:
+ resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==}
+
uuid@8.3.2:
resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
hasBin: true
@@ -3993,11 +4786,6 @@ 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==}
@@ -4015,12 +4803,36 @@ packages:
yallist@4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+ yaml@1.10.2:
+ resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
+ engines: {node: '>= 6'}
+
yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
- zod@3.24.2:
- resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==}
+ zod-to-json-schema@3.24.5:
+ resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==}
+ peerDependencies:
+ zod: ^3.24.1
+
+ zod@3.24.3:
+ resolution: {integrity: sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==}
+
+ zustand@4.5.6:
+ resolution: {integrity: sha512-ibr/n1hBzLLj5Y+yUcU7dYw8p6WnIVzdJbnX+1YpaScvZVF2ziugqHs+LAmHw4lWO9c/zRj+K1ncgWDQuthEdQ==}
+ engines: {node: '>=12.7.0'}
+ peerDependencies:
+ '@types/react': '>=16.8'
+ immer: '>=9.0.6'
+ react: '>=16.8'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ immer:
+ optional: true
+ react:
+ optional: true
zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
@@ -4033,7 +4845,7 @@ snapshots:
dependencies:
'@panva/hkdf': 1.2.1
jose: 6.0.10
- oauth4webapi: 3.3.1
+ oauth4webapi: 3.5.0
preact: 10.24.3
preact-render-to-string: 6.5.11(preact@10.24.3)
@@ -4045,23 +4857,89 @@ snapshots:
- '@simplewebauthn/server'
- nodemailer
- '@babel/runtime@7.26.10':
+ '@babel/code-frame@7.26.2':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.25.9
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/generator@7.27.0':
+ dependencies:
+ '@babel/parser': 7.27.0
+ '@babel/types': 7.27.0
+ '@jridgewell/gen-mapping': 0.3.8
+ '@jridgewell/trace-mapping': 0.3.25
+ jsesc: 3.1.0
+
+ '@babel/helper-module-imports@7.25.9':
+ dependencies:
+ '@babel/traverse': 7.27.0
+ '@babel/types': 7.27.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-string-parser@7.25.9': {}
+
+ '@babel/helper-validator-identifier@7.25.9': {}
+
+ '@babel/parser@7.27.0':
+ dependencies:
+ '@babel/types': 7.27.0
+
+ '@babel/runtime@7.27.0':
dependencies:
regenerator-runtime: 0.14.1
+ '@babel/template@7.27.0':
+ dependencies:
+ '@babel/code-frame': 7.26.2
+ '@babel/parser': 7.27.0
+ '@babel/types': 7.27.0
+
+ '@babel/traverse@7.27.0':
+ dependencies:
+ '@babel/code-frame': 7.26.2
+ '@babel/generator': 7.27.0
+ '@babel/parser': 7.27.0
+ '@babel/template': 7.27.0
+ '@babel/types': 7.27.0
+ debug: 4.4.0
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.27.0':
+ dependencies:
+ '@babel/helper-string-parser': 7.25.9
+ '@babel/helper-validator-identifier': 7.25.9
+
'@codemirror/autocomplete@6.18.6':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.36.4
+ '@codemirror/view': 6.36.5
'@lezer/common': 1.2.3
- '@codemirror/commands@6.8.0':
+ '@codemirror/commands@6.8.1':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.36.4
+ '@codemirror/view': 6.36.5
+ '@lezer/common': 1.2.3
+
+ '@codemirror/lang-angular@0.1.3':
+ dependencies:
+ '@codemirror/lang-html': 6.4.9
+ '@codemirror/lang-javascript': 6.2.3
+ '@codemirror/language': 6.11.0
'@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+
+ '@codemirror/lang-cpp@6.0.2':
+ dependencies:
+ '@codemirror/language': 6.11.0
+ '@lezer/cpp': 1.1.3
'@codemirror/lang-css@6.3.1':
dependencies:
@@ -4069,7 +4947,15 @@ snapshots:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
'@lezer/common': 1.2.3
- '@lezer/css': 1.1.10
+ '@lezer/css': 1.1.11
+
+ '@codemirror/lang-go@6.0.1':
+ dependencies:
+ '@codemirror/autocomplete': 6.18.6
+ '@codemirror/language': 6.11.0
+ '@codemirror/state': 6.5.2
+ '@lezer/common': 1.2.3
+ '@lezer/go': 1.0.0
'@codemirror/lang-html@6.4.9':
dependencies:
@@ -4078,20 +4964,49 @@ snapshots:
'@codemirror/lang-javascript': 6.2.3
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.36.4
+ '@codemirror/view': 6.36.5
'@lezer/common': 1.2.3
- '@lezer/css': 1.1.10
+ '@lezer/css': 1.1.11
'@lezer/html': 1.3.10
+ '@codemirror/lang-java@6.0.1':
+ dependencies:
+ '@codemirror/language': 6.11.0
+ '@lezer/java': 1.1.3
+
'@codemirror/lang-javascript@6.2.3':
dependencies:
'@codemirror/autocomplete': 6.18.6
'@codemirror/language': 6.11.0
- '@codemirror/lint': 6.8.4
+ '@codemirror/lint': 6.8.5
+ '@codemirror/state': 6.5.2
+ '@codemirror/view': 6.36.5
+ '@lezer/common': 1.2.3
+ '@lezer/javascript': 1.5.0
+
+ '@codemirror/lang-json@6.0.1':
+ dependencies:
+ '@codemirror/language': 6.11.0
+ '@lezer/json': 1.0.3
+
+ '@codemirror/lang-less@6.0.2':
+ dependencies:
+ '@codemirror/lang-css': 6.3.1
+ '@codemirror/language': 6.11.0
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+
+ '@codemirror/lang-liquid@6.2.3':
+ dependencies:
+ '@codemirror/autocomplete': 6.18.6
+ '@codemirror/lang-html': 6.4.9
+ '@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.36.4
+ '@codemirror/view': 6.36.5
'@lezer/common': 1.2.3
- '@lezer/javascript': 1.4.21
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
'@codemirror/lang-markdown@6.3.2':
dependencies:
@@ -4099,29 +5014,131 @@ snapshots:
'@codemirror/lang-html': 6.4.9
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.36.4
+ '@codemirror/view': 6.36.5
'@lezer/common': 1.2.3
'@lezer/markdown': 1.4.2
+ '@codemirror/lang-php@6.0.1':
+ dependencies:
+ '@codemirror/lang-html': 6.4.9
+ '@codemirror/language': 6.11.0
+ '@codemirror/state': 6.5.2
+ '@lezer/common': 1.2.3
+ '@lezer/php': 1.0.2
+
+ '@codemirror/lang-python@6.1.7':
+ dependencies:
+ '@codemirror/autocomplete': 6.18.6
+ '@codemirror/language': 6.11.0
+ '@codemirror/state': 6.5.2
+ '@lezer/common': 1.2.3
+ '@lezer/python': 1.1.18
+
+ '@codemirror/lang-rust@6.0.1':
+ dependencies:
+ '@codemirror/language': 6.11.0
+ '@lezer/rust': 1.0.2
+
+ '@codemirror/lang-sass@6.0.2':
+ dependencies:
+ '@codemirror/lang-css': 6.3.1
+ '@codemirror/language': 6.11.0
+ '@codemirror/state': 6.5.2
+ '@lezer/common': 1.2.3
+ '@lezer/sass': 1.0.7
+
+ '@codemirror/lang-sql@6.8.0':
+ dependencies:
+ '@codemirror/autocomplete': 6.18.6
+ '@codemirror/language': 6.11.0
+ '@codemirror/state': 6.5.2
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+
+ '@codemirror/lang-vue@0.1.3':
+ dependencies:
+ '@codemirror/lang-html': 6.4.9
+ '@codemirror/lang-javascript': 6.2.3
+ '@codemirror/language': 6.11.0
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+
+ '@codemirror/lang-wast@6.0.2':
+ dependencies:
+ '@codemirror/language': 6.11.0
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+
+ '@codemirror/lang-xml@6.1.0':
+ dependencies:
+ '@codemirror/autocomplete': 6.18.6
+ '@codemirror/language': 6.11.0
+ '@codemirror/state': 6.5.2
+ '@codemirror/view': 6.36.5
+ '@lezer/common': 1.2.3
+ '@lezer/xml': 1.0.6
+
+ '@codemirror/lang-yaml@6.1.2':
+ dependencies:
+ '@codemirror/autocomplete': 6.18.6
+ '@codemirror/language': 6.11.0
+ '@codemirror/state': 6.5.2
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+ '@lezer/yaml': 1.0.3
+
+ '@codemirror/language-data@6.5.1':
+ dependencies:
+ '@codemirror/lang-angular': 0.1.3
+ '@codemirror/lang-cpp': 6.0.2
+ '@codemirror/lang-css': 6.3.1
+ '@codemirror/lang-go': 6.0.1
+ '@codemirror/lang-html': 6.4.9
+ '@codemirror/lang-java': 6.0.1
+ '@codemirror/lang-javascript': 6.2.3
+ '@codemirror/lang-json': 6.0.1
+ '@codemirror/lang-less': 6.0.2
+ '@codemirror/lang-liquid': 6.2.3
+ '@codemirror/lang-markdown': 6.3.2
+ '@codemirror/lang-php': 6.0.1
+ '@codemirror/lang-python': 6.1.7
+ '@codemirror/lang-rust': 6.0.1
+ '@codemirror/lang-sass': 6.0.2
+ '@codemirror/lang-sql': 6.8.0
+ '@codemirror/lang-vue': 0.1.3
+ '@codemirror/lang-wast': 6.0.2
+ '@codemirror/lang-xml': 6.1.0
+ '@codemirror/lang-yaml': 6.1.2
+ '@codemirror/language': 6.11.0
+ '@codemirror/legacy-modes': 6.5.0
+
'@codemirror/language@6.11.0':
dependencies:
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.36.4
+ '@codemirror/view': 6.36.5
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
style-mod: 4.1.2
- '@codemirror/lint@6.8.4':
+ '@codemirror/legacy-modes@6.5.0':
+ dependencies:
+ '@codemirror/language': 6.11.0
+
+ '@codemirror/lint@6.8.5':
dependencies:
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.36.4
+ '@codemirror/view': 6.36.5
crelt: 1.0.6
'@codemirror/search@6.5.10':
dependencies:
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.36.4
+ '@codemirror/view': 6.36.5
crelt: 1.0.6
'@codemirror/state@6.5.2':
@@ -4132,10 +5149,10 @@ snapshots:
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.36.4
+ '@codemirror/view': 6.36.5
'@lezer/highlight': 1.2.1
- '@codemirror/view@6.36.4':
+ '@codemirror/view@6.36.5':
dependencies:
'@codemirror/state': 6.5.2
style-mod: 4.1.2
@@ -4143,22 +5160,105 @@ snapshots:
'@drizzle-team/brocli@0.10.2': {}
- '@emnapi/core@1.3.1':
+ '@emnapi/core@1.4.3':
dependencies:
- '@emnapi/wasi-threads': 1.0.1
+ '@emnapi/wasi-threads': 1.0.2
tslib: 2.8.1
optional: true
- '@emnapi/runtime@1.3.1':
+ '@emnapi/runtime@1.4.3':
dependencies:
tslib: 2.8.1
optional: true
- '@emnapi/wasi-threads@1.0.1':
+ '@emnapi/wasi-threads@1.0.2':
dependencies:
tslib: 2.8.1
optional: true
+ '@emotion/babel-plugin@11.13.5':
+ dependencies:
+ '@babel/helper-module-imports': 7.25.9
+ '@babel/runtime': 7.27.0
+ '@emotion/hash': 0.9.2
+ '@emotion/memoize': 0.9.0
+ '@emotion/serialize': 1.3.3
+ babel-plugin-macros: 3.1.0
+ convert-source-map: 1.9.0
+ escape-string-regexp: 4.0.0
+ find-root: 1.1.0
+ source-map: 0.5.7
+ stylis: 4.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@emotion/cache@11.14.0':
+ dependencies:
+ '@emotion/memoize': 0.9.0
+ '@emotion/sheet': 1.4.0
+ '@emotion/utils': 1.4.2
+ '@emotion/weak-memoize': 0.4.0
+ stylis: 4.2.0
+
+ '@emotion/hash@0.9.2': {}
+
+ '@emotion/is-prop-valid@1.3.1':
+ dependencies:
+ '@emotion/memoize': 0.9.0
+
+ '@emotion/memoize@0.9.0': {}
+
+ '@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0)':
+ dependencies:
+ '@babel/runtime': 7.27.0
+ '@emotion/babel-plugin': 11.13.5
+ '@emotion/cache': 11.14.0
+ '@emotion/serialize': 1.3.3
+ '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0)
+ '@emotion/utils': 1.4.2
+ '@emotion/weak-memoize': 0.4.0
+ hoist-non-react-statics: 3.3.2
+ react: 19.1.0
+ optionalDependencies:
+ '@types/react': 19.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@emotion/serialize@1.3.3':
+ dependencies:
+ '@emotion/hash': 0.9.2
+ '@emotion/memoize': 0.9.0
+ '@emotion/unitless': 0.10.0
+ '@emotion/utils': 1.4.2
+ csstype: 3.1.3
+
+ '@emotion/sheet@1.4.0': {}
+
+ '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0)':
+ dependencies:
+ '@babel/runtime': 7.27.0
+ '@emotion/babel-plugin': 11.13.5
+ '@emotion/is-prop-valid': 1.3.1
+ '@emotion/react': 11.14.0(@types/react@19.1.2)(react@19.1.0)
+ '@emotion/serialize': 1.3.3
+ '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0)
+ '@emotion/utils': 1.4.2
+ react: 19.1.0
+ optionalDependencies:
+ '@types/react': 19.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@emotion/unitless@0.10.0': {}
+
+ '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.1.0)':
+ dependencies:
+ react: 19.1.0
+
+ '@emotion/utils@1.4.2': {}
+
+ '@emotion/weak-memoize@0.4.0': {}
+
'@esbuild-kit/core-utils@3.3.2':
dependencies:
esbuild: 0.18.20
@@ -4169,224 +5269,155 @@ snapshots:
'@esbuild-kit/core-utils': 3.3.2
get-tsconfig: 4.10.0
- '@esbuild/aix-ppc64@0.19.12':
- optional: true
-
- '@esbuild/aix-ppc64@0.25.1':
+ '@esbuild/aix-ppc64@0.25.2':
optional: true
'@esbuild/android-arm64@0.18.20':
optional: true
- '@esbuild/android-arm64@0.19.12':
- optional: true
-
- '@esbuild/android-arm64@0.25.1':
+ '@esbuild/android-arm64@0.25.2':
optional: true
'@esbuild/android-arm@0.18.20':
optional: true
- '@esbuild/android-arm@0.19.12':
- optional: true
-
- '@esbuild/android-arm@0.25.1':
+ '@esbuild/android-arm@0.25.2':
optional: true
'@esbuild/android-x64@0.18.20':
optional: true
- '@esbuild/android-x64@0.19.12':
- optional: true
-
- '@esbuild/android-x64@0.25.1':
+ '@esbuild/android-x64@0.25.2':
optional: true
'@esbuild/darwin-arm64@0.18.20':
optional: true
- '@esbuild/darwin-arm64@0.19.12':
- optional: true
-
- '@esbuild/darwin-arm64@0.25.1':
+ '@esbuild/darwin-arm64@0.25.2':
optional: true
'@esbuild/darwin-x64@0.18.20':
optional: true
- '@esbuild/darwin-x64@0.19.12':
- optional: true
-
- '@esbuild/darwin-x64@0.25.1':
+ '@esbuild/darwin-x64@0.25.2':
optional: true
'@esbuild/freebsd-arm64@0.18.20':
optional: true
- '@esbuild/freebsd-arm64@0.19.12':
- optional: true
-
- '@esbuild/freebsd-arm64@0.25.1':
+ '@esbuild/freebsd-arm64@0.25.2':
optional: true
'@esbuild/freebsd-x64@0.18.20':
optional: true
- '@esbuild/freebsd-x64@0.19.12':
- optional: true
-
- '@esbuild/freebsd-x64@0.25.1':
+ '@esbuild/freebsd-x64@0.25.2':
optional: true
'@esbuild/linux-arm64@0.18.20':
optional: true
- '@esbuild/linux-arm64@0.19.12':
- optional: true
-
- '@esbuild/linux-arm64@0.25.1':
+ '@esbuild/linux-arm64@0.25.2':
optional: true
'@esbuild/linux-arm@0.18.20':
optional: true
- '@esbuild/linux-arm@0.19.12':
- optional: true
-
- '@esbuild/linux-arm@0.25.1':
+ '@esbuild/linux-arm@0.25.2':
optional: true
'@esbuild/linux-ia32@0.18.20':
optional: true
- '@esbuild/linux-ia32@0.19.12':
- optional: true
-
- '@esbuild/linux-ia32@0.25.1':
+ '@esbuild/linux-ia32@0.25.2':
optional: true
'@esbuild/linux-loong64@0.18.20':
optional: true
- '@esbuild/linux-loong64@0.19.12':
- optional: true
-
- '@esbuild/linux-loong64@0.25.1':
+ '@esbuild/linux-loong64@0.25.2':
optional: true
'@esbuild/linux-mips64el@0.18.20':
optional: true
- '@esbuild/linux-mips64el@0.19.12':
- optional: true
-
- '@esbuild/linux-mips64el@0.25.1':
+ '@esbuild/linux-mips64el@0.25.2':
optional: true
'@esbuild/linux-ppc64@0.18.20':
optional: true
- '@esbuild/linux-ppc64@0.19.12':
- optional: true
-
- '@esbuild/linux-ppc64@0.25.1':
+ '@esbuild/linux-ppc64@0.25.2':
optional: true
'@esbuild/linux-riscv64@0.18.20':
optional: true
- '@esbuild/linux-riscv64@0.19.12':
- optional: true
-
- '@esbuild/linux-riscv64@0.25.1':
+ '@esbuild/linux-riscv64@0.25.2':
optional: true
'@esbuild/linux-s390x@0.18.20':
optional: true
- '@esbuild/linux-s390x@0.19.12':
- optional: true
-
- '@esbuild/linux-s390x@0.25.1':
+ '@esbuild/linux-s390x@0.25.2':
optional: true
'@esbuild/linux-x64@0.18.20':
optional: true
- '@esbuild/linux-x64@0.19.12':
- optional: true
-
- '@esbuild/linux-x64@0.25.1':
+ '@esbuild/linux-x64@0.25.2':
optional: true
- '@esbuild/netbsd-arm64@0.25.1':
+ '@esbuild/netbsd-arm64@0.25.2':
optional: true
'@esbuild/netbsd-x64@0.18.20':
optional: true
- '@esbuild/netbsd-x64@0.19.12':
+ '@esbuild/netbsd-x64@0.25.2':
optional: true
- '@esbuild/netbsd-x64@0.25.1':
- optional: true
-
- '@esbuild/openbsd-arm64@0.25.1':
+ '@esbuild/openbsd-arm64@0.25.2':
optional: true
'@esbuild/openbsd-x64@0.18.20':
optional: true
- '@esbuild/openbsd-x64@0.19.12':
- optional: true
-
- '@esbuild/openbsd-x64@0.25.1':
+ '@esbuild/openbsd-x64@0.25.2':
optional: true
'@esbuild/sunos-x64@0.18.20':
optional: true
- '@esbuild/sunos-x64@0.19.12':
- optional: true
-
- '@esbuild/sunos-x64@0.25.1':
+ '@esbuild/sunos-x64@0.25.2':
optional: true
'@esbuild/win32-arm64@0.18.20':
optional: true
- '@esbuild/win32-arm64@0.19.12':
- optional: true
-
- '@esbuild/win32-arm64@0.25.1':
+ '@esbuild/win32-arm64@0.25.2':
optional: true
'@esbuild/win32-ia32@0.18.20':
optional: true
- '@esbuild/win32-ia32@0.19.12':
- optional: true
-
- '@esbuild/win32-ia32@0.25.1':
+ '@esbuild/win32-ia32@0.25.2':
optional: true
'@esbuild/win32-x64@0.18.20':
optional: true
- '@esbuild/win32-x64@0.19.12':
- optional: true
-
- '@esbuild/win32-x64@0.25.1':
+ '@esbuild/win32-x64@0.25.2':
optional: true
- '@eslint-community/eslint-utils@4.5.1(eslint@9.23.0(jiti@2.4.2))':
+ '@eslint-community/eslint-utils@4.6.1(eslint@9.24.0(jiti@2.4.2))':
dependencies:
- eslint: 9.23.0(jiti@2.4.2)
+ eslint: 9.24.0(jiti@2.4.2)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {}
- '@eslint/config-array@0.19.2':
+ '@eslint/config-array@0.20.0':
dependencies:
'@eslint/object-schema': 2.1.6
debug: 4.4.0
@@ -4394,12 +5425,16 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@eslint/config-helpers@0.2.0': {}
+ '@eslint/config-helpers@0.2.1': {}
'@eslint/core@0.12.0':
dependencies:
'@types/json-schema': 7.0.15
+ '@eslint/core@0.13.0':
+ dependencies:
+ '@types/json-schema': 7.0.15
+
'@eslint/eslintrc@3.3.1':
dependencies:
ajv: 6.12.6
@@ -4414,13 +5449,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@eslint/js@9.23.0': {}
+ '@eslint/js@9.24.0': {}
'@eslint/object-schema@2.1.6': {}
- '@eslint/plugin-kit@0.2.7':
+ '@eslint/plugin-kit@0.2.8':
dependencies:
- '@eslint/core': 0.12.0
+ '@eslint/core': 0.13.0
levn: 0.4.1
'@floating-ui/core@1.6.9':
@@ -4432,14 +5467,18 @@ snapshots:
'@floating-ui/core': 1.6.9
'@floating-ui/utils': 0.2.9
- '@floating-ui/react-dom@2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ '@floating-ui/react-dom@2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
'@floating-ui/dom': 1.6.13
- react: 19.0.0
- react-dom: 19.0.0(react@19.0.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
'@floating-ui/utils@0.2.9': {}
+ '@heroicons/react@2.2.0(react@19.1.0)':
+ dependencies:
+ react: 19.1.0
+
'@humanfs/core@0.19.1': {}
'@humanfs/node@0.16.6':
@@ -4453,84 +5492,116 @@ snapshots:
'@humanwhocodes/retry@0.4.2': {}
- '@img/sharp-darwin-arm64@0.33.5':
+ '@img/sharp-darwin-arm64@0.34.1':
optionalDependencies:
- '@img/sharp-libvips-darwin-arm64': 1.0.4
+ '@img/sharp-libvips-darwin-arm64': 1.1.0
optional: true
- '@img/sharp-darwin-x64@0.33.5':
+ '@img/sharp-darwin-x64@0.34.1':
optionalDependencies:
- '@img/sharp-libvips-darwin-x64': 1.0.4
+ '@img/sharp-libvips-darwin-x64': 1.1.0
+ optional: true
+
+ '@img/sharp-libvips-darwin-arm64@1.1.0':
optional: true
- '@img/sharp-libvips-darwin-arm64@1.0.4':
+ '@img/sharp-libvips-darwin-x64@1.1.0':
optional: true
- '@img/sharp-libvips-darwin-x64@1.0.4':
+ '@img/sharp-libvips-linux-arm64@1.1.0':
optional: true
- '@img/sharp-libvips-linux-arm64@1.0.4':
+ '@img/sharp-libvips-linux-arm@1.1.0':
optional: true
- '@img/sharp-libvips-linux-arm@1.0.5':
+ '@img/sharp-libvips-linux-ppc64@1.1.0':
optional: true
- '@img/sharp-libvips-linux-s390x@1.0.4':
+ '@img/sharp-libvips-linux-s390x@1.1.0':
optional: true
- '@img/sharp-libvips-linux-x64@1.0.4':
+ '@img/sharp-libvips-linux-x64@1.1.0':
optional: true
- '@img/sharp-libvips-linuxmusl-arm64@1.0.4':
+ '@img/sharp-libvips-linuxmusl-arm64@1.1.0':
optional: true
- '@img/sharp-libvips-linuxmusl-x64@1.0.4':
+ '@img/sharp-libvips-linuxmusl-x64@1.1.0':
optional: true
- '@img/sharp-linux-arm64@0.33.5':
+ '@img/sharp-linux-arm64@0.34.1':
optionalDependencies:
- '@img/sharp-libvips-linux-arm64': 1.0.4
+ '@img/sharp-libvips-linux-arm64': 1.1.0
optional: true
- '@img/sharp-linux-arm@0.33.5':
+ '@img/sharp-linux-arm@0.34.1':
optionalDependencies:
- '@img/sharp-libvips-linux-arm': 1.0.5
+ '@img/sharp-libvips-linux-arm': 1.1.0
optional: true
- '@img/sharp-linux-s390x@0.33.5':
+ '@img/sharp-linux-s390x@0.34.1':
optionalDependencies:
- '@img/sharp-libvips-linux-s390x': 1.0.4
+ '@img/sharp-libvips-linux-s390x': 1.1.0
optional: true
- '@img/sharp-linux-x64@0.33.5':
+ '@img/sharp-linux-x64@0.34.1':
optionalDependencies:
- '@img/sharp-libvips-linux-x64': 1.0.4
+ '@img/sharp-libvips-linux-x64': 1.1.0
optional: true
- '@img/sharp-linuxmusl-arm64@0.33.5':
+ '@img/sharp-linuxmusl-arm64@0.34.1':
optionalDependencies:
- '@img/sharp-libvips-linuxmusl-arm64': 1.0.4
+ '@img/sharp-libvips-linuxmusl-arm64': 1.1.0
optional: true
- '@img/sharp-linuxmusl-x64@0.33.5':
+ '@img/sharp-linuxmusl-x64@0.34.1':
optionalDependencies:
- '@img/sharp-libvips-linuxmusl-x64': 1.0.4
+ '@img/sharp-libvips-linuxmusl-x64': 1.1.0
optional: true
- '@img/sharp-wasm32@0.33.5':
+ '@img/sharp-wasm32@0.34.1':
dependencies:
- '@emnapi/runtime': 1.3.1
+ '@emnapi/runtime': 1.4.3
optional: true
- '@img/sharp-win32-ia32@0.33.5':
+ '@img/sharp-win32-ia32@0.34.1':
optional: true
- '@img/sharp-win32-x64@0.33.5':
+ '@img/sharp-win32-x64@0.34.1':
optional: true
+ '@jridgewell/gen-mapping@0.3.8':
+ dependencies:
+ '@jridgewell/set-array': 1.2.1
+ '@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/trace-mapping': 0.3.25
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/set-array@1.2.1': {}
+
+ '@jridgewell/sourcemap-codec@1.5.0': {}
+
+ '@jridgewell/trace-mapping@0.3.25':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.0
+
'@lezer/common@1.2.3': {}
- '@lezer/css@1.1.10':
+ '@lezer/cpp@1.1.3':
+ dependencies:
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+
+ '@lezer/css@1.1.11':
+ dependencies:
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+
+ '@lezer/go@1.0.0':
dependencies:
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
@@ -4546,7 +5617,19 @@ snapshots:
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
- '@lezer/javascript@1.4.21':
+ '@lezer/java@1.1.3':
+ dependencies:
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+
+ '@lezer/javascript@1.5.0':
+ dependencies:
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+
+ '@lezer/json@1.0.3':
dependencies:
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
@@ -4561,6 +5644,42 @@ snapshots:
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
+ '@lezer/php@1.0.2':
+ dependencies:
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+
+ '@lezer/python@1.1.18':
+ dependencies:
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+
+ '@lezer/rust@1.0.2':
+ dependencies:
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+
+ '@lezer/sass@1.0.7':
+ dependencies:
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+
+ '@lezer/xml@1.0.6':
+ dependencies:
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+
+ '@lezer/yaml@1.0.3':
+ dependencies:
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+
'@mapbox/node-pre-gyp@1.0.11':
dependencies:
detect-libc: 2.0.3
@@ -4578,45 +5697,132 @@ snapshots:
'@marijn/find-cluster-break@1.0.2': {}
- '@napi-rs/wasm-runtime@0.2.7':
+ '@monaco-editor/loader@1.5.0':
dependencies:
- '@emnapi/core': 1.3.1
- '@emnapi/runtime': 1.3.1
+ state-local: 1.0.7
+
+ '@monaco-editor/react@4.7.0(monaco-editor@0.52.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@monaco-editor/loader': 1.5.0
+ monaco-editor: 0.52.2
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+
+ '@mui/core-downloads-tracker@5.17.1': {}
+
+ '@mui/material@5.17.1(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@babel/runtime': 7.27.0
+ '@mui/core-downloads-tracker': 5.17.1
+ '@mui/system': 5.17.1(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0)
+ '@mui/types': 7.2.24(@types/react@19.1.2)
+ '@mui/utils': 5.17.1(@types/react@19.1.2)(react@19.1.0)
+ '@popperjs/core': 2.11.8
+ '@types/react-transition-group': 4.4.12(@types/react@19.1.2)
+ clsx: 2.1.1
+ csstype: 3.1.3
+ prop-types: 15.8.1
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ react-is: 19.1.0
+ react-transition-group: 4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ optionalDependencies:
+ '@emotion/react': 11.14.0(@types/react@19.1.2)(react@19.1.0)
+ '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0)
+ '@types/react': 19.1.2
+
+ '@mui/private-theming@5.17.1(@types/react@19.1.2)(react@19.1.0)':
+ dependencies:
+ '@babel/runtime': 7.27.0
+ '@mui/utils': 5.17.1(@types/react@19.1.2)(react@19.1.0)
+ prop-types: 15.8.1
+ react: 19.1.0
+ optionalDependencies:
+ '@types/react': 19.1.2
+
+ '@mui/styled-engine@5.16.14(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@babel/runtime': 7.27.0
+ '@emotion/cache': 11.14.0
+ csstype: 3.1.3
+ prop-types: 15.8.1
+ react: 19.1.0
+ optionalDependencies:
+ '@emotion/react': 11.14.0(@types/react@19.1.2)(react@19.1.0)
+ '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0)
+
+ '@mui/system@5.17.1(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0)':
+ dependencies:
+ '@babel/runtime': 7.27.0
+ '@mui/private-theming': 5.17.1(@types/react@19.1.2)(react@19.1.0)
+ '@mui/styled-engine': 5.16.14(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(react@19.1.0)
+ '@mui/types': 7.2.24(@types/react@19.1.2)
+ '@mui/utils': 5.17.1(@types/react@19.1.2)(react@19.1.0)
+ clsx: 2.1.1
+ csstype: 3.1.3
+ prop-types: 15.8.1
+ react: 19.1.0
+ optionalDependencies:
+ '@emotion/react': 11.14.0(@types/react@19.1.2)(react@19.1.0)
+ '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0)
+ '@types/react': 19.1.2
+
+ '@mui/types@7.2.24(@types/react@19.1.2)':
+ optionalDependencies:
+ '@types/react': 19.1.2
+
+ '@mui/utils@5.17.1(@types/react@19.1.2)(react@19.1.0)':
+ dependencies:
+ '@babel/runtime': 7.27.0
+ '@mui/types': 7.2.24(@types/react@19.1.2)
+ '@types/prop-types': 15.7.14
+ clsx: 2.1.1
+ prop-types: 15.8.1
+ react: 19.1.0
+ react-is: 19.1.0
+ optionalDependencies:
+ '@types/react': 19.1.2
+
+ '@napi-rs/wasm-runtime@0.2.9':
+ dependencies:
+ '@emnapi/core': 1.4.3
+ '@emnapi/runtime': 1.4.3
'@tybys/wasm-util': 0.9.0
optional: true
- '@neondatabase/serverless@0.10.4':
+ '@neondatabase/serverless@1.0.0':
dependencies:
- '@types/pg': 8.11.6
+ '@types/node': 22.14.1
+ '@types/pg': 8.11.13
- '@next/env@15.2.3': {}
+ '@next/env@15.3.1': {}
- '@next/eslint-plugin-next@15.2.3':
+ '@next/eslint-plugin-next@15.3.1':
dependencies:
fast-glob: 3.3.1
- '@next/swc-darwin-arm64@15.2.3':
+ '@next/swc-darwin-arm64@15.3.1':
optional: true
- '@next/swc-darwin-x64@15.2.3':
+ '@next/swc-darwin-x64@15.3.1':
optional: true
- '@next/swc-linux-arm64-gnu@15.2.3':
+ '@next/swc-linux-arm64-gnu@15.3.1':
optional: true
- '@next/swc-linux-arm64-musl@15.2.3':
+ '@next/swc-linux-arm64-musl@15.3.1':
optional: true
- '@next/swc-linux-x64-gnu@15.2.3':
+ '@next/swc-linux-x64-gnu@15.3.1':
optional: true
- '@next/swc-linux-x64-musl@15.2.3':
+ '@next/swc-linux-x64-musl@15.3.1':
optional: true
- '@next/swc-win32-arm64-msvc@15.2.3':
+ '@next/swc-win32-arm64-msvc@15.3.1':
optional: true
- '@next/swc-win32-x64-msvc@15.2.3':
+ '@next/swc-win32-x64-msvc@15.3.1':
optional: true
'@nodelib/fs.scandir@2.1.5':
@@ -4695,237 +5901,413 @@ snapshots:
'@parcel/watcher-win32-ia32': 2.5.1
'@parcel/watcher-win32-x64': 2.5.1
- '@petamoriken/float16@3.9.2': {}
+ '@popperjs/core@2.11.8': {}
+
+ '@radix-ui/number@1.1.1': {}
- '@radix-ui/primitive@1.1.1': {}
+ '@radix-ui/primitive@1.1.2': {}
- '@radix-ui/react-arrow@1.1.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ '@radix-ui/react-arrow@1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
- '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- react: 19.0.0
- react-dom: 19.0.0(react@19.0.0)
+ '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
optionalDependencies:
- '@types/react': 19.0.12
- '@types/react-dom': 19.0.4(@types/react@19.0.12)
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
- '@radix-ui/react-collection@1.1.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ '@radix-ui/react-collection@1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
- '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.12)(react@19.0.0)
- '@radix-ui/react-context': 1.1.1(@types/react@19.0.12)(react@19.0.0)
- '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@radix-ui/react-slot': 1.1.2(@types/react@19.0.12)(react@19.0.0)
- react: 19.0.0
- react-dom: 19.0.0(react@19.0.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
optionalDependencies:
- '@types/react': 19.0.12
- '@types/react-dom': 19.0.4(@types/react@19.0.12)
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
- '@radix-ui/react-compose-refs@1.1.1(@types/react@19.0.12)(react@19.0.0)':
+ '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.2)(react@19.1.0)':
dependencies:
- react: 19.0.0
+ react: 19.1.0
optionalDependencies:
- '@types/react': 19.0.12
+ '@types/react': 19.1.2
- '@radix-ui/react-context@1.1.1(@types/react@19.0.12)(react@19.0.0)':
+ '@radix-ui/react-context@1.1.2(@types/react@19.1.2)(react@19.1.0)':
dependencies:
- react: 19.0.0
+ react: 19.1.0
optionalDependencies:
- '@types/react': 19.0.12
+ '@types/react': 19.1.2
+
+ '@radix-ui/react-dialog@1.1.10(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.2
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-dismissable-layer': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-focus-scope': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-portal': 1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-presence': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0)
+ aria-hidden: 1.2.4
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ react-remove-scroll: 2.6.3(@types/react@19.1.2)(react@19.1.0)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-direction@1.1.1(@types/react@19.1.2)(react@19.1.0)':
+ dependencies:
+ react: 19.1.0
+ optionalDependencies:
+ '@types/react': 19.1.2
+
+ '@radix-ui/react-dismissable-layer@1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.2
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-dismissable-layer@1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.2
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
- '@radix-ui/react-direction@1.1.0(@types/react@19.0.12)(react@19.0.0)':
+ '@radix-ui/react-focus-guards@1.1.2(@types/react@19.1.2)(react@19.1.0)':
dependencies:
- react: 19.0.0
+ react: 19.1.0
optionalDependencies:
- '@types/react': 19.0.12
+ '@types/react': 19.1.2
- '@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ '@radix-ui/react-focus-scope@1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
- '@radix-ui/primitive': 1.1.1
- '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.12)(react@19.0.0)
- '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(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.12)(react@19.0.0)
- '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.0.12)(react@19.0.0)
- react: 19.0.0
- react-dom: 19.0.0(react@19.0.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
optionalDependencies:
- '@types/react': 19.0.12
- '@types/react-dom': 19.0.4(@types/react@19.0.12)
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
- '@radix-ui/react-focus-guards@1.1.1(@types/react@19.0.12)(react@19.0.0)':
+ '@radix-ui/react-focus-scope@1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
- react: 19.0.0
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
optionalDependencies:
- '@types/react': 19.0.12
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-icons@1.3.2(react@19.1.0)':
+ dependencies:
+ react: 19.1.0
- '@radix-ui/react-focus-scope@1.1.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ '@radix-ui/react-id@1.1.1(@types/react@19.1.2)(react@19.1.0)':
dependencies:
- '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.12)(react@19.0.0)
- '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(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.12)(react@19.0.0)
- react: 19.0.0
- react-dom: 19.0.0(react@19.0.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
optionalDependencies:
- '@types/react': 19.0.12
- '@types/react-dom': 19.0.4(@types/react@19.0.12)
+ '@types/react': 19.1.2
- '@radix-ui/react-id@1.1.0(@types/react@19.0.12)(react@19.0.0)':
+ '@radix-ui/react-label@2.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
- '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.12)(react@19.0.0)
- react: 19.0.0
+ '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
optionalDependencies:
- '@types/react': 19.0.12
-
- '@radix-ui/react-popover@1.1.6(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
- dependencies:
- '@radix-ui/primitive': 1.1.1
- '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.12)(react@19.0.0)
- '@radix-ui/react-context': 1.1.1(@types/react@19.0.12)(react@19.0.0)
- '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.0.12)(react@19.0.0)
- '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@radix-ui/react-id': 1.1.0(@types/react@19.0.12)(react@19.0.0)
- '@radix-ui/react-popper': 1.2.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@radix-ui/react-portal': 1.1.4(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(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.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@radix-ui/react-slot': 1.1.2(@types/react@19.0.12)(react@19.0.0)
- '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.12)(react@19.0.0)
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-popover@1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.2
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-dismissable-layer': 1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-focus-scope': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-popper': 1.2.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-portal': 1.1.5(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-presence': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-controllable-state': 1.1.1(@types/react@19.1.2)(react@19.1.0)
aria-hidden: 1.2.4
- react: 19.0.0
- react-dom: 19.0.0(react@19.0.0)
- react-remove-scroll: 2.6.3(@types/react@19.0.12)(react@19.0.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ react-remove-scroll: 2.6.3(@types/react@19.1.2)(react@19.1.0)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-popper@1.2.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@floating-ui/react-dom': 2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-arrow': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/rect': 1.1.1
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-portal@1.1.5(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-portal@1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-presence@1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
optionalDependencies:
- '@types/react': 19.0.12
- '@types/react-dom': 19.0.4(@types/react@19.0.12)
-
- '@radix-ui/react-popper@1.2.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
- dependencies:
- '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@radix-ui/react-arrow': 1.1.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.12)(react@19.0.0)
- '@radix-ui/react-context': 1.1.1(@types/react@19.0.12)(react@19.0.0)
- '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(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.12)(react@19.0.0)
- '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.12)(react@19.0.0)
- '@radix-ui/react-use-rect': 1.1.0(@types/react@19.0.12)(react@19.0.0)
- '@radix-ui/react-use-size': 1.1.0(@types/react@19.0.12)(react@19.0.0)
- '@radix-ui/rect': 1.1.0
- react: 19.0.0
- react-dom: 19.0.0(react@19.0.0)
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-primitive@2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
optionalDependencies:
- '@types/react': 19.0.12
- '@types/react-dom': 19.0.4(@types/react@19.0.12)
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
- '@radix-ui/react-portal@1.1.4(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ '@radix-ui/react-primitive@2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
- '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.12)(react@19.0.0)
- react: 19.0.0
- react-dom: 19.0.0(react@19.0.0)
+ '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-roving-focus@1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.2
+ '@radix-ui/react-collection': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-controllable-state': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
optionalDependencies:
- '@types/react': 19.0.12
- '@types/react-dom': 19.0.4(@types/react@19.0.12)
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-scroll-area@1.2.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@radix-ui/number': 1.1.1
+ '@radix-ui/primitive': 1.1.2
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-presence': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-select@2.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@radix-ui/number': 1.1.1
+ '@radix-ui/primitive': 1.1.2
+ '@radix-ui/react-collection': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-dismissable-layer': 1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-focus-scope': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-popper': 1.2.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-portal': 1.1.5(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-controllable-state': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-visually-hidden': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ aria-hidden: 1.2.4
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ react-remove-scroll: 2.6.3(@types/react@19.1.2)(react@19.1.0)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
- '@radix-ui/react-presence@1.1.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ '@radix-ui/react-slot@1.2.0(@types/react@19.1.2)(react@19.1.0)':
dependencies:
- '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.12)(react@19.0.0)
- '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.12)(react@19.0.0)
- react: 19.0.0
- react-dom: 19.0.0(react@19.0.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
+ optionalDependencies:
+ '@types/react': 19.1.2
+
+ '@radix-ui/react-tabs@1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.2
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-presence': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-roving-focus': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-use-controllable-state': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
optionalDependencies:
- '@types/react': 19.0.12
- '@types/react-dom': 19.0.4(@types/react@19.0.12)
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-tooltip@1.2.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.2
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-dismissable-layer': 1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-popper': 1.2.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-portal': 1.1.5(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-presence': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-controllable-state': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-visually-hidden': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
- '@radix-ui/react-primitive@2.0.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.2)(react@19.1.0)':
dependencies:
- '@radix-ui/react-slot': 1.1.2(@types/react@19.0.12)(react@19.0.0)
- react: 19.0.0
- react-dom: 19.0.0(react@19.0.0)
+ react: 19.1.0
optionalDependencies:
- '@types/react': 19.0.12
- '@types/react-dom': 19.0.4(@types/react@19.0.12)
-
- '@radix-ui/react-roving-focus@1.1.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
- dependencies:
- '@radix-ui/primitive': 1.1.1
- '@radix-ui/react-collection': 1.1.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.12)(react@19.0.0)
- '@radix-ui/react-context': 1.1.1(@types/react@19.0.12)(react@19.0.0)
- '@radix-ui/react-direction': 1.1.0(@types/react@19.0.12)(react@19.0.0)
- '@radix-ui/react-id': 1.1.0(@types/react@19.0.12)(react@19.0.0)
- '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(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.12)(react@19.0.0)
- '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.12)(react@19.0.0)
- react: 19.0.0
- react-dom: 19.0.0(react@19.0.0)
+ '@types/react': 19.1.2
+
+ '@radix-ui/react-use-controllable-state@1.1.1(@types/react@19.1.2)(react@19.1.0)':
+ dependencies:
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
optionalDependencies:
- '@types/react': 19.0.12
- '@types/react-dom': 19.0.4(@types/react@19.0.12)
+ '@types/react': 19.1.2
- '@radix-ui/react-slot@1.1.2(@types/react@19.0.12)(react@19.0.0)':
+ '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.2)(react@19.1.0)':
dependencies:
- '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.12)(react@19.0.0)
- react: 19.0.0
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
optionalDependencies:
- '@types/react': 19.0.12
-
- '@radix-ui/react-tabs@1.1.3(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(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.12)(react@19.0.0)
- '@radix-ui/react-direction': 1.1.0(@types/react@19.0.12)(react@19.0.0)
- '@radix-ui/react-id': 1.1.0(@types/react@19.0.12)(react@19.0.0)
- '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(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.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.12)(react@19.0.0)
- react: 19.0.0
- react-dom: 19.0.0(react@19.0.0)
+ '@types/react': 19.1.2
+
+ '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.2)(react@19.1.0)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
optionalDependencies:
- '@types/react': 19.0.12
- '@types/react-dom': 19.0.4(@types/react@19.0.12)
+ '@types/react': 19.1.2
- '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.0.12)(react@19.0.0)':
+ '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.2)(react@19.1.0)':
dependencies:
- react: 19.0.0
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
optionalDependencies:
- '@types/react': 19.0.12
+ '@types/react': 19.1.2
- '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.0.12)(react@19.0.0)':
+ '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.2)(react@19.1.0)':
dependencies:
- '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.12)(react@19.0.0)
- react: 19.0.0
+ react: 19.1.0
optionalDependencies:
- '@types/react': 19.0.12
+ '@types/react': 19.1.2
- '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.0.12)(react@19.0.0)':
+ '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.2)(react@19.1.0)':
dependencies:
- '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.12)(react@19.0.0)
- react: 19.0.0
+ react: 19.1.0
optionalDependencies:
- '@types/react': 19.0.12
+ '@types/react': 19.1.2
- '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.0.12)(react@19.0.0)':
+ '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.2)(react@19.1.0)':
dependencies:
- react: 19.0.0
+ '@radix-ui/rect': 1.1.1
+ react: 19.1.0
optionalDependencies:
- '@types/react': 19.0.12
+ '@types/react': 19.1.2
- '@radix-ui/react-use-rect@1.1.0(@types/react@19.0.12)(react@19.0.0)':
+ '@radix-ui/react-use-size@1.1.1(@types/react@19.1.2)(react@19.1.0)':
dependencies:
- '@radix-ui/rect': 1.1.0
- react: 19.0.0
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
optionalDependencies:
- '@types/react': 19.0.12
+ '@types/react': 19.1.2
- '@radix-ui/react-use-size@1.1.0(@types/react@19.0.12)(react@19.0.0)':
+ '@radix-ui/react-visually-hidden@1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
- '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.12)(react@19.0.0)
- react: 19.0.0
+ '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
optionalDependencies:
- '@types/react': 19.0.12
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
- '@radix-ui/rect@1.1.0': {}
+ '@radix-ui/rect@1.1.1': {}
'@rtsao/scc@1.1.0': {}
@@ -4940,133 +6322,184 @@ snapshots:
node-fetch: 3.3.2
ora: 6.3.1
prompts: 2.4.2
- zod: 3.24.2
+ zod: 3.24.3
'@sindresorhus/is@4.6.0': {}
+ '@stoplight/json-schema-sampler@0.3.0':
+ dependencies:
+ '@types/json-schema': 7.0.15
+ json-pointer: 0.6.2
+
'@swc/counter@0.1.3': {}
'@swc/helpers@0.5.15':
dependencies:
tslib: 2.8.1
- '@tailwindcss/cli@4.0.15':
+ '@t3-oss/env-core@0.12.0(typescript@5.8.3)(zod@3.24.3)':
+ optionalDependencies:
+ typescript: 5.8.3
+ zod: 3.24.3
+
+ '@t3-oss/env-nextjs@0.12.0(typescript@5.8.3)(zod@3.24.3)':
+ dependencies:
+ '@t3-oss/env-core': 0.12.0(typescript@5.8.3)(zod@3.24.3)
+ optionalDependencies:
+ typescript: 5.8.3
+ zod: 3.24.3
+
+ '@tailwindcss/cli@4.1.4':
dependencies:
'@parcel/watcher': 2.5.1
- '@tailwindcss/node': 4.0.15
- '@tailwindcss/oxide': 4.0.15
+ '@tailwindcss/node': 4.1.4
+ '@tailwindcss/oxide': 4.1.4
enhanced-resolve: 5.18.1
- lightningcss: 1.29.2
mri: 1.2.0
picocolors: 1.1.1
- tailwindcss: 4.0.15
+ tailwindcss: 4.1.4
- '@tailwindcss/node@4.0.15':
+ '@tailwindcss/node@4.1.4':
dependencies:
enhanced-resolve: 5.18.1
jiti: 2.4.2
- tailwindcss: 4.0.15
+ lightningcss: 1.29.2
+ tailwindcss: 4.1.4
+
+ '@tailwindcss/oxide-android-arm64@4.1.4':
+ optional: true
- '@tailwindcss/oxide-android-arm64@4.0.15':
+ '@tailwindcss/oxide-darwin-arm64@4.1.4':
optional: true
- '@tailwindcss/oxide-darwin-arm64@4.0.15':
+ '@tailwindcss/oxide-darwin-x64@4.1.4':
optional: true
- '@tailwindcss/oxide-darwin-x64@4.0.15':
+ '@tailwindcss/oxide-freebsd-x64@4.1.4':
optional: true
- '@tailwindcss/oxide-freebsd-x64@4.0.15':
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.4':
optional: true
- '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.15':
+ '@tailwindcss/oxide-linux-arm64-gnu@4.1.4':
optional: true
- '@tailwindcss/oxide-linux-arm64-gnu@4.0.15':
+ '@tailwindcss/oxide-linux-arm64-musl@4.1.4':
optional: true
- '@tailwindcss/oxide-linux-arm64-musl@4.0.15':
+ '@tailwindcss/oxide-linux-x64-gnu@4.1.4':
optional: true
- '@tailwindcss/oxide-linux-x64-gnu@4.0.15':
+ '@tailwindcss/oxide-linux-x64-musl@4.1.4':
optional: true
- '@tailwindcss/oxide-linux-x64-musl@4.0.15':
+ '@tailwindcss/oxide-wasm32-wasi@4.1.4':
optional: true
- '@tailwindcss/oxide-win32-arm64-msvc@4.0.15':
+ '@tailwindcss/oxide-win32-arm64-msvc@4.1.4':
optional: true
- '@tailwindcss/oxide-win32-x64-msvc@4.0.15':
+ '@tailwindcss/oxide-win32-x64-msvc@4.1.4':
optional: true
- '@tailwindcss/oxide@4.0.15':
+ '@tailwindcss/oxide@4.1.4':
optionalDependencies:
- '@tailwindcss/oxide-android-arm64': 4.0.15
- '@tailwindcss/oxide-darwin-arm64': 4.0.15
- '@tailwindcss/oxide-darwin-x64': 4.0.15
- '@tailwindcss/oxide-freebsd-x64': 4.0.15
- '@tailwindcss/oxide-linux-arm-gnueabihf': 4.0.15
- '@tailwindcss/oxide-linux-arm64-gnu': 4.0.15
- '@tailwindcss/oxide-linux-arm64-musl': 4.0.15
- '@tailwindcss/oxide-linux-x64-gnu': 4.0.15
- '@tailwindcss/oxide-linux-x64-musl': 4.0.15
- '@tailwindcss/oxide-win32-arm64-msvc': 4.0.15
- '@tailwindcss/oxide-win32-x64-msvc': 4.0.15
-
- '@tailwindcss/postcss@4.0.15':
+ '@tailwindcss/oxide-android-arm64': 4.1.4
+ '@tailwindcss/oxide-darwin-arm64': 4.1.4
+ '@tailwindcss/oxide-darwin-x64': 4.1.4
+ '@tailwindcss/oxide-freebsd-x64': 4.1.4
+ '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.4
+ '@tailwindcss/oxide-linux-arm64-gnu': 4.1.4
+ '@tailwindcss/oxide-linux-arm64-musl': 4.1.4
+ '@tailwindcss/oxide-linux-x64-gnu': 4.1.4
+ '@tailwindcss/oxide-linux-x64-musl': 4.1.4
+ '@tailwindcss/oxide-wasm32-wasi': 4.1.4
+ '@tailwindcss/oxide-win32-arm64-msvc': 4.1.4
+ '@tailwindcss/oxide-win32-x64-msvc': 4.1.4
+
+ '@tailwindcss/postcss@4.1.4':
dependencies:
'@alloc/quick-lru': 5.2.0
- '@tailwindcss/node': 4.0.15
- '@tailwindcss/oxide': 4.0.15
- lightningcss: 1.29.2
+ '@tailwindcss/node': 4.1.4
+ '@tailwindcss/oxide': 4.1.4
postcss: 8.5.3
- tailwindcss: 4.0.15
+ tailwindcss: 4.1.4
- '@tailwindcss/typography@0.5.16(tailwindcss@4.0.15)':
+ '@tailwindcss/typography@0.5.16(tailwindcss@4.1.4)':
dependencies:
lodash.castarray: 4.4.0
lodash.isplainobject: 4.0.6
lodash.merge: 4.6.2
postcss-selector-parser: 6.0.10
- tailwindcss: 4.0.15
+ tailwindcss: 4.1.4
+
+ '@tanstack/query-core@5.74.4': {}
+
+ '@tanstack/query-devtools@5.73.3': {}
- '@tanstack/query-core@5.69.0': {}
+ '@tanstack/react-query-devtools@5.74.4(@tanstack/react-query@5.74.4(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@tanstack/query-devtools': 5.73.3
+ '@tanstack/react-query': 5.74.4(react@19.1.0)
+ react: 19.1.0
+
+ '@tanstack/react-query@5.74.4(react@19.1.0)':
+ dependencies:
+ '@tanstack/query-core': 5.74.4
+ react: 19.1.0
- '@tanstack/react-query@5.69.0(react@19.0.0)':
+ '@textea/json-viewer@3.5.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@mui/material@5.17.1(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
- '@tanstack/query-core': 5.69.0
- react: 19.0.0
+ '@emotion/react': 11.14.0(@types/react@19.1.2)(react@19.1.0)
+ '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0)
+ '@mui/material': 5.17.1(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ clsx: 2.1.1
+ copy-to-clipboard: 3.3.3
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ zustand: 4.5.6(@types/react@19.1.2)(react@19.1.0)
+ transitivePeerDependencies:
+ - '@types/react'
+ - immer
- '@trpc/client@11.0.0(@trpc/server@11.0.0(typescript@5.8.2))(typescript@5.8.2)':
+ '@trpc/client@11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3)':
dependencies:
- '@trpc/server': 11.0.0(typescript@5.8.2)
- typescript: 5.8.2
+ '@trpc/server': 11.1.0(typescript@5.8.3)
+ typescript: 5.8.3
- '@trpc/next@11.0.0(@tanstack/react-query@5.69.0(react@19.0.0))(@trpc/client@11.0.0(@trpc/server@11.0.0(typescript@5.8.2))(typescript@5.8.2))(@trpc/react-query@11.0.0(@tanstack/react-query@5.69.0(react@19.0.0))(@trpc/client@11.0.0(@trpc/server@11.0.0(typescript@5.8.2))(typescript@5.8.2))(@trpc/server@11.0.0(typescript@5.8.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.8.2))(@trpc/server@11.0.0(typescript@5.8.2))(next@15.2.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.8.2)':
+ '@trpc/next@11.1.0(@tanstack/react-query@5.74.4(react@19.1.0))(@trpc/client@11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3))(@trpc/react-query@11.1.0(@tanstack/react-query@5.74.4(react@19.1.0))(@trpc/client@11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.1.0(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3))(@trpc/server@11.1.0(typescript@5.8.3))(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)':
dependencies:
- '@trpc/client': 11.0.0(@trpc/server@11.0.0(typescript@5.8.2))(typescript@5.8.2)
- '@trpc/server': 11.0.0(typescript@5.8.2)
- next: 15.2.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- react: 19.0.0
- react-dom: 19.0.0(react@19.0.0)
- typescript: 5.8.2
+ '@trpc/client': 11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3)
+ '@trpc/server': 11.1.0(typescript@5.8.3)
+ next: 15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ typescript: 5.8.3
optionalDependencies:
- '@tanstack/react-query': 5.69.0(react@19.0.0)
- '@trpc/react-query': 11.0.0(@tanstack/react-query@5.69.0(react@19.0.0))(@trpc/client@11.0.0(@trpc/server@11.0.0(typescript@5.8.2))(typescript@5.8.2))(@trpc/server@11.0.0(typescript@5.8.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.8.2)
+ '@tanstack/react-query': 5.74.4(react@19.1.0)
+ '@trpc/react-query': 11.1.0(@tanstack/react-query@5.74.4(react@19.1.0))(@trpc/client@11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.1.0(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)
+
+ '@trpc/react-query@11.1.0(@tanstack/react-query@5.74.4(react@19.1.0))(@trpc/client@11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.1.0(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)':
+ dependencies:
+ '@tanstack/react-query': 5.74.4(react@19.1.0)
+ '@trpc/client': 11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3)
+ '@trpc/server': 11.1.0(typescript@5.8.3)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ typescript: 5.8.3
- '@trpc/react-query@11.0.0(@tanstack/react-query@5.69.0(react@19.0.0))(@trpc/client@11.0.0(@trpc/server@11.0.0(typescript@5.8.2))(typescript@5.8.2))(@trpc/server@11.0.0(typescript@5.8.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.8.2)':
+ '@trpc/server@11.1.0(typescript@5.8.3)':
dependencies:
- '@tanstack/react-query': 5.69.0(react@19.0.0)
- '@trpc/client': 11.0.0(@trpc/server@11.0.0(typescript@5.8.2))(typescript@5.8.2)
- '@trpc/server': 11.0.0(typescript@5.8.2)
- react: 19.0.0
- react-dom: 19.0.0(react@19.0.0)
- typescript: 5.8.2
+ typescript: 5.8.3
- '@trpc/server@11.0.0(typescript@5.8.2)':
+ '@trpc/tanstack-react-query@11.1.0(@tanstack/react-query@5.74.4(react@19.1.0))(@trpc/client@11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.1.0(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)':
dependencies:
- typescript: 5.8.2
+ '@tanstack/react-query': 5.74.4(react@19.1.0)
+ '@trpc/client': 11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3)
+ '@trpc/server': 11.1.0(typescript@5.8.3)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ typescript: 5.8.3
'@tybys/wasm-util@0.9.0':
dependencies:
@@ -5075,7 +6508,7 @@ snapshots:
'@types/bcrypt@5.0.2':
dependencies:
- '@types/node': 20.17.25
+ '@types/node': 22.14.1
'@types/debug@4.1.12':
dependencies:
@@ -5083,9 +6516,9 @@ snapshots:
'@types/estree-jsx@1.0.5':
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.7
- '@types/estree@1.0.6': {}
+ '@types/estree@1.0.7': {}
'@types/hast@2.3.10':
dependencies:
@@ -5105,27 +6538,33 @@ snapshots:
'@types/ms@2.1.0': {}
- '@types/node@20.17.25':
+ '@types/node@22.14.1':
dependencies:
- undici-types: 6.19.8
+ undici-types: 6.21.0
+
+ '@types/parse-json@4.0.2': {}
- '@types/pg@8.11.11':
+ '@types/pg@8.11.13':
dependencies:
- '@types/node': 20.17.25
+ '@types/node': 22.14.1
pg-protocol: 1.8.0
pg-types: 4.0.2
- '@types/pg@8.11.6':
+ '@types/prop-types@15.7.14': {}
+
+ '@types/react-dom@19.1.2(@types/react@19.1.2)':
dependencies:
- '@types/node': 20.17.25
- pg-protocol: 1.8.0
- pg-types: 4.0.2
+ '@types/react': 19.1.2
+
+ '@types/react-syntax-highlighter@15.5.13':
+ dependencies:
+ '@types/react': 19.1.2
- '@types/react-dom@19.0.4(@types/react@19.0.12)':
+ '@types/react-transition-group@4.4.12(@types/react@19.1.2)':
dependencies:
- '@types/react': 19.0.12
+ '@types/react': 19.1.2
- '@types/react@19.0.12':
+ '@types/react@19.1.2':
dependencies:
csstype: 3.1.3
@@ -5133,118 +6572,126 @@ snapshots:
'@types/unist@3.0.3': {}
- '@typescript-eslint/eslint-plugin@8.27.0(@typescript-eslint/parser@8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)':
+ '@typescript-eslint/eslint-plugin@8.30.1(@typescript-eslint/parser@8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)':
dependencies:
'@eslint-community/regexpp': 4.12.1
- '@typescript-eslint/parser': 8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)
- '@typescript-eslint/scope-manager': 8.27.0
- '@typescript-eslint/type-utils': 8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)
- '@typescript-eslint/utils': 8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)
- '@typescript-eslint/visitor-keys': 8.27.0
- eslint: 9.23.0(jiti@2.4.2)
+ '@typescript-eslint/parser': 8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
+ '@typescript-eslint/scope-manager': 8.30.1
+ '@typescript-eslint/type-utils': 8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
+ '@typescript-eslint/utils': 8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
+ '@typescript-eslint/visitor-keys': 8.30.1
+ eslint: 9.24.0(jiti@2.4.2)
graphemer: 1.4.0
ignore: 5.3.2
natural-compare: 1.4.0
- ts-api-utils: 2.1.0(typescript@5.8.2)
- typescript: 5.8.2
+ ts-api-utils: 2.1.0(typescript@5.8.3)
+ typescript: 5.8.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)':
+ '@typescript-eslint/parser@8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)':
dependencies:
- '@typescript-eslint/scope-manager': 8.27.0
- '@typescript-eslint/types': 8.27.0
- '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.8.2)
- '@typescript-eslint/visitor-keys': 8.27.0
+ '@typescript-eslint/scope-manager': 8.30.1
+ '@typescript-eslint/types': 8.30.1
+ '@typescript-eslint/typescript-estree': 8.30.1(typescript@5.8.3)
+ '@typescript-eslint/visitor-keys': 8.30.1
debug: 4.4.0
- eslint: 9.23.0(jiti@2.4.2)
- typescript: 5.8.2
+ eslint: 9.24.0(jiti@2.4.2)
+ typescript: 5.8.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.27.0':
+ '@typescript-eslint/scope-manager@8.30.1':
dependencies:
- '@typescript-eslint/types': 8.27.0
- '@typescript-eslint/visitor-keys': 8.27.0
+ '@typescript-eslint/types': 8.30.1
+ '@typescript-eslint/visitor-keys': 8.30.1
- '@typescript-eslint/type-utils@8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)':
+ '@typescript-eslint/type-utils@8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)':
dependencies:
- '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.8.2)
- '@typescript-eslint/utils': 8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)
+ '@typescript-eslint/typescript-estree': 8.30.1(typescript@5.8.3)
+ '@typescript-eslint/utils': 8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
debug: 4.4.0
- eslint: 9.23.0(jiti@2.4.2)
- ts-api-utils: 2.1.0(typescript@5.8.2)
- typescript: 5.8.2
+ eslint: 9.24.0(jiti@2.4.2)
+ ts-api-utils: 2.1.0(typescript@5.8.3)
+ typescript: 5.8.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.27.0': {}
+ '@typescript-eslint/types@8.30.1': {}
- '@typescript-eslint/typescript-estree@8.27.0(typescript@5.8.2)':
+ '@typescript-eslint/typescript-estree@8.30.1(typescript@5.8.3)':
dependencies:
- '@typescript-eslint/types': 8.27.0
- '@typescript-eslint/visitor-keys': 8.27.0
+ '@typescript-eslint/types': 8.30.1
+ '@typescript-eslint/visitor-keys': 8.30.1
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.1.0(typescript@5.8.2)
- typescript: 5.8.2
+ ts-api-utils: 2.1.0(typescript@5.8.3)
+ typescript: 5.8.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)':
+ '@typescript-eslint/utils@8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)':
dependencies:
- '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0(jiti@2.4.2))
- '@typescript-eslint/scope-manager': 8.27.0
- '@typescript-eslint/types': 8.27.0
- '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.8.2)
- eslint: 9.23.0(jiti@2.4.2)
- typescript: 5.8.2
+ '@eslint-community/eslint-utils': 4.6.1(eslint@9.24.0(jiti@2.4.2))
+ '@typescript-eslint/scope-manager': 8.30.1
+ '@typescript-eslint/types': 8.30.1
+ '@typescript-eslint/typescript-estree': 8.30.1(typescript@5.8.3)
+ eslint: 9.24.0(jiti@2.4.2)
+ typescript: 5.8.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/visitor-keys@8.27.0':
+ '@typescript-eslint/visitor-keys@8.30.1':
dependencies:
- '@typescript-eslint/types': 8.27.0
+ '@typescript-eslint/types': 8.30.1
eslint-visitor-keys: 4.2.0
- '@uiw/codemirror-extensions-basic-setup@4.23.10(@codemirror/autocomplete@6.18.6)(@codemirror/commands@6.8.0)(@codemirror/language@6.11.0)(@codemirror/lint@6.8.4)(@codemirror/search@6.5.10)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+ '@uiw/codemirror-extensions-basic-setup@4.23.10(@codemirror/autocomplete@6.18.6)(@codemirror/commands@6.8.1)(@codemirror/language@6.11.0)(@codemirror/lint@6.8.5)(@codemirror/search@6.5.10)(@codemirror/state@6.5.2)(@codemirror/view@6.36.5)':
dependencies:
'@codemirror/autocomplete': 6.18.6
- '@codemirror/commands': 6.8.0
+ '@codemirror/commands': 6.8.1
'@codemirror/language': 6.11.0
- '@codemirror/lint': 6.8.4
+ '@codemirror/lint': 6.8.5
'@codemirror/search': 6.5.10
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.36.4
+ '@codemirror/view': 6.36.5
+
+ '@uiw/codemirror-theme-tokyo-night-storm@4.23.10(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.5)':
+ dependencies:
+ '@uiw/codemirror-themes': 4.23.10(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.5)
+ transitivePeerDependencies:
+ - '@codemirror/language'
+ - '@codemirror/state'
+ - '@codemirror/view'
- '@uiw/codemirror-theme-tokyo-night-storm@4.23.10(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+ '@uiw/codemirror-theme-xcode@4.23.10(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.5)':
dependencies:
- '@uiw/codemirror-themes': 4.23.10(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+ '@uiw/codemirror-themes': 4.23.10(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.5)
transitivePeerDependencies:
- '@codemirror/language'
- '@codemirror/state'
- '@codemirror/view'
- '@uiw/codemirror-themes@4.23.10(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+ '@uiw/codemirror-themes@4.23.10(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.5)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.36.4
+ '@codemirror/view': 6.36.5
- '@uiw/react-codemirror@4.23.10(@babel/runtime@7.26.10)(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.11.0)(@codemirror/lint@6.8.4)(@codemirror/search@6.5.10)(@codemirror/state@6.5.2)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.36.4)(codemirror@6.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ '@uiw/react-codemirror@4.23.10(@babel/runtime@7.27.0)(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.11.0)(@codemirror/lint@6.8.5)(@codemirror/search@6.5.10)(@codemirror/state@6.5.2)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.36.5)(codemirror@6.0.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
- '@babel/runtime': 7.26.10
- '@codemirror/commands': 6.8.0
+ '@babel/runtime': 7.27.0
+ '@codemirror/commands': 6.8.1
'@codemirror/state': 6.5.2
'@codemirror/theme-one-dark': 6.1.2
- '@codemirror/view': 6.36.4
- '@uiw/codemirror-extensions-basic-setup': 4.23.10(@codemirror/autocomplete@6.18.6)(@codemirror/commands@6.8.0)(@codemirror/language@6.11.0)(@codemirror/lint@6.8.4)(@codemirror/search@6.5.10)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+ '@codemirror/view': 6.36.5
+ '@uiw/codemirror-extensions-basic-setup': 4.23.10(@codemirror/autocomplete@6.18.6)(@codemirror/commands@6.8.1)(@codemirror/language@6.11.0)(@codemirror/lint@6.8.5)(@codemirror/search@6.5.10)(@codemirror/state@6.5.2)(@codemirror/view@6.36.5)
codemirror: 6.0.1
- react: 19.0.0
- react-dom: 19.0.0(react@19.0.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
transitivePeerDependencies:
- '@codemirror/autocomplete'
- '@codemirror/language'
@@ -5253,39 +6700,54 @@ snapshots:
'@ungap/structured-clone@1.3.0': {}
- '@unrs/rspack-resolver-binding-darwin-arm64@1.2.2':
+ '@unrs/resolver-binding-darwin-arm64@1.5.0':
+ optional: true
+
+ '@unrs/resolver-binding-darwin-x64@1.5.0':
+ optional: true
+
+ '@unrs/resolver-binding-freebsd-x64@1.5.0':
+ optional: true
+
+ '@unrs/resolver-binding-linux-arm-gnueabihf@1.5.0':
+ optional: true
+
+ '@unrs/resolver-binding-linux-arm-musleabihf@1.5.0':
optional: true
- '@unrs/rspack-resolver-binding-darwin-x64@1.2.2':
+ '@unrs/resolver-binding-linux-arm64-gnu@1.5.0':
optional: true
- '@unrs/rspack-resolver-binding-freebsd-x64@1.2.2':
+ '@unrs/resolver-binding-linux-arm64-musl@1.5.0':
optional: true
- '@unrs/rspack-resolver-binding-linux-arm-gnueabihf@1.2.2':
+ '@unrs/resolver-binding-linux-ppc64-gnu@1.5.0':
optional: true
- '@unrs/rspack-resolver-binding-linux-arm64-gnu@1.2.2':
+ '@unrs/resolver-binding-linux-riscv64-gnu@1.5.0':
optional: true
- '@unrs/rspack-resolver-binding-linux-arm64-musl@1.2.2':
+ '@unrs/resolver-binding-linux-s390x-gnu@1.5.0':
optional: true
- '@unrs/rspack-resolver-binding-linux-x64-gnu@1.2.2':
+ '@unrs/resolver-binding-linux-x64-gnu@1.5.0':
optional: true
- '@unrs/rspack-resolver-binding-linux-x64-musl@1.2.2':
+ '@unrs/resolver-binding-linux-x64-musl@1.5.0':
optional: true
- '@unrs/rspack-resolver-binding-wasm32-wasi@1.2.2':
+ '@unrs/resolver-binding-wasm32-wasi@1.5.0':
dependencies:
- '@napi-rs/wasm-runtime': 0.2.7
+ '@napi-rs/wasm-runtime': 0.2.9
+ optional: true
+
+ '@unrs/resolver-binding-win32-arm64-msvc@1.5.0':
optional: true
- '@unrs/rspack-resolver-binding-win32-arm64-msvc@1.2.2':
+ '@unrs/resolver-binding-win32-ia32-msvc@1.5.0':
optional: true
- '@unrs/rspack-resolver-binding-win32-x64-msvc@1.2.2':
+ '@unrs/resolver-binding-win32-x64-msvc@1.5.0':
optional: true
abbrev@1.1.1: {}
@@ -5324,6 +6786,10 @@ snapshots:
delegates: 1.0.0
readable-stream: 3.6.2
+ argparse@1.0.10:
+ dependencies:
+ sprintf-js: 1.0.3
+
argparse@2.0.1: {}
aria-hidden@1.2.4:
@@ -5404,7 +6870,7 @@ snapshots:
autoprefixer@10.4.21(postcss@8.5.3):
dependencies:
browserslist: 4.24.4
- caniuse-lite: 1.0.30001706
+ caniuse-lite: 1.0.30001714
fraction.js: 4.3.7
normalize-range: 0.1.2
picocolors: 1.1.1
@@ -5425,6 +6891,12 @@ snapshots:
axobject-query@4.1.0: {}
+ babel-plugin-macros@3.1.0:
+ dependencies:
+ '@babel/runtime': 7.27.0
+ cosmiconfig: 7.1.0
+ resolve: 1.22.10
+
bail@2.0.2: {}
balanced-match@1.0.2: {}
@@ -5460,8 +6932,8 @@ snapshots:
browserslist@4.24.4:
dependencies:
- caniuse-lite: 1.0.30001706
- electron-to-chromium: 1.5.123
+ caniuse-lite: 1.0.30001714
+ electron-to-chromium: 1.5.138
node-releases: 2.0.19
update-browserslist-db: 1.1.3(browserslist@4.24.4)
@@ -5495,7 +6967,7 @@ snapshots:
callsites@3.1.0: {}
- caniuse-lite@1.0.30001706: {}
+ caniuse-lite@1.0.30001714: {}
ccount@2.0.1: {}
@@ -5510,10 +6982,16 @@ snapshots:
character-entities-html4@2.1.0: {}
+ character-entities-legacy@1.1.4: {}
+
character-entities-legacy@3.0.0: {}
+ character-entities@1.2.4: {}
+
character-entities@2.0.2: {}
+ character-reference-invalid@1.1.4: {}
+
character-reference-invalid@2.0.1: {}
chownr@2.0.0: {}
@@ -5534,15 +7012,27 @@ snapshots:
clsx@2.1.1: {}
+ cmdk@1.1.1(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-dialog': 1.1.10(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ transitivePeerDependencies:
+ - '@types/react'
+ - '@types/react-dom'
+
codemirror@6.0.1:
dependencies:
'@codemirror/autocomplete': 6.18.6
- '@codemirror/commands': 6.8.0
+ '@codemirror/commands': 6.8.1
'@codemirror/language': 6.11.0
- '@codemirror/lint': 6.8.4
+ '@codemirror/lint': 6.8.5
'@codemirror/search': 6.5.10
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.36.4
+ '@codemirror/view': 6.36.5
color-convert@2.0.1:
dependencies:
@@ -5564,6 +7054,8 @@ snapshots:
color-string: 1.9.1
optional: true
+ comma-separated-tokens@1.0.8: {}
+
comma-separated-tokens@2.0.3: {}
commander@10.0.1: {}
@@ -5574,8 +7066,22 @@ snapshots:
console-control-strings@1.1.0: {}
+ convert-source-map@1.9.0: {}
+
cookie@0.7.2: {}
+ copy-to-clipboard@3.3.3:
+ dependencies:
+ toggle-selection: 1.0.6
+
+ cosmiconfig@7.1.0:
+ dependencies:
+ '@types/parse-json': 4.0.2
+ import-fresh: 3.3.1
+ parse-json: 5.2.0
+ path-type: 4.0.0
+ yaml: 1.10.2
+
crelt@1.0.6: {}
cross-spawn@7.0.6:
@@ -5664,23 +7170,26 @@ snapshots:
dependencies:
esutils: 2.0.3
- dotenv@16.4.7: {}
+ dom-helpers@5.2.1:
+ dependencies:
+ '@babel/runtime': 7.27.0
+ csstype: 3.1.3
+
+ dotenv@16.5.0: {}
- drizzle-kit@0.30.5:
+ drizzle-kit@0.31.0:
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
+ esbuild: 0.25.2
+ esbuild-register: 3.6.0(esbuild@0.25.2)
transitivePeerDependencies:
- supports-color
- drizzle-orm@0.41.0(@neondatabase/serverless@0.10.4)(@types/pg@8.11.11)(gel@2.0.1)(pg@8.14.1):
+ drizzle-orm@0.42.0(@neondatabase/serverless@1.0.0)(@types/pg@8.11.13)(pg@8.14.1):
optionalDependencies:
- '@neondatabase/serverless': 0.10.4
- '@types/pg': 8.11.11
- gel: 2.0.1
+ '@neondatabase/serverless': 1.0.0
+ '@types/pg': 8.11.13
pg: 8.14.1
dunder-proto@1.0.1:
@@ -5689,7 +7198,7 @@ snapshots:
es-errors: 1.3.0
gopd: 1.2.0
- electron-to-chromium@1.5.123: {}
+ electron-to-chromium@1.5.138: {}
emoji-regex@8.0.0: {}
@@ -5709,7 +7218,9 @@ snapshots:
commander: 4.1.1
cross-spawn: 7.0.6
- env-paths@3.0.0: {}
+ error-ex@1.3.2:
+ dependencies:
+ is-arrayish: 0.2.1
es-abstract@1.23.9:
dependencies:
@@ -5809,10 +7320,10 @@ snapshots:
is-date-object: 1.1.0
is-symbol: 1.1.1
- esbuild-register@3.6.0(esbuild@0.19.12):
+ esbuild-register@3.6.0(esbuild@0.25.2):
dependencies:
debug: 4.4.0
- esbuild: 0.19.12
+ esbuild: 0.25.2
transitivePeerDependencies:
- supports-color
@@ -5841,59 +7352,33 @@ snapshots:
'@esbuild/win32-ia32': 0.18.20
'@esbuild/win32-x64': 0.18.20
- esbuild@0.19.12:
- optionalDependencies:
- '@esbuild/aix-ppc64': 0.19.12
- '@esbuild/android-arm': 0.19.12
- '@esbuild/android-arm64': 0.19.12
- '@esbuild/android-x64': 0.19.12
- '@esbuild/darwin-arm64': 0.19.12
- '@esbuild/darwin-x64': 0.19.12
- '@esbuild/freebsd-arm64': 0.19.12
- '@esbuild/freebsd-x64': 0.19.12
- '@esbuild/linux-arm': 0.19.12
- '@esbuild/linux-arm64': 0.19.12
- '@esbuild/linux-ia32': 0.19.12
- '@esbuild/linux-loong64': 0.19.12
- '@esbuild/linux-mips64el': 0.19.12
- '@esbuild/linux-ppc64': 0.19.12
- '@esbuild/linux-riscv64': 0.19.12
- '@esbuild/linux-s390x': 0.19.12
- '@esbuild/linux-x64': 0.19.12
- '@esbuild/netbsd-x64': 0.19.12
- '@esbuild/openbsd-x64': 0.19.12
- '@esbuild/sunos-x64': 0.19.12
- '@esbuild/win32-arm64': 0.19.12
- '@esbuild/win32-ia32': 0.19.12
- '@esbuild/win32-x64': 0.19.12
-
- esbuild@0.25.1:
+ esbuild@0.25.2:
optionalDependencies:
- '@esbuild/aix-ppc64': 0.25.1
- '@esbuild/android-arm': 0.25.1
- '@esbuild/android-arm64': 0.25.1
- '@esbuild/android-x64': 0.25.1
- '@esbuild/darwin-arm64': 0.25.1
- '@esbuild/darwin-x64': 0.25.1
- '@esbuild/freebsd-arm64': 0.25.1
- '@esbuild/freebsd-x64': 0.25.1
- '@esbuild/linux-arm': 0.25.1
- '@esbuild/linux-arm64': 0.25.1
- '@esbuild/linux-ia32': 0.25.1
- '@esbuild/linux-loong64': 0.25.1
- '@esbuild/linux-mips64el': 0.25.1
- '@esbuild/linux-ppc64': 0.25.1
- '@esbuild/linux-riscv64': 0.25.1
- '@esbuild/linux-s390x': 0.25.1
- '@esbuild/linux-x64': 0.25.1
- '@esbuild/netbsd-arm64': 0.25.1
- '@esbuild/netbsd-x64': 0.25.1
- '@esbuild/openbsd-arm64': 0.25.1
- '@esbuild/openbsd-x64': 0.25.1
- '@esbuild/sunos-x64': 0.25.1
- '@esbuild/win32-arm64': 0.25.1
- '@esbuild/win32-ia32': 0.25.1
- '@esbuild/win32-x64': 0.25.1
+ '@esbuild/aix-ppc64': 0.25.2
+ '@esbuild/android-arm': 0.25.2
+ '@esbuild/android-arm64': 0.25.2
+ '@esbuild/android-x64': 0.25.2
+ '@esbuild/darwin-arm64': 0.25.2
+ '@esbuild/darwin-x64': 0.25.2
+ '@esbuild/freebsd-arm64': 0.25.2
+ '@esbuild/freebsd-x64': 0.25.2
+ '@esbuild/linux-arm': 0.25.2
+ '@esbuild/linux-arm64': 0.25.2
+ '@esbuild/linux-ia32': 0.25.2
+ '@esbuild/linux-loong64': 0.25.2
+ '@esbuild/linux-mips64el': 0.25.2
+ '@esbuild/linux-ppc64': 0.25.2
+ '@esbuild/linux-riscv64': 0.25.2
+ '@esbuild/linux-s390x': 0.25.2
+ '@esbuild/linux-x64': 0.25.2
+ '@esbuild/netbsd-arm64': 0.25.2
+ '@esbuild/netbsd-x64': 0.25.2
+ '@esbuild/openbsd-arm64': 0.25.2
+ '@esbuild/openbsd-x64': 0.25.2
+ '@esbuild/sunos-x64': 0.25.2
+ '@esbuild/win32-arm64': 0.25.2
+ '@esbuild/win32-ia32': 0.25.2
+ '@esbuild/win32-x64': 0.25.2
escalade@3.2.0: {}
@@ -5901,21 +7386,21 @@ snapshots:
escape-string-regexp@5.0.0: {}
- eslint-config-next@15.2.3(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2):
+ eslint-config-next@15.3.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3):
dependencies:
- '@next/eslint-plugin-next': 15.2.3
+ '@next/eslint-plugin-next': 15.3.1
'@rushstack/eslint-patch': 1.11.0
- '@typescript-eslint/eslint-plugin': 8.27.0(@typescript-eslint/parser@8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)
- '@typescript-eslint/parser': 8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)
- eslint: 9.23.0(jiti@2.4.2)
+ '@typescript-eslint/eslint-plugin': 8.30.1(@typescript-eslint/parser@8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
+ '@typescript-eslint/parser': 8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
+ eslint: 9.24.0(jiti@2.4.2)
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.9.1(eslint-plugin-import@2.31.0)(eslint@9.23.0(jiti@2.4.2))
- eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-typescript@3.9.1)(eslint@9.23.0(jiti@2.4.2))
- eslint-plugin-jsx-a11y: 6.10.2(eslint@9.23.0(jiti@2.4.2))
- eslint-plugin-react: 7.37.4(eslint@9.23.0(jiti@2.4.2))
- eslint-plugin-react-hooks: 5.2.0(eslint@9.23.0(jiti@2.4.2))
+ eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.24.0(jiti@2.4.2))
+ eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.24.0(jiti@2.4.2))
+ eslint-plugin-jsx-a11y: 6.10.2(eslint@9.24.0(jiti@2.4.2))
+ eslint-plugin-react: 7.37.5(eslint@9.24.0(jiti@2.4.2))
+ eslint-plugin-react-hooks: 5.2.0(eslint@9.24.0(jiti@2.4.2))
optionalDependencies:
- typescript: 5.8.2
+ typescript: 5.8.3
transitivePeerDependencies:
- eslint-import-resolver-webpack
- eslint-plugin-import-x
@@ -5929,33 +7414,33 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-import-resolver-typescript@3.9.1(eslint-plugin-import@2.31.0)(eslint@9.23.0(jiti@2.4.2)):
+ eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0)(eslint@9.24.0(jiti@2.4.2)):
dependencies:
'@nolyfill/is-core-module': 1.0.39
debug: 4.4.0
- eslint: 9.23.0(jiti@2.4.2)
+ eslint: 9.24.0(jiti@2.4.2)
get-tsconfig: 4.10.0
- is-bun-module: 1.3.0
- rspack-resolver: 1.2.2
+ is-bun-module: 2.0.0
stable-hash: 0.0.5
tinyglobby: 0.2.12
+ unrs-resolver: 1.5.0
optionalDependencies:
- eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-typescript@3.9.1)(eslint@9.23.0(jiti@2.4.2))
+ eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.24.0(jiti@2.4.2))
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.0(@typescript-eslint/parser@8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.9.1)(eslint@9.23.0(jiti@2.4.2)):
+ eslint-module-utils@2.12.0(@typescript-eslint/parser@8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.24.0(jiti@2.4.2)):
dependencies:
debug: 3.2.7
optionalDependencies:
- '@typescript-eslint/parser': 8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)
- eslint: 9.23.0(jiti@2.4.2)
+ '@typescript-eslint/parser': 8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
+ eslint: 9.24.0(jiti@2.4.2)
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.9.1(eslint-plugin-import@2.31.0)(eslint@9.23.0(jiti@2.4.2))
+ eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.24.0(jiti@2.4.2))
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-typescript@3.9.1)(eslint@9.23.0(jiti@2.4.2)):
+ eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.24.0(jiti@2.4.2)):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.8
@@ -5964,9 +7449,9 @@ snapshots:
array.prototype.flatmap: 1.3.3
debug: 3.2.7
doctrine: 2.1.0
- eslint: 9.23.0(jiti@2.4.2)
+ eslint: 9.24.0(jiti@2.4.2)
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.9.1)(eslint@9.23.0(jiti@2.4.2))
+ eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.24.0(jiti@2.4.2))
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -5978,13 +7463,13 @@ snapshots:
string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0
optionalDependencies:
- '@typescript-eslint/parser': 8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)
+ '@typescript-eslint/parser': 8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-jsx-a11y@6.10.2(eslint@9.23.0(jiti@2.4.2)):
+ eslint-plugin-jsx-a11y@6.10.2(eslint@9.24.0(jiti@2.4.2)):
dependencies:
aria-query: 5.3.2
array-includes: 3.1.8
@@ -5994,7 +7479,7 @@ snapshots:
axobject-query: 4.1.0
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
- eslint: 9.23.0(jiti@2.4.2)
+ eslint: 9.24.0(jiti@2.4.2)
hasown: 2.0.2
jsx-ast-utils: 3.3.5
language-tags: 1.0.9
@@ -6003,11 +7488,11 @@ snapshots:
safe-regex-test: 1.1.0
string.prototype.includes: 2.0.1
- eslint-plugin-react-hooks@5.2.0(eslint@9.23.0(jiti@2.4.2)):
+ eslint-plugin-react-hooks@5.2.0(eslint@9.24.0(jiti@2.4.2)):
dependencies:
- eslint: 9.23.0(jiti@2.4.2)
+ eslint: 9.24.0(jiti@2.4.2)
- eslint-plugin-react@7.37.4(eslint@9.23.0(jiti@2.4.2)):
+ eslint-plugin-react@7.37.5(eslint@9.24.0(jiti@2.4.2)):
dependencies:
array-includes: 3.1.8
array.prototype.findlast: 1.2.5
@@ -6015,7 +7500,7 @@ snapshots:
array.prototype.tosorted: 1.1.4
doctrine: 2.1.0
es-iterator-helpers: 1.2.1
- eslint: 9.23.0(jiti@2.4.2)
+ eslint: 9.24.0(jiti@2.4.2)
estraverse: 5.3.0
hasown: 2.0.2
jsx-ast-utils: 3.3.5
@@ -6038,20 +7523,20 @@ snapshots:
eslint-visitor-keys@4.2.0: {}
- eslint@9.23.0(jiti@2.4.2):
+ eslint@9.24.0(jiti@2.4.2):
dependencies:
- '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0(jiti@2.4.2))
+ '@eslint-community/eslint-utils': 4.6.1(eslint@9.24.0(jiti@2.4.2))
'@eslint-community/regexpp': 4.12.1
- '@eslint/config-array': 0.19.2
- '@eslint/config-helpers': 0.2.0
+ '@eslint/config-array': 0.20.0
+ '@eslint/config-helpers': 0.2.1
'@eslint/core': 0.12.0
'@eslint/eslintrc': 3.3.1
- '@eslint/js': 9.23.0
- '@eslint/plugin-kit': 0.2.7
+ '@eslint/js': 9.24.0
+ '@eslint/plugin-kit': 0.2.8
'@humanfs/node': 0.16.6
'@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.4.2
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.7
'@types/json-schema': 7.0.15
ajv: 6.12.6
chalk: 4.1.2
@@ -6086,6 +7571,8 @@ snapshots:
acorn-jsx: 5.3.2(acorn@8.14.1)
eslint-visitor-keys: 4.2.0
+ esprima@4.0.1: {}
+
esquery@1.6.0:
dependencies:
estraverse: 5.3.0
@@ -6112,6 +7599,10 @@ snapshots:
signal-exit: 3.0.7
strip-final-newline: 3.0.0
+ extend-shallow@2.0.1:
+ dependencies:
+ is-extendable: 0.1.1
+
extend@3.0.2: {}
fast-deep-equal@3.1.3: {}
@@ -6140,6 +7631,10 @@ snapshots:
dependencies:
reusify: 1.1.0
+ fault@1.0.4:
+ dependencies:
+ format: 0.2.2
+
fdir@6.4.3(picomatch@4.0.2):
optionalDependencies:
picomatch: 4.0.2
@@ -6157,6 +7652,8 @@ snapshots:
dependencies:
to-regex-range: 5.0.1
+ find-root@1.1.0: {}
+
find-up@5.0.0:
dependencies:
locate-path: 6.0.0
@@ -6179,6 +7676,10 @@ snapshots:
dependencies:
is-callable: 1.2.7
+ foreach@2.0.6: {}
+
+ format@0.2.2: {}
+
formdata-polyfill@4.0.10:
dependencies:
fetch-blob: 3.2.0
@@ -6213,6 +7714,8 @@ snapshots:
functions-have-names@1.2.3: {}
+ fuzzysort@2.0.4: {}
+
gauge@3.0.2:
dependencies:
aproba: 2.0.0
@@ -6225,17 +7728,6 @@ snapshots:
strip-ansi: 6.0.1
wide-align: 1.1.5
- gel@2.0.1:
- dependencies:
- '@petamoriken/float16': 3.9.2
- 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
-
get-intrinsic@1.3.0:
dependencies:
call-bind-apply-helpers: 1.0.2
@@ -6285,6 +7777,8 @@ snapshots:
once: 1.4.0
path-is-absolute: 1.0.1
+ globals@11.12.0: {}
+
globals@14.0.0: {}
globalthis@1.0.4:
@@ -6298,6 +7792,13 @@ snapshots:
graphemer@1.4.0: {}
+ gray-matter@4.0.3:
+ dependencies:
+ js-yaml: 3.14.1
+ kind-of: 6.0.3
+ section-matter: 1.0.0
+ strip-bom-string: 1.0.0
+
has-bigints@1.1.0: {}
has-flag@4.0.0: {}
@@ -6326,13 +7827,29 @@ snapshots:
dependencies:
'@types/hast': 3.0.4
+ hast-util-parse-selector@2.2.5: {}
+
hast-util-parse-selector@3.1.1:
dependencies:
'@types/hast': 2.3.10
+ hast-util-to-html@9.0.5:
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.3
+ ccount: 2.0.1
+ comma-separated-tokens: 2.0.3
+ hast-util-whitespace: 3.0.0
+ html-void-elements: 3.0.0
+ mdast-util-to-hast: 13.2.0
+ property-information: 7.0.0
+ space-separated-tokens: 2.0.2
+ stringify-entities: 4.0.4
+ zwitch: 2.0.4
+
hast-util-to-jsx-runtime@2.3.6:
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.7
'@types/hast': 3.0.4
'@types/unist': 3.0.3
comma-separated-tokens: 2.0.3
@@ -6361,6 +7878,14 @@ snapshots:
dependencies:
'@types/hast': 3.0.4
+ hastscript@6.0.0:
+ dependencies:
+ '@types/hast': 2.3.10
+ comma-separated-tokens: 1.0.8
+ hast-util-parse-selector: 2.2.5
+ property-information: 5.6.0
+ space-separated-tokens: 1.1.5
+
hastscript@7.2.0:
dependencies:
'@types/hast': 2.3.10
@@ -6369,10 +7894,20 @@ snapshots:
property-information: 6.5.0
space-separated-tokens: 2.0.2
+ highlight.js@10.7.3: {}
+
highlight.js@11.11.1: {}
+ highlightjs-vue@1.0.0: {}
+
+ hoist-non-react-statics@3.3.2:
+ dependencies:
+ react-is: 16.13.1
+
html-url-attributes@3.0.1: {}
+ html-void-elements@3.0.0: {}
+
https-proxy-agent@5.0.1:
dependencies:
agent-base: 6.0.2
@@ -6398,6 +7933,8 @@ snapshots:
once: 1.4.0
wrappy: 1.0.2
+ inherits@2.0.3: {}
+
inherits@2.0.4: {}
inline-style-parser@0.2.4: {}
@@ -6408,8 +7945,15 @@ snapshots:
hasown: 2.0.2
side-channel: 1.1.0
+ is-alphabetical@1.0.4: {}
+
is-alphabetical@2.0.1: {}
+ is-alphanumerical@1.0.4:
+ dependencies:
+ is-alphabetical: 1.0.4
+ is-decimal: 1.0.4
+
is-alphanumerical@2.0.1:
dependencies:
is-alphabetical: 2.0.1
@@ -6421,6 +7965,8 @@ snapshots:
call-bound: 1.0.4
get-intrinsic: 1.3.0
+ is-arrayish@0.2.1: {}
+
is-arrayish@0.3.2:
optional: true
@@ -6441,7 +7987,7 @@ snapshots:
call-bound: 1.0.4
has-tostringtag: 1.0.2
- is-bun-module@1.3.0:
+ is-bun-module@2.0.0:
dependencies:
semver: 7.7.1
@@ -6462,8 +8008,12 @@ snapshots:
call-bound: 1.0.4
has-tostringtag: 1.0.2
+ is-decimal@1.0.4: {}
+
is-decimal@2.0.1: {}
+ is-extendable@0.1.1: {}
+
is-extglob@2.1.1: {}
is-finalizationregistry@1.1.1:
@@ -6483,6 +8033,8 @@ snapshots:
dependencies:
is-extglob: 2.1.1
+ is-hexadecimal@1.0.4: {}
+
is-hexadecimal@2.0.1: {}
is-interactive@2.0.0: {}
@@ -6545,8 +8097,6 @@ snapshots:
isexe@2.0.0: {}
- isexe@3.1.1: {}
-
iterator.prototype@1.1.5:
dependencies:
define-data-property: 1.1.4
@@ -6564,12 +8114,25 @@ snapshots:
js-tokens@4.0.0: {}
+ js-yaml@3.14.1:
+ dependencies:
+ argparse: 1.0.10
+ esprima: 4.0.1
+
js-yaml@4.1.0:
dependencies:
argparse: 2.0.1
+ jsesc@3.1.0: {}
+
json-buffer@3.0.1: {}
+ json-parse-even-better-errors@2.3.1: {}
+
+ json-pointer@0.6.2:
+ dependencies:
+ foreach: 2.0.6
+
json-schema-traverse@0.4.1: {}
json-stable-stringify-without-jsonify@1.0.1: {}
@@ -6595,6 +8158,8 @@ snapshots:
dependencies:
json-buffer: 3.0.1
+ kind-of@6.0.3: {}
+
kleur@3.0.3: {}
language-subtag-registry@0.3.23: {}
@@ -6653,6 +8218,8 @@ snapshots:
lightningcss-win32-arm64-msvc: 1.29.2
lightningcss-win32-x64-msvc: 1.29.2
+ lines-and-columns@1.2.4: {}
+
locate-path@6.0.0:
dependencies:
p-locate: 5.0.0
@@ -6674,6 +8241,11 @@ snapshots:
dependencies:
js-tokens: 4.0.0
+ lowlight@1.20.0:
+ dependencies:
+ fault: 1.0.4
+ highlight.js: 10.7.3
+
lowlight@3.3.0:
dependencies:
'@types/hast': 3.0.4
@@ -6684,9 +8256,9 @@ snapshots:
dependencies:
yallist: 4.0.0
- lucide-react@0.483.0(react@19.0.0):
+ lucide-react@0.488.0(react@19.1.0):
dependencies:
- react: 19.0.0
+ react: 19.1.0
make-dir@3.1.0:
dependencies:
@@ -7103,8 +8675,12 @@ snapshots:
minipass: 3.3.6
yallist: 4.0.0
+ mitt@3.0.1: {}
+
mkdirp@1.0.4: {}
+ monaco-editor@0.52.2: {}
+
mri@1.2.0: {}
ms@2.0.0: {}
@@ -7115,42 +8691,42 @@ snapshots:
natural-compare@1.4.0: {}
- next-auth@4.24.11(next@15.2.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
+ next-auth@4.24.11(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
- '@babel/runtime': 7.26.10
+ '@babel/runtime': 7.27.0
'@panva/hkdf': 1.2.1
cookie: 0.7.2
jose: 4.15.9
- next: 15.2.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ next: 15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
oauth: 0.9.15
openid-client: 5.7.1
- preact: 10.26.4
- preact-render-to-string: 5.2.6(preact@10.26.4)
- react: 19.0.0
- react-dom: 19.0.0(react@19.0.0)
+ preact: 10.26.5
+ preact-render-to-string: 5.2.6(preact@10.26.5)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
uuid: 8.3.2
- next@15.2.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
+ next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
- '@next/env': 15.2.3
+ '@next/env': 15.3.1
'@swc/counter': 0.1.3
'@swc/helpers': 0.5.15
busboy: 1.6.0
- caniuse-lite: 1.0.30001706
+ caniuse-lite: 1.0.30001714
postcss: 8.4.31
- react: 19.0.0
- react-dom: 19.0.0(react@19.0.0)
- styled-jsx: 5.1.6(react@19.0.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ styled-jsx: 5.1.6(react@19.1.0)
optionalDependencies:
- '@next/swc-darwin-arm64': 15.2.3
- '@next/swc-darwin-x64': 15.2.3
- '@next/swc-linux-arm64-gnu': 15.2.3
- '@next/swc-linux-arm64-musl': 15.2.3
- '@next/swc-linux-x64-gnu': 15.2.3
- '@next/swc-linux-x64-musl': 15.2.3
- '@next/swc-win32-arm64-msvc': 15.2.3
- '@next/swc-win32-x64-msvc': 15.2.3
- sharp: 0.33.5
+ '@next/swc-darwin-arm64': 15.3.1
+ '@next/swc-darwin-x64': 15.3.1
+ '@next/swc-linux-arm64-gnu': 15.3.1
+ '@next/swc-linux-arm64-musl': 15.3.1
+ '@next/swc-linux-x64-gnu': 15.3.1
+ '@next/swc-linux-x64-musl': 15.3.1
+ '@next/swc-win32-arm64-msvc': 15.3.1
+ '@next/swc-win32-x64-msvc': 15.3.1
+ sharp: 0.34.1
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
@@ -7197,7 +8773,14 @@ snapshots:
gauge: 3.0.2
set-blocking: 2.0.0
- oauth4webapi@3.3.1: {}
+ nuqs@2.4.3(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0):
+ dependencies:
+ mitt: 3.0.1
+ react: 19.1.0
+ optionalDependencies:
+ next: 15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+
+ oauth4webapi@3.5.0: {}
oauth@0.9.15: {}
@@ -7307,6 +8890,15 @@ snapshots:
dependencies:
callsites: 3.1.0
+ parse-entities@2.0.0:
+ dependencies:
+ character-entities: 1.2.4
+ character-entities-legacy: 1.1.4
+ character-reference-invalid: 1.1.4
+ is-alphanumerical: 1.0.4
+ is-decimal: 1.0.4
+ is-hexadecimal: 1.0.4
+
parse-entities@4.0.2:
dependencies:
'@types/unist': 2.0.11
@@ -7317,6 +8909,15 @@ snapshots:
is-decimal: 2.0.1
is-hexadecimal: 2.0.1
+ parse-json@5.2.0:
+ dependencies:
+ '@babel/code-frame': 7.26.2
+ error-ex: 1.3.2
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
+
+ parse-ms@3.0.0: {}
+
path-exists@4.0.0: {}
path-is-absolute@1.0.1: {}
@@ -7327,6 +8928,13 @@ snapshots:
path-parse@1.0.7: {}
+ path-type@4.0.0: {}
+
+ path@0.12.7:
+ dependencies:
+ process: 0.11.10
+ util: 0.10.4
+
pg-cloudflare@1.1.1:
optional: true
@@ -7423,9 +9031,9 @@ snapshots:
postgres-range@1.1.4: {}
- preact-render-to-string@5.2.6(preact@10.26.4):
+ preact-render-to-string@5.2.6(preact@10.26.5):
dependencies:
- preact: 10.26.4
+ preact: 10.26.5
pretty-format: 3.8.0
preact-render-to-string@6.5.11(preact@10.24.3):
@@ -7434,12 +9042,24 @@ snapshots:
preact@10.24.3: {}
- preact@10.26.4: {}
+ preact@10.26.5: {}
prelude-ls@1.2.1: {}
+ pretty-bytes@6.1.1: {}
+
pretty-format@3.8.0: {}
+ pretty-ms@8.0.0:
+ dependencies:
+ parse-ms: 3.0.0
+
+ prismjs@1.27.0: {}
+
+ prismjs@1.30.0: {}
+
+ process@0.11.10: {}
+
prompts@2.4.2:
dependencies:
kleur: 3.0.3
@@ -7451,67 +9071,116 @@ snapshots:
object-assign: 4.1.1
react-is: 16.13.1
+ property-information@5.6.0:
+ dependencies:
+ xtend: 4.0.2
+
property-information@6.5.0: {}
property-information@7.0.0: {}
+ punycode@1.4.1: {}
+
punycode@2.3.1: {}
+ qs@6.14.0:
+ dependencies:
+ side-channel: 1.1.0
+
queue-microtask@1.2.3: {}
- react-dom@19.0.0(react@19.0.0):
+ react-dom@19.1.0(react@19.1.0):
dependencies:
- react: 19.0.0
- scheduler: 0.25.0
+ react: 19.1.0
+ scheduler: 0.26.0
react-is@16.13.1: {}
- react-markdown@10.1.0(@types/react@19.0.12)(react@19.0.0):
+ react-is@19.1.0: {}
+
+ react-markdown@10.1.0(@types/react@19.1.2)(react@19.1.0):
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ '@types/react': 19.1.2
+ devlop: 1.1.0
+ hast-util-to-jsx-runtime: 2.3.6
+ html-url-attributes: 3.0.1
+ mdast-util-to-hast: 13.2.0
+ react: 19.1.0
+ remark-parse: 11.0.0
+ remark-rehype: 11.1.2
+ unified: 11.0.5
+ unist-util-visit: 5.0.0
+ vfile: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ react-markdown@9.1.0(@types/react@19.1.2)(react@19.1.0):
dependencies:
'@types/hast': 3.0.4
'@types/mdast': 4.0.4
- '@types/react': 19.0.12
+ '@types/react': 19.1.2
devlop: 1.1.0
hast-util-to-jsx-runtime: 2.3.6
html-url-attributes: 3.0.1
mdast-util-to-hast: 13.2.0
- react: 19.0.0
+ react: 19.1.0
remark-parse: 11.0.0
- remark-rehype: 11.1.1
+ remark-rehype: 11.1.2
unified: 11.0.5
unist-util-visit: 5.0.0
vfile: 6.0.3
transitivePeerDependencies:
- supports-color
- react-remove-scroll-bar@2.3.8(@types/react@19.0.12)(react@19.0.0):
+ react-remove-scroll-bar@2.3.8(@types/react@19.1.2)(react@19.1.0):
dependencies:
- react: 19.0.0
- react-style-singleton: 2.2.3(@types/react@19.0.12)(react@19.0.0)
+ react: 19.1.0
+ react-style-singleton: 2.2.3(@types/react@19.1.2)(react@19.1.0)
tslib: 2.8.1
optionalDependencies:
- '@types/react': 19.0.12
+ '@types/react': 19.1.2
- react-remove-scroll@2.6.3(@types/react@19.0.12)(react@19.0.0):
+ react-remove-scroll@2.6.3(@types/react@19.1.2)(react@19.1.0):
dependencies:
- react: 19.0.0
- react-remove-scroll-bar: 2.3.8(@types/react@19.0.12)(react@19.0.0)
- react-style-singleton: 2.2.3(@types/react@19.0.12)(react@19.0.0)
+ react: 19.1.0
+ react-remove-scroll-bar: 2.3.8(@types/react@19.1.2)(react@19.1.0)
+ react-style-singleton: 2.2.3(@types/react@19.1.2)(react@19.1.0)
tslib: 2.8.1
- use-callback-ref: 1.3.3(@types/react@19.0.12)(react@19.0.0)
- use-sidecar: 1.1.3(@types/react@19.0.12)(react@19.0.0)
+ use-callback-ref: 1.3.3(@types/react@19.1.2)(react@19.1.0)
+ use-sidecar: 1.1.3(@types/react@19.1.2)(react@19.1.0)
optionalDependencies:
- '@types/react': 19.0.12
+ '@types/react': 19.1.2
- react-style-singleton@2.2.3(@types/react@19.0.12)(react@19.0.0):
+ react-style-singleton@2.2.3(@types/react@19.1.2)(react@19.1.0):
dependencies:
get-nonce: 1.0.1
- react: 19.0.0
+ react: 19.1.0
tslib: 2.8.1
optionalDependencies:
- '@types/react': 19.0.12
+ '@types/react': 19.1.2
- react@19.0.0: {}
+ react-syntax-highlighter@15.6.1(react@19.1.0):
+ dependencies:
+ '@babel/runtime': 7.27.0
+ highlight.js: 10.7.3
+ highlightjs-vue: 1.0.0
+ lowlight: 1.20.0
+ prismjs: 1.30.0
+ react: 19.1.0
+ refractor: 3.6.0
+
+ react-transition-group@4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
+ dependencies:
+ '@babel/runtime': 7.27.0
+ dom-helpers: 5.2.1
+ loose-envify: 1.4.0
+ prop-types: 15.8.1
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+
+ react@19.1.0: {}
readable-stream@3.6.2:
dependencies:
@@ -7530,6 +9199,12 @@ snapshots:
get-proto: 1.0.1
which-builtin-type: 1.2.1
+ refractor@3.6.0:
+ dependencies:
+ hastscript: 6.0.0
+ parse-entities: 2.0.0
+ prismjs: 1.27.0
+
regenerator-runtime@0.14.1: {}
regexp.prototype.flags@1.5.4:
@@ -7549,6 +9224,12 @@ snapshots:
unist-util-visit: 5.0.0
vfile: 6.0.3
+ rehype-stringify@10.0.1:
+ dependencies:
+ '@types/hast': 3.0.4
+ hast-util-to-html: 9.0.5
+ unified: 11.0.5
+
remark-breaks@4.0.0:
dependencies:
'@types/mdast': 4.0.4
@@ -7597,7 +9278,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- remark-rehype@11.1.1:
+ remark-rehype@11.1.2:
dependencies:
'@types/hast': 3.0.4
'@types/mdast': 4.0.4
@@ -7611,6 +9292,15 @@ snapshots:
mdast-util-to-markdown: 2.1.2
unified: 11.0.5
+ remark@15.0.1:
+ dependencies:
+ '@types/mdast': 4.0.4
+ remark-parse: 11.0.0
+ remark-stringify: 11.0.0
+ unified: 11.0.5
+ transitivePeerDependencies:
+ - supports-color
+
resolve-from@4.0.0: {}
resolve-pkg-maps@1.0.0: {}
@@ -7638,20 +9328,6 @@ snapshots:
dependencies:
glob: 7.2.3
- rspack-resolver@1.2.2:
- optionalDependencies:
- '@unrs/rspack-resolver-binding-darwin-arm64': 1.2.2
- '@unrs/rspack-resolver-binding-darwin-x64': 1.2.2
- '@unrs/rspack-resolver-binding-freebsd-x64': 1.2.2
- '@unrs/rspack-resolver-binding-linux-arm-gnueabihf': 1.2.2
- '@unrs/rspack-resolver-binding-linux-arm64-gnu': 1.2.2
- '@unrs/rspack-resolver-binding-linux-arm64-musl': 1.2.2
- '@unrs/rspack-resolver-binding-linux-x64-gnu': 1.2.2
- '@unrs/rspack-resolver-binding-linux-x64-musl': 1.2.2
- '@unrs/rspack-resolver-binding-wasm32-wasi': 1.2.2
- '@unrs/rspack-resolver-binding-win32-arm64-msvc': 1.2.2
- '@unrs/rspack-resolver-binding-win32-x64-msvc': 1.2.2
-
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
@@ -7677,12 +9353,19 @@ snapshots:
es-errors: 1.3.0
is-regex: 1.2.1
- scheduler@0.25.0: {}
+ scheduler@0.26.0: {}
+
+ section-matter@1.0.0:
+ dependencies:
+ extend-shallow: 2.0.1
+ kind-of: 6.0.3
semver@6.3.1: {}
semver@7.7.1: {}
+ server-only@0.0.1: {}
+
set-blocking@2.0.0: {}
set-function-length@1.2.2:
@@ -7707,31 +9390,32 @@ snapshots:
es-errors: 1.3.0
es-object-atoms: 1.1.1
- sharp@0.33.5:
+ sharp@0.34.1:
dependencies:
color: 4.2.3
detect-libc: 2.0.3
semver: 7.7.1
optionalDependencies:
- '@img/sharp-darwin-arm64': 0.33.5
- '@img/sharp-darwin-x64': 0.33.5
- '@img/sharp-libvips-darwin-arm64': 1.0.4
- '@img/sharp-libvips-darwin-x64': 1.0.4
- '@img/sharp-libvips-linux-arm': 1.0.5
- '@img/sharp-libvips-linux-arm64': 1.0.4
- '@img/sharp-libvips-linux-s390x': 1.0.4
- '@img/sharp-libvips-linux-x64': 1.0.4
- '@img/sharp-libvips-linuxmusl-arm64': 1.0.4
- '@img/sharp-libvips-linuxmusl-x64': 1.0.4
- '@img/sharp-linux-arm': 0.33.5
- '@img/sharp-linux-arm64': 0.33.5
- '@img/sharp-linux-s390x': 0.33.5
- '@img/sharp-linux-x64': 0.33.5
- '@img/sharp-linuxmusl-arm64': 0.33.5
- '@img/sharp-linuxmusl-x64': 0.33.5
- '@img/sharp-wasm32': 0.33.5
- '@img/sharp-win32-ia32': 0.33.5
- '@img/sharp-win32-x64': 0.33.5
+ '@img/sharp-darwin-arm64': 0.34.1
+ '@img/sharp-darwin-x64': 0.34.1
+ '@img/sharp-libvips-darwin-arm64': 1.1.0
+ '@img/sharp-libvips-darwin-x64': 1.1.0
+ '@img/sharp-libvips-linux-arm': 1.1.0
+ '@img/sharp-libvips-linux-arm64': 1.1.0
+ '@img/sharp-libvips-linux-ppc64': 1.1.0
+ '@img/sharp-libvips-linux-s390x': 1.1.0
+ '@img/sharp-libvips-linux-x64': 1.1.0
+ '@img/sharp-libvips-linuxmusl-arm64': 1.1.0
+ '@img/sharp-libvips-linuxmusl-x64': 1.1.0
+ '@img/sharp-linux-arm': 0.34.1
+ '@img/sharp-linux-arm64': 0.34.1
+ '@img/sharp-linux-s390x': 0.34.1
+ '@img/sharp-linux-x64': 0.34.1
+ '@img/sharp-linuxmusl-arm64': 0.34.1
+ '@img/sharp-linuxmusl-x64': 0.34.1
+ '@img/sharp-wasm32': 0.34.1
+ '@img/sharp-win32-ia32': 0.34.1
+ '@img/sharp-win32-x64': 0.34.1
optional: true
shebang-command@2.0.0:
@@ -7740,8 +9424,6 @@ snapshots:
shebang-regex@3.0.0: {}
- shell-quote@1.8.2: {}
-
side-channel-list@1.0.0:
dependencies:
es-errors: 1.3.0
@@ -7783,10 +9465,10 @@ snapshots:
dependencies:
unicode-emoji-modifier-base: 1.0.0
- sonner@2.0.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
+ sonner@2.0.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
- react: 19.0.0
- react-dom: 19.0.0(react@19.0.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
source-map-js@1.2.1: {}
@@ -7795,20 +9477,30 @@ snapshots:
buffer-from: 1.1.2
source-map: 0.6.1
+ source-map@0.5.7: {}
+
source-map@0.6.1: {}
+ space-separated-tokens@1.1.5: {}
+
space-separated-tokens@2.0.2: {}
split2@4.2.0: {}
+ sprintf-js@1.0.3: {}
+
stable-hash@0.0.5: {}
+ state-local@1.0.7: {}
+
stdin-discarder@0.1.0:
dependencies:
bl: 5.1.0
streamsearch@1.1.0: {}
+ string-byte-length@1.6.0: {}
+
string-width@4.2.3:
dependencies:
emoji-regex: 8.0.0
@@ -7882,6 +9574,8 @@ snapshots:
dependencies:
ansi-regex: 6.1.0
+ strip-bom-string@1.0.0: {}
+
strip-bom@3.0.0: {}
strip-final-newline@3.0.0: {}
@@ -7898,10 +9592,12 @@ snapshots:
dependencies:
inline-style-parser: 0.2.4
- styled-jsx@5.1.6(react@19.0.0):
+ styled-jsx@5.1.6(react@19.1.0):
dependencies:
client-only: 0.0.1
- react: 19.0.0
+ react: 19.1.0
+
+ stylis@4.2.0: {}
supports-color@7.2.0:
dependencies:
@@ -7909,9 +9605,11 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
- tailwind-merge@3.0.2: {}
+ tailwind-merge@2.6.0: {}
+
+ tailwind-merge@3.2.0: {}
- tailwindcss@4.0.15: {}
+ tailwindcss@4.1.4: {}
tapable@2.2.1: {}
@@ -7933,21 +9631,56 @@ snapshots:
dependencies:
is-number: 7.0.0
+ toggle-selection@1.0.6: {}
+
tr46@0.0.3: {}
trim-lines@3.0.1: {}
trough@2.2.0: {}
- trpc@0.10.4:
+ trpc-ui@1.0.15(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@mui/material@5.17.1(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@trpc/server@11.1.0(typescript@5.8.3))(@types/react@19.1.2)(monaco-editor@0.52.2)(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(zod@3.24.3):
+ dependencies:
+ '@monaco-editor/react': 4.7.0(monaco-editor@0.52.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@stoplight/json-schema-sampler': 0.3.0
+ '@textea/json-viewer': 3.5.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@mui/material@5.17.1(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@trpc/server': 11.1.0(typescript@5.8.3)
+ clsx: 2.1.1
+ fuzzysort: 2.0.4
+ nuqs: 2.4.3(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)
+ path: 0.12.7
+ pretty-bytes: 6.1.1
+ pretty-ms: 8.0.0
+ react-markdown: 9.1.0(@types/react@19.1.2)(react@19.1.0)
+ string-byte-length: 1.6.0
+ tailwind-merge: 2.6.0
+ url: 0.11.4
+ zod: 3.24.3
+ zod-to-json-schema: 3.24.5(zod@3.24.3)
+ transitivePeerDependencies:
+ - '@emotion/react'
+ - '@emotion/styled'
+ - '@mui/material'
+ - '@remix-run/react'
+ - '@types/react'
+ - immer
+ - monaco-editor
+ - next
+ - react
+ - react-dom
+ - react-router
+ - react-router-dom
+ - supports-color
+
+ trpc@0.11.3:
dependencies:
axios: 0.19.2
transitivePeerDependencies:
- supports-color
- ts-api-utils@2.1.0(typescript@5.8.2):
+ ts-api-utils@2.1.0(typescript@5.8.3):
dependencies:
- typescript: 5.8.2
+ typescript: 5.8.3
tsconfig-paths@3.15.0:
dependencies:
@@ -7960,7 +9693,7 @@ snapshots:
tsx@4.19.3:
dependencies:
- esbuild: 0.25.1
+ esbuild: 0.25.2
get-tsconfig: 4.10.0
optionalDependencies:
fsevents: 2.3.3
@@ -8002,7 +9735,7 @@ snapshots:
possible-typed-array-names: 1.1.0
reflect.getprototypeof: 1.0.10
- typescript@5.8.2: {}
+ typescript@5.8.3: {}
unbox-primitive@1.1.0:
dependencies:
@@ -8011,7 +9744,7 @@ snapshots:
has-symbols: 1.1.0
which-boxed-primitive: 1.1.1
- undici-types@6.19.8: {}
+ undici-types@6.21.0: {}
unicode-emoji-modifier-base@1.0.0: {}
@@ -8061,6 +9794,25 @@ snapshots:
universalify@2.0.1: {}
+ unrs-resolver@1.5.0:
+ optionalDependencies:
+ '@unrs/resolver-binding-darwin-arm64': 1.5.0
+ '@unrs/resolver-binding-darwin-x64': 1.5.0
+ '@unrs/resolver-binding-freebsd-x64': 1.5.0
+ '@unrs/resolver-binding-linux-arm-gnueabihf': 1.5.0
+ '@unrs/resolver-binding-linux-arm-musleabihf': 1.5.0
+ '@unrs/resolver-binding-linux-arm64-gnu': 1.5.0
+ '@unrs/resolver-binding-linux-arm64-musl': 1.5.0
+ '@unrs/resolver-binding-linux-ppc64-gnu': 1.5.0
+ '@unrs/resolver-binding-linux-riscv64-gnu': 1.5.0
+ '@unrs/resolver-binding-linux-s390x-gnu': 1.5.0
+ '@unrs/resolver-binding-linux-x64-gnu': 1.5.0
+ '@unrs/resolver-binding-linux-x64-musl': 1.5.0
+ '@unrs/resolver-binding-wasm32-wasi': 1.5.0
+ '@unrs/resolver-binding-win32-arm64-msvc': 1.5.0
+ '@unrs/resolver-binding-win32-ia32-msvc': 1.5.0
+ '@unrs/resolver-binding-win32-x64-msvc': 1.5.0
+
update-browserslist-db@1.1.3(browserslist@4.24.4):
dependencies:
browserslist: 4.24.4
@@ -8071,23 +9823,36 @@ snapshots:
dependencies:
punycode: 2.3.1
- use-callback-ref@1.3.3(@types/react@19.0.12)(react@19.0.0):
+ url@0.11.4:
+ dependencies:
+ punycode: 1.4.1
+ qs: 6.14.0
+
+ use-callback-ref@1.3.3(@types/react@19.1.2)(react@19.1.0):
dependencies:
- react: 19.0.0
+ react: 19.1.0
tslib: 2.8.1
optionalDependencies:
- '@types/react': 19.0.12
+ '@types/react': 19.1.2
- use-sidecar@1.1.3(@types/react@19.0.12)(react@19.0.0):
+ use-sidecar@1.1.3(@types/react@19.1.2)(react@19.1.0):
dependencies:
detect-node-es: 1.1.0
- react: 19.0.0
+ react: 19.1.0
tslib: 2.8.1
optionalDependencies:
- '@types/react': 19.0.12
+ '@types/react': 19.1.2
+
+ use-sync-external-store@1.5.0(react@19.1.0):
+ dependencies:
+ react: 19.1.0
util-deprecate@1.0.2: {}
+ util@0.10.4:
+ dependencies:
+ inherits: 2.0.3
+
uuid@8.3.2: {}
vfile-message@4.0.2:
@@ -8160,10 +9925,6 @@ 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
@@ -8176,8 +9937,21 @@ snapshots:
yallist@4.0.0: {}
+ yaml@1.10.2: {}
+
yocto-queue@0.1.0: {}
- zod@3.24.2: {}
+ zod-to-json-schema@3.24.5(zod@3.24.3):
+ dependencies:
+ zod: 3.24.3
+
+ zod@3.24.3: {}
+
+ zustand@4.5.6(@types/react@19.1.2)(react@19.1.0):
+ dependencies:
+ use-sync-external-store: 1.5.0(react@19.1.0)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ react: 19.1.0
zwitch@2.0.4: {}
diff --git a/scripts/README.md b/scripts/README.md
index 110fc34..c560936 100644
--- a/scripts/README.md
+++ b/scripts/README.md
@@ -4,21 +4,22 @@ This directory contains utility scripts for setting up and managing your NextWik
## Database Setup Scripts
-### `setup-db.js` (Node.js)
+### `setup-db.ts` (TypeScript)
-A Node.js script that creates a PostgreSQL database in Docker and configures your `.env` file with the connection string.
+A TypeScript script that creates a PostgreSQL database in Docker and configures your `.env` file with the connection string.
```bash
# Run with npm script
-npm run db:setup
+pnpm run db:setup
# Or directly
-node scripts/setup-db.js
+tsx scripts/setup-db.ts
```
### `setup-db.sh` (Bash)
-A bash script that does the same as the Node.js version but for users who prefer shell scripts.
+A bash script that does the same as the TypeScript version but for users who prefer shell scripts.
+Note: This script as of now does not migrate or seed the database.
```bash
# Make sure it's executable first (only needed once)
diff --git a/scripts/create-admin.ts b/scripts/create-admin.ts
deleted file mode 100644
index 3b748c4..0000000
--- a/scripts/create-admin.ts
+++ /dev/null
@@ -1,102 +0,0 @@
-import { db, users, accounts } from "~/lib/db";
-import { eq } from "drizzle-orm";
-import { hash } from "bcrypt";
-import readline from "readline";
-
-// Instead of trying to locate and load .env file here,
-// we'll use env-cmd to run this script:
-// npx env-cmd -f .env tsx scripts/create-admin.ts
-
-const rl = readline.createInterface({
- input: process.stdin,
- output: process.stdout,
-});
-
-async function promptQuestion(question: string): Promise {
- return new Promise((resolve) => {
- rl.question(question, (answer) => {
- resolve(answer);
- });
- });
-}
-
-async function main() {
- console.log("NextWiki Admin User Creation");
- console.log("===========================");
-
- // Check if DATABASE_URL is set
- if (!process.env.DATABASE_URL) {
- console.error("ERROR: DATABASE_URL environment variable is not set.");
- console.error("Please run this script with env-cmd:");
- console.error("npx env-cmd -f .env tsx scripts/create-admin.ts");
- process.exit(1);
- }
-
- const email = await promptQuestion("Email: ");
-
- // Check if user already exists
- const existingUser = await db.query.users.findFirst({
- where: eq(users.email, email),
- });
-
- if (existingUser) {
- const confirm = await promptQuestion(
- `User ${email} already exists. Promote to admin? (y/n): `
- );
- if (confirm.toLowerCase() === "y") {
- await db
- .update(users)
- .set({ isAdmin: true })
- .where(eq(users.email, email));
-
- console.log(`User ${email} has been promoted to admin.`);
- } else {
- console.log("Operation cancelled.");
- }
- } else {
- const name = await promptQuestion("Name: ");
- const password = await promptQuestion("Password: ");
-
- // Hash the password for secure storage
- const hashedPassword = await hash(password, 10);
-
- // Create the user with admin privileges and password
- const [newUser] = await db
- .insert(users)
- .values({
- name,
- email,
- password: hashedPassword, // Store hashed password in the users table
- isAdmin: true,
- })
- .returning();
-
- if (!newUser) {
- throw new Error("Failed to create user");
- }
-
- // Create credentials entry for NextAuth
- await db.insert(accounts).values({
- userId: newUser.id,
- type: "credentials",
- provider: "credentials",
- providerAccountId: newUser.id.toString(), // Use the user ID as the provider account ID
- });
-
- console.log(`Admin user ${email} created successfully.`);
- console.log(
- `You can now log in using the email and password you provided.`
- );
- }
-
- rl.close();
-}
-
-main()
- .catch((err) => {
- console.error("Error creating admin user:", err);
- process.exit(1);
- })
- .finally(() => {
- process.exit(0);
- });
diff --git a/scripts/rebuildRenderedHtml.ts b/scripts/rebuildRenderedHtml.ts
new file mode 100644
index 0000000..eca1257
--- /dev/null
+++ b/scripts/rebuildRenderedHtml.ts
@@ -0,0 +1,13 @@
+import { markdownService } from "~/lib/services/markdown";
+
+async function main() {
+ await markdownService.rebuildAllRenderedHtml();
+}
+
+// Run the main function
+main().catch((error) => {
+ void error;
+ // Error details should have been printed already by internal functions
+ console.error("❌ Setup script failed.");
+ process.exit(1);
+});
diff --git a/scripts/setup-db.js b/scripts/setup-db.js
deleted file mode 100755
index 0adf40d..0000000
--- a/scripts/setup-db.js
+++ /dev/null
@@ -1,201 +0,0 @@
-#!/usr/bin/env node
-
-const { execSync } = require('child_process');
-const fs = require('fs');
-const path = require('path');
-const readline = require('readline');
-
-// Colors for terminal output
-const colors = {
- green: '\x1b[32m',
- blue: '\x1b[34m',
- red: '\x1b[31m',
- reset: '\x1b[0m',
-};
-
-// Docker container configuration
-const config = {
- containerName: 'nextwiki-postgres',
- dbUser: 'nextwiki',
- dbPassword: 'nextwiki_password',
- dbName: 'nextwiki',
- dbPort: '5432',
- hostPort: '5432',
-};
-
-// Utility to print colored messages
-const print = {
- info: (message) => console.log(`${colors.blue}${message}${colors.reset}`),
- success: (message) => console.log(`${colors.green}${message}${colors.reset}`),
- error: (message) => console.log(`${colors.red}${message}${colors.reset}`),
- normal: (message) => console.log(message),
-};
-
-// Utility to run shell commands
-function runCommand(command) {
- try {
- return execSync(command, { encoding: 'utf8' });
- } catch (error) {
- print.error(`Command failed: ${command}`);
- print.error(error.message);
- throw error;
- }
-}
-
-// Check if a command exists in the PATH
-function commandExists(command) {
- try {
- execSync(`which ${command}`, { stdio: 'ignore' });
- return true;
- } catch (error) {
- return false;
- }
-}
-
-// Check if Docker container exists
-function containerExists(name) {
- try {
- const containers = runCommand('docker ps -a --format "{{.Names}}"');
- return containers.split('\n').includes(name);
- } catch (error) {
- return false;
- }
-}
-
-// Check if Docker container is running
-function containerRunning(name) {
- try {
- const containers = runCommand('docker ps --format "{{.Names}}"');
- return containers.split('\n').includes(name);
- } catch (error) {
- return false;
- }
-}
-
-// Update .env file with database connection string
-function updateEnvFile(connectionString) {
- const rootDir = path.resolve(__dirname, '..');
- const envPath = path.join(rootDir, '.env');
- const envExamplePath = path.join(rootDir, '.env.example');
-
- if (fs.existsSync(envPath)) {
- print.normal('Updating existing .env file');
-
- let envContent = fs.readFileSync(envPath, 'utf8');
-
- if (envContent.includes('DATABASE_URL=')) {
- // Replace existing DATABASE_URL
- envContent = envContent.replace(
- /^DATABASE_URL=.*/m,
- `DATABASE_URL=${connectionString}`
- );
- } else {
- // Add DATABASE_URL to .env
- envContent += `\nDATABASE_URL=${connectionString}\n`;
- }
-
- fs.writeFileSync(envPath, envContent);
- } else {
- print.normal('Creating new .env file');
-
- if (fs.existsSync(envExamplePath)) {
- // Copy from example and update
- let envContent = fs.readFileSync(envExamplePath, 'utf8');
- envContent = envContent.replace(
- /^DATABASE_URL=.*/m,
- `DATABASE_URL=${connectionString}`
- );
- fs.writeFileSync(envPath, envContent);
- } else {
- // Create minimal .env file
- fs.writeFileSync(envPath, `DATABASE_URL=${connectionString}\n`);
- }
- }
-}
-
-// Main function
-async function main() {
- print.info('NextWiki Docker Database Setup');
- print.normal('This script will:');
- print.normal('1. Create a PostgreSQL database in a Docker container');
- print.normal('2. Set up the database with required credentials');
- print.normal('3. Update your .env file with the connection string');
- print.normal('');
-
- // Check if Docker is installed
- if (!commandExists('docker')) {
- print.error('Error: Docker is not installed or not in PATH');
- print.normal('Please install Docker and try again');
- process.exit(1);
- }
-
- // Check if Docker is running
- try {
- runCommand('docker info > /dev/null 2>&1');
- } catch (error) {
- print.error('Error: Docker is not running');
- print.normal('Please start Docker and try again');
- process.exit(1);
- }
-
- // Check if container already exists
- if (containerExists(config.containerName)) {
- print.info(`Container ${config.containerName} already exists`);
-
- // Check if container is running
- if (containerRunning(config.containerName)) {
- print.normal('Container is already running');
- } else {
- print.normal('Starting existing container...');
- runCommand(`docker start ${config.containerName}`);
- print.success('Container started successfully');
- }
- } else {
- print.info('Creating new PostgreSQL container...');
-
- // Run PostgreSQL container
- runCommand(`docker run --name ${config.containerName} \
- -e POSTGRES_USER=${config.dbUser} \
- -e POSTGRES_PASSWORD=${config.dbPassword} \
- -e POSTGRES_DB=${config.dbName} \
- -p ${config.hostPort}:${config.dbPort} \
- -d postgres:15`);
-
- print.normal('Waiting for PostgreSQL to start up...');
- await new Promise(resolve => setTimeout(resolve, 5000));
-
- // Check if container is running
- if (!containerRunning(config.containerName)) {
- print.error('Container failed to start properly');
- print.normal(`Check Docker logs with: docker logs ${config.containerName}`);
- process.exit(1);
- }
-
- print.success('PostgreSQL container created and running');
- }
-
- // Create connection string
- const connectionString = `postgresql://${config.dbUser}:${config.dbPassword}@localhost:${config.hostPort}/${config.dbName}`;
-
- // Update .env file
- updateEnvFile(connectionString);
-
- print.success('Database setup completed successfully!');
- print.normal(`Connection string: ${connectionString}`);
- print.normal('');
- print.normal('Your .env file has been updated with the database connection string.');
- print.normal('');
- print.info('Next steps:');
- print.normal('1. Run migrations: npm run db:migrate');
- print.normal('2. Start the application: npm run dev');
- print.normal('');
- print.normal(`To stop the database container: docker stop ${config.containerName}`);
- print.normal(`To start it again: docker start ${config.containerName}`);
-}
-
-// Run the main function
-main().catch(error => {
- print.error('An error occurred:');
- print.error(error.message);
- process.exit(1);
-});
\ No newline at end of file
diff --git a/scripts/setup-db.ts b/scripts/setup-db.ts
new file mode 100644
index 0000000..d9819b2
--- /dev/null
+++ b/scripts/setup-db.ts
@@ -0,0 +1,328 @@
+#!/usr/bin/env node
+
+import { execSync } from "child_process";
+import * as fs from "fs";
+import * as path from "path";
+import pg from "pg";
+import * as url from "url";
+
+// Colors for terminal output
+const colors = {
+ green: "\x1b[32m",
+ blue: "\x1b[34m",
+ red: "\x1b[31m",
+ reset: "\x1b[0m",
+};
+
+// Docker container configuration
+const config = {
+ containerName: "nextwiki-postgres",
+ dbUser: "nextwiki",
+ dbPassword: "nextwiki_password",
+ dbName: "nextwiki",
+ dbPort: "5432",
+ hostPort: "5432", // Use the same port for host and container for simplicity
+};
+
+// Utility to print colored messages
+const print = {
+ info: (message: string) =>
+ console.log(`${colors.blue}${message}${colors.reset}`),
+ success: (message: string) =>
+ console.log(`${colors.green}${message}${colors.reset}`),
+ error: (message: string) =>
+ console.log(`${colors.red}${message}${colors.reset}`),
+ normal: (message: string) => console.log(message),
+};
+
+// Utility to run shell commands
+function runCommand(command: string, ignoreError = false): string | null {
+ try {
+ print.normal(`Executing: ${command}`);
+ const output = execSync(command, { encoding: "utf8", stdio: "pipe" }); // Use pipe to capture output, inherit for logs if needed
+ // print.normal(output); // Optionally log command output
+ return output;
+ } catch (error: unknown) {
+ print.error(`Command failed: ${command}`);
+ if (error instanceof Error && "stderr" in error) {
+ print.error(`Stderr: ${error.stderr}`);
+ }
+ if (error instanceof Error && "stdout" in error) {
+ print.error(`Stdout: ${error.stdout}`); // Log stdout on error too
+ }
+ if (!ignoreError) {
+ throw error;
+ }
+ return null;
+ }
+}
+
+// Check if a command exists in the PATH
+function commandExists(command: string): boolean {
+ try {
+ // Use 'command -v' which is more portable than 'which'
+ execSync(`command -v ${command}`, { stdio: "ignore" });
+ return true;
+ } catch (error) {
+ void error;
+ return false;
+ }
+}
+
+// Check if Docker container exists
+function containerExists(name: string): boolean {
+ try {
+ const output = runCommand('docker ps -a --format "{{.Names}}"');
+ return !!output && output.split("\n").includes(name);
+ } catch (error) {
+ void error;
+ // If docker command fails (e.g., docker not running), treat as container not existing
+ return false;
+ }
+}
+
+// Check if Docker container is running
+function containerRunning(name: string): boolean {
+ try {
+ const output = runCommand('docker ps --format "{{.Names}}"');
+ return !!output && output.split("\n").includes(name);
+ } catch (error) {
+ void error;
+ // If docker command fails, treat as container not running
+ return false;
+ }
+}
+
+// Update .env file with database connection string
+function updateEnvFile(connectionString: string): void {
+ // console.log("*** Entering updateEnvFile function ***"); // Removed debug log
+ // console.log(`Value of __dirname: ${__dirname}`); // Removed debug log
+
+ // ESM-compatible way to get directory name
+ const __filename = url.fileURLToPath(import.meta.url);
+ const __dirname = path.dirname(__filename);
+
+ const rootDir = path.resolve(__dirname, "..");
+ const envPath = path.join(rootDir, ".env");
+ const envExamplePath = path.join(rootDir, ".env.example");
+ const dbUrlKey = "DATABASE_URL";
+ const dbUrlLine = `${dbUrlKey}=${connectionString}`;
+
+ print.normal(` Resolved root directory: ${rootDir}`); // Keep this log for now
+ print.normal(` Target .env path: ${envPath}`); // Keep this log for now
+
+ print.normal(`Ensuring ${dbUrlKey} is set in ${envPath}`);
+
+ try {
+ if (fs.existsSync(envPath)) {
+ print.normal(` Reading existing ${envPath}...`);
+ let envContent = fs.readFileSync(envPath, "utf8");
+ const dbUrlRegex = new RegExp(`^${dbUrlKey}=.*`, "m");
+
+ if (dbUrlRegex.test(envContent)) {
+ envContent = envContent.replace(dbUrlRegex, dbUrlLine);
+ print.normal(` Updating existing ${dbUrlKey} in ${envPath}...`);
+ } else {
+ envContent += `\n${dbUrlLine}\n`;
+ print.normal(` Adding ${dbUrlKey} to ${envPath}...`);
+ }
+ fs.writeFileSync(envPath, envContent);
+ print.normal(` Successfully wrote changes to ${envPath}`);
+ } else {
+ print.normal(` ${envPath} not found. Checking for example file...`);
+ let envContent = "";
+ if (fs.existsSync(envExamplePath)) {
+ print.normal(` Reading example file ${envExamplePath}...`);
+ envContent = fs.readFileSync(envExamplePath, "utf8");
+ const dbUrlRegex = new RegExp(`^${dbUrlKey}=.*`, "m");
+ if (dbUrlRegex.test(envContent)) {
+ envContent = envContent.replace(dbUrlRegex, dbUrlLine);
+ print.normal(` Used ${envExamplePath} as template, updated key.`);
+ } else {
+ envContent += `\n${dbUrlLine}\n`;
+ print.normal(` Used ${envExamplePath} as template, added key.`);
+ }
+ } else {
+ // Create minimal .env file
+ print.normal(` No example file found. Creating minimal ${envPath}...`);
+ envContent = `${dbUrlLine}\n`;
+ }
+ fs.writeFileSync(envPath, envContent);
+ print.normal(` Successfully created/wrote ${envPath}`);
+ }
+ } catch (error: unknown) {
+ print.error(` ❌ Error occurred within updateEnvFile function:`);
+ if (error instanceof Error) {
+ print.error(` Message: ${error.message}`);
+ print.error(` Stack: ${error.stack}`);
+ } else {
+ print.error(` Unknown error: ${String(error)}`);
+ }
+ throw error; // Re-throw the error to stop the script
+ }
+}
+
+// Function to wait for DB connection
+async function waitForDB(
+ connectionString: string,
+ retries = 15,
+ delay = 3000
+): Promise {
+ print.info(`Attempting to connect to database... (up to ${retries} retries)`);
+ for (let i = 0; i < retries; i++) {
+ try {
+ const pool = new pg.Pool({ connectionString });
+ await pool.query("SELECT 1");
+ await pool.end();
+ print.success("Database connection successful!");
+ return;
+ } catch (error: unknown) {
+ const errorMessage =
+ error instanceof Error ? error.message : String(error);
+ print.error(`DB connection attempt ${i + 1} failed: ${errorMessage}`);
+ print.normal(`Retrying in ${delay / 1000}s...`);
+ if (i === retries - 1) {
+ print.error("Database connection failed after multiple retries.");
+ if (error instanceof Error) {
+ print.error(`Stack Trace: ${error.stack}`);
+ }
+ throw error;
+ }
+ await new Promise((resolve) => setTimeout(resolve, delay));
+ }
+ }
+}
+
+// Main function
+async function main(): Promise {
+ print.info("🚀 NextWiki Docker Database Setup 🚀");
+ print.normal("This script will:");
+ print.normal("1. Check for Docker and required commands (pnpm).");
+ print.normal("2. Ensure a PostgreSQL container is running.");
+ print.normal("3. Update your .env file with the connection string.");
+ print.normal("4. Wait for the database to be ready.");
+ print.normal("5. Generate Drizzle migrations.");
+ print.normal("6. Apply Drizzle migrations.");
+ print.normal("7. Seed the database.");
+ print.normal("");
+
+ // --- Prerequisites Check ---
+ if (!commandExists("docker")) {
+ print.error("❌ Error: Docker is not installed or not in PATH.");
+ print.normal("Please install Docker: https://docs.docker.com/get-docker/");
+ process.exit(1);
+ }
+ if (!commandExists("pnpm")) {
+ print.error("❌ Error: pnpm is not installed or not in PATH.");
+ print.normal("Please install pnpm: https://pnpm.io/installation");
+ process.exit(1);
+ }
+
+ try {
+ runCommand("docker info", true); // Check if Docker daemon is running
+ } catch (error) {
+ void error;
+ print.error("❌ Error: Docker daemon is not running.");
+ print.normal("Please start Docker and try again.");
+ process.exit(1);
+ }
+ print.success("✅ Prerequisites met (Docker, pnpm).");
+
+ // --- Docker Container Setup ---
+ if (containerExists(config.containerName)) {
+ print.info(`➡️ Container "${config.containerName}" already exists.`);
+ if (!containerRunning(config.containerName)) {
+ print.normal("Starting existing container...");
+ runCommand(`docker start ${config.containerName}`);
+ print.success("Container started.");
+ } else {
+ print.normal("Container is already running.");
+ }
+ } else {
+ print.info(
+ `✨ Creating new PostgreSQL container "${config.containerName}"...`
+ );
+ const dockerCommand = `docker run --name ${config.containerName} \
+ -e POSTGRES_USER=${config.dbUser} \
+ -e POSTGRES_PASSWORD=${config.dbPassword} \
+ -e POSTGRES_DB=${config.dbName} \
+ -p ${config.hostPort}:${config.dbPort} \
+ --health-cmd="pg_isready -U ${config.dbUser} -d ${config.dbName}" \
+ --health-interval=5s \
+ --health-timeout=5s \
+ --health-retries=5 \
+ -d postgres:17`; // Using postgres:17, consider locking version or making configurable
+ runCommand(dockerCommand);
+
+ // Wait briefly for container to initialize before checking health/connection
+ print.normal("Waiting a few seconds for container to initialize...");
+ await new Promise((resolve) => setTimeout(resolve, 5000));
+
+ if (!containerRunning(config.containerName)) {
+ print.error("❌ Container failed to start properly.");
+ print.normal(`Check Docker logs: docker logs ${config.containerName}`);
+ process.exit(1);
+ }
+ print.success("✅ PostgreSQL container created and running.");
+ }
+
+ // --- Environment Setup ---
+ const connectionString = `postgresql://${config.dbUser}:${config.dbPassword}@localhost:${config.hostPort}/${config.dbName}`;
+ print.info("🔄 Updating .env file...");
+ updateEnvFile(connectionString);
+ print.success("✅ .env file update attempt finished.");
+ print.normal(
+ `Using connection string: ${connectionString.replace(
+ config.dbPassword,
+ "****"
+ )}`
+ ); // Hide password in log
+
+ // --- Wait for DB ---
+ print.info("⏳ Waiting for database connection...");
+ await waitForDB(connectionString);
+ print.success("✅ Database connection established.");
+
+ // --- Database Schema and Data ---
+ try {
+ print.info("🔄 Generating database migrations...");
+ runCommand("pnpm db:generate");
+ print.success("✅ Migrations generated successfully.");
+
+ print.info("🔄 Applying database migrations...");
+ runCommand("pnpm db:migrate"); // Assumes 'db:migrate' script uses tsx
+ print.success("✅ Migrations applied successfully.");
+
+ print.info("🌱 Seeding database...");
+ runCommand("pnpm db:seed"); // Assumes 'db:seed' script uses tsx
+ print.success("✅ Database seeded successfully.");
+ } catch (error) {
+ void error;
+ print.error("❌ An error occurred during migration or seeding.");
+ // Error details are already printed by runCommand
+ process.exit(1);
+ }
+
+ // --- Completion ---
+ print.success("🎉 All setup steps completed successfully! 🎉");
+ print.normal("");
+ print.info("Next steps:");
+ print.normal(" Start the application: pnpm dev");
+ print.normal("");
+ print.info("Container management:");
+ print.normal(` Stop the database: docker stop ${config.containerName}`);
+ print.normal(` Start the database: docker start ${config.containerName}`);
+ print.normal(` View logs: docker logs ${config.containerName}`);
+ print.normal(` Remove the container: docker rm -f ${config.containerName}`);
+ print.normal(
+ ` Remove container and data: docker rm -f -v ${config.containerName}`
+ );
+}
+
+// Run the main function
+main().catch((error) => {
+ void error;
+ // Error details should have been printed already by internal functions
+ print.error("❌ Setup script failed.");
+ process.exit(1);
+});
diff --git a/src/app/(auth)/layout.tsx b/src/app/(auth)/layout.tsx
new file mode 100644
index 0000000..c6adee8
--- /dev/null
+++ b/src/app/(auth)/layout.tsx
@@ -0,0 +1,7 @@
+export default function LoginLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return {children}
;
+}
diff --git a/src/app/(auth)/login/page.tsx b/src/app/(auth)/login/page.tsx
new file mode 100644
index 0000000..504e183
--- /dev/null
+++ b/src/app/(auth)/login/page.tsx
@@ -0,0 +1,54 @@
+"use client";
+
+import { LoginForm } from "~/components/auth/LoginForm";
+import { Suspense, useEffect } from "react";
+import { useRouter } from "next/navigation";
+import { usePermissions } from "~/components/auth/permission/client";
+import { Button } from "~/components/ui/button";
+import { ArrowLeftIcon } from "lucide-react";
+
+export default function LoginPage() {
+ const router = useRouter();
+ const { isAuthenticated, hasPermission } = usePermissions();
+
+ useEffect(() => {
+ if (isAuthenticated) {
+ router.push("/");
+ }
+ }, [isAuthenticated, router]);
+
+ const hasWikiReadPermission = hasPermission("wiki:page:read");
+
+ return (
+
+
+
+
+ Sign in to NextWiki
+
+ {!hasWikiReadPermission && (
+
+ This is a private wiki. You need to be logged in to access it.
+
+ )}
+
+
+
Loading login form... }>
+
+
+
+
+ {/* Show the back to home button if the user has the wiki:page:read permission, otherwise they will be redirected back here so no need to show it */}
+ {hasWikiReadPermission && (
+ router.push("/")}
+ >
+
+ Back to home
+
+ )}
+
+ );
+}
diff --git a/src/app/(auth)/register/page.tsx b/src/app/(auth)/register/page.tsx
new file mode 100644
index 0000000..28f1b65
--- /dev/null
+++ b/src/app/(auth)/register/page.tsx
@@ -0,0 +1,51 @@
+"use client";
+
+import { ArrowLeftIcon } from "lucide-react";
+import { useRouter } from "next/navigation";
+import { useEffect } from "react";
+import { RegisterForm } from "~/components/auth/RegisterForm";
+import { usePermissions } from "~/components/auth/permission/client";
+import { Button } from "~/components/ui/button";
+
+export default function RegisterPage({
+ isFirstUser = false,
+}: {
+ isFirstUser?: boolean;
+}) {
+ const router = useRouter();
+ const { isAuthenticated } = usePermissions();
+
+ useEffect(() => {
+ if (isAuthenticated) {
+ router.push("/");
+ }
+ }, [isAuthenticated, router]);
+
+ return (
+
+
+
+
+ {isFirstUser ? "Create Admin Account" : "Create Account"}
+
+ {isFirstUser && (
+
+ This will be the first user and will have admin privileges
+
+ )}
+
+
+
+
+
router.push("/")}
+ >
+
+ Back to home
+
+
+
+ );
+}
diff --git a/src/app/[...path]/not-found.tsx b/src/app/[...path]/not-found.tsx
index a8fe562..ea2067e 100644
--- a/src/app/[...path]/not-found.tsx
+++ b/src/app/[...path]/not-found.tsx
@@ -1,23 +1,21 @@
import Link from "next/link";
import { MainLayout } from "~/components/layout/MainLayout";
+import { Button } from "~/components/ui/button";
import { CreatePageButton } from "~/components/wiki/CreatePageButton";
export default function WikiNotFound() {
return (
-
404
+
404
Wiki Page Not Found
-
+
The wiki page you're looking for doesn't exist or has been
moved.
-
- Browse All Pages
+
+ Browse All Pages
diff --git a/src/app/[...path]/page.tsx b/src/app/[...path]/page.tsx
index 29663ef..e7b7499 100644
--- a/src/app/[...path]/page.tsx
+++ b/src/app/[...path]/page.tsx
@@ -1,22 +1,27 @@
-import { notFound } from "next/navigation";
+import { notFound, redirect } from "next/navigation";
import { MainLayout } from "~/components/layout/MainLayout";
import { WikiPage } from "~/components/wiki/WikiPage";
import { WikiEditor } from "~/components/wiki/WikiEditor";
-import { HighlightedMarkdown } from "~/components/wiki/HighlightedMarkdown";
-import { db } from "~/lib/db";
+import { HighlightedContent } from "~/lib/markdown/client";
+import { db } from "~/lib/db/index";
import { wikiPages } from "~/lib/db/schema";
import { eq } from "drizzle-orm";
import { getServerSession } from "next-auth";
import { authOptions } from "~/lib/auth";
import { Suspense } from "react";
import { PageLocationEditor } from "~/components/wiki/PageLocationEditor";
+import { renderWikiMarkdownToHtml } from "~/lib/services/markdown";
+import { authorizationService } from "~/lib/services/authorization";
+
+export const dynamic = "auto";
+export const revalidate = 300; // 5 minutes
+export const fetchCache = "force-cache";
async function getWikiPageByPath(path: string[]) {
// Decode each path segment individually
const decodedPath = path.map((segment) => decodeURIComponent(segment));
const joinedPath = decodedPath.join("/").replace("%20", " ");
- // FIXME: Use dbService to get the page
const page = await db.query.wikiPages.findFirst({
where: eq(wikiPages.path, joinedPath),
with: {
@@ -31,7 +36,21 @@ async function getWikiPageByPath(path: string[]) {
},
});
- // Return null if page is not found
+ if (
+ page?.renderedHtml &&
+ page?.renderedHtmlUpdatedAt &&
+ page?.renderedHtmlUpdatedAt > (page?.updatedAt ?? new Date())
+ ) {
+ return page;
+ }
+
+ // If page is found and has content, pre-render the markdown to HTML with wiki link validation
+ if (page && page.content) {
+ const renderedHtml = await renderWikiMarkdownToHtml(page.content, page.id);
+ page.renderedHtml = renderedHtml;
+ page.renderedHtmlUpdatedAt = new Date();
+ }
+
return page;
}
@@ -52,12 +71,22 @@ export default async function WikiPageView({
const resolvedParams = await params;
const resolvedSearchParams = await searchParams;
- const page = await getWikiPageByPath(resolvedParams.path);
const session = await getServerSession(authOptions);
const currentUserId = session?.user?.id
? parseInt(session.user.id)
: undefined;
+ const canAccessPage = await authorizationService.hasPermission(
+ currentUserId,
+ "wiki:page:read"
+ );
+
+ if (!canAccessPage) {
+ redirect("/");
+ }
+
+ const page = await getWikiPageByPath(resolvedParams.path);
+
if (!page) {
notFound();
}
@@ -68,6 +97,13 @@ export default async function WikiPageView({
// Edit mode
if (isEditMode) {
+ const canEditPage = await authorizationService.hasPermission(
+ currentUserId,
+ "wiki:page:update"
+ );
+ if (!canEditPage) {
+ redirect("/");
+ }
return (
Loading... }>
-
+
}
createdAt={new Date(page.createdAt ?? new Date())}
diff --git a/src/app/admin/[404]/page.tsx b/src/app/admin/[404]/page.tsx
new file mode 100644
index 0000000..7ea5bc3
--- /dev/null
+++ b/src/app/admin/[404]/page.tsx
@@ -0,0 +1,7 @@
+import { notFound } from "next/navigation";
+
+// This is a page that is used to trigger a 404 error, because we have a catch-all route for all pages in
+// app/[...path]/page.tsx, and we want to trigger a 404 error for all admin pages.
+export default function NotFoundTrigger() {
+ notFound();
+}
diff --git a/src/app/admin/assets/page.tsx b/src/app/admin/assets/page.tsx
index 86b06f1..57d6e84 100644
--- a/src/app/admin/assets/page.tsx
+++ b/src/app/admin/assets/page.tsx
@@ -1,31 +1,44 @@
"use client";
import { useState } from "react";
-import { trpc } from "~/lib/trpc/client";
+import { useTRPC } from "~/lib/trpc/client";
+import { useQuery, useMutation } from "@tanstack/react-query";
import { useNotification } from "~/lib/hooks/useNotification";
-import { AdminLayout } from "~/components/layout/AdminLayout";
+import { Input } from "~/components/ui/input";
+import Image from "next/image";
+import {
+ Select,
+ SelectContent,
+ SelectItem,
+ SelectTrigger,
+ SelectValue,
+} from "~/components/ui/select";
export default function AssetsAdminPage() {
const notification = useNotification();
const [searchTerm, setSearchTerm] = useState("");
const [selectedFileType, setSelectedFileType] = useState("all");
+ const trpc = useTRPC();
+
// Get all assets
- const assetsQuery = trpc.assets.getAll.useQuery({});
+ const assetsQuery = useQuery(trpc.assets.getAll.queryOptions({}));
// Delete asset mutation
- const deleteAssetMutation = trpc.assets.delete.useMutation({
- onSuccess: () => {
- notification.success("Asset deleted successfully");
- assetsQuery.refetch();
- },
- onError: (error) => {
- notification.error(`Failed to delete asset: ${error.message}`);
- },
- });
+ const deleteAssetMutation = useMutation(
+ trpc.assets.delete.mutationOptions({
+ onSuccess: () => {
+ notification.success("Asset deleted successfully");
+ assetsQuery.refetch();
+ },
+ onError: (error) => {
+ notification.error(`Failed to delete asset: ${error.message}`);
+ },
+ })
+ );
// Handle asset deletion
- const handleDeleteAsset = (assetId: number) => {
+ const handleDeleteAsset = (assetId: string) => {
if (confirm("Are you sure you want to delete this asset?")) {
deleteAssetMutation.mutate({ id: assetId });
}
@@ -52,165 +65,169 @@ export default function AssetsAdminPage() {
: [];
return (
-
-
-
Asset Management
+
+
Asset Management
- {/* Search and filter controls */}
-
-
- setSearchTerm(e.target.value)}
- />
-
-
-
setSelectedFileType(e.target.value)}
- className="w-full px-3 py-2 border rounded-md"
- >
- All file types
+ {/* Search and filter controls */}
+
+
+ setSearchTerm(e.target.value)}
+ />
+
+
+ setSelectedFileType(value)}
+ >
+
+
+
+
+ All file types
{fileTypes.map((type) => (
-
+
{type.charAt(0).toUpperCase() + type.slice(1)}
-
+
))}
-
-
+
+
+
- {/* Loading state */}
- {assetsQuery.isLoading && (
-
- )}
+ {/* Loading state */}
+ {assetsQuery.isLoading && (
+
+ )}
- {/* Empty state */}
- {!assetsQuery.isLoading && filteredAssets.length === 0 && (
-
-
-
-
-
- No assets found
-
-
- {searchTerm || selectedFileType !== "all"
- ? "Try adjusting your search or filter criteria"
- : "Upload some files through the wiki editor to get started"}
-
-
- )}
+ {/* Empty state */}
+ {!assetsQuery.isLoading && filteredAssets.length === 0 && (
+
+
+
+
+
+ No assets found
+
+
+ {searchTerm || selectedFileType !== "all"
+ ? "Try adjusting your search or filter criteria"
+ : "Upload some files through the wiki editor to get started"}
+
+
+ )}
- {/* Asset table */}
- {!assetsQuery.isLoading && filteredAssets.length > 0 && (
-
-
-
-
- Preview
- File Name
- Type
- Size
- Uploaded By
- Page
- Date
- Actions
-
-
-
- {filteredAssets.map((asset) => (
-
-
- {asset.fileType.startsWith("image/") ? (
-
- ) : (
-
- )}
-
- {asset.fileName}
- {asset.fileType}
-
- {formatFileSize(asset.fileSize)}
-
-
- {asset.uploadedBy?.name || "Unknown"}
-
-
- {asset.pageId ? (
-
- View Page
-
- ) : (
- "Not attached"
- )}
-
- {formatDate(asset.createdAt)}
-
-
-
+ )}
+
+ {asset.fileName}
+ {asset.fileType}
+
+ {formatFileSize(asset.fileSize)}
+
+
+ {asset.uploadedBy?.name || "Unknown"}
+
+
+ {asset.id ? (
+
+ View Page
+
+ ) : (
+ "Not attached"
+ )}
+
+ {formatDate(asset.createdAt)}
+
+
+
+ View
+
+
handleDeleteAsset(asset.id)}
+ className="text-red-600 hover:underline"
+ >
+ Delete
+
+
+
+
+ ))}
+
+
+
+ )}
+
);
}
diff --git a/src/app/admin/dashboard/page.tsx b/src/app/admin/dashboard/page.tsx
new file mode 100644
index 0000000..209b9a4
--- /dev/null
+++ b/src/app/admin/dashboard/page.tsx
@@ -0,0 +1,197 @@
+"use client";
+
+import { useState, useEffect } from "react";
+import { Card } from "~/components/ui/card";
+
+interface StatsItem {
+ title: string;
+ value: number | string;
+ icon: React.ReactNode;
+}
+
+export default function AdminDashboardPage() {
+ const [isLoading, setIsLoading] = useState(true);
+
+ // In a real implementation, you would fetch these values from your API
+ const [stats, setStats] = useState
([
+ {
+ title: "Total Pages",
+ value: "...",
+ icon: (
+
+
+
+ ),
+ },
+ {
+ title: "Total Users",
+ value: "...",
+ icon: (
+
+
+
+ ),
+ },
+ {
+ title: "Total Assets",
+ value: "...",
+ icon: (
+
+
+
+ ),
+ },
+ {
+ title: "User Groups",
+ value: "...",
+ icon: (
+
+
+
+ ),
+ },
+ ]);
+
+ // Simulate loading data
+ useEffect(() => {
+ const timer = setTimeout(() => {
+ setStats([
+ { ...stats[0], value: 42 },
+ { ...stats[1], value: 15 },
+ { ...stats[2], value: 87 },
+ { ...stats[3], value: 5 },
+ ]);
+ setIsLoading(false);
+ }, 1000);
+
+ return () => clearTimeout(timer);
+ });
+
+ return (
+
+
+
Admin Dashboard
+
Overview of your NextWiki system
+
+
+
+ {stats.map((stat, index) => (
+
+
+
+ {stat.icon}
+
+
+
+ {stat.title}
+
+
+ {isLoading ? (
+
+ ) : (
+ stat.value
+ )}
+
+
+
+
+ ))}
+
+
+
+
+ Recent Pages
+ {isLoading ? (
+
+ {[...Array(3)].map((_, i) => (
+
+ ))}
+
+ ) : (
+
+
+ Recent page activity will be shown here
+
+
+ )}
+
+
+
+ System Health
+ {isLoading ? (
+
+ {[...Array(3)].map((_, i) => (
+
+ ))}
+
+ ) : (
+
+
+ Database
+ Healthy
+
+
+ Storage
+ Healthy
+
+
+ Cache
+ Healthy
+
+
+ )}
+
+
+
+ );
+}
diff --git a/src/app/admin/example/page.tsx b/src/app/admin/example/page.tsx
new file mode 100644
index 0000000..e90d55e
--- /dev/null
+++ b/src/app/admin/example/page.tsx
@@ -0,0 +1,86 @@
+import { Metadata } from "next";
+import { notFound } from "next/navigation";
+import { PermissionGate } from "~/components/auth/permission/server";
+import { PermissionsExample } from "~/components/auth/PermissionsExample";
+import { env } from "~/env";
+
+export const metadata: Metadata = {
+ title: "Permission Examples | NextWiki",
+ description: "Server-side permission checking examples",
+};
+
+export default function PermissionExamplesPage() {
+ if (env.NODE_ENV !== "development") {
+ notFound();
+ }
+
+ return (
+
+
Permission Examples
+
+
+
Single Permission Check
+
+
+
+
+ You have permission to read wiki pages.
+
+
+
+
+ You do not have permission to read wiki pages.
+
+
+
+
+
+
+
+ Multiple Permissions Check (Any)
+
+
+
+
+
+ You have permission to create or update wiki pages.
+
+
+
+
+ You do not have permission to create or update wiki pages.
+
+
+
+
+
+
+
With Redirect Example
+
+ In this example, if you don't have admin permissions, you would
+ be redirected to the login page. Since we want to show this example,
+ we're not using the redirect here, but it would look like:
+
+
+ {`
+
+ Admin content here
+
+
+ Redirecting to login...
+
+ `}
+
+
+
+
+
+ Client-side permission checking
+
+
+
+
+ );
+}
diff --git a/src/app/admin/groups/[id]/edit/page.tsx b/src/app/admin/groups/[id]/edit/page.tsx
new file mode 100644
index 0000000..a17d61f
--- /dev/null
+++ b/src/app/admin/groups/[id]/edit/page.tsx
@@ -0,0 +1,90 @@
+import { Metadata } from "next";
+import { getServerAuthSession } from "~/lib/auth";
+import { redirect } from "next/navigation";
+import { dbService } from "~/lib/services";
+import GroupForm from "../../group-form";
+import { notFound } from "next/navigation";
+
+interface EditGroupPageProps {
+ params: {
+ id: string;
+ };
+}
+
+export async function generateMetadata({
+ params,
+}: EditGroupPageProps): Promise {
+ const group = await dbService.groups.getById(parseInt(params.id));
+ return {
+ title: `Edit ${group?.name ?? "Group"} | NextWiki`,
+ description: "Edit user group settings and permissions",
+ };
+}
+
+export default async function EditGroupPage({ params }: EditGroupPageProps) {
+ const session = await getServerAuthSession();
+
+ // Redirect if not logged in
+ if (!session?.user) {
+ redirect("/login");
+ }
+
+ // Redirect if not admin
+ if (!session.user.isAdmin) {
+ redirect("/");
+ }
+
+ const group = await dbService.groups.getById(parseInt(params.id));
+ if (!group) {
+ notFound();
+ }
+
+ // Get all permissions
+ const permissions = await dbService.permissions.getAll();
+
+ // Get group permissions
+ const groupPermissions = await dbService.groups.getGroupPermissions(group.id);
+ const groupPermissionIds = groupPermissions.map((p) => p.id);
+
+ // Get module permissions
+ const modulePermissions = await dbService.groups.getModulePermissions(
+ group.id
+ );
+ const modulePermissionModules = modulePermissions.map((p) => p.module);
+
+ // Get action permissions
+ const actionPermissions = await dbService.groups.getActionPermissions(
+ group.id
+ );
+ const actionPermissionActions = actionPermissions.map((p) => p.action);
+
+ return (
+
+
Edit Group
+
+
+
+ Edit group settings and configure its permissions. Changes will affect
+ all users in this group.
+
+
+
+
+
+ );
+}
diff --git a/src/app/admin/groups/[id]/users/add-users-modal.tsx b/src/app/admin/groups/[id]/users/add-users-modal.tsx
new file mode 100644
index 0000000..048bdbb
--- /dev/null
+++ b/src/app/admin/groups/[id]/users/add-users-modal.tsx
@@ -0,0 +1,219 @@
+"use client";
+
+import { useState } from "react";
+import { UserPlus, Loader2, Search } from "lucide-react";
+import { Button } from "~/components/ui/button";
+import Modal from "~/components/ui/modal";
+import { Input } from "~/components/ui/input";
+import { Checkbox } from "~/components/ui/checkbox";
+import { useTRPC } from "~/lib/trpc/client";
+import { useQuery, useMutation } from "@tanstack/react-query";
+import { toast } from "sonner";
+
+interface AddUsersModalProps {
+ groupId: number;
+ groupName: string;
+}
+
+export default function AddUsersModal({
+ groupId,
+ groupName,
+}: AddUsersModalProps) {
+ const [isModalOpen, setIsModalOpen] = useState(false);
+ const [searchQuery, setSearchQuery] = useState("");
+ const [selectedUsers, setSelectedUsers] = useState([]);
+ const [isAdding, setIsAdding] = useState(false);
+
+ const trpc = useTRPC();
+
+ // Get all users
+ const { data: allUsers, isLoading: loadingUsers } = useQuery(
+ trpc.users.getAll.queryOptions(undefined, {
+ enabled: isModalOpen,
+ })
+ );
+
+ // Get existing group users to exclude them
+ const { data: groupUsers } = useQuery(
+ trpc.groups.getGroupUsers.queryOptions(
+ { groupId },
+ {
+ enabled: isModalOpen,
+ }
+ )
+ );
+
+ // Filter users that are not in the group already and match the search query
+ const filteredUsers = allUsers?.filter((user) => {
+ // Filter out users already in the group
+ const alreadyInGroup = groupUsers?.some(
+ (groupUser) => groupUser.id === user.id
+ );
+ if (alreadyInGroup) return false;
+
+ // Filter by search query
+ if (!searchQuery) return true;
+
+ const query = searchQuery.toLowerCase();
+ return (
+ user.name?.toLowerCase().includes(query) ||
+ false ||
+ user.email.toLowerCase().includes(query)
+ );
+ });
+
+ const addUsersMutation = useMutation(
+ trpc.groups.addUsers.mutationOptions({
+ onSuccess: () => {
+ toast.success("Users added to group successfully");
+ setIsModalOpen(false);
+ // Refresh the page to update the user list
+ window.location.reload();
+ },
+ onError: (error) => {
+ toast.error(error.message || "Failed to add users to group");
+ setIsAdding(false);
+ },
+ })
+ );
+
+ const handleAddUsers = async () => {
+ if (selectedUsers.length === 0) {
+ toast.error("Please select at least one user");
+ return;
+ }
+
+ setIsAdding(true);
+ try {
+ await addUsersMutation.mutate({
+ groupId,
+ userIds: selectedUsers,
+ });
+ } catch {
+ setIsAdding(false);
+ }
+ };
+
+ const toggleUserSelection = (userId: number) => {
+ setSelectedUsers((prev) =>
+ prev.includes(userId)
+ ? prev.filter((id) => id !== userId)
+ : [...prev, userId]
+ );
+ };
+
+ const handleCloseModal = () => {
+ if (!isAdding) {
+ setIsModalOpen(false);
+ setSelectedUsers([]);
+ setSearchQuery("");
+ }
+ };
+
+ return (
+ <>
+ setIsModalOpen(true)}
+ className="px-4 py-2 rounded-md bg-primary text-primary-foreground"
+ >
+ Add Users
+
+
+ {isModalOpen && (
+
+
+
+ Add Users to {groupName}
+
+
+
+
+ setSearchQuery(e.target.value)}
+ />
+
+
+
+ {loadingUsers ? (
+
+
+
+ ) : filteredUsers && filteredUsers.length > 0 ? (
+
+
+
+
+
+ Name
+ Email
+
+
+
+ {filteredUsers.map((user) => (
+
+
+ toggleUserSelection(user.id)}
+ />
+
+ {user.name}
+ {user.email}
+
+ ))}
+
+
+
+ ) : (
+
+ {searchQuery
+ ? "No matching users found"
+ : "No users available to add to this group"}
+
+ )}
+
+
+
+
+ {selectedUsers.length} users selected
+
+
+
+ Cancel
+
+
+ {isAdding ? (
+ <>
+
+ Adding Users...
+ >
+ ) : (
+ "Add Users"
+ )}
+
+
+
+
+
+ )}
+ >
+ );
+}
diff --git a/src/app/admin/groups/[id]/users/page.tsx b/src/app/admin/groups/[id]/users/page.tsx
new file mode 100644
index 0000000..66cd3e5
--- /dev/null
+++ b/src/app/admin/groups/[id]/users/page.tsx
@@ -0,0 +1,98 @@
+import { Metadata } from "next";
+import { getServerAuthSession } from "~/lib/auth";
+import { redirect } from "next/navigation";
+import { dbService } from "~/lib/services";
+import Link from "next/link";
+import { Button } from "~/components/ui/button";
+import { ArrowLeft } from "lucide-react";
+import RemoveUserModal from "./remove-user-modal";
+import AddUsersModal from "./add-users-modal";
+
+export const metadata: Metadata = {
+ title: "Admin - Group Users | NextWiki",
+ description: "Manage users in a group",
+};
+
+export default async function GroupUsersPage({
+ params,
+}: {
+ params: { id: string };
+}) {
+ const session = await getServerAuthSession();
+
+ // Redirect if not logged in
+ if (!session?.user) {
+ redirect("/login");
+ }
+
+ // Redirect if not admin
+ if (!session.user.isAdmin) {
+ redirect("/");
+ }
+
+ const groupId = parseInt(params.id);
+ const group = await dbService.groups.getById(groupId);
+
+ if (!group) {
+ redirect("/admin/groups");
+ }
+
+ const users = await dbService.groups.getGroupUsers(groupId);
+
+ return (
+
+
+
+
+
+
+
+
Group Members: {group.name}
+
+
+
+
+
Users in this group
+
+
+
+ Users in this group inherit all permissions assigned to the group. You
+ can add or remove users from this group.
+
+
+ {users.length > 0 ? (
+
+
+
+
+ Name
+ Email
+ Actions
+
+
+
+ {users.map((user) => (
+
+ {user.name}
+ {user.email}
+
+
+
+
+ ))}
+
+
+
+ ) : (
+
+ No users in this group yet.
+
+ )}
+
+
+ );
+}
diff --git a/src/app/admin/groups/[id]/users/remove-user-modal.tsx b/src/app/admin/groups/[id]/users/remove-user-modal.tsx
new file mode 100644
index 0000000..6691915
--- /dev/null
+++ b/src/app/admin/groups/[id]/users/remove-user-modal.tsx
@@ -0,0 +1,109 @@
+"use client";
+
+import { useState } from "react";
+import { Trash2, Loader2 } from "lucide-react";
+import { Button } from "~/components/ui/button";
+import Modal from "~/components/ui/modal";
+import { useTRPC } from "~/lib/trpc/client";
+import { useMutation } from "@tanstack/react-query";
+import { toast } from "sonner";
+
+interface RemoveUserModalProps {
+ groupId: number;
+ userId: number;
+ userName: string;
+}
+
+export default function RemoveUserModal({
+ groupId,
+ userId,
+ userName,
+}: RemoveUserModalProps) {
+ const [isModalOpen, setIsModalOpen] = useState(false);
+ const [isRemoving, setIsRemoving] = useState(false);
+
+ const trpc = useTRPC();
+
+ const removeUserMutation = useMutation(
+ trpc.groups.removeUsers.mutationOptions({
+ onSuccess: () => {
+ toast.success("User removed from group successfully");
+ setIsModalOpen(false);
+ // Refresh the page to update the user list
+ window.location.reload();
+ },
+ onError: (error) => {
+ toast.error(error.message || "Failed to remove user from group");
+ setIsRemoving(false);
+ },
+ })
+ );
+
+ const handleRemove = async () => {
+ setIsRemoving(true);
+ try {
+ await removeUserMutation.mutate({
+ groupId,
+ userIds: [userId],
+ });
+ } catch {
+ setIsRemoving(false);
+ }
+ };
+
+ return (
+ <>
+ setIsModalOpen(true)}
+ >
+ Remove
+
+
+ {isModalOpen && (
+ !isRemoving && setIsModalOpen(false)}
+ size="sm"
+ position="center"
+ animation="fade"
+ closeOnEscape={!isRemoving}
+ showCloseButton={!isRemoving}
+ >
+
+
Remove User from Group
+
+ Are you sure you want to remove{" "}
+ {userName} from this group?
+ This action cannot be undone.
+
+
+ setIsModalOpen(false)}
+ disabled={isRemoving}
+ >
+ Cancel
+
+
+ {isRemoving ? (
+ <>
+
+ Removing...
+ >
+ ) : (
+ "Remove User"
+ )}
+
+
+
+
+ )}
+ >
+ );
+}
diff --git a/src/app/admin/groups/group-form.tsx b/src/app/admin/groups/group-form.tsx
new file mode 100644
index 0000000..9df92d2
--- /dev/null
+++ b/src/app/admin/groups/group-form.tsx
@@ -0,0 +1,469 @@
+"use client";
+
+import { useState } from "react";
+import { useRouter } from "next/navigation";
+import { Button } from "~/components/ui/button";
+import { Input } from "~/components/ui/input";
+import { Textarea } from "~/components/ui/textarea";
+import { toast } from "sonner";
+import { Checkbox } from "~/components/ui/checkbox";
+import { Label } from "~/components/ui/label";
+import {
+ Tooltip,
+ TooltipContent,
+ TooltipProvider,
+ TooltipTrigger,
+} from "~/components/ui/tooltip";
+import { useTRPC } from "~/lib/trpc/client";
+import { useQuery, useMutation } from "@tanstack/react-query";
+
+interface GroupFormProps {
+ group?: {
+ id: number;
+ name: string;
+ description: string | null;
+ isSystem?: boolean;
+ isEditable?: boolean;
+ allowUserAssignment?: boolean;
+ };
+ permissions: {
+ id: number;
+ name: string;
+ description: string | null;
+ module: string;
+ resource: string;
+ action: string;
+ }[];
+ groupPermissions?: number[];
+ groupModulePermissions?: string[];
+ groupActionPermissions?: string[];
+}
+
+export default function GroupForm({
+ group,
+ permissions,
+ groupPermissions = [],
+ groupModulePermissions = [],
+ groupActionPermissions = [],
+}: GroupFormProps) {
+ const router = useRouter();
+ const [name, setName] = useState(group?.name ?? "");
+ const [description, setDescription] = useState(group?.description ?? "");
+ const [selectedPermissions, setSelectedPermissions] =
+ useState(groupPermissions);
+ const [selectedModules, setSelectedModules] = useState(
+ groupModulePermissions
+ );
+ const [selectedActions, setSelectedActions] = useState(
+ groupActionPermissions
+ );
+
+ const isSystem = group?.isSystem ?? false;
+ // const isEditable = group?.isEditable ?? true;
+ // const allowUserAssignment = group?.allowUserAssignment ?? true;
+
+ const trpc = useTRPC();
+
+ // Fetch available modules and actions
+ const { data: availableModules = [] } = useQuery(
+ trpc.permissions.getModules.queryOptions()
+ );
+ const { data: availableActions = [] } = useQuery(
+ trpc.permissions.getActions.queryOptions()
+ );
+
+ const createGroup = useMutation(
+ trpc.groups.create.mutationOptions({
+ onSuccess: () => {
+ toast.success("Group created successfully");
+ router.push("/admin/groups");
+ },
+ onError: (error: unknown) => {
+ if (error instanceof Error) {
+ toast.error(error.message);
+ } else {
+ toast.error("An unknown error occurred");
+ }
+ },
+ })
+ );
+
+ const updateGroup = useMutation(
+ trpc.groups.update.mutationOptions({
+ onSuccess: () => {
+ toast.success("Group updated successfully");
+ router.push("/admin/groups");
+ },
+ onError: (error: unknown) => {
+ if (error instanceof Error) {
+ toast.error(error.message);
+ } else {
+ toast.error("An unknown error occurred");
+ }
+ },
+ })
+ );
+
+ const addPermissions = useMutation(
+ trpc.groups.addPermissions.mutationOptions({
+ onError: (error: unknown) => {
+ if (error instanceof Error) {
+ toast.error(error.message);
+ } else {
+ toast.error("An unknown error occurred");
+ }
+ },
+ })
+ );
+
+ const addModulePermissions = useMutation(
+ trpc.groups.addModulePermissions.mutationOptions({
+ onError: (error: unknown) => {
+ if (error instanceof Error) {
+ toast.error(error.message);
+ } else {
+ toast.error("An unknown error occurred");
+ }
+ },
+ })
+ );
+
+ const addActionPermissions = useMutation(
+ trpc.groups.addActionPermissions.mutationOptions({
+ onError: (error: unknown) => {
+ if (error instanceof Error) {
+ toast.error(error.message);
+ } else {
+ toast.error("An unknown error occurred");
+ }
+ },
+ })
+ );
+
+ const handleSubmit = async (e: React.FormEvent) => {
+ e.preventDefault();
+
+ try {
+ if (group) {
+ // Update existing group
+ const updatedGroup = await updateGroup.mutateAsync({
+ id: group.id,
+ name,
+ description,
+ });
+
+ // Update permissions
+ await addPermissions.mutateAsync({
+ groupId: updatedGroup.id,
+ permissionIds: selectedPermissions,
+ });
+
+ // Update module permissions
+ await addModulePermissions.mutateAsync({
+ groupId: updatedGroup.id,
+ permissions: selectedModules.map((module) => ({
+ module,
+ isAllowed: true,
+ })),
+ });
+
+ // Update action permissions
+ await addActionPermissions.mutateAsync({
+ groupId: updatedGroup.id,
+ permissions: selectedActions.map((action) => ({
+ action,
+ isAllowed: true,
+ })),
+ });
+ } else {
+ // Create new group
+ const newGroup = await createGroup.mutateAsync({
+ name,
+ description,
+ });
+
+ // Add permissions
+ await addPermissions.mutateAsync({
+ groupId: newGroup.id,
+ permissionIds: selectedPermissions,
+ });
+
+ // Add module permissions
+ await addModulePermissions.mutateAsync({
+ groupId: newGroup.id,
+ permissions: selectedModules.map((module) => ({
+ module,
+ isAllowed: true,
+ })),
+ });
+
+ // Add action permissions
+ await addActionPermissions.mutateAsync({
+ groupId: newGroup.id,
+ permissions: selectedActions.map((action) => ({
+ action,
+ isAllowed: true,
+ })),
+ });
+ }
+ } catch (error) {
+ console.error("Error saving group:", error);
+ }
+ };
+
+ // Group permissions by module
+ const permissionsByModule = permissions.reduce((acc, permission) => {
+ if (!acc[permission.module]) {
+ acc[permission.module] = [];
+ }
+ acc[permission.module].push(permission);
+ return acc;
+ }, {} as Record);
+
+ // Check if a permission is allowed based on module and action permissions
+ const isPermissionAllowed = (permission: (typeof permissions)[0]) => {
+ // If no modules are selected, all modules are allowed
+ if (selectedModules.length === 0) {
+ // If no actions are selected, all actions are allowed
+ if (selectedActions.length === 0) return true;
+ // Otherwise, check if the action is allowed
+ return selectedActions.includes(permission.action);
+ }
+ // If modules are selected, check if the module is allowed
+ if (!selectedModules.includes(permission.module)) return false;
+ // If actions are selected, check if the action is allowed
+ if (
+ selectedActions.length > 0 &&
+ !selectedActions.includes(permission.action)
+ )
+ return false;
+ return true;
+ };
+
+ return (
+
+ );
+}
diff --git a/src/app/admin/groups/groups-list.tsx b/src/app/admin/groups/groups-list.tsx
new file mode 100644
index 0000000..44e9ab8
--- /dev/null
+++ b/src/app/admin/groups/groups-list.tsx
@@ -0,0 +1,129 @@
+"use client";
+
+import { Button } from "~/components/ui/button";
+import {
+ Table,
+ TableBody,
+ TableCell,
+ TableHead,
+ TableHeader,
+ TableRow,
+} from "~/components/ui/table";
+import { Badge } from "~/components/ui/badge";
+import { Eye, Pencil, Trash2, Users } from "lucide-react";
+import Link from "next/link";
+import { toast } from "sonner";
+import { useTRPC } from "~/lib/trpc/client";
+import { useMutation } from "@tanstack/react-query";
+import { ClientRequirePermission } from "~/components/auth/permission/client";
+
+interface GroupsListProps {
+ groups: {
+ id: number;
+ name: string;
+ description: string | null;
+ isSystem: boolean;
+ isEditable: boolean;
+ allowUserAssignment: boolean;
+ }[];
+}
+
+export default function GroupsList({ groups: initialGroups }: GroupsListProps) {
+ const trpc = useTRPC();
+
+ const deleteGroup = useMutation(
+ trpc.groups.delete.mutationOptions({
+ onSuccess: () => {
+ toast.success("Group deleted successfully");
+ // Refresh the page to get updated data
+ window.location.reload();
+ },
+ })
+ );
+
+ const handleDelete = async (id: number) => {
+ if (window.confirm("Are you sure you want to delete this group?")) {
+ await deleteGroup.mutate({ id });
+ }
+ };
+
+ return (
+
+
+
+
+ Name
+ Description
+ Status
+ Actions
+
+
+
+ {initialGroups.map((group) => (
+
+ {group.name}
+ {group.description}
+
+ {group.isSystem ? (
+
+ System Group
+
+ ) : (
+
+ Custom Group
+
+ )}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {group.name === "Administrators" ? (
+
+ ) : (
+
+ )}
+
+
+
+ {!group.isSystem && (
+
+ handleDelete(group.id)}
+ title="Delete"
+ >
+
+
+
+ )}
+
+
+
+ ))}
+
+
+
+ );
+}
diff --git a/src/app/admin/groups/new/page.tsx b/src/app/admin/groups/new/page.tsx
new file mode 100644
index 0000000..60bd6ae
--- /dev/null
+++ b/src/app/admin/groups/new/page.tsx
@@ -0,0 +1,41 @@
+import { Metadata } from "next";
+import { getServerAuthSession } from "~/lib/auth";
+import { redirect } from "next/navigation";
+import { dbService } from "~/lib/services";
+import GroupForm from "../group-form";
+
+export const metadata: Metadata = {
+ title: "Create New Group | NextWiki",
+ description: "Create a new user group",
+};
+
+export default async function NewGroupPage() {
+ const session = await getServerAuthSession();
+
+ // Redirect if not logged in
+ if (!session?.user) {
+ redirect("/login");
+ }
+
+ // Redirect if not admin
+ if (!session.user.isAdmin) {
+ redirect("/");
+ }
+
+ const permissions = await dbService.permissions.getAll();
+
+ return (
+
+
Create New Group
+
+
+
+ Create a new user group and configure its permissions. Groups allow
+ you to organize users and assign permissions to them collectively.
+
+
+
+
+
+ );
+}
diff --git a/src/app/admin/groups/page.tsx b/src/app/admin/groups/page.tsx
new file mode 100644
index 0000000..eafaed7
--- /dev/null
+++ b/src/app/admin/groups/page.tsx
@@ -0,0 +1,65 @@
+import { Metadata } from "next";
+import { getServerAuthSession } from "~/lib/auth";
+import { redirect } from "next/navigation";
+import { dbService, authorizationService } from "~/lib/services";
+import GroupsList from "./groups-list";
+import Link from "next/link";
+import { Button } from "~/components/ui/button";
+
+export const metadata: Metadata = {
+ title: "Admin - Groups | NextWiki",
+ description: "Manage user groups",
+};
+
+export default async function GroupsPage() {
+ const session = await getServerAuthSession();
+
+ // Redirect if not logged in
+ if (!session?.user) {
+ redirect("/login");
+ }
+
+ // Redirect if not admin
+ if (!session.user.isAdmin) {
+ redirect("/");
+ }
+
+ const groups = await dbService.groups.getAll();
+
+ // Ensure isLocked is always a boolean
+ const formattedGroups = groups.map((group) => ({
+ ...group,
+ isSystem: group.isSystem ?? false,
+ isEditable: group.isEditable ?? true,
+ allowUserAssignment: group.allowUserAssignment ?? true,
+ }));
+
+ const canCreateGroups = await authorizationService.hasPermission(
+ parseInt(session.user.id, 10),
+ "system:groups:create"
+ );
+
+ return (
+
+
Groups Management
+
+
+
+
User Groups
+ {canCreateGroups && (
+
+ Create Group
+
+ )}
+
+
+ User groups allow you to organize users and assign permissions to them
+ collectively. Each group can have multiple permissions, and users can
+ belong to multiple groups.
+
+
+
+
+
+ );
+}
diff --git a/src/app/admin/layout.tsx b/src/app/admin/layout.tsx
new file mode 100644
index 0000000..fded082
--- /dev/null
+++ b/src/app/admin/layout.tsx
@@ -0,0 +1,35 @@
+import { PermissionGate } from "~/components/auth/permission/server";
+import { Skeleton } from "~/components/ui/skeleton";
+import { AdminLayout } from "~/components/layout/AdminLayout";
+
+export default async function AdminLayoutWrapper({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+
+
+ {children}
+
+
+
+
+
+ Admin Access Denied
+
+
You do not have permission to access this area.
+
+
+
+
+ {/* Optional: Show a specific loading/redirect message */}
+
+
+
+
+
+ );
+}
diff --git a/src/app/admin/not-found.tsx b/src/app/admin/not-found.tsx
new file mode 100644
index 0000000..bcdb032
--- /dev/null
+++ b/src/app/admin/not-found.tsx
@@ -0,0 +1,15 @@
+"use client";
+
+import { Button } from "~/components/ui/button";
+import { useRouter } from "next/navigation";
+
+export default function NotFound() {
+ const router = useRouter();
+
+ return (
+
+
Admin Page Not Found
+ router.back()}>Go back
+
+ );
+}
diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx
index 375671e..94bbda0 100644
--- a/src/app/admin/page.tsx
+++ b/src/app/admin/page.tsx
@@ -1,7 +1,5 @@
"use client";
-import { AdminLayout } from "~/components/layout/AdminLayout";
-
export default function AssetsAdminPage() {
- return Hello ;
+ return Hello
;
}
diff --git a/src/app/admin/permissions/page.tsx b/src/app/admin/permissions/page.tsx
new file mode 100644
index 0000000..c6191a8
--- /dev/null
+++ b/src/app/admin/permissions/page.tsx
@@ -0,0 +1,43 @@
+import { Metadata } from "next";
+import { getServerAuthSession } from "~/lib/auth";
+import { redirect } from "next/navigation";
+import { dbService } from "~/lib/services";
+import PermissionsTable from "./permissions-table";
+
+export const metadata: Metadata = {
+ title: "Admin - Permissions | NextWiki",
+ description: "Manage system permissions",
+};
+
+export default async function PermissionsPage() {
+ const session = await getServerAuthSession();
+
+ // Redirect if not logged in
+ if (!session?.user) {
+ redirect("/login");
+ }
+
+ // Redirect if not admin
+ if (!session.user.isAdmin) {
+ redirect("/");
+ }
+
+ const permissions = await dbService.permissions.getAll();
+
+ return (
+
+
Permissions Management
+
+
+
System Permissions
+
+ View and manage the permissions available in the system. Permissions
+ can be assigned to groups to control access to various features and
+ resources.
+
+
+
+
+
+ );
+}
diff --git a/src/app/admin/permissions/permissions-table.tsx b/src/app/admin/permissions/permissions-table.tsx
new file mode 100644
index 0000000..7b58468
--- /dev/null
+++ b/src/app/admin/permissions/permissions-table.tsx
@@ -0,0 +1,112 @@
+"use client";
+
+import { useState } from "react";
+
+interface Permission {
+ id: number;
+ name: string;
+ description: string | null;
+ module: string;
+ action: string;
+}
+
+interface PermissionsTableProps {
+ permissions: Permission[];
+}
+
+export default function PermissionsTable({
+ permissions,
+}: PermissionsTableProps) {
+ const [filter, setFilter] = useState("");
+
+ // Group permissions by module
+ const groupedPermissions = permissions.reduce((acc, permission) => {
+ if (!acc[permission.module]) {
+ acc[permission.module] = [];
+ }
+ acc[permission.module].push(permission);
+ return acc;
+ }, {} as Record);
+
+ // Filter permissions based on search
+ const filteredModules = Object.keys(groupedPermissions).filter((module) => {
+ if (!filter) return true;
+
+ const lowerCaseFilter = filter.toLowerCase();
+ const modulePermissions = groupedPermissions[module];
+ return (
+ module.toLowerCase().includes(lowerCaseFilter) ||
+ modulePermissions.some(
+ (p) =>
+ p.name.toLowerCase().includes(lowerCaseFilter) ||
+ (p.description?.toLowerCase() || "").includes(lowerCaseFilter) ||
+ p.name.toLowerCase().includes(filter.toLowerCase()) ||
+ (p.description?.toLowerCase() || "").includes(filter.toLowerCase()) ||
+ p.action.toLowerCase().includes(filter.toLowerCase())
+ )
+ );
+ });
+
+ return (
+
+
+ setFilter(e.target.value)}
+ />
+
+
+ {filteredModules.length === 0 ? (
+
+ No permissions found matching your search.
+
+ ) : (
+ filteredModules.map((module) => (
+
+
{module}
+
+
+
+
+ Name
+ Action
+ Description
+
+
+
+ {groupedPermissions[module]
+ .filter(
+ (p) =>
+ !filter ||
+ p.name.toLowerCase().includes(filter.toLowerCase()) ||
+ (p.description?.toLowerCase() || "").includes(
+ filter.toLowerCase()
+ ) ||
+ p.action.toLowerCase().includes(filter.toLowerCase())
+ )
+ .map((permission) => (
+
+
+ {permission.name}
+
+ {permission.action}
+
+ {permission.description || "-"}
+
+
+ ))}
+
+
+
+
+ ))
+ )}
+
+ );
+}
diff --git a/src/app/admin/users/page.tsx b/src/app/admin/users/page.tsx
new file mode 100644
index 0000000..e809048
--- /dev/null
+++ b/src/app/admin/users/page.tsx
@@ -0,0 +1,430 @@
+"use client";
+
+import { useState, useEffect } from "react";
+import { Card } from "~/components/ui/card";
+import { Input } from "~/components/ui/input";
+import { Button } from "~/components/ui/button";
+import { Tabs, TabsContent, TabsList, TabsTrigger } from "~/components/ui/tabs";
+import { useTRPC } from "~/lib/trpc/client";
+import { useQuery, useMutation } from "@tanstack/react-query";
+import { toast } from "sonner";
+import {
+ usePermissions,
+ ClientRequirePermission,
+} from "~/components/auth/permission/client";
+import { PlusIcon, TrashIcon } from "@heroicons/react/24/outline";
+
+export default function AdminUsersPage() {
+ const [searchTerm, setSearchTerm] = useState("");
+ const { hasPermission } = usePermissions();
+
+ // Fetch users
+ const trpc = useTRPC();
+ const { data: users, isLoading: usersLoading } = useQuery(
+ trpc.users.getAll.queryOptions()
+ );
+
+ // Infer user type from the fetched data
+ type FetchedUser = NonNullable[number];
+
+ const [selectedUser, setSelectedUser] = useState(null);
+ const [selectedGroups, setSelectedGroups] = useState([]);
+
+ // Fetch all groups
+ const { data: groups, isLoading: groupsLoading } = useQuery(
+ trpc.groups.getAll.queryOptions()
+ );
+
+ // Mutations
+ const addToGroupMutation = useMutation(
+ trpc.groups.addUsers.mutationOptions({
+ onSuccess: () => {
+ toast.success("User groups updated successfully");
+ // refetchUserGroups(); // Consider refetching user data here if needed
+ },
+ onError: (error) => {
+ toast.error(`Failed to update groups: ${error.message}`);
+ },
+ })
+ );
+
+ const removeFromGroupMutation = useMutation(
+ trpc.groups.removeUsers.mutationOptions({
+ onSuccess: () => {
+ toast.success("User removed from group successfully");
+ // refetchUserGroups(); // Consider refetching user data here if needed
+ },
+ onError: (error) => {
+ toast.error(`Failed to remove from group: ${error.message}`);
+ },
+ })
+ );
+
+ // Set initial selected groups when user is selected
+ useEffect(() => {
+ if (selectedUser) {
+ setSelectedGroups(
+ selectedUser.userGroups.map((group) => group.groupId) || []
+ );
+ } else {
+ setSelectedGroups([]);
+ }
+ }, [selectedUser]);
+
+ // Filter users based on search term
+ const filteredUsers =
+ users?.filter(
+ (user) =>
+ user.name?.toLowerCase().includes(searchTerm.toLowerCase()) ||
+ user.email.toLowerCase().includes(searchTerm.toLowerCase())
+ ) || [];
+
+ // Update function signature to use inferred type
+ const handleUserSelect = (user: FetchedUser) => {
+ setSelectedUser(user);
+ };
+
+ // Handle group checkbox change
+ const handleGroupChange = (groupId: number, checked: boolean) => {
+ setSelectedGroups((prev) =>
+ checked ? [...prev, groupId] : prev.filter((id) => id !== groupId)
+ );
+ };
+
+ // Save group assignments
+ const handleSaveGroupAssignments = async () => {
+ if (!selectedUser) return;
+
+ const currentGroups = selectedUser.userGroups.map((g) => g.groupId) || [];
+ const groupsToAdd = selectedGroups.filter(
+ (id) => !currentGroups.includes(id)
+ );
+ const groupsToRemove = currentGroups.filter(
+ (id) => !selectedGroups.includes(id)
+ );
+
+ try {
+ if (groupsToAdd.length > 0) {
+ await Promise.all(
+ groupsToAdd.map((groupId) =>
+ addToGroupMutation.mutateAsync({
+ groupId,
+ userIds: [selectedUser.id],
+ })
+ )
+ );
+ }
+
+ if (groupsToRemove.length > 0) {
+ await Promise.all(
+ groupsToRemove.map((groupId) =>
+ removeFromGroupMutation.mutateAsync({
+ groupId,
+ userIds: [selectedUser.id],
+ })
+ )
+ );
+ }
+ // Optional: Refetch user data after successful save
+ // await utils.users.getAll.invalidate(); // Or invalidate specific user
+ // handleUserSelect(updatedUserData); // Update selectedUser if data structure changes significantly post-save
+ } catch (error) {
+ // Errors are handled by individual mutation's onError, but you could add general handling here
+ console.error("Failed to save group assignments:", error);
+ }
+ };
+
+ return (
+
+
+
+
User Management
+
+ toast.info("Create user not implemented yet.")}
+ >
+
+ Create User
+
+
+
+
+ Manage users and group assignments
+
+
+
+
+
+
+
+ setSearchTerm(e.target.value)}
+ className="w-full"
+ />
+
+
+
+ {usersLoading ? (
+
+ ) : (
+
+
+
+ Name
+ Email
+ Admin
+ Groups
+
+
+
+ {filteredUsers.map((user) => (
+ handleUserSelect(user)} // This should now work
+ >
+ {user.name}
+ {user.email}
+
+ {/* Use groupId for the check */}
+ {user.userGroups.some(
+ (group) => group.groupId === 1 // Assuming Admin group ID is 1
+ ) ? (
+
+ Admin
+
+ ) : (
+
+ User
+
+ )}
+
+
+
+ {/* Access group name correctly */}
+ {user.userGroups?.map((ug) => (
+
+ {ug.group.name}
+
+ ))}
+
+
+
+ ))}
+
+
+ )}
+
+
+
+
+
+ {selectedUser ? (
+
+ User Details
+
+
+
+ Details
+ Groups
+ {/* Permissions */}
+
+
+
+
+
Name
+
{selectedUser.name}
+
+
+
Email
+
{selectedUser.email}
+
+
+
Role
+
+ {/* Use groupId for the check */}
+ {selectedUser.userGroups.some(
+ (group) => group.groupId === 1 // Assuming Admin group ID is 1
+ )
+ ? "Administrator"
+ : "Regular User"}
+
+
+
+
+
+ toast.info("Password reset not implemented yet.")
+ }
+ >
+ Reset Password
+
+
+
+
+ toast.info("Delete user not implemented yet.")
+ }
+ >
+
+ Delete User
+
+
+
+
+
+
+
+ User Group Memberships
+
+
+ {groupsLoading ? (
+
+ ) : (
+
+ {groups?.map((group) => (
+
+
+ handleGroupChange(group.id, e.target.checked)
+ }
+ disabled={
+ !hasPermission("system:users:update") ||
+ (group.isSystem ?? false)
+ }
+ />
+
+ {group.name}
+ {group.description && (
+
+ {group.description}
+
+ )}
+ {group.isSystem && (
+
+ (Locked)
+
+ )}
+
+
+ ))}
+
+ )}
+
+
+ Save Group Assignments
+
+ }
+ >
+ g.groupId).sort()
+ )
+ }
+ >
+ {addToGroupMutation.isPending ||
+ removeFromGroupMutation.isPending
+ ? "Saving..."
+ : "Save Group Assignments"}
+
+
+
+
+
+
+ Permissions are assigned through groups. Assign this user to
+ the appropriate groups to grant permissions.
+
+
+
+
+ Current Permissions (via Groups)
+
+ {selectedUser.userGroups?.length ? (
+
+ {selectedUser.userGroups.map((ug) => (
+
+
+ {ug.group.name}
+
+
+ (Permissions must be viewed on the Groups page or
+ fetched separately)
+
+
+ ))}
+
+ ) : (
+
+ No permissions assigned via groups
+
+ )}
+
+
+
+
+ ) : (
+
+
+
+
+ Select a user to view and edit details
+
+ )}
+
+
+
+ );
+}
diff --git a/src/app/api/assets/[id]/route.ts b/src/app/api/assets/[id]/route.ts
index 2b5cd9e..1e9f24f 100644
--- a/src/app/api/assets/[id]/route.ts
+++ b/src/app/api/assets/[id]/route.ts
@@ -1,41 +1,69 @@
-import { NextResponse } from "next/server";
+import { type NextRequest, NextResponse } from "next/server";
import { assetService } from "~/lib/services";
+import { checkServerPermission } from "~/lib/utils/server-auth-helpers";
+
+export const dynamic = "force-dynamic";
export async function GET(
- request: Request,
- { params }: { params: Promise<{ id: string }> }
+ request: NextRequest,
+ { params }: { params: { id: string } }
) {
- const resolvedParams = await params;
- void resolvedParams;
try {
- const id = parseInt(resolvedParams.id, 10);
- if (isNaN(id)) {
- return NextResponse.json({ error: "Invalid asset ID" }, { status: 400 });
+ const assetId = params.id;
+
+ // 1. Check Session and Permission using the helper
+ const permissionResult = await checkServerPermission("assets:asset:read");
+
+ if (!permissionResult.authorized) {
+ return permissionResult.errorResponse!;
}
- // Get asset from database using service
- const asset = await assetService.getById(id);
+ // 2. Fetch Asset Data (User is authorized at this point)
+ const asset = await assetService.getById(assetId);
if (!asset) {
- return NextResponse.json({ error: "Asset not found" }, { status: 404 });
+ return new NextResponse("Asset not found", { status: 404 });
}
- // Decode base64 data
- const buffer = Buffer.from(asset.data, "base64");
+ // 3. Decode Base64 Data
+ if (!asset.data) {
+ return new NextResponse("Asset data missing", { status: 500 });
+ }
+ let base64Data = asset.data;
+ const prefixMatch = asset.data.match(/^data:.*;base64,/);
+ if (prefixMatch) {
+ base64Data = asset.data.substring(prefixMatch[0].length);
+ }
+
+ const buffer = Buffer.from(base64Data, "base64");
- // Create response with appropriate Content-Type
+ // 4. Return Response
return new NextResponse(buffer, {
+ status: 200,
headers: {
"Content-Type": asset.fileType,
"Content-Disposition": `inline; filename="${asset.fileName}"`,
- "Cache-Control": "public, max-age=31536000", // Cache for 1 year
+ "Cache-Control": "public, max-age=31536000",
+ "Content-Length": buffer.length.toString(),
},
});
} catch (error) {
- console.error("Error retrieving asset:", error);
- return NextResponse.json(
- { error: "Failed to retrieve asset" },
- { status: 500 }
- );
+ console.error("[ASSET_API_ROUTE_ERROR]", error);
+ return new NextResponse("Internal Server Error", { status: 500 });
}
}
+
+// Optional: Add OpenAPI definition if you want this documented separately
+// from tRPC. Requires installing an OpenAPI generator for standard routes.
+// export const GET = {
+// summary: 'Get raw asset data by ID',
+// parameters: [{ name: 'id', in: 'path', required: true, schema: { type: 'string', format: 'uuid' } }],
+// responses: {
+// '200': { description: 'Raw asset data', content: { '*/*': {} } }, // Indicate any content type
+// '401': { description: 'Unauthorized' },
+// '403': { description: 'Forbidden' },
+// '404': { description: 'Asset not found' },
+// '500': { description: 'Internal Server Error' },
+// },
+// tags: ['assets-raw'], // Separate tag maybe?
+// };
diff --git a/src/app/api/assets/upload/route.ts b/src/app/api/assets/upload/route.ts
deleted file mode 100644
index 11e7685..0000000
--- a/src/app/api/assets/upload/route.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-import { NextResponse } from "next/server";
-import { getServerAuthSession } from "~/lib/auth";
-import { assetService } from "~/lib/services";
-
-export async function POST(request: Request) {
- try {
- // Check authentication
- const session = await getServerAuthSession();
- if (!session?.user) {
- return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
- }
-
- // Get user ID from session
- const userId = parseInt(session.user.id as string, 10);
- if (isNaN(userId)) {
- return NextResponse.json(
- { error: "Invalid user session" },
- { status: 400 }
- );
- }
-
- // Parse form data (file and metadata)
- const formData = await request.formData();
- const file = formData.get("file") as File | null;
- const pageId = formData.get("pageId") as string | null;
-
- if (!file) {
- return NextResponse.json({ error: "No file provided" }, { status: 400 });
- }
-
- // Get file details
- const fileName = file.name;
- const fileType = file.type;
- const fileSize = file.size;
-
- // Read file as base64
- const arrayBuffer = await file.arrayBuffer();
- const buffer = Buffer.from(arrayBuffer);
- const base64Data = buffer.toString("base64");
-
- // Store in database using service
- const newAsset = await assetService.create({
- fileName,
- fileType,
- fileSize,
- data: base64Data,
- uploadedById: userId,
- pageId: pageId ? parseInt(pageId, 10) : null,
- });
-
- // Return asset info for embedding in markdown
- return NextResponse.json({
- success: true,
- asset: {
- id: newAsset.id,
- fileName: newAsset.fileName,
- fileType: newAsset.fileType,
- url: `/api/assets/${newAsset.id}`,
- },
- });
- } catch (error) {
- console.error("Error uploading asset:", error);
- return NextResponse.json(
- { error: "Failed to upload asset" },
- { status: 500 }
- );
- }
-}
diff --git a/src/app/api/docs/route.ts b/src/app/api/docs/route.ts
new file mode 100644
index 0000000..ad462dd
--- /dev/null
+++ b/src/app/api/docs/route.ts
@@ -0,0 +1,52 @@
+import { NextResponse } from "next/server";
+import { appRouter } from "~/lib/trpc/routers"; // Import your main tRPC router
+
+export async function GET() {
+ // Only allow access in development environment
+ if (process.env.NODE_ENV !== "development") {
+ return new NextResponse("Not Found", { status: 404 });
+ }
+
+ // Dynamically import renderTrpcPanel only in development
+ const { renderTrpcPanel } = await import("trpc-ui");
+
+ return new NextResponse(
+ renderTrpcPanel(appRouter, {
+ // Set the base URL for your tRPC API endpoint
+ url: "/api/trpc",
+ // Omit transformer option as superjson is not detected
+ // transformer: "superjson",
+ meta: {
+ title: "NextWiki tRPC Panel",
+ description:
+ "UI for testing the NextWiki tRPC API during development. To authorize copy next-auth.session-token from cookies and paste into the Authorization header in this syntax: Bearer ",
+ },
+ }),
+ {
+ status: 200,
+ headers: {
+ "Content-Type": "text/html",
+ },
+ }
+ );
+}
+
+// Add JSDoc for clarity
+/**
+ * @swagger
+ * /api/panel:
+ * get:
+ * summary: Renders the tRPC UI panel (Development Only)
+ * description: Provides an HTML interface for interacting with the tRPC API endpoints during development. Access is restricted to NODE_ENV=development.
+ * tags: [dev-tools]
+ * responses:
+ * 200:
+ * description: HTML content for the tRPC UI panel.
+ * content:
+ * text/html:
+ * schema:
+ * type: string
+ * format: html
+ * 404:
+ * description: Not Found. Only accessible in development mode.
+ */
diff --git a/src/app/api/trpc/[trpc]/route.ts b/src/app/api/trpc/[trpc]/route.ts
index 7365d74..aecceb6 100644
--- a/src/app/api/trpc/[trpc]/route.ts
+++ b/src/app/api/trpc/[trpc]/route.ts
@@ -2,6 +2,8 @@ import { fetchRequestHandler } from "@trpc/server/adapters/fetch";
import { appRouter } from "~/lib/trpc/routers";
import { createContext } from "~/lib/trpc";
+import { env } from "~/env";
+
// Set CORS headers for API routes
const corsHeaders = {
"Access-Control-Allow-Origin": "*",
@@ -30,7 +32,7 @@ export async function GET(
router: appRouter,
createContext,
onError:
- process.env.NODE_ENV === "development"
+ env.NODE_ENV === "development"
? ({ path, error }) => {
console.error(
`❌ tRPC failed on ${path ?? ""}: ${error.message}`
@@ -52,7 +54,7 @@ export async function POST(
router: appRouter,
createContext,
onError:
- process.env.NODE_ENV === "development"
+ env.NODE_ENV === "development"
? ({ path, error }) => {
console.error(
`❌ tRPC failed on ${path ?? ""}: ${error.message}`
diff --git a/src/app/create/page.tsx b/src/app/create/page.tsx
index bc14aca..151b9c7 100644
--- a/src/app/create/page.tsx
+++ b/src/app/create/page.tsx
@@ -5,6 +5,8 @@ import { useSearchParams } from "next/navigation";
import { useState, useEffect } from "react";
import { PageLocationEditor } from "~/components/wiki/PageLocationEditor";
import { useRouter } from "next/navigation";
+import { ClientPermissionGate } from "~/components/auth/permission/client";
+import { BackButton } from "~/components/wiki/BackButton";
export default function CreateWikiPage() {
const [showEditor, setShowEditor] = useState(false);
@@ -28,15 +30,33 @@ export default function CreateWikiPage() {
// Otherwise show the location picker
return (
- <>
-
- {
- router.back();
- }}
- />
- >
+
+
+
+ {
+ router.back();
+ }}
+ />
+
+
+
+
+ You do not have permission to create pages
+
+
+
+
+
+
+
+ You must be logged in to create pages
+
+
+
+
+
);
}
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index 1822402..2868bc5 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -1,24 +1,23 @@
import type { Metadata } from "next";
-import { Geist, Geist_Mono } from "next/font/google";
-import { TRPCProvider } from "~/lib/trpc/providers";
-import { AuthProvider } from "~/components/auth/AuthProvider";
-import { ModalProvider } from "~/components/ui/modal-provider";
-import { Toaster } from "sonner";
+import { Inter, JetBrains_Mono } from "next/font/google";
import "highlight.js/styles/github.css";
import "~/styles/globals.css";
import { dbService } from "~/lib/services";
-import RegisterPage from "./register/page";
+import RegisterPage from "./(auth)/register/page";
import { Suspense } from "react";
import { Skeleton } from "~/components/ui/skeleton";
-import { ThemeProvider } from "~/providers/theme-provider";
+import { Providers } from "~/providers";
+import { seed } from "~/lib/db/seed";
+import { PermissionGate } from "~/components/auth/permission/server";
+import { LogOutButton } from "~/components/auth/LogOutButton";
-const geistSans = Geist({
- variable: "--font-geist-sans",
+const inter = Inter({
+ variable: "--font-inter",
subsets: ["latin"],
});
-const geistMono = Geist_Mono({
- variable: "--font-geist-mono",
+const jetbrainsMono = JetBrains_Mono({
+ variable: "--font-jetbrains-mono",
subsets: ["latin"],
});
@@ -29,14 +28,47 @@ export const metadata: Metadata = {
};
async function RootLayoutContent({ children }: { children: React.ReactNode }) {
+ let adminGroupExists = !!(await dbService.groups.findByName(
+ "Administrators"
+ ));
+
+ // Attempt seeding only if the admin group doesn't exist
+ if (!adminGroupExists) {
+ console.log(
+ "Essential seed data (e.g., Administrators group) not found. Running seed script..."
+ );
+ try {
+ await seed();
+ console.log("Seed script completed successfully.");
+ // Re-check if the group exists now
+ adminGroupExists = !!(await dbService.groups.findByName(
+ "Administrators"
+ ));
+ if (!adminGroupExists) {
+ console.error(
+ "CRITICAL: Seed script ran but Administrators group still not found!"
+ );
+ // Handle this critical state - maybe return an error component?
+ }
+ } catch (error) {
+ console.error("Failed to run seed script automatically:", error);
+ // Handle seeding failure - maybe return an error component?
+ }
+ }
+
+ // Check user count *after* attempting seed if necessary
const userCount = await dbService.users.count();
const isFirstUser = userCount === 0;
if (isFirstUser) {
- return ;
+ console.log(
+ "No users found, directing to registration within RootLayoutContent."
+ );
+ return ;
}
- return {children} ;
+ // Normal case: Wrap children in AuthProvider for session context
+ return children;
}
export default function RootLayout({
@@ -81,30 +113,46 @@ export default function RootLayout({
/>
-
-
-
- }>
+
+ }>
+
+
{children}
-
-
-
-
-
+
+
+
+
+
+ Access Denied
+
+
You do not have permission to access this wiki.
+
+ Please contact an administrator for access.
+
+
+
+
+
+
+
+
+
+
+
+ Redirecting to login page
+
+
+
+
+
+
+