diff --git a/apps/cms/src/app/(frontend)/components/ThemeToggle.client.tsx b/apps/cms/src/app/(frontend)/components/ThemeToggle.client.tsx new file mode 100644 index 000000000..d2d36c010 --- /dev/null +++ b/apps/cms/src/app/(frontend)/components/ThemeToggle.client.tsx @@ -0,0 +1,40 @@ +'use client'; + +import { Moon, Sun } from 'lucide-react'; +import { useTheme } from 'next-themes'; +import * as React from 'react'; + +import { Button } from '@codeware/shared/ui/shadcn/components/button'; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger +} from '@codeware/shared/ui/shadcn/components/dropdown-menu'; + +export function ModeToggle() { + const { setTheme } = useTheme(); + + return ( + + + + + + setTheme('light')}> + Light + + setTheme('dark')}> + Dark + + setTheme('system')}> + System + + + + ); +} diff --git a/apps/cms/src/app/(frontend)/components/theme-provider.tsx b/apps/cms/src/app/(frontend)/components/theme-provider.tsx new file mode 100644 index 000000000..7c19a2693 --- /dev/null +++ b/apps/cms/src/app/(frontend)/components/theme-provider.tsx @@ -0,0 +1,11 @@ +'use client'; + +import { ThemeProvider as NextThemesProvider } from 'next-themes'; +import * as React from 'react'; + +export function ThemeProvider({ + children, + ...props +}: React.ComponentProps) { + return {children}; +} diff --git a/apps/cms/src/app/(frontend)/globals.css b/apps/cms/src/app/(frontend)/globals.css index 8b332127e..58d51b9da 100644 --- a/apps/cms/src/app/(frontend)/globals.css +++ b/apps/cms/src/app/(frontend)/globals.css @@ -1,76 +1,102 @@ @import 'tailwindcss'; -@plugin 'tailwindcss-animate'; -@custom-variant dark (&:is(.dark *)); +/* Let Tailwind know about the shadcn components */ +@source '../../../../../libs/shared/ui'; + +@custom-variant dark (&:where(.dark, .dark *)); :root { + /* codeware theme */ --steel-blue: #588bae; --yale-blue: #0e4d92; --space-cadet: #1d2951; --light-gray: #d0d2d3; --eerie-black: #242526; --darker-black: #111111; - --background: var(--darker-black); - --foreground: var(--light-gray); - /* Shadcn UI */ - /* --background: hsl(0 0% 100%); - --foreground: hsl(0 0% 3.9%); */ - --card: hsl(0 0% 100%); - --card-foreground: hsl(0 0% 3.9%); - --popover: hsl(0 0% 100%); - --popover-foreground: hsl(0 0% 3.9%); - --primary: hsl(0 0% 9%); - --primary-foreground: hsl(0 0% 98%); - --secondary: hsl(0 0% 96.1%); - --secondary-foreground: hsl(0 0% 9%); - --muted: hsl(0 0% 96.1%); - --muted-foreground: hsl(0 0% 45.1%); - --accent: hsl(0 0% 96.1%); - --accent-foreground: hsl(0 0% 9%); - --destructive: hsl(0 84.2% 60.2%); - --destructive-foreground: hsl(0 0% 98%); - --border: hsl(0 0% 89.8%); - --input: hsl(0 0% 89.8%); - --ring: hsl(0 0% 3.9%); - --chart-1: hsl(12 76% 61%); - --chart-2: hsl(173 58% 39%); - --chart-3: hsl(197 37% 24%); - --chart-4: hsl(43 74% 66%); - --chart-5: hsl(27 87% 67%); - --radius: 0.6rem; + /* shadcn zinc theme */ + --radius: 0.625rem; + --background: oklch(1 0 0); + --foreground: oklch(0.141 0.005 285.823); + --card: oklch(1 0 0); + --card-foreground: oklch(0.141 0.005 285.823); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.141 0.005 285.823); + --primary: oklch(0.21 0.006 285.885); + --primary-foreground: oklch(0.985 0 0); + --secondary: oklch(0.967 0.001 286.375); + --secondary-foreground: oklch(0.21 0.006 285.885); + --muted: oklch(0.967 0.001 286.375); + --muted-foreground: oklch(0.552 0.016 285.938); + --accent: oklch(0.967 0.001 286.375); + --accent-foreground: oklch(0.21 0.006 285.885); + --destructive: oklch(0.577 0.245 27.325); + --border: oklch(0.92 0.004 286.32); + --input: oklch(0.92 0.004 286.32); + --ring: oklch(0.705 0.015 286.067); + --chart-1: oklch(0.646 0.222 41.116); + --chart-2: oklch(0.6 0.118 184.704); + --chart-3: oklch(0.398 0.07 227.392); + --chart-4: oklch(0.828 0.189 84.429); + --chart-5: oklch(0.769 0.188 70.08); + --sidebar: oklch(0.985 0 0); + --sidebar-foreground: oklch(0.141 0.005 285.823); + --sidebar-primary: oklch(0.21 0.006 285.885); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.967 0.001 286.375); + --sidebar-accent-foreground: oklch(0.21 0.006 285.885); + --sidebar-border: oklch(0.92 0.004 286.32); + --sidebar-ring: oklch(0.705 0.015 286.067); + /* custom colors */ + --link: var(--yale-blue); } .dark { - --background: var(--darker-black); - --foreground: var(--light-gray); - /* Shadcn UI */ - /* --background: hsl(0 0% 3.9%); - --foreground: hsl(0 0% 98%); */ - --card: hsl(0 0% 3.9%); - --card-foreground: hsl(0 0% 98%); - --popover: hsl(0 0% 3.9%); - --popover-foreground: hsl(0 0% 98%); - --primary: hsl(0 0% 98%); - --primary-foreground: hsl(0 0% 9%); - --secondary: hsl(0 0% 14.9%); - --secondary-foreground: hsl(0 0% 98%); - --muted: hsl(0 0% 14.9%); - --muted-foreground: hsl(0 0% 63.9%); - --accent: hsl(0 0% 14.9%); - --accent-foreground: hsl(0 0% 98%); - --destructive: hsl(0 62.8% 30.6%); - --destructive-foreground: hsl(0 0% 98%); - --border: hsl(0 0% 14.9%); - --input: hsl(0 0% 14.9%); - --ring: hsl(0 0% 83.1%); - --chart-1: hsl(220 70% 50%); - --chart-2: hsl(160 60% 45%); - --chart-3: hsl(30 80% 55%); - --chart-4: hsl(280 65% 60%); - --chart-5: hsl(340 75% 55%); + /* shadcn zinc theme */ + --background: oklch(0.141 0.005 285.823); + --foreground: oklch(0.985 0 0); + --card: oklch(0.21 0.006 285.885); + --card-foreground: oklch(0.985 0 0); + --popover: oklch(0.21 0.006 285.885); + --popover-foreground: oklch(0.985 0 0); + --primary: oklch(0.92 0.004 286.32); + --primary-foreground: oklch(0.21 0.006 285.885); + --secondary: oklch(0.274 0.006 286.033); + --secondary-foreground: oklch(0.985 0 0); + --muted: oklch(0.274 0.006 286.033); + --muted-foreground: oklch(0.705 0.015 286.067); + --accent: oklch(0.274 0.006 286.033); + --accent-foreground: oklch(0.985 0 0); + --destructive: oklch(0.704 0.191 22.216); + --border: oklch(1 0 0 / 10%); + --input: oklch(1 0 0 / 15%); + --ring: oklch(0.552 0.016 285.938); + --chart-1: oklch(0.488 0.243 264.376); + --chart-2: oklch(0.696 0.17 162.48); + --chart-3: oklch(0.769 0.188 70.08); + --chart-4: oklch(0.627 0.265 303.9); + --chart-5: oklch(0.645 0.246 16.439); + --sidebar: oklch(0.21 0.006 285.885); + --sidebar-foreground: oklch(0.985 0 0); + --sidebar-primary: oklch(0.488 0.243 264.376); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.274 0.006 286.033); + --sidebar-accent-foreground: oklch(0.985 0 0); + --sidebar-border: oklch(1 0 0 / 10%); + --sidebar-ring: oklch(0.552 0.016 285.938); + /* custom colors */ + --link: var(--steel-blue); } @theme inline { + /* codeware colors */ + --color-cdwr-steel-blue: var(--steel-blue); + --color-cdwr-yale-blue: var(--yale-blue); + --color-cdwr-space-cadet: var(--space-cadet); + --color-cdwr-light-gray: var(--light-gray); + --color-cdwr-eerie-black: var(--eerie-black); + --color-cdwr-darker-black: var(--darker-black); + + /* shadcn colors */ --color-background: var(--background); --color-foreground: var(--foreground); --color-card: var(--card); @@ -99,6 +125,17 @@ --radius-md: calc(var(--radius) - 2px); --radius-lg: var(--radius); --radius-xl: calc(var(--radius) + 4px); + --color-sidebar: var(--sidebar); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-ring: var(--sidebar-ring); + + /* custom colors */ + --color-link: var(--link); } @layer base { diff --git a/apps/cms/src/app/(frontend)/layout.tsx b/apps/cms/src/app/(frontend)/layout.tsx index d8e21330a..cd548f93d 100644 --- a/apps/cms/src/app/(frontend)/layout.tsx +++ b/apps/cms/src/app/(frontend)/layout.tsx @@ -4,6 +4,8 @@ import React from 'react'; import { cn } from '@codeware/shared/util/ui'; import './globals.css'; +import { ThemeProvider } from './components/theme-provider'; +import { ModeToggle } from './components/ThemeToggle.client'; const inter = Inter({ subsets: ['latin'] }); @@ -18,29 +20,44 @@ export default async function RootLayout({ children: React.ReactNode; }) { return ( - - -
- {children} -
- + + + +
+ +
+
+ {children} +
+ +
); diff --git a/apps/cms/src/app/(payload)/admin/importMap.js b/apps/cms/src/app/(payload)/admin/importMap.js index 890d91980..6ebb68d72 100644 --- a/apps/cms/src/app/(payload)/admin/importMap.js +++ b/apps/cms/src/app/(payload)/admin/importMap.js @@ -33,7 +33,9 @@ import { S3ClientUploadHandler as S3ClientUploadHandler_f97aa6c64367fa259c5bc056 import { default as default_83b0dfab156f3636ed94b94854d15ad5 } from '@codeware/app-cms/ui/components/RedirectNotifier'; import { default as default_7925a79d2af6389df70d2dd269ffbfbb } from '@codeware/app-cms/ui/components/VerifyTenantDomain'; +import { default as default_9f66f0d44caf76088020099a6b3fd616 } from '@codeware/app-cms/ui/fields/card-group/CardGroupArrayRowLabel.client'; import { default as default_06af4458abd1296f9d6bccce90425927 } from '@codeware/app-cms/ui/fields/code/Code.client'; +import { default as default_ae19db27eee762af26f037dd7af0b736 } from '@codeware/app-cms/ui/fields/icon-picker/IconPickerField.client'; import { default as default_42ab7a6f795fd44e8c166a2bb6b2adc0 } from '@codeware/apps/cms/components/Logo.client'; import { default as default_d497a38447405736d600359900364450 } from '@codeware/apps/cms/components/NavigationArrayRowLabel'; import { default as default_dec1059b7bb8eb8da3a9f0fc400fffbd } from '@codeware/apps/cms/components/TenantsArrayRowLabel'; @@ -41,6 +43,8 @@ import { default as default_dec1059b7bb8eb8da3a9f0fc400fffbd } from '@codeware/a export const importMap = { '@payloadcms/plugin-multi-tenant/client#TenantField': TenantField_1d0591e3cf4f332c83a86da13a0de59a, + '@codeware/app-cms/ui/fields/icon-picker/IconPickerField.client#default': + default_ae19db27eee762af26f037dd7af0b736, '@payloadcms/richtext-lexical/rsc#RscEntryLexicalCell': RscEntryLexicalCell_44fe37237e0ebf4470c9990d8cb7b07e, '@payloadcms/richtext-lexical/rsc#RscEntryLexicalField': @@ -97,6 +101,8 @@ export const importMap = { PreviewComponent_a8a977ebc872c5d5ea7ee689724c0860, '@payloadcms/richtext-lexical/client#BlocksFeatureClient': BlocksFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + '@codeware/app-cms/ui/fields/card-group/CardGroupArrayRowLabel.client#default': + default_9f66f0d44caf76088020099a6b3fd616, '@codeware/app-cms/ui/fields/code/Code.client#default': default_06af4458abd1296f9d6bccce90425927, '@codeware/apps/cms/components/TenantsArrayRowLabel#default': diff --git a/apps/cms/src/app/(payload)/custom.css b/apps/cms/src/app/(payload)/custom.css new file mode 100644 index 000000000..1002a6d25 --- /dev/null +++ b/apps/cms/src/app/(payload)/custom.css @@ -0,0 +1,141 @@ +@layer theme, base, components, utilities; + +/* Let Tailwind know about classes outside of this app */ +@source '../../../../../libs/shared/ui'; + +@custom-variant dark (&:where([data-theme=dark], [data-theme=dark] *)); + +/* shadcn theme */ +:root { + --radius: 0.625rem; + --background: oklch(1 0 0); + --foreground: oklch(0.141 0.005 285.823); + --card: oklch(1 0 0); + --card-foreground: oklch(0.141 0.005 285.823); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.141 0.005 285.823); + --primary: oklch(0.21 0.006 285.885); + --primary-foreground: oklch(0.985 0 0); + --secondary: oklch(0.967 0.001 286.375); + --secondary-foreground: oklch(0.21 0.006 285.885); + --muted: oklch(0.967 0.001 286.375); + --muted-foreground: oklch(0.552 0.016 285.938); + --accent: oklch(0.967 0.001 286.375); + --accent-foreground: oklch(0.21 0.006 285.885); + --destructive: oklch(0.577 0.245 27.325); + --border: oklch(0.92 0.004 286.32); + --input: oklch(0.92 0.004 286.32); + --ring: oklch(0.705 0.015 286.067); + --chart-1: oklch(0.646 0.222 41.116); + --chart-2: oklch(0.6 0.118 184.704); + --chart-3: oklch(0.398 0.07 227.392); + --chart-4: oklch(0.828 0.189 84.429); + --chart-5: oklch(0.769 0.188 70.08); + --sidebar: oklch(0.985 0 0); + --sidebar-foreground: oklch(0.141 0.005 285.823); + --sidebar-primary: oklch(0.21 0.006 285.885); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.967 0.001 286.375); + --sidebar-accent-foreground: oklch(0.21 0.006 285.885); + --sidebar-border: oklch(0.92 0.004 286.32); + --sidebar-ring: oklch(0.705 0.015 286.067); +} + +[data-theme='dark'] { + --background: oklch(0.141 0.005 285.823); + --foreground: oklch(0.985 0 0); + --card: oklch(0.21 0.006 285.885); + --card-foreground: oklch(0.985 0 0); + --popover: oklch(0.21 0.006 285.885); + --popover-foreground: oklch(0.985 0 0); + --primary: oklch(0.92 0.004 286.32); + --primary-foreground: oklch(0.21 0.006 285.885); + --secondary: oklch(0.274 0.006 286.033); + --secondary-foreground: oklch(0.985 0 0); + --muted: oklch(0.274 0.006 286.033); + --muted-foreground: oklch(0.705 0.015 286.067); + --accent: oklch(0.274 0.006 286.033); + --accent-foreground: oklch(0.985 0 0); + --destructive: oklch(0.704 0.191 22.216); + --border: oklch(1 0 0 / 10%); + --input: oklch(1 0 0 / 15%); + --ring: oklch(0.552 0.016 285.938); + --chart-1: oklch(0.488 0.243 264.376); + --chart-2: oklch(0.696 0.17 162.48); + --chart-3: oklch(0.769 0.188 70.08); + --chart-4: oklch(0.627 0.265 303.9); + --chart-5: oklch(0.645 0.246 16.439); + --sidebar: oklch(0.21 0.006 285.885); + --sidebar-foreground: oklch(0.985 0 0); + --sidebar-primary: oklch(0.488 0.243 264.376); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.274 0.006 286.033); + --sidebar-accent-foreground: oklch(0.985 0 0); + --sidebar-border: oklch(1 0 0 / 10%); + --sidebar-ring: oklch(0.552 0.016 285.938); +} + +@theme inline { + --color-background: var(--background); + --color-foreground: var(--foreground); + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + --color-destructive: var(--destructive); + --color-destructive-foreground: var(--destructive-foreground); + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); + --color-chart-1: var(--chart-1); + --color-chart-2: var(--chart-2); + --color-chart-3: var(--chart-3); + --color-chart-4: var(--chart-4); + --color-chart-5: var(--chart-5); + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); +} + +@import 'tailwindcss/theme.css' layer(theme); + +@layer base { + .twp, + /* shadcn dialog must have preflight to render correctly */ + div[role='dialog'][data-slot='dialog-content'] { + @import 'tailwindcss/preflight.css'; + } + .no-twp { + *, + ::after, + ::before, + ::backdrop, + ::file-selector-button { + all: revert-layer; + } + } + + /* shadcn */ + * { + @apply border-border outline-ring/50; + } + body { + @apply bg-background text-foreground; + } +} + +@layer utilities { + @import 'tailwindcss/utilities.css'; + .table { + display: block; + } +} diff --git a/apps/cms/src/app/(payload)/custom.scss b/apps/cms/src/app/(payload)/custom.scss deleted file mode 100644 index 1c47fd878..000000000 --- a/apps/cms/src/app/(payload)/custom.scss +++ /dev/null @@ -1,112 +0,0 @@ -@plugin 'tailwindcss-animate'; - -@custom-variant dark (&:is([data-theme='dark'] *)); - -:root { - --background: 0 0% 100%; - --foreground: 240 10% 3.9%; - --card: 0 0% 100%; - --card-foreground: 240 10% 3.9%; - --popover: 0 0% 100%; - --popover-foreground: 240 10% 3.9%; - --primary: 240 5.9% 10%; - --primary-foreground: 0 0% 98%; - --secondary: 240 4.8% 95.9%; - --secondary-foreground: 240 5.9% 10%; - --muted: 240 4.8% 95.9%; - --muted-foreground: 240 3.8% 46.1%; - --accent: 240 4.8% 95.9%; - --accent-foreground: 240 5.9% 10%; - --destructive: 0 84.2% 60.2%; - --destructive-foreground: 0 0% 98%; - --border: 240 5.9% 90%; - --input: 240 5.9% 90%; - --ring: 240 5.9% 10%; - --radius: 0.5rem; -} - -[data-theme='dark'] { - --background: 240 10% 3.9%; - --foreground: 0 0% 98%; - --card: 240 10% 3.9%; - --card-foreground: 0 0% 98%; - --popover: 240 10% 3.9%; - --popover-foreground: 0 0% 98%; - --primary: 0 0% 98%; - --primary-foreground: 240 5.9% 10%; - --secondary: 240 3.7% 15.9%; - --secondary-foreground: 0 0% 98%; - --muted: 240 3.7% 15.9%; - --muted-foreground: 240 5% 64.9%; - --accent: 240 3.7% 15.9%; - --accent-foreground: 0 0% 98%; - --destructive: 0 62.8% 30.6%; - --destructive-foreground: 0 0% 98%; - --border: 240 3.7% 15.9%; - --input: 240 3.7% 15.9%; - --ring: 240 4.9% 83.9%; -} - -@theme inline { - --color-background: var(--background); - --color-foreground: var(--foreground); - --color-card: var(--card); - --color-card-foreground: var(--card-foreground); - --color-popover: var(--popover); - --color-popover-foreground: var(--popover-foreground); - --color-primary: var(--primary); - --color-primary-foreground: var(--primary-foreground); - --color-secondary: var(--secondary); - --color-secondary-foreground: var(--secondary-foreground); - --color-muted: var(--muted); - --color-muted-foreground: var(--muted-foreground); - --color-accent: var(--accent); - --color-accent-foreground: var(--accent-foreground); - --color-destructive: var(--destructive); - --color-destructive-foreground: var(--destructive-foreground); - --color-border: var(--border); - --color-input: var(--input); - --color-ring: var(--ring); - --color-chart-1: var(--chart-1); - --color-chart-2: var(--chart-2); - --color-chart-3: var(--chart-3); - --color-chart-4: var(--chart-4); - --color-chart-5: var(--chart-5); - --radius-sm: calc(var(--radius) - 4px); - --radius-md: calc(var(--radius) - 2px); - --radius-lg: var(--radius); - --radius-xl: calc(var(--radius) + 4px); -} - -@layer theme { - @import 'tailwindcss/theme.css'; -} - -@layer base { - .twp { - @import 'tailwindcss/preflight.css'; - - * { - @apply border-border outline-ring/50; - } - body { - @apply bg-background text-foreground; - } - } - - .no-twp { - *, - ::after, - ::before, - ::backdrop, - ::file-selector-button { - all: revert-layer; - } - } -} - -@layer components; - -@layer utilities { - @import 'tailwindcss/utilities.css'; -} diff --git a/apps/cms/src/app/(payload)/layout.tsx b/apps/cms/src/app/(payload)/layout.tsx index e1d1abd9d..162184f47 100644 --- a/apps/cms/src/app/(payload)/layout.tsx +++ b/apps/cms/src/app/(payload)/layout.tsx @@ -9,7 +9,7 @@ import config from '@payload-config'; import '@payloadcms/next/css'; import { importMap } from './admin/importMap.js'; -import './custom.scss'; +import './custom.css'; type Args = { children: React.ReactNode; diff --git a/apps/cms/src/collections/cards/cards.collection.ts b/apps/cms/src/collections/cards/cards.collection.ts new file mode 100644 index 000000000..92ebd398d --- /dev/null +++ b/apps/cms/src/collections/cards/cards.collection.ts @@ -0,0 +1,34 @@ +import type { CollectionConfig } from 'payload'; + +import { getEnv } from '@codeware/app-cms/feature/env-loader'; +import { cardGroupField, slugField } from '@codeware/app-cms/ui/fields'; +import { verifyApiKeyAccess } from '@codeware/app-cms/util/access'; +import { adminGroups } from '@codeware/app-cms/util/definitions'; + +const env = getEnv(); + +/** + * Cards collection where one or many reusable cards can be created + */ +const cards: CollectionConfig = { + slug: 'cards', + admin: { + group: adminGroups.content, + description: { + en: 'Create reusable cards', + sv: 'Skapa återanvändbara kort' + }, + defaultColumns: ['title', 'slug', 'tenant'], + useAsTitle: 'title' + }, + access: { + read: verifyApiKeyAccess({ secret: env.SIGNATURE_SECRET }) + }, + labels: { + singular: { en: 'Card', sv: 'Kort' }, + plural: { en: 'Cards', sv: 'Kort' } + }, + fields: [...cardGroupField.fields, slugField({ sourceField: 'title' })] +}; + +export default cards; diff --git a/apps/cms/src/collections/pages/pages.collection.ts b/apps/cms/src/collections/pages/pages.collection.ts index 0b77724a5..61f0ffb3b 100644 --- a/apps/cms/src/collections/pages/pages.collection.ts +++ b/apps/cms/src/collections/pages/pages.collection.ts @@ -76,7 +76,7 @@ const pages: CollectionConfig<'pages'> = { name: 'layout', type: 'blocks', label: 'Layout builder', - blockReferences: ['content', 'form', 'media', 'code'], + blockReferences: ['content', 'card', 'form', 'media', 'code'], blocks: [], required: true, localized: true, diff --git a/apps/cms/src/collections/posts/posts.collection.ts b/apps/cms/src/collections/posts/posts.collection.ts index 15d9d0e56..d9fa87b8b 100644 --- a/apps/cms/src/collections/posts/posts.collection.ts +++ b/apps/cms/src/collections/posts/posts.collection.ts @@ -69,7 +69,7 @@ const posts: CollectionConfig<'posts'> = { HeadingFeature({ enabledHeadingSizes: ['h1', 'h2', 'h3', 'h4'] }), - BlocksFeature({ blocks: ['code', 'media'] }) + BlocksFeature({ blocks: ['card', 'code', 'media'] }) ] }), label: false, diff --git a/apps/cms/src/components/TenantsArrayRowLabel.tsx b/apps/cms/src/components/TenantsArrayRowLabel.tsx index c2bccbd32..29201f0f0 100644 --- a/apps/cms/src/components/TenantsArrayRowLabel.tsx +++ b/apps/cms/src/components/TenantsArrayRowLabel.tsx @@ -1,5 +1,3 @@ -import React from 'react'; - import { ArrayRowLabel } from './array-row-label.type'; /** diff --git a/apps/cms/src/migrations/20250409_125211_cod_257.json b/apps/cms/src/migrations/20250409_125211_cod_257.json new file mode 100644 index 000000000..a568bbb24 --- /dev/null +++ b/apps/cms/src/migrations/20250409_125211_cod_257.json @@ -0,0 +1,7377 @@ +{ + "id": "ac60d8d7-7597-414a-b627-ca32f7a9b8f2", + "prevId": "00000000-0000-0000-0000-000000000000", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.cards": { + "name": "cards", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "tenant_id": { + "name": "tenant_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "icon": { + "name": "icon", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "enable_link": { + "name": "enable_link", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "link_type": { + "name": "link_type", + "type": "enum_cards_link_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'reference'" + }, + "link_new_tab": { + "name": "link_new_tab", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "link_url": { + "name": "link_url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "link_nav_trigger": { + "name": "link_nav_trigger", + "type": "enum_cards_link_nav_trigger", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'card'" + }, + "slug": { + "name": "slug", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "cards_tenant_idx": { + "name": "cards_tenant_idx", + "columns": [ + { + "expression": "tenant_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "cards_slug_idx": { + "name": "cards_slug_idx", + "columns": [ + { + "expression": "slug", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "cards_updated_at_idx": { + "name": "cards_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "cards_created_at_idx": { + "name": "cards_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "cards_tenant_id_tenants_id_fk": { + "name": "cards_tenant_id_tenants_id_fk", + "tableFrom": "cards", + "tableTo": "tenants", + "columnsFrom": ["tenant_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.cards_locales": { + "name": "cards_locales", + "schema": "", + "columns": { + "title": { + "name": "title", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "content": { + "name": "content", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "link_label": { + "name": "link_label", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "cards_locales_locale_parent_id_unique": { + "name": "cards_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "cards_locales_parent_id_fk": { + "name": "cards_locales_parent_id_fk", + "tableFrom": "cards_locales", + "tableTo": "cards", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.cards_rels": { + "name": "cards_rels", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "pages_id": { + "name": "pages_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "posts_id": { + "name": "posts_id", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "cards_rels_order_idx": { + "name": "cards_rels_order_idx", + "columns": [ + { + "expression": "order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "cards_rels_parent_idx": { + "name": "cards_rels_parent_idx", + "columns": [ + { + "expression": "parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "cards_rels_path_idx": { + "name": "cards_rels_path_idx", + "columns": [ + { + "expression": "path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "cards_rels_pages_id_idx": { + "name": "cards_rels_pages_id_idx", + "columns": [ + { + "expression": "pages_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "cards_rels_posts_id_idx": { + "name": "cards_rels_posts_id_idx", + "columns": [ + { + "expression": "posts_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "cards_rels_parent_fk": { + "name": "cards_rels_parent_fk", + "tableFrom": "cards_rels", + "tableTo": "cards", + "columnsFrom": ["parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "cards_rels_pages_fk": { + "name": "cards_rels_pages_fk", + "tableFrom": "cards_rels", + "tableTo": "pages", + "columnsFrom": ["pages_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "cards_rels_posts_fk": { + "name": "cards_rels_posts_fk", + "tableFrom": "cards_rels", + "tableTo": "posts", + "columnsFrom": ["posts_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.categories": { + "name": "categories", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "tenant_id": { + "name": "tenant_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "slug": { + "name": "slug", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "categories_tenant_idx": { + "name": "categories_tenant_idx", + "columns": [ + { + "expression": "tenant_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "categories_slug_idx": { + "name": "categories_slug_idx", + "columns": [ + { + "expression": "slug", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "categories_updated_at_idx": { + "name": "categories_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "categories_created_at_idx": { + "name": "categories_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "categories_tenant_id_tenants_id_fk": { + "name": "categories_tenant_id_tenants_id_fk", + "tableFrom": "categories", + "tableTo": "tenants", + "columnsFrom": ["tenant_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.categories_locales": { + "name": "categories_locales", + "schema": "", + "columns": { + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "categories_locales_locale_parent_id_unique": { + "name": "categories_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "categories_locales_parent_id_fk": { + "name": "categories_locales_parent_id_fk", + "tableFrom": "categories_locales", + "tableTo": "categories", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.media": { + "name": "media", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "tenant_id": { + "name": "tenant_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "alt": { + "name": "alt", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "prefix": { + "name": "prefix", + "type": "varchar", + "primaryKey": false, + "notNull": false, + "default": "'media'" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "url": { + "name": "url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "thumbnail_u_r_l": { + "name": "thumbnail_u_r_l", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "filename": { + "name": "filename", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "mime_type": { + "name": "mime_type", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "filesize": { + "name": "filesize", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "width": { + "name": "width", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "height": { + "name": "height", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "focal_x": { + "name": "focal_x", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "focal_y": { + "name": "focal_y", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "sizes_thumbnail_url": { + "name": "sizes_thumbnail_url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "sizes_thumbnail_width": { + "name": "sizes_thumbnail_width", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "sizes_thumbnail_height": { + "name": "sizes_thumbnail_height", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "sizes_thumbnail_mime_type": { + "name": "sizes_thumbnail_mime_type", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "sizes_thumbnail_filesize": { + "name": "sizes_thumbnail_filesize", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "sizes_thumbnail_filename": { + "name": "sizes_thumbnail_filename", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "sizes_square_url": { + "name": "sizes_square_url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "sizes_square_width": { + "name": "sizes_square_width", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "sizes_square_height": { + "name": "sizes_square_height", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "sizes_square_mime_type": { + "name": "sizes_square_mime_type", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "sizes_square_filesize": { + "name": "sizes_square_filesize", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "sizes_square_filename": { + "name": "sizes_square_filename", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "sizes_small_url": { + "name": "sizes_small_url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "sizes_small_width": { + "name": "sizes_small_width", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "sizes_small_height": { + "name": "sizes_small_height", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "sizes_small_mime_type": { + "name": "sizes_small_mime_type", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "sizes_small_filesize": { + "name": "sizes_small_filesize", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "sizes_small_filename": { + "name": "sizes_small_filename", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "sizes_medium_url": { + "name": "sizes_medium_url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "sizes_medium_width": { + "name": "sizes_medium_width", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "sizes_medium_height": { + "name": "sizes_medium_height", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "sizes_medium_mime_type": { + "name": "sizes_medium_mime_type", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "sizes_medium_filesize": { + "name": "sizes_medium_filesize", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "sizes_medium_filename": { + "name": "sizes_medium_filename", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "sizes_large_url": { + "name": "sizes_large_url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "sizes_large_width": { + "name": "sizes_large_width", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "sizes_large_height": { + "name": "sizes_large_height", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "sizes_large_mime_type": { + "name": "sizes_large_mime_type", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "sizes_large_filesize": { + "name": "sizes_large_filesize", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "sizes_large_filename": { + "name": "sizes_large_filename", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "sizes_xlarge_url": { + "name": "sizes_xlarge_url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "sizes_xlarge_width": { + "name": "sizes_xlarge_width", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "sizes_xlarge_height": { + "name": "sizes_xlarge_height", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "sizes_xlarge_mime_type": { + "name": "sizes_xlarge_mime_type", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "sizes_xlarge_filesize": { + "name": "sizes_xlarge_filesize", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "sizes_xlarge_filename": { + "name": "sizes_xlarge_filename", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "sizes_og_url": { + "name": "sizes_og_url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "sizes_og_width": { + "name": "sizes_og_width", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "sizes_og_height": { + "name": "sizes_og_height", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "sizes_og_mime_type": { + "name": "sizes_og_mime_type", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "sizes_og_filesize": { + "name": "sizes_og_filesize", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "sizes_og_filename": { + "name": "sizes_og_filename", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "media_tenant_idx": { + "name": "media_tenant_idx", + "columns": [ + { + "expression": "tenant_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "media_updated_at_idx": { + "name": "media_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "media_created_at_idx": { + "name": "media_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "media_filename_idx": { + "name": "media_filename_idx", + "columns": [ + { + "expression": "filename", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "media_sizes_thumbnail_sizes_thumbnail_filename_idx": { + "name": "media_sizes_thumbnail_sizes_thumbnail_filename_idx", + "columns": [ + { + "expression": "sizes_thumbnail_filename", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "media_sizes_square_sizes_square_filename_idx": { + "name": "media_sizes_square_sizes_square_filename_idx", + "columns": [ + { + "expression": "sizes_square_filename", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "media_sizes_small_sizes_small_filename_idx": { + "name": "media_sizes_small_sizes_small_filename_idx", + "columns": [ + { + "expression": "sizes_small_filename", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "media_sizes_medium_sizes_medium_filename_idx": { + "name": "media_sizes_medium_sizes_medium_filename_idx", + "columns": [ + { + "expression": "sizes_medium_filename", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "media_sizes_large_sizes_large_filename_idx": { + "name": "media_sizes_large_sizes_large_filename_idx", + "columns": [ + { + "expression": "sizes_large_filename", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "media_sizes_xlarge_sizes_xlarge_filename_idx": { + "name": "media_sizes_xlarge_sizes_xlarge_filename_idx", + "columns": [ + { + "expression": "sizes_xlarge_filename", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "media_sizes_og_sizes_og_filename_idx": { + "name": "media_sizes_og_sizes_og_filename_idx", + "columns": [ + { + "expression": "sizes_og_filename", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "media_tenant_id_tenants_id_fk": { + "name": "media_tenant_id_tenants_id_fk", + "tableFrom": "media", + "tableTo": "tenants", + "columnsFrom": ["tenant_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.media_locales": { + "name": "media_locales", + "schema": "", + "columns": { + "caption": { + "name": "caption", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "media_locales_locale_parent_id_unique": { + "name": "media_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "media_locales_parent_id_fk": { + "name": "media_locales_parent_id_fk", + "tableFrom": "media_locales", + "tableTo": "media", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.navigation_items": { + "name": "navigation_items", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "label_source": { + "name": "label_source", + "type": "enum_navigation_items_label_source", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'document'" + }, + "custom_label": { + "name": "custom_label", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "navigation_items_order_idx": { + "name": "navigation_items_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "navigation_items_parent_id_idx": { + "name": "navigation_items_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "navigation_items_parent_id_fk": { + "name": "navigation_items_parent_id_fk", + "tableFrom": "navigation_items", + "tableTo": "navigation", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.navigation": { + "name": "navigation", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "tenant_id": { + "name": "tenant_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "navigation_tenant_idx": { + "name": "navigation_tenant_idx", + "columns": [ + { + "expression": "tenant_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "navigation_updated_at_idx": { + "name": "navigation_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "navigation_created_at_idx": { + "name": "navigation_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "navigation_tenant_id_tenants_id_fk": { + "name": "navigation_tenant_id_tenants_id_fk", + "tableFrom": "navigation", + "tableTo": "tenants", + "columnsFrom": ["tenant_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.navigation_rels": { + "name": "navigation_rels", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "pages_id": { + "name": "pages_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "posts_id": { + "name": "posts_id", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "navigation_rels_order_idx": { + "name": "navigation_rels_order_idx", + "columns": [ + { + "expression": "order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "navigation_rels_parent_idx": { + "name": "navigation_rels_parent_idx", + "columns": [ + { + "expression": "parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "navigation_rels_path_idx": { + "name": "navigation_rels_path_idx", + "columns": [ + { + "expression": "path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "navigation_rels_pages_id_idx": { + "name": "navigation_rels_pages_id_idx", + "columns": [ + { + "expression": "pages_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "navigation_rels_posts_id_idx": { + "name": "navigation_rels_posts_id_idx", + "columns": [ + { + "expression": "posts_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "navigation_rels_parent_fk": { + "name": "navigation_rels_parent_fk", + "tableFrom": "navigation_rels", + "tableTo": "navigation", + "columnsFrom": ["parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "navigation_rels_pages_fk": { + "name": "navigation_rels_pages_fk", + "tableFrom": "navigation_rels", + "tableTo": "pages", + "columnsFrom": ["pages_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "navigation_rels_posts_fk": { + "name": "navigation_rels_posts_fk", + "tableFrom": "navigation_rels", + "tableTo": "posts", + "columnsFrom": ["posts_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages_blocks_content_columns": { + "name": "pages_blocks_content_columns", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "size": { + "name": "size", + "type": "enum_pages_blocks_content_columns_size", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'full'" + }, + "rich_text": { + "name": "rich_text", + "type": "jsonb", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "pages_blocks_content_columns_order_idx": { + "name": "pages_blocks_content_columns_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_content_columns_parent_id_idx": { + "name": "pages_blocks_content_columns_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_content_columns_locale_idx": { + "name": "pages_blocks_content_columns_locale_idx", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_blocks_content_columns_parent_id_fk": { + "name": "pages_blocks_content_columns_parent_id_fk", + "tableFrom": "pages_blocks_content_columns", + "tableTo": "pages_blocks_content", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages_blocks_content": { + "name": "pages_blocks_content", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "block_name": { + "name": "block_name", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "pages_blocks_content_order_idx": { + "name": "pages_blocks_content_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_content_parent_id_idx": { + "name": "pages_blocks_content_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_content_path_idx": { + "name": "pages_blocks_content_path_idx", + "columns": [ + { + "expression": "_path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_content_locale_idx": { + "name": "pages_blocks_content_locale_idx", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_blocks_content_parent_id_fk": { + "name": "pages_blocks_content_parent_id_fk", + "tableFrom": "pages_blocks_content", + "tableTo": "pages", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages_blocks_card_custom_cards": { + "name": "pages_blocks_card_custom_cards", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "card_icon": { + "name": "card_icon", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "card_title": { + "name": "card_title", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "card_description": { + "name": "card_description", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "card_content": { + "name": "card_content", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "card_enable_link": { + "name": "card_enable_link", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "card_link_type": { + "name": "card_link_type", + "type": "enum_pages_blocks_card_custom_cards_card_link_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'reference'" + }, + "card_link_new_tab": { + "name": "card_link_new_tab", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "card_link_url": { + "name": "card_link_url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "card_link_nav_trigger": { + "name": "card_link_nav_trigger", + "type": "enum_pages_blocks_card_custom_cards_card_link_nav_trigger", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'card'" + }, + "card_link_label": { + "name": "card_link_label", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "pages_blocks_card_custom_cards_order_idx": { + "name": "pages_blocks_card_custom_cards_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_card_custom_cards_parent_id_idx": { + "name": "pages_blocks_card_custom_cards_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_card_custom_cards_locale_idx": { + "name": "pages_blocks_card_custom_cards_locale_idx", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_blocks_card_custom_cards_parent_id_fk": { + "name": "pages_blocks_card_custom_cards_parent_id_fk", + "tableFrom": "pages_blocks_card_custom_cards", + "tableTo": "pages_blocks_card", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages_blocks_card": { + "name": "pages_blocks_card", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "block_name": { + "name": "block_name", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "pages_blocks_card_order_idx": { + "name": "pages_blocks_card_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_card_parent_id_idx": { + "name": "pages_blocks_card_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_card_path_idx": { + "name": "pages_blocks_card_path_idx", + "columns": [ + { + "expression": "_path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_card_locale_idx": { + "name": "pages_blocks_card_locale_idx", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_blocks_card_parent_id_fk": { + "name": "pages_blocks_card_parent_id_fk", + "tableFrom": "pages_blocks_card", + "tableTo": "pages", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages_blocks_form": { + "name": "pages_blocks_form", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "form_id": { + "name": "form_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "enable_intro": { + "name": "enable_intro", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "intro_content": { + "name": "intro_content", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "block_name": { + "name": "block_name", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "pages_blocks_form_order_idx": { + "name": "pages_blocks_form_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_form_parent_id_idx": { + "name": "pages_blocks_form_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_form_path_idx": { + "name": "pages_blocks_form_path_idx", + "columns": [ + { + "expression": "_path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_form_locale_idx": { + "name": "pages_blocks_form_locale_idx", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_form_form_idx": { + "name": "pages_blocks_form_form_idx", + "columns": [ + { + "expression": "form_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_blocks_form_form_id_forms_id_fk": { + "name": "pages_blocks_form_form_id_forms_id_fk", + "tableFrom": "pages_blocks_form", + "tableTo": "forms", + "columnsFrom": ["form_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + }, + "pages_blocks_form_parent_id_fk": { + "name": "pages_blocks_form_parent_id_fk", + "tableFrom": "pages_blocks_form", + "tableTo": "pages", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages_blocks_media": { + "name": "pages_blocks_media", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "media_id": { + "name": "media_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "block_name": { + "name": "block_name", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "pages_blocks_media_order_idx": { + "name": "pages_blocks_media_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_media_parent_id_idx": { + "name": "pages_blocks_media_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_media_path_idx": { + "name": "pages_blocks_media_path_idx", + "columns": [ + { + "expression": "_path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_media_locale_idx": { + "name": "pages_blocks_media_locale_idx", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_media_media_idx": { + "name": "pages_blocks_media_media_idx", + "columns": [ + { + "expression": "media_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_blocks_media_media_id_media_id_fk": { + "name": "pages_blocks_media_media_id_media_id_fk", + "tableFrom": "pages_blocks_media", + "tableTo": "media", + "columnsFrom": ["media_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + }, + "pages_blocks_media_parent_id_fk": { + "name": "pages_blocks_media_parent_id_fk", + "tableFrom": "pages_blocks_media", + "tableTo": "pages", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages_blocks_code": { + "name": "pages_blocks_code", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "language": { + "name": "language", + "type": "enum_pages_blocks_code_language", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'ts'" + }, + "code": { + "name": "code", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "block_name": { + "name": "block_name", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "pages_blocks_code_order_idx": { + "name": "pages_blocks_code_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_code_parent_id_idx": { + "name": "pages_blocks_code_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_code_path_idx": { + "name": "pages_blocks_code_path_idx", + "columns": [ + { + "expression": "_path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_code_locale_idx": { + "name": "pages_blocks_code_locale_idx", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_blocks_code_parent_id_fk": { + "name": "pages_blocks_code_parent_id_fk", + "tableFrom": "pages_blocks_code", + "tableTo": "pages", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages": { + "name": "pages", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "tenant_id": { + "name": "tenant_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "published_at": { + "name": "published_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "slug": { + "name": "slug", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "pages_tenant_idx": { + "name": "pages_tenant_idx", + "columns": [ + { + "expression": "tenant_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_slug_idx": { + "name": "pages_slug_idx", + "columns": [ + { + "expression": "slug", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_updated_at_idx": { + "name": "pages_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_created_at_idx": { + "name": "pages_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_tenant_id_tenants_id_fk": { + "name": "pages_tenant_id_tenants_id_fk", + "tableFrom": "pages", + "tableTo": "tenants", + "columnsFrom": ["tenant_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages_locales": { + "name": "pages_locales", + "schema": "", + "columns": { + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "header": { + "name": "header", + "type": "varchar", + "primaryKey": false, + "notNull": false, + "default": "''" + }, + "meta_title": { + "name": "meta_title", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "meta_image_id": { + "name": "meta_image_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "meta_description": { + "name": "meta_description", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "pages_meta_meta_image_idx": { + "name": "pages_meta_meta_image_idx", + "columns": [ + { + "expression": "meta_image_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_locales_locale_parent_id_unique": { + "name": "pages_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_locales_meta_image_id_media_id_fk": { + "name": "pages_locales_meta_image_id_media_id_fk", + "tableFrom": "pages_locales", + "tableTo": "media", + "columnsFrom": ["meta_image_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + }, + "pages_locales_parent_id_fk": { + "name": "pages_locales_parent_id_fk", + "tableFrom": "pages_locales", + "tableTo": "pages", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages_rels": { + "name": "pages_rels", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "locale": { + "name": "locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": false + }, + "cards_id": { + "name": "cards_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "pages_id": { + "name": "pages_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "posts_id": { + "name": "posts_id", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "pages_rels_order_idx": { + "name": "pages_rels_order_idx", + "columns": [ + { + "expression": "order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_rels_parent_idx": { + "name": "pages_rels_parent_idx", + "columns": [ + { + "expression": "parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_rels_path_idx": { + "name": "pages_rels_path_idx", + "columns": [ + { + "expression": "path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_rels_locale_idx": { + "name": "pages_rels_locale_idx", + "columns": [ + { + "expression": "locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_rels_cards_id_idx": { + "name": "pages_rels_cards_id_idx", + "columns": [ + { + "expression": "cards_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_rels_pages_id_idx": { + "name": "pages_rels_pages_id_idx", + "columns": [ + { + "expression": "pages_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_rels_posts_id_idx": { + "name": "pages_rels_posts_id_idx", + "columns": [ + { + "expression": "posts_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_rels_parent_fk": { + "name": "pages_rels_parent_fk", + "tableFrom": "pages_rels", + "tableTo": "pages", + "columnsFrom": ["parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "pages_rels_cards_fk": { + "name": "pages_rels_cards_fk", + "tableFrom": "pages_rels", + "tableTo": "cards", + "columnsFrom": ["cards_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "pages_rels_pages_fk": { + "name": "pages_rels_pages_fk", + "tableFrom": "pages_rels", + "tableTo": "pages", + "columnsFrom": ["pages_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "pages_rels_posts_fk": { + "name": "pages_rels_posts_fk", + "tableFrom": "pages_rels", + "tableTo": "posts", + "columnsFrom": ["posts_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.posts": { + "name": "posts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "tenant_id": { + "name": "tenant_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "hero_image_id": { + "name": "hero_image_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "published_at": { + "name": "published_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "slug": { + "name": "slug", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "posts_tenant_idx": { + "name": "posts_tenant_idx", + "columns": [ + { + "expression": "tenant_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "posts_hero_image_idx": { + "name": "posts_hero_image_idx", + "columns": [ + { + "expression": "hero_image_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "posts_slug_idx": { + "name": "posts_slug_idx", + "columns": [ + { + "expression": "slug", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "posts_updated_at_idx": { + "name": "posts_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "posts_created_at_idx": { + "name": "posts_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "posts_tenant_id_tenants_id_fk": { + "name": "posts_tenant_id_tenants_id_fk", + "tableFrom": "posts", + "tableTo": "tenants", + "columnsFrom": ["tenant_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + }, + "posts_hero_image_id_media_id_fk": { + "name": "posts_hero_image_id_media_id_fk", + "tableFrom": "posts", + "tableTo": "media", + "columnsFrom": ["hero_image_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.posts_locales": { + "name": "posts_locales", + "schema": "", + "columns": { + "title": { + "name": "title", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "content": { + "name": "content", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "meta_title": { + "name": "meta_title", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "meta_image_id": { + "name": "meta_image_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "meta_description": { + "name": "meta_description", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "posts_meta_meta_image_idx": { + "name": "posts_meta_meta_image_idx", + "columns": [ + { + "expression": "meta_image_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "posts_locales_locale_parent_id_unique": { + "name": "posts_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "posts_locales_meta_image_id_media_id_fk": { + "name": "posts_locales_meta_image_id_media_id_fk", + "tableFrom": "posts_locales", + "tableTo": "media", + "columnsFrom": ["meta_image_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + }, + "posts_locales_parent_id_fk": { + "name": "posts_locales_parent_id_fk", + "tableFrom": "posts_locales", + "tableTo": "posts", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.posts_rels": { + "name": "posts_rels", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "posts_id": { + "name": "posts_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "categories_id": { + "name": "categories_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "users_id": { + "name": "users_id", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "posts_rels_order_idx": { + "name": "posts_rels_order_idx", + "columns": [ + { + "expression": "order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "posts_rels_parent_idx": { + "name": "posts_rels_parent_idx", + "columns": [ + { + "expression": "parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "posts_rels_path_idx": { + "name": "posts_rels_path_idx", + "columns": [ + { + "expression": "path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "posts_rels_posts_id_idx": { + "name": "posts_rels_posts_id_idx", + "columns": [ + { + "expression": "posts_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "posts_rels_categories_id_idx": { + "name": "posts_rels_categories_id_idx", + "columns": [ + { + "expression": "categories_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "posts_rels_users_id_idx": { + "name": "posts_rels_users_id_idx", + "columns": [ + { + "expression": "users_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "posts_rels_parent_fk": { + "name": "posts_rels_parent_fk", + "tableFrom": "posts_rels", + "tableTo": "posts", + "columnsFrom": ["parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "posts_rels_posts_fk": { + "name": "posts_rels_posts_fk", + "tableFrom": "posts_rels", + "tableTo": "posts", + "columnsFrom": ["posts_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "posts_rels_categories_fk": { + "name": "posts_rels_categories_fk", + "tableFrom": "posts_rels", + "tableTo": "categories", + "columnsFrom": ["categories_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "posts_rels_users_fk": { + "name": "posts_rels_users_fk", + "tableFrom": "posts_rels", + "tableTo": "users", + "columnsFrom": ["users_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.site_settings": { + "name": "site_settings", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "tenant_id": { + "name": "tenant_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "general_app_name": { + "name": "general_app_name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "general_landing_page_id": { + "name": "general_landing_page_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "site_settings_tenant_idx": { + "name": "site_settings_tenant_idx", + "columns": [ + { + "expression": "tenant_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "site_settings_general_general_landing_page_idx": { + "name": "site_settings_general_general_landing_page_idx", + "columns": [ + { + "expression": "general_landing_page_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "site_settings_updated_at_idx": { + "name": "site_settings_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "site_settings_created_at_idx": { + "name": "site_settings_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "site_settings_tenant_id_tenants_id_fk": { + "name": "site_settings_tenant_id_tenants_id_fk", + "tableFrom": "site_settings", + "tableTo": "tenants", + "columnsFrom": ["tenant_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + }, + "site_settings_general_landing_page_id_pages_id_fk": { + "name": "site_settings_general_landing_page_id_pages_id_fk", + "tableFrom": "site_settings", + "tableTo": "pages", + "columnsFrom": ["general_landing_page_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.tenants_domains_page_types": { + "name": "tenants_domains_page_types", + "schema": "", + "columns": { + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "parent_id": { + "name": "parent_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "enum_tenants_domains_page_types", + "typeSchema": "public", + "primaryKey": false, + "notNull": false + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + } + }, + "indexes": { + "tenants_domains_page_types_order_idx": { + "name": "tenants_domains_page_types_order_idx", + "columns": [ + { + "expression": "order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "tenants_domains_page_types_parent_idx": { + "name": "tenants_domains_page_types_parent_idx", + "columns": [ + { + "expression": "parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "tenants_domains_page_types_parent_fk": { + "name": "tenants_domains_page_types_parent_fk", + "tableFrom": "tenants_domains_page_types", + "tableTo": "tenants_domains", + "columnsFrom": ["parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.tenants_domains": { + "name": "tenants_domains", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "domain": { + "name": "domain", + "type": "varchar", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "tenants_domains_order_idx": { + "name": "tenants_domains_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "tenants_domains_parent_id_idx": { + "name": "tenants_domains_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "tenants_domains_parent_id_fk": { + "name": "tenants_domains_parent_id_fk", + "tableFrom": "tenants_domains", + "tableTo": "tenants", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.tenants": { + "name": "tenants", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "slug": { + "name": "slug", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "enable_a_p_i_key": { + "name": "enable_a_p_i_key", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "api_key": { + "name": "api_key", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "api_key_index": { + "name": "api_key_index", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "tenants_slug_idx": { + "name": "tenants_slug_idx", + "columns": [ + { + "expression": "slug", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "tenants_updated_at_idx": { + "name": "tenants_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "tenants_created_at_idx": { + "name": "tenants_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.users_tenants": { + "name": "users_tenants", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "tenant_id": { + "name": "tenant_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "enum_users_tenants_role", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'user'" + } + }, + "indexes": { + "users_tenants_order_idx": { + "name": "users_tenants_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "users_tenants_parent_id_idx": { + "name": "users_tenants_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "users_tenants_tenant_idx": { + "name": "users_tenants_tenant_idx", + "columns": [ + { + "expression": "tenant_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "users_tenants_tenant_id_tenants_id_fk": { + "name": "users_tenants_tenant_id_tenants_id_fk", + "tableFrom": "users_tenants", + "tableTo": "tenants", + "columnsFrom": ["tenant_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + }, + "users_tenants_parent_id_fk": { + "name": "users_tenants_parent_id_fk", + "tableFrom": "users_tenants", + "tableTo": "users", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.users": { + "name": "users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "enum_users_role", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'user'" + }, + "description": { + "name": "description", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "email": { + "name": "email", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "reset_password_token": { + "name": "reset_password_token", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "reset_password_expiration": { + "name": "reset_password_expiration", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "salt": { + "name": "salt", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "hash": { + "name": "hash", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "login_attempts": { + "name": "login_attempts", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "default": 0 + }, + "lock_until": { + "name": "lock_until", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "users_updated_at_idx": { + "name": "users_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "users_created_at_idx": { + "name": "users_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "users_email_idx": { + "name": "users_email_idx", + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forms_blocks_checkbox": { + "name": "forms_blocks_checkbox", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "width": { + "name": "width", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "required": { + "name": "required", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "default_value": { + "name": "default_value", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "block_name": { + "name": "block_name", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "forms_blocks_checkbox_order_idx": { + "name": "forms_blocks_checkbox_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "forms_blocks_checkbox_parent_id_idx": { + "name": "forms_blocks_checkbox_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "forms_blocks_checkbox_path_idx": { + "name": "forms_blocks_checkbox_path_idx", + "columns": [ + { + "expression": "_path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "forms_blocks_checkbox_parent_id_fk": { + "name": "forms_blocks_checkbox_parent_id_fk", + "tableFrom": "forms_blocks_checkbox", + "tableTo": "forms", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forms_blocks_checkbox_locales": { + "name": "forms_blocks_checkbox_locales", + "schema": "", + "columns": { + "label": { + "name": "label", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "forms_blocks_checkbox_locales_locale_parent_id_unique": { + "name": "forms_blocks_checkbox_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "forms_blocks_checkbox_locales_parent_id_fk": { + "name": "forms_blocks_checkbox_locales_parent_id_fk", + "tableFrom": "forms_blocks_checkbox_locales", + "tableTo": "forms_blocks_checkbox", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forms_blocks_country": { + "name": "forms_blocks_country", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "width": { + "name": "width", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "required": { + "name": "required", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "block_name": { + "name": "block_name", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "forms_blocks_country_order_idx": { + "name": "forms_blocks_country_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "forms_blocks_country_parent_id_idx": { + "name": "forms_blocks_country_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "forms_blocks_country_path_idx": { + "name": "forms_blocks_country_path_idx", + "columns": [ + { + "expression": "_path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "forms_blocks_country_parent_id_fk": { + "name": "forms_blocks_country_parent_id_fk", + "tableFrom": "forms_blocks_country", + "tableTo": "forms", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forms_blocks_country_locales": { + "name": "forms_blocks_country_locales", + "schema": "", + "columns": { + "label": { + "name": "label", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "placeholder": { + "name": "placeholder", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "forms_blocks_country_locales_locale_parent_id_unique": { + "name": "forms_blocks_country_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "forms_blocks_country_locales_parent_id_fk": { + "name": "forms_blocks_country_locales_parent_id_fk", + "tableFrom": "forms_blocks_country_locales", + "tableTo": "forms_blocks_country", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forms_blocks_email": { + "name": "forms_blocks_email", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "width": { + "name": "width", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "required": { + "name": "required", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "block_name": { + "name": "block_name", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "forms_blocks_email_order_idx": { + "name": "forms_blocks_email_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "forms_blocks_email_parent_id_idx": { + "name": "forms_blocks_email_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "forms_blocks_email_path_idx": { + "name": "forms_blocks_email_path_idx", + "columns": [ + { + "expression": "_path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "forms_blocks_email_parent_id_fk": { + "name": "forms_blocks_email_parent_id_fk", + "tableFrom": "forms_blocks_email", + "tableTo": "forms", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forms_blocks_email_locales": { + "name": "forms_blocks_email_locales", + "schema": "", + "columns": { + "label": { + "name": "label", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "placeholder": { + "name": "placeholder", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "forms_blocks_email_locales_locale_parent_id_unique": { + "name": "forms_blocks_email_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "forms_blocks_email_locales_parent_id_fk": { + "name": "forms_blocks_email_locales_parent_id_fk", + "tableFrom": "forms_blocks_email_locales", + "tableTo": "forms_blocks_email", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forms_blocks_message": { + "name": "forms_blocks_message", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "block_name": { + "name": "block_name", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "forms_blocks_message_order_idx": { + "name": "forms_blocks_message_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "forms_blocks_message_parent_id_idx": { + "name": "forms_blocks_message_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "forms_blocks_message_path_idx": { + "name": "forms_blocks_message_path_idx", + "columns": [ + { + "expression": "_path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "forms_blocks_message_parent_id_fk": { + "name": "forms_blocks_message_parent_id_fk", + "tableFrom": "forms_blocks_message", + "tableTo": "forms", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forms_blocks_message_locales": { + "name": "forms_blocks_message_locales", + "schema": "", + "columns": { + "message": { + "name": "message", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "forms_blocks_message_locales_locale_parent_id_unique": { + "name": "forms_blocks_message_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "forms_blocks_message_locales_parent_id_fk": { + "name": "forms_blocks_message_locales_parent_id_fk", + "tableFrom": "forms_blocks_message_locales", + "tableTo": "forms_blocks_message", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forms_blocks_number": { + "name": "forms_blocks_number", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "width": { + "name": "width", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "default_value": { + "name": "default_value", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "required": { + "name": "required", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "block_name": { + "name": "block_name", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "forms_blocks_number_order_idx": { + "name": "forms_blocks_number_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "forms_blocks_number_parent_id_idx": { + "name": "forms_blocks_number_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "forms_blocks_number_path_idx": { + "name": "forms_blocks_number_path_idx", + "columns": [ + { + "expression": "_path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "forms_blocks_number_parent_id_fk": { + "name": "forms_blocks_number_parent_id_fk", + "tableFrom": "forms_blocks_number", + "tableTo": "forms", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forms_blocks_number_locales": { + "name": "forms_blocks_number_locales", + "schema": "", + "columns": { + "label": { + "name": "label", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "placeholder": { + "name": "placeholder", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "forms_blocks_number_locales_locale_parent_id_unique": { + "name": "forms_blocks_number_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "forms_blocks_number_locales_parent_id_fk": { + "name": "forms_blocks_number_locales_parent_id_fk", + "tableFrom": "forms_blocks_number_locales", + "tableTo": "forms_blocks_number", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forms_blocks_select_options": { + "name": "forms_blocks_select_options", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "value": { + "name": "value", + "type": "varchar", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "forms_blocks_select_options_order_idx": { + "name": "forms_blocks_select_options_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "forms_blocks_select_options_parent_id_idx": { + "name": "forms_blocks_select_options_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "forms_blocks_select_options_parent_id_fk": { + "name": "forms_blocks_select_options_parent_id_fk", + "tableFrom": "forms_blocks_select_options", + "tableTo": "forms_blocks_select", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forms_blocks_select_options_locales": { + "name": "forms_blocks_select_options_locales", + "schema": "", + "columns": { + "label": { + "name": "label", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "forms_blocks_select_options_locales_locale_parent_id_unique": { + "name": "forms_blocks_select_options_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "forms_blocks_select_options_locales_parent_id_fk": { + "name": "forms_blocks_select_options_locales_parent_id_fk", + "tableFrom": "forms_blocks_select_options_locales", + "tableTo": "forms_blocks_select_options", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forms_blocks_select": { + "name": "forms_blocks_select", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "width": { + "name": "width", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "required": { + "name": "required", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "block_name": { + "name": "block_name", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "forms_blocks_select_order_idx": { + "name": "forms_blocks_select_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "forms_blocks_select_parent_id_idx": { + "name": "forms_blocks_select_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "forms_blocks_select_path_idx": { + "name": "forms_blocks_select_path_idx", + "columns": [ + { + "expression": "_path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "forms_blocks_select_parent_id_fk": { + "name": "forms_blocks_select_parent_id_fk", + "tableFrom": "forms_blocks_select", + "tableTo": "forms", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forms_blocks_select_locales": { + "name": "forms_blocks_select_locales", + "schema": "", + "columns": { + "label": { + "name": "label", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "placeholder": { + "name": "placeholder", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "default_value": { + "name": "default_value", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "forms_blocks_select_locales_locale_parent_id_unique": { + "name": "forms_blocks_select_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "forms_blocks_select_locales_parent_id_fk": { + "name": "forms_blocks_select_locales_parent_id_fk", + "tableFrom": "forms_blocks_select_locales", + "tableTo": "forms_blocks_select", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forms_blocks_text": { + "name": "forms_blocks_text", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "width": { + "name": "width", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "required": { + "name": "required", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "block_name": { + "name": "block_name", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "forms_blocks_text_order_idx": { + "name": "forms_blocks_text_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "forms_blocks_text_parent_id_idx": { + "name": "forms_blocks_text_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "forms_blocks_text_path_idx": { + "name": "forms_blocks_text_path_idx", + "columns": [ + { + "expression": "_path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "forms_blocks_text_parent_id_fk": { + "name": "forms_blocks_text_parent_id_fk", + "tableFrom": "forms_blocks_text", + "tableTo": "forms", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forms_blocks_text_locales": { + "name": "forms_blocks_text_locales", + "schema": "", + "columns": { + "label": { + "name": "label", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "placeholder": { + "name": "placeholder", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "default_value": { + "name": "default_value", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "forms_blocks_text_locales_locale_parent_id_unique": { + "name": "forms_blocks_text_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "forms_blocks_text_locales_parent_id_fk": { + "name": "forms_blocks_text_locales_parent_id_fk", + "tableFrom": "forms_blocks_text_locales", + "tableTo": "forms_blocks_text", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forms_blocks_textarea": { + "name": "forms_blocks_textarea", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "width": { + "name": "width", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "required": { + "name": "required", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "block_name": { + "name": "block_name", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "forms_blocks_textarea_order_idx": { + "name": "forms_blocks_textarea_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "forms_blocks_textarea_parent_id_idx": { + "name": "forms_blocks_textarea_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "forms_blocks_textarea_path_idx": { + "name": "forms_blocks_textarea_path_idx", + "columns": [ + { + "expression": "_path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "forms_blocks_textarea_parent_id_fk": { + "name": "forms_blocks_textarea_parent_id_fk", + "tableFrom": "forms_blocks_textarea", + "tableTo": "forms", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forms_blocks_textarea_locales": { + "name": "forms_blocks_textarea_locales", + "schema": "", + "columns": { + "label": { + "name": "label", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "placeholder": { + "name": "placeholder", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "default_value": { + "name": "default_value", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "forms_blocks_textarea_locales_locale_parent_id_unique": { + "name": "forms_blocks_textarea_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "forms_blocks_textarea_locales_parent_id_fk": { + "name": "forms_blocks_textarea_locales_parent_id_fk", + "tableFrom": "forms_blocks_textarea_locales", + "tableTo": "forms_blocks_textarea", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forms_emails": { + "name": "forms_emails", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "email_to": { + "name": "email_to", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "cc": { + "name": "cc", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "bcc": { + "name": "bcc", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "reply_to": { + "name": "reply_to", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "email_from": { + "name": "email_from", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "forms_emails_order_idx": { + "name": "forms_emails_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "forms_emails_parent_id_idx": { + "name": "forms_emails_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "forms_emails_parent_id_fk": { + "name": "forms_emails_parent_id_fk", + "tableFrom": "forms_emails", + "tableTo": "forms", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forms_emails_locales": { + "name": "forms_emails_locales", + "schema": "", + "columns": { + "subject": { + "name": "subject", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'You''''ve received a new message.'" + }, + "message": { + "name": "message", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "forms_emails_locales_locale_parent_id_unique": { + "name": "forms_emails_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "forms_emails_locales_parent_id_fk": { + "name": "forms_emails_locales_parent_id_fk", + "tableFrom": "forms_emails_locales", + "tableTo": "forms_emails", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forms": { + "name": "forms", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "tenant_id": { + "name": "tenant_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "title": { + "name": "title", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "confirmation_type": { + "name": "confirmation_type", + "type": "enum_forms_confirmation_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'message'" + }, + "redirect_type": { + "name": "redirect_type", + "type": "enum_forms_redirect_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'reference'" + }, + "redirect_url": { + "name": "redirect_url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "forms_tenant_idx": { + "name": "forms_tenant_idx", + "columns": [ + { + "expression": "tenant_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "forms_updated_at_idx": { + "name": "forms_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "forms_created_at_idx": { + "name": "forms_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "forms_tenant_id_tenants_id_fk": { + "name": "forms_tenant_id_tenants_id_fk", + "tableFrom": "forms", + "tableTo": "tenants", + "columnsFrom": ["tenant_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forms_locales": { + "name": "forms_locales", + "schema": "", + "columns": { + "submit_button_label": { + "name": "submit_button_label", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "confirmation_message": { + "name": "confirmation_message", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "forms_locales_locale_parent_id_unique": { + "name": "forms_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "forms_locales_parent_id_fk": { + "name": "forms_locales_parent_id_fk", + "tableFrom": "forms_locales", + "tableTo": "forms", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forms_rels": { + "name": "forms_rels", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "pages_id": { + "name": "pages_id", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "forms_rels_order_idx": { + "name": "forms_rels_order_idx", + "columns": [ + { + "expression": "order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "forms_rels_parent_idx": { + "name": "forms_rels_parent_idx", + "columns": [ + { + "expression": "parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "forms_rels_path_idx": { + "name": "forms_rels_path_idx", + "columns": [ + { + "expression": "path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "forms_rels_pages_id_idx": { + "name": "forms_rels_pages_id_idx", + "columns": [ + { + "expression": "pages_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "forms_rels_parent_fk": { + "name": "forms_rels_parent_fk", + "tableFrom": "forms_rels", + "tableTo": "forms", + "columnsFrom": ["parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "forms_rels_pages_fk": { + "name": "forms_rels_pages_fk", + "tableFrom": "forms_rels", + "tableTo": "pages", + "columnsFrom": ["pages_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.form_submissions_submission_data": { + "name": "form_submissions_submission_data", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "field": { + "name": "field", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "varchar", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "form_submissions_submission_data_order_idx": { + "name": "form_submissions_submission_data_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "form_submissions_submission_data_parent_id_idx": { + "name": "form_submissions_submission_data_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "form_submissions_submission_data_parent_id_fk": { + "name": "form_submissions_submission_data_parent_id_fk", + "tableFrom": "form_submissions_submission_data", + "tableTo": "form_submissions", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.form_submissions": { + "name": "form_submissions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "tenant_id": { + "name": "tenant_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "form_id": { + "name": "form_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "form_submissions_tenant_idx": { + "name": "form_submissions_tenant_idx", + "columns": [ + { + "expression": "tenant_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "form_submissions_form_idx": { + "name": "form_submissions_form_idx", + "columns": [ + { + "expression": "form_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "form_submissions_updated_at_idx": { + "name": "form_submissions_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "form_submissions_created_at_idx": { + "name": "form_submissions_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "form_submissions_tenant_id_tenants_id_fk": { + "name": "form_submissions_tenant_id_tenants_id_fk", + "tableFrom": "form_submissions", + "tableTo": "tenants", + "columnsFrom": ["tenant_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + }, + "form_submissions_form_id_forms_id_fk": { + "name": "form_submissions_form_id_forms_id_fk", + "tableFrom": "form_submissions", + "tableTo": "forms", + "columnsFrom": ["form_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.payload_locked_documents": { + "name": "payload_locked_documents", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "global_slug": { + "name": "global_slug", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "payload_locked_documents_global_slug_idx": { + "name": "payload_locked_documents_global_slug_idx", + "columns": [ + { + "expression": "global_slug", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_updated_at_idx": { + "name": "payload_locked_documents_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_created_at_idx": { + "name": "payload_locked_documents_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.payload_locked_documents_rels": { + "name": "payload_locked_documents_rels", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "cards_id": { + "name": "cards_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "categories_id": { + "name": "categories_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "media_id": { + "name": "media_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "navigation_id": { + "name": "navigation_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "pages_id": { + "name": "pages_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "posts_id": { + "name": "posts_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "site_settings_id": { + "name": "site_settings_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "tenants_id": { + "name": "tenants_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "users_id": { + "name": "users_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "forms_id": { + "name": "forms_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "form_submissions_id": { + "name": "form_submissions_id", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "payload_locked_documents_rels_order_idx": { + "name": "payload_locked_documents_rels_order_idx", + "columns": [ + { + "expression": "order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_parent_idx": { + "name": "payload_locked_documents_rels_parent_idx", + "columns": [ + { + "expression": "parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_path_idx": { + "name": "payload_locked_documents_rels_path_idx", + "columns": [ + { + "expression": "path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_cards_id_idx": { + "name": "payload_locked_documents_rels_cards_id_idx", + "columns": [ + { + "expression": "cards_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_categories_id_idx": { + "name": "payload_locked_documents_rels_categories_id_idx", + "columns": [ + { + "expression": "categories_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_media_id_idx": { + "name": "payload_locked_documents_rels_media_id_idx", + "columns": [ + { + "expression": "media_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_navigation_id_idx": { + "name": "payload_locked_documents_rels_navigation_id_idx", + "columns": [ + { + "expression": "navigation_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_pages_id_idx": { + "name": "payload_locked_documents_rels_pages_id_idx", + "columns": [ + { + "expression": "pages_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_posts_id_idx": { + "name": "payload_locked_documents_rels_posts_id_idx", + "columns": [ + { + "expression": "posts_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_site_settings_id_idx": { + "name": "payload_locked_documents_rels_site_settings_id_idx", + "columns": [ + { + "expression": "site_settings_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_tenants_id_idx": { + "name": "payload_locked_documents_rels_tenants_id_idx", + "columns": [ + { + "expression": "tenants_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_users_id_idx": { + "name": "payload_locked_documents_rels_users_id_idx", + "columns": [ + { + "expression": "users_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_forms_id_idx": { + "name": "payload_locked_documents_rels_forms_id_idx", + "columns": [ + { + "expression": "forms_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_form_submissions_id_idx": { + "name": "payload_locked_documents_rels_form_submissions_id_idx", + "columns": [ + { + "expression": "form_submissions_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "payload_locked_documents_rels_parent_fk": { + "name": "payload_locked_documents_rels_parent_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "payload_locked_documents", + "columnsFrom": ["parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_cards_fk": { + "name": "payload_locked_documents_rels_cards_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "cards", + "columnsFrom": ["cards_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_categories_fk": { + "name": "payload_locked_documents_rels_categories_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "categories", + "columnsFrom": ["categories_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_media_fk": { + "name": "payload_locked_documents_rels_media_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "media", + "columnsFrom": ["media_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_navigation_fk": { + "name": "payload_locked_documents_rels_navigation_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "navigation", + "columnsFrom": ["navigation_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_pages_fk": { + "name": "payload_locked_documents_rels_pages_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "pages", + "columnsFrom": ["pages_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_posts_fk": { + "name": "payload_locked_documents_rels_posts_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "posts", + "columnsFrom": ["posts_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_site_settings_fk": { + "name": "payload_locked_documents_rels_site_settings_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "site_settings", + "columnsFrom": ["site_settings_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_tenants_fk": { + "name": "payload_locked_documents_rels_tenants_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "tenants", + "columnsFrom": ["tenants_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_users_fk": { + "name": "payload_locked_documents_rels_users_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "users", + "columnsFrom": ["users_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_forms_fk": { + "name": "payload_locked_documents_rels_forms_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "forms", + "columnsFrom": ["forms_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_form_submissions_fk": { + "name": "payload_locked_documents_rels_form_submissions_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "form_submissions", + "columnsFrom": ["form_submissions_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.payload_preferences": { + "name": "payload_preferences", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "key": { + "name": "key", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "value": { + "name": "value", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "payload_preferences_key_idx": { + "name": "payload_preferences_key_idx", + "columns": [ + { + "expression": "key", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_preferences_updated_at_idx": { + "name": "payload_preferences_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_preferences_created_at_idx": { + "name": "payload_preferences_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.payload_preferences_rels": { + "name": "payload_preferences_rels", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "tenants_id": { + "name": "tenants_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "users_id": { + "name": "users_id", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "payload_preferences_rels_order_idx": { + "name": "payload_preferences_rels_order_idx", + "columns": [ + { + "expression": "order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_preferences_rels_parent_idx": { + "name": "payload_preferences_rels_parent_idx", + "columns": [ + { + "expression": "parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_preferences_rels_path_idx": { + "name": "payload_preferences_rels_path_idx", + "columns": [ + { + "expression": "path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_preferences_rels_tenants_id_idx": { + "name": "payload_preferences_rels_tenants_id_idx", + "columns": [ + { + "expression": "tenants_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_preferences_rels_users_id_idx": { + "name": "payload_preferences_rels_users_id_idx", + "columns": [ + { + "expression": "users_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "payload_preferences_rels_parent_fk": { + "name": "payload_preferences_rels_parent_fk", + "tableFrom": "payload_preferences_rels", + "tableTo": "payload_preferences", + "columnsFrom": ["parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_preferences_rels_tenants_fk": { + "name": "payload_preferences_rels_tenants_fk", + "tableFrom": "payload_preferences_rels", + "tableTo": "tenants", + "columnsFrom": ["tenants_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_preferences_rels_users_fk": { + "name": "payload_preferences_rels_users_fk", + "tableFrom": "payload_preferences_rels", + "tableTo": "users", + "columnsFrom": ["users_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.payload_migrations": { + "name": "payload_migrations", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "batch": { + "name": "batch", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "payload_migrations_updated_at_idx": { + "name": "payload_migrations_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_migrations_created_at_idx": { + "name": "payload_migrations_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": { + "public._locales": { + "name": "_locales", + "schema": "public", + "values": ["en", "sv"] + }, + "public.enum_cards_link_type": { + "name": "enum_cards_link_type", + "schema": "public", + "values": ["reference", "custom"] + }, + "public.enum_cards_link_nav_trigger": { + "name": "enum_cards_link_nav_trigger", + "schema": "public", + "values": ["card", "link"] + }, + "public.enum_navigation_items_label_source": { + "name": "enum_navigation_items_label_source", + "schema": "public", + "values": ["document", "custom"] + }, + "public.enum_pages_blocks_content_columns_size": { + "name": "enum_pages_blocks_content_columns_size", + "schema": "public", + "values": ["one-third", "half", "two-thirds", "full"] + }, + "public.enum_pages_blocks_card_custom_cards_card_link_type": { + "name": "enum_pages_blocks_card_custom_cards_card_link_type", + "schema": "public", + "values": ["reference", "custom"] + }, + "public.enum_pages_blocks_card_custom_cards_card_link_nav_trigger": { + "name": "enum_pages_blocks_card_custom_cards_card_link_nav_trigger", + "schema": "public", + "values": ["card", "link"] + }, + "public.enum_pages_blocks_code_language": { + "name": "enum_pages_blocks_code_language", + "schema": "public", + "values": ["ts", "plaintext", "tsx", "js", "jsx"] + }, + "public.enum_tenants_domains_page_types": { + "name": "enum_tenants_domains_page_types", + "schema": "public", + "values": ["cms", "client", "disabled"] + }, + "public.enum_users_tenants_role": { + "name": "enum_users_tenants_role", + "schema": "public", + "values": ["user", "admin"] + }, + "public.enum_users_role": { + "name": "enum_users_role", + "schema": "public", + "values": ["user", "system-user"] + }, + "public.enum_forms_confirmation_type": { + "name": "enum_forms_confirmation_type", + "schema": "public", + "values": ["message", "redirect"] + }, + "public.enum_forms_redirect_type": { + "name": "enum_forms_redirect_type", + "schema": "public", + "values": ["reference", "custom"] + } + }, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + } +} diff --git a/apps/cms/src/migrations/20250409_125211_cod_257.ts b/apps/cms/src/migrations/20250409_125211_cod_257.ts new file mode 100644 index 000000000..2271b9c75 --- /dev/null +++ b/apps/cms/src/migrations/20250409_125211_cod_257.ts @@ -0,0 +1,205 @@ +import { MigrateDownArgs, MigrateUpArgs, sql } from '@payloadcms/db-postgres'; + +export async function up({ db, payload, req }: MigrateUpArgs): Promise { + await db.execute(sql` + CREATE TYPE "public"."enum_cards_link_type" AS ENUM('reference', 'custom'); + CREATE TYPE "public"."enum_cards_link_nav_trigger" AS ENUM('card', 'link'); + CREATE TYPE "public"."enum_pages_blocks_card_custom_cards_card_link_type" AS ENUM('reference', 'custom'); + CREATE TYPE "public"."enum_pages_blocks_card_custom_cards_card_link_nav_trigger" AS ENUM('card', 'link'); + CREATE TABLE IF NOT EXISTS "cards" ( + "id" serial PRIMARY KEY NOT NULL, + "tenant_id" integer, + "icon" varchar, + "enable_link" boolean, + "link_type" "enum_cards_link_type" DEFAULT 'reference', + "link_new_tab" boolean, + "link_url" varchar, + "link_nav_trigger" "enum_cards_link_nav_trigger" DEFAULT 'card', + "slug" varchar, + "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, + "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL + ); + + CREATE TABLE IF NOT EXISTS "cards_locales" ( + "title" varchar NOT NULL, + "description" varchar, + "content" varchar NOT NULL, + "link_label" varchar, + "id" serial PRIMARY KEY NOT NULL, + "_locale" "_locales" NOT NULL, + "_parent_id" integer NOT NULL + ); + + CREATE TABLE IF NOT EXISTS "cards_rels" ( + "id" serial PRIMARY KEY NOT NULL, + "order" integer, + "parent_id" integer NOT NULL, + "path" varchar NOT NULL, + "pages_id" integer, + "posts_id" integer + ); + + CREATE TABLE IF NOT EXISTS "pages_blocks_card_custom_cards" ( + "_order" integer NOT NULL, + "_parent_id" varchar NOT NULL, + "_locale" "_locales" NOT NULL, + "id" varchar PRIMARY KEY NOT NULL, + "card_icon" varchar, + "card_title" varchar NOT NULL, + "card_description" varchar, + "card_content" varchar NOT NULL, + "card_enable_link" boolean, + "card_link_type" "enum_pages_blocks_card_custom_cards_card_link_type" DEFAULT 'reference', + "card_link_new_tab" boolean, + "card_link_url" varchar, + "card_link_nav_trigger" "enum_pages_blocks_card_custom_cards_card_link_nav_trigger" DEFAULT 'card', + "card_link_label" varchar + ); + + CREATE TABLE IF NOT EXISTS "pages_blocks_card" ( + "_order" integer NOT NULL, + "_parent_id" integer NOT NULL, + "_path" text NOT NULL, + "_locale" "_locales" NOT NULL, + "id" varchar PRIMARY KEY NOT NULL, + "block_name" varchar + ); + + CREATE TABLE IF NOT EXISTS "pages_rels" ( + "id" serial PRIMARY KEY NOT NULL, + "order" integer, + "parent_id" integer NOT NULL, + "path" varchar NOT NULL, + "locale" "_locales", + "cards_id" integer, + "pages_id" integer, + "posts_id" integer + ); + + ALTER TABLE "payload_locked_documents_rels" ADD COLUMN "cards_id" integer; + DO $$ BEGIN + ALTER TABLE "cards" ADD CONSTRAINT "cards_tenant_id_tenants_id_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE set null ON UPDATE no action; + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + + DO $$ BEGIN + ALTER TABLE "cards_locales" ADD CONSTRAINT "cards_locales_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."cards"("id") ON DELETE cascade ON UPDATE no action; + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + + DO $$ BEGIN + ALTER TABLE "cards_rels" ADD CONSTRAINT "cards_rels_parent_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."cards"("id") ON DELETE cascade ON UPDATE no action; + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + + DO $$ BEGIN + ALTER TABLE "cards_rels" ADD CONSTRAINT "cards_rels_pages_fk" FOREIGN KEY ("pages_id") REFERENCES "public"."pages"("id") ON DELETE cascade ON UPDATE no action; + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + + DO $$ BEGIN + ALTER TABLE "cards_rels" ADD CONSTRAINT "cards_rels_posts_fk" FOREIGN KEY ("posts_id") REFERENCES "public"."posts"("id") ON DELETE cascade ON UPDATE no action; + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + + DO $$ BEGIN + ALTER TABLE "pages_blocks_card_custom_cards" ADD CONSTRAINT "pages_blocks_card_custom_cards_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."pages_blocks_card"("id") ON DELETE cascade ON UPDATE no action; + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + + DO $$ BEGIN + ALTER TABLE "pages_blocks_card" ADD CONSTRAINT "pages_blocks_card_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."pages"("id") ON DELETE cascade ON UPDATE no action; + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + + DO $$ BEGIN + ALTER TABLE "pages_rels" ADD CONSTRAINT "pages_rels_parent_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."pages"("id") ON DELETE cascade ON UPDATE no action; + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + + DO $$ BEGIN + ALTER TABLE "pages_rels" ADD CONSTRAINT "pages_rels_cards_fk" FOREIGN KEY ("cards_id") REFERENCES "public"."cards"("id") ON DELETE cascade ON UPDATE no action; + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + + DO $$ BEGIN + ALTER TABLE "pages_rels" ADD CONSTRAINT "pages_rels_pages_fk" FOREIGN KEY ("pages_id") REFERENCES "public"."pages"("id") ON DELETE cascade ON UPDATE no action; + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + + DO $$ BEGIN + ALTER TABLE "pages_rels" ADD CONSTRAINT "pages_rels_posts_fk" FOREIGN KEY ("posts_id") REFERENCES "public"."posts"("id") ON DELETE cascade ON UPDATE no action; + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + + CREATE INDEX IF NOT EXISTS "cards_tenant_idx" ON "cards" USING btree ("tenant_id"); + CREATE INDEX IF NOT EXISTS "cards_slug_idx" ON "cards" USING btree ("slug"); + CREATE INDEX IF NOT EXISTS "cards_updated_at_idx" ON "cards" USING btree ("updated_at"); + CREATE INDEX IF NOT EXISTS "cards_created_at_idx" ON "cards" USING btree ("created_at"); + CREATE UNIQUE INDEX IF NOT EXISTS "cards_locales_locale_parent_id_unique" ON "cards_locales" USING btree ("_locale","_parent_id"); + CREATE INDEX IF NOT EXISTS "cards_rels_order_idx" ON "cards_rels" USING btree ("order"); + CREATE INDEX IF NOT EXISTS "cards_rels_parent_idx" ON "cards_rels" USING btree ("parent_id"); + CREATE INDEX IF NOT EXISTS "cards_rels_path_idx" ON "cards_rels" USING btree ("path"); + CREATE INDEX IF NOT EXISTS "cards_rels_pages_id_idx" ON "cards_rels" USING btree ("pages_id"); + CREATE INDEX IF NOT EXISTS "cards_rels_posts_id_idx" ON "cards_rels" USING btree ("posts_id"); + CREATE INDEX IF NOT EXISTS "pages_blocks_card_custom_cards_order_idx" ON "pages_blocks_card_custom_cards" USING btree ("_order"); + CREATE INDEX IF NOT EXISTS "pages_blocks_card_custom_cards_parent_id_idx" ON "pages_blocks_card_custom_cards" USING btree ("_parent_id"); + CREATE INDEX IF NOT EXISTS "pages_blocks_card_custom_cards_locale_idx" ON "pages_blocks_card_custom_cards" USING btree ("_locale"); + CREATE INDEX IF NOT EXISTS "pages_blocks_card_order_idx" ON "pages_blocks_card" USING btree ("_order"); + CREATE INDEX IF NOT EXISTS "pages_blocks_card_parent_id_idx" ON "pages_blocks_card" USING btree ("_parent_id"); + CREATE INDEX IF NOT EXISTS "pages_blocks_card_path_idx" ON "pages_blocks_card" USING btree ("_path"); + CREATE INDEX IF NOT EXISTS "pages_blocks_card_locale_idx" ON "pages_blocks_card" USING btree ("_locale"); + CREATE INDEX IF NOT EXISTS "pages_rels_order_idx" ON "pages_rels" USING btree ("order"); + CREATE INDEX IF NOT EXISTS "pages_rels_parent_idx" ON "pages_rels" USING btree ("parent_id"); + CREATE INDEX IF NOT EXISTS "pages_rels_path_idx" ON "pages_rels" USING btree ("path"); + CREATE INDEX IF NOT EXISTS "pages_rels_locale_idx" ON "pages_rels" USING btree ("locale"); + CREATE INDEX IF NOT EXISTS "pages_rels_cards_id_idx" ON "pages_rels" USING btree ("cards_id","locale"); + CREATE INDEX IF NOT EXISTS "pages_rels_pages_id_idx" ON "pages_rels" USING btree ("pages_id","locale"); + CREATE INDEX IF NOT EXISTS "pages_rels_posts_id_idx" ON "pages_rels" USING btree ("posts_id","locale"); + DO $$ BEGIN + ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_cards_fk" FOREIGN KEY ("cards_id") REFERENCES "public"."cards"("id") ON DELETE cascade ON UPDATE no action; + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + + CREATE INDEX IF NOT EXISTS "payload_locked_documents_rels_cards_id_idx" ON "payload_locked_documents_rels" USING btree ("cards_id");`); +} + +export async function down({ + db, + payload, + req +}: MigrateDownArgs): Promise { + await db.execute(sql` + ALTER TABLE "cards" DISABLE ROW LEVEL SECURITY; + ALTER TABLE "cards_locales" DISABLE ROW LEVEL SECURITY; + ALTER TABLE "cards_rels" DISABLE ROW LEVEL SECURITY; + ALTER TABLE "pages_blocks_card_custom_cards" DISABLE ROW LEVEL SECURITY; + ALTER TABLE "pages_blocks_card" DISABLE ROW LEVEL SECURITY; + ALTER TABLE "pages_rels" DISABLE ROW LEVEL SECURITY; + DROP TABLE "cards" CASCADE; + DROP TABLE "cards_locales" CASCADE; + DROP TABLE "cards_rels" CASCADE; + DROP TABLE "pages_blocks_card_custom_cards" CASCADE; + DROP TABLE "pages_blocks_card" CASCADE; + DROP TABLE "pages_rels" CASCADE; + ALTER TABLE "payload_locked_documents_rels" DROP CONSTRAINT "payload_locked_documents_rels_cards_fk"; + + DROP INDEX IF EXISTS "payload_locked_documents_rels_cards_id_idx"; + ALTER TABLE "payload_locked_documents_rels" DROP COLUMN IF EXISTS "cards_id"; + DROP TYPE "public"."enum_cards_link_type"; + DROP TYPE "public"."enum_cards_link_nav_trigger"; + DROP TYPE "public"."enum_pages_blocks_card_custom_cards_card_link_type"; + DROP TYPE "public"."enum_pages_blocks_card_custom_cards_card_link_nav_trigger";`); +} diff --git a/apps/cms/src/migrations/index.ts b/apps/cms/src/migrations/index.ts index f57433b1b..0be7ba139 100644 --- a/apps/cms/src/migrations/index.ts +++ b/apps/cms/src/migrations/index.ts @@ -11,6 +11,7 @@ import * as migration_20250325_141317_cod_282 from './20250325_141317_cod_282'; import * as migration_20250326_200110_cod_282_2 from './20250326_200110_cod_282_2'; import * as migration_20250328_154057_cod_296 from './20250328_154057_cod_296'; import * as migration_20250401_213908_cod_256_301 from './20250401_213908_cod_256_301'; +import * as migration_20250409_125211_cod_257 from './20250409_125211_cod_257'; export const migrations = [ { @@ -77,5 +78,10 @@ export const migrations = [ up: migration_20250401_213908_cod_256_301.up, down: migration_20250401_213908_cod_256_301.down, name: '20250401_213908_cod_256_301' + }, + { + up: migration_20250409_125211_cod_257.up, + down: migration_20250409_125211_cod_257.down, + name: '20250409_125211_cod_257' } ]; diff --git a/apps/cms/src/payload.config.ts b/apps/cms/src/payload.config.ts index 2bbebd85b..92590b692 100644 --- a/apps/cms/src/payload.config.ts +++ b/apps/cms/src/payload.config.ts @@ -8,6 +8,7 @@ import sharp from 'sharp'; import { getEnv } from '@codeware/app-cms/feature/env-loader'; import { seed } from '@codeware/app-cms/feature/seed'; import { + cardBlock, codeBlock, contentBlock, formBlock, @@ -17,6 +18,7 @@ import { defaultLexical } from '@codeware/app-cms/ui/fields'; import { getEmailAdapter } from '@codeware/app-cms/util/email'; import { getPlugins } from '@codeware/app-cms/util/plugins'; +import cards from './collections/cards/cards.collection'; import categories from './collections/categories/categories.collection'; import media from './collections/media/media.collection'; import navigation from './collections/navigation/navigation.collection'; @@ -46,8 +48,9 @@ export default buildConfig({ }, // Declare blocks globally and reference then by slug elsewhere // https://payloadcms.com/docs/fields/blocks#block-references - blocks: [codeBlock, contentBlock, formBlock, mediaBlock], + blocks: [cardBlock, codeBlock, contentBlock, formBlock, mediaBlock], collections: [ + cards, categories, media, navigation, diff --git a/apps/web/app/components/error-boundary.tsx b/apps/web/app/components/error-boundary.tsx index fd7d3ed41..30d6cd0b2 100644 --- a/apps/web/app/components/error-boundary.tsx +++ b/apps/web/app/components/error-boundary.tsx @@ -1,4 +1,4 @@ -import { Separator } from '@codeware/shared/ui/shadcn'; +import { Separator } from '@codeware/shared/ui/shadcn/components/separator'; import { type ErrorResponse, isRouteErrorResponse, diff --git a/apps/web/app/components/error-container.tsx b/apps/web/app/components/error-container.tsx index ec334a518..c8cd42861 100644 --- a/apps/web/app/components/error-container.tsx +++ b/apps/web/app/components/error-container.tsx @@ -2,7 +2,7 @@ import { Alert, AlertDescription, AlertTitle -} from '@codeware/shared/ui/shadcn'; +} from '@codeware/shared/ui/shadcn/components/alert'; import { InfoIcon, LucideAlertTriangle } from 'lucide-react'; import { Container } from './container'; @@ -39,17 +39,15 @@ const RenderAlert: React.FC = ({ return (
- {severity === 'error' && ( - - )} - {severity === 'info' && } + {severity === 'error' && } + {severity === 'info' && } {title} - {children} +
{children}
{stackTrace && ( -

+

{stackTrace} -

+
)}
diff --git a/apps/web/app/root.tsx b/apps/web/app/root.tsx index 519a65f36..65d8e7bbb 100644 --- a/apps/web/app/root.tsx +++ b/apps/web/app/root.tsx @@ -21,6 +21,7 @@ import { Outlet, Scripts, ScrollRestoration, + json, useLoaderData, useNavigate } from '@remix-run/react'; @@ -86,7 +87,7 @@ export async function loader({ context, request }: LoaderFunctionArgs) { 'Unable to load application content. Please try again later.'; } - return { + return json({ env, loaderErrorMessage, navigationTree, @@ -98,7 +99,7 @@ export async function loader({ context, request }: LoaderFunctionArgs) { } }, siteSettings - }; + }); } catch (error) { console.error('Failed to load root data:\n', error); // Delegate to error boundary @@ -143,15 +144,20 @@ export default function App() { // Provide app opinionated context to Payload components const context: PayloadValue = { - navigate: (path: string) => { - if (path.match(/^https?:\/\//)) { - console.warn( - 'Payload navigation to external URL is not supported:', - path - ); - } else { - navigate(path); + navigate: (path, newTab) => { + const isExternal = path.startsWith('http'); + // Open new tab + if (newTab) { + window.open(path, '_blank'); + return; } + // Native redirect external links + if (isExternal) { + window.location.href = path; + return; + } + // Invoke router event for internal links + navigate(path); }, payloadUrl: loaderData.env.PAYLOAD_URL, submitForm: async (formData) => { diff --git a/apps/web/app/routes/_index.tsx b/apps/web/app/routes/_index.tsx index 42c5e74c4..4b26518dd 100644 --- a/apps/web/app/routes/_index.tsx +++ b/apps/web/app/routes/_index.tsx @@ -50,7 +50,7 @@ export function ErrorBoundary() { return ( - The page you're looking for could not be rendered. + The landing page could not be rendered. ); } diff --git a/apps/web/app/tailwind.css b/apps/web/app/tailwind.css index 172142da5..0432ac044 100644 --- a/apps/web/app/tailwind.css +++ b/apps/web/app/tailwind.css @@ -1,5 +1,4 @@ @import 'tailwindcss'; -@plugin 'tailwindcss-animate'; @plugin "@tailwindcss/typography"; @config '../tailwind-typography.cjs'; @@ -22,11 +21,12 @@ --border: var(--color-zinc-100); --ring: var(--color-zinc-900); --card: var(--color-zinc-50); - --card-foreground: var(--color-zinc-900); + --card-foreground: var(--color-zinc-600); --input: var(--color-zinc-100); --popover: var(--color-zinc-50); --popover-foreground: var(--color-zinc-900); --radius: 0.5rem; + --link: var(--color-teal-500); } .dark { @@ -44,12 +44,13 @@ --destructive-foreground: var(--color-zinc-100); --border: theme('colors.zinc.700/0.4'); --ring: var(--color-zinc-700); - --card: var(--color-zinc-800); - --card-foreground: var(--color-zinc-100); + --card: theme('colors.zinc.800/0.5'); + --card-foreground: var(--color-zinc-400); --input: theme('colors.zinc.700/0.4'); --popover: var(--color-zinc-800); --popover-foreground: var(--color-zinc-100); --radius: 0.5rem; + --link: var(--color-teal-400); } @theme inline { @@ -72,6 +73,7 @@ --color-input: var(--input); --color-popover: var(--popover); --color-popover-foreground: var(--popover-foreground); + --color-link: var(--link); } @layer base { diff --git a/libs/app-cms/ui/blocks/src/index.ts b/libs/app-cms/ui/blocks/src/index.ts index cd8a856dc..771f89990 100644 --- a/libs/app-cms/ui/blocks/src/index.ts +++ b/libs/app-cms/ui/blocks/src/index.ts @@ -1,3 +1,4 @@ +export { cardBlock } from './lib/card/card.block'; export { codeBlock } from './lib/code/code.block'; export { contentBlock } from './lib/content/content.block'; export { formBlock } from './lib/form/form.block'; diff --git a/libs/app-cms/ui/blocks/src/lib/card/card.block.ts b/libs/app-cms/ui/blocks/src/lib/card/card.block.ts new file mode 100644 index 000000000..a4ffc066c --- /dev/null +++ b/libs/app-cms/ui/blocks/src/lib/card/card.block.ts @@ -0,0 +1,59 @@ +import { cardGroupField } from '@codeware/app-cms/ui/fields'; +import type { Block } from 'payload'; + +/** + * Card block that make it possible to select from a list of collection cards, + * or to create custom cards for the document implementing this block. + */ +export const cardBlock: Block = { + slug: 'card', + interfaceName: 'CardBlock', + fields: [ + { + name: 'collectionCards', + type: 'relationship', + relationTo: 'cards', + hasMany: true, + label: { + en: 'Reusable cards', + sv: 'Återanvändbara kort' + }, + admin: { + description: { + en: 'Select the reusable cards to be displayed', + sv: 'Välj vilka återanvändbara kort som ska visas' + } + } + }, + { + name: 'customCards', + type: 'array', + label: { + en: 'Custom cards', + sv: 'Valfria kort' + }, + labels: { + singular: { + en: 'Card', + sv: 'Kort' + }, + plural: { + en: 'Cards', + sv: 'Kort' + } + }, + fields: [cardGroupField], + admin: { + description: { + en: 'Complement with custom cards', + sv: 'Komplettera med valfria kort' + }, + components: { + RowLabel: + '@codeware/app-cms/ui/fields/card-group/CardGroupArrayRowLabel.client' + }, + initCollapsed: true + } + } + ] +}; diff --git a/libs/app-cms/ui/blocks/src/lib/content/content.block.ts b/libs/app-cms/ui/blocks/src/lib/content/content.block.ts index 3af9a45fc..35abbc5c8 100644 --- a/libs/app-cms/ui/blocks/src/lib/content/content.block.ts +++ b/libs/app-cms/ui/blocks/src/lib/content/content.block.ts @@ -49,7 +49,7 @@ export const contentBlock: Block = { features: ({ rootFeatures }) => { return [ ...rootFeatures, - BlocksFeature({ blocks: ['code', 'form', 'media'] }), + BlocksFeature({ blocks: ['card', 'code', 'form', 'media'] }), HeadingFeature({ enabledHeadingSizes: ['h2', 'h3', 'h4', 'h5'] }) diff --git a/libs/app-cms/ui/fields/src/index.ts b/libs/app-cms/ui/fields/src/index.ts index 80fc9b4a2..706ae8c21 100644 --- a/libs/app-cms/ui/fields/src/index.ts +++ b/libs/app-cms/ui/fields/src/index.ts @@ -1,3 +1,6 @@ export { defaultLexical } from './lib/default-lexical'; +export { cardGroupField } from './lib/card-group/card-group.field'; export { codeField } from './lib/code/code.field'; +export { iconPickerField } from './lib/icon-picker/icon-picker.field'; +export { linkGroupField } from './lib/link-group/link-group.field'; export { slugField } from './lib/slug/slug.field'; diff --git a/libs/app-cms/ui/fields/src/lib/card-group/CardGroupArrayRowLabel.client.tsx b/libs/app-cms/ui/fields/src/lib/card-group/CardGroupArrayRowLabel.client.tsx new file mode 100644 index 000000000..e66b26cab --- /dev/null +++ b/libs/app-cms/ui/fields/src/lib/card-group/CardGroupArrayRowLabel.client.tsx @@ -0,0 +1,24 @@ +'use client'; + +import type { CardGroup } from '@codeware/shared/util/payload-types'; +import { type RowLabelProps, useRowLabel } from '@payloadcms/ui'; + +import { cardGroupFieldName } from './card-group.field'; + +/** + * Custom array row label for any array field that contains CardGroup fields. + * + * Displays the card title instead of the default row number. + */ +export const CardGroupArrayRowLabel: React.FC = () => { + // The cards group fields have a parent group type that is not included in `CardGroup` + // so we need to use a record to access the card data + const { data, rowNumber } = useRowLabel>(); + + const { title } = data[cardGroupFieldName] ?? {}; + + // TODO: Language support + return title ?? `Card ${String(rowNumber).padStart(2, '0')}`; +}; + +export default CardGroupArrayRowLabel; diff --git a/libs/app-cms/ui/fields/src/lib/card-group/card-group.field.ts b/libs/app-cms/ui/fields/src/lib/card-group/card-group.field.ts new file mode 100644 index 000000000..a7a20a8dd --- /dev/null +++ b/libs/app-cms/ui/fields/src/lib/card-group/card-group.field.ts @@ -0,0 +1,158 @@ +import type { + CardGroup, + CardGroupLink +} from '@codeware/shared/util/payload-types'; +import type { Condition, GroupField, TypeWithID } from 'payload'; + +import { iconPickerField } from '../icon-picker/icon-picker.field'; +import { linkGroupField } from '../link-group/link-group.field'; + +const link = linkGroupField({ + disableLabel: true +}); + +const isLinkEnabled: Condition = (_, siblingData) => + siblingData?.enableLink === true; + +const isNavTrigger = + ( + trigger: CardGroupLink['navTrigger'] + ): Condition => + (_, siblingData) => + siblingData?.navTrigger === trigger; + +export const cardGroupFieldName = 'card'; + +/** + * Card group field that defines the card fields. + * + * It can be used as a group field or just the fields of the group. + */ +export const cardGroupField: GroupField = { + name: cardGroupFieldName, + type: 'group', + interfaceName: 'CardGroup', + label: false, + admin: { + hideGutter: true + }, + fields: [ + { + ...iconPickerField, + label: false, + admin: { + ...(iconPickerField.admin ?? {}), + description: { + en: 'Select an icon that represent the card', + sv: 'Välj en ikon som representerar kortet' + }, + disableListColumn: true, + disableListFilter: true + } + }, + { + name: 'title', + type: 'text', + label: { + en: 'Title', + sv: 'Titel' + }, + localized: true, + required: true + }, + { + name: 'description', + type: 'text', + label: { + en: 'Description', + sv: 'Beskrivning' + }, + admin: { + description: { + en: 'A text that will complement the title', + sv: 'En text som ska komplettera titeln' + } + }, + localized: true + }, + { + name: 'content', + type: 'textarea', + label: { + en: 'Main content', + sv: 'Huvudinnehåll' + }, + localized: true, + required: true + }, + { + name: 'enableLink', + type: 'checkbox', + label: { + en: 'Card link', + sv: 'Länk på kortet' + }, + admin: { + description: { + en: 'Let the card link to a page or external URL', + sv: 'Låt kortet länka till en sida eller en extern URL' + } + } + }, + { + ...link, + interfaceName: 'CardGroupLink', + label: false, + admin: { + ...link.admin, + condition: isLinkEnabled, + disableListColumn: true, + disableListFilter: true + }, + fields: [ + ...link.fields, + { + name: 'navTrigger', + type: 'radio', + label: { + en: 'Navigation trigger', + sv: 'Navigering aktiveras' + }, + admin: { + layout: 'horizontal' + }, + options: [ + { + label: { + en: 'Click on card', + sv: 'Klicka på kortet' + }, + value: 'card' + }, + { + label: { + en: 'Click on link', + sv: 'Klicka på en länk' + }, + value: 'link' + } + ], + defaultValue: 'card' + }, + { + name: 'label', + type: 'text', + label: { + en: 'Link label', + sv: 'Länk text' + }, + admin: { + condition: isNavTrigger('link') + }, + localized: true, + required: true + } + ] + } + ] +}; diff --git a/libs/app-cms/ui/fields/src/lib/icon-picker/IconPickerField.client.tsx b/libs/app-cms/ui/fields/src/lib/icon-picker/IconPickerField.client.tsx new file mode 100644 index 000000000..ac894f75e --- /dev/null +++ b/libs/app-cms/ui/fields/src/lib/icon-picker/IconPickerField.client.tsx @@ -0,0 +1,34 @@ +'use client'; + +import { + type HeroIcon, + IconPicker +} from '@codeware/shared/ui/react-components'; +import { FieldDescription, FieldLabel, useField } from '@payloadcms/ui'; +import type { TextFieldClientComponent } from 'payload'; + +/** + * Icon picker field component for client-side rendering. + * + * Displays a picker field with options for all available heroicons. + * The selected icon is displayed next to the picker field. + */ +export const IconPickerField: TextFieldClientComponent = ({ path, field }) => { + const { setValue, value } = useField({ path }); + + return ( +
+ + setValue(icon)} /> + {field.admin?.description && ( + + )} +
+ ); +}; + +export default IconPickerField; diff --git a/libs/app-cms/ui/fields/src/lib/icon-picker/icon-picker.field.ts b/libs/app-cms/ui/fields/src/lib/icon-picker/icon-picker.field.ts new file mode 100644 index 000000000..f85f28496 --- /dev/null +++ b/libs/app-cms/ui/fields/src/lib/icon-picker/icon-picker.field.ts @@ -0,0 +1,17 @@ +import type { TextField } from 'payload'; + +/** + * Icon picker field configuration for Payload CMS. + * + * This field allows users to select an icon from a list of available heroicons. + * The selected icon is displayed next to the picker field. + */ +export const iconPickerField: TextField = { + name: 'icon', + type: 'text', + admin: { + components: { + Field: '@codeware/app-cms/ui/fields/icon-picker/IconPickerField.client' + } + } +}; diff --git a/libs/app-cms/ui/fields/src/lib/link-group/link-group.field.ts b/libs/app-cms/ui/fields/src/lib/link-group/link-group.field.ts new file mode 100644 index 000000000..a53f77ced --- /dev/null +++ b/libs/app-cms/ui/fields/src/lib/link-group/link-group.field.ts @@ -0,0 +1,130 @@ +import type { Field, GroupField } from 'payload'; + +type LinkType = (options?: { + disableLabel?: boolean; + overrides?: Partial; +}) => GroupField; + +/** + * Link group field that can be used to link to a document or a custom URL. + * + * @param options - Options for the link field + */ +export const linkGroupField: LinkType = ({ disableLabel = false } = {}) => { + const linkResult: GroupField = { + name: 'link', + type: 'group', + admin: { + hideGutter: true + }, + fields: [ + { + type: 'row', + fields: [ + { + name: 'type', + type: 'radio', + admin: { + layout: 'horizontal', + width: '50%' + }, + defaultValue: 'reference', + options: [ + { + label: { + en: 'Internal link', + sv: 'Intern länk' + }, + value: 'reference' + }, + { + label: { + en: 'Custom URL', + sv: 'Anpassad URL' + }, + value: 'custom' + } + ] + }, + { + name: 'newTab', + type: 'checkbox', + admin: { + style: { + alignSelf: 'flex-end' + }, + width: '50%' + }, + label: { + en: 'Open in new tab', + sv: 'Öppna i ny flik' + } + } + ] + } + ] + }; + + const linkTypes: Field[] = [ + { + name: 'reference', + type: 'relationship', + admin: { + condition: (_, siblingData) => siblingData?.type === 'reference' + }, + label: { + en: 'Document to link to', + sv: 'Dokument att länka till' + }, + relationTo: ['pages', 'posts'], + required: true + }, + { + name: 'url', + type: 'text', + admin: { + description: { + en: 'Add protocol (http:// or https://) if the link is external', + sv: 'Lägg till protokoll (http:// eller https://) om länken är extern' + }, + condition: (_, siblingData) => siblingData?.type === 'custom' + }, + label: { + en: 'Custom URL', + sv: 'Anpassad URL' + }, + required: true + } + ]; + + if (disableLabel) { + linkResult.fields = [...linkResult.fields, ...linkTypes]; + return linkResult; + } + + linkTypes.map((linkType) => ({ + ...linkType, + admin: { + ...linkType.admin, + width: '50%' + } + })); + + linkResult.fields.push({ + type: 'row', + fields: [ + ...linkTypes, + { + name: 'label', + type: 'text', + admin: { + width: '50%' + }, + label: 'Label', + required: true + } + ] + }); + + return linkResult; +}; diff --git a/libs/app-cms/util/plugins/src/lib/plugins/get-multi-tenant-plugin.ts b/libs/app-cms/util/plugins/src/lib/plugins/get-multi-tenant-plugin.ts index 447facb5a..2cf27f6cb 100644 --- a/libs/app-cms/util/plugins/src/lib/plugins/get-multi-tenant-plugin.ts +++ b/libs/app-cms/util/plugins/src/lib/plugins/get-multi-tenant-plugin.ts @@ -12,6 +12,7 @@ export const getMultiTenantPlugin = () => name: 'tenant' }, collections: { + cards: {}, categories: {}, forms: {}, 'form-submissions': {}, diff --git a/libs/shared/ui/payload-components/src/lib/RenderBlocks.tsx b/libs/shared/ui/payload-components/src/lib/RenderBlocks.tsx index c37d5baba..4b359c755 100644 --- a/libs/shared/ui/payload-components/src/lib/RenderBlocks.tsx +++ b/libs/shared/ui/payload-components/src/lib/RenderBlocks.tsx @@ -2,6 +2,7 @@ import type { BlockSlug, Page } from '@codeware/shared/util/payload-types'; import React, { Fragment } from 'react'; // import { CallToActionBlock } from '@/blocks/CallToAction/Component' +import { CardBlock } from './blocks/CardBlock'; import { CodeBlock } from './blocks/CodeBlock'; import { ContentBlock } from './blocks/ContentBlock'; import { FormBlock } from './blocks/FormBlock'; @@ -12,6 +13,7 @@ const blocksMap: Record< // eslint-disable-next-line @typescript-eslint/no-explicit-any React.JSXElementConstructor > = { + card: CardBlock, code: CodeBlock, content: ContentBlock, form: FormBlock, @@ -36,7 +38,7 @@ export const RenderBlocks: React.FC = ({ blocks }) => { if (Block) { return ( -
+
); diff --git a/libs/shared/ui/payload-components/src/lib/blocks/CardBlock.tsx b/libs/shared/ui/payload-components/src/lib/blocks/CardBlock.tsx new file mode 100644 index 000000000..eb7b8ba11 --- /dev/null +++ b/libs/shared/ui/payload-components/src/lib/blocks/CardBlock.tsx @@ -0,0 +1,133 @@ +import { HeroIcon, IconRenderer } from '@codeware/shared/ui/react-components'; +import { Button } from '@codeware/shared/ui/shadcn/components/button'; +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle +} from '@codeware/shared/ui/shadcn/components/card'; +import type { + CardBlock as CardBlockProps, + CardGroup +} from '@codeware/shared/util/payload-types'; +import { cn } from '@codeware/shared/util/ui'; +import { ExternalLinkIcon, LinkIcon } from 'lucide-react'; + +import { useColumnSize } from '../providers/ColumnSizeProvider'; +import { usePayload } from '../providers/PayloadProvider'; +import { extractLink } from '../utils/extract-link'; + +type Props = CardBlockProps; + +/** + * Render Payload card block cards in a responsive grid. + * Features subtle hover effects and modern styling. + */ +export const CardBlock: React.FC = ({ + collectionCards, + customCards +}) => { + const { navigate } = usePayload(); + const { effectiveFraction = 1 } = useColumnSize({ silent: true }) ?? {}; + + const cards = + collectionCards?.reduce((acc, card) => { + if (typeof card === 'object') { + acc.push(card); + } + return acc; + }, [] as Array) ?? []; + + if (customCards) { + cards.push(...customCards.map((c) => c.card)); + } + + if (cards.length === 0) { + return null; + } + + // Number of columns should not exceed the number of cards + // or be more than will fit in the container + const maxColumns = Math.min( + cards.length, + effectiveFraction < 0.5 ? 1 : effectiveFraction < 0.75 ? 2 : 3 + ); + + return ( +
1 }, + { 'lg:grid-cols-3 lg:gap-8': maxColumns === 3 } + )} + > + {cards.map((card, index) => { + const { title, description, content, enableLink, link, icon } = card; + + const hasHeader = title || description || icon; + const linkDetails = enableLink ? extractLink(link) : null; + + return ( + + linkDetails && + linkDetails.navTrigger === 'card' && + navigate(linkDetails.url, linkDetails.newTab) + } + className={cn( + 'text-card-foreground group bg-card/50 hover:bg-card overflow-hidden rounded-lg border transition-all duration-300 ease-in-out', + { + 'cursor-pointer': + linkDetails && linkDetails.navTrigger === 'card' + } + )} + > + {hasHeader && ( + + {icon && ( +
+ +
+ )} + {title && ( + + {title} + + )} + {description && ( + + {description} + + )} +
+ )} + + {content} + + {/* Add the link to card footer */} + {linkDetails && linkDetails.navTrigger === 'link' && ( + + + + )} +
+ ); + })} +
+ ); +}; diff --git a/libs/shared/ui/payload-components/src/lib/blocks/ContentBlock.tsx b/libs/shared/ui/payload-components/src/lib/blocks/ContentBlock.tsx index 7f78ccf12..599025d69 100644 --- a/libs/shared/ui/payload-components/src/lib/blocks/ContentBlock.tsx +++ b/libs/shared/ui/payload-components/src/lib/blocks/ContentBlock.tsx @@ -2,6 +2,8 @@ import type { ContentBlock as ContentBlockProps } from '@codeware/shared/util/pa import { cn } from '@codeware/shared/util/ui'; import React from 'react'; +import { ColumnSizeProvider } from '../providers/ColumnSizeProvider'; + import { RichText } from './RichText'; type Props = ContentBlockProps; @@ -21,16 +23,18 @@ export const ContentBlock: React.FC = ({ columns }) => { const size = col.size ?? 'full'; return ( -
- {richText && } -
+ +
+ {richText && } +
+
); })}
diff --git a/libs/shared/ui/payload-components/src/lib/blocks/FormBlock.tsx b/libs/shared/ui/payload-components/src/lib/blocks/FormBlock.tsx index e2444def3..d243352ef 100644 --- a/libs/shared/ui/payload-components/src/lib/blocks/FormBlock.tsx +++ b/libs/shared/ui/payload-components/src/lib/blocks/FormBlock.tsx @@ -3,12 +3,14 @@ import { DialogContent, DialogDescription, DialogHeader, - DialogTitle, + DialogTitle +} from '@codeware/shared/ui/shadcn/components/dialog'; +import { Form, FormField, FormItem, FormMessage -} from '@codeware/shared/ui/shadcn'; +} from '@codeware/shared/ui/shadcn/components/form'; import type { FormBlock as FormBlockProps, FormSubmissionData, @@ -184,7 +186,7 @@ export const FormBlock: React.FC = ({
{/* Grid columns must be in sync with forms plugin, width field */} diff --git a/libs/shared/ui/payload-components/src/lib/blocks/RichText.tsx b/libs/shared/ui/payload-components/src/lib/blocks/RichText.tsx index e493af819..420471f27 100644 --- a/libs/shared/ui/payload-components/src/lib/blocks/RichText.tsx +++ b/libs/shared/ui/payload-components/src/lib/blocks/RichText.tsx @@ -1,4 +1,5 @@ import type { + CardBlock as CardBlockProps, CodeBlock as CodeBlockProps, FormBlock as FormBlockProps, MediaBlock as MediaBlockProps @@ -14,13 +15,16 @@ import { RichText as RichTextWithoutBlocks } from '@payloadcms/richtext-lexical/react'; +import { CardBlock } from './CardBlock'; import { CodeBlock } from './CodeBlock'; import { FormBlock } from './FormBlock'; import { MediaBlock } from './MediaBlock'; type NodeTypes = | DefaultNodeTypes - | SerializedBlockNode; + | SerializedBlockNode< + CardBlockProps | CodeBlockProps | FormBlockProps | MediaBlockProps + >; /** * Converts custom Payload blocks from Lexical to React JSX components. @@ -32,6 +36,7 @@ const jsxConverters: JSXConvertersFunction = ({ }) => ({ ...defaultConverters, blocks: { + card: ({ node }) => , code: ({ node }) => , form: ({ node }) => , media: ({ node }) => diff --git a/libs/shared/ui/payload-components/src/lib/form-items/Button.tsx b/libs/shared/ui/payload-components/src/lib/form-items/Button.tsx index 706d2753a..aff77379f 100644 --- a/libs/shared/ui/payload-components/src/lib/form-items/Button.tsx +++ b/libs/shared/ui/payload-components/src/lib/form-items/Button.tsx @@ -1,4 +1,4 @@ -import { Button as BaseButton } from '@codeware/shared/ui/shadcn'; +import { Button as BaseButton } from '@codeware/shared/ui/shadcn/components/button'; import { Loader2 } from 'lucide-react'; type Props = React.ComponentProps & { diff --git a/libs/shared/ui/payload-components/src/lib/form-items/Checkbox.tsx b/libs/shared/ui/payload-components/src/lib/form-items/Checkbox.tsx index 191545acf..8dad8b397 100644 --- a/libs/shared/ui/payload-components/src/lib/form-items/Checkbox.tsx +++ b/libs/shared/ui/payload-components/src/lib/form-items/Checkbox.tsx @@ -1,8 +1,8 @@ +import { Checkbox as BaseCheckbox } from '@codeware/shared/ui/shadcn/components/checkbox'; import { - Checkbox as BaseCheckbox, FormControl, FormLabel -} from '@codeware/shared/ui/shadcn'; +} from '@codeware/shared/ui/shadcn/components/form'; import type { FormFieldForBlockType } from '@codeware/shared/util/payload-types'; import type { ControllerRenderProps, FieldValues } from 'react-hook-form'; diff --git a/libs/shared/ui/payload-components/src/lib/form-items/Input.tsx b/libs/shared/ui/payload-components/src/lib/form-items/Input.tsx index b175e8b12..d34d31804 100644 --- a/libs/shared/ui/payload-components/src/lib/form-items/Input.tsx +++ b/libs/shared/ui/payload-components/src/lib/form-items/Input.tsx @@ -1,8 +1,8 @@ import { - Input as BaseInput, FormControl, FormLabel -} from '@codeware/shared/ui/shadcn'; +} from '@codeware/shared/ui/shadcn/components/form'; +import { Input as BaseInput } from '@codeware/shared/ui/shadcn/components/input'; import type { HTMLInputTypeAttribute } from 'react'; import type { ControllerRenderProps, FieldValues } from 'react-hook-form'; diff --git a/libs/shared/ui/payload-components/src/lib/form-items/Select.tsx b/libs/shared/ui/payload-components/src/lib/form-items/Select.tsx index 8c2a1a173..7fd959621 100644 --- a/libs/shared/ui/payload-components/src/lib/form-items/Select.tsx +++ b/libs/shared/ui/payload-components/src/lib/form-items/Select.tsx @@ -1,12 +1,14 @@ import { - Select as BaseSelect, FormControl, - FormLabel, + FormLabel +} from '@codeware/shared/ui/shadcn/components/form'; +import { + Select as BaseSelect, SelectContent, SelectItem, SelectTrigger, SelectValue -} from '@codeware/shared/ui/shadcn'; +} from '@codeware/shared/ui/shadcn/components/select'; import type { ControllerRenderProps, FieldValues } from 'react-hook-form'; type Option = { diff --git a/libs/shared/ui/payload-components/src/lib/form-items/Textarea.tsx b/libs/shared/ui/payload-components/src/lib/form-items/Textarea.tsx index 1fc929f5e..d406f9449 100644 --- a/libs/shared/ui/payload-components/src/lib/form-items/Textarea.tsx +++ b/libs/shared/ui/payload-components/src/lib/form-items/Textarea.tsx @@ -1,8 +1,8 @@ import { - Textarea as BaseTextarea, FormControl, FormLabel -} from '@codeware/shared/ui/shadcn'; +} from '@codeware/shared/ui/shadcn/components/form'; +import { Textarea as BaseTextarea } from '@codeware/shared/ui/shadcn/components/textarea'; import type { FormFieldForBlockType } from '@codeware/shared/util/payload-types'; import type { ControllerRenderProps, FieldValues } from 'react-hook-form'; diff --git a/libs/shared/ui/payload-components/src/lib/providers/ColumnSizeProvider.tsx b/libs/shared/ui/payload-components/src/lib/providers/ColumnSizeProvider.tsx new file mode 100644 index 000000000..3d8f65443 --- /dev/null +++ b/libs/shared/ui/payload-components/src/lib/providers/ColumnSizeProvider.tsx @@ -0,0 +1,121 @@ +/* eslint-disable no-redeclare */ +import { ContentBlockSize } from '@codeware/shared/util/payload-types'; +import { type ReactNode, createContext, useContext, useMemo } from 'react'; + +type ColumnSizeContextValue = { + /** The fraction of the current column related to the whole page */ + effectiveFraction: number; + /** Whether the current column is nested within another column */ + isNested: boolean; + /** The size of the parent column */ + parentSize?: ContentBlockSize; + /** The fraction of the parent column, calculated from `parentSize` */ + parentFraction?: number; + /** The size of the current column */ + selfSize: ContentBlockSize; + /** The fraction of the current column, calculated from `selfSize` */ + selfFraction: number; +}; + +type ColumnSizeProviderProps = { + children: ReactNode; + /** The size of the current column */ + size: ContentBlockSize; +}; + +// Helper function to convert size strings to numeric fractions +const convertSizeToFraction = (size: ContentBlockSize) => { + switch (size) { + case 'full': + return 1; + case 'half': + return 0.5; + case 'one-third': + return 1 / 3; + case 'two-thirds': + return 2 / 3; + default: + return 1; + } +}; + +// Create a context +const ColumnSizeContext = createContext(null); + +/** + * This provider is used to pass the size of the current column to the children. + * + * Supports nested columns to keep track of the effective size of the current column, + * related to all parent columns. + * + * The `useColumnSize` hook provides access to the nearest and parent column sizes and calculated fractions. + * + * @param size - The size of the current column + * @param children - The child elements to render + */ +export const ColumnSizeProvider = ({ + size, + children +}: ColumnSizeProviderProps) => { + // Get the parent context if it exists + const parentContext = useContext(ColumnSizeContext); + + // Calculate the effective values + const value = useMemo(() => { + const selfFraction = convertSizeToFraction(size); + + // If no parent context, this is a root column + if (!parentContext) { + return { + isNested: false, + effectiveFraction: selfFraction, + selfSize: size, + selfFraction + }; + } + + // Handle nested columns + return { + isNested: true, + effectiveFraction: parentContext.effectiveFraction * selfFraction, + selfSize: size, + selfFraction, + parentSize: parentContext.selfSize, + parentFraction: parentContext.selfFraction + }; + }, [size, parentContext]); + + // Provide the context value to the children + return ( + + {children} + + ); +}; + +/** + * This hook provides access to column sizes and calculated fractions + * for the component that is nested within a `ColumnSizeProvider`. + * + * @param silent - Whether to not throw an error if the context is not found (default: `false`) + * @returns The column size context value or `null` if `silent` is `true` and the context is not found + */ +export function useColumnSize(): ColumnSizeContextValue; +export function useColumnSize(options?: { + silent: false; +}): ColumnSizeContextValue; +export function useColumnSize(options: { + silent: true; +}): ColumnSizeContextValue | null; +export function useColumnSize(options?: { + silent?: boolean; +}): ColumnSizeContextValue | null { + const context = useContext(ColumnSizeContext); + const silent = options?.silent ?? false; + + if (context === null && silent === false) { + throw new Error('useColumnSize must be used within a ColumnSizeProvider'); + } + + return context; +} diff --git a/libs/shared/ui/payload-components/src/lib/providers/PayloadProvider.tsx b/libs/shared/ui/payload-components/src/lib/providers/PayloadProvider.tsx index 0aa120563..dd83d49dd 100644 --- a/libs/shared/ui/payload-components/src/lib/providers/PayloadProvider.tsx +++ b/libs/shared/ui/payload-components/src/lib/providers/PayloadProvider.tsx @@ -1,4 +1,4 @@ -import { Toaster } from '@codeware/shared/ui/shadcn'; +import { Toaster } from '@codeware/shared/ui/shadcn/components/sonner'; import type { FormSubmission } from '@codeware/shared/util/payload-types'; import { type ReactNode, createContext, use } from 'react'; @@ -26,11 +26,12 @@ export type FormSubmitResponse = export type PayloadValue = { /** * Provide a navigate function based on your framework. - * It's used to navigate to a new path. + * It's used to navigate to a new path or URL. * * @param path - The path to navigate to. + * @param newTab - Whether to open the link in a new tab. */ - navigate: (path: string) => void; + navigate: (path: string, newTab?: boolean) => void; /** * Provide the fully qualified URL to the Payload app host. diff --git a/libs/shared/ui/payload-components/src/lib/utils/extract-link.ts b/libs/shared/ui/payload-components/src/lib/utils/extract-link.ts new file mode 100644 index 000000000..b154e9f20 --- /dev/null +++ b/libs/shared/ui/payload-components/src/lib/utils/extract-link.ts @@ -0,0 +1,85 @@ +import type { CardGroupLink } from '@codeware/shared/util/payload-types'; + +/** + * Extract link details from a Link field object. + * + * It can be useful in a component that should render a link. + * + * @param link - The Link field object to extract data from. + * @returns Link details or `null` if link is not active. + */ +export const extractLink = ( + link?: CardGroupLink +): + | { + label: string; + navTrigger: Extract; + newTab: boolean; + url: string; + } + | { + navTrigger: Extract; + newTab: boolean; + url: string; + } + | null => { + if (!link) { + return null; + } + + const { label, navTrigger, newTab, reference, type: linkType, url } = link; + + // Type safe properties to have the expected types for a valid link + if (typeof navTrigger !== 'string' || typeof linkType !== 'string') { + return null; + } + + // By design a value will be applied before returning the extracted link + let linkUrl = ''; + + switch (linkType) { + case 'reference': + { + // Type safe value as collection object is expected to have a slug + if (typeof reference?.value !== 'object' || !reference.value.slug) { + console.error('Invalid reference link, expected a slug', reference); + return null; + } + const { + relationTo, + value: { slug } + } = reference; + + linkUrl = relationTo === 'pages' ? slug : `${relationTo}/${slug}`; + } + break; + case 'custom': + if (!url) { + console.error('Invalid custom link, expected a URL'); + return null; + } + linkUrl = url; + break; + default: + throw new Error(`Invalid link type: ${linkType}`); + } + + if (!linkUrl) { + console.error('Invalid link, expected a URL'); + return null; + } + + return navTrigger === 'card' + ? { + navTrigger, + newTab: newTab ?? false, + url: linkUrl + } + : { + // Label is required for link trigger + label: String(label), + navTrigger, + newTab: newTab ?? false, + url: linkUrl + }; +}; diff --git a/libs/shared/ui/react-components/src/index.ts b/libs/shared/ui/react-components/src/index.ts index 60043ff5a..d3879060c 100644 --- a/libs/shared/ui/react-components/src/index.ts +++ b/libs/shared/ui/react-components/src/index.ts @@ -3,3 +3,8 @@ export * from './lib/Code'; export * from './lib/CopyButton'; export * from './lib/Image'; export * from './lib/Video'; + +export * from './lib/icon/hero-icons'; +export * from './lib/icon/IconPicker'; +export * from './lib/icon/IconRenderer'; +export * from './lib/icon/useIconPicker'; diff --git a/libs/shared/ui/react-components/src/lib/icon/IconPicker.tsx b/libs/shared/ui/react-components/src/lib/icon/IconPicker.tsx new file mode 100644 index 000000000..d32b22f3f --- /dev/null +++ b/libs/shared/ui/react-components/src/lib/icon/IconPicker.tsx @@ -0,0 +1,228 @@ +import { Button } from '@codeware/shared/ui/shadcn/components/button'; +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger +} from '@codeware/shared/ui/shadcn/components/dialog'; +import { Input } from '@codeware/shared/ui/shadcn/components/input'; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger +} from '@codeware/shared/ui/shadcn/components/tooltip'; +import { cn } from '@codeware/shared/util/ui'; +import type { VariantProps } from 'class-variance-authority'; +import { useState } from 'react'; + +import { HeroIcon, Icon, heroIconMap } from './hero-icons'; +import { IconRenderer } from './IconRenderer'; +import { useIconPicker } from './useIconPicker'; + +type DialogLabels = { + dialogDescription?: string; + dialogTitle?: string; + noIconsFound?: string; + searchClearButton?: string; + searchFieldPlaceholder?: string; +}; + +type TriggerLabels = { + labelChange?: (icon: Pick) => string; + labelSelect?: string; +}; + +type Props = { + /** + * Custom dialog labels. + */ + labels?: DialogLabels; + + /** + * Custom dialog trigger element and options. + */ + trigger?: { + onClick?: () => void; + } & ( + | { element: (icon: HeroIcon | null) => React.ReactNode } + | (TriggerLabels & { + buttonClassName?: string; + buttonVariant?: VariantProps['variant']; + }) + ); + + /** + * A callback function that is called when an icon is selected. + */ + onChange?: (icon: HeroIcon) => void; + + /** + * The initial value of the icon picker. + */ + value?: HeroIcon; +}; + +const defaultLabels: Required = { + // Dialog labels + dialogDescription: 'Choose the best suited icon', + dialogTitle: 'Select an Icon', + noIconsFound: 'No icons found...', + searchClearButton: 'Clear search', + searchFieldPlaceholder: 'Search...', + // Trigger labels + labelChange: (icon) => icon.friendlyName, + labelSelect: 'Select icon' +}; + +/** + * A client-side component for selecting an icon from a dialog. + * + * @param onChange - A callback function that is called when an icon is selected. + * @param trigger - Custom dialog trigger element and options. + */ +export const IconPicker: React.FC = ({ + labels, + onChange, + trigger, + value +}) => { + const [open, setOpen] = useState(false); + const [selected, setSelected] = useState(value ?? null); + + const { + dialogDescription = defaultLabels.dialogDescription, + dialogTitle = defaultLabels.dialogTitle, + noIconsFound = defaultLabels.noIconsFound, + searchClearButton = defaultLabels.searchClearButton, + searchFieldPlaceholder = defaultLabels.searchFieldPlaceholder + } = labels ?? {}; + + const { onClick = () => void 0 } = trigger ?? {}; + + let triggerElement: (icon: HeroIcon | null) => React.ReactNode; + if (trigger && 'element' in trigger) { + triggerElement = trigger.element; + } else { + const { + buttonClassName = '', + buttonVariant = 'outline', + labelChange = defaultLabels.labelChange, + labelSelect = defaultLabels.labelSelect + } = trigger ?? {}; + triggerElement = (icon) => ( + + ); + } + + return ( +
+ setOpen(e)}> + {triggerElement(selected)} + + + {dialogTitle} + {dialogDescription} + + {/* Render a searchable icon grid */} + { + setSelected(icon); + setOpen(false); + onChange?.(icon); + }} + /> + + +
+ ); +}; + +/** + * A searchable icon grid for selecting an icon. + * + * @param onChange - A callback function that is called when an icon is selected. + */ +const IconSelectGrid: React.FC<{ + labels: Required< + Pick< + DialogLabels, + 'noIconsFound' | 'searchClearButton' | 'searchFieldPlaceholder' + > + >; + onChange: (icon: HeroIcon) => void; +}> = ({ + labels: { noIconsFound, searchClearButton, searchFieldPlaceholder }, + onChange +}) => { + const { search, setSearch, icons } = useIconPicker(); + + return ( +
+ setSearch(e.target.value)} + /> +
+ {icons.map(({ name, Component }) => ( + + + + + + +

{name}

+
+
+
+ ))} + {icons.length === 0 && ( +
+

{noIconsFound}

+ +
+ )} +
+
+ ); +}; diff --git a/libs/shared/ui/react-components/src/lib/icon/IconRenderer.tsx b/libs/shared/ui/react-components/src/lib/icon/IconRenderer.tsx new file mode 100644 index 000000000..a35de69a7 --- /dev/null +++ b/libs/shared/ui/react-components/src/lib/icon/IconRenderer.tsx @@ -0,0 +1,24 @@ +import React from 'react'; + +import { HeroIcon, heroIconMap } from './hero-icons'; + +/** + * A universal component for rendering a heroicon. + * + * @param icon - The name of the heroicon to render. + * @param rest - The rest of the props to pass to the heroicon component. + */ +export const IconRenderer = ({ + icon, + ...rest +}: { + icon: HeroIcon; +} & React.ComponentPropsWithoutRef<'svg'>) => { + const IconComponent = heroIconMap[icon]?.Component; + + if (!IconComponent) { + return null; + } + + return ; +}; diff --git a/libs/shared/ui/react-components/src/lib/icon/hero-icons.ts b/libs/shared/ui/react-components/src/lib/icon/hero-icons.ts new file mode 100644 index 000000000..04bdc24a6 --- /dev/null +++ b/libs/shared/ui/react-components/src/lib/icon/hero-icons.ts @@ -0,0 +1,39 @@ +import * as HeroIcons from '@heroicons/react/20/solid'; + +export type HeroIcon = keyof typeof HeroIcons; + +export type Icon = { + /** Name of the component */ + name: HeroIcon; + + /** A more human-friendly name */ + friendlyName: string; + + /** Heroicon component */ + Component: React.FC>; +}; + +const heroIconNames = Object.keys(HeroIcons) as Array; + +/** + * A list of heroicon names and corresponding components. + */ +export const heroIcon: Array = heroIconNames.map((icon) => ({ + name: icon, + // Split the icon name at capital letters and join them with a space + friendlyName: icon.match(/[A-Z][a-z]+/g)?.join(' ') ?? icon, + Component: HeroIcons[icon] +})); + +/** + * A map of heroicon names and corresponding components. + * + * Used for a performant component lookup from icon name. + */ +export const heroIconMap = heroIcon.reduce( + (acc, { name, friendlyName, Component }) => { + acc[name] = { name, friendlyName, Component }; + return acc; + }, + {} as Record +); diff --git a/libs/shared/ui/react-components/src/lib/icon/useIconPicker.tsx b/libs/shared/ui/react-components/src/lib/icon/useIconPicker.tsx new file mode 100644 index 000000000..70d3143bf --- /dev/null +++ b/libs/shared/ui/react-components/src/lib/icon/useIconPicker.tsx @@ -0,0 +1,37 @@ +import React, { useMemo, useState } from 'react'; + +import { Icon, heroIcon } from './hero-icons'; + +type IconPicker = { + search: string; + setSearch: React.Dispatch>; + icons: Array; +}; + +/** + * A client-side hook for collecting icon data. + * + * Has built-in search functionality. + */ +export const useIconPicker = (): IconPicker => { + // State for the search input + const [search, setSearch] = useState(''); + + // Memoize the hero icon components + const icons = useMemo(() => heroIcon, []); + + // Memoize the search functionality + const filteredIcons = useMemo(() => { + return icons.filter((icon) => { + if (search === '') { + return true; + } else if (icon.name.toLowerCase().includes(search.toLowerCase())) { + return true; + } else { + return false; + } + }); + }, [icons, search]); + + return { search, setSearch, icons: filteredIcons }; +}; diff --git a/libs/shared/ui/shadcn/src/index.ts b/libs/shared/ui/shadcn/src/index.ts index a99fdda10..5549d533e 100644 --- a/libs/shared/ui/shadcn/src/index.ts +++ b/libs/shared/ui/shadcn/src/index.ts @@ -1,15 +1,4 @@ -export * from './lib/components/alert'; -export * from './lib/components/button'; -export * from './lib/components/card'; -export * from './lib/components/checkbox'; -export * from './lib/components/dialog'; -export * from './lib/components/dropdown-menu'; -export * from './lib/components/form'; -export * from './lib/components/input'; -export * from './lib/components/label'; -export * from './lib/components/menubar'; -export * from './lib/components/radio-group'; -export * from './lib/components/select'; -export * from './lib/components/separator'; -export * from './lib/components/sonner'; -export * from './lib/components/textarea'; +// Import shadcn components individually to bundle only the components used in the app + +// @example +// import { Button } from '@codeware/shared/ui/shadcn/components/button'; diff --git a/libs/shared/ui/shadcn/src/lib/components/tooltip.tsx b/libs/shared/ui/shadcn/src/lib/components/tooltip.tsx new file mode 100644 index 000000000..2d4dfff52 --- /dev/null +++ b/libs/shared/ui/shadcn/src/lib/components/tooltip.tsx @@ -0,0 +1,58 @@ +import { cn } from '@codeware/shared/util/ui'; +import * as TooltipPrimitive from '@radix-ui/react-tooltip'; +import * as React from 'react'; + +function TooltipProvider({ + delayDuration = 0, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function Tooltip({ + ...props +}: React.ComponentProps) { + return ( + + + + ); +} + +function TooltipTrigger({ + ...props +}: React.ComponentProps) { + return ; +} + +function TooltipContent({ + className, + sideOffset = 0, + children, + ...props +}: React.ComponentProps) { + return ( + + + {children} + + + + ); +} + +export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }; diff --git a/libs/shared/util/payload-api/src/index.ts b/libs/shared/util/payload-api/src/index.ts index a5503b75c..82b8ee8bb 100644 --- a/libs/shared/util/payload-api/src/index.ts +++ b/libs/shared/util/payload-api/src/index.ts @@ -1,21 +1,15 @@ -export { - apiKeyPrefix, - authorizationHeader, - type RequestMethod -} from './lib/utils/definitions'; +export { apiKeyPrefix, authorizationHeader } from './lib/utils/definitions'; export type { MethodOptions, - RequestBaseOptions -} from './lib/utils/invoke-request'; + NavigationDoc, + NavigationItem, + RequestBaseOptions, + RequestMethod +} from './lib/utils/types'; + export { findBySlug } from './lib/find-by-slug'; -export { - findNavigationDoc, - type NavigationDoc -} from './lib/find-navigation-doc'; +export { findNavigationDoc } from './lib/find-navigation-doc'; export { getShallow } from './lib/get-shallow'; export { post } from './lib/post'; -export { - getNavigationTree, - type NavigationItem -} from './lib/get-navigation-tree'; +export { getNavigationTree } from './lib/get-navigation-tree'; export { getSiteSettings } from './lib/get-site-settings'; diff --git a/libs/shared/util/payload-api/src/lib/find-by-slug.ts b/libs/shared/util/payload-api/src/lib/find-by-slug.ts index e9a0340ee..f47a20cde 100644 --- a/libs/shared/util/payload-api/src/lib/find-by-slug.ts +++ b/libs/shared/util/payload-api/src/lib/find-by-slug.ts @@ -3,7 +3,8 @@ import type { CollectionWithoutPayload } from '@codeware/shared/util/payload-types'; -import { type RequestBaseOptions, invokeRequest } from './utils/invoke-request'; +import { invokeRequest } from './utils/invoke-request'; +import type { RequestBaseOptions } from './utils/types'; /** * Find a document by the slug field. diff --git a/libs/shared/util/payload-api/src/lib/find-navigation-doc.ts b/libs/shared/util/payload-api/src/lib/find-navigation-doc.ts index dab6a1e29..bf53fff9a 100644 --- a/libs/shared/util/payload-api/src/lib/find-navigation-doc.ts +++ b/libs/shared/util/payload-api/src/lib/find-navigation-doc.ts @@ -1,22 +1,11 @@ import type { - Media, NavigationReferenceCollection, Page, Post } from '@codeware/shared/util/payload-types'; -import { type RequestBaseOptions, invokeRequest } from './utils/invoke-request'; - -// Limit what can be exposed client side -export type NavigationDoc = - | ({ - collection: 'pages'; - } & Pick) - | ({ - collection: 'posts'; - } & Pick & { - heroImage?: Media | null | undefined; - }); +import { invokeRequest } from './utils/invoke-request'; +import type { NavigationDoc, RequestBaseOptions } from './utils/types'; /** * Find a navigation document by the URL collection and slug parameters. diff --git a/libs/shared/util/payload-api/src/lib/get-navigation-tree.ts b/libs/shared/util/payload-api/src/lib/get-navigation-tree.ts index 1a2000c27..8b8c23df0 100644 --- a/libs/shared/util/payload-api/src/lib/get-navigation-tree.ts +++ b/libs/shared/util/payload-api/src/lib/get-navigation-tree.ts @@ -1,30 +1,5 @@ -import type { NavigationReferenceCollection } from '@codeware/shared/util/payload-types'; - -import { type RequestBaseOptions, invokeRequest } from './utils/invoke-request'; - -export type NavigationItem = { - /** - * The collection for the navigation item. - */ - collection: NavigationReferenceCollection; - - /** - * Unique identifier for the navigation item. - */ - key: string; - - /** - * Navigation label in the language declared in the request. - */ - label: string; - - /** - * The URL of the navigation item as a `collection/slug` string. - * - * Use `findNavigationDoc` to fetch the document from the CMS. - */ - url: string; -}; +import { invokeRequest } from './utils/invoke-request'; +import type { NavigationItem, RequestBaseOptions } from './utils/types'; /** * Get the site navigation tree. diff --git a/libs/shared/util/payload-api/src/lib/get-shallow.ts b/libs/shared/util/payload-api/src/lib/get-shallow.ts index 90e194c28..163991404 100644 --- a/libs/shared/util/payload-api/src/lib/get-shallow.ts +++ b/libs/shared/util/payload-api/src/lib/get-shallow.ts @@ -3,11 +3,8 @@ import type { CollectionWithoutPayload } from '@codeware/shared/util/payload-types'; -import { - type MethodOptions, - type RequestBaseOptions, - invokeRequest -} from './utils/invoke-request'; +import { invokeRequest } from './utils/invoke-request'; +import type { MethodOptions, RequestBaseOptions } from './utils/types'; /** * Get documents shallow (hence depth 0) from a collection. diff --git a/libs/shared/util/payload-api/src/lib/get-site-settings.ts b/libs/shared/util/payload-api/src/lib/get-site-settings.ts index 1e91fd14c..02d9dad43 100644 --- a/libs/shared/util/payload-api/src/lib/get-site-settings.ts +++ b/libs/shared/util/payload-api/src/lib/get-site-settings.ts @@ -1,6 +1,7 @@ import type { SiteSetting } from '@codeware/shared/util/payload-types'; -import { type RequestBaseOptions, invokeRequest } from './utils/invoke-request'; +import { invokeRequest } from './utils/invoke-request'; +import type { RequestBaseOptions } from './utils/types'; /** * Get the site settings. diff --git a/libs/shared/util/payload-api/src/lib/post.ts b/libs/shared/util/payload-api/src/lib/post.ts index dac4c760c..3e5b20d28 100644 --- a/libs/shared/util/payload-api/src/lib/post.ts +++ b/libs/shared/util/payload-api/src/lib/post.ts @@ -3,11 +3,8 @@ import type { CollectionWithoutPayload } from '@codeware/shared/util/payload-types'; -import { - type MethodOptions, - type RequestBaseOptions, - invokeRequest -} from './utils/invoke-request'; +import { invokeRequest } from './utils/invoke-request'; +import type { MethodOptions, RequestBaseOptions } from './utils/types'; /** * Create a document in a collection. diff --git a/libs/shared/util/payload-api/src/lib/utils/create-request-init.ts b/libs/shared/util/payload-api/src/lib/utils/create-request-init.ts index c0de4ff4b..aae43c3ce 100644 --- a/libs/shared/util/payload-api/src/lib/utils/create-request-init.ts +++ b/libs/shared/util/payload-api/src/lib/utils/create-request-init.ts @@ -1,63 +1,7 @@ import { generateSignature } from '@codeware/shared/util/signature'; -import { - type RequestMethod, - apiKeyPrefix, - authorizationHeader -} from './definitions'; - -export type RequestInitOptions = { - /** - * Optional headers to include in the request. - * - * @default undefined - */ - headers?: HeadersInit; - - /** - * Whether to allow HTTP-only cookies depending on client and server domains. - * - * When the client is on a different domain than the Payload API and `useSignature` is provided, - * the value should be set to `'include'`. - * - * @default undefined - */ - requestCredentials?: RequestCredentials; - - /** - * Enable signature verification for the request - * by providing the required application details. - * - * @default undefined - */ - signatureVertification?: { - deployEnv: string; - deviceId: string; - secret: string; - tenantId: string; - /** - * Browser user agent to include in the signature. - * - * Set to `null` when the request is invoked from a server-side context - * without access to the request object. - * The user agent will be set to `'SSR'` in this case. - * - * @example - * ```ts - * const userAgent = request.headers.get('User-Agent') - * ``` - */ - userAgent: string | null; - }; - - /** - * Enable API key authorization for the request - * by providing the tenant API key for the application. - * - * @default undefined - */ - tenantApiKey?: string; -}; +import { apiKeyPrefix, authorizationHeader } from './definitions'; +import type { RequestInitOptions, RequestMethod } from './types'; /** * Create request configuration for `fetch` requests. diff --git a/libs/shared/util/payload-api/src/lib/utils/definitions.ts b/libs/shared/util/payload-api/src/lib/utils/definitions.ts index 230df0d2e..48a568d69 100644 --- a/libs/shared/util/payload-api/src/lib/utils/definitions.ts +++ b/libs/shared/util/payload-api/src/lib/utils/definitions.ts @@ -9,8 +9,3 @@ export const authorizationHeader = 'Authorization'; * @example 'tenants API-Key ' */ export const apiKeyPrefix = 'tenants API-Key'; - -/** - * The method for the request. - */ -export type RequestMethod = 'GET' | 'POST'; diff --git a/libs/shared/util/payload-api/src/lib/utils/get-depth.ts b/libs/shared/util/payload-api/src/lib/utils/get-depth.ts new file mode 100644 index 000000000..e09f45349 --- /dev/null +++ b/libs/shared/util/payload-api/src/lib/utils/get-depth.ts @@ -0,0 +1,31 @@ +import type { CollectionSlug } from '@codeware/shared/util/payload-types'; + +import type { RequestOptions } from './types'; + +/** + * Get the depth for a collection's GET request. + * + * Depth defaults to 2. + * + * @param collection - The collection to get the depth for. + * @param options - The options to get the depth for. + * @returns The depth for the collection or `null` when not applicable. + */ +export const getDepth = ( + collection: CollectionSlug, + options: RequestOptions +) => { + if (options.method !== 'GET') { + return null; + } + + // Custom depth for collections + switch (collection) { + case 'site-settings': + // Landing page cards could have links with reference to other collections + // for which we need the slug to be resolved + return 3; + default: + return 2; + } +}; diff --git a/libs/shared/util/payload-api/src/lib/utils/invoke-request.ts b/libs/shared/util/payload-api/src/lib/utils/invoke-request.ts index 1901e3323..b279a6a29 100644 --- a/libs/shared/util/payload-api/src/lib/utils/invoke-request.ts +++ b/libs/shared/util/payload-api/src/lib/utils/invoke-request.ts @@ -4,8 +4,8 @@ import type { } from '@codeware/shared/util/payload-types'; import { createRequestInit } from './create-request-init'; -import type { RequestInitOptions } from './create-request-init'; -import type { RequestMethod } from './definitions'; +import { getDepth } from './get-depth'; +import type { RequestMethod, RequestOptions } from './types'; type FetchResponse< T extends RequestMethod, @@ -16,46 +16,6 @@ type FetchResponse< } : CollectionWithoutPayload[C]; -export type MethodOptions = T extends 'GET' - ? { - /** - * The depth of the request. - * @default 2 - */ - depth?: number; - /** - * The limit of the request, must be greater than 0 when provided. - */ - limit?: number; - /** - * The query to invoke the request with. - * @example 'where[slug][equals]=home' - */ - query?: string; - } - : { - body: Record; - }; - -export type RequestBaseOptions = RequestInitOptions & { - /** - * The URL of the Payload CMS API host. - * @example 'https://payload-cms.com' - */ - apiUrl: string; - /** - * Whether to enable debug logging on requests. - * @default false - */ - debug?: boolean; -}; - -type RequestOptions = RequestBaseOptions & - ( - | ({ method: 'GET' } & MethodOptions<'GET'>) - | ({ method: 'POST' } & MethodOptions<'POST'>) - ); - const collectionApiUrl = (apiUrl: string, collection: CollectionSlug) => `${apiUrl}/api/${collection}`; @@ -102,7 +62,7 @@ export async function invokeRequest( method === 'GET' ? [ options.query, - `depth=${options.depth ?? 2}`, + `depth=${getDepth(collection, options)}`, options.limit ? `limit=${options.limit ?? 0}` : '' ] .filter(Boolean) diff --git a/libs/shared/util/payload-api/src/lib/utils/types.ts b/libs/shared/util/payload-api/src/lib/utils/types.ts new file mode 100644 index 000000000..811aa1957 --- /dev/null +++ b/libs/shared/util/payload-api/src/lib/utils/types.ts @@ -0,0 +1,167 @@ +import type { + Media, + NavigationReferenceCollection, + Page, + Post +} from '@codeware/shared/util/payload-types'; + +/** + * Available request options depending on the request method. + */ +export type MethodOptions = T extends 'GET' + ? { + /** + * The depth of the request. + * @default 2 + * + * @todo + * TODO: Depth depends on the query and should not be client knowledge. + * Possibly a depth override for edge cases but otherwise the value + * should be set dynamically by this api. + */ + depth?: number; + + /** + * The limit of the request, must be greater than 0 when provided. + */ + limit?: number; + + /** + * The query to invoke the request with. + * @example 'where[slug][equals]=home' + */ + query?: string; + } + : { + body: Record; + }; + +/** + * Document details for a navigation item. + */ +export type NavigationDoc = + // limit what can be exposed client side + | ({ + collection: 'pages'; + } & Pick) + | ({ + collection: 'posts'; + } & Pick & { + heroImage?: Media | null | undefined; + }); + +/** + * Navigation tree item. + */ +export type NavigationItem = { + /** + * The collection for the navigation item. + */ + collection: NavigationReferenceCollection; + + /** + * Unique identifier for the navigation item. + */ + key: string; + + /** + * Navigation label in the language declared in the request. + */ + label: string; + + /** + * The URL of the navigation item as a `collection/slug` string. + * + * Use `findNavigationDoc` to fetch the document from the CMS. + */ + url: string; +}; + +/** + * Base options for all requests. + */ +export type RequestBaseOptions = RequestInitOptions & { + /** + * The URL of the Payload CMS API host. + * @example 'https://payload-cms.com' + */ + apiUrl: string; + + /** + * Whether to enable debug logging on requests. + * @default false + */ + debug?: boolean; +}; + +/** + * @internal + * `fetch` request init options. + */ +export type RequestInitOptions = { + /** + * Optional headers to include in the request. + * + * @default undefined + */ + headers?: HeadersInit; + + /** + * Whether to allow HTTP-only cookies depending on client and server domains. + * + * When the client is on a different domain than the Payload API and `useSignature` is provided, + * the value should be set to `'include'`. + * + * @default undefined + */ + requestCredentials?: RequestCredentials; + + /** + * Enable signature verification for the request + * by providing the required application details. + * + * @default undefined + */ + signatureVertification?: { + deployEnv: string; + deviceId: string; + secret: string; + tenantId: string; + /** + * Browser user agent to include in the signature. + * + * Set to `null` when the request is invoked from a server-side context + * without access to the request object. + * The user agent will be set to `'SSR'` in this case. + * + * @example + * ```ts + * const userAgent = request.headers.get('User-Agent') + * ``` + */ + userAgent: string | null; + }; + + /** + * Enable API key authorization for the request + * by providing the tenant API key for the application. + * + * @default undefined + */ + tenantApiKey?: string; +}; + +/** + * The method for the request. + */ +export type RequestMethod = 'GET' | 'POST'; + +/** + * @internal + * Full request options depending on the request method. + */ +export type RequestOptions = RequestBaseOptions & + ( + | ({ method: 'GET' } & MethodOptions<'GET'>) + | ({ method: 'POST' } & MethodOptions<'POST'>) + ); diff --git a/libs/shared/util/payload-types/src/lib/payload-types.ts b/libs/shared/util/payload-types/src/lib/payload-types.ts index 5a6989588..7855b7a95 100644 --- a/libs/shared/util/payload-types/src/lib/payload-types.ts +++ b/libs/shared/util/payload-types/src/lib/payload-types.ts @@ -82,12 +82,14 @@ export interface Config { users: UserAuthOperations; }; blocks: { + card: CardBlock; code: CodeBlock; content: ContentBlock; form: FormBlock; media: MediaBlock; }; collections: { + cards: Card; categories: Category; media: Media; navigation: Navigation; @@ -118,6 +120,7 @@ export interface Config { }; }; collectionsSelect: { + cards: CardsSelect | CardsSelect; categories: CategoriesSelect | CategoriesSelect; media: MediaSelect | MediaSelect; navigation: NavigationSelect | NavigationSelect; @@ -196,14 +199,175 @@ export interface UserAuthOperations { } /** * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "CodeBlock". + * via the `definition` "CardBlock". */ -export interface CodeBlock { - language: 'ts' | 'plaintext' | 'tsx' | 'js' | 'jsx'; - code: string; +export interface CardBlock { + /** + * Select the reusable cards to be displayed + */ + collectionCards?: (number | Card)[] | null; + /** + * Complement with custom cards + */ + customCards?: + | { + card: CardGroup; + id?: string | null; + }[] + | null; id?: string | null; blockName?: string | null; - blockType: 'code'; + blockType: 'card'; +} +/** + * Create reusable cards + * + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "cards". + */ +export interface Card { + id: number; + tenant?: (number | null) | Tenant; + /** + * Select an icon that represent the card + */ + icon?: string | null; + title: string; + /** + * A text that will complement the title + */ + description?: string | null; + content: string; + /** + * Let the card link to a page or external URL + */ + enableLink?: boolean | null; + link?: CardGroupLink; + /** + * Used for url paths. Will be automatically generated from title if left empty. + */ + slug?: string | null; + updatedAt: string; + createdAt: string; +} +/** + * A workspace is like an organization or a company and is often called a "tenant". The content is scoped to the members of the workspace. + * + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "tenants". + */ +export interface Tenant { + id: number; + name: string; + description?: string | null; + domains?: + | { + domain: string; + pageTypes: ('cms' | 'client' | 'disabled')[]; + id?: string | null; + }[] + | null; + relatedUsers?: { + docs?: (number | User)[]; + hasNextPage?: boolean; + totalDocs?: number; + }; + relatedPages?: { + docs?: (number | Page)[]; + hasNextPage?: boolean; + totalDocs?: number; + }; + relatedPosts?: { + docs?: (number | Post)[]; + hasNextPage?: boolean; + totalDocs?: number; + }; + relatedCategories?: { + docs?: (number | Category)[]; + hasNextPage?: boolean; + totalDocs?: number; + }; + relatedMedia?: { + docs?: (number | Media)[]; + hasNextPage?: boolean; + totalDocs?: number; + }; + /** + * Used for url paths. Will be automatically generated from name if left empty. + */ + slug?: string | null; + updatedAt: string; + createdAt: string; + enableAPIKey?: boolean | null; + apiKey?: string | null; + apiKeyIndex?: string | null; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "users". + */ +export interface User { + id: number; + name: string; + /** + * System users have access to manage the whole system and do not need to be members of a workspace. For normal users, it is a requirement to be members of a workspace. + */ + role: 'user' | 'system-user'; + tenants?: TenantsArrayField; + /** + * Short description of the user. + */ + description?: string | null; + updatedAt: string; + createdAt: string; + email: string; + resetPasswordToken?: string | null; + resetPasswordExpiration?: string | null; + salt?: string | null; + hash?: string | null; + loginAttempts?: number | null; + lockUntil?: string | null; + password?: string | null; +} +/** + * Pages are the building blocks of the site and are used to create menus and navigation. + * + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "pages". + */ +export interface Page { + id: number; + tenant?: (number | null) | Tenant; + /** + * The name of the page used for navigation links. + */ + name: string; + /** + * A pre-designed header on top of the page. Provide for a consistent look and feel or customize everything in "Layout builder". + */ + header?: string | null; + /** + * Build the page content by adding the layout blocks you need. + */ + layout: (ContentBlock | CardBlock | FormBlock | MediaBlock | CodeBlock)[]; + meta?: { + title?: string | null; + /** + * Maximum upload file size: 12MB. Recommended file size for images is <500KB. + */ + image?: (number | null) | Media; + description?: string | null; + }; + /** + * The date the page is published. + */ + publishedAt?: string | null; + /** + * Used for url paths. Will be automatically generated from name if left empty. + */ + slug?: string | null; + updatedAt: string; + createdAt: string; } /** * This interface was referenced by `Config`'s JSON-Schema @@ -479,125 +643,6 @@ export interface Form { updatedAt: string; createdAt: string; } -/** - * A workspace is like an organization or a company and is often called a "tenant". The content is scoped to the members of the workspace. - * - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "tenants". - */ -export interface Tenant { - id: number; - name: string; - description?: string | null; - domains?: - | { - domain: string; - pageTypes: ('cms' | 'client' | 'disabled')[]; - id?: string | null; - }[] - | null; - relatedUsers?: { - docs?: (number | User)[]; - hasNextPage?: boolean; - totalDocs?: number; - }; - relatedPages?: { - docs?: (number | Page)[]; - hasNextPage?: boolean; - totalDocs?: number; - }; - relatedPosts?: { - docs?: (number | Post)[]; - hasNextPage?: boolean; - totalDocs?: number; - }; - relatedCategories?: { - docs?: (number | Category)[]; - hasNextPage?: boolean; - totalDocs?: number; - }; - relatedMedia?: { - docs?: (number | Media)[]; - hasNextPage?: boolean; - totalDocs?: number; - }; - /** - * Used for url paths. Will be automatically generated from name if left empty. - */ - slug?: string | null; - updatedAt: string; - createdAt: string; - enableAPIKey?: boolean | null; - apiKey?: string | null; - apiKeyIndex?: string | null; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "users". - */ -export interface User { - id: number; - name: string; - /** - * System users have access to manage the whole system and do not need to be members of a workspace. For normal users, it is a requirement to be members of a workspace. - */ - role: 'user' | 'system-user'; - tenants?: TenantsArrayField; - /** - * Short description of the user. - */ - description?: string | null; - updatedAt: string; - createdAt: string; - email: string; - resetPasswordToken?: string | null; - resetPasswordExpiration?: string | null; - salt?: string | null; - hash?: string | null; - loginAttempts?: number | null; - lockUntil?: string | null; - password?: string | null; -} -/** - * Pages are the building blocks of the site and are used to create menus and navigation. - * - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "pages". - */ -export interface Page { - id: number; - tenant?: (number | null) | Tenant; - /** - * The name of the page used for navigation links. - */ - name: string; - /** - * A pre-designed header on top of the page. Provide for a consistent look and feel or customize everything in "Layout builder". - */ - header?: string | null; - /** - * Build the page content by adding the layout blocks you need. - */ - layout: (ContentBlock | FormBlock | MediaBlock | CodeBlock)[]; - meta?: { - title?: string | null; - /** - * Maximum upload file size: 12MB. Recommended file size for images is <500KB. - */ - image?: (number | null) | Media; - description?: string | null; - }; - /** - * The date the page is published. - */ - publishedAt?: string | null; - /** - * Used for url paths. Will be automatically generated from name if left empty. - */ - slug?: string | null; - updatedAt: string; - createdAt: string; -} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "MediaBlock". @@ -792,6 +837,61 @@ export interface Category { updatedAt: string; createdAt: string; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "CodeBlock". + */ +export interface CodeBlock { + language: 'ts' | 'plaintext' | 'tsx' | 'js' | 'jsx'; + code: string; + id?: string | null; + blockName?: string | null; + blockType: 'code'; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "CardGroupLink". + */ +export interface CardGroupLink { + type?: ('reference' | 'custom') | null; + newTab?: boolean | null; + reference?: + | ({ + relationTo: 'pages'; + value: number | Page; + } | null) + | ({ + relationTo: 'posts'; + value: number | Post; + } | null); + /** + * Add protocol (http:// or https://) if the link is external + */ + url?: string | null; + navTrigger?: ('card' | 'link') | null; + label?: string | null; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "CardGroup". + */ +export interface CardGroup { + /** + * Select an icon that represent the card + */ + icon?: string | null; + title: string; + /** + * A text that will complement the title + */ + description?: string | null; + content: string; + /** + * Let the card link to a page or external URL + */ + enableLink?: boolean | null; + link?: CardGroupLink; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "navigation". @@ -860,6 +960,10 @@ export interface FormSubmission { export interface PayloadLockedDocument { id: number; document?: + | ({ + relationTo: 'cards'; + value: number | Card; + } | null) | ({ relationTo: 'categories'; value: number | Category; @@ -952,6 +1056,34 @@ export interface PayloadMigration { updatedAt: string; createdAt: string; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "cards_select". + */ +export interface CardsSelect { + tenant?: T; + icon?: T; + title?: T; + description?: T; + content?: T; + enableLink?: T; + link?: T | CardGroupLinkSelect; + slug?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "CardGroupLink_select". + */ +export interface CardGroupLinkSelect { + type?: T; + newTab?: T; + reference?: T; + url?: T; + navTrigger?: T; + label?: T; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "categories_select". diff --git a/package.json b/package.json index 9ef822692..60568ef8e 100644 --- a/package.json +++ b/package.json @@ -42,8 +42,10 @@ "@radix-ui/react-select": "^2.1.6", "@radix-ui/react-separator": "^1.1.2", "@radix-ui/react-slot": "^1.1.2", + "@radix-ui/react-tooltip": "^1.1.8", "@remix-run/node": "^2.16.0", "@remix-run/react": "^2.16.0", + "@tailwindcss/postcss": "^4.0.7", "@tailwindcss/typography": "^0.5.15", "axios": "^1.6.0", "class-variance-authority": "^0.7.0", @@ -70,8 +72,8 @@ "sharp": "^0.33.5", "simple-git": "^3.27.0", "sonner": "^2.0.1", - "tailwind-merge": "^3.0.2", - "tailwindcss-animate": "^1.0.7", + "tailwind-merge": "^3.1.0", + "tailwindcss": "^4.0.17", "zod": "^3.24.2" }, "devDependencies": { @@ -177,7 +179,6 @@ "rimraf": "latest", "shadcn": "canary", "supertest": "^7.0.0", - "tailwindcss": "~4.1.0", "tcp-port-used": "^1.0.2", "tiny-invariant": "^1.3.3", "tree-kill": "^1.2.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2274e55d1..559d5ef52 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,7 +26,7 @@ importers: version: 1.2.2(react@19.0.0) '@conform-to/zod': specifier: ^1.2.2 - version: 1.3.0(zod@3.24.2) + version: 1.2.2(zod@3.24.2) '@epic-web/client-hints': specifier: ^1.3.5 version: 1.3.5 @@ -38,13 +38,13 @@ importers: version: 2.2.0(react@19.0.0) '@hono/node-server': specifier: ^1.13.7 - version: 1.13.8(hono@4.7.5) + version: 1.13.8(hono@4.7.4) '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.54.2(react@19.0.0)) '@infisical/sdk': specifier: ^3.0.4 - version: 3.0.7 + version: 3.0.6 '@ngneat/falso': specifier: ^7.3.0 version: 7.3.0 @@ -62,25 +62,25 @@ importers: version: 3.28.1(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3)) '@payloadcms/next': specifier: ~3.28.0 - version: 3.28.1(@types/react@19.0.0)(graphql@16.10.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) + version: 3.28.1(@types/react@19.0.0)(graphql@16.10.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) '@payloadcms/plugin-form-builder': specifier: ~3.28.0 - version: 3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) + version: 3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) '@payloadcms/plugin-multi-tenant': specifier: ~3.28.0 - version: 3.28.1(@payloadcms/ui@3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3))(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3)) + version: 3.28.1(@payloadcms/ui@3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3))(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3)) '@payloadcms/plugin-seo': specifier: ~3.28.0 - version: 3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) + version: 3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) '@payloadcms/richtext-lexical': specifier: ~3.28.0 - version: 3.28.1(@faceless-ui/modal@3.0.0-beta.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@faceless-ui/scroll-info@2.0.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@payloadcms/next@3.28.1(@types/react@19.0.0)(graphql@16.10.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3))(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(yjs@13.6.24) + version: 3.28.1(@faceless-ui/modal@3.0.0-beta.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@faceless-ui/scroll-info@2.0.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@payloadcms/next@3.28.1(@types/react@19.0.0)(graphql@16.10.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3))(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(yjs@13.6.24) '@payloadcms/storage-s3': specifier: ~3.28.0 - version: 3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) + version: 3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) '@payloadcms/ui': specifier: ~3.28.0 - version: 3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) + version: 3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) '@radix-ui/react-checkbox': specifier: ^1.1.4 version: 1.1.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -108,21 +108,27 @@ importers: '@radix-ui/react-slot': specifier: ^1.1.2 version: 1.1.2(@types/react@19.0.0)(react@19.0.0) + '@radix-ui/react-tooltip': + specifier: ^1.1.8 + version: 1.1.8(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@remix-run/node': specifier: ^2.16.0 version: 2.16.0(typescript@5.7.3) '@remix-run/react': specifier: ^2.16.0 version: 2.16.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) + '@tailwindcss/postcss': + specifier: ^4.0.7 + version: 4.0.17 '@tailwindcss/typography': specifier: ^0.5.15 - version: 0.5.16(tailwindcss@4.1.3) + version: 0.5.16(tailwindcss@4.0.17) axios: specifier: ^1.6.0 - version: 1.8.4 + version: 1.8.3 class-variance-authority: specifier: ^0.7.0 - version: 0.7.1 + version: 0.7.0 clsx: specifier: ^2.1.1 version: 2.1.1 @@ -134,7 +140,7 @@ importers: version: 16.10.0 hono: specifier: ^4.6.10 - version: 4.7.5 + version: 4.7.4 http-status-codes: specifier: ^2.3.0 version: 2.3.0 @@ -146,7 +152,7 @@ importers: version: 0.487.0(react@19.0.0) next: specifier: 15.1.7 - version: 15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1) + version: 15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1) next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -191,13 +197,13 @@ importers: version: 3.27.0 sonner: specifier: ^2.0.1 - version: 2.0.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 2.0.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) tailwind-merge: - specifier: ^3.0.2 + specifier: ^3.1.0 version: 3.1.0 - tailwindcss-animate: - specifier: ^1.0.7 - version: 1.0.7(tailwindcss@4.1.3) + tailwindcss: + specifier: ^4.0.17 + version: 4.0.17 zod: specifier: ^3.24.2 version: 3.24.2 @@ -210,7 +216,7 @@ importers: version: 7.26.3(@babel/core@7.26.10) '@cdwr/nx-payload': specifier: 2.0.0 - version: 2.0.0(@nx/devkit@20.4.5(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))))(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 2.0.0(@nx/devkit@20.4.5(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))))(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@clack/prompts': specifier: ^0.10.0 version: 0.10.0 @@ -225,16 +231,16 @@ importers: version: 19.8.0 '@eslint/compat': specifier: ^1.1.1 - version: 1.2.8(eslint@9.20.1(jiti@2.4.2)) + version: 1.2.7(eslint@9.20.1(jiti@2.4.2)) '@eslint/eslintrc': specifier: ^2.1.1 version: 2.1.4 '@eslint/js': specifier: ^9.8.0 - version: 9.23.0 + version: 9.22.0 '@evilmartians/lefthook': specifier: ^1.8.0 - version: 1.11.6 + version: 1.11.3 '@homebridge/node-pty-prebuilt-multiarch': specifier: ^0.11.14 version: 0.11.14 @@ -261,22 +267,22 @@ importers: version: 20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0)) '@nx/next': specifier: 20.4.5 - version: 20.4.5(@babel/core@7.26.10)(@babel/traverse@7.27.0)(@rspack/core@1.2.8(@swc/helpers@0.5.15))(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(@types/node@22.14.0)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.12)(eslint@9.20.1(jiti@2.4.2))(lightningcss@1.29.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0))(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)) + version: 20.4.5(@babel/core@7.26.10)(@babel/traverse@7.27.0)(@rspack/core@1.2.8(@swc/helpers@0.5.15))(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(@types/node@22.14.0)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.12)(eslint@9.20.1(jiti@2.4.2))(lightningcss@1.29.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0))(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)) '@nx/node': specifier: 20.4.5 version: 20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.20.1(jiti@2.4.2))(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(ts-node@10.9.2(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0)) '@nx/playwright': specifier: 20.4.5 - version: 20.4.5(@babel/traverse@7.27.0)(@playwright/test@1.51.1)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(@zkochan/js-yaml@0.0.7)(eslint@9.20.1(jiti@2.4.2))(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0)) + version: 20.4.5(@babel/traverse@7.27.0)(@playwright/test@1.51.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(@zkochan/js-yaml@0.0.7)(eslint@9.20.1(jiti@2.4.2))(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0)) '@nx/plugin': specifier: 20.4.5 version: 20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.20.1(jiti@2.4.2))(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(ts-node@10.9.2(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0)) '@nx/react': specifier: 20.4.5 - version: 20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(@types/node@22.14.0)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.12)(eslint@9.20.1(jiti@2.4.2))(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0))(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)) + version: 20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(@types/node@22.14.0)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.12)(eslint@9.20.1(jiti@2.4.2))(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0))(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)) '@nx/remix': specifier: 20.4.5 - version: 20.4.5(gbzouizuwsr4agymd2ji5yagve) + version: 20.4.5(3gbui6sqs6aeb6d4staedatz7m) '@nx/vite': specifier: 20.4.5 version: 20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0))(vite@5.4.14(@types/node@22.14.0)(less@4.1.3)(lightningcss@1.29.2)(sass@1.85.1)(stylus@0.64.0)(terser@5.39.0))(vitest@1.6.1) @@ -297,10 +303,10 @@ importers: version: 15.26.0 '@octokit/plugin-rest-endpoint-methods': specifier: ^13.2.6 - version: 13.5.0(@octokit/core@6.1.4) + version: 13.3.1(@octokit/core@6.1.4) '@octokit/types': specifier: ^13.6.1 - version: 13.10.0 + version: 13.8.0 '@octokit/webhooks-types': specifier: ^7.6.1 version: 7.6.1 @@ -309,10 +315,10 @@ importers: version: 3.28.1(graphql@16.10.0)(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(typescript@5.7.3) '@playwright/test': specifier: ^1.36.0 - version: 1.51.1 + version: 1.51.0 '@pmmmwh/react-refresh-webpack-plugin': specifier: ^0.5.7 - version: 0.5.15(react-refresh@0.14.2)(type-fest@4.39.1)(webpack-dev-server@5.2.0(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)))(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)) + version: 0.5.15(react-refresh@0.14.2)(type-fest@4.37.0)(webpack-dev-server@5.2.0(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)))(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)) '@remix-run/dev': specifier: ^2.14.0 version: 2.16.0(@remix-run/react@2.16.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3))(@types/node@22.14.0)(babel-plugin-macros@3.1.0)(less@4.1.3)(lightningcss@1.29.2)(sass@1.85.1)(stylus@0.64.0)(terser@5.39.0)(ts-node@10.9.2(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(typescript@5.7.3))(typescript@5.7.3)(vite@5.4.14(@types/node@22.14.0)(less@4.1.3)(lightningcss@1.29.2)(sass@1.85.1)(stylus@0.64.0)(terser@5.39.0)) @@ -337,9 +343,6 @@ importers: '@swc/jest': specifier: ~0.2.36 version: 0.2.37(@swc/core@1.10.18(@swc/helpers@0.5.15)) - '@tailwindcss/postcss': - specifier: ~4.1.0 - version: 4.1.3 '@testing-library/dom': specifier: ^10.0.0 version: 10.4.0 @@ -378,7 +381,7 @@ importers: version: 19.0.0 '@types/supertest': specifier: ^6.0.2 - version: 6.0.3 + version: 6.0.2 '@types/tcp-port-used': specifier: ^1.0.4 version: 1.0.4 @@ -435,7 +438,7 @@ importers: version: 9.1.0(eslint@9.20.1(jiti@2.4.2)) eslint-plugin-import: specifier: 2.31.0 - version: 2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.7)(eslint@9.20.1(jiti@2.4.2)) + version: 2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.7(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.1(jiti@2.4.2)))(eslint@9.20.1(jiti@2.4.2)))(eslint@9.20.1(jiti@2.4.2)) eslint-plugin-jsx-a11y: specifier: 6.10.2 version: 6.10.2(eslint@9.20.1(jiti@2.4.2)) @@ -486,7 +489,7 @@ importers: version: 19.1.0 postcss: specifier: ~8.5.2 - version: 8.5.3 + version: 8.5.2 prettier: specifier: ^3.0.0 version: 3.5.3 @@ -501,13 +504,10 @@ importers: version: 6.0.1 shadcn: specifier: canary - version: 2.4.0-canary.20(@types/node@22.14.0)(typescript@5.7.3) + version: 2.4.0-canary.18(@types/node@22.14.0)(typescript@5.7.3) supertest: specifier: ^7.0.0 - version: 7.1.0 - tailwindcss: - specifier: ~4.1.0 - version: 4.1.3 + version: 7.0.0 tcp-port-used: specifier: ^1.0.2 version: 1.0.2 @@ -519,7 +519,7 @@ importers: version: 1.2.2 ts-jest: specifier: ^29.1.0 - version: 29.3.1(@babel/core@7.26.10)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10))(esbuild@0.19.12)(jest@29.7.0(@types/node@22.14.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(typescript@5.7.3)))(typescript@5.7.3) + version: 29.2.6(@babel/core@7.26.10)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10))(esbuild@0.19.12)(jest@29.7.0(@types/node@22.14.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(typescript@5.7.3)))(typescript@5.7.3) ts-node: specifier: 10.9.2 version: 10.9.2(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(typescript@5.7.3) @@ -531,7 +531,7 @@ importers: version: 4.19.3 type-fest: specifier: ^4.26.1 - version: 4.39.1 + version: 4.37.0 typescript: specifier: ~5.7.0 version: 5.7.3 @@ -1546,16 +1546,13 @@ packages: '@conform-to/dom@1.2.2': resolution: {integrity: sha512-f05EClpNP31o6lX4LYmmLqgsiTOHdGfY7z2XXK6U6rRp+EtxrkUBdrFlIGsfkf7e9AFO19h3/Cb/cXHVd1k1FA==} - '@conform-to/dom@1.3.0': - resolution: {integrity: sha512-Tw42GucxyuUv72/NDRNFSyQIEw6E9To0wf9Bk0eZVFLXVS1Lg/fIkKi/wBuWdqUyHjzgKZSoe2jZNtRP9gwJwA==} - '@conform-to/react@1.2.2': resolution: {integrity: sha512-1JBECb3NKi5/IlexaYLgnAxGJ55MRuO2sEQ10cJfUK2bfltNbTIQnYUDG6pU886A4lda/q6UH/adPsjiB/4Gkg==} peerDependencies: react: 19.0.0 - '@conform-to/zod@1.3.0': - resolution: {integrity: sha512-6+sIlzJJYM2a4GjWmMeY8L8CilzRatkQtMd1/Q+mvElN8bRbIVOwoJLMgUnyIjIu5L3bZP91kt5UcTqA2tAaAA==} + '@conform-to/zod@1.2.2': + resolution: {integrity: sha512-mNCzh0XsF2vhCtD8bfHYMYayEJ9dP6/KsGjmq8DFcO1ykDTNQZwfi1MIm4evGYVempSS3poYr4xZjd7cXEbtaw==} peerDependencies: zod: ^3.21.0 @@ -2543,8 +2540,8 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/compat@1.2.8': - resolution: {integrity: sha512-LqCYHdWL/QqKIJuZ/ucMAv8d4luKGs4oCPgpt8mWztQAtPrHfXKQ/XAUc8ljCHAfJCn6SvkpTcGt5Tsh8saowA==} + '@eslint/compat@1.2.7': + resolution: {integrity: sha512-xvv7hJE32yhegJ8xNAnb62ggiAwTYHBpUCWhRxEj/ksvgDJuSXfoDkBcRYaYNFiJ+jH0IE3K16hd+xXzhBgNbg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^9.10.0 @@ -2576,8 +2573,8 @@ packages: resolution: {integrity: sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.23.0': - resolution: {integrity: sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==} + '@eslint/js@9.22.0': + resolution: {integrity: sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': @@ -2588,9 +2585,8 @@ packages: resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@evilmartians/lefthook@1.11.6': - resolution: {integrity: sha512-8KwNp1gkVeNuORjYT990AomxV9QTTangWvPcuNWz7okpdC9LdBw79We/218pLqddpUXmg/XCFOysc4vE6O+2fg==} - cpu: [x64, arm64, ia32] + '@evilmartians/lefthook@1.11.3': + resolution: {integrity: sha512-ic3gCgCnm7XQCxGLsnLXU+33J86iFuC5r4JYSWrMXo0rTjGT6EqKKpSDuA0r/1F14VZmdgmvRUTXTBOvXA2UXA==} os: [darwin, linux, win32] hasBin: true @@ -2895,8 +2891,8 @@ packages: cpu: [x64] os: [win32] - '@infisical/sdk@3.0.7': - resolution: {integrity: sha512-OBWf5K/awl6iZxyLXlWNygBI5weNLEStsYVZlP430yl4CG605TML+Qb9ZDTTfxnszhGr6WjtyXoRYzgCWWlI8w==} + '@infisical/sdk@3.0.6': + resolution: {integrity: sha512-kLKRc2CvvjBkYvakOQjdFeRytmiExZLTv8RITT1myn1pVkLuQBhPwzMU9se4gMsyo9IatmU0OpCnZfkmQOG9Ug==} '@inquirer/confirm@5.1.8': resolution: {integrity: sha512-dNLWCYZvXDjO3rnQfk2iuJNL4Ivwz/T2+C3+WnNfJKsNGSuOs3wAo2F6e0p946gtSAk31nZMfW+MRmYaplPKsg==} @@ -3757,8 +3753,8 @@ packages: '@octokit/openapi-types@20.0.0': resolution: {integrity: sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==} - '@octokit/openapi-types@24.2.0': - resolution: {integrity: sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==} + '@octokit/openapi-types@23.0.1': + resolution: {integrity: sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==} '@octokit/plugin-paginate-rest@9.2.2': resolution: {integrity: sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ==} @@ -3772,8 +3768,8 @@ packages: peerDependencies: '@octokit/core': '5' - '@octokit/plugin-rest-endpoint-methods@13.5.0': - resolution: {integrity: sha512-9Pas60Iv9ejO3WlAX3maE1+38c5nqbJXV5GrncEfkndIpZrJ/WPMRd2xYDcPPEt5yzpxcjw9fWNoPhsSGzqKqw==} + '@octokit/plugin-rest-endpoint-methods@13.3.1': + resolution: {integrity: sha512-o8uOBdsyR+WR8MK9Cco8dCgvG13H1RlM1nWnK/W7TEACQBFux/vPREgKucxUfuDQ5yi1T3hGf4C5ZmZXAERgwQ==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': '>=6' @@ -3797,8 +3793,8 @@ packages: '@octokit/types@12.6.0': resolution: {integrity: sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==} - '@octokit/types@13.10.0': - resolution: {integrity: sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==} + '@octokit/types@13.8.0': + resolution: {integrity: sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==} '@octokit/webhooks-types@7.6.1': resolution: {integrity: sha512-S8u2cJzklBC0FgTwWVLaM8tMrDuDMVE4xiTK4EYXM9GntyvrdbSoxqDQa+Fh57CCNApyIpyeqPhhFEmHPfrXgw==} @@ -4051,8 +4047,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.51.1': - resolution: {integrity: sha512-nM+kEaTSAoVlXmMPH10017vn3FSiFqr/bh4fKg9vmAdMfd9SDqRZNvPSiAHADc/itWak+qPvMPZQOPwCBW7k7Q==} + '@playwright/test@1.51.0': + resolution: {integrity: sha512-dJ0dMbZeHhI+wb77+ljx/FeC8VBP6j/rj9OAojO08JI80wTZy6vRk9KvHKiDCUh4iMpEiseMgqRBIeW+eKX6RA==} engines: {node: '>=18'} hasBin: true @@ -4379,6 +4375,19 @@ packages: '@types/react': optional: true + '@radix-ui/react-tooltip@1.1.8': + resolution: {integrity: sha512-YAA2cu48EkJZdAMHC0dqo9kialOcRStbtiY4nJPaht7Ptrhcvpo+eDChaM6BIs8kL6a8Z5l5poiqLnXcNduOkA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: 19.0.0 + react-dom: 19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-use-callback-ref@1.1.0': resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} peerDependencies: @@ -5182,81 +5191,81 @@ packages: resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} engines: {node: '>=14.16'} - '@tailwindcss/node@4.1.3': - resolution: {integrity: sha512-H/6r6IPFJkCfBJZ2dKZiPJ7Ueb2wbL592+9bQEl2r73qbX6yGnmQVIfiUvDRB2YI0a3PWDrzUwkvQx1XW1bNkA==} + '@tailwindcss/node@4.0.17': + resolution: {integrity: sha512-LIdNwcqyY7578VpofXyqjH6f+3fP4nrz7FBLki5HpzqjYfXdF2m/eW18ZfoKePtDGg90Bvvfpov9d2gy5XVCbg==} - '@tailwindcss/oxide-android-arm64@4.1.3': - resolution: {integrity: sha512-cxklKjtNLwFl3mDYw4XpEfBY+G8ssSg9ADL4Wm6//5woi3XGqlxFsnV5Zb6v07dxw1NvEX2uoqsxO/zWQsgR+g==} + '@tailwindcss/oxide-android-arm64@4.0.17': + resolution: {integrity: sha512-3RfO0ZK64WAhop+EbHeyxGThyDr/fYhxPzDbEQjD2+v7ZhKTb2svTWy+KK+J1PHATus2/CQGAGp7pHY/8M8ugg==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.1.3': - resolution: {integrity: sha512-mqkf2tLR5VCrjBvuRDwzKNShRu99gCAVMkVsaEOFvv6cCjlEKXRecPu9DEnxp6STk5z+Vlbh1M5zY3nQCXMXhw==} + '@tailwindcss/oxide-darwin-arm64@4.0.17': + resolution: {integrity: sha512-e1uayxFQCCDuzTk9s8q7MC5jFN42IY7nzcr5n0Mw/AcUHwD6JaBkXnATkD924ZsHyPDvddnusIEvkgLd2CiREg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.1.3': - resolution: {integrity: sha512-7sGraGaWzXvCLyxrc7d+CCpUN3fYnkkcso3rCzwUmo/LteAl2ZGCDlGvDD8Y/1D3ngxT8KgDj1DSwOnNewKhmg==} + '@tailwindcss/oxide-darwin-x64@4.0.17': + resolution: {integrity: sha512-d6z7HSdOKfXQ0HPlVx1jduUf/YtBuCCtEDIEFeBCzgRRtDsUuRtofPqxIVaSCUTOk5+OfRLonje6n9dF6AH8wQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.1.3': - resolution: {integrity: sha512-E2+PbcbzIReaAYZe997wb9rId246yDkCwAakllAWSGqe6VTg9hHle67hfH6ExjpV2LSK/siRzBUs5wVff3RW9w==} + '@tailwindcss/oxide-freebsd-x64@4.0.17': + resolution: {integrity: sha512-EjrVa6lx3wzXz3l5MsdOGtYIsRjgs5Mru6lDv4RuiXpguWeOb3UzGJ7vw7PEzcFadKNvNslEQqoAABeMezprxQ==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.3': - resolution: {integrity: sha512-GvfbJ8wjSSjbLFFE3UYz4Eh8i4L6GiEYqCtA8j2Zd2oXriPuom/Ah/64pg/szWycQpzRnbDiJozoxFU2oJZyfg==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.17': + resolution: {integrity: sha512-65zXfCOdi8wuaY0Ye6qMR5LAXokHYtrGvo9t/NmxvSZtCCitXV/gzJ/WP5ksXPhff1SV5rov0S+ZIZU+/4eyCQ==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.1.3': - resolution: {integrity: sha512-35UkuCWQTeG9BHcBQXndDOrpsnt3Pj9NVIB4CgNiKmpG8GnCNXeMczkUpOoqcOhO6Cc/mM2W7kaQ/MTEENDDXg==} + '@tailwindcss/oxide-linux-arm64-gnu@4.0.17': + resolution: {integrity: sha512-+aaq6hJ8ioTdbJV5IA1WjWgLmun4T7eYLTvJIToiXLHy5JzUERRbIZjAcjgK9qXMwnvuu7rqpxzej+hGoEcG5g==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-arm64-musl@4.1.3': - resolution: {integrity: sha512-dm18aQiML5QCj9DQo7wMbt1Z2tl3Giht54uVR87a84X8qRtuXxUqnKQkRDK5B4bCOmcZ580lF9YcoMkbDYTXHQ==} + '@tailwindcss/oxide-linux-arm64-musl@4.0.17': + resolution: {integrity: sha512-/FhWgZCdUGAeYHYnZKekiOC0aXFiBIoNCA0bwzkICiMYS5Rtx2KxFfMUXQVnl4uZRblG5ypt5vpPhVaXgGk80w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-x64-gnu@4.1.3': - resolution: {integrity: sha512-LMdTmGe/NPtGOaOfV2HuO7w07jI3cflPrVq5CXl+2O93DCewADK0uW1ORNAcfu2YxDUS035eY2W38TxrsqngxA==} + '@tailwindcss/oxide-linux-x64-gnu@4.0.17': + resolution: {integrity: sha512-gELJzOHK6GDoIpm/539Golvk+QWZjxQcbkKq9eB2kzNkOvrP0xc5UPgO9bIMNt1M48mO8ZeNenCMGt6tfkvVBg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-linux-x64-musl@4.1.3': - resolution: {integrity: sha512-aalNWwIi54bbFEizwl1/XpmdDrOaCjRFQRgtbv9slWjmNPuJJTIKPHf5/XXDARc9CneW9FkSTqTbyvNecYAEGw==} + '@tailwindcss/oxide-linux-x64-musl@4.0.17': + resolution: {integrity: sha512-68NwxcJrZn94IOW4TysMIbYv5AlM6So1luTlbYUDIGnKma1yTFGBRNEJ+SacJ3PZE2rgcTBNRHX1TB4EQ/XEHw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-win32-arm64-msvc@4.1.3': - resolution: {integrity: sha512-PEj7XR4OGTGoboTIAdXicKuWl4EQIjKHKuR+bFy9oYN7CFZo0eu74+70O4XuERX4yjqVZGAkCdglBODlgqcCXg==} + '@tailwindcss/oxide-win32-arm64-msvc@4.0.17': + resolution: {integrity: sha512-AkBO8efP2/7wkEXkNlXzRD4f/7WerqKHlc6PWb5v0jGbbm22DFBLbIM19IJQ3b+tNewQZa+WnPOaGm0SmwMNjw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.1.3': - resolution: {integrity: sha512-T8gfxECWDBENotpw3HR9SmNiHC9AOJdxs+woasRZ8Q/J4VHN0OMs7F+4yVNZ9EVN26Wv6mZbK0jv7eHYuLJLwA==} + '@tailwindcss/oxide-win32-x64-msvc@4.0.17': + resolution: {integrity: sha512-7/DTEvXcoWlqX0dAlcN0zlmcEu9xSermuo7VNGX9tJ3nYMdo735SHvbrHDln1+LYfF6NhJ3hjbpbjkMOAGmkDg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.1.3': - resolution: {integrity: sha512-t16lpHCU7LBxDe/8dCj9ntyNpXaSTAgxWm1u2XQP5NiIu4KGSyrDJJRlK9hJ4U9yJxx0UKCVI67MJWFNll5mOQ==} + '@tailwindcss/oxide@4.0.17': + resolution: {integrity: sha512-B4OaUIRD2uVrULpAD1Yksx2+wNarQr2rQh65nXqaqbLY1jCd8fO+3KLh/+TH4Hzh2NTHQvgxVbPdUDOtLk7vAw==} engines: {node: '>= 10'} - '@tailwindcss/postcss@4.1.3': - resolution: {integrity: sha512-6s5nJODm98F++QT49qn8xJKHQRamhYHfMi3X7/ltxiSQ9dyRsaFSfFkfaMsanWzf+TMYQtbk8mt5f6cCVXJwfg==} + '@tailwindcss/postcss@4.0.17': + resolution: {integrity: sha512-qeJbRTB5FMZXmuJF+eePd235EGY6IyJZF0Bh0YM6uMcCI4L9Z7dy+lPuLAhxOJzxnajsbjPoDAKOuAqZRtf1PQ==} '@tailwindcss/typography@0.5.16': resolution: {integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==} @@ -5539,8 +5548,8 @@ packages: '@types/superagent@8.1.9': resolution: {integrity: sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==} - '@types/supertest@6.0.3': - resolution: {integrity: sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w==} + '@types/supertest@6.0.2': + resolution: {integrity: sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==} '@types/tape@5.8.1': resolution: {integrity: sha512-vRjK+E1c+I4WRDSXcYfgepPjz2Knh+gulU3359LrR9H2KM8AyiMbNmX7W5aMlw7JFoXMpVOhq3bEIm78qakGbQ==} @@ -6147,8 +6156,8 @@ packages: resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} engines: {node: '>=4'} - axios@1.8.4: - resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==} + axios@1.8.3: + resolution: {integrity: sha512-iP4DebzoNlP/YN2dpwCgb8zoCmhtkajzS48JvwmkSkXvPI3DHc7m+XYL5tGnSlJtR6nImXZmdCuN5aP8dh1d8A==} axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} @@ -6492,8 +6501,8 @@ packages: cjs-module-lexer@1.4.3: resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} - class-variance-authority@0.7.1: - resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + class-variance-authority@0.7.0: + resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} classnames@2.5.1: resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} @@ -6545,6 +6554,10 @@ packages: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} + clsx@2.0.0: + resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} + engines: {node: '>=6'} + clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} @@ -8387,8 +8400,8 @@ packages: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} - hono@4.7.5: - resolution: {integrity: sha512-fDOK5W2C1vZACsgLONigdZTRZxuBqFtcKh7bUQ5cVSbwI2RWjloJDcgFOVzbQrlI6pCmhlTsVYZ7zpLj4m4qMQ==} + hono@4.7.4: + resolution: {integrity: sha512-Pst8FuGqz3L7tFF+u9Pu70eI0xa5S3LPUmrNd5Jm8nTHze9FxLTK9Kaj5g/k4UcwuJSXTP65SyHOPLrffpcAJg==} engines: {node: '>=16.9.0'} hosted-git-info@6.1.3: @@ -9900,10 +9913,6 @@ packages: resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} engines: {node: '>= 0.6'} - mime-db@1.54.0: - resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} - engines: {node: '>= 0.6'} - mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} @@ -10128,8 +10137,8 @@ packages: nan@2.22.2: resolution: {integrity: sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==} - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + nanoid@3.3.9: + resolution: {integrity: sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -10740,13 +10749,13 @@ packages: resolution: {integrity: sha512-8xCNE/aT/EXKenuMDZ+xTVwkT8gsoHN2z/Q29l80u0ppGEXVvsKRzNMbtKhg8LS8k1tJLAHHylf6p4VFmP6XUQ==} engines: {node: '>= 0.4.0'} - playwright-core@1.51.1: - resolution: {integrity: sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw==} + playwright-core@1.51.0: + resolution: {integrity: sha512-x47yPE3Zwhlil7wlNU/iktF7t2r/URR3VLbH6EknJd/04Qc/PSJ0EY3CMXipmglLG+zyRxW6HNo2EGbKLHPWMg==} engines: {node: '>=18'} hasBin: true - playwright@1.51.1: - resolution: {integrity: sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw==} + playwright@1.51.0: + resolution: {integrity: sha512-442pTfGM0xxfCYxuBa/Pu6B2OqxqqaYq39JS8QDMGThUvIOCd6s0ANDog3uwA0cHavVlnTQzGCN7Id2YekDSXA==} engines: {node: '>=18'} hasBin: true @@ -11003,8 +11012,8 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.3: - resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + postcss@8.5.2: + resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} engines: {node: ^10 || ^12 || >=14} postgres-array@2.0.0: @@ -11825,8 +11834,8 @@ packages: setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - shadcn@2.4.0-canary.20: - resolution: {integrity: sha512-FJYmwgV2Iw6f5VHZYwg3CJkMxLVDVXJgJoXaOacF8XqARCAHyy6JD3Irdbmmv9vYtGIsIzzShprJnTie4kse8Q==} + shadcn@2.4.0-canary.18: + resolution: {integrity: sha512-S5Gl/4yASEh0ZNun7vPU28DtR3Y4tdoEFKYw4qxJS3/I3fdEzVtDKrHqXjVqJcMb3vV+sYr5NsL/YdmGhoezHA==} hasBin: true shallow-clone@3.0.1: @@ -11943,8 +11952,8 @@ packages: react: 19.0.0 react-dom: 19.0.0 - sonner@2.0.3: - resolution: {integrity: sha512-njQ4Hht92m0sMqqHVDL32V2Oun9W1+PHO9NDv9FHfJjT3JT22IG4Jpo3FPQy+mouRKCXFWO+r67v6MrHX2zeIA==} + sonner@2.0.1: + resolution: {integrity: sha512-FRBphaehZ5tLdLcQ8g2WOIRE+Y7BCfWi5Zyd8bCvBjiW8TxxAyoWZIxS661Yz6TGPqFQ4VLzOF89WEYhfynSFQ==} peerDependencies: react: 19.0.0 react-dom: 19.0.0 @@ -12243,8 +12252,8 @@ packages: resolution: {integrity: sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==} engines: {node: '>=14.18.0'} - supertest@7.1.0: - resolution: {integrity: sha512-5QeSO8hSrKghtcWEoPiO036fxH0Ii2wVQfFZSP0oqQhmjk8bOLhDFXr4JrvaFmPuEWUoq4znY3uSi8UzLKxGqw==} + supertest@7.0.0: + resolution: {integrity: sha512-qlsr7fIC0lSddmA3tzojvzubYxvlGtzumcdHgPwbFWMISQwL22MhM2Y3LNt+6w9Yyx7559VW5ab70dgphm8qQA==} engines: {node: '>=14.18.0'} supports-color@5.5.0: @@ -12284,13 +12293,8 @@ packages: tailwind-merge@3.1.0: resolution: {integrity: sha512-aV27Oj8B7U/tAOMhJsSGdWqelfmudnGMdXIlMnk1JfsjwSjts6o8HyfN7SFH3EztzH4YH8kk6GbLTHzITJO39Q==} - tailwindcss-animate@1.0.7: - resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} - peerDependencies: - tailwindcss: '>=3.0.0 || insiders' - - tailwindcss@4.1.3: - resolution: {integrity: sha512-2Q+rw9vy1WFXu5cIxlvsabCwhU2qUwodGq03ODhLJ0jW4ek5BUtoCsnLB0qG+m8AHgEsSJcJGDSDe06FXlP74g==} + tailwindcss@4.0.17: + resolution: {integrity: sha512-OErSiGzRa6rLiOvaipsDZvLMSpsBZ4ysB4f0VKGXUrjw2jfkJRd6kjRKV2+ZmTCNvwtvgdDam5D7w6WXsdLJZw==} tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} @@ -12504,8 +12508,8 @@ packages: typescript: optional: true - ts-jest@29.3.1: - resolution: {integrity: sha512-FT2PIRtZABwl6+ZCry8IY7JZ3xMuppsEV9qFVHOVe8jDzggwUZ9TsM4chyJxL9yi6LvkqcZYU3LmapEE454zBQ==} + ts-jest@29.2.6: + resolution: {integrity: sha512-yTNZVZqc8lSixm+QGVFcPe6+yj7+TWZwIesuOWvfcn4B9bz5x4NDzVCQQjOs7Hfouu36aEqfEbo9Qpo+gq8dDg==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -12630,8 +12634,8 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - type-fest@4.39.1: - resolution: {integrity: sha512-uW9qzd66uyHYxwyVBYiwS4Oi0qZyUqwjU+Oevr6ZogYiXt99EOYtwvzMSLw1c3lYo2HzJsep/NB23iEVEgjG/w==} + type-fest@4.37.0: + resolution: {integrity: sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==} engines: {node: '>=16'} type-is@1.6.18: @@ -14783,10 +14787,10 @@ snapshots: '@types/tough-cookie': 4.0.5 tough-cookie: 4.1.4 - '@cdwr/nx-payload@2.0.0(@nx/devkit@20.4.5(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))))(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@cdwr/nx-payload@2.0.0(@nx/devkit@20.4.5(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))))(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@nx/devkit': 20.4.5(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))) - next: 15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1) + next: 15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1) payload: 3.28.1(graphql@16.10.0)(typescript@5.7.3) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) @@ -14920,16 +14924,14 @@ snapshots: '@conform-to/dom@1.2.2': {} - '@conform-to/dom@1.3.0': {} - '@conform-to/react@1.2.2(react@19.0.0)': dependencies: '@conform-to/dom': 1.2.2 react: 19.0.0 - '@conform-to/zod@1.3.0(zod@3.24.2)': + '@conform-to/zod@1.2.2(zod@3.24.2)': dependencies: - '@conform-to/dom': 1.3.0 + '@conform-to/dom': 1.2.2 zod: 3.24.2 '@cspotcode/source-map-support@0.8.1': @@ -15546,7 +15548,7 @@ snapshots: '@eslint-community/regexpp@4.12.1': {} - '@eslint/compat@1.2.8(eslint@9.20.1(jiti@2.4.2))': + '@eslint/compat@1.2.7(eslint@9.20.1(jiti@2.4.2))': optionalDependencies: eslint: 9.20.1(jiti@2.4.2) @@ -15596,7 +15598,7 @@ snapshots: '@eslint/js@9.20.0': {} - '@eslint/js@9.23.0': {} + '@eslint/js@9.22.0': {} '@eslint/object-schema@2.1.6': {} @@ -15605,7 +15607,7 @@ snapshots: '@eslint/core': 0.12.0 levn: 0.4.1 - '@evilmartians/lefthook@1.11.6': {} + '@evilmartians/lefthook@1.11.3': {} '@faceless-ui/modal@3.0.0-beta.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: @@ -15846,9 +15848,9 @@ snapshots: nan: 2.22.2 prebuild-install: 7.1.3 - '@hono/node-server@1.13.8(hono@4.7.5)': + '@hono/node-server@1.13.8(hono@4.7.4)': dependencies: - hono: 4.7.5 + hono: 4.7.4 '@hookform/resolvers@4.1.3(react-hook-form@7.54.2(react@19.0.0))': dependencies: @@ -15943,10 +15945,10 @@ snapshots: '@img/sharp-win32-x64@0.33.5': optional: true - '@infisical/sdk@3.0.7': + '@infisical/sdk@3.0.6': dependencies: aws-sdk: 2.1311.0 - axios: 1.8.4 + axios: 1.8.3 typescript: 5.7.3 zod: 3.24.2 transitivePeerDependencies: @@ -16433,7 +16435,7 @@ snapshots: '@module-federation/third-party-dts-extractor': 0.10.0 adm-zip: 0.5.16 ansi-colors: 4.1.3 - axios: 1.8.4 + axios: 1.8.3 chalk: 3.0.0 fs-extra: 9.1.0 isomorphic-ws: 5.0.0(ws@8.18.0) @@ -16458,7 +16460,7 @@ snapshots: '@module-federation/third-party-dts-extractor': 0.8.12 adm-zip: 0.5.16 ansi-colors: 4.1.3 - axios: 1.8.4 + axios: 1.8.3 chalk: 3.0.0 fs-extra: 9.1.0 isomorphic-ws: 5.0.0(ws@8.18.0) @@ -16583,18 +16585,18 @@ snapshots: - utf-8-validate - vue-tsc - '@module-federation/node@2.6.28(@rspack/core@1.2.8(@swc/helpers@0.5.15))(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12))': + '@module-federation/node@2.6.28(@rspack/core@1.2.8(@swc/helpers@0.5.15))(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12))': dependencies: '@module-federation/enhanced': 0.10.0(@rspack/core@1.2.8(@swc/helpers@0.5.15))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)) '@module-federation/runtime': 0.10.0 '@module-federation/sdk': 0.10.0 - '@module-federation/utilities': 3.1.46(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)) + '@module-federation/utilities': 3.1.46(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)) btoa: 1.2.1 encoding: 0.1.13 node-fetch: 2.7.0(encoding@0.1.13) webpack: 5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12) optionalDependencies: - next: 15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1) + next: 15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) transitivePeerDependencies: @@ -16706,12 +16708,12 @@ snapshots: fs-extra: 9.1.0 resolve: 1.22.8 - '@module-federation/utilities@3.1.46(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12))': + '@module-federation/utilities@3.1.46(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12))': dependencies: '@module-federation/sdk': 0.10.0 webpack: 5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12) optionalDependencies: - next: 15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1) + next: 15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) @@ -17107,10 +17109,10 @@ snapshots: - supports-color - typescript - '@nx/module-federation@20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(@types/node@22.14.0)(esbuild@0.19.12)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0))': + '@nx/module-federation@20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(@types/node@22.14.0)(esbuild@0.19.12)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0))': dependencies: '@module-federation/enhanced': 0.8.12(@rspack/core@1.2.8(@swc/helpers@0.5.15))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)) - '@module-federation/node': 2.6.28(@rspack/core@1.2.8(@swc/helpers@0.5.15))(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)) + '@module-federation/node': 2.6.28(@rspack/core@1.2.8(@swc/helpers@0.5.15))(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)) '@module-federation/sdk': 0.8.12 '@nx/devkit': 20.4.5(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))) '@nx/js': 20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0)) @@ -17144,13 +17146,13 @@ snapshots: - vue-tsc - webpack-cli - '@nx/next@20.4.5(@babel/core@7.26.10)(@babel/traverse@7.27.0)(@rspack/core@1.2.8(@swc/helpers@0.5.15))(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(@types/node@22.14.0)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.12)(eslint@9.20.1(jiti@2.4.2))(lightningcss@1.29.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0))(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12))': + '@nx/next@20.4.5(@babel/core@7.26.10)(@babel/traverse@7.27.0)(@rspack/core@1.2.8(@swc/helpers@0.5.15))(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(@types/node@22.14.0)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.12)(eslint@9.20.1(jiti@2.4.2))(lightningcss@1.29.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0))(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12))': dependencies: '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.10) '@nx/devkit': 20.4.5(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))) '@nx/eslint': 20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(@zkochan/js-yaml@0.0.7)(eslint@9.20.1(jiti@2.4.2))(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0)) '@nx/js': 20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0)) - '@nx/react': 20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(@types/node@22.14.0)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.12)(eslint@9.20.1(jiti@2.4.2))(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0))(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)) + '@nx/react': 20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(@types/node@22.14.0)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.12)(eslint@9.20.1(jiti@2.4.2))(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0))(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)) '@nx/web': 20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0)) '@nx/webpack': 20.4.5(@babel/traverse@7.27.0)(@rspack/core@1.2.8(@swc/helpers@0.5.15))(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(esbuild@0.19.12)(lightningcss@1.29.2)(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0)) '@phenomnomnominal/tsquery': 5.0.1(typescript@5.7.3) @@ -17158,7 +17160,7 @@ snapshots: copy-webpack-plugin: 10.2.4(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)) file-loader: 6.2.0(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)) ignore: 5.3.2 - next: 15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1) + next: 15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1) semver: 7.7.1 tslib: 2.8.1 webpack-merge: 5.10.0 @@ -17253,7 +17255,7 @@ snapshots: '@nx/nx-win32-x64-msvc@20.4.5': optional: true - '@nx/playwright@20.4.5(@babel/traverse@7.27.0)(@playwright/test@1.51.1)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(@zkochan/js-yaml@0.0.7)(eslint@9.20.1(jiti@2.4.2))(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0))': + '@nx/playwright@20.4.5(@babel/traverse@7.27.0)(@playwright/test@1.51.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(@zkochan/js-yaml@0.0.7)(eslint@9.20.1(jiti@2.4.2))(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0))': dependencies: '@nx/devkit': 20.4.5(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))) '@nx/eslint': 20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(@zkochan/js-yaml@0.0.7)(eslint@9.20.1(jiti@2.4.2))(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0)) @@ -17262,7 +17264,7 @@ snapshots: minimatch: 9.0.3 tslib: 2.8.1 optionalDependencies: - '@playwright/test': 1.51.1 + '@playwright/test': 1.51.0 transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -17301,12 +17303,12 @@ snapshots: - typescript - verdaccio - '@nx/react@20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(@types/node@22.14.0)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.12)(eslint@9.20.1(jiti@2.4.2))(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0))(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12))': + '@nx/react@20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(@types/node@22.14.0)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.12)(eslint@9.20.1(jiti@2.4.2))(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0))(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12))': dependencies: '@nx/devkit': 20.4.5(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))) '@nx/eslint': 20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(@zkochan/js-yaml@0.0.7)(eslint@9.20.1(jiti@2.4.2))(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0)) '@nx/js': 20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0)) - '@nx/module-federation': 20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(@types/node@22.14.0)(esbuild@0.19.12)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0)) + '@nx/module-federation': 20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(@types/node@22.14.0)(esbuild@0.19.12)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0)) '@nx/web': 20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0)) '@phenomnomnominal/tsquery': 5.0.1(typescript@5.7.3) '@svgr/webpack': 8.1.0(typescript@5.7.3) @@ -17343,11 +17345,11 @@ snapshots: - webpack - webpack-cli - '@nx/remix@20.4.5(gbzouizuwsr4agymd2ji5yagve)': + '@nx/remix@20.4.5(3gbui6sqs6aeb6d4staedatz7m)': dependencies: '@nx/devkit': 20.4.5(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))) '@nx/js': 20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0)) - '@nx/react': 20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(@types/node@22.14.0)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.12)(eslint@9.20.1(jiti@2.4.2))(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0))(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)) + '@nx/react': 20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(@types/node@22.14.0)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.12)(eslint@9.20.1(jiti@2.4.2))(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0))(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)) '@phenomnomnominal/tsquery': 5.0.1(typescript@5.7.3) '@remix-run/dev': 2.16.0(@remix-run/react@2.16.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3))(@types/node@22.14.0)(babel-plugin-macros@3.1.0)(less@4.1.3)(lightningcss@1.29.2)(sass@1.85.1)(stylus@0.64.0)(terser@5.39.0)(ts-node@10.9.2(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(typescript@5.7.3))(typescript@5.7.3)(vite@5.4.14(@types/node@22.14.0)(less@4.1.3)(lightningcss@1.29.2)(sass@1.85.1)(stylus@0.64.0)(terser@5.39.0)) tslib: 2.8.1 @@ -17427,7 +17429,7 @@ snapshots: '@nx/js': 20.4.5(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(nx@20.4.5(@swc-node/register@1.10.10(@swc/core@1.10.18(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.10.18(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@5.33.0(encoding@0.1.13)(typanion@3.14.0)) '@phenomnomnominal/tsquery': 5.0.1(typescript@5.7.3) ajv: 8.17.1 - autoprefixer: 10.4.20(postcss@8.5.3) + autoprefixer: 10.4.20(postcss@8.5.2) babel-loader: 9.2.1(@babel/core@7.26.10)(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)) browserslist: 4.24.4 copy-webpack-plugin: 10.2.4(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)) @@ -17441,9 +17443,9 @@ snapshots: mini-css-extract-plugin: 2.4.7(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)) parse5: 4.0.0 picocolors: 1.1.1 - postcss: 8.5.3 - postcss-import: 14.1.0(postcss@8.5.3) - postcss-loader: 6.2.1(postcss@8.5.3)(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)) + postcss: 8.5.2 + postcss-import: 14.1.0(postcss@8.5.2) + postcss-loader: 6.2.1(postcss@8.5.2)(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)) rxjs: 7.8.2 sass: 1.85.1 sass-loader: 12.6.0(sass@1.85.1)(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)) @@ -17510,7 +17512,7 @@ snapshots: '@octokit/graphql': 7.1.1 '@octokit/request': 8.4.1 '@octokit/request-error': 5.1.1 - '@octokit/types': 13.10.0 + '@octokit/types': 13.8.0 before-after-hook: 2.2.3 universal-user-agent: 6.0.1 @@ -17520,18 +17522,18 @@ snapshots: '@octokit/graphql': 8.2.1 '@octokit/request': 9.2.2 '@octokit/request-error': 6.1.7 - '@octokit/types': 13.10.0 + '@octokit/types': 13.8.0 before-after-hook: 3.0.2 universal-user-agent: 7.0.2 '@octokit/endpoint@10.1.3': dependencies: - '@octokit/types': 13.10.0 + '@octokit/types': 13.8.0 universal-user-agent: 7.0.2 '@octokit/endpoint@9.0.6': dependencies: - '@octokit/types': 13.10.0 + '@octokit/types': 13.8.0 universal-user-agent: 6.0.1 '@octokit/graphql-schema@15.26.0': @@ -17542,18 +17544,18 @@ snapshots: '@octokit/graphql@7.1.1': dependencies: '@octokit/request': 8.4.1 - '@octokit/types': 13.10.0 + '@octokit/types': 13.8.0 universal-user-agent: 6.0.1 '@octokit/graphql@8.2.1': dependencies: '@octokit/request': 9.2.2 - '@octokit/types': 13.10.0 + '@octokit/types': 13.8.0 universal-user-agent: 7.0.2 '@octokit/openapi-types@20.0.0': {} - '@octokit/openapi-types@24.2.0': {} + '@octokit/openapi-types@23.0.1': {} '@octokit/plugin-paginate-rest@9.2.2(@octokit/core@5.2.0)': dependencies: @@ -17565,33 +17567,33 @@ snapshots: '@octokit/core': 5.2.0 '@octokit/types': 12.6.0 - '@octokit/plugin-rest-endpoint-methods@13.5.0(@octokit/core@6.1.4)': + '@octokit/plugin-rest-endpoint-methods@13.3.1(@octokit/core@6.1.4)': dependencies: '@octokit/core': 6.1.4 - '@octokit/types': 13.10.0 + '@octokit/types': 13.8.0 '@octokit/request-error@5.1.1': dependencies: - '@octokit/types': 13.10.0 + '@octokit/types': 13.8.0 deprecation: 2.3.1 once: 1.4.0 '@octokit/request-error@6.1.7': dependencies: - '@octokit/types': 13.10.0 + '@octokit/types': 13.8.0 '@octokit/request@8.4.1': dependencies: '@octokit/endpoint': 9.0.6 '@octokit/request-error': 5.1.1 - '@octokit/types': 13.10.0 + '@octokit/types': 13.8.0 universal-user-agent: 6.0.1 '@octokit/request@9.2.2': dependencies: '@octokit/endpoint': 10.1.3 '@octokit/request-error': 6.1.7 - '@octokit/types': 13.10.0 + '@octokit/types': 13.8.0 fast-content-type-parse: 2.0.1 universal-user-agent: 7.0.2 @@ -17599,9 +17601,9 @@ snapshots: dependencies: '@octokit/openapi-types': 20.0.0 - '@octokit/types@13.10.0': + '@octokit/types@13.8.0': dependencies: - '@octokit/openapi-types': 24.2.0 + '@octokit/openapi-types': 23.0.1 '@octokit/webhooks-types@7.6.1': {} @@ -17825,12 +17827,12 @@ snapshots: transitivePeerDependencies: - typescript - '@payloadcms/next@3.28.1(@types/react@19.0.0)(graphql@16.10.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)': + '@payloadcms/next@3.28.1(@types/react@19.0.0)(graphql@16.10.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)': dependencies: '@dnd-kit/core': 6.0.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@payloadcms/graphql': 3.28.1(graphql@16.10.0)(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(typescript@5.7.3) '@payloadcms/translations': 3.28.1 - '@payloadcms/ui': 3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) + '@payloadcms/ui': 3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) busboy: 1.6.0 dequal: 2.0.3 file-type: 19.3.0 @@ -17838,7 +17840,7 @@ snapshots: graphql-http: 1.22.4(graphql@16.10.0) graphql-playground-html: 1.6.30 http-status: 2.1.0 - next: 15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1) + next: 15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1) path-to-regexp: 6.3.0 payload: 3.28.1(graphql@16.10.0)(typescript@5.7.3) qs-esm: 7.0.2 @@ -17853,9 +17855,9 @@ snapshots: - supports-color - typescript - '@payloadcms/plugin-cloud-storage@3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)': + '@payloadcms/plugin-cloud-storage@3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)': dependencies: - '@payloadcms/ui': 3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) + '@payloadcms/ui': 3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) find-node-modules: 2.1.3 payload: 3.28.1(graphql@16.10.0)(typescript@5.7.3) range-parser: 1.2.1 @@ -17868,9 +17870,9 @@ snapshots: - supports-color - typescript - '@payloadcms/plugin-form-builder@3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)': + '@payloadcms/plugin-form-builder@3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)': dependencies: - '@payloadcms/ui': 3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) + '@payloadcms/ui': 3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) escape-html: 1.0.3 payload: 3.28.1(graphql@16.10.0)(typescript@5.7.3) react: 19.0.0 @@ -17882,16 +17884,16 @@ snapshots: - supports-color - typescript - '@payloadcms/plugin-multi-tenant@3.28.1(@payloadcms/ui@3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3))(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))': + '@payloadcms/plugin-multi-tenant@3.28.1(@payloadcms/ui@3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3))(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))': dependencies: - '@payloadcms/ui': 3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) - next: 15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1) + '@payloadcms/ui': 3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) + next: 15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1) payload: 3.28.1(graphql@16.10.0)(typescript@5.7.3) - '@payloadcms/plugin-seo@3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)': + '@payloadcms/plugin-seo@3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)': dependencies: '@payloadcms/translations': 3.28.1 - '@payloadcms/ui': 3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) + '@payloadcms/ui': 3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) payload: 3.28.1(graphql@16.10.0)(typescript@5.7.3) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) @@ -17902,7 +17904,7 @@ snapshots: - supports-color - typescript - '@payloadcms/richtext-lexical@3.28.1(@faceless-ui/modal@3.0.0-beta.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@faceless-ui/scroll-info@2.0.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@payloadcms/next@3.28.1(@types/react@19.0.0)(graphql@16.10.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3))(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(yjs@13.6.24)': + '@payloadcms/richtext-lexical@3.28.1(@faceless-ui/modal@3.0.0-beta.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@faceless-ui/scroll-info@2.0.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@payloadcms/next@3.28.1(@types/react@19.0.0)(graphql@16.10.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3))(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)(yjs@13.6.24)': dependencies: '@faceless-ui/modal': 3.0.0-beta.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@faceless-ui/scroll-info': 2.0.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -17916,9 +17918,9 @@ snapshots: '@lexical/selection': 0.27.1 '@lexical/table': 0.27.1 '@lexical/utils': 0.27.1 - '@payloadcms/next': 3.28.1(@types/react@19.0.0)(graphql@16.10.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) + '@payloadcms/next': 3.28.1(@types/react@19.0.0)(graphql@16.10.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) '@payloadcms/translations': 3.28.1 - '@payloadcms/ui': 3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) + '@payloadcms/ui': 3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) '@types/uuid': 10.0.0 acorn: 8.12.1 bson-objectid: 2.0.4 @@ -17944,12 +17946,12 @@ snapshots: - typescript - yjs - '@payloadcms/storage-s3@3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)': + '@payloadcms/storage-s3@3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)': dependencies: '@aws-sdk/client-s3': 3.758.0 '@aws-sdk/lib-storage': 3.758.0(@aws-sdk/client-s3@3.758.0) '@aws-sdk/s3-request-presigner': 3.758.0 - '@payloadcms/plugin-cloud-storage': 3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) + '@payloadcms/plugin-cloud-storage': 3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) payload: 3.28.1(graphql@16.10.0)(typescript@5.7.3) transitivePeerDependencies: - '@types/react' @@ -17965,7 +17967,7 @@ snapshots: dependencies: date-fns: 4.1.0 - '@payloadcms/ui@3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)': + '@payloadcms/ui@3.28.1(@types/react@19.0.0)(monaco-editor@0.52.2)(next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1))(payload@3.28.1(graphql@16.10.0)(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)': dependencies: '@date-fns/tz': 1.2.0 '@dnd-kit/core': 6.0.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -17979,7 +17981,7 @@ snapshots: date-fns: 4.1.0 dequal: 2.0.3 md5: 2.3.0 - next: 15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1) + next: 15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1) object-to-formdata: 4.5.1 payload: 3.28.1(graphql@16.10.0)(typescript@5.7.3) qs-esm: 7.0.2 @@ -18007,11 +18009,11 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.51.1': + '@playwright/test@1.51.0': dependencies: - playwright: 1.51.1 + playwright: 1.51.0 - '@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.2)(type-fest@4.39.1)(webpack-dev-server@5.2.0(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)))(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12))': + '@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.2)(type-fest@4.37.0)(webpack-dev-server@5.2.0(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)))(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12))': dependencies: ansi-html: 0.0.9 core-js-pure: 3.41.0 @@ -18023,7 +18025,7 @@ snapshots: source-map: 0.7.4 webpack: 5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12) optionalDependencies: - type-fest: 4.39.1 + type-fest: 4.37.0 webpack-dev-server: 5.2.0(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)) '@polka/url@1.0.0-next.28': {} @@ -18341,6 +18343,26 @@ snapshots: optionalDependencies: '@types/react': 19.0.0 + '@radix-ui/react-tooltip@1.1.8(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.0)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.0)(react@19.0.0) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.0)(react@19.0.0) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-slot': 1.1.2(@types/react@19.0.0)(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.0)(react@19.0.0) + '@radix-ui/react-visually-hidden': 1.1.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.0 + '@types/react-dom': 19.0.0 + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.0.0)(react@19.0.0)': dependencies: react: 19.0.0 @@ -18490,10 +18512,10 @@ snapshots: picocolors: 1.1.1 picomatch: 2.3.1 pidtree: 0.6.0 - postcss: 8.5.3 - postcss-discard-duplicates: 5.1.0(postcss@8.5.3) - postcss-load-config: 4.0.2(postcss@8.5.3)(ts-node@10.9.2(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(typescript@5.7.3)) - postcss-modules: 6.0.1(postcss@8.5.3) + postcss: 8.5.2 + postcss-discard-duplicates: 5.1.0(postcss@8.5.2) + postcss-load-config: 4.0.2(postcss@8.5.2)(ts-node@10.9.2(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(typescript@5.7.3)) + postcss-modules: 6.0.1(postcss@8.5.2) prettier: 2.8.8 pretty-ms: 7.0.1 react-refresh: 0.14.2 @@ -19282,75 +19304,75 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tailwindcss/node@4.1.3': + '@tailwindcss/node@4.0.17': dependencies: enhanced-resolve: 5.18.1 jiti: 2.4.2 - lightningcss: 1.29.2 - tailwindcss: 4.1.3 + tailwindcss: 4.0.17 - '@tailwindcss/oxide-android-arm64@4.1.3': + '@tailwindcss/oxide-android-arm64@4.0.17': optional: true - '@tailwindcss/oxide-darwin-arm64@4.1.3': + '@tailwindcss/oxide-darwin-arm64@4.0.17': optional: true - '@tailwindcss/oxide-darwin-x64@4.1.3': + '@tailwindcss/oxide-darwin-x64@4.0.17': optional: true - '@tailwindcss/oxide-freebsd-x64@4.1.3': + '@tailwindcss/oxide-freebsd-x64@4.0.17': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.3': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.17': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.1.3': + '@tailwindcss/oxide-linux-arm64-gnu@4.0.17': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.1.3': + '@tailwindcss/oxide-linux-arm64-musl@4.0.17': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.1.3': + '@tailwindcss/oxide-linux-x64-gnu@4.0.17': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.1.3': + '@tailwindcss/oxide-linux-x64-musl@4.0.17': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.1.3': + '@tailwindcss/oxide-win32-arm64-msvc@4.0.17': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.1.3': + '@tailwindcss/oxide-win32-x64-msvc@4.0.17': optional: true - '@tailwindcss/oxide@4.1.3': + '@tailwindcss/oxide@4.0.17': optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.1.3 - '@tailwindcss/oxide-darwin-arm64': 4.1.3 - '@tailwindcss/oxide-darwin-x64': 4.1.3 - '@tailwindcss/oxide-freebsd-x64': 4.1.3 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.3 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.3 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.3 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.3 - '@tailwindcss/oxide-linux-x64-musl': 4.1.3 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.3 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.3 - - '@tailwindcss/postcss@4.1.3': + '@tailwindcss/oxide-android-arm64': 4.0.17 + '@tailwindcss/oxide-darwin-arm64': 4.0.17 + '@tailwindcss/oxide-darwin-x64': 4.0.17 + '@tailwindcss/oxide-freebsd-x64': 4.0.17 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.0.17 + '@tailwindcss/oxide-linux-arm64-gnu': 4.0.17 + '@tailwindcss/oxide-linux-arm64-musl': 4.0.17 + '@tailwindcss/oxide-linux-x64-gnu': 4.0.17 + '@tailwindcss/oxide-linux-x64-musl': 4.0.17 + '@tailwindcss/oxide-win32-arm64-msvc': 4.0.17 + '@tailwindcss/oxide-win32-x64-msvc': 4.0.17 + + '@tailwindcss/postcss@4.0.17': dependencies: '@alloc/quick-lru': 5.2.0 - '@tailwindcss/node': 4.1.3 - '@tailwindcss/oxide': 4.1.3 - postcss: 8.5.3 - tailwindcss: 4.1.3 + '@tailwindcss/node': 4.0.17 + '@tailwindcss/oxide': 4.0.17 + lightningcss: 1.29.2 + postcss: 8.5.2 + tailwindcss: 4.0.17 - '@tailwindcss/typography@0.5.16(tailwindcss@4.1.3)': + '@tailwindcss/typography@0.5.16(tailwindcss@4.0.17)': dependencies: lodash.castarray: 4.4.0 lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 4.1.3 + tailwindcss: 4.0.17 '@tanstack/react-virtual@3.13.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: @@ -19680,7 +19702,7 @@ snapshots: '@types/node': 22.14.0 form-data: 4.0.2 - '@types/supertest@6.0.3': + '@types/supertest@6.0.2': dependencies: '@types/methods': 1.1.4 '@types/superagent': 8.1.9 @@ -20497,14 +20519,14 @@ snapshots: atomic-sleep@1.0.0: {} - autoprefixer@10.4.20(postcss@8.5.3): + autoprefixer@10.4.20(postcss@8.5.2): dependencies: browserslist: 4.24.4 caniuse-lite: 1.0.30001704 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 - postcss: 8.5.3 + postcss: 8.5.2 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -20530,7 +20552,7 @@ snapshots: axe-core@4.10.3: {} - axios@1.8.4: + axios@1.8.3: dependencies: follow-redirects: 1.15.9(debug@4.4.0) form-data: 4.0.2 @@ -20949,9 +20971,9 @@ snapshots: cjs-module-lexer@1.4.3: {} - class-variance-authority@0.7.1: + class-variance-authority@0.7.0: dependencies: - clsx: 2.1.1 + clsx: 2.0.0 classnames@2.5.1: {} @@ -20997,6 +21019,8 @@ snapshots: clone@1.0.4: {} + clsx@2.0.0: {} + clsx@2.1.1: {} co@4.6.0: {} @@ -21238,7 +21262,7 @@ snapshots: create-nx-workspace@20.4.5: dependencies: - axios: 1.8.4 + axios: 1.8.3 chalk: 4.1.2 enquirer: 2.3.6 flat: 5.0.2 @@ -21269,18 +21293,18 @@ snapshots: crypt@0.0.2: {} - css-declaration-sorter@7.2.0(postcss@8.5.3): + css-declaration-sorter@7.2.0(postcss@8.5.2): dependencies: - postcss: 8.5.3 + postcss: 8.5.2 css-loader@6.11.0(@rspack/core@1.2.8(@swc/helpers@0.5.15))(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)): dependencies: - icss-utils: 5.1.0(postcss@8.5.3) - postcss: 8.5.3 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.3) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.3) - postcss-modules-scope: 3.2.1(postcss@8.5.3) - postcss-modules-values: 4.0.0(postcss@8.5.3) + icss-utils: 5.1.0(postcss@8.5.2) + postcss: 8.5.2 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.2) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.2) + postcss-modules-scope: 3.2.1(postcss@8.5.2) + postcss-modules-values: 4.0.0(postcss@8.5.2) postcss-value-parser: 4.2.0 semver: 7.7.1 optionalDependencies: @@ -21290,9 +21314,9 @@ snapshots: css-minimizer-webpack-plugin@5.0.1(esbuild@0.19.12)(lightningcss@1.29.2)(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)): dependencies: '@jridgewell/trace-mapping': 0.3.25 - cssnano: 6.1.2(postcss@8.5.3) + cssnano: 6.1.2(postcss@8.5.2) jest-worker: 29.7.0 - postcss: 8.5.3 + postcss: 8.5.2 schema-utils: 4.3.0 serialize-javascript: 6.0.2 webpack: 5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12) @@ -21326,49 +21350,49 @@ snapshots: cssfilter@0.0.10: {} - cssnano-preset-default@6.1.2(postcss@8.5.3): + cssnano-preset-default@6.1.2(postcss@8.5.2): dependencies: browserslist: 4.24.4 - css-declaration-sorter: 7.2.0(postcss@8.5.3) - cssnano-utils: 4.0.2(postcss@8.5.3) - postcss: 8.5.3 - postcss-calc: 9.0.1(postcss@8.5.3) - postcss-colormin: 6.1.0(postcss@8.5.3) - postcss-convert-values: 6.1.0(postcss@8.5.3) - postcss-discard-comments: 6.0.2(postcss@8.5.3) - postcss-discard-duplicates: 6.0.3(postcss@8.5.3) - postcss-discard-empty: 6.0.3(postcss@8.5.3) - postcss-discard-overridden: 6.0.2(postcss@8.5.3) - postcss-merge-longhand: 6.0.5(postcss@8.5.3) - postcss-merge-rules: 6.1.1(postcss@8.5.3) - postcss-minify-font-values: 6.1.0(postcss@8.5.3) - postcss-minify-gradients: 6.0.3(postcss@8.5.3) - postcss-minify-params: 6.1.0(postcss@8.5.3) - postcss-minify-selectors: 6.0.4(postcss@8.5.3) - postcss-normalize-charset: 6.0.2(postcss@8.5.3) - postcss-normalize-display-values: 6.0.2(postcss@8.5.3) - postcss-normalize-positions: 6.0.2(postcss@8.5.3) - postcss-normalize-repeat-style: 6.0.2(postcss@8.5.3) - postcss-normalize-string: 6.0.2(postcss@8.5.3) - postcss-normalize-timing-functions: 6.0.2(postcss@8.5.3) - postcss-normalize-unicode: 6.1.0(postcss@8.5.3) - postcss-normalize-url: 6.0.2(postcss@8.5.3) - postcss-normalize-whitespace: 6.0.2(postcss@8.5.3) - postcss-ordered-values: 6.0.2(postcss@8.5.3) - postcss-reduce-initial: 6.1.0(postcss@8.5.3) - postcss-reduce-transforms: 6.0.2(postcss@8.5.3) - postcss-svgo: 6.0.3(postcss@8.5.3) - postcss-unique-selectors: 6.0.4(postcss@8.5.3) - - cssnano-utils@4.0.2(postcss@8.5.3): - dependencies: - postcss: 8.5.3 - - cssnano@6.1.2(postcss@8.5.3): - dependencies: - cssnano-preset-default: 6.1.2(postcss@8.5.3) + css-declaration-sorter: 7.2.0(postcss@8.5.2) + cssnano-utils: 4.0.2(postcss@8.5.2) + postcss: 8.5.2 + postcss-calc: 9.0.1(postcss@8.5.2) + postcss-colormin: 6.1.0(postcss@8.5.2) + postcss-convert-values: 6.1.0(postcss@8.5.2) + postcss-discard-comments: 6.0.2(postcss@8.5.2) + postcss-discard-duplicates: 6.0.3(postcss@8.5.2) + postcss-discard-empty: 6.0.3(postcss@8.5.2) + postcss-discard-overridden: 6.0.2(postcss@8.5.2) + postcss-merge-longhand: 6.0.5(postcss@8.5.2) + postcss-merge-rules: 6.1.1(postcss@8.5.2) + postcss-minify-font-values: 6.1.0(postcss@8.5.2) + postcss-minify-gradients: 6.0.3(postcss@8.5.2) + postcss-minify-params: 6.1.0(postcss@8.5.2) + postcss-minify-selectors: 6.0.4(postcss@8.5.2) + postcss-normalize-charset: 6.0.2(postcss@8.5.2) + postcss-normalize-display-values: 6.0.2(postcss@8.5.2) + postcss-normalize-positions: 6.0.2(postcss@8.5.2) + postcss-normalize-repeat-style: 6.0.2(postcss@8.5.2) + postcss-normalize-string: 6.0.2(postcss@8.5.2) + postcss-normalize-timing-functions: 6.0.2(postcss@8.5.2) + postcss-normalize-unicode: 6.1.0(postcss@8.5.2) + postcss-normalize-url: 6.0.2(postcss@8.5.2) + postcss-normalize-whitespace: 6.0.2(postcss@8.5.2) + postcss-ordered-values: 6.0.2(postcss@8.5.2) + postcss-reduce-initial: 6.1.0(postcss@8.5.2) + postcss-reduce-transforms: 6.0.2(postcss@8.5.2) + postcss-svgo: 6.0.3(postcss@8.5.2) + postcss-unique-selectors: 6.0.4(postcss@8.5.2) + + cssnano-utils@4.0.2(postcss@8.5.2): + dependencies: + postcss: 8.5.2 + + cssnano@6.1.2(postcss@8.5.2): + dependencies: + cssnano-preset-default: 6.1.2(postcss@8.5.2) lilconfig: 3.1.3 - postcss: 8.5.3 + postcss: 8.5.2 csso@5.0.5: dependencies: @@ -22061,8 +22085,8 @@ snapshots: '@typescript-eslint/parser': 8.26.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) eslint: 9.20.1(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.8.7(eslint-plugin-import@2.31.0)(eslint@9.20.1(jiti@2.4.2)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.7)(eslint@9.20.1(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.8.7(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.1(jiti@2.4.2)))(eslint@9.20.1(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.7(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.1(jiti@2.4.2)))(eslint@9.20.1(jiti@2.4.2)))(eslint@9.20.1(jiti@2.4.2)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.20.1(jiti@2.4.2)) eslint-plugin-react: 7.37.5(eslint@9.20.1(jiti@2.4.2)) eslint-plugin-react-hooks: 5.2.0(eslint@9.20.1(jiti@2.4.2)) @@ -22085,7 +22109,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.8.7(eslint-plugin-import@2.31.0)(eslint@9.20.1(jiti@2.4.2)): + eslint-import-resolver-typescript@3.8.7(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.1(jiti@2.4.2)))(eslint@9.20.1(jiti@2.4.2)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.0(supports-color@5.5.0) @@ -22096,22 +22120,22 @@ snapshots: stable-hash: 0.0.4 tinyglobby: 0.2.12 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.7)(eslint@9.20.1(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.7(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.1(jiti@2.4.2)))(eslint@9.20.1(jiti@2.4.2)))(eslint@9.20.1(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.26.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.7)(eslint@9.20.1(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.26.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.7(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.1(jiti@2.4.2)))(eslint@9.20.1(jiti@2.4.2)))(eslint@9.20.1(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.26.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) eslint: 9.20.1(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.8.7(eslint-plugin-import@2.31.0)(eslint@9.20.1(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.8.7(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.1(jiti@2.4.2)))(eslint@9.20.1(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.7)(eslint@9.20.1(jiti@2.4.2)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.7(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.1(jiti@2.4.2)))(eslint@9.20.1(jiti@2.4.2)))(eslint@9.20.1(jiti@2.4.2)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -22122,7 +22146,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.20.1(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.26.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.7)(eslint@9.20.1(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.26.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.7(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.1(jiti@2.4.2)))(eslint@9.20.1(jiti@2.4.2)))(eslint@9.20.1(jiti@2.4.2)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -22496,7 +22520,7 @@ snapshots: ext-list@2.2.2: dependencies: - mime-db: 1.54.0 + mime-db: 1.53.0 ext-name@5.0.0: dependencies: @@ -23161,7 +23185,7 @@ snapshots: dependencies: parse-passwd: 1.0.0 - hono@4.7.5: {} + hono@4.7.4: {} hosted-git-info@6.1.3: dependencies: @@ -23349,9 +23373,9 @@ snapshots: dependencies: safer-buffer: 2.1.2 - icss-utils@5.1.0(postcss@8.5.3): + icss-utils@5.1.0(postcss@8.5.2): dependencies: - postcss: 8.5.3 + postcss: 8.5.2 identity-obj-proxy@3.0.0: dependencies: @@ -24237,7 +24261,7 @@ snapshots: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.6.3 + semver: 7.7.1 jsox@1.2.121: {} @@ -25232,8 +25256,6 @@ snapshots: mime-db@1.53.0: {} - mime-db@1.54.0: {} - mime-types@2.1.35: dependencies: mime-db: 1.52.0 @@ -25413,7 +25435,7 @@ snapshots: path-to-regexp: 6.3.0 picocolors: 1.1.1 strict-event-emitter: 0.5.1 - type-fest: 4.39.1 + type-fest: 4.37.0 yargs: 17.7.2 optionalDependencies: typescript: 5.7.3 @@ -25435,7 +25457,7 @@ snapshots: nan@2.22.2: {} - nanoid@3.3.11: {} + nanoid@3.3.9: {} napi-build-utils@2.0.0: {} @@ -25460,7 +25482,7 @@ snapshots: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1): + next@15.1.7(@babel/core@7.26.10)(@playwright/test@1.51.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.1): dependencies: '@next/env': 15.1.7 '@swc/counter': 0.1.3 @@ -25480,7 +25502,7 @@ snapshots: '@next/swc-linux-x64-musl': 15.1.7 '@next/swc-win32-arm64-msvc': 15.1.7 '@next/swc-win32-x64-msvc': 15.1.7 - '@playwright/test': 1.51.1 + '@playwright/test': 1.51.0 sass: 1.85.1 sharp: 0.33.5 transitivePeerDependencies: @@ -25623,7 +25645,7 @@ snapshots: nx-cloud@19.1.0: dependencies: '@nrwl/nx-cloud': 19.1.0 - axios: 1.8.4 + axios: 1.8.3 chalk: 4.1.2 dotenv: 10.0.0 fs-extra: 11.3.0 @@ -25641,7 +25663,7 @@ snapshots: '@yarnpkg/lockfile': 1.1.0 '@yarnpkg/parsers': 3.0.2 '@zkochan/js-yaml': 0.0.7 - axios: 1.8.4 + axios: 1.8.3 chalk: 4.1.2 cli-cursor: 3.1.0 cli-spinners: 2.6.1 @@ -26188,11 +26210,11 @@ snapshots: pkginfo@0.4.1: {} - playwright-core@1.51.1: {} + playwright-core@1.51.0: {} - playwright@1.51.1: + playwright@1.51.0: dependencies: - playwright-core: 1.51.1 + playwright-core: 1.51.0 optionalDependencies: fsevents: 2.3.2 @@ -26207,200 +26229,200 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss-calc@9.0.1(postcss@8.5.3): + postcss-calc@9.0.1(postcss@8.5.2): dependencies: - postcss: 8.5.3 + postcss: 8.5.2 postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 - postcss-colormin@6.1.0(postcss@8.5.3): + postcss-colormin@6.1.0(postcss@8.5.2): dependencies: browserslist: 4.24.4 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.5.3 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-convert-values@6.1.0(postcss@8.5.3): + postcss-convert-values@6.1.0(postcss@8.5.2): dependencies: browserslist: 4.24.4 - postcss: 8.5.3 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-discard-comments@6.0.2(postcss@8.5.3): + postcss-discard-comments@6.0.2(postcss@8.5.2): dependencies: - postcss: 8.5.3 + postcss: 8.5.2 - postcss-discard-duplicates@5.1.0(postcss@8.5.3): + postcss-discard-duplicates@5.1.0(postcss@8.5.2): dependencies: - postcss: 8.5.3 + postcss: 8.5.2 - postcss-discard-duplicates@6.0.3(postcss@8.5.3): + postcss-discard-duplicates@6.0.3(postcss@8.5.2): dependencies: - postcss: 8.5.3 + postcss: 8.5.2 - postcss-discard-empty@6.0.3(postcss@8.5.3): + postcss-discard-empty@6.0.3(postcss@8.5.2): dependencies: - postcss: 8.5.3 + postcss: 8.5.2 - postcss-discard-overridden@6.0.2(postcss@8.5.3): + postcss-discard-overridden@6.0.2(postcss@8.5.2): dependencies: - postcss: 8.5.3 + postcss: 8.5.2 - postcss-import@14.1.0(postcss@8.5.3): + postcss-import@14.1.0(postcss@8.5.2): dependencies: - postcss: 8.5.3 + postcss: 8.5.2 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.10 - postcss-load-config@4.0.2(postcss@8.5.3)(ts-node@10.9.2(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(typescript@5.7.3)): + postcss-load-config@4.0.2(postcss@8.5.2)(ts-node@10.9.2(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(typescript@5.7.3)): dependencies: lilconfig: 3.1.3 yaml: 2.7.0 optionalDependencies: - postcss: 8.5.3 + postcss: 8.5.2 ts-node: 10.9.2(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(typescript@5.7.3) - postcss-loader@6.2.1(postcss@8.5.3)(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)): + postcss-loader@6.2.1(postcss@8.5.2)(webpack@5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12)): dependencies: cosmiconfig: 7.1.0 klona: 2.0.6 - postcss: 8.5.3 + postcss: 8.5.2 semver: 7.7.1 webpack: 5.98.0(@swc/core@1.10.18(@swc/helpers@0.5.15))(esbuild@0.19.12) - postcss-merge-longhand@6.0.5(postcss@8.5.3): + postcss-merge-longhand@6.0.5(postcss@8.5.2): dependencies: - postcss: 8.5.3 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - stylehacks: 6.1.1(postcss@8.5.3) + stylehacks: 6.1.1(postcss@8.5.2) - postcss-merge-rules@6.1.1(postcss@8.5.3): + postcss-merge-rules@6.1.1(postcss@8.5.2): dependencies: browserslist: 4.24.4 caniuse-api: 3.0.0 - cssnano-utils: 4.0.2(postcss@8.5.3) - postcss: 8.5.3 + cssnano-utils: 4.0.2(postcss@8.5.2) + postcss: 8.5.2 postcss-selector-parser: 6.1.2 - postcss-minify-font-values@6.1.0(postcss@8.5.3): + postcss-minify-font-values@6.1.0(postcss@8.5.2): dependencies: - postcss: 8.5.3 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-minify-gradients@6.0.3(postcss@8.5.3): + postcss-minify-gradients@6.0.3(postcss@8.5.2): dependencies: colord: 2.9.3 - cssnano-utils: 4.0.2(postcss@8.5.3) - postcss: 8.5.3 + cssnano-utils: 4.0.2(postcss@8.5.2) + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-minify-params@6.1.0(postcss@8.5.3): + postcss-minify-params@6.1.0(postcss@8.5.2): dependencies: browserslist: 4.24.4 - cssnano-utils: 4.0.2(postcss@8.5.3) - postcss: 8.5.3 + cssnano-utils: 4.0.2(postcss@8.5.2) + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-minify-selectors@6.0.4(postcss@8.5.3): + postcss-minify-selectors@6.0.4(postcss@8.5.2): dependencies: - postcss: 8.5.3 + postcss: 8.5.2 postcss-selector-parser: 6.1.2 - postcss-modules-extract-imports@3.1.0(postcss@8.5.3): + postcss-modules-extract-imports@3.1.0(postcss@8.5.2): dependencies: - postcss: 8.5.3 + postcss: 8.5.2 - postcss-modules-local-by-default@4.2.0(postcss@8.5.3): + postcss-modules-local-by-default@4.2.0(postcss@8.5.2): dependencies: - icss-utils: 5.1.0(postcss@8.5.3) - postcss: 8.5.3 + icss-utils: 5.1.0(postcss@8.5.2) + postcss: 8.5.2 postcss-selector-parser: 7.1.0 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.1(postcss@8.5.3): + postcss-modules-scope@3.2.1(postcss@8.5.2): dependencies: - postcss: 8.5.3 + postcss: 8.5.2 postcss-selector-parser: 7.1.0 - postcss-modules-values@4.0.0(postcss@8.5.3): + postcss-modules-values@4.0.0(postcss@8.5.2): dependencies: - icss-utils: 5.1.0(postcss@8.5.3) - postcss: 8.5.3 + icss-utils: 5.1.0(postcss@8.5.2) + postcss: 8.5.2 - postcss-modules@6.0.1(postcss@8.5.3): + postcss-modules@6.0.1(postcss@8.5.2): dependencies: generic-names: 4.0.0 - icss-utils: 5.1.0(postcss@8.5.3) + icss-utils: 5.1.0(postcss@8.5.2) lodash.camelcase: 4.3.0 - postcss: 8.5.3 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.3) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.3) - postcss-modules-scope: 3.2.1(postcss@8.5.3) - postcss-modules-values: 4.0.0(postcss@8.5.3) + postcss: 8.5.2 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.2) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.2) + postcss-modules-scope: 3.2.1(postcss@8.5.2) + postcss-modules-values: 4.0.0(postcss@8.5.2) string-hash: 1.1.3 - postcss-normalize-charset@6.0.2(postcss@8.5.3): + postcss-normalize-charset@6.0.2(postcss@8.5.2): dependencies: - postcss: 8.5.3 + postcss: 8.5.2 - postcss-normalize-display-values@6.0.2(postcss@8.5.3): + postcss-normalize-display-values@6.0.2(postcss@8.5.2): dependencies: - postcss: 8.5.3 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-normalize-positions@6.0.2(postcss@8.5.3): + postcss-normalize-positions@6.0.2(postcss@8.5.2): dependencies: - postcss: 8.5.3 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-normalize-repeat-style@6.0.2(postcss@8.5.3): + postcss-normalize-repeat-style@6.0.2(postcss@8.5.2): dependencies: - postcss: 8.5.3 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-normalize-string@6.0.2(postcss@8.5.3): + postcss-normalize-string@6.0.2(postcss@8.5.2): dependencies: - postcss: 8.5.3 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-normalize-timing-functions@6.0.2(postcss@8.5.3): + postcss-normalize-timing-functions@6.0.2(postcss@8.5.2): dependencies: - postcss: 8.5.3 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-normalize-unicode@6.1.0(postcss@8.5.3): + postcss-normalize-unicode@6.1.0(postcss@8.5.2): dependencies: browserslist: 4.24.4 - postcss: 8.5.3 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-normalize-url@6.0.2(postcss@8.5.3): + postcss-normalize-url@6.0.2(postcss@8.5.2): dependencies: - postcss: 8.5.3 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-normalize-whitespace@6.0.2(postcss@8.5.3): + postcss-normalize-whitespace@6.0.2(postcss@8.5.2): dependencies: - postcss: 8.5.3 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-ordered-values@6.0.2(postcss@8.5.3): + postcss-ordered-values@6.0.2(postcss@8.5.2): dependencies: - cssnano-utils: 4.0.2(postcss@8.5.3) - postcss: 8.5.3 + cssnano-utils: 4.0.2(postcss@8.5.2) + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-reduce-initial@6.1.0(postcss@8.5.3): + postcss-reduce-initial@6.1.0(postcss@8.5.2): dependencies: browserslist: 4.24.4 caniuse-api: 3.0.0 - postcss: 8.5.3 + postcss: 8.5.2 - postcss-reduce-transforms@6.0.2(postcss@8.5.3): + postcss-reduce-transforms@6.0.2(postcss@8.5.2): dependencies: - postcss: 8.5.3 + postcss: 8.5.2 postcss-value-parser: 4.2.0 postcss-selector-parser@6.0.10: @@ -26418,28 +26440,28 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-svgo@6.0.3(postcss@8.5.3): + postcss-svgo@6.0.3(postcss@8.5.2): dependencies: - postcss: 8.5.3 + postcss: 8.5.2 postcss-value-parser: 4.2.0 svgo: 3.3.2 - postcss-unique-selectors@6.0.4(postcss@8.5.3): + postcss-unique-selectors@6.0.4(postcss@8.5.2): dependencies: - postcss: 8.5.3 + postcss: 8.5.2 postcss-selector-parser: 6.1.2 postcss-value-parser@4.2.0: {} postcss@8.4.31: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.9 picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.3: + postcss@8.5.2: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.9 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -26906,7 +26928,7 @@ snapshots: remix-hono@0.0.16(typescript@5.7.3)(zod@3.24.2): dependencies: '@remix-run/server-runtime': 2.16.0(typescript@5.7.3) - hono: 4.7.5 + hono: 4.7.4 pretty-cache-header: 1.0.0 optionalDependencies: zod: 3.24.2 @@ -26915,7 +26937,7 @@ snapshots: remix-utils@8.4.0(react@19.0.0)(zod@3.24.2): dependencies: - type-fest: 4.39.1 + type-fest: 4.37.0 optionalDependencies: react: 19.0.0 zod: 3.24.2 @@ -27249,7 +27271,7 @@ snapshots: setprototypeof@1.2.0: {} - shadcn@2.4.0-canary.20(@types/node@22.14.0)(typescript@5.7.3): + shadcn@2.4.0-canary.18(@types/node@22.14.0)(typescript@5.7.3): dependencies: '@antfu/ni': 23.3.1 '@babel/core': 7.26.10 @@ -27267,7 +27289,7 @@ snapshots: msw: 2.7.3(@types/node@22.14.0)(typescript@5.7.3) node-fetch: 3.3.2 ora: 6.3.1 - postcss: 8.5.3 + postcss: 8.5.2 prompts: 2.4.2 recast: 0.23.11 stringify-object: 5.0.0 @@ -27427,7 +27449,7 @@ snapshots: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - sonner@2.0.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + sonner@2.0.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) @@ -27737,10 +27759,10 @@ snapshots: '@babel/core': 7.26.10 babel-plugin-macros: 3.1.0 - stylehacks@6.1.1(postcss@8.5.3): + stylehacks@6.1.1(postcss@8.5.2): dependencies: browserslist: 4.24.4 - postcss: 8.5.3 + postcss: 8.5.2 postcss-selector-parser: 6.1.2 stylis@4.2.0: {} @@ -27776,7 +27798,7 @@ snapshots: transitivePeerDependencies: - supports-color - supertest@7.1.0: + supertest@7.0.0: dependencies: methods: 1.1.2 superagent: 9.0.2 @@ -27821,11 +27843,7 @@ snapshots: tailwind-merge@3.1.0: {} - tailwindcss-animate@1.0.7(tailwindcss@4.1.3): - dependencies: - tailwindcss: 4.1.3 - - tailwindcss@4.1.3: {} + tailwindcss@4.0.17: {} tapable@2.2.1: {} @@ -28030,7 +28048,7 @@ snapshots: optionalDependencies: typescript: 5.7.3 - ts-jest@29.3.1(@babel/core@7.26.10)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10))(esbuild@0.19.12)(jest@29.7.0(@types/node@22.14.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(typescript@5.7.3)))(typescript@5.7.3): + ts-jest@29.2.6(@babel/core@7.26.10)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10))(esbuild@0.19.12)(jest@29.7.0(@types/node@22.14.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.18(@swc/helpers@0.5.15))(@types/node@22.14.0)(typescript@5.7.3)))(typescript@5.7.3): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 @@ -28041,7 +28059,6 @@ snapshots: lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.7.1 - type-fest: 4.39.1 typescript: 5.7.3 yargs-parser: 21.1.1 optionalDependencies: @@ -28167,7 +28184,7 @@ snapshots: type-fest@0.21.3: {} - type-fest@4.39.1: {} + type-fest@4.37.0: {} type-is@1.6.18: dependencies: @@ -28599,7 +28616,7 @@ snapshots: vite@5.4.14(@types/node@22.14.0)(less@4.1.3)(lightningcss@1.29.2)(sass@1.85.1)(stylus@0.64.0)(terser@5.39.0): dependencies: esbuild: 0.21.5 - postcss: 8.5.3 + postcss: 8.5.2 rollup: 4.35.0 optionalDependencies: '@types/node': 22.14.0