diff --git a/packages/server/package.json b/packages/server/package.json index 427d42d00..050bbba3b 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -20,10 +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..999806a17 100644 --- a/packages/server/src/api/controllers/Sales/SalesInvoices.ts +++ b/packages/server/src/api/controllers/Sales/SalesInvoices.ts @@ -450,8 +450,8 @@ export default class SaleInvoicesController extends BaseController { ACCEPT_TYPE.APPLICATION_JSON, ACCEPT_TYPE.APPLICATION_PDF, ]); - // Retrieves invoice in pdf format. - if (ACCEPT_TYPE.APPLICATION_PDF == acceptType) { + // Retrieves invoice in PDF format. + if (ACCEPT_TYPE.APPLICATION_PDF === acceptType) { const [pdfContent, filename] = await this.saleInvoiceApplication.saleInvoicePdf( tenantId, diff --git a/packages/server/src/services/Sales/Invoices/SaleInvoicePdf.ts b/packages/server/src/services/Sales/Invoices/SaleInvoicePdf.ts index d2c78a8b4..394c8c222 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,9 @@ export class SaleInvoicePdf { tenantId, invoiceId ); - const htmlContent = await this.templateInjectable.render( - tenantId, - 'modules/invoice-standard', - brandingAttributes - ); + const htmlContent = renderInvoicePaperTemplateHtml({ + ...brandingAttributes, + }); // Converts the given html content to pdf document. const buffer = await this.chromiumlyTenancy.convertHtmlContent( tenantId, diff --git a/packages/webapp/package.json b/packages/webapp/package.json index 0db7053e3..c997612b2 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.7", "@blueprintjs-formik/datetime": "^0.3.7", "@blueprintjs-formik/select": "^0.3.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a4b433611..34598c1cd 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,6 +959,121 @@ importers: specifier: ^5.4.9 version: 5.4.10(@types/node@20.5.1)(less@4.2.0) + shared/pdf-templates: + dependencies: + '@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) + 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: /@alloc/quick-lru@5.2.0: @@ -1756,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==} @@ -1791,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) @@ -1814,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) @@ -1842,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 @@ -1875,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 @@ -1984,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: @@ -2004,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 @@ -2022,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): @@ -2036,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==} @@ -2048,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 @@ -2062,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 @@ -2154,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'} @@ -2189,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==} @@ -2313,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): @@ -2385,7 +2501,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0) dev: true @@ -2889,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-plugin-utils': 7.24.5 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-plugin-utils': 7.25.9 '@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): @@ -2901,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-plugin-utils': 7.24.5 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-plugin-utils': 7.25.9 '@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==} @@ -3318,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): @@ -3329,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==} @@ -3367,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): @@ -3380,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==} @@ -3391,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): @@ -3402,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==} @@ -3687,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): @@ -3717,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): @@ -3731,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): @@ -3755,7 +3893,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.25.9 regenerator-transform: 0.15.2 dev: false @@ -3766,7 +3904,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.25.9 regenerator-transform: 0.15.2 /@babel/plugin-transform-reserved-words@7.24.1(@babel/core@7.24.5): @@ -3795,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) @@ -4239,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): @@ -4264,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) @@ -4308,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==} @@ -4324,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 @@ -4337,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: @@ -4356,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: @@ -4735,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' @@ -5016,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 @@ -5027,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: @@ -5060,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: @@ -5068,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: @@ -5078,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: @@ -5137,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: @@ -5159,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 @@ -5186,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,7 +5412,6 @@ packages: cpu: [arm64] os: [android] requiresBuild: true - dev: true optional: true /@esbuild/android-arm64@0.21.5: @@ -5270,7 +5436,6 @@ packages: cpu: [arm] os: [android] requiresBuild: true - dev: true optional: true /@esbuild/android-arm@0.21.5: @@ -5295,7 +5460,6 @@ packages: cpu: [x64] os: [android] requiresBuild: true - dev: true optional: true /@esbuild/android-x64@0.21.5: @@ -5320,7 +5484,6 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true - dev: true optional: true /@esbuild/darwin-arm64@0.21.5: @@ -5345,7 +5508,6 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true - dev: true optional: true /@esbuild/darwin-x64@0.21.5: @@ -5370,7 +5532,6 @@ packages: cpu: [arm64] os: [freebsd] requiresBuild: true - dev: true optional: true /@esbuild/freebsd-arm64@0.21.5: @@ -5395,7 +5556,6 @@ packages: cpu: [x64] os: [freebsd] requiresBuild: true - dev: true optional: true /@esbuild/freebsd-x64@0.21.5: @@ -5420,7 +5580,6 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-arm64@0.21.5: @@ -5445,7 +5604,6 @@ packages: cpu: [arm] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-arm@0.21.5: @@ -5470,7 +5628,6 @@ packages: cpu: [ia32] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-ia32@0.21.5: @@ -5495,7 +5652,6 @@ packages: cpu: [loong64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-loong64@0.21.5: @@ -5520,7 +5676,6 @@ packages: cpu: [mips64el] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-mips64el@0.21.5: @@ -5545,7 +5700,6 @@ packages: cpu: [ppc64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-ppc64@0.21.5: @@ -5570,7 +5724,6 @@ packages: cpu: [riscv64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-riscv64@0.21.5: @@ -5595,7 +5748,6 @@ packages: cpu: [s390x] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-s390x@0.21.5: @@ -5620,7 +5772,6 @@ packages: cpu: [x64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-x64@0.21.5: @@ -5645,7 +5796,6 @@ packages: cpu: [x64] os: [netbsd] requiresBuild: true - dev: true optional: true /@esbuild/netbsd-x64@0.21.5: @@ -5678,7 +5828,6 @@ packages: cpu: [x64] os: [openbsd] requiresBuild: true - dev: true optional: true /@esbuild/openbsd-x64@0.21.5: @@ -5703,7 +5852,6 @@ packages: cpu: [x64] os: [sunos] requiresBuild: true - dev: true optional: true /@esbuild/sunos-x64@0.21.5: @@ -5728,7 +5876,6 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true - dev: true optional: true /@esbuild/win32-arm64@0.21.5: @@ -5753,7 +5900,6 @@ packages: cpu: [ia32] os: [win32] requiresBuild: true - dev: true optional: true /@esbuild/win32-ia32@0.21.5: @@ -5778,7 +5924,6 @@ packages: cpu: [x64] os: [win32] requiresBuild: true - dev: true optional: true /@esbuild/win32-x64@0.21.5: @@ -5846,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 @@ -5993,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 @@ -6382,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 @@ -6406,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 @@ -6561,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==} @@ -6585,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: @@ -6600,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 @@ -7243,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 @@ -8260,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): @@ -9393,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' @@ -9891,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 @@ -11270,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==} @@ -11540,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: @@ -11712,7 +11863,7 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/regexpp': 4.11.2 '@typescript-eslint/parser': 8.11.0(eslint@9.13.0)(typescript@5.6.3) '@typescript-eslint/scope-manager': 8.11.0 '@typescript-eslint/type-utils': 8.11.0(eslint@9.13.0)(typescript@5.6.3) @@ -12408,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: @@ -12416,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: @@ -12427,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: @@ -12571,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: @@ -13377,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 @@ -13514,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): @@ -13533,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 @@ -13543,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: @@ -13680,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: @@ -14294,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==} @@ -14523,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 @@ -15063,7 +15262,6 @@ packages: /commander@10.0.1: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} - dev: false /commander@2.15.1: resolution: {integrity: sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==} @@ -15234,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: @@ -15438,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: @@ -15448,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: @@ -15474,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'} @@ -15504,7 +15686,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==} @@ -15728,13 +15909,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): @@ -15766,15 +15947,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==} @@ -15795,14 +15976,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): @@ -15894,62 +16075,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 @@ -16188,6 +16369,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'} @@ -16748,7 +16933,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: @@ -16766,6 +16951,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 @@ -17218,7 +17409,6 @@ packages: '@esbuild/win32-arm64': 0.18.20 '@esbuild/win32-ia32': 0.18.20 '@esbuild/win32-x64': 0.18.20 - dev: true /esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} @@ -17815,7 +18005,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: @@ -17980,7 +18170,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: @@ -18483,7 +18673,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: @@ -18794,7 +18984,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) @@ -18802,7 +18992,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 @@ -18822,7 +19012,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 @@ -18837,7 +19027,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: @@ -19376,7 +19589,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 @@ -20040,6 +20253,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'} @@ -20057,7 +20281,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: @@ -20325,13 +20549,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==} @@ -20521,6 +20745,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 @@ -21425,7 +21653,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 @@ -21467,7 +21695,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 @@ -21669,7 +21897,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 @@ -21754,7 +21982,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 @@ -21770,7 +21998,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 @@ -21785,7 +22013,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 @@ -22069,7 +22297,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 @@ -22936,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 @@ -22949,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 @@ -23001,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 @@ -23027,7 +23255,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: @@ -23923,7 +24151,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: @@ -24362,9 +24590,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'} @@ -24577,6 +24812,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'} @@ -25013,7 +25252,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 @@ -25158,6 +25397,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'} @@ -25413,7 +25656,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 @@ -25746,7 +25989,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 @@ -26087,6 +26330,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: @@ -26196,12 +26441,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 @@ -26246,27 +26491,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 @@ -26310,40 +26555,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): @@ -26422,18 +26667,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'} @@ -26454,16 +26687,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} @@ -26485,24 +26708,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'} @@ -26517,7 +26722,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 @@ -26573,7 +26778,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): @@ -26587,7 +26792,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 @@ -26610,120 +26815,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==} @@ -26746,94 +26941,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 @@ -26860,14 +27055,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 @@ -26920,7 +27115,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) @@ -26967,24 +27162,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 @@ -27013,24 +27208,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 @@ -27952,7 +28147,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 @@ -27969,9 +28164,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 @@ -27994,7 +28189,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 @@ -28462,10 +28657,10 @@ 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)(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) @@ -28547,6 +28742,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): @@ -28811,6 +29008,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: @@ -28912,7 +29118,6 @@ packages: engines: {node: '>= 10.13.0'} dependencies: resolve: 1.22.8 - dev: false /recursive-readdir@2.2.2: resolution: {integrity: sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==} @@ -29485,7 +29690,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 @@ -29684,7 +29889,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): @@ -29707,7 +29912,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: @@ -30306,7 +30511,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): @@ -30824,6 +31029,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: @@ -30966,7 +31175,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==} @@ -30981,7 +31190,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 @@ -31011,14 +31220,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 @@ -31215,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.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) - 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'} @@ -31384,8 +31562,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==} @@ -31417,7 +31594,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 @@ -31516,6 +31693,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: @@ -31814,7 +31998,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: @@ -31834,13 +32034,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 @@ -31912,7 +32112,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 @@ -31947,7 +32147,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 @@ -32192,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==} @@ -32457,8 +32658,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==} @@ -33054,6 +33255,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'} @@ -33065,7 +33298,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): @@ -33109,7 +33342,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: @@ -33126,7 +33359,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 @@ -33178,7 +33411,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 @@ -33189,13 +33422,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 @@ -33211,12 +33444,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==} @@ -33462,8 +33734,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 @@ -33636,7 +33908,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: @@ -33888,6 +34160,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'} @@ -33969,7 +34248,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/components/InvoicePaperTemplate.tsx b/shared/pdf-templates/src/components/InvoicePaperTemplate.tsx new file mode 100644 index 000000000..5e718b107 --- /dev/null +++ b/shared/pdf-templates/src/components/InvoicePaperTemplate.tsx @@ -0,0 +1,326 @@ +import { + PaperTemplate, + PaperTemplateProps, + PaperTemplateTotalBorder, +} from './PaperTemplate'; +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'; + +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', align: 'right' }, + { 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} + + )} + + + + ); +} diff --git a/shared/pdf-templates/src/components/PaperTemplate.tsx b/shared/pdf-templates/src/components/PaperTemplate.tsx new file mode 100644 index 000000000..1953959f6 --- /dev/null +++ b/shared/pdf-templates/src/components/PaperTemplate.tsx @@ -0,0 +1,279 @@ +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'; + +export interface PaperTemplateProps extends BoxProps { + primaryColor?: string; + secondaryColor?: string; + children?: React.ReactNode; +} + +export function PaperTemplate({ + primaryColor, + secondaryColor, + children, + ...restProps +}: PaperTemplateProps) { + return ( + + + {children} + + ); +} + +interface PaperTemplateBigTitleProps { + title: string; +} + +PaperTemplate.BigTitle = ({ title }: PaperTemplateBigTitleProps) => { + return ( + + {title} + + ); +}; + +interface PaperTemplateLogoProps { + logoUri: string; +} + +PaperTemplate.Logo = ({ logoUri }: PaperTemplateLogoProps) => { + return ( + + + + ); +}; + +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) => ( + + {col.label} + + ))} + + + + + {data.map((_data: any) => ( + + {columns.map((column, index) => ( + + {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} + + ); +}; + +const totalBottomBordered = css` + border-bottom: 1px solid #000; +`; +const totalBottomGrayBordered = css` + border-bottom: 1px solid #dadada; +`; + +PaperTemplate.TotalLine = ({ + label, + amount, + border, + style, +}: { + label: string; + amount: string; + border?: PaperTemplateTotalBorder; + style?: any; +}) => { + return ( + + {label} + + {amount} + + + ); +}; + +PaperTemplate.AddressesGroup = (props: GroupProps) => { + return ( + div { + flex: 1; + } + `} + /> + ); +}; + +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..07e1ad2de --- /dev/null +++ b/shared/pdf-templates/src/components/PaperTemplateLayout.tsx @@ -0,0 +1,66 @@ +import { CacheProvider, ThemeProvider } from '@emotion/react'; +import { EmotionCache } from '@emotion/cache'; +import { defaultTheme } from '@xstyled/system'; +import { createGlobalStyle, Preflight } from '@xstyled/emotion'; + +const theme = { + ...defaultTheme, +}; +export function PaperTemplateLayout({ + cache, + children, +}: { + children: React.ReactNode; + cache: EmotionCache; +}) { + return ( + + + + + + {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/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/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/index.ts b/shared/pdf-templates/src/index.ts new file mode 100644 index 000000000..4b0a66437 --- /dev/null +++ b/shared/pdf-templates/src/index.ts @@ -0,0 +1,3 @@ +export * from './components/PaperTemplate'; +export * from './components/InvoicePaperTemplate'; +export * from './renders/render-invoice-paper-template'; 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..e65b05472 --- /dev/null +++ b/shared/pdf-templates/src/lib/text/Text.tsx @@ -0,0 +1,9 @@ +import { SystemProps, x } from '@xstyled/emotion'; + +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 new file mode 100644 index 000000000..e34d85e25 --- /dev/null +++ b/shared/pdf-templates/src/renders/render-invoice-paper-template.tsx @@ -0,0 +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 +) => { + return renderSSR( + + ); +}; 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}
+ +`; +}; 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'], + }, + ], + }, +};