diff --git a/packages/gatekeeper/public/logo-black.svg b/packages/gatekeeper/public/logo-black.svg
new file mode 100644
index 0000000..808786b
--- /dev/null
+++ b/packages/gatekeeper/public/logo-black.svg
@@ -0,0 +1,12 @@
+
+
+
diff --git a/packages/gatekeeper/public/logo-white.svg b/packages/gatekeeper/public/logo-white.svg
new file mode 100644
index 0000000..daf4f2a
--- /dev/null
+++ b/packages/gatekeeper/public/logo-white.svg
@@ -0,0 +1,12 @@
+
+
+
diff --git a/packages/gatekeeper/src/app/gatekeeper/login/page.tsx b/packages/gatekeeper/src/app/gatekeeper/login/page.tsx
index 98fb043..c0b0bd4 100644
--- a/packages/gatekeeper/src/app/gatekeeper/login/page.tsx
+++ b/packages/gatekeeper/src/app/gatekeeper/login/page.tsx
@@ -55,12 +55,13 @@ export default async function LoginPage({ searchParams }: LoginPageProps) {
{/* Logo / Icon */}
diff --git a/packages/mail/package.json b/packages/mail/package.json
new file mode 100644
index 0000000..3f0b590
--- /dev/null
+++ b/packages/mail/package.json
@@ -0,0 +1,30 @@
+{
+ "name": "@mintel/mail",
+ "version": "1.0.0",
+ "private": true,
+ "type": "module",
+ "exports": {
+ ".": "./src/index.ts",
+ "./templates/*": "./src/templates/*"
+ },
+ "scripts": {
+ "build": "tsup src/index.ts --format esm --dts",
+ "dev": "tsup src/index.ts --format esm --watch",
+ "lint": "eslint src",
+ "test": "vitest run"
+ },
+ "dependencies": {
+ "@react-email/components": "^0.0.33",
+ "react": "^19.0.0",
+ "react-dom": "^19.0.0"
+ },
+ "devDependencies": {
+ "@mintel/eslint-config": "workspace:*",
+ "@mintel/tsconfig": "workspace:*",
+ "@types/react": "^19.0.0",
+ "@types/react-dom": "^19.0.0",
+ "tsup": "^8.3.5",
+ "typescript": "^5.0.0",
+ "vitest": "^3.0.4"
+ }
+}
diff --git a/packages/mail/src/assets/logo-black.svg b/packages/mail/src/assets/logo-black.svg
new file mode 100644
index 0000000..808786b
--- /dev/null
+++ b/packages/mail/src/assets/logo-black.svg
@@ -0,0 +1,12 @@
+
+
+
diff --git a/packages/mail/src/assets/logo-white.svg b/packages/mail/src/assets/logo-white.svg
new file mode 100644
index 0000000..daf4f2a
--- /dev/null
+++ b/packages/mail/src/assets/logo-white.svg
@@ -0,0 +1,12 @@
+
+
+
diff --git a/packages/mail/src/components/MintelLogo.tsx b/packages/mail/src/components/MintelLogo.tsx
new file mode 100644
index 0000000..0aa7e2c
--- /dev/null
+++ b/packages/mail/src/components/MintelLogo.tsx
@@ -0,0 +1,29 @@
+import * as React from "react";
+import { Link, Img } from "@react-email/components";
+
+export interface MintelLogoProps {
+ size?: number;
+}
+
+export const MintelLogo = ({ size = 200 }: MintelLogoProps) => {
+ // Original Logo is 545x260, we scale it
+ const width = size;
+ const height = (size * 260) / 545;
+
+ return (
+
+
+
+ );
+};
diff --git a/packages/mail/src/index.ts b/packages/mail/src/index.ts
new file mode 100644
index 0000000..6ec9947
--- /dev/null
+++ b/packages/mail/src/index.ts
@@ -0,0 +1,24 @@
+import { render as reactEmailRender } from "@react-email/components";
+import { ReactElement } from "react";
+
+/**
+ * Renders a React email template to HTML.
+ */
+export async function render(
+ template: ReactElement,
+ options?: any,
+): Promise {
+ return reactEmailRender(template, options);
+}
+
+// Export Components
+export * from "./components/MintelLogo";
+
+// Export Layouts
+export * from "./layouts/BaseLayout";
+export * from "./layouts/MintelLayout";
+export * from "./layouts/ClientLayout";
+
+// Export Templates
+export * from "./templates/ContactFormNotification";
+export * from "./templates/ConfirmationMessage";
diff --git a/packages/mail/src/layouts/BaseLayout.tsx b/packages/mail/src/layouts/BaseLayout.tsx
new file mode 100644
index 0000000..c9f86d4
--- /dev/null
+++ b/packages/mail/src/layouts/BaseLayout.tsx
@@ -0,0 +1,53 @@
+import {
+ Body,
+ Container,
+ Head,
+ Html,
+ Preview,
+ Section,
+} from "@react-email/components";
+import * as React from "react";
+
+export interface BaseLayoutProps {
+ preview: string;
+ children: React.ReactNode;
+ brandColor?: string;
+}
+
+export const BaseLayout = ({
+ preview,
+ children,
+ brandColor = "#82ed20",
+}: BaseLayoutProps) => {
+ return (
+
+
+ {preview}
+
+
+
+
+
+
+ );
+};
+
+const main = {
+ backgroundColor: "#0a0a0a",
+ color: "#ffffff",
+ fontFamily:
+ '-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Ubuntu,sans-serif',
+};
+
+const container = {
+ backgroundColor: "#0f0f0f",
+ margin: "0 auto",
+ padding: "40px 0",
+ maxWidth: "600px",
+ border: "1px solid #1a1a1a",
+ borderRadius: "12px",
+};
+
+const content = {
+ padding: "0 40px",
+};
diff --git a/packages/mail/src/layouts/ClientLayout.tsx b/packages/mail/src/layouts/ClientLayout.tsx
new file mode 100644
index 0000000..8d30e7a
--- /dev/null
+++ b/packages/mail/src/layouts/ClientLayout.tsx
@@ -0,0 +1,80 @@
+import * as React from "react";
+import { Hr, Section, Text, Img } from "@react-email/components";
+import { BaseLayout } from "./BaseLayout";
+
+export interface ClientLayoutProps {
+ preview: string;
+ children: React.ReactNode;
+ clientLogo?: string;
+ clientName: string;
+ brandColor?: string;
+}
+
+export const ClientLayout = ({
+ preview,
+ children,
+ clientLogo,
+ clientName,
+ brandColor = "#82ed20",
+}: ClientLayoutProps) => {
+ return (
+
+
+ {clientLogo ? (
+
+ ) : (
+ {clientName}
+ )}
+
+
+
+
+
+
+ © 2026 {clientName}. All rights reserved.
+
+
+
+ );
+};
+
+const header = {
+ marginBottom: "32px",
+};
+
+const logo = {
+ margin: "0 auto",
+ display: "block",
+};
+
+const logoText = (color: string) => ({
+ margin: "0 auto",
+ textAlign: "center" as const,
+ fontSize: "24px",
+ fontWeight: 900,
+ color: "#ffffff",
+ letterSpacing: "-0.02em",
+ borderLeft: `4px solid ${color}`,
+ paddingLeft: "12px",
+});
+
+const mainContent = {
+ marginBottom: "32px",
+};
+
+const hr = {
+ borderColor: "#222222",
+ margin: "20px 0",
+};
+
+const footer = {
+ marginTop: "32px",
+ textAlign: "center" as const,
+};
+
+const footerText = {
+ fontSize: "10px",
+ color: "#333333",
+ textTransform: "uppercase" as const,
+ letterSpacing: "0.1em",
+};
diff --git a/packages/mail/src/layouts/MintelLayout.tsx b/packages/mail/src/layouts/MintelLayout.tsx
new file mode 100644
index 0000000..c2b64c4
--- /dev/null
+++ b/packages/mail/src/layouts/MintelLayout.tsx
@@ -0,0 +1,53 @@
+import * as React from "react";
+import { Hr, Section, Text } from "@react-email/components";
+import { BaseLayout } from "./BaseLayout";
+import { MintelLogo } from "../components/MintelLogo";
+
+export interface MintelLayoutProps {
+ preview: string;
+ children: React.ReactNode;
+}
+
+export const MintelLayout = ({ preview, children }: MintelLayoutProps) => {
+ return (
+
+
+
+
+
+
+
+ © 2026 Mintel Infrastructure. Secure Communication Channel.
+
+
+
+ );
+};
+
+const header = {
+ marginBottom: "32px",
+};
+
+const mainContent = {
+ marginBottom: "32px",
+};
+
+const hr = {
+ borderColor: "#222222",
+ margin: "20px 0",
+};
+
+const footer = {
+ marginTop: "32px",
+ textAlign: "center" as const,
+};
+
+const footerText = {
+ fontSize: "12px",
+ color: "#444444",
+ fontWeight: 700,
+ textTransform: "uppercase" as const,
+ letterSpacing: "0.1em",
+};
diff --git a/packages/mail/src/templates/ConfirmationMessage.tsx b/packages/mail/src/templates/ConfirmationMessage.tsx
new file mode 100644
index 0000000..1b5b442
--- /dev/null
+++ b/packages/mail/src/templates/ConfirmationMessage.tsx
@@ -0,0 +1,57 @@
+import * as React from "react";
+import { Heading, Text } from "@react-email/components";
+import { ClientLayout } from "../layouts/ClientLayout";
+
+export interface ConfirmationMessageProps {
+ name: string;
+ clientName: string;
+ clientLogo?: string;
+ brandColor?: string;
+}
+
+export const ConfirmationMessage = ({
+ name,
+ clientName,
+ clientLogo,
+ brandColor,
+}: ConfirmationMessageProps) => {
+ const preview = `Thank you for your message, ${name}`;
+
+ return (
+
+ Thank You
+ Hello {name},
+
+ Thank you for contacting us. We have received your message and will get
+ back to you as soon as possible.
+
+
+ Best regards,
+
+ The {clientName} Team
+
+
+ );
+};
+
+export default ConfirmationMessage;
+
+const h1 = {
+ fontSize: "28px",
+ fontWeight: "900",
+ margin: "0 0 16px",
+ color: "#ffffff",
+ letterSpacing: "-0.04em",
+};
+
+const text = {
+ fontSize: "16px",
+ lineHeight: "24px",
+ color: "#cccccc",
+ margin: "16px 0",
+};
diff --git a/packages/mail/src/templates/ContactFormNotification.tsx b/packages/mail/src/templates/ContactFormNotification.tsx
new file mode 100644
index 0000000..d5e9b8a
--- /dev/null
+++ b/packages/mail/src/templates/ContactFormNotification.tsx
@@ -0,0 +1,118 @@
+import * as React from "react";
+import { Heading, Section, Text, Row, Column } from "@react-email/components";
+import { MintelLayout } from "../layouts/MintelLayout";
+
+export interface ContactFormNotificationProps {
+ name: string;
+ email: string;
+ message: string;
+ productName?: string;
+}
+
+export const ContactFormNotification = ({
+ name,
+ email,
+ message,
+ productName,
+}: ContactFormNotificationProps) => {
+ const preview = `New message from ${name}`;
+
+ return (
+
+ New Submission
+
+ A new message has been received via the contact form.
+
+
+
+
+
+ Name
+
+
+ {name}
+
+
+
+
+ Email
+
+
+ {email}
+
+
+ {productName && (
+
+
+ Product
+
+
+ {productName}
+
+
+ )}
+
+
+
+
+ );
+};
+
+export default ContactFormNotification;
+
+const h1 = {
+ fontSize: "28px",
+ fontWeight: "900",
+ margin: "0 0 16px",
+ color: "#ffffff",
+ letterSpacing: "-0.04em",
+};
+
+const intro = {
+ fontSize: "16px",
+ color: "#888888",
+ margin: "0 0 32px",
+};
+
+const detailsContainer = {
+ backgroundColor: "#151515",
+ padding: "24px",
+ borderRadius: "8px",
+ marginBottom: "24px",
+};
+
+const labelCol = {
+ width: "100px",
+};
+
+const label = {
+ fontSize: "10px",
+ fontWeight: "900",
+ textTransform: "uppercase" as const,
+ color: "#444444",
+ margin: "0 0 4px",
+ letterSpacing: "0.1em",
+};
+
+const value = {
+ fontSize: "16px",
+ color: "#ffffff",
+ margin: "0 0 12px",
+};
+
+const messageSection = {
+ padding: "0 24px",
+};
+
+const messageText = {
+ fontSize: "16px",
+ lineHeight: "24px",
+ color: "#cccccc",
+ fontStyle: "italic",
+ borderLeft: "2px solid #222222",
+ paddingLeft: "16px",
+ margin: "12px 0 0",
+};
diff --git a/packages/mail/tsconfig.json b/packages/mail/tsconfig.json
new file mode 100644
index 0000000..280647a
--- /dev/null
+++ b/packages/mail/tsconfig.json
@@ -0,0 +1,14 @@
+{
+ "extends": "@mintel/tsconfig/base.json",
+ "compilerOptions": {
+ "jsx": "react-jsx",
+ "jsxImportSource": "react",
+ "lib": ["ESNext", "DOM", "DOM.Iterable"],
+ "module": "ESNext",
+ "target": "ESNext",
+ "moduleResolution": "Bundler",
+ "allowImportingTsExtensions": true,
+ "noEmit": true
+ },
+ "include": ["src"]
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f598753..4411bf5 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -243,6 +243,40 @@ importers:
specifier: ^5.0.0
version: 5.9.3
+ packages/mail:
+ dependencies:
+ '@react-email/components':
+ specifier: ^0.0.33
+ version: 0.0.33(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ react:
+ specifier: ^19.0.0
+ version: 19.2.4
+ react-dom:
+ specifier: ^19.0.0
+ version: 19.2.4(react@19.2.4)
+ devDependencies:
+ '@mintel/eslint-config':
+ specifier: workspace:*
+ version: link:../eslint-config
+ '@mintel/tsconfig':
+ specifier: workspace:*
+ version: link:../tsconfig
+ '@types/react':
+ specifier: ^19.0.0
+ version: 19.2.10
+ '@types/react-dom':
+ specifier: ^19.0.0
+ version: 19.2.3(@types/react@19.2.10)
+ tsup:
+ specifier: ^8.3.5
+ version: 8.5.1(@swc/core@1.15.11)(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)
+ typescript:
+ specifier: ^5.0.0
+ version: 5.9.3
+ vitest:
+ specifier: ^3.0.4
+ version: 3.2.4(@types/node@20.19.30)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.4.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+
packages/next-config:
dependencies:
'@sentry/nextjs':
@@ -1319,6 +1353,131 @@ packages:
'@prisma/instrumentation@5.22.0':
resolution: {integrity: sha512-LxccF392NN37ISGxIurUljZSh1YWnphO34V5a0+T7FVQG2u9bhAXRTJpgmQ3483woVhkraQZFF7cbRrpbw/F4Q==}
+ '@react-email/body@0.0.11':
+ resolution: {integrity: sha512-ZSD2SxVSgUjHGrB0Wi+4tu3MEpB4fYSbezsFNEJk2xCWDBkFiOeEsjTmR5dvi+CxTK691hQTQlHv0XWuP7ENTg==}
+ peerDependencies:
+ react: ^18.0 || ^19.0 || ^19.0.0-rc
+
+ '@react-email/button@0.0.19':
+ resolution: {integrity: sha512-HYHrhyVGt7rdM/ls6FuuD6XE7fa7bjZTJqB2byn6/oGsfiEZaogY77OtoLL/mrQHjHjZiJadtAMSik9XLcm7+A==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.0 || ^19.0 || ^19.0.0-rc
+
+ '@react-email/code-block@0.0.11':
+ resolution: {integrity: sha512-4D43p+LIMjDzm66gTDrZch0Flkip5je91mAT7iGs6+SbPyalHgIA+lFQoQwhz/VzHHLxuD0LV6gwmU/WUQ2WEg==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.0 || ^19.0 || ^19.0.0-rc
+
+ '@react-email/code-inline@0.0.5':
+ resolution: {integrity: sha512-MmAsOzdJpzsnY2cZoPHFPk6uDO/Ncpb4Kh1hAt9UZc1xOW3fIzpe1Pi9y9p6wwUmpaeeDalJxAxH6/fnTquinA==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.0 || ^19.0 || ^19.0.0-rc
+
+ '@react-email/column@0.0.13':
+ resolution: {integrity: sha512-Lqq17l7ShzJG/d3b1w/+lVO+gp2FM05ZUo/nW0rjxB8xBICXOVv6PqjDnn3FXKssvhO5qAV20lHM6S+spRhEwQ==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.0 || ^19.0 || ^19.0.0-rc
+
+ '@react-email/components@0.0.33':
+ resolution: {integrity: sha512-/GKdT3YijT1iEWPAXF644jr12w5xVgzUr0zlbZGt2KOkGeFHNZUCL5UtRopmnjrH/Fayf8Gjv6q/4E2cZgDtdQ==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.0 || ^19.0 || ^19.0.0-rc
+
+ '@react-email/container@0.0.15':
+ resolution: {integrity: sha512-Qo2IQo0ru2kZq47REmHW3iXjAQaKu4tpeq/M8m1zHIVwKduL2vYOBQWbC2oDnMtWPmkBjej6XxgtZByxM6cCFg==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.0 || ^19.0 || ^19.0.0-rc
+
+ '@react-email/font@0.0.9':
+ resolution: {integrity: sha512-4zjq23oT9APXkerqeslPH3OZWuh5X4crHK6nx82mVHV2SrLba8+8dPEnWbaACWTNjOCbcLIzaC9unk7Wq2MIXw==}
+ peerDependencies:
+ react: ^18.0 || ^19.0 || ^19.0.0-rc
+
+ '@react-email/head@0.0.12':
+ resolution: {integrity: sha512-X2Ii6dDFMF+D4niNwMAHbTkeCjlYYnMsd7edXOsi0JByxt9wNyZ9EnhFiBoQdqkE+SMDcu8TlNNttMrf5sJeMA==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.0 || ^19.0 || ^19.0.0-rc
+
+ '@react-email/heading@0.0.15':
+ resolution: {integrity: sha512-xF2GqsvBrp/HbRHWEfOgSfRFX+Q8I5KBEIG5+Lv3Vb2R/NYr0s8A5JhHHGf2pWBMJdbP4B2WHgj/VUrhy8dkIg==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.0 || ^19.0 || ^19.0.0-rc
+
+ '@react-email/hr@0.0.11':
+ resolution: {integrity: sha512-S1gZHVhwOsd1Iad5IFhpfICwNPMGPJidG/Uysy1AwmspyoAP5a4Iw3OWEpINFdgh9MHladbxcLKO2AJO+cA9Lw==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.0 || ^19.0 || ^19.0.0-rc
+
+ '@react-email/html@0.0.11':
+ resolution: {integrity: sha512-qJhbOQy5VW5qzU74AimjAR9FRFQfrMa7dn4gkEXKMB/S9xZN8e1yC1uA9C15jkXI/PzmJ0muDIWmFwatm5/+VA==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.0 || ^19.0 || ^19.0.0-rc
+
+ '@react-email/img@0.0.11':
+ resolution: {integrity: sha512-aGc8Y6U5C3igoMaqAJKsCpkbm1XjguQ09Acd+YcTKwjnC2+0w3yGUJkjWB2vTx4tN8dCqQCXO8FmdJpMfOA9EQ==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.0 || ^19.0 || ^19.0.0-rc
+
+ '@react-email/link@0.0.12':
+ resolution: {integrity: sha512-vF+xxQk2fGS1CN7UPQDbzvcBGfffr+GjTPNiWM38fhBfsLv6A/YUfaqxWlmL7zLzVmo0K2cvvV9wxlSyNba1aQ==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.0 || ^19.0 || ^19.0.0-rc
+
+ '@react-email/markdown@0.0.14':
+ resolution: {integrity: sha512-5IsobCyPkb4XwnQO8uFfGcNOxnsg3311GRXhJ3uKv51P7Jxme4ycC/MITnwIZ10w2zx7HIyTiqVzTj4XbuIHbg==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.0 || ^19.0 || ^19.0.0-rc
+
+ '@react-email/preview@0.0.12':
+ resolution: {integrity: sha512-g/H5fa9PQPDK6WUEG7iTlC19sAktI23qyoiJtMLqQiXFCfWeQMhqjLGKeLSKkfzszqmfJCjZtpSiKtBoOdxp3Q==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.0 || ^19.0 || ^19.0.0-rc
+
+ '@react-email/render@1.0.5':
+ resolution: {integrity: sha512-CA69HYXPk21HhtAXATIr+9JJwpDNmAFCvdMUjWmeoD1+KhJ9NAxusMRxKNeibdZdslmq3edaeOKGbdQ9qjK8LQ==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^18.0 || ^19.0 || ^19.0.0-rc
+
+ '@react-email/row@0.0.12':
+ resolution: {integrity: sha512-HkCdnEjvK3o+n0y0tZKXYhIXUNPDx+2vq1dJTmqappVHXS5tXS6W5JOPZr5j+eoZ8gY3PShI2LWj5rWF7ZEtIQ==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.0 || ^19.0 || ^19.0.0-rc
+
+ '@react-email/section@0.0.16':
+ resolution: {integrity: sha512-FjqF9xQ8FoeUZYKSdt8sMIKvoT9XF8BrzhT3xiFKdEMwYNbsDflcjfErJe3jb7Wj/es/lKTbV5QR1dnLzGpL3w==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.0 || ^19.0 || ^19.0.0-rc
+
+ '@react-email/tailwind@1.0.4':
+ resolution: {integrity: sha512-tJdcusncdqgvTUYZIuhNC6LYTfL9vNTSQpwWdTCQhQ1lsrNCEE4OKCSdzSV3S9F32pi0i0xQ+YPJHKIzGjdTSA==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.0 || ^19.0 || ^19.0.0-rc
+
+ '@react-email/text@0.0.11':
+ resolution: {integrity: sha512-a7nl/2KLpRHOYx75YbYZpWspUbX1DFY7JIZbOv5x0QU8SvwDbJt+Hm01vG34PffFyYvHEXrc6Qnip2RTjljNjg==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.0 || ^19.0 || ^19.0.0-rc
+
'@rolldown/pluginutils@1.0.0-beta.53':
resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==}
@@ -1474,6 +1633,9 @@ packages:
'@schummar/icu-type-parser@1.21.5':
resolution: {integrity: sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw==}
+ '@selderee/plugin-htmlparser2@0.11.0':
+ resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==}
+
'@sentry-internal/browser-utils@8.55.0':
resolution: {integrity: sha512-ROgqtQfpH/82AQIpESPqPQe0UyWywKJsmVIqi3c5Fh+zkds5LUxnssTj3yNd1x+kxaPDVB023jAP+3ibNgeNDw==}
engines: {node: '>=14.18'}
@@ -1939,9 +2101,23 @@ packages:
peerDependencies:
vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
+ '@vitest/expect@3.2.4':
+ resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==}
+
'@vitest/expect@4.0.18':
resolution: {integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==}
+ '@vitest/mocker@3.2.4':
+ resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==}
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
+
'@vitest/mocker@4.0.18':
resolution: {integrity: sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==}
peerDependencies:
@@ -1953,18 +2129,33 @@ packages:
vite:
optional: true
+ '@vitest/pretty-format@3.2.4':
+ resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==}
+
'@vitest/pretty-format@4.0.18':
resolution: {integrity: sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==}
+ '@vitest/runner@3.2.4':
+ resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==}
+
'@vitest/runner@4.0.18':
resolution: {integrity: sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==}
+ '@vitest/snapshot@3.2.4':
+ resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==}
+
'@vitest/snapshot@4.0.18':
resolution: {integrity: sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==}
+ '@vitest/spy@3.2.4':
+ resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==}
+
'@vitest/spy@4.0.18':
resolution: {integrity: sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==}
+ '@vitest/utils@3.2.4':
+ resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==}
+
'@vitest/utils@4.0.18':
resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==}
@@ -2260,6 +2451,10 @@ packages:
caniuse-lite@1.0.30001766:
resolution: {integrity: sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==}
+ chai@5.3.3:
+ resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==}
+ engines: {node: '>=18'}
+
chai@6.2.2:
resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==}
engines: {node: '>=18'}
@@ -2279,6 +2474,10 @@ packages:
chardet@2.1.1:
resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==}
+ check-error@2.1.3:
+ resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==}
+ engines: {node: '>= 16'}
+
chokidar@3.6.0:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines: {node: '>= 8.10.0'}
@@ -2464,9 +2663,17 @@ packages:
decimal.js@10.6.0:
resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==}
+ deep-eql@5.0.2:
+ resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
+ engines: {node: '>=6'}
+
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+ deepmerge@4.3.1:
+ resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
+ engines: {node: '>=0.10.0'}
+
define-data-property@1.1.4:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
@@ -2507,6 +2714,19 @@ packages:
dom-accessibility-api@0.6.3:
resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==}
+ dom-serializer@2.0.0:
+ resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
+
+ domelementtype@2.3.0:
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+
+ domhandler@5.0.3:
+ resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
+ engines: {node: '>= 4'}
+
+ domutils@3.2.2:
+ resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
+
dot-prop@5.3.0:
resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==}
engines: {node: '>=8'}
@@ -2767,6 +2987,9 @@ packages:
extendable-error@0.1.7:
resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==}
+ fast-deep-equal@2.0.1:
+ resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==}
+
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
@@ -2983,6 +3206,13 @@ packages:
resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==}
engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
+ html-to-text@9.0.5:
+ resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==}
+ engines: {node: '>=14'}
+
+ htmlparser2@8.0.2:
+ resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
+
http-proxy-agent@7.0.2:
resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
engines: {node: '>= 14'}
@@ -3220,6 +3450,9 @@ packages:
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+ js-tokens@9.0.1:
+ resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
+
js-yaml@3.14.2:
resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==}
hasBin: true
@@ -3293,6 +3526,9 @@ packages:
resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==}
engines: {node: '>=0.10'}
+ leac@0.6.0:
+ resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==}
+
levn@0.4.1:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
@@ -3346,6 +3582,9 @@ packages:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
+ loupe@3.2.1:
+ resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==}
+
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
@@ -3372,10 +3611,20 @@ packages:
resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==}
engines: {node: '>=12'}
+ marked@7.0.4:
+ resolution: {integrity: sha512-t8eP0dXRJMtMvBojtkcsA7n48BkauktUKzfkPSCq85ZMTJ0v76Rke4DYz01omYpPTUh4p/f7HePgRo3ebG8+QQ==}
+ engines: {node: '>= 16'}
+ hasBin: true
+
math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
+ md-to-react-email@5.0.5:
+ resolution: {integrity: sha512-OvAXqwq57uOk+WZqFFNCMZz8yDp8BD3WazW1wAKHUrPbbdr89K9DWS6JXY09vd9xNdPNeurI8DU/X4flcfaD8A==}
+ peerDependencies:
+ react: ^18.0 || ^19.0
+
mdn-data@2.12.2:
resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
@@ -3625,6 +3874,9 @@ packages:
parse5@8.0.0:
resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==}
+ parseley@0.12.1:
+ resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==}
+
path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
@@ -3647,6 +3899,13 @@ packages:
pathe@2.0.3:
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
+ pathval@2.0.1:
+ resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==}
+ engines: {node: '>= 14.16'}
+
+ peberminta@0.9.0:
+ resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==}
+
pg-int8@1.0.1:
resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
engines: {node: '>=4.0.0'}
@@ -3772,6 +4031,11 @@ packages:
engines: {node: '>=10.13.0'}
hasBin: true
+ prettier@3.4.2:
+ resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==}
+ engines: {node: '>=14'}
+ hasBin: true
+
prettier@3.8.1:
resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==}
engines: {node: '>=14'}
@@ -3781,6 +4045,10 @@ packages:
resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==}
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
+ prismjs@1.29.0:
+ resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
+ engines: {node: '>=6'}
+
progress@2.0.3:
resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
engines: {node: '>=0.4.0'}
@@ -3819,6 +4087,9 @@ packages:
react-is@17.0.2:
resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
+ react-promise-suspense@0.3.4:
+ resolution: {integrity: sha512-I42jl7L3Ze6kZaq+7zXWSunBa3b1on5yfvUW6Eo/3fFOj6dZ5Bqmcd264nJbTK/gn1HjjILAjSwnZbV4RpSaNQ==}
+
react-refresh@0.18.0:
resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==}
engines: {node: '>=0.10.0'}
@@ -3943,6 +4214,9 @@ packages:
resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==}
engines: {node: '>= 10.13.0'}
+ selderee@0.11.0:
+ resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==}
+
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
@@ -4124,6 +4398,9 @@ packages:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
+ strip-literal@3.1.0:
+ resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==}
+
styled-jsx@5.1.6:
resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==}
engines: {node: '>= 12.0.0'}
@@ -4215,10 +4492,22 @@ packages:
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
engines: {node: '>=12.0.0'}
+ tinypool@1.1.1:
+ resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+
+ tinyrainbow@2.0.0:
+ resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
+ engines: {node: '>=14.0.0'}
+
tinyrainbow@3.0.3:
resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==}
engines: {node: '>=14.0.0'}
+ tinyspy@4.0.4:
+ resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==}
+ engines: {node: '>=14.0.0'}
+
tldts-core@7.0.21:
resolution: {integrity: sha512-oVOMdHvgjqyzUZH1rOESgJP1uNe2bVrfK0jUHHmiM2rpEiRbf3j4BrsIc6JigJRbHGanQwuZv/R+LTcHsw+bLA==}
@@ -4365,6 +4654,11 @@ packages:
resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
hasBin: true
+ vite-node@3.2.4:
+ resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==}
+ engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+ hasBin: true
+
vite@7.3.1:
resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -4405,6 +4699,34 @@ packages:
yaml:
optional: true
+ vitest@3.2.4:
+ resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==}
+ engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+ hasBin: true
+ peerDependencies:
+ '@edge-runtime/vm': '*'
+ '@types/debug': ^4.1.12
+ '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
+ '@vitest/browser': 3.2.4
+ '@vitest/ui': 3.2.4
+ happy-dom: '*'
+ jsdom: '*'
+ peerDependenciesMeta:
+ '@edge-runtime/vm':
+ optional: true
+ '@types/debug':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitest/browser':
+ optional: true
+ '@vitest/ui':
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+
vitest@4.0.18:
resolution: {integrity: sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==}
engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
@@ -5715,6 +6037,118 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@react-email/body@0.0.11(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+
+ '@react-email/button@0.0.19(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+
+ '@react-email/code-block@0.0.11(react@19.2.4)':
+ dependencies:
+ prismjs: 1.29.0
+ react: 19.2.4
+
+ '@react-email/code-inline@0.0.5(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+
+ '@react-email/column@0.0.13(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+
+ '@react-email/components@0.0.33(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@react-email/body': 0.0.11(react@19.2.4)
+ '@react-email/button': 0.0.19(react@19.2.4)
+ '@react-email/code-block': 0.0.11(react@19.2.4)
+ '@react-email/code-inline': 0.0.5(react@19.2.4)
+ '@react-email/column': 0.0.13(react@19.2.4)
+ '@react-email/container': 0.0.15(react@19.2.4)
+ '@react-email/font': 0.0.9(react@19.2.4)
+ '@react-email/head': 0.0.12(react@19.2.4)
+ '@react-email/heading': 0.0.15(react@19.2.4)
+ '@react-email/hr': 0.0.11(react@19.2.4)
+ '@react-email/html': 0.0.11(react@19.2.4)
+ '@react-email/img': 0.0.11(react@19.2.4)
+ '@react-email/link': 0.0.12(react@19.2.4)
+ '@react-email/markdown': 0.0.14(react@19.2.4)
+ '@react-email/preview': 0.0.12(react@19.2.4)
+ '@react-email/render': 1.0.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@react-email/row': 0.0.12(react@19.2.4)
+ '@react-email/section': 0.0.16(react@19.2.4)
+ '@react-email/tailwind': 1.0.4(react@19.2.4)
+ '@react-email/text': 0.0.11(react@19.2.4)
+ react: 19.2.4
+ transitivePeerDependencies:
+ - react-dom
+
+ '@react-email/container@0.0.15(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+
+ '@react-email/font@0.0.9(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+
+ '@react-email/head@0.0.12(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+
+ '@react-email/heading@0.0.15(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+
+ '@react-email/hr@0.0.11(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+
+ '@react-email/html@0.0.11(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+
+ '@react-email/img@0.0.11(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+
+ '@react-email/link@0.0.12(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+
+ '@react-email/markdown@0.0.14(react@19.2.4)':
+ dependencies:
+ md-to-react-email: 5.0.5(react@19.2.4)
+ react: 19.2.4
+
+ '@react-email/preview@0.0.12(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+
+ '@react-email/render@1.0.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ html-to-text: 9.0.5
+ prettier: 3.4.2
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ react-promise-suspense: 0.3.4
+
+ '@react-email/row@0.0.12(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+
+ '@react-email/section@0.0.16(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+
+ '@react-email/tailwind@1.0.4(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+
+ '@react-email/text@0.0.11(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+
'@rolldown/pluginutils@1.0.0-beta.53': {}
'@rollup/plugin-commonjs@28.0.1(rollup@3.29.5)':
@@ -5818,6 +6252,11 @@ snapshots:
'@schummar/icu-type-parser@1.21.5': {}
+ '@selderee/plugin-htmlparser2@0.11.0':
+ dependencies:
+ domhandler: 5.0.3
+ selderee: 0.11.0
+
'@sentry-internal/browser-utils@8.55.0':
dependencies:
'@sentry/core': 8.55.0
@@ -6360,6 +6799,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@vitest/expect@3.2.4':
+ dependencies:
+ '@types/chai': 5.2.3
+ '@vitest/spy': 3.2.4
+ '@vitest/utils': 3.2.4
+ chai: 5.3.3
+ tinyrainbow: 2.0.0
+
'@vitest/expect@4.0.18':
dependencies:
'@standard-schema/spec': 1.1.0
@@ -6369,6 +6816,14 @@ snapshots:
chai: 6.2.2
tinyrainbow: 3.0.3
+ '@vitest/mocker@3.2.4(vite@7.3.1(@types/node@20.19.30)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
+ dependencies:
+ '@vitest/spy': 3.2.4
+ estree-walker: 3.0.3
+ magic-string: 0.30.21
+ optionalDependencies:
+ vite: 7.3.1(@types/node@20.19.30)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+
'@vitest/mocker@4.0.18(vite@7.3.1(@types/node@20.19.30)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
'@vitest/spy': 4.0.18
@@ -6377,23 +6832,49 @@ snapshots:
optionalDependencies:
vite: 7.3.1(@types/node@20.19.30)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ '@vitest/pretty-format@3.2.4':
+ dependencies:
+ tinyrainbow: 2.0.0
+
'@vitest/pretty-format@4.0.18':
dependencies:
tinyrainbow: 3.0.3
+ '@vitest/runner@3.2.4':
+ dependencies:
+ '@vitest/utils': 3.2.4
+ pathe: 2.0.3
+ strip-literal: 3.1.0
+
'@vitest/runner@4.0.18':
dependencies:
'@vitest/utils': 4.0.18
pathe: 2.0.3
+ '@vitest/snapshot@3.2.4':
+ dependencies:
+ '@vitest/pretty-format': 3.2.4
+ magic-string: 0.30.21
+ pathe: 2.0.3
+
'@vitest/snapshot@4.0.18':
dependencies:
'@vitest/pretty-format': 4.0.18
magic-string: 0.30.21
pathe: 2.0.3
+ '@vitest/spy@3.2.4':
+ dependencies:
+ tinyspy: 4.0.4
+
'@vitest/spy@4.0.18': {}
+ '@vitest/utils@3.2.4':
+ dependencies:
+ '@vitest/pretty-format': 3.2.4
+ loupe: 3.2.1
+ tinyrainbow: 2.0.0
+
'@vitest/utils@4.0.18':
dependencies:
'@vitest/pretty-format': 4.0.18
@@ -6728,6 +7209,14 @@ snapshots:
caniuse-lite@1.0.30001766: {}
+ chai@5.3.3:
+ dependencies:
+ assertion-error: 2.0.1
+ check-error: 2.1.3
+ deep-eql: 5.0.2
+ loupe: 3.2.1
+ pathval: 2.0.1
+
chai@6.2.2: {}
chalk@3.0.0:
@@ -6744,6 +7233,8 @@ snapshots:
chardet@2.1.1: {}
+ check-error@2.1.3: {}
+
chokidar@3.6.0:
dependencies:
anymatch: 3.1.3
@@ -6917,8 +7408,12 @@ snapshots:
decimal.js@10.6.0: {}
+ deep-eql@5.0.2: {}
+
deep-is@0.1.4: {}
+ deepmerge@4.3.1: {}
+
define-data-property@1.1.4:
dependencies:
es-define-property: 1.0.1
@@ -6953,6 +7448,24 @@ snapshots:
dom-accessibility-api@0.6.3: {}
+ dom-serializer@2.0.0:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ entities: 4.5.0
+
+ domelementtype@2.3.0: {}
+
+ domhandler@5.0.3:
+ dependencies:
+ domelementtype: 2.3.0
+
+ domutils@3.2.2:
+ dependencies:
+ dom-serializer: 2.0.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+
dot-prop@5.3.0:
dependencies:
is-obj: 2.0.0
@@ -7365,6 +7878,8 @@ snapshots:
extendable-error@0.1.7: {}
+ fast-deep-equal@2.0.1: {}
+
fast-deep-equal@3.1.3: {}
fast-glob@3.3.1:
@@ -7605,6 +8120,21 @@ snapshots:
transitivePeerDependencies:
- '@noble/hashes'
+ html-to-text@9.0.5:
+ dependencies:
+ '@selderee/plugin-htmlparser2': 0.11.0
+ deepmerge: 4.3.1
+ dom-serializer: 2.0.0
+ htmlparser2: 8.0.2
+ selderee: 0.11.0
+
+ htmlparser2@8.0.2:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ domutils: 3.2.2
+ entities: 4.5.0
+
http-proxy-agent@7.0.2:
dependencies:
agent-base: 7.1.4
@@ -7845,6 +8375,8 @@ snapshots:
js-tokens@4.0.0: {}
+ js-tokens@9.0.1: {}
+
js-yaml@3.14.2:
dependencies:
argparse: 1.0.10
@@ -7931,6 +8463,8 @@ snapshots:
dependencies:
language-subtag-registry: 0.3.23
+ leac@0.6.0: {}
+
levn@0.4.1:
dependencies:
prelude-ls: 1.2.1
@@ -7989,6 +8523,8 @@ snapshots:
dependencies:
js-tokens: 4.0.0
+ loupe@3.2.1: {}
+
lru-cache@10.4.3: {}
lru-cache@11.2.5: {}
@@ -8011,8 +8547,15 @@ snapshots:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
+ marked@7.0.4: {}
+
math-intrinsics@1.1.0: {}
+ md-to-react-email@5.0.5(react@19.2.4):
+ dependencies:
+ marked: 7.0.4
+ react: 19.2.4
+
mdn-data@2.12.2: {}
meow@12.1.1: {}
@@ -8252,6 +8795,11 @@ snapshots:
dependencies:
entities: 6.0.1
+ parseley@0.12.1:
+ dependencies:
+ leac: 0.6.0
+ peberminta: 0.9.0
+
path-exists@4.0.0: {}
path-key@3.1.1: {}
@@ -8267,6 +8815,10 @@ snapshots:
pathe@2.0.3: {}
+ pathval@2.0.1: {}
+
+ peberminta@0.9.0: {}
+
pg-int8@1.0.1: {}
pg-protocol@1.11.0: {}
@@ -8371,6 +8923,8 @@ snapshots:
prettier@2.8.8: {}
+ prettier@3.4.2: {}
+
prettier@3.8.1: {}
pretty-format@27.5.1:
@@ -8379,6 +8933,8 @@ snapshots:
ansi-styles: 5.2.0
react-is: 17.0.2
+ prismjs@1.29.0: {}
+
progress@2.0.3: {}
prompts@2.4.2:
@@ -8413,6 +8969,10 @@ snapshots:
react-is@17.0.2: {}
+ react-promise-suspense@0.3.4:
+ dependencies:
+ fast-deep-equal: 2.0.1
+
react-refresh@0.18.0: {}
react@19.2.4: {}
@@ -8579,6 +9139,10 @@ snapshots:
ajv-formats: 2.1.1(ajv@8.17.1)
ajv-keywords: 5.1.0(ajv@8.17.1)
+ selderee@0.11.0:
+ dependencies:
+ parseley: 0.12.1
+
semver@6.3.1: {}
semver@7.7.3: {}
@@ -8812,6 +9376,10 @@ snapshots:
strip-json-comments@3.1.1: {}
+ strip-literal@3.1.0:
+ dependencies:
+ js-tokens: 9.0.1
+
styled-jsx@5.1.6(@babel/core@7.28.6)(react@19.2.4):
dependencies:
client-only: 0.0.1
@@ -8910,8 +9478,14 @@ snapshots:
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
+ tinypool@1.1.1: {}
+
+ tinyrainbow@2.0.0: {}
+
tinyrainbow@3.0.3: {}
+ tinyspy@4.0.4: {}
+
tldts-core@7.0.21: {}
tldts@7.0.21:
@@ -9105,6 +9679,27 @@ snapshots:
uuid@9.0.1: {}
+ vite-node@3.2.4(@types/node@20.19.30)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2):
+ dependencies:
+ cac: 6.7.14
+ debug: 4.4.3
+ es-module-lexer: 1.7.0
+ pathe: 2.0.3
+ vite: 7.3.1(@types/node@20.19.30)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ transitivePeerDependencies:
+ - '@types/node'
+ - jiti
+ - less
+ - lightningcss
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - yaml
+
vite@7.3.1(@types/node@20.19.30)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2):
dependencies:
esbuild: 0.27.2
@@ -9121,6 +9716,49 @@ snapshots:
tsx: 4.21.0
yaml: 2.8.2
+ vitest@3.2.4(@types/node@20.19.30)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.4.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2):
+ dependencies:
+ '@types/chai': 5.2.3
+ '@vitest/expect': 3.2.4
+ '@vitest/mocker': 3.2.4(vite@7.3.1(@types/node@20.19.30)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ '@vitest/pretty-format': 3.2.4
+ '@vitest/runner': 3.2.4
+ '@vitest/snapshot': 3.2.4
+ '@vitest/spy': 3.2.4
+ '@vitest/utils': 3.2.4
+ chai: 5.3.3
+ debug: 4.4.3
+ expect-type: 1.3.0
+ magic-string: 0.30.21
+ pathe: 2.0.3
+ picomatch: 4.0.3
+ std-env: 3.10.0
+ tinybench: 2.9.0
+ tinyexec: 0.3.2
+ tinyglobby: 0.2.15
+ tinypool: 1.1.1
+ tinyrainbow: 2.0.0
+ vite: 7.3.1(@types/node@20.19.30)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite-node: 3.2.4(@types/node@20.19.30)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ why-is-node-running: 2.3.0
+ optionalDependencies:
+ '@types/node': 20.19.30
+ happy-dom: 20.4.0
+ jsdom: 27.4.0
+ transitivePeerDependencies:
+ - jiti
+ - less
+ - lightningcss
+ - msw
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - yaml
+
vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.19.30)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.4.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2):
dependencies:
'@vitest/expect': 4.0.18