From 6687db40854356feaa2a692e0718e2e74bab1613 Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Sun, 3 Nov 2024 17:31:17 +0200 Subject: [PATCH 1/4] feat: add shared package to pdf templates to render in the server and client side --- packages/server/package.json | 1 + packages/webapp/package.json | 1 + pnpm-lock.yaml | 1489 ++++++++--------- shared/pdf-templates/.gitignore | 24 + shared/pdf-templates/.storybook/main.tsx | 23 + shared/pdf-templates/.storybook/preview.tsx | 15 + .../pdf-templates/.storybook/vite.config.ts | 17 + shared/pdf-templates/eslint.config.js | 28 + shared/pdf-templates/package.json | 62 + shared/pdf-templates/postman.config.js | 6 + shared/pdf-templates/src/Test.tsx | 3 + shared/pdf-templates/src/index.ts | 1 + shared/pdf-templates/src/vite-env.d.ts | 1 + shared/pdf-templates/tailwind.config.js | 8 + shared/pdf-templates/tsconfig.json | 28 + shared/pdf-templates/tsconfig.node.json | 23 + shared/pdf-templates/vite.config.ts | 61 + shared/pdf-templates/webpack.config.js | 36 + 18 files changed, 1006 insertions(+), 821 deletions(-) create mode 100644 shared/pdf-templates/.gitignore create mode 100644 shared/pdf-templates/.storybook/main.tsx create mode 100644 shared/pdf-templates/.storybook/preview.tsx create mode 100644 shared/pdf-templates/.storybook/vite.config.ts create mode 100644 shared/pdf-templates/eslint.config.js create mode 100644 shared/pdf-templates/package.json create mode 100644 shared/pdf-templates/postman.config.js create mode 100644 shared/pdf-templates/src/Test.tsx create mode 100644 shared/pdf-templates/src/index.ts create mode 100644 shared/pdf-templates/src/vite-env.d.ts create mode 100644 shared/pdf-templates/tailwind.config.js create mode 100644 shared/pdf-templates/tsconfig.json create mode 100644 shared/pdf-templates/tsconfig.node.json create mode 100644 shared/pdf-templates/vite.config.ts create mode 100644 shared/pdf-templates/webpack.config.js diff --git a/packages/server/package.json b/packages/server/package.json index 427d42d00..77648c179 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -24,6 +24,7 @@ "@aws-sdk/s3-request-presigner": "^3.583.0", "@bigcapital/utils": "*", "@bigcapital/email-components": "*", + "@bigcapital/pdf-templates": "*", "@casl/ability": "^5.4.3", "@hapi/boom": "^7.4.3", "@lemonsqueezy/lemonsqueezy.js": "^2.2.0", diff --git a/packages/webapp/package.json b/packages/webapp/package.json index a315192d1..95abc13dd 100644 --- a/packages/webapp/package.json +++ b/packages/webapp/package.json @@ -4,6 +4,7 @@ "private": true, "dependencies": { "@bigcapital/utils": "*", + "@bigcapital/pdf-templates": "*", "@blueprintjs-formik/core": "^0.3.6", "@blueprintjs-formik/datetime": "^0.3.7", "@blueprintjs-formik/select": "^0.3.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8beb28c4f..779d86d89 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: dependencies: tsup: specifier: ^8.3.0 - version: 8.3.0(typescript@4.9.5) + version: 8.3.0(typescript@5.6.3) devDependencies: '@commitlint/cli': specifier: ^17.4.2 @@ -48,6 +48,9 @@ importers: '@bigcapital/email-components': specifier: '*' version: link:../../shared/email-components + '@bigcapital/pdf-templates': + specifier: '*' + version: link:../../shared/pdf-templates '@bigcapital/utils': specifier: '*' version: link:../../shared/bigcapital-utils @@ -481,6 +484,9 @@ importers: packages/webapp: dependencies: + '@bigcapital/pdf-templates': + specifier: '*' + version: link:../../shared/pdf-templates '@bigcapital/utils': specifier: '*' version: link:../../shared/bigcapital-utils @@ -953,27 +959,120 @@ importers: specifier: ^5.4.9 version: 5.4.10(@types/node@20.5.1)(less@4.2.0) - shared/react-email-starter: + shared/pdf-templates: dependencies: - '@react-email/components': - specifier: 0.0.25 - version: 0.0.25(react-dom@18.3.1)(react@18.3.1) + '@emotion/cache': + specifier: ^11.13.1 + version: 11.13.1 + '@emotion/css': + specifier: ^11.13.4 + version: 11.13.4 + '@emotion/react': + specifier: ^11.13.3 + version: 11.13.3(@types/react@18.3.4)(react@18.3.1) + '@emotion/server': + specifier: ^11.11.0 + version: 11.11.0(@emotion/css@11.13.4) + '@types/lodash': + specifier: ^4.17.13 + version: 4.17.13 + '@xstyled/emotion': + specifier: ^3.8.1 + version: 3.8.1(@emotion/react@11.13.3)(@emotion/styled@11.13.0) + '@xstyled/system': + specifier: ^3.8.1 + version: 3.8.1 + classnames: + specifier: ^2.3.2 + version: 2.5.1 + css-loader: + specifier: ^6.x + version: 6.11.0(webpack@5.91.0) + declaration-bundler-webpack-plugin: + specifier: ^1.0.3 + version: 1.0.3 + fork-ts-checker-webpack-plugin: + specifier: ^9.0.2 + version: 9.0.2(typescript@5.6.3)(webpack@5.91.0) + lodash: + specifier: ^4.17.15 + version: 4.17.21 react: specifier: 18.3.1 version: 18.3.1 react-dom: specifier: 18.3.1 version: 18.3.1(react@18.3.1) - react-email: - specifier: 3.0.1 - version: 3.0.1(@playwright/test@1.44.1)(react-dom@18.3.1)(react@18.3.1) + style-loader: + specifier: ^3.x + version: 3.3.4(webpack@5.91.0) + tailwindcss: + specifier: ^3.4.14 + version: 3.4.14(ts-node@10.9.2) + ts-loader: + specifier: ^9.x + version: 9.5.1(typescript@5.6.3)(webpack@5.91.0) + webpack: + specifier: ^5.x + version: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack-cli: + specifier: ^5.x + version: 5.1.4(webpack@5.91.0) devDependencies: + '@eslint/js': + specifier: ^9.13.0 + version: 9.13.0 + '@storybook/addon-essentials': + specifier: 7.2.2 + version: 7.2.2(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1)(react@18.3.1) + '@storybook/addon-interactions': + specifier: 7.2.2 + version: 7.2.2(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1)(react@18.3.1) + '@storybook/addon-links': + specifier: 7.2.2 + version: 7.2.2(react-dom@18.3.1)(react@18.3.1) + '@storybook/addon-styling': + specifier: 1.3.6 + version: 1.3.6(@types/react-dom@18.3.0)(@types/react@18.3.4)(less@4.2.0)(postcss@8.4.47)(react-dom@18.3.1)(react@18.3.1)(typescript@5.6.3)(webpack@5.91.0) + '@storybook/blocks': + specifier: 7.2.2 + version: 7.2.2(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1)(react@18.3.1) + '@storybook/react': + specifier: 7.2.2 + version: 7.2.2(react-dom@18.3.1)(react@18.3.1)(typescript@5.6.3) + '@storybook/testing-library': + specifier: 0.2.0 + version: 0.2.0 '@types/react': specifier: 18.3.4 version: 18.3.4 '@types/react-dom': specifier: 18.3.0 version: 18.3.0 + eslint: + specifier: ^9.13.0 + version: 9.13.0 + eslint-plugin-react-hooks: + specifier: ^5.0.0 + version: 5.0.0(eslint@9.13.0) + eslint-plugin-react-refresh: + specifier: ^0.4.13 + version: 0.4.14(eslint@9.13.0) + eslint-plugin-storybook: + specifier: 0.6.13 + version: 0.6.13(eslint@9.13.0)(typescript@5.6.3) + globals: + specifier: ^15.11.0 + version: 15.11.0 + storybook: + specifier: 7.2.2 + version: 7.2.2 + typescript: + specifier: ~5.6.2 + version: 5.6.3 + typescript-eslint: + specifier: ^8.10.0 + version: 8.11.0(eslint@9.13.0)(typescript@5.6.3) packages: @@ -1778,20 +1877,13 @@ packages: '@babel/highlight': 7.24.5 dev: false - /@babel/code-frame@7.24.2: - resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.24.5 - picocolors: 1.1.1 - /@babel/code-frame@7.26.0: resolution: {integrity: sha512-INCKxTtbXtcNbUZ3YXutwMpEleqttcswhAdee7dhuoVrD2cnuc3PqtERBtxkX5nziX9vnBL8WXmSGwv8CuPV6g==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-validator-identifier': 7.25.9 js-tokens: 4.0.0 - picocolors: 1.0.1 + picocolors: 1.1.1 /@babel/compat-data@7.24.4: resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} @@ -1813,7 +1905,7 @@ packages: '@babel/helpers': 7.26.0 '@babel/parser': 7.26.1 '@babel/template': 7.25.9 - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.25.9(supports-color@5.5.0) '@babel/types': 7.26.0 convert-source-map: 2.0.0 debug: 4.3.7(supports-color@5.5.0) @@ -1836,7 +1928,7 @@ packages: '@babel/helpers': 7.26.0 '@babel/parser': 7.26.1 '@babel/template': 7.25.9 - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.25.9(supports-color@5.5.0) '@babel/types': 7.26.0 convert-source-map: 2.0.0 debug: 4.3.7(supports-color@5.5.0) @@ -1864,7 +1956,7 @@ packages: resolution: {integrity: sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.26.0 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 @@ -1897,7 +1989,7 @@ packages: dependencies: '@babel/compat-data': 7.24.4 '@babel/helper-validator-option': 7.23.5 - browserslist: 4.23.0 + browserslist: 4.24.2 lru-cache: 5.1.1 semver: 6.3.1 @@ -2006,7 +2098,7 @@ packages: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.24.0 + '@babel/template': 7.25.9 '@babel/types': 7.26.0 /@babel/helper-hoist-variables@7.22.5: @@ -2026,12 +2118,13 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.24.5 + dev: false - /@babel/helper-module-imports@7.25.9: + /@babel/helper-module-imports@7.25.9(supports-color@5.5.0): resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.25.9(supports-color@5.5.0) '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color @@ -2044,10 +2137,12 @@ packages: dependencies: '@babel/core': 7.24.5 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.24.3 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) '@babel/helper-simple-access': 7.24.5 '@babel/helper-split-export-declaration': 7.24.5 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-validator-identifier': 7.25.9 + transitivePeerDependencies: + - supports-color dev: false /@babel/helper-module-transforms@7.24.5(@babel/core@7.26.0): @@ -2058,10 +2153,12 @@ packages: dependencies: '@babel/core': 7.26.0 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.24.3 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) '@babel/helper-simple-access': 7.24.5 '@babel/helper-split-export-declaration': 7.24.5 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-validator-identifier': 7.25.9 + transitivePeerDependencies: + - supports-color /@babel/helper-module-transforms@7.26.0(@babel/core@7.24.5): resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} @@ -2070,9 +2167,9 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.24.5 - '@babel/helper-module-imports': 7.25.9 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.25.9(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: false @@ -2084,9 +2181,9 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-module-imports': 7.25.9 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.25.9(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -2176,10 +2273,6 @@ packages: resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier@7.24.5: - resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} - engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier@7.25.9: resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} @@ -2211,10 +2304,11 @@ packages: resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-validator-identifier': 7.25.9 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.1.1 + dev: false /@babel/parser@7.24.5: resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} @@ -2335,7 +2429,7 @@ packages: dependencies: '@babel/core': 7.26.0 '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.24.5 dev: true /@babel/plugin-proposal-decorators@7.24.1(@babel/core@7.24.5): @@ -2911,9 +3005,11 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.5 - '@babel/helper-module-imports': 7.24.3 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) '@babel/helper-plugin-utils': 7.24.5 '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.5) + transitivePeerDependencies: + - supports-color dev: false /@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.26.0): @@ -2923,9 +3019,11 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-module-imports': 7.24.3 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) '@babel/helper-plugin-utils': 7.24.5 '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color /@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==} @@ -3340,6 +3438,8 @@ packages: '@babel/core': 7.24.5 '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) '@babel/helper-plugin-utils': 7.24.5 + transitivePeerDependencies: + - supports-color dev: false /@babel/plugin-transform-modules-amd@7.24.1(@babel/core@7.26.0): @@ -3351,6 +3451,8 @@ packages: '@babel/core': 7.26.0 '@babel/helper-module-transforms': 7.24.5(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.24.5 + transitivePeerDependencies: + - supports-color /@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==} @@ -3389,7 +3491,9 @@ packages: '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-validator-identifier': 7.25.9 + transitivePeerDependencies: + - supports-color dev: false /@babel/plugin-transform-modules-systemjs@7.24.1(@babel/core@7.26.0): @@ -3402,7 +3506,9 @@ packages: '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-module-transforms': 7.24.5(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-validator-identifier': 7.25.9 + transitivePeerDependencies: + - supports-color /@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==} @@ -3413,6 +3519,8 @@ packages: '@babel/core': 7.24.5 '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) '@babel/helper-plugin-utils': 7.24.5 + transitivePeerDependencies: + - supports-color dev: false /@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.26.0): @@ -3424,6 +3532,8 @@ packages: '@babel/core': 7.26.0 '@babel/helper-module-transforms': 7.24.5(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.24.5 + transitivePeerDependencies: + - supports-color /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.5): resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} @@ -3709,6 +3819,8 @@ packages: dependencies: '@babel/core': 7.24.5 '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.5) + transitivePeerDependencies: + - supports-color dev: false /@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0): @@ -3739,10 +3851,12 @@ packages: dependencies: '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-module-imports': 7.24.3 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) '@babel/helper-plugin-utils': 7.24.5 '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5) '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color dev: false /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.26.0): @@ -3753,10 +3867,12 @@ packages: dependencies: '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-module-imports': 7.24.3 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) '@babel/helper-plugin-utils': 7.24.5 '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.26.0) '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color dev: false /@babel/plugin-transform-react-pure-annotations@7.24.1(@babel/core@7.24.5): @@ -3817,7 +3933,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.5 - '@babel/helper-module-imports': 7.24.3 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) '@babel/helper-plugin-utils': 7.24.5 babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.5) babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.5) @@ -4261,6 +4377,8 @@ packages: '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.5) '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.24.5) '@babel/plugin-transform-react-pure-annotations': 7.24.1(@babel/core@7.24.5) + transitivePeerDependencies: + - supports-color dev: false /@babel/preset-typescript@7.24.1(@babel/core@7.24.5): @@ -4286,8 +4404,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-validator-option': 7.25.9 + '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-validator-option': 7.23.5 '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.26.0) '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.26.0) '@babel/plugin-transform-typescript': 7.24.5(@babel/core@7.26.0) @@ -4330,9 +4448,9 @@ packages: resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.24.2 - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 + '@babel/code-frame': 7.26.0 + '@babel/parser': 7.26.1 + '@babel/types': 7.26.0 /@babel/template@7.25.9: resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} @@ -4346,7 +4464,7 @@ packages: resolution: {integrity: sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.26.0 '@babel/generator': 7.24.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 @@ -4359,7 +4477,7 @@ packages: transitivePeerDependencies: - supports-color - /@babel/traverse@7.25.9: + /@babel/traverse@7.25.9(supports-color@5.5.0): resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} engines: {node: '>=6.9.0'} dependencies: @@ -4378,7 +4496,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-validator-identifier': 7.25.9 to-fast-properties: 2.0.0 /@babel/types@7.26.0: @@ -4757,14 +4875,14 @@ packages: '@commitlint/types': 17.8.1 '@types/node': 20.5.1 chalk: 4.1.2 - cosmiconfig: 8.3.6(typescript@4.9.5) - cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6)(ts-node@10.9.2)(typescript@4.9.5) + cosmiconfig: 8.3.6(typescript@5.6.3) + cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6)(ts-node@10.9.2)(typescript@5.6.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.2(@types/node@20.5.1)(typescript@4.9.5) - typescript: 4.9.5 + ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.6.3) + typescript: 5.6.3 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' @@ -5038,7 +5156,7 @@ packages: /@emotion/babel-plugin@11.12.0: resolution: {integrity: sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==} dependencies: - '@babel/helper-module-imports': 7.24.3 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) '@babel/runtime': 7.24.5 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 @@ -5049,6 +5167,8 @@ packages: find-root: 1.1.0 source-map: 0.5.7 stylis: 4.2.0 + transitivePeerDependencies: + - supports-color dev: false /@emotion/cache@10.0.29: @@ -5082,6 +5202,8 @@ packages: '@emotion/sheet': 0.9.4 '@emotion/utils': 0.11.3 react: 18.3.1 + transitivePeerDependencies: + - supports-color dev: false /@emotion/css@10.0.27: @@ -5090,6 +5212,8 @@ packages: '@emotion/serialize': 0.11.16 '@emotion/utils': 0.11.3 babel-plugin-emotion: 10.2.2 + transitivePeerDependencies: + - supports-color dev: false /@emotion/css@11.13.4: @@ -5100,6 +5224,8 @@ packages: '@emotion/serialize': 1.3.2 '@emotion/sheet': 1.4.0 '@emotion/utils': 1.4.1 + transitivePeerDependencies: + - supports-color dev: false /@emotion/hash@0.8.0: @@ -5159,6 +5285,8 @@ packages: '@types/react': 18.3.4 hoist-non-react-statics: 3.3.2 react: 18.3.1 + transitivePeerDependencies: + - supports-color dev: false /@emotion/serialize@0.11.16: @@ -5181,6 +5309,21 @@ packages: csstype: 3.1.3 dev: false + /@emotion/server@11.11.0(@emotion/css@11.13.4): + resolution: {integrity: sha512-6q89fj2z8VBTx9w93kJ5n51hsmtYuFPtZgnc1L8VzRx9ti4EU6EyvF6Nn1H1x3vcCQCF7u2dB2lY4AYJwUW4PA==} + peerDependencies: + '@emotion/css': ^11.0.0-rc.0 + peerDependenciesMeta: + '@emotion/css': + optional: true + dependencies: + '@emotion/css': 11.13.4 + '@emotion/utils': 1.4.1 + html-tokenize: 2.0.1 + multipipe: 1.0.2 + through: 2.3.8 + dev: false + /@emotion/sheet@0.9.4: resolution: {integrity: sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==} dev: false @@ -5208,6 +5351,8 @@ packages: '@emotion/utils': 1.4.1 '@types/react': 18.3.4 react: 18.3.1 + transitivePeerDependencies: + - supports-color dev: false /@emotion/stylis@0.8.5: @@ -5245,15 +5390,6 @@ packages: resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} dev: false - /@esbuild/aix-ppc64@0.19.11: - resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - requiresBuild: true - dev: false - optional: true - /@esbuild/aix-ppc64@0.21.5: resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} @@ -5276,16 +5412,6 @@ packages: cpu: [arm64] os: [android] requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm64@0.19.11: - resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: false optional: true /@esbuild/android-arm64@0.21.5: @@ -5310,16 +5436,6 @@ packages: cpu: [arm] os: [android] requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm@0.19.11: - resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: false optional: true /@esbuild/android-arm@0.21.5: @@ -5344,16 +5460,6 @@ packages: cpu: [x64] os: [android] requiresBuild: true - dev: true - optional: true - - /@esbuild/android-x64@0.19.11: - resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: false optional: true /@esbuild/android-x64@0.21.5: @@ -5378,16 +5484,6 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-arm64@0.19.11: - resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false optional: true /@esbuild/darwin-arm64@0.21.5: @@ -5412,16 +5508,6 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-x64@0.19.11: - resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false optional: true /@esbuild/darwin-x64@0.21.5: @@ -5446,16 +5532,6 @@ packages: cpu: [arm64] os: [freebsd] requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-arm64@0.19.11: - resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: false optional: true /@esbuild/freebsd-arm64@0.21.5: @@ -5480,16 +5556,6 @@ packages: cpu: [x64] os: [freebsd] requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-x64@0.19.11: - resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: false optional: true /@esbuild/freebsd-x64@0.21.5: @@ -5514,16 +5580,6 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm64@0.19.11: - resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false optional: true /@esbuild/linux-arm64@0.21.5: @@ -5548,16 +5604,6 @@ packages: cpu: [arm] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm@0.19.11: - resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: false optional: true /@esbuild/linux-arm@0.21.5: @@ -5582,16 +5628,6 @@ packages: cpu: [ia32] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ia32@0.19.11: - resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: false optional: true /@esbuild/linux-ia32@0.21.5: @@ -5616,16 +5652,6 @@ packages: cpu: [loong64] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-loong64@0.19.11: - resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: false optional: true /@esbuild/linux-loong64@0.21.5: @@ -5650,16 +5676,6 @@ packages: cpu: [mips64el] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-mips64el@0.19.11: - resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: false optional: true /@esbuild/linux-mips64el@0.21.5: @@ -5684,16 +5700,6 @@ packages: cpu: [ppc64] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ppc64@0.19.11: - resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: false optional: true /@esbuild/linux-ppc64@0.21.5: @@ -5718,16 +5724,6 @@ packages: cpu: [riscv64] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-riscv64@0.19.11: - resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: false optional: true /@esbuild/linux-riscv64@0.21.5: @@ -5752,16 +5748,6 @@ packages: cpu: [s390x] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-s390x@0.19.11: - resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: false optional: true /@esbuild/linux-s390x@0.21.5: @@ -5786,16 +5772,6 @@ packages: cpu: [x64] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-x64@0.19.11: - resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false optional: true /@esbuild/linux-x64@0.21.5: @@ -5820,16 +5796,6 @@ packages: cpu: [x64] os: [netbsd] requiresBuild: true - dev: true - optional: true - - /@esbuild/netbsd-x64@0.19.11: - resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: false optional: true /@esbuild/netbsd-x64@0.21.5: @@ -5862,16 +5828,6 @@ packages: cpu: [x64] os: [openbsd] requiresBuild: true - dev: true - optional: true - - /@esbuild/openbsd-x64@0.19.11: - resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: false optional: true /@esbuild/openbsd-x64@0.21.5: @@ -5896,16 +5852,6 @@ packages: cpu: [x64] os: [sunos] requiresBuild: true - dev: true - optional: true - - /@esbuild/sunos-x64@0.19.11: - resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: false optional: true /@esbuild/sunos-x64@0.21.5: @@ -5930,16 +5876,6 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-arm64@0.19.11: - resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: false optional: true /@esbuild/win32-arm64@0.21.5: @@ -5964,16 +5900,6 @@ packages: cpu: [ia32] os: [win32] requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-ia32@0.19.11: - resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: false optional: true /@esbuild/win32-ia32@0.21.5: @@ -5998,16 +5924,6 @@ packages: cpu: [x64] os: [win32] requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-x64@0.19.11: - resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false optional: true /@esbuild/win32-x64@0.21.5: @@ -6611,7 +6527,7 @@ packages: resolution: {integrity: sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==} engines: {node: '>= 6'} dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.26.0 '@jest/types': 24.9.0 babel-plugin-istanbul: 5.2.0 chalk: 2.4.2 @@ -6635,7 +6551,7 @@ packages: resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.26.0 '@jest/types': 27.5.1 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 @@ -6790,13 +6706,13 @@ packages: resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 /@js-sdsl/ordered-map@4.4.2: resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} @@ -7063,91 +6979,6 @@ packages: - utf-8-validate dev: false - /@next/env@14.2.3: - resolution: {integrity: sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA==} - dev: false - - /@next/swc-darwin-arm64@14.2.3: - resolution: {integrity: sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@next/swc-darwin-x64@14.2.3: - resolution: {integrity: sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@next/swc-linux-arm64-gnu@14.2.3: - resolution: {integrity: sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@next/swc-linux-arm64-musl@14.2.3: - resolution: {integrity: sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@next/swc-linux-x64-gnu@14.2.3: - resolution: {integrity: sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@next/swc-linux-x64-musl@14.2.3: - resolution: {integrity: sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@next/swc-win32-arm64-msvc@14.2.3: - resolution: {integrity: sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@next/swc-win32-ia32-msvc@14.2.3: - resolution: {integrity: sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@next/swc-win32-x64-msvc@14.2.3: - resolution: {integrity: sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false - optional: true - /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} dependencies: @@ -7521,6 +7352,7 @@ packages: hasBin: true dependencies: playwright: 1.44.1 + dev: true /@pmmmwh/react-refresh-webpack-plugin@0.5.13(react-refresh@0.11.0)(webpack-dev-server@4.15.2)(webpack@5.91.0): resolution: {integrity: sha512-odZVYXly+JwzYri9rKqqUAk0cY6zLpv4dxoKinhoJNShV36Gpxf+CyDIILJ4tYsJ1ZxIWs233Y39iVnynvDA/g==} @@ -7556,7 +7388,7 @@ packages: react-refresh: 0.11.0 schema-utils: 3.3.0 source-map: 0.7.4 - webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0) + webpack: 5.91.0(esbuild@0.23.1) webpack-dev-server: 4.15.2(webpack@5.91.0) dev: false @@ -8573,9 +8405,11 @@ packages: optional: true dependencies: '@babel/core': 7.26.0 - '@babel/helper-module-imports': 7.24.3 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) '@rollup/pluginutils': 3.1.0(rollup@2.79.1) rollup: 2.79.1 + transitivePeerDependencies: + - supports-color dev: false /@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1): @@ -9706,7 +9540,7 @@ packages: resolve-url-loader: 5.0.0 sass-loader: 13.3.3(webpack@5.91.0) style-loader: 3.3.4(webpack@5.91.0) - webpack: 5.91.0(esbuild@0.18.20) + webpack: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4) transitivePeerDependencies: - '@rspack/core' - '@types/react' @@ -10204,7 +10038,7 @@ packages: dependencies: '@babel/generator': 7.26.0 '@babel/parser': 7.26.1 - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.25.9(supports-color@5.5.0) '@babel/types': 7.26.0 '@storybook/csf': 0.1.11 '@storybook/types': 7.2.2 @@ -10826,17 +10660,6 @@ packages: - supports-color dev: false - /@swc/counter@0.1.3: - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - dev: false - - /@swc/helpers@0.5.5: - resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} - dependencies: - '@swc/counter': 0.1.3 - tslib: 2.6.2 - dev: false - /@testing-library/dom@10.1.0: resolution: {integrity: sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==} engines: {node: '>=18'} @@ -11594,6 +11417,10 @@ packages: - tedious dev: false + /@types/lodash@4.17.13: + resolution: {integrity: sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==} + dev: false + /@types/lodash@4.17.4: resolution: {integrity: sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==} @@ -11864,7 +11691,7 @@ packages: resolution: {integrity: sha512-mj1aH4cj3XUpMEgVpognma5kHVtbm6U6cHZmEFzCRiXPvKkuHrFr3+yXdGLXvfFRBaQIVshPGHI+hGTOJlhS/g==} deprecated: This is a stub types definition. testing-library__dom provides its own type definitions, so you do not need this installed. dependencies: - '@testing-library/dom': 6.16.0 + '@testing-library/dom': 10.1.0 dev: false /@types/testing-library__react@9.1.3: @@ -12732,6 +12559,16 @@ packages: webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0) webpack-cli: 4.10.0(webpack@5.91.0) + /@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.91.0): + resolution: {integrity: sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==} + engines: {node: '>=14.15.0'} + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + dependencies: + webpack: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.91.0) + /@webpack-cli/info@1.5.0(webpack-cli@4.10.0): resolution: {integrity: sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==} peerDependencies: @@ -12740,6 +12577,16 @@ packages: envinfo: 7.13.0 webpack-cli: 4.10.0(webpack@5.91.0) + /@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.91.0): + resolution: {integrity: sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==} + engines: {node: '>=14.15.0'} + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + dependencies: + webpack: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.91.0) + /@webpack-cli/serve@1.7.0(webpack-cli@4.10.0): resolution: {integrity: sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==} peerDependencies: @@ -12751,6 +12598,20 @@ packages: dependencies: webpack-cli: 4.10.0(webpack@5.91.0) + /@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack@5.91.0): + resolution: {integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==} + engines: {node: '>=14.15.0'} + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + webpack-dev-server: '*' + peerDependenciesMeta: + webpack-dev-server: + optional: true + dependencies: + webpack: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.91.0) + /@welldone-software/why-did-you-render@6.2.3(react@18.3.1): resolution: {integrity: sha512-FQgi90jvC9uw2aALlonJfqaWOvU5UUBBVvdAnS2iryXwCc4YJkKsPJY5Y/LzaND3OIyk8XGUn1vTRn6hcem28Q==} peerDependencies: @@ -12895,6 +12756,13 @@ packages: dependencies: acorn: 8.11.3 + /acorn-import-assertions@1.9.0(acorn@8.13.0): + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.13.0 + /acorn-import-attributes@1.9.5(acorn@8.13.0): resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} peerDependencies: @@ -13701,8 +13569,8 @@ packages: peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.23.0 - caniuse-lite: 1.0.30001621 + browserslist: 4.24.2 + caniuse-lite: 1.0.30001672 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -13838,7 +13706,7 @@ packages: loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0) + webpack: 5.91.0(esbuild@0.23.1) dev: false /babel-loader@9.1.3(@babel/core@7.26.0)(webpack@5.91.0): @@ -13857,7 +13725,7 @@ packages: /babel-plugin-emotion@10.2.2: resolution: {integrity: sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA==} dependencies: - '@babel/helper-module-imports': 7.24.3 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) '@emotion/hash': 0.8.0 '@emotion/memoize': 0.7.4 '@emotion/serialize': 0.11.16 @@ -13867,6 +13735,8 @@ packages: escape-string-regexp: 1.0.5 find-root: 1.1.0 source-map: 0.5.7 + transitivePeerDependencies: + - supports-color dev: false /babel-plugin-istanbul@5.2.0: @@ -14004,19 +13874,20 @@ packages: transitivePeerDependencies: - supports-color - /babel-plugin-styled-components@2.1.4(@babel/core@7.26.0)(styled-components@5.3.11): + /babel-plugin-styled-components@2.1.4(@babel/core@7.26.0)(styled-components@5.3.11)(supports-color@5.5.0): resolution: {integrity: sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==} peerDependencies: styled-components: '>= 2' dependencies: '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-module-imports': 7.24.3 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.26.0) lodash: 4.17.21 picomatch: 2.3.1 styled-components: 5.3.11(@babel/core@7.26.0)(react-dom@18.3.1)(react-is@18.3.1)(react@18.3.1) transitivePeerDependencies: - '@babel/core' + - supports-color dev: false /babel-plugin-syntax-jsx@6.18.0: @@ -14618,6 +14489,10 @@ packages: engines: {node: '>=0.4'} dev: false + /buffer-from@0.1.2: + resolution: {integrity: sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==} + dev: false + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -14847,8 +14722,8 @@ packages: /caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: - browserslist: 4.23.0 - caniuse-lite: 1.0.30001621 + browserslist: 4.24.2 + caniuse-lite: 1.0.30001672 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 dev: false @@ -15142,6 +15017,7 @@ packages: engines: {node: '>=8'} dependencies: restore-cursor: 3.1.0 + dev: true /cli-spinners@2.6.1: resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==} @@ -15151,6 +15027,7 @@ packages: /cli-spinners@2.9.2: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} + dev: true /cli-table3@0.6.5: resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} @@ -15166,10 +15043,6 @@ packages: engines: {node: '>= 10'} dev: true - /client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - dev: false - /cliui@3.2.0: resolution: {integrity: sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==} dependencies: @@ -15220,6 +15093,7 @@ packages: /clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} + dev: true /clone@2.1.2: resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} @@ -15388,12 +15262,6 @@ packages: /commander@10.0.1: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} - dev: false - - /commander@11.1.0: - resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} - engines: {node: '>=16'} - dev: false /commander@2.15.1: resolution: {integrity: sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==} @@ -15564,8 +15432,8 @@ packages: /constantinople@4.0.1: resolution: {integrity: sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==} dependencies: - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 + '@babel/parser': 7.26.1 + '@babel/types': 7.26.0 dev: false /constants-browserify@1.0.0: @@ -15768,7 +15636,7 @@ packages: vary: 1.1.2 dev: false - /cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6)(ts-node@10.9.2)(typescript@4.9.5): + /cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6)(ts-node@10.9.2)(typescript@5.6.3): resolution: {integrity: sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==} engines: {node: '>=v14.21.3'} peerDependencies: @@ -15778,9 +15646,9 @@ packages: typescript: '>=4' dependencies: '@types/node': 20.5.1 - cosmiconfig: 8.3.6(typescript@4.9.5) - ts-node: 10.9.2(@types/node@20.5.1)(typescript@4.9.5) - typescript: 4.9.5 + cosmiconfig: 8.3.6(typescript@5.6.3) + ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.6.3) + typescript: 5.6.3 dev: true /cosmiconfig@6.0.0: @@ -15834,7 +15702,6 @@ packages: parse-json: 5.2.0 path-type: 4.0.0 typescript: 5.6.3 - dev: true /country-codes-list@1.6.11: resolution: {integrity: sha512-MsHoJ83tGyv9tFspeI8yHBomiTH4rruHxdWhNWGG9d1ykXgLyawh/VykmYPH5KqduY+9Q2RUNlL2/KGkXJqANA==} @@ -16058,13 +15925,13 @@ packages: engines: {node: '>=4'} dev: false - /css-declaration-sorter@6.4.1(postcss@8.4.38): + /css-declaration-sorter@6.4.1(postcss@8.4.47): resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} engines: {node: ^10 || ^12 || >=14} peerDependencies: postcss: ^8.0.9 dependencies: - postcss: 8.4.38 + postcss: 8.4.47 dev: false /css-has-pseudo@3.0.4(postcss@8.4.38): @@ -16096,15 +15963,15 @@ packages: webpack: optional: true dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) - postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) - postcss-modules-scope: 3.2.0(postcss@8.4.38) - postcss-modules-values: 4.0.0(postcss@8.4.38) + icss-utils: 5.1.0(postcss@8.4.47) + postcss: 8.4.47 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.47) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.47) + postcss-modules-scope: 3.2.0(postcss@8.4.47) + postcss-modules-values: 4.0.0(postcss@8.4.47) postcss-value-parser: 4.2.0 semver: 7.6.2 - webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0) + webpack: 5.91.0(esbuild@0.23.1) /css-minimizer-webpack-plugin@3.4.1(esbuild@0.23.1)(webpack@5.91.0): resolution: {integrity: sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==} @@ -16125,14 +15992,14 @@ packages: esbuild: optional: true dependencies: - cssnano: 5.1.15(postcss@8.4.38) + cssnano: 5.1.15(postcss@8.4.47) esbuild: 0.23.1 jest-worker: 27.5.1 - postcss: 8.4.38 + postcss: 8.4.47 schema-utils: 4.2.0 serialize-javascript: 6.0.2 source-map: 0.6.1 - webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0) + webpack: 5.91.0(esbuild@0.23.1) dev: false /css-prefers-color-scheme@6.0.3(postcss@8.4.38): @@ -16224,62 +16091,62 @@ packages: engines: {node: '>=4'} hasBin: true - /cssnano-preset-default@5.2.14(postcss@8.4.38): + /cssnano-preset-default@5.2.14(postcss@8.4.47): resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - css-declaration-sorter: 6.4.1(postcss@8.4.38) - cssnano-utils: 3.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-calc: 8.2.4(postcss@8.4.38) - postcss-colormin: 5.3.1(postcss@8.4.38) - postcss-convert-values: 5.1.3(postcss@8.4.38) - postcss-discard-comments: 5.1.2(postcss@8.4.38) - postcss-discard-duplicates: 5.1.0(postcss@8.4.38) - postcss-discard-empty: 5.1.1(postcss@8.4.38) - postcss-discard-overridden: 5.1.0(postcss@8.4.38) - postcss-merge-longhand: 5.1.7(postcss@8.4.38) - postcss-merge-rules: 5.1.4(postcss@8.4.38) - postcss-minify-font-values: 5.1.0(postcss@8.4.38) - postcss-minify-gradients: 5.1.1(postcss@8.4.38) - postcss-minify-params: 5.1.4(postcss@8.4.38) - postcss-minify-selectors: 5.2.1(postcss@8.4.38) - postcss-normalize-charset: 5.1.0(postcss@8.4.38) - postcss-normalize-display-values: 5.1.0(postcss@8.4.38) - postcss-normalize-positions: 5.1.1(postcss@8.4.38) - postcss-normalize-repeat-style: 5.1.1(postcss@8.4.38) - postcss-normalize-string: 5.1.0(postcss@8.4.38) - postcss-normalize-timing-functions: 5.1.0(postcss@8.4.38) - postcss-normalize-unicode: 5.1.1(postcss@8.4.38) - postcss-normalize-url: 5.1.0(postcss@8.4.38) - postcss-normalize-whitespace: 5.1.1(postcss@8.4.38) - postcss-ordered-values: 5.1.3(postcss@8.4.38) - postcss-reduce-initial: 5.1.2(postcss@8.4.38) - postcss-reduce-transforms: 5.1.0(postcss@8.4.38) - postcss-svgo: 5.1.0(postcss@8.4.38) - postcss-unique-selectors: 5.1.1(postcss@8.4.38) + css-declaration-sorter: 6.4.1(postcss@8.4.47) + cssnano-utils: 3.1.0(postcss@8.4.47) + postcss: 8.4.47 + postcss-calc: 8.2.4(postcss@8.4.47) + postcss-colormin: 5.3.1(postcss@8.4.47) + postcss-convert-values: 5.1.3(postcss@8.4.47) + postcss-discard-comments: 5.1.2(postcss@8.4.47) + postcss-discard-duplicates: 5.1.0(postcss@8.4.47) + postcss-discard-empty: 5.1.1(postcss@8.4.47) + postcss-discard-overridden: 5.1.0(postcss@8.4.47) + postcss-merge-longhand: 5.1.7(postcss@8.4.47) + postcss-merge-rules: 5.1.4(postcss@8.4.47) + postcss-minify-font-values: 5.1.0(postcss@8.4.47) + postcss-minify-gradients: 5.1.1(postcss@8.4.47) + postcss-minify-params: 5.1.4(postcss@8.4.47) + postcss-minify-selectors: 5.2.1(postcss@8.4.47) + postcss-normalize-charset: 5.1.0(postcss@8.4.47) + postcss-normalize-display-values: 5.1.0(postcss@8.4.47) + postcss-normalize-positions: 5.1.1(postcss@8.4.47) + postcss-normalize-repeat-style: 5.1.1(postcss@8.4.47) + postcss-normalize-string: 5.1.0(postcss@8.4.47) + postcss-normalize-timing-functions: 5.1.0(postcss@8.4.47) + postcss-normalize-unicode: 5.1.1(postcss@8.4.47) + postcss-normalize-url: 5.1.0(postcss@8.4.47) + postcss-normalize-whitespace: 5.1.1(postcss@8.4.47) + postcss-ordered-values: 5.1.3(postcss@8.4.47) + postcss-reduce-initial: 5.1.2(postcss@8.4.47) + postcss-reduce-transforms: 5.1.0(postcss@8.4.47) + postcss-svgo: 5.1.0(postcss@8.4.47) + postcss-unique-selectors: 5.1.1(postcss@8.4.47) dev: false - /cssnano-utils@3.1.0(postcss@8.4.38): + /cssnano-utils@3.1.0(postcss@8.4.47): resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.38 + postcss: 8.4.47 dev: false - /cssnano@5.1.15(postcss@8.4.38): + /cssnano@5.1.15(postcss@8.4.47): resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - cssnano-preset-default: 5.2.14(postcss@8.4.38) + cssnano-preset-default: 5.2.14(postcss@8.4.47) lilconfig: 2.1.0 - postcss: 8.4.38 + postcss: 8.4.47 yaml: 1.10.2 dev: false @@ -16423,11 +16290,6 @@ packages: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} dev: false - /debounce@2.0.0: - resolution: {integrity: sha512-xRetU6gL1VJbs85Mc4FoEGSjQxzpdxRyFhe3lmWFyy2EzydIcD4xzUvRJMD+NPDfMwKNhxa3PvsIOU32luIWeA==} - engines: {node: '>=18'} - dev: false - /debug@2.6.9(supports-color@5.5.0): resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -16523,6 +16385,10 @@ packages: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} dev: false + /declaration-bundler-webpack-plugin@1.0.3: + resolution: {integrity: sha512-bgeoSOZYTOOdiNUZd/U8K6Z+6IrM/X+DgUcm3/VI1l130lzOBeL+ObetjIkKksxcj0zUJbLaFRFumFGYDOQ9fg==} + dev: false + /decode-uri-component@0.2.2: resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} engines: {node: '>=0.10'} @@ -16650,6 +16516,7 @@ packages: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: clone: 1.0.4 + dev: true /define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} @@ -17082,7 +16949,7 @@ packages: webpack: ^4 || ^5 dependencies: dotenv-defaults: 2.0.2 - webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0) + webpack: 5.91.0(esbuild@0.23.1) dev: false /dotenv@10.0.0: @@ -17100,6 +16967,12 @@ packages: engines: {node: '>=10'} dev: false + /duplexer2@0.1.4: + resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} + dependencies: + readable-stream: 2.3.8 + dev: false + /duplexer3@0.1.5: resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} dev: false @@ -17552,38 +17425,6 @@ packages: '@esbuild/win32-arm64': 0.18.20 '@esbuild/win32-ia32': 0.18.20 '@esbuild/win32-x64': 0.18.20 - dev: true - - /esbuild@0.19.11: - resolution: {integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/aix-ppc64': 0.19.11 - '@esbuild/android-arm': 0.19.11 - '@esbuild/android-arm64': 0.19.11 - '@esbuild/android-x64': 0.19.11 - '@esbuild/darwin-arm64': 0.19.11 - '@esbuild/darwin-x64': 0.19.11 - '@esbuild/freebsd-arm64': 0.19.11 - '@esbuild/freebsd-x64': 0.19.11 - '@esbuild/linux-arm': 0.19.11 - '@esbuild/linux-arm64': 0.19.11 - '@esbuild/linux-ia32': 0.19.11 - '@esbuild/linux-loong64': 0.19.11 - '@esbuild/linux-mips64el': 0.19.11 - '@esbuild/linux-ppc64': 0.19.11 - '@esbuild/linux-riscv64': 0.19.11 - '@esbuild/linux-s390x': 0.19.11 - '@esbuild/linux-x64': 0.19.11 - '@esbuild/netbsd-x64': 0.19.11 - '@esbuild/openbsd-x64': 0.19.11 - '@esbuild/sunos-x64': 0.19.11 - '@esbuild/win32-arm64': 0.19.11 - '@esbuild/win32-ia32': 0.19.11 - '@esbuild/win32-x64': 0.19.11 - dev: false /esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} @@ -18180,7 +18021,7 @@ packages: micromatch: 4.0.7 normalize-path: 3.0.0 schema-utils: 4.2.0 - webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0) + webpack: 5.91.0(esbuild@0.23.1) dev: false /eslint@8.57.0: @@ -18345,7 +18186,7 @@ packages: resolution: {integrity: sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==} engines: {node: '>=8.3.0'} dependencies: - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.25.9(supports-color@5.5.0) '@babel/types': 7.26.0 c8: 7.14.0 transitivePeerDependencies: @@ -18848,7 +18689,7 @@ packages: dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0) + webpack: 5.91.0(esbuild@0.23.1) dev: false /file-selector@0.4.0: @@ -19159,7 +19000,7 @@ packages: vue-template-compiler: optional: true dependencies: - '@babel/code-frame': 7.10.4 + '@babel/code-frame': 7.26.0 chalk: 2.4.2 eslint: 8.57.0 micromatch: 3.1.10(supports-color@5.5.0) @@ -19167,7 +19008,7 @@ packages: semver: 5.7.2 tapable: 1.1.3 typescript: 4.9.5 - webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0) + webpack: 5.91.0(esbuild@0.23.1) worker-rpc: 0.1.1 transitivePeerDependencies: - supports-color @@ -19187,7 +19028,7 @@ packages: vue-template-compiler: optional: true dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.26.0 '@types/json-schema': 7.0.15 chalk: 4.1.2 chokidar: 3.6.0 @@ -19202,7 +19043,30 @@ packages: semver: 7.6.2 tapable: 1.1.3 typescript: 4.9.5 - webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0) + webpack: 5.91.0(esbuild@0.23.1) + dev: false + + /fork-ts-checker-webpack-plugin@9.0.2(typescript@5.6.3)(webpack@5.91.0): + resolution: {integrity: sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==} + engines: {node: '>=12.13.0', yarn: '>=1.0.0'} + peerDependencies: + typescript: '>3.6.0' + webpack: ^5.11.0 + dependencies: + '@babel/code-frame': 7.26.0 + chalk: 4.1.2 + chokidar: 3.6.0 + cosmiconfig: 8.3.6(typescript@5.6.3) + deepmerge: 4.3.1 + fs-extra: 10.1.0 + memfs: 3.5.3 + minimatch: 3.1.2 + node-abort-controller: 3.1.1 + schema-utils: 3.3.0 + semver: 7.6.2 + tapable: 2.2.1 + typescript: 5.6.3 + webpack: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4) dev: false /form-data@2.3.3: @@ -19395,6 +19259,7 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true + dev: true optional: true /fsevents@2.3.3: @@ -19723,18 +19588,6 @@ packages: - supports-color dev: false - /glob@10.3.4: - resolution: {integrity: sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - dependencies: - foreground-child: 3.1.1 - jackspeak: 2.3.6 - minimatch: 9.0.4 - minipass: 7.1.2 - path-scurry: 1.11.1 - dev: false - /glob@10.4.1: resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==} engines: {node: '>=16 || 14 >=14.18'} @@ -19752,7 +19605,7 @@ packages: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.0.4 + minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 dev: true @@ -20416,6 +20269,17 @@ packages: selderee: 0.11.0 dev: false + /html-tokenize@2.0.1: + resolution: {integrity: sha512-QY6S+hZ0f5m1WT8WffYN+Hg+xm/w5I8XeUcAq/ZYP5wVC8xbKi4Whhru3FtrAebD5EhBW8rmFzkDI6eCAuFe2w==} + hasBin: true + dependencies: + buffer-from: 0.1.2 + inherits: 2.0.4 + minimist: 1.2.8 + readable-stream: 1.0.34 + through2: 0.4.2 + dev: false + /html-webpack-plugin@5.6.0(webpack@5.91.0): resolution: {integrity: sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==} engines: {node: '>=10.13.0'} @@ -20433,7 +20297,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0) + webpack: 5.91.0(esbuild@0.23.1) dev: false /htmlparser2@6.1.0: @@ -20701,13 +20565,13 @@ packages: dependencies: safer-buffer: 2.1.2 - /icss-utils@5.1.0(postcss@8.4.38): + /icss-utils@5.1.0(postcss@8.4.47): resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.38 + postcss: 8.4.47 /idb@7.1.1: resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} @@ -20897,6 +20761,10 @@ packages: resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==} engines: {node: '>= 0.10'} + /interpret@3.1.1: + resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} + engines: {node: '>=10.13.0'} + /intl-format-cache@4.3.1: resolution: {integrity: sha512-OEUYNA7D06agqPOYhbTkl0T8HA3QKSuwWh1HiClEnpd9vw7N+3XsQt5iZ0GUEchp5CW1fQk/tary+NsbF3yQ1Q==} dev: false @@ -21189,6 +21057,7 @@ packages: /is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} + dev: true /is-invalid-path@1.0.2: resolution: {integrity: sha512-6KLcFrPCEP3AFXMfnWrIFkZpYNBVzZAoBJJDEZKtI3LXkaDjM3uFMJQjxiizUuZTZ9Oh9FNv/soXbx5TcpaDmA==} @@ -21439,6 +21308,7 @@ packages: /is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} + dev: true /is-utf8@0.2.1: resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} @@ -21618,15 +21488,6 @@ packages: set-function-name: 2.0.2 dev: false - /jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - dev: false - /jackspeak@3.1.2: resolution: {integrity: sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==} engines: {node: '>=14'} @@ -21808,7 +21669,7 @@ packages: pretty-format: 27.5.1 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.2(@types/node@20.5.1)(typescript@4.9.5) + ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.6.3) transitivePeerDependencies: - bufferutil - canvas @@ -21850,7 +21711,7 @@ packages: resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - chalk: 4.1.0 + chalk: 4.1.2 diff-sequences: 29.6.3 jest-get-type: 29.6.3 pretty-format: 29.7.0 @@ -22052,7 +21913,7 @@ packages: resolution: {integrity: sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==} engines: {node: '>= 6'} dependencies: - '@babel/traverse': 7.24.5(supports-color@5.5.0) + '@babel/traverse': 7.25.9(supports-color@5.5.0) '@jest/environment': 24.9.0 '@jest/test-result': 24.9.0 '@jest/types': 24.9.0 @@ -22137,7 +21998,7 @@ packages: resolution: {integrity: sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==} engines: {node: '>= 6'} dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.26.0 '@jest/test-result': 24.9.0 '@jest/types': 24.9.0 '@types/stack-utils': 1.0.1 @@ -22153,7 +22014,7 @@ packages: resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.26.0 '@jest/types': 27.5.1 '@types/stack-utils': 2.0.3 chalk: 4.1.2 @@ -22168,7 +22029,7 @@ packages: resolution: {integrity: sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.26.0 '@jest/types': 28.1.3 '@types/stack-utils': 2.0.3 chalk: 4.1.2 @@ -22452,7 +22313,7 @@ packages: '@babel/core': 7.26.0 '@babel/generator': 7.26.0 '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.26.0) - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.25.9(supports-color@5.5.0) '@babel/types': 7.26.0 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 @@ -23410,7 +23271,7 @@ packages: webpack: ^5.0.0 dependencies: less: 4.2.0 - webpack: 5.91.0(esbuild@0.18.20) + webpack: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4) dev: true /less@4.2.0: @@ -23756,6 +23617,7 @@ packages: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 + dev: true /log4js@6.9.1: resolution: {integrity: sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==} @@ -24305,7 +24167,7 @@ packages: dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0) + webpack: 5.91.0(esbuild@0.23.1) dev: false /minimalistic-assert@1.0.1: @@ -24744,9 +24606,16 @@ packages: array-differ: 3.0.0 array-union: 2.1.0 arrify: 2.0.1 - minimatch: 3.0.5 + minimatch: 3.1.2 dev: true + /multipipe@1.0.2: + resolution: {integrity: sha512-6uiC9OvY71vzSGX8lZvSqscE7ft9nPupJ8fMjrCNRAUy2LREUW42UL+V/NTrogr6rFgRydUrCX4ZitfpSNkSCQ==} + dependencies: + duplexer2: 0.1.4 + object-assign: 4.1.1 + dev: false + /mustache@3.2.1: resolution: {integrity: sha512-RERvMFdLpaFfSRIEe632yDm5nsd0SDKn8hGmcUwswnyiE5mtdZLDybtHAz6hjJhawokF0hXvGLtx9mrQfm6FkA==} engines: {npm: '>=1.4.0'} @@ -24925,49 +24794,6 @@ packages: resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} dev: false - /next@14.2.3(@babel/core@7.24.5)(@playwright/test@1.44.1)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==} - engines: {node: '>=18.17.0'} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - '@playwright/test': ^1.41.2 - react: ^18.2.0 - react-dom: ^18.2.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - '@playwright/test': - optional: true - sass: - optional: true - dependencies: - '@next/env': 14.2.3 - '@playwright/test': 1.44.1 - '@swc/helpers': 0.5.5 - busboy: 1.6.0 - caniuse-lite: 1.0.30001672 - graceful-fs: 4.2.11 - postcss: 8.4.31 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - styled-jsx: 5.1.1(@babel/core@7.24.5)(react@18.3.1) - optionalDependencies: - '@next/swc-darwin-arm64': 14.2.3 - '@next/swc-darwin-x64': 14.2.3 - '@next/swc-linux-arm64-gnu': 14.2.3 - '@next/swc-linux-arm64-musl': 14.2.3 - '@next/swc-linux-x64-gnu': 14.2.3 - '@next/swc-linux-x64-musl': 14.2.3 - '@next/swc-win32-arm64-msvc': 14.2.3 - '@next/swc-win32-ia32-msvc': 14.2.3 - '@next/swc-win32-x64-msvc': 14.2.3 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - dev: false - /nice-try@1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} @@ -25002,6 +24828,10 @@ packages: dev: false optional: true + /node-abort-controller@3.1.1: + resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + dev: false + /node-cache@4.2.1: resolution: {integrity: sha512-BOb67bWg2dTyax5kdef5WfU3X8xu4wPg+zHzkvls0Q/QpYycIFRLEEIdAx9Wma43DxG6Qzn4illdZoYseKWa4A==} engines: {node: '>= 0.4.6'} @@ -25438,7 +25268,7 @@ packages: '@yarnpkg/lockfile': 1.1.0 '@yarnpkg/parsers': 3.0.0-rc.46 axios: 1.7.2 - chalk: 4.1.0 + chalk: 4.1.2 cli-cursor: 3.1.0 cli-spinners: 2.6.1 cliui: 8.0.1 @@ -25583,6 +25413,10 @@ packages: call-bind: 1.0.7 define-properties: 1.2.1 + /object-keys@0.4.0: + resolution: {integrity: sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==} + dev: false + /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} @@ -25838,7 +25672,7 @@ packages: engines: {node: '>=10'} dependencies: bl: 4.1.0 - chalk: 4.1.0 + chalk: 4.1.2 cli-cursor: 3.1.0 cli-spinners: 2.6.1 is-interactive: 1.0.0 @@ -25860,6 +25694,7 @@ packages: log-symbols: 4.1.0 strip-ansi: 6.0.1 wcwidth: 1.0.1 + dev: true /ordered-read-streams@1.0.1: resolution: {integrity: sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==} @@ -26170,7 +26005,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.26.0 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -26511,6 +26346,8 @@ packages: react-popper: 2.3.0(@popperjs/core@2.11.8)(react-dom@18.3.1)(react@18.3.1) react-select: 3.2.0(react-dom@18.3.1)(react@18.3.1) react-textarea-autosize: 7.1.2(react@18.3.1) + transitivePeerDependencies: + - supports-color dev: false /plaid@10.9.0: @@ -26535,6 +26372,7 @@ packages: resolution: {integrity: sha512-wh0JWtYTrhv1+OSsLPgFzGzt67Y7BE/ZS3jEqgGBlp2ppp1ZDj8c+9IARNW4dwf1poq5MgHreEM2KV/GuR4cFA==} engines: {node: '>=16'} hasBin: true + dev: true /playwright@1.44.1: resolution: {integrity: sha512-qr/0UJ5CFAtloI3avF95Y0L1xQo6r3LQArLIg/z/PoGJ6xa+EwzrwO5lpNr/09STxdHuUoP2mvuELJS+hLdtgg==} @@ -26544,6 +26382,7 @@ packages: playwright-core: 1.44.1 optionalDependencies: fsevents: 2.3.2 + dev: true /plugin-error@1.0.1: resolution: {integrity: sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==} @@ -26618,12 +26457,12 @@ packages: postcss: 8.4.38 dev: false - /postcss-calc@8.2.4(postcss@8.4.38): + /postcss-calc@8.2.4(postcss@8.4.47): resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} peerDependencies: postcss: ^8.2.2 dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-selector-parser: 6.1.0 postcss-value-parser: 4.2.0 dev: false @@ -26668,27 +26507,27 @@ packages: postcss-value-parser: 4.2.0 dev: false - /postcss-colormin@5.3.1(postcss@8.4.38): + /postcss-colormin@5.3.1(postcss@8.4.47): resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.0 + browserslist: 4.24.2 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 dev: false - /postcss-convert-values@5.1.3(postcss@8.4.38): + /postcss-convert-values@5.1.3(postcss@8.4.47): resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.0 - postcss: 8.4.38 + browserslist: 4.24.2 + postcss: 8.4.47 postcss-value-parser: 4.2.0 dev: false @@ -26732,40 +26571,40 @@ packages: postcss-selector-parser: 6.1.0 dev: false - /postcss-discard-comments@5.1.2(postcss@8.4.38): + /postcss-discard-comments@5.1.2(postcss@8.4.47): resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.38 + postcss: 8.4.47 dev: false - /postcss-discard-duplicates@5.1.0(postcss@8.4.38): + /postcss-discard-duplicates@5.1.0(postcss@8.4.47): resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.38 + postcss: 8.4.47 dev: false - /postcss-discard-empty@5.1.1(postcss@8.4.38): + /postcss-discard-empty@5.1.1(postcss@8.4.47): resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.38 + postcss: 8.4.47 dev: false - /postcss-discard-overridden@5.1.0(postcss@8.4.38): + /postcss-discard-overridden@5.1.0(postcss@8.4.47): resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.38 + postcss: 8.4.47 dev: false /postcss-double-position-gradients@3.1.2(postcss@8.4.38): @@ -26844,18 +26683,6 @@ packages: postcss-value-parser: 4.2.0 dev: false - /postcss-import@15.1.0(postcss@8.4.38): - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.8 - dev: false - /postcss-import@15.1.0(postcss@8.4.47): resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} @@ -26876,16 +26703,6 @@ packages: postcss: 8.4.38 dev: false - /postcss-js@4.0.1(postcss@8.4.38): - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - dependencies: - camelcase-css: 2.0.1 - postcss: 8.4.38 - dev: false - /postcss-js@4.0.1(postcss@8.4.47): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} @@ -26907,24 +26724,6 @@ packages: postcss-value-parser: 4.2.0 dev: false - /postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2): - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - dependencies: - lilconfig: 3.1.1 - postcss: 8.4.38 - ts-node: 10.9.2(@types/node@20.5.1)(typescript@4.9.5) - yaml: 2.4.2 - dev: false - /postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2): resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} engines: {node: '>= 14'} @@ -26939,7 +26738,7 @@ packages: dependencies: lilconfig: 3.1.1 postcss: 8.4.47 - ts-node: 10.9.2(@types/node@20.5.1)(typescript@4.9.5) + ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.6.3) yaml: 2.4.2 dev: false @@ -26995,7 +26794,7 @@ packages: klona: 2.0.6 postcss: 8.4.38 semver: 7.6.2 - webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0) + webpack: 5.91.0(esbuild@0.23.1) dev: false /postcss-loader@7.3.4(postcss@8.4.47)(typescript@5.6.3)(webpack@5.91.0): @@ -27009,7 +26808,7 @@ packages: jiti: 1.21.0 postcss: 8.4.47 semver: 7.6.2 - webpack: 5.91.0(esbuild@0.18.20) + webpack: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4) transitivePeerDependencies: - typescript dev: true @@ -27032,120 +26831,110 @@ packages: postcss: 8.4.38 dev: false - /postcss-merge-longhand@5.1.7(postcss@8.4.38): + /postcss-merge-longhand@5.1.7(postcss@8.4.47): resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - stylehacks: 5.1.1(postcss@8.4.38) + stylehacks: 5.1.1(postcss@8.4.47) dev: false - /postcss-merge-rules@5.1.4(postcss@8.4.38): + /postcss-merge-rules@5.1.4(postcss@8.4.47): resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.0 + browserslist: 4.24.2 caniuse-api: 3.0.0 - cssnano-utils: 3.1.0(postcss@8.4.38) - postcss: 8.4.38 + cssnano-utils: 3.1.0(postcss@8.4.47) + postcss: 8.4.47 postcss-selector-parser: 6.1.0 dev: false - /postcss-minify-font-values@5.1.0(postcss@8.4.38): + /postcss-minify-font-values@5.1.0(postcss@8.4.47): resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 dev: false - /postcss-minify-gradients@5.1.1(postcss@8.4.38): + /postcss-minify-gradients@5.1.1(postcss@8.4.47): resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: colord: 2.9.3 - cssnano-utils: 3.1.0(postcss@8.4.38) - postcss: 8.4.38 + cssnano-utils: 3.1.0(postcss@8.4.47) + postcss: 8.4.47 postcss-value-parser: 4.2.0 dev: false - /postcss-minify-params@5.1.4(postcss@8.4.38): + /postcss-minify-params@5.1.4(postcss@8.4.47): resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.0 - cssnano-utils: 3.1.0(postcss@8.4.38) - postcss: 8.4.38 + browserslist: 4.24.2 + cssnano-utils: 3.1.0(postcss@8.4.47) + postcss: 8.4.47 postcss-value-parser: 4.2.0 dev: false - /postcss-minify-selectors@5.2.1(postcss@8.4.38): + /postcss-minify-selectors@5.2.1(postcss@8.4.47): resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-selector-parser: 6.1.0 dev: false - /postcss-modules-extract-imports@3.1.0(postcss@8.4.38): + /postcss-modules-extract-imports@3.1.0(postcss@8.4.47): resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.38 + postcss: 8.4.47 - /postcss-modules-local-by-default@4.0.5(postcss@8.4.38): + /postcss-modules-local-by-default@4.0.5(postcss@8.4.47): resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 + icss-utils: 5.1.0(postcss@8.4.47) + postcss: 8.4.47 postcss-selector-parser: 6.1.0 postcss-value-parser: 4.2.0 - /postcss-modules-scope@3.2.0(postcss@8.4.38): + /postcss-modules-scope@3.2.0(postcss@8.4.47): resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-selector-parser: 6.1.0 - /postcss-modules-values@4.0.0(postcss@8.4.38): + /postcss-modules-values@4.0.0(postcss@8.4.47): resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 - - /postcss-nested@6.0.1(postcss@8.4.38): - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.1.0 - dev: false + icss-utils: 5.1.0(postcss@8.4.47) + postcss: 8.4.47 /postcss-nested@6.0.1(postcss@8.4.47): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} @@ -27168,94 +26957,94 @@ packages: postcss-selector-parser: 6.1.0 dev: false - /postcss-normalize-charset@5.1.0(postcss@8.4.38): + /postcss-normalize-charset@5.1.0(postcss@8.4.47): resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.38 + postcss: 8.4.47 dev: false - /postcss-normalize-display-values@5.1.0(postcss@8.4.38): + /postcss-normalize-display-values@5.1.0(postcss@8.4.47): resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 dev: false - /postcss-normalize-positions@5.1.1(postcss@8.4.38): + /postcss-normalize-positions@5.1.1(postcss@8.4.47): resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 dev: false - /postcss-normalize-repeat-style@5.1.1(postcss@8.4.38): + /postcss-normalize-repeat-style@5.1.1(postcss@8.4.47): resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 dev: false - /postcss-normalize-string@5.1.0(postcss@8.4.38): + /postcss-normalize-string@5.1.0(postcss@8.4.47): resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 dev: false - /postcss-normalize-timing-functions@5.1.0(postcss@8.4.38): + /postcss-normalize-timing-functions@5.1.0(postcss@8.4.47): resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 dev: false - /postcss-normalize-unicode@5.1.1(postcss@8.4.38): + /postcss-normalize-unicode@5.1.1(postcss@8.4.47): resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.0 - postcss: 8.4.38 + browserslist: 4.24.2 + postcss: 8.4.47 postcss-value-parser: 4.2.0 dev: false - /postcss-normalize-url@5.1.0(postcss@8.4.38): + /postcss-normalize-url@5.1.0(postcss@8.4.47): resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: normalize-url: 6.1.0 - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 dev: false - /postcss-normalize-whitespace@5.1.1(postcss@8.4.38): + /postcss-normalize-whitespace@5.1.1(postcss@8.4.47): resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 dev: false @@ -27282,14 +27071,14 @@ packages: postcss: 8.4.38 dev: false - /postcss-ordered-values@5.1.3(postcss@8.4.38): + /postcss-ordered-values@5.1.3(postcss@8.4.47): resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - cssnano-utils: 3.1.0(postcss@8.4.38) - postcss: 8.4.38 + cssnano-utils: 3.1.0(postcss@8.4.47) + postcss: 8.4.47 postcss-value-parser: 4.2.0 dev: false @@ -27342,7 +27131,7 @@ packages: '@csstools/postcss-trigonometric-functions': 1.0.2(postcss@8.4.38) '@csstools/postcss-unset-value': 1.0.2(postcss@8.4.38) autoprefixer: 10.4.19(postcss@8.4.38) - browserslist: 4.23.0 + browserslist: 4.24.2 css-blank-pseudo: 3.0.3(postcss@8.4.38) css-has-pseudo: 3.0.4(postcss@8.4.38) css-prefers-color-scheme: 6.0.3(postcss@8.4.38) @@ -27389,24 +27178,24 @@ packages: postcss-selector-parser: 6.1.0 dev: false - /postcss-reduce-initial@5.1.2(postcss@8.4.38): + /postcss-reduce-initial@5.1.2(postcss@8.4.47): resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.0 + browserslist: 4.24.2 caniuse-api: 3.0.0 - postcss: 8.4.38 + postcss: 8.4.47 dev: false - /postcss-reduce-transforms@5.1.0(postcss@8.4.38): + /postcss-reduce-transforms@5.1.0(postcss@8.4.47): resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 dev: false @@ -27435,24 +27224,24 @@ packages: cssesc: 3.0.0 util-deprecate: 1.0.2 - /postcss-svgo@5.1.0(postcss@8.4.38): + /postcss-svgo@5.1.0(postcss@8.4.47): resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 svgo: 2.8.0 dev: false - /postcss-unique-selectors@5.1.1(postcss@8.4.38): + /postcss-unique-selectors@5.1.1(postcss@8.4.47): resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-selector-parser: 6.1.0 dev: false @@ -27476,15 +27265,6 @@ packages: source-map: 0.6.1 dev: false - /postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.7 - picocolors: 1.1.1 - source-map-js: 1.2.1 - dev: false - /postcss@8.4.38: resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} @@ -28383,7 +28163,7 @@ packages: strip-ansi: 6.0.0 text-table: 0.2.0 typescript: 4.9.5 - webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0) + webpack: 5.91.0(esbuild@0.23.1) transitivePeerDependencies: - eslint - supports-color @@ -28400,9 +28180,9 @@ packages: typescript: optional: true dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.26.0 address: 1.2.2 - browserslist: 4.23.0 + browserslist: 4.24.2 chalk: 4.1.2 cross-spawn: 7.0.3 detect-port-alt: 1.1.6 @@ -28425,7 +28205,7 @@ packages: strip-ansi: 6.0.1 text-table: 0.2.0 typescript: 4.9.5 - webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0) + webpack: 5.91.0(esbuild@0.23.1) transitivePeerDependencies: - eslint - supports-color @@ -28515,37 +28295,6 @@ packages: react-is: 18.1.0 dev: true - /react-email@3.0.1(@playwright/test@1.44.1)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-G4Bkx2ULIScy/0Z8nnWywHt0W1iTkaYCdh9rWNuQ3eVZ6B3ttTUDE9uUy3VNQ8dtQbmG0cpt8+XmImw7mMBW6Q==} - engines: {node: '>=18.0.0'} - hasBin: true - dependencies: - '@babel/core': 7.24.5 - '@babel/parser': 7.24.5 - chalk: 4.1.2 - chokidar: 3.6.0 - commander: 11.1.0 - debounce: 2.0.0 - esbuild: 0.19.11 - glob: 10.3.4 - log-symbols: 4.1.0 - mime-types: 2.1.35 - next: 14.2.3(@babel/core@7.24.5)(@playwright/test@1.44.1)(react-dom@18.3.1)(react@18.3.1) - normalize-path: 3.0.0 - ora: 5.4.1 - socket.io: 4.7.5 - transitivePeerDependencies: - - '@opentelemetry/api' - - '@playwright/test' - - babel-plugin-macros - - bufferutil - - react - - react-dom - - sass - - supports-color - - utf-8-validate - dev: false - /react-error-boundary@3.1.4(react@18.3.1): resolution: {integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==} engines: {node: '>=10', npm: '>=6'} @@ -28927,7 +28676,7 @@ packages: tailwindcss: 3.4.3(ts-node@10.9.2) terser-webpack-plugin: 5.3.10(esbuild@0.23.1)(webpack@5.91.0) typescript: 4.9.5 - webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0) + webpack: 5.91.0(esbuild@0.23.1) webpack-dev-server: 4.15.2(webpack@5.91.0) webpack-manifest-plugin: 4.1.1(webpack@5.91.0) workbox-webpack-plugin: 6.6.0(webpack@5.91.0) @@ -29009,6 +28758,8 @@ packages: react-dom: 18.3.1(react@18.3.1) react-input-autosize: 3.0.0(react@18.3.1) react-transition-group: 4.4.5(react-dom@18.3.1)(react@18.3.1) + transitivePeerDependencies: + - supports-color dev: false /react-side-effect@2.1.2(react@18.3.1): @@ -29273,6 +29024,15 @@ packages: mute-stream: 1.0.0 dev: true + /readable-stream@1.0.34: + resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + dev: false + /readable-stream@2.3.7: resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} dependencies: @@ -29374,7 +29134,6 @@ packages: engines: {node: '>= 10.13.0'} dependencies: resolve: 1.22.8 - dev: false /recursive-readdir@2.2.2: resolution: {integrity: sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==} @@ -29874,6 +29633,7 @@ packages: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 + dev: true /ret@0.1.15: resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} @@ -29946,7 +29706,7 @@ packages: peerDependencies: rollup: ^2.0.0 dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.26.0 jest-worker: 26.6.2 rollup: 2.79.1 serialize-javascript: 4.0.0 @@ -30145,7 +29905,7 @@ packages: klona: 2.0.6 neo-async: 2.6.2 sass: 1.77.2 - webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0) + webpack: 5.91.0(esbuild@0.23.1) dev: false /sass-loader@13.3.3(webpack@5.91.0): @@ -30168,7 +29928,7 @@ packages: optional: true dependencies: neo-async: 2.6.2 - webpack: 5.91.0(esbuild@0.18.20) + webpack: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4) dev: true /sass@1.77.2: @@ -30767,7 +30527,7 @@ packages: abab: 2.0.6 iconv-lite: 0.6.3 source-map-js: 1.2.0 - webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0) + webpack: 5.91.0(esbuild@0.23.1) dev: false /source-map-loader@4.0.2(webpack@5.91.0): @@ -31285,6 +31045,10 @@ packages: define-properties: 1.2.1 es-object-atoms: 1.0.0 + /string_decoder@0.10.31: + resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + dev: false + /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: @@ -31427,7 +31191,7 @@ packages: peerDependencies: webpack: ^5.0.0 dependencies: - webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0) + webpack: 5.91.0(esbuild@0.23.1) /styled-components@5.3.11(@babel/core@7.26.0)(react-dom@18.3.1)(react-is@18.3.1)(react@18.3.1): resolution: {integrity: sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==} @@ -31442,7 +31206,7 @@ packages: '@emotion/is-prop-valid': 1.2.2 '@emotion/stylis': 0.8.5 '@emotion/unitless': 0.7.5 - babel-plugin-styled-components: 2.1.4(@babel/core@7.26.0)(styled-components@5.3.11) + babel-plugin-styled-components: 2.1.4(@babel/core@7.26.0)(styled-components@5.3.11)(supports-color@5.5.0) css-to-react-native: 3.2.0 hoist-non-react-statics: 3.3.2 react: 18.3.1 @@ -31454,24 +31218,6 @@ packages: - '@babel/core' dev: false - /styled-jsx@5.1.1(@babel/core@7.24.5)(react@18.3.1): - resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' - peerDependenciesMeta: - '@babel/core': - optional: true - babel-plugin-macros: - optional: true - dependencies: - '@babel/core': 7.24.5 - client-only: 0.0.1 - react: 18.3.1 - dev: false - /styled-system@5.1.5: resolution: {integrity: sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A==} dependencies: @@ -31490,14 +31236,14 @@ packages: object-assign: 4.1.1 dev: false - /stylehacks@5.1.1(postcss@8.4.38): + /stylehacks@5.1.1(postcss@8.4.47): resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.0 - postcss: 8.4.38 + browserslist: 4.24.2 + postcss: 8.4.47 postcss-selector-parser: 6.1.0 dev: false @@ -31712,12 +31458,12 @@ packages: micromatch: 4.0.7 normalize-path: 3.0.0 object-hash: 3.0.0 - picocolors: 1.0.1 - postcss: 8.4.38 - postcss-import: 15.1.0(postcss@8.4.38) - postcss-js: 4.0.1(postcss@8.4.38) - postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2) - postcss-nested: 6.0.1(postcss@8.4.38) + picocolors: 1.1.1 + postcss: 8.4.47 + postcss-import: 15.1.0(postcss@8.4.47) + postcss-js: 4.0.1(postcss@8.4.47) + postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2) + postcss-nested: 6.0.1(postcss@8.4.47) postcss-selector-parser: 6.1.0 resolve: 1.22.8 sucrase: 3.35.0 @@ -31863,8 +31609,7 @@ packages: schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.31.0 - webpack: 5.91.0(esbuild@0.18.20) - dev: true + webpack: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4) /terser-webpack-plugin@5.3.10(esbuild@0.23.1)(webpack@5.91.0): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} @@ -31896,7 +31641,7 @@ packages: hasBin: true dependencies: '@jridgewell/source-map': 0.3.6 - acorn: 8.11.3 + acorn: 8.13.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -31995,6 +31740,13 @@ packages: xtend: 4.0.2 dev: false + /through2@0.4.2: + resolution: {integrity: sha512-45Llu+EwHKtAZYTPPVn3XZHBgakWMN3rokhEv5hu596XP+cNgplMg+Gj+1nmAvj+L0K7+N49zBKx5rah5u0QIQ==} + dependencies: + readable-stream: 1.0.34 + xtend: 2.1.2 + dev: false + /through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: @@ -32293,7 +32045,23 @@ packages: webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0) dev: true - /ts-node@10.9.2(@types/node@20.5.1)(typescript@4.9.5): + /ts-loader@9.5.1(typescript@5.6.3)(webpack@5.91.0): + resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} + engines: {node: '>=12.0.0'} + peerDependencies: + typescript: '*' + webpack: ^5.0.0 + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.16.1 + micromatch: 4.0.7 + semver: 7.6.2 + source-map: 0.7.4 + typescript: 5.6.3 + webpack: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4) + dev: false + + /ts-node@10.9.2(@types/node@20.5.1)(typescript@5.6.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -32313,13 +32081,13 @@ packages: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 20.5.1 - acorn: 8.11.3 + acorn: 8.13.0 acorn-walk: 8.3.2 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 4.9.5 + typescript: 5.6.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 @@ -32391,7 +32159,7 @@ packages: engines: {node: '>=0.6.x'} dev: false - /tsup@8.3.0(typescript@4.9.5): + /tsup@8.3.0(typescript@5.6.3): resolution: {integrity: sha512-ALscEeyS03IomcuNdFdc0YWGVIkwH1Ws7nfTbAPuoILvEV2hpGQAY72LIOjglGo4ShWpZfpBqP/jpQVCzqYQag==} engines: {node: '>=18'} hasBin: true @@ -32426,7 +32194,7 @@ packages: sucrase: 3.35.0 tinyglobby: 0.2.9 tree-kill: 1.2.2 - typescript: 4.9.5 + typescript: 5.6.3 transitivePeerDependencies: - jiti - supports-color @@ -32936,8 +32704,8 @@ packages: browserslist: '>= 4.21.0' dependencies: browserslist: 4.23.0 - escalade: 3.1.2 - picocolors: 1.0.1 + escalade: 3.2.0 + picocolors: 1.1.1 /update-browserslist-db@1.1.1(browserslist@4.24.2): resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} @@ -33470,6 +33238,7 @@ packages: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.4 + dev: true /web-vitals@2.1.4: resolution: {integrity: sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==} @@ -33532,6 +33301,38 @@ packages: webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0) webpack-merge: 5.10.0 + /webpack-cli@5.1.4(webpack@5.91.0): + resolution: {integrity: sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==} + engines: {node: '>=14.15.0'} + hasBin: true + peerDependencies: + '@webpack-cli/generators': '*' + webpack: 5.x.x + webpack-bundle-analyzer: '*' + webpack-dev-server: '*' + peerDependenciesMeta: + '@webpack-cli/generators': + optional: true + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + dependencies: + '@discoveryjs/json-ext': 0.5.7 + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.91.0) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.91.0) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack@5.91.0) + colorette: 2.0.20 + commander: 10.0.1 + cross-spawn: 7.0.3 + envinfo: 7.13.0 + fastest-levenshtein: 1.0.16 + import-local: 3.1.0 + interpret: 3.1.1 + rechoir: 0.8.0 + webpack: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack-merge: 5.10.0 + /webpack-dev-middleware@5.3.4(webpack@5.91.0): resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==} engines: {node: '>= 12.13.0'} @@ -33543,7 +33344,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0) + webpack: 5.91.0(esbuild@0.23.1) dev: false /webpack-dev-server@4.15.2(webpack@5.91.0): @@ -33587,7 +33388,7 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0) + webpack: 5.91.0(esbuild@0.23.1) webpack-dev-middleware: 5.3.4(webpack@5.91.0) ws: 8.17.0 transitivePeerDependencies: @@ -33604,7 +33405,7 @@ packages: webpack: ^4.44.2 || ^5.47.0 dependencies: tapable: 2.2.1 - webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0) + webpack: 5.91.0(esbuild@0.23.1) webpack-sources: 2.3.1 dev: false @@ -33656,7 +33457,7 @@ packages: chalk: 2.4.2 dev: true - /webpack@5.91.0(esbuild@0.18.20): + /webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4): resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} engines: {node: '>=10.13.0'} hasBin: true @@ -33667,13 +33468,13 @@ packages: optional: true dependencies: '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/wasm-edit': 1.12.1 '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.11.3 - acorn-import-assertions: 1.9.0(acorn@8.11.3) - browserslist: 4.23.0 + acorn: 8.13.0 + acorn-import-assertions: 1.9.0(acorn@8.13.0) + browserslist: 4.24.2 chrome-trace-event: 1.0.3 enhanced-resolve: 5.16.1 es-module-lexer: 1.5.3 @@ -33689,12 +33490,51 @@ packages: tapable: 2.2.1 terser-webpack-plugin: 5.3.10(esbuild@0.18.20)(webpack@5.91.0) watchpack: 2.4.1 + webpack-cli: 5.1.4(webpack@5.91.0) + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + /webpack@5.91.0(esbuild@0.23.1): + resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.6 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/wasm-edit': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + acorn: 8.13.0 + acorn-import-assertions: 1.9.0(acorn@8.13.0) + browserslist: 4.24.2 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.16.1 + es-module-lexer: 1.5.3 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.10(esbuild@0.23.1)(webpack@5.91.0) + watchpack: 2.4.1 webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - dev: true /webpack@5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0): resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} @@ -33940,8 +33780,8 @@ packages: resolution: {integrity: sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==} engines: {node: '>= 10.0.0'} dependencies: - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 + '@babel/parser': 7.26.1 + '@babel/types': 7.26.0 assert-never: 1.2.1 babel-walk: 3.0.0-canary-5 dev: false @@ -34114,7 +33954,7 @@ packages: fast-json-stable-stringify: 2.1.0 pretty-bytes: 5.6.0 upath: 1.2.0 - webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@4.10.0) + webpack: 5.91.0(esbuild@0.23.1) webpack-sources: 1.4.3 workbox-build: 6.6.0 transitivePeerDependencies: @@ -34366,6 +34206,13 @@ packages: engines: {node: '>=0.4.0'} dev: false + /xtend@2.1.2: + resolution: {integrity: sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==} + engines: {node: '>=0.4'} + dependencies: + object-keys: 0.4.0 + dev: false + /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -34447,7 +34294,7 @@ packages: engines: {node: '>=10'} dependencies: cliui: 7.0.4 - escalade: 3.1.2 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 diff --git a/shared/pdf-templates/.gitignore b/shared/pdf-templates/.gitignore new file mode 100644 index 000000000..a547bf36d --- /dev/null +++ b/shared/pdf-templates/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/shared/pdf-templates/.storybook/main.tsx b/shared/pdf-templates/.storybook/main.tsx new file mode 100644 index 000000000..29bb4fe7c --- /dev/null +++ b/shared/pdf-templates/.storybook/main.tsx @@ -0,0 +1,23 @@ +import type { StorybookConfig } from '@storybook/react-vite'; + +const config: StorybookConfig = { + stories: ['../src/**/*.stories.@(js|jsx|ts|tsx)'], + addons: [ + '@storybook/addon-links', + '@storybook/addon-essentials', + '@storybook/addon-interactions', + '@storybook/addon-styling', + ], + framework: { + name: '@storybook/react-vite', + options: { + builder: { + viteConfigPath: '.storybook/vite.config.ts', + }, + }, + }, + docs: { + autodocs: 'tag', + }, +}; +export default config; diff --git a/shared/pdf-templates/.storybook/preview.tsx b/shared/pdf-templates/.storybook/preview.tsx new file mode 100644 index 000000000..8c2a141ca --- /dev/null +++ b/shared/pdf-templates/.storybook/preview.tsx @@ -0,0 +1,15 @@ +import type { Preview } from '@storybook/react'; + +const preview: Preview = { + parameters: { + actions: { argTypesRegex: '^on[A-Z].*' }, + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/, + }, + }, + }, +}; + +export default preview; diff --git a/shared/pdf-templates/.storybook/vite.config.ts b/shared/pdf-templates/.storybook/vite.config.ts new file mode 100644 index 000000000..e199565df --- /dev/null +++ b/shared/pdf-templates/.storybook/vite.config.ts @@ -0,0 +1,17 @@ +import react from '@vitejs/plugin-react'; +import { defineConfig } from 'vitest/config'; +import tailwindcss from 'tailwindcss'; +import { UserConfigExport } from 'vite'; + +const app = async (): Promise => { + return defineConfig({ + plugins: [react()], + css: { + postcss: { + plugins: [tailwindcss], + }, + }, + }); +}; +// https://vitejs.dev/config/ +export default app; diff --git a/shared/pdf-templates/eslint.config.js b/shared/pdf-templates/eslint.config.js new file mode 100644 index 000000000..092408a9f --- /dev/null +++ b/shared/pdf-templates/eslint.config.js @@ -0,0 +1,28 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' + +export default tseslint.config( + { ignores: ['dist'] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ['**/*.{ts,tsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +) diff --git a/shared/pdf-templates/package.json b/shared/pdf-templates/package.json new file mode 100644 index 000000000..d640229ae --- /dev/null +++ b/shared/pdf-templates/package.json @@ -0,0 +1,62 @@ +{ + "name": "@bigcapital/pdf-templates", + "version": "0.0.0", + "scripts": { + "build": "webpack --config webpack.config.js", + "lint": "eslint .", + "preview": "vite preview", + "storybook:dev": "storybook dev -p 6006", + "storybook:build": "storybook build" + }, + "main": "./dist/components.umd.js", + "module": "./dist/components.es.js", + "types": "./dist/src/index.d.ts", + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "import": "./dist/components.es.js", + "require": "./dist/components.umd.js" + } + }, + "dependencies": { + "@emotion/cache": "^11.13.1", + "@emotion/css": "^11.13.4", + "@emotion/react": "^11.13.3", + "@emotion/server": "^11.11.0", + "@types/lodash": "^4.17.13", + "@xstyled/emotion": "^3.8.1", + "@xstyled/system": "^3.8.1", + "classnames": "^2.3.2", + "css-loader": "^6.x", + "declaration-bundler-webpack-plugin": "^1.0.3", + "fork-ts-checker-webpack-plugin": "^9.0.2", + "lodash": "^4.17.15", + "react": "18.3.1", + "react-dom": "18.3.1", + "style-loader": "^3.x", + "tailwindcss": "^3.4.14", + "ts-loader": "^9.x", + "webpack": "^5.x", + "webpack-cli": "^5.x" + }, + "devDependencies": { + "@eslint/js": "^9.13.0", + "@storybook/addon-essentials": "7.2.2", + "@storybook/addon-interactions": "7.2.2", + "@storybook/addon-links": "7.2.2", + "@storybook/addon-styling": "1.3.6", + "@storybook/blocks": "7.2.2", + "@storybook/react": "7.2.2", + "@storybook/testing-library": "0.2.0", + "@types/react": "18.3.4", + "@types/react-dom": "18.3.0", + "eslint": "^9.13.0", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-refresh": "^0.4.13", + "eslint-plugin-storybook": "0.6.13", + "globals": "^15.11.0", + "storybook": "7.2.2", + "typescript": "~5.6.2", + "typescript-eslint": "^8.10.0" + } +} \ No newline at end of file diff --git a/shared/pdf-templates/postman.config.js b/shared/pdf-templates/postman.config.js new file mode 100644 index 000000000..12a703d90 --- /dev/null +++ b/shared/pdf-templates/postman.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/shared/pdf-templates/src/Test.tsx b/shared/pdf-templates/src/Test.tsx new file mode 100644 index 000000000..20796aca0 --- /dev/null +++ b/shared/pdf-templates/src/Test.tsx @@ -0,0 +1,3 @@ +export const Test = () => { + return

asdasd

; +}; diff --git a/shared/pdf-templates/src/index.ts b/shared/pdf-templates/src/index.ts new file mode 100644 index 000000000..c8fee7bb8 --- /dev/null +++ b/shared/pdf-templates/src/index.ts @@ -0,0 +1 @@ +export * from './Test'; diff --git a/shared/pdf-templates/src/vite-env.d.ts b/shared/pdf-templates/src/vite-env.d.ts new file mode 100644 index 000000000..11f02fe2a --- /dev/null +++ b/shared/pdf-templates/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/shared/pdf-templates/tailwind.config.js b/shared/pdf-templates/tailwind.config.js new file mode 100644 index 000000000..6d07d1bee --- /dev/null +++ b/shared/pdf-templates/tailwind.config.js @@ -0,0 +1,8 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ['./src/**/*.{ts,tsx}'], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/shared/pdf-templates/tsconfig.json b/shared/pdf-templates/tsconfig.json new file mode 100644 index 000000000..48da718b3 --- /dev/null +++ b/shared/pdf-templates/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + // "noEmit": true, + "composite": false, + "declaration": true, + "declarationMap": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "inlineSources": false, + "isolatedModules": true, + "moduleResolution": "node", + "noUnusedLocals": false, + "noUnusedParameters": false, + "preserveWatchOutput": true, + "skipLibCheck": true, + "strict": true, + "strictNullChecks": true, + "jsx": "react-jsx", + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "module": "ESNext", + "target": "ESNext", + "types": ["vitest/globals"], + "resolveJsonModule": true, + "outDir": "dist", + }, + "include": ["."], + "exclude": ["dist", "build", "node_modules"] +} \ No newline at end of file diff --git a/shared/pdf-templates/tsconfig.node.json b/shared/pdf-templates/tsconfig.node.json new file mode 100644 index 000000000..9dad70185 --- /dev/null +++ b/shared/pdf-templates/tsconfig.node.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "Bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/shared/pdf-templates/vite.config.ts b/shared/pdf-templates/vite.config.ts new file mode 100644 index 000000000..a919dfbad --- /dev/null +++ b/shared/pdf-templates/vite.config.ts @@ -0,0 +1,61 @@ +import react from '@vitejs/plugin-react'; +import path from 'node:path'; +import { defineConfig } from 'vitest/config'; +import dts from 'vite-plugin-dts'; +import tailwindcss from 'tailwindcss'; +import { UserConfigExport } from 'vite'; +import { name } from './package.json'; + +const app = async (): Promise => { + /** + * Removes everything before the last + * @octocat/library-repo -> library-repo + * vite-component-library-template -> vite-component-library-template + */ + const formattedName = name.match(/[^/]+$/)?.[0] ?? name; + + return defineConfig({ + define: { + isBrowser: 'false', // This will replace isBrowser with false in the bundled code + }, + ssr: { + noExternal: true, + }, + plugins: [ + react(), + dts({ + insertTypesEntry: true, + }), + ], + css: { + postcss: { + plugins: [tailwindcss], + }, + }, + build: { + lib: { + entry: path.resolve(__dirname, 'src/lib/main.ts'), + name: formattedName, + formats: ['es', 'umd'], + fileName: (format: string) => `${formattedName}.${format}.js`, + }, + rollupOptions: { + // external: ['react', 'react/jsx-runtime', 'react-dom', 'tailwindcss'], + // output: { + // globals: { + // react: 'React', + // 'react/jsx-runtime': 'react/jsx-runtime', + // 'react-dom': 'ReactDOM', + // tailwindcss: 'tailwindcss', + // }, + // }, + }, + }, + test: { + globals: true, + environment: 'jsdom', + }, + }); +}; +// https://vitejs.dev/config/ +export default app; diff --git a/shared/pdf-templates/webpack.config.js b/shared/pdf-templates/webpack.config.js new file mode 100644 index 000000000..349c46969 --- /dev/null +++ b/shared/pdf-templates/webpack.config.js @@ -0,0 +1,36 @@ +// webpack.config.js +const path = require('path'); + +module.exports = { + mode: 'production', + target: 'node', + entry: './src/index.ts', + output: { + path: path.resolve(__dirname, 'dist'), + filename: 'components.umd.js', + library: { + name: '@bigcapital/library-components', + type: 'umd', + }, + globalObject: 'this', + clean: true, + }, + resolve: { + extensions: ['.ts', '.tsx', '.js', '.jsx'], + }, + module: { + rules: [ + { + test: /\.(ts|tsx)$/, + use: { + loader: 'ts-loader', + }, + exclude: /node_modules/, + }, + { + test: /\.css$/, + use: ['style-loader', 'css-loader'], + }, + ], + }, +}; From 51aec8d8b311d6108fb014aa98dd96a1332f4729 Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Mon, 4 Nov 2024 12:55:12 +0200 Subject: [PATCH 2/4] feat: render server-side invoice pdf template using React server --- packages/server/package.json | 4 +- .../api/controllers/Sales/SalesInvoices.ts | 4 +- .../services/Sales/Invoices/SaleInvoicePdf.ts | 19 +- pnpm-lock.yaml | 64 +--- shared/pdf-templates/src/Test.tsx | 3 - .../src/components/InvoicePaperTemplate.tsx | 343 ++++++++++++++++++ .../src/components/PaperTemplate.tsx | 242 ++++++++++++ .../src/components/PaperTemplateLayout.tsx | 25 ++ .../src/components/_constants.ts | 25 ++ shared/pdf-templates/src/index.ts | 3 +- shared/pdf-templates/src/lib/layout/Box.tsx | 19 + shared/pdf-templates/src/lib/layout/Group.tsx | 58 +++ shared/pdf-templates/src/lib/layout/Stack.tsx | 33 ++ shared/pdf-templates/src/lib/layout/utils.ts | 5 + shared/pdf-templates/src/lib/main.ts | 4 + shared/pdf-templates/src/lib/text/Text.tsx | 5 + shared/pdf-templates/src/vite-env.d.ts | 1 - 17 files changed, 787 insertions(+), 70 deletions(-) delete mode 100644 shared/pdf-templates/src/Test.tsx create mode 100644 shared/pdf-templates/src/components/InvoicePaperTemplate.tsx create mode 100644 shared/pdf-templates/src/components/PaperTemplate.tsx create mode 100644 shared/pdf-templates/src/components/PaperTemplateLayout.tsx create mode 100644 shared/pdf-templates/src/components/_constants.ts create mode 100644 shared/pdf-templates/src/lib/layout/Box.tsx create mode 100644 shared/pdf-templates/src/lib/layout/Group.tsx create mode 100644 shared/pdf-templates/src/lib/layout/Stack.tsx create mode 100644 shared/pdf-templates/src/lib/layout/utils.ts create mode 100644 shared/pdf-templates/src/lib/main.ts create mode 100644 shared/pdf-templates/src/lib/text/Text.tsx delete mode 100644 shared/pdf-templates/src/vite-env.d.ts diff --git a/packages/server/package.json b/packages/server/package.json index 77648c179..050bbba3b 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -20,11 +20,11 @@ "bigcapital": "./bin/bigcapital.js" }, "dependencies": { - "@aws-sdk/client-s3": "^3.576.0", - "@aws-sdk/s3-request-presigner": "^3.583.0", "@bigcapital/utils": "*", "@bigcapital/email-components": "*", "@bigcapital/pdf-templates": "*", + "@aws-sdk/client-s3": "^3.576.0", + "@aws-sdk/s3-request-presigner": "^3.583.0", "@casl/ability": "^5.4.3", "@hapi/boom": "^7.4.3", "@lemonsqueezy/lemonsqueezy.js": "^2.2.0", diff --git a/packages/server/src/api/controllers/Sales/SalesInvoices.ts b/packages/server/src/api/controllers/Sales/SalesInvoices.ts index c0c0bf54c..4393b21ff 100644 --- a/packages/server/src/api/controllers/Sales/SalesInvoices.ts +++ b/packages/server/src/api/controllers/Sales/SalesInvoices.ts @@ -451,14 +451,14 @@ export default class SaleInvoicesController extends BaseController { ACCEPT_TYPE.APPLICATION_PDF, ]); // Retrieves invoice in pdf format. - if (ACCEPT_TYPE.APPLICATION_PDF == acceptType) { + if (true) { const [pdfContent, filename] = await this.saleInvoiceApplication.saleInvoicePdf( tenantId, saleInvoiceId ); res.set({ - 'Content-Type': 'application/pdf', + 'Content-Type': 'text/html', 'Content-Length': pdfContent.length, 'Content-Disposition': `attachment; filename="${filename}"`, }); diff --git a/packages/server/src/services/Sales/Invoices/SaleInvoicePdf.ts b/packages/server/src/services/Sales/Invoices/SaleInvoicePdf.ts index d2c78a8b4..c2e66557a 100644 --- a/packages/server/src/services/Sales/Invoices/SaleInvoicePdf.ts +++ b/packages/server/src/services/Sales/Invoices/SaleInvoicePdf.ts @@ -1,4 +1,5 @@ import { Inject, Service } from 'typedi'; +import { renderInvoicePaperTemplateHtml } from '@bigcapital/pdf-templates'; import { ChromiumlyTenancy } from '@/services/ChromiumlyTenancy/ChromiumlyTenancy'; import { TemplateInjectable } from '@/services/TemplateInjectable/TemplateInjectable'; import { GetSaleInvoice } from './GetSaleInvoice'; @@ -8,6 +9,7 @@ import { InvoicePdfTemplateAttributes } from '@/interfaces'; import { SaleInvoicePdfTemplate } from './SaleInvoicePdfTemplate'; import { EventPublisher } from '@/lib/EventPublisher/EventPublisher'; import events from '@/subscribers/events'; +import { renderInvoicePaymentEmail } from '@bigcapital/email-components'; @Service() export class SaleInvoicePdf { @@ -45,11 +47,16 @@ export class SaleInvoicePdf { tenantId, invoiceId ); - const htmlContent = await this.templateInjectable.render( - tenantId, - 'modules/invoice-standard', - brandingAttributes - ); + // const htmlContent = await this.templateInjectable.render( + // tenantId, + // 'modules/invoice-standard', + // brandingAttributes + // ); + + const htmlContent = renderInvoicePaperTemplateHtml({}); + + console.log(htmlContent); + // Converts the given html content to pdf document. const buffer = await this.chromiumlyTenancy.convertHtmlContent( tenantId, @@ -62,7 +69,7 @@ export class SaleInvoicePdf { events.saleInvoice.onPdfViewed, eventPayload ); - return [buffer, filename]; + return [htmlContent, filename]; } /** diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 779d86d89..ffd1f0ef9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5991,7 +5991,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.7(supports-color@5.5.0) espree: 9.6.1 globals: 13.24.0 ignore: 5.3.1 @@ -6138,7 +6138,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4 + debug: 4.3.7(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -6730,7 +6730,7 @@ packages: engines: {node: '>=18'} dev: false - /@lerna/create@8.1.3(typescript@4.9.5): + /@lerna/create@8.1.3(typescript@5.6.3): resolution: {integrity: sha512-JFvIYrlvR8Txa8h7VZx8VIQDltukEKOKaZL/muGO7Q/5aE2vjOKHsD/jkWYe/2uFy1xv37ubdx17O1UXQNadPg==} engines: {node: '>=18.0.0'} dependencies: @@ -6745,7 +6745,7 @@ packages: columnify: 1.6.0 conventional-changelog-core: 5.0.1 conventional-recommended-bump: 7.0.1 - cosmiconfig: 8.3.6(typescript@4.9.5) + cosmiconfig: 8.3.6(typescript@5.6.3) dedent: 0.7.0 execa: 5.0.0 fs-extra: 11.2.0 @@ -15672,22 +15672,6 @@ packages: path-type: 4.0.0 yaml: 1.10.2 - /cosmiconfig@8.3.6(typescript@4.9.5): - resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - import-fresh: 3.3.0 - js-yaml: 4.1.0 - parse-json: 5.2.0 - path-type: 4.0.0 - typescript: 4.9.5 - dev: true - /cosmiconfig@8.3.6(typescript@5.6.3): resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} @@ -23180,7 +23164,7 @@ packages: engines: {node: '>=18.0.0'} hasBin: true dependencies: - '@lerna/create': 8.1.3(typescript@4.9.5) + '@lerna/create': 8.1.3(typescript@5.6.3) '@npmcli/run-script': 7.0.2 '@nx/devkit': 19.0.7(nx@19.0.7) '@octokit/plugin-enterprise-rest': 6.0.1 @@ -23193,7 +23177,7 @@ packages: conventional-changelog-angular: 7.0.0 conventional-changelog-core: 5.0.1 conventional-recommended-bump: 7.0.1 - cosmiconfig: 8.3.6(typescript@4.9.5) + cosmiconfig: 8.3.6(typescript@5.6.3) dedent: 0.7.0 envinfo: 7.8.1 execa: 5.0.0 @@ -23245,7 +23229,7 @@ packages: strong-log-transformer: 2.1.0 tar: 6.2.1 temp-dir: 1.0.0 - typescript: 4.9.5 + typescript: 5.6.3 upath: 2.0.1 uuid: 9.0.1 validate-npm-package-license: 3.0.4 @@ -28673,7 +28657,7 @@ packages: semver: 7.6.2 source-map-loader: 3.0.2(webpack@5.91.0) style-loader: 3.3.4(webpack@5.91.0) - tailwindcss: 3.4.3(ts-node@10.9.2) + tailwindcss: 3.4.14(ts-node@10.9.2) terser-webpack-plugin: 5.3.10(esbuild@0.23.1)(webpack@5.91.0) typescript: 4.9.5 webpack: 5.91.0(esbuild@0.23.1) @@ -31440,37 +31424,6 @@ packages: - ts-node dev: false - /tailwindcss@3.4.3(ts-node@10.9.2): - resolution: {integrity: sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==} - engines: {node: '>=14.0.0'} - hasBin: true - dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.6.0 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.2 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.21.0 - lilconfig: 2.1.0 - micromatch: 4.0.7 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.1.1 - postcss: 8.4.47 - postcss-import: 15.1.0(postcss@8.4.47) - postcss-js: 4.0.1(postcss@8.4.47) - postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2) - postcss-nested: 6.0.1(postcss@8.4.47) - postcss-selector-parser: 6.1.0 - resolve: 1.22.8 - sucrase: 3.35.0 - transitivePeerDependencies: - - ts-node - dev: false - /tapable@0.1.10: resolution: {integrity: sha512-jX8Et4hHg57mug1/079yitEKWGB3LCwoxByLsNim89LABq8NqgiX+6iYVOsq0vX8uJHkU+DZ5fnq95f800bEsQ==} engines: {node: '>=0.6'} @@ -32439,6 +32392,7 @@ packages: resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} hasBin: true + dev: false /typescript@5.4.2: resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} diff --git a/shared/pdf-templates/src/Test.tsx b/shared/pdf-templates/src/Test.tsx deleted file mode 100644 index 20796aca0..000000000 --- a/shared/pdf-templates/src/Test.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export const Test = () => { - return

asdasd

; -}; diff --git a/shared/pdf-templates/src/components/InvoicePaperTemplate.tsx b/shared/pdf-templates/src/components/InvoicePaperTemplate.tsx new file mode 100644 index 000000000..2d29c0db9 --- /dev/null +++ b/shared/pdf-templates/src/components/InvoicePaperTemplate.tsx @@ -0,0 +1,343 @@ +import { renderToString } from 'react-dom/server'; +import { + PaperTemplate, + PaperTemplateProps, + PaperTemplateTotalBorder, +} from './PaperTemplate'; +import { x } from '@xstyled/emotion'; +import { Box } from '../lib/layout/Box'; +import { Text } from '../lib/text/Text'; +import { Stack } from '../lib/layout/Stack'; +import { Group } from '../lib/layout/Group'; +import { + DefaultPdfTemplateTerms, + DefaultPdfTemplateItemDescription, + DefaultPdfTemplateStatement, + DefaultPdfTemplateItemName, + DefaultPdfTemplateAddressBilledTo, + DefaultPdfTemplateAddressBilledFrom, +} from './_constants'; +import { PaperTemplateLayout } from './PaperTemplateLayout'; +import createCache from '@emotion/cache'; + +interface PapaerLine { + item?: string; + description?: string; + quantity?: string; + rate?: string; + total?: string; +} + +interface PaperTax { + label: string; + amount: string; +} + +export interface InvoicePaperTemplateProps extends PaperTemplateProps { + primaryColor?: string; + secondaryColor?: string; + + showCompanyLogo?: boolean; + companyLogoUri?: string; + + showInvoiceNumber?: boolean; + invoiceNumber?: string; + invoiceNumberLabel?: string; + + showDateIssue?: boolean; + dateIssue?: string; + dateIssueLabel?: string; + + showDueDate?: boolean; + dueDate?: string; + dueDateLabel?: string; + + companyName?: string; + bigtitle?: string; + + // Address + showCustomerAddress?: boolean; + customerAddress?: string; + + showCompanyAddress?: boolean; + companyAddress?: string; + + billedToLabel?: string; + + // Entries + lineItemLabel?: string; + lineQuantityLabel?: string; + lineRateLabel?: string; + lineTotalLabel?: string; + + // Totals + showTotal?: boolean; + totalLabel?: string; + total?: string; + + showDiscount?: boolean; + discountLabel?: string; + discount?: string; + + showSubtotal?: boolean; + subtotalLabel?: string; + subtotal?: string; + + showPaymentMade?: boolean; + paymentMadeLabel?: string; + paymentMade?: string; + + showTaxes?: boolean; + + showDueAmount?: boolean; + showBalanceDue?: boolean; + balanceDueLabel?: string; + balanceDue?: string; + + // Footer + termsConditionsLabel?: string; + showTermsConditions?: boolean; + termsConditions?: string; + + statementLabel?: string; + showStatement?: boolean; + statement?: string; + + lines?: Array; + taxes?: Array; +} + +export function InvoicePaperTemplate({ + primaryColor, + secondaryColor, + + companyName = 'Bigcapital Technology, Inc.', + + showCompanyLogo = true, + companyLogoUri = '', + + dueDate = 'September 3, 2024', + dueDateLabel = 'Date due', + showDueDate = true, + + dateIssue = 'September 3, 2024', + dateIssueLabel = 'Date of issue', + showDateIssue = true, + + // dateIssue, + invoiceNumberLabel = 'Invoice number', + invoiceNumber = '346D3D40-0001', + showInvoiceNumber = true, + + // Address + showCustomerAddress = true, + customerAddress = DefaultPdfTemplateAddressBilledTo, + + showCompanyAddress = true, + companyAddress = DefaultPdfTemplateAddressBilledFrom, + + billedToLabel = 'Billed To', + + // Entries + lineItemLabel = 'Item', + lineQuantityLabel = 'Qty', + lineRateLabel = 'Rate', + lineTotalLabel = 'Total', + + totalLabel = 'Total', + subtotalLabel = 'Subtotal', + discountLabel = 'Discount', + paymentMadeLabel = 'Payment Made', + balanceDueLabel = 'Balance Due', + + // Totals + showTotal = true, + showSubtotal = true, + showDiscount = true, + showTaxes = true, + showPaymentMade = true, + showDueAmount = true, + showBalanceDue = true, + + total = '$662.75', + subtotal = '630.00', + discount = '0.00', + paymentMade = '100.00', + balanceDue = '$562.75', + + // Footer paragraphs. + termsConditionsLabel = 'Terms & Conditions', + showTermsConditions = true, + termsConditions = DefaultPdfTemplateTerms, + + lines = [ + { + item: DefaultPdfTemplateItemName, + description: DefaultPdfTemplateItemDescription, + rate: '1', + quantity: '1000', + total: '$1000.00', + }, + ], + taxes = [ + { label: 'Sample Tax1 (4.70%)', amount: '11.75' }, + { label: 'Sample Tax2 (7.00%)', amount: '21.74' }, + ], + + statementLabel = 'Statement', + showStatement = true, + statement = DefaultPdfTemplateStatement, + ...props +}: InvoicePaperTemplateProps) { + return ( + + + + + + + + {showInvoiceNumber && ( + + {invoiceNumber} + + )} + {showDateIssue && ( + + {dateIssue} + + )} + {showDueDate && ( + + {dueDate} + + )} + + + + {companyLogoUri && showCompanyLogo && ( + + )} + + + + {showCompanyAddress && ( + + + + )} + {showCustomerAddress && ( + + {billedToLabel} + + + )} + + + + ( + + {data.item} + + {data.description} + + + ), + }, + { label: lineQuantityLabel, accessor: 'quantity' }, + { label: lineRateLabel, accessor: 'rate', align: 'right' }, + { label: lineTotalLabel, accessor: 'total', align: 'right' }, + ]} + data={lines} + /> + + {showSubtotal && ( + + )} + {showDiscount && ( + + )} + {showTaxes && ( + <> + {taxes.map((tax, index) => ( + + ))} + + )} + {showTotal && ( + + )} + {showPaymentMade && ( + + )} + {showBalanceDue && ( + + )} + + + + + {showTermsConditions && termsConditions && ( + + {termsConditions} + + )} + + {showStatement && statement && ( + + {statement} + + )} + + + + ); +} + +export const renderInvoicePaperTemplateHtml = ( + props: InvoicePaperTemplateProps +) => { + const key = 'custom'; + const cache = createCache({ key }); + + return renderToString( + + + + ); +}; diff --git a/shared/pdf-templates/src/components/PaperTemplate.tsx b/shared/pdf-templates/src/components/PaperTemplate.tsx new file mode 100644 index 000000000..73bd4f73a --- /dev/null +++ b/shared/pdf-templates/src/components/PaperTemplate.tsx @@ -0,0 +1,242 @@ +import React from 'react'; +import clsx from 'classnames'; +import { get, isFunction } from 'lodash'; +import { x } from '@xstyled/emotion'; +import { Box, BoxProps } from '../lib/layout/Box'; +import { Group, GroupProps } from '../lib/layout/Group'; + +const styles = { + root: 'root', + bigTitle: 'bigTitle', + logoWrap: 'logoWrap', + logoImg: 'logoImg', + table: 'table', + tableBody: 'tableBody', + totals: 'totals', + totalsItem: 'totalsItem', + totalBottomBordered: 'totalBottomBordered', + totalBottomGrayBordered: 'totalBottomGrayBordered', + totalsItemLabel: 'totalsItemLabel', + totalsItemAmount: 'totalsItemAmount', + addressRoot: 'addressRoot', + paragraph: 'paragraph', + paragraphLabel: 'paragraphLabel', + details: 'details', + detail: 'detail', + detailLabel: 'detailLabel', +}; + +export interface PaperTemplateProps extends BoxProps { + primaryColor?: string; + secondaryColor?: string; + children?: React.ReactNode; +} + +export function PaperTemplate({ + primaryColor, + secondaryColor, + children, + ...restProps +}: PaperTemplateProps) { + return ( + + + {children} + + ); +} + +interface PaperTemplateTableProps { + columns: Array<{ + accessor: string | ((data: Record) => JSX.Element); + label: string; + value?: JSX.Element; + align?: 'left' | 'center' | 'right'; + }>; + data: Array>; +} + +interface PaperTemplateBigTitleProps { + title: string; +} + +PaperTemplate.BigTitle = ({ title }: PaperTemplateBigTitleProps) => { + return ( + + {title} + + ); +}; + +interface PaperTemplateLogoProps { + logoUri: string; +} + +PaperTemplate.Logo = ({ logoUri }: PaperTemplateLogoProps) => { + return ( +
+ +
+ ); +}; + +PaperTemplate.Table = ({ columns, data }: PaperTemplateTableProps) => { + return ( + + + + {columns.map((col, index) => ( + + ))} + + + + + {data.map((_data: any) => ( + + {columns.map((column, index) => ( + + ))} + + ))} + +
+ {col.label} +
+ {isFunction(column?.accessor) + ? column?.accessor(_data) + : get(_data, column.accessor)} +
+ ); +}; + +export enum PaperTemplateTotalBorder { + Gray = 'gray', + Dark = 'dark', +} + +PaperTemplate.Totals = ({ children }: { children: React.ReactNode }) => { + return ( + + {children} + ); +}; +PaperTemplate.TotalLine = ({ + label, + amount, + border, + style, +}: { + label: string; + amount: string; + border?: PaperTemplateTotalBorder; + style?: any; +}) => { + return ( + + {label} + {amount} + + ); +}; + +PaperTemplate.MutedText = () => { }; + +PaperTemplate.Text = () => { }; + +PaperTemplate.AddressesGroup = (props: GroupProps) => { + return ( + + ); +}; +PaperTemplate.Address = ({ children }: { children: React.ReactNode }) => { + return {children}; +}; + +PaperTemplate.Statement = ({ + label, + children, +}: { + label: string; + children: React.ReactNode; +}) => { + return ( +
+ {label &&
{label}
} +
{children}
+
+ ); +}; + +PaperTemplate.TermsList = ({ children }: { children: React.ReactNode }) => { + return ( + + {children} + + ); +}; + +PaperTemplate.TermsItem = ({ + label, + children, +}: { + label: string; + children: React.ReactNode; +}) => { + return ( + + {label} + {children} + + ); +}; diff --git a/shared/pdf-templates/src/components/PaperTemplateLayout.tsx b/shared/pdf-templates/src/components/PaperTemplateLayout.tsx new file mode 100644 index 000000000..d2e767837 --- /dev/null +++ b/shared/pdf-templates/src/components/PaperTemplateLayout.tsx @@ -0,0 +1,25 @@ +import { CacheProvider, ThemeProvider } from '@emotion/react'; +import { EmotionCache } from '@emotion/cache'; +import { defaultTheme } from '@xstyled/system'; + +const theme = { + ...defaultTheme, +}; +export function PaperTemplateLayout({ cache, children }: { + children: React.ReactNode; + cache: EmotionCache; +}) { + const html = ( + + {children} + + ); + + return ( + + +
{html}
+ + + ); +} diff --git a/shared/pdf-templates/src/components/_constants.ts b/shared/pdf-templates/src/components/_constants.ts new file mode 100644 index 000000000..c08cce9c5 --- /dev/null +++ b/shared/pdf-templates/src/components/_constants.ts @@ -0,0 +1,25 @@ +export const DefaultPdfTemplateTerms = + 'All services provided are non-refundable. For any disputes, please contact us within 7 days of receiving this invoice.'; + +export const DefaultPdfTemplateStatement = + 'Thank you for your business. We look forward to working with you again!'; + +export const DefaultPdfTemplateItemName = 'Web development'; + +export const DefaultPdfTemplateItemDescription = + 'Website development with content and SEO optimization'; + +export const DefaultPdfTemplateAddressBilledTo = `Bigcapital Technology, Inc.
+131 Continental Dr,
+Suite 305,
+Newark, Delaware 19713,
+United States,
++1 762-339-5634 +`; + +export const DefaultPdfTemplateAddressBilledFrom = `131 Continental Dr Suite 305 Newark,
+Delaware 19713,
+United States,
++1 762-339-5634,
+ahmed@bigcapital.app +`; diff --git a/shared/pdf-templates/src/index.ts b/shared/pdf-templates/src/index.ts index c8fee7bb8..8a15d72ed 100644 --- a/shared/pdf-templates/src/index.ts +++ b/shared/pdf-templates/src/index.ts @@ -1 +1,2 @@ -export * from './Test'; +export * from './components/PaperTemplate'; +export * from './components/InvoicePaperTemplate'; diff --git a/shared/pdf-templates/src/lib/layout/Box.tsx b/shared/pdf-templates/src/lib/layout/Box.tsx new file mode 100644 index 000000000..2c05008a9 --- /dev/null +++ b/shared/pdf-templates/src/lib/layout/Box.tsx @@ -0,0 +1,19 @@ +import React, { forwardRef, Ref } from 'react'; +import { SystemProps, x } from '@xstyled/emotion'; + +interface IProps { + className?: string; +} +export interface BoxProps + extends SystemProps, + IProps, + Omit, 'color' | 'as'> { } + +export const Box = forwardRef( + ({ className, ...rest }: BoxProps, ref: Ref) => { + const Element = x.div; + + return ; + }, +); +Box.displayName = '@bigcapital/Box'; diff --git a/shared/pdf-templates/src/lib/layout/Group.tsx b/shared/pdf-templates/src/lib/layout/Group.tsx new file mode 100644 index 000000000..0165680de --- /dev/null +++ b/shared/pdf-templates/src/lib/layout/Group.tsx @@ -0,0 +1,58 @@ +import React from 'react'; +import { SystemProps } from '@xstyled/emotion'; +import { Box } from './Box'; +import { filterFalsyChildren } from './utils'; + +export type GroupPosition = 'right' | 'center' | 'left' | 'apart'; + +export const GROUP_POSITIONS = { + left: 'flex-start', + center: 'center', + right: 'flex-end', + apart: 'space-between', +}; + +export interface GroupProps + extends SystemProps, + Omit, 'color'> { + /** Defines justify-content property */ + position?: GroupPosition; + + /** Defined flex-wrap property */ + noWrap?: boolean; + + /** Defines flex-grow property for each element, true -> 1, false -> 0 */ + grow?: boolean; + + /** Space between elements */ + spacing?: number; + + /** Defines align-items css property */ + align?: React.CSSProperties['alignItems']; +} + +export function Group({ + position = 'left', + spacing = 20, + align = 'center', + noWrap, + children, + ...props +}: GroupProps) { + const filteredChildren = filterFalsyChildren(children); + + return ( + + {filteredChildren} + + ); +} diff --git a/shared/pdf-templates/src/lib/layout/Stack.tsx b/shared/pdf-templates/src/lib/layout/Stack.tsx new file mode 100644 index 000000000..fc790e7c8 --- /dev/null +++ b/shared/pdf-templates/src/lib/layout/Stack.tsx @@ -0,0 +1,33 @@ +import React from 'react'; +import { x, SystemProps } from '@xstyled/emotion'; + +export interface StackProps + extends SystemProps, + Omit, 'color'> { + /** Key of theme.spacing or number to set gap in px */ + spacing?: number; + + /** align-items CSS property */ + align?: React.CSSProperties['alignItems']; + + /** justify-content CSS property */ + justify?: React.CSSProperties['justifyContent']; +} + +export function Stack({ + spacing = 20, + align = 'stretch', + justify = 'top', + ...restProps +}: StackProps) { + return ( + + ); +} diff --git a/shared/pdf-templates/src/lib/layout/utils.ts b/shared/pdf-templates/src/lib/layout/utils.ts new file mode 100644 index 000000000..6850d1d73 --- /dev/null +++ b/shared/pdf-templates/src/lib/layout/utils.ts @@ -0,0 +1,5 @@ +import React from 'react'; + +export const filterFalsyChildren = (children: React.ReactNode) => { + return React.Children.toArray(children).filter(Boolean); +}; diff --git a/shared/pdf-templates/src/lib/main.ts b/shared/pdf-templates/src/lib/main.ts new file mode 100644 index 000000000..ab06c84b9 --- /dev/null +++ b/shared/pdf-templates/src/lib/main.ts @@ -0,0 +1,4 @@ +export * from './layout/Stack'; +export * from './layout/Group'; +export * from './layout/Box'; +export * from './text/Text'; diff --git a/shared/pdf-templates/src/lib/text/Text.tsx b/shared/pdf-templates/src/lib/text/Text.tsx new file mode 100644 index 000000000..eabe132cf --- /dev/null +++ b/shared/pdf-templates/src/lib/text/Text.tsx @@ -0,0 +1,5 @@ +import { x } from '@xstyled/emotion'; + +export const Text = ({ children }: { children: React.ReactNode }) => { + return {children}; +}; diff --git a/shared/pdf-templates/src/vite-env.d.ts b/shared/pdf-templates/src/vite-env.d.ts deleted file mode 100644 index 11f02fe2a..000000000 --- a/shared/pdf-templates/src/vite-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// From 22ea55733746dcc18063261a2be3799bcdbeee6c Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Tue, 5 Nov 2024 13:33:22 +0200 Subject: [PATCH 3/4] feat: wip invoice paper template server-side --- .../src/components/InvoicePaperTemplate.tsx | 17 -- .../src/components/PaperTemplate.tsx | 151 +++++++++++------- .../src/components/PaperTemplateLayout.tsx | 21 ++- shared/pdf-templates/src/index.ts | 1 + .../renders/render-invoice-paper-template.tsx | 36 +++++ 5 files changed, 136 insertions(+), 90 deletions(-) create mode 100644 shared/pdf-templates/src/renders/render-invoice-paper-template.tsx diff --git a/shared/pdf-templates/src/components/InvoicePaperTemplate.tsx b/shared/pdf-templates/src/components/InvoicePaperTemplate.tsx index 2d29c0db9..0c0dbfa4b 100644 --- a/shared/pdf-templates/src/components/InvoicePaperTemplate.tsx +++ b/shared/pdf-templates/src/components/InvoicePaperTemplate.tsx @@ -1,10 +1,8 @@ -import { renderToString } from 'react-dom/server'; import { PaperTemplate, PaperTemplateProps, PaperTemplateTotalBorder, } from './PaperTemplate'; -import { x } from '@xstyled/emotion'; import { Box } from '../lib/layout/Box'; import { Text } from '../lib/text/Text'; import { Stack } from '../lib/layout/Stack'; @@ -17,8 +15,6 @@ import { DefaultPdfTemplateAddressBilledTo, DefaultPdfTemplateAddressBilledFrom, } from './_constants'; -import { PaperTemplateLayout } from './PaperTemplateLayout'; -import createCache from '@emotion/cache'; interface PapaerLine { item?: string; @@ -328,16 +324,3 @@ export function InvoicePaperTemplate({ ); } - -export const renderInvoicePaperTemplateHtml = ( - props: InvoicePaperTemplateProps -) => { - const key = 'custom'; - const cache = createCache({ key }); - - return renderToString( - - - - ); -}; diff --git a/shared/pdf-templates/src/components/PaperTemplate.tsx b/shared/pdf-templates/src/components/PaperTemplate.tsx index 73bd4f73a..d51a7ca3b 100644 --- a/shared/pdf-templates/src/components/PaperTemplate.tsx +++ b/shared/pdf-templates/src/components/PaperTemplate.tsx @@ -2,30 +2,10 @@ import React from 'react'; import clsx from 'classnames'; import { get, isFunction } from 'lodash'; import { x } from '@xstyled/emotion'; +import { css } from '@emotion/css'; import { Box, BoxProps } from '../lib/layout/Box'; import { Group, GroupProps } from '../lib/layout/Group'; -const styles = { - root: 'root', - bigTitle: 'bigTitle', - logoWrap: 'logoWrap', - logoImg: 'logoImg', - table: 'table', - tableBody: 'tableBody', - totals: 'totals', - totalsItem: 'totalsItem', - totalBottomBordered: 'totalBottomBordered', - totalBottomGrayBordered: 'totalBottomGrayBordered', - totalsItemLabel: 'totalsItemLabel', - totalsItemAmount: 'totalsItemAmount', - addressRoot: 'addressRoot', - paragraph: 'paragraph', - paragraphLabel: 'paragraphLabel', - details: 'details', - detail: 'detail', - detailLabel: 'detailLabel', -}; - export interface PaperTemplateProps extends BoxProps { primaryColor?: string; secondaryColor?: string; @@ -51,7 +31,7 @@ export function PaperTemplate({ h="1123px" w="794px" {...restProps} - className={clsx(styles.root, restProps?.className)} + className={restProps?.className} > {children} @@ -76,14 +56,11 @@ interface PaperTemplateBigTitleProps { PaperTemplate.BigTitle = ({ title }: PaperTemplateBigTitleProps) => { return ( {title} @@ -96,15 +73,63 @@ interface PaperTemplateLogoProps { PaperTemplate.Logo = ({ logoUri }: PaperTemplateLogoProps) => { return ( -
- -
+ + + ); }; PaperTemplate.Table = ({ columns, data }: PaperTemplateTableProps) => { return ( - +
{columns.map((col, index) => ( @@ -115,7 +140,7 @@ PaperTemplate.Table = ({ columns, data }: PaperTemplateTableProps) => { - + {data.map((_data: any) => ( {columns.map((column, index) => ( @@ -148,8 +173,16 @@ PaperTemplate.Totals = ({ children }: { children: React.ReactNode }) => { }} > {children} - ); + + ); }; + +const totalBottomBordered = css` + border-bottom: 1px solid #000; +`; +const totalBottomGrayBordered = css` + border-bottom: 1px solid #dadada; +`; PaperTemplate.TotalLine = ({ label, amount, @@ -165,34 +198,34 @@ PaperTemplate.TotalLine = ({ {label} - {amount} + + {amount} + ); }; -PaperTemplate.MutedText = () => { }; - -PaperTemplate.Text = () => { }; - PaperTemplate.AddressesGroup = (props: GroupProps) => { return ( div { + flex: 1; + } + `} /> ); }; + PaperTemplate.Address = ({ children }: { children: React.ReactNode }) => { return {children}; }; @@ -205,22 +238,16 @@ PaperTemplate.Statement = ({ children: React.ReactNode; }) => { return ( -
- {label &&
{label}
} -
{children}
-
+ + {label && {label}} + {children} + ); }; PaperTemplate.TermsList = ({ children }: { children: React.ReactNode }) => { return ( - + {children} ); @@ -234,9 +261,9 @@ PaperTemplate.TermsItem = ({ children: React.ReactNode; }) => { return ( - - {label} + + {label} {children} - +
); }; diff --git a/shared/pdf-templates/src/components/PaperTemplateLayout.tsx b/shared/pdf-templates/src/components/PaperTemplateLayout.tsx index d2e767837..5d8c233af 100644 --- a/shared/pdf-templates/src/components/PaperTemplateLayout.tsx +++ b/shared/pdf-templates/src/components/PaperTemplateLayout.tsx @@ -1,25 +1,24 @@ import { CacheProvider, ThemeProvider } from '@emotion/react'; import { EmotionCache } from '@emotion/cache'; import { defaultTheme } from '@xstyled/system'; +import { Preflight } from '@xstyled/emotion'; const theme = { ...defaultTheme, }; -export function PaperTemplateLayout({ cache, children }: { +export function PaperTemplateLayout({ + cache, + children, +}: { children: React.ReactNode; cache: EmotionCache; }) { - const html = ( + return ( - {children} + + + {children} + ); - - return ( - - -
{html}
- - - ); } diff --git a/shared/pdf-templates/src/index.ts b/shared/pdf-templates/src/index.ts index 8a15d72ed..4b0a66437 100644 --- a/shared/pdf-templates/src/index.ts +++ b/shared/pdf-templates/src/index.ts @@ -1,2 +1,3 @@ export * from './components/PaperTemplate'; export * from './components/InvoicePaperTemplate'; +export * from './renders/render-invoice-paper-template'; diff --git a/shared/pdf-templates/src/renders/render-invoice-paper-template.tsx b/shared/pdf-templates/src/renders/render-invoice-paper-template.tsx new file mode 100644 index 000000000..dea926919 --- /dev/null +++ b/shared/pdf-templates/src/renders/render-invoice-paper-template.tsx @@ -0,0 +1,36 @@ +import { renderToString } from 'react-dom/server'; +import createCache from '@emotion/cache'; +import { + InvoicePaperTemplate, + InvoicePaperTemplateProps, +} from '../components/InvoicePaperTemplate'; +import { PaperTemplateLayout } from '../components/PaperTemplateLayout'; +import { extractCritical } from '@emotion/server'; + +export const renderInvoicePaperTemplateHtml = ( + props: InvoicePaperTemplateProps +) => { + const key = 'invoice-paper-template'; + const cache = createCache({ key }); + + const renderedHtml = renderToString( + + + + ); + const { html, css, ids } = extractCritical(renderedHtml); + + return ` + + + + + + Invoice + + + +
${html}
+ +`; +}; From d23f33bae408bb1f92ea72d5b40ee9d8514404e1 Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Tue, 5 Nov 2024 17:09:47 +0200 Subject: [PATCH 4/4] feat: add style to SSR invoice paper template --- .../api/controllers/Sales/SalesInvoices.ts | 6 +-- .../services/Sales/Invoices/SaleInvoicePdf.ts | 15 ++---- .../src/components/InvoicePaperTemplate.tsx | 6 +-- .../src/components/PaperTemplate.tsx | 46 +++++++++++-------- .../src/components/PaperTemplateLayout.tsx | 44 +++++++++++++++++- shared/pdf-templates/src/constants.ts | 5 ++ shared/pdf-templates/src/lib/text/Text.tsx | 10 ++-- .../renders/render-invoice-paper-template.tsx | 29 +++--------- .../pdf-templates/src/renders/render-ssr.tsx | 31 +++++++++++++ 9 files changed, 131 insertions(+), 61 deletions(-) create mode 100644 shared/pdf-templates/src/constants.ts create mode 100644 shared/pdf-templates/src/renders/render-ssr.tsx diff --git a/packages/server/src/api/controllers/Sales/SalesInvoices.ts b/packages/server/src/api/controllers/Sales/SalesInvoices.ts index 4393b21ff..999806a17 100644 --- a/packages/server/src/api/controllers/Sales/SalesInvoices.ts +++ b/packages/server/src/api/controllers/Sales/SalesInvoices.ts @@ -450,15 +450,15 @@ export default class SaleInvoicesController extends BaseController { ACCEPT_TYPE.APPLICATION_JSON, ACCEPT_TYPE.APPLICATION_PDF, ]); - // Retrieves invoice in pdf format. - if (true) { + // Retrieves invoice in PDF format. + if (ACCEPT_TYPE.APPLICATION_PDF === acceptType) { const [pdfContent, filename] = await this.saleInvoiceApplication.saleInvoicePdf( tenantId, saleInvoiceId ); res.set({ - 'Content-Type': 'text/html', + 'Content-Type': 'application/pdf', 'Content-Length': pdfContent.length, 'Content-Disposition': `attachment; filename="${filename}"`, }); diff --git a/packages/server/src/services/Sales/Invoices/SaleInvoicePdf.ts b/packages/server/src/services/Sales/Invoices/SaleInvoicePdf.ts index c2e66557a..394c8c222 100644 --- a/packages/server/src/services/Sales/Invoices/SaleInvoicePdf.ts +++ b/packages/server/src/services/Sales/Invoices/SaleInvoicePdf.ts @@ -47,16 +47,9 @@ export class SaleInvoicePdf { tenantId, invoiceId ); - // const htmlContent = await this.templateInjectable.render( - // tenantId, - // 'modules/invoice-standard', - // brandingAttributes - // ); - - const htmlContent = renderInvoicePaperTemplateHtml({}); - - console.log(htmlContent); - + const htmlContent = renderInvoicePaperTemplateHtml({ + ...brandingAttributes, + }); // Converts the given html content to pdf document. const buffer = await this.chromiumlyTenancy.convertHtmlContent( tenantId, @@ -69,7 +62,7 @@ export class SaleInvoicePdf { events.saleInvoice.onPdfViewed, eventPayload ); - return [htmlContent, filename]; + return [buffer, filename]; } /** diff --git a/shared/pdf-templates/src/components/InvoicePaperTemplate.tsx b/shared/pdf-templates/src/components/InvoicePaperTemplate.tsx index 0c0dbfa4b..5e718b107 100644 --- a/shared/pdf-templates/src/components/InvoicePaperTemplate.tsx +++ b/shared/pdf-templates/src/components/InvoicePaperTemplate.tsx @@ -243,15 +243,15 @@ export function InvoicePaperTemplate({ {data.item} {data.description} ), }, - { label: lineQuantityLabel, accessor: 'quantity' }, + { label: lineQuantityLabel, accessor: 'quantity', align: 'right' }, { label: lineRateLabel, accessor: 'rate', align: 'right' }, { label: lineTotalLabel, accessor: 'total', align: 'right' }, ]} diff --git a/shared/pdf-templates/src/components/PaperTemplate.tsx b/shared/pdf-templates/src/components/PaperTemplate.tsx index d51a7ca3b..1953959f6 100644 --- a/shared/pdf-templates/src/components/PaperTemplate.tsx +++ b/shared/pdf-templates/src/components/PaperTemplate.tsx @@ -20,10 +20,9 @@ export function PaperTemplate({ }: PaperTemplateProps) { return ( {children} @@ -39,16 +46,6 @@ export function PaperTemplate({ ); } -interface PaperTemplateTableProps { - columns: Array<{ - accessor: string | ((data: Record) => JSX.Element); - label: string; - value?: JSX.Element; - align?: 'left' | 'center' | 'right'; - }>; - data: Array>; -} - interface PaperTemplateBigTitleProps { title: string; } @@ -86,6 +83,16 @@ PaperTemplate.Logo = ({ logoUri }: PaperTemplateLogoProps) => { ); }; +interface PaperTemplateTableProps { + columns: Array<{ + accessor: string | ((data: Record) => JSX.Element); + label: string; + value?: JSX.Element; + align?: 'left' | 'center' | 'right'; + }>; + data: Array>; +} + PaperTemplate.Table = ({ columns, data }: PaperTemplateTableProps) => { return (
{ {columns.map((col, index) => ( - + ))} @@ -144,11 +151,11 @@ PaperTemplate.Table = ({ columns, data }: PaperTemplateTableProps) => { {data.map((_data: any) => ( {columns.map((column, index) => ( - + ))} ))} @@ -183,6 +190,7 @@ const totalBottomBordered = css` const totalBottomGrayBordered = css` border-bottom: 1px solid #dadada; `; + PaperTemplate.TotalLine = ({ label, amount, @@ -262,7 +270,9 @@ PaperTemplate.TermsItem = ({ }) => { return ( - {label} + + {label} + {children} ); diff --git a/shared/pdf-templates/src/components/PaperTemplateLayout.tsx b/shared/pdf-templates/src/components/PaperTemplateLayout.tsx index 5d8c233af..07e1ad2de 100644 --- a/shared/pdf-templates/src/components/PaperTemplateLayout.tsx +++ b/shared/pdf-templates/src/components/PaperTemplateLayout.tsx @@ -1,7 +1,7 @@ import { CacheProvider, ThemeProvider } from '@emotion/react'; import { EmotionCache } from '@emotion/cache'; import { defaultTheme } from '@xstyled/system'; -import { Preflight } from '@xstyled/emotion'; +import { createGlobalStyle, Preflight } from '@xstyled/emotion'; const theme = { ...defaultTheme, @@ -17,8 +17,50 @@ export function PaperTemplateLayout({ + + {children} ); } + +// Create global styles to set the body font +const GlobalStyles = createGlobalStyle` +*, +*::before, +*::after { + box-sizing: border-box; +} +th { + text-align: inherit; + text-align: -webkit-match-parent; +} +thead, +tbody, +tfoot, +tr, +td, +th { + border-color: inherit; + border-style: solid; + border-width: 0; +} + +body{ + margin: 0; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #000; + background-color: #fff; + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: transparent; +} + +body, h1, h2, h3, h4, h5, h6{ + font-family: "Open Sans", sans-serif; + font-optical-sizing: auto; + font-style: normal; +} +`; diff --git a/shared/pdf-templates/src/constants.ts b/shared/pdf-templates/src/constants.ts new file mode 100644 index 000000000..839b3949f --- /dev/null +++ b/shared/pdf-templates/src/constants.ts @@ -0,0 +1,5 @@ +export const OpenSansFontLink = ` + + + +`; diff --git a/shared/pdf-templates/src/lib/text/Text.tsx b/shared/pdf-templates/src/lib/text/Text.tsx index eabe132cf..e65b05472 100644 --- a/shared/pdf-templates/src/lib/text/Text.tsx +++ b/shared/pdf-templates/src/lib/text/Text.tsx @@ -1,5 +1,9 @@ -import { x } from '@xstyled/emotion'; +import { SystemProps, x } from '@xstyled/emotion'; -export const Text = ({ children }: { children: React.ReactNode }) => { - return {children}; +export interface TextProps extends SystemProps { + children?: React.ReactNode; +} + +export const Text = ({ children, ...restProps }: TextProps) => { + return {children}; }; diff --git a/shared/pdf-templates/src/renders/render-invoice-paper-template.tsx b/shared/pdf-templates/src/renders/render-invoice-paper-template.tsx index dea926919..e34d85e25 100644 --- a/shared/pdf-templates/src/renders/render-invoice-paper-template.tsx +++ b/shared/pdf-templates/src/renders/render-invoice-paper-template.tsx @@ -1,36 +1,21 @@ import { renderToString } from 'react-dom/server'; import createCache from '@emotion/cache'; +import { css } from '@emotion/css'; import { InvoicePaperTemplate, InvoicePaperTemplateProps, } from '../components/InvoicePaperTemplate'; import { PaperTemplateLayout } from '../components/PaperTemplateLayout'; import { extractCritical } from '@emotion/server'; +import { OpenSansFontLink } from '../constants'; +import { renderSSR } from './render-ssr'; export const renderInvoicePaperTemplateHtml = ( props: InvoicePaperTemplateProps ) => { - const key = 'invoice-paper-template'; - const cache = createCache({ key }); - - const renderedHtml = renderToString( - - - + return renderSSR( + ); - const { html, css, ids } = extractCritical(renderedHtml); - - return ` - - - - - - Invoice - - - -
${html}
- -`; }; diff --git a/shared/pdf-templates/src/renders/render-ssr.tsx b/shared/pdf-templates/src/renders/render-ssr.tsx new file mode 100644 index 000000000..25a067e3b --- /dev/null +++ b/shared/pdf-templates/src/renders/render-ssr.tsx @@ -0,0 +1,31 @@ +import { renderToString } from 'react-dom/server'; +import createCache from '@emotion/cache'; +import { extractCritical } from '@emotion/server'; +import { OpenSansFontLink } from '../constants'; +import { PaperTemplateLayout } from '../components/PaperTemplateLayout'; + +export const renderSSR = (children: React.ReactNode) => { + const key = 'invoice-paper-template'; + const cache = createCache({ key }); + + const renderedHtml = renderToString( + {children} + ); + const extractedHtml = extractCritical(renderedHtml); + + return ` + + + + + + Invoice + ${OpenSansFontLink} + + + +
${extractedHtml.html}
+ +`; +};
+ {col.label} -
+ {isFunction(column?.accessor) ? column?.accessor(_data) : get(_data, column.accessor)} -