ticket-pdf

This commit is contained in:
Kirubel-Kibru-Yaltopia 2025-12-29 18:56:07 +03:00
parent 58ab9c2141
commit 21447557d9
7 changed files with 1421 additions and 46 deletions

View File

@ -0,0 +1,65 @@
import { NextRequest, NextResponse } from 'next/server';
import { generateTicketPDF } from '../../../emails/utils/generateTicketPDF';
export async function GET(request: NextRequest) {
try {
const searchParams = request.nextUrl.searchParams;
// Extract ticket data from query parameters
const ticketData = {
userName: searchParams.get('userName') || undefined,
eventName: searchParams.get('eventName') || undefined,
eventDate: searchParams.get('eventDate') || undefined,
eventTime: searchParams.get('eventTime') || undefined,
venue: searchParams.get('venue') || undefined,
ticketType: searchParams.get('ticketType') || undefined,
amount: searchParams.get('amount') || undefined,
ticketNumber: searchParams.get('ticketNumber') || undefined,
purchaseDate: searchParams.get('purchaseDate') || undefined,
orderId: searchParams.get('orderId') || undefined,
seatNumber: searchParams.get('seatNumber') || undefined,
section: searchParams.get('section') || undefined,
};
// Generate PDF
const pdfBuffer = await generateTicketPDF(ticketData);
// Return PDF as response
return new NextResponse(pdfBuffer, {
headers: {
'Content-Type': 'application/pdf',
'Content-Disposition': `attachment; filename="ticket-${ticketData.ticketNumber || 'ticket'}.pdf"`,
},
});
} catch (error) {
console.error('Error generating PDF:', error);
return NextResponse.json(
{ error: 'Failed to generate PDF ticket' },
{ status: 500 }
);
}
}
export async function POST(request: NextRequest) {
try {
const body = await request.json();
// Generate PDF from request body
const pdfBuffer = await generateTicketPDF(body);
// Return PDF as response
return new NextResponse(pdfBuffer, {
headers: {
'Content-Type': 'application/pdf',
'Content-Disposition': `attachment; filename="ticket-${body.ticketNumber || 'ticket'}.pdf"`,
},
});
} catch (error) {
console.error('Error generating PDF:', error);
return NextResponse.json(
{ error: 'Failed to generate PDF ticket' },
{ status: 500 }
);
}
}

View File

@ -19,6 +19,11 @@ interface EventTicketEmailProps {
amount?: string;
qrCodeUrl?: string;
ticketNumber?: string;
orderId?: string;
purchaseDate?: string;
seatNumber?: string;
section?: string;
baseUrl?: string;
}
export const EventTicketEmail = ({
@ -31,7 +36,26 @@ export const EventTicketEmail = ({
amount = '$75.00',
qrCodeUrl = 'https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=EVENT-TICKET-12345',
ticketNumber = 'EVT-12345',
orderId = 'ORD-12345',
purchaseDate = new Date().toLocaleDateString(),
seatNumber,
section,
baseUrl = 'http://localhost:3000',
}: EventTicketEmailProps) => {
// Generate PDF download URL
const pdfUrl = new URL(`${baseUrl}/api/ticket-pdf`);
pdfUrl.searchParams.set('userName', userName);
pdfUrl.searchParams.set('eventName', eventName);
pdfUrl.searchParams.set('eventDate', eventDate);
pdfUrl.searchParams.set('eventTime', eventTime);
pdfUrl.searchParams.set('venue', venue);
pdfUrl.searchParams.set('ticketType', ticketType);
pdfUrl.searchParams.set('amount', amount);
pdfUrl.searchParams.set('ticketNumber', ticketNumber);
if (orderId) pdfUrl.searchParams.set('orderId', orderId);
if (purchaseDate) pdfUrl.searchParams.set('purchaseDate', purchaseDate);
if (seatNumber) pdfUrl.searchParams.set('seatNumber', seatNumber);
if (section) pdfUrl.searchParams.set('section', section);
return (
<EmailLayout
preview={`Your ${eventName} ticket is ready!`}
@ -98,6 +122,17 @@ export const EventTicketEmail = ({
View in App
</Button>
</Section>
<Section style={pdfSection}>
<Text style={pdfTitle}>📄 Download Your Ticket PDF</Text>
<Text style={pdfDescription}>
Get a detailed PDF version of your ticket with all information and QR code for easy access and printing.
</Text>
<Section style={buttonSection}>
<Button href={pdfUrl.toString()}>
Download PDF Ticket
</Button>
</Section>
</Section>
<Text style={text}>
We're excited to see you at the event!
</Text>
@ -207,6 +242,29 @@ const buttonSection = {
margin: '32px 0',
};
const pdfSection = {
textAlign: 'center' as const,
margin: '32px 0',
padding: '24px',
backgroundColor: theme.colors.primaryLightest,
borderRadius: '8px',
border: `2px solid ${theme.colors.primary}`,
};
const pdfTitle = {
color: theme.colors.primary,
fontSize: '20px',
fontWeight: '700',
margin: '0 0 12px',
};
const pdfDescription = {
color: theme.colors.textDark,
fontSize: '14px',
lineHeight: '20px',
margin: '0 0 20px',
};
EventTicketEmail.PreviewProps = {
userName: 'Kirubel',
eventName: 'Summer Music Festival 2024',
@ -217,6 +275,9 @@ EventTicketEmail.PreviewProps = {
amount: '$75.00',
qrCodeUrl: 'https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=EVENT-TICKET-12345',
ticketNumber: 'EVT-12345',
orderId: 'ORD-12345',
purchaseDate: new Date().toLocaleDateString(),
baseUrl: 'http://localhost:3000',
} as EventTicketEmailProps;
export default EventTicketEmail;

322
emails/ticket-pdf.tsx Normal file
View File

@ -0,0 +1,322 @@
import React from 'react';
import {
Document,
Page,
Text,
View,
Image,
StyleSheet,
} from '@react-pdf/renderer';
interface TicketPDFProps {
userName?: string;
eventName?: string;
eventDate?: string;
eventTime?: string;
venue?: string;
ticketType?: string;
amount?: string;
qrCodeDataUrl?: string;
ticketNumber?: string;
purchaseDate?: string;
orderId?: string;
seatNumber?: string;
section?: string;
}
export const TicketPDF = ({
userName = 'Kirubel',
eventName = 'Summer Music Festival 2024',
eventDate = 'July 15, 2024',
eventTime = '7:00 PM',
venue = 'City Park Amphitheater',
ticketType = 'General Admission',
amount = '$75.00',
qrCodeDataUrl,
ticketNumber = 'EVT-12345',
purchaseDate = new Date().toLocaleDateString(),
orderId = 'ORD-12345',
seatNumber,
section,
}: TicketPDFProps) => {
return (
<Document>
<Page size="A4" style={styles.page}>
{/* Header */}
<View style={styles.header}>
<Text style={styles.headerTitle}>AMBA</Text>
<Text style={styles.headerSubtitle}>Event Ticket</Text>
</View>
{/* Ticket Number Badge */}
<View style={styles.ticketBadge}>
<Text style={styles.ticketBadgeText}>TICKET #{ticketNumber}</Text>
</View>
{/* Event Information Section */}
<View style={styles.section}>
<Text style={styles.sectionTitle}>Event Details</Text>
<View style={styles.infoRow}>
<Text style={styles.infoLabel}>Event Name:</Text>
<Text style={styles.infoValue}>{eventName}</Text>
</View>
<View style={styles.infoRow}>
<Text style={styles.infoLabel}>Date:</Text>
<Text style={styles.infoValue}>{eventDate}</Text>
</View>
<View style={styles.infoRow}>
<Text style={styles.infoLabel}>Time:</Text>
<Text style={styles.infoValue}>{eventTime}</Text>
</View>
<View style={styles.infoRow}>
<Text style={styles.infoLabel}>Venue:</Text>
<Text style={styles.infoValue}>{venue}</Text>
</View>
</View>
{/* Ticket Holder Information */}
<View style={styles.section}>
<Text style={styles.sectionTitle}>Ticket Holder</Text>
<View style={styles.infoRow}>
<Text style={styles.infoLabel}>Name:</Text>
<Text style={styles.infoValue}>{userName}</Text>
</View>
<View style={styles.infoRow}>
<Text style={styles.infoLabel}>Ticket Type:</Text>
<Text style={styles.infoValue}>{ticketType}</Text>
</View>
{seatNumber && (
<View style={styles.infoRow}>
<Text style={styles.infoLabel}>Seat:</Text>
<Text style={styles.infoValue}>{seatNumber}</Text>
</View>
)}
{section && (
<View style={styles.infoRow}>
<Text style={styles.infoLabel}>Section:</Text>
<Text style={styles.infoValue}>{section}</Text>
</View>
)}
</View>
{/* Payment Information */}
<View style={styles.section}>
<Text style={styles.sectionTitle}>Payment Information</Text>
<View style={styles.infoRow}>
<Text style={styles.infoLabel}>Amount Paid:</Text>
<Text style={styles.infoValue}>{amount}</Text>
</View>
<View style={styles.infoRow}>
<Text style={styles.infoLabel}>Order ID:</Text>
<Text style={styles.infoValue}>{orderId}</Text>
</View>
<View style={styles.infoRow}>
<Text style={styles.infoLabel}>Purchase Date:</Text>
<Text style={styles.infoValue}>{purchaseDate}</Text>
</View>
</View>
{/* QR Code Section */}
{qrCodeDataUrl && (
<View style={styles.qrSection}>
<Text style={styles.qrTitle}>Entry QR Code</Text>
<Text style={styles.qrInstructions}>
Present this QR code at the venue entrance for quick access
</Text>
<View style={styles.qrContainer}>
<Image
src={qrCodeDataUrl}
style={styles.qrCode}
/>
</View>
<Text style={styles.qrNote}>
Ticket Number: {ticketNumber}
</Text>
</View>
)}
{/* Footer */}
<View style={styles.footer}>
<Text style={styles.footerText}>
This ticket is non-transferable and non-refundable.
</Text>
<Text style={styles.footerText}>
Please arrive at least 30 minutes before the event start time.
</Text>
<Text style={styles.footerText}>
For support, contact: support@amba.app
</Text>
</View>
{/* Terms and Conditions */}
<View style={styles.termsSection}>
<Text style={styles.termsTitle}>Terms & Conditions</Text>
<Text style={styles.termsText}>
This ticket grants admission to the specified event only
</Text>
<Text style={styles.termsText}>
The ticket holder must present valid ID if requested
</Text>
<Text style={styles.termsText}>
The venue reserves the right to refuse entry
</Text>
<Text style={styles.termsText}>
Lost or stolen tickets cannot be replaced
</Text>
<Text style={styles.termsText}>
Recording devices may be prohibited
</Text>
</View>
</Page>
</Document>
);
};
const styles = StyleSheet.create({
page: {
padding: 40,
backgroundColor: '#ffffff',
fontFamily: 'Helvetica',
},
header: {
marginBottom: 30,
textAlign: 'center',
borderBottom: '2px solid #105D38',
paddingBottom: 20,
},
headerTitle: {
fontSize: 32,
fontWeight: 'bold',
color: '#105D38',
marginBottom: 5,
},
headerSubtitle: {
fontSize: 16,
color: '#666666',
textTransform: 'uppercase',
letterSpacing: 2,
},
ticketBadge: {
backgroundColor: '#105D38',
padding: 10,
borderRadius: 5,
marginBottom: 25,
textAlign: 'center',
},
ticketBadgeText: {
color: '#ffffff',
fontSize: 14,
fontWeight: 'bold',
textAlign: 'center',
},
section: {
marginBottom: 20,
padding: 15,
backgroundColor: '#f8fafc',
borderRadius: 5,
border: '1px solid #e2e8f0',
},
sectionTitle: {
fontSize: 18,
fontWeight: 'bold',
color: '#1e293b',
marginBottom: 12,
borderBottom: '1px solid #cbd5e1',
paddingBottom: 8,
},
infoRow: {
flexDirection: 'row',
justifyContent: 'space-between',
marginBottom: 10,
paddingBottom: 8,
borderBottom: '1px solid #e2e8f0',
},
infoLabel: {
fontSize: 12,
color: '#FFB668',
fontWeight: '600',
flex: 1,
},
infoValue: {
fontSize: 12,
color: '#105D38',
fontWeight: 'normal',
flex: 2,
textAlign: 'right',
},
qrSection: {
marginTop: 30,
marginBottom: 20,
padding: 20,
backgroundColor: '#E6F4EC',
borderRadius: 5,
border: '2px solid #FFB668',
alignItems: 'center',
},
qrTitle: {
fontSize: 20,
fontWeight: 'bold',
color: '#105D38',
marginBottom: 8,
},
qrInstructions: {
fontSize: 11,
color: '#666666',
marginBottom: 15,
textAlign: 'center',
},
qrContainer: {
padding: 15,
backgroundColor: '#ffffff',
borderRadius: 5,
border: '2px solid #cbd5e1',
marginBottom: 10,
},
qrCode: {
width: 200,
height: 200,
},
qrNote: {
fontSize: 10,
color: '#666666',
marginTop: 10,
fontWeight: 'bold',
},
footer: {
marginTop: 20,
marginBottom: 15,
padding: 15,
backgroundColor: '#f8fafc',
borderRadius: 5,
border: '1px solid #e2e8f0',
},
footerText: {
fontSize: 9,
color: '#64748b',
marginBottom: 5,
textAlign: 'center',
lineHeight: 1.4,
},
termsSection: {
marginTop: 15,
padding: 15,
backgroundColor: '#fff7ed',
borderRadius: 5,
border: '1px solid #fed7aa',
},
termsTitle: {
fontSize: 14,
fontWeight: 'bold',
color: '#9a3412',
marginBottom: 10,
},
termsText: {
fontSize: 9,
color: '#7c2d12',
marginBottom: 5,
lineHeight: 1.4,
},
});
export default TicketPDF;

View File

@ -0,0 +1,44 @@
import React from 'react';
import { renderToBuffer } from '@react-pdf/renderer';
import QRCode from 'qrcode';
import { TicketPDF } from '../ticket-pdf';
interface TicketData {
userName?: string;
eventName?: string;
eventDate?: string;
eventTime?: string;
venue?: string;
ticketType?: string;
amount?: string;
ticketNumber?: string;
purchaseDate?: string;
orderId?: string;
seatNumber?: string;
section?: string;
}
export async function generateTicketPDF(data: TicketData): Promise<Buffer> {
// Generate QR code as data URL
const qrCodeData = data.ticketNumber || `TICKET-${Date.now()}`;
const qrCodeDataUrl = await QRCode.toDataURL(qrCodeData, {
width: 300,
margin: 2,
color: {
dark: '#000000',
light: '#FFFFFF',
},
});
// Create PDF document
const pdfDoc = React.createElement(TicketPDF, {
...data,
qrCodeDataUrl,
});
// Render to buffer
const pdfBuffer = await renderToBuffer(pdfDoc);
return pdfBuffer;
}

575
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -10,6 +10,7 @@
"dependencies": {
"@react-email/components": "^0.0.25",
"@react-email/render": "^1.0.4",
"@react-pdf/renderer": "^4.3.2",
"next": "^14.2.0",
"qrcode": "^1.5.3",
"react": "^18.3.1",

399
yarn.lock
View File

@ -129,7 +129,7 @@
resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz"
integrity sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==
"@babel/runtime@^7.23.5":
"@babel/runtime@^7.20.13", "@babel/runtime@^7.23.5":
version "7.28.4"
resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz"
integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==
@ -365,6 +365,16 @@
resolved "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.33.tgz"
integrity sha512-FnFn+ZBgsVMbGDsTqo8zsnRzydvsGV8vfiWwUo1LD8FTmPTdV+otGSWKc4LJec0oSexFnCYVO4hX8P8qQKaSlg==
"@next/swc-linux-x64-musl@14.1.4":
version "14.1.4"
resolved "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.4.tgz"
integrity sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==
"@next/swc-linux-x64-musl@14.2.33":
version "14.2.33"
resolved "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.33.tgz"
integrity sha512-345tsIWMzoXaQndUTDv1qypDRiebFxGYx9pYkhwY4hBRaOLt8UGfiWKr9FSSHs25dFIf8ZqIFaPdy5MljdoawA==
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
@ -799,6 +809,144 @@
resolved "https://registry.npmjs.org/@react-email/text/-/text-0.0.10.tgz"
integrity sha512-wNAnxeEAiFs6N+SxS0y6wTJWfewEzUETuyS2aZmT00xk50VijwyFRuhm4sYSjusMyshevomFwz5jNISCxRsGWw==
"@react-pdf/fns@3.1.2":
version "3.1.2"
resolved "https://registry.npmjs.org/@react-pdf/fns/-/fns-3.1.2.tgz"
integrity sha512-qTKGUf0iAMGg2+OsUcp9ffKnKi41RukM/zYIWMDJ4hRVYSr89Q7e3wSDW/Koqx3ea3Uy/z3h2y3wPX6Bdfxk6g==
"@react-pdf/font@^4.0.4":
version "4.0.4"
resolved "https://registry.npmjs.org/@react-pdf/font/-/font-4.0.4.tgz"
integrity sha512-8YtgGtL511txIEc9AjiilpZ7yjid8uCd8OGUl6jaL3LIHnrToUupSN4IzsMQpVTCMYiDLFnDNQzpZsOYtRS/Pg==
dependencies:
"@react-pdf/pdfkit" "^4.1.0"
"@react-pdf/types" "^2.9.2"
fontkit "^2.0.2"
is-url "^1.2.4"
"@react-pdf/image@^3.0.4":
version "3.0.4"
resolved "https://registry.npmjs.org/@react-pdf/image/-/image-3.0.4.tgz"
integrity sha512-z0ogVQE0bKqgXQ5smgzIU857rLV7bMgVdrYsu3UfXDDLSzI7QPvzf6MFTFllX6Dx2rcsF13E01dqKPtJEM799g==
dependencies:
"@react-pdf/png-js" "^3.0.0"
jay-peg "^1.1.1"
"@react-pdf/layout@^4.4.2":
version "4.4.2"
resolved "https://registry.npmjs.org/@react-pdf/layout/-/layout-4.4.2.tgz"
integrity sha512-gNu2oh8MiGR+NJZYTJ4c4q0nWCESBI6rKFiodVhE7OeVAjtzZzd6l65wsN7HXdWJqOZD3ttD97iE+tf5SOd/Yg==
dependencies:
"@react-pdf/fns" "3.1.2"
"@react-pdf/image" "^3.0.4"
"@react-pdf/primitives" "^4.1.1"
"@react-pdf/stylesheet" "^6.1.2"
"@react-pdf/textkit" "^6.1.0"
"@react-pdf/types" "^2.9.2"
emoji-regex-xs "^1.0.0"
queue "^6.0.1"
yoga-layout "^3.2.1"
"@react-pdf/pdfkit@^4.1.0":
version "4.1.0"
resolved "https://registry.npmjs.org/@react-pdf/pdfkit/-/pdfkit-4.1.0.tgz"
integrity sha512-Wm/IOAv0h/U5Ra94c/PltFJGcpTUd/fwVMVeFD6X9tTTPCttIwg0teRG1Lqq617J8K4W7jpL/B0HTH0mjp3QpQ==
dependencies:
"@babel/runtime" "^7.20.13"
"@react-pdf/png-js" "^3.0.0"
browserify-zlib "^0.2.0"
crypto-js "^4.2.0"
fontkit "^2.0.2"
jay-peg "^1.1.1"
linebreak "^1.1.0"
vite-compatible-readable-stream "^3.6.1"
"@react-pdf/png-js@^3.0.0":
version "3.0.0"
resolved "https://registry.npmjs.org/@react-pdf/png-js/-/png-js-3.0.0.tgz"
integrity sha512-eSJnEItZ37WPt6Qv5pncQDxLJRK15eaRwPT+gZoujP548CodenOVp49GST8XJvKMFt9YqIBzGBV/j9AgrOQzVA==
dependencies:
browserify-zlib "^0.2.0"
"@react-pdf/primitives@^4.1.1":
version "4.1.1"
resolved "https://registry.npmjs.org/@react-pdf/primitives/-/primitives-4.1.1.tgz"
integrity sha512-IuhxYls1luJb7NUWy6q5avb1XrNaVj9bTNI40U9qGRuS6n7Hje/8H8Qi99Z9UKFV74bBP3DOf3L1wV2qZVgVrQ==
"@react-pdf/reconciler@^2.0.0":
version "2.0.0"
resolved "https://registry.npmjs.org/@react-pdf/reconciler/-/reconciler-2.0.0.tgz"
integrity sha512-7zaPRujpbHSmCpIrZ+b9HSTJHthcVZzX0Wx7RzvQGsGBUbHP4p6s5itXrAIOuQuPvDepoHGNOvf6xUuMVvdoyw==
dependencies:
object-assign "^4.1.1"
scheduler "0.25.0-rc-603e6108-20241029"
"@react-pdf/render@^4.3.2":
version "4.3.2"
resolved "https://registry.npmjs.org/@react-pdf/render/-/render-4.3.2.tgz"
integrity sha512-el5KYM1sH/PKcO4tRCIm8/AIEmhtraaONbwCrBhFdehoGv6JtgnXiMxHGAvZbI5kEg051GbyP+XIU6f6YbOu6Q==
dependencies:
"@babel/runtime" "^7.20.13"
"@react-pdf/fns" "3.1.2"
"@react-pdf/primitives" "^4.1.1"
"@react-pdf/textkit" "^6.1.0"
"@react-pdf/types" "^2.9.2"
abs-svg-path "^0.1.1"
color-string "^1.9.1"
normalize-svg-path "^1.1.0"
parse-svg-path "^0.1.2"
svg-arc-to-cubic-bezier "^3.2.0"
"@react-pdf/renderer@^4.3.2":
version "4.3.2"
resolved "https://registry.npmjs.org/@react-pdf/renderer/-/renderer-4.3.2.tgz"
integrity sha512-EhPkj35gO9rXIyyx29W3j3axemvVY5RigMmlK4/6Ku0pXB8z9PEE/sz4ZBOShu2uot6V4xiCR3aG+t9IjJJlBQ==
dependencies:
"@babel/runtime" "^7.20.13"
"@react-pdf/fns" "3.1.2"
"@react-pdf/font" "^4.0.4"
"@react-pdf/layout" "^4.4.2"
"@react-pdf/pdfkit" "^4.1.0"
"@react-pdf/primitives" "^4.1.1"
"@react-pdf/reconciler" "^2.0.0"
"@react-pdf/render" "^4.3.2"
"@react-pdf/types" "^2.9.2"
events "^3.3.0"
object-assign "^4.1.1"
prop-types "^15.6.2"
queue "^6.0.1"
"@react-pdf/stylesheet@^6.1.2":
version "6.1.2"
resolved "https://registry.npmjs.org/@react-pdf/stylesheet/-/stylesheet-6.1.2.tgz"
integrity sha512-E3ftGRYUQGKiN3JOgtGsLDo0hGekA6dmkmi/MYACytmPTKxQRBSO3126MebmCq+t1rgU9uRlREIEawJ+8nzSbw==
dependencies:
"@react-pdf/fns" "3.1.2"
"@react-pdf/types" "^2.9.2"
color-string "^1.9.1"
hsl-to-hex "^1.0.0"
media-engine "^1.0.3"
postcss-value-parser "^4.1.0"
"@react-pdf/textkit@^6.1.0":
version "6.1.0"
resolved "https://registry.npmjs.org/@react-pdf/textkit/-/textkit-6.1.0.tgz"
integrity sha512-sFlzDC9CDFrJsnL3B/+NHrk9+Advqk7iJZIStiYQDdskbow8GF/AGYrpIk+vWSnh35YxaGbHkqXq53XOxnyrjQ==
dependencies:
"@react-pdf/fns" "3.1.2"
bidi-js "^1.0.2"
hyphen "^1.6.4"
unicode-properties "^1.4.1"
"@react-pdf/types@^2.9.2":
version "2.9.2"
resolved "https://registry.npmjs.org/@react-pdf/types/-/types-2.9.2.tgz"
integrity sha512-dufvpKId9OajLLbgn9q7VLUmyo1Jf+iyGk2ZHmCL8nIDtL8N1Ejh9TH7+pXXrR0tdie1nmnEb5Bz9U7g4hI4/g==
dependencies:
"@react-pdf/font" "^4.0.4"
"@react-pdf/primitives" "^4.1.1"
"@react-pdf/stylesheet" "^6.1.2"
"@selderee/plugin-htmlparser2@^0.11.0":
version "0.11.0"
resolved "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz"
@ -817,6 +965,11 @@
resolved "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.101.tgz"
integrity sha512-/kBMcoF12PRO/lwa8Z7w4YyiKDcXQEiLvM+S3G9EvkoKYGgkkz4Q6PSNhF5rwg/E3+Hq5/9D2R+6nrkF287ihg==
"@swc/core-linux-x64-musl@1.3.101":
version "1.3.101"
resolved "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.101.tgz"
integrity sha512-kDN8lm4Eew0u1p+h1l3JzoeGgZPQ05qDE0czngnjmfpsH2sOZxVj1hdiCwS5lArpy7ktaLu5JdRnx70MkUzhXw==
"@swc/core@1.3.101":
version "1.3.101"
resolved "https://registry.npmjs.org/@swc/core/-/core-1.3.101.tgz"
@ -849,6 +1002,13 @@
"@swc/counter" "^0.1.3"
tslib "^2.4.0"
"@swc/helpers@^0.5.12":
version "0.5.18"
resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.18.tgz"
integrity sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==
dependencies:
tslib "^2.8.0"
"@swc/helpers@0.5.2":
version "0.5.2"
resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz"
@ -1097,6 +1257,11 @@ abbrev@^2.0.0:
resolved "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz"
integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==
abs-svg-path@^0.1.1:
version "0.1.1"
resolved "https://registry.npmjs.org/abs-svg-path/-/abs-svg-path-0.1.1.tgz"
integrity sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==
accepts@~1.3.4:
version "1.3.8"
resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz"
@ -1223,11 +1388,16 @@ balanced-match@^1.0.0:
resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
base64-js@^1.3.1:
base64-js@^1.1.2, base64-js@^1.3.0, base64-js@^1.3.1:
version "1.5.1"
resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
base64-js@0.0.8:
version "0.0.8"
resolved "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz"
integrity sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==
base64id@~2.0.0, base64id@2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz"
@ -1238,6 +1408,13 @@ baseline-browser-mapping@^2.9.0:
resolved "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.7.tgz"
integrity sha512-k9xFKplee6KIio3IDbwj+uaCLpqzOwakOgmqzPezM0sFJlFKcg30vk2wOiAJtkTSfx0SSQDSe8q+mWA/fSH5Zg==
bidi-js@^1.0.2:
version "1.0.3"
resolved "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz"
integrity sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==
dependencies:
require-from-string "^2.0.2"
binary-extensions@^2.0.0:
version "2.3.0"
resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz"
@ -1274,6 +1451,20 @@ braces@^3.0.3, braces@~3.0.2:
dependencies:
fill-range "^7.1.1"
brotli@^1.3.2:
version "1.3.3"
resolved "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz"
integrity sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==
dependencies:
base64-js "^1.1.2"
browserify-zlib@^0.2.0:
version "0.2.0"
resolved "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz"
integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
dependencies:
pako "~1.0.5"
browserslist@^4.21.5, browserslist@^4.24.0, browserslist@^4.26.3, "browserslist@>= 4.21.0":
version "4.28.1"
resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz"
@ -1399,6 +1590,11 @@ clone@^1.0.2:
resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz"
integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
clone@^2.1.2:
version "2.1.2"
resolved "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz"
integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==
clsx@^1.2.1:
version "1.2.1"
resolved "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz"
@ -1416,11 +1612,19 @@ color-convert@^2.0.1:
dependencies:
color-name "~1.1.4"
color-name@~1.1.4:
color-name@^1.0.0, color-name@~1.1.4:
version "1.1.4"
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
color-string@^1.9.1:
version "1.9.1"
resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz"
integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==
dependencies:
color-name "^1.0.0"
simple-swizzle "^0.2.2"
commander@^10.0.0:
version "10.0.1"
resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz"
@ -1481,6 +1685,11 @@ cross-spawn@^7.0.6:
shebang-command "^2.0.0"
which "^2.0.1"
crypto-js@^4.2.0:
version "4.2.0"
resolved "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz"
integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==
cssesc@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz"
@ -1537,6 +1746,11 @@ detect-node-es@^1.1.0:
resolved "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz"
integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==
dfa@^1.2.0:
version "1.2.0"
resolved "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz"
integrity sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==
didyoumean@^1.2.2:
version "1.2.2"
resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz"
@ -1607,6 +1821,11 @@ electron-to-chromium@^1.5.263:
resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz"
integrity sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==
emoji-regex-xs@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz"
integrity sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==
emoji-regex@^8.0.0:
version "8.0.0"
resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz"
@ -1834,7 +2053,7 @@ esutils@^2.0.2:
resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz"
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
events@^3.2.0:
events@^3.2.0, events@^3.3.0:
version "3.3.0"
resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz"
integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
@ -1930,6 +2149,21 @@ flatted@^3.2.9:
resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz"
integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==
fontkit@^2.0.2:
version "2.0.4"
resolved "https://registry.npmjs.org/fontkit/-/fontkit-2.0.4.tgz"
integrity sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==
dependencies:
"@swc/helpers" "^0.5.12"
brotli "^1.3.2"
clone "^2.1.2"
dfa "^1.2.0"
fast-deep-equal "^3.1.3"
restructure "^3.0.0"
tiny-inflate "^1.0.3"
unicode-properties "^1.4.0"
unicode-trie "^2.0.0"
foreground-child@^3.1.0:
version "3.3.1"
resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz"
@ -2036,6 +2270,18 @@ hasown@^2.0.2:
dependencies:
function-bind "^1.1.2"
hsl-to-hex@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/hsl-to-hex/-/hsl-to-hex-1.0.0.tgz"
integrity sha512-K6GVpucS5wFf44X0h2bLVRDsycgJmf9FF2elg+CrqD8GcFU8c6vYhgXn8NjUkFCwj+xDFb70qgLbTUm6sxwPmA==
dependencies:
hsl-to-rgb-for-reals "^1.1.0"
hsl-to-rgb-for-reals@^1.1.0:
version "1.1.1"
resolved "https://registry.npmjs.org/hsl-to-rgb-for-reals/-/hsl-to-rgb-for-reals-1.1.1.tgz"
integrity sha512-LgOWAkrN0rFaQpfdWBQlv/VhkOxb5AsBjk6NQVx4yEzWS923T07X0M1Y0VNko2H52HeSpZrZNNMJ0aFqsdVzQg==
html-to-text@^9.0.5, html-to-text@9.0.5:
version "9.0.5"
resolved "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz"
@ -2057,6 +2303,11 @@ htmlparser2@^8.0.2:
domutils "^3.0.1"
entities "^4.4.0"
hyphen@^1.6.4:
version "1.13.0"
resolved "https://registry.npmjs.org/hyphen/-/hyphen-1.13.0.tgz"
integrity sha512-flZoIooovWALhu04Z3ooPWQldjTOgLDs5DlbUxTjnIyhQKu9ukljKWwElFCUyVi6TBk210bMBlaMG8eW3bXU+g==
ieee754@^1.1.13:
version "1.2.1"
resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz"
@ -2080,7 +2331,7 @@ imurmurhash@^0.1.4:
resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz"
integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
inherits@^2.0.3, inherits@^2.0.4:
inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@ -2090,6 +2341,11 @@ ini@^1.3.4:
resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz"
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
is-arrayish@^0.3.1:
version "0.3.4"
resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz"
integrity sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==
is-binary-path@~2.1.0:
version "2.1.0"
resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz"
@ -2136,6 +2392,11 @@ is-unicode-supported@^0.1.0:
resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz"
integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
is-url@^1.2.4:
version "1.2.4"
resolved "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz"
integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==
isexe@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"
@ -2159,6 +2420,13 @@ jackspeak@^3.1.2:
optionalDependencies:
"@pkgjs/parseargs" "^0.11.0"
jay-peg@^1.1.1:
version "1.1.1"
resolved "https://registry.npmjs.org/jay-peg/-/jay-peg-1.1.1.tgz"
integrity sha512-D62KEuBxz/ip2gQKOEhk/mx14o7eiFRaU+VNNSP4MOiIkwb/D6B3G1Mfas7C/Fit8EsSV2/IWjZElx/Gs6A4ww==
dependencies:
restructure "^3.0.0"
jest-worker@^27.4.5:
version "27.5.1"
resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz"
@ -2266,6 +2534,14 @@ lilconfig@^3.0.0:
resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz"
integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==
linebreak@^1.1.0:
version "1.1.0"
resolved "https://registry.npmjs.org/linebreak/-/linebreak-1.1.0.tgz"
integrity sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==
dependencies:
base64-js "0.0.8"
unicode-trie "^2.0.0"
lines-and-columns@^1.1.6:
version "1.2.4"
resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz"
@ -2303,7 +2579,7 @@ log-symbols@^4.1.0, log-symbols@4.1.0:
chalk "^4.1.0"
is-unicode-supported "^0.1.0"
loose-envify@^1.1.0:
loose-envify@^1.1.0, loose-envify@^1.4.0:
version "1.4.0"
resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz"
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
@ -2334,6 +2610,11 @@ md-to-react-email@5.0.2:
dependencies:
marked "7.0.4"
media-engine@^1.0.3:
version "1.0.3"
resolved "https://registry.npmjs.org/media-engine/-/media-engine-1.0.3.tgz"
integrity sha512-aa5tG6sDoK+k70B9iEX1NeyfT8ObCKhNDs6lJVpwF6r8vhUfuKMslIcirq6HIUYuuUYLefcEQOn9bSBOvawtwg==
merge-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz"
@ -2497,7 +2778,14 @@ normalize-range@^0.1.2:
resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz"
integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
object-assign@^4, object-assign@^4.0.1:
normalize-svg-path@^1.1.0:
version "1.1.0"
resolved "https://registry.npmjs.org/normalize-svg-path/-/normalize-svg-path-1.1.0.tgz"
integrity sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg==
dependencies:
svg-arc-to-cubic-bezier "^3.0.0"
object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
@ -2579,6 +2867,16 @@ package-json-from-dist@^1.0.0:
resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz"
integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==
pako@^0.2.5:
version "0.2.9"
resolved "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz"
integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==
pako@~1.0.5:
version "1.0.11"
resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz"
integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
parent-module@^1.0.0:
version "1.0.1"
resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz"
@ -2586,6 +2884,11 @@ parent-module@^1.0.0:
dependencies:
callsites "^3.0.0"
parse-svg-path@^0.1.2:
version "0.1.2"
resolved "https://registry.npmjs.org/parse-svg-path/-/parse-svg-path-0.1.2.tgz"
integrity sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==
parseley@^0.12.0:
version "0.12.1"
resolved "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz"
@ -2691,7 +2994,7 @@ postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.1.1:
cssesc "^3.0.0"
util-deprecate "^1.0.2"
postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0:
postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0:
version "4.2.0"
resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz"
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
@ -2746,6 +3049,15 @@ prismjs@1.29.0:
resolved "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz"
integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==
prop-types@^15.6.2:
version "15.8.1"
resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz"
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
dependencies:
loose-envify "^1.4.0"
object-assign "^4.1.1"
react-is "^16.13.1"
proto-list@~1.2.1:
version "1.2.4"
resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz"
@ -2770,6 +3082,13 @@ queue-microtask@^1.2.2:
resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
queue@^6.0.1:
version "6.0.2"
resolved "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz"
integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==
dependencies:
inherits "~2.0.3"
randombytes@^2.1.0:
version "2.1.0"
resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz"
@ -2831,6 +3150,11 @@ react-email@^2.0.0:
tailwindcss "3.4.0"
typescript "5.1.6"
react-is@^16.13.1:
version "16.13.1"
resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
react-promise-suspense@^0.3.4, react-promise-suspense@0.3.4:
version "0.3.4"
resolved "https://registry.npmjs.org/react-promise-suspense/-/react-promise-suspense-0.3.4.tgz"
@ -2932,6 +3256,11 @@ restore-cursor@^3.1.0:
onetime "^5.1.0"
signal-exit "^3.0.2"
restructure@^3.0.0:
version "3.0.2"
resolved "https://registry.npmjs.org/restructure/-/restructure-3.0.2.tgz"
integrity sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==
reusify@^1.0.4:
version "1.1.0"
resolved "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz"
@ -2956,6 +3285,11 @@ scheduler@^0.23.2:
dependencies:
loose-envify "^1.1.0"
scheduler@0.25.0-rc-603e6108-20241029:
version "0.25.0-rc-603e6108-20241029"
resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0-rc-603e6108-20241029.tgz"
integrity sha512-pFwF6H1XrSdYYNLfOcGlM28/j8CGLu8IvdrxqhjWULe2bPcKiKW4CV+OWqR/9fT52mywx65l7ysNkjLKBda7eA==
schema-utils@^4.3.0, schema-utils@^4.3.3:
version "4.3.3"
resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz"
@ -3017,6 +3351,13 @@ signal-exit@^4.0.1:
resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz"
integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
simple-swizzle@^0.2.2:
version "0.2.4"
resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz"
integrity sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==
dependencies:
is-arrayish "^0.3.1"
socket.io-adapter@~2.5.2:
version "2.5.5"
resolved "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz"
@ -3200,6 +3541,11 @@ supports-preserve-symlinks-flag@^1.0.0:
resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
svg-arc-to-cubic-bezier@^3.0.0, svg-arc-to-cubic-bezier@^3.2.0:
version "3.2.0"
resolved "https://registry.npmjs.org/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz"
integrity sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g==
tailwind-merge@2.2.0:
version "2.2.0"
resolved "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.2.0.tgz"
@ -3275,6 +3621,11 @@ thenify-all@^1.0.0:
dependencies:
any-promise "^1.0.0"
tiny-inflate@^1.0.0, tiny-inflate@^1.0.3:
version "1.0.3"
resolved "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz"
integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==
tinyglobby@^0.2.11:
version "0.2.15"
resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz"
@ -3295,7 +3646,7 @@ ts-interface-checker@^0.1.9:
resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz"
integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0:
tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.8.0:
version "2.8.1"
resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz"
integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
@ -3327,6 +3678,22 @@ undici-types@~7.16.0:
resolved "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz"
integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==
unicode-properties@^1.4.0, unicode-properties@^1.4.1:
version "1.4.1"
resolved "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz"
integrity sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==
dependencies:
base64-js "^1.3.0"
unicode-trie "^2.0.0"
unicode-trie@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz"
integrity sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==
dependencies:
pako "^0.2.5"
tiny-inflate "^1.0.0"
update-browserslist-db@^1.2.0:
version "1.2.2"
resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz"
@ -3367,6 +3734,15 @@ vary@^1:
resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"
integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
vite-compatible-readable-stream@^3.6.1:
version "3.6.1"
resolved "https://registry.npmjs.org/vite-compatible-readable-stream/-/vite-compatible-readable-stream-3.6.1.tgz"
integrity sha512-t20zYkrSf868+j/p31cRIGN28Phrjm3nRSLR2fyc2tiWi4cZGVdv68yNlwnIINTkMTmPoMiSlc0OadaO7DXZaQ==
dependencies:
inherits "^2.0.3"
string_decoder "^1.1.1"
util-deprecate "^1.0.1"
watchpack@^2.4.4:
version "2.4.4"
resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz"
@ -3516,3 +3892,8 @@ yocto-queue@^0.1.0:
version "0.1.0"
resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
yoga-layout@^3.2.1:
version "3.2.1"
resolved "https://registry.npmjs.org/yoga-layout/-/yoga-layout-3.2.1.tgz"
integrity sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==