From b709a1f40ace6d771330986cf049ccd13ee4d87f Mon Sep 17 00:00:00 2001 From: IzumiSy Date: Fri, 27 Feb 2026 17:02:52 +0900 Subject: [PATCH 1/2] Redesign examples --- examples/README.md | 74 ++ examples/app-module/src/custom-module.tsx | 849 ------------------ examples/app-module/src/i18n-labels.ts | 32 - examples/app-module/src/index.ts | 9 - examples/app-module/src/settings-resouces.tsx | 9 - examples/{vite-app => file-based}/.gitignore | 0 .../{vite-app => file-based}/CHANGELOG.md | 2 +- examples/{vite-app => file-based}/README.md | 0 .../{vite-app => file-based}/eslint.config.js | 0 examples/{vite-app => file-based}/index.html | 0 .../{vite-app => file-based}/package.json | 5 +- examples/file-based/src/App.tsx | 89 ++ .../{vite-app => file-based}/src/index.css | 0 .../{vite-app => file-based}/src/main.tsx | 0 .../components/description-card/page.tsx | 14 + .../pages/components/layout-1-column/page.tsx | 14 + .../components/layout-2-columns/page.tsx | 14 + .../components/layout-3-columns/page.tsx | 14 + .../file-based/src/pages/components/page.tsx | 57 ++ .../src/pages/page.tsx | 19 +- .../src/pages/projects/[id]/page.tsx | 15 + .../file-based/src/pages/projects/page.tsx | 18 + .../file-based/src/pages/settings/page.tsx | 26 + .../src/pages/settings/profile/page.tsx | 15 + examples/file-based/src/pages/tasks/page.tsx | 28 + .../src/routes.generated.ts | 12 +- .../src/vite-env.d.ts | 0 .../tsconfig.app.json | 0 .../{vite-app => file-based}/tsconfig.json | 0 .../tsconfig.node.json | 0 .../{vite-app => file-based}/vite.config.ts | 0 .../.gitignore | 0 .../CHANGELOG.md | 2 +- .../README.md | 0 .../eslint.config.mjs | 0 .../next.config.ts | 0 .../package.json | 4 +- .../postcss.config.mjs | 0 .../src/app/dashboard/[[...props]]/page.tsx | 159 ++++ .../src/app/favicon.ico | Bin .../src/app/globals.css | 0 .../src/app/layout.tsx | 0 .../src/app/page.tsx | 2 +- .../tsconfig.json | 0 examples/nextjs-app/components.json | 21 - .../src/app/dashboard/[[...props]]/page.tsx | 47 - examples/nextjs-app/src/hooks/use-mobile.tsx | 19 - examples/nextjs-app/src/lib/utils.ts | 6 - .../{app-module => shared-pages}/package.json | 2 +- examples/shared-pages/src/i18n-labels.ts | 26 + examples/shared-pages/src/index.ts | 28 + .../shared-pages/src/pages/components.tsx | 368 ++++++++ examples/shared-pages/src/pages/projects.tsx | 286 ++++++ examples/shared-pages/src/pages/settings.tsx | 68 ++ examples/shared-pages/src/pages/tasks.tsx | 271 ++++++ .../src/role-switcher.tsx | 0 .../src/sidebar-menu.tsx | 0 .../tsconfig.json | 0 .../tsup.config.ts | 0 examples/vite-app/src/App.tsx | 19 - .../src/pages/dashboard/orders/[id]/page.tsx | 57 -- .../src/pages/dashboard/orders/page.tsx | 58 -- .../vite-app/src/pages/dashboard/page.tsx | 75 -- examples/vite-app/src/pages/settings/page.tsx | 53 -- pnpm-lock.yaml | 420 ++------- 65 files changed, 1688 insertions(+), 1618 deletions(-) create mode 100644 examples/README.md delete mode 100644 examples/app-module/src/custom-module.tsx delete mode 100644 examples/app-module/src/i18n-labels.ts delete mode 100644 examples/app-module/src/index.ts delete mode 100644 examples/app-module/src/settings-resouces.tsx rename examples/{vite-app => file-based}/.gitignore (100%) rename examples/{vite-app => file-based}/CHANGELOG.md (99%) rename examples/{vite-app => file-based}/README.md (100%) rename examples/{vite-app => file-based}/eslint.config.js (100%) rename examples/{vite-app => file-based}/index.html (100%) rename examples/{vite-app => file-based}/package.json (86%) create mode 100644 examples/file-based/src/App.tsx rename examples/{vite-app => file-based}/src/index.css (100%) rename examples/{vite-app => file-based}/src/main.tsx (100%) create mode 100644 examples/file-based/src/pages/components/description-card/page.tsx create mode 100644 examples/file-based/src/pages/components/layout-1-column/page.tsx create mode 100644 examples/file-based/src/pages/components/layout-2-columns/page.tsx create mode 100644 examples/file-based/src/pages/components/layout-3-columns/page.tsx create mode 100644 examples/file-based/src/pages/components/page.tsx rename examples/{vite-app => file-based}/src/pages/page.tsx (63%) create mode 100644 examples/file-based/src/pages/projects/[id]/page.tsx create mode 100644 examples/file-based/src/pages/projects/page.tsx create mode 100644 examples/file-based/src/pages/settings/page.tsx create mode 100644 examples/file-based/src/pages/settings/profile/page.tsx create mode 100644 examples/file-based/src/pages/tasks/page.tsx rename examples/{vite-app => file-based}/src/routes.generated.ts (87%) rename examples/{vite-app => file-based}/src/vite-env.d.ts (100%) rename examples/{vite-app => file-based}/tsconfig.app.json (100%) rename examples/{vite-app => file-based}/tsconfig.json (100%) rename examples/{vite-app => file-based}/tsconfig.node.json (100%) rename examples/{vite-app => file-based}/vite.config.ts (100%) rename examples/{nextjs-app => legacy-declarative}/.gitignore (100%) rename examples/{nextjs-app => legacy-declarative}/CHANGELOG.md (99%) rename examples/{nextjs-app => legacy-declarative}/README.md (100%) rename examples/{nextjs-app => legacy-declarative}/eslint.config.mjs (100%) rename examples/{nextjs-app => legacy-declarative}/next.config.ts (100%) rename examples/{nextjs-app => legacy-declarative}/package.json (91%) rename examples/{nextjs-app => legacy-declarative}/postcss.config.mjs (100%) create mode 100644 examples/legacy-declarative/src/app/dashboard/[[...props]]/page.tsx rename examples/{nextjs-app => legacy-declarative}/src/app/favicon.ico (100%) rename examples/{nextjs-app => legacy-declarative}/src/app/globals.css (100%) rename examples/{nextjs-app => legacy-declarative}/src/app/layout.tsx (100%) rename examples/{nextjs-app => legacy-declarative}/src/app/page.tsx (72%) rename examples/{nextjs-app => legacy-declarative}/tsconfig.json (100%) delete mode 100644 examples/nextjs-app/components.json delete mode 100644 examples/nextjs-app/src/app/dashboard/[[...props]]/page.tsx delete mode 100644 examples/nextjs-app/src/hooks/use-mobile.tsx delete mode 100644 examples/nextjs-app/src/lib/utils.ts rename examples/{app-module => shared-pages}/package.json (96%) create mode 100644 examples/shared-pages/src/i18n-labels.ts create mode 100644 examples/shared-pages/src/index.ts create mode 100644 examples/shared-pages/src/pages/components.tsx create mode 100644 examples/shared-pages/src/pages/projects.tsx create mode 100644 examples/shared-pages/src/pages/settings.tsx create mode 100644 examples/shared-pages/src/pages/tasks.tsx rename examples/{app-module => shared-pages}/src/role-switcher.tsx (100%) rename examples/{app-module => shared-pages}/src/sidebar-menu.tsx (100%) rename examples/{app-module => shared-pages}/tsconfig.json (100%) rename examples/{app-module => shared-pages}/tsup.config.ts (100%) delete mode 100644 examples/vite-app/src/App.tsx delete mode 100644 examples/vite-app/src/pages/dashboard/orders/[id]/page.tsx delete mode 100644 examples/vite-app/src/pages/dashboard/orders/page.tsx delete mode 100644 examples/vite-app/src/pages/dashboard/page.tsx delete mode 100644 examples/vite-app/src/pages/settings/page.tsx diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 0000000..09da0f3 --- /dev/null +++ b/examples/README.md @@ -0,0 +1,74 @@ +# Examples + +This directory contains example applications demonstrating different ways to use AppShell. All examples implement the same **Project Manager** application with identical screens, but use different AppShell APIs for routing and navigation. + +## Directory Structure + +``` +examples/ +├── shared-pages/ # Shared React components (page UIs) +├── file-based/ # File-based routing API (Vite) +└── legacy-declarative/ # Declarative API with defineModule/defineResource (Next.js) +``` + +## Examples Overview + +### `shared-pages` — Shared Page Components + +A standalone package that exports pure React components used by both example apps. This demonstrates how to create a **shared UI library** consumed by multiple host applications. + +- **No routing logic** — components don't use `defineModule` or `defineResource` +- **Framework-agnostic** — works with any React setup +- **Exports**: `ProjectListPage`, `ProjectDetailPage`, `TaskListPage`, `DescriptionCardDemoPage`, layout demos, `ProfileSettingsPage`, plus shared context (`RoleSwitcherProvider`, `SidebarMenu`) + +### `file-based` — File-Based Routing (Vite) + +Demonstrates the **file-based routing API** using the AppShell Vite plugin. Routes are automatically generated from the `src/pages/` directory structure. + +**Key patterns shown:** +- `appShellPageProps` static field for page metadata (title, icon, guards) +- Type-safe navigation with auto-generated `paths.for()` +- Manual sidebar composition with `SidebarItem`, `SidebarGroup`, `WithGuard` +- `CommandPalette` for keyboard navigation (Cmd+K) + +```bash +cd examples/file-based && pnpm dev +``` + +### `legacy-declarative` — Declarative API (Next.js) + +Demonstrates the **declarative API** using `defineModule()` and `defineResource()`. The module tree is explicitly constructed in code and passed to `AppShell` via the `modules` prop. + +**Key patterns shown:** +- `defineModule()` / `defineResource()` for module hierarchy +- `modules` and `settingsResources` props on `AppShell` +- Auto-generated sidebar navigation from module definitions +- `basePath` for mounting AppShell under a sub-route +- `guards` on modules for access control + +```bash +cd examples/legacy-declarative && pnpm dev +``` + +## Screen Set + +Both examples render the same screens for comparison: + +| Module | Screen | Path | Features Demonstrated | +|--------|--------|------|----------------------| +| **Projects** | Project List | `/projects` | List UI, `Link`, nested routing | +| | Project Detail | `/projects/:id` | Dynamic routes, `useParams`, `DescriptionCard` | +| **Tasks** | Task List | `/tasks` | `Guard` (admin-only), role-based access control | +| **Components** | DescriptionCard Demo | `/components/description-card` | Field types: badge, money, date, address, copyable | +| | Layout 1 Column | `/components/layout-1-column` | `Layout` component, single column | +| | Layout 2 Columns | `/components/layout-2-columns` | `Layout` with actions (buttons) | +| | Layout 3 Columns | `/components/layout-3-columns` | `Layout` three-column responsive | +| **Settings** | Profile | `/settings/profile` | `settingsResources` | + +> **Note:** In the `legacy-declarative` example, all paths are prefixed with `/dashboard/` (e.g., `/dashboard/projects`) because AppShell is mounted under a Next.js catch-all route with `basePath: "dashboard"`. + +## Role Switching + +Both examples include a role switcher in the sidebar footer. Toggle between **Admin** and **Staff** roles to see: +- The **Tasks** page appears/disappears based on the admin-only guard +- `contextData.role` flowing through to guard functions diff --git a/examples/app-module/src/custom-module.tsx b/examples/app-module/src/custom-module.tsx deleted file mode 100644 index 1a66879..0000000 --- a/examples/app-module/src/custom-module.tsx +++ /dev/null @@ -1,849 +0,0 @@ -import { - defineModule, - defineResource, - Link, - ResourceComponentProps, - useParams, - hidden, - pass, - DescriptionCard, - Layout, - type Guard, -} from "@tailor-platform/app-shell"; -import type { SVGProps } from "react"; -import { useT, labels } from "./i18n-labels"; -import * as React from "react"; - -const ZapIcon = (props: SVGProps) => { - return ( - - - - ); -}; - -// ============================================================================ -// DEMO: Purchase Order Detail Page -// ============================================================================ - -// Simulated backend data (like what you'd get from GraphQL/REST API) -const mockPurchaseOrder = { - id: "po-2024-0042", - docNumber: "PO-10000041", - status: "CONFIRMED", - billingStatus: "PARTIALLY_BILLED", - deliveryStatus: "NOT_RECEIVED", - supplierName: "Acme Industrial Supplies", - supplierID: "supplier-123", - expectedDeliveryDate: "2024-02-15T00:00:00Z", - createdAt: "2024-01-20T10:30:00Z", - updatedAt: "2024-01-22T14:45:00Z", - confirmedAt: "2024-01-21T09:00:00Z", - note: "Rush order - priority shipping requested. Please ensure all Please ensure all Please ensure all", - externalReference: "P00594", - currency: { code: "USD", symbol: "$" }, - shipToLocation: { - name: "Main Warehouse", - address: { - line1: "1234 Industrial Blvd", - line2: "Building C", - city: "Austin", - state: "TX", - zip: "78701", - country: "United States", - }, - }, - // Computed totals (would come from backend) - subtotal: 12500.0, - tax: 1031.25, - total: 13531.25, -}; - -const PurchaseOrderDetailPage = () => { - // In a real app, you'd fetch this data: - // const { data: purchaseOrder } = useQuery(GET_PURCHASE_ORDER, { variables: { id } }); - const purchaseOrder = mockPurchaseOrder; - - return ( -
-

- Purchase Order: {purchaseOrder.docNumber} -

- - {/* Status Overview Card */} - - - {/* Order Details Card */} - - - {/* Financial Summary Card */} - -
- ); -}; - -const purchaseOrderDemoResource = defineResource({ - path: "purchase-order-demo", - meta: { - title: "Purchase Order Demo", - }, - component: PurchaseOrderDetailPage, -}); - -const dynamicPageResource = defineResource({ - path: ":id", - meta: { - title: labels.t("dynamicPageTitle"), - }, - component: () => { - const params = useParams<{ id: string }>(); - const t = useT(); - - return ( -
-

{t("dynamicPageDescription", { id: params.id! })}

-
- ); - }, -}); - -const subSubPageResource = defineResource({ - path: "sub1-1", - meta: { - title: labels.t("subSubPageTitle"), - }, - subResources: [dynamicPageResource], - component: () => { - const t = useT(); - - return ( -
-

{t("subSubPageDescription")}

-
- ); - }, -}); - -const subPageResource = defineResource({ - path: "sub1", - meta: { - title: labels.t("subPageTitle"), - }, - subResources: [subSubPageResource], - component: () => { - const t = useT(); - - return ( -
-

{t("subPageDescription")}

-
- ); - }, -}); - -const hiddenResource = defineResource({ - path: "hidden", - meta: { - title: "Hidden Page", - }, - guards: [() => hidden()], - component: () => { - return ( -
-

This page should be hidden from navigation.

-
- ); - }, -}); - -// ============================================================================ -// DEMO: Admin Only Restricted Resource -// ============================================================================ - -/** - * Guard that checks if the user has admin role. - * Uses contextData passed from AppShell to determine access. - * - * The module augmentation in role-switcher-context.tsx defines the - * expected contextData type, so context.role is properly typed here. - */ -const adminOnlyGuard: Guard = ({ context }) => { - if (context.role !== "admin") { - return hidden(); - } - return pass(); -}; - -const ShieldIcon = (props: SVGProps) => { - return ( - - - - ); -}; - -const adminOnlyResource = defineResource({ - path: "admin-only", - meta: { - title: "Admin Only", - icon: , - }, - guards: [adminOnlyGuard], - component: () => { - return ( -
-
- -

- Admin Only Page -

-
-
-

- 🎉 Congratulations! You have admin access. -

-

- This page is only visible when you select "Admin"{" "} - role from the sidebar. -

-

- Try switching to "Staff" role - this page will disappear from the - navigation and become inaccessible. -

-
-
-

- How it works: -

-
    -
  • - The{" "} - - RoleSwitcherContext - {" "} - manages the current role state -
  • -
  • - The role is passed to AppShell via{" "} - - contextData - {" "} - prop -
  • -
  • - A route guard checks{" "} - - context.role - {" "} - and returns{" "} - - hidden() - {" "} - for non-admins -
  • -
  • - The navigation automatically hides resources that are guarded -
  • -
-
-
- ); - }, -}); - -// ============================================================================ -// BUTTON COMPONENT (Demo component for Layout examples) -// ============================================================================ - -type ButtonProps = React.ButtonHTMLAttributes & { - variant?: "default" | "secondary"; - size?: "default" | "sm"; -}; - -const Button = React.forwardRef( - ( - { className = "", variant = "default", size = "default", ...props }, - ref, - ) => { - const baseClasses = - "astw:inline-flex astw:items-center astw:justify-center astw:whitespace-nowrap astw:rounded-md astw:text-sm astw:font-medium astw:transition-all astw:disabled:pointer-events-none astw:disabled:opacity-50 astw:outline-none astw:focus-visible:border-ring astw:focus-visible:ring-ring/50 astw:focus-visible:ring-[3px]"; - - const variantClasses = - variant === "secondary" - ? "astw:bg-secondary astw:text-secondary-foreground astw:shadow-xs astw:hover:bg-secondary/80" - : "astw:bg-primary astw:text-primary-foreground astw:shadow-xs astw:hover:bg-primary/90"; - - const sizeClasses = - size === "sm" - ? "astw:h-8 astw:gap-1.5 astw:px-3" - : "astw:h-9 astw:gap-2 astw:px-4 astw:py-2"; - - return ( - , - , - ]} - > - - - - - - - - ); - }, -}); - -const threeColumnLayoutResource = defineResource({ - path: "layout-3-columns", - meta: { - title: "3 Columns", - }, - component: () => { - return ( - - - - - - - - - - - - ); - }, -}); - -export const customPageModule = defineModule({ - path: "custom-page", - component: (pageProps: ResourceComponentProps) => { - const t = useT(); - - return ( -
-

{pageProps.title}

-
-

- {t("goToSub1")} -

-

- {t("goToSub1-1")} -

-

- - {t("goToDynamicPage")} - -

-

- - View Purchase Order Demo (DescriptionCard) - -

-

- - View 1 Column Layout Demo - -

-

- - View 2 Columns Layout Demo - -

-

- - View 3 Columns Layout Demo - -

-

- - 🔒 Admin Only Page (Restricted) - -

-
-
- ); - }, - meta: { - title: labels.t("customPageTitle"), - icon: , - }, - resources: [ - subPageResource, - hiddenResource, - adminOnlyResource, - purchaseOrderDemoResource, - oneColumnLayoutResource, - twoColumnLayoutResource, - threeColumnLayoutResource, - ], -}); diff --git a/examples/app-module/src/i18n-labels.ts b/examples/app-module/src/i18n-labels.ts deleted file mode 100644 index f4088b4..0000000 --- a/examples/app-module/src/i18n-labels.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { defineI18nLabels } from "@tailor-platform/app-shell"; - -export const labels = defineI18nLabels({ - en: { - goToSub1: "Go to sub1", - "goToSub1-1": "Go to sub1-1", - goToDynamicPage: "Go to dynamic page", - customPageTitle: "Custom Page", - dynamicPageTitle: "Dynamic Page", - dynamicPageDescription: (args: { id: string }) => - `This is a dynamic page with ID: ${args.id}`, - subPageTitle: "Sub Page", - subPageDescription: "This is a sub page", - subSubPageTitle: "Sub Sub Page", - subSubPageDescription: "This is a sub sub page", - }, - ja: { - goToSub1: "サブ1へ移動", - "goToSub1-1": "サブ1-1へ移動", - goToDynamicPage: "動的ページへ移動", - customPageTitle: "カスタムページ", - dynamicPageTitle: "動的ページ", - dynamicPageDescription: (args: { id: string }) => - `これはID: ${args.id}の動的ページです`, - subPageTitle: "サブページ", - subPageDescription: "これはサブページです", - subSubPageTitle: "サブサブページ", - subSubPageDescription: "これはサブサブページです", - }, -}); - -export const useT = labels.useT; diff --git a/examples/app-module/src/index.ts b/examples/app-module/src/index.ts deleted file mode 100644 index bb10807..0000000 --- a/examples/app-module/src/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export { profileResource } from "./settings-resouces"; -export { customPageModule } from "./custom-module"; -export { SidebarMenu } from "./sidebar-menu"; -export { - RoleSwitcherProvider, - useRoleSwitcher, - type Role, - type RoleSwitcherContextType, -} from "./role-switcher"; diff --git a/examples/app-module/src/settings-resouces.tsx b/examples/app-module/src/settings-resouces.tsx deleted file mode 100644 index 41ee063..0000000 --- a/examples/app-module/src/settings-resouces.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { defineResource } from "@tailor-platform/app-shell"; - -export const profileResource = defineResource({ - path: "profile", - meta: { - title: "Profile", - }, - component: () =>
Here is profile settings
, -}); diff --git a/examples/vite-app/.gitignore b/examples/file-based/.gitignore similarity index 100% rename from examples/vite-app/.gitignore rename to examples/file-based/.gitignore diff --git a/examples/vite-app/CHANGELOG.md b/examples/file-based/CHANGELOG.md similarity index 99% rename from examples/vite-app/CHANGELOG.md rename to examples/file-based/CHANGELOG.md index af540d1..326b146 100644 --- a/examples/vite-app/CHANGELOG.md +++ b/examples/file-based/CHANGELOG.md @@ -1,4 +1,4 @@ -# vite-app +# file-based ## 0.1.22 diff --git a/examples/vite-app/README.md b/examples/file-based/README.md similarity index 100% rename from examples/vite-app/README.md rename to examples/file-based/README.md diff --git a/examples/vite-app/eslint.config.js b/examples/file-based/eslint.config.js similarity index 100% rename from examples/vite-app/eslint.config.js rename to examples/file-based/eslint.config.js diff --git a/examples/vite-app/index.html b/examples/file-based/index.html similarity index 100% rename from examples/vite-app/index.html rename to examples/file-based/index.html diff --git a/examples/vite-app/package.json b/examples/file-based/package.json similarity index 86% rename from examples/vite-app/package.json rename to examples/file-based/package.json index d9bec89..03f36a9 100644 --- a/examples/vite-app/package.json +++ b/examples/file-based/package.json @@ -1,5 +1,5 @@ { - "name": "vite-app", + "name": "file-based", "private": true, "type": "module", "scripts": { @@ -11,13 +11,14 @@ }, "dependencies": { "@tailor-platform/app-shell": "workspace:*", - "app-module": "workspace:*", + "shared-pages": "workspace:*", "react": "^19.2.4", "react-dom": "^19.2.4", "tailwindcss": "^4.1.18" }, "devDependencies": { "@eslint/js": "catalog:", + "@tailor-platform/app-shell-vite-plugin": "workspace:*", "@tailwindcss/vite": "^4.2.0", "@types/react": "catalog:", "@types/react-dom": "catalog:", diff --git a/examples/file-based/src/App.tsx b/examples/file-based/src/App.tsx new file mode 100644 index 0000000..1076a42 --- /dev/null +++ b/examples/file-based/src/App.tsx @@ -0,0 +1,89 @@ +import { + AppShell, + AppShellProps, + CommandPalette, + DefaultSidebar, + Guard, + hidden, + pass, + SidebarGroup, + SidebarItem, + SidebarLayout, + WithGuard, +} from "@tailor-platform/app-shell"; +import { + RoleSwitcherProvider, + SidebarMenu, + useRoleSwitcher, + FolderIcon, + CheckSquareIcon, + LayoutIcon, +} from "shared-pages"; + +const adminOnlyGuard: Guard = ({ context }) => { + if (context.role !== "admin") { + return hidden(); + } + return pass(); +}; + +const App = () => { + const { role } = useRoleSwitcher(); + const appShellConfig: AppShellProps = { + title: "Project Manager", + contextData: { + role, + }, + }; + + return ( + + <> + }> + } + to="/projects" + > + + + + } + /> + + } + > + + + + + + + } + /> + + + + ); +}; + +const Page = () => { + return ( + + + + ); +}; + +export default Page; diff --git a/examples/vite-app/src/index.css b/examples/file-based/src/index.css similarity index 100% rename from examples/vite-app/src/index.css rename to examples/file-based/src/index.css diff --git a/examples/vite-app/src/main.tsx b/examples/file-based/src/main.tsx similarity index 100% rename from examples/vite-app/src/main.tsx rename to examples/file-based/src/main.tsx diff --git a/examples/file-based/src/pages/components/description-card/page.tsx b/examples/file-based/src/pages/components/description-card/page.tsx new file mode 100644 index 0000000..6bb25f8 --- /dev/null +++ b/examples/file-based/src/pages/components/description-card/page.tsx @@ -0,0 +1,14 @@ +import type { AppShellPageProps } from "@tailor-platform/app-shell"; +import { DescriptionCardDemoPage } from "shared-pages"; + +const Page = () => { + return ; +}; + +Page.appShellPageProps = { + meta: { + title: "Description Card", + }, +} satisfies AppShellPageProps; + +export default Page; diff --git a/examples/file-based/src/pages/components/layout-1-column/page.tsx b/examples/file-based/src/pages/components/layout-1-column/page.tsx new file mode 100644 index 0000000..7491dd5 --- /dev/null +++ b/examples/file-based/src/pages/components/layout-1-column/page.tsx @@ -0,0 +1,14 @@ +import type { AppShellPageProps } from "@tailor-platform/app-shell"; +import { OneColumnLayoutPage } from "shared-pages"; + +const Page = () => { + return ; +}; + +Page.appShellPageProps = { + meta: { + title: "1 Column", + }, +} satisfies AppShellPageProps; + +export default Page; diff --git a/examples/file-based/src/pages/components/layout-2-columns/page.tsx b/examples/file-based/src/pages/components/layout-2-columns/page.tsx new file mode 100644 index 0000000..4fe062a --- /dev/null +++ b/examples/file-based/src/pages/components/layout-2-columns/page.tsx @@ -0,0 +1,14 @@ +import type { AppShellPageProps } from "@tailor-platform/app-shell"; +import { TwoColumnLayoutPage } from "shared-pages"; + +const Page = () => { + return ; +}; + +Page.appShellPageProps = { + meta: { + title: "2 Columns", + }, +} satisfies AppShellPageProps; + +export default Page; diff --git a/examples/file-based/src/pages/components/layout-3-columns/page.tsx b/examples/file-based/src/pages/components/layout-3-columns/page.tsx new file mode 100644 index 0000000..3202b12 --- /dev/null +++ b/examples/file-based/src/pages/components/layout-3-columns/page.tsx @@ -0,0 +1,14 @@ +import type { AppShellPageProps } from "@tailor-platform/app-shell"; +import { ThreeColumnLayoutPage } from "shared-pages"; + +const Page = () => { + return ; +}; + +Page.appShellPageProps = { + meta: { + title: "3 Columns", + }, +} satisfies AppShellPageProps; + +export default Page; diff --git a/examples/file-based/src/pages/components/page.tsx b/examples/file-based/src/pages/components/page.tsx new file mode 100644 index 0000000..4088de8 --- /dev/null +++ b/examples/file-based/src/pages/components/page.tsx @@ -0,0 +1,57 @@ +import { Link, type AppShellPageProps } from "@tailor-platform/app-shell"; +import { LayoutIcon } from "shared-pages"; + +const ComponentsPage = () => { + return ( +
+

+ Component Showcase +

+

+ Explore AppShell UI components with live demos. +

+
+ + → DescriptionCard — Rich data display with various field types + + + → Layout (1 Column) + + + → Layout (2 Columns) — With action buttons + + + → Layout (3 Columns) — Responsive multi-column + +
+
+ ); +}; + +ComponentsPage.appShellPageProps = { + meta: { + title: "Components", + icon: , + }, +} satisfies AppShellPageProps; + +export default ComponentsPage; diff --git a/examples/vite-app/src/pages/page.tsx b/examples/file-based/src/pages/page.tsx similarity index 63% rename from examples/vite-app/src/pages/page.tsx rename to examples/file-based/src/pages/page.tsx index ffe5e06..bdff86d 100644 --- a/examples/vite-app/src/pages/page.tsx +++ b/examples/file-based/src/pages/page.tsx @@ -7,7 +7,7 @@ const HomePage = () => {

- Welcome to App Shell + Project Manager

{ color: "hsl(var(--muted-foreground))", }} > - This is the root page, defined at src/pages/page.tsx + Welcome to the file-based routing example. Navigate using the sidebar or + the links below.

- → Go to Dashboard + → Projects - → Go to Settings + → Tasks (Admin Only) + + + → Component Showcase
diff --git a/examples/file-based/src/pages/projects/[id]/page.tsx b/examples/file-based/src/pages/projects/[id]/page.tsx new file mode 100644 index 0000000..063913f --- /dev/null +++ b/examples/file-based/src/pages/projects/[id]/page.tsx @@ -0,0 +1,15 @@ +import type { AppShellPageProps } from "@tailor-platform/app-shell"; +import { ProjectDetailPage } from "shared-pages"; +import { paths } from "../../../routes.generated"; + +const Page = () => { + return ; +}; + +Page.appShellPageProps = { + meta: { + title: "Project Detail", + }, +} satisfies AppShellPageProps; + +export default Page; diff --git a/examples/file-based/src/pages/projects/page.tsx b/examples/file-based/src/pages/projects/page.tsx new file mode 100644 index 0000000..bf44bfd --- /dev/null +++ b/examples/file-based/src/pages/projects/page.tsx @@ -0,0 +1,18 @@ +import type { AppShellPageProps } from "@tailor-platform/app-shell"; +import { ProjectListPage, FolderIcon } from "shared-pages"; +import { paths } from "../../routes.generated"; + +const Page = () => { + return ( + paths.for("/projects/:id", { id })} /> + ); +}; + +Page.appShellPageProps = { + meta: { + title: "Projects", + icon: , + }, +} satisfies AppShellPageProps; + +export default Page; diff --git a/examples/file-based/src/pages/settings/page.tsx b/examples/file-based/src/pages/settings/page.tsx new file mode 100644 index 0000000..002bed5 --- /dev/null +++ b/examples/file-based/src/pages/settings/page.tsx @@ -0,0 +1,26 @@ +import type { AppShellPageProps } from "@tailor-platform/app-shell"; +import { UserIcon } from "shared-pages"; + +const SettingsPage = () => { + return ( +
+

+ Settings +

+

+ Configure your application preferences. +

+
+ ); +}; + +SettingsPage.appShellPageProps = { + meta: { + title: "Settings", + icon: , + }, +} satisfies AppShellPageProps; + +export default SettingsPage; diff --git a/examples/file-based/src/pages/settings/profile/page.tsx b/examples/file-based/src/pages/settings/profile/page.tsx new file mode 100644 index 0000000..e80f1ae --- /dev/null +++ b/examples/file-based/src/pages/settings/profile/page.tsx @@ -0,0 +1,15 @@ +import type { AppShellPageProps } from "@tailor-platform/app-shell"; +import { ProfileSettingsPage, UserIcon } from "shared-pages"; + +const Page = () => { + return ; +}; + +Page.appShellPageProps = { + meta: { + title: "Profile", + icon: , + }, +} satisfies AppShellPageProps; + +export default Page; diff --git a/examples/file-based/src/pages/tasks/page.tsx b/examples/file-based/src/pages/tasks/page.tsx new file mode 100644 index 0000000..520ae5e --- /dev/null +++ b/examples/file-based/src/pages/tasks/page.tsx @@ -0,0 +1,28 @@ +import { + hidden, + pass, + type AppShellPageProps, + type Guard, +} from "@tailor-platform/app-shell"; +import { TaskListPage, CheckSquareIcon } from "shared-pages"; + +const adminOnlyGuard: Guard = ({ context }) => { + if (context.role !== "admin") { + return hidden(); + } + return pass(); +}; + +const Page = () => { + return ; +}; + +Page.appShellPageProps = { + meta: { + title: "Tasks", + icon: , + }, + guards: [adminOnlyGuard], +} satisfies AppShellPageProps; + +export default Page; diff --git a/examples/vite-app/src/routes.generated.ts b/examples/file-based/src/routes.generated.ts similarity index 87% rename from examples/vite-app/src/routes.generated.ts rename to examples/file-based/src/routes.generated.ts index 8edef36..1480f1e 100644 --- a/examples/vite-app/src/routes.generated.ts +++ b/examples/file-based/src/routes.generated.ts @@ -16,10 +16,16 @@ import { createTypedPaths } from "@tailor-platform/app-shell"; */ export type GeneratedRouteParams = { "/": {}; - "/dashboard": {}; - "/dashboard/orders": {}; - "/dashboard/orders/:id": { id: string }; + "/components": {}; + "/components/description-card": {}; + "/components/layout-1-column": {}; + "/components/layout-2-columns": {}; + "/components/layout-3-columns": {}; + "/projects": {}; + "/projects/:id": { id: string }; "/settings": {}; + "/settings/profile": {}; + "/tasks": {}; }; /** diff --git a/examples/vite-app/src/vite-env.d.ts b/examples/file-based/src/vite-env.d.ts similarity index 100% rename from examples/vite-app/src/vite-env.d.ts rename to examples/file-based/src/vite-env.d.ts diff --git a/examples/vite-app/tsconfig.app.json b/examples/file-based/tsconfig.app.json similarity index 100% rename from examples/vite-app/tsconfig.app.json rename to examples/file-based/tsconfig.app.json diff --git a/examples/vite-app/tsconfig.json b/examples/file-based/tsconfig.json similarity index 100% rename from examples/vite-app/tsconfig.json rename to examples/file-based/tsconfig.json diff --git a/examples/vite-app/tsconfig.node.json b/examples/file-based/tsconfig.node.json similarity index 100% rename from examples/vite-app/tsconfig.node.json rename to examples/file-based/tsconfig.node.json diff --git a/examples/vite-app/vite.config.ts b/examples/file-based/vite.config.ts similarity index 100% rename from examples/vite-app/vite.config.ts rename to examples/file-based/vite.config.ts diff --git a/examples/nextjs-app/.gitignore b/examples/legacy-declarative/.gitignore similarity index 100% rename from examples/nextjs-app/.gitignore rename to examples/legacy-declarative/.gitignore diff --git a/examples/nextjs-app/CHANGELOG.md b/examples/legacy-declarative/CHANGELOG.md similarity index 99% rename from examples/nextjs-app/CHANGELOG.md rename to examples/legacy-declarative/CHANGELOG.md index 719a7a4..59197c7 100644 --- a/examples/nextjs-app/CHANGELOG.md +++ b/examples/legacy-declarative/CHANGELOG.md @@ -1,4 +1,4 @@ -# nextjs-app +# legacy-declarative ## 0.1.23 diff --git a/examples/nextjs-app/README.md b/examples/legacy-declarative/README.md similarity index 100% rename from examples/nextjs-app/README.md rename to examples/legacy-declarative/README.md diff --git a/examples/nextjs-app/eslint.config.mjs b/examples/legacy-declarative/eslint.config.mjs similarity index 100% rename from examples/nextjs-app/eslint.config.mjs rename to examples/legacy-declarative/eslint.config.mjs diff --git a/examples/nextjs-app/next.config.ts b/examples/legacy-declarative/next.config.ts similarity index 100% rename from examples/nextjs-app/next.config.ts rename to examples/legacy-declarative/next.config.ts diff --git a/examples/nextjs-app/package.json b/examples/legacy-declarative/package.json similarity index 91% rename from examples/nextjs-app/package.json rename to examples/legacy-declarative/package.json index 2cff6ad..af4c7b7 100644 --- a/examples/nextjs-app/package.json +++ b/examples/legacy-declarative/package.json @@ -1,5 +1,5 @@ { - "name": "nextjs-app", + "name": "legacy-declarative", "private": true, "scripts": { "dev": "next dev --turbopack", @@ -11,7 +11,7 @@ "dependencies": { "@tailor-platform/app-shell": "workspace:*", "@urql/exchange-auth": "^3.0.0", - "app-module": "workspace:*", + "shared-pages": "workspace:*", "clsx": "^2.1.1", "next": "16.1.6", "react": "^19.2.4", diff --git a/examples/nextjs-app/postcss.config.mjs b/examples/legacy-declarative/postcss.config.mjs similarity index 100% rename from examples/nextjs-app/postcss.config.mjs rename to examples/legacy-declarative/postcss.config.mjs diff --git a/examples/legacy-declarative/src/app/dashboard/[[...props]]/page.tsx b/examples/legacy-declarative/src/app/dashboard/[[...props]]/page.tsx new file mode 100644 index 0000000..91bd11d --- /dev/null +++ b/examples/legacy-declarative/src/app/dashboard/[[...props]]/page.tsx @@ -0,0 +1,159 @@ +"use client"; +import { + AppShell, + AppShellProps, + CommandPalette, + DefaultSidebar, + SidebarLayout, + defineModule, + defineResource, + hidden, + pass, + redirectTo, + type Guard, +} from "@tailor-platform/app-shell"; +import { + RoleSwitcherProvider, + SidebarMenu, + useRoleSwitcher, + ProjectListPage, + ProjectDetailPage, + FolderIcon, + TaskListPage, + CheckSquareIcon, + DescriptionCardDemoPage, + OneColumnLayoutPage, + TwoColumnLayoutPage, + ThreeColumnLayoutPage, + LayoutIcon, + ProfileSettingsPage, + UserIcon, +} from "shared-pages"; + +// ============================================================================ +// Guards +// ============================================================================ + +const adminOnlyGuard: Guard = ({ context }) => { + if (context.role !== "admin") { + return hidden(); + } + return pass(); +}; + +// ============================================================================ +// Module & Resource Definitions (Declarative API) +// ============================================================================ + +const projectDetailResource = defineResource({ + path: ":id", + meta: { title: "Project Detail" }, + component: () => , +}); + +const projectsModule = defineModule({ + path: "projects", + meta: { + title: "Projects", + icon: , + }, + component: () => ( + `/dashboard/projects/${id}`} /> + ), + resources: [projectDetailResource], +}); + +const tasksModule = defineModule({ + path: "tasks", + meta: { + title: "Tasks", + icon: , + }, + guards: [adminOnlyGuard], + component: () => , + resources: [], +}); + +const descriptionCardResource = defineResource({ + path: "description-card", + meta: { title: "Description Card" }, + component: () => , +}); + +const layout1Resource = defineResource({ + path: "layout-1-column", + meta: { title: "1 Column" }, + component: () => , +}); + +const layout2Resource = defineResource({ + path: "layout-2-columns", + meta: { title: "2 Columns" }, + component: () => , +}); + +const layout3Resource = defineResource({ + path: "layout-3-columns", + meta: { title: "3 Columns" }, + component: () => , +}); + +const componentsModule = defineModule({ + path: "components", + meta: { + title: "Components", + icon: , + }, + guards: [() => redirectTo("description-card")], + resources: [ + descriptionCardResource, + layout1Resource, + layout2Resource, + layout3Resource, + ], +}); + +const profileResource = defineResource({ + path: "profile", + meta: { + title: "Profile", + icon: , + }, + component: () => , +}); + +// ============================================================================ +// App +// ============================================================================ + +const App = () => { + const { role } = useRoleSwitcher(); + const appShellConfig: AppShellProps = { + title: "Project Manager", + basePath: "dashboard", + modules: [projectsModule, tasksModule, componentsModule], + settingsResources: [profileResource], + contextData: { + role, + }, + }; + + return ( + + <> + } />} /> + + + + ); +}; + +const Page = () => { + return ( + + + + ); +}; + +export default Page; diff --git a/examples/nextjs-app/src/app/favicon.ico b/examples/legacy-declarative/src/app/favicon.ico similarity index 100% rename from examples/nextjs-app/src/app/favicon.ico rename to examples/legacy-declarative/src/app/favicon.ico diff --git a/examples/nextjs-app/src/app/globals.css b/examples/legacy-declarative/src/app/globals.css similarity index 100% rename from examples/nextjs-app/src/app/globals.css rename to examples/legacy-declarative/src/app/globals.css diff --git a/examples/nextjs-app/src/app/layout.tsx b/examples/legacy-declarative/src/app/layout.tsx similarity index 100% rename from examples/nextjs-app/src/app/layout.tsx rename to examples/legacy-declarative/src/app/layout.tsx diff --git a/examples/nextjs-app/src/app/page.tsx b/examples/legacy-declarative/src/app/page.tsx similarity index 72% rename from examples/nextjs-app/src/app/page.tsx rename to examples/legacy-declarative/src/app/page.tsx index 6d7f5d6..1bb5f18 100644 --- a/examples/nextjs-app/src/app/page.tsx +++ b/examples/legacy-declarative/src/app/page.tsx @@ -1,7 +1,7 @@ import { redirect } from "next/navigation"; const Page = () => { - redirect("/dashboard"); + redirect("/dashboard/projects"); }; export default Page; diff --git a/examples/nextjs-app/tsconfig.json b/examples/legacy-declarative/tsconfig.json similarity index 100% rename from examples/nextjs-app/tsconfig.json rename to examples/legacy-declarative/tsconfig.json diff --git a/examples/nextjs-app/components.json b/examples/nextjs-app/components.json deleted file mode 100644 index a577707..0000000 --- a/examples/nextjs-app/components.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "https://ui.shadcn.com/schema.json", - "style": "new-york", - "rsc": true, - "tsx": true, - "tailwind": { - "config": "tailwind.config.ts", - "css": "src/app/globals.css", - "baseColor": "zinc", - "cssVariables": true, - "prefix": "" - }, - "aliases": { - "components": "@/components", - "utils": "@/lib/utils", - "ui": "@/components/ui", - "lib": "@/lib", - "hooks": "@/hooks" - }, - "iconLibrary": "lucide" -} \ No newline at end of file diff --git a/examples/nextjs-app/src/app/dashboard/[[...props]]/page.tsx b/examples/nextjs-app/src/app/dashboard/[[...props]]/page.tsx deleted file mode 100644 index 9975b02..0000000 --- a/examples/nextjs-app/src/app/dashboard/[[...props]]/page.tsx +++ /dev/null @@ -1,47 +0,0 @@ -"use client"; -import { - AppShell, - AppShellProps, - CommandPalette, - DefaultSidebar, - SidebarLayout, -} from "@tailor-platform/app-shell"; -import { - customPageModule, - profileResource, - RoleSwitcherProvider, - SidebarMenu, - useRoleSwitcher, -} from "app-module"; - -const App = () => { - const { role } = useRoleSwitcher(); - const appShellConfig: AppShellProps = { - title: "AppShell", - basePath: "dashboard", - modules: [customPageModule], - settingsResources: [profileResource], - contextData: { - role, - }, - }; - - return ( - - <> - } />} /> - - - - ); -}; - -const Page = () => { - return ( - - - - ); -}; - -export default Page; diff --git a/examples/nextjs-app/src/hooks/use-mobile.tsx b/examples/nextjs-app/src/hooks/use-mobile.tsx deleted file mode 100644 index 2b0fe1d..0000000 --- a/examples/nextjs-app/src/hooks/use-mobile.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import * as React from "react" - -const MOBILE_BREAKPOINT = 768 - -export function useIsMobile() { - const [isMobile, setIsMobile] = React.useState(undefined) - - React.useEffect(() => { - const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`) - const onChange = () => { - setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) - } - mql.addEventListener("change", onChange) - setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) - return () => mql.removeEventListener("change", onChange) - }, []) - - return !!isMobile -} diff --git a/examples/nextjs-app/src/lib/utils.ts b/examples/nextjs-app/src/lib/utils.ts deleted file mode 100644 index bd0c391..0000000 --- a/examples/nextjs-app/src/lib/utils.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { clsx, type ClassValue } from "clsx" -import { twMerge } from "tailwind-merge" - -export function cn(...inputs: ClassValue[]) { - return twMerge(clsx(inputs)) -} diff --git a/examples/app-module/package.json b/examples/shared-pages/package.json similarity index 96% rename from examples/app-module/package.json rename to examples/shared-pages/package.json index 8318eaa..13c6efe 100644 --- a/examples/app-module/package.json +++ b/examples/shared-pages/package.json @@ -1,5 +1,5 @@ { - "name": "app-module", + "name": "shared-pages", "private": true, "main": "index.js", "scripts": { diff --git a/examples/shared-pages/src/i18n-labels.ts b/examples/shared-pages/src/i18n-labels.ts new file mode 100644 index 0000000..4ad77bb --- /dev/null +++ b/examples/shared-pages/src/i18n-labels.ts @@ -0,0 +1,26 @@ +import { defineI18nLabels } from "@tailor-platform/app-shell"; + +export const labels = defineI18nLabels({ + en: { + projectsTitle: "Projects", + projectDetailTitle: "Project Detail", + projectListDescription: "Manage your projects and track progress.", + tasksTitle: "Tasks", + tasksDescription: "View and manage tasks across projects.", + componentsTitle: "Components", + descriptionCardTitle: "Description Card", + profileTitle: "Profile", + }, + ja: { + projectsTitle: "プロジェクト", + projectDetailTitle: "プロジェクト詳細", + projectListDescription: "プロジェクトを管理し、進捗を追跡します。", + tasksTitle: "タスク", + tasksDescription: "プロジェクト全体のタスクを表示・管理します。", + componentsTitle: "コンポーネント", + descriptionCardTitle: "説明カード", + profileTitle: "プロフィール", + }, +}); + +export const useT = labels.useT; diff --git a/examples/shared-pages/src/index.ts b/examples/shared-pages/src/index.ts new file mode 100644 index 0000000..0209c0b --- /dev/null +++ b/examples/shared-pages/src/index.ts @@ -0,0 +1,28 @@ +// Page components +export { + ProjectListPage, + ProjectDetailPage, + FolderIcon, + mockProjects, +} from "./pages/projects"; +export { TaskListPage, CheckSquareIcon, ShieldIcon } from "./pages/tasks"; +export { + DescriptionCardDemoPage, + OneColumnLayoutPage, + TwoColumnLayoutPage, + ThreeColumnLayoutPage, + LayoutIcon, +} from "./pages/components"; +export { ProfileSettingsPage, UserIcon } from "./pages/settings"; + +// Shared context & sidebar +export { SidebarMenu } from "./sidebar-menu"; +export { + RoleSwitcherProvider, + useRoleSwitcher, + type Role, + type RoleSwitcherContextType, +} from "./role-switcher"; + +// i18n +export { labels, useT } from "./i18n-labels"; diff --git a/examples/shared-pages/src/pages/components.tsx b/examples/shared-pages/src/pages/components.tsx new file mode 100644 index 0000000..f7ab5a4 --- /dev/null +++ b/examples/shared-pages/src/pages/components.tsx @@ -0,0 +1,368 @@ +import { DescriptionCard, Layout } from "@tailor-platform/app-shell"; +import * as React from "react"; +import type { SVGProps } from "react"; + +// ============================================================================ +// Icons +// ============================================================================ + +export const LayoutIcon = (props: SVGProps) => { + return ( + + + + + + ); +}; + +// ============================================================================ +// Shared Mock Data (for DescriptionCard demos inside Layout) +// ============================================================================ + +const mockOrder = { + id: "po-2024-0042", + docNumber: "PO-10000041", + status: "CONFIRMED", + billingStatus: "PARTIALLY_BILLED", + deliveryStatus: "NOT_RECEIVED", + supplierName: "Acme Industrial Supplies", + supplierID: "supplier-123", + expectedDeliveryDate: "2024-02-15T00:00:00Z", + createdAt: "2024-01-20T10:30:00Z", + updatedAt: "2024-01-22T14:45:00Z", + confirmedAt: "2024-01-21T09:00:00Z", + note: "Rush order - priority shipping requested. Please ensure all items are inspected before acceptance.", + externalReference: "P00594", + currency: { code: "USD", symbol: "$" }, + shipToLocation: { + name: "Main Warehouse", + address: { + line1: "1234 Industrial Blvd", + line2: "Building C", + city: "Austin", + state: "TX", + zip: "78701", + country: "United States", + }, + }, + subtotal: 12500.0, + tax: 1031.25, + total: 13531.25, +}; + +const orderFields = [ + { key: "docNumber", label: "PO Number", meta: { copyable: true } } as const, + { + key: "externalReference", + label: "External Ref", + meta: { copyable: true }, + } as const, + { key: "supplierName", label: "Supplier" } as const, + { type: "divider" } as const, + { + key: "expectedDeliveryDate", + label: "Expected Delivery", + type: "date", + meta: { dateFormat: "medium" }, + } as const, + { + key: "confirmedAt", + label: "Confirmed", + type: "date", + meta: { dateFormat: "medium" }, + } as const, + { + key: "createdAt", + label: "Created", + type: "date", + meta: { dateFormat: "relative" }, + } as const, + { key: "shipToLocation.name", label: "Warehouse" } as const, + { type: "divider" } as const, + { + key: "shipToLocation.address", + label: "Shipping Address", + type: "address", + meta: { copyable: true }, + } as const, + { key: "note", label: "Notes", meta: { truncateLines: 3 } } as const, +]; + +// ============================================================================ +// Button (demo component for Layout examples) +// ============================================================================ + +type ButtonProps = React.ButtonHTMLAttributes & { + variant?: "default" | "secondary"; + size?: "default" | "sm"; +}; + +const Button = React.forwardRef( + ( + { className = "", variant = "default", size = "default", ...props }, + ref, + ) => { + const baseClasses = + "astw:inline-flex astw:items-center astw:justify-center astw:whitespace-nowrap astw:rounded-md astw:text-sm astw:font-medium astw:transition-all astw:disabled:pointer-events-none astw:disabled:opacity-50 astw:outline-none astw:focus-visible:border-ring astw:focus-visible:ring-ring/50 astw:focus-visible:ring-[3px]"; + const variantClasses = + variant === "secondary" + ? "astw:bg-secondary astw:text-secondary-foreground astw:shadow-xs astw:hover:bg-secondary/80" + : "astw:bg-primary astw:text-primary-foreground astw:shadow-xs astw:hover:bg-primary/90"; + const sizeClasses = + size === "sm" + ? "astw:h-8 astw:gap-1.5 astw:px-3" + : "astw:h-9 astw:gap-2 astw:px-4 astw:py-2"; + + return ( + , + , + ]} + > + + + + + + + + ); +}; + +export const ThreeColumnLayoutPage = () => { + return ( + + + + + + + + + + + + ); +}; diff --git a/examples/shared-pages/src/pages/projects.tsx b/examples/shared-pages/src/pages/projects.tsx new file mode 100644 index 0000000..0950275 --- /dev/null +++ b/examples/shared-pages/src/pages/projects.tsx @@ -0,0 +1,286 @@ +import { Link, useParams, DescriptionCard } from "@tailor-platform/app-shell"; +import type { SVGProps } from "react"; + +// ============================================================================ +// Icons +// ============================================================================ + +export const FolderIcon = (props: SVGProps) => { + return ( + + + + ); +}; + +// ============================================================================ +// Mock Data +// ============================================================================ + +export const mockProjects = [ + { + id: "proj-001", + name: "Website Redesign", + status: "IN_PROGRESS", + priority: "HIGH", + lead: "Alice Johnson", + startDate: "2025-11-01T00:00:00Z", + dueDate: "2026-03-31T00:00:00Z", + description: + "Complete overhaul of the company website with modern design patterns.", + tasksTotal: 24, + tasksCompleted: 12, + budget: 45000, + spent: 22500, + currency: { code: "USD" }, + client: "Internal", + department: "Engineering", + tags: ["frontend", "design", "high-priority"], + }, + { + id: "proj-002", + name: "Mobile App Launch", + status: "PLANNING", + priority: "MEDIUM", + lead: "Bob Smith", + startDate: "2026-01-15T00:00:00Z", + dueDate: "2026-06-30T00:00:00Z", + description: "Build and launch a cross-platform mobile application.", + tasksTotal: 40, + tasksCompleted: 5, + budget: 80000, + spent: 8000, + currency: { code: "USD" }, + client: "Acme Corp", + department: "Product", + tags: ["mobile", "react-native"], + }, + { + id: "proj-003", + name: "API Migration", + status: "COMPLETED", + priority: "LOW", + lead: "Carol Davis", + startDate: "2025-08-01T00:00:00Z", + dueDate: "2025-12-15T00:00:00Z", + description: "Migrate legacy REST APIs to GraphQL.", + tasksTotal: 18, + tasksCompleted: 18, + budget: 30000, + spent: 28500, + currency: { code: "USD" }, + client: "Internal", + department: "Engineering", + tags: ["backend", "graphql"], + }, +]; + +// ============================================================================ +// Project List Page +// ============================================================================ + +/** + * Renders a list of projects with links to detail pages. + * @param linkTo - Function to generate the link URL for a project ID. + */ +export const ProjectListPage = ({ + linkTo, +}: { + linkTo: (id: string) => string; +}) => { + return ( +
+

+ Projects +

+

+ Manage your projects and track progress. +

+
+ {mockProjects.map((project) => ( + +
+ {project.name} + + {project.status.replace("_", " ")} · {project.tasksCompleted}/ + {project.tasksTotal} tasks + +
+

+ {project.description} +

+ + ))} +
+
+ ); +}; + +// ============================================================================ +// Project Detail Page +// ============================================================================ + +/** + * Renders a project detail page with DescriptionCard. + * @param backTo - URL to navigate back to the project list. + */ +export const ProjectDetailPage = ({ backTo }: { backTo: string }) => { + const { id } = useParams<{ id: string }>(); + const project = mockProjects.find((p) => p.id === id) ?? mockProjects[0]; + + return ( +
+
+ + ← Back to Projects + +
+ +

{project.name}

+ + {/* Status Overview */} + + + {/* Project Details */} + + + {/* Budget */} + +
+ ); +}; diff --git a/examples/shared-pages/src/pages/settings.tsx b/examples/shared-pages/src/pages/settings.tsx new file mode 100644 index 0000000..549e892 --- /dev/null +++ b/examples/shared-pages/src/pages/settings.tsx @@ -0,0 +1,68 @@ +import type { SVGProps } from "react"; + +// ============================================================================ +// Icons +// ============================================================================ + +export const UserIcon = (props: SVGProps) => { + return ( + + + + + ); +}; + +// ============================================================================ +// Profile Settings Page +// ============================================================================ + +export const ProfileSettingsPage = () => { + return ( +
+

+ Profile Settings +

+
+

+ Manage your account settings and preferences. +

+
+ Name: + Demo User + Email: + demo@example.com + Role: + Admin +
+
+
+ ); +}; diff --git a/examples/shared-pages/src/pages/tasks.tsx b/examples/shared-pages/src/pages/tasks.tsx new file mode 100644 index 0000000..e5fe532 --- /dev/null +++ b/examples/shared-pages/src/pages/tasks.tsx @@ -0,0 +1,271 @@ +import type { SVGProps } from "react"; + +// ============================================================================ +// Icons +// ============================================================================ + +export const CheckSquareIcon = (props: SVGProps) => { + return ( + + + + + ); +}; + +export const ShieldIcon = (props: SVGProps) => { + return ( + + + + ); +}; + +// ============================================================================ +// Mock Data +// ============================================================================ + +const mockTasks = [ + { + id: "task-001", + title: "Design landing page mockup", + project: "Website Redesign", + assignee: "Alice Johnson", + status: "IN_PROGRESS", + priority: "HIGH", + dueDate: "2026-03-15", + }, + { + id: "task-002", + title: "Set up CI/CD pipeline", + project: "Mobile App Launch", + assignee: "Bob Smith", + status: "TODO", + priority: "MEDIUM", + dueDate: "2026-02-28", + }, + { + id: "task-003", + title: "Write API documentation", + project: "API Migration", + assignee: "Carol Davis", + status: "COMPLETED", + priority: "LOW", + dueDate: "2025-12-01", + }, + { + id: "task-004", + title: "Review pull requests", + project: "Website Redesign", + assignee: "Alice Johnson", + status: "TODO", + priority: "HIGH", + dueDate: "2026-03-01", + }, + { + id: "task-005", + title: "Update dependencies", + project: "Mobile App Launch", + assignee: "Bob Smith", + status: "IN_PROGRESS", + priority: "LOW", + dueDate: "2026-02-20", + }, +]; + +// ============================================================================ +// Task List Page +// ============================================================================ + +/** + * Task list page. Visible only to admin users (guard applied at route level). + */ +export const TaskListPage = () => { + return ( +
+
+ +

Tasks

+ + Admin Only + +
+

+ View and manage tasks across all projects. This page is only accessible + to admin users. +

+ +
+ {mockTasks.map((task) => ( +
+
+ {task.title} +

+ {task.project} · {task.assignee} +

+
+
+ + {task.status.replace("_", " ")} + + + Due: {task.dueDate} + +
+
+ ))} +
+ +
+

+ How Guards Work: +

+
    +
  • + The role is passed to AppShell via{" "} + + contextData + +
  • +
  • + A guard checks{" "} + + context.role + {" "} + and returns{" "} + + hidden() + {" "} + for non-admins +
  • +
  • + Switch to "Staff" role in the sidebar to see this page + disappear +
  • +
+
+
+ ); +}; diff --git a/examples/app-module/src/role-switcher.tsx b/examples/shared-pages/src/role-switcher.tsx similarity index 100% rename from examples/app-module/src/role-switcher.tsx rename to examples/shared-pages/src/role-switcher.tsx diff --git a/examples/app-module/src/sidebar-menu.tsx b/examples/shared-pages/src/sidebar-menu.tsx similarity index 100% rename from examples/app-module/src/sidebar-menu.tsx rename to examples/shared-pages/src/sidebar-menu.tsx diff --git a/examples/app-module/tsconfig.json b/examples/shared-pages/tsconfig.json similarity index 100% rename from examples/app-module/tsconfig.json rename to examples/shared-pages/tsconfig.json diff --git a/examples/app-module/tsup.config.ts b/examples/shared-pages/tsup.config.ts similarity index 100% rename from examples/app-module/tsup.config.ts rename to examples/shared-pages/tsup.config.ts diff --git a/examples/vite-app/src/App.tsx b/examples/vite-app/src/App.tsx deleted file mode 100644 index 218936f..0000000 --- a/examples/vite-app/src/App.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { - AppShell, - CommandPalette, - DefaultSidebar, - SidebarLayout, -} from "@tailor-platform/app-shell"; - -const App = () => { - return ( - - <> - } /> - - - - ); -}; - -export default App; diff --git a/examples/vite-app/src/pages/dashboard/orders/[id]/page.tsx b/examples/vite-app/src/pages/dashboard/orders/[id]/page.tsx deleted file mode 100644 index 7a33396..0000000 --- a/examples/vite-app/src/pages/dashboard/orders/[id]/page.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { - useParams, - Link, - type AppShellPageProps, -} from "@tailor-platform/app-shell"; -import { paths } from "../../../../routes.generated"; - -const OrderDetailPage = () => { - const { id } = useParams<{ id: string }>(); - - return ( -
-

- Order Detail: {id} -

-

- This page is at src/pages/dashboard/orders/[id]/page.tsx -

-
-

- Order ID: {id} -

-

- Status: Processing -

-

- Created: {new Date().toLocaleDateString()} -

-
- - ← Back to Orders - -
- ); -}; - -OrderDetailPage.appShellPageProps = { - meta: { - title: "Order Detail", - }, -} satisfies AppShellPageProps; - -export default OrderDetailPage; diff --git a/examples/vite-app/src/pages/dashboard/orders/page.tsx b/examples/vite-app/src/pages/dashboard/orders/page.tsx deleted file mode 100644 index 176fecf..0000000 --- a/examples/vite-app/src/pages/dashboard/orders/page.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import { Link, type AppShellPageProps } from "@tailor-platform/app-shell"; -import { paths } from "../../../routes.generated"; - -const OrdersPage = () => { - const orders = [ - { id: "order-001", name: "Office Supplies", status: "Shipped" }, - { id: "order-002", name: "Electronics", status: "Processing" }, - { id: "order-003", name: "Furniture", status: "Delivered" }, - ]; - - return ( -
-

- Orders -

-

- This page is at src/pages/dashboard/orders/page.tsx -

-
- {orders.map((order) => ( - - {order.name} - - ({order.status}) - - - ))} -
-
- ); -}; - -OrdersPage.appShellPageProps = { - meta: { - title: "Orders", - }, -} satisfies AppShellPageProps; - -export default OrdersPage; diff --git a/examples/vite-app/src/pages/dashboard/page.tsx b/examples/vite-app/src/pages/dashboard/page.tsx deleted file mode 100644 index fa9ca5b..0000000 --- a/examples/vite-app/src/pages/dashboard/page.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import { Link, type AppShellPageProps } from "@tailor-platform/app-shell"; -import { paths } from "../../routes.generated"; - -const ZapIcon = () => ( - - - -); - -const DashboardPage = () => { - return ( -
-

- Dashboard -

-

- Welcome to the file-based routing demo! This page is located at{" "} - - src/pages/dashboard/page.tsx - -

-
-

- - → View Orders - -

-

- - → Go to Settings - -

-
-
- ); -}; - -DashboardPage.appShellPageProps = { - meta: { - title: "Dashboard", - icon: , - }, -} satisfies AppShellPageProps; - -export default DashboardPage; diff --git a/examples/vite-app/src/pages/settings/page.tsx b/examples/vite-app/src/pages/settings/page.tsx deleted file mode 100644 index dd2d170..0000000 --- a/examples/vite-app/src/pages/settings/page.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import type { AppShellPageProps } from "@tailor-platform/app-shell"; - -const SettingsIcon = () => ( - - - - -); - -const SettingsPage = () => { - return ( -
-

- Settings -

-

- This page is at src/pages/settings/page.tsx -

-
-

Configure your application settings here.

-
-
- ); -}; - -SettingsPage.appShellPageProps = { - meta: { - title: "Settings", - icon: , - }, -} satisfies AppShellPageProps; - -export default SettingsPage; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f333da1..cf393e2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -45,35 +45,65 @@ importers: specifier: ^2.8.10 version: 2.8.10 - examples/app-module: + examples/file-based: dependencies: + '@tailor-platform/app-shell': + specifier: workspace:* + version: link:../../packages/core react: - specifier: '>= 19' - version: 19.2.1 + specifier: ^19.2.4 + version: 19.2.4 react-dom: - specifier: '>= 19' - version: 19.2.1(react@19.2.1) + specifier: ^19.2.4 + version: 19.2.4(react@19.2.4) + shared-pages: + specifier: workspace:* + version: link:../shared-pages + tailwindcss: + specifier: ^4.1.18 + version: 4.2.0 devDependencies: - '@tailor-platform/app-shell': + '@eslint/js': + specifier: 'catalog:' + version: 10.0.1(eslint@9.39.2(jiti@2.6.1)) + '@tailor-platform/app-shell-vite-plugin': specifier: workspace:* - version: link:../../packages/core - '@types/node': - specifier: ^22 - version: 22.13.11 + version: link:../../packages/vite-plugin + '@tailwindcss/vite': + specifier: ^4.2.0 + version: 4.2.0(vite@7.3.1(@types/node@22.13.11)(jiti@2.6.1)(lightningcss@1.31.1)(yaml@2.7.0)) '@types/react': - specifier: ^19 + specifier: 'catalog:' version: 19.2.13 '@types/react-dom': - specifier: ^19 + specifier: 'catalog:' version: 19.2.3(@types/react@19.2.13) - tsup: - specifier: ^8.3.6 - version: 8.4.0(@microsoft/api-extractor@7.55.2(@types/node@22.13.11))(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.7.0) + '@vitejs/plugin-react': + specifier: 'catalog:' + version: 5.1.2(vite@7.3.1(@types/node@22.13.11)(jiti@2.6.1)(lightningcss@1.31.1)(yaml@2.7.0)) + eslint: + specifier: 'catalog:' + version: 9.39.2(jiti@2.6.1) + eslint-plugin-react-hooks: + specifier: 'catalog:' + version: 7.0.1(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-react-refresh: + specifier: ^0.5.0 + version: 0.5.0(eslint@9.39.2(jiti@2.6.1)) + globals: + specifier: 'catalog:' + version: 15.15.0 typescript: - specifier: ^5 + specifier: ~5.9.3 version: 5.9.3 + typescript-eslint: + specifier: 'catalog:' + version: 8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + vite: + specifier: 'catalog:' + version: 7.3.1(@types/node@22.13.11)(jiti@2.6.1)(lightningcss@1.31.1)(yaml@2.7.0) - examples/nextjs-app: + examples/legacy-declarative: dependencies: '@tailor-platform/app-shell': specifier: workspace:* @@ -81,9 +111,6 @@ importers: '@urql/exchange-auth': specifier: ^3.0.0 version: 3.0.0(@urql/core@6.0.1(graphql@16.12.0)) - app-module: - specifier: workspace:* - version: link:../app-module clsx: specifier: ^2.1.1 version: 2.1.1 @@ -96,6 +123,9 @@ importers: react-dom: specifier: ^19.2.4 version: 19.2.4(react@19.2.4) + shared-pages: + specifier: workspace:* + version: link:../shared-pages tailwind-merge: specifier: ^3.5.0 version: 3.5.0 @@ -123,7 +153,7 @@ importers: version: 8.5.6 tailwindcss: specifier: ^4.1.18 - version: 4.1.18 + version: 4.2.0 tw-animate-css: specifier: ^1.4.0 version: 1.4.0 @@ -131,60 +161,33 @@ importers: specifier: ^5 version: 5.9.3 - examples/vite-app: + examples/shared-pages: dependencies: - '@tailor-platform/app-shell': - specifier: workspace:* - version: link:../../packages/core - app-module: - specifier: workspace:* - version: link:../app-module react: - specifier: ^19.2.4 + specifier: '>= 19' version: 19.2.4 react-dom: - specifier: ^19.2.4 + specifier: '>= 19' version: 19.2.4(react@19.2.4) - tailwindcss: - specifier: ^4.1.18 - version: 4.1.18 devDependencies: - '@eslint/js': - specifier: 'catalog:' - version: 10.0.1(eslint@9.39.2(jiti@2.6.1)) - '@tailwindcss/vite': - specifier: ^4.2.0 - version: 4.2.0(vite@7.3.1(@types/node@22.13.11)(jiti@2.6.1)(lightningcss@1.31.1)(yaml@2.7.0)) + '@tailor-platform/app-shell': + specifier: workspace:* + version: link:../../packages/core + '@types/node': + specifier: ^22 + version: 22.13.11 '@types/react': - specifier: 'catalog:' + specifier: ^19 version: 19.2.13 '@types/react-dom': - specifier: 'catalog:' + specifier: ^19 version: 19.2.3(@types/react@19.2.13) - '@vitejs/plugin-react': - specifier: 'catalog:' - version: 5.1.2(vite@7.3.1(@types/node@22.13.11)(jiti@2.6.1)(lightningcss@1.31.1)(yaml@2.7.0)) - eslint: - specifier: 'catalog:' - version: 9.39.2(jiti@2.6.1) - eslint-plugin-react-hooks: - specifier: 'catalog:' - version: 7.0.1(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-react-refresh: - specifier: ^0.5.0 - version: 0.5.0(eslint@9.39.2(jiti@2.6.1)) - globals: - specifier: 'catalog:' - version: 15.15.0 + tsup: + specifier: ^8.3.6 + version: 8.4.0(@microsoft/api-extractor@7.55.2(@types/node@22.13.11))(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.7.0) typescript: - specifier: ~5.9.3 + specifier: ^5 version: 5.9.3 - typescript-eslint: - specifier: 'catalog:' - version: 8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - vite: - specifier: 'catalog:' - version: 7.3.1(@types/node@22.13.11)(jiti@2.6.1)(lightningcss@1.31.1)(yaml@2.7.0) packages/core: dependencies: @@ -1178,10 +1181,6 @@ packages: '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} - '@jridgewell/remapping@2.3.5': resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} @@ -1189,19 +1188,9 @@ packages: 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/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} @@ -1829,101 +1818,51 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.36.0': - resolution: {integrity: sha512-jgrXjjcEwN6XpZXL0HUeOVGfjXhPyxAbbhD0BlXUB+abTOpbPiN5Wb3kOT7yb+uEtATNYF5x5gIfwutmuBA26w==} - cpu: [arm] - os: [android] - '@rollup/rollup-android-arm-eabi@4.57.0': resolution: {integrity: sha512-tPgXB6cDTndIe1ah7u6amCI1T0SsnlOuKgg10Xh3uizJk4e5M1JGaUMk7J4ciuAUcFpbOiNhm2XIjP9ON0dUqA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.36.0': - resolution: {integrity: sha512-NyfuLvdPdNUfUNeYKUwPwKsE5SXa2J6bCt2LdB/N+AxShnkpiczi3tcLJrm5mA+eqpy0HmaIY9F6XCa32N5yzg==} - cpu: [arm64] - os: [android] - '@rollup/rollup-android-arm64@4.57.0': resolution: {integrity: sha512-sa4LyseLLXr1onr97StkU1Nb7fWcg6niokTwEVNOO7awaKaoRObQ54+V/hrF/BP1noMEaaAW6Fg2d/CfLiq3Mg==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.36.0': - resolution: {integrity: sha512-JQ1Jk5G4bGrD4pWJQzWsD8I1n1mgPXq33+/vP4sk8j/z/C2siRuxZtaUA7yMTf71TCZTZl/4e1bfzwUmFb3+rw==} - cpu: [arm64] - os: [darwin] - '@rollup/rollup-darwin-arm64@4.57.0': resolution: {integrity: sha512-/NNIj9A7yLjKdmkx5dC2XQ9DmjIECpGpwHoGmA5E1AhU0fuICSqSWScPhN1yLCkEdkCwJIDu2xIeLPs60MNIVg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.36.0': - resolution: {integrity: sha512-6c6wMZa1lrtiRsbDziCmjE53YbTkxMYhhnWnSW8R/yqsM7a6mSJ3uAVT0t8Y/DGt7gxUWYuFM4bwWk9XCJrFKA==} - cpu: [x64] - os: [darwin] - '@rollup/rollup-darwin-x64@4.57.0': resolution: {integrity: sha512-xoh8abqgPrPYPr7pTYipqnUi1V3em56JzE/HgDgitTqZBZ3yKCWI+7KUkceM6tNweyUKYru1UMi7FC060RyKwA==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.36.0': - resolution: {integrity: sha512-KXVsijKeJXOl8QzXTsA+sHVDsFOmMCdBRgFmBb+mfEb/7geR7+C8ypAml4fquUt14ZyVXaw2o1FWhqAfOvA4sg==} - cpu: [arm64] - os: [freebsd] - '@rollup/rollup-freebsd-arm64@4.57.0': resolution: {integrity: sha512-PCkMh7fNahWSbA0OTUQ2OpYHpjZZr0hPr8lId8twD7a7SeWrvT3xJVyza+dQwXSSq4yEQTMoXgNOfMCsn8584g==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.36.0': - resolution: {integrity: sha512-dVeWq1ebbvByI+ndz4IJcD4a09RJgRYmLccwlQ8bPd4olz3Y213uf1iwvc7ZaxNn2ab7bjc08PrtBgMu6nb4pQ==} - cpu: [x64] - os: [freebsd] - '@rollup/rollup-freebsd-x64@4.57.0': resolution: {integrity: sha512-1j3stGx+qbhXql4OCDZhnK7b01s6rBKNybfsX+TNrEe9JNq4DLi1yGiR1xW+nL+FNVvI4D02PUnl6gJ/2y6WJA==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.36.0': - resolution: {integrity: sha512-bvXVU42mOVcF4le6XSjscdXjqx8okv4n5vmwgzcmtvFdifQ5U4dXFYaCB87namDRKlUL9ybVtLQ9ztnawaSzvg==} - cpu: [arm] - os: [linux] - '@rollup/rollup-linux-arm-gnueabihf@4.57.0': resolution: {integrity: sha512-eyrr5W08Ms9uM0mLcKfM/Uzx7hjhz2bcjv8P2uynfj0yU8GGPdz8iYrBPhiLOZqahoAMB8ZiolRZPbbU2MAi6Q==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.36.0': - resolution: {integrity: sha512-JFIQrDJYrxOnyDQGYkqnNBtjDwTgbasdbUiQvcU8JmGDfValfH1lNpng+4FWlhaVIR4KPkeddYjsVVbmJYvDcg==} - cpu: [arm] - os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.57.0': resolution: {integrity: sha512-Xds90ITXJCNyX9pDhqf85MKWUI4lqjiPAipJ8OLp8xqI2Ehk+TCVhF9rvOoN8xTbcafow3QOThkNnrM33uCFQA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.36.0': - resolution: {integrity: sha512-KqjYVh3oM1bj//5X7k79PSCZ6CvaVzb7Qs7VMWS+SlWB5M8p3FqufLP9VNp4CazJ0CsPDLwVD9r3vX7Ci4J56A==} - cpu: [arm64] - os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.57.0': resolution: {integrity: sha512-Xws2KA4CLvZmXjy46SQaXSejuKPhwVdaNinldoYfqruZBaJHqVo6hnRa8SDo9z7PBW5x84SH64+izmldCgbezw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.36.0': - resolution: {integrity: sha512-QiGnhScND+mAAtfHqeT+cB1S9yFnNQ/EwCg5yE3MzoaZZnIV0RV9O5alJAoJKX/sBONVKeZdMfO8QSaWEygMhw==} - cpu: [arm64] - os: [linux] - '@rollup/rollup-linux-arm64-musl@4.57.0': resolution: {integrity: sha512-hrKXKbX5FdaRJj7lTMusmvKbhMJSGWJ+w++4KmjiDhpTgNlhYobMvKfDoIWecy4O60K6yA4SnztGuNTQF+Lplw==} cpu: [arm64] @@ -1939,16 +1878,6 @@ packages: cpu: [loong64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.36.0': - resolution: {integrity: sha512-1ZPyEDWF8phd4FQtTzMh8FQwqzvIjLsl6/84gzUxnMNFBtExBtpL51H67mV9xipuxl1AEAerRBgBwFNpkw8+Lg==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-powerpc64le-gnu@4.36.0': - resolution: {integrity: sha512-VMPMEIUpPFKpPI9GZMhJrtu8rxnp6mJR3ZzQPykq4xc2GmdHj3Q4cA+7avMyegXy4n1v+Qynr9fR88BmyO74tg==} - cpu: [ppc64] - os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.57.0': resolution: {integrity: sha512-8Vv6pLuIZCMcgXre6c3nOPhE0gjz1+nZP6T+hwWjr7sVH8k0jRkH+XnfjjOTglyMBdSKBPPz54/y1gToSKwrSQ==} cpu: [ppc64] @@ -1959,11 +1888,6 @@ packages: cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.36.0': - resolution: {integrity: sha512-ttE6ayb/kHwNRJGYLpuAvB7SMtOeQnVXEIpMtAvx3kepFQeowVED0n1K9nAdraHUPJ5hydEMxBpIR7o4nrm8uA==} - cpu: [riscv64] - os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.57.0': resolution: {integrity: sha512-say0uMU/RaPm3CDQLxUUTF2oNWL8ysvHkAjcCzV2znxBr23kFfaxocS9qJm+NdkRhF8wtdEEAJuYcLPhSPbjuQ==} cpu: [riscv64] @@ -1974,31 +1898,16 @@ packages: cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.36.0': - resolution: {integrity: sha512-4a5gf2jpS0AIe7uBjxDeUMNcFmaRTbNv7NxI5xOCs4lhzsVyGR/0qBXduPnoWf6dGC365saTiwag8hP1imTgag==} - cpu: [s390x] - os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.57.0': resolution: {integrity: sha512-Q9eh+gUGILIHEaJf66aF6a414jQbDnn29zeu0eX3dHMuysnhTvsUvZTCAyZ6tJhUjnvzBKE4FtuaYxutxRZpOg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.36.0': - resolution: {integrity: sha512-5KtoW8UWmwFKQ96aQL3LlRXX16IMwyzMq/jSSVIIyAANiE1doaQsx/KRyhAvpHlPjPiSU/AYX/8m+lQ9VToxFQ==} - cpu: [x64] - os: [linux] - '@rollup/rollup-linux-x64-gnu@4.57.0': resolution: {integrity: sha512-OR5p5yG5OKSxHReWmwvM0P+VTPMwoBS45PXTMYaskKQqybkS3Kmugq1W+YbNWArF8/s7jQScgzXUhArzEQ7x0A==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.36.0': - resolution: {integrity: sha512-sycrYZPrv2ag4OCvaN5js+f01eoZ2U+RmT5as8vhxiFz+kxwlHrsxOwKPSA8WyS+Wc6Epid9QeI/IkQ9NkgYyQ==} - cpu: [x64] - os: [linux] - '@rollup/rollup-linux-x64-musl@4.57.0': resolution: {integrity: sha512-XeatKzo4lHDsVEbm1XDHZlhYZZSQYym6dg2X/Ko0kSFgio+KXLsxwJQprnR48GvdIKDOpqWqssC3iBCjoMcMpw==} cpu: [x64] @@ -2014,21 +1923,11 @@ packages: cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.36.0': - resolution: {integrity: sha512-qbqt4N7tokFwwSVlWDsjfoHgviS3n/vZ8LK0h1uLG9TYIRuUTJC88E1xb3LM2iqZ/WTqNQjYrtmtGmrmmawB6A==} - cpu: [arm64] - os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.57.0': resolution: {integrity: sha512-XnaaaSMGSI6Wk8F4KK3QP7GfuuhjGchElsVerCplUuxRIzdvZ7hRBpLR0omCmw+kI2RFJB80nenhOoGXlJ5TfQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.36.0': - resolution: {integrity: sha512-t+RY0JuRamIocMuQcfwYSOkmdX9dtkr1PbhKW42AMvaDQa+jOdpUYysroTF/nuPpAaQMWp7ye+ndlmmthieJrQ==} - cpu: [ia32] - os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.57.0': resolution: {integrity: sha512-3K1lP+3BXY4t4VihLw5MEg6IZD3ojSYzqzBG571W3kNQe4G4CcFpSUQVgurYgib5d+YaCjeFow8QivWp8vuSvA==} cpu: [ia32] @@ -2039,11 +1938,6 @@ packages: cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.36.0': - resolution: {integrity: sha512-aRXd7tRZkWLqGbChgcMMDEHjOKudo1kChb1Jt1IfR8cY/KIpgNviLeJy5FUb9IpSuQj8dU2fAYNMPW/hLKOSTw==} - cpu: [x64] - os: [win32] - '@rollup/rollup-win32-x64-msvc@4.57.0': resolution: {integrity: sha512-Zv7v6q6aV+VslnpwzqKAmrk5JdVkLUzok2208ZXGipjb+msxBr/fJPZyeEXiFgH7k62Ak0SLIfxQRZQvTuf7rQ==} cpu: [x64] @@ -2254,9 +2148,6 @@ packages: '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -2674,10 +2565,6 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - baseline-browser-mapping@2.9.18: - resolution: {integrity: sha512-e23vBV1ZLfjb9apvfPk4rHVu2ry6RIr2Wfs+O324okSidrX7pTAnEJPCh/O5BtRlr7QtZI7ktOP3vsqr7Z5XoA==} - hasBin: true - baseline-browser-mapping@2.9.19: resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} hasBin: true @@ -2733,9 +2620,6 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001766: - resolution: {integrity: sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==} - caniuse-lite@1.0.30001770: resolution: {integrity: sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==} @@ -2865,15 +2749,6 @@ packages: supports-color: optional: true - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -3201,14 +3076,6 @@ packages: fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} - fdir@6.4.6: - resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -4132,11 +3999,6 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - react-dom@19.2.1: - resolution: {integrity: sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==} - peerDependencies: - react: ^19.2.1 - react-dom@19.2.4: resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} peerDependencies: @@ -4198,10 +4060,6 @@ packages: '@types/react': optional: true - react@19.2.1: - resolution: {integrity: sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==} - engines: {node: '>=0.10.0'} - react@19.2.4: resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} engines: {node: '>=0.10.0'} @@ -4287,11 +4145,6 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rollup@4.36.0: - resolution: {integrity: sha512-zwATAXNQxUcd40zgtQG0ZafcRK4g004WtEl7kbuhTWPvf07PsfohXl39jVUvPF7jvNAIkKPQ2XrsDlWuxBd++Q==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - rollup@4.57.0: resolution: {integrity: sha512-e5lPJi/aui4TO1LpAXIRLySmwXSE8k3b9zoGfd42p67wzxog4WHjiZF3M2uheQih4DGyc25QEV4yRBbpueNiUA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -4561,10 +4414,6 @@ packages: resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} engines: {node: '>=18'} - tinyglobby@0.2.12: - resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} - engines: {node: '>=12.0.0'} - tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} @@ -5806,12 +5655,6 @@ snapshots: '@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/trace-mapping': 0.3.31 - '@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/remapping@2.3.5': dependencies: '@jridgewell/gen-mapping': 0.3.13 @@ -5819,17 +5662,8 @@ snapshots: '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/sourcemap-codec@1.5.0': {} - '@jridgewell/sourcemap-codec@1.5.5': {} - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping@0.3.31': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -6437,63 +6271,33 @@ snapshots: optionalDependencies: rollup: 4.57.0 - '@rollup/rollup-android-arm-eabi@4.36.0': - optional: true - '@rollup/rollup-android-arm-eabi@4.57.0': optional: true - '@rollup/rollup-android-arm64@4.36.0': - optional: true - '@rollup/rollup-android-arm64@4.57.0': optional: true - '@rollup/rollup-darwin-arm64@4.36.0': - optional: true - '@rollup/rollup-darwin-arm64@4.57.0': optional: true - '@rollup/rollup-darwin-x64@4.36.0': - optional: true - '@rollup/rollup-darwin-x64@4.57.0': optional: true - '@rollup/rollup-freebsd-arm64@4.36.0': - optional: true - '@rollup/rollup-freebsd-arm64@4.57.0': optional: true - '@rollup/rollup-freebsd-x64@4.36.0': - optional: true - '@rollup/rollup-freebsd-x64@4.57.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.36.0': - optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.57.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.36.0': - optional: true - '@rollup/rollup-linux-arm-musleabihf@4.57.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.36.0': - optional: true - '@rollup/rollup-linux-arm64-gnu@4.57.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.36.0': - optional: true - '@rollup/rollup-linux-arm64-musl@4.57.0': optional: true @@ -6503,42 +6307,24 @@ snapshots: '@rollup/rollup-linux-loong64-musl@4.57.0': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.36.0': - optional: true - - '@rollup/rollup-linux-powerpc64le-gnu@4.36.0': - optional: true - '@rollup/rollup-linux-ppc64-gnu@4.57.0': optional: true '@rollup/rollup-linux-ppc64-musl@4.57.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.36.0': - optional: true - '@rollup/rollup-linux-riscv64-gnu@4.57.0': optional: true '@rollup/rollup-linux-riscv64-musl@4.57.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.36.0': - optional: true - '@rollup/rollup-linux-s390x-gnu@4.57.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.36.0': - optional: true - '@rollup/rollup-linux-x64-gnu@4.57.0': optional: true - '@rollup/rollup-linux-x64-musl@4.36.0': - optional: true - '@rollup/rollup-linux-x64-musl@4.57.0': optional: true @@ -6548,24 +6334,15 @@ snapshots: '@rollup/rollup-openharmony-arm64@4.57.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.36.0': - optional: true - '@rollup/rollup-win32-arm64-msvc@4.57.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.36.0': - optional: true - '@rollup/rollup-win32-ia32-msvc@4.57.0': optional: true '@rollup/rollup-win32-x64-gnu@4.57.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.36.0': - optional: true - '@rollup/rollup-win32-x64-msvc@4.57.0': optional: true @@ -6774,8 +6551,6 @@ snapshots: '@types/deep-eql@4.0.2': {} - '@types/estree@1.0.6': {} - '@types/estree@1.0.8': {} '@types/jsesc@2.5.1': {} @@ -7231,8 +7006,6 @@ snapshots: balanced-match@1.0.2: {} - baseline-browser-mapping@2.9.18: {} - baseline-browser-mapping@2.9.19: {} better-path-resolve@1.0.0: @@ -7293,8 +7066,6 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001766: {} - caniuse-lite@1.0.30001770: {} chai@6.2.2: {} @@ -7413,10 +7184,6 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.4.0: - dependencies: - ms: 2.1.3 - debug@4.4.3: dependencies: ms: 2.1.3 @@ -7907,10 +7674,6 @@ snapshots: dependencies: reusify: 1.1.0 - fdir@6.4.6(picomatch@4.0.3): - optionalDependencies: - picomatch: 4.0.3 - fdir@6.5.0(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 @@ -8603,8 +8366,8 @@ snapshots: dependencies: '@next/env': 16.1.6 '@swc/helpers': 0.5.15 - baseline-browser-mapping: 2.9.18 - caniuse-lite: 1.0.30001766 + baseline-browser-mapping: 2.9.19 + caniuse-lite: 1.0.30001770 postcss: 8.4.31 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) @@ -8832,11 +8595,6 @@ snapshots: queue-microtask@1.2.3: {} - react-dom@19.2.1(react@19.2.1): - dependencies: - react: 19.2.1 - scheduler: 0.27.0 - react-dom@19.2.4(react@19.2.4): dependencies: react: 19.2.4 @@ -8889,8 +8647,6 @@ snapshots: optionalDependencies: '@types/react': 19.2.13 - react@19.2.1: {} - react@19.2.4: {} read-yaml-file@1.1.0: @@ -8995,31 +8751,6 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.3 '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.3 - rollup@4.36.0: - dependencies: - '@types/estree': 1.0.6 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.36.0 - '@rollup/rollup-android-arm64': 4.36.0 - '@rollup/rollup-darwin-arm64': 4.36.0 - '@rollup/rollup-darwin-x64': 4.36.0 - '@rollup/rollup-freebsd-arm64': 4.36.0 - '@rollup/rollup-freebsd-x64': 4.36.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.36.0 - '@rollup/rollup-linux-arm-musleabihf': 4.36.0 - '@rollup/rollup-linux-arm64-gnu': 4.36.0 - '@rollup/rollup-linux-arm64-musl': 4.36.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.36.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.36.0 - '@rollup/rollup-linux-riscv64-gnu': 4.36.0 - '@rollup/rollup-linux-s390x-gnu': 4.36.0 - '@rollup/rollup-linux-x64-gnu': 4.36.0 - '@rollup/rollup-linux-x64-musl': 4.36.0 - '@rollup/rollup-win32-arm64-msvc': 4.36.0 - '@rollup/rollup-win32-ia32-msvc': 4.36.0 - '@rollup/rollup-win32-x64-msvc': 4.36.0 - fsevents: 2.3.3 - rollup@4.57.0: dependencies: '@types/estree': 1.0.8 @@ -9124,7 +8855,7 @@ snapshots: dependencies: '@img/colour': 1.0.0 detect-libc: 2.1.2 - semver: 7.7.3 + semver: 7.7.4 optionalDependencies: '@img/sharp-darwin-arm64': 0.34.5 '@img/sharp-darwin-x64': 0.34.5 @@ -9312,7 +9043,7 @@ snapshots: sucrase@3.35.0: dependencies: - '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/gen-mapping': 0.3.13 commander: 4.1.1 glob: 10.4.5 lines-and-columns: 1.2.4 @@ -9357,11 +9088,6 @@ snapshots: tinyexec@1.0.2: {} - tinyglobby@0.2.12: - dependencies: - fdir: 6.4.6(picomatch@4.0.3) - picomatch: 4.0.3 - tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) @@ -9454,17 +9180,17 @@ snapshots: cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.2 - debug: 4.4.0 + debug: 4.4.3 esbuild: 0.25.1 joycon: 3.1.1 picocolors: 1.1.1 postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.6)(yaml@2.7.0) resolve-from: 5.0.0 - rollup: 4.36.0 + rollup: 4.57.0 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tinyexec: 0.3.2 - tinyglobby: 0.2.12 + tinyglobby: 0.2.15 tree-kill: 1.2.2 optionalDependencies: '@microsoft/api-extractor': 7.55.2(@types/node@22.13.11) From 5a154da9485c561ca17b4cd55e2d3683db84207e Mon Sep 17 00:00:00 2001 From: IzumiSy Date: Fri, 27 Feb 2026 17:58:14 +0900 Subject: [PATCH 2/2] WIP --- .changeset/fix-redirect-guard-routing.md | 8 + examples/file-based/src/App.tsx | 22 +- examples/file-based/src/pages/page.tsx | 2 +- .../src/app/dashboard/[[...props]]/page.tsx | 36 +- examples/legacy-declarative/src/app/page.tsx | 2 +- examples/shared-pages/package.json | 11 +- examples/shared-pages/src/index.ts | 3 - examples/shared-pages/tsup.config.ts | 20 - pnpm-lock.yaml | 619 +----------------- 9 files changed, 45 insertions(+), 678 deletions(-) create mode 100644 .changeset/fix-redirect-guard-routing.md delete mode 100644 examples/shared-pages/tsup.config.ts diff --git a/.changeset/fix-redirect-guard-routing.md b/.changeset/fix-redirect-guard-routing.md new file mode 100644 index 0000000..c02d3ed --- /dev/null +++ b/.changeset/fix-redirect-guard-routing.md @@ -0,0 +1,8 @@ +--- +"@tailor-platform/app-shell": patch +--- + +Fixed two issues related to `redirectTo()` guards in the declarative API: + +- Fixed `redirectTo()` guard not working on modules/resources without a component. Index routes with a loader are now created for routes that only have guards (no component), so redirect guards execute properly when navigating to the route path. +- Fixed sidebar navigation hiding modules/resources that use `redirectTo()` guards. Navigation filtering now only excludes `hidden()` guards, so redirect-guarded items remain visible in the sidebar. diff --git a/examples/file-based/src/App.tsx b/examples/file-based/src/App.tsx index 1076a42..fc5259b 100644 --- a/examples/file-based/src/App.tsx +++ b/examples/file-based/src/App.tsx @@ -16,7 +16,6 @@ import { SidebarMenu, useRoleSwitcher, FolderIcon, - CheckSquareIcon, LayoutIcon, } from "shared-pages"; @@ -30,7 +29,7 @@ const adminOnlyGuard: Guard = ({ context }) => { const App = () => { const { role } = useRoleSwitcher(); const appShellConfig: AppShellProps = { - title: "Project Manager", + title: "AppShell Demo", contextData: { role, }, @@ -43,23 +42,20 @@ const App = () => { sidebar={ }> } - to="/projects" > + + + - - } - /> - } diff --git a/examples/file-based/src/pages/page.tsx b/examples/file-based/src/pages/page.tsx index bdff86d..5c5aab1 100644 --- a/examples/file-based/src/pages/page.tsx +++ b/examples/file-based/src/pages/page.tsx @@ -7,7 +7,7 @@ const HomePage = () => {

- Project Manager + AppShell Demo

{ const projectDetailResource = defineResource({ path: ":id", meta: { title: "Project Detail" }, - component: () => , + component: () => , }); -const projectsModule = defineModule({ +const projectsResource = defineResource({ path: "projects", - meta: { - title: "Projects", - icon: , - }, + meta: { title: "Projects" }, component: () => ( - `/dashboard/projects/${id}`} /> + `/demo/projects/${id}`} /> ), - resources: [projectDetailResource], + subResources: [projectDetailResource], }); -const tasksModule = defineModule({ +const tasksResource = defineResource({ path: "tasks", - meta: { - title: "Tasks", - icon: , - }, + meta: { title: "Tasks" }, guards: [adminOnlyGuard], component: () => , - resources: [], +}); + +const demoModule = defineModule({ + path: "demo", + meta: { + title: "Demo", + icon: , + }, + guards: [() => redirectTo("projects")], + resources: [projectsResource, tasksResource], }); const descriptionCardResource = defineResource({ @@ -129,9 +131,9 @@ const profileResource = defineResource({ const App = () => { const { role } = useRoleSwitcher(); const appShellConfig: AppShellProps = { - title: "Project Manager", + title: "AppShell Demo", basePath: "dashboard", - modules: [projectsModule, tasksModule, componentsModule], + modules: [demoModule, componentsModule], settingsResources: [profileResource], contextData: { role, diff --git a/examples/legacy-declarative/src/app/page.tsx b/examples/legacy-declarative/src/app/page.tsx index 1bb5f18..3456814 100644 --- a/examples/legacy-declarative/src/app/page.tsx +++ b/examples/legacy-declarative/src/app/page.tsx @@ -1,7 +1,7 @@ import { redirect } from "next/navigation"; const Page = () => { - redirect("/dashboard/projects"); + redirect("/dashboard/demo/projects"); }; export default Page; diff --git a/examples/shared-pages/package.json b/examples/shared-pages/package.json index 13c6efe..f81df6e 100644 --- a/examples/shared-pages/package.json +++ b/examples/shared-pages/package.json @@ -1,16 +1,8 @@ { "name": "shared-pages", "private": true, - "main": "index.js", - "scripts": { - "dev": "NODE_ENV=development tsup --watch", - "build": "tsup" - }, "exports": { - ".": { - "import": "./dist/index.mjs", - "types": "./dist/index.d.mts" - } + ".": "./src/index.ts" }, "keywords": [], "author": "", @@ -25,7 +17,6 @@ "@types/node": "^22", "@types/react": "^19", "@types/react-dom": "^19", - "tsup": "^8.3.6", "typescript": "^5" } } diff --git a/examples/shared-pages/src/index.ts b/examples/shared-pages/src/index.ts index 0209c0b..d12ea4f 100644 --- a/examples/shared-pages/src/index.ts +++ b/examples/shared-pages/src/index.ts @@ -23,6 +23,3 @@ export { type Role, type RoleSwitcherContextType, } from "./role-switcher"; - -// i18n -export { labels, useT } from "./i18n-labels"; diff --git a/examples/shared-pages/tsup.config.ts b/examples/shared-pages/tsup.config.ts deleted file mode 100644 index c9e1cf6..0000000 --- a/examples/shared-pages/tsup.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -/// -import { defineConfig } from "tsup"; - -const devOpts = - process.env.NODE_ENV === "development" - ? { - minify: false, - splitting: false, - sourcemap: true, - } - : {}; - -export default defineConfig({ - ...devOpts, - format: ["esm"], - entry: ["src/index.ts"], - clean: true, - minify: true, - dts: true, -}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cf393e2..6981677 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -182,9 +182,6 @@ importers: '@types/react-dom': specifier: ^19 version: 19.2.3(@types/react@19.2.13) - tsup: - specifier: ^8.3.6 - version: 8.4.0(@microsoft/api-extractor@7.55.2(@types/node@22.13.11))(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.7.0) typescript: specifier: ^5 version: 5.9.3 @@ -597,252 +594,126 @@ packages: '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} - '@esbuild/aix-ppc64@0.25.1': - resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.27.2': resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.1': - resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.27.2': resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.1': - resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.27.2': resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.1': - resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.27.2': resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.1': - resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.27.2': resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.1': - resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.27.2': resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.1': - resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.27.2': resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.1': - resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.27.2': resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.1': - resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.27.2': resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.1': - resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.27.2': resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.1': - resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.27.2': resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.1': - resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.27.2': resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.1': - resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.27.2': resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.1': - resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.27.2': resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.1': - resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.27.2': resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.1': - resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.27.2': resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.1': - resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.27.2': resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.1': - resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - '@esbuild/netbsd-arm64@0.27.2': resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.1': - resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.27.2': resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.1': - resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-arm64@0.27.2': resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.1': - resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.27.2': resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} engines: {node: '>=18'} @@ -855,48 +726,24 @@ packages: cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.1': - resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.27.2': resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.1': - resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.27.2': resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.1': - resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.27.2': resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.1': - resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.27.2': resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} engines: {node: '>=18'} @@ -1174,10 +1021,6 @@ packages: resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} engines: {node: 20 || >=22} - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -1305,10 +1148,6 @@ packages: '@oxc-project/types@0.112.0': resolution: {integrity: sha512-m6RebKHIRsax2iCwVpYW2ErQwa4ywHJrE4sCK3/8JK8ZZAWOKXaRJFl/uP51gaVyyXlaS4+chU1nSCdzYf6QqQ==} - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - '@quansync/fs@1.0.0': resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} @@ -2459,10 +2298,6 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} - engines: {node: '>=12'} - ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -2471,17 +2306,10 @@ packages: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - ansis@4.2.0: resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} engines: {node: '>=14'} - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -2594,12 +2422,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - bundle-require@5.1.0: - resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - peerDependencies: - esbuild: '>=0.18' - cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -2637,10 +2459,6 @@ packages: chardet@2.1.1: resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} - ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} @@ -2673,10 +2491,6 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - compare-versions@6.1.1: resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} @@ -2689,10 +2503,6 @@ packages: confbox@0.2.2: resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} - consola@3.4.2: - resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} - engines: {node: ^14.18.0 || >=16.10.0} - convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -2818,9 +2628,6 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.5.286: resolution: {integrity: sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==} @@ -2892,11 +2699,6 @@ packages: es-toolkit@1.44.0: resolution: {integrity: sha512-6penXeZalaV88MM3cGkFZZfOoLGWshWWfdy0tWw/RlVVyhvMaWSBTOvXNeiW3e5FwdS5ePW0LGEu17zT139ktg==} - esbuild@0.25.1: - resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} - engines: {node: '>=18'} - hasBin: true - esbuild@0.27.2: resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} engines: {node: '>=18'} @@ -3112,10 +2914,6 @@ packages: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} - foreground-child@3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} - fs-extra@11.3.3: resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==} engines: {node: '>=14.14'} @@ -3182,11 +2980,6 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - hasBin: true - globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} @@ -3451,9 +3244,6 @@ packages: resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} engines: {node: '>= 0.4'} - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jiti@2.6.1: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true @@ -3464,10 +3254,6 @@ packages: jose@6.1.3: resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} - joycon@3.1.1: - resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} - engines: {node: '>=10'} - js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -3611,17 +3397,6 @@ packages: resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==} engines: {node: '>= 12.0.0'} - lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - load-tsconfig@0.2.5: - resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - local-pkg@1.1.2: resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} engines: {node: '>=14'} @@ -3637,9 +3412,6 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} @@ -3650,9 +3422,6 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.2.6: resolution: {integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==} engines: {node: 20 || >=22} @@ -3705,10 +3474,6 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - mlly@1.8.0: resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} @@ -3736,9 +3501,6 @@ packages: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -3869,9 +3631,6 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - package-manager-detector@0.2.11: resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} @@ -3896,10 +3655,6 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} @@ -3925,10 +3680,6 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} @@ -3939,24 +3690,6 @@ packages: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} - postcss-load-config@6.0.1: - resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} - engines: {node: '>= 18'} - peerDependencies: - jiti: '>=1.21.0' - postcss: '>=8.0.9' - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - jiti: - optional: true - postcss: - optional: true - tsx: - optional: true - yaml: - optional: true - postcss@8.4.31: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} @@ -4068,10 +3801,6 @@ packages: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} - reflect.getprototypeof@1.0.10: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} @@ -4265,11 +3994,6 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - source-map@0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} - deprecated: The work that was done in this beta branch won't be included in future versions - spawndamnit@3.0.1: resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} @@ -4304,10 +4028,6 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - string.prototype.includes@2.0.1: resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} engines: {node: '>= 0.4'} @@ -4335,10 +4055,6 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.2: - resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} - engines: {node: '>=12'} - strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} @@ -4360,11 +4076,6 @@ packages: babel-plugin-macros: optional: true - sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -4397,19 +4108,9 @@ packages: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyexec@1.0.2: resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} engines: {node: '>=18'} @@ -4437,9 +4138,6 @@ packages: resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} engines: {node: '>=16'} - tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} - tr46@6.0.0: resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} engines: {node: '>=20'} @@ -4454,9 +4152,6 @@ packages: peerDependencies: typescript: '>=4.8.4' - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - ts-morph@27.0.2: resolution: {integrity: sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w==} @@ -4501,25 +4196,6 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsup@8.4.0: - resolution: {integrity: sha512-b+eZbPCjz10fRryaAA7C8xlIHnf8VnsaRqydheLIqwG/Mcpfk8Z5zp3HayX7GaTygkigHl5cBUs+IhcySiIexQ==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - '@microsoft/api-extractor': ^7.36.0 - '@swc/core': ^1 - postcss: ^8.4.12 - typescript: '>=4.5.0' - peerDependenciesMeta: - '@microsoft/api-extractor': - optional: true - '@swc/core': - optional: true - postcss: - optional: true - typescript: - optional: true - turbo-darwin-64@2.8.10: resolution: {integrity: sha512-A03fXh+B7S8mL3PbdhTd+0UsaGrhfyPkODvzBDpKRY7bbeac4MDFpJ7I+Slf2oSkCEeSvHKR7Z4U71uKRUfX7g==} cpu: [x64] @@ -4767,9 +4443,6 @@ packages: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} - webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - webidl-conversions@8.0.1: resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} engines: {node: '>=20'} @@ -4795,9 +4468,6 @@ packages: resolution: {integrity: sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==} engines: {node: '>=20'} - whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -4839,10 +4509,6 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - ws@8.19.0: resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} engines: {node: '>=10.0.0'} @@ -5265,156 +4931,81 @@ snapshots: tslib: 2.8.1 optional: true - '@esbuild/aix-ppc64@0.25.1': - optional: true - '@esbuild/aix-ppc64@0.27.2': optional: true - '@esbuild/android-arm64@0.25.1': - optional: true - '@esbuild/android-arm64@0.27.2': optional: true - '@esbuild/android-arm@0.25.1': - optional: true - '@esbuild/android-arm@0.27.2': optional: true - '@esbuild/android-x64@0.25.1': - optional: true - '@esbuild/android-x64@0.27.2': optional: true - '@esbuild/darwin-arm64@0.25.1': - optional: true - '@esbuild/darwin-arm64@0.27.2': optional: true - '@esbuild/darwin-x64@0.25.1': - optional: true - '@esbuild/darwin-x64@0.27.2': optional: true - '@esbuild/freebsd-arm64@0.25.1': - optional: true - '@esbuild/freebsd-arm64@0.27.2': optional: true - '@esbuild/freebsd-x64@0.25.1': - optional: true - '@esbuild/freebsd-x64@0.27.2': optional: true - '@esbuild/linux-arm64@0.25.1': - optional: true - '@esbuild/linux-arm64@0.27.2': optional: true - '@esbuild/linux-arm@0.25.1': - optional: true - '@esbuild/linux-arm@0.27.2': optional: true - '@esbuild/linux-ia32@0.25.1': - optional: true - '@esbuild/linux-ia32@0.27.2': optional: true - '@esbuild/linux-loong64@0.25.1': - optional: true - '@esbuild/linux-loong64@0.27.2': optional: true - '@esbuild/linux-mips64el@0.25.1': - optional: true - '@esbuild/linux-mips64el@0.27.2': optional: true - '@esbuild/linux-ppc64@0.25.1': - optional: true - '@esbuild/linux-ppc64@0.27.2': optional: true - '@esbuild/linux-riscv64@0.25.1': - optional: true - '@esbuild/linux-riscv64@0.27.2': optional: true - '@esbuild/linux-s390x@0.25.1': - optional: true - '@esbuild/linux-s390x@0.27.2': optional: true - '@esbuild/linux-x64@0.25.1': - optional: true - '@esbuild/linux-x64@0.27.2': optional: true - '@esbuild/netbsd-arm64@0.25.1': - optional: true - '@esbuild/netbsd-arm64@0.27.2': optional: true - '@esbuild/netbsd-x64@0.25.1': - optional: true - '@esbuild/netbsd-x64@0.27.2': optional: true - '@esbuild/openbsd-arm64@0.25.1': - optional: true - '@esbuild/openbsd-arm64@0.27.2': optional: true - '@esbuild/openbsd-x64@0.25.1': - optional: true - '@esbuild/openbsd-x64@0.27.2': optional: true '@esbuild/openharmony-arm64@0.27.2': optional: true - '@esbuild/sunos-x64@0.25.1': - optional: true - '@esbuild/sunos-x64@0.27.2': optional: true - '@esbuild/win32-arm64@0.25.1': - optional: true - '@esbuild/win32-arm64@0.27.2': optional: true - '@esbuild/win32-ia32@0.25.1': - optional: true - '@esbuild/win32-ia32@0.27.2': optional: true - '@esbuild/win32-x64@0.25.1': - optional: true - '@esbuild/win32-x64@0.27.2': optional: true @@ -5641,15 +5232,6 @@ snapshots: dependencies: '@isaacs/balanced-match': 4.0.1 - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.2 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 - '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -5803,9 +5385,6 @@ snapshots: '@oxc-project/types@0.112.0': {} - '@pkgjs/parseargs@0.11.0': - optional: true - '@quansync/fs@1.0.0': dependencies: quansync: 1.0.0 @@ -6885,20 +6464,14 @@ snapshots: ansi-regex@5.0.1: {} - ansi-regex@6.2.2: {} - ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 ansi-styles@5.2.0: {} - ansi-styles@6.2.1: {} - ansis@4.2.0: {} - any-promise@1.3.0: {} - argparse@1.0.10: dependencies: sprintf-js: 1.0.3 @@ -7040,11 +6613,6 @@ snapshots: node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) - bundle-require@5.1.0(esbuild@0.25.1): - dependencies: - esbuild: 0.25.1 - load-tsconfig: 0.2.5 - cac@6.7.14: {} call-bind-apply-helpers@1.0.2: @@ -7079,10 +6647,6 @@ snapshots: chardet@2.1.1: {} - chokidar@4.0.3: - dependencies: - readdirp: 4.1.2 - ci-info@3.9.0: {} class-variance-authority@0.7.1: @@ -7111,8 +6675,6 @@ snapshots: color-name@1.1.4: {} - commander@4.1.1: {} - compare-versions@6.1.1: {} concat-map@0.0.1: {} @@ -7121,8 +6683,6 @@ snapshots: confbox@0.2.2: {} - consola@3.4.2: {} - convert-source-map@2.0.0: {} cookie@0.7.2: @@ -7235,11 +6795,10 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - eastasianwidth@0.2.0: {} - electron-to-chromium@1.5.286: {} - emoji-regex@8.0.0: {} + emoji-regex@8.0.0: + optional: true emoji-regex@9.2.2: {} @@ -7367,34 +6926,6 @@ snapshots: es-toolkit@1.44.0: {} - esbuild@0.25.1: - 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@0.27.2: optionalDependencies: '@esbuild/aix-ppc64': 0.27.2 @@ -7707,11 +7238,6 @@ snapshots: dependencies: is-callable: 1.2.7 - foreground-child@3.3.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - fs-extra@11.3.3: dependencies: graceful-fs: 4.2.11 @@ -7791,15 +7317,6 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.4.5: - dependencies: - foreground-child: 3.3.1 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - globals@14.0.0: {} globals@15.15.0: {} @@ -7978,7 +7495,8 @@ snapshots: dependencies: call-bound: 1.0.4 - is-fullwidth-code-point@3.0.0: {} + is-fullwidth-code-point@3.0.0: + optional: true is-generator-function@1.1.2: dependencies: @@ -8067,20 +7585,12 @@ snapshots: has-symbols: 1.1.0 set-function-name: 2.0.2 - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - jiti@2.6.1: {} jju@1.4.0: {} jose@6.1.3: {} - joycon@3.1.1: {} - js-tokens@4.0.0: {} js-yaml@3.14.2: @@ -8219,12 +7729,6 @@ snapshots: lightningcss-win32-arm64-msvc: 1.31.1 lightningcss-win32-x64-msvc: 1.31.1 - lilconfig@3.1.3: {} - - lines-and-columns@1.2.4: {} - - load-tsconfig@0.2.5: {} - local-pkg@1.1.2: dependencies: mlly: 1.8.0 @@ -8241,8 +7745,6 @@ snapshots: lodash.merge@4.6.2: {} - lodash.sortby@4.7.0: {} - lodash.startcase@4.4.0: {} lodash@4.17.21: {} @@ -8251,8 +7753,6 @@ snapshots: dependencies: js-tokens: 4.0.0 - lru-cache@10.4.3: {} - lru-cache@11.2.6: optional: true @@ -8300,8 +7800,6 @@ snapshots: minimist@1.2.8: {} - minipass@7.1.2: {} - mlly@1.8.0: dependencies: acorn: 8.15.0 @@ -8345,12 +7843,6 @@ snapshots: mute-stream@2.0.0: optional: true - mz@2.7.0: - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - nanoid@3.3.11: {} napi-postinstall@0.3.4: {} @@ -8490,8 +7982,6 @@ snapshots: p-try@2.2.0: {} - package-json-from-dist@1.0.1: {} - package-manager-detector@0.2.11: dependencies: quansync: 0.2.11 @@ -8513,11 +8003,6 @@ snapshots: path-parse@1.0.7: {} - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - path-to-regexp@6.3.0: optional: true @@ -8533,8 +8018,6 @@ snapshots: pify@4.0.1: {} - pirates@4.0.6: {} - pkg-types@1.3.1: dependencies: confbox: 0.1.8 @@ -8549,14 +8032,6 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.6)(yaml@2.7.0): - dependencies: - lilconfig: 3.1.3 - optionalDependencies: - jiti: 2.6.1 - postcss: 8.5.6 - yaml: 2.7.0 - postcss@8.4.31: dependencies: nanoid: 3.3.11 @@ -8656,8 +8131,6 @@ snapshots: pify: 4.0.1 strip-bom: 3.0.0 - readdirp@4.1.2: {} - reflect.getprototypeof@1.0.10: dependencies: call-bind: 1.0.8 @@ -8932,10 +8405,6 @@ snapshots: source-map@0.6.1: {} - source-map@0.8.0-beta.0: - dependencies: - whatwg-url: 7.1.0 - spawndamnit@3.0.1: dependencies: cross-spawn: 7.0.6 @@ -8967,12 +8436,7 @@ snapshots: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.2 + optional: true string.prototype.includes@2.0.1: dependencies: @@ -9028,10 +8492,6 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.2: - dependencies: - ansi-regex: 6.2.2 - strip-bom@3.0.0: {} strip-json-comments@3.1.1: {} @@ -9041,16 +8501,6 @@ snapshots: client-only: 0.0.1 react: 19.2.4 - sucrase@3.35.0: - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - commander: 4.1.1 - glob: 10.4.5 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.6 - ts-interface-checker: 0.1.13 - supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -9074,18 +8524,8 @@ snapshots: term-size@2.2.1: {} - thenify-all@1.6.0: - dependencies: - thenify: 3.3.1 - - thenify@3.3.1: - dependencies: - any-promise: 1.3.0 - tinybench@2.9.0: {} - tinyexec@0.3.2: {} - tinyexec@1.0.2: {} tinyglobby@0.2.15: @@ -9112,10 +8552,6 @@ snapshots: tldts: 7.0.23 optional: true - tr46@1.0.1: - dependencies: - punycode: 2.3.1 - tr46@6.0.0: dependencies: punycode: 2.3.1 @@ -9127,8 +8563,6 @@ snapshots: dependencies: typescript: 5.9.3 - ts-interface-checker@0.1.13: {} - ts-morph@27.0.2: dependencies: '@ts-morph/common': 0.28.1 @@ -9174,34 +8608,6 @@ snapshots: tslib@2.8.1: {} - tsup@8.4.0(@microsoft/api-extractor@7.55.2(@types/node@22.13.11))(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.7.0): - dependencies: - bundle-require: 5.1.0(esbuild@0.25.1) - cac: 6.7.14 - chokidar: 4.0.3 - consola: 3.4.2 - debug: 4.4.3 - esbuild: 0.25.1 - joycon: 3.1.1 - picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.6)(yaml@2.7.0) - resolve-from: 5.0.0 - rollup: 4.57.0 - source-map: 0.8.0-beta.0 - sucrase: 3.35.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.15 - tree-kill: 1.2.2 - optionalDependencies: - '@microsoft/api-extractor': 7.55.2(@types/node@22.13.11) - postcss: 8.5.6 - typescript: 5.9.3 - transitivePeerDependencies: - - jiti - - supports-color - - tsx - - yaml - turbo-darwin-64@2.8.10: optional: true @@ -9456,8 +8862,6 @@ snapshots: xml-name-validator: 5.0.0 optional: true - webidl-conversions@4.0.2: {} - webidl-conversions@8.0.1: optional: true @@ -9480,12 +8884,6 @@ snapshots: webidl-conversions: 8.0.1 optional: true - whatwg-url@7.1.0: - dependencies: - lodash.sortby: 4.7.0 - tr46: 1.0.1 - webidl-conversions: 4.0.2 - which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0 @@ -9552,12 +8950,7 @@ snapshots: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.1.2 + optional: true ws@8.19.0: {}