├── .gitignore ├── examples ├── nextjs │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── app │ │ ├── Pdf.tsx │ │ ├── favicon.ico │ │ ├── layout.tsx │ │ └── page.tsx │ ├── next.config.js │ ├── package.json │ ├── pnpm-lock.yaml │ ├── postcss.config.js │ ├── tailwind.config.ts │ └── tsconfig.json └── vite │ ├── .gitignore │ ├── index.html │ ├── package.json │ ├── pnpm-lock.yaml │ ├── public │ └── vite.svg │ ├── src │ ├── App.tsx │ ├── index.css │ ├── main.tsx │ └── vite-env.d.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── package.json ├── pnpm-lock.yaml ├── readme.md ├── src ├── index.test.ts ├── index.ts ├── properties.ts └── utils.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | -------------------------------------------------------------------------------- /examples/nextjs/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /examples/nextjs/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | .yarn/install-state.gz 8 | 9 | # testing 10 | /coverage 11 | 12 | # next.js 13 | /.next/ 14 | /out/ 15 | 16 | # production 17 | /build 18 | 19 | # misc 20 | .DS_Store 21 | *.pem 22 | 23 | # debug 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | -------------------------------------------------------------------------------- /examples/nextjs/README.md: -------------------------------------------------------------------------------- 1 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). 2 | 3 | ## Getting Started 4 | 5 | First, run the development server: 6 | 7 | ```bash 8 | npm run dev 9 | # or 10 | yarn dev 11 | # or 12 | pnpm dev 13 | ``` 14 | 15 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 16 | 17 | You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file. 18 | 19 | [API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`. 20 | 21 | The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. 22 | 23 | This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. 24 | 25 | ## Learn More 26 | 27 | To learn more about Next.js, take a look at the following resources: 28 | 29 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. 30 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. 31 | 32 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! 33 | 34 | ## Deploy on Vercel 35 | 36 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. 37 | 38 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. 39 | -------------------------------------------------------------------------------- /examples/nextjs/app/Pdf.tsx: -------------------------------------------------------------------------------- 1 | import { PDFViewer, Document, Page, Text, View } from "@react-pdf/renderer"; 2 | import { createTw } from "../../../src"; 3 | 4 | const tw = createTw({ 5 | theme: { 6 | extend: { 7 | colors: { 8 | custom: "cornflowerblue", 9 | }, 10 | }, 11 | }, 12 | }); 13 | 14 | export default function Pdf() { 15 | return ( 16 | 17 | 18 | 19 | {[...Array(12)].map((_, i) => ( 20 | 25 | 26 | Section {i + 1} 27 | 28 | 29 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla 30 | semper efficitur libero in laoreet. Sed iaculis, magna suscipit 31 | placerat commodo, risus turpis tincidunt ligula, ac euismod 32 | justo sem id risus. Nullam euismod vestibulum leo, mollis 33 | maximus sapien luctus in. Vivamus malesuada vulputate ornare. 34 | Mauris ut accumsan felis. Vivamus enim urna, ultrices eu eros 35 | ac, bibendum vehicula eros. Praesent ipsum orci, molestie 36 | gravida tristique at, dapibus vitae est. Phasellus lectus nulla, 37 | consequat eu mi ut, tempus pulvinar neque. 38 | 39 | 40 | ))} 41 | 42 | 43 | 44 | ); 45 | } 46 | -------------------------------------------------------------------------------- /examples/nextjs/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aanckar/react-pdf-tailwind/8f90f2cadd92672bed282ebdf940f90bbc7f6941/examples/nextjs/app/favicon.ico -------------------------------------------------------------------------------- /examples/nextjs/app/layout.tsx: -------------------------------------------------------------------------------- 1 | import type { Metadata } from "next"; 2 | 3 | export const metadata: Metadata = { 4 | title: "Next.js example", 5 | description: "Example of react-pdf-tailwind in Next.js", 6 | }; 7 | 8 | export default function RootLayout({ 9 | children, 10 | }: { 11 | children: React.ReactNode; 12 | }) { 13 | return ( 14 | 15 | {children} 16 | 17 | ); 18 | } 19 | -------------------------------------------------------------------------------- /examples/nextjs/app/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import dynamic from "next/dynamic"; 4 | 5 | const ClientPdf = dynamic(() => import("./Pdf"), { 6 | ssr: false, 7 | }); 8 | 9 | export default function HomePage() { 10 | return ; 11 | } 12 | -------------------------------------------------------------------------------- /examples/nextjs/next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | transpilePackages: ["../../../src"], 4 | }; 5 | 6 | module.exports = nextConfig; 7 | -------------------------------------------------------------------------------- /examples/nextjs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-pdf-tailwind-nextjs-example", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "@react-pdf/renderer": "^3.1.14", 13 | "react": "^18", 14 | "react-dom": "^18", 15 | "next": "14.0.4" 16 | }, 17 | "devDependencies": { 18 | "typescript": "^5", 19 | "@types/node": "^20", 20 | "@types/react": "^18", 21 | "@types/react-dom": "^18", 22 | "autoprefixer": "^10.0.1", 23 | "postcss": "^8", 24 | "tailwindcss": "^3.3.0", 25 | "eslint": "^8", 26 | "eslint-config-next": "14.0.4" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /examples/nextjs/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /examples/nextjs/tailwind.config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from "tailwindcss"; 2 | 3 | const config: Config = { 4 | content: [ 5 | "./pages/**/*.{js,ts,jsx,tsx,mdx}", 6 | "./components/**/*.{js,ts,jsx,tsx,mdx}", 7 | "./app/**/*.{js,ts,jsx,tsx,mdx}", 8 | ], 9 | theme: { 10 | extend: { 11 | backgroundImage: { 12 | "gradient-radial": "radial-gradient(var(--tw-gradient-stops))", 13 | "gradient-conic": 14 | "conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))", 15 | }, 16 | }, 17 | }, 18 | plugins: [], 19 | }; 20 | export default config; 21 | -------------------------------------------------------------------------------- /examples/nextjs/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "noEmit": true, 9 | "esModuleInterop": true, 10 | "module": "esnext", 11 | "moduleResolution": "bundler", 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "jsx": "preserve", 15 | "incremental": true, 16 | "plugins": [ 17 | { 18 | "name": "next" 19 | } 20 | ], 21 | "paths": { 22 | "@/*": ["./*"] 23 | } 24 | }, 25 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], 26 | "exclude": ["node_modules"] 27 | } 28 | -------------------------------------------------------------------------------- /examples/vite/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /examples/vite/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite example 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /examples/vite/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-pdf-tailwind-vite-example", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "tsc && vite build", 9 | "preview": "vite preview" 10 | }, 11 | "dependencies": { 12 | "@react-pdf/renderer": "^3.1.14", 13 | "events": "^3.3.0", 14 | "react": "^18.2.0", 15 | "react-dom": "^18.2.0" 16 | }, 17 | "devDependencies": { 18 | "@types/react": "^18.2.45", 19 | "@types/react-dom": "^18.2.18", 20 | "@vitejs/plugin-react": "^4.2.1", 21 | "typescript": "^5.3.3", 22 | "vite": "^5.0.10" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /examples/vite/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | '@react-pdf/renderer': 9 | specifier: ^3.1.14 10 | version: 3.1.14(react@18.2.0) 11 | events: 12 | specifier: ^3.3.0 13 | version: 3.3.0 14 | react: 15 | specifier: ^18.2.0 16 | version: 18.2.0 17 | react-dom: 18 | specifier: ^18.2.0 19 | version: 18.2.0(react@18.2.0) 20 | 21 | devDependencies: 22 | '@types/react': 23 | specifier: ^18.2.45 24 | version: 18.2.45 25 | '@types/react-dom': 26 | specifier: ^18.2.18 27 | version: 18.2.18 28 | '@vitejs/plugin-react': 29 | specifier: ^4.2.1 30 | version: 4.2.1(vite@5.0.10) 31 | typescript: 32 | specifier: ^5.3.3 33 | version: 5.3.3 34 | vite: 35 | specifier: ^5.0.10 36 | version: 5.0.10 37 | 38 | packages: 39 | 40 | /@ampproject/remapping@2.2.1: 41 | resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} 42 | engines: {node: '>=6.0.0'} 43 | dependencies: 44 | '@jridgewell/gen-mapping': 0.3.3 45 | '@jridgewell/trace-mapping': 0.3.20 46 | dev: true 47 | 48 | /@babel/code-frame@7.23.5: 49 | resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} 50 | engines: {node: '>=6.9.0'} 51 | dependencies: 52 | '@babel/highlight': 7.23.4 53 | chalk: 2.4.2 54 | dev: true 55 | 56 | /@babel/compat-data@7.23.5: 57 | resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} 58 | engines: {node: '>=6.9.0'} 59 | dev: true 60 | 61 | /@babel/core@7.23.6: 62 | resolution: {integrity: sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==} 63 | engines: {node: '>=6.9.0'} 64 | dependencies: 65 | '@ampproject/remapping': 2.2.1 66 | '@babel/code-frame': 7.23.5 67 | '@babel/generator': 7.23.6 68 | '@babel/helper-compilation-targets': 7.23.6 69 | '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) 70 | '@babel/helpers': 7.23.6 71 | '@babel/parser': 7.23.6 72 | '@babel/template': 7.22.15 73 | '@babel/traverse': 7.23.6 74 | '@babel/types': 7.23.6 75 | convert-source-map: 2.0.0 76 | debug: 4.3.4 77 | gensync: 1.0.0-beta.2 78 | json5: 2.2.3 79 | semver: 6.3.1 80 | transitivePeerDependencies: 81 | - supports-color 82 | dev: true 83 | 84 | /@babel/generator@7.23.6: 85 | resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} 86 | engines: {node: '>=6.9.0'} 87 | dependencies: 88 | '@babel/types': 7.23.6 89 | '@jridgewell/gen-mapping': 0.3.3 90 | '@jridgewell/trace-mapping': 0.3.20 91 | jsesc: 2.5.2 92 | dev: true 93 | 94 | /@babel/helper-compilation-targets@7.23.6: 95 | resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} 96 | engines: {node: '>=6.9.0'} 97 | dependencies: 98 | '@babel/compat-data': 7.23.5 99 | '@babel/helper-validator-option': 7.23.5 100 | browserslist: 4.22.2 101 | lru-cache: 5.1.1 102 | semver: 6.3.1 103 | dev: true 104 | 105 | /@babel/helper-environment-visitor@7.22.20: 106 | resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} 107 | engines: {node: '>=6.9.0'} 108 | dev: true 109 | 110 | /@babel/helper-function-name@7.23.0: 111 | resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} 112 | engines: {node: '>=6.9.0'} 113 | dependencies: 114 | '@babel/template': 7.22.15 115 | '@babel/types': 7.23.6 116 | dev: true 117 | 118 | /@babel/helper-hoist-variables@7.22.5: 119 | resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} 120 | engines: {node: '>=6.9.0'} 121 | dependencies: 122 | '@babel/types': 7.23.6 123 | dev: true 124 | 125 | /@babel/helper-module-imports@7.22.15: 126 | resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} 127 | engines: {node: '>=6.9.0'} 128 | dependencies: 129 | '@babel/types': 7.23.6 130 | dev: true 131 | 132 | /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.6): 133 | resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} 134 | engines: {node: '>=6.9.0'} 135 | peerDependencies: 136 | '@babel/core': ^7.0.0 137 | dependencies: 138 | '@babel/core': 7.23.6 139 | '@babel/helper-environment-visitor': 7.22.20 140 | '@babel/helper-module-imports': 7.22.15 141 | '@babel/helper-simple-access': 7.22.5 142 | '@babel/helper-split-export-declaration': 7.22.6 143 | '@babel/helper-validator-identifier': 7.22.20 144 | dev: true 145 | 146 | /@babel/helper-plugin-utils@7.22.5: 147 | resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} 148 | engines: {node: '>=6.9.0'} 149 | dev: true 150 | 151 | /@babel/helper-simple-access@7.22.5: 152 | resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} 153 | engines: {node: '>=6.9.0'} 154 | dependencies: 155 | '@babel/types': 7.23.6 156 | dev: true 157 | 158 | /@babel/helper-split-export-declaration@7.22.6: 159 | resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} 160 | engines: {node: '>=6.9.0'} 161 | dependencies: 162 | '@babel/types': 7.23.6 163 | dev: true 164 | 165 | /@babel/helper-string-parser@7.23.4: 166 | resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} 167 | engines: {node: '>=6.9.0'} 168 | dev: true 169 | 170 | /@babel/helper-validator-identifier@7.22.20: 171 | resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} 172 | engines: {node: '>=6.9.0'} 173 | dev: true 174 | 175 | /@babel/helper-validator-option@7.23.5: 176 | resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} 177 | engines: {node: '>=6.9.0'} 178 | dev: true 179 | 180 | /@babel/helpers@7.23.6: 181 | resolution: {integrity: sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==} 182 | engines: {node: '>=6.9.0'} 183 | dependencies: 184 | '@babel/template': 7.22.15 185 | '@babel/traverse': 7.23.6 186 | '@babel/types': 7.23.6 187 | transitivePeerDependencies: 188 | - supports-color 189 | dev: true 190 | 191 | /@babel/highlight@7.23.4: 192 | resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} 193 | engines: {node: '>=6.9.0'} 194 | dependencies: 195 | '@babel/helper-validator-identifier': 7.22.20 196 | chalk: 2.4.2 197 | js-tokens: 4.0.0 198 | dev: true 199 | 200 | /@babel/parser@7.23.6: 201 | resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} 202 | engines: {node: '>=6.0.0'} 203 | hasBin: true 204 | dependencies: 205 | '@babel/types': 7.23.6 206 | dev: true 207 | 208 | /@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.23.6): 209 | resolution: {integrity: sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==} 210 | engines: {node: '>=6.9.0'} 211 | peerDependencies: 212 | '@babel/core': ^7.0.0-0 213 | dependencies: 214 | '@babel/core': 7.23.6 215 | '@babel/helper-plugin-utils': 7.22.5 216 | dev: true 217 | 218 | /@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.23.6): 219 | resolution: {integrity: sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==} 220 | engines: {node: '>=6.9.0'} 221 | peerDependencies: 222 | '@babel/core': ^7.0.0-0 223 | dependencies: 224 | '@babel/core': 7.23.6 225 | '@babel/helper-plugin-utils': 7.22.5 226 | dev: true 227 | 228 | /@babel/runtime@7.23.6: 229 | resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} 230 | engines: {node: '>=6.9.0'} 231 | dependencies: 232 | regenerator-runtime: 0.14.1 233 | dev: false 234 | 235 | /@babel/template@7.22.15: 236 | resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} 237 | engines: {node: '>=6.9.0'} 238 | dependencies: 239 | '@babel/code-frame': 7.23.5 240 | '@babel/parser': 7.23.6 241 | '@babel/types': 7.23.6 242 | dev: true 243 | 244 | /@babel/traverse@7.23.6: 245 | resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} 246 | engines: {node: '>=6.9.0'} 247 | dependencies: 248 | '@babel/code-frame': 7.23.5 249 | '@babel/generator': 7.23.6 250 | '@babel/helper-environment-visitor': 7.22.20 251 | '@babel/helper-function-name': 7.23.0 252 | '@babel/helper-hoist-variables': 7.22.5 253 | '@babel/helper-split-export-declaration': 7.22.6 254 | '@babel/parser': 7.23.6 255 | '@babel/types': 7.23.6 256 | debug: 4.3.4 257 | globals: 11.12.0 258 | transitivePeerDependencies: 259 | - supports-color 260 | dev: true 261 | 262 | /@babel/types@7.23.6: 263 | resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} 264 | engines: {node: '>=6.9.0'} 265 | dependencies: 266 | '@babel/helper-string-parser': 7.23.4 267 | '@babel/helper-validator-identifier': 7.22.20 268 | to-fast-properties: 2.0.0 269 | dev: true 270 | 271 | /@esbuild/android-arm64@0.19.9: 272 | resolution: {integrity: sha512-q4cR+6ZD0938R19MyEW3jEsMzbb/1rulLXiNAJQADD/XYp7pT+rOS5JGxvpRW8dFDEfjW4wLgC/3FXIw4zYglQ==} 273 | engines: {node: '>=12'} 274 | cpu: [arm64] 275 | os: [android] 276 | requiresBuild: true 277 | dev: true 278 | optional: true 279 | 280 | /@esbuild/android-arm@0.19.9: 281 | resolution: {integrity: sha512-jkYjjq7SdsWuNI6b5quymW0oC83NN5FdRPuCbs9HZ02mfVdAP8B8eeqLSYU3gb6OJEaY5CQabtTFbqBf26H3GA==} 282 | engines: {node: '>=12'} 283 | cpu: [arm] 284 | os: [android] 285 | requiresBuild: true 286 | dev: true 287 | optional: true 288 | 289 | /@esbuild/android-x64@0.19.9: 290 | resolution: {integrity: sha512-KOqoPntWAH6ZxDwx1D6mRntIgZh9KodzgNOy5Ebt9ghzffOk9X2c1sPwtM9P+0eXbefnDhqYfkh5PLP5ULtWFA==} 291 | engines: {node: '>=12'} 292 | cpu: [x64] 293 | os: [android] 294 | requiresBuild: true 295 | dev: true 296 | optional: true 297 | 298 | /@esbuild/darwin-arm64@0.19.9: 299 | resolution: {integrity: sha512-KBJ9S0AFyLVx2E5D8W0vExqRW01WqRtczUZ8NRu+Pi+87opZn5tL4Y0xT0mA4FtHctd0ZgwNoN639fUUGlNIWw==} 300 | engines: {node: '>=12'} 301 | cpu: [arm64] 302 | os: [darwin] 303 | requiresBuild: true 304 | dev: true 305 | optional: true 306 | 307 | /@esbuild/darwin-x64@0.19.9: 308 | resolution: {integrity: sha512-vE0VotmNTQaTdX0Q9dOHmMTao6ObjyPm58CHZr1UK7qpNleQyxlFlNCaHsHx6Uqv86VgPmR4o2wdNq3dP1qyDQ==} 309 | engines: {node: '>=12'} 310 | cpu: [x64] 311 | os: [darwin] 312 | requiresBuild: true 313 | dev: true 314 | optional: true 315 | 316 | /@esbuild/freebsd-arm64@0.19.9: 317 | resolution: {integrity: sha512-uFQyd/o1IjiEk3rUHSwUKkqZwqdvuD8GevWF065eqgYfexcVkxh+IJgwTaGZVu59XczZGcN/YMh9uF1fWD8j1g==} 318 | engines: {node: '>=12'} 319 | cpu: [arm64] 320 | os: [freebsd] 321 | requiresBuild: true 322 | dev: true 323 | optional: true 324 | 325 | /@esbuild/freebsd-x64@0.19.9: 326 | resolution: {integrity: sha512-WMLgWAtkdTbTu1AWacY7uoj/YtHthgqrqhf1OaEWnZb7PQgpt8eaA/F3LkV0E6K/Lc0cUr/uaVP/49iE4M4asA==} 327 | engines: {node: '>=12'} 328 | cpu: [x64] 329 | os: [freebsd] 330 | requiresBuild: true 331 | dev: true 332 | optional: true 333 | 334 | /@esbuild/linux-arm64@0.19.9: 335 | resolution: {integrity: sha512-PiPblfe1BjK7WDAKR1Cr9O7VVPqVNpwFcPWgfn4xu0eMemzRp442hXyzF/fSwgrufI66FpHOEJk0yYdPInsmyQ==} 336 | engines: {node: '>=12'} 337 | cpu: [arm64] 338 | os: [linux] 339 | requiresBuild: true 340 | dev: true 341 | optional: true 342 | 343 | /@esbuild/linux-arm@0.19.9: 344 | resolution: {integrity: sha512-C/ChPohUYoyUaqn1h17m/6yt6OB14hbXvT8EgM1ZWaiiTYz7nWZR0SYmMnB5BzQA4GXl3BgBO1l8MYqL/He3qw==} 345 | engines: {node: '>=12'} 346 | cpu: [arm] 347 | os: [linux] 348 | requiresBuild: true 349 | dev: true 350 | optional: true 351 | 352 | /@esbuild/linux-ia32@0.19.9: 353 | resolution: {integrity: sha512-f37i/0zE0MjDxijkPSQw1CO/7C27Eojqb+r3BbHVxMLkj8GCa78TrBZzvPyA/FNLUMzP3eyHCVkAopkKVja+6Q==} 354 | engines: {node: '>=12'} 355 | cpu: [ia32] 356 | os: [linux] 357 | requiresBuild: true 358 | dev: true 359 | optional: true 360 | 361 | /@esbuild/linux-loong64@0.19.9: 362 | resolution: {integrity: sha512-t6mN147pUIf3t6wUt3FeumoOTPfmv9Cc6DQlsVBpB7eCpLOqQDyWBP1ymXn1lDw4fNUSb/gBcKAmvTP49oIkaA==} 363 | engines: {node: '>=12'} 364 | cpu: [loong64] 365 | os: [linux] 366 | requiresBuild: true 367 | dev: true 368 | optional: true 369 | 370 | /@esbuild/linux-mips64el@0.19.9: 371 | resolution: {integrity: sha512-jg9fujJTNTQBuDXdmAg1eeJUL4Jds7BklOTkkH80ZgQIoCTdQrDaHYgbFZyeTq8zbY+axgptncko3v9p5hLZtw==} 372 | engines: {node: '>=12'} 373 | cpu: [mips64el] 374 | os: [linux] 375 | requiresBuild: true 376 | dev: true 377 | optional: true 378 | 379 | /@esbuild/linux-ppc64@0.19.9: 380 | resolution: {integrity: sha512-tkV0xUX0pUUgY4ha7z5BbDS85uI7ABw3V1d0RNTii7E9lbmV8Z37Pup2tsLV46SQWzjOeyDi1Q7Wx2+QM8WaCQ==} 381 | engines: {node: '>=12'} 382 | cpu: [ppc64] 383 | os: [linux] 384 | requiresBuild: true 385 | dev: true 386 | optional: true 387 | 388 | /@esbuild/linux-riscv64@0.19.9: 389 | resolution: {integrity: sha512-DfLp8dj91cufgPZDXr9p3FoR++m3ZJ6uIXsXrIvJdOjXVREtXuQCjfMfvmc3LScAVmLjcfloyVtpn43D56JFHg==} 390 | engines: {node: '>=12'} 391 | cpu: [riscv64] 392 | os: [linux] 393 | requiresBuild: true 394 | dev: true 395 | optional: true 396 | 397 | /@esbuild/linux-s390x@0.19.9: 398 | resolution: {integrity: sha512-zHbglfEdC88KMgCWpOl/zc6dDYJvWGLiUtmPRsr1OgCViu3z5GncvNVdf+6/56O2Ca8jUU+t1BW261V6kp8qdw==} 399 | engines: {node: '>=12'} 400 | cpu: [s390x] 401 | os: [linux] 402 | requiresBuild: true 403 | dev: true 404 | optional: true 405 | 406 | /@esbuild/linux-x64@0.19.9: 407 | resolution: {integrity: sha512-JUjpystGFFmNrEHQnIVG8hKwvA2DN5o7RqiO1CVX8EN/F/gkCjkUMgVn6hzScpwnJtl2mPR6I9XV1oW8k9O+0A==} 408 | engines: {node: '>=12'} 409 | cpu: [x64] 410 | os: [linux] 411 | requiresBuild: true 412 | dev: true 413 | optional: true 414 | 415 | /@esbuild/netbsd-x64@0.19.9: 416 | resolution: {integrity: sha512-GThgZPAwOBOsheA2RUlW5UeroRfESwMq/guy8uEe3wJlAOjpOXuSevLRd70NZ37ZrpO6RHGHgEHvPg1h3S1Jug==} 417 | engines: {node: '>=12'} 418 | cpu: [x64] 419 | os: [netbsd] 420 | requiresBuild: true 421 | dev: true 422 | optional: true 423 | 424 | /@esbuild/openbsd-x64@0.19.9: 425 | resolution: {integrity: sha512-Ki6PlzppaFVbLnD8PtlVQfsYw4S9n3eQl87cqgeIw+O3sRr9IghpfSKY62mggdt1yCSZ8QWvTZ9jo9fjDSg9uw==} 426 | engines: {node: '>=12'} 427 | cpu: [x64] 428 | os: [openbsd] 429 | requiresBuild: true 430 | dev: true 431 | optional: true 432 | 433 | /@esbuild/sunos-x64@0.19.9: 434 | resolution: {integrity: sha512-MLHj7k9hWh4y1ddkBpvRj2b9NCBhfgBt3VpWbHQnXRedVun/hC7sIyTGDGTfsGuXo4ebik2+3ShjcPbhtFwWDw==} 435 | engines: {node: '>=12'} 436 | cpu: [x64] 437 | os: [sunos] 438 | requiresBuild: true 439 | dev: true 440 | optional: true 441 | 442 | /@esbuild/win32-arm64@0.19.9: 443 | resolution: {integrity: sha512-GQoa6OrQ8G08guMFgeXPH7yE/8Dt0IfOGWJSfSH4uafwdC7rWwrfE6P9N8AtPGIjUzdo2+7bN8Xo3qC578olhg==} 444 | engines: {node: '>=12'} 445 | cpu: [arm64] 446 | os: [win32] 447 | requiresBuild: true 448 | dev: true 449 | optional: true 450 | 451 | /@esbuild/win32-ia32@0.19.9: 452 | resolution: {integrity: sha512-UOozV7Ntykvr5tSOlGCrqU3NBr3d8JqPes0QWN2WOXfvkWVGRajC+Ym0/Wj88fUgecUCLDdJPDF0Nna2UK3Qtg==} 453 | engines: {node: '>=12'} 454 | cpu: [ia32] 455 | os: [win32] 456 | requiresBuild: true 457 | dev: true 458 | optional: true 459 | 460 | /@esbuild/win32-x64@0.19.9: 461 | resolution: {integrity: sha512-oxoQgglOP7RH6iasDrhY+R/3cHrfwIDvRlT4CGChflq6twk8iENeVvMJjmvBb94Ik1Z+93iGO27err7w6l54GQ==} 462 | engines: {node: '>=12'} 463 | cpu: [x64] 464 | os: [win32] 465 | requiresBuild: true 466 | dev: true 467 | optional: true 468 | 469 | /@jridgewell/gen-mapping@0.3.3: 470 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} 471 | engines: {node: '>=6.0.0'} 472 | dependencies: 473 | '@jridgewell/set-array': 1.1.2 474 | '@jridgewell/sourcemap-codec': 1.4.15 475 | '@jridgewell/trace-mapping': 0.3.20 476 | dev: true 477 | 478 | /@jridgewell/resolve-uri@3.1.1: 479 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} 480 | engines: {node: '>=6.0.0'} 481 | dev: true 482 | 483 | /@jridgewell/set-array@1.1.2: 484 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 485 | engines: {node: '>=6.0.0'} 486 | dev: true 487 | 488 | /@jridgewell/sourcemap-codec@1.4.15: 489 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 490 | dev: true 491 | 492 | /@jridgewell/trace-mapping@0.3.20: 493 | resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} 494 | dependencies: 495 | '@jridgewell/resolve-uri': 3.1.1 496 | '@jridgewell/sourcemap-codec': 1.4.15 497 | dev: true 498 | 499 | /@react-pdf/fns@2.0.1: 500 | resolution: {integrity: sha512-/vgecczzFYBQFkgUupH+sxXhLWQtBwdwCgweyh25XOlR4NZuaMD/UVUDl4loFHhRQqDMQq37lkTcchh7zzW6ug==} 501 | dependencies: 502 | '@babel/runtime': 7.23.6 503 | dev: false 504 | 505 | /@react-pdf/font@2.3.7: 506 | resolution: {integrity: sha512-NoCieWea6c1mCpDBoyjPbUEC1qXa+S/M7+8vYPZ71aTMgX7co3gQc2e6YKwrSQeQP+BsBq3LSVhjI2ETXfcytw==} 507 | dependencies: 508 | '@babel/runtime': 7.23.6 509 | '@react-pdf/types': 2.3.4 510 | cross-fetch: 3.1.8 511 | fontkit: 2.0.2 512 | is-url: 1.2.4 513 | transitivePeerDependencies: 514 | - encoding 515 | dev: false 516 | 517 | /@react-pdf/image@2.2.2: 518 | resolution: {integrity: sha512-990JvRZuhsnHyAGd7gvmhfr+4/5PAHLH9IgDstaEDLEq2eFAIQFuNM7k3D6kjKgV1mM7Jqif3CWqrcHBF3jrJw==} 519 | dependencies: 520 | '@babel/runtime': 7.23.6 521 | '@react-pdf/png-js': 2.2.0 522 | cross-fetch: 3.1.8 523 | transitivePeerDependencies: 524 | - encoding 525 | dev: false 526 | 527 | /@react-pdf/layout@3.6.3: 528 | resolution: {integrity: sha512-w6ACZ9o18Q5wbzsY9a4KW2Gqn6Drt3AN/kb/I6SBz/L7PAJ9rPQBIDq/s5qZJ+/WwWy33rcC8WC1givtDhjCHQ==} 529 | dependencies: 530 | '@babel/runtime': 7.23.6 531 | '@react-pdf/fns': 2.0.1 532 | '@react-pdf/image': 2.2.2 533 | '@react-pdf/pdfkit': 3.0.2 534 | '@react-pdf/primitives': 3.0.1 535 | '@react-pdf/stylesheet': 4.1.8 536 | '@react-pdf/textkit': 4.2.0 537 | '@react-pdf/types': 2.3.4 538 | '@react-pdf/yoga': 4.1.2 539 | cross-fetch: 3.1.8 540 | emoji-regex: 10.3.0 541 | queue: 6.0.2 542 | transitivePeerDependencies: 543 | - encoding 544 | dev: false 545 | 546 | /@react-pdf/pdfkit@3.0.2: 547 | resolution: {integrity: sha512-+m5rwNCwyEH6lmnZWpsQJvdqb6YaCCR0nMWrc/KKDwznuPMrGmGWyNxqCja+bQPORcHZyl6Cd/iFL0glyB3QGw==} 548 | dependencies: 549 | '@babel/runtime': 7.23.6 550 | '@react-pdf/png-js': 2.2.0 551 | browserify-zlib: 0.2.0 552 | crypto-js: 4.2.0 553 | fontkit: 2.0.2 554 | vite-compatible-readable-stream: 3.6.1 555 | dev: false 556 | 557 | /@react-pdf/png-js@2.2.0: 558 | resolution: {integrity: sha512-csZU5lfNW73tq7s7zB/1rWXGro+Z9cQhxtsXwxS418TSszHUiM6PwddouiKJxdGhbVLjRIcuuFVa0aR5cDOC6w==} 559 | dependencies: 560 | browserify-zlib: 0.2.0 561 | dev: false 562 | 563 | /@react-pdf/primitives@3.0.1: 564 | resolution: {integrity: sha512-0HGcknrLNwyhxe+SZCBL29JY4M85mXKdvTZE9uhjNbADGgTc8wVnkc5+e4S/lDvugbVISXyuIhZnYwtK9eDnyQ==} 565 | dev: false 566 | 567 | /@react-pdf/render@3.2.7: 568 | resolution: {integrity: sha512-fAgbbAAkVL0hpcf1vUJLHxuPjPBqZuq8nors7fCwvoatBBwOWP9fza7IDPeFKN7+ZOnfmIZzes8Kc/DNHzJohw==} 569 | dependencies: 570 | '@babel/runtime': 7.23.6 571 | '@react-pdf/fns': 2.0.1 572 | '@react-pdf/primitives': 3.0.1 573 | '@react-pdf/textkit': 4.2.0 574 | '@react-pdf/types': 2.3.4 575 | abs-svg-path: 0.1.1 576 | color-string: 1.9.1 577 | normalize-svg-path: 1.1.0 578 | parse-svg-path: 0.1.2 579 | svg-arc-to-cubic-bezier: 3.2.0 580 | dev: false 581 | 582 | /@react-pdf/renderer@3.1.14(react@18.2.0): 583 | resolution: {integrity: sha512-Qk29uTamH6q+drK/YmiFbuQQ+yutesfIe+wyrsXFoUJUutIiDIaibO6zByMkhWb3M6CMt6NvG3NLHio1OF8U6Q==} 584 | peerDependencies: 585 | react: ^16.8.6 || ^17.0.0 || ^18.0.0 586 | dependencies: 587 | '@babel/runtime': 7.23.6 588 | '@react-pdf/font': 2.3.7 589 | '@react-pdf/layout': 3.6.3 590 | '@react-pdf/pdfkit': 3.0.2 591 | '@react-pdf/primitives': 3.0.1 592 | '@react-pdf/render': 3.2.7 593 | '@react-pdf/types': 2.3.4 594 | events: 3.3.0 595 | object-assign: 4.1.1 596 | prop-types: 15.8.1 597 | queue: 6.0.2 598 | react: 18.2.0 599 | scheduler: 0.17.0 600 | transitivePeerDependencies: 601 | - encoding 602 | dev: false 603 | 604 | /@react-pdf/stylesheet@4.1.8: 605 | resolution: {integrity: sha512-/EuB9RBsH3YYRj8mwzImaul619MvX3rsHNF4h8LnlwDOuBehPA3L/fHrikfPqtJvHqK2ty3GXnkw0HG5SQpMzw==} 606 | dependencies: 607 | '@babel/runtime': 7.23.6 608 | '@react-pdf/fns': 2.0.1 609 | '@react-pdf/types': 2.3.4 610 | color-string: 1.9.1 611 | hsl-to-hex: 1.0.0 612 | media-engine: 1.0.3 613 | postcss-value-parser: 4.2.0 614 | dev: false 615 | 616 | /@react-pdf/textkit@4.2.0: 617 | resolution: {integrity: sha512-R90pEOW6NdhUx4p99iROvKmwB06IRYdXMhh0QcmUeoPOLe64ZdMfs3LZliNUWgI5fCmq71J+nv868i/EakFPDg==} 618 | dependencies: 619 | '@babel/runtime': 7.23.6 620 | '@react-pdf/fns': 2.0.1 621 | hyphen: 1.9.1 622 | unicode-properties: 1.4.1 623 | dev: false 624 | 625 | /@react-pdf/types@2.3.4: 626 | resolution: {integrity: sha512-vGGz21BTE05EktBbotbd7fjC0Yi8A/lOSIpzd7L7aF1XY+vyIHlQVb35DWCipM1p/6XN4cr9etGAmm1e4Mtmjw==} 627 | dev: false 628 | 629 | /@react-pdf/yoga@4.1.2: 630 | resolution: {integrity: sha512-OlMZkFrJDj4GyKZ70thiObwwPVZ52B7mlPyfzwa+sgwsioqHXg9nMWOO+7SQFNUbbOGagMUu0bCuTv+iXYZuaQ==} 631 | dependencies: 632 | '@babel/runtime': 7.23.6 633 | dev: false 634 | 635 | /@rollup/rollup-android-arm-eabi@4.9.1: 636 | resolution: {integrity: sha512-6vMdBZqtq1dVQ4CWdhFwhKZL6E4L1dV6jUjuBvsavvNJSppzi6dLBbuV+3+IyUREaj9ZFvQefnQm28v4OCXlig==} 637 | cpu: [arm] 638 | os: [android] 639 | requiresBuild: true 640 | dev: true 641 | optional: true 642 | 643 | /@rollup/rollup-android-arm64@4.9.1: 644 | resolution: {integrity: sha512-Jto9Fl3YQ9OLsTDWtLFPtaIMSL2kwGyGoVCmPC8Gxvym9TCZm4Sie+cVeblPO66YZsYH8MhBKDMGZ2NDxuk/XQ==} 645 | cpu: [arm64] 646 | os: [android] 647 | requiresBuild: true 648 | dev: true 649 | optional: true 650 | 651 | /@rollup/rollup-darwin-arm64@4.9.1: 652 | resolution: {integrity: sha512-LtYcLNM+bhsaKAIGwVkh5IOWhaZhjTfNOkGzGqdHvhiCUVuJDalvDxEdSnhFzAn+g23wgsycmZk1vbnaibZwwA==} 653 | cpu: [arm64] 654 | os: [darwin] 655 | requiresBuild: true 656 | dev: true 657 | optional: true 658 | 659 | /@rollup/rollup-darwin-x64@4.9.1: 660 | resolution: {integrity: sha512-KyP/byeXu9V+etKO6Lw3E4tW4QdcnzDG/ake031mg42lob5tN+5qfr+lkcT/SGZaH2PdW4Z1NX9GHEkZ8xV7og==} 661 | cpu: [x64] 662 | os: [darwin] 663 | requiresBuild: true 664 | dev: true 665 | optional: true 666 | 667 | /@rollup/rollup-linux-arm-gnueabihf@4.9.1: 668 | resolution: {integrity: sha512-Yqz/Doumf3QTKplwGNrCHe/B2p9xqDghBZSlAY0/hU6ikuDVQuOUIpDP/YcmoT+447tsZTmirmjgG3znvSCR0Q==} 669 | cpu: [arm] 670 | os: [linux] 671 | requiresBuild: true 672 | dev: true 673 | optional: true 674 | 675 | /@rollup/rollup-linux-arm64-gnu@4.9.1: 676 | resolution: {integrity: sha512-u3XkZVvxcvlAOlQJ3UsD1rFvLWqu4Ef/Ggl40WAVCuogf4S1nJPHh5RTgqYFpCOvuGJ7H5yGHabjFKEZGExk5Q==} 677 | cpu: [arm64] 678 | os: [linux] 679 | requiresBuild: true 680 | dev: true 681 | optional: true 682 | 683 | /@rollup/rollup-linux-arm64-musl@4.9.1: 684 | resolution: {integrity: sha512-0XSYN/rfWShW+i+qjZ0phc6vZ7UWI8XWNz4E/l+6edFt+FxoEghrJHjX1EY/kcUGCnZzYYRCl31SNdfOi450Aw==} 685 | cpu: [arm64] 686 | os: [linux] 687 | requiresBuild: true 688 | dev: true 689 | optional: true 690 | 691 | /@rollup/rollup-linux-riscv64-gnu@4.9.1: 692 | resolution: {integrity: sha512-LmYIO65oZVfFt9t6cpYkbC4d5lKHLYv5B4CSHRpnANq0VZUQXGcCPXHzbCXCz4RQnx7jvlYB1ISVNCE/omz5cw==} 693 | cpu: [riscv64] 694 | os: [linux] 695 | requiresBuild: true 696 | dev: true 697 | optional: true 698 | 699 | /@rollup/rollup-linux-x64-gnu@4.9.1: 700 | resolution: {integrity: sha512-kr8rEPQ6ns/Lmr/hiw8sEVj9aa07gh1/tQF2Y5HrNCCEPiCBGnBUt9tVusrcBBiJfIt1yNaXN6r1CCmpbFEDpg==} 701 | cpu: [x64] 702 | os: [linux] 703 | requiresBuild: true 704 | dev: true 705 | optional: true 706 | 707 | /@rollup/rollup-linux-x64-musl@4.9.1: 708 | resolution: {integrity: sha512-t4QSR7gN+OEZLG0MiCgPqMWZGwmeHhsM4AkegJ0Kiy6TnJ9vZ8dEIwHw1LcZKhbHxTY32hp9eVCMdR3/I8MGRw==} 709 | cpu: [x64] 710 | os: [linux] 711 | requiresBuild: true 712 | dev: true 713 | optional: true 714 | 715 | /@rollup/rollup-win32-arm64-msvc@4.9.1: 716 | resolution: {integrity: sha512-7XI4ZCBN34cb+BH557FJPmh0kmNz2c25SCQeT9OiFWEgf8+dL6ZwJ8f9RnUIit+j01u07Yvrsuu1rZGxJCc51g==} 717 | cpu: [arm64] 718 | os: [win32] 719 | requiresBuild: true 720 | dev: true 721 | optional: true 722 | 723 | /@rollup/rollup-win32-ia32-msvc@4.9.1: 724 | resolution: {integrity: sha512-yE5c2j1lSWOH5jp+Q0qNL3Mdhr8WuqCNVjc6BxbVfS5cAS6zRmdiw7ktb8GNpDCEUJphILY6KACoFoRtKoqNQg==} 725 | cpu: [ia32] 726 | os: [win32] 727 | requiresBuild: true 728 | dev: true 729 | optional: true 730 | 731 | /@rollup/rollup-win32-x64-msvc@4.9.1: 732 | resolution: {integrity: sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA==} 733 | cpu: [x64] 734 | os: [win32] 735 | requiresBuild: true 736 | dev: true 737 | optional: true 738 | 739 | /@swc/helpers@0.4.14: 740 | resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} 741 | dependencies: 742 | tslib: 2.6.2 743 | dev: false 744 | 745 | /@swc/helpers@0.4.36: 746 | resolution: {integrity: sha512-5lxnyLEYFskErRPenYItLRSge5DjrJngYKdVjRSrWfza9G6KkgHEXi0vUZiyUeMU5JfXH1YnvXZzSp8ul88o2Q==} 747 | dependencies: 748 | legacy-swc-helpers: /@swc/helpers@0.4.14 749 | tslib: 2.6.2 750 | dev: false 751 | 752 | /@types/babel__core@7.20.5: 753 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 754 | dependencies: 755 | '@babel/parser': 7.23.6 756 | '@babel/types': 7.23.6 757 | '@types/babel__generator': 7.6.8 758 | '@types/babel__template': 7.4.4 759 | '@types/babel__traverse': 7.20.4 760 | dev: true 761 | 762 | /@types/babel__generator@7.6.8: 763 | resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} 764 | dependencies: 765 | '@babel/types': 7.23.6 766 | dev: true 767 | 768 | /@types/babel__template@7.4.4: 769 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 770 | dependencies: 771 | '@babel/parser': 7.23.6 772 | '@babel/types': 7.23.6 773 | dev: true 774 | 775 | /@types/babel__traverse@7.20.4: 776 | resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} 777 | dependencies: 778 | '@babel/types': 7.23.6 779 | dev: true 780 | 781 | /@types/prop-types@15.7.11: 782 | resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} 783 | dev: true 784 | 785 | /@types/react-dom@18.2.18: 786 | resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==} 787 | dependencies: 788 | '@types/react': 18.2.45 789 | dev: true 790 | 791 | /@types/react@18.2.45: 792 | resolution: {integrity: sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==} 793 | dependencies: 794 | '@types/prop-types': 15.7.11 795 | '@types/scheduler': 0.16.8 796 | csstype: 3.1.3 797 | dev: true 798 | 799 | /@types/scheduler@0.16.8: 800 | resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} 801 | dev: true 802 | 803 | /@vitejs/plugin-react@4.2.1(vite@5.0.10): 804 | resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==} 805 | engines: {node: ^14.18.0 || >=16.0.0} 806 | peerDependencies: 807 | vite: ^4.2.0 || ^5.0.0 808 | dependencies: 809 | '@babel/core': 7.23.6 810 | '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.6) 811 | '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.6) 812 | '@types/babel__core': 7.20.5 813 | react-refresh: 0.14.0 814 | vite: 5.0.10 815 | transitivePeerDependencies: 816 | - supports-color 817 | dev: true 818 | 819 | /abs-svg-path@0.1.1: 820 | resolution: {integrity: sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==} 821 | dev: false 822 | 823 | /ansi-styles@3.2.1: 824 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 825 | engines: {node: '>=4'} 826 | dependencies: 827 | color-convert: 1.9.3 828 | dev: true 829 | 830 | /base64-js@1.5.1: 831 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 832 | dev: false 833 | 834 | /brotli@1.3.3: 835 | resolution: {integrity: sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==} 836 | dependencies: 837 | base64-js: 1.5.1 838 | dev: false 839 | 840 | /browserify-zlib@0.2.0: 841 | resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} 842 | dependencies: 843 | pako: 1.0.11 844 | dev: false 845 | 846 | /browserslist@4.22.2: 847 | resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} 848 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 849 | hasBin: true 850 | dependencies: 851 | caniuse-lite: 1.0.30001570 852 | electron-to-chromium: 1.4.614 853 | node-releases: 2.0.14 854 | update-browserslist-db: 1.0.13(browserslist@4.22.2) 855 | dev: true 856 | 857 | /caniuse-lite@1.0.30001570: 858 | resolution: {integrity: sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==} 859 | dev: true 860 | 861 | /chalk@2.4.2: 862 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 863 | engines: {node: '>=4'} 864 | dependencies: 865 | ansi-styles: 3.2.1 866 | escape-string-regexp: 1.0.5 867 | supports-color: 5.5.0 868 | dev: true 869 | 870 | /clone@2.1.2: 871 | resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} 872 | engines: {node: '>=0.8'} 873 | dev: false 874 | 875 | /color-convert@1.9.3: 876 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 877 | dependencies: 878 | color-name: 1.1.3 879 | dev: true 880 | 881 | /color-name@1.1.3: 882 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 883 | dev: true 884 | 885 | /color-name@1.1.4: 886 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 887 | dev: false 888 | 889 | /color-string@1.9.1: 890 | resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} 891 | dependencies: 892 | color-name: 1.1.4 893 | simple-swizzle: 0.2.2 894 | dev: false 895 | 896 | /convert-source-map@2.0.0: 897 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 898 | dev: true 899 | 900 | /cross-fetch@3.1.8: 901 | resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} 902 | dependencies: 903 | node-fetch: 2.7.0 904 | transitivePeerDependencies: 905 | - encoding 906 | dev: false 907 | 908 | /crypto-js@4.2.0: 909 | resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} 910 | dev: false 911 | 912 | /csstype@3.1.3: 913 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 914 | dev: true 915 | 916 | /debug@4.3.4: 917 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 918 | engines: {node: '>=6.0'} 919 | peerDependencies: 920 | supports-color: '*' 921 | peerDependenciesMeta: 922 | supports-color: 923 | optional: true 924 | dependencies: 925 | ms: 2.1.2 926 | dev: true 927 | 928 | /dfa@1.2.0: 929 | resolution: {integrity: sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==} 930 | dev: false 931 | 932 | /electron-to-chromium@1.4.614: 933 | resolution: {integrity: sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ==} 934 | dev: true 935 | 936 | /emoji-regex@10.3.0: 937 | resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} 938 | dev: false 939 | 940 | /esbuild@0.19.9: 941 | resolution: {integrity: sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg==} 942 | engines: {node: '>=12'} 943 | hasBin: true 944 | requiresBuild: true 945 | optionalDependencies: 946 | '@esbuild/android-arm': 0.19.9 947 | '@esbuild/android-arm64': 0.19.9 948 | '@esbuild/android-x64': 0.19.9 949 | '@esbuild/darwin-arm64': 0.19.9 950 | '@esbuild/darwin-x64': 0.19.9 951 | '@esbuild/freebsd-arm64': 0.19.9 952 | '@esbuild/freebsd-x64': 0.19.9 953 | '@esbuild/linux-arm': 0.19.9 954 | '@esbuild/linux-arm64': 0.19.9 955 | '@esbuild/linux-ia32': 0.19.9 956 | '@esbuild/linux-loong64': 0.19.9 957 | '@esbuild/linux-mips64el': 0.19.9 958 | '@esbuild/linux-ppc64': 0.19.9 959 | '@esbuild/linux-riscv64': 0.19.9 960 | '@esbuild/linux-s390x': 0.19.9 961 | '@esbuild/linux-x64': 0.19.9 962 | '@esbuild/netbsd-x64': 0.19.9 963 | '@esbuild/openbsd-x64': 0.19.9 964 | '@esbuild/sunos-x64': 0.19.9 965 | '@esbuild/win32-arm64': 0.19.9 966 | '@esbuild/win32-ia32': 0.19.9 967 | '@esbuild/win32-x64': 0.19.9 968 | dev: true 969 | 970 | /escalade@3.1.1: 971 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 972 | engines: {node: '>=6'} 973 | dev: true 974 | 975 | /escape-string-regexp@1.0.5: 976 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 977 | engines: {node: '>=0.8.0'} 978 | dev: true 979 | 980 | /events@3.3.0: 981 | resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} 982 | engines: {node: '>=0.8.x'} 983 | dev: false 984 | 985 | /fast-deep-equal@3.1.3: 986 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 987 | dev: false 988 | 989 | /fontkit@2.0.2: 990 | resolution: {integrity: sha512-jc4k5Yr8iov8QfS6u8w2CnHWVmbOGtdBtOXMze5Y+QD966Rx6PEVWXSEGwXlsDlKtu1G12cJjcsybnqhSk/+LA==} 991 | dependencies: 992 | '@swc/helpers': 0.4.36 993 | brotli: 1.3.3 994 | clone: 2.1.2 995 | dfa: 1.2.0 996 | fast-deep-equal: 3.1.3 997 | restructure: 3.0.0 998 | tiny-inflate: 1.0.3 999 | unicode-properties: 1.4.1 1000 | unicode-trie: 2.0.0 1001 | dev: false 1002 | 1003 | /fsevents@2.3.3: 1004 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1005 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1006 | os: [darwin] 1007 | requiresBuild: true 1008 | dev: true 1009 | optional: true 1010 | 1011 | /gensync@1.0.0-beta.2: 1012 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 1013 | engines: {node: '>=6.9.0'} 1014 | dev: true 1015 | 1016 | /globals@11.12.0: 1017 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 1018 | engines: {node: '>=4'} 1019 | dev: true 1020 | 1021 | /has-flag@3.0.0: 1022 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1023 | engines: {node: '>=4'} 1024 | dev: true 1025 | 1026 | /hsl-to-hex@1.0.0: 1027 | resolution: {integrity: sha512-K6GVpucS5wFf44X0h2bLVRDsycgJmf9FF2elg+CrqD8GcFU8c6vYhgXn8NjUkFCwj+xDFb70qgLbTUm6sxwPmA==} 1028 | dependencies: 1029 | hsl-to-rgb-for-reals: 1.1.1 1030 | dev: false 1031 | 1032 | /hsl-to-rgb-for-reals@1.1.1: 1033 | resolution: {integrity: sha512-LgOWAkrN0rFaQpfdWBQlv/VhkOxb5AsBjk6NQVx4yEzWS923T07X0M1Y0VNko2H52HeSpZrZNNMJ0aFqsdVzQg==} 1034 | dev: false 1035 | 1036 | /hyphen@1.9.1: 1037 | resolution: {integrity: sha512-fIPVvM6BUW+878xne+wwIcBjMxeKpoADmxNTjKMocUQWiGOvwyEfZEG95IeL/t4Su6nbfbXeYDUnz62pxzLPmw==} 1038 | dev: false 1039 | 1040 | /inherits@2.0.4: 1041 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1042 | dev: false 1043 | 1044 | /is-arrayish@0.3.2: 1045 | resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} 1046 | dev: false 1047 | 1048 | /is-url@1.2.4: 1049 | resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} 1050 | dev: false 1051 | 1052 | /js-tokens@4.0.0: 1053 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1054 | 1055 | /jsesc@2.5.2: 1056 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 1057 | engines: {node: '>=4'} 1058 | hasBin: true 1059 | dev: true 1060 | 1061 | /json5@2.2.3: 1062 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 1063 | engines: {node: '>=6'} 1064 | hasBin: true 1065 | dev: true 1066 | 1067 | /loose-envify@1.4.0: 1068 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1069 | hasBin: true 1070 | dependencies: 1071 | js-tokens: 4.0.0 1072 | dev: false 1073 | 1074 | /lru-cache@5.1.1: 1075 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 1076 | dependencies: 1077 | yallist: 3.1.1 1078 | dev: true 1079 | 1080 | /media-engine@1.0.3: 1081 | resolution: {integrity: sha512-aa5tG6sDoK+k70B9iEX1NeyfT8ObCKhNDs6lJVpwF6r8vhUfuKMslIcirq6HIUYuuUYLefcEQOn9bSBOvawtwg==} 1082 | dev: false 1083 | 1084 | /ms@2.1.2: 1085 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1086 | dev: true 1087 | 1088 | /nanoid@3.3.7: 1089 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 1090 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1091 | hasBin: true 1092 | dev: true 1093 | 1094 | /node-fetch@2.7.0: 1095 | resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} 1096 | engines: {node: 4.x || >=6.0.0} 1097 | peerDependencies: 1098 | encoding: ^0.1.0 1099 | peerDependenciesMeta: 1100 | encoding: 1101 | optional: true 1102 | dependencies: 1103 | whatwg-url: 5.0.0 1104 | dev: false 1105 | 1106 | /node-releases@2.0.14: 1107 | resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} 1108 | dev: true 1109 | 1110 | /normalize-svg-path@1.1.0: 1111 | resolution: {integrity: sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg==} 1112 | dependencies: 1113 | svg-arc-to-cubic-bezier: 3.2.0 1114 | dev: false 1115 | 1116 | /object-assign@4.1.1: 1117 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1118 | engines: {node: '>=0.10.0'} 1119 | dev: false 1120 | 1121 | /pako@0.2.9: 1122 | resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} 1123 | dev: false 1124 | 1125 | /pako@1.0.11: 1126 | resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} 1127 | dev: false 1128 | 1129 | /parse-svg-path@0.1.2: 1130 | resolution: {integrity: sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==} 1131 | dev: false 1132 | 1133 | /picocolors@1.0.0: 1134 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1135 | dev: true 1136 | 1137 | /postcss-value-parser@4.2.0: 1138 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 1139 | dev: false 1140 | 1141 | /postcss@8.4.32: 1142 | resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} 1143 | engines: {node: ^10 || ^12 || >=14} 1144 | dependencies: 1145 | nanoid: 3.3.7 1146 | picocolors: 1.0.0 1147 | source-map-js: 1.0.2 1148 | dev: true 1149 | 1150 | /prop-types@15.8.1: 1151 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} 1152 | dependencies: 1153 | loose-envify: 1.4.0 1154 | object-assign: 4.1.1 1155 | react-is: 16.13.1 1156 | dev: false 1157 | 1158 | /queue@6.0.2: 1159 | resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} 1160 | dependencies: 1161 | inherits: 2.0.4 1162 | dev: false 1163 | 1164 | /react-dom@18.2.0(react@18.2.0): 1165 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} 1166 | peerDependencies: 1167 | react: ^18.2.0 1168 | dependencies: 1169 | loose-envify: 1.4.0 1170 | react: 18.2.0 1171 | scheduler: 0.23.0 1172 | dev: false 1173 | 1174 | /react-is@16.13.1: 1175 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 1176 | dev: false 1177 | 1178 | /react-refresh@0.14.0: 1179 | resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} 1180 | engines: {node: '>=0.10.0'} 1181 | dev: true 1182 | 1183 | /react@18.2.0: 1184 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} 1185 | engines: {node: '>=0.10.0'} 1186 | dependencies: 1187 | loose-envify: 1.4.0 1188 | dev: false 1189 | 1190 | /regenerator-runtime@0.14.1: 1191 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} 1192 | dev: false 1193 | 1194 | /restructure@3.0.0: 1195 | resolution: {integrity: sha512-Xj8/MEIhhfj9X2rmD9iJ4Gga9EFqVlpMj3vfLnV2r/Mh5jRMryNV+6lWh9GdJtDBcBSPIqzRdfBQ3wDtNFv/uw==} 1196 | dev: false 1197 | 1198 | /rollup@4.9.1: 1199 | resolution: {integrity: sha512-pgPO9DWzLoW/vIhlSoDByCzcpX92bKEorbgXuZrqxByte3JFk2xSW2JEeAcyLc9Ru9pqcNNW+Ob7ntsk2oT/Xw==} 1200 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1201 | hasBin: true 1202 | optionalDependencies: 1203 | '@rollup/rollup-android-arm-eabi': 4.9.1 1204 | '@rollup/rollup-android-arm64': 4.9.1 1205 | '@rollup/rollup-darwin-arm64': 4.9.1 1206 | '@rollup/rollup-darwin-x64': 4.9.1 1207 | '@rollup/rollup-linux-arm-gnueabihf': 4.9.1 1208 | '@rollup/rollup-linux-arm64-gnu': 4.9.1 1209 | '@rollup/rollup-linux-arm64-musl': 4.9.1 1210 | '@rollup/rollup-linux-riscv64-gnu': 4.9.1 1211 | '@rollup/rollup-linux-x64-gnu': 4.9.1 1212 | '@rollup/rollup-linux-x64-musl': 4.9.1 1213 | '@rollup/rollup-win32-arm64-msvc': 4.9.1 1214 | '@rollup/rollup-win32-ia32-msvc': 4.9.1 1215 | '@rollup/rollup-win32-x64-msvc': 4.9.1 1216 | fsevents: 2.3.3 1217 | dev: true 1218 | 1219 | /safe-buffer@5.2.1: 1220 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1221 | dev: false 1222 | 1223 | /scheduler@0.17.0: 1224 | resolution: {integrity: sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA==} 1225 | dependencies: 1226 | loose-envify: 1.4.0 1227 | object-assign: 4.1.1 1228 | dev: false 1229 | 1230 | /scheduler@0.23.0: 1231 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} 1232 | dependencies: 1233 | loose-envify: 1.4.0 1234 | dev: false 1235 | 1236 | /semver@6.3.1: 1237 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1238 | hasBin: true 1239 | dev: true 1240 | 1241 | /simple-swizzle@0.2.2: 1242 | resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} 1243 | dependencies: 1244 | is-arrayish: 0.3.2 1245 | dev: false 1246 | 1247 | /source-map-js@1.0.2: 1248 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 1249 | engines: {node: '>=0.10.0'} 1250 | dev: true 1251 | 1252 | /string_decoder@1.3.0: 1253 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 1254 | dependencies: 1255 | safe-buffer: 5.2.1 1256 | dev: false 1257 | 1258 | /supports-color@5.5.0: 1259 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1260 | engines: {node: '>=4'} 1261 | dependencies: 1262 | has-flag: 3.0.0 1263 | dev: true 1264 | 1265 | /svg-arc-to-cubic-bezier@3.2.0: 1266 | resolution: {integrity: sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g==} 1267 | dev: false 1268 | 1269 | /tiny-inflate@1.0.3: 1270 | resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} 1271 | dev: false 1272 | 1273 | /to-fast-properties@2.0.0: 1274 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 1275 | engines: {node: '>=4'} 1276 | dev: true 1277 | 1278 | /tr46@0.0.3: 1279 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 1280 | dev: false 1281 | 1282 | /tslib@2.6.2: 1283 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 1284 | dev: false 1285 | 1286 | /typescript@5.3.3: 1287 | resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} 1288 | engines: {node: '>=14.17'} 1289 | hasBin: true 1290 | dev: true 1291 | 1292 | /unicode-properties@1.4.1: 1293 | resolution: {integrity: sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==} 1294 | dependencies: 1295 | base64-js: 1.5.1 1296 | unicode-trie: 2.0.0 1297 | dev: false 1298 | 1299 | /unicode-trie@2.0.0: 1300 | resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} 1301 | dependencies: 1302 | pako: 0.2.9 1303 | tiny-inflate: 1.0.3 1304 | dev: false 1305 | 1306 | /update-browserslist-db@1.0.13(browserslist@4.22.2): 1307 | resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} 1308 | hasBin: true 1309 | peerDependencies: 1310 | browserslist: '>= 4.21.0' 1311 | dependencies: 1312 | browserslist: 4.22.2 1313 | escalade: 3.1.1 1314 | picocolors: 1.0.0 1315 | dev: true 1316 | 1317 | /util-deprecate@1.0.2: 1318 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1319 | dev: false 1320 | 1321 | /vite-compatible-readable-stream@3.6.1: 1322 | resolution: {integrity: sha512-t20zYkrSf868+j/p31cRIGN28Phrjm3nRSLR2fyc2tiWi4cZGVdv68yNlwnIINTkMTmPoMiSlc0OadaO7DXZaQ==} 1323 | engines: {node: '>= 6'} 1324 | dependencies: 1325 | inherits: 2.0.4 1326 | string_decoder: 1.3.0 1327 | util-deprecate: 1.0.2 1328 | dev: false 1329 | 1330 | /vite@5.0.10: 1331 | resolution: {integrity: sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==} 1332 | engines: {node: ^18.0.0 || >=20.0.0} 1333 | hasBin: true 1334 | peerDependencies: 1335 | '@types/node': ^18.0.0 || >=20.0.0 1336 | less: '*' 1337 | lightningcss: ^1.21.0 1338 | sass: '*' 1339 | stylus: '*' 1340 | sugarss: '*' 1341 | terser: ^5.4.0 1342 | peerDependenciesMeta: 1343 | '@types/node': 1344 | optional: true 1345 | less: 1346 | optional: true 1347 | lightningcss: 1348 | optional: true 1349 | sass: 1350 | optional: true 1351 | stylus: 1352 | optional: true 1353 | sugarss: 1354 | optional: true 1355 | terser: 1356 | optional: true 1357 | dependencies: 1358 | esbuild: 0.19.9 1359 | postcss: 8.4.32 1360 | rollup: 4.9.1 1361 | optionalDependencies: 1362 | fsevents: 2.3.3 1363 | dev: true 1364 | 1365 | /webidl-conversions@3.0.1: 1366 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 1367 | dev: false 1368 | 1369 | /whatwg-url@5.0.0: 1370 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 1371 | dependencies: 1372 | tr46: 0.0.3 1373 | webidl-conversions: 3.0.1 1374 | dev: false 1375 | 1376 | /yallist@3.1.1: 1377 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 1378 | dev: true 1379 | -------------------------------------------------------------------------------- /examples/vite/public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /examples/vite/src/App.tsx: -------------------------------------------------------------------------------- 1 | import { PDFViewer, Document, Page, Text, View } from "@react-pdf/renderer"; 2 | import { createTw } from "../../../src"; 3 | 4 | const tw = createTw({ 5 | theme: { 6 | extend: { 7 | colors: { 8 | custom: "cornflowerblue", 9 | }, 10 | }, 11 | }, 12 | }); 13 | 14 | export default function App() { 15 | return ( 16 |
17 | 18 | 19 | 20 | {[...Array(12)].map((_, i) => ( 21 | 26 | 27 | Section {i + 1} 28 | 29 | 30 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla 31 | semper efficitur libero in laoreet. Sed iaculis, magna 32 | suscipit placerat commodo, risus turpis tincidunt ligula, ac 33 | euismod justo sem id risus. Nullam euismod vestibulum leo, 34 | mollis maximus sapien luctus in. Vivamus malesuada vulputate 35 | ornare. Mauris ut accumsan felis. Vivamus enim urna, ultrices 36 | eu eros ac, bibendum vehicula eros. Praesent ipsum orci, 37 | molestie gravida tristique at, dapibus vitae est. Phasellus 38 | lectus nulla, consequat eu mi ut, tempus pulvinar neque. 39 | 40 | 41 | ))} 42 | 43 | 44 | 45 |
46 | ); 47 | } 48 | -------------------------------------------------------------------------------- /examples/vite/src/index.css: -------------------------------------------------------------------------------- 1 | main { 2 | max-width: 1200px; 3 | margin: 1rem auto; 4 | } 5 | -------------------------------------------------------------------------------- /examples/vite/src/main.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom/client"; 3 | import App from "./App"; 4 | import "./index.css"; 5 | 6 | ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render( 7 | 8 | 9 | 10 | ); 11 | -------------------------------------------------------------------------------- /examples/vite/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /examples/vite/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "useDefineForClassFields": true, 5 | "lib": ["DOM", "DOM.Iterable", "ESNext"], 6 | "allowJs": false, 7 | "skipLibCheck": true, 8 | "esModuleInterop": false, 9 | "allowSyntheticDefaultImports": true, 10 | "strict": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "module": "ESNext", 13 | "moduleResolution": "Node", 14 | "resolveJsonModule": true, 15 | "isolatedModules": true, 16 | "noEmit": true, 17 | "jsx": "react-jsx" 18 | }, 19 | "include": ["src"], 20 | "references": [{ "path": "./tsconfig.node.json" }] 21 | } 22 | -------------------------------------------------------------------------------- /examples/vite/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "module": "ESNext", 5 | "moduleResolution": "Node", 6 | "allowSyntheticDefaultImports": true 7 | }, 8 | "include": ["vite.config.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /examples/vite/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import react from '@vitejs/plugin-react' 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()], 7 | }) 8 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-pdf-tailwind", 3 | "version": "2.3.0", 4 | "description": "Use Tailwind CSS to style PDFs created with react-pdf", 5 | "keywords": [ 6 | "tailwind", 7 | "react", 8 | "pdf" 9 | ], 10 | "author": "Andreas Anckar", 11 | "homepage": "https://github.com/aanckar/react-pdf-tailwind", 12 | "license": "MIT", 13 | "main": "dist/index.js", 14 | "module": "dist/index.mjs", 15 | "typings": "dist/index.d.ts", 16 | "scripts": { 17 | "build": "tsup src/index.ts --format cjs,esm --dts", 18 | "dev": "tsup src/index.ts --watch", 19 | "lint": "tsc", 20 | "test": "vitest", 21 | "test:run": "vitest --run" 22 | }, 23 | "files": [ 24 | "dist" 25 | ], 26 | "dependencies": { 27 | "@react-pdf/renderer": "^3.1.14", 28 | "tailwindcss": "^3.3.6" 29 | }, 30 | "devDependencies": { 31 | "@react-pdf/types": "^2.3.4", 32 | "@types/node": "^20.10.4", 33 | "tsup": "^8.0.1", 34 | "typescript": "^5.3.3", 35 | "vitest": "^1.0.4" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | '@react-pdf/renderer': 9 | specifier: ^3.1.14 10 | version: 3.1.14(react@18.2.0) 11 | tailwindcss: 12 | specifier: ^3.3.6 13 | version: 3.3.6 14 | 15 | devDependencies: 16 | '@react-pdf/types': 17 | specifier: ^2.3.4 18 | version: 2.3.4 19 | '@types/node': 20 | specifier: ^20.10.4 21 | version: 20.10.4 22 | tsup: 23 | specifier: ^8.0.1 24 | version: 8.0.1(postcss@8.4.32)(typescript@5.3.3) 25 | typescript: 26 | specifier: ^5.3.3 27 | version: 5.3.3 28 | vitest: 29 | specifier: ^1.0.4 30 | version: 1.0.4(@types/node@20.10.4) 31 | 32 | packages: 33 | 34 | /@alloc/quick-lru@5.2.0: 35 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 36 | engines: {node: '>=10'} 37 | dev: false 38 | 39 | /@babel/runtime@7.23.6: 40 | resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} 41 | engines: {node: '>=6.9.0'} 42 | dependencies: 43 | regenerator-runtime: 0.14.1 44 | dev: false 45 | 46 | /@esbuild/android-arm64@0.19.9: 47 | resolution: {integrity: sha512-q4cR+6ZD0938R19MyEW3jEsMzbb/1rulLXiNAJQADD/XYp7pT+rOS5JGxvpRW8dFDEfjW4wLgC/3FXIw4zYglQ==} 48 | engines: {node: '>=12'} 49 | cpu: [arm64] 50 | os: [android] 51 | requiresBuild: true 52 | dev: true 53 | optional: true 54 | 55 | /@esbuild/android-arm@0.19.9: 56 | resolution: {integrity: sha512-jkYjjq7SdsWuNI6b5quymW0oC83NN5FdRPuCbs9HZ02mfVdAP8B8eeqLSYU3gb6OJEaY5CQabtTFbqBf26H3GA==} 57 | engines: {node: '>=12'} 58 | cpu: [arm] 59 | os: [android] 60 | requiresBuild: true 61 | dev: true 62 | optional: true 63 | 64 | /@esbuild/android-x64@0.19.9: 65 | resolution: {integrity: sha512-KOqoPntWAH6ZxDwx1D6mRntIgZh9KodzgNOy5Ebt9ghzffOk9X2c1sPwtM9P+0eXbefnDhqYfkh5PLP5ULtWFA==} 66 | engines: {node: '>=12'} 67 | cpu: [x64] 68 | os: [android] 69 | requiresBuild: true 70 | dev: true 71 | optional: true 72 | 73 | /@esbuild/darwin-arm64@0.19.9: 74 | resolution: {integrity: sha512-KBJ9S0AFyLVx2E5D8W0vExqRW01WqRtczUZ8NRu+Pi+87opZn5tL4Y0xT0mA4FtHctd0ZgwNoN639fUUGlNIWw==} 75 | engines: {node: '>=12'} 76 | cpu: [arm64] 77 | os: [darwin] 78 | requiresBuild: true 79 | dev: true 80 | optional: true 81 | 82 | /@esbuild/darwin-x64@0.19.9: 83 | resolution: {integrity: sha512-vE0VotmNTQaTdX0Q9dOHmMTao6ObjyPm58CHZr1UK7qpNleQyxlFlNCaHsHx6Uqv86VgPmR4o2wdNq3dP1qyDQ==} 84 | engines: {node: '>=12'} 85 | cpu: [x64] 86 | os: [darwin] 87 | requiresBuild: true 88 | dev: true 89 | optional: true 90 | 91 | /@esbuild/freebsd-arm64@0.19.9: 92 | resolution: {integrity: sha512-uFQyd/o1IjiEk3rUHSwUKkqZwqdvuD8GevWF065eqgYfexcVkxh+IJgwTaGZVu59XczZGcN/YMh9uF1fWD8j1g==} 93 | engines: {node: '>=12'} 94 | cpu: [arm64] 95 | os: [freebsd] 96 | requiresBuild: true 97 | dev: true 98 | optional: true 99 | 100 | /@esbuild/freebsd-x64@0.19.9: 101 | resolution: {integrity: sha512-WMLgWAtkdTbTu1AWacY7uoj/YtHthgqrqhf1OaEWnZb7PQgpt8eaA/F3LkV0E6K/Lc0cUr/uaVP/49iE4M4asA==} 102 | engines: {node: '>=12'} 103 | cpu: [x64] 104 | os: [freebsd] 105 | requiresBuild: true 106 | dev: true 107 | optional: true 108 | 109 | /@esbuild/linux-arm64@0.19.9: 110 | resolution: {integrity: sha512-PiPblfe1BjK7WDAKR1Cr9O7VVPqVNpwFcPWgfn4xu0eMemzRp442hXyzF/fSwgrufI66FpHOEJk0yYdPInsmyQ==} 111 | engines: {node: '>=12'} 112 | cpu: [arm64] 113 | os: [linux] 114 | requiresBuild: true 115 | dev: true 116 | optional: true 117 | 118 | /@esbuild/linux-arm@0.19.9: 119 | resolution: {integrity: sha512-C/ChPohUYoyUaqn1h17m/6yt6OB14hbXvT8EgM1ZWaiiTYz7nWZR0SYmMnB5BzQA4GXl3BgBO1l8MYqL/He3qw==} 120 | engines: {node: '>=12'} 121 | cpu: [arm] 122 | os: [linux] 123 | requiresBuild: true 124 | dev: true 125 | optional: true 126 | 127 | /@esbuild/linux-ia32@0.19.9: 128 | resolution: {integrity: sha512-f37i/0zE0MjDxijkPSQw1CO/7C27Eojqb+r3BbHVxMLkj8GCa78TrBZzvPyA/FNLUMzP3eyHCVkAopkKVja+6Q==} 129 | engines: {node: '>=12'} 130 | cpu: [ia32] 131 | os: [linux] 132 | requiresBuild: true 133 | dev: true 134 | optional: true 135 | 136 | /@esbuild/linux-loong64@0.19.9: 137 | resolution: {integrity: sha512-t6mN147pUIf3t6wUt3FeumoOTPfmv9Cc6DQlsVBpB7eCpLOqQDyWBP1ymXn1lDw4fNUSb/gBcKAmvTP49oIkaA==} 138 | engines: {node: '>=12'} 139 | cpu: [loong64] 140 | os: [linux] 141 | requiresBuild: true 142 | dev: true 143 | optional: true 144 | 145 | /@esbuild/linux-mips64el@0.19.9: 146 | resolution: {integrity: sha512-jg9fujJTNTQBuDXdmAg1eeJUL4Jds7BklOTkkH80ZgQIoCTdQrDaHYgbFZyeTq8zbY+axgptncko3v9p5hLZtw==} 147 | engines: {node: '>=12'} 148 | cpu: [mips64el] 149 | os: [linux] 150 | requiresBuild: true 151 | dev: true 152 | optional: true 153 | 154 | /@esbuild/linux-ppc64@0.19.9: 155 | resolution: {integrity: sha512-tkV0xUX0pUUgY4ha7z5BbDS85uI7ABw3V1d0RNTii7E9lbmV8Z37Pup2tsLV46SQWzjOeyDi1Q7Wx2+QM8WaCQ==} 156 | engines: {node: '>=12'} 157 | cpu: [ppc64] 158 | os: [linux] 159 | requiresBuild: true 160 | dev: true 161 | optional: true 162 | 163 | /@esbuild/linux-riscv64@0.19.9: 164 | resolution: {integrity: sha512-DfLp8dj91cufgPZDXr9p3FoR++m3ZJ6uIXsXrIvJdOjXVREtXuQCjfMfvmc3LScAVmLjcfloyVtpn43D56JFHg==} 165 | engines: {node: '>=12'} 166 | cpu: [riscv64] 167 | os: [linux] 168 | requiresBuild: true 169 | dev: true 170 | optional: true 171 | 172 | /@esbuild/linux-s390x@0.19.9: 173 | resolution: {integrity: sha512-zHbglfEdC88KMgCWpOl/zc6dDYJvWGLiUtmPRsr1OgCViu3z5GncvNVdf+6/56O2Ca8jUU+t1BW261V6kp8qdw==} 174 | engines: {node: '>=12'} 175 | cpu: [s390x] 176 | os: [linux] 177 | requiresBuild: true 178 | dev: true 179 | optional: true 180 | 181 | /@esbuild/linux-x64@0.19.9: 182 | resolution: {integrity: sha512-JUjpystGFFmNrEHQnIVG8hKwvA2DN5o7RqiO1CVX8EN/F/gkCjkUMgVn6hzScpwnJtl2mPR6I9XV1oW8k9O+0A==} 183 | engines: {node: '>=12'} 184 | cpu: [x64] 185 | os: [linux] 186 | requiresBuild: true 187 | dev: true 188 | optional: true 189 | 190 | /@esbuild/netbsd-x64@0.19.9: 191 | resolution: {integrity: sha512-GThgZPAwOBOsheA2RUlW5UeroRfESwMq/guy8uEe3wJlAOjpOXuSevLRd70NZ37ZrpO6RHGHgEHvPg1h3S1Jug==} 192 | engines: {node: '>=12'} 193 | cpu: [x64] 194 | os: [netbsd] 195 | requiresBuild: true 196 | dev: true 197 | optional: true 198 | 199 | /@esbuild/openbsd-x64@0.19.9: 200 | resolution: {integrity: sha512-Ki6PlzppaFVbLnD8PtlVQfsYw4S9n3eQl87cqgeIw+O3sRr9IghpfSKY62mggdt1yCSZ8QWvTZ9jo9fjDSg9uw==} 201 | engines: {node: '>=12'} 202 | cpu: [x64] 203 | os: [openbsd] 204 | requiresBuild: true 205 | dev: true 206 | optional: true 207 | 208 | /@esbuild/sunos-x64@0.19.9: 209 | resolution: {integrity: sha512-MLHj7k9hWh4y1ddkBpvRj2b9NCBhfgBt3VpWbHQnXRedVun/hC7sIyTGDGTfsGuXo4ebik2+3ShjcPbhtFwWDw==} 210 | engines: {node: '>=12'} 211 | cpu: [x64] 212 | os: [sunos] 213 | requiresBuild: true 214 | dev: true 215 | optional: true 216 | 217 | /@esbuild/win32-arm64@0.19.9: 218 | resolution: {integrity: sha512-GQoa6OrQ8G08guMFgeXPH7yE/8Dt0IfOGWJSfSH4uafwdC7rWwrfE6P9N8AtPGIjUzdo2+7bN8Xo3qC578olhg==} 219 | engines: {node: '>=12'} 220 | cpu: [arm64] 221 | os: [win32] 222 | requiresBuild: true 223 | dev: true 224 | optional: true 225 | 226 | /@esbuild/win32-ia32@0.19.9: 227 | resolution: {integrity: sha512-UOozV7Ntykvr5tSOlGCrqU3NBr3d8JqPes0QWN2WOXfvkWVGRajC+Ym0/Wj88fUgecUCLDdJPDF0Nna2UK3Qtg==} 228 | engines: {node: '>=12'} 229 | cpu: [ia32] 230 | os: [win32] 231 | requiresBuild: true 232 | dev: true 233 | optional: true 234 | 235 | /@esbuild/win32-x64@0.19.9: 236 | resolution: {integrity: sha512-oxoQgglOP7RH6iasDrhY+R/3cHrfwIDvRlT4CGChflq6twk8iENeVvMJjmvBb94Ik1Z+93iGO27err7w6l54GQ==} 237 | engines: {node: '>=12'} 238 | cpu: [x64] 239 | os: [win32] 240 | requiresBuild: true 241 | dev: true 242 | optional: true 243 | 244 | /@jest/schemas@29.6.3: 245 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} 246 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 247 | dependencies: 248 | '@sinclair/typebox': 0.27.8 249 | dev: true 250 | 251 | /@jridgewell/gen-mapping@0.3.3: 252 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} 253 | engines: {node: '>=6.0.0'} 254 | dependencies: 255 | '@jridgewell/set-array': 1.1.2 256 | '@jridgewell/sourcemap-codec': 1.4.15 257 | '@jridgewell/trace-mapping': 0.3.20 258 | 259 | /@jridgewell/resolve-uri@3.1.1: 260 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} 261 | engines: {node: '>=6.0.0'} 262 | 263 | /@jridgewell/set-array@1.1.2: 264 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 265 | engines: {node: '>=6.0.0'} 266 | 267 | /@jridgewell/sourcemap-codec@1.4.15: 268 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 269 | 270 | /@jridgewell/trace-mapping@0.3.20: 271 | resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} 272 | dependencies: 273 | '@jridgewell/resolve-uri': 3.1.1 274 | '@jridgewell/sourcemap-codec': 1.4.15 275 | 276 | /@nodelib/fs.scandir@2.1.5: 277 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 278 | engines: {node: '>= 8'} 279 | dependencies: 280 | '@nodelib/fs.stat': 2.0.5 281 | run-parallel: 1.2.0 282 | 283 | /@nodelib/fs.stat@2.0.5: 284 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 285 | engines: {node: '>= 8'} 286 | 287 | /@nodelib/fs.walk@1.2.8: 288 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 289 | engines: {node: '>= 8'} 290 | dependencies: 291 | '@nodelib/fs.scandir': 2.1.5 292 | fastq: 1.15.0 293 | 294 | /@react-pdf/fns@2.0.1: 295 | resolution: {integrity: sha512-/vgecczzFYBQFkgUupH+sxXhLWQtBwdwCgweyh25XOlR4NZuaMD/UVUDl4loFHhRQqDMQq37lkTcchh7zzW6ug==} 296 | dependencies: 297 | '@babel/runtime': 7.23.6 298 | dev: false 299 | 300 | /@react-pdf/font@2.3.7: 301 | resolution: {integrity: sha512-NoCieWea6c1mCpDBoyjPbUEC1qXa+S/M7+8vYPZ71aTMgX7co3gQc2e6YKwrSQeQP+BsBq3LSVhjI2ETXfcytw==} 302 | dependencies: 303 | '@babel/runtime': 7.23.6 304 | '@react-pdf/types': 2.3.4 305 | cross-fetch: 3.1.8 306 | fontkit: 2.0.2 307 | is-url: 1.2.4 308 | transitivePeerDependencies: 309 | - encoding 310 | dev: false 311 | 312 | /@react-pdf/image@2.2.2: 313 | resolution: {integrity: sha512-990JvRZuhsnHyAGd7gvmhfr+4/5PAHLH9IgDstaEDLEq2eFAIQFuNM7k3D6kjKgV1mM7Jqif3CWqrcHBF3jrJw==} 314 | dependencies: 315 | '@babel/runtime': 7.23.6 316 | '@react-pdf/png-js': 2.2.0 317 | cross-fetch: 3.1.8 318 | transitivePeerDependencies: 319 | - encoding 320 | dev: false 321 | 322 | /@react-pdf/layout@3.6.3: 323 | resolution: {integrity: sha512-w6ACZ9o18Q5wbzsY9a4KW2Gqn6Drt3AN/kb/I6SBz/L7PAJ9rPQBIDq/s5qZJ+/WwWy33rcC8WC1givtDhjCHQ==} 324 | dependencies: 325 | '@babel/runtime': 7.23.6 326 | '@react-pdf/fns': 2.0.1 327 | '@react-pdf/image': 2.2.2 328 | '@react-pdf/pdfkit': 3.0.2 329 | '@react-pdf/primitives': 3.0.1 330 | '@react-pdf/stylesheet': 4.1.8 331 | '@react-pdf/textkit': 4.2.0 332 | '@react-pdf/types': 2.3.4 333 | '@react-pdf/yoga': 4.1.2 334 | cross-fetch: 3.1.8 335 | emoji-regex: 10.3.0 336 | queue: 6.0.2 337 | transitivePeerDependencies: 338 | - encoding 339 | dev: false 340 | 341 | /@react-pdf/pdfkit@3.0.2: 342 | resolution: {integrity: sha512-+m5rwNCwyEH6lmnZWpsQJvdqb6YaCCR0nMWrc/KKDwznuPMrGmGWyNxqCja+bQPORcHZyl6Cd/iFL0glyB3QGw==} 343 | dependencies: 344 | '@babel/runtime': 7.23.6 345 | '@react-pdf/png-js': 2.2.0 346 | browserify-zlib: 0.2.0 347 | crypto-js: 4.2.0 348 | fontkit: 2.0.2 349 | vite-compatible-readable-stream: 3.6.1 350 | dev: false 351 | 352 | /@react-pdf/png-js@2.2.0: 353 | resolution: {integrity: sha512-csZU5lfNW73tq7s7zB/1rWXGro+Z9cQhxtsXwxS418TSszHUiM6PwddouiKJxdGhbVLjRIcuuFVa0aR5cDOC6w==} 354 | dependencies: 355 | browserify-zlib: 0.2.0 356 | dev: false 357 | 358 | /@react-pdf/primitives@3.0.1: 359 | resolution: {integrity: sha512-0HGcknrLNwyhxe+SZCBL29JY4M85mXKdvTZE9uhjNbADGgTc8wVnkc5+e4S/lDvugbVISXyuIhZnYwtK9eDnyQ==} 360 | dev: false 361 | 362 | /@react-pdf/render@3.2.7: 363 | resolution: {integrity: sha512-fAgbbAAkVL0hpcf1vUJLHxuPjPBqZuq8nors7fCwvoatBBwOWP9fza7IDPeFKN7+ZOnfmIZzes8Kc/DNHzJohw==} 364 | dependencies: 365 | '@babel/runtime': 7.23.6 366 | '@react-pdf/fns': 2.0.1 367 | '@react-pdf/primitives': 3.0.1 368 | '@react-pdf/textkit': 4.2.0 369 | '@react-pdf/types': 2.3.4 370 | abs-svg-path: 0.1.1 371 | color-string: 1.9.1 372 | normalize-svg-path: 1.1.0 373 | parse-svg-path: 0.1.2 374 | svg-arc-to-cubic-bezier: 3.2.0 375 | dev: false 376 | 377 | /@react-pdf/renderer@3.1.14(react@18.2.0): 378 | resolution: {integrity: sha512-Qk29uTamH6q+drK/YmiFbuQQ+yutesfIe+wyrsXFoUJUutIiDIaibO6zByMkhWb3M6CMt6NvG3NLHio1OF8U6Q==} 379 | peerDependencies: 380 | react: ^16.8.6 || ^17.0.0 || ^18.0.0 381 | dependencies: 382 | '@babel/runtime': 7.23.6 383 | '@react-pdf/font': 2.3.7 384 | '@react-pdf/layout': 3.6.3 385 | '@react-pdf/pdfkit': 3.0.2 386 | '@react-pdf/primitives': 3.0.1 387 | '@react-pdf/render': 3.2.7 388 | '@react-pdf/types': 2.3.4 389 | events: 3.3.0 390 | object-assign: 4.1.1 391 | prop-types: 15.8.1 392 | queue: 6.0.2 393 | react: 18.2.0 394 | scheduler: 0.17.0 395 | transitivePeerDependencies: 396 | - encoding 397 | dev: false 398 | 399 | /@react-pdf/stylesheet@4.1.8: 400 | resolution: {integrity: sha512-/EuB9RBsH3YYRj8mwzImaul619MvX3rsHNF4h8LnlwDOuBehPA3L/fHrikfPqtJvHqK2ty3GXnkw0HG5SQpMzw==} 401 | dependencies: 402 | '@babel/runtime': 7.23.6 403 | '@react-pdf/fns': 2.0.1 404 | '@react-pdf/types': 2.3.4 405 | color-string: 1.9.1 406 | hsl-to-hex: 1.0.0 407 | media-engine: 1.0.3 408 | postcss-value-parser: 4.2.0 409 | dev: false 410 | 411 | /@react-pdf/textkit@4.2.0: 412 | resolution: {integrity: sha512-R90pEOW6NdhUx4p99iROvKmwB06IRYdXMhh0QcmUeoPOLe64ZdMfs3LZliNUWgI5fCmq71J+nv868i/EakFPDg==} 413 | dependencies: 414 | '@babel/runtime': 7.23.6 415 | '@react-pdf/fns': 2.0.1 416 | hyphen: 1.9.1 417 | unicode-properties: 1.4.1 418 | dev: false 419 | 420 | /@react-pdf/types@2.3.4: 421 | resolution: {integrity: sha512-vGGz21BTE05EktBbotbd7fjC0Yi8A/lOSIpzd7L7aF1XY+vyIHlQVb35DWCipM1p/6XN4cr9etGAmm1e4Mtmjw==} 422 | 423 | /@react-pdf/yoga@4.1.2: 424 | resolution: {integrity: sha512-OlMZkFrJDj4GyKZ70thiObwwPVZ52B7mlPyfzwa+sgwsioqHXg9nMWOO+7SQFNUbbOGagMUu0bCuTv+iXYZuaQ==} 425 | dependencies: 426 | '@babel/runtime': 7.23.6 427 | dev: false 428 | 429 | /@rollup/rollup-android-arm-eabi@4.9.1: 430 | resolution: {integrity: sha512-6vMdBZqtq1dVQ4CWdhFwhKZL6E4L1dV6jUjuBvsavvNJSppzi6dLBbuV+3+IyUREaj9ZFvQefnQm28v4OCXlig==} 431 | cpu: [arm] 432 | os: [android] 433 | requiresBuild: true 434 | dev: true 435 | optional: true 436 | 437 | /@rollup/rollup-android-arm64@4.9.1: 438 | resolution: {integrity: sha512-Jto9Fl3YQ9OLsTDWtLFPtaIMSL2kwGyGoVCmPC8Gxvym9TCZm4Sie+cVeblPO66YZsYH8MhBKDMGZ2NDxuk/XQ==} 439 | cpu: [arm64] 440 | os: [android] 441 | requiresBuild: true 442 | dev: true 443 | optional: true 444 | 445 | /@rollup/rollup-darwin-arm64@4.9.1: 446 | resolution: {integrity: sha512-LtYcLNM+bhsaKAIGwVkh5IOWhaZhjTfNOkGzGqdHvhiCUVuJDalvDxEdSnhFzAn+g23wgsycmZk1vbnaibZwwA==} 447 | cpu: [arm64] 448 | os: [darwin] 449 | requiresBuild: true 450 | dev: true 451 | optional: true 452 | 453 | /@rollup/rollup-darwin-x64@4.9.1: 454 | resolution: {integrity: sha512-KyP/byeXu9V+etKO6Lw3E4tW4QdcnzDG/ake031mg42lob5tN+5qfr+lkcT/SGZaH2PdW4Z1NX9GHEkZ8xV7og==} 455 | cpu: [x64] 456 | os: [darwin] 457 | requiresBuild: true 458 | dev: true 459 | optional: true 460 | 461 | /@rollup/rollup-linux-arm-gnueabihf@4.9.1: 462 | resolution: {integrity: sha512-Yqz/Doumf3QTKplwGNrCHe/B2p9xqDghBZSlAY0/hU6ikuDVQuOUIpDP/YcmoT+447tsZTmirmjgG3znvSCR0Q==} 463 | cpu: [arm] 464 | os: [linux] 465 | requiresBuild: true 466 | dev: true 467 | optional: true 468 | 469 | /@rollup/rollup-linux-arm64-gnu@4.9.1: 470 | resolution: {integrity: sha512-u3XkZVvxcvlAOlQJ3UsD1rFvLWqu4Ef/Ggl40WAVCuogf4S1nJPHh5RTgqYFpCOvuGJ7H5yGHabjFKEZGExk5Q==} 471 | cpu: [arm64] 472 | os: [linux] 473 | requiresBuild: true 474 | dev: true 475 | optional: true 476 | 477 | /@rollup/rollup-linux-arm64-musl@4.9.1: 478 | resolution: {integrity: sha512-0XSYN/rfWShW+i+qjZ0phc6vZ7UWI8XWNz4E/l+6edFt+FxoEghrJHjX1EY/kcUGCnZzYYRCl31SNdfOi450Aw==} 479 | cpu: [arm64] 480 | os: [linux] 481 | requiresBuild: true 482 | dev: true 483 | optional: true 484 | 485 | /@rollup/rollup-linux-riscv64-gnu@4.9.1: 486 | resolution: {integrity: sha512-LmYIO65oZVfFt9t6cpYkbC4d5lKHLYv5B4CSHRpnANq0VZUQXGcCPXHzbCXCz4RQnx7jvlYB1ISVNCE/omz5cw==} 487 | cpu: [riscv64] 488 | os: [linux] 489 | requiresBuild: true 490 | dev: true 491 | optional: true 492 | 493 | /@rollup/rollup-linux-x64-gnu@4.9.1: 494 | resolution: {integrity: sha512-kr8rEPQ6ns/Lmr/hiw8sEVj9aa07gh1/tQF2Y5HrNCCEPiCBGnBUt9tVusrcBBiJfIt1yNaXN6r1CCmpbFEDpg==} 495 | cpu: [x64] 496 | os: [linux] 497 | requiresBuild: true 498 | dev: true 499 | optional: true 500 | 501 | /@rollup/rollup-linux-x64-musl@4.9.1: 502 | resolution: {integrity: sha512-t4QSR7gN+OEZLG0MiCgPqMWZGwmeHhsM4AkegJ0Kiy6TnJ9vZ8dEIwHw1LcZKhbHxTY32hp9eVCMdR3/I8MGRw==} 503 | cpu: [x64] 504 | os: [linux] 505 | requiresBuild: true 506 | dev: true 507 | optional: true 508 | 509 | /@rollup/rollup-win32-arm64-msvc@4.9.1: 510 | resolution: {integrity: sha512-7XI4ZCBN34cb+BH557FJPmh0kmNz2c25SCQeT9OiFWEgf8+dL6ZwJ8f9RnUIit+j01u07Yvrsuu1rZGxJCc51g==} 511 | cpu: [arm64] 512 | os: [win32] 513 | requiresBuild: true 514 | dev: true 515 | optional: true 516 | 517 | /@rollup/rollup-win32-ia32-msvc@4.9.1: 518 | resolution: {integrity: sha512-yE5c2j1lSWOH5jp+Q0qNL3Mdhr8WuqCNVjc6BxbVfS5cAS6zRmdiw7ktb8GNpDCEUJphILY6KACoFoRtKoqNQg==} 519 | cpu: [ia32] 520 | os: [win32] 521 | requiresBuild: true 522 | dev: true 523 | optional: true 524 | 525 | /@rollup/rollup-win32-x64-msvc@4.9.1: 526 | resolution: {integrity: sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA==} 527 | cpu: [x64] 528 | os: [win32] 529 | requiresBuild: true 530 | dev: true 531 | optional: true 532 | 533 | /@sinclair/typebox@0.27.8: 534 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} 535 | dev: true 536 | 537 | /@swc/helpers@0.4.14: 538 | resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} 539 | dependencies: 540 | tslib: 2.6.2 541 | dev: false 542 | 543 | /@swc/helpers@0.4.36: 544 | resolution: {integrity: sha512-5lxnyLEYFskErRPenYItLRSge5DjrJngYKdVjRSrWfza9G6KkgHEXi0vUZiyUeMU5JfXH1YnvXZzSp8ul88o2Q==} 545 | dependencies: 546 | legacy-swc-helpers: /@swc/helpers@0.4.14 547 | tslib: 2.6.2 548 | dev: false 549 | 550 | /@types/node@20.10.4: 551 | resolution: {integrity: sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==} 552 | dependencies: 553 | undici-types: 5.26.5 554 | dev: true 555 | 556 | /@vitest/expect@1.0.4: 557 | resolution: {integrity: sha512-/NRN9N88qjg3dkhmFcCBwhn/Ie4h064pY3iv7WLRsDJW7dXnEgeoa8W9zy7gIPluhz6CkgqiB3HmpIXgmEY5dQ==} 558 | dependencies: 559 | '@vitest/spy': 1.0.4 560 | '@vitest/utils': 1.0.4 561 | chai: 4.3.10 562 | dev: true 563 | 564 | /@vitest/runner@1.0.4: 565 | resolution: {integrity: sha512-rhOQ9FZTEkV41JWXozFM8YgOqaG9zA7QXbhg5gy6mFOVqh4PcupirIJ+wN7QjeJt8S8nJRYuZH1OjJjsbxAXTQ==} 566 | dependencies: 567 | '@vitest/utils': 1.0.4 568 | p-limit: 5.0.0 569 | pathe: 1.1.1 570 | dev: true 571 | 572 | /@vitest/snapshot@1.0.4: 573 | resolution: {integrity: sha512-vkfXUrNyNRA/Gzsp2lpyJxh94vU2OHT1amoD6WuvUAA12n32xeVZQ0KjjQIf8F6u7bcq2A2k969fMVxEsxeKYA==} 574 | dependencies: 575 | magic-string: 0.30.5 576 | pathe: 1.1.1 577 | pretty-format: 29.7.0 578 | dev: true 579 | 580 | /@vitest/spy@1.0.4: 581 | resolution: {integrity: sha512-9ojTFRL1AJVh0hvfzAQpm0QS6xIS+1HFIw94kl/1ucTfGCaj1LV/iuJU4Y6cdR03EzPDygxTHwE1JOm+5RCcvA==} 582 | dependencies: 583 | tinyspy: 2.2.0 584 | dev: true 585 | 586 | /@vitest/utils@1.0.4: 587 | resolution: {integrity: sha512-gsswWDXxtt0QvtK/y/LWukN7sGMYmnCcv1qv05CsY6cU/Y1zpGX1QuvLs+GO1inczpE6Owixeel3ShkjhYtGfA==} 588 | dependencies: 589 | diff-sequences: 29.6.3 590 | loupe: 2.3.7 591 | pretty-format: 29.7.0 592 | dev: true 593 | 594 | /abs-svg-path@0.1.1: 595 | resolution: {integrity: sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==} 596 | dev: false 597 | 598 | /acorn-walk@8.3.1: 599 | resolution: {integrity: sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==} 600 | engines: {node: '>=0.4.0'} 601 | dev: true 602 | 603 | /acorn@8.11.2: 604 | resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} 605 | engines: {node: '>=0.4.0'} 606 | hasBin: true 607 | dev: true 608 | 609 | /ansi-styles@5.2.0: 610 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 611 | engines: {node: '>=10'} 612 | dev: true 613 | 614 | /any-promise@1.3.0: 615 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 616 | 617 | /anymatch@3.1.3: 618 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 619 | engines: {node: '>= 8'} 620 | dependencies: 621 | normalize-path: 3.0.0 622 | picomatch: 2.3.1 623 | 624 | /arg@5.0.2: 625 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 626 | dev: false 627 | 628 | /array-union@2.1.0: 629 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 630 | engines: {node: '>=8'} 631 | dev: true 632 | 633 | /assertion-error@1.1.0: 634 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} 635 | dev: true 636 | 637 | /balanced-match@1.0.2: 638 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 639 | 640 | /base64-js@1.5.1: 641 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 642 | dev: false 643 | 644 | /binary-extensions@2.2.0: 645 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 646 | engines: {node: '>=8'} 647 | 648 | /brace-expansion@1.1.11: 649 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 650 | dependencies: 651 | balanced-match: 1.0.2 652 | concat-map: 0.0.1 653 | 654 | /braces@3.0.2: 655 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 656 | engines: {node: '>=8'} 657 | dependencies: 658 | fill-range: 7.0.1 659 | 660 | /brotli@1.3.3: 661 | resolution: {integrity: sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==} 662 | dependencies: 663 | base64-js: 1.5.1 664 | dev: false 665 | 666 | /browserify-zlib@0.2.0: 667 | resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} 668 | dependencies: 669 | pako: 1.0.11 670 | dev: false 671 | 672 | /bundle-require@4.0.2(esbuild@0.19.9): 673 | resolution: {integrity: sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==} 674 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 675 | peerDependencies: 676 | esbuild: '>=0.17' 677 | dependencies: 678 | esbuild: 0.19.9 679 | load-tsconfig: 0.2.5 680 | dev: true 681 | 682 | /cac@6.7.14: 683 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 684 | engines: {node: '>=8'} 685 | dev: true 686 | 687 | /camelcase-css@2.0.1: 688 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 689 | engines: {node: '>= 6'} 690 | dev: false 691 | 692 | /chai@4.3.10: 693 | resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} 694 | engines: {node: '>=4'} 695 | dependencies: 696 | assertion-error: 1.1.0 697 | check-error: 1.0.3 698 | deep-eql: 4.1.3 699 | get-func-name: 2.0.2 700 | loupe: 2.3.7 701 | pathval: 1.1.1 702 | type-detect: 4.0.8 703 | dev: true 704 | 705 | /check-error@1.0.3: 706 | resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} 707 | dependencies: 708 | get-func-name: 2.0.2 709 | dev: true 710 | 711 | /chokidar@3.5.3: 712 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 713 | engines: {node: '>= 8.10.0'} 714 | dependencies: 715 | anymatch: 3.1.3 716 | braces: 3.0.2 717 | glob-parent: 5.1.2 718 | is-binary-path: 2.1.0 719 | is-glob: 4.0.3 720 | normalize-path: 3.0.0 721 | readdirp: 3.6.0 722 | optionalDependencies: 723 | fsevents: 2.3.3 724 | 725 | /clone@2.1.2: 726 | resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} 727 | engines: {node: '>=0.8'} 728 | dev: false 729 | 730 | /color-name@1.1.4: 731 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 732 | dev: false 733 | 734 | /color-string@1.9.1: 735 | resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} 736 | dependencies: 737 | color-name: 1.1.4 738 | simple-swizzle: 0.2.2 739 | dev: false 740 | 741 | /commander@4.1.1: 742 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 743 | engines: {node: '>= 6'} 744 | 745 | /concat-map@0.0.1: 746 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 747 | 748 | /cross-fetch@3.1.8: 749 | resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} 750 | dependencies: 751 | node-fetch: 2.7.0 752 | transitivePeerDependencies: 753 | - encoding 754 | dev: false 755 | 756 | /cross-spawn@7.0.3: 757 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 758 | engines: {node: '>= 8'} 759 | dependencies: 760 | path-key: 3.1.1 761 | shebang-command: 2.0.0 762 | which: 2.0.2 763 | dev: true 764 | 765 | /crypto-js@4.2.0: 766 | resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} 767 | dev: false 768 | 769 | /cssesc@3.0.0: 770 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 771 | engines: {node: '>=4'} 772 | hasBin: true 773 | dev: false 774 | 775 | /debug@4.3.4: 776 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 777 | engines: {node: '>=6.0'} 778 | peerDependencies: 779 | supports-color: '*' 780 | peerDependenciesMeta: 781 | supports-color: 782 | optional: true 783 | dependencies: 784 | ms: 2.1.2 785 | dev: true 786 | 787 | /deep-eql@4.1.3: 788 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} 789 | engines: {node: '>=6'} 790 | dependencies: 791 | type-detect: 4.0.8 792 | dev: true 793 | 794 | /dfa@1.2.0: 795 | resolution: {integrity: sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==} 796 | dev: false 797 | 798 | /didyoumean@1.2.2: 799 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 800 | dev: false 801 | 802 | /diff-sequences@29.6.3: 803 | resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} 804 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 805 | dev: true 806 | 807 | /dir-glob@3.0.1: 808 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 809 | engines: {node: '>=8'} 810 | dependencies: 811 | path-type: 4.0.0 812 | dev: true 813 | 814 | /dlv@1.1.3: 815 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 816 | dev: false 817 | 818 | /emoji-regex@10.3.0: 819 | resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} 820 | dev: false 821 | 822 | /esbuild@0.19.9: 823 | resolution: {integrity: sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg==} 824 | engines: {node: '>=12'} 825 | hasBin: true 826 | requiresBuild: true 827 | optionalDependencies: 828 | '@esbuild/android-arm': 0.19.9 829 | '@esbuild/android-arm64': 0.19.9 830 | '@esbuild/android-x64': 0.19.9 831 | '@esbuild/darwin-arm64': 0.19.9 832 | '@esbuild/darwin-x64': 0.19.9 833 | '@esbuild/freebsd-arm64': 0.19.9 834 | '@esbuild/freebsd-x64': 0.19.9 835 | '@esbuild/linux-arm': 0.19.9 836 | '@esbuild/linux-arm64': 0.19.9 837 | '@esbuild/linux-ia32': 0.19.9 838 | '@esbuild/linux-loong64': 0.19.9 839 | '@esbuild/linux-mips64el': 0.19.9 840 | '@esbuild/linux-ppc64': 0.19.9 841 | '@esbuild/linux-riscv64': 0.19.9 842 | '@esbuild/linux-s390x': 0.19.9 843 | '@esbuild/linux-x64': 0.19.9 844 | '@esbuild/netbsd-x64': 0.19.9 845 | '@esbuild/openbsd-x64': 0.19.9 846 | '@esbuild/sunos-x64': 0.19.9 847 | '@esbuild/win32-arm64': 0.19.9 848 | '@esbuild/win32-ia32': 0.19.9 849 | '@esbuild/win32-x64': 0.19.9 850 | dev: true 851 | 852 | /events@3.3.0: 853 | resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} 854 | engines: {node: '>=0.8.x'} 855 | dev: false 856 | 857 | /execa@5.1.1: 858 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 859 | engines: {node: '>=10'} 860 | dependencies: 861 | cross-spawn: 7.0.3 862 | get-stream: 6.0.1 863 | human-signals: 2.1.0 864 | is-stream: 2.0.1 865 | merge-stream: 2.0.0 866 | npm-run-path: 4.0.1 867 | onetime: 5.1.2 868 | signal-exit: 3.0.7 869 | strip-final-newline: 2.0.0 870 | dev: true 871 | 872 | /execa@8.0.1: 873 | resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} 874 | engines: {node: '>=16.17'} 875 | dependencies: 876 | cross-spawn: 7.0.3 877 | get-stream: 8.0.1 878 | human-signals: 5.0.0 879 | is-stream: 3.0.0 880 | merge-stream: 2.0.0 881 | npm-run-path: 5.1.0 882 | onetime: 6.0.0 883 | signal-exit: 4.1.0 884 | strip-final-newline: 3.0.0 885 | dev: true 886 | 887 | /fast-deep-equal@3.1.3: 888 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 889 | dev: false 890 | 891 | /fast-glob@3.3.2: 892 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 893 | engines: {node: '>=8.6.0'} 894 | dependencies: 895 | '@nodelib/fs.stat': 2.0.5 896 | '@nodelib/fs.walk': 1.2.8 897 | glob-parent: 5.1.2 898 | merge2: 1.4.1 899 | micromatch: 4.0.5 900 | 901 | /fastq@1.15.0: 902 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 903 | dependencies: 904 | reusify: 1.0.4 905 | 906 | /fill-range@7.0.1: 907 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 908 | engines: {node: '>=8'} 909 | dependencies: 910 | to-regex-range: 5.0.1 911 | 912 | /fontkit@2.0.2: 913 | resolution: {integrity: sha512-jc4k5Yr8iov8QfS6u8w2CnHWVmbOGtdBtOXMze5Y+QD966Rx6PEVWXSEGwXlsDlKtu1G12cJjcsybnqhSk/+LA==} 914 | dependencies: 915 | '@swc/helpers': 0.4.36 916 | brotli: 1.3.3 917 | clone: 2.1.2 918 | dfa: 1.2.0 919 | fast-deep-equal: 3.1.3 920 | restructure: 3.0.0 921 | tiny-inflate: 1.0.3 922 | unicode-properties: 1.4.1 923 | unicode-trie: 2.0.0 924 | dev: false 925 | 926 | /fs.realpath@1.0.0: 927 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 928 | 929 | /fsevents@2.3.3: 930 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 931 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 932 | os: [darwin] 933 | requiresBuild: true 934 | optional: true 935 | 936 | /function-bind@1.1.2: 937 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 938 | dev: false 939 | 940 | /get-func-name@2.0.2: 941 | resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} 942 | dev: true 943 | 944 | /get-stream@6.0.1: 945 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 946 | engines: {node: '>=10'} 947 | dev: true 948 | 949 | /get-stream@8.0.1: 950 | resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} 951 | engines: {node: '>=16'} 952 | dev: true 953 | 954 | /glob-parent@5.1.2: 955 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 956 | engines: {node: '>= 6'} 957 | dependencies: 958 | is-glob: 4.0.3 959 | 960 | /glob-parent@6.0.2: 961 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 962 | engines: {node: '>=10.13.0'} 963 | dependencies: 964 | is-glob: 4.0.3 965 | dev: false 966 | 967 | /glob@7.1.6: 968 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} 969 | dependencies: 970 | fs.realpath: 1.0.0 971 | inflight: 1.0.6 972 | inherits: 2.0.4 973 | minimatch: 3.1.2 974 | once: 1.4.0 975 | path-is-absolute: 1.0.1 976 | 977 | /globby@11.1.0: 978 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 979 | engines: {node: '>=10'} 980 | dependencies: 981 | array-union: 2.1.0 982 | dir-glob: 3.0.1 983 | fast-glob: 3.3.2 984 | ignore: 5.3.0 985 | merge2: 1.4.1 986 | slash: 3.0.0 987 | dev: true 988 | 989 | /hasown@2.0.0: 990 | resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} 991 | engines: {node: '>= 0.4'} 992 | dependencies: 993 | function-bind: 1.1.2 994 | dev: false 995 | 996 | /hsl-to-hex@1.0.0: 997 | resolution: {integrity: sha512-K6GVpucS5wFf44X0h2bLVRDsycgJmf9FF2elg+CrqD8GcFU8c6vYhgXn8NjUkFCwj+xDFb70qgLbTUm6sxwPmA==} 998 | dependencies: 999 | hsl-to-rgb-for-reals: 1.1.1 1000 | dev: false 1001 | 1002 | /hsl-to-rgb-for-reals@1.1.1: 1003 | resolution: {integrity: sha512-LgOWAkrN0rFaQpfdWBQlv/VhkOxb5AsBjk6NQVx4yEzWS923T07X0M1Y0VNko2H52HeSpZrZNNMJ0aFqsdVzQg==} 1004 | dev: false 1005 | 1006 | /human-signals@2.1.0: 1007 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 1008 | engines: {node: '>=10.17.0'} 1009 | dev: true 1010 | 1011 | /human-signals@5.0.0: 1012 | resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} 1013 | engines: {node: '>=16.17.0'} 1014 | dev: true 1015 | 1016 | /hyphen@1.9.1: 1017 | resolution: {integrity: sha512-fIPVvM6BUW+878xne+wwIcBjMxeKpoADmxNTjKMocUQWiGOvwyEfZEG95IeL/t4Su6nbfbXeYDUnz62pxzLPmw==} 1018 | dev: false 1019 | 1020 | /ignore@5.3.0: 1021 | resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} 1022 | engines: {node: '>= 4'} 1023 | dev: true 1024 | 1025 | /inflight@1.0.6: 1026 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1027 | dependencies: 1028 | once: 1.4.0 1029 | wrappy: 1.0.2 1030 | 1031 | /inherits@2.0.4: 1032 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1033 | 1034 | /is-arrayish@0.3.2: 1035 | resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} 1036 | dev: false 1037 | 1038 | /is-binary-path@2.1.0: 1039 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1040 | engines: {node: '>=8'} 1041 | dependencies: 1042 | binary-extensions: 2.2.0 1043 | 1044 | /is-core-module@2.13.1: 1045 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} 1046 | dependencies: 1047 | hasown: 2.0.0 1048 | dev: false 1049 | 1050 | /is-extglob@2.1.1: 1051 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1052 | engines: {node: '>=0.10.0'} 1053 | 1054 | /is-glob@4.0.3: 1055 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1056 | engines: {node: '>=0.10.0'} 1057 | dependencies: 1058 | is-extglob: 2.1.1 1059 | 1060 | /is-number@7.0.0: 1061 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1062 | engines: {node: '>=0.12.0'} 1063 | 1064 | /is-stream@2.0.1: 1065 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1066 | engines: {node: '>=8'} 1067 | dev: true 1068 | 1069 | /is-stream@3.0.0: 1070 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} 1071 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1072 | dev: true 1073 | 1074 | /is-url@1.2.4: 1075 | resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} 1076 | dev: false 1077 | 1078 | /isexe@2.0.0: 1079 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1080 | dev: true 1081 | 1082 | /jiti@1.21.0: 1083 | resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} 1084 | hasBin: true 1085 | dev: false 1086 | 1087 | /joycon@3.1.1: 1088 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 1089 | engines: {node: '>=10'} 1090 | dev: true 1091 | 1092 | /js-tokens@4.0.0: 1093 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1094 | dev: false 1095 | 1096 | /jsonc-parser@3.2.0: 1097 | resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} 1098 | dev: true 1099 | 1100 | /lilconfig@2.1.0: 1101 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 1102 | engines: {node: '>=10'} 1103 | dev: false 1104 | 1105 | /lilconfig@3.0.0: 1106 | resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} 1107 | engines: {node: '>=14'} 1108 | 1109 | /lines-and-columns@1.2.4: 1110 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1111 | 1112 | /load-tsconfig@0.2.5: 1113 | resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} 1114 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1115 | dev: true 1116 | 1117 | /local-pkg@0.5.0: 1118 | resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} 1119 | engines: {node: '>=14'} 1120 | dependencies: 1121 | mlly: 1.4.2 1122 | pkg-types: 1.0.3 1123 | dev: true 1124 | 1125 | /lodash.sortby@4.7.0: 1126 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} 1127 | dev: true 1128 | 1129 | /loose-envify@1.4.0: 1130 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1131 | hasBin: true 1132 | dependencies: 1133 | js-tokens: 4.0.0 1134 | dev: false 1135 | 1136 | /loupe@2.3.7: 1137 | resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} 1138 | dependencies: 1139 | get-func-name: 2.0.2 1140 | dev: true 1141 | 1142 | /magic-string@0.30.5: 1143 | resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} 1144 | engines: {node: '>=12'} 1145 | dependencies: 1146 | '@jridgewell/sourcemap-codec': 1.4.15 1147 | dev: true 1148 | 1149 | /media-engine@1.0.3: 1150 | resolution: {integrity: sha512-aa5tG6sDoK+k70B9iEX1NeyfT8ObCKhNDs6lJVpwF6r8vhUfuKMslIcirq6HIUYuuUYLefcEQOn9bSBOvawtwg==} 1151 | dev: false 1152 | 1153 | /merge-stream@2.0.0: 1154 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1155 | dev: true 1156 | 1157 | /merge2@1.4.1: 1158 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1159 | engines: {node: '>= 8'} 1160 | 1161 | /micromatch@4.0.5: 1162 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1163 | engines: {node: '>=8.6'} 1164 | dependencies: 1165 | braces: 3.0.2 1166 | picomatch: 2.3.1 1167 | 1168 | /mimic-fn@2.1.0: 1169 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1170 | engines: {node: '>=6'} 1171 | dev: true 1172 | 1173 | /mimic-fn@4.0.0: 1174 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} 1175 | engines: {node: '>=12'} 1176 | dev: true 1177 | 1178 | /minimatch@3.1.2: 1179 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1180 | dependencies: 1181 | brace-expansion: 1.1.11 1182 | 1183 | /mlly@1.4.2: 1184 | resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} 1185 | dependencies: 1186 | acorn: 8.11.2 1187 | pathe: 1.1.1 1188 | pkg-types: 1.0.3 1189 | ufo: 1.3.2 1190 | dev: true 1191 | 1192 | /ms@2.1.2: 1193 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1194 | dev: true 1195 | 1196 | /mz@2.7.0: 1197 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1198 | dependencies: 1199 | any-promise: 1.3.0 1200 | object-assign: 4.1.1 1201 | thenify-all: 1.6.0 1202 | 1203 | /nanoid@3.3.7: 1204 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 1205 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1206 | hasBin: true 1207 | 1208 | /node-fetch@2.7.0: 1209 | resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} 1210 | engines: {node: 4.x || >=6.0.0} 1211 | peerDependencies: 1212 | encoding: ^0.1.0 1213 | peerDependenciesMeta: 1214 | encoding: 1215 | optional: true 1216 | dependencies: 1217 | whatwg-url: 5.0.0 1218 | dev: false 1219 | 1220 | /normalize-path@3.0.0: 1221 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1222 | engines: {node: '>=0.10.0'} 1223 | 1224 | /normalize-svg-path@1.1.0: 1225 | resolution: {integrity: sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg==} 1226 | dependencies: 1227 | svg-arc-to-cubic-bezier: 3.2.0 1228 | dev: false 1229 | 1230 | /npm-run-path@4.0.1: 1231 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 1232 | engines: {node: '>=8'} 1233 | dependencies: 1234 | path-key: 3.1.1 1235 | dev: true 1236 | 1237 | /npm-run-path@5.1.0: 1238 | resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} 1239 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1240 | dependencies: 1241 | path-key: 4.0.0 1242 | dev: true 1243 | 1244 | /object-assign@4.1.1: 1245 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1246 | engines: {node: '>=0.10.0'} 1247 | 1248 | /object-hash@3.0.0: 1249 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 1250 | engines: {node: '>= 6'} 1251 | dev: false 1252 | 1253 | /once@1.4.0: 1254 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1255 | dependencies: 1256 | wrappy: 1.0.2 1257 | 1258 | /onetime@5.1.2: 1259 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 1260 | engines: {node: '>=6'} 1261 | dependencies: 1262 | mimic-fn: 2.1.0 1263 | dev: true 1264 | 1265 | /onetime@6.0.0: 1266 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} 1267 | engines: {node: '>=12'} 1268 | dependencies: 1269 | mimic-fn: 4.0.0 1270 | dev: true 1271 | 1272 | /p-limit@5.0.0: 1273 | resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} 1274 | engines: {node: '>=18'} 1275 | dependencies: 1276 | yocto-queue: 1.0.0 1277 | dev: true 1278 | 1279 | /pako@0.2.9: 1280 | resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} 1281 | dev: false 1282 | 1283 | /pako@1.0.11: 1284 | resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} 1285 | dev: false 1286 | 1287 | /parse-svg-path@0.1.2: 1288 | resolution: {integrity: sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==} 1289 | dev: false 1290 | 1291 | /path-is-absolute@1.0.1: 1292 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1293 | engines: {node: '>=0.10.0'} 1294 | 1295 | /path-key@3.1.1: 1296 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1297 | engines: {node: '>=8'} 1298 | dev: true 1299 | 1300 | /path-key@4.0.0: 1301 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 1302 | engines: {node: '>=12'} 1303 | dev: true 1304 | 1305 | /path-parse@1.0.7: 1306 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1307 | dev: false 1308 | 1309 | /path-type@4.0.0: 1310 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1311 | engines: {node: '>=8'} 1312 | dev: true 1313 | 1314 | /pathe@1.1.1: 1315 | resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} 1316 | dev: true 1317 | 1318 | /pathval@1.1.1: 1319 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} 1320 | dev: true 1321 | 1322 | /picocolors@1.0.0: 1323 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1324 | 1325 | /picomatch@2.3.1: 1326 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1327 | engines: {node: '>=8.6'} 1328 | 1329 | /pify@2.3.0: 1330 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 1331 | engines: {node: '>=0.10.0'} 1332 | dev: false 1333 | 1334 | /pirates@4.0.6: 1335 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 1336 | engines: {node: '>= 6'} 1337 | 1338 | /pkg-types@1.0.3: 1339 | resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} 1340 | dependencies: 1341 | jsonc-parser: 3.2.0 1342 | mlly: 1.4.2 1343 | pathe: 1.1.1 1344 | dev: true 1345 | 1346 | /postcss-import@15.1.0(postcss@8.4.32): 1347 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} 1348 | engines: {node: '>=14.0.0'} 1349 | peerDependencies: 1350 | postcss: ^8.0.0 1351 | dependencies: 1352 | postcss: 8.4.32 1353 | postcss-value-parser: 4.2.0 1354 | read-cache: 1.0.0 1355 | resolve: 1.22.8 1356 | dev: false 1357 | 1358 | /postcss-js@4.0.1(postcss@8.4.32): 1359 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 1360 | engines: {node: ^12 || ^14 || >= 16} 1361 | peerDependencies: 1362 | postcss: ^8.4.21 1363 | dependencies: 1364 | camelcase-css: 2.0.1 1365 | postcss: 8.4.32 1366 | dev: false 1367 | 1368 | /postcss-load-config@4.0.2(postcss@8.4.32): 1369 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} 1370 | engines: {node: '>= 14'} 1371 | peerDependencies: 1372 | postcss: '>=8.0.9' 1373 | ts-node: '>=9.0.0' 1374 | peerDependenciesMeta: 1375 | postcss: 1376 | optional: true 1377 | ts-node: 1378 | optional: true 1379 | dependencies: 1380 | lilconfig: 3.0.0 1381 | postcss: 8.4.32 1382 | yaml: 2.3.4 1383 | 1384 | /postcss-nested@6.0.1(postcss@8.4.32): 1385 | resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} 1386 | engines: {node: '>=12.0'} 1387 | peerDependencies: 1388 | postcss: ^8.2.14 1389 | dependencies: 1390 | postcss: 8.4.32 1391 | postcss-selector-parser: 6.0.13 1392 | dev: false 1393 | 1394 | /postcss-selector-parser@6.0.13: 1395 | resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} 1396 | engines: {node: '>=4'} 1397 | dependencies: 1398 | cssesc: 3.0.0 1399 | util-deprecate: 1.0.2 1400 | dev: false 1401 | 1402 | /postcss-value-parser@4.2.0: 1403 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 1404 | dev: false 1405 | 1406 | /postcss@8.4.32: 1407 | resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} 1408 | engines: {node: ^10 || ^12 || >=14} 1409 | dependencies: 1410 | nanoid: 3.3.7 1411 | picocolors: 1.0.0 1412 | source-map-js: 1.0.2 1413 | 1414 | /pretty-format@29.7.0: 1415 | resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} 1416 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1417 | dependencies: 1418 | '@jest/schemas': 29.6.3 1419 | ansi-styles: 5.2.0 1420 | react-is: 18.2.0 1421 | dev: true 1422 | 1423 | /prop-types@15.8.1: 1424 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} 1425 | dependencies: 1426 | loose-envify: 1.4.0 1427 | object-assign: 4.1.1 1428 | react-is: 16.13.1 1429 | dev: false 1430 | 1431 | /punycode@2.3.1: 1432 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1433 | engines: {node: '>=6'} 1434 | dev: true 1435 | 1436 | /queue-microtask@1.2.3: 1437 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1438 | 1439 | /queue@6.0.2: 1440 | resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} 1441 | dependencies: 1442 | inherits: 2.0.4 1443 | dev: false 1444 | 1445 | /react-is@16.13.1: 1446 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 1447 | dev: false 1448 | 1449 | /react-is@18.2.0: 1450 | resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} 1451 | dev: true 1452 | 1453 | /react@18.2.0: 1454 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} 1455 | engines: {node: '>=0.10.0'} 1456 | dependencies: 1457 | loose-envify: 1.4.0 1458 | dev: false 1459 | 1460 | /read-cache@1.0.0: 1461 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 1462 | dependencies: 1463 | pify: 2.3.0 1464 | dev: false 1465 | 1466 | /readdirp@3.6.0: 1467 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1468 | engines: {node: '>=8.10.0'} 1469 | dependencies: 1470 | picomatch: 2.3.1 1471 | 1472 | /regenerator-runtime@0.14.1: 1473 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} 1474 | dev: false 1475 | 1476 | /resolve-from@5.0.0: 1477 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1478 | engines: {node: '>=8'} 1479 | dev: true 1480 | 1481 | /resolve@1.22.8: 1482 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 1483 | hasBin: true 1484 | dependencies: 1485 | is-core-module: 2.13.1 1486 | path-parse: 1.0.7 1487 | supports-preserve-symlinks-flag: 1.0.0 1488 | dev: false 1489 | 1490 | /restructure@3.0.0: 1491 | resolution: {integrity: sha512-Xj8/MEIhhfj9X2rmD9iJ4Gga9EFqVlpMj3vfLnV2r/Mh5jRMryNV+6lWh9GdJtDBcBSPIqzRdfBQ3wDtNFv/uw==} 1492 | dev: false 1493 | 1494 | /reusify@1.0.4: 1495 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1496 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1497 | 1498 | /rollup@4.9.1: 1499 | resolution: {integrity: sha512-pgPO9DWzLoW/vIhlSoDByCzcpX92bKEorbgXuZrqxByte3JFk2xSW2JEeAcyLc9Ru9pqcNNW+Ob7ntsk2oT/Xw==} 1500 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1501 | hasBin: true 1502 | optionalDependencies: 1503 | '@rollup/rollup-android-arm-eabi': 4.9.1 1504 | '@rollup/rollup-android-arm64': 4.9.1 1505 | '@rollup/rollup-darwin-arm64': 4.9.1 1506 | '@rollup/rollup-darwin-x64': 4.9.1 1507 | '@rollup/rollup-linux-arm-gnueabihf': 4.9.1 1508 | '@rollup/rollup-linux-arm64-gnu': 4.9.1 1509 | '@rollup/rollup-linux-arm64-musl': 4.9.1 1510 | '@rollup/rollup-linux-riscv64-gnu': 4.9.1 1511 | '@rollup/rollup-linux-x64-gnu': 4.9.1 1512 | '@rollup/rollup-linux-x64-musl': 4.9.1 1513 | '@rollup/rollup-win32-arm64-msvc': 4.9.1 1514 | '@rollup/rollup-win32-ia32-msvc': 4.9.1 1515 | '@rollup/rollup-win32-x64-msvc': 4.9.1 1516 | fsevents: 2.3.3 1517 | dev: true 1518 | 1519 | /run-parallel@1.2.0: 1520 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1521 | dependencies: 1522 | queue-microtask: 1.2.3 1523 | 1524 | /safe-buffer@5.2.1: 1525 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1526 | dev: false 1527 | 1528 | /scheduler@0.17.0: 1529 | resolution: {integrity: sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA==} 1530 | dependencies: 1531 | loose-envify: 1.4.0 1532 | object-assign: 4.1.1 1533 | dev: false 1534 | 1535 | /shebang-command@2.0.0: 1536 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1537 | engines: {node: '>=8'} 1538 | dependencies: 1539 | shebang-regex: 3.0.0 1540 | dev: true 1541 | 1542 | /shebang-regex@3.0.0: 1543 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1544 | engines: {node: '>=8'} 1545 | dev: true 1546 | 1547 | /siginfo@2.0.0: 1548 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 1549 | dev: true 1550 | 1551 | /signal-exit@3.0.7: 1552 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 1553 | dev: true 1554 | 1555 | /signal-exit@4.1.0: 1556 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1557 | engines: {node: '>=14'} 1558 | dev: true 1559 | 1560 | /simple-swizzle@0.2.2: 1561 | resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} 1562 | dependencies: 1563 | is-arrayish: 0.3.2 1564 | dev: false 1565 | 1566 | /slash@3.0.0: 1567 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1568 | engines: {node: '>=8'} 1569 | dev: true 1570 | 1571 | /source-map-js@1.0.2: 1572 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 1573 | engines: {node: '>=0.10.0'} 1574 | 1575 | /source-map@0.8.0-beta.0: 1576 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} 1577 | engines: {node: '>= 8'} 1578 | dependencies: 1579 | whatwg-url: 7.1.0 1580 | dev: true 1581 | 1582 | /stackback@0.0.2: 1583 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 1584 | dev: true 1585 | 1586 | /std-env@3.6.0: 1587 | resolution: {integrity: sha512-aFZ19IgVmhdB2uX599ve2kE6BIE3YMnQ6Gp6BURhW/oIzpXGKr878TQfAQZn1+i0Flcc/UKUy1gOlcfaUBCryg==} 1588 | dev: true 1589 | 1590 | /string_decoder@1.3.0: 1591 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 1592 | dependencies: 1593 | safe-buffer: 5.2.1 1594 | dev: false 1595 | 1596 | /strip-final-newline@2.0.0: 1597 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 1598 | engines: {node: '>=6'} 1599 | dev: true 1600 | 1601 | /strip-final-newline@3.0.0: 1602 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} 1603 | engines: {node: '>=12'} 1604 | dev: true 1605 | 1606 | /strip-literal@1.3.0: 1607 | resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} 1608 | dependencies: 1609 | acorn: 8.11.2 1610 | dev: true 1611 | 1612 | /sucrase@3.34.0: 1613 | resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} 1614 | engines: {node: '>=8'} 1615 | hasBin: true 1616 | dependencies: 1617 | '@jridgewell/gen-mapping': 0.3.3 1618 | commander: 4.1.1 1619 | glob: 7.1.6 1620 | lines-and-columns: 1.2.4 1621 | mz: 2.7.0 1622 | pirates: 4.0.6 1623 | ts-interface-checker: 0.1.13 1624 | 1625 | /supports-preserve-symlinks-flag@1.0.0: 1626 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1627 | engines: {node: '>= 0.4'} 1628 | dev: false 1629 | 1630 | /svg-arc-to-cubic-bezier@3.2.0: 1631 | resolution: {integrity: sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g==} 1632 | dev: false 1633 | 1634 | /tailwindcss@3.3.6: 1635 | resolution: {integrity: sha512-AKjF7qbbLvLaPieoKeTjG1+FyNZT6KaJMJPFeQyLfIp7l82ggH1fbHJSsYIvnbTFQOlkh+gBYpyby5GT1LIdLw==} 1636 | engines: {node: '>=14.0.0'} 1637 | hasBin: true 1638 | dependencies: 1639 | '@alloc/quick-lru': 5.2.0 1640 | arg: 5.0.2 1641 | chokidar: 3.5.3 1642 | didyoumean: 1.2.2 1643 | dlv: 1.1.3 1644 | fast-glob: 3.3.2 1645 | glob-parent: 6.0.2 1646 | is-glob: 4.0.3 1647 | jiti: 1.21.0 1648 | lilconfig: 2.1.0 1649 | micromatch: 4.0.5 1650 | normalize-path: 3.0.0 1651 | object-hash: 3.0.0 1652 | picocolors: 1.0.0 1653 | postcss: 8.4.32 1654 | postcss-import: 15.1.0(postcss@8.4.32) 1655 | postcss-js: 4.0.1(postcss@8.4.32) 1656 | postcss-load-config: 4.0.2(postcss@8.4.32) 1657 | postcss-nested: 6.0.1(postcss@8.4.32) 1658 | postcss-selector-parser: 6.0.13 1659 | resolve: 1.22.8 1660 | sucrase: 3.34.0 1661 | transitivePeerDependencies: 1662 | - ts-node 1663 | dev: false 1664 | 1665 | /thenify-all@1.6.0: 1666 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 1667 | engines: {node: '>=0.8'} 1668 | dependencies: 1669 | thenify: 3.3.1 1670 | 1671 | /thenify@3.3.1: 1672 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1673 | dependencies: 1674 | any-promise: 1.3.0 1675 | 1676 | /tiny-inflate@1.0.3: 1677 | resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} 1678 | dev: false 1679 | 1680 | /tinybench@2.5.1: 1681 | resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} 1682 | dev: true 1683 | 1684 | /tinypool@0.8.1: 1685 | resolution: {integrity: sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg==} 1686 | engines: {node: '>=14.0.0'} 1687 | dev: true 1688 | 1689 | /tinyspy@2.2.0: 1690 | resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} 1691 | engines: {node: '>=14.0.0'} 1692 | dev: true 1693 | 1694 | /to-regex-range@5.0.1: 1695 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1696 | engines: {node: '>=8.0'} 1697 | dependencies: 1698 | is-number: 7.0.0 1699 | 1700 | /tr46@0.0.3: 1701 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 1702 | dev: false 1703 | 1704 | /tr46@1.0.1: 1705 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} 1706 | dependencies: 1707 | punycode: 2.3.1 1708 | dev: true 1709 | 1710 | /tree-kill@1.2.2: 1711 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 1712 | hasBin: true 1713 | dev: true 1714 | 1715 | /ts-interface-checker@0.1.13: 1716 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 1717 | 1718 | /tslib@2.6.2: 1719 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 1720 | dev: false 1721 | 1722 | /tsup@8.0.1(postcss@8.4.32)(typescript@5.3.3): 1723 | resolution: {integrity: sha512-hvW7gUSG96j53ZTSlT4j/KL0q1Q2l6TqGBFc6/mu/L46IoNWqLLUzLRLP1R8Q7xrJTmkDxxDoojV5uCVs1sVOg==} 1724 | engines: {node: '>=18'} 1725 | hasBin: true 1726 | peerDependencies: 1727 | '@microsoft/api-extractor': ^7.36.0 1728 | '@swc/core': ^1 1729 | postcss: ^8.4.12 1730 | typescript: '>=4.5.0' 1731 | peerDependenciesMeta: 1732 | '@microsoft/api-extractor': 1733 | optional: true 1734 | '@swc/core': 1735 | optional: true 1736 | postcss: 1737 | optional: true 1738 | typescript: 1739 | optional: true 1740 | dependencies: 1741 | bundle-require: 4.0.2(esbuild@0.19.9) 1742 | cac: 6.7.14 1743 | chokidar: 3.5.3 1744 | debug: 4.3.4 1745 | esbuild: 0.19.9 1746 | execa: 5.1.1 1747 | globby: 11.1.0 1748 | joycon: 3.1.1 1749 | postcss: 8.4.32 1750 | postcss-load-config: 4.0.2(postcss@8.4.32) 1751 | resolve-from: 5.0.0 1752 | rollup: 4.9.1 1753 | source-map: 0.8.0-beta.0 1754 | sucrase: 3.34.0 1755 | tree-kill: 1.2.2 1756 | typescript: 5.3.3 1757 | transitivePeerDependencies: 1758 | - supports-color 1759 | - ts-node 1760 | dev: true 1761 | 1762 | /type-detect@4.0.8: 1763 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 1764 | engines: {node: '>=4'} 1765 | dev: true 1766 | 1767 | /typescript@5.3.3: 1768 | resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} 1769 | engines: {node: '>=14.17'} 1770 | hasBin: true 1771 | dev: true 1772 | 1773 | /ufo@1.3.2: 1774 | resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} 1775 | dev: true 1776 | 1777 | /undici-types@5.26.5: 1778 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 1779 | dev: true 1780 | 1781 | /unicode-properties@1.4.1: 1782 | resolution: {integrity: sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==} 1783 | dependencies: 1784 | base64-js: 1.5.1 1785 | unicode-trie: 2.0.0 1786 | dev: false 1787 | 1788 | /unicode-trie@2.0.0: 1789 | resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} 1790 | dependencies: 1791 | pako: 0.2.9 1792 | tiny-inflate: 1.0.3 1793 | dev: false 1794 | 1795 | /util-deprecate@1.0.2: 1796 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1797 | dev: false 1798 | 1799 | /vite-compatible-readable-stream@3.6.1: 1800 | resolution: {integrity: sha512-t20zYkrSf868+j/p31cRIGN28Phrjm3nRSLR2fyc2tiWi4cZGVdv68yNlwnIINTkMTmPoMiSlc0OadaO7DXZaQ==} 1801 | engines: {node: '>= 6'} 1802 | dependencies: 1803 | inherits: 2.0.4 1804 | string_decoder: 1.3.0 1805 | util-deprecate: 1.0.2 1806 | dev: false 1807 | 1808 | /vite-node@1.0.4(@types/node@20.10.4): 1809 | resolution: {integrity: sha512-9xQQtHdsz5Qn8hqbV7UKqkm8YkJhzT/zr41Dmt5N7AlD8hJXw/Z7y0QiD5I8lnTthV9Rvcvi0QW7PI0Fq83ZPg==} 1810 | engines: {node: ^18.0.0 || >=20.0.0} 1811 | hasBin: true 1812 | dependencies: 1813 | cac: 6.7.14 1814 | debug: 4.3.4 1815 | pathe: 1.1.1 1816 | picocolors: 1.0.0 1817 | vite: 5.0.10(@types/node@20.10.4) 1818 | transitivePeerDependencies: 1819 | - '@types/node' 1820 | - less 1821 | - lightningcss 1822 | - sass 1823 | - stylus 1824 | - sugarss 1825 | - supports-color 1826 | - terser 1827 | dev: true 1828 | 1829 | /vite@5.0.10(@types/node@20.10.4): 1830 | resolution: {integrity: sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==} 1831 | engines: {node: ^18.0.0 || >=20.0.0} 1832 | hasBin: true 1833 | peerDependencies: 1834 | '@types/node': ^18.0.0 || >=20.0.0 1835 | less: '*' 1836 | lightningcss: ^1.21.0 1837 | sass: '*' 1838 | stylus: '*' 1839 | sugarss: '*' 1840 | terser: ^5.4.0 1841 | peerDependenciesMeta: 1842 | '@types/node': 1843 | optional: true 1844 | less: 1845 | optional: true 1846 | lightningcss: 1847 | optional: true 1848 | sass: 1849 | optional: true 1850 | stylus: 1851 | optional: true 1852 | sugarss: 1853 | optional: true 1854 | terser: 1855 | optional: true 1856 | dependencies: 1857 | '@types/node': 20.10.4 1858 | esbuild: 0.19.9 1859 | postcss: 8.4.32 1860 | rollup: 4.9.1 1861 | optionalDependencies: 1862 | fsevents: 2.3.3 1863 | dev: true 1864 | 1865 | /vitest@1.0.4(@types/node@20.10.4): 1866 | resolution: {integrity: sha512-s1GQHp/UOeWEo4+aXDOeFBJwFzL6mjycbQwwKWX2QcYfh/7tIerS59hWQ20mxzupTJluA2SdwiBuWwQHH67ckg==} 1867 | engines: {node: ^18.0.0 || >=20.0.0} 1868 | hasBin: true 1869 | peerDependencies: 1870 | '@edge-runtime/vm': '*' 1871 | '@types/node': ^18.0.0 || >=20.0.0 1872 | '@vitest/browser': ^1.0.0 1873 | '@vitest/ui': ^1.0.0 1874 | happy-dom: '*' 1875 | jsdom: '*' 1876 | peerDependenciesMeta: 1877 | '@edge-runtime/vm': 1878 | optional: true 1879 | '@types/node': 1880 | optional: true 1881 | '@vitest/browser': 1882 | optional: true 1883 | '@vitest/ui': 1884 | optional: true 1885 | happy-dom: 1886 | optional: true 1887 | jsdom: 1888 | optional: true 1889 | dependencies: 1890 | '@types/node': 20.10.4 1891 | '@vitest/expect': 1.0.4 1892 | '@vitest/runner': 1.0.4 1893 | '@vitest/snapshot': 1.0.4 1894 | '@vitest/spy': 1.0.4 1895 | '@vitest/utils': 1.0.4 1896 | acorn-walk: 8.3.1 1897 | cac: 6.7.14 1898 | chai: 4.3.10 1899 | debug: 4.3.4 1900 | execa: 8.0.1 1901 | local-pkg: 0.5.0 1902 | magic-string: 0.30.5 1903 | pathe: 1.1.1 1904 | picocolors: 1.0.0 1905 | std-env: 3.6.0 1906 | strip-literal: 1.3.0 1907 | tinybench: 2.5.1 1908 | tinypool: 0.8.1 1909 | vite: 5.0.10(@types/node@20.10.4) 1910 | vite-node: 1.0.4(@types/node@20.10.4) 1911 | why-is-node-running: 2.2.2 1912 | transitivePeerDependencies: 1913 | - less 1914 | - lightningcss 1915 | - sass 1916 | - stylus 1917 | - sugarss 1918 | - supports-color 1919 | - terser 1920 | dev: true 1921 | 1922 | /webidl-conversions@3.0.1: 1923 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 1924 | dev: false 1925 | 1926 | /webidl-conversions@4.0.2: 1927 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 1928 | dev: true 1929 | 1930 | /whatwg-url@5.0.0: 1931 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 1932 | dependencies: 1933 | tr46: 0.0.3 1934 | webidl-conversions: 3.0.1 1935 | dev: false 1936 | 1937 | /whatwg-url@7.1.0: 1938 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} 1939 | dependencies: 1940 | lodash.sortby: 4.7.0 1941 | tr46: 1.0.1 1942 | webidl-conversions: 4.0.2 1943 | dev: true 1944 | 1945 | /which@2.0.2: 1946 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1947 | engines: {node: '>= 8'} 1948 | hasBin: true 1949 | dependencies: 1950 | isexe: 2.0.0 1951 | dev: true 1952 | 1953 | /why-is-node-running@2.2.2: 1954 | resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} 1955 | engines: {node: '>=8'} 1956 | hasBin: true 1957 | dependencies: 1958 | siginfo: 2.0.0 1959 | stackback: 0.0.2 1960 | dev: true 1961 | 1962 | /wrappy@1.0.2: 1963 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1964 | 1965 | /yaml@2.3.4: 1966 | resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} 1967 | engines: {node: '>= 14'} 1968 | 1969 | /yocto-queue@1.0.0: 1970 | resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} 1971 | engines: {node: '>=12.20'} 1972 | dev: true 1973 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # React PDF Tailwind 2 | 3 | Use Tailwind CSS to style PDFs created with [react-pdf](https://github.com/diegomura/react-pdf). 4 | 5 | [Try it yourself](https://react-pdf-repl.vercel.app/?cp_code=JYWwDg9gTgLgBAbzgEQgYwK4gKYDsYA0cACgIYDm2RAKtgB6FwBqw2A7nAL5wBmUEIOACIAAlGyk0MALRgAJjwD043HOzioQgNwAoUJFiI4acaRjZqHbnwHDTU2QukxSwADZtgq7Tp1oIuADO8DAcALzGpuaWABQIOnBwMAAW2DgAXIgJiXD05qqZ8Tk5_m7QgYXZxYmYwQKZQv5QuDxlbOoARm4Y2EIEVTmc_cVD2aOcAJS6OvQG8Go8pBhu8DwYuFLAAXAAgmBgMRNZieIwGM1wMQMAPKiYOPgAfAOJ12SUcIHAAF7YYUI7AAsQk-MAAnm4_ghQjEhGBpIDeJC6Ej6NJ-BxWmi2FBSGA4OQ8QihBNOM9qjkEABtAB0dJ2UFxYJiAEYAEwTAC6NJAeJiMQA-kRgEcwo9Li9qtcWOxJRSANbYMFhBDAThy6rBCFQmFCLF0aQsuAgLzSNjSKlsgAMVrAME5cHhiP10lKcA65GkXR6hptJPVFIpOLxKsWbkC2ADgcS5OjOWutAYoO1Kt15gY0jZdDcvACMg6EDcciSeVdGDqIH9sbjOQAythNttVXAANRwFlRmvXRSJmDVuMJvLJyGptiw9MyQKV0n9msAGWgaTgwDAgSwcDkhegn2A8FIOEY_iCDfMZygcFIchXwECaC85Fybl3NLgADllm5SBqKRHwOpcjwPDAHeZ5wE-HTqBAy64GBpCLtgMAvvWxbAJIyw3kQvLkLgpCfOWd5gLu37VGAn5oOoZjGAIIAQJuRBQDe5ZJOchGBEkXh3nI6zwE-5DLKQRCSLkGA3jRxYAFbljAEDEcUv7LsWDFroEL7vm4n6CNgIlTrRcAAG7YMEwAdMs66QhAmGFk-bG8nQoBMYEeKsLgsk5N0UhMV4L4sHp-5MbykJrpeuF6csYAYC45hwNAOHiC-ACySxKXAEUXmg9yOS5NbFDw2DWd5wC-SATF4KAKXNAJKUrAx5FsVpuT8GxkhEB0xl4FxggGckwH8a5iSQSpJC4oZeDwCua6CNAd6WYFMCsASuJ6cAci4TASlzQAjj0F6MCthEmYEfX6bupDYLkwQvsQySkBG6lMZCHlsbgH6VUeEZbZR9UmiljDmOA5ZHeFbhLbFcC4NgW3YDSrndr2s5SooMpsPDiQTKSkrdu82D9t2dxYKNsZTDo6pAA&modules=true) in the `react-pdf-repl` interactive playground. 6 | 7 | ## Example 8 | 9 | ```jsx 10 | import { Document, Page, Text, View, StyleSheet } from "@react-pdf/renderer"; 11 | import { createTw } from "react-pdf-tailwind"; 12 | 13 | // The 'theme' object is your Tailwind theme config 14 | const tw = createTw({ 15 | theme: { 16 | fontFamily: { 17 | sans: ["Comic Sans"], 18 | }, 19 | extend: { 20 | colors: { 21 | custom: "#bada55", 22 | }, 23 | }, 24 | }, 25 | }); 26 | 27 | export default function MyPdf() { 28 | return ( 29 | 30 | 31 | 32 | Section #1 33 | 34 | 35 | Section #2 36 | 37 | 38 | 39 | ); 40 | } 41 | ``` 42 | 43 | More detailed examples can be found in the [examples](https://github.com/aanckar/react-pdf-tailwind/tree/main/examples) folder. 44 | 45 | ## Installation 46 | 47 | ```js 48 | // Or pnpm, yarn... 49 | npm install react-pdf-tailwind 50 | ``` 51 | 52 | ## Usage 53 | 54 | The `createTw` function takes two arguments: the first is a Tailwind config object (which currently only looks at the `theme` settings), and the second is an optional options object with the following defaults: 55 | 56 | ```js 57 | const tw = createTw( 58 | // Tailwind config 59 | { 60 | theme: ... 61 | }, 62 | // Additional options 63 | { 64 | // Set the base font size in points (see note below regarding units) 65 | ptPerRem: 12, 66 | } 67 | ); 68 | ``` 69 | 70 | ## Notes 71 | 72 | - Supports most of the CSS properties that make sense in a PDF context, and are supported by `react-pdf` (see [this list](https://react-pdf.org/styling#valid-css-properties)) 73 | - Default font family classes are excluded, since you have to [include your own fonts anyway](https://react-pdf.org/fonts) 74 | - Internally uses `pt` as the default unit (supported units can be found [here](https://react-pdf.org/styling#valid-units)), using the default convention `1rem = 12pt` (this can be changed in the options) 75 | - Since `react-pdf` uses [Yoga](https://yogalayout.com/) internally, some defaults differ from the web standard (for example, `flex-direction` defaults to `column`, which can be fixed by adding the `flex-row` class where needed) 76 | - Modifiers like breakpoints (which could technically make sense) aren't supported yet 77 | -------------------------------------------------------------------------------- /src/index.test.ts: -------------------------------------------------------------------------------- 1 | import { createTw } from "."; 2 | import { px, rem } from "./utils"; 3 | import { describe, test, expect } from "vitest"; 4 | 5 | const colors = [ 6 | ["inherit", "inherit"], 7 | ["current", "currentColor"], 8 | ["transparent", "transparent"], 9 | ["black", "#000"], 10 | ["white", "#fff"], 11 | ["gray-500", "#6b7280"], 12 | ["badass", "#bada55"], 13 | ["[#bada55]", "#bada55"], 14 | ["[rgb(69,69,69)]", "rgb(69,69,69)"], 15 | ["[hsl(69,69,69)]", "hsl(69,69,69)"], 16 | ]; 17 | 18 | const customSpacing = [ 19 | ["[6.9rem]", rem(6.9)], 20 | ["[69]", 69], 21 | ]; 22 | 23 | const spacing = [ 24 | ["0", 0], 25 | ["px", 1], 26 | ["0.5", rem(0.125)], 27 | ["1", rem(0.25)], 28 | ["96", rem(24)], 29 | ["420", rem(69)], 30 | ...customSpacing, 31 | ]; 32 | 33 | const inset = [ 34 | ["auto", "auto"], 35 | ["1/2", "50%"], 36 | ["1/3", "33.333333%"], 37 | ["2/3", "66.666667%"], 38 | ["1/4", "25%"], 39 | ["2/4", "50%"], 40 | ["3/4", "75%"], 41 | ["full", "100%"], 42 | ...spacing, 43 | ]; 44 | 45 | const width = [ 46 | ["auto", "auto"], 47 | ["1/2", "50%"], 48 | ["1/3", "33.333333%"], 49 | ["2/3", "66.666667%"], 50 | ["1/4", "25%"], 51 | ["2/4", "50%"], 52 | ["3/4", "75%"], 53 | ["1/5", "20%"], 54 | ["2/5", "40%"], 55 | ["3/5", "60%"], 56 | ["4/5", "80%"], 57 | ["1/6", "16.666667%"], 58 | ["2/6", "33.333333%"], 59 | ["3/6", "50%"], 60 | ["4/6", "66.666667%"], 61 | ["5/6", "83.333333%"], 62 | ["1/12", "8.333333%"], 63 | ["2/12", "16.666667%"], 64 | ["3/12", "25%"], 65 | ["4/12", "33.333333%"], 66 | ["5/12", "41.666667%"], 67 | ["6/12", "50%"], 68 | ["7/12", "58.333333%"], 69 | ["8/12", "66.666667%"], 70 | ["9/12", "75%"], 71 | ["10/12", "83.333333%"], 72 | ["11/12", "91.666667%"], 73 | ...spacing, 74 | ]; 75 | 76 | const extendedWidth = [...width, ["full", "100%"], ["screen", "100vw"]]; 77 | 78 | const height = [ 79 | ["auto", "auto"], 80 | ["1/2", "50%"], 81 | ["1/3", "33.333333%"], 82 | ["2/3", "66.666667%"], 83 | ["1/4", "25%"], 84 | ["2/4", "50%"], 85 | ["3/4", "75%"], 86 | ["1/5", "20%"], 87 | ["2/5", "40%"], 88 | ["3/5", "60%"], 89 | ["4/5", "80%"], 90 | ["1/6", "16.666667%"], 91 | ["2/6", "33.333333%"], 92 | ["3/6", "50%"], 93 | ["4/6", "66.666667%"], 94 | ["5/6", "83.333333%"], 95 | ["full", "100%"], 96 | ["screen", "100vh"], 97 | ...spacing, 98 | ]; 99 | 100 | const tw = createTw({ 101 | theme: { 102 | fontFamily: { 103 | sans: ["Papyrus", "ignored"], 104 | nice: ["Comic Sans"], 105 | }, 106 | extend: { 107 | spacing: { 108 | "420": "69rem", 109 | }, 110 | colors: { 111 | badass: "#bada55", 112 | }, 113 | }, 114 | }, 115 | }); 116 | 117 | const customPtPerRem = 16; 118 | 119 | const twWithCustomPtPerRem = createTw({}, {ptPerRem: customPtPerRem}); 120 | 121 | describe("Layout", () => { 122 | describe("display", () => { 123 | test.each([ 124 | ["flex", "flex"], 125 | ["hidden", "none"], 126 | ])("%s", (key, value) => { 127 | expect(tw(key)).toEqual({ 128 | display: value, 129 | }); 130 | }); 131 | }); 132 | 133 | describe("object-fit", () => { 134 | test.each([["contain"], ["cover"], ["fill"], ["none"], ["scale-down"]])( 135 | "%s", 136 | (value) => { 137 | expect(tw(`object-${value}`)).toEqual({ 138 | objectFit: value, 139 | }); 140 | } 141 | ); 142 | }); 143 | 144 | describe("object-position", () => { 145 | test.each([ 146 | ["bottom", "bottom"], 147 | ["center", "center"], 148 | ["left", "left"], 149 | ["left-bottom", "left bottom"], 150 | ["left-top", "left top"], 151 | ["right", "right"], 152 | ["right-bottom", "right bottom"], 153 | ["right-top", "right top"], 154 | ["top", "top"], 155 | ["[69%_69%]", "69% 69%"], 156 | ])("%s", (key, value) => { 157 | expect(tw(`object-${key}`)).toEqual({ 158 | objectPosition: value, 159 | }); 160 | }); 161 | }); 162 | 163 | describe("overflow", () => { 164 | test.each([["hidden", { overflow: "hidden" }]])("%s", (key, rule) => { 165 | expect(tw(`overflow-${key}`)).toEqual(rule); 166 | }); 167 | }); 168 | 169 | describe("position", () => { 170 | test.each([["absolute"], ["relative"]])("%s", (value) => { 171 | expect(tw(value)).toEqual({ 172 | position: value, 173 | }); 174 | }); 175 | }); 176 | 177 | describe("top / right / bottom / left", () => { 178 | describe("inset", () => { 179 | test.each(inset)("%s", (key, value) => { 180 | expect(tw(`inset-${key}`)).toEqual({ 181 | top: value, 182 | right: value, 183 | bottom: value, 184 | left: value, 185 | }); 186 | }); 187 | }); 188 | 189 | describe("inset-x", () => { 190 | test.each(inset)("%s", (key, value) => { 191 | expect(tw(`inset-x-${key}`)).toEqual({ 192 | left: value, 193 | right: value, 194 | }); 195 | }); 196 | }); 197 | 198 | describe("inset-y", () => { 199 | test.each(inset)("%s", (key, value) => { 200 | expect(tw(`inset-y-${key}`)).toEqual({ 201 | top: value, 202 | bottom: value, 203 | }); 204 | }); 205 | }); 206 | 207 | describe("top", () => { 208 | test.each(inset)("%s", (key, value) => { 209 | expect(tw(`top-${key}`)).toEqual({ 210 | top: value, 211 | }); 212 | }); 213 | }); 214 | 215 | describe("right", () => { 216 | test.each(inset)("%s", (key, value) => { 217 | expect(tw(`right-${key}`)).toEqual({ 218 | right: value, 219 | }); 220 | }); 221 | }); 222 | 223 | describe("bottom", () => { 224 | test.each(inset)("%s", (key, value) => { 225 | expect(tw(`bottom-${key}`)).toEqual({ 226 | bottom: value, 227 | }); 228 | }); 229 | }); 230 | 231 | describe("left", () => { 232 | test.each(inset)("%s", (key, value) => { 233 | expect(tw(`left-${key}`)).toEqual({ 234 | left: value, 235 | }); 236 | }); 237 | }); 238 | }); 239 | 240 | describe("z-index", () => { 241 | test.each([ 242 | ["0", 0], 243 | ["10", 10], 244 | ["20", 20], 245 | ["30", 30], 246 | ["40", 40], 247 | ["50", 50], 248 | ["auto", "auto"], 249 | ...customSpacing, 250 | ])("%s", (key, value) => { 251 | expect(tw(`z-${key}`)).toEqual({ 252 | zIndex: value, 253 | }); 254 | }); 255 | }); 256 | }); 257 | 258 | describe("Flexbox", () => { 259 | describe("flex-basis", () => { 260 | test.each(width)("%s", (key, value) => { 261 | expect(tw(`basis-${key}`)).toEqual({ 262 | flexBasis: value, 263 | }); 264 | }); 265 | }); 266 | 267 | describe("flex-direction", () => { 268 | test.each([ 269 | ["row", "row"], 270 | ["row-reverse", "row-reverse"], 271 | ["col", "column"], 272 | ["col-reverse", "column-reverse"], 273 | ])("%s", (key, value) => { 274 | expect(tw(`flex-${key}`)).toEqual({ 275 | flexDirection: value, 276 | }); 277 | }); 278 | }); 279 | 280 | describe("flex-wrap", () => { 281 | test.each([["wrap"], ["wrap-reverse"], ["nowrap"]])("%s", (value) => { 282 | expect(tw(`flex-${value}`)).toEqual({ 283 | flexWrap: value, 284 | }); 285 | }); 286 | }); 287 | 288 | describe("flex", () => { 289 | test.each([ 290 | ["1", "1 1 0%"], 291 | ["auto", "1 1 auto"], 292 | ["initial", "0 1 auto"], 293 | ["none", "none"], 294 | ["[2_2_0%]", "2 2 0%"], 295 | ])("%s", (key, value) => { 296 | expect(tw(`flex-${key}`)).toEqual({ 297 | flex: value, 298 | }); 299 | }); 300 | }); 301 | 302 | describe("gap", () => { 303 | describe("gap", () => { 304 | test.each(spacing)("%s", (key, value) => { 305 | expect(tw(`gap-${key}`)).toEqual({ 306 | gap: value, 307 | }); 308 | }); 309 | }); 310 | 311 | describe("gap-x", () => { 312 | test.each(spacing)("%s", (key, value) => { 313 | expect(tw(`gap-x-${key}`)).toEqual({ 314 | columnGap: value, 315 | }); 316 | }); 317 | }); 318 | 319 | describe("gap-y", () => { 320 | test.each(spacing)("%s", (key, value) => { 321 | expect(tw(`gap-y-${key}`)).toEqual({ 322 | rowGap: value, 323 | }); 324 | }); 325 | }); 326 | }); 327 | 328 | describe("flex-grow", () => { 329 | test.each([ 330 | ["grow", 1], 331 | ["grow-0", 0], 332 | ["grow-[2]", 2], 333 | ])("%s", (key, value) => { 334 | expect(tw(key)).toEqual({ 335 | flexGrow: value, 336 | }); 337 | }); 338 | }); 339 | 340 | describe("flex-shrink", () => { 341 | test.each([ 342 | ["shrink", 1], 343 | ["shrink-0", 0], 344 | ["shrink-[2]", 2], 345 | ])("%s", (key, value) => { 346 | expect(tw(key)).toEqual({ 347 | flexShrink: value, 348 | }); 349 | }); 350 | }); 351 | 352 | describe("order", () => { 353 | test.each([ 354 | ["1", 1], 355 | ["2", 2], 356 | ["3", 3], 357 | ["4", 4], 358 | ["5", 5], 359 | ["6", 6], 360 | ["7", 7], 361 | ["8", 8], 362 | ["9", 9], 363 | ["10", 10], 364 | ["11", 11], 365 | ["12", 12], 366 | ["first", -9999], 367 | ["last", 9999], 368 | ["none", 0], 369 | ])("%s", (key, value) => { 370 | expect(tw(`order-${key}`)).toEqual({ 371 | order: value, 372 | }); 373 | }); 374 | }); 375 | 376 | describe("justify-content", () => { 377 | test.each([ 378 | ["start", "flex-start"], 379 | ["end", "flex-end"], 380 | ["center", "center"], 381 | ["between", "space-between"], 382 | ["around", "space-around"], 383 | ["evenly", "space-evenly"], 384 | ])("%s", (key, value) => { 385 | expect(tw(`justify-${key}`)).toEqual({ 386 | justifyContent: value, 387 | }); 388 | }); 389 | }); 390 | 391 | describe("align-content", () => { 392 | test.each([ 393 | ["start", "flex-start"], 394 | ["end", "flex-end"], 395 | ["center", "center"], 396 | ["between", "space-between"], 397 | ["around", "space-around"], 398 | ])("%s", (key, value) => { 399 | expect(tw(`content-${key}`)).toEqual({ 400 | alignContent: value, 401 | }); 402 | }); 403 | }); 404 | 405 | describe("align-items", () => { 406 | test.each([ 407 | ["start", "flex-start"], 408 | ["end", "flex-end"], 409 | ["center", "center"], 410 | ["baseline", "baseline"], 411 | ["stretch", "stretch"], 412 | ])("%s", (key, value) => { 413 | expect(tw(`items-${key}`)).toEqual({ 414 | alignItems: value, 415 | }); 416 | }); 417 | }); 418 | 419 | describe("align-self", () => { 420 | test.each([ 421 | ["auto", "auto"], 422 | ["start", "flex-start"], 423 | ["end", "flex-end"], 424 | ["center", "center"], 425 | ["baseline", "baseline"], 426 | ["stretch", "stretch"], 427 | ])("%s", (key, value) => { 428 | expect(tw(`self-${key}`)).toEqual({ 429 | alignSelf: value, 430 | }); 431 | }); 432 | }); 433 | }); 434 | 435 | describe("Spacing", () => { 436 | describe("padding", () => { 437 | describe("padding", () => { 438 | test.each(spacing)("%s", (key, value) => { 439 | expect(tw(`p-${key}`)).toEqual({ 440 | padding: value, 441 | }); 442 | }); 443 | }); 444 | 445 | describe("padding-x", () => { 446 | test.each(spacing)("%s", (key, value) => { 447 | expect(tw(`px-${key}`)).toEqual({ 448 | paddingLeft: value, 449 | paddingRight: value, 450 | }); 451 | }); 452 | }); 453 | 454 | describe("padding-y", () => { 455 | test.each(spacing)("%s", (key, value) => { 456 | expect(tw(`py-${key}`)).toEqual({ 457 | paddingTop: value, 458 | paddingBottom: value, 459 | }); 460 | }); 461 | }); 462 | 463 | describe("padding-top", () => { 464 | test.each(spacing)("%s", (key, value) => { 465 | expect(tw(`pt-${key}`)).toEqual({ 466 | paddingTop: value, 467 | }); 468 | }); 469 | }); 470 | 471 | describe("padding-right", () => { 472 | test.each(spacing)("%s", (key, value) => { 473 | expect(tw(`pr-${key}`)).toEqual({ 474 | paddingRight: value, 475 | }); 476 | }); 477 | }); 478 | 479 | describe("padding-bottom", () => { 480 | test.each(spacing)("%s", (key, value) => { 481 | expect(tw(`pb-${key}`)).toEqual({ 482 | paddingBottom: value, 483 | }); 484 | }); 485 | }); 486 | 487 | describe("padding-left", () => { 488 | test.each(spacing)("%s", (key, value) => { 489 | expect(tw(`pl-${key}`)).toEqual({ 490 | paddingLeft: value, 491 | }); 492 | }); 493 | }); 494 | }); 495 | 496 | describe("margin", () => { 497 | describe("margin", () => { 498 | test.each(spacing)("%s", (key, value) => { 499 | expect(tw(`m-${key}`)).toEqual({ 500 | margin: value, 501 | }); 502 | }); 503 | }); 504 | 505 | describe("margin-x", () => { 506 | test.each(spacing)("%s", (key, value) => { 507 | expect(tw(`mx-${key}`)).toEqual({ 508 | marginLeft: value, 509 | marginRight: value, 510 | }); 511 | }); 512 | }); 513 | 514 | describe("margin-y", () => { 515 | test.each(spacing)("%s", (key, value) => { 516 | expect(tw(`my-${key}`)).toEqual({ 517 | marginTop: value, 518 | marginBottom: value, 519 | }); 520 | }); 521 | }); 522 | 523 | describe("margin-top", () => { 524 | test.each(spacing)("%s", (key, value) => { 525 | expect(tw(`mt-${key}`)).toEqual({ 526 | marginTop: value, 527 | }); 528 | }); 529 | }); 530 | 531 | describe("margin-right", () => { 532 | test.each(spacing)("%s", (key, value) => { 533 | expect(tw(`mr-${key}`)).toEqual({ 534 | marginRight: value, 535 | }); 536 | }); 537 | }); 538 | 539 | describe("margin-bottom", () => { 540 | test.each(spacing)("%s", (key, value) => { 541 | expect(tw(`mb-${key}`)).toEqual({ 542 | marginBottom: value, 543 | }); 544 | }); 545 | }); 546 | 547 | describe("margin-left", () => { 548 | test.each(spacing)("%s", (key, value) => { 549 | expect(tw(`ml-${key}`)).toEqual({ 550 | marginLeft: value, 551 | }); 552 | }); 553 | }); 554 | }); 555 | }); 556 | 557 | describe("Sizing", () => { 558 | describe("width", () => { 559 | test.each(extendedWidth)("%s", (key, value) => { 560 | expect(tw(`w-${key}`)).toEqual({ 561 | width: value, 562 | }); 563 | }); 564 | }); 565 | 566 | describe("min-width", () => { 567 | test.each([ 568 | ["0", 0], 569 | ["full", "100%"], 570 | ["[69rem]", rem(69)], 571 | ])("%s", (key, value) => { 572 | expect(tw(`min-w-${key}`)).toEqual({ 573 | minWidth: value, 574 | }); 575 | }); 576 | }); 577 | 578 | describe("max-width", () => { 579 | test.each([ 580 | ["0", 0], 581 | ["full", "100%"], 582 | ["[69rem]", rem(69)], 583 | ])("%s", (key, value) => { 584 | expect(tw(`max-w-${key}`)).toEqual({ 585 | maxWidth: value, 586 | }); 587 | }); 588 | }); 589 | 590 | describe("height", () => { 591 | test.each(height)("%s", (key, value) => { 592 | expect(tw(`h-${key}`)).toEqual({ 593 | height: value, 594 | }); 595 | }); 596 | }); 597 | 598 | describe("min-height", () => { 599 | test.each([ 600 | ["0", 0], 601 | ["full", "100%"], 602 | ["[69rem]", rem(69)], 603 | ])("%s", (key, value) => { 604 | expect(tw(`min-h-${key}`)).toEqual({ 605 | minHeight: value, 606 | }); 607 | }); 608 | }); 609 | 610 | describe("max-height", () => { 611 | test.each([ 612 | ["0", 0], 613 | ["full", "100%"], 614 | ["[69rem]", rem(69)], 615 | ])("%s", (key, value) => { 616 | expect(tw(`max-h-${key}`)).toEqual({ 617 | maxHeight: value, 618 | }); 619 | }); 620 | }); 621 | }); 622 | 623 | describe("Typography", () => { 624 | test("font-family", () => { 625 | expect(tw("font-sans")).toEqual({ 626 | fontFamily: "Papyrus", 627 | }); 628 | expect(tw("font-nice")).toEqual({ 629 | fontFamily: "Comic Sans", 630 | }); 631 | expect(tw("font-[Comic_Sans]")).toEqual({ 632 | fontFamily: "Comic Sans", 633 | }); 634 | }); 635 | 636 | describe("font-size", () => { 637 | test.each([ 638 | ["xs", [rem(0.75), 1]], 639 | ["sm", [rem(0.875), 1.25]], 640 | ["base", [rem(1), 1.5]], 641 | ["lg", [rem(1.125), 1.75]], 642 | ["xl", [rem(1.25), 1.75]], 643 | ["2xl", [rem(1.5), 2]], 644 | ["3xl", [rem(1.875), 2.25]], 645 | ["4xl", [rem(2.25), 2.5]], 646 | ["5xl", [rem(3), 1]], 647 | ["6xl", [rem(3.75), 1]], 648 | ["7xl", [rem(4.5), 1]], 649 | ["8xl", [rem(6), 1]], 650 | ["9xl", [rem(8), 1]], 651 | ["[69rem]", [rem(69)]], 652 | ])("%s", (key, [fontSize, lineHeight]) => { 653 | expect(tw(`text-${key}`)).toEqual({ 654 | fontSize, 655 | ...(lineHeight ? { lineHeight } : null), 656 | }); 657 | }); 658 | }); 659 | 660 | describe("custom font-size", () => { 661 | test.each([ 662 | ["xs", [rem(0.75, customPtPerRem), 1]], 663 | ["sm", [rem(0.875, customPtPerRem), 1.25]], 664 | ["base", [rem(1, customPtPerRem), 1.5]], 665 | ["lg", [rem(1.125, customPtPerRem), 1.75]], 666 | ["xl", [rem(1.25, customPtPerRem), 1.75]], 667 | ["2xl", [rem(1.5, customPtPerRem), 2]], 668 | ["3xl", [rem(1.875, customPtPerRem), 2.25]], 669 | ["4xl", [rem(2.25, customPtPerRem), 2.5]], 670 | ["5xl", [rem(3, customPtPerRem), 1]], 671 | ["6xl", [rem(3.75, customPtPerRem), 1]], 672 | ["7xl", [rem(4.5, customPtPerRem), 1]], 673 | ["8xl", [rem(6, customPtPerRem), 1]], 674 | ["9xl", [rem(8, customPtPerRem), 1]], 675 | ["[69rem]", [rem(69, customPtPerRem)]], 676 | ])("%s", (key, [fontSize, lineHeight]) => { 677 | expect(twWithCustomPtPerRem(`text-${key}`)).toEqual({ 678 | fontSize, 679 | ...(lineHeight ? { lineHeight } : null), 680 | }); 681 | }); 682 | }); 683 | 684 | describe("font-style", () => { 685 | test.each([ 686 | ["italic", "italic"], 687 | ["not-italic", "normal"], 688 | ])("%s", (key, value) => { 689 | expect(tw(key)).toEqual({ 690 | fontStyle: value, 691 | }); 692 | }); 693 | }); 694 | 695 | describe("font-weight", () => { 696 | test.each([ 697 | ["thin", 100], 698 | ["extralight", 200], 699 | ["light", 300], 700 | ["normal", 400], 701 | ["medium", 500], 702 | ["semibold", 600], 703 | ["bold", 700], 704 | ["extrabold", 800], 705 | ["black", 900], 706 | ])("%s", (key, value) => { 707 | expect(tw(`font-${key}`)).toEqual({ 708 | fontWeight: value, 709 | }); 710 | }); 711 | }); 712 | 713 | describe("letter-spacing", () => { 714 | test.each([ 715 | ["tighter", -0.05], 716 | ["tight", -0.025], 717 | ["normal", 0], 718 | ["wide", 0.025], 719 | ["wider", 0.05], 720 | ["widest", 0.1], 721 | ])("%s", (key, value) => { 722 | expect(tw(`tracking-${key}`)).toEqual({ 723 | letterSpacing: rem(value), 724 | }); 725 | }); 726 | }); 727 | 728 | describe("line-height", () => { 729 | test.each([ 730 | ["none", 1], 731 | ["tight", 1.25], 732 | ["snug", 1.375], 733 | ["normal", 1.5], 734 | ["relaxed", 1.625], 735 | ["loose", 2], 736 | ["3", 0.75], 737 | ["4", 1], 738 | ["5", 1.25], 739 | ["6", 1.5], 740 | ["7", 1.75], 741 | ["8", 2], 742 | ["9", 2.25], 743 | ["10", 2.5], 744 | ])("%s", (key, value) => { 745 | expect(tw(`leading-${key}`)).toEqual({ 746 | lineHeight: value, 747 | }); 748 | }); 749 | }); 750 | 751 | describe("text-align", () => { 752 | test.each([["left"], ["center"], ["right"], ["justify"]])("%s", (value) => { 753 | expect(tw(`text-${value}`)).toEqual({ 754 | textAlign: value, 755 | }); 756 | }); 757 | }); 758 | 759 | describe("text-color", () => { 760 | test.each(colors)("%s", (key, value) => { 761 | expect(tw(`text-${key}`)).toEqual({ 762 | color: value, 763 | }); 764 | }); 765 | }); 766 | 767 | describe("text-decoration", () => { 768 | test.each([ 769 | ["underline", "underline"], 770 | ["line-through", "line-through"], 771 | ["no-underline", "none"], 772 | ])("%s", (key, value) => { 773 | expect(tw(key)).toEqual({ 774 | textDecoration: value, 775 | }); 776 | }); 777 | }); 778 | 779 | describe("text-decoration-color", () => { 780 | test.each(colors)("%s", (key, value) => { 781 | expect(tw(`decoration-${key}`)).toEqual({ 782 | textDecorationColor: value, 783 | }); 784 | }); 785 | }); 786 | 787 | describe("text-align", () => { 788 | test.each([["solid"], ["double"], ["dotted"], ["dashed"], ["wavy"]])( 789 | "%s", 790 | (value) => { 791 | expect(tw(`decoration-${value}`)).toEqual({ 792 | textDecorationStyle: value, 793 | }); 794 | } 795 | ); 796 | }); 797 | 798 | describe("text-overflow", () => { 799 | test.each([ 800 | [ 801 | "truncate", 802 | { 803 | overflow: "hidden", 804 | textOverflow: "ellipsis", 805 | }, 806 | ], 807 | [ 808 | "text-ellipsis", 809 | { 810 | textOverflow: "ellipsis", 811 | }, 812 | ], 813 | ])("%s", (key, value) => { 814 | expect(tw(key)).toEqual(value); 815 | }); 816 | }); 817 | 818 | describe("text-indent", () => { 819 | test.each([ 820 | ["0", 0], 821 | ["px", 1], 822 | ["1", rem(0.25)], 823 | ["96", rem(24)], 824 | ])("%s", (key, value) => { 825 | expect(tw(`indent-${key}`)).toEqual({ 826 | textIndent: value, 827 | }); 828 | }); 829 | }); 830 | 831 | describe("text-transform", () => { 832 | test.each([ 833 | ["uppercase", "uppercase"], 834 | ["lowercase", "lowercase"], 835 | ["capitalize", "capitalize"], 836 | ])("%s", (key, value) => { 837 | expect(tw(key)).toEqual({ 838 | textTransform: value, 839 | }); 840 | }); 841 | }); 842 | }); 843 | 844 | describe("Backgrounds", () => { 845 | describe("background-color", () => { 846 | test.each([ 847 | ["inherit", "inherit"], 848 | ["current", "currentColor"], 849 | ["transparent", "transparent"], 850 | ])("%s", (key, value) => { 851 | expect(tw(`bg-${key}`)).toEqual({ 852 | backgroundColor: value, 853 | }); 854 | }); 855 | 856 | test.each(colors)("%s", (key, value) => { 857 | expect(tw(`bg-${key}`)).toEqual({ 858 | backgroundColor: value, 859 | }); 860 | }); 861 | }); 862 | }); 863 | 864 | describe("Borders", () => { 865 | const borderRadii = [ 866 | ["none", 0], 867 | ["sm", rem(0.125)], 868 | ["DEFAULT", rem(0.25)], 869 | ["md", rem(0.375)], 870 | ["lg", rem(0.5)], 871 | ["xl", rem(0.75)], 872 | ["2xl", rem(1)], 873 | ["3xl", rem(1.5)], 874 | ["full", 9999], 875 | ...customSpacing, 876 | ]; 877 | describe("border-radius", () => { 878 | describe("border-radius", () => { 879 | test.each(borderRadii)("%s", (key, value) => { 880 | expect(tw(`rounded-${key}`)).toEqual({ 881 | borderRadius: value, 882 | }); 883 | }); 884 | }); 885 | 886 | describe("border-radius-t", () => { 887 | test.each(borderRadii)("%s", (key, value) => { 888 | expect(tw(`rounded-t-${key}`)).toEqual({ 889 | borderTopLeftRadius: value, 890 | borderTopRightRadius: value, 891 | }); 892 | }); 893 | }); 894 | 895 | describe("border-radius-r", () => { 896 | test.each(borderRadii)("%s", (key, value) => { 897 | expect(tw(`rounded-r-${key}`)).toEqual({ 898 | borderTopRightRadius: value, 899 | borderBottomRightRadius: value, 900 | }); 901 | }); 902 | }); 903 | 904 | describe("border-radius-b", () => { 905 | test.each(borderRadii)("%s", (key, value) => { 906 | expect(tw(`rounded-b-${key}`)).toEqual({ 907 | borderBottomRightRadius: value, 908 | borderBottomLeftRadius: value, 909 | }); 910 | }); 911 | }); 912 | 913 | describe("border-radius-l", () => { 914 | test.each(borderRadii)("%s", (key, value) => { 915 | expect(tw(`rounded-l-${key}`)).toEqual({ 916 | borderBottomLeftRadius: value, 917 | borderTopLeftRadius: value, 918 | }); 919 | }); 920 | }); 921 | 922 | describe("border-radius-tl", () => { 923 | test.each(borderRadii)("%s", (key, value) => { 924 | expect(tw(`rounded-tl-${key}`)).toEqual({ 925 | borderTopLeftRadius: value, 926 | }); 927 | }); 928 | }); 929 | 930 | describe("border-radius-tr", () => { 931 | test.each(borderRadii)("%s", (key, value) => { 932 | expect(tw(`rounded-tr-${key}`)).toEqual({ 933 | borderTopRightRadius: value, 934 | }); 935 | }); 936 | }); 937 | 938 | describe("border-radius-br", () => { 939 | test.each(borderRadii)("%s", (key, value) => { 940 | expect(tw(`rounded-br-${key}`)).toEqual({ 941 | borderBottomRightRadius: value, 942 | }); 943 | }); 944 | }); 945 | 946 | describe("border-radius-bl", () => { 947 | test.each(borderRadii)("%s", (key, value) => { 948 | expect(tw(`rounded-bl-${key}`)).toEqual({ 949 | borderBottomLeftRadius: value, 950 | }); 951 | }); 952 | }); 953 | }); 954 | 955 | describe("border-width", () => { 956 | const borderWidths = [ 957 | ["DEFAULT", 1], 958 | [0, 0], 959 | [2, 2], 960 | [4, 4], 961 | [8, 8], 962 | ...customSpacing, 963 | ]; 964 | 965 | describe("border-width", () => { 966 | test.each(borderWidths)("%s", (key, value) => { 967 | expect(tw(`border-${key}`)).toEqual({ 968 | borderWidth: value, 969 | }); 970 | }); 971 | }); 972 | 973 | describe("border-width-x", () => { 974 | test.each(borderWidths)("%s", (key, value) => { 975 | expect(tw(`border-x-${key}`)).toEqual({ 976 | borderLeftWidth: value, 977 | borderRightWidth: value, 978 | }); 979 | }); 980 | }); 981 | 982 | describe("border-width-y", () => { 983 | test.each(borderWidths)("%s", (key, value) => { 984 | expect(tw(`border-y-${key}`)).toEqual({ 985 | borderTopWidth: value, 986 | borderBottomWidth: value, 987 | }); 988 | }); 989 | }); 990 | 991 | describe("border-width-t", () => { 992 | test.each(borderWidths)("%s", (key, value) => { 993 | expect(tw(`border-t-${key}`)).toEqual({ 994 | borderTopWidth: value, 995 | }); 996 | }); 997 | }); 998 | 999 | describe("border-width-r", () => { 1000 | test.each(borderWidths)("%s", (key, value) => { 1001 | expect(tw(`border-r-${key}`)).toEqual({ 1002 | borderRightWidth: value, 1003 | }); 1004 | }); 1005 | }); 1006 | 1007 | describe("border-width-b", () => { 1008 | test.each(borderWidths)("%s", (key, value) => { 1009 | expect(tw(`border-b-${key}`)).toEqual({ 1010 | borderBottomWidth: value, 1011 | }); 1012 | }); 1013 | }); 1014 | 1015 | describe("border-width-l", () => { 1016 | test.each(borderWidths)("%s", (key, value) => { 1017 | expect(tw(`border-l-${key}`)).toEqual({ 1018 | borderLeftWidth: value, 1019 | }); 1020 | }); 1021 | }); 1022 | }); 1023 | 1024 | describe("border-color", () => { 1025 | describe("border-color", () => { 1026 | test.each(colors)("%s", (key, value) => { 1027 | expect(tw(`border-${key}`)).toEqual({ 1028 | borderColor: value, 1029 | }); 1030 | }); 1031 | }); 1032 | 1033 | describe("border-color-x", () => { 1034 | test.each(colors)("%s", (key, value) => { 1035 | expect(tw(`border-x-${key}`)).toEqual({ 1036 | borderLeftColor: value, 1037 | borderRightColor: value, 1038 | }); 1039 | }); 1040 | }); 1041 | 1042 | describe("border-color-y", () => { 1043 | test.each(colors)("%s", (key, value) => { 1044 | expect(tw(`border-y-${key}`)).toEqual({ 1045 | borderTopColor: value, 1046 | borderBottomColor: value, 1047 | }); 1048 | }); 1049 | }); 1050 | 1051 | describe("border-color-t", () => { 1052 | test.each(colors)("%s", (key, value) => { 1053 | expect(tw(`border-t-${key}`)).toEqual({ 1054 | borderTopColor: value, 1055 | }); 1056 | }); 1057 | }); 1058 | 1059 | describe("border-color-r", () => { 1060 | test.each(colors)("%s", (key, value) => { 1061 | expect(tw(`border-r-${key}`)).toEqual({ 1062 | borderRightColor: value, 1063 | }); 1064 | }); 1065 | }); 1066 | 1067 | describe("border-color-b", () => { 1068 | test.each(colors)("%s", (key, value) => { 1069 | expect(tw(`border-b-${key}`)).toEqual({ 1070 | borderBottomColor: value, 1071 | }); 1072 | }); 1073 | }); 1074 | 1075 | describe("border-color-l", () => { 1076 | test.each(colors)("%s", (key, value) => { 1077 | expect(tw(`border-l-${key}`)).toEqual({ 1078 | borderLeftColor: value, 1079 | }); 1080 | }); 1081 | }); 1082 | }); 1083 | 1084 | describe("border-style", () => { 1085 | test.each([["solid"], ["dashed"], ["dotted"]])("%s", (value) => { 1086 | expect(tw(`border-${value}`)).toEqual({ 1087 | borderStyle: value, 1088 | }); 1089 | }); 1090 | }); 1091 | }); 1092 | 1093 | describe("Effects", () => { 1094 | describe("opacity", () => { 1095 | test.each([ 1096 | [0, 0], 1097 | [5, 0.05], 1098 | [10, 0.1], 1099 | [20, 0.2], 1100 | [25, 0.25], 1101 | [30, 0.3], 1102 | [40, 0.4], 1103 | [50, 0.5], 1104 | [60, 0.6], 1105 | [70, 0.7], 1106 | [75, 0.75], 1107 | [80, 0.8], 1108 | [90, 0.9], 1109 | [95, 0.95], 1110 | [100, 1], 1111 | ])("%s", (key, value) => { 1112 | expect(tw(`opacity-${key}`)).toEqual({ 1113 | opacity: value, 1114 | }); 1115 | }); 1116 | }); 1117 | }); 1118 | 1119 | describe("Transforms", () => { 1120 | describe("scale", () => { 1121 | const scale = [ 1122 | [0, 0], 1123 | [50, 0.5], 1124 | [75, 0.75], 1125 | [90, 0.9], 1126 | [95, 0.95], 1127 | [100, 1], 1128 | [105, 1.05], 1129 | [110, 1.1], 1130 | [125, 1.25], 1131 | [150, 1.5], 1132 | ...customSpacing, 1133 | ]; 1134 | 1135 | describe("scale", () => { 1136 | test.each(scale)("%s", (key, value) => { 1137 | expect(tw(`scale-${key}`)).toEqual({ 1138 | transform: `scale(${value})`, 1139 | }); 1140 | }); 1141 | }); 1142 | 1143 | describe("scale-x", () => { 1144 | test.each(scale)("%s", (key, value) => { 1145 | expect(tw(`scale-x-${key}`)).toEqual({ 1146 | transform: `scaleX(${value})`, 1147 | }); 1148 | }); 1149 | }); 1150 | 1151 | describe("scale-y", () => { 1152 | test.each(scale)("%s", (key, value) => { 1153 | expect(tw(`scale-y-${key}`)).toEqual({ 1154 | transform: `scaleY(${value})`, 1155 | }); 1156 | }); 1157 | }); 1158 | }); 1159 | 1160 | describe("rotate", () => { 1161 | const scale = [ 1162 | [0, "0deg"], 1163 | [1, "1deg"], 1164 | [2, "2deg"], 1165 | [3, "3deg"], 1166 | [6, "6deg"], 1167 | [12, "12deg"], 1168 | [45, "45deg"], 1169 | [90, "90deg"], 1170 | [180, "180deg"], 1171 | ["[69deg]", "69deg"], 1172 | ]; 1173 | 1174 | test.each(scale)("%s", (key, value) => { 1175 | expect(tw(`rotate-${key}`)).toEqual({ 1176 | transform: `rotate(${value})`, 1177 | }); 1178 | }); 1179 | }); 1180 | 1181 | describe("translate", () => { 1182 | const scale = [ 1183 | ["1/2", "50%"], 1184 | ["1/3", "33.333333%"], 1185 | ["2/3", "66.666667%"], 1186 | ["1/4", "25%"], 1187 | ["2/4", "50%"], 1188 | ["3/4", "75%"], 1189 | ["full", "100%"], 1190 | ...spacing, 1191 | ...customSpacing, 1192 | ]; 1193 | 1194 | describe("translate", () => { 1195 | test.each(scale)("%s", (key, value) => { 1196 | expect(tw(`translate-${key}`)).toEqual({ 1197 | transform: `translate(${value})`, 1198 | }); 1199 | }); 1200 | }); 1201 | 1202 | describe("translate-x", () => { 1203 | test.each(scale)("%s", (key, value) => { 1204 | expect(tw(`translate-x-${key}`)).toEqual({ 1205 | transform: `translateX(${value})`, 1206 | }); 1207 | }); 1208 | }); 1209 | 1210 | describe("translate-y", () => { 1211 | test.each(scale)("%s", (key, value) => { 1212 | expect(tw(`translate-y-${key}`)).toEqual({ 1213 | transform: `translateY(${value})`, 1214 | }); 1215 | }); 1216 | }); 1217 | }); 1218 | 1219 | describe("transform-origin", () => { 1220 | const scale = [ 1221 | ["center", "center"], 1222 | ["top", "top"], 1223 | ["top-right", "top right"], 1224 | ["right", "right"], 1225 | ["bottom-right", "bottom right"], 1226 | ["bottom", "bottom"], 1227 | ["bottom-left", "bottom left"], 1228 | ["left", "left"], 1229 | ["top-left", "top left"], 1230 | ["[69%_42%]", "69% 42%"], 1231 | ]; 1232 | 1233 | test.each(scale)("%s", (key, value) => { 1234 | expect(tw(`origin-${key}`)).toEqual({ 1235 | transformOrigin: value, 1236 | }); 1237 | }); 1238 | }); 1239 | }); 1240 | 1241 | describe("Combinations", () => { 1242 | test("Misc", () => { 1243 | expect(tw("w-24 h-12 max-w-screen-md text-gray-500")).toEqual({ 1244 | width: rem(6), 1245 | height: rem(3), 1246 | maxWidth: px(768), 1247 | color: "#6b7280", 1248 | }); 1249 | }); 1250 | 1251 | test("Negative values", () => { 1252 | expect( 1253 | tw( 1254 | "-z-10 -top-1 -right-full -bottom-1/2 -left-2 -translate-1 -scale-50 -rotate-45 -order-1 -m-2" 1255 | ) 1256 | ).toEqual({ 1257 | zIndex: -10, 1258 | top: rem(-0.25), 1259 | right: "-100%", 1260 | bottom: "-50%", 1261 | left: rem(-0.5), 1262 | transform: `translate(${rem(-0.25)}) scale(-0.5) rotate(-45deg)`, 1263 | order: -1, 1264 | margin: rem(-0.5), 1265 | }); 1266 | }); 1267 | }); 1268 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import resolveConfig from "tailwindcss/resolveConfig.js"; 2 | import type { Config as TailwindConfig } from "tailwindcss"; 3 | import type { Style } from "@react-pdf/types"; 4 | import { capitalize, isNumeric, px, rem } from "./utils"; 5 | import { 6 | type ScaledProperty, 7 | isNegativeProperty, 8 | isScaledProperty, 9 | exactUtilities, 10 | utilityPatterns, 11 | } from "./properties"; 12 | 13 | export type Theme = Record< 14 | ScaledProperty, 15 | Record 16 | > & { 17 | colors: Record< 18 | string, 19 | Record | string | undefined 20 | >; 21 | }; 22 | 23 | type Config = Omit; 24 | 25 | interface ResolvedConfig { 26 | theme: Theme; 27 | } 28 | 29 | type Options = { 30 | ptPerRem?: number; 31 | } 32 | 33 | export function createTw(config: Config, options?: Options) { 34 | // We're using a stricter subset of Tailwind, so we can cast the config to a narrower type 35 | const resolvedConfig = resolveConfig({ 36 | // Disable Tailwind content warning 37 | content: ["./dummy/path.js"], 38 | theme: config.theme ?? {}, 39 | }) as unknown as ResolvedConfig; 40 | 41 | const theme = resolvedConfig.theme; 42 | 43 | const cache: Record = {}; 44 | 45 | function transformValue( 46 | value: string | number | undefined, 47 | property?: string, 48 | isNegative?: boolean 49 | ) { 50 | if (value === undefined) { 51 | return undefined; 52 | } 53 | 54 | const sign = isNegative ? -1 : 1; 55 | 56 | if (typeof value === "number") { 57 | return sign * value; 58 | } 59 | 60 | switch (property) { 61 | case "lineHeight": 62 | // react-pdf only supports unitless line-heights 63 | // https://github.com/diegomura/react-pdf/issues/912 64 | if (value.endsWith("rem")) { 65 | return sign * Number(value.replace("rem", "")); 66 | } 67 | return sign * Number(value); 68 | 69 | default: 70 | if (value.endsWith("px")) { 71 | return px(sign * Number(value.replace("px", ""))); 72 | } 73 | if (value.endsWith("rem")) { 74 | return rem(sign * Number(value.replace("rem", "")), options?.ptPerRem); 75 | } 76 | if (value.endsWith("em")) { 77 | return rem(sign * Number(value.replace("em", "")), options?.ptPerRem); 78 | } 79 | if (isNegative && property && isNegativeProperty(property)) { 80 | const suffix = ["deg", "%"].find((i) => value.endsWith(i)); 81 | if (suffix) { 82 | return `${sign * Number(value.replace(suffix, ""))}${suffix}`; 83 | } 84 | } 85 | if (isNumeric(value)) { 86 | return sign * Number(value); 87 | } 88 | return value; 89 | } 90 | } 91 | 92 | function getCustomValue(value: string) { 93 | if (value.startsWith("[") && value.endsWith("]")) { 94 | return value.slice(1, value.length - 1).replaceAll("_", " "); 95 | } 96 | return undefined; 97 | } 98 | 99 | interface Value { 100 | value: string | number | undefined; 101 | type?: "color" | "unit" | "numeric" | "other"; 102 | isCustom?: boolean; 103 | additionalProperties?: Style; 104 | } 105 | 106 | function parseValue( 107 | value: string, 108 | property?: string, 109 | isNegative?: boolean 110 | ): Value { 111 | const valueParts = value.split("-"); 112 | 113 | // Custom value 114 | const customValue = getCustomValue(value); 115 | if (customValue) { 116 | // Color 117 | if ( 118 | ["#", "rgb", "hsl"].some((prefix) => customValue.startsWith(prefix)) 119 | ) { 120 | return { 121 | value: customValue, 122 | type: "color", 123 | isCustom: true, 124 | }; 125 | } 126 | // Unit 127 | if (["px", "rem"].some((suffix) => customValue.endsWith(suffix))) { 128 | return { 129 | value: transformValue(customValue, property, isNegative), 130 | type: "unit", 131 | isCustom: true, 132 | }; 133 | } 134 | // Other 135 | return { 136 | value: transformValue(customValue, property, isNegative), 137 | type: "other", 138 | isCustom: true, 139 | }; 140 | } 141 | 142 | // Color 143 | // Exception for "font-weight: black" (not a color) 144 | if ( 145 | valueParts[0] && 146 | valueParts[0] in theme.colors && 147 | property !== "fontWeight" 148 | ) { 149 | // TODO alpha colors like gray-500/50 etc 150 | const color = theme.colors[valueParts[0]]; 151 | return { 152 | value: 153 | typeof color === "string" 154 | ? color 155 | : valueParts[1] 156 | ? color?.[valueParts[1]] 157 | : undefined, 158 | type: "color" as const, 159 | isCustom: false, 160 | additionalProperties: undefined, 161 | }; 162 | } 163 | 164 | if (valueParts.length === 0 || !property) { 165 | return { 166 | value: undefined, 167 | }; 168 | } 169 | 170 | // Scaled properties 171 | const maybeScaledProperty = ["top", "right", "bottom", "left"].includes( 172 | property 173 | ) 174 | ? "inset" 175 | : property; 176 | 177 | if (isScaledProperty(maybeScaledProperty)) { 178 | const result = theme[maybeScaledProperty][value]; 179 | 180 | // Some utilities may set multiple properties 181 | // eg: text-2xl => ["1.5rem", { lineHeight: "2rem"}] 182 | if (Array.isArray(result)) { 183 | const additionalProperties = 184 | result[1] && result[1] !== null && typeof result[1] === "object" 185 | ? Object.fromEntries( 186 | Object.entries(result[1]).map(([key, value]) => [ 187 | key, 188 | transformValue(value, key), 189 | ]) 190 | ) 191 | : null; 192 | 193 | return { 194 | value: transformValue(result[0], property, isNegative), 195 | type: "unit", 196 | isCustom: false, 197 | ...(additionalProperties ? { additionalProperties } : null), 198 | }; 199 | } 200 | 201 | return { 202 | value: transformValue(result, property, isNegative), 203 | type: "unit", 204 | isCustom: false, 205 | }; 206 | } 207 | 208 | // No match 209 | return { 210 | value: undefined, 211 | }; 212 | } 213 | 214 | function parseUtility( 215 | className: string 216 | ): Style | Record | undefined { 217 | const modifierParts = className.split(":"); 218 | const utilityStr = modifierParts[modifierParts.length - 1]; 219 | 220 | // Exact utilities 221 | if (utilityStr && utilityStr in exactUtilities) { 222 | return exactUtilities[utilityStr]; 223 | } 224 | 225 | // Utility patterns 226 | const isNegative = utilityStr ? utilityStr.startsWith("-") : false; 227 | const utilityParts = utilityStr 228 | ? utilityStr.slice(isNegative ? 1 : 0).split("-") 229 | : []; 230 | 231 | const matchingUtilityPatternKey = Object.keys(utilityPatterns).find( 232 | (key) => { 233 | const keyParts = key.split("-"); 234 | const comparisonKey = utilityParts.slice(0, keyParts.length).join("-"); 235 | return key === comparisonKey; 236 | } 237 | ); 238 | 239 | if (matchingUtilityPatternKey) { 240 | const rawValue = className.split(`${matchingUtilityPatternKey}-`)[1]; 241 | const pattern = utilityPatterns[matchingUtilityPatternKey]; 242 | const property = Array.isArray(pattern) ? pattern[0] : pattern; 243 | const mappedProperties = Array.isArray(pattern) 244 | ? Array.isArray(pattern[1]) 245 | ? pattern[1] 246 | : [pattern[1]] 247 | : [pattern]; 248 | 249 | if (!rawValue || (isNegative && !isNegativeProperty(property))) { 250 | return undefined; 251 | } 252 | 253 | const { value, additionalProperties } = parseValue( 254 | rawValue, 255 | property, 256 | isNegative 257 | ); 258 | 259 | return { 260 | ...Object.fromEntries(mappedProperties.map((prop) => [prop, value])), 261 | ...(additionalProperties ?? null), 262 | }; 263 | } 264 | 265 | // Special utilities 266 | switch (utilityParts[0]) { 267 | case "inset": { 268 | const direction = ["x", "y"].find((i) => i === utilityParts[1]); 269 | const valueStr = utilityParts.slice(direction ? 2 : 1).join("-"); 270 | const { value } = parseValue(valueStr, "inset", isNegative); 271 | switch (direction) { 272 | case "x": 273 | return { 274 | left: value, 275 | right: value, 276 | }; 277 | case "y": 278 | return { 279 | top: value, 280 | bottom: value, 281 | }; 282 | default: 283 | return { 284 | top: value, 285 | right: value, 286 | bottom: value, 287 | left: value, 288 | }; 289 | } 290 | } 291 | 292 | case "font": { 293 | const valueStr = utilityParts.slice(1).join("-"); 294 | const customValue = getCustomValue(valueStr); 295 | if (customValue) { 296 | if (isNumeric(customValue)) { 297 | return { 298 | fontWeight: parseInt(customValue), 299 | }; 300 | } 301 | return { 302 | fontFamily: customValue, 303 | }; 304 | } 305 | if (theme.fontFamily && valueStr in theme.fontFamily) { 306 | const { value } = parseValue(valueStr, "fontFamily"); 307 | return { 308 | fontFamily: value, 309 | }; 310 | } 311 | const { value } = parseValue(valueStr, "fontWeight"); 312 | return { 313 | fontWeight: value, 314 | }; 315 | } 316 | 317 | case "text": { 318 | const valueStr = utilityParts.slice(1).join("-"); 319 | const { value, additionalProperties, type } = parseValue( 320 | valueStr, 321 | "fontSize" 322 | ); 323 | if (type === "color") { 324 | return { color: value }; 325 | } 326 | return { fontSize: value, ...additionalProperties }; 327 | } 328 | 329 | case "decoration": { 330 | const valueStr = utilityParts.slice(1).join("-"); 331 | const { value, type } = parseValue(valueStr, "textDecorationColor"); 332 | if (type === "color") { 333 | return { 334 | textDecorationColor: value, 335 | }; 336 | } 337 | // Only decoration color (not thickness) supported for now 338 | return undefined; 339 | } 340 | 341 | case "rounded": { 342 | const direction = ["t", "r", "b", "l", "tl", "tr", "br", "bl"].find( 343 | (i) => i === utilityParts[1] 344 | ); 345 | const valueStr = utilityParts.slice(direction ? 2 : 1).join("-"); 346 | const { value } = parseValue(valueStr || "DEFAULT", "borderRadius"); 347 | switch (direction) { 348 | case "t": 349 | return { 350 | borderTopLeftRadius: value, 351 | borderTopRightRadius: value, 352 | }; 353 | case "r": 354 | return { 355 | borderTopRightRadius: value, 356 | borderBottomRightRadius: value, 357 | }; 358 | case "b": 359 | return { 360 | borderBottomRightRadius: value, 361 | borderBottomLeftRadius: value, 362 | }; 363 | case "l": 364 | return { 365 | borderBottomLeftRadius: value, 366 | borderTopLeftRadius: value, 367 | }; 368 | case "tl": 369 | return { 370 | borderTopLeftRadius: value, 371 | }; 372 | case "tr": 373 | return { 374 | borderTopRightRadius: value, 375 | }; 376 | case "br": 377 | return { 378 | borderBottomRightRadius: value, 379 | }; 380 | case "bl": 381 | return { 382 | borderBottomLeftRadius: value, 383 | }; 384 | default: 385 | return { 386 | borderRadius: value, 387 | }; 388 | } 389 | } 390 | 391 | case "border": { 392 | // Border width or color 393 | const direction = ["x", "y", "t", "r", "b", "l"].find( 394 | (i) => i === utilityParts[1] 395 | ); 396 | const valueStr = utilityParts.slice(direction ? 2 : 1).join("-"); 397 | const { value, type } = parseValue( 398 | valueStr || "DEFAULT", 399 | "borderWidth" 400 | ); 401 | const propertySuffix = capitalize(type === "color" ? "color" : "width"); 402 | switch (direction) { 403 | case "x": 404 | return { 405 | [`borderLeft${propertySuffix}`]: value, 406 | [`borderRight${propertySuffix}`]: value, 407 | }; 408 | case "y": 409 | return { 410 | [`borderTop${propertySuffix}`]: value, 411 | [`borderBottom${propertySuffix}`]: value, 412 | }; 413 | case "t": 414 | return { [`borderTop${propertySuffix}`]: value }; 415 | case "r": 416 | return { [`borderRight${propertySuffix}`]: value }; 417 | case "b": 418 | return { [`borderBottom${propertySuffix}`]: value }; 419 | case "l": 420 | return { [`borderLeft${propertySuffix}`]: value }; 421 | default: 422 | return { 423 | [`border${propertySuffix}`]: value, 424 | }; 425 | } 426 | } 427 | 428 | case "scale": { 429 | const direction = ["x", "y"].find((i) => i === utilityParts[1]); 430 | const valueStr = utilityParts.slice(direction ? 2 : 1).join("-"); 431 | const { value } = parseValue(valueStr, "scale", isNegative); 432 | switch (direction) { 433 | case "x": 434 | return { 435 | transform: `scaleX(${value})`, 436 | }; 437 | case "y": 438 | return { 439 | transform: `scaleY(${value})`, 440 | }; 441 | default: 442 | return { 443 | transform: `scale(${value})`, 444 | }; 445 | } 446 | } 447 | 448 | case "rotate": { 449 | const { value } = parseValue( 450 | utilityParts.slice(1).join("-"), 451 | "rotate", 452 | isNegative 453 | ); 454 | return { 455 | transform: `rotate(${value})`, 456 | }; 457 | } 458 | 459 | case "translate": { 460 | const direction = ["x", "y"].find((i) => i === utilityParts[1]); 461 | const valueStr = utilityParts.slice(direction ? 2 : 1).join("-"); 462 | const { value } = parseValue(valueStr, "translate", isNegative); 463 | switch (direction) { 464 | case "x": 465 | return { 466 | transform: `translateX(${value})`, 467 | }; 468 | case "y": 469 | return { 470 | transform: `translateY(${value})`, 471 | }; 472 | default: 473 | return { 474 | transform: `translate(${value})`, 475 | }; 476 | } 477 | } 478 | } 479 | 480 | // No match 481 | return undefined; 482 | } 483 | 484 | function handleInvalidClassName(className: string) { 485 | console.warn(`react-pdf-tailwind: Invalid class "${className}"`); 486 | } 487 | 488 | return function (input: string) { 489 | const classNames = input.split(" ").map((i) => i.trim()); 490 | return classNames 491 | .map((className) => { 492 | if (className in cache) { 493 | return cache[className]; 494 | } 495 | const parsed = parseUtility(className); 496 | if ( 497 | parsed && 498 | Object.values(parsed).every((v) => typeof v !== "undefined") 499 | ) { 500 | cache[className] = parsed; 501 | return parsed; 502 | } else { 503 | handleInvalidClassName(className); 504 | } 505 | return undefined; 506 | }) 507 | .reduce