diff --git a/.eslintrc b/.eslintrc index 1508c12..f329833 100644 --- a/.eslintrc +++ b/.eslintrc @@ -2,6 +2,111 @@ "extends": "ksv741", "reportUnusedDisableDirectives": true, "settings": { - "import/resolver": "webpack" + "react": { + "version": "detect" + }, + "import/resolver": { + "typescript": { + "project": "./tsconfig.json" + } + } + }, + "rules": { + "import/order": [ + "error", { + "pathGroups": [ + { + "pattern": "__spec__/**", + "group": "builtin", + "position": "before" + }, + { + "pattern": "apps/**", + "group": "internal", + "position": "after" + }, + { + "pattern": "pages/**", + "group": "internal", + "position": "after" + }, + { + "pattern": "widgets/**", + "group": "internal", + "position": "after" + }, + { + "pattern": "features/**", + "group": "internal", + "position": "after" + }, + { + "pattern": "entities/**", + "group": "internal", + "position": "after" + }, + { + "pattern": "shared/**", + "group": "internal", + "position": "after" + } + ], + "distinctGroup": true, + "groups": [ + "builtin", + "external", + "internal", + "parent", + "sibling", + "object", + "index", + "type" + ], + "newlines-between": "always", + "alphabetize": { + "order": "asc", + "caseInsensitive": true + } + }], + "import/extensions": ["error", { + "js": "never", + "jsx": "never", + "tsx": "never", + "ts": "never" + }], + "import/no-extraneous-dependencies": ["error", { + "devDependencies": [ + "test/**", + "tests/**", + "spec/**", + "**/__tests__/**", + "**/__mocks__/**", + "**/__spec__/**", + "**/configs/**", + "test.{[j|t]sx,[j|t]sx}", + "test-*.{[j|t]sx,[j|t]sx}", + "**/*{.,_}{test,spec}.{[j|t]sx,[j|t]sx}", + "**/jest.config.[j|t]s", + "**/jest.setup.[j|t]s", + "**/vue.config.[j|t]s", + "**/webpack.config.[j|t]s", + "**/webpack.config.*.[j|t]s", + "**/rollup.config.[j|t]s", + "**/rollup.config.*.[j|t]s", + "**/gulpfile.[j|t]s", + "**/gulpfile.*.[j|t]s", + "**/Gruntfile{,.[j|t]}s", + "**/protractor.conf.[j|t]s", + "**/protractor.conf.*.[j|t]s", + "**/karma.conf.[j|t]s", + "**/.eslintrc.[j|t]s" + ], + "optionalDependencies": false + }], + "react/function-component-definition": [ + "error", { + "namedComponents": "arrow-function", + "unnamedComponents": "arrow-function" + }] } } diff --git a/.gitignore b/.gitignore index 5a69be0..e793fc9 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,7 @@ yarn-error.log* # ide /.vscode /.idea + +.yarn/* +!.yarn/releases +!.yarn/plugins diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1425132..3886342 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,4 @@ -image: node:20.11.1-alpine +image: node:20.14.0-alpine stages: - preparing @@ -28,7 +28,18 @@ test: script: - yarn run test:start only: + - branches - merge_requests + - tags + +typechecking: + stage: checking + script: + - yarn run typechecking + only: + - branches + - merge_requests + - tags pages: stage: deploy diff --git a/.nvmrc b/.nvmrc index 2dbbe00..9075659 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -20.11.1 +20.15.0 diff --git a/.yarn/install-state.gz b/.yarn/install-state.gz deleted file mode 100644 index 9f2fe1d..0000000 Binary files a/.yarn/install-state.gz and /dev/null differ diff --git a/CHANGELOG.md b/CHANGELOG.md index a038866..dfe5036 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,32 @@ # MoneyControll App CHANGELOG +### 0.0.2 (2024-04-29) + + +### 🛠️ Bug Fixes + +* fix spec files eslint ([1818a27](https://gitlab.com/money-control2/web/frontend/commit/1818a279b5b79239c98d43b5689b63365be263dd)) + + +### 🚀 New Features + +* add calendar page ([950fbee](https://gitlab.com/money-control2/web/frontend/commit/950fbee317e45a1d9d3aca50e71869e5fdbc9cd5)) +* add calendar widget ([078e2c9](https://gitlab.com/money-control2/web/frontend/commit/078e2c987fcdb3093416b9fb06d83de7dfcd88c5)) +* add customization calendar widget ([c950bc6](https://gitlab.com/money-control2/web/frontend/commit/c950bc675799d7f11d1b067eb38cae14d5236a3e)) +* add DatePicker ([422bef6](https://gitlab.com/money-control2/web/frontend/commit/422bef601f9203de8180e63a4ef556906828e2f8)) +* add helpers ([29c1bce](https://gitlab.com/money-control2/web/frontend/commit/29c1bce814866bb6f3ee408dd04d932be025a367)) +* add highlight props ([46e1cd5](https://gitlab.com/money-control2/web/frontend/commit/46e1cd5d4aa2433f3e09add7382ed2bdd8453d1d)) +* add jest user events ([c51c36c](https://gitlab.com/money-control2/web/frontend/commit/c51c36c0417ce0f49e8bf159d72c1714f86a6775)) +* add typescript [#9](https://gitlab.com/money-control2/web/frontend/issues/9) ([a603f31](https://gitlab.com/money-control2/web/frontend/commit/a603f31c1a4f2f12842a647bcd6f34bbe0274708)) +* **app:** add base scripts [#1](https://gitlab.com/money-control2/web/frontend/issues/1) ([3977ac2](https://gitlab.com/money-control2/web/frontend/commit/3977ac2adc25e008b9db0e64f58893e70176f5ff)) +* **app:** add eslint [#3](https://gitlab.com/money-control2/web/frontend/issues/3) ([c29db6f](https://gitlab.com/money-control2/web/frontend/commit/c29db6ffd178e8cb2abf4db2572c750f5853005f)) +* **app:** add eslint for jest files [#3](https://gitlab.com/money-control2/web/frontend/issues/3) ([f50c60b](https://gitlab.com/money-control2/web/frontend/commit/f50c60b6814eba28b4458de446e8fc7d8a0645b0)) +* **app:** add git hooks control [#4](https://gitlab.com/money-control2/web/frontend/issues/4) ([9f8eaf4](https://gitlab.com/money-control2/web/frontend/commit/9f8eaf424e0b03eaab30362e62ad30de910eeaba)) +* **app:** add jest testing [#2](https://gitlab.com/money-control2/web/frontend/issues/2) ([4697997](https://gitlab.com/money-control2/web/frontend/commit/4697997c1fcee67d10389a395b79de01ef205114)) +* **app:** add standard-version [#5](https://gitlab.com/money-control2/web/frontend/issues/5) ([fe57ae4](https://gitlab.com/money-control2/web/frontend/commit/fe57ae4a5e4c986923d3851e1742965e4570839c)) +* **hoc:** add withProvider HOC ([bb28d93](https://gitlab.com/money-control2/web/frontend/commit/bb28d93016d67457822b31b97ee69b733161da0d)) +* **shared:** add constants and utils ([afde44b](https://gitlab.com/money-control2/web/frontend/commit/afde44beade36a28c0e57dde7d6cac14c74fa4ff)) +* update project to typescript [#9](https://gitlab.com/money-control2/web/frontend/issues/9) ([8c5e4a0](https://gitlab.com/money-control2/web/frontend/commit/8c5e4a08bf2599a0a4c41ededec63fe2f725f8dd)) + ### 0.0.1 (2024-03-28) diff --git a/README.md b/README.md index de10730..c500089 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Money Controll Frontend SPA *** -### Application to control your income and outcome money, planning your personal budget +### Application path control your income and outcome money, planning your personal budget ### Scripts - `start:dev` - start local application on [`https://localhost:3000`](https://localhost:3000) diff --git a/__spec__/custom-expects/toHaveDataDate.ts b/__spec__/custom-expects/toHaveDataDate.ts new file mode 100644 index 0000000..bb3debe --- /dev/null +++ b/__spec__/custom-expects/toHaveDataDate.ts @@ -0,0 +1,20 @@ +import type { MatcherFunction } from 'expect'; + +// eslint-disable-next-line func-names +export const toHaveDataDate: MatcherFunction<[dataDate: unknown]> = function (actual, dataDate) { + if (!(actual instanceof HTMLElement)) { + throw new TypeError('These must be HTMLElement!'); + } + + const actualDataDate = actual.getAttribute('data-date'); + const pass = this.equals(actualDataDate, dataDate); + + const message = () => `${this.utils.matcherHint('toHaveDataDate', 'element')}\n\n` + + `Expected element to have data-date attribute:\n ${this.utils.printExpected(dataDate)}\n` + + `Received:\n ${this.utils.printReceived(actualDataDate)}`; + + return { + message, + pass, + }; +}; diff --git a/__spec__/custom-queries/byDataDate.ts b/__spec__/custom-queries/byDataDate.ts new file mode 100644 index 0000000..fc5e3d8 --- /dev/null +++ b/__spec__/custom-queries/byDataDate.ts @@ -0,0 +1,32 @@ +import { queryHelpers, buildQueries } from '@testing-library/react'; + +import type { DataDateString } from 'shared/types/date'; + +import type { GetErrorFunction } from '@testing-library/dom/types/query-helpers'; +import type { Matcher, MatcherOptions } from '@testing-library/react'; + +const queryAllByDataDate = ( + container: HTMLElement, + id: Matcher, + options?: MatcherOptions | undefined, +) => queryHelpers.queryAllByAttribute('data-date', container, id, options); + +const getMultipleError: GetErrorFunction<[id: DataDateString, options?: MatcherOptions | undefined]> = (_, dataDateValue) => `Found multiple elements with the data-date attribute of: ${dataDateValue}`; +const getMissingError: GetErrorFunction<[id: DataDateString, options?: MatcherOptions | undefined]> = (_, dataDateValue: string) => `Unable to find an element with the data-date attribute of: ${dataDateValue}`; + +const [ + queryByDataDate, + getAllByDataDate, + getByDataDate, + findAllByDataDate, + findByDataDate, +] = buildQueries(queryAllByDataDate, getMultipleError, getMissingError); + +export { + queryByDataDate, + queryAllByDataDate, + getByDataDate, + getAllByDataDate, + findAllByDataDate, + findByDataDate, +}; diff --git a/__spec__/custon-renders.tsx b/__spec__/custon-renders.tsx new file mode 100644 index 0000000..0678601 --- /dev/null +++ b/__spec__/custon-renders.tsx @@ -0,0 +1,20 @@ +import { ReactNode } from 'react'; +import { createMemoryRouter, RouterProvider } from 'react-router-dom'; + +import { render } from './utils'; + +export const renderWithProvider = (Component: ReactNode) => { + const routes = [ + { + path: '/', + element: Component, + }, + ]; + + const router = createMemoryRouter(routes, { + initialEntries: ['/'], + initialIndex: 0, + }); + + return render(); +}; diff --git a/__spec__/helpers.ts b/__spec__/helpers.ts new file mode 100644 index 0000000..8ec956f --- /dev/null +++ b/__spec__/helpers.ts @@ -0,0 +1,18 @@ +import { fireEvent } from '@testing-library/react'; + +import type { DataDateString } from 'shared/types/date'; + +import { screen } from './utils'; + +export const pickCellByDataDate = (dataDate: DataDateString) => { + const cellElem = screen.getByDataDate(dataDate); + fireEvent.click(cellElem); +}; + +export const dragAndDropCellByDataDate = (dragDataDate: DataDateString, dropDataDate: DataDateString) => { + const oldLastDateElem = screen.getByDataDate(dragDataDate); + const dropTarget = screen.getByDataDate(dropDataDate); + + fireEvent.dragStart(oldLastDateElem); + fireEvent.drop(dropTarget); +}; diff --git a/__spec__/utils.js b/__spec__/utils.js new file mode 100644 index 0000000..c3f60f4 --- /dev/null +++ b/__spec__/utils.js @@ -0,0 +1,15 @@ +import { render, queries, within } from '@testing-library/react'; + +import * as customQueries from './custom-queries/byDataDate'; + +const allQueries = { + ...queries, + ...customQueries, +}; + +const customScreen = within(document.body, allQueries); +const customWithin = (element) => within(element, allQueries); +const customRender = (ui, options) => render(ui, { queries: allQueries, ...options }); + +// override render method +export { customScreen as screen, customWithin as within, customRender as render }; diff --git a/configs/jest/__mocks__/fileMock.js b/configs/jest/__mocks__/fileMock.js deleted file mode 100644 index 86059f3..0000000 --- a/configs/jest/__mocks__/fileMock.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = 'test-file-stub'; diff --git a/configs/jest/__mocks__/fileMock.ts b/configs/jest/__mocks__/fileMock.ts new file mode 100644 index 0000000..602eb23 --- /dev/null +++ b/configs/jest/__mocks__/fileMock.ts @@ -0,0 +1 @@ +export default 'test-file-stub'; diff --git a/configs/jest/babel-jest.config.js b/configs/jest/babel-jest.config.js deleted file mode 100644 index 65874c3..0000000 --- a/configs/jest/babel-jest.config.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - presets: [ - '@babel/preset-env', - ['@babel/preset-react', { - runtime: 'automatic', - }], - ], -}; diff --git a/configs/jest/global.d.ts b/configs/jest/global.d.ts new file mode 100644 index 0000000..de06351 --- /dev/null +++ b/configs/jest/global.d.ts @@ -0,0 +1,10 @@ +declare global { + namespace jest { + // eslint-disable-next-line @typescript-eslint/consistent-type-definitions + interface Matchers { + toHaveDataDate: (dataDate: string) => R; + } + } +} + +export {}; diff --git a/configs/jest/setupTests.js b/configs/jest/setupTests.js deleted file mode 100644 index 7b0828b..0000000 --- a/configs/jest/setupTests.js +++ /dev/null @@ -1 +0,0 @@ -import '@testing-library/jest-dom'; diff --git a/configs/jest/setupTests.ts b/configs/jest/setupTests.ts new file mode 100644 index 0000000..499620e --- /dev/null +++ b/configs/jest/setupTests.ts @@ -0,0 +1,8 @@ +import '@testing-library/jest-dom'; +import { expect } from '@jest/globals'; + +import { toHaveDataDate } from '../../__spec__/custom-expects/toHaveDataDate'; + +expect.extend({ + toHaveDataDate, +}); diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index f0804c4..0000000 --- a/jest.config.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = { - testEnvironment: 'jsdom', - transform: { - '\\.jsx?$': ['babel-jest', { - configFile: './configs/jest/babel-jest.config.js', - }], - }, - setupFilesAfterEnv: ['./configs/jest/setupTests.js'], - modulePaths: ['src'], - moduleNameMapper: { - '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': - './configs/jest/__mocks__/fileMock.js', - '\\.(css|less|scss)$': 'identity-obj-proxy', - }, -}; diff --git a/jest.config.ts b/jest.config.ts new file mode 100644 index 0000000..5f87303 --- /dev/null +++ b/jest.config.ts @@ -0,0 +1,25 @@ +import type { Config } from 'jest'; + +const config: Config = { + clearMocks: true, + testEnvironment: 'jsdom', + coverageDirectory: 'coverage', + setupFilesAfterEnv: ['./configs/jest/setupTests.ts'], + modulePaths: [ + 'src', + '', + ], + rootDir: './', + verbose: true, + preset: 'ts-jest/presets/js-with-ts', + moduleNameMapper: { + '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': + '/configs/jest/__mocks__/fileMock.ts', + '\\.(css|less|scss)$': 'identity-obj-proxy', + }, + transformIgnorePatterns: [ + 'node_modules/(?!react-dnd|dnd-core|@react-dnd|react-dnd-html5-backend)', + ], +}; + +export default config; diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..509d54b --- /dev/null +++ b/nginx.conf @@ -0,0 +1,9 @@ +server { + listen 80; + server_name frontend; + location / { + # This would be the directory where your React app's static files are stored at + root /usr/share/nginx/html; + try_files $uri /index.html; + } +} diff --git a/offline_node_modules/@adobe-css-tools-npm-4.3.3-72a4f624fb-e76e712df7.zip b/offline_node_modules/@adobe-css-tools-npm-4.3.3-72a4f624fb-e76e712df7.zip deleted file mode 100644 index 797f5e7..0000000 Binary files a/offline_node_modules/@adobe-css-tools-npm-4.3.3-72a4f624fb-e76e712df7.zip and /dev/null differ diff --git a/offline_node_modules/@adobe-css-tools-npm-4.4.0-3e89ecd033-d65ddc7193.zip b/offline_node_modules/@adobe-css-tools-npm-4.4.0-3e89ecd033-d65ddc7193.zip new file mode 100644 index 0000000..fc18e7c Binary files /dev/null and b/offline_node_modules/@adobe-css-tools-npm-4.4.0-3e89ecd033-d65ddc7193.zip differ diff --git a/offline_node_modules/@apideck-better-ajv-errors-npm-0.3.6-8c1868a017-f89a1e16ec.zip b/offline_node_modules/@apideck-better-ajv-errors-npm-0.3.6-8c1868a017-f89a1e16ec.zip new file mode 100644 index 0000000..5636911 Binary files /dev/null and b/offline_node_modules/@apideck-better-ajv-errors-npm-0.3.6-8c1868a017-f89a1e16ec.zip differ diff --git a/offline_node_modules/@babel-code-frame-npm-7.24.7-315a600a58-ab0af53947.zip b/offline_node_modules/@babel-code-frame-npm-7.24.7-315a600a58-ab0af53947.zip new file mode 100644 index 0000000..db80892 Binary files /dev/null and b/offline_node_modules/@babel-code-frame-npm-7.24.7-315a600a58-ab0af53947.zip differ diff --git a/offline_node_modules/@babel-compat-data-npm-7.24.7-55c0797320-dcd93a5632.zip b/offline_node_modules/@babel-compat-data-npm-7.24.7-55c0797320-dcd93a5632.zip new file mode 100644 index 0000000..1c3adaa Binary files /dev/null and b/offline_node_modules/@babel-compat-data-npm-7.24.7-55c0797320-dcd93a5632.zip differ diff --git a/offline_node_modules/@babel-core-npm-7.24.7-e0c71653c5-4004ba454d.zip b/offline_node_modules/@babel-core-npm-7.24.7-e0c71653c5-4004ba454d.zip new file mode 100644 index 0000000..a7fb9f1 Binary files /dev/null and b/offline_node_modules/@babel-core-npm-7.24.7-e0c71653c5-4004ba454d.zip differ diff --git a/offline_node_modules/@babel-generator-npm-7.24.7-33fe4145fd-06b1f3350b.zip b/offline_node_modules/@babel-generator-npm-7.24.7-33fe4145fd-06b1f3350b.zip new file mode 100644 index 0000000..06b972b Binary files /dev/null and b/offline_node_modules/@babel-generator-npm-7.24.7-33fe4145fd-06b1f3350b.zip differ diff --git a/offline_node_modules/@babel-helper-annotate-as-pure-npm-7.24.7-537c5e8bf3-4679f7df4d.zip b/offline_node_modules/@babel-helper-annotate-as-pure-npm-7.24.7-537c5e8bf3-4679f7df4d.zip new file mode 100644 index 0000000..be4c44f Binary files /dev/null and b/offline_node_modules/@babel-helper-annotate-as-pure-npm-7.24.7-537c5e8bf3-4679f7df4d.zip differ diff --git a/offline_node_modules/@babel-helper-builder-binary-assignment-operator-visitor-npm-7.24.7-1653e5773a-0ed84abf84.zip b/offline_node_modules/@babel-helper-builder-binary-assignment-operator-visitor-npm-7.24.7-1653e5773a-0ed84abf84.zip new file mode 100644 index 0000000..0f94a99 Binary files /dev/null and b/offline_node_modules/@babel-helper-builder-binary-assignment-operator-visitor-npm-7.24.7-1653e5773a-0ed84abf84.zip differ diff --git a/offline_node_modules/@babel-helper-compilation-targets-npm-7.24.7-b6fcad7a45-1d580a9bca.zip b/offline_node_modules/@babel-helper-compilation-targets-npm-7.24.7-b6fcad7a45-1d580a9bca.zip new file mode 100644 index 0000000..355ad96 Binary files /dev/null and b/offline_node_modules/@babel-helper-compilation-targets-npm-7.24.7-b6fcad7a45-1d580a9bca.zip differ diff --git a/offline_node_modules/@babel-helper-create-class-features-plugin-npm-7.24.7-076821f821-6b7b47d70b.zip b/offline_node_modules/@babel-helper-create-class-features-plugin-npm-7.24.7-076821f821-6b7b47d70b.zip new file mode 100644 index 0000000..f024261 Binary files /dev/null and b/offline_node_modules/@babel-helper-create-class-features-plugin-npm-7.24.7-076821f821-6b7b47d70b.zip differ diff --git a/offline_node_modules/@babel-helper-create-regexp-features-plugin-npm-7.24.7-0bc60f7f63-ed611a7eb0.zip b/offline_node_modules/@babel-helper-create-regexp-features-plugin-npm-7.24.7-0bc60f7f63-ed611a7eb0.zip new file mode 100644 index 0000000..d85686d Binary files /dev/null and b/offline_node_modules/@babel-helper-create-regexp-features-plugin-npm-7.24.7-0bc60f7f63-ed611a7eb0.zip differ diff --git a/offline_node_modules/@babel-helper-environment-visitor-npm-7.24.7-9a965bf523-36ece78882.zip b/offline_node_modules/@babel-helper-environment-visitor-npm-7.24.7-9a965bf523-36ece78882.zip new file mode 100644 index 0000000..832cdb9 Binary files /dev/null and b/offline_node_modules/@babel-helper-environment-visitor-npm-7.24.7-9a965bf523-36ece78882.zip differ diff --git a/offline_node_modules/@babel-helper-function-name-npm-7.24.7-4f88fa6768-e5e41e6cf8.zip b/offline_node_modules/@babel-helper-function-name-npm-7.24.7-4f88fa6768-e5e41e6cf8.zip new file mode 100644 index 0000000..e4a09f6 Binary files /dev/null and b/offline_node_modules/@babel-helper-function-name-npm-7.24.7-4f88fa6768-e5e41e6cf8.zip differ diff --git a/offline_node_modules/@babel-helper-hoist-variables-npm-7.24.7-3d1fb54723-19ee37563b.zip b/offline_node_modules/@babel-helper-hoist-variables-npm-7.24.7-3d1fb54723-19ee37563b.zip new file mode 100644 index 0000000..9b4a19f Binary files /dev/null and b/offline_node_modules/@babel-helper-hoist-variables-npm-7.24.7-3d1fb54723-19ee37563b.zip differ diff --git a/offline_node_modules/@babel-helper-member-expression-to-functions-npm-7.24.7-2f8d2100de-9638c1d33c.zip b/offline_node_modules/@babel-helper-member-expression-to-functions-npm-7.24.7-2f8d2100de-9638c1d33c.zip new file mode 100644 index 0000000..70e2871 Binary files /dev/null and b/offline_node_modules/@babel-helper-member-expression-to-functions-npm-7.24.7-2f8d2100de-9638c1d33c.zip differ diff --git a/offline_node_modules/@babel-helper-module-imports-npm-7.24.6-be1121ea22-e0db3fbfcd.zip b/offline_node_modules/@babel-helper-module-imports-npm-7.24.6-be1121ea22-e0db3fbfcd.zip new file mode 100644 index 0000000..8745186 Binary files /dev/null and b/offline_node_modules/@babel-helper-module-imports-npm-7.24.6-be1121ea22-e0db3fbfcd.zip differ diff --git a/offline_node_modules/@babel-helper-module-imports-npm-7.24.7-f60e66adbf-97c57db6c3.zip b/offline_node_modules/@babel-helper-module-imports-npm-7.24.7-f60e66adbf-97c57db6c3.zip new file mode 100644 index 0000000..f880b44 Binary files /dev/null and b/offline_node_modules/@babel-helper-module-imports-npm-7.24.7-f60e66adbf-97c57db6c3.zip differ diff --git a/offline_node_modules/@babel-helper-module-transforms-npm-7.24.7-34219c1829-4f311755fc.zip b/offline_node_modules/@babel-helper-module-transforms-npm-7.24.7-34219c1829-4f311755fc.zip new file mode 100644 index 0000000..5277c16 Binary files /dev/null and b/offline_node_modules/@babel-helper-module-transforms-npm-7.24.7-34219c1829-4f311755fc.zip differ diff --git a/offline_node_modules/@babel-helper-optimise-call-expression-npm-7.24.7-59b5fb050d-ca6a988470.zip b/offline_node_modules/@babel-helper-optimise-call-expression-npm-7.24.7-59b5fb050d-ca6a988470.zip new file mode 100644 index 0000000..c435c51 Binary files /dev/null and b/offline_node_modules/@babel-helper-optimise-call-expression-npm-7.24.7-59b5fb050d-ca6a988470.zip differ diff --git a/offline_node_modules/@babel-helper-plugin-utils-npm-7.24.7-5a3089ad88-c3d38cd9b3.zip b/offline_node_modules/@babel-helper-plugin-utils-npm-7.24.7-5a3089ad88-c3d38cd9b3.zip new file mode 100644 index 0000000..a421f24 Binary files /dev/null and b/offline_node_modules/@babel-helper-plugin-utils-npm-7.24.7-5a3089ad88-c3d38cd9b3.zip differ diff --git a/offline_node_modules/@babel-helper-remap-async-to-generator-npm-7.24.7-d568c8a028-4e7fa2cdcb.zip b/offline_node_modules/@babel-helper-remap-async-to-generator-npm-7.24.7-d568c8a028-4e7fa2cdcb.zip new file mode 100644 index 0000000..850c72c Binary files /dev/null and b/offline_node_modules/@babel-helper-remap-async-to-generator-npm-7.24.7-d568c8a028-4e7fa2cdcb.zip differ diff --git a/offline_node_modules/@babel-helper-replace-supers-npm-7.24.7-35d1343b26-0e133bb033.zip b/offline_node_modules/@babel-helper-replace-supers-npm-7.24.7-35d1343b26-0e133bb033.zip new file mode 100644 index 0000000..0e5391d Binary files /dev/null and b/offline_node_modules/@babel-helper-replace-supers-npm-7.24.7-35d1343b26-0e133bb033.zip differ diff --git a/offline_node_modules/@babel-helper-simple-access-npm-7.24.7-beddd00b0e-7230e419d5.zip b/offline_node_modules/@babel-helper-simple-access-npm-7.24.7-beddd00b0e-7230e419d5.zip new file mode 100644 index 0000000..9b7be24 Binary files /dev/null and b/offline_node_modules/@babel-helper-simple-access-npm-7.24.7-beddd00b0e-7230e419d5.zip differ diff --git a/offline_node_modules/@babel-helper-skip-transparent-expression-wrappers-npm-7.24.7-f573fe40ee-e3a9b8ac9c.zip b/offline_node_modules/@babel-helper-skip-transparent-expression-wrappers-npm-7.24.7-f573fe40ee-e3a9b8ac9c.zip new file mode 100644 index 0000000..6eee0ea Binary files /dev/null and b/offline_node_modules/@babel-helper-skip-transparent-expression-wrappers-npm-7.24.7-f573fe40ee-e3a9b8ac9c.zip differ diff --git a/offline_node_modules/@babel-helper-split-export-declaration-npm-7.24.7-77b1fc1a1c-0254577d70.zip b/offline_node_modules/@babel-helper-split-export-declaration-npm-7.24.7-77b1fc1a1c-0254577d70.zip new file mode 100644 index 0000000..b57377f Binary files /dev/null and b/offline_node_modules/@babel-helper-split-export-declaration-npm-7.24.7-77b1fc1a1c-0254577d70.zip differ diff --git a/offline_node_modules/@babel-helper-string-parser-npm-7.24.6-ab02401caf-95115bf676.zip b/offline_node_modules/@babel-helper-string-parser-npm-7.24.6-ab02401caf-95115bf676.zip new file mode 100644 index 0000000..295472e Binary files /dev/null and b/offline_node_modules/@babel-helper-string-parser-npm-7.24.6-ab02401caf-95115bf676.zip differ diff --git a/offline_node_modules/@babel-helper-string-parser-npm-7.24.7-560b175e3f-47840c7004.zip b/offline_node_modules/@babel-helper-string-parser-npm-7.24.7-560b175e3f-47840c7004.zip new file mode 100644 index 0000000..cb044fe Binary files /dev/null and b/offline_node_modules/@babel-helper-string-parser-npm-7.24.7-560b175e3f-47840c7004.zip differ diff --git a/offline_node_modules/@babel-helper-validator-identifier-npm-7.24.6-cf629561b7-d29d2e3fca.zip b/offline_node_modules/@babel-helper-validator-identifier-npm-7.24.6-cf629561b7-d29d2e3fca.zip new file mode 100644 index 0000000..362f7c8 Binary files /dev/null and b/offline_node_modules/@babel-helper-validator-identifier-npm-7.24.6-cf629561b7-d29d2e3fca.zip differ diff --git a/offline_node_modules/@babel-helper-validator-identifier-npm-7.24.7-748889c8d2-87ad608694.zip b/offline_node_modules/@babel-helper-validator-identifier-npm-7.24.7-748889c8d2-87ad608694.zip new file mode 100644 index 0000000..58d1df9 Binary files /dev/null and b/offline_node_modules/@babel-helper-validator-identifier-npm-7.24.7-748889c8d2-87ad608694.zip differ diff --git a/offline_node_modules/@babel-helper-validator-option-npm-7.24.7-6bf4b631c7-21aea2b7bc.zip b/offline_node_modules/@babel-helper-validator-option-npm-7.24.7-6bf4b631c7-21aea2b7bc.zip new file mode 100644 index 0000000..10fb6fb Binary files /dev/null and b/offline_node_modules/@babel-helper-validator-option-npm-7.24.7-6bf4b631c7-21aea2b7bc.zip differ diff --git a/offline_node_modules/@babel-helper-wrap-function-npm-7.24.7-563645868a-d5689f031b.zip b/offline_node_modules/@babel-helper-wrap-function-npm-7.24.7-563645868a-d5689f031b.zip new file mode 100644 index 0000000..af93456 Binary files /dev/null and b/offline_node_modules/@babel-helper-wrap-function-npm-7.24.7-563645868a-d5689f031b.zip differ diff --git a/offline_node_modules/@babel-helpers-npm-7.24.7-8c3f5704f5-aa8e230f66.zip b/offline_node_modules/@babel-helpers-npm-7.24.7-8c3f5704f5-aa8e230f66.zip new file mode 100644 index 0000000..d58a3dd Binary files /dev/null and b/offline_node_modules/@babel-helpers-npm-7.24.7-8c3f5704f5-aa8e230f66.zip differ diff --git a/offline_node_modules/@babel-highlight-npm-7.24.7-d792bd8d9f-674334c571.zip b/offline_node_modules/@babel-highlight-npm-7.24.7-d792bd8d9f-674334c571.zip new file mode 100644 index 0000000..c528de0 Binary files /dev/null and b/offline_node_modules/@babel-highlight-npm-7.24.7-d792bd8d9f-674334c571.zip differ diff --git a/offline_node_modules/@babel-parser-npm-7.24.7-79d233f3d1-8b24475687.zip b/offline_node_modules/@babel-parser-npm-7.24.7-79d233f3d1-8b24475687.zip new file mode 100644 index 0000000..0bd3313 Binary files /dev/null and b/offline_node_modules/@babel-parser-npm-7.24.7-79d233f3d1-8b24475687.zip differ diff --git a/offline_node_modules/@babel-plugin-bugfix-firefox-class-in-computed-class-key-npm-7.24.7-ae12ee30ec-394c30e2b7.zip b/offline_node_modules/@babel-plugin-bugfix-firefox-class-in-computed-class-key-npm-7.24.7-ae12ee30ec-394c30e2b7.zip new file mode 100644 index 0000000..73e4083 Binary files /dev/null and b/offline_node_modules/@babel-plugin-bugfix-firefox-class-in-computed-class-key-npm-7.24.7-ae12ee30ec-394c30e2b7.zip differ diff --git a/offline_node_modules/@babel-plugin-bugfix-safari-id-destructuring-collision-in-function-expression-npm-7.24.7-5c3be7a37e-a36307428e.zip b/offline_node_modules/@babel-plugin-bugfix-safari-id-destructuring-collision-in-function-expression-npm-7.24.7-5c3be7a37e-a36307428e.zip new file mode 100644 index 0000000..482327b Binary files /dev/null and b/offline_node_modules/@babel-plugin-bugfix-safari-id-destructuring-collision-in-function-expression-npm-7.24.7-5c3be7a37e-a36307428e.zip differ diff --git a/offline_node_modules/@babel-plugin-bugfix-v8-spread-parameters-in-optional-chaining-npm-7.24.7-a96e8cc868-aeb6e7aa36.zip b/offline_node_modules/@babel-plugin-bugfix-v8-spread-parameters-in-optional-chaining-npm-7.24.7-a96e8cc868-aeb6e7aa36.zip new file mode 100644 index 0000000..303c8cd Binary files /dev/null and b/offline_node_modules/@babel-plugin-bugfix-v8-spread-parameters-in-optional-chaining-npm-7.24.7-a96e8cc868-aeb6e7aa36.zip differ diff --git a/offline_node_modules/@babel-plugin-bugfix-v8-static-class-fields-redefine-readonly-npm-7.24.7-c865f17470-2b52a73e44.zip b/offline_node_modules/@babel-plugin-bugfix-v8-static-class-fields-redefine-readonly-npm-7.24.7-c865f17470-2b52a73e44.zip new file mode 100644 index 0000000..3a3ec9c Binary files /dev/null and b/offline_node_modules/@babel-plugin-bugfix-v8-static-class-fields-redefine-readonly-npm-7.24.7-c865f17470-2b52a73e44.zip differ diff --git a/offline_node_modules/@babel-plugin-syntax-import-assertions-npm-7.24.7-06924e77aa-b82c53e095.zip b/offline_node_modules/@babel-plugin-syntax-import-assertions-npm-7.24.7-06924e77aa-b82c53e095.zip new file mode 100644 index 0000000..991731b Binary files /dev/null and b/offline_node_modules/@babel-plugin-syntax-import-assertions-npm-7.24.7-06924e77aa-b82c53e095.zip differ diff --git a/offline_node_modules/@babel-plugin-syntax-import-attributes-npm-7.24.7-6101aa2bfb-eccc54d0f0.zip b/offline_node_modules/@babel-plugin-syntax-import-attributes-npm-7.24.7-6101aa2bfb-eccc54d0f0.zip new file mode 100644 index 0000000..508f719 Binary files /dev/null and b/offline_node_modules/@babel-plugin-syntax-import-attributes-npm-7.24.7-6101aa2bfb-eccc54d0f0.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-arrow-functions-npm-7.24.7-dc9654ba4f-6ac05a54e5.zip b/offline_node_modules/@babel-plugin-transform-arrow-functions-npm-7.24.7-dc9654ba4f-6ac05a54e5.zip new file mode 100644 index 0000000..a13457e Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-arrow-functions-npm-7.24.7-dc9654ba4f-6ac05a54e5.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-async-generator-functions-npm-7.24.7-726da7b00d-6b5e33ae66.zip b/offline_node_modules/@babel-plugin-transform-async-generator-functions-npm-7.24.7-726da7b00d-6b5e33ae66.zip new file mode 100644 index 0000000..9b9ca15 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-async-generator-functions-npm-7.24.7-726da7b00d-6b5e33ae66.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-async-to-generator-npm-7.24.7-335cbe94e0-83c82e2438.zip b/offline_node_modules/@babel-plugin-transform-async-to-generator-npm-7.24.7-335cbe94e0-83c82e2438.zip new file mode 100644 index 0000000..ab651a4 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-async-to-generator-npm-7.24.7-335cbe94e0-83c82e2438.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-block-scoped-functions-npm-7.24.7-3bde68de42-113e86de46.zip b/offline_node_modules/@babel-plugin-transform-block-scoped-functions-npm-7.24.7-3bde68de42-113e86de46.zip new file mode 100644 index 0000000..27eb92a Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-block-scoped-functions-npm-7.24.7-3bde68de42-113e86de46.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-block-scoping-npm-7.24.7-7c6a83a195-dcbc5e385c.zip b/offline_node_modules/@babel-plugin-transform-block-scoping-npm-7.24.7-7c6a83a195-dcbc5e385c.zip new file mode 100644 index 0000000..a0f6033 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-block-scoping-npm-7.24.7-7c6a83a195-dcbc5e385c.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-class-properties-npm-7.24.7-42a5aafd3c-75018a466c.zip b/offline_node_modules/@babel-plugin-transform-class-properties-npm-7.24.7-42a5aafd3c-75018a466c.zip new file mode 100644 index 0000000..7be0c98 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-class-properties-npm-7.24.7-42a5aafd3c-75018a466c.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-class-static-block-npm-7.24.7-2ab97b4caf-b0ade39a3d.zip b/offline_node_modules/@babel-plugin-transform-class-static-block-npm-7.24.7-2ab97b4caf-b0ade39a3d.zip new file mode 100644 index 0000000..8e5ef9d Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-class-static-block-npm-7.24.7-2ab97b4caf-b0ade39a3d.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-classes-npm-7.24.7-3020dbe8cb-e51dba7ce8.zip b/offline_node_modules/@babel-plugin-transform-classes-npm-7.24.7-3020dbe8cb-e51dba7ce8.zip new file mode 100644 index 0000000..32dc30f Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-classes-npm-7.24.7-3020dbe8cb-e51dba7ce8.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-computed-properties-npm-7.24.7-707065a998-25636dbc1f.zip b/offline_node_modules/@babel-plugin-transform-computed-properties-npm-7.24.7-707065a998-25636dbc1f.zip new file mode 100644 index 0000000..288d753 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-computed-properties-npm-7.24.7-707065a998-25636dbc1f.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-destructuring-npm-7.24.7-bbf4b6a00f-929f07a807.zip b/offline_node_modules/@babel-plugin-transform-destructuring-npm-7.24.7-bbf4b6a00f-929f07a807.zip new file mode 100644 index 0000000..7d517a1 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-destructuring-npm-7.24.7-bbf4b6a00f-929f07a807.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-dotall-regex-npm-7.24.7-1e4ebcbb6c-793f14c949.zip b/offline_node_modules/@babel-plugin-transform-dotall-regex-npm-7.24.7-1e4ebcbb6c-793f14c949.zip new file mode 100644 index 0000000..52af3b1 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-dotall-regex-npm-7.24.7-1e4ebcbb6c-793f14c949.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-duplicate-keys-npm-7.24.7-c999e46d25-75ff7ec111.zip b/offline_node_modules/@babel-plugin-transform-duplicate-keys-npm-7.24.7-c999e46d25-75ff7ec111.zip new file mode 100644 index 0000000..32a21d5 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-duplicate-keys-npm-7.24.7-c999e46d25-75ff7ec111.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-dynamic-import-npm-7.24.7-e15a724c6c-eeda48372e.zip b/offline_node_modules/@babel-plugin-transform-dynamic-import-npm-7.24.7-e15a724c6c-eeda48372e.zip new file mode 100644 index 0000000..f7fdc78 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-dynamic-import-npm-7.24.7-e15a724c6c-eeda48372e.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-exponentiation-operator-npm-7.24.7-1bd197e640-ace3e11c94.zip b/offline_node_modules/@babel-plugin-transform-exponentiation-operator-npm-7.24.7-1bd197e640-ace3e11c94.zip new file mode 100644 index 0000000..4e45722 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-exponentiation-operator-npm-7.24.7-1bd197e640-ace3e11c94.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-export-namespace-from-npm-7.24.7-2e43f5c58e-4e144d7f1c.zip b/offline_node_modules/@babel-plugin-transform-export-namespace-from-npm-7.24.7-2e43f5c58e-4e144d7f1c.zip new file mode 100644 index 0000000..63c325a Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-export-namespace-from-npm-7.24.7-2e43f5c58e-4e144d7f1c.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-for-of-npm-7.24.7-e85b1239ae-77629b1173.zip b/offline_node_modules/@babel-plugin-transform-for-of-npm-7.24.7-e85b1239ae-77629b1173.zip new file mode 100644 index 0000000..45d4e1e Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-for-of-npm-7.24.7-e85b1239ae-77629b1173.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-function-name-npm-7.24.7-c1c7f2dbbf-3e9642428d.zip b/offline_node_modules/@babel-plugin-transform-function-name-npm-7.24.7-c1c7f2dbbf-3e9642428d.zip new file mode 100644 index 0000000..823a9dc Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-function-name-npm-7.24.7-c1c7f2dbbf-3e9642428d.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-json-strings-npm-7.24.7-17858f14f3-17c72cd5bf.zip b/offline_node_modules/@babel-plugin-transform-json-strings-npm-7.24.7-17858f14f3-17c72cd5bf.zip new file mode 100644 index 0000000..7159b9b Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-json-strings-npm-7.24.7-17858f14f3-17c72cd5bf.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-literals-npm-7.24.7-bdba7f5593-9f3f6f3831.zip b/offline_node_modules/@babel-plugin-transform-literals-npm-7.24.7-bdba7f5593-9f3f6f3831.zip new file mode 100644 index 0000000..4e03d08 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-literals-npm-7.24.7-bdba7f5593-9f3f6f3831.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-logical-assignment-operators-npm-7.24.7-8d08c296f2-dbe882eb90.zip b/offline_node_modules/@babel-plugin-transform-logical-assignment-operators-npm-7.24.7-8d08c296f2-dbe882eb90.zip new file mode 100644 index 0000000..aaa20e2 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-logical-assignment-operators-npm-7.24.7-8d08c296f2-dbe882eb90.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-member-expression-literals-npm-7.24.7-566bef1c80-e789ae359b.zip b/offline_node_modules/@babel-plugin-transform-member-expression-literals-npm-7.24.7-566bef1c80-e789ae359b.zip new file mode 100644 index 0000000..f46ff48 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-member-expression-literals-npm-7.24.7-566bef1c80-e789ae359b.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-modules-amd-npm-7.24.7-7b9b7c2d4b-6df7de7fce.zip b/offline_node_modules/@babel-plugin-transform-modules-amd-npm-7.24.7-7b9b7c2d4b-6df7de7fce.zip new file mode 100644 index 0000000..c8f2c40 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-modules-amd-npm-7.24.7-7b9b7c2d4b-6df7de7fce.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-modules-commonjs-npm-7.24.7-936aa5b71e-9442292b3d.zip b/offline_node_modules/@babel-plugin-transform-modules-commonjs-npm-7.24.7-936aa5b71e-9442292b3d.zip new file mode 100644 index 0000000..3638c1e Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-modules-commonjs-npm-7.24.7-936aa5b71e-9442292b3d.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-modules-systemjs-npm-7.24.7-53be82caa8-e2a795e0a6.zip b/offline_node_modules/@babel-plugin-transform-modules-systemjs-npm-7.24.7-53be82caa8-e2a795e0a6.zip new file mode 100644 index 0000000..8312d86 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-modules-systemjs-npm-7.24.7-53be82caa8-e2a795e0a6.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-modules-umd-npm-7.24.7-46b61a2a8a-7791d29012.zip b/offline_node_modules/@babel-plugin-transform-modules-umd-npm-7.24.7-46b61a2a8a-7791d29012.zip new file mode 100644 index 0000000..3699882 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-modules-umd-npm-7.24.7-46b61a2a8a-7791d29012.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-named-capturing-groups-regex-npm-7.24.7-68b2f48b40-41a0b0f2d0.zip b/offline_node_modules/@babel-plugin-transform-named-capturing-groups-regex-npm-7.24.7-68b2f48b40-41a0b0f2d0.zip new file mode 100644 index 0000000..9d44d99 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-named-capturing-groups-regex-npm-7.24.7-68b2f48b40-41a0b0f2d0.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-new-target-npm-7.24.7-cb95d780d4-2540808a35.zip b/offline_node_modules/@babel-plugin-transform-new-target-npm-7.24.7-cb95d780d4-2540808a35.zip new file mode 100644 index 0000000..5b08f79 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-new-target-npm-7.24.7-cb95d780d4-2540808a35.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-nullish-coalescing-operator-npm-7.24.7-91cfb40042-7243c8ff73.zip b/offline_node_modules/@babel-plugin-transform-nullish-coalescing-operator-npm-7.24.7-91cfb40042-7243c8ff73.zip new file mode 100644 index 0000000..50eaf3f Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-nullish-coalescing-operator-npm-7.24.7-91cfb40042-7243c8ff73.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-numeric-separator-npm-7.24.7-70370e84d8-e18e09ca5a.zip b/offline_node_modules/@babel-plugin-transform-numeric-separator-npm-7.24.7-70370e84d8-e18e09ca5a.zip new file mode 100644 index 0000000..a7f005e Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-numeric-separator-npm-7.24.7-70370e84d8-e18e09ca5a.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-object-rest-spread-npm-7.24.7-c5bcb6d635-9ad64bc003.zip b/offline_node_modules/@babel-plugin-transform-object-rest-spread-npm-7.24.7-c5bcb6d635-9ad64bc003.zip new file mode 100644 index 0000000..b739d05 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-object-rest-spread-npm-7.24.7-c5bcb6d635-9ad64bc003.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-object-super-npm-7.24.7-8b4ef26bc1-770cebb4b4.zip b/offline_node_modules/@babel-plugin-transform-object-super-npm-7.24.7-8b4ef26bc1-770cebb4b4.zip new file mode 100644 index 0000000..9190941 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-object-super-npm-7.24.7-8b4ef26bc1-770cebb4b4.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-optional-catch-binding-npm-7.24.7-4dc481e34f-1e2f10a018.zip b/offline_node_modules/@babel-plugin-transform-optional-catch-binding-npm-7.24.7-4dc481e34f-1e2f10a018.zip new file mode 100644 index 0000000..48f877c Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-optional-catch-binding-npm-7.24.7-4dc481e34f-1e2f10a018.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-optional-chaining-npm-7.24.7-b8db6518e6-b9e3649b29.zip b/offline_node_modules/@babel-plugin-transform-optional-chaining-npm-7.24.7-b8db6518e6-b9e3649b29.zip new file mode 100644 index 0000000..19035da Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-optional-chaining-npm-7.24.7-b8db6518e6-b9e3649b29.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-parameters-npm-7.24.7-d18b1cfc71-53bf190d69.zip b/offline_node_modules/@babel-plugin-transform-parameters-npm-7.24.7-d18b1cfc71-53bf190d69.zip new file mode 100644 index 0000000..670ead4 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-parameters-npm-7.24.7-d18b1cfc71-53bf190d69.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-private-methods-npm-7.24.7-a20cce0583-5b7bf923b7.zip b/offline_node_modules/@babel-plugin-transform-private-methods-npm-7.24.7-a20cce0583-5b7bf923b7.zip new file mode 100644 index 0000000..5121ad9 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-private-methods-npm-7.24.7-a20cce0583-5b7bf923b7.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-private-property-in-object-npm-7.24.7-96a62af9e6-c6fa7defb9.zip b/offline_node_modules/@babel-plugin-transform-private-property-in-object-npm-7.24.7-96a62af9e6-c6fa7defb9.zip new file mode 100644 index 0000000..5517ec8 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-private-property-in-object-npm-7.24.7-96a62af9e6-c6fa7defb9.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-property-literals-npm-7.24.7-d2b997a7b0-52564b58f3.zip b/offline_node_modules/@babel-plugin-transform-property-literals-npm-7.24.7-d2b997a7b0-52564b58f3.zip new file mode 100644 index 0000000..d73c563 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-property-literals-npm-7.24.7-d2b997a7b0-52564b58f3.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-regenerator-npm-7.24.7-7ba719f821-d2dc2c788f.zip b/offline_node_modules/@babel-plugin-transform-regenerator-npm-7.24.7-7ba719f821-d2dc2c788f.zip new file mode 100644 index 0000000..c743f4d Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-regenerator-npm-7.24.7-7ba719f821-d2dc2c788f.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-reserved-words-npm-7.24.7-b2adfbf85a-2229de2768.zip b/offline_node_modules/@babel-plugin-transform-reserved-words-npm-7.24.7-b2adfbf85a-2229de2768.zip new file mode 100644 index 0000000..307d1f2 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-reserved-words-npm-7.24.7-b2adfbf85a-2229de2768.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-shorthand-properties-npm-7.24.7-bc90ee60de-41b155bdbb.zip b/offline_node_modules/@babel-plugin-transform-shorthand-properties-npm-7.24.7-bc90ee60de-41b155bdbb.zip new file mode 100644 index 0000000..47a5a6d Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-shorthand-properties-npm-7.24.7-bc90ee60de-41b155bdbb.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-spread-npm-7.24.7-0009f44d3c-facba15530.zip b/offline_node_modules/@babel-plugin-transform-spread-npm-7.24.7-0009f44d3c-facba15530.zip new file mode 100644 index 0000000..1ea66fb Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-spread-npm-7.24.7-0009f44d3c-facba15530.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-sticky-regex-npm-7.24.7-98cd1af8a9-5a74ed2ed0.zip b/offline_node_modules/@babel-plugin-transform-sticky-regex-npm-7.24.7-98cd1af8a9-5a74ed2ed0.zip new file mode 100644 index 0000000..c1a11e8 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-sticky-regex-npm-7.24.7-98cd1af8a9-5a74ed2ed0.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-template-literals-npm-7.24.7-0ecb9f0cf5-3630f96625.zip b/offline_node_modules/@babel-plugin-transform-template-literals-npm-7.24.7-0ecb9f0cf5-3630f96625.zip new file mode 100644 index 0000000..25bd3b4 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-template-literals-npm-7.24.7-0ecb9f0cf5-3630f96625.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-typeof-symbol-npm-7.24.7-fd356b8c8c-5649e7260a.zip b/offline_node_modules/@babel-plugin-transform-typeof-symbol-npm-7.24.7-fd356b8c8c-5649e7260a.zip new file mode 100644 index 0000000..340b1c8 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-typeof-symbol-npm-7.24.7-fd356b8c8c-5649e7260a.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-unicode-escapes-npm-7.24.7-39ca160006-8b18e2e66a.zip b/offline_node_modules/@babel-plugin-transform-unicode-escapes-npm-7.24.7-39ca160006-8b18e2e66a.zip new file mode 100644 index 0000000..b20d538 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-unicode-escapes-npm-7.24.7-39ca160006-8b18e2e66a.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-unicode-property-regex-npm-7.24.7-6d5a35d7ce-bc57656eb9.zip b/offline_node_modules/@babel-plugin-transform-unicode-property-regex-npm-7.24.7-6d5a35d7ce-bc57656eb9.zip new file mode 100644 index 0000000..3e94fc4 Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-unicode-property-regex-npm-7.24.7-6d5a35d7ce-bc57656eb9.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-unicode-regex-npm-7.24.7-c5a44da0ea-83f72a345b.zip b/offline_node_modules/@babel-plugin-transform-unicode-regex-npm-7.24.7-c5a44da0ea-83f72a345b.zip new file mode 100644 index 0000000..5e4f72b Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-unicode-regex-npm-7.24.7-c5a44da0ea-83f72a345b.zip differ diff --git a/offline_node_modules/@babel-plugin-transform-unicode-sets-regex-npm-7.24.7-f4501a8afb-7457c0ee8e.zip b/offline_node_modules/@babel-plugin-transform-unicode-sets-regex-npm-7.24.7-f4501a8afb-7457c0ee8e.zip new file mode 100644 index 0000000..7fabd3c Binary files /dev/null and b/offline_node_modules/@babel-plugin-transform-unicode-sets-regex-npm-7.24.7-f4501a8afb-7457c0ee8e.zip differ diff --git a/offline_node_modules/@babel-preset-env-npm-7.24.7-374f7788e3-c6714346f3.zip b/offline_node_modules/@babel-preset-env-npm-7.24.7-374f7788e3-c6714346f3.zip new file mode 100644 index 0000000..f99f5e1 Binary files /dev/null and b/offline_node_modules/@babel-preset-env-npm-7.24.7-374f7788e3-c6714346f3.zip differ diff --git a/offline_node_modules/@babel-runtime-npm-7.24.6-3acd4a9fd9-224ad205de.zip b/offline_node_modules/@babel-runtime-npm-7.24.6-3acd4a9fd9-224ad205de.zip new file mode 100644 index 0000000..ee53d2f Binary files /dev/null and b/offline_node_modules/@babel-runtime-npm-7.24.6-3acd4a9fd9-224ad205de.zip differ diff --git a/offline_node_modules/@babel-runtime-npm-7.24.7-035e043b00-b6fa3ec61a.zip b/offline_node_modules/@babel-runtime-npm-7.24.7-035e043b00-b6fa3ec61a.zip new file mode 100644 index 0000000..7447a30 Binary files /dev/null and b/offline_node_modules/@babel-runtime-npm-7.24.7-035e043b00-b6fa3ec61a.zip differ diff --git a/offline_node_modules/@babel-template-npm-7.24.7-d08a527e2b-95b0b3ee80.zip b/offline_node_modules/@babel-template-npm-7.24.7-d08a527e2b-95b0b3ee80.zip new file mode 100644 index 0000000..52ee215 Binary files /dev/null and b/offline_node_modules/@babel-template-npm-7.24.7-d08a527e2b-95b0b3ee80.zip differ diff --git a/offline_node_modules/@babel-traverse-npm-7.24.7-b26422bd59-a5135e589c.zip b/offline_node_modules/@babel-traverse-npm-7.24.7-b26422bd59-a5135e589c.zip new file mode 100644 index 0000000..268d8fe Binary files /dev/null and b/offline_node_modules/@babel-traverse-npm-7.24.7-b26422bd59-a5135e589c.zip differ diff --git a/offline_node_modules/@babel-types-npm-7.24.6-5a7d5202c4-1d94d92d97.zip b/offline_node_modules/@babel-types-npm-7.24.6-5a7d5202c4-1d94d92d97.zip new file mode 100644 index 0000000..18bff25 Binary files /dev/null and b/offline_node_modules/@babel-types-npm-7.24.6-5a7d5202c4-1d94d92d97.zip differ diff --git a/offline_node_modules/@babel-types-npm-7.24.7-43a9e43e29-d9ecbfc3eb.zip b/offline_node_modules/@babel-types-npm-7.24.7-43a9e43e29-d9ecbfc3eb.zip new file mode 100644 index 0000000..372e875 Binary files /dev/null and b/offline_node_modules/@babel-types-npm-7.24.7-43a9e43e29-d9ecbfc3eb.zip differ diff --git a/offline_node_modules/@commitlint-cli-npm-19.2.1-0d4999d187-14057446e6.zip b/offline_node_modules/@commitlint-cli-npm-19.3.0-9e344abddf-12049b6ccb.zip similarity index 99% rename from offline_node_modules/@commitlint-cli-npm-19.2.1-0d4999d187-14057446e6.zip rename to offline_node_modules/@commitlint-cli-npm-19.3.0-9e344abddf-12049b6ccb.zip index 83acba0..c8b6f7f 100644 Binary files a/offline_node_modules/@commitlint-cli-npm-19.2.1-0d4999d187-14057446e6.zip and b/offline_node_modules/@commitlint-cli-npm-19.3.0-9e344abddf-12049b6ccb.zip differ diff --git a/offline_node_modules/@commitlint-config-conventional-npm-19.1.0-0865a7eeaa-540c30b752.zip b/offline_node_modules/@commitlint-config-conventional-npm-19.2.2-2bb85a8bdf-2f2a07ee31.zip similarity index 98% rename from offline_node_modules/@commitlint-config-conventional-npm-19.1.0-0865a7eeaa-540c30b752.zip rename to offline_node_modules/@commitlint-config-conventional-npm-19.2.2-2bb85a8bdf-2f2a07ee31.zip index aa02462..27486cd 100644 Binary files a/offline_node_modules/@commitlint-config-conventional-npm-19.1.0-0865a7eeaa-540c30b752.zip and b/offline_node_modules/@commitlint-config-conventional-npm-19.2.2-2bb85a8bdf-2f2a07ee31.zip differ diff --git a/offline_node_modules/@commitlint-format-npm-19.0.3-3bfce68df0-9d8a5b55ca.zip b/offline_node_modules/@commitlint-format-npm-19.3.0-e1591835d4-857a178448.zip similarity index 69% rename from offline_node_modules/@commitlint-format-npm-19.0.3-3bfce68df0-9d8a5b55ca.zip rename to offline_node_modules/@commitlint-format-npm-19.3.0-e1591835d4-857a178448.zip index 86e210e..124c1c2 100644 Binary files a/offline_node_modules/@commitlint-format-npm-19.0.3-3bfce68df0-9d8a5b55ca.zip and b/offline_node_modules/@commitlint-format-npm-19.3.0-e1591835d4-857a178448.zip differ diff --git a/offline_node_modules/@commitlint-is-ignored-npm-19.0.3-02933c1a73-aa9d8d0db4.zip b/offline_node_modules/@commitlint-is-ignored-npm-19.2.2-c5aeee9ad4-8e416edbf2.zip similarity index 86% rename from offline_node_modules/@commitlint-is-ignored-npm-19.0.3-02933c1a73-aa9d8d0db4.zip rename to offline_node_modules/@commitlint-is-ignored-npm-19.2.2-c5aeee9ad4-8e416edbf2.zip index f0addf5..971ac08 100644 Binary files a/offline_node_modules/@commitlint-is-ignored-npm-19.0.3-02933c1a73-aa9d8d0db4.zip and b/offline_node_modules/@commitlint-is-ignored-npm-19.2.2-c5aeee9ad4-8e416edbf2.zip differ diff --git a/offline_node_modules/@commitlint-lint-npm-19.1.0-152d602d2a-7624eaafe0.zip b/offline_node_modules/@commitlint-lint-npm-19.2.2-0724d922e2-e7b3ca6027.zip similarity index 98% rename from offline_node_modules/@commitlint-lint-npm-19.1.0-152d602d2a-7624eaafe0.zip rename to offline_node_modules/@commitlint-lint-npm-19.2.2-0724d922e2-e7b3ca6027.zip index 609243c..1cc2e5b 100644 Binary files a/offline_node_modules/@commitlint-lint-npm-19.1.0-152d602d2a-7624eaafe0.zip and b/offline_node_modules/@commitlint-lint-npm-19.2.2-0724d922e2-e7b3ca6027.zip differ diff --git a/offline_node_modules/@emotion-babel-plugin-npm-11.11.0-c1dcc4c884-89cbb6ec0e.zip b/offline_node_modules/@emotion-babel-plugin-npm-11.11.0-c1dcc4c884-89cbb6ec0e.zip new file mode 100644 index 0000000..004b256 Binary files /dev/null and b/offline_node_modules/@emotion-babel-plugin-npm-11.11.0-c1dcc4c884-89cbb6ec0e.zip differ diff --git a/offline_node_modules/@emotion-cache-npm-11.11.0-3e6e449071-a23ab5ab2f.zip b/offline_node_modules/@emotion-cache-npm-11.11.0-3e6e449071-a23ab5ab2f.zip new file mode 100644 index 0000000..46e3081 Binary files /dev/null and b/offline_node_modules/@emotion-cache-npm-11.11.0-3e6e449071-a23ab5ab2f.zip differ diff --git a/offline_node_modules/@emotion-hash-npm-0.9.1-650576c2b1-cdafe5da63.zip b/offline_node_modules/@emotion-hash-npm-0.9.1-650576c2b1-cdafe5da63.zip new file mode 100644 index 0000000..1d6ac5c Binary files /dev/null and b/offline_node_modules/@emotion-hash-npm-0.9.1-650576c2b1-cdafe5da63.zip differ diff --git a/offline_node_modules/@emotion-is-prop-valid-npm-1.2.2-53f93f2b2d-bb1530dcb4.zip b/offline_node_modules/@emotion-is-prop-valid-npm-1.2.2-53f93f2b2d-bb1530dcb4.zip new file mode 100644 index 0000000..d9ebde6 Binary files /dev/null and b/offline_node_modules/@emotion-is-prop-valid-npm-1.2.2-53f93f2b2d-bb1530dcb4.zip differ diff --git a/offline_node_modules/@emotion-memoize-npm-0.8.1-9b1e35ff15-dffed372fc.zip b/offline_node_modules/@emotion-memoize-npm-0.8.1-9b1e35ff15-dffed372fc.zip new file mode 100644 index 0000000..320c9e5 Binary files /dev/null and b/offline_node_modules/@emotion-memoize-npm-0.8.1-9b1e35ff15-dffed372fc.zip differ diff --git a/offline_node_modules/@emotion-react-npm-11.11.4-52eda8b8fe-6df892fd9e.zip b/offline_node_modules/@emotion-react-npm-11.11.4-52eda8b8fe-6df892fd9e.zip new file mode 100644 index 0000000..2a9625a Binary files /dev/null and b/offline_node_modules/@emotion-react-npm-11.11.4-52eda8b8fe-6df892fd9e.zip differ diff --git a/offline_node_modules/@emotion-serialize-npm-1.1.4-5b0b39d76a-164d936f72.zip b/offline_node_modules/@emotion-serialize-npm-1.1.4-5b0b39d76a-164d936f72.zip new file mode 100644 index 0000000..374ac7f Binary files /dev/null and b/offline_node_modules/@emotion-serialize-npm-1.1.4-5b0b39d76a-164d936f72.zip differ diff --git a/offline_node_modules/@emotion-sheet-npm-1.2.2-a918ac483c-69827a1bfa.zip b/offline_node_modules/@emotion-sheet-npm-1.2.2-a918ac483c-69827a1bfa.zip new file mode 100644 index 0000000..8874796 Binary files /dev/null and b/offline_node_modules/@emotion-sheet-npm-1.2.2-a918ac483c-69827a1bfa.zip differ diff --git a/offline_node_modules/@emotion-styled-npm-11.11.5-f6c8a45c9e-27da6ad7f5.zip b/offline_node_modules/@emotion-styled-npm-11.11.5-f6c8a45c9e-27da6ad7f5.zip new file mode 100644 index 0000000..f2f6edb Binary files /dev/null and b/offline_node_modules/@emotion-styled-npm-11.11.5-f6c8a45c9e-27da6ad7f5.zip differ diff --git a/offline_node_modules/@emotion-unitless-npm-0.8.1-bcf0a8f565-a1ed508628.zip b/offline_node_modules/@emotion-unitless-npm-0.8.1-bcf0a8f565-a1ed508628.zip new file mode 100644 index 0000000..901cf6f Binary files /dev/null and b/offline_node_modules/@emotion-unitless-npm-0.8.1-bcf0a8f565-a1ed508628.zip differ diff --git a/offline_node_modules/@emotion-use-insertion-effect-with-fallbacks-npm-1.0.1-730758c66c-a15b216794.zip b/offline_node_modules/@emotion-use-insertion-effect-with-fallbacks-npm-1.0.1-730758c66c-a15b216794.zip new file mode 100644 index 0000000..9620474 Binary files /dev/null and b/offline_node_modules/@emotion-use-insertion-effect-with-fallbacks-npm-1.0.1-730758c66c-a15b216794.zip differ diff --git a/offline_node_modules/@emotion-utils-npm-1.2.1-3d04f99348-db43ca8033.zip b/offline_node_modules/@emotion-utils-npm-1.2.1-3d04f99348-db43ca8033.zip new file mode 100644 index 0000000..f0569e8 Binary files /dev/null and b/offline_node_modules/@emotion-utils-npm-1.2.1-3d04f99348-db43ca8033.zip differ diff --git a/offline_node_modules/@emotion-weak-memoize-npm-0.3.1-bfc18213af-ed514b3cb9.zip b/offline_node_modules/@emotion-weak-memoize-npm-0.3.1-bfc18213af-ed514b3cb9.zip new file mode 100644 index 0000000..68a7fa3 Binary files /dev/null and b/offline_node_modules/@emotion-weak-memoize-npm-0.3.1-bfc18213af-ed514b3cb9.zip differ diff --git a/offline_node_modules/@eslint-community-regexpp-npm-4.11.0-dd7ae18a6d-0f6328869b.zip b/offline_node_modules/@eslint-community-regexpp-npm-4.11.0-dd7ae18a6d-0f6328869b.zip new file mode 100644 index 0000000..a2f7818 Binary files /dev/null and b/offline_node_modules/@eslint-community-regexpp-npm-4.11.0-dd7ae18a6d-0f6328869b.zip differ diff --git a/offline_node_modules/@floating-ui-core-npm-1.6.2-83764613ea-db2621dc68.zip b/offline_node_modules/@floating-ui-core-npm-1.6.2-83764613ea-db2621dc68.zip new file mode 100644 index 0000000..21bb2bf Binary files /dev/null and b/offline_node_modules/@floating-ui-core-npm-1.6.2-83764613ea-db2621dc68.zip differ diff --git a/offline_node_modules/@floating-ui-dom-npm-1.6.5-42fe2aed4f-ebdc14806f.zip b/offline_node_modules/@floating-ui-dom-npm-1.6.5-42fe2aed4f-ebdc14806f.zip new file mode 100644 index 0000000..7c0e668 Binary files /dev/null and b/offline_node_modules/@floating-ui-dom-npm-1.6.5-42fe2aed4f-ebdc14806f.zip differ diff --git a/offline_node_modules/@floating-ui-react-dom-npm-2.1.0-6bd6adf553-9ee44dfeb2.zip b/offline_node_modules/@floating-ui-react-dom-npm-2.1.0-6bd6adf553-9ee44dfeb2.zip new file mode 100644 index 0000000..811b3f4 Binary files /dev/null and b/offline_node_modules/@floating-ui-react-dom-npm-2.1.0-6bd6adf553-9ee44dfeb2.zip differ diff --git a/offline_node_modules/@floating-ui-utils-npm-0.2.2-86598cb25a-b2becdcafd.zip b/offline_node_modules/@floating-ui-utils-npm-0.2.2-86598cb25a-b2becdcafd.zip new file mode 100644 index 0000000..00bbb4a Binary files /dev/null and b/offline_node_modules/@floating-ui-utils-npm-0.2.2-86598cb25a-b2becdcafd.zip differ diff --git a/offline_node_modules/@mui-base-npm-5.0.0-beta.40-248417914d-631b4ee389.zip b/offline_node_modules/@mui-base-npm-5.0.0-beta.40-248417914d-631b4ee389.zip new file mode 100644 index 0000000..16dc1bd Binary files /dev/null and b/offline_node_modules/@mui-base-npm-5.0.0-beta.40-248417914d-631b4ee389.zip differ diff --git a/offline_node_modules/@mui-core-downloads-tracker-npm-5.15.19-9ed77064af-90cd3eb953.zip b/offline_node_modules/@mui-core-downloads-tracker-npm-5.15.19-9ed77064af-90cd3eb953.zip new file mode 100644 index 0000000..f1f83f7 Binary files /dev/null and b/offline_node_modules/@mui-core-downloads-tracker-npm-5.15.19-9ed77064af-90cd3eb953.zip differ diff --git a/offline_node_modules/@mui-icons-material-npm-5.15.19-15b122e6ba-f2a4381b6a.zip b/offline_node_modules/@mui-icons-material-npm-5.15.19-15b122e6ba-f2a4381b6a.zip new file mode 100644 index 0000000..d8db646 Binary files /dev/null and b/offline_node_modules/@mui-icons-material-npm-5.15.19-15b122e6ba-f2a4381b6a.zip differ diff --git a/offline_node_modules/@mui-material-npm-5.15.19-5d6fd3466f-388eb14bed.zip b/offline_node_modules/@mui-material-npm-5.15.19-5d6fd3466f-388eb14bed.zip new file mode 100644 index 0000000..a199789 Binary files /dev/null and b/offline_node_modules/@mui-material-npm-5.15.19-5d6fd3466f-388eb14bed.zip differ diff --git a/offline_node_modules/@mui-private-theming-npm-5.15.14-da7d55aa3f-2888950587.zip b/offline_node_modules/@mui-private-theming-npm-5.15.14-da7d55aa3f-2888950587.zip new file mode 100644 index 0000000..85eb474 Binary files /dev/null and b/offline_node_modules/@mui-private-theming-npm-5.15.14-da7d55aa3f-2888950587.zip differ diff --git a/offline_node_modules/@mui-styled-engine-npm-5.15.14-f2c4d6b014-0d262ea0b3.zip b/offline_node_modules/@mui-styled-engine-npm-5.15.14-f2c4d6b014-0d262ea0b3.zip new file mode 100644 index 0000000..0961006 Binary files /dev/null and b/offline_node_modules/@mui-styled-engine-npm-5.15.14-f2c4d6b014-0d262ea0b3.zip differ diff --git a/offline_node_modules/@mui-system-npm-5.15.15-c000fc1ae9-80724377ee.zip b/offline_node_modules/@mui-system-npm-5.15.15-c000fc1ae9-80724377ee.zip new file mode 100644 index 0000000..448b4ac Binary files /dev/null and b/offline_node_modules/@mui-system-npm-5.15.15-c000fc1ae9-80724377ee.zip differ diff --git a/offline_node_modules/@mui-types-npm-7.2.14-c3027ebada-d4e0a9fce4.zip b/offline_node_modules/@mui-types-npm-7.2.14-c3027ebada-d4e0a9fce4.zip new file mode 100644 index 0000000..10ab908 Binary files /dev/null and b/offline_node_modules/@mui-types-npm-7.2.14-c3027ebada-d4e0a9fce4.zip differ diff --git a/offline_node_modules/@mui-utils-npm-5.15.14-0912681c9c-3626598847.zip b/offline_node_modules/@mui-utils-npm-5.15.14-0912681c9c-3626598847.zip new file mode 100644 index 0000000..21a967d Binary files /dev/null and b/offline_node_modules/@mui-utils-npm-5.15.14-0912681c9c-3626598847.zip differ diff --git a/offline_node_modules/@popperjs-core-npm-2.11.8-f1692e11a0-4681e682ab.zip b/offline_node_modules/@popperjs-core-npm-2.11.8-f1692e11a0-4681e682ab.zip new file mode 100644 index 0000000..c1f1984 Binary files /dev/null and b/offline_node_modules/@popperjs-core-npm-2.11.8-f1692e11a0-4681e682ab.zip differ diff --git a/offline_node_modules/@react-dnd-asap-npm-5.0.2-66021d3d61-0063db616d.zip b/offline_node_modules/@react-dnd-asap-npm-5.0.2-66021d3d61-0063db616d.zip new file mode 100644 index 0000000..7ebf6d3 Binary files /dev/null and b/offline_node_modules/@react-dnd-asap-npm-5.0.2-66021d3d61-0063db616d.zip differ diff --git a/offline_node_modules/@react-dnd-invariant-npm-4.0.2-826eacc1ea-b303cc53fc.zip b/offline_node_modules/@react-dnd-invariant-npm-4.0.2-826eacc1ea-b303cc53fc.zip new file mode 100644 index 0000000..aac25d6 Binary files /dev/null and b/offline_node_modules/@react-dnd-invariant-npm-4.0.2-826eacc1ea-b303cc53fc.zip differ diff --git a/offline_node_modules/@react-dnd-shallowequal-npm-4.0.2-f944714335-9a352fd176.zip b/offline_node_modules/@react-dnd-shallowequal-npm-4.0.2-f944714335-9a352fd176.zip new file mode 100644 index 0000000..f29de96 Binary files /dev/null and b/offline_node_modules/@react-dnd-shallowequal-npm-4.0.2-f944714335-9a352fd176.zip differ diff --git a/offline_node_modules/@react-spring-animated-npm-9.7.3-4aff527e22-5151da4fa7.zip b/offline_node_modules/@react-spring-animated-npm-9.7.3-4aff527e22-5151da4fa7.zip new file mode 100644 index 0000000..6373e32 Binary files /dev/null and b/offline_node_modules/@react-spring-animated-npm-9.7.3-4aff527e22-5151da4fa7.zip differ diff --git a/offline_node_modules/@react-spring-core-npm-9.7.3-00b8dd52b3-e28c05de84.zip b/offline_node_modules/@react-spring-core-npm-9.7.3-00b8dd52b3-e28c05de84.zip new file mode 100644 index 0000000..9b8cacc Binary files /dev/null and b/offline_node_modules/@react-spring-core-npm-9.7.3-00b8dd52b3-e28c05de84.zip differ diff --git a/offline_node_modules/@react-spring-shared-npm-9.7.3-cefcfdc40d-afb03ed28c.zip b/offline_node_modules/@react-spring-shared-npm-9.7.3-cefcfdc40d-afb03ed28c.zip new file mode 100644 index 0000000..98b9eaa Binary files /dev/null and b/offline_node_modules/@react-spring-shared-npm-9.7.3-cefcfdc40d-afb03ed28c.zip differ diff --git a/offline_node_modules/@react-spring-types-npm-9.7.3-f9de91ab6e-d645044f3c.zip b/offline_node_modules/@react-spring-types-npm-9.7.3-f9de91ab6e-d645044f3c.zip new file mode 100644 index 0000000..99c00b5 Binary files /dev/null and b/offline_node_modules/@react-spring-types-npm-9.7.3-f9de91ab6e-d645044f3c.zip differ diff --git a/offline_node_modules/@react-spring-web-npm-9.7.3-95390d075a-a5b4847a29.zip b/offline_node_modules/@react-spring-web-npm-9.7.3-95390d075a-a5b4847a29.zip new file mode 100644 index 0000000..17eb392 Binary files /dev/null and b/offline_node_modules/@react-spring-web-npm-9.7.3-95390d075a-a5b4847a29.zip differ diff --git a/offline_node_modules/@remix-run-router-npm-1.15.3-68c33b33e6-aea197447c.zip b/offline_node_modules/@remix-run-router-npm-1.15.3-68c33b33e6-aea197447c.zip deleted file mode 100644 index 45e3a02..0000000 Binary files a/offline_node_modules/@remix-run-router-npm-1.15.3-68c33b33e6-aea197447c.zip and /dev/null differ diff --git a/offline_node_modules/@remix-run-router-npm-1.16.1-cfa8039af0-5f1b0aef49.zip b/offline_node_modules/@remix-run-router-npm-1.16.1-cfa8039af0-5f1b0aef49.zip new file mode 100644 index 0000000..f5fee8c Binary files /dev/null and b/offline_node_modules/@remix-run-router-npm-1.16.1-cfa8039af0-5f1b0aef49.zip differ diff --git a/offline_node_modules/@rollup-plugin-babel-npm-5.3.1-6039a4d033-2766134dd5.zip b/offline_node_modules/@rollup-plugin-babel-npm-5.3.1-6039a4d033-2766134dd5.zip new file mode 100644 index 0000000..99cee8d Binary files /dev/null and b/offline_node_modules/@rollup-plugin-babel-npm-5.3.1-6039a4d033-2766134dd5.zip differ diff --git a/offline_node_modules/@rollup-plugin-node-resolve-npm-15.2.3-f49fe9c656-598c156150.zip b/offline_node_modules/@rollup-plugin-node-resolve-npm-15.2.3-f49fe9c656-598c156150.zip new file mode 100644 index 0000000..50f8309 Binary files /dev/null and b/offline_node_modules/@rollup-plugin-node-resolve-npm-15.2.3-f49fe9c656-598c156150.zip differ diff --git a/offline_node_modules/@rollup-plugin-replace-npm-2.4.2-86e64ab79f-ea3d27291c.zip b/offline_node_modules/@rollup-plugin-replace-npm-2.4.2-86e64ab79f-ea3d27291c.zip new file mode 100644 index 0000000..c85591f Binary files /dev/null and b/offline_node_modules/@rollup-plugin-replace-npm-2.4.2-86e64ab79f-ea3d27291c.zip differ diff --git a/offline_node_modules/@rollup-plugin-terser-npm-0.4.4-c6896dd264-b9cb6c8f02.zip b/offline_node_modules/@rollup-plugin-terser-npm-0.4.4-c6896dd264-b9cb6c8f02.zip new file mode 100644 index 0000000..860dfe7 Binary files /dev/null and b/offline_node_modules/@rollup-plugin-terser-npm-0.4.4-c6896dd264-b9cb6c8f02.zip differ diff --git a/offline_node_modules/@rollup-pluginutils-npm-3.1.0-b44b222e7d-7151753160.zip b/offline_node_modules/@rollup-pluginutils-npm-3.1.0-b44b222e7d-7151753160.zip new file mode 100644 index 0000000..c0f5fa7 Binary files /dev/null and b/offline_node_modules/@rollup-pluginutils-npm-3.1.0-b44b222e7d-7151753160.zip differ diff --git a/offline_node_modules/@rollup-pluginutils-npm-5.1.0-6939820ef8-c7bed15711.zip b/offline_node_modules/@rollup-pluginutils-npm-5.1.0-6939820ef8-c7bed15711.zip new file mode 100644 index 0000000..9af4cf8 Binary files /dev/null and b/offline_node_modules/@rollup-pluginutils-npm-5.1.0-6939820ef8-c7bed15711.zip differ diff --git a/offline_node_modules/@stylistic-eslint-plugin-js-npm-1.5.4-1f76ae411d-df306a6f28.zip b/offline_node_modules/@stylistic-eslint-plugin-js-npm-1.5.4-1f76ae411d-df306a6f28.zip deleted file mode 100644 index 853d2de..0000000 Binary files a/offline_node_modules/@stylistic-eslint-plugin-js-npm-1.5.4-1f76ae411d-df306a6f28.zip and /dev/null differ diff --git a/offline_node_modules/@stylistic-eslint-plugin-js-npm-1.7.0-19af1ed284-67944f8c0a.zip b/offline_node_modules/@stylistic-eslint-plugin-js-npm-2.3.0-fb8b735d12-41edf0a6ac.zip similarity index 92% rename from offline_node_modules/@stylistic-eslint-plugin-js-npm-1.7.0-19af1ed284-67944f8c0a.zip rename to offline_node_modules/@stylistic-eslint-plugin-js-npm-2.3.0-fb8b735d12-41edf0a6ac.zip index 619c701..fabc495 100644 Binary files a/offline_node_modules/@stylistic-eslint-plugin-js-npm-1.7.0-19af1ed284-67944f8c0a.zip and b/offline_node_modules/@stylistic-eslint-plugin-js-npm-2.3.0-fb8b735d12-41edf0a6ac.zip differ diff --git a/offline_node_modules/@stylistic-eslint-plugin-jsx-npm-1.5.4-e155904f5e-f9462f655a.zip b/offline_node_modules/@stylistic-eslint-plugin-jsx-npm-2.3.0-88be6b9745-6aec33ed4c.zip similarity index 88% rename from offline_node_modules/@stylistic-eslint-plugin-jsx-npm-1.5.4-e155904f5e-f9462f655a.zip rename to offline_node_modules/@stylistic-eslint-plugin-jsx-npm-2.3.0-88be6b9745-6aec33ed4c.zip index 30b5f86..22a720e 100644 Binary files a/offline_node_modules/@stylistic-eslint-plugin-jsx-npm-1.5.4-e155904f5e-f9462f655a.zip and b/offline_node_modules/@stylistic-eslint-plugin-jsx-npm-2.3.0-88be6b9745-6aec33ed4c.zip differ diff --git a/offline_node_modules/@stylistic-eslint-plugin-npm-1.5.4-1e405f884c-faf280c93a.zip b/offline_node_modules/@stylistic-eslint-plugin-npm-2.3.0-3f5081843c-17a82df97a.zip similarity index 88% rename from offline_node_modules/@stylistic-eslint-plugin-npm-1.5.4-1e405f884c-faf280c93a.zip rename to offline_node_modules/@stylistic-eslint-plugin-npm-2.3.0-3f5081843c-17a82df97a.zip index b7ecb8c..afe7d5e 100644 Binary files a/offline_node_modules/@stylistic-eslint-plugin-npm-1.5.4-1e405f884c-faf280c93a.zip and b/offline_node_modules/@stylistic-eslint-plugin-npm-2.3.0-3f5081843c-17a82df97a.zip differ diff --git a/offline_node_modules/@stylistic-eslint-plugin-plus-npm-1.5.4-4ad3e08670-b824b432cd.zip b/offline_node_modules/@stylistic-eslint-plugin-plus-npm-2.3.0-7be4fff610-709975a01b.zip similarity index 85% rename from offline_node_modules/@stylistic-eslint-plugin-plus-npm-1.5.4-4ad3e08670-b824b432cd.zip rename to offline_node_modules/@stylistic-eslint-plugin-plus-npm-2.3.0-7be4fff610-709975a01b.zip index 6a9a131..718b0ae 100644 Binary files a/offline_node_modules/@stylistic-eslint-plugin-plus-npm-1.5.4-4ad3e08670-b824b432cd.zip and b/offline_node_modules/@stylistic-eslint-plugin-plus-npm-2.3.0-7be4fff610-709975a01b.zip differ diff --git a/offline_node_modules/@stylistic-eslint-plugin-ts-npm-1.5.4-88462c017a-3327c31782.zip b/offline_node_modules/@stylistic-eslint-plugin-ts-npm-2.3.0-e9ac98911f-df8a334ecc.zip similarity index 88% rename from offline_node_modules/@stylistic-eslint-plugin-ts-npm-1.5.4-88462c017a-3327c31782.zip rename to offline_node_modules/@stylistic-eslint-plugin-ts-npm-2.3.0-e9ac98911f-df8a334ecc.zip index fdee3da..300b8cf 100644 Binary files a/offline_node_modules/@stylistic-eslint-plugin-ts-npm-1.5.4-88462c017a-3327c31782.zip and b/offline_node_modules/@stylistic-eslint-plugin-ts-npm-2.3.0-e9ac98911f-df8a334ecc.zip differ diff --git a/offline_node_modules/@surma-rollup-plugin-off-main-thread-npm-2.2.3-1f57d3eded-4f36a7488c.zip b/offline_node_modules/@surma-rollup-plugin-off-main-thread-npm-2.2.3-1f57d3eded-4f36a7488c.zip new file mode 100644 index 0000000..e0ebd98 Binary files /dev/null and b/offline_node_modules/@surma-rollup-plugin-off-main-thread-npm-2.2.3-1f57d3eded-4f36a7488c.zip differ diff --git a/offline_node_modules/@testing-library-jest-dom-npm-6.4.2-cf74bb9089-e7eba527b3.zip b/offline_node_modules/@testing-library-jest-dom-npm-6.4.6-e1b86782a7-8f369c1d27.zip similarity index 98% rename from offline_node_modules/@testing-library-jest-dom-npm-6.4.2-cf74bb9089-e7eba527b3.zip rename to offline_node_modules/@testing-library-jest-dom-npm-6.4.6-e1b86782a7-8f369c1d27.zip index 96932a2..1830809 100644 Binary files a/offline_node_modules/@testing-library-jest-dom-npm-6.4.2-cf74bb9089-e7eba527b3.zip and b/offline_node_modules/@testing-library-jest-dom-npm-6.4.6-e1b86782a7-8f369c1d27.zip differ diff --git a/offline_node_modules/@testing-library-user-event-npm-14.5.2-ec9587901c-68a0c2aa28.zip b/offline_node_modules/@testing-library-user-event-npm-14.5.2-ec9587901c-68a0c2aa28.zip new file mode 100644 index 0000000..dc34e29 Binary files /dev/null and b/offline_node_modules/@testing-library-user-event-npm-14.5.2-ec9587901c-68a0c2aa28.zip differ diff --git a/offline_node_modules/@types-eslint-npm-8.56.10-957cc305f5-674349d6c3.zip b/offline_node_modules/@types-eslint-npm-8.56.10-957cc305f5-674349d6c3.zip new file mode 100644 index 0000000..73a63f0 Binary files /dev/null and b/offline_node_modules/@types-eslint-npm-8.56.10-957cc305f5-674349d6c3.zip differ diff --git a/offline_node_modules/@types-estree-npm-0.0.39-f898500e96-f0af6c95ac.zip b/offline_node_modules/@types-estree-npm-0.0.39-f898500e96-f0af6c95ac.zip new file mode 100644 index 0000000..ebc92b1 Binary files /dev/null and b/offline_node_modules/@types-estree-npm-0.0.39-f898500e96-f0af6c95ac.zip differ diff --git a/offline_node_modules/@types-parse-json-npm-4.0.2-f87f65692e-b1b863ac34.zip b/offline_node_modules/@types-parse-json-npm-4.0.2-f87f65692e-b1b863ac34.zip new file mode 100644 index 0000000..e253df9 Binary files /dev/null and b/offline_node_modules/@types-parse-json-npm-4.0.2-f87f65692e-b1b863ac34.zip differ diff --git a/offline_node_modules/@types-react-transition-group-npm-4.4.10-5e11bed850-3eb9bca143.zip b/offline_node_modules/@types-react-transition-group-npm-4.4.10-5e11bed850-3eb9bca143.zip new file mode 100644 index 0000000..cfa4d40 Binary files /dev/null and b/offline_node_modules/@types-react-transition-group-npm-4.4.10-5e11bed850-3eb9bca143.zip differ diff --git a/offline_node_modules/@types-resolve-npm-1.20.2-5fccb2ad46-c5b7e1770f.zip b/offline_node_modules/@types-resolve-npm-1.20.2-5fccb2ad46-c5b7e1770f.zip new file mode 100644 index 0000000..57f03cb Binary files /dev/null and b/offline_node_modules/@types-resolve-npm-1.20.2-5fccb2ad46-c5b7e1770f.zip differ diff --git a/offline_node_modules/@types-trusted-types-npm-2.0.7-a07fc44f59-4c4855f10d.zip b/offline_node_modules/@types-trusted-types-npm-2.0.7-a07fc44f59-4c4855f10d.zip new file mode 100644 index 0000000..4f22b35 Binary files /dev/null and b/offline_node_modules/@types-trusted-types-npm-2.0.7-a07fc44f59-4c4855f10d.zip differ diff --git a/offline_node_modules/@typescript-eslint-eslint-plugin-npm-6.20.0-65f32791ce-5020faac39.zip b/offline_node_modules/@typescript-eslint-eslint-plugin-npm-7.15.0-546a66c6ca-7ed4ef8355.zip similarity index 66% rename from offline_node_modules/@typescript-eslint-eslint-plugin-npm-6.20.0-65f32791ce-5020faac39.zip rename to offline_node_modules/@typescript-eslint-eslint-plugin-npm-7.15.0-546a66c6ca-7ed4ef8355.zip index 7f2d76e..2143ced 100644 Binary files a/offline_node_modules/@typescript-eslint-eslint-plugin-npm-6.20.0-65f32791ce-5020faac39.zip and b/offline_node_modules/@typescript-eslint-eslint-plugin-npm-7.15.0-546a66c6ca-7ed4ef8355.zip differ diff --git a/offline_node_modules/@typescript-eslint-parser-npm-6.20.0-078b119c0b-d84ad5e228.zip b/offline_node_modules/@typescript-eslint-parser-npm-7.15.0-3593910f08-8dcad9b84e.zip similarity index 66% rename from offline_node_modules/@typescript-eslint-parser-npm-6.20.0-078b119c0b-d84ad5e228.zip rename to offline_node_modules/@typescript-eslint-parser-npm-7.15.0-3593910f08-8dcad9b84e.zip index 4c851ee..528cc8a 100644 Binary files a/offline_node_modules/@typescript-eslint-parser-npm-6.20.0-078b119c0b-d84ad5e228.zip and b/offline_node_modules/@typescript-eslint-parser-npm-7.15.0-3593910f08-8dcad9b84e.zip differ diff --git a/offline_node_modules/@typescript-eslint-scope-manager-npm-6.21.0-60aa61cad2-eaf868938d.zip b/offline_node_modules/@typescript-eslint-scope-manager-npm-6.21.0-60aa61cad2-eaf868938d.zip deleted file mode 100644 index 72c7de8..0000000 Binary files a/offline_node_modules/@typescript-eslint-scope-manager-npm-6.21.0-60aa61cad2-eaf868938d.zip and /dev/null differ diff --git a/offline_node_modules/@typescript-eslint-scope-manager-npm-6.20.0-16b5e4a270-f6768ed2dc.zip b/offline_node_modules/@typescript-eslint-scope-manager-npm-7.15.0-6cd6663c93-781ec31a07.zip similarity index 78% rename from offline_node_modules/@typescript-eslint-scope-manager-npm-6.20.0-16b5e4a270-f6768ed2dc.zip rename to offline_node_modules/@typescript-eslint-scope-manager-npm-7.15.0-6cd6663c93-781ec31a07.zip index a9414fd..25b5205 100644 Binary files a/offline_node_modules/@typescript-eslint-scope-manager-npm-6.20.0-16b5e4a270-f6768ed2dc.zip and b/offline_node_modules/@typescript-eslint-scope-manager-npm-7.15.0-6cd6663c93-781ec31a07.zip differ diff --git a/offline_node_modules/@typescript-eslint-type-utils-npm-6.20.0-d80ffa92bf-8f622fbb14.zip b/offline_node_modules/@typescript-eslint-type-utils-npm-7.15.0-f8293abccb-06189eb05d.zip similarity index 69% rename from offline_node_modules/@typescript-eslint-type-utils-npm-6.20.0-d80ffa92bf-8f622fbb14.zip rename to offline_node_modules/@typescript-eslint-type-utils-npm-7.15.0-f8293abccb-06189eb05d.zip index 5163c34..0b5f8aa 100644 Binary files a/offline_node_modules/@typescript-eslint-type-utils-npm-6.20.0-d80ffa92bf-8f622fbb14.zip and b/offline_node_modules/@typescript-eslint-type-utils-npm-7.15.0-f8293abccb-06189eb05d.zip differ diff --git a/offline_node_modules/@typescript-eslint-types-npm-6.20.0-099f974f57-37589003b0.zip b/offline_node_modules/@typescript-eslint-types-npm-6.20.0-099f974f57-37589003b0.zip deleted file mode 100644 index ab403d5..0000000 Binary files a/offline_node_modules/@typescript-eslint-types-npm-6.20.0-099f974f57-37589003b0.zip and /dev/null differ diff --git a/offline_node_modules/@typescript-eslint-types-npm-6.21.0-4d08954078-020631d322.zip b/offline_node_modules/@typescript-eslint-types-npm-7.15.0-f8bd99bde7-935387b21d.zip similarity index 67% rename from offline_node_modules/@typescript-eslint-types-npm-6.21.0-4d08954078-020631d322.zip rename to offline_node_modules/@typescript-eslint-types-npm-7.15.0-f8bd99bde7-935387b21d.zip index dabe706..6853891 100644 Binary files a/offline_node_modules/@typescript-eslint-types-npm-6.21.0-4d08954078-020631d322.zip and b/offline_node_modules/@typescript-eslint-types-npm-7.15.0-f8bd99bde7-935387b21d.zip differ diff --git a/offline_node_modules/@typescript-eslint-typescript-estree-npm-6.20.0-f90f58095c-551f13445a.zip b/offline_node_modules/@typescript-eslint-typescript-estree-npm-6.20.0-f90f58095c-551f13445a.zip deleted file mode 100644 index 9187794..0000000 Binary files a/offline_node_modules/@typescript-eslint-typescript-estree-npm-6.20.0-f90f58095c-551f13445a.zip and /dev/null differ diff --git a/offline_node_modules/@typescript-eslint-typescript-estree-npm-6.21.0-04a199adba-af1438c60f.zip b/offline_node_modules/@typescript-eslint-typescript-estree-npm-7.15.0-53b406f82c-0d6e61cb36.zip similarity index 67% rename from offline_node_modules/@typescript-eslint-typescript-estree-npm-6.21.0-04a199adba-af1438c60f.zip rename to offline_node_modules/@typescript-eslint-typescript-estree-npm-7.15.0-53b406f82c-0d6e61cb36.zip index 1f9af9d..bc3c1f9 100644 Binary files a/offline_node_modules/@typescript-eslint-typescript-estree-npm-6.21.0-04a199adba-af1438c60f.zip and b/offline_node_modules/@typescript-eslint-typescript-estree-npm-7.15.0-53b406f82c-0d6e61cb36.zip differ diff --git a/offline_node_modules/@typescript-eslint-utils-npm-6.20.0-dcbfa6a3be-0a8ede3d80.zip b/offline_node_modules/@typescript-eslint-utils-npm-6.20.0-dcbfa6a3be-0a8ede3d80.zip deleted file mode 100644 index 24c2781..0000000 Binary files a/offline_node_modules/@typescript-eslint-utils-npm-6.20.0-dcbfa6a3be-0a8ede3d80.zip and /dev/null differ diff --git a/offline_node_modules/@typescript-eslint-utils-npm-6.21.0-b19969b8aa-ab2df3833b.zip b/offline_node_modules/@typescript-eslint-utils-npm-7.15.0-62466ad6b7-26aced1797.zip similarity index 59% rename from offline_node_modules/@typescript-eslint-utils-npm-6.21.0-b19969b8aa-ab2df3833b.zip rename to offline_node_modules/@typescript-eslint-utils-npm-7.15.0-62466ad6b7-26aced1797.zip index 3c9e9c7..16b4db8 100644 Binary files a/offline_node_modules/@typescript-eslint-utils-npm-6.21.0-b19969b8aa-ab2df3833b.zip and b/offline_node_modules/@typescript-eslint-utils-npm-7.15.0-62466ad6b7-26aced1797.zip differ diff --git a/offline_node_modules/@typescript-eslint-visitor-keys-npm-6.21.0-b36d99336e-7395f69739.zip b/offline_node_modules/@typescript-eslint-visitor-keys-npm-6.21.0-b36d99336e-7395f69739.zip deleted file mode 100644 index 746d6c9..0000000 Binary files a/offline_node_modules/@typescript-eslint-visitor-keys-npm-6.21.0-b36d99336e-7395f69739.zip and /dev/null differ diff --git a/offline_node_modules/@typescript-eslint-visitor-keys-npm-6.20.0-76714df01a-852d938f2e.zip b/offline_node_modules/@typescript-eslint-visitor-keys-npm-7.15.0-32c639de86-7509f01c8c.zip similarity index 95% rename from offline_node_modules/@typescript-eslint-visitor-keys-npm-6.20.0-76714df01a-852d938f2e.zip rename to offline_node_modules/@typescript-eslint-visitor-keys-npm-7.15.0-32c639de86-7509f01c8c.zip index 148c1f2..3ec2060 100644 Binary files a/offline_node_modules/@typescript-eslint-visitor-keys-npm-6.20.0-76714df01a-852d938f2e.zip and b/offline_node_modules/@typescript-eslint-visitor-keys-npm-7.15.0-32c639de86-7509f01c8c.zip differ diff --git a/offline_node_modules/acorn-npm-8.12.1-610871d57c-51fb26cd67.zip b/offline_node_modules/acorn-npm-8.12.1-610871d57c-51fb26cd67.zip new file mode 100644 index 0000000..a91f977 Binary files /dev/null and b/offline_node_modules/acorn-npm-8.12.1-610871d57c-51fb26cd67.zip differ diff --git a/offline_node_modules/ajv-npm-8.16.0-a048a92b27-6fc38aa8fd.zip b/offline_node_modules/ajv-npm-8.16.0-a048a92b27-6fc38aa8fd.zip new file mode 100644 index 0000000..9c66e7c Binary files /dev/null and b/offline_node_modules/ajv-npm-8.16.0-a048a92b27-6fc38aa8fd.zip differ diff --git a/offline_node_modules/array.prototype.findlast-npm-1.2.5-316cb71d39-ddc952b829.zip b/offline_node_modules/array.prototype.findlast-npm-1.2.5-316cb71d39-ddc952b829.zip new file mode 100644 index 0000000..9898d56 Binary files /dev/null and b/offline_node_modules/array.prototype.findlast-npm-1.2.5-316cb71d39-ddc952b829.zip differ diff --git a/offline_node_modules/array.prototype.toreversed-npm-1.1.2-48ebc74406-2b7627ea85.zip b/offline_node_modules/array.prototype.toreversed-npm-1.1.2-48ebc74406-2b7627ea85.zip new file mode 100644 index 0000000..03d045a Binary files /dev/null and b/offline_node_modules/array.prototype.toreversed-npm-1.1.2-48ebc74406-2b7627ea85.zip differ diff --git a/offline_node_modules/array.prototype.tosorted-npm-1.1.3-f42c917a7c-a27e1ca511.zip b/offline_node_modules/array.prototype.tosorted-npm-1.1.4-c1fc919434-eb3c4c4fc0.zip similarity index 85% rename from offline_node_modules/array.prototype.tosorted-npm-1.1.3-f42c917a7c-a27e1ca511.zip rename to offline_node_modules/array.prototype.tosorted-npm-1.1.4-c1fc919434-eb3c4c4fc0.zip index d70a0b1..9dd3e14 100644 Binary files a/offline_node_modules/array.prototype.tosorted-npm-1.1.3-f42c917a7c-a27e1ca511.zip and b/offline_node_modules/array.prototype.tosorted-npm-1.1.4-c1fc919434-eb3c4c4fc0.zip differ diff --git a/offline_node_modules/async-npm-3.2.5-f5dbdabdfc-1408287b26.zip b/offline_node_modules/async-npm-3.2.5-f5dbdabdfc-1408287b26.zip new file mode 100644 index 0000000..5f84627 Binary files /dev/null and b/offline_node_modules/async-npm-3.2.5-f5dbdabdfc-1408287b26.zip differ diff --git a/offline_node_modules/at-least-node-npm-1.0.0-2b36e661fa-4c058baf6d.zip b/offline_node_modules/at-least-node-npm-1.0.0-2b36e661fa-4c058baf6d.zip new file mode 100644 index 0000000..c46164e Binary files /dev/null and b/offline_node_modules/at-least-node-npm-1.0.0-2b36e661fa-4c058baf6d.zip differ diff --git a/offline_node_modules/axe-core-npm-4.7.0-a095cfe0ae-89ac5712b5.zip b/offline_node_modules/axe-core-npm-4.9.1-6b74f843b9-ac9e5a0c6f.zip similarity index 59% rename from offline_node_modules/axe-core-npm-4.7.0-a095cfe0ae-89ac5712b5.zip rename to offline_node_modules/axe-core-npm-4.9.1-6b74f843b9-ac9e5a0c6f.zip index 021afc0..9bdc324 100644 Binary files a/offline_node_modules/axe-core-npm-4.7.0-a095cfe0ae-89ac5712b5.zip and b/offline_node_modules/axe-core-npm-4.9.1-6b74f843b9-ac9e5a0c6f.zip differ diff --git a/offline_node_modules/axobject-query-npm-3.2.1-b147b3f32c-f7debc2012.zip b/offline_node_modules/axobject-query-npm-3.1.1-13705ce3c1-fff3175a22.zip similarity index 89% rename from offline_node_modules/axobject-query-npm-3.2.1-b147b3f32c-f7debc2012.zip rename to offline_node_modules/axobject-query-npm-3.1.1-13705ce3c1-fff3175a22.zip index 5c7fc7a..b43e799 100644 Binary files a/offline_node_modules/axobject-query-npm-3.2.1-b147b3f32c-f7debc2012.zip and b/offline_node_modules/axobject-query-npm-3.1.1-13705ce3c1-fff3175a22.zip differ diff --git a/offline_node_modules/babel-plugin-macros-npm-3.1.0-320e781f4e-c6dfb15de9.zip b/offline_node_modules/babel-plugin-macros-npm-3.1.0-320e781f4e-c6dfb15de9.zip new file mode 100644 index 0000000..33d9d61 Binary files /dev/null and b/offline_node_modules/babel-plugin-macros-npm-3.1.0-320e781f4e-c6dfb15de9.zip differ diff --git a/offline_node_modules/braces-npm-3.0.3-582c14023c-7c6dfd30c3.zip b/offline_node_modules/braces-npm-3.0.3-582c14023c-7c6dfd30c3.zip new file mode 100644 index 0000000..0413eff Binary files /dev/null and b/offline_node_modules/braces-npm-3.0.3-582c14023c-7c6dfd30c3.zip differ diff --git a/offline_node_modules/bs-logger-npm-0.2.6-7670f88b66-80e89aaaed.zip b/offline_node_modules/bs-logger-npm-0.2.6-7670f88b66-80e89aaaed.zip new file mode 100644 index 0000000..3ae6435 Binary files /dev/null and b/offline_node_modules/bs-logger-npm-0.2.6-7670f88b66-80e89aaaed.zip differ diff --git a/offline_node_modules/builtin-modules-npm-3.3.0-db4f3d32de-2cb3448b4f.zip b/offline_node_modules/builtin-modules-npm-3.3.0-db4f3d32de-2cb3448b4f.zip new file mode 100644 index 0000000..61f7690 Binary files /dev/null and b/offline_node_modules/builtin-modules-npm-3.3.0-db4f3d32de-2cb3448b4f.zip differ diff --git a/offline_node_modules/clsx-npm-1.2.1-77792dc182-34dead8bee.zip b/offline_node_modules/clsx-npm-1.2.1-77792dc182-34dead8bee.zip new file mode 100644 index 0000000..bca492f Binary files /dev/null and b/offline_node_modules/clsx-npm-1.2.1-77792dc182-34dead8bee.zip differ diff --git a/offline_node_modules/clsx-npm-2.1.1-96125b98be-c4c8eb865f.zip b/offline_node_modules/clsx-npm-2.1.1-96125b98be-c4c8eb865f.zip new file mode 100644 index 0000000..abdbd53 Binary files /dev/null and b/offline_node_modules/clsx-npm-2.1.1-96125b98be-c4c8eb865f.zip differ diff --git a/offline_node_modules/commander-npm-11.1.0-56e979613c-13cc6ac875.zip b/offline_node_modules/commander-npm-12.1.0-65c868e907-6e1996680c.zip similarity index 79% rename from offline_node_modules/commander-npm-11.1.0-56e979613c-13cc6ac875.zip rename to offline_node_modules/commander-npm-12.1.0-65c868e907-6e1996680c.zip index b00bbff..7ea581b 100644 Binary files a/offline_node_modules/commander-npm-11.1.0-56e979613c-13cc6ac875.zip and b/offline_node_modules/commander-npm-12.1.0-65c868e907-6e1996680c.zip differ diff --git a/offline_node_modules/common-tags-npm-1.8.2-2c30ba69b3-23efe47ff0.zip b/offline_node_modules/common-tags-npm-1.8.2-2c30ba69b3-23efe47ff0.zip new file mode 100644 index 0000000..8840a82 Binary files /dev/null and b/offline_node_modules/common-tags-npm-1.8.2-2c30ba69b3-23efe47ff0.zip differ diff --git a/offline_node_modules/convert-source-map-npm-1.9.0-e294555f4b-281da55454.zip b/offline_node_modules/convert-source-map-npm-1.9.0-e294555f4b-281da55454.zip new file mode 100644 index 0000000..74fd0cd Binary files /dev/null and b/offline_node_modules/convert-source-map-npm-1.9.0-e294555f4b-281da55454.zip differ diff --git a/offline_node_modules/cosmiconfig-npm-7.1.0-13a5090bcd-b923ff6af5.zip b/offline_node_modules/cosmiconfig-npm-7.1.0-13a5090bcd-b923ff6af5.zip new file mode 100644 index 0000000..9880df8 Binary files /dev/null and b/offline_node_modules/cosmiconfig-npm-7.1.0-13a5090bcd-b923ff6af5.zip differ diff --git a/offline_node_modules/cross-fetch-npm-4.0.0-9c67668db4-386727dc4c.zip b/offline_node_modules/cross-fetch-npm-4.0.0-9c67668db4-386727dc4c.zip new file mode 100644 index 0000000..ce69d2d Binary files /dev/null and b/offline_node_modules/cross-fetch-npm-4.0.0-9c67668db4-386727dc4c.zip differ diff --git a/offline_node_modules/crypto-random-string-npm-2.0.0-8ab47992ef-288589b248.zip b/offline_node_modules/crypto-random-string-npm-2.0.0-8ab47992ef-288589b248.zip new file mode 100644 index 0000000..674f25d Binary files /dev/null and b/offline_node_modules/crypto-random-string-npm-2.0.0-8ab47992ef-288589b248.zip differ diff --git a/offline_node_modules/debug-npm-4.3.5-b5001f59b7-082c375a2b.zip b/offline_node_modules/debug-npm-4.3.5-b5001f59b7-082c375a2b.zip new file mode 100644 index 0000000..305362b Binary files /dev/null and b/offline_node_modules/debug-npm-4.3.5-b5001f59b7-082c375a2b.zip differ diff --git a/offline_node_modules/dnd-core-npm-16.0.1-552224cee0-6b852c576c.zip b/offline_node_modules/dnd-core-npm-16.0.1-552224cee0-6b852c576c.zip new file mode 100644 index 0000000..fb3effa Binary files /dev/null and b/offline_node_modules/dnd-core-npm-16.0.1-552224cee0-6b852c576c.zip differ diff --git a/offline_node_modules/dom-helpers-npm-5.2.1-b38bb4470b-f735074d66.zip b/offline_node_modules/dom-helpers-npm-5.2.1-b38bb4470b-f735074d66.zip new file mode 100644 index 0000000..36972d0 Binary files /dev/null and b/offline_node_modules/dom-helpers-npm-5.2.1-b38bb4470b-f735074d66.zip differ diff --git a/offline_node_modules/ejs-npm-3.1.10-4e8cf4bdc1-52eade9e68.zip b/offline_node_modules/ejs-npm-3.1.10-4e8cf4bdc1-52eade9e68.zip new file mode 100644 index 0000000..dde9bb4 Binary files /dev/null and b/offline_node_modules/ejs-npm-3.1.10-4e8cf4bdc1-52eade9e68.zip differ diff --git a/offline_node_modules/es-abstract-npm-1.23.3-ffd85665f7-d27e9afafb.zip b/offline_node_modules/es-abstract-npm-1.23.3-ffd85665f7-d27e9afafb.zip new file mode 100644 index 0000000..0dea71b Binary files /dev/null and b/offline_node_modules/es-abstract-npm-1.23.3-ffd85665f7-d27e9afafb.zip differ diff --git a/offline_node_modules/es-iterator-helpers-npm-1.0.18-1d29665edd-93be402e01.zip b/offline_node_modules/es-iterator-helpers-npm-1.0.19-5a0b930ca7-ae8f0241e3.zip similarity index 91% rename from offline_node_modules/es-iterator-helpers-npm-1.0.18-1d29665edd-93be402e01.zip rename to offline_node_modules/es-iterator-helpers-npm-1.0.19-5a0b930ca7-ae8f0241e3.zip index 2251829..741fe75 100644 Binary files a/offline_node_modules/es-iterator-helpers-npm-1.0.18-1d29665edd-93be402e01.zip and b/offline_node_modules/es-iterator-helpers-npm-1.0.19-5a0b930ca7-ae8f0241e3.zip differ diff --git a/offline_node_modules/eslint-config-ksv741-npm-0.0.2-5c4146739d-0fae6908f4.zip b/offline_node_modules/eslint-config-ksv741-npm-0.0.3-f10babac75-86933a0358.zip similarity index 94% rename from offline_node_modules/eslint-config-ksv741-npm-0.0.2-5c4146739d-0fae6908f4.zip rename to offline_node_modules/eslint-config-ksv741-npm-0.0.3-f10babac75-86933a0358.zip index 7b10eca..611384e 100644 Binary files a/offline_node_modules/eslint-config-ksv741-npm-0.0.2-5c4146739d-0fae6908f4.zip and b/offline_node_modules/eslint-config-ksv741-npm-0.0.3-f10babac75-86933a0358.zip differ diff --git a/offline_node_modules/eslint-plugin-jest-dom-npm-5.2.0-3e73d296e3-07ab52063c.zip b/offline_node_modules/eslint-plugin-jest-dom-npm-5.4.0-e7d6b364a7-7a3cab6bae.zip similarity index 92% rename from offline_node_modules/eslint-plugin-jest-dom-npm-5.2.0-3e73d296e3-07ab52063c.zip rename to offline_node_modules/eslint-plugin-jest-dom-npm-5.4.0-e7d6b364a7-7a3cab6bae.zip index 478d654..5db3332 100644 Binary files a/offline_node_modules/eslint-plugin-jest-dom-npm-5.2.0-3e73d296e3-07ab52063c.zip and b/offline_node_modules/eslint-plugin-jest-dom-npm-5.4.0-e7d6b364a7-7a3cab6bae.zip differ diff --git a/offline_node_modules/eslint-plugin-jest-npm-27.9.0-050f40ee4c-b8b09f7d8b.zip b/offline_node_modules/eslint-plugin-jest-npm-28.6.0-f84ae1c745-301008d8dd.zip similarity index 87% rename from offline_node_modules/eslint-plugin-jest-npm-27.9.0-050f40ee4c-b8b09f7d8b.zip rename to offline_node_modules/eslint-plugin-jest-npm-28.6.0-f84ae1c745-301008d8dd.zip index 909b196..e2ea257 100644 Binary files a/offline_node_modules/eslint-plugin-jest-npm-27.9.0-050f40ee4c-b8b09f7d8b.zip and b/offline_node_modules/eslint-plugin-jest-npm-28.6.0-f84ae1c745-301008d8dd.zip differ diff --git a/offline_node_modules/eslint-plugin-jsx-a11y-npm-6.8.0-5ffd885665-199b883e52.zip b/offline_node_modules/eslint-plugin-jsx-a11y-npm-6.9.0-be49ca57a2-72ac719ca9.zip similarity index 91% rename from offline_node_modules/eslint-plugin-jsx-a11y-npm-6.8.0-5ffd885665-199b883e52.zip rename to offline_node_modules/eslint-plugin-jsx-a11y-npm-6.9.0-be49ca57a2-72ac719ca9.zip index 860f7c7..f56d002 100644 Binary files a/offline_node_modules/eslint-plugin-jsx-a11y-npm-6.8.0-5ffd885665-199b883e52.zip and b/offline_node_modules/eslint-plugin-jsx-a11y-npm-6.9.0-be49ca57a2-72ac719ca9.zip differ diff --git a/offline_node_modules/eslint-plugin-react-hooks-npm-4.6.0-b429fac07f-58c7e10ea5.zip b/offline_node_modules/eslint-plugin-react-hooks-npm-4.6.2-05bc129286-4844e58c92.zip similarity index 99% rename from offline_node_modules/eslint-plugin-react-hooks-npm-4.6.0-b429fac07f-58c7e10ea5.zip rename to offline_node_modules/eslint-plugin-react-hooks-npm-4.6.2-05bc129286-4844e58c92.zip index 0b5ce99..c143e0f 100644 Binary files a/offline_node_modules/eslint-plugin-react-hooks-npm-4.6.0-b429fac07f-58c7e10ea5.zip and b/offline_node_modules/eslint-plugin-react-hooks-npm-4.6.2-05bc129286-4844e58c92.zip differ diff --git a/offline_node_modules/eslint-plugin-react-npm-7.33.2-08f77ebc15-f9b2478610.zip b/offline_node_modules/eslint-plugin-react-npm-7.34.3-211c30e474-60717e32c9.zip similarity index 89% rename from offline_node_modules/eslint-plugin-react-npm-7.33.2-08f77ebc15-f9b2478610.zip rename to offline_node_modules/eslint-plugin-react-npm-7.34.3-211c30e474-60717e32c9.zip index e48f488..9391195 100644 Binary files a/offline_node_modules/eslint-plugin-react-npm-7.33.2-08f77ebc15-f9b2478610.zip and b/offline_node_modules/eslint-plugin-react-npm-7.34.3-211c30e474-60717e32c9.zip differ diff --git a/offline_node_modules/eslint-plugin-testing-library-npm-6.2.0-36efb73118-00ed418670.zip b/offline_node_modules/eslint-plugin-testing-library-npm-6.2.2-e24e9c065a-f7dd5ba10e.zip similarity index 97% rename from offline_node_modules/eslint-plugin-testing-library-npm-6.2.0-36efb73118-00ed418670.zip rename to offline_node_modules/eslint-plugin-testing-library-npm-6.2.2-e24e9c065a-f7dd5ba10e.zip index 98fb731..43cd7b3 100644 Binary files a/offline_node_modules/eslint-plugin-testing-library-npm-6.2.0-36efb73118-00ed418670.zip and b/offline_node_modules/eslint-plugin-testing-library-npm-6.2.2-e24e9c065a-f7dd5ba10e.zip differ diff --git a/offline_node_modules/eslint-visitor-keys-npm-4.0.0-9098eefd77-76619f42cf.zip b/offline_node_modules/eslint-visitor-keys-npm-4.0.0-9098eefd77-76619f42cf.zip new file mode 100644 index 0000000..e0d3f49 Binary files /dev/null and b/offline_node_modules/eslint-visitor-keys-npm-4.0.0-9098eefd77-76619f42cf.zip differ diff --git a/offline_node_modules/espree-npm-10.1.0-6847541ce4-52e6feaa77.zip b/offline_node_modules/espree-npm-10.1.0-6847541ce4-52e6feaa77.zip new file mode 100644 index 0000000..9cab0ac Binary files /dev/null and b/offline_node_modules/espree-npm-10.1.0-6847541ce4-52e6feaa77.zip differ diff --git a/offline_node_modules/estree-walker-npm-1.0.1-e916593b23-fa9e5f8c1b.zip b/offline_node_modules/estree-walker-npm-1.0.1-e916593b23-fa9e5f8c1b.zip new file mode 100644 index 0000000..d42a8c2 Binary files /dev/null and b/offline_node_modules/estree-walker-npm-1.0.1-e916593b23-fa9e5f8c1b.zip differ diff --git a/offline_node_modules/estree-walker-npm-2.0.2-dfab42f65c-53a6c54e20.zip b/offline_node_modules/estree-walker-npm-2.0.2-dfab42f65c-53a6c54e20.zip new file mode 100644 index 0000000..bf10fd6 Binary files /dev/null and b/offline_node_modules/estree-walker-npm-2.0.2-dfab42f65c-53a6c54e20.zip differ diff --git a/offline_node_modules/filelist-npm-1.0.4-3a835ae0a7-426b1de394.zip b/offline_node_modules/filelist-npm-1.0.4-3a835ae0a7-426b1de394.zip new file mode 100644 index 0000000..8bc37f8 Binary files /dev/null and b/offline_node_modules/filelist-npm-1.0.4-3a835ae0a7-426b1de394.zip differ diff --git a/offline_node_modules/fill-range-npm-7.1.1-bf491486db-b75b691bbe.zip b/offline_node_modules/fill-range-npm-7.1.1-bf491486db-b75b691bbe.zip new file mode 100644 index 0000000..b84c301 Binary files /dev/null and b/offline_node_modules/fill-range-npm-7.1.1-bf491486db-b75b691bbe.zip differ diff --git a/offline_node_modules/fs-extra-npm-9.1.0-983c2ddb4c-9b808bd884.zip b/offline_node_modules/fs-extra-npm-9.1.0-983c2ddb4c-9b808bd884.zip new file mode 100644 index 0000000..1765f31 Binary files /dev/null and b/offline_node_modules/fs-extra-npm-9.1.0-983c2ddb4c-9b808bd884.zip differ diff --git a/offline_node_modules/get-own-enumerable-property-symbols-npm-3.0.2-f143f9e8d3-103999855f.zip b/offline_node_modules/get-own-enumerable-property-symbols-npm-3.0.2-f143f9e8d3-103999855f.zip new file mode 100644 index 0000000..b4ee651 Binary files /dev/null and b/offline_node_modules/get-own-enumerable-property-symbols-npm-3.0.2-f143f9e8d3-103999855f.zip differ diff --git a/offline_node_modules/goober-npm-2.1.14-d5c148d4a9-184eda787a.zip b/offline_node_modules/goober-npm-2.1.14-d5c148d4a9-184eda787a.zip new file mode 100644 index 0000000..889646e Binary files /dev/null and b/offline_node_modules/goober-npm-2.1.14-d5c148d4a9-184eda787a.zip differ diff --git a/offline_node_modules/hoist-non-react-statics-npm-3.3.2-e7b709e6c1-fe0889169e.zip b/offline_node_modules/hoist-non-react-statics-npm-3.3.2-e7b709e6c1-fe0889169e.zip new file mode 100644 index 0000000..5f7b8a8 Binary files /dev/null and b/offline_node_modules/hoist-non-react-statics-npm-3.3.2-e7b709e6c1-fe0889169e.zip differ diff --git a/offline_node_modules/html-parse-stringify-npm-3.0.1-5762cd4b01-159292753d.zip b/offline_node_modules/html-parse-stringify-npm-3.0.1-5762cd4b01-159292753d.zip new file mode 100644 index 0000000..8209aea Binary files /dev/null and b/offline_node_modules/html-parse-stringify-npm-3.0.1-5762cd4b01-159292753d.zip differ diff --git a/offline_node_modules/i18next-browser-languagedetector-npm-8.0.0-fcff5207d7-08a7c747ec.zip b/offline_node_modules/i18next-browser-languagedetector-npm-8.0.0-fcff5207d7-08a7c747ec.zip new file mode 100644 index 0000000..1fc7616 Binary files /dev/null and b/offline_node_modules/i18next-browser-languagedetector-npm-8.0.0-fcff5207d7-08a7c747ec.zip differ diff --git a/offline_node_modules/i18next-http-backend-npm-2.5.2-6cbbe5e7c3-57cfbeeea4.zip b/offline_node_modules/i18next-http-backend-npm-2.5.2-6cbbe5e7c3-57cfbeeea4.zip new file mode 100644 index 0000000..1d004dd Binary files /dev/null and b/offline_node_modules/i18next-http-backend-npm-2.5.2-6cbbe5e7c3-57cfbeeea4.zip differ diff --git a/offline_node_modules/i18next-npm-23.11.5-27df1f473c-b0bec64250.zip b/offline_node_modules/i18next-npm-23.11.5-27df1f473c-b0bec64250.zip new file mode 100644 index 0000000..b6e08f2 Binary files /dev/null and b/offline_node_modules/i18next-npm-23.11.5-27df1f473c-b0bec64250.zip differ diff --git a/offline_node_modules/idb-npm-7.1.1-739f072039-72418e4397.zip b/offline_node_modules/idb-npm-7.1.1-739f072039-72418e4397.zip new file mode 100644 index 0000000..d37c2f2 Binary files /dev/null and b/offline_node_modules/idb-npm-7.1.1-739f072039-72418e4397.zip differ diff --git a/offline_node_modules/is-builtin-module-npm-3.2.1-2f92a5d353-5a66937a03.zip b/offline_node_modules/is-builtin-module-npm-3.2.1-2f92a5d353-5a66937a03.zip new file mode 100644 index 0000000..2f97963 Binary files /dev/null and b/offline_node_modules/is-builtin-module-npm-3.2.1-2f92a5d353-5a66937a03.zip differ diff --git a/offline_node_modules/is-module-npm-1.0.0-79ba918283-795a3914bc.zip b/offline_node_modules/is-module-npm-1.0.0-79ba918283-795a3914bc.zip new file mode 100644 index 0000000..729c7c1 Binary files /dev/null and b/offline_node_modules/is-module-npm-1.0.0-79ba918283-795a3914bc.zip differ diff --git a/offline_node_modules/is-obj-npm-1.0.1-7d391539d7-5003acba0a.zip b/offline_node_modules/is-obj-npm-1.0.1-7d391539d7-5003acba0a.zip new file mode 100644 index 0000000..899a37c Binary files /dev/null and b/offline_node_modules/is-obj-npm-1.0.1-7d391539d7-5003acba0a.zip differ diff --git a/offline_node_modules/is-regexp-npm-1.0.0-8f95f51a0c-34cacda190.zip b/offline_node_modules/is-regexp-npm-1.0.0-8f95f51a0c-34cacda190.zip new file mode 100644 index 0000000..1d6da9a Binary files /dev/null and b/offline_node_modules/is-regexp-npm-1.0.0-8f95f51a0c-34cacda190.zip differ diff --git a/offline_node_modules/jake-npm-10.9.1-82385c44ca-dda972431a.zip b/offline_node_modules/jake-npm-10.9.1-82385c44ca-dda972431a.zip new file mode 100644 index 0000000..6be021d Binary files /dev/null and b/offline_node_modules/jake-npm-10.9.1-82385c44ca-dda972431a.zip differ diff --git a/offline_node_modules/json-schema-npm-0.4.0-e776313070-d4a637ec1d.zip b/offline_node_modules/json-schema-npm-0.4.0-e776313070-d4a637ec1d.zip new file mode 100644 index 0000000..133a98d Binary files /dev/null and b/offline_node_modules/json-schema-npm-0.4.0-e776313070-d4a637ec1d.zip differ diff --git a/offline_node_modules/jsonpointer-npm-5.0.1-8e4c22e512-89929e58b4.zip b/offline_node_modules/jsonpointer-npm-5.0.1-8e4c22e512-89929e58b4.zip new file mode 100644 index 0000000..b83fcb8 Binary files /dev/null and b/offline_node_modules/jsonpointer-npm-5.0.1-8e4c22e512-89929e58b4.zip differ diff --git a/offline_node_modules/lilconfig-npm-3.0.0-6931a31ed7-7f5ee7a658.zip b/offline_node_modules/lilconfig-npm-3.0.0-6931a31ed7-7f5ee7a658.zip deleted file mode 100644 index 39825dd..0000000 Binary files a/offline_node_modules/lilconfig-npm-3.0.0-6931a31ed7-7f5ee7a658.zip and /dev/null differ diff --git a/offline_node_modules/lilconfig-npm-3.1.2-e5b7292949-f059630b1a.zip b/offline_node_modules/lilconfig-npm-3.1.2-e5b7292949-f059630b1a.zip new file mode 100644 index 0000000..bbb5b3a Binary files /dev/null and b/offline_node_modules/lilconfig-npm-3.1.2-e5b7292949-f059630b1a.zip differ diff --git a/offline_node_modules/lint-staged-npm-15.2.2-da1e8ea74f-a1ba6c7ee5.zip b/offline_node_modules/lint-staged-npm-15.2.7-2a90203033-c14399f978.zip similarity index 96% rename from offline_node_modules/lint-staged-npm-15.2.2-da1e8ea74f-a1ba6c7ee5.zip rename to offline_node_modules/lint-staged-npm-15.2.7-2a90203033-c14399f978.zip index 535999b..1090a1c 100644 Binary files a/offline_node_modules/lint-staged-npm-15.2.2-da1e8ea74f-a1ba6c7ee5.zip and b/offline_node_modules/lint-staged-npm-15.2.7-2a90203033-c14399f978.zip differ diff --git a/offline_node_modules/listr2-npm-8.0.1-634f89e3e8-b565d6ceb3.zip b/offline_node_modules/listr2-npm-8.2.3-fca36a2d44-44404ecfcb.zip similarity index 96% rename from offline_node_modules/listr2-npm-8.0.1-634f89e3e8-b565d6ceb3.zip rename to offline_node_modules/listr2-npm-8.2.3-fca36a2d44-44404ecfcb.zip index 4e58fdb..0c9ceb6 100644 Binary files a/offline_node_modules/listr2-npm-8.0.1-634f89e3e8-b565d6ceb3.zip and b/offline_node_modules/listr2-npm-8.2.3-fca36a2d44-44404ecfcb.zip differ diff --git a/offline_node_modules/lodash.sortby-npm-4.7.0-fda8ab950d-fc48fb54ff.zip b/offline_node_modules/lodash.sortby-npm-4.7.0-fda8ab950d-fc48fb54ff.zip new file mode 100644 index 0000000..7fbef21 Binary files /dev/null and b/offline_node_modules/lodash.sortby-npm-4.7.0-fda8ab950d-fc48fb54ff.zip differ diff --git a/offline_node_modules/magic-string-npm-0.25.9-0b51c0ea50-37f5e01a7e.zip b/offline_node_modules/magic-string-npm-0.25.9-0b51c0ea50-37f5e01a7e.zip new file mode 100644 index 0000000..2ccfa24 Binary files /dev/null and b/offline_node_modules/magic-string-npm-0.25.9-0b51c0ea50-37f5e01a7e.zip differ diff --git a/offline_node_modules/micromatch-npm-4.0.7-28fb7387ee-58fa99bc52.zip b/offline_node_modules/micromatch-npm-4.0.7-28fb7387ee-58fa99bc52.zip new file mode 100644 index 0000000..0b57d02 Binary files /dev/null and b/offline_node_modules/micromatch-npm-4.0.7-28fb7387ee-58fa99bc52.zip differ diff --git a/offline_node_modules/minimatch-npm-5.1.6-1e71429f4c-3defdfd230.zip b/offline_node_modules/minimatch-npm-5.1.6-1e71429f4c-3defdfd230.zip new file mode 100644 index 0000000..abf0e20 Binary files /dev/null and b/offline_node_modules/minimatch-npm-5.1.6-1e71429f4c-3defdfd230.zip differ diff --git a/offline_node_modules/minimatch-npm-9.0.5-9aa93d97fa-de96cf5e35.zip b/offline_node_modules/minimatch-npm-9.0.5-9aa93d97fa-de96cf5e35.zip new file mode 100644 index 0000000..b65b40e Binary files /dev/null and b/offline_node_modules/minimatch-npm-9.0.5-9aa93d97fa-de96cf5e35.zip differ diff --git a/offline_node_modules/node-fetch-npm-2.7.0-587d57004e-b55786b602.zip b/offline_node_modules/node-fetch-npm-2.7.0-587d57004e-b55786b602.zip new file mode 100644 index 0000000..43a929c Binary files /dev/null and b/offline_node_modules/node-fetch-npm-2.7.0-587d57004e-b55786b602.zip differ diff --git a/offline_node_modules/normalize.css-npm-8.0.1-6124fb39b6-4ddf56d1af.zip b/offline_node_modules/normalize.css-npm-8.0.1-6124fb39b6-4ddf56d1af.zip deleted file mode 100644 index a1cdce1..0000000 Binary files a/offline_node_modules/normalize.css-npm-8.0.1-6124fb39b6-4ddf56d1af.zip and /dev/null differ diff --git a/offline_node_modules/notistack-npm-3.0.1-2b0e3bf24a-dd5bd492db.zip b/offline_node_modules/notistack-npm-3.0.1-2b0e3bf24a-dd5bd492db.zip new file mode 100644 index 0000000..920faed Binary files /dev/null and b/offline_node_modules/notistack-npm-3.0.1-2b0e3bf24a-dd5bd492db.zip differ diff --git a/offline_node_modules/picomatch-npm-4.0.2-e93516ddf2-7c51f3ad2b.zip b/offline_node_modules/picomatch-npm-4.0.2-e93516ddf2-7c51f3ad2b.zip new file mode 100644 index 0000000..8f96a3f Binary files /dev/null and b/offline_node_modules/picomatch-npm-4.0.2-e93516ddf2-7c51f3ad2b.zip differ diff --git a/offline_node_modules/pretty-bytes-npm-5.6.0-0061079c9f-f69f494dcc.zip b/offline_node_modules/pretty-bytes-npm-5.6.0-0061079c9f-f69f494dcc.zip new file mode 100644 index 0000000..7d2d0fc Binary files /dev/null and b/offline_node_modules/pretty-bytes-npm-5.6.0-0061079c9f-f69f494dcc.zip differ diff --git a/offline_node_modules/react-dnd-html5-backend-npm-16.0.1-754940d855-6e4b632a11.zip b/offline_node_modules/react-dnd-html5-backend-npm-16.0.1-754940d855-6e4b632a11.zip new file mode 100644 index 0000000..70d7593 Binary files /dev/null and b/offline_node_modules/react-dnd-html5-backend-npm-16.0.1-754940d855-6e4b632a11.zip differ diff --git a/offline_node_modules/react-dnd-npm-16.0.1-974f047d7b-d069435750.zip b/offline_node_modules/react-dnd-npm-16.0.1-974f047d7b-d069435750.zip new file mode 100644 index 0000000..856f220 Binary files /dev/null and b/offline_node_modules/react-dnd-npm-16.0.1-974f047d7b-d069435750.zip differ diff --git a/offline_node_modules/react-dom-npm-18.2.0-dd675bca1c-66dfc5f93e.zip b/offline_node_modules/react-dom-npm-18.3.1-a805663f38-a752496c19.zip similarity index 94% rename from offline_node_modules/react-dom-npm-18.2.0-dd675bca1c-66dfc5f93e.zip rename to offline_node_modules/react-dom-npm-18.3.1-a805663f38-a752496c19.zip index 00e68be..7dd5bab 100644 Binary files a/offline_node_modules/react-dom-npm-18.2.0-dd675bca1c-66dfc5f93e.zip and b/offline_node_modules/react-dom-npm-18.3.1-a805663f38-a752496c19.zip differ diff --git a/offline_node_modules/react-i18next-npm-14.1.2-9873475bd7-cb8a83b369.zip b/offline_node_modules/react-i18next-npm-14.1.2-9873475bd7-cb8a83b369.zip new file mode 100644 index 0000000..a21ea6f Binary files /dev/null and b/offline_node_modules/react-i18next-npm-14.1.2-9873475bd7-cb8a83b369.zip differ diff --git a/offline_node_modules/react-is-npm-18.3.1-370a81e1e9-f2f1e60010.zip b/offline_node_modules/react-is-npm-18.3.1-370a81e1e9-f2f1e60010.zip new file mode 100644 index 0000000..c79d786 Binary files /dev/null and b/offline_node_modules/react-is-npm-18.3.1-370a81e1e9-f2f1e60010.zip differ diff --git a/offline_node_modules/react-npm-18.2.0-1eae08fee2-b562d9b569.zip b/offline_node_modules/react-npm-18.3.1-af38f3c1ae-283e8c5efc.zip similarity index 93% rename from offline_node_modules/react-npm-18.2.0-1eae08fee2-b562d9b569.zip rename to offline_node_modules/react-npm-18.3.1-af38f3c1ae-283e8c5efc.zip index ca9f05a..486442f 100644 Binary files a/offline_node_modules/react-npm-18.2.0-1eae08fee2-b562d9b569.zip and b/offline_node_modules/react-npm-18.3.1-af38f3c1ae-283e8c5efc.zip differ diff --git a/offline_node_modules/react-router-dom-npm-6.22.3-a471ae53e5-39b0472db5.zip b/offline_node_modules/react-router-dom-npm-6.22.3-a471ae53e5-39b0472db5.zip deleted file mode 100644 index 64c5a36..0000000 Binary files a/offline_node_modules/react-router-dom-npm-6.22.3-a471ae53e5-39b0472db5.zip and /dev/null differ diff --git a/offline_node_modules/react-router-dom-npm-6.23.1-a0a4fb9537-01b954d7d0.zip b/offline_node_modules/react-router-dom-npm-6.23.1-a0a4fb9537-01b954d7d0.zip new file mode 100644 index 0000000..734456b Binary files /dev/null and b/offline_node_modules/react-router-dom-npm-6.23.1-a0a4fb9537-01b954d7d0.zip differ diff --git a/offline_node_modules/react-router-npm-6.22.3-2497e3de73-a2c85c3d1f.zip b/offline_node_modules/react-router-npm-6.23.1-793f9d0865-0919498057.zip similarity index 54% rename from offline_node_modules/react-router-npm-6.22.3-2497e3de73-a2c85c3d1f.zip rename to offline_node_modules/react-router-npm-6.23.1-793f9d0865-0919498057.zip index 7fd7110..e320168 100644 Binary files a/offline_node_modules/react-router-npm-6.22.3-2497e3de73-a2c85c3d1f.zip and b/offline_node_modules/react-router-npm-6.23.1-793f9d0865-0919498057.zip differ diff --git a/offline_node_modules/react-transition-group-npm-4.4.5-98ea4ef96e-2ba754ba74.zip b/offline_node_modules/react-transition-group-npm-4.4.5-98ea4ef96e-2ba754ba74.zip new file mode 100644 index 0000000..815053a Binary files /dev/null and b/offline_node_modules/react-transition-group-npm-4.4.5-98ea4ef96e-2ba754ba74.zip differ diff --git a/offline_node_modules/redux-npm-4.2.1-e7e2cf2e37-136d98b3d5.zip b/offline_node_modules/redux-npm-4.2.1-e7e2cf2e37-136d98b3d5.zip new file mode 100644 index 0000000..6e591d0 Binary files /dev/null and b/offline_node_modules/redux-npm-4.2.1-e7e2cf2e37-136d98b3d5.zip differ diff --git a/offline_node_modules/rfdc-npm-1.3.1-80aaa71f8d-69f65e3ed3.zip b/offline_node_modules/rfdc-npm-1.4.1-1a1c63d052-4614e42923.zip similarity index 79% rename from offline_node_modules/rfdc-npm-1.3.1-80aaa71f8d-69f65e3ed3.zip rename to offline_node_modules/rfdc-npm-1.4.1-1a1c63d052-4614e42923.zip index 8a92b4c..65cf4fa 100644 Binary files a/offline_node_modules/rfdc-npm-1.3.1-80aaa71f8d-69f65e3ed3.zip and b/offline_node_modules/rfdc-npm-1.4.1-1a1c63d052-4614e42923.zip differ diff --git a/offline_node_modules/rollup-npm-2.79.1-94e707a9a3-421418687f.zip b/offline_node_modules/rollup-npm-2.79.1-94e707a9a3-421418687f.zip new file mode 100644 index 0000000..89d5984 Binary files /dev/null and b/offline_node_modules/rollup-npm-2.79.1-94e707a9a3-421418687f.zip differ diff --git a/offline_node_modules/scheduler-npm-0.23.0-a379a6bc3b-b777f7ca01.zip b/offline_node_modules/scheduler-npm-0.23.2-6d1dd9c2b7-26383305e2.zip similarity index 99% rename from offline_node_modules/scheduler-npm-0.23.0-a379a6bc3b-b777f7ca01.zip rename to offline_node_modules/scheduler-npm-0.23.2-6d1dd9c2b7-26383305e2.zip index 903e989..ece2f30 100644 Binary files a/offline_node_modules/scheduler-npm-0.23.0-a379a6bc3b-b777f7ca01.zip and b/offline_node_modules/scheduler-npm-0.23.2-6d1dd9c2b7-26383305e2.zip differ diff --git a/offline_node_modules/smob-npm-1.5.0-acdaaf382d-a1067f2326.zip b/offline_node_modules/smob-npm-1.5.0-acdaaf382d-a1067f2326.zip new file mode 100644 index 0000000..05763de Binary files /dev/null and b/offline_node_modules/smob-npm-1.5.0-acdaaf382d-a1067f2326.zip differ diff --git a/offline_node_modules/source-map-npm-0.5.7-7c3f035429-904e767bb9.zip b/offline_node_modules/source-map-npm-0.5.7-7c3f035429-904e767bb9.zip new file mode 100644 index 0000000..10ebd60 Binary files /dev/null and b/offline_node_modules/source-map-npm-0.5.7-7c3f035429-904e767bb9.zip differ diff --git a/offline_node_modules/source-map-npm-0.8.0-beta.0-688a309e94-fb4d9bde9a.zip b/offline_node_modules/source-map-npm-0.8.0-beta.0-688a309e94-fb4d9bde9a.zip new file mode 100644 index 0000000..1e6c7ec Binary files /dev/null and b/offline_node_modules/source-map-npm-0.8.0-beta.0-688a309e94-fb4d9bde9a.zip differ diff --git a/offline_node_modules/sourcemap-codec-npm-1.4.8-3a1a9e60b1-f099279fda.zip b/offline_node_modules/sourcemap-codec-npm-1.4.8-3a1a9e60b1-f099279fda.zip new file mode 100644 index 0000000..fc85ec8 Binary files /dev/null and b/offline_node_modules/sourcemap-codec-npm-1.4.8-3a1a9e60b1-f099279fda.zip differ diff --git a/offline_node_modules/string.prototype.includes-npm-2.0.0-05193653bf-32dff118c9.zip b/offline_node_modules/string.prototype.includes-npm-2.0.0-05193653bf-32dff118c9.zip new file mode 100644 index 0000000..8b18f14 Binary files /dev/null and b/offline_node_modules/string.prototype.includes-npm-2.0.0-05193653bf-32dff118c9.zip differ diff --git a/offline_node_modules/stringify-object-npm-3.3.0-3e6784f7df-ba8078f841.zip b/offline_node_modules/stringify-object-npm-3.3.0-3e6784f7df-ba8078f841.zip new file mode 100644 index 0000000..754362a Binary files /dev/null and b/offline_node_modules/stringify-object-npm-3.3.0-3e6784f7df-ba8078f841.zip differ diff --git a/offline_node_modules/strip-comments-npm-2.0.1-7f4e6e5047-984321b1ec.zip b/offline_node_modules/strip-comments-npm-2.0.1-7f4e6e5047-984321b1ec.zip new file mode 100644 index 0000000..0699fd9 Binary files /dev/null and b/offline_node_modules/strip-comments-npm-2.0.1-7f4e6e5047-984321b1ec.zip differ diff --git a/offline_node_modules/stylis-npm-4.2.0-6b07f11c99-a7128ad5a8.zip b/offline_node_modules/stylis-npm-4.2.0-6b07f11c99-a7128ad5a8.zip new file mode 100644 index 0000000..7e48d6e Binary files /dev/null and b/offline_node_modules/stylis-npm-4.2.0-6b07f11c99-a7128ad5a8.zip differ diff --git a/offline_node_modules/temp-dir-npm-2.0.0-e8af180805-b1df969e3f.zip b/offline_node_modules/temp-dir-npm-2.0.0-e8af180805-b1df969e3f.zip new file mode 100644 index 0000000..2c9669f Binary files /dev/null and b/offline_node_modules/temp-dir-npm-2.0.0-e8af180805-b1df969e3f.zip differ diff --git a/offline_node_modules/tempy-npm-0.6.0-e704ff522c-ca08822767.zip b/offline_node_modules/tempy-npm-0.6.0-e704ff522c-ca08822767.zip new file mode 100644 index 0000000..e646522 Binary files /dev/null and b/offline_node_modules/tempy-npm-0.6.0-e704ff522c-ca08822767.zip differ diff --git a/offline_node_modules/terser-npm-5.31.1-31ea4a8c1d-4d49a58f64.zip b/offline_node_modules/terser-npm-5.31.1-31ea4a8c1d-4d49a58f64.zip new file mode 100644 index 0000000..59cd891 Binary files /dev/null and b/offline_node_modules/terser-npm-5.31.1-31ea4a8c1d-4d49a58f64.zip differ diff --git a/offline_node_modules/tr46-npm-0.0.3-de53018915-047cb209a6.zip b/offline_node_modules/tr46-npm-0.0.3-de53018915-047cb209a6.zip new file mode 100644 index 0000000..6928ef0 Binary files /dev/null and b/offline_node_modules/tr46-npm-0.0.3-de53018915-047cb209a6.zip differ diff --git a/offline_node_modules/tr46-npm-1.0.1-9547f343a4-41525c2ccc.zip b/offline_node_modules/tr46-npm-1.0.1-9547f343a4-41525c2ccc.zip new file mode 100644 index 0000000..6670bb6 Binary files /dev/null and b/offline_node_modules/tr46-npm-1.0.1-9547f343a4-41525c2ccc.zip differ diff --git a/offline_node_modules/ts-jest-npm-29.1.4-b7c081a1e2-97def10be2.zip b/offline_node_modules/ts-jest-npm-29.1.4-b7c081a1e2-97def10be2.zip new file mode 100644 index 0000000..4b27c78 Binary files /dev/null and b/offline_node_modules/ts-jest-npm-29.1.4-b7c081a1e2-97def10be2.zip differ diff --git a/offline_node_modules/type-fest-npm-0.16.0-e1b8ff05d9-6b4d846534.zip b/offline_node_modules/type-fest-npm-0.16.0-e1b8ff05d9-6b4d846534.zip new file mode 100644 index 0000000..5dad7d7 Binary files /dev/null and b/offline_node_modules/type-fest-npm-0.16.0-e1b8ff05d9-6b4d846534.zip differ diff --git a/offline_node_modules/typescript-npm-5.5.3-9d4a463231-f52c71ccbc.zip b/offline_node_modules/typescript-npm-5.5.3-9d4a463231-f52c71ccbc.zip new file mode 100644 index 0000000..2ed13e0 Binary files /dev/null and b/offline_node_modules/typescript-npm-5.5.3-9d4a463231-f52c71ccbc.zip differ diff --git a/offline_node_modules/typescript-patch-846faf50d3-5a437c4162.zip b/offline_node_modules/typescript-patch-846faf50d3-5a437c4162.zip new file mode 100644 index 0000000..26ddf72 Binary files /dev/null and b/offline_node_modules/typescript-patch-846faf50d3-5a437c4162.zip differ diff --git a/offline_node_modules/unique-string-npm-2.0.0-3153c97e47-11820db0a4.zip b/offline_node_modules/unique-string-npm-2.0.0-3153c97e47-11820db0a4.zip new file mode 100644 index 0000000..d7abfd9 Binary files /dev/null and b/offline_node_modules/unique-string-npm-2.0.0-3153c97e47-11820db0a4.zip differ diff --git a/offline_node_modules/upath-npm-1.2.0-ca00ec3398-3746f24099.zip b/offline_node_modules/upath-npm-1.2.0-ca00ec3398-3746f24099.zip new file mode 100644 index 0000000..278361a Binary files /dev/null and b/offline_node_modules/upath-npm-1.2.0-ca00ec3398-3746f24099.zip differ diff --git a/offline_node_modules/void-elements-npm-3.1.0-4f43780839-0b8686f9f9.zip b/offline_node_modules/void-elements-npm-3.1.0-4f43780839-0b8686f9f9.zip new file mode 100644 index 0000000..b05b8d8 Binary files /dev/null and b/offline_node_modules/void-elements-npm-3.1.0-4f43780839-0b8686f9f9.zip differ diff --git a/offline_node_modules/webidl-conversions-npm-3.0.1-60310f6a2b-5612d5f3e5.zip b/offline_node_modules/webidl-conversions-npm-3.0.1-60310f6a2b-5612d5f3e5.zip new file mode 100644 index 0000000..dda75f1 Binary files /dev/null and b/offline_node_modules/webidl-conversions-npm-3.0.1-60310f6a2b-5612d5f3e5.zip differ diff --git a/offline_node_modules/webidl-conversions-npm-4.0.2-1d159e6409-def5c5ac34.zip b/offline_node_modules/webidl-conversions-npm-4.0.2-1d159e6409-def5c5ac34.zip new file mode 100644 index 0000000..37a0c84 Binary files /dev/null and b/offline_node_modules/webidl-conversions-npm-4.0.2-1d159e6409-def5c5ac34.zip differ diff --git a/offline_node_modules/whatwg-url-npm-5.0.0-374fb45e60-1588bed84d.zip b/offline_node_modules/whatwg-url-npm-5.0.0-374fb45e60-1588bed84d.zip new file mode 100644 index 0000000..7c03e0b Binary files /dev/null and b/offline_node_modules/whatwg-url-npm-5.0.0-374fb45e60-1588bed84d.zip differ diff --git a/offline_node_modules/whatwg-url-npm-7.1.0-d6cae01571-2785fe4647.zip b/offline_node_modules/whatwg-url-npm-7.1.0-d6cae01571-2785fe4647.zip new file mode 100644 index 0000000..4376e31 Binary files /dev/null and b/offline_node_modules/whatwg-url-npm-7.1.0-d6cae01571-2785fe4647.zip differ diff --git a/offline_node_modules/workbox-background-sync-npm-7.1.0-0c93a1bdcb-9538c49a37.zip b/offline_node_modules/workbox-background-sync-npm-7.1.0-0c93a1bdcb-9538c49a37.zip new file mode 100644 index 0000000..6c1945c Binary files /dev/null and b/offline_node_modules/workbox-background-sync-npm-7.1.0-0c93a1bdcb-9538c49a37.zip differ diff --git a/offline_node_modules/workbox-broadcast-update-npm-7.1.0-d15aa8e58b-4a6e201ced.zip b/offline_node_modules/workbox-broadcast-update-npm-7.1.0-d15aa8e58b-4a6e201ced.zip new file mode 100644 index 0000000..4a15e15 Binary files /dev/null and b/offline_node_modules/workbox-broadcast-update-npm-7.1.0-d15aa8e58b-4a6e201ced.zip differ diff --git a/offline_node_modules/workbox-build-npm-7.1.0-7e6643ab99-c482fde713.zip b/offline_node_modules/workbox-build-npm-7.1.0-7e6643ab99-c482fde713.zip new file mode 100644 index 0000000..950b58d Binary files /dev/null and b/offline_node_modules/workbox-build-npm-7.1.0-7e6643ab99-c482fde713.zip differ diff --git a/offline_node_modules/workbox-cacheable-response-npm-7.1.0-d3099c44c0-52ea73bb18.zip b/offline_node_modules/workbox-cacheable-response-npm-7.1.0-d3099c44c0-52ea73bb18.zip new file mode 100644 index 0000000..8112fcd Binary files /dev/null and b/offline_node_modules/workbox-cacheable-response-npm-7.1.0-d3099c44c0-52ea73bb18.zip differ diff --git a/offline_node_modules/workbox-core-npm-7.1.0-2fe6da9059-fb0b6e23a5.zip b/offline_node_modules/workbox-core-npm-7.1.0-2fe6da9059-fb0b6e23a5.zip new file mode 100644 index 0000000..db6daae Binary files /dev/null and b/offline_node_modules/workbox-core-npm-7.1.0-2fe6da9059-fb0b6e23a5.zip differ diff --git a/offline_node_modules/workbox-expiration-npm-7.1.0-d31f63a7ee-669d76f87c.zip b/offline_node_modules/workbox-expiration-npm-7.1.0-d31f63a7ee-669d76f87c.zip new file mode 100644 index 0000000..b1c07d1 Binary files /dev/null and b/offline_node_modules/workbox-expiration-npm-7.1.0-d31f63a7ee-669d76f87c.zip differ diff --git a/offline_node_modules/workbox-google-analytics-npm-7.1.0-059655d15e-4178d94fb7.zip b/offline_node_modules/workbox-google-analytics-npm-7.1.0-059655d15e-4178d94fb7.zip new file mode 100644 index 0000000..2b57bf0 Binary files /dev/null and b/offline_node_modules/workbox-google-analytics-npm-7.1.0-059655d15e-4178d94fb7.zip differ diff --git a/offline_node_modules/workbox-navigation-preload-npm-7.1.0-4226f75555-b667a3ba0c.zip b/offline_node_modules/workbox-navigation-preload-npm-7.1.0-4226f75555-b667a3ba0c.zip new file mode 100644 index 0000000..8546cc2 Binary files /dev/null and b/offline_node_modules/workbox-navigation-preload-npm-7.1.0-4226f75555-b667a3ba0c.zip differ diff --git a/offline_node_modules/workbox-precaching-npm-7.1.0-a9e92c29b0-53b2d0a658.zip b/offline_node_modules/workbox-precaching-npm-7.1.0-a9e92c29b0-53b2d0a658.zip new file mode 100644 index 0000000..fd0158b Binary files /dev/null and b/offline_node_modules/workbox-precaching-npm-7.1.0-a9e92c29b0-53b2d0a658.zip differ diff --git a/offline_node_modules/workbox-range-requests-npm-7.1.0-cdc9d58012-bf4aa597d0.zip b/offline_node_modules/workbox-range-requests-npm-7.1.0-cdc9d58012-bf4aa597d0.zip new file mode 100644 index 0000000..6ab935f Binary files /dev/null and b/offline_node_modules/workbox-range-requests-npm-7.1.0-cdc9d58012-bf4aa597d0.zip differ diff --git a/offline_node_modules/workbox-recipes-npm-7.1.0-774c1ec161-5a8c2444f6.zip b/offline_node_modules/workbox-recipes-npm-7.1.0-774c1ec161-5a8c2444f6.zip new file mode 100644 index 0000000..38a5c10 Binary files /dev/null and b/offline_node_modules/workbox-recipes-npm-7.1.0-774c1ec161-5a8c2444f6.zip differ diff --git a/offline_node_modules/workbox-routing-npm-7.1.0-7fb2b056c5-efd630fff5.zip b/offline_node_modules/workbox-routing-npm-7.1.0-7fb2b056c5-efd630fff5.zip new file mode 100644 index 0000000..256243d Binary files /dev/null and b/offline_node_modules/workbox-routing-npm-7.1.0-7fb2b056c5-efd630fff5.zip differ diff --git a/offline_node_modules/workbox-strategies-npm-7.1.0-1962eb0d59-b08712a69b.zip b/offline_node_modules/workbox-strategies-npm-7.1.0-1962eb0d59-b08712a69b.zip new file mode 100644 index 0000000..75bf768 Binary files /dev/null and b/offline_node_modules/workbox-strategies-npm-7.1.0-1962eb0d59-b08712a69b.zip differ diff --git a/offline_node_modules/workbox-streams-npm-7.1.0-7a3405a237-1d75c046fc.zip b/offline_node_modules/workbox-streams-npm-7.1.0-7a3405a237-1d75c046fc.zip new file mode 100644 index 0000000..00ef73a Binary files /dev/null and b/offline_node_modules/workbox-streams-npm-7.1.0-7a3405a237-1d75c046fc.zip differ diff --git a/offline_node_modules/workbox-sw-npm-7.1.0-8b3106e426-2084f1b58c.zip b/offline_node_modules/workbox-sw-npm-7.1.0-8b3106e426-2084f1b58c.zip new file mode 100644 index 0000000..ff8566c Binary files /dev/null and b/offline_node_modules/workbox-sw-npm-7.1.0-8b3106e426-2084f1b58c.zip differ diff --git a/offline_node_modules/workbox-webpack-plugin-npm-7.1.0-a5feed6dac-516fa68a6a.zip b/offline_node_modules/workbox-webpack-plugin-npm-7.1.0-a5feed6dac-516fa68a6a.zip new file mode 100644 index 0000000..e072c30 Binary files /dev/null and b/offline_node_modules/workbox-webpack-plugin-npm-7.1.0-a5feed6dac-516fa68a6a.zip differ diff --git a/offline_node_modules/workbox-window-npm-7.1.0-6c9a58e6fd-c989a6e3a0.zip b/offline_node_modules/workbox-window-npm-7.1.0-6c9a58e6fd-c989a6e3a0.zip new file mode 100644 index 0000000..60f8d55 Binary files /dev/null and b/offline_node_modules/workbox-window-npm-7.1.0-6c9a58e6fd-c989a6e3a0.zip differ diff --git a/offline_node_modules/yaml-npm-1.10.2-0e780aebdf-5c28b9eb7a.zip b/offline_node_modules/yaml-npm-1.10.2-0e780aebdf-5c28b9eb7a.zip new file mode 100644 index 0000000..b7ec99f Binary files /dev/null and b/offline_node_modules/yaml-npm-1.10.2-0e780aebdf-5c28b9eb7a.zip differ diff --git a/offline_node_modules/yaml-npm-2.3.4-8bb6dc2c0d-cf03b68f8f.zip b/offline_node_modules/yaml-npm-2.4.5-4752f3d852-e1ee78b381.zip similarity index 94% rename from offline_node_modules/yaml-npm-2.3.4-8bb6dc2c0d-cf03b68f8f.zip rename to offline_node_modules/yaml-npm-2.4.5-4752f3d852-e1ee78b381.zip index 0055530..d75f75d 100644 Binary files a/offline_node_modules/yaml-npm-2.3.4-8bb6dc2c0d-cf03b68f8f.zip and b/offline_node_modules/yaml-npm-2.4.5-4752f3d852-e1ee78b381.zip differ diff --git a/package.json b/package.json index b0b99f6..4eb8def 100644 --- a/package.json +++ b/package.json @@ -1,19 +1,21 @@ { "name": "money-controll-frontend-app", - "version": "0.0.1", + "version": "0.0.2", "description": "Frontend part of ksv741 MoneyControll App", "main": "index.js", "scripts": { "start:dev": "ksv741-react-scripts start --env mode=development", "build:prod": "ksv741-react-scripts build --env mode=production", "analyze:prod": "ksv741-react-scripts build --env mode=production analyze=true", + "watch": "docker run --rm -v ./build:/usr/share/nginx/html -v ./nginx.conf:/etc/nginx/conf.d/default.conf --name react-nginx-app -p 8080:80 nginx:1.27.0", "lint": "eslint src", "test:start": "jest", "test:coverage": "jest --coverage", + "typechecking": "tsc --noEmit", "release": "standard-version" }, "engines": { - "node": "=20.11.1" + "node": "20.15.0" }, "private": true, "repository": "git+https://gitlab.com/money-control2/web/frontend.git", @@ -30,32 +32,47 @@ }, "homepage": "https://gitlab.com/money-control2/web/frontend#readme", "dependencies": { + "@emotion/react": "11.11.4", + "@emotion/styled": "11.11.5", + "@mui/icons-material": "^5.15.19", + "@mui/material": "5.15.19", + "@react-spring/web": "9.7.3", "classnames": "2.5.1", - "normalize.css": "8.0.1", + "i18next": "23.11.5", + "i18next-browser-languagedetector": "8.0.0", + "i18next-http-backend": "2.5.2", + "notistack": "3.0.1", "prop-types": "15.8.1", - "react": "18.2.0", - "react-dom": "18.2.0", - "react-router-dom": "6.22.3" + "react": "18.3.1", + "react-dnd": "16.0.1", + "react-dnd-html5-backend": "16.0.1", + "react-dom": "18.3.1", + "react-i18next": "14.1.2", + "react-router-dom": "6.23.1", + "workbox-core": "7.1.0", + "workbox-precaching": "7.1.0", + "workbox-recipes": "7.1.0", + "workbox-window": "7.1.0" }, "devDependencies": { - "@babel/core": "7.24.3", - "@babel/preset-env": "7.24.3", - "@babel/preset-react": "7.24.1", - "@commitlint/cli": "19.2.1", - "@commitlint/config-conventional": "19.1.0", - "@testing-library/jest-dom": "6.4.2", + "@commitlint/cli": "19.3.0", + "@commitlint/config-conventional": "19.2.2", + "@testing-library/jest-dom": "6.4.6", "@testing-library/react": "14.3.1", + "@testing-library/user-event": "^14.5.2", "@types/jest": "29.5.12", "eslint": "8.57.0", - "eslint-config-ksv741": "0.0.2", + "eslint-config-ksv741": "0.0.3", "eslint-import-resolver-webpack": "0.13.8", "husky": "9.0.11", "identity-obj-proxy": "3.0.0", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", "ksv741-react-scripts": "0.3.1", - "lint-staged": "15.2.2", - "standard-version": "9.5.0" - }, - "packageManager": "yarn@4.1.1" + "lint-staged": "15.2.7", + "standard-version": "9.5.0", + "ts-jest": "29.1.4", + "typescript": "5.5.3", + "workbox-webpack-plugin": "7.1.0" + } } diff --git a/public/assets/fonts/Comfortaa/comfortaa-cyrillic-300-normal.woff2 b/public/assets/fonts/Comfortaa/comfortaa-cyrillic-300-normal.woff2 new file mode 100644 index 0000000..1a7fcbc Binary files /dev/null and b/public/assets/fonts/Comfortaa/comfortaa-cyrillic-300-normal.woff2 differ diff --git a/public/assets/fonts/Comfortaa/comfortaa-cyrillic-400-normal.woff2 b/public/assets/fonts/Comfortaa/comfortaa-cyrillic-400-normal.woff2 new file mode 100644 index 0000000..bea01fe Binary files /dev/null and b/public/assets/fonts/Comfortaa/comfortaa-cyrillic-400-normal.woff2 differ diff --git a/public/assets/fonts/Comfortaa/comfortaa-cyrillic-500-normal.woff2 b/public/assets/fonts/Comfortaa/comfortaa-cyrillic-500-normal.woff2 new file mode 100644 index 0000000..c120a82 Binary files /dev/null and b/public/assets/fonts/Comfortaa/comfortaa-cyrillic-500-normal.woff2 differ diff --git a/public/assets/fonts/Comfortaa/comfortaa-cyrillic-600-normal.woff2 b/public/assets/fonts/Comfortaa/comfortaa-cyrillic-600-normal.woff2 new file mode 100644 index 0000000..c3902ea Binary files /dev/null and b/public/assets/fonts/Comfortaa/comfortaa-cyrillic-600-normal.woff2 differ diff --git a/public/assets/fonts/Comfortaa/comfortaa-cyrillic-700-normal.woff2 b/public/assets/fonts/Comfortaa/comfortaa-cyrillic-700-normal.woff2 new file mode 100644 index 0000000..41d58aa Binary files /dev/null and b/public/assets/fonts/Comfortaa/comfortaa-cyrillic-700-normal.woff2 differ diff --git a/public/assets/fonts/Comfortaa/comfortaa-latin-300-normal.woff2 b/public/assets/fonts/Comfortaa/comfortaa-latin-300-normal.woff2 new file mode 100644 index 0000000..7fb6941 Binary files /dev/null and b/public/assets/fonts/Comfortaa/comfortaa-latin-300-normal.woff2 differ diff --git a/public/assets/fonts/Comfortaa/comfortaa-latin-400-normal.woff2 b/public/assets/fonts/Comfortaa/comfortaa-latin-400-normal.woff2 new file mode 100644 index 0000000..7740306 Binary files /dev/null and b/public/assets/fonts/Comfortaa/comfortaa-latin-400-normal.woff2 differ diff --git a/public/assets/fonts/Comfortaa/comfortaa-latin-500-normal.woff2 b/public/assets/fonts/Comfortaa/comfortaa-latin-500-normal.woff2 new file mode 100644 index 0000000..ed2adf8 Binary files /dev/null and b/public/assets/fonts/Comfortaa/comfortaa-latin-500-normal.woff2 differ diff --git a/public/assets/fonts/Comfortaa/comfortaa-latin-600-normal.woff2 b/public/assets/fonts/Comfortaa/comfortaa-latin-600-normal.woff2 new file mode 100644 index 0000000..25c1d63 Binary files /dev/null and b/public/assets/fonts/Comfortaa/comfortaa-latin-600-normal.woff2 differ diff --git a/public/assets/fonts/Comfortaa/comfortaa-latin-700-normal.woff2 b/public/assets/fonts/Comfortaa/comfortaa-latin-700-normal.woff2 new file mode 100644 index 0000000..8cb8b14 Binary files /dev/null and b/public/assets/fonts/Comfortaa/comfortaa-latin-700-normal.woff2 differ diff --git a/public/assets/fonts/Roboto/roboto-cyrillic-100-italic.woff2 b/public/assets/fonts/Roboto/roboto-cyrillic-100-italic.woff2 new file mode 100644 index 0000000..18c3f12 Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-cyrillic-100-italic.woff2 differ diff --git a/public/assets/fonts/Roboto/roboto-cyrillic-100-normal.woff2 b/public/assets/fonts/Roboto/roboto-cyrillic-100-normal.woff2 new file mode 100644 index 0000000..122ac2c Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-cyrillic-100-normal.woff2 differ diff --git a/public/assets/fonts/Roboto/roboto-cyrillic-300-italic.woff2 b/public/assets/fonts/Roboto/roboto-cyrillic-300-italic.woff2 new file mode 100644 index 0000000..943c5a0 Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-cyrillic-300-italic.woff2 differ diff --git a/public/assets/fonts/Roboto/roboto-cyrillic-300-normal.woff2 b/public/assets/fonts/Roboto/roboto-cyrillic-300-normal.woff2 new file mode 100644 index 0000000..9d7fb7f Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-cyrillic-300-normal.woff2 differ diff --git a/public/assets/fonts/Roboto/roboto-cyrillic-400-italic.woff2 b/public/assets/fonts/Roboto/roboto-cyrillic-400-italic.woff2 new file mode 100644 index 0000000..dd587a2 Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-cyrillic-400-italic.woff2 differ diff --git a/public/assets/fonts/Roboto/roboto-cyrillic-400-normal.woff2 b/public/assets/fonts/Roboto/roboto-cyrillic-400-normal.woff2 new file mode 100644 index 0000000..47da362 Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-cyrillic-400-normal.woff2 differ diff --git a/public/assets/fonts/Roboto/roboto-cyrillic-500-italic.woff2 b/public/assets/fonts/Roboto/roboto-cyrillic-500-italic.woff2 new file mode 100644 index 0000000..cbe564b Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-cyrillic-500-italic.woff2 differ diff --git a/public/assets/fonts/Roboto/roboto-cyrillic-500-normal.woff2 b/public/assets/fonts/Roboto/roboto-cyrillic-500-normal.woff2 new file mode 100644 index 0000000..cb5834f Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-cyrillic-500-normal.woff2 differ diff --git a/public/assets/fonts/Roboto/roboto-cyrillic-700-italic.woff2 b/public/assets/fonts/Roboto/roboto-cyrillic-700-italic.woff2 new file mode 100644 index 0000000..d2f30b5 Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-cyrillic-700-italic.woff2 differ diff --git a/public/assets/fonts/Roboto/roboto-cyrillic-700-normal.woff2 b/public/assets/fonts/Roboto/roboto-cyrillic-700-normal.woff2 new file mode 100644 index 0000000..1bb7737 Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-cyrillic-700-normal.woff2 differ diff --git a/public/assets/fonts/Roboto/roboto-cyrillic-900-italic.woff2 b/public/assets/fonts/Roboto/roboto-cyrillic-900-italic.woff2 new file mode 100644 index 0000000..fe8fcec Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-cyrillic-900-italic.woff2 differ diff --git a/public/assets/fonts/Roboto/roboto-cyrillic-900-normal.woff2 b/public/assets/fonts/Roboto/roboto-cyrillic-900-normal.woff2 new file mode 100644 index 0000000..1d173f2 Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-cyrillic-900-normal.woff2 differ diff --git a/public/assets/fonts/Roboto/roboto-latin-100-italic.woff2 b/public/assets/fonts/Roboto/roboto-latin-100-italic.woff2 new file mode 100644 index 0000000..4ccadd1 Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-latin-100-italic.woff2 differ diff --git a/public/assets/fonts/Roboto/roboto-latin-100-normal.woff2 b/public/assets/fonts/Roboto/roboto-latin-100-normal.woff2 new file mode 100644 index 0000000..71c9bb7 Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-latin-100-normal.woff2 differ diff --git a/public/assets/fonts/Roboto/roboto-latin-300-italic.woff2 b/public/assets/fonts/Roboto/roboto-latin-300-italic.woff2 new file mode 100644 index 0000000..22c57b0 Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-latin-300-italic.woff2 differ diff --git a/public/assets/fonts/Roboto/roboto-latin-300-normal.woff2 b/public/assets/fonts/Roboto/roboto-latin-300-normal.woff2 new file mode 100644 index 0000000..6068138 Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-latin-300-normal.woff2 differ diff --git a/public/assets/fonts/Roboto/roboto-latin-400-italic.woff2 b/public/assets/fonts/Roboto/roboto-latin-400-italic.woff2 new file mode 100644 index 0000000..e1b7a79 Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-latin-400-italic.woff2 differ diff --git a/public/assets/fonts/Roboto/roboto-latin-400-normal.woff2 b/public/assets/fonts/Roboto/roboto-latin-400-normal.woff2 new file mode 100644 index 0000000..020729e Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-latin-400-normal.woff2 differ diff --git a/public/assets/fonts/Roboto/roboto-latin-500-italic.woff2 b/public/assets/fonts/Roboto/roboto-latin-500-italic.woff2 new file mode 100644 index 0000000..ae1933f Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-latin-500-italic.woff2 differ diff --git a/public/assets/fonts/Roboto/roboto-latin-500-normal.woff2 b/public/assets/fonts/Roboto/roboto-latin-500-normal.woff2 new file mode 100644 index 0000000..29342a8 Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-latin-500-normal.woff2 differ diff --git a/public/assets/fonts/Roboto/roboto-latin-700-italic.woff2 b/public/assets/fonts/Roboto/roboto-latin-700-italic.woff2 new file mode 100644 index 0000000..a56a6ed Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-latin-700-italic.woff2 differ diff --git a/public/assets/fonts/Roboto/roboto-latin-700-normal.woff2 b/public/assets/fonts/Roboto/roboto-latin-700-normal.woff2 new file mode 100644 index 0000000..771fbec Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-latin-700-normal.woff2 differ diff --git a/public/assets/fonts/Roboto/roboto-latin-900-italic.woff2 b/public/assets/fonts/Roboto/roboto-latin-900-italic.woff2 new file mode 100644 index 0000000..59cab0f Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-latin-900-italic.woff2 differ diff --git a/public/assets/fonts/Roboto/roboto-latin-900-normal.woff2 b/public/assets/fonts/Roboto/roboto-latin-900-normal.woff2 new file mode 100644 index 0000000..067cb32 Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-latin-900-normal.woff2 differ diff --git a/public/assets/icons/android-launchericon-144-144.png b/public/assets/icons/android-launchericon-144-144.png new file mode 100644 index 0000000..470119e Binary files /dev/null and b/public/assets/icons/android-launchericon-144-144.png differ diff --git a/public/assets/icons/android-launchericon-192-192.png b/public/assets/icons/android-launchericon-192-192.png new file mode 100644 index 0000000..d30d312 Binary files /dev/null and b/public/assets/icons/android-launchericon-192-192.png differ diff --git a/public/assets/icons/android-launchericon-48-48.png b/public/assets/icons/android-launchericon-48-48.png new file mode 100644 index 0000000..d4e9ed6 Binary files /dev/null and b/public/assets/icons/android-launchericon-48-48.png differ diff --git a/public/assets/icons/android-launchericon-512-512.png b/public/assets/icons/android-launchericon-512-512.png new file mode 100644 index 0000000..c9af5d9 Binary files /dev/null and b/public/assets/icons/android-launchericon-512-512.png differ diff --git a/public/assets/icons/android-launchericon-72-72.png b/public/assets/icons/android-launchericon-72-72.png new file mode 100644 index 0000000..6821f2c Binary files /dev/null and b/public/assets/icons/android-launchericon-72-72.png differ diff --git a/public/assets/icons/android-launchericon-96-96.png b/public/assets/icons/android-launchericon-96-96.png new file mode 100644 index 0000000..ebdcf08 Binary files /dev/null and b/public/assets/icons/android-launchericon-96-96.png differ diff --git a/public/assets/images/404.png b/public/assets/images/404.png new file mode 100644 index 0000000..4d16e94 Binary files /dev/null and b/public/assets/images/404.png differ diff --git a/public/assets/images/oops.png b/public/assets/images/oops.png new file mode 100644 index 0000000..4661646 Binary files /dev/null and b/public/assets/images/oops.png differ diff --git a/public/assets/screenshots/pwa_desktop_screenshot.png b/public/assets/screenshots/pwa_desktop_screenshot.png new file mode 100644 index 0000000..2277e7d Binary files /dev/null and b/public/assets/screenshots/pwa_desktop_screenshot.png differ diff --git a/public/assets/screenshots/pwa_mobile_screenshot.png b/public/assets/screenshots/pwa_mobile_screenshot.png new file mode 100644 index 0000000..f56230e Binary files /dev/null and b/public/assets/screenshots/pwa_mobile_screenshot.png differ diff --git a/public/index.html b/public/index.html index f529315..05b6f9c 100644 --- a/public/index.html +++ b/public/index.html @@ -6,6 +6,10 @@ content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <%= htmlWebpackPlugin.options.title %> + + <% if (process.env.NODE_ENV === 'production') { %> + + <% } %>
diff --git a/public/locales/en/analyze-page.json b/public/locales/en/analyze-page.json new file mode 100644 index 0000000..56146e7 --- /dev/null +++ b/public/locales/en/analyze-page.json @@ -0,0 +1,4 @@ +{ + "title": "Analyze Page", + "toolbar": "Analyze Page Toolbar" +} diff --git a/public/locales/en/error-page.json b/public/locales/en/error-page.json new file mode 100644 index 0000000..152f171 --- /dev/null +++ b/public/locales/en/error-page.json @@ -0,0 +1,5 @@ +{ + "title": "Something goes wrong", + "toolbar": "Unhandled error", + "404-toolbar": "Page does not exist" +} diff --git a/public/locales/en/payments-page.json b/public/locales/en/payments-page.json new file mode 100644 index 0000000..660f4e4 --- /dev/null +++ b/public/locales/en/payments-page.json @@ -0,0 +1,4 @@ +{ + "title": "Payments Page", + "toolbar": "Payments Page Toolbar" +} diff --git a/public/locales/en/schedule-page.json b/public/locales/en/schedule-page.json new file mode 100644 index 0000000..725796b --- /dev/null +++ b/public/locales/en/schedule-page.json @@ -0,0 +1,4 @@ +{ + "title": "Schedule Page", + "toolbar": "Schedule Page Toolbar" +} diff --git a/public/locales/en/sidebar.json b/public/locales/en/sidebar.json new file mode 100644 index 0000000..ef6d9f5 --- /dev/null +++ b/public/locales/en/sidebar.json @@ -0,0 +1,5 @@ +{ + "analyze-page-link": "Analyze", + "payments-page-link": "Payments list", + "schedule-page-link": "Schedule" +} diff --git a/public/locales/en/translation.json b/public/locales/en/translation.json new file mode 100644 index 0000000..0e2341f --- /dev/null +++ b/public/locales/en/translation.json @@ -0,0 +1,3 @@ +{ + "language": "English" +} diff --git a/public/locales/ru/analyze-page.json b/public/locales/ru/analyze-page.json new file mode 100644 index 0000000..9f9b429 --- /dev/null +++ b/public/locales/ru/analyze-page.json @@ -0,0 +1,4 @@ +{ + "title": "Аналитика", + "toolbar": "Доска аналитики" +} diff --git a/public/locales/ru/error-page.json b/public/locales/ru/error-page.json new file mode 100644 index 0000000..1b5a8cd --- /dev/null +++ b/public/locales/ru/error-page.json @@ -0,0 +1,5 @@ +{ + "title": "Что-то пошло не так", + "toolbar": "Произошла непредвиденная ошибка", + "404-toolbar": "Такой страницы не существует" +} diff --git a/public/locales/ru/payments-page.json b/public/locales/ru/payments-page.json new file mode 100644 index 0000000..f5a3a68 --- /dev/null +++ b/public/locales/ru/payments-page.json @@ -0,0 +1,4 @@ +{ + "title": "Платежи", + "toolbar": "Доска платежей" +} diff --git a/public/locales/ru/schedule-page.json b/public/locales/ru/schedule-page.json new file mode 100644 index 0000000..3246bc4 --- /dev/null +++ b/public/locales/ru/schedule-page.json @@ -0,0 +1,4 @@ +{ + "title": "График платежей", + "toolbar": "Доска графика платежей" +} diff --git a/public/locales/ru/sidebar.json b/public/locales/ru/sidebar.json new file mode 100644 index 0000000..37b2a7f --- /dev/null +++ b/public/locales/ru/sidebar.json @@ -0,0 +1,5 @@ +{ + "analyze-page-link": "Аналитика", + "payments-page-link": "Список платежей", + "schedule-page-link": "График платежей" +} diff --git a/public/locales/ru/translation.json b/public/locales/ru/translation.json new file mode 100644 index 0000000..0bb9424 --- /dev/null +++ b/public/locales/ru/translation.json @@ -0,0 +1,3 @@ +{ + "language": "Русский" +} diff --git a/public/manifest.json b/public/manifest.json new file mode 100644 index 0000000..05e5241 --- /dev/null +++ b/public/manifest.json @@ -0,0 +1,60 @@ +{ + "name": "MoneyControll", + "short_name": "MoneyControll", + "start_url": ".", + "id": "/", + "display": "standalone", + "display_override": [ + "window-controls-overlay" + ], + "background_color": "#1976d2", + "description": "Controll your money with simple MoneyControll Progressive Web Application", + "icons": [ + { + "src": "/static/icons/android-launchericon-48-48.png", + "sizes": "48x48", + "type": "image/png" + }, + { + "src": "/static/icons/android-launchericon-72-72.png", + "sizes": "72x72", + "type": "image/png" + }, + { + "src": "/static/icons/android-launchericon-96-96.png", + "sizes": "96x96", + "type": "image/png" + }, + { + "src": "/static/icons/android-launchericon-144-144.png", + "sizes": "144x144", + "type": "image/png" + }, + { + "src": "/static/icons/android-launchericon-192-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/static/icons/android-launchericon-512-512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "screenshots" : [ + { + "src": "/static/screenshots/pwa_desktop_screenshot.png", + "sizes": "1920x976", + "type": "image/png", + "form_factor": "wide", + "label": "Homescreen of MoneyControllApp" + }, + { + "src": "/static/screenshots/pwa_mobile_screenshot.png", + "sizes": "416x599", + "type": "image/png", + "form_factor": "narrow", + "label": "Homescreen of MoneyControllApp" + } + ] +} diff --git a/src/apps/MoneyControllApp/index.js b/src/apps/MoneyControllApp/index.ts similarity index 100% rename from src/apps/MoneyControllApp/index.js rename to src/apps/MoneyControllApp/index.ts diff --git a/src/apps/MoneyControllApp/model/providers/RouterProvider/index.tsx b/src/apps/MoneyControllApp/model/providers/RouterProvider/index.tsx new file mode 100644 index 0000000..7407b88 --- /dev/null +++ b/src/apps/MoneyControllApp/model/providers/RouterProvider/index.tsx @@ -0,0 +1,101 @@ +import CalendarMonthIcon from '@mui/icons-material/CalendarMonth'; +import FormatListBulletedIcon from '@mui/icons-material/FormatListBulleted'; +import PieChartIcon from '@mui/icons-material/PieChart'; +import { Suspense } from 'react'; +import { useTranslation } from 'react-i18next'; +import { createBrowserRouter, Navigate, RouterProvider as RRDRouterProvider } from 'react-router-dom'; + +import { AnalyzePage, AnalyzePageToolbar } from 'pages/AnalyzePage'; +import { ErrorPage, ErrorPageToolbar } from 'pages/ErrorPage'; +import { PaymentsPage, PaymentsPageToolbar } from 'pages/PaymentsPage'; +import { SchedulePage, SchedulePageToolbar } from 'pages/SchedulePage'; + +import { AsideMenuLayout } from 'widgets/AsideMenuLayout'; +import { PageLoader } from 'widgets/PageLoader'; + +import type { ReactNode } from 'react'; +import type { RouteObject } from 'react-router-dom'; + +type PageListItem = { + icon: ReactNode; + path: `/${string}`; + title: string; + Content: ReactNode; + Toolbar?: ReactNode; +}; + +const RouterProvider = () => { + const { t } = useTranslation('sidebar'); + + const pages: PageListItem[] = [ + { + icon: , + title: t('analyze-page-link'), + path: '/analyze', + Content: , + Toolbar: , + }, + { + icon: , + title: t('schedule-page-link'), + path: '/schedule', + Content: , + Toolbar: , + }, + { + icon: , + title: t('payments-page-link'), + path: '/payments', + Content: , + Toolbar: , + }, + ]; + const Fallback = ( + } + pages={pages} + /> + ); + const routes: RouteObject[] = pages.map((page) => ({ + path: page.path, + element: ( + + + + ), + errorElement: ( + + } + pages={pages} + Toolbar={} + /> + + ), + })); + + const router = createBrowserRouter([ + ...routes, + { + path: '/', + element: , + errorElement: ( + } + pages={pages} + Toolbar={} + /> + ), + }, + ]); + + return ( + + ); +}; + +export default RouterProvider; diff --git a/src/apps/MoneyControllApp/ui/MoneyControllApp.spec.jsx b/src/apps/MoneyControllApp/ui/MoneyControllApp.spec.jsx deleted file mode 100644 index c6749a7..0000000 --- a/src/apps/MoneyControllApp/ui/MoneyControllApp.spec.jsx +++ /dev/null @@ -1,11 +0,0 @@ -import { screen, render } from '@testing-library/react'; -import MoneyControllApp from './MoneyControllApp.ui'; - -describe('Test MoneyControllApp', () => { - test('Render MoneyControllApp', () => { - render(); - - const appElem = screen.getByTestId('money-contoll-app'); - expect(appElem).toBeInTheDocument(); - }); -}); diff --git a/src/apps/MoneyControllApp/ui/MoneyControllApp.ui.jsx b/src/apps/MoneyControllApp/ui/MoneyControllApp.ui.jsx deleted file mode 100644 index 0e5e67b..0000000 --- a/src/apps/MoneyControllApp/ui/MoneyControllApp.ui.jsx +++ /dev/null @@ -1,9 +0,0 @@ -const MoneyControllApp = () => ( -
-

- Hello ksv741! -

-
-); - -export default MoneyControllApp; diff --git a/src/apps/MoneyControllApp/ui/MoneyControllApp.ui.tsx b/src/apps/MoneyControllApp/ui/MoneyControllApp.ui.tsx new file mode 100644 index 0000000..dcf55cb --- /dev/null +++ b/src/apps/MoneyControllApp/ui/MoneyControllApp.ui.tsx @@ -0,0 +1,21 @@ +import CssBaseline from '@mui/material/CssBaseline'; +import { SnackbarProvider } from 'notistack'; + +import { WorkboxUpdateNotification } from 'shared/ui/WorkboxUpdateNotification'; + +import RouterProvider from '../model/providers/RouterProvider'; + +const MoneyControllApp = () => ( +
+ + + + + + + + +
+); + +export default MoneyControllApp; diff --git a/src/features/LangSwitcher/index.ts b/src/features/LangSwitcher/index.ts new file mode 100644 index 0000000..57ad91e --- /dev/null +++ b/src/features/LangSwitcher/index.ts @@ -0,0 +1 @@ +export { default as LangSwitcher } from './ui/LangSwitcher.ui'; diff --git a/src/features/LangSwitcher/ui/LangSwitcher.ui.tsx b/src/features/LangSwitcher/ui/LangSwitcher.ui.tsx new file mode 100644 index 0000000..9bea81a --- /dev/null +++ b/src/features/LangSwitcher/ui/LangSwitcher.ui.tsx @@ -0,0 +1,30 @@ +import { useCallback } from 'react'; +import { useTranslation } from 'react-i18next'; + +import i18next from 'i18n'; + +import { LANGUAGE } from 'shared/constants'; + +import type { FC, ChangeEventHandler } from 'react'; + +const LangSwitcher: FC = () => { + const { i18n } = useTranslation(); + + const onChangedHandler = useCallback>(async (e) => { + await i18next.changeLanguage(e.target.value); + }, []); + + return ( + + ); +}; + +export default LangSwitcher; diff --git a/src/global.d.ts b/src/global.d.ts new file mode 100644 index 0000000..ae02f59 --- /dev/null +++ b/src/global.d.ts @@ -0,0 +1 @@ +/// diff --git a/src/i18n.ts b/src/i18n.ts new file mode 100644 index 0000000..46125c8 --- /dev/null +++ b/src/i18n.ts @@ -0,0 +1,22 @@ +import i18n from 'i18next'; +import LanguageDetector from 'i18next-browser-languagedetector'; +import Backend from 'i18next-http-backend'; +import { initReactI18next } from 'react-i18next'; + +import type { HttpBackendOptions } from 'i18next-http-backend'; + +// eslint-disable-next-line @typescript-eslint/no-floating-promises +i18n + .use(Backend) + .use(LanguageDetector) + .use(initReactI18next) + .init({ + fallbackLng: 'en', + debug: process.env.NODE_ENV === 'development', + load: 'currentOnly', + backend: { + loadPath: 'locales/{{lng}}/{{ns}}.json', + }, + }); + +export default i18n; diff --git a/src/index.jsx b/src/index.jsx deleted file mode 100644 index c82de2e..0000000 --- a/src/index.jsx +++ /dev/null @@ -1,8 +0,0 @@ -import 'normalize.css'; -import { createRoot } from 'react-dom/client'; -import { MoneyControllApp } from './apps/MoneyControllApp'; - -const domNode = document.getElementById('root'); -const root = createRoot(domNode); - -root.render(); diff --git a/src/index.tsx b/src/index.tsx new file mode 100644 index 0000000..a12cf2f --- /dev/null +++ b/src/index.tsx @@ -0,0 +1,21 @@ +import './i18n'; +import 'shared/styles/fonts/fonts.css'; +import React from 'react'; +import { createRoot } from 'react-dom/client'; + +import { MoneyControllApp } from 'apps/MoneyControllApp'; + +import { registerServiceWorker } from './sw-reg'; + +const domNode = document.getElementById('root'); +if (domNode) { + const root = createRoot(domNode); + + root.render( + + + , + ); +} + +registerServiceWorker(); diff --git a/src/pages/AnalyzePage/index.ts b/src/pages/AnalyzePage/index.ts new file mode 100644 index 0000000..26b2285 --- /dev/null +++ b/src/pages/AnalyzePage/index.ts @@ -0,0 +1,5 @@ +import { lazy } from 'react'; + +const LazyAnalyzePage = lazy(async () => import('./ui/AnalyzePage.ui')); +export { LazyAnalyzePage as AnalyzePage }; +export { default as AnalyzePageToolbar } from './ui/AnalyzePageToolbar.ui'; diff --git a/src/pages/AnalyzePage/ui/AnalyzePage.spec.tsx b/src/pages/AnalyzePage/ui/AnalyzePage.spec.tsx new file mode 100644 index 0000000..e3ad0c1 --- /dev/null +++ b/src/pages/AnalyzePage/ui/AnalyzePage.spec.tsx @@ -0,0 +1,32 @@ +import { render, screen } from '@testing-library/react'; + +import AnalyzePage from './AnalyzePage.ui'; +import AnalyzePageToolbar from './AnalyzePageToolbar.ui'; + +describe('Test AnalyzePage', () => { + const setup = () => render( + , + ); + + test('should render correctly', () => { + setup(); + + const pageElem = screen.getByTestId('analyze-page'); + expect(pageElem).toBeVisible(); + expect(pageElem).toHaveTextContent('Analyze page'); + }); +}); + +describe('Test AnalyzePageToolbar', () => { + const setup = () => render( + , + ); + + test('should render correctly', () => { + setup(); + + const toolbarElem = screen.getByTestId('analyze-page-toolbar'); + expect(toolbarElem).toBeVisible(); + expect(toolbarElem).toHaveTextContent('Analyze Page Toolbar'); + }); +}); diff --git a/src/pages/AnalyzePage/ui/AnalyzePage.ui.tsx b/src/pages/AnalyzePage/ui/AnalyzePage.ui.tsx new file mode 100644 index 0000000..8d5b83d --- /dev/null +++ b/src/pages/AnalyzePage/ui/AnalyzePage.ui.tsx @@ -0,0 +1,16 @@ +import { useTranslation } from 'react-i18next'; + +import type { DetailedHTMLProps, FC, HTMLAttributes } from 'react'; + +type AnalyzePageProps = DetailedHTMLProps, HTMLDivElement>; +const AnalyzePage: FC = (props) => { + const { t } = useTranslation('analyze-page'); + + return ( +
+ {t('title')} +
+ ); +}; + +export default AnalyzePage; diff --git a/src/pages/AnalyzePage/ui/AnalyzePageToolbar.ui.tsx b/src/pages/AnalyzePage/ui/AnalyzePageToolbar.ui.tsx new file mode 100644 index 0000000..c219ea6 --- /dev/null +++ b/src/pages/AnalyzePage/ui/AnalyzePageToolbar.ui.tsx @@ -0,0 +1,20 @@ +import Toolbar from '@mui/material/Toolbar'; +import Typography from '@mui/material/Typography'; +import { useTranslation } from 'react-i18next'; + +import type { ToolbarProps } from '@mui/material/Toolbar/Toolbar'; +import type { FC } from 'react'; + +type AnalyzePageToolbarProps = ToolbarProps; +const AnalyzePageToolbar: FC = (props) => { + const { t } = useTranslation('analyze-page'); + + return ( + + + {t('toolbar')} + + + ); +}; +export default AnalyzePageToolbar; diff --git a/src/pages/CalendarPage/index.ts b/src/pages/CalendarPage/index.ts new file mode 100644 index 0000000..f22791a --- /dev/null +++ b/src/pages/CalendarPage/index.ts @@ -0,0 +1 @@ +export { default as CalendarPage } from './ui/CalendarPage.ui'; diff --git a/src/pages/CalendarPage/ui/CalendarPage.module.css b/src/pages/CalendarPage/ui/CalendarPage.module.css new file mode 100644 index 0000000..1fb3f26 --- /dev/null +++ b/src/pages/CalendarPage/ui/CalendarPage.module.css @@ -0,0 +1,6 @@ +.calendarWrapper { + display: flex; + justify-content: center; + align-items: center; + gap: 50px +} diff --git a/src/pages/CalendarPage/ui/CalendarPage.ui.tsx b/src/pages/CalendarPage/ui/CalendarPage.ui.tsx new file mode 100644 index 0000000..0aaca35 --- /dev/null +++ b/src/pages/CalendarPage/ui/CalendarPage.ui.tsx @@ -0,0 +1,24 @@ +import { CalendarWidget } from 'widgets/CalendarWidget'; +import { DatePicker } from 'widgets/DatePicker'; + +import classes from './CalendarPage.module.css'; + +const CalendarPage = () => ( +
+

+ Calendar Page +

+ +
+ + + +
+
+); + +export default CalendarPage; diff --git a/src/pages/ErrorPage/index.ts b/src/pages/ErrorPage/index.ts new file mode 100644 index 0000000..6d8bf24 --- /dev/null +++ b/src/pages/ErrorPage/index.ts @@ -0,0 +1,2 @@ +export { default as ErrorPage } from './ui/ErrorPage.ui'; +export { default as ErrorPageToolbar } from './ui/ErrorPageToolbar.ui'; diff --git a/src/pages/ErrorPage/ui/ErrorPage.spec.tsx b/src/pages/ErrorPage/ui/ErrorPage.spec.tsx new file mode 100644 index 0000000..79a32f8 --- /dev/null +++ b/src/pages/ErrorPage/ui/ErrorPage.spec.tsx @@ -0,0 +1,52 @@ +import { render, screen } from '@testing-library/react'; + +import { ErrorPageToolbar } from 'pages/ErrorPage'; +import type { ErrorPageToolbarProps } from 'pages/ErrorPage/ui/ErrorPageToolbar.ui'; + +import ErrorPage from './ErrorPage.ui'; + +import type { ErrorPageProps } from './ErrorPage.ui'; + +describe('Test ErrorPage', () => { + const setup = (props?: Partial) => render( + , + ); + + test('should render ErrorBoundary', () => { + setup(); + + const pageElem = screen.getByTestId('error-page'); + expect(pageElem).toBeVisible(); + expect(pageElem).toHaveTextContent('Что-то пошло не так'); + }); + + test('should render 404', () => { + setup({ type: '404' }); + + const pageElem = screen.getByTestId('error-page'); + expect(pageElem).toBeVisible(); + expect(pageElem).not.toHaveTextContent('Что-то пошло не так'); + }); +}); + +describe('Test ErrorPageToolbar', () => { + const setup = (props?: Partial) => render( + , + ); + + test('should render ErrorBoundary', () => { + setup(); + + const toolbarElem = screen.getByTestId('error-page-toolbar'); + expect(toolbarElem).toBeVisible(); + expect(toolbarElem).toHaveTextContent('Непредвиденная ошибка'); + }); + + test('should render 404', () => { + setup({ type: '404' }); + + const toolbarElem = screen.getByTestId('error-page-toolbar'); + expect(toolbarElem).toBeVisible(); + expect(toolbarElem).toHaveTextContent('Страницы не существует'); + }); +}); diff --git a/src/pages/ErrorPage/ui/ErrorPage.ui.tsx b/src/pages/ErrorPage/ui/ErrorPage.ui.tsx new file mode 100644 index 0000000..8fc1cdf --- /dev/null +++ b/src/pages/ErrorPage/ui/ErrorPage.ui.tsx @@ -0,0 +1,54 @@ +import { Grid } from '@mui/material'; +import Typography from '@mui/material/Typography'; +import { useTranslation } from 'react-i18next'; + +import _404Image from 'public/assets/images/404.png'; +import OopsImage from 'public/assets/images/oops.png'; + +import type { GridProps } from '@mui/material/Grid/Grid'; +import type { FC } from 'react'; + +export type ErrorPageProps = GridProps & { + type?: '404' | 'ErrorBoundary'; +}; +const ErrorPage: FC = (props) => { + const { + type = 'ErrorBoundary', + ...restProps + } = props; + + const { t } = useTranslation('error-page'); + + if (type === 'ErrorBoundary') { + return ( + + + + {t('title')} + + + + + asd + + + ); + } + + return ( + + + asd + + + ); +}; + +export default ErrorPage; diff --git a/src/pages/ErrorPage/ui/ErrorPageToolbar.ui.tsx b/src/pages/ErrorPage/ui/ErrorPageToolbar.ui.tsx new file mode 100644 index 0000000..17c42c1 --- /dev/null +++ b/src/pages/ErrorPage/ui/ErrorPageToolbar.ui.tsx @@ -0,0 +1,34 @@ +import Toolbar from '@mui/material/Toolbar'; +import Typography from '@mui/material/Typography'; +import { useTranslation } from 'react-i18next'; + +import type { ToolbarProps } from '@mui/material/Toolbar/Toolbar'; +import type { FC } from 'react'; + +export type ErrorPageToolbarProps = ToolbarProps & { + type?: '404' | 'ErrorBoundary'; +}; + +const ErrorPageToolbar: FC = (props) => { + const { + type = 'ErrorBoundary', + ...restProps + } = props; + + const { t } = useTranslation('error-page'); + + const TITLE: Record, string> = { + 404: t('404-toolbar'), + ErrorBoundary: t('toolbar'), + }; + + return ( + + + {TITLE[type]} + + + ); +}; + +export default ErrorPageToolbar; diff --git a/src/pages/PaymentsPage/index.ts b/src/pages/PaymentsPage/index.ts new file mode 100644 index 0000000..ad143f7 --- /dev/null +++ b/src/pages/PaymentsPage/index.ts @@ -0,0 +1,5 @@ +import { lazy } from 'react'; + +const LazyPaymentsPage = lazy(async () => import('./ui/PaymentsPage.ui')); +export { LazyPaymentsPage as PaymentsPage }; +export { default as PaymentsPageToolbar } from './ui/PaymentsPageToolbar.ui'; diff --git a/src/pages/PaymentsPage/ui/PaymentsPage.spec.tsx b/src/pages/PaymentsPage/ui/PaymentsPage.spec.tsx new file mode 100644 index 0000000..4b66c65 --- /dev/null +++ b/src/pages/PaymentsPage/ui/PaymentsPage.spec.tsx @@ -0,0 +1,35 @@ +import { render, screen } from '@testing-library/react'; + +import PaymentsPage from './PaymentsPage.ui'; +import PaymentsPageToolbar from './PaymentsPageToolbar.ui'; + +import type { PaymentsPageProps } from './PaymentsPage.ui'; +import type { PaymentsPageToolbarProps } from './PaymentsPageToolbar.ui'; + +describe('Test PaymentsPage', () => { + const setup = (props?: Partial) => render( + , + ); + + test('should render correctly', () => { + setup(); + + const pageElem = screen.getByTestId('payments-page'); + expect(pageElem).toBeVisible(); + expect(pageElem).toHaveTextContent('Payments Page'); + }); +}); + +describe('Test PaymentsPageToolbar', () => { + const setup = (props?: Partial) => render( + , + ); + + test('should render correctly', () => { + setup(); + + const toolbarElem = screen.getByTestId('payments-page-toolbar'); + expect(toolbarElem).toBeVisible(); + expect(toolbarElem).toHaveTextContent('Payments Page Toolbar'); + }); +}); diff --git a/src/pages/PaymentsPage/ui/PaymentsPage.ui.tsx b/src/pages/PaymentsPage/ui/PaymentsPage.ui.tsx new file mode 100644 index 0000000..4661b2b --- /dev/null +++ b/src/pages/PaymentsPage/ui/PaymentsPage.ui.tsx @@ -0,0 +1,16 @@ +import { useTranslation } from 'react-i18next'; + +import type { DetailedHTMLProps, FC, HTMLAttributes } from 'react'; + +export type PaymentsPageProps = DetailedHTMLProps, HTMLDivElement>; +const PaymentsPage: FC = (props) => { + const { t } = useTranslation('payments-page'); + + return ( +
+ {t('title')} +
+ ); +}; + +export default PaymentsPage; diff --git a/src/pages/PaymentsPage/ui/PaymentsPageToolbar.ui.tsx b/src/pages/PaymentsPage/ui/PaymentsPageToolbar.ui.tsx new file mode 100644 index 0000000..6e93b5f --- /dev/null +++ b/src/pages/PaymentsPage/ui/PaymentsPageToolbar.ui.tsx @@ -0,0 +1,21 @@ +import Toolbar from '@mui/material/Toolbar'; +import Typography from '@mui/material/Typography'; +import { useTranslation } from 'react-i18next'; + +import type { ToolbarProps } from '@mui/material/Toolbar/Toolbar'; +import type { FC } from 'react'; + +export type PaymentsPageToolbarProps = ToolbarProps; +const PaymentsPageToolbar: FC = (props) => { + const { t } = useTranslation('payments-page'); + + return ( + + + {t('toolbar')} + + + ); +}; + +export default PaymentsPageToolbar; diff --git a/src/pages/SchedulePage/index.ts b/src/pages/SchedulePage/index.ts new file mode 100644 index 0000000..70e9136 --- /dev/null +++ b/src/pages/SchedulePage/index.ts @@ -0,0 +1,5 @@ +import { lazy } from 'react'; + +const LazySchedulePage = lazy(async () => import('./ui/SchedulePage.ui')); +export { LazySchedulePage as SchedulePage }; +export { default as SchedulePageToolbar } from './ui/SchedulePageToolbar.ui'; diff --git a/src/pages/SchedulePage/ui/SchedulePage.spec.tsx b/src/pages/SchedulePage/ui/SchedulePage.spec.tsx new file mode 100644 index 0000000..9219e8d --- /dev/null +++ b/src/pages/SchedulePage/ui/SchedulePage.spec.tsx @@ -0,0 +1,34 @@ +import { render, screen, waitFor } from '@testing-library/react'; + +import { SchedulePage, SchedulePageToolbar } from 'pages/SchedulePage'; + +describe('Test SchedulePage', () => { + const setup = () => render( + , + ); + + test('should render correctly', async () => { + setup(); + + await waitFor(() => { + const pageElem = screen.getByTestId('schedule-page'); + expect(pageElem).toBeVisible(); + // eslint-disable-next-line testing-library/no-wait-for-multiple-assertions + expect(pageElem).toHaveTextContent('Schedule Page'); + }); + }); +}); + +describe('Test SchedulePageToolabr', () => { + const setup = () => render( + , + ); + + test('should render correctly', () => { + setup(); + + const toolbarElem = screen.getByTestId('schedule-page-toolbar'); + expect(toolbarElem).toBeVisible(); + expect(toolbarElem).toHaveTextContent('Schedule Page Toolbar'); + }); +}); diff --git a/src/pages/SchedulePage/ui/SchedulePage.ui.tsx b/src/pages/SchedulePage/ui/SchedulePage.ui.tsx new file mode 100644 index 0000000..ebd3dd8 --- /dev/null +++ b/src/pages/SchedulePage/ui/SchedulePage.ui.tsx @@ -0,0 +1,16 @@ +import { useTranslation } from 'react-i18next'; + +import type { DetailedHTMLProps, FC, HTMLAttributes } from 'react'; + +export type SchedulePageProps = DetailedHTMLProps, HTMLDivElement>; +const SchedulePage: FC = (props) => { + const { t } = useTranslation('schedule-page'); + + return ( +
+ {t('title')} +
+ ); +}; + +export default SchedulePage; diff --git a/src/pages/SchedulePage/ui/SchedulePageToolbar.ui.tsx b/src/pages/SchedulePage/ui/SchedulePageToolbar.ui.tsx new file mode 100644 index 0000000..36b7d18 --- /dev/null +++ b/src/pages/SchedulePage/ui/SchedulePageToolbar.ui.tsx @@ -0,0 +1,21 @@ +import Toolbar from '@mui/material/Toolbar'; +import Typography from '@mui/material/Typography'; +import { useTranslation } from 'react-i18next'; + +import type { ToolbarProps } from '@mui/material/Toolbar/Toolbar'; +import type { FC } from 'react'; + +type SchedulePageToolbarProps = ToolbarProps; +const SchedulePageToolbar: FC = (props) => { + const { t } = useTranslation('schedule-page'); + + return ( + + + {t('toolbar')} + + + ); +}; + +export default SchedulePageToolbar; diff --git a/src/shared/constants/date.ts b/src/shared/constants/date.ts new file mode 100644 index 0000000..3c23baa --- /dev/null +++ b/src/shared/constants/date.ts @@ -0,0 +1,32 @@ +export const MONTHS = { + JANUARY: 0, + FEBRUARY: 1, + MARCH: 2, + APRIL: 3, + MAY: 4, + JUNE: 5, + JULY: 6, + AUGUST: 7, + SEPTEMBER: 8, + OCTOBER: 9, + NOVEMBER: 10, + DECEMBER: 11, +}; + +export type MonthsKeys = keyof typeof MONTHS; +export type MonthsValues = typeof MONTHS[MonthsKeys]; + +export const DAYS_IN_WEEK = 7; + +export const WEEK_DAYS = { + SUNDAY: 0, + MONDAY: 1, + TUESDAY: 2, + WEDNESDAY: 3, + THURSDAY: 4, + FRIDAY: 5, + SATURDAY: 6, +}; + +export type WeekDaysKeys = keyof typeof WEEK_DAYS; +export type WeekDaysValues = typeof WEEK_DAYS[WeekDaysKeys]; diff --git a/src/shared/constants/drag.ts b/src/shared/constants/drag.ts new file mode 100644 index 0000000..7676626 --- /dev/null +++ b/src/shared/constants/drag.ts @@ -0,0 +1,3 @@ +export const ItemTypes = { + CELL: 'date-cell', +}; diff --git a/src/shared/constants/index.ts b/src/shared/constants/index.ts new file mode 100644 index 0000000..591e37f --- /dev/null +++ b/src/shared/constants/index.ts @@ -0,0 +1,9 @@ +export { DAYS_IN_WEEK, MONTHS, WEEK_DAYS } from './date'; +export { MONTHS_LABEL, WEEK_DAYS_LABEL, LANGUAGE } from './locale'; +export type { + MonthsKeys, + MonthsValues, + WeekDaysKeys, + WeekDaysValues, +} from './date'; +export { ItemTypes } from './drag'; diff --git a/src/shared/constants/locale.ts b/src/shared/constants/locale.ts new file mode 100644 index 0000000..f4a1ed4 --- /dev/null +++ b/src/shared/constants/locale.ts @@ -0,0 +1,149 @@ +import { MONTHS, WEEK_DAYS } from 'shared/constants/date'; +import type { MonthsValues, WeekDaysValues } from 'shared/constants/date'; + +type Locale = { + ru: T; + en: T; +}; + +export const MONTHS_LABEL: Record = { + [MONTHS.JANUARY]: { + ru: 'Январь', + en: 'January', + }, + [MONTHS.FEBRUARY]: { + ru: 'Февраль', + en: 'February', + }, + [MONTHS.MARCH]: { + ru: 'Март', + en: 'March', + }, + [MONTHS.APRIL]: { + ru: 'Апрель', + en: 'April', + }, + [MONTHS.MAY]: { + ru: 'Май', + en: 'May', + }, + [MONTHS.JUNE]: { + ru: 'Июнь', + en: 'June', + }, + [MONTHS.JULY]: { + ru: 'Июль', + en: 'July', + }, + [MONTHS.AUGUST]: { + ru: 'Август', + en: 'August', + }, + [MONTHS.SEPTEMBER]: { + ru: 'Сентябрь', + en: 'September', + }, + [MONTHS.OCTOBER]: { + ru: 'Октябрь', + en: 'October', + }, + [MONTHS.NOVEMBER]: { + ru: 'Ноябрь', + en: 'November', + }, + [MONTHS.DECEMBER]: { + ru: 'Декабрь', + en: 'December', + }, +}; + +type WeekDaysLabel = { + full: string; + short: string; +}; + +type WeekDaysLabelLocale = Locale; + +export const WEEK_DAYS_LABEL: Record = { + [WEEK_DAYS.SUNDAY]: { + ru: { + full: 'Воскресенье', + short: 'Вс', + }, + en: { + full: 'Sunday', + short: 'Sun', + }, + }, + [WEEK_DAYS.MONDAY]: { + ru: { + full: 'Понедельник', + short: 'Пн', + }, + en: { + full: 'Monday', + short: 'Mon', + }, + }, + [WEEK_DAYS.TUESDAY]: { + ru: { + full: 'Вторник', + short: 'Вт', + }, + en: { + full: 'Tuesday', + short: 'Tue', + }, + }, + [WEEK_DAYS.WEDNESDAY]: { + ru: { + full: 'Среда', + short: 'Ср', + }, + en: { + full: 'Wednesday', + short: 'Wed', + }, + }, + [WEEK_DAYS.THURSDAY]: { + ru: { + full: 'Четверг', + short: 'Чт', + }, + en: { + full: 'Thursday', + short: 'Thu', + }, + }, + [WEEK_DAYS.FRIDAY]: { + ru: { + full: 'Пятница', + short: 'Пт', + }, + en: { + full: 'Friday', + short: 'Fri', + }, + }, + [WEEK_DAYS.SATURDAY]: { + ru: { + full: 'Суббота', + short: 'Сб', + }, + en: { + full: 'Saturday', + short: 'Sat', + }, + }, +}; + +export const LANGUAGE = { + ru: { + name: 'Русский', + emoji: '🇷🇺', + }, + en: { + name: 'English', + emoji: '🇬🇧', + }, +}; diff --git a/src/shared/hoc/withProvider/index.ts b/src/shared/hoc/withProvider/index.ts new file mode 100644 index 0000000..ee102a5 --- /dev/null +++ b/src/shared/hoc/withProvider/index.ts @@ -0,0 +1 @@ +export { default as withProvider } from './ui/withProvider.ui'; diff --git a/src/shared/hoc/withProvider/ui/withProvider.spec.tsx b/src/shared/hoc/withProvider/ui/withProvider.spec.tsx new file mode 100644 index 0000000..3bff4e5 --- /dev/null +++ b/src/shared/hoc/withProvider/ui/withProvider.spec.tsx @@ -0,0 +1,105 @@ +import { fireEvent, render, screen } from '@testing-library/react'; +import PropTypes from 'prop-types'; +import React, { useContext, useMemo, useState } from 'react'; + +import withProvider from './withProvider.ui'; + +import type { PropsWithChildren } from 'react'; + +describe('Test withProvider', () => { + const renderCounter = () => { + type TestContextValue = { + testState: number; + setTestState: React.Dispatch>; + }; + const TestContext = React.createContext({} as TestContextValue); + + const TestProvider = (props: PropsWithChildren) => { + const { children } = props; + + const [testState, setTestState] = useState(100); + + const contextValue = useMemo(() => ({ + testState, + setTestState, + }), [testState]); + + return ( + + {children} + + ); + }; + + TestProvider.propTypes = { + children: PropTypes.node.isRequired, + }; + + const Counter = () => { + const { + testState, + setTestState, + } = useContext(TestContext); + + return ( + <> + + + + {testState} + + + + + + ); + }; + + const CounterWithTestProvider = withProvider(TestProvider)(Counter); + + render(); + }; + + test('initial state', () => { + renderCounter(); + + const counterElem = screen.getByTestId('counter'); + expect(counterElem).toHaveTextContent('100'); + }); + + test('change state - increment', () => { + renderCounter(); + + const plusBtn = screen.getByTestId('plus-btn'); + fireEvent.click(plusBtn); + + const counterElem = screen.getByTestId('counter'); + expect(counterElem).toHaveTextContent('101'); + }); + + test('change state - decrement', () => { + renderCounter(); + + const minusBtn = screen.getByTestId('minus-btn'); + fireEvent.click(minusBtn); + + const counterElem = screen.getByTestId('counter'); + expect(counterElem).toHaveTextContent('99'); + }); +}); diff --git a/src/shared/hoc/withProvider/ui/withProvider.ui.tsx b/src/shared/hoc/withProvider/ui/withProvider.ui.tsx new file mode 100644 index 0000000..c7c14de --- /dev/null +++ b/src/shared/hoc/withProvider/ui/withProvider.ui.tsx @@ -0,0 +1,10 @@ +import type { FC, PropsWithChildren } from 'react'; + +const withProvider = (Provider: FC) => (Component: FC) => (...params: T[]) => ( + + {/* @ts-ignore */} + + +); + +export default withProvider; diff --git a/src/shared/hooks/index.ts b/src/shared/hooks/index.ts new file mode 100644 index 0000000..c114938 --- /dev/null +++ b/src/shared/hooks/index.ts @@ -0,0 +1 @@ +export { default as useCombinedRefs } from './useCombineRef'; diff --git a/src/shared/hooks/useCombineRef.tsx b/src/shared/hooks/useCombineRef.tsx new file mode 100644 index 0000000..13e0f3e --- /dev/null +++ b/src/shared/hooks/useCombineRef.tsx @@ -0,0 +1,55 @@ +/** + * A combined ref implementation using the callback ref cleanups feature. + * Note that this won't work yet as callback ref cleanups feature isn't released yet and thought to be released in React 19 + */ + +import { useCallback } from 'react'; + +import type { ForwardedRef } from 'react'; + +type OptionalRef = ForwardedRef | undefined; + +type Cleanup = (() => void) | undefined; + +const setRef = (ref: OptionalRef, value: T): Cleanup => { + if (typeof ref === 'function') { + // eslint-disable-next-line @typescript-eslint/no-confusing-void-expression + const cleanup = ref(value); + + if (typeof cleanup === 'function') { + return cleanup; + } + + // eslint-disable-next-line @stylistic/max-statements-per-line + return () => { ref(null); }; + } + + if (ref) { + // eslint-disable-next-line no-param-reassign + ref.current = value; + + // eslint-disable-next-line no-param-reassign,no-return-assign + return () => ref.current = null; + } + + // eslint-disable-next-line no-undefined + return undefined; +}; + +const useCombinedRefs = (...refs: OptionalRef[]) => useCallback((value: T | null) => { + const cleanups: Cleanup[] = []; + + for (const ref of refs) { + const cleanup = setRef(ref, value); + cleanups.push(cleanup); + } + + return () => { + for (const cleanup of cleanups) { + cleanup?.(); + } + }; + // eslint-disable-next-line react-hooks/exhaustive-deps +}, refs); + +export default useCombinedRefs; diff --git a/src/shared/styles/fonts/Comforta.css b/src/shared/styles/fonts/Comforta.css new file mode 100644 index 0000000..ab66e71 --- /dev/null +++ b/src/shared/styles/fonts/Comforta.css @@ -0,0 +1,78 @@ +/* Comfortaa 300 Latin and Cyrillic, Normal */ +@font-face { + font-family: "Comfortaa"; + font-weight: 300; + font-style: normal; + src: url("public/assets/fonts/Comfortaa/comfortaa-latin-300-normal.woff2") format("woff2") +} +@font-face { + font-family: "Comfortaa"; + font-weight: 300; + font-style: normal; + unicode-range: U+0410-044F; + src: url("public/assets/fonts/Comfortaa/comfortaa-cyrillic-300-normal.woff2") format("woff2") +} + + +/* Comfortaa 400 Latin and Cyrillic, Normal */ +@font-face { + font-family: "Comfortaa"; + font-weight: 400; + font-style: normal; + src: url("public/assets/fonts/Comfortaa/comfortaa-latin-400-normal.woff2") format("woff2") +} +@font-face { + font-family: "Comfortaa"; + font-weight: 400; + font-style: normal; + unicode-range: U+0410-044F; + src: url("public/assets/fonts/Comfortaa/comfortaa-cyrillic-400-normal.woff2") format("woff2") +} + + +/* Comfortaa 500 Latin and Cyrillic, Normal */ +@font-face { + font-family: "Comfortaa"; + font-weight: 500; + font-style: normal; + src: url("public/assets/fonts/Comfortaa/comfortaa-latin-500-normal.woff2") format("woff2") +} +@font-face { + font-family: "Comfortaa"; + font-weight: 500; + font-style: normal; + unicode-range: U+0410-044F; + src: url("public/assets/fonts/Comfortaa/comfortaa-cyrillic-500-normal.woff2") format("woff2") +} + + +/* Comfortaa 600 Latin and Cyrillic, Normal */ +@font-face { + font-family: "Comfortaa"; + font-weight: 600; + font-style: normal; + src: url("public/assets/fonts/Comfortaa/comfortaa-latin-600-normal.woff2") format("woff2") +} +@font-face { + font-family: "Comfortaa"; + font-weight: 600; + font-style: normal; + unicode-range: U+0410-044F; + src: url("public/assets/fonts/Comfortaa/comfortaa-cyrillic-600-normal.woff2") format("woff2") +} + + +/* Comfortaa 700 Latin and Cyrillic, Normal */ +@font-face { + font-family: "Comfortaa"; + font-weight: 700; + font-style: normal; + src: url("public/assets/fonts/Comfortaa/comfortaa-latin-700-normal.woff2") format("woff2") +} +@font-face { + font-family: "Comfortaa"; + font-weight: 700; + font-style: normal; + unicode-range: U+0410-044F; + src: url("public/assets/fonts/Comfortaa/comfortaa-cyrillic-700-normal.woff2") format("woff2") +} diff --git a/src/shared/styles/fonts/Roboto.css b/src/shared/styles/fonts/Roboto.css new file mode 100644 index 0000000..ecdf9c9 --- /dev/null +++ b/src/shared/styles/fonts/Roboto.css @@ -0,0 +1,173 @@ +/* Roboto 100 Latin and Cyrillic, Normal & Italic styles */ +@font-face { + font-family: "Roboto"; + font-weight: 100; + font-style: normal; + src: url("public/assets/fonts/Roboto/roboto-latin-100-normal.woff2") format("woff2") +} +@font-face { + font-family: "Roboto"; + font-weight: 100; + font-style: italic; + src: url("public/assets/fonts/Roboto/roboto-latin-100-italic.woff2") format("woff2"); +} +@font-face { + font-family: "Roboto"; + font-weight: 100; + font-style: normal; + unicode-range: U+0410-044F; + src: url("public/assets/fonts/Roboto/roboto-cyrillic-100-normal.woff2") format("woff2") +} +@font-face { + font-family: "Roboto"; + font-weight: 100; + font-style: italic; + unicode-range: U+0410-044F; + src: url("public/assets/fonts/Roboto/roboto-cyrillic-100-italic.woff2") format("woff2") +} + + +/* Roboto 300 Latin and Cyrillic, Normal & Italic styles */ +@font-face { + font-family: "Roboto"; + font-weight: 300; + font-style: normal; + src: url("public/assets/fonts/Roboto/roboto-latin-300-normal.woff2") format("woff2") +} +@font-face { + font-family: "Roboto"; + font-weight: 300; + font-style: italic; + src: url("public/assets/fonts/Roboto/roboto-latin-300-italic.woff2") format("woff2"); +} +@font-face { + font-family: "Roboto"; + font-weight: 300; + font-style: normal; + unicode-range: U+0410-044F; + src: url("public/assets/fonts/Roboto/roboto-cyrillic-300-normal.woff2") format("woff2") +} +@font-face { + font-family: "Roboto"; + font-weight: 300; + font-style: italic; + unicode-range: U+0410-044F; + src: url("public/assets/fonts/Roboto/roboto-cyrillic-300-italic.woff2") format("woff2") +} + + +/* Roboto 400 Latin and Cyrillic, Normal & Italic styles */ +@font-face { + font-family: "Roboto"; + font-weight: 400; + font-style: normal; + src: url("public/assets/fonts/Roboto/roboto-latin-400-normal.woff2") format("woff2") +} +@font-face { + font-family: "Roboto"; + font-weight: 400; + font-style: italic; + src: url("public/assets/fonts/Roboto/roboto-latin-400-italic.woff2") format("woff2"); +} +@font-face { + font-family: "Roboto"; + font-weight: 400; + font-style: normal; + unicode-range: U+0410-044F; + src: url("public/assets/fonts/Roboto/roboto-cyrillic-400-normal.woff2") format("woff2") +} +@font-face { + font-family: "Roboto"; + font-weight: 400; + font-style: italic; + unicode-range: U+0410-044F; + src: url("public/assets/fonts/Roboto/roboto-cyrillic-400-italic.woff2") format("woff2") +} + + +/* Roboto 500 Latin and Cyrillic, Normal & Italic styles */ +@font-face { + font-family: "Roboto"; + font-weight: 500; + font-style: normal; + src: url("public/assets/fonts/Roboto/roboto-latin-500-normal.woff2") format("woff2") +} +@font-face { + font-family: "Roboto"; + font-weight: 500; + font-style: italic; + src: url("public/assets/fonts/Roboto/roboto-latin-500-italic.woff2") format("woff2"); +} +@font-face { + font-family: "Roboto"; + font-weight: 500; + font-style: normal; + unicode-range: U+0410-044F; + src: url("public/assets/fonts/Roboto/roboto-cyrillic-500-normal.woff2") format("woff2") +} +@font-face { + font-family: "Roboto"; + font-weight: 500; + font-style: italic; + unicode-range: U+0410-044F; + src: url("public/assets/fonts/Roboto/roboto-cyrillic-500-italic.woff2") format("woff2") +} + + +/* Roboto 700 Latin and Cyrillic, Normal & Italic styles */ +@font-face { + font-family: "Roboto"; + font-weight: 700; + font-style: normal; + src: url("public/assets/fonts/Roboto/roboto-latin-700-normal.woff2") format("woff2") +} +@font-face { + font-family: "Roboto"; + font-weight: 700; + font-style: italic; + src: url("public/assets/fonts/Roboto/roboto-latin-700-italic.woff2") format("woff2"); +} +@font-face { + font-family: "Roboto"; + font-weight: 700; + font-style: normal; + unicode-range: U+0410-044F; + src: url("public/assets/fonts/Roboto/roboto-cyrillic-700-normal.woff2") format("woff2") +} +@font-face { + font-family: "Roboto"; + font-weight: 700; + font-style: italic; + unicode-range: U+0410-044F; + src: url("public/assets/fonts/Roboto/roboto-cyrillic-700-italic.woff2") format("woff2") +} + + +/* Roboto 900 Latin and Cyrillic, Normal & Italic styles */ +@font-face { + font-family: "Roboto"; + font-weight: 900; + font-style: normal; + src: url("public/assets/fonts/Roboto/roboto-latin-900-normal.woff2") format("woff2") +} +@font-face { + font-family: "Roboto"; + font-weight: 900; + font-style: italic; + src: url("public/assets/fonts/Roboto/roboto-latin-900-italic.woff2") format("woff2"); +} +@font-face { + font-family: "Roboto"; + font-weight: 900; + font-style: normal; + unicode-range: U+0410-044F; + src: url("public/assets/fonts/Roboto/roboto-cyrillic-900-normal.woff2") format("woff2") +} +@font-face { + font-family: "Roboto"; + font-weight: 900; + font-style: italic; + unicode-range: U+0410-044F; + src: url("public/assets/fonts/Roboto/roboto-cyrillic-900-italic.woff2") format("woff2") +} + diff --git a/src/shared/styles/fonts/fonts.css b/src/shared/styles/fonts/fonts.css new file mode 100644 index 0000000..c510c2d --- /dev/null +++ b/src/shared/styles/fonts/fonts.css @@ -0,0 +1,2 @@ +@import "./Roboto.css"; +@import "./Comforta.css"; diff --git a/src/shared/types/date/index.ts b/src/shared/types/date/index.ts new file mode 100644 index 0000000..ee257d2 --- /dev/null +++ b/src/shared/types/date/index.ts @@ -0,0 +1,5 @@ +export type YYYY = `${number}${number}${number}${number}`; +export type MM = `${number}${number}`; +export type DD = `${number}${number}`; + +export type DataDateString = `${DD}/${MM}/${YYYY}`; diff --git a/src/shared/ui/WorkboxUpdateNotification/index.ts b/src/shared/ui/WorkboxUpdateNotification/index.ts new file mode 100644 index 0000000..a4a8a4b --- /dev/null +++ b/src/shared/ui/WorkboxUpdateNotification/index.ts @@ -0,0 +1 @@ +export { default as WorkboxUpdateNotification } from './ui/WorkboxUpdateNotification.ui'; diff --git a/src/shared/ui/WorkboxUpdateNotification/ui/WorkboxUpdateNotification.ui.tsx b/src/shared/ui/WorkboxUpdateNotification/ui/WorkboxUpdateNotification.ui.tsx new file mode 100644 index 0000000..883302e --- /dev/null +++ b/src/shared/ui/WorkboxUpdateNotification/ui/WorkboxUpdateNotification.ui.tsx @@ -0,0 +1,47 @@ +import { Button } from '@mui/material'; +import Typography from '@mui/material/Typography'; +import { useSnackbar } from 'notistack'; + +import type { FC, ReactNode } from 'react'; + +const defaultMessage = ( + <> + + Update site, needs to reload page + + + + +); + +type WorkboxUpdateNotificationProps = { + children?: ReactNode; +}; +const WorkboxUpdateNotification: FC = (props) => { + const { children = defaultMessage } = props; + const { enqueueSnackbar } = useSnackbar(); + + const Message = ( + // eslint-disable-next-line react/jsx-no-useless-fragment + <> + {children} + + ); + + const handler = (event: MessageEvent) => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + if (event.data?.type !== 'update-installed-service-worker') { + return; + } + + enqueueSnackbar(Message); + }; + + window.addEventListener('message', handler); + + return null; +}; + +export default WorkboxUpdateNotification; diff --git a/src/shared/utils/date/date.spec.ts b/src/shared/utils/date/date.spec.ts new file mode 100644 index 0000000..39f0878 --- /dev/null +++ b/src/shared/utils/date/date.spec.ts @@ -0,0 +1,190 @@ +import { + daysCountBetween, + firstDayOfMonthDate, + getDataDateString, + lastDayOfMonthDate, +} from './date'; + +describe('Check firstDayOfMonthDate func', () => { + test('Check middle of month', () => { + const date = new Date(2022, 7, 15); + const result = new Date(2022, 7, 1); + expect(firstDayOfMonthDate(date)).toEqual(result); + }); + + test('Check end of year', () => { + const date = new Date(2024, 11, 31); + const result = new Date(2024, 11, 1); + expect(firstDayOfMonthDate(date)).toEqual(result); + }); + + test('Check start of year', () => { + const date = new Date(2024, 0, 0); + const result = new Date(2023, 11, 1); + expect(firstDayOfMonthDate(date)).toEqual(result); + }); + + test('Check with 0 date', () => { + const date = new Date(2023, 12, 0); + const result = new Date(2023, 11, 1); + expect(firstDayOfMonthDate(date)).toEqual(result); + }); + + test('Check with extra month', () => { + const date = new Date(2023, 12, 1); + const result = new Date(2024, 0, 1); + expect(firstDayOfMonthDate(date)).toEqual(result); + }); + + test('Check with extra date', () => { + const date = new Date(2023, 11, 33); + const result = new Date(2024, 0, 1); + expect(firstDayOfMonthDate(date)).toEqual(result); + }); + + test('Check with extra date and month', () => { + const date = new Date(2023, 12, 33); + const result = new Date(2024, 1, 1); + expect(firstDayOfMonthDate(date)).toEqual(result); + }); +}); + +describe('Check lastDayOfMonthDate func', () => { + test('Check middle of month', () => { + const date = new Date(2022, 7, 15); + const result = new Date(2022, 7, 31); + expect(lastDayOfMonthDate(date)).toEqual(result); + }); + + test('Check end of year', () => { + const date = new Date(2024, 11, 31); + const result = new Date(2024, 11, 31); + expect(lastDayOfMonthDate(date)).toEqual(result); + }); + + test('Check start of year', () => { + const date = new Date(2024, 0, 0); + const result = new Date(2023, 11, 31); + expect(lastDayOfMonthDate(date)).toEqual(result); + }); + + test('Check with 0 date', () => { + const date = new Date(2023, 12, 0); + const result = new Date(2023, 11, 31); + expect(lastDayOfMonthDate(date)).toEqual(result); + }); + + test('Check with extra month', () => { + const date = new Date(2023, 12, 1); + const result = new Date(2024, 0, 31); + expect(lastDayOfMonthDate(date)).toEqual(result); + }); + + test('Check with extra date', () => { + const date = new Date(2023, 11, 33); + const result = new Date(2024, 0, 31); + expect(lastDayOfMonthDate(date)).toEqual(result); + }); + + test('Check with extra date and month', () => { + const date = new Date(2023, 12, 33); + const result = new Date(2024, 1, 29); + expect(lastDayOfMonthDate(date)).toEqual(result); + }); +}); + +describe('Check getDataDateString func', () => { + test('Check middle of month', () => { + const date = new Date(2022, 7, 15); + const result = '08/15/2022'; + expect(getDataDateString(date)).toEqual(result); + }); + + test('Check end of year', () => { + const date = new Date(2024, 11, 31); + const result = '12/31/2024'; + expect(getDataDateString(date)).toEqual(result); + }); + + test('Check start of year', () => { + const date = new Date(2024, 0, 0); + const result = '12/31/2023'; + + expect(getDataDateString(date)).toEqual(result); + }); + + test('Check with 0 date', () => { + const date = new Date(2023, 12, 0); + const result = '12/31/2023'; + expect(getDataDateString(date)).toEqual(result); + }); + + test('Check with extra month', () => { + const date = new Date(2023, 12, 1); + const result = '01/01/2024'; + expect(getDataDateString(date)).toEqual(result); + }); + + test('Check with extra date', () => { + const date = new Date(2023, 11, 33); + const result = '01/02/2024'; + expect(getDataDateString(date)).toEqual(result); + }); + + test('Check with extra date and month', () => { + const date = new Date(2023, 12, 33); + const result = '02/02/2024'; + expect(getDataDateString(date)).toEqual(result); + }); +}); + +describe('Check daysCountBetween func', () => { + test('Check middle of month', () => { + const date1 = new Date(2022, 7, 15); + const date2 = new Date(2022, 7, 21); + const result = 6; + expect(daysCountBetween(date1, date2)).toEqual(result); + }); + + test('Check end of year', () => { + const date1 = new Date(2024, 11, 31); + const date2 = new Date(2024, 10, 30); + const result = 31; + expect(daysCountBetween(date1, date2)).toEqual(result); + }); + + test('Check start of year', () => { + const date1 = new Date(2024, 0, 0); + const date2 = new Date(2023, 11, 31); + const result = 0; + expect(daysCountBetween(date1, date2)).toEqual(result); + }); + + test('Check with 0 date', () => { + const date1 = new Date(2023, 12, 0); + const date2 = new Date(2023, 12, 21); + const result = 21; + expect(daysCountBetween(date1, date2)).toEqual(result); + }); + + test('Check with extra month', () => { + const date1 = new Date(2023, 12, 1); + const date2 = new Date(2022, 7, 21); + const result = 498; + expect(daysCountBetween(date1, date2)).toEqual(result); + }); + + test('Check with extra date', () => { + const date1 = new Date(2023, 11, 33); + const date2 = new Date(2022, 7, 21); + const result = 499; + expect(daysCountBetween(date1, date2)).toEqual(result); + }); + + test('Check with extra date and month', () => { + const date1 = new Date(2023, 12, 33); + const date2 = new Date(2022, 7, 21); + const result = 530; + expect(daysCountBetween(date1, date2)).toEqual(result); + }); +}); diff --git a/src/shared/utils/date/date.ts b/src/shared/utils/date/date.ts new file mode 100644 index 0000000..1d9c979 --- /dev/null +++ b/src/shared/utils/date/date.ts @@ -0,0 +1,33 @@ +import type { DataDateString } from 'shared/types/date'; + +export const firstDayOfMonthDate = (date: Date) => { + const monthIndex = date.getMonth(); + const year = date.getFullYear(); + + return new Date(year, monthIndex, 1); +}; + +export const lastDayOfMonthDate = (date: Date) => { + const monthIndex = date.getMonth(); + const year = date.getFullYear(); + + return new Date(year, monthIndex + 1, 0); +}; + +export const getDataDateString = (date: Date): DataDateString => { + const locale: Intl.LocalesArgument = 'en-En'; + const options: Intl.DateTimeFormatOptions = { + year: 'numeric', + month: '2-digit', + day: '2-digit', + }; + + return new Date(date).toLocaleDateString(locale, options) as DataDateString; +}; + +export const daysCountBetween = (date1: Date, date2: Date) => { + const ONE_DAY = 1000 * 60 * 60 * 24; + const differenceMs = Math.abs(date1.getTime() - date2.getTime()); + + return Math.round(differenceMs / ONE_DAY); +}; diff --git a/src/shared/utils/date/index.ts b/src/shared/utils/date/index.ts new file mode 100644 index 0000000..498ba93 --- /dev/null +++ b/src/shared/utils/date/index.ts @@ -0,0 +1,6 @@ +export { + lastDayOfMonthDate, + firstDayOfMonthDate, + getDataDateString, + daysCountBetween, +} from './date'; diff --git a/src/shared/utils/type/index.ts b/src/shared/utils/type/index.ts new file mode 100644 index 0000000..a11b59d --- /dev/null +++ b/src/shared/utils/type/index.ts @@ -0,0 +1,5 @@ +// @ts-expect-error +// eslint-disable-next-line @typescript-eslint/no-unused-vars +export const exhaustiveCheck = (param: never): never => { + throw new Error('should not reach here'); +}; diff --git a/src/src-sw.js b/src/src-sw.js new file mode 100644 index 0000000..62bf60d --- /dev/null +++ b/src/src-sw.js @@ -0,0 +1,31 @@ +import { clientsClaim } from 'workbox-core'; +import { precacheAndRoute } from 'workbox-precaching'; +import { + googleFontsCache, + imageCache, + pageCache, + staticResourceCache, +} from 'workbox-recipes'; + +clientsClaim(); +/** + * We are not wrapping it in a 'message' event as per the new update. + * @see https://developers.google.com/web/tools/workbox/modules/workbox-core + */ +self.skipWaiting(); + +/** + * Precache all of the assets generated by your build process. + * Their URLs are injected into the manifest variable below. + * This variable must be present somewhere in your service worker file, + * even if you decide not to use precaching. See https://cra.link/PWA + */ +precacheAndRoute(self.__WB_MANIFEST); + +pageCache(); + +googleFontsCache(); + +staticResourceCache(); + +imageCache(); diff --git a/src/sw-reg.js b/src/sw-reg.js new file mode 100644 index 0000000..3e11487 --- /dev/null +++ b/src/sw-reg.js @@ -0,0 +1,32 @@ +import { Workbox } from 'workbox-window'; + +const UPDATE_TIMEOUT__IN_MS = 1000 * 10; +const SERVICE_WORKER_FILENAME = 'sw.js'; + +export const registerServiceWorker = () => { + // Check if the serviceWorker Object exists in the navigator object ( means if browser supports SW ) + if (process.env.NODE_ENV !== 'production' || !('serviceWorker' in navigator)) { + return; + } + + const wb = new Workbox(SERVICE_WORKER_FILENAME); + wb.register({ immediate: true }); + setInterval(() => { + wb.update(); + }, UPDATE_TIMEOUT__IN_MS); + + const handler = (event) => { + /** + * We have the condition - event.isUpdate because we don't want to show + * this message on the very first service worker installation, + * only on the updated + */ + if (event.isUpdate) { + window.postMessage({ + type: 'update-installed-service-worker', + }); + } + }; + + wb.addEventListener('installed', handler); +}; diff --git a/src/widgets/AsideMenuLayout/index.ts b/src/widgets/AsideMenuLayout/index.ts new file mode 100644 index 0000000..7ca3bc4 --- /dev/null +++ b/src/widgets/AsideMenuLayout/index.ts @@ -0,0 +1 @@ +export { default as AsideMenuLayout } from './ui/AsideMenuLayout.ui'; diff --git a/src/widgets/AsideMenuLayout/ui/AsideMenuLayout.spec.tsx b/src/widgets/AsideMenuLayout/ui/AsideMenuLayout.spec.tsx new file mode 100644 index 0000000..59868c9 --- /dev/null +++ b/src/widgets/AsideMenuLayout/ui/AsideMenuLayout.spec.tsx @@ -0,0 +1,116 @@ +import { renderWithProvider } from '__spec__/custon-renders'; + +import PieChartIcon from '@mui/icons-material/PieChart'; +import { fireEvent, screen, waitFor } from '@testing-library/react'; + +import AsideMenuLayout from './AsideMenuLayout.ui'; + +const toggleSwitcher = (testId = 'drawer-switcher') => { + const switcherElem = screen.getByTestId(testId); + fireEvent.click(switcherElem); +}; + +describe('Test AsideMenuLayout', () => { + const setup = () => { + const Content = () => ( +
+ Test Content +
+ ); + + const Toolbar = () => ( +
+ Test Toolbar +
+ ); + + const pages = [ + { + icon: , + title: 'Test Route', + path: '/test-route', + }, + { + icon: , + title: 'Another Test Route', + path: '/another-test-route', + }, + ]; + + return renderWithProvider( + } + data-testid="aside-menu-layout" + pages={pages} + Toolbar={} + />, + ); + }; + + test('should render correctly', () => { + setup(); + + const layoutElem = screen.getByTestId('aside-menu-layout'); + expect(layoutElem).toBeVisible(); + }); + + test('should render toolbar', async () => { + setup(); + + await waitFor(() => { + const toolbarElem = screen.getByText('Test Toolbar'); + expect(toolbarElem).toBeVisible(); + }); + }); + + test('should render content', async () => { + setup(); + + await waitFor(() => { + const toolbarElem = screen.getByText('Test Content'); + expect(toolbarElem).toBeVisible(); + }); + }); + + test('should render navigation routes', () => { + setup(); + + const linkElem = screen.getByText('Test Route'); + expect(linkElem).toBeVisible(); + + const anotherLinkElem = screen.getByText('Another Test Route'); + expect(anotherLinkElem).toBeVisible(); + }); + + describe('Test switch open/close drawer', () => { + test('should have correct close icon', () => { + setup(); + + const closeIconElem = screen.getByTestId('ChevronLeftIcon'); + expect(closeIconElem).toBeVisible(); + }); + + test('should have correct open icon', () => { + setup(); + toggleSwitcher(); + + const openIconElem = screen.getByTestId('MenuIcon'); + expect(openIconElem).toBeVisible(); + }); + + test('should show link text', () => { + setup(); + + const linkTextElem = screen.getByText('Test Route'); + expect(linkTextElem).toBeVisible(); + }); + + test('should hide link text', () => { + setup(); + toggleSwitcher(); + + const linkTextElem = screen.queryByText('Test Route'); + expect(linkTextElem).not.toBeVisible(); + }); + }); +}); diff --git a/src/widgets/AsideMenuLayout/ui/AsideMenuLayout.ui.tsx b/src/widgets/AsideMenuLayout/ui/AsideMenuLayout.ui.tsx new file mode 100644 index 0000000..92674d7 --- /dev/null +++ b/src/widgets/AsideMenuLayout/ui/AsideMenuLayout.ui.tsx @@ -0,0 +1,143 @@ +import { useMediaQuery } from '@mui/material'; +import Box from '@mui/material/Box'; +import List from '@mui/material/List'; +import { useTheme } from '@mui/material/styles'; +import Tooltip from '@mui/material/Tooltip'; +import { animated, useTransition } from '@react-spring/web'; +import { useContext } from 'react'; +import { useLocation } from 'react-router-dom'; + +import { LangSwitcher } from 'features/LangSwitcher'; + +import { DesktopAppBar, MobileAppBar } from './components/AppBar'; +import { AsideMenuContext, AsideMenuProvider } from './components/AsideMenuProvider'; +import { DesktopDrawer } from './components/DesktopDrawer'; +import { MenuItem } from './components/MenuItem'; +import { MobileDrawer } from './components/MobileDrawer'; + +import type { MenuItemProps } from './components/MenuItem/ui/MenuItem.ui'; +import type { BoxProps } from '@mui/material/Box/Box'; +// eslint-disable-next-line import/max-dependencies +import type { FC, ReactNode } from 'react'; + +export const DESKTOP_DRAWER_WIDTH = 250; +export const MOBILE_DRAWER_WIDTH = 250; + +export type AsideMenuLayoutProps = BoxProps & { + pages: MenuItemProps['page'][]; + Content: ReactNode; + Toolbar?: ReactNode; +}; +const AsideMenuLayout: FC = (props) => { + const { + pages, + Content, + Toolbar, + ...restProps + } = props; + const { desktopDrawerOpen, setMobileDrawerOpen } = useContext(AsideMenuContext); + const theme = useTheme(); + const isMobileView = useMediaQuery(theme.breakpoints.down('sm')); + + const location = useLocation(); + const transitions = useTransition(location, { + from: { opacity: 0 }, + enter: { opacity: 1 }, + leave: { opacity: 0 }, + unique: true, + reset: true, + }); + + const AnimatedContent = ( + <> + {transitions((styles) => ( + + {Content} + + ))} + + ); + + const AnimatedToolBar = ( + <> + {transitions((styles) => ( + + {Toolbar} + + ))} + + ); + + if (isMobileView) { + return ( + + { + Boolean(Toolbar) && ( + + + + {pages.map((page) => ( + { setMobileDrawerOpen(false); }} + /> + ))} + + + + {AnimatedToolBar} + + + + ) + } + + + {AnimatedContent} + + + ); + } + + return ( + + + + {pages.map((page) => ( + desktopDrawerOpen + ? ( + + ) + : ( + + + + )))} + + + + + { Boolean(Toolbar) && ( + + {AnimatedToolBar} + + + + )} + + + {AnimatedContent} + + + + ); +}; + +const withProvider = (Component: FC) => (props: AsideMenuLayoutProps) => ( + + + +); + +export default withProvider(AsideMenuLayout); diff --git a/src/widgets/AsideMenuLayout/ui/components/AppBar/index.tsx b/src/widgets/AsideMenuLayout/ui/components/AppBar/index.tsx new file mode 100644 index 0000000..318a896 --- /dev/null +++ b/src/widgets/AsideMenuLayout/ui/components/AppBar/index.tsx @@ -0,0 +1,21 @@ +import MuiAppBar from '@mui/material/AppBar'; +import { styled } from '@mui/material/styles'; + +export const DesktopAppBar = styled(MuiAppBar)( + ({ theme }) => ({ + transition: theme.transitions.create(['width', 'margin'], { + easing: theme.transitions.easing.sharp, + duration: theme.transitions.duration.leavingScreen, + }), + display: 'flex', + flexDirection: 'row', + alignItems: 'center', + }), +); + +export const MobileAppBar = styled(MuiAppBar)(() => ({ + display: 'flex', + flexDirection: 'row', + alignItems: 'center', + padding: '0 24px', +})); diff --git a/src/widgets/AsideMenuLayout/ui/components/AsideMenuProvider/index.ts b/src/widgets/AsideMenuLayout/ui/components/AsideMenuProvider/index.ts new file mode 100644 index 0000000..0cfea09 --- /dev/null +++ b/src/widgets/AsideMenuLayout/ui/components/AsideMenuProvider/index.ts @@ -0,0 +1,2 @@ +export { default as AsideMenuProvider } from './ui/AsideMenuProvider.ui'; +export { AsideMenuContext } from './model/context'; diff --git a/src/widgets/AsideMenuLayout/ui/components/AsideMenuProvider/model/context.ts b/src/widgets/AsideMenuLayout/ui/components/AsideMenuProvider/model/context.ts new file mode 100644 index 0000000..3856b8d --- /dev/null +++ b/src/widgets/AsideMenuLayout/ui/components/AsideMenuProvider/model/context.ts @@ -0,0 +1,10 @@ +import { createContext } from 'react'; + +export type AsideMenuContextType = { + desktopDrawerOpen: boolean; + setDesktopDrawerOpen: (isOpen: boolean) => void; + mobileDrawerOpen: boolean; + setMobileDrawerOpen: (isOpen: boolean) => void; +}; + +export const AsideMenuContext = createContext({} as AsideMenuContextType); diff --git a/src/widgets/AsideMenuLayout/ui/components/AsideMenuProvider/ui/AsideMenuProvider.ui.tsx b/src/widgets/AsideMenuLayout/ui/components/AsideMenuProvider/ui/AsideMenuProvider.ui.tsx new file mode 100644 index 0000000..01e59ae --- /dev/null +++ b/src/widgets/AsideMenuLayout/ui/components/AsideMenuProvider/ui/AsideMenuProvider.ui.tsx @@ -0,0 +1,31 @@ +import { useMemo, useState } from 'react'; + +import { AsideMenuContext, type AsideMenuContextType } from '../model/context'; + +import type { FC, ReactNode } from 'react'; + +type AsideMenuProviderProps = { + children: ReactNode; +}; +const AsideMenuProvider: FC = (props) => { + const { children } = props; + + // todo desktop from default value localstorage + const [desktopDrawerOpen, setDesktopDrawerOpen] = useState(true); + const [mobileDrawerOpen, setMobileDrawerOpen] = useState(false); + + const value = useMemo(() => ({ + desktopDrawerOpen, + setDesktopDrawerOpen, + mobileDrawerOpen, + setMobileDrawerOpen, + }), [desktopDrawerOpen, mobileDrawerOpen]); + + return ( + + {children} + + ); +}; + +export default AsideMenuProvider; diff --git a/src/widgets/AsideMenuLayout/ui/components/DesktopDrawer/index.ts b/src/widgets/AsideMenuLayout/ui/components/DesktopDrawer/index.ts new file mode 100644 index 0000000..37f7bda --- /dev/null +++ b/src/widgets/AsideMenuLayout/ui/components/DesktopDrawer/index.ts @@ -0,0 +1,2 @@ +export type { DesktopDrawerProps } from './ui/DesktopDrawer.ui'; +export { default as DesktopDrawer } from './ui/DesktopDrawer.ui'; diff --git a/src/widgets/AsideMenuLayout/ui/components/DesktopDrawer/ui/DesktopDrawer.ui.tsx b/src/widgets/AsideMenuLayout/ui/components/DesktopDrawer/ui/DesktopDrawer.ui.tsx new file mode 100644 index 0000000..01883b0 --- /dev/null +++ b/src/widgets/AsideMenuLayout/ui/components/DesktopDrawer/ui/DesktopDrawer.ui.tsx @@ -0,0 +1,53 @@ +import ChevronLeftIcon from '@mui/icons-material/ChevronLeft'; +import MenuIcon from '@mui/icons-material/Menu'; +import Divider from '@mui/material/Divider'; +import { useContext } from 'react'; + +import { AsideMenuContext } from '../../AsideMenuProvider'; + +import Drawer from './components/Drawer'; +import DrawerHeader from './components/DrawerMenu'; +import DrawerSwitcher from './components/DrawerSwitcher'; + +import type { FC, ReactNode } from 'react'; + +export type DesktopDrawerProps = { + width: number; + children: ReactNode; +}; + +const DesktopDrawer: FC = (props) => { + const { + width, + children, + } = props; + + const { desktopDrawerOpen, setDesktopDrawerOpen } = useContext(AsideMenuContext); + + const handleDrawerOpen = () => { + setDesktopDrawerOpen(true); + }; + const handleDrawerClose = () => { + setDesktopDrawerOpen(false); + }; + + return ( + + + + { desktopDrawerOpen ? : } + + + + + + {children} + + ); +}; + +export default DesktopDrawer; diff --git a/src/widgets/AsideMenuLayout/ui/components/DesktopDrawer/ui/components/Drawer/index.tsx b/src/widgets/AsideMenuLayout/ui/components/DesktopDrawer/ui/components/Drawer/index.tsx new file mode 100644 index 0000000..e8b0ad1 --- /dev/null +++ b/src/widgets/AsideMenuLayout/ui/components/DesktopDrawer/ui/components/Drawer/index.tsx @@ -0,0 +1,44 @@ +import MuiDrawer from '@mui/material/Drawer'; +import { type CSSObject, styled, type Theme } from '@mui/material/styles'; + +type DrawerProps = { + open: boolean; + width: number; +}; + +const openedMixin = (theme: Theme, { width }: Pick): CSSObject => ({ + width, + transition: theme.transitions.create('width', { + easing: theme.transitions.easing.sharp, + duration: theme.transitions.duration.enteringScreen, + }), + overflowX: 'hidden', +}); + +const closedMixin = (theme: Theme): CSSObject => ({ + transition: theme.transitions.create('width', { + easing: theme.transitions.easing.sharp, + duration: theme.transitions.duration.leavingScreen, + }), + overflowX: 'hidden', + width: `calc(${theme.spacing(8)} + 1px)`, +}); + +const Drawer = styled(MuiDrawer, { shouldForwardProp: (prop) => !['open', 'width'].includes(prop as string) })( + ({ theme, open, width }) => ({ + width, + flexShrink: 0, + whiteSpace: 'nowrap', + boxSizing: 'border-box', + ...open && { + ...openedMixin(theme, { width }), + '& .MuiDrawer-paper': openedMixin(theme, { width }), + }, + ...!open && { + ...closedMixin(theme), + '& .MuiDrawer-paper': closedMixin(theme), + }, + }), +); + +export default Drawer; diff --git a/src/widgets/AsideMenuLayout/ui/components/DesktopDrawer/ui/components/DrawerMenu/index.tsx b/src/widgets/AsideMenuLayout/ui/components/DesktopDrawer/ui/components/DrawerMenu/index.tsx new file mode 100644 index 0000000..fd57536 --- /dev/null +++ b/src/widgets/AsideMenuLayout/ui/components/DesktopDrawer/ui/components/DrawerMenu/index.tsx @@ -0,0 +1,10 @@ +import { styled } from '@mui/material/styles'; + +const DrawerHeader = styled('div')(({ theme }) => ({ + display: 'flex', + alignItems: 'center', + justifyContent: 'flex-end', + ...theme.mixins.toolbar, +})); + +export default DrawerHeader; diff --git a/src/widgets/AsideMenuLayout/ui/components/DesktopDrawer/ui/components/DrawerSwitcher/index.tsx b/src/widgets/AsideMenuLayout/ui/components/DesktopDrawer/ui/components/DrawerSwitcher/index.tsx new file mode 100644 index 0000000..8188f5a --- /dev/null +++ b/src/widgets/AsideMenuLayout/ui/components/DesktopDrawer/ui/components/DrawerSwitcher/index.tsx @@ -0,0 +1,20 @@ +import { styled } from '@mui/material/styles'; + +type DrawerSwitcherProps = { + open: boolean; +}; +const DrawerSwitcher = styled('div')(({ open }) => ({ + width: '100%', + height: '100%', + cursor: 'pointer', + display: 'flex', + justifyContent: open ? 'flex-end' : 'center', + alignItems: 'center', + padding: '0 20px', + transition: '200ms', + '&:hover': { + background: 'rgba(0, 0, 0, 0.1)', + }, +})); + +export default DrawerSwitcher; diff --git a/src/widgets/AsideMenuLayout/ui/components/MenuItem/index.ts b/src/widgets/AsideMenuLayout/ui/components/MenuItem/index.ts new file mode 100644 index 0000000..4a6ccb6 --- /dev/null +++ b/src/widgets/AsideMenuLayout/ui/components/MenuItem/index.ts @@ -0,0 +1 @@ +export { default as MenuItem } from './ui/MenuItem.ui'; diff --git a/src/widgets/AsideMenuLayout/ui/components/MenuItem/ui/MenuItem.spec.tsx b/src/widgets/AsideMenuLayout/ui/components/MenuItem/ui/MenuItem.spec.tsx new file mode 100644 index 0000000..b30f37d --- /dev/null +++ b/src/widgets/AsideMenuLayout/ui/components/MenuItem/ui/MenuItem.spec.tsx @@ -0,0 +1,70 @@ +import { renderWithProvider } from '__spec__/custon-renders'; + +import PieChartIcon from '@mui/icons-material/PieChart'; +import { screen } from '@testing-library/react'; + +import MenuItem from './MenuItem.ui'; + +import type { MenuItemProps } from './MenuItem.ui'; + +describe('MenuItem', () => { + const setup = (props?: Partial) => renderWithProvider( + , + title: 'Test Route', + path: '/test-route', + }} + {...props} + />, + ); + + test('should render', () => { + setup(); + + const itemElem = screen.getByTestId('menu-item'); + expect(itemElem).toBeVisible(); + }); + + test('should render correct text', () => { + setup(); + + const textElem = screen.getByText('Test Route'); + expect(textElem).toBeVisible(); + }); + + test('should render correct icon', () => { + setup(); + + const iconElem = screen.getByTestId('PieChartIcon'); + expect(iconElem).toBeVisible(); + }); + + test('should have correct href', () => { + setup(); + + const itemElem = screen.getByTestId('menu-item-link'); + expect(itemElem).toHaveAttribute('href', '/test-route'); + }); + + describe('Test closed MenuItem', () => { + test('should not render text if closed', () => { + setup({ isOpen: false }); + + const textElem = screen.getByText('Test Route'); + expect(textElem).not.toBeVisible(); + }); + + test('should render correct icon if closed', () => { + setup({ isOpen: false }); + + const iconElem = screen.getByTestId('PieChartIcon'); + expect(iconElem).toBeVisible(); + }); + }); +}); diff --git a/src/widgets/AsideMenuLayout/ui/components/MenuItem/ui/MenuItem.ui.tsx b/src/widgets/AsideMenuLayout/ui/components/MenuItem/ui/MenuItem.ui.tsx new file mode 100644 index 0000000..bfc057a --- /dev/null +++ b/src/widgets/AsideMenuLayout/ui/components/MenuItem/ui/MenuItem.ui.tsx @@ -0,0 +1,78 @@ +import ListItem from '@mui/material/ListItem'; +import ListItemButton from '@mui/material/ListItemButton'; +import ListItemIcon from '@mui/material/ListItemIcon'; +import ListItemText from '@mui/material/ListItemText'; +import { styled, useTheme } from '@mui/material/styles'; +import Typography from '@mui/material/Typography'; +import { forwardRef } from 'react'; +import { NavLink as RRDNavLink } from 'react-router-dom'; + +import type { ListItemProps } from '@mui/material/ListItem/ListItem'; +import type { ReactNode } from 'react'; +import type { NavLinkProps } from 'react-router-dom'; + +const NavLink = styled(RRDNavLink)(({ theme }) => ({ + textDecoration: 'none', + color: theme.palette.grey['600'], + width: '100%', +})); + +export type MenuItemProps = ListItemProps & { + page: { + icon: ReactNode; + title: string; + path: string; + }; + isOpen?: boolean; + NavLinkProps?: NavLinkProps; +}; + +const MenuItem = forwardRef((props, ref) => { + const { + page, + isOpen = true, + NavLinkProps, + ...restProps + } = props; + const theme = useTheme(); + + return ( + + + {({ isActive }) => ( + + + {page.icon} + + + + + {page.title} + + + + )} + + + ); +}); + +export default MenuItem; diff --git a/src/widgets/AsideMenuLayout/ui/components/MobileDrawer/index.ts b/src/widgets/AsideMenuLayout/ui/components/MobileDrawer/index.ts new file mode 100644 index 0000000..d8563e5 --- /dev/null +++ b/src/widgets/AsideMenuLayout/ui/components/MobileDrawer/index.ts @@ -0,0 +1 @@ +export { default as MobileDrawer } from './ui/MobileDrawer.ui'; diff --git a/src/widgets/AsideMenuLayout/ui/components/MobileDrawer/ui/MobileDrawer.ui.tsx b/src/widgets/AsideMenuLayout/ui/components/MobileDrawer/ui/MobileDrawer.ui.tsx new file mode 100644 index 0000000..abdaad8 --- /dev/null +++ b/src/widgets/AsideMenuLayout/ui/components/MobileDrawer/ui/MobileDrawer.ui.tsx @@ -0,0 +1,56 @@ +import MenuIcon from '@mui/icons-material/Menu'; +import MuiDrawer from '@mui/material/Drawer'; +import IconButton from '@mui/material/IconButton'; +import { useContext } from 'react'; + +import { AsideMenuContext } from '../../AsideMenuProvider'; + +import type { FC, ReactNode } from 'react'; + +type MobileDrawerProps = { + children: ReactNode; + width: number; + + onOpen?: () => void; + onClose?: () => void; +}; + +const MobileDrawer: FC = (props) => { + const { + children, + width, + onOpen, + onClose, + } = props; + + const { mobileDrawerOpen, setMobileDrawerOpen } = useContext(AsideMenuContext); + + const handleDrawerOpen = () => { + setMobileDrawerOpen(true); + onOpen?.(); + }; + + const handleDrawerClose = () => { + setMobileDrawerOpen(false); + onClose?.(); + }; + + return ( + <> + + + + + + {children} + + + + ); +}; + +export default MobileDrawer; diff --git a/src/widgets/CalendarWidget/index.ts b/src/widgets/CalendarWidget/index.ts new file mode 100644 index 0000000..1113844 --- /dev/null +++ b/src/widgets/CalendarWidget/index.ts @@ -0,0 +1,2 @@ +export type { CalendarWidgetProps } from './ui/CalendarWidget.ui'; +export { default as CalendarWidget } from './ui/CalendarWidget.ui'; diff --git a/src/widgets/CalendarWidget/ui/CalendarWidget.module.css b/src/widgets/CalendarWidget/ui/CalendarWidget.module.css new file mode 100644 index 0000000..9d367e1 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/CalendarWidget.module.css @@ -0,0 +1,4 @@ +.wrapper { + border: 1px solid black; + width: 372px; +} diff --git a/src/widgets/CalendarWidget/ui/CalendarWidget.spec.tsx b/src/widgets/CalendarWidget/ui/CalendarWidget.spec.tsx new file mode 100644 index 0000000..8a42c54 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/CalendarWidget.spec.tsx @@ -0,0 +1,46 @@ +import { render, screen } from '@testing-library/react'; + +import CalendarWidget from './CalendarWidget.ui'; + +import type { CalendarWidgetProps } from './CalendarWidget.ui'; + +describe('Test CalendarWidget', () => { + const setup = (props?: CalendarWidgetProps) => { + render(); + }; + + test('Basic render', () => { + setup(); + + const calendarWidgetElem = screen.getByTestId('calendar-widget'); + expect(calendarWidgetElem).toBeInTheDocument(); + expect(calendarWidgetElem).toBeVisible(); + }); + + test('Render components', () => { + setup(); + + const calendarWidgetElem = screen.getByTestId('calendar-widget'); + const headerRowElem = screen.getByTestId('header-row'); + const dayOfWeekRowElem = screen.getByTestId('day-of-week-row'); + const dateWrapperElem = screen.getByTestId('date-wrapper'); + + expect(calendarWidgetElem).toContainElement(headerRowElem); + expect(calendarWidgetElem).toContainElement(dayOfWeekRowElem); + expect(calendarWidgetElem).toContainElement(dateWrapperElem); + }); + + // todo + test('Render with value', () => { + setup({ value: new Date(2023, 1, 15) }); + + const calendarWidgetElem = screen.getByTestId('calendar-widget'); + const headerRowElem = screen.getByTestId('header-row'); + const dayOfWeekRowElem = screen.getByTestId('day-of-week-row'); + const dateWrapperElem = screen.getByTestId('date-wrapper'); + + expect(calendarWidgetElem).toContainElement(headerRowElem); + expect(calendarWidgetElem).toContainElement(dayOfWeekRowElem); + expect(calendarWidgetElem).toContainElement(dateWrapperElem); + }); +}); diff --git a/src/widgets/CalendarWidget/ui/CalendarWidget.ui.tsx b/src/widgets/CalendarWidget/ui/CalendarWidget.ui.tsx new file mode 100644 index 0000000..44b38c9 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/CalendarWidget.ui.tsx @@ -0,0 +1,38 @@ +import type { DataDateString } from 'shared/types/date'; + +import classes from './CalendarWidget.module.css'; +import { CalendarWidgetProvider } from './CalendarWidgetContext'; +import { DateWrapper } from './components/DateWrapper'; +import { DayOfWeekRow } from './components/DayOfWeekRow'; +import { HeaderRow } from './components/HeaderRow'; + +import type { DateCellProps } from './components/DateCell'; +import type { FC, HTMLAttributes } from 'react'; + +type DateCellPropsType = HTMLAttributes; +type DateCellPropsFuncType = (params: { date: Date; dataDate: DataDateString }) => DateCellPropsType; + +export type CalendarWidgetProps = { + maxDate?: Date; + minDate?: Date; + value?: Date; + locale?: 'en' | 'ru'; + highlightToday?: boolean; + highlightValue?: boolean; + + DateCellProps?: DateCellPropsFuncType | DateCellPropsType; + DateCellComponent?: FC; +}; +const CalendarWidget: FC = (props) => ( + +
+ + + + + +
+
+); + +export default CalendarWidget; diff --git a/src/widgets/CalendarWidget/ui/CalendarWidgetContext.tsx b/src/widgets/CalendarWidget/ui/CalendarWidgetContext.tsx new file mode 100644 index 0000000..3811ae3 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/CalendarWidgetContext.tsx @@ -0,0 +1,59 @@ +import PropTypes from 'prop-types'; +import React, { createContext, useMemo, useState } from 'react'; + +import type { CalendarWidgetProps } from './CalendarWidget.ui'; +import type { FC, PropsWithChildren } from 'react'; + +type CalendarWidgetContextValue = Omit & { + targetYear: number; + targetMonthIndex: number; + targetDate: Date; + setTargetDate: React.Dispatch>; + + maxDate: NonNullable; + minDate: NonNullable; + locale: NonNullable; + value: NonNullable; +}; +export const CalendarWidgetContext = createContext({} as CalendarWidgetContextValue); + +export type CalendarWidgetProviderProps = PropsWithChildren; + +export const CalendarWidgetProvider: FC = (props) => { + const { + children, + maxDate = new Date(2030, 0, 1), + minDate = new Date(1990, 0, 1), + locale = 'ru', + value = new Date(), + ...restProps + } = props; + + const [targetDate, setTargetDate] = useState(value); + + const contextValue = useMemo(() => ({ + targetYear: targetDate.getFullYear(), + targetMonthIndex: targetDate.getMonth(), + targetDate, + setTargetDate, + minDate, + maxDate, + locale, + value, + ...restProps, + }), [targetDate, minDate, maxDate, locale, value, restProps]); + + return ( + + {children} + + ); +}; + +CalendarWidgetProvider.propTypes = { + children: PropTypes.node.isRequired, + + maxDate: PropTypes.instanceOf(Date), + minDate: PropTypes.instanceOf(Date), + locale: PropTypes.oneOf(['ru', 'en']), +}; diff --git a/src/widgets/CalendarWidget/ui/components/DateCell/index.ts b/src/widgets/CalendarWidget/ui/components/DateCell/index.ts new file mode 100644 index 0000000..e4cac5a --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/DateCell/index.ts @@ -0,0 +1,2 @@ +export { default as DateCell } from './ui/DateCell.ui'; +export type { DateCellProps } from './ui/DateCell.ui'; diff --git a/src/widgets/CalendarWidget/ui/components/DateCell/ui/DateCell.spec.tsx b/src/widgets/CalendarWidget/ui/components/DateCell/ui/DateCell.spec.tsx new file mode 100644 index 0000000..1323b1b --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/DateCell/ui/DateCell.spec.tsx @@ -0,0 +1,37 @@ +import { render, screen } from '@testing-library/react'; + +import DateCell from './DateCell.ui'; + +describe('Base Render', () => { + const setup = (date: Date) => { + render(); + }; + + test('Check base render', () => { + setup(new Date(2024, 3, 15)); + + const dateCellElem = screen.getByTestId('date-cell'); + expect(dateCellElem).toBeInTheDocument(); + }); + + test('Check base class', () => { + setup(new Date(2024, 3, 15)); + + const dateCellElem = screen.getByTestId('date-cell'); + expect(dateCellElem).toHaveClass('dateCell'); + }); + + test('Is correct date', () => { + setup(new Date(2024, 3, 15)); + + const dateCellElem = screen.getByTestId('date-cell'); + expect(dateCellElem).toHaveTextContent('15'); + }); + + test('Have data-date attribute', () => { + setup(new Date(2024, 3, 15)); + + const dateCellElem = screen.getByTestId('date-cell'); + expect(dateCellElem).toHaveDataDate('04/15/2024'); + }); +}); diff --git a/src/widgets/CalendarWidget/ui/components/DateCell/ui/DateCell.style.module.css b/src/widgets/CalendarWidget/ui/components/DateCell/ui/DateCell.style.module.css new file mode 100644 index 0000000..55246c4 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/DateCell/ui/DateCell.style.module.css @@ -0,0 +1,40 @@ +.dateCell { + width: calc((100% / 7)); + height: 40px; + background: aquamarine; + display: flex; + justify-content: center; + align-items: center; + + &:nth-child(odd):not(:last-child) { + width: calc((100% / 7) - 1px); + border-right: 1px solid black; + } + + &:nth-child(even) { + width: calc((100% / 7) - 1px); + border-right: 1px solid black; + } + + .today { + color: red; + font-size: 1.2em; + font-weight: bold; + } + + .outMothRange { + color: darkgrey; + } + + .valueDate { + color: gold; + background: red; + border-radius: 50%; + padding: 5px; + height: 1.2em; + width: 1.2em; + display: inline-flex; + justify-content: center; + align-items: center; + } +} diff --git a/src/widgets/CalendarWidget/ui/components/DateCell/ui/DateCell.ui.tsx b/src/widgets/CalendarWidget/ui/components/DateCell/ui/DateCell.ui.tsx new file mode 100644 index 0000000..8992c73 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/DateCell/ui/DateCell.ui.tsx @@ -0,0 +1,97 @@ +import classnames from 'classnames'; +import React, { useContext, useMemo, useRef } from 'react'; + +import { getDataDateString } from 'shared/utils/date'; + +import { CalendarWidgetContext } from '../../../CalendarWidgetContext'; + +import classes from './DateCell.style.module.css'; + +import type { FC, MouseEventHandler, KeyboardEventHandler } from 'react'; + +export type DateCellProps = React.HTMLAttributes & { + date: Date; +}; +const DateCell: FC = (props) => { + const { + date, + } = props; + const rootDateCellRef = useRef(null); + const { + targetMonthIndex, + value, + highlightToday, + highlightValue, + DateCellProps = {}, + DateCellComponent, + } = useContext(CalendarWidgetContext); + + const todayDate = new Date(); + const dataDate = getDataDateString(date); + const dataToday = getDataDateString(todayDate); + const dataValue = getDataDateString(value); + const isOutMonthRange = date.getMonth() !== targetMonthIndex; + + const { + className, + onClick, + onKeyPress, + ...restProps + } = useMemo(() => { + if (typeof DateCellProps === 'function') { + return DateCellProps({ date, dataDate }); + } + + return DateCellProps; + // @ts-ignore + }, [DateCellProps, dataDate, date]); + + const onClickHandler: MouseEventHandler = (event) => { + onClick?.({ ...event, target: rootDateCellRef.current as EventTarget }); + }; + + const onKeyPressHandler: KeyboardEventHandler = (event) => { + onKeyPress?.(event); + }; + + if (DateCellComponent) { + return ( + + ); + } + + return ( +
+ + {date.getDate()} + +
+ ); +}; + +export default DateCell; diff --git a/src/widgets/CalendarWidget/ui/components/DateRow/index.ts b/src/widgets/CalendarWidget/ui/components/DateRow/index.ts new file mode 100644 index 0000000..f2df3ce --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/DateRow/index.ts @@ -0,0 +1 @@ +export { default as DateRow } from './ui/DateRow.ui'; diff --git a/src/widgets/CalendarWidget/ui/components/DateRow/ui/DateRow.spec.tsx b/src/widgets/CalendarWidget/ui/components/DateRow/ui/DateRow.spec.tsx new file mode 100644 index 0000000..a372aad --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/DateRow/ui/DateRow.spec.tsx @@ -0,0 +1,67 @@ +import { render, screen } from '@testing-library/react'; + +import DateRow from './DateRow.ui'; + +import type { DateRowType } from './DateRow.ui'; + +describe('Test Date Row', () => { + const setup = (cells: DateRowType['cells']) => { + render(); + }; + + const setupWeek = () => { + const cells = [ + new Date(2024, 3, 15), + new Date(2024, 3, 16), + new Date(2024, 3, 17), + new Date(2024, 3, 18), + new Date(2024, 3, 19), + new Date(2024, 3, 20), + new Date(2024, 3, 21), + ]; + setup(cells); + }; + + test('base render', () => { + setupWeek(); + + const dateRowElem = screen.getByTestId('date-row'); + expect(dateRowElem).toBeInTheDocument(); + }); + + test('Correct data attribute', () => { + setupWeek(); + + const dateRowElem = screen.getByTestId('date-row'); + expect(dateRowElem).toHaveAttribute('data-row', '04/15/2024-04/21/2024'); + }); + + test('Correct style class', () => { + setupWeek(); + + const dateRowElem = screen.getByTestId('date-row'); + expect(dateRowElem).toHaveClass('dateRow'); + }); + + describe('Test cells', () => { + test('base render', () => { + setupWeek(); + + const dateCellElems = screen.getAllByTestId('date-cell'); + expect(dateCellElems).toHaveLength(7); + }); + + test('is correct cells', () => { + setupWeek(); + + const dateCellElems = screen.getAllByTestId('date-cell'); + expect(dateCellElems[0]).toHaveTextContent('15'); + expect(dateCellElems[1]).toHaveTextContent('16'); + expect(dateCellElems[2]).toHaveTextContent('17'); + expect(dateCellElems[3]).toHaveTextContent('18'); + expect(dateCellElems[4]).toHaveTextContent('19'); + expect(dateCellElems[5]).toHaveTextContent('20'); + expect(dateCellElems[6]).toHaveTextContent('21'); + }); + }); +}); diff --git a/src/widgets/CalendarWidget/ui/components/DateRow/ui/DateRow.style.module.css b/src/widgets/CalendarWidget/ui/components/DateRow/ui/DateRow.style.module.css new file mode 100644 index 0000000..7e1bb92 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/DateRow/ui/DateRow.style.module.css @@ -0,0 +1,10 @@ +.dateRow { + display: flex; + justify-content: space-between; + align-items: center; + flex-wrap: wrap; + + &:not(:last-child) { + border-bottom: 1px solid black; + } +} diff --git a/src/widgets/CalendarWidget/ui/components/DateRow/ui/DateRow.ui.tsx b/src/widgets/CalendarWidget/ui/components/DateRow/ui/DateRow.ui.tsx new file mode 100644 index 0000000..f51ed80 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/DateRow/ui/DateRow.ui.tsx @@ -0,0 +1,41 @@ +import { getDataDateString } from 'shared/utils/date'; + +import { DateCell } from '../../DateCell'; + +import classes from './DateRow.style.module.css'; + +import type { FC } from 'react'; + +export type DateRowType = { + cells: Date[]; +}; +const DateRow: FC = (props) => { + const { + cells, + } = props; + + const firstDate = cells[0]; + const lastDate = cells[cells.length - 1]; + + if (!firstDate || !lastDate) { + return null; + } + + const firstDataDate = getDataDateString(firstDate); + const lastDataDate = getDataDateString(lastDate); + + return ( +
+ {cells.map((item) => ( + + ))} +
+ ); +}; + +export default DateRow; diff --git a/src/widgets/CalendarWidget/ui/components/DateWrapper/index.ts b/src/widgets/CalendarWidget/ui/components/DateWrapper/index.ts new file mode 100644 index 0000000..e38158d --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/DateWrapper/index.ts @@ -0,0 +1 @@ +export { default as DateWrapper } from './ui/DateWrapper.ui'; diff --git a/src/widgets/CalendarWidget/ui/components/DateWrapper/ui/DateWrapper.spec.tsx b/src/widgets/CalendarWidget/ui/components/DateWrapper/ui/DateWrapper.spec.tsx new file mode 100644 index 0000000..8dc3855 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/DateWrapper/ui/DateWrapper.spec.tsx @@ -0,0 +1,24 @@ +import { render, screen } from '@testing-library/react'; + +import { CalendarWidgetProvider } from 'widgets/CalendarWidget/ui/CalendarWidgetContext'; + +import { withProvider } from 'shared/hoc/withProvider'; + +import DateWrapper from './DateWrapper.ui'; + +describe('Base render DateWrapper', () => { + const setup = () => { + const DateWrapperWithProvider = withProvider(CalendarWidgetProvider)(DateWrapper); + + render(); + }; + + test('Base render', () => { + setup(); + + const dateWrapperElem = screen.getByTestId('date-wrapper'); + expect(dateWrapperElem).toBeInTheDocument(); + + expect(dateWrapperElem).toHaveClass('dateWrapper'); + }); +}); diff --git a/src/widgets/CalendarWidget/ui/components/DateWrapper/ui/DateWrapper.styles.module.css b/src/widgets/CalendarWidget/ui/components/DateWrapper/ui/DateWrapper.styles.module.css new file mode 100644 index 0000000..a4b7e8f --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/DateWrapper/ui/DateWrapper.styles.module.css @@ -0,0 +1,3 @@ +.dateWrapper { + border-top: 1px solid black; +} diff --git a/src/widgets/CalendarWidget/ui/components/DateWrapper/ui/DateWrapper.ui.tsx b/src/widgets/CalendarWidget/ui/components/DateWrapper/ui/DateWrapper.ui.tsx new file mode 100644 index 0000000..fcdbff0 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/DateWrapper/ui/DateWrapper.ui.tsx @@ -0,0 +1,61 @@ +import { useCallback, useContext } from 'react'; + +import DateRow from 'widgets/CalendarWidget/ui/components/DateRow/ui/DateRow.ui'; + +import { DAYS_IN_WEEK } from 'shared/constants'; + +// todo fix eslint - no empty line +import { CalendarWidgetContext } from '../../../CalendarWidgetContext'; + +import classes from './DateWrapper.styles.module.css'; + +const DateWrapper = () => { + const { targetYear, targetMonthIndex } = useContext(CalendarWidgetContext); + + const renderDateWrapper = useCallback(() => { + const rowsCount = 6; + const days = []; + + const lastDatePrevMonth = new Date(targetYear, targetMonthIndex, 0); + const startOffset = lastDatePrevMonth.getDay(); + if (startOffset) { + for (let i = 0; i < startOffset; i++) { + const newDate = new Date(targetYear, targetMonthIndex, i - startOffset + 1); + days.push(newDate); + } + } + + const daysPerMonth = new Date(targetYear, targetMonthIndex + 1, 0).getDate(); + // eslint-disable-next-line @stylistic/padding-line-between-statements + for (let i = 1; i <= daysPerMonth; i++) { + const newDate = new Date(targetYear, targetMonthIndex, i); + days.push(newDate); + } + + const endOffset = rowsCount * DAYS_IN_WEEK - days.length; + if (endOffset) { + for (let i = 1; i <= endOffset; i++) { + const newDate = new Date(targetYear, targetMonthIndex + 1, i); + days.push(newDate); + } + } + + const rows = []; + // eslint-disable-next-line @stylistic/padding-line-between-statements + for (let i = 0; i < rowsCount; i++) { + rows.push(days.slice(i * 7, (i + 1) * 7)); + } + + return rows.map((item) => ( + + )); + }, [targetMonthIndex, targetYear]); + + return ( +
+ {renderDateWrapper()} +
+ ); +}; + +export default DateWrapper; diff --git a/src/widgets/CalendarWidget/ui/components/DayOfWeekCell/index.ts b/src/widgets/CalendarWidget/ui/components/DayOfWeekCell/index.ts new file mode 100644 index 0000000..5476336 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/DayOfWeekCell/index.ts @@ -0,0 +1 @@ +export { default as DayOfWeekCell } from './ui/DayOfWeekCell.ui'; diff --git a/src/widgets/CalendarWidget/ui/components/DayOfWeekCell/ui/DayOfWeekCell.spec.tsx b/src/widgets/CalendarWidget/ui/components/DayOfWeekCell/ui/DayOfWeekCell.spec.tsx new file mode 100644 index 0000000..00cb8d8 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/DayOfWeekCell/ui/DayOfWeekCell.spec.tsx @@ -0,0 +1,139 @@ +import { render, screen } from '@testing-library/react'; + +import { WEEK_DAYS } from 'shared/constants'; +import { withProvider } from 'shared/hoc/withProvider'; + +import { CalendarWidgetProvider } from '../../../CalendarWidgetContext'; + +import DayOfWeekCell from './DayOfWeekCell.ui'; + +import type { DayOfWeekCellProps } from './DayOfWeekCell.ui'; +import type { CalendarWidgetProviderProps } from '../../../CalendarWidgetContext'; + +describe('Test DayOfWeekCell', () => { + const setup = (day: DayOfWeekCellProps['day'], locale: CalendarWidgetProviderProps['locale']) => { + const DayOfWeekCellComponent = () => ( + + ); + + const Provider = (props: CalendarWidgetProviderProps) => ( + + ); + + const DayOfWeekCellWithProvider = withProvider(Provider)(DayOfWeekCellComponent); + + render(); + }; + + describe('Basic render sunday', () => { + test('en locale', () => { + setup(WEEK_DAYS.SUNDAY, 'en'); + + const dayOfWeekCellElem = screen.getByTestId('day-of-week-cell'); + expect(dayOfWeekCellElem).toHaveTextContent('Sun.'); + }); + + test('ru locale', () => { + setup(WEEK_DAYS.SUNDAY, 'ru'); + + const dayOfWeekCellElem = screen.getByTestId('day-of-week-cell'); + expect(dayOfWeekCellElem).toHaveTextContent('Вс.'); + }); + }); + + describe('Basic render monday', () => { + test('en locale', () => { + setup(WEEK_DAYS.MONDAY, 'en'); + + const dayOfWeekCellElem = screen.getByTestId('day-of-week-cell'); + expect(dayOfWeekCellElem).toHaveTextContent('Mon.'); + }); + + test('ru locale', () => { + setup(WEEK_DAYS.MONDAY, 'ru'); + + const dayOfWeekCellElem = screen.getByTestId('day-of-week-cell'); + expect(dayOfWeekCellElem).toHaveTextContent('Пн.'); + }); + }); + + describe('Basic render tuesday', () => { + test('en locale', () => { + setup(WEEK_DAYS.TUESDAY, 'en'); + + const dayOfWeekCellElem = screen.getByTestId('day-of-week-cell'); + expect(dayOfWeekCellElem).toHaveTextContent('Tue.'); + }); + + test('ru locale', () => { + setup(WEEK_DAYS.TUESDAY, 'ru'); + + const dayOfWeekCellElem = screen.getByTestId('day-of-week-cell'); + expect(dayOfWeekCellElem).toHaveTextContent('Вт.'); + }); + }); + + describe('Basic render wednesday', () => { + test('en locale', () => { + setup(WEEK_DAYS.WEDNESDAY, 'en'); + + const dayOfWeekCellElem = screen.getByTestId('day-of-week-cell'); + expect(dayOfWeekCellElem).toHaveTextContent('Wed.'); + }); + + test('ru locale', () => { + setup(WEEK_DAYS.WEDNESDAY, 'ru'); + + const dayOfWeekCellElem = screen.getByTestId('day-of-week-cell'); + expect(dayOfWeekCellElem).toHaveTextContent('Ср.'); + }); + }); + + describe('Basic render thursday', () => { + test('en locale', () => { + setup(WEEK_DAYS.THURSDAY, 'en'); + + const dayOfWeekCellElem = screen.getByTestId('day-of-week-cell'); + expect(dayOfWeekCellElem).toHaveTextContent('Thu.'); + }); + + test('ru locale', () => { + setup(WEEK_DAYS.THURSDAY, 'ru'); + + const dayOfWeekCellElem = screen.getByTestId('day-of-week-cell'); + expect(dayOfWeekCellElem).toHaveTextContent('Чт.'); + }); + }); + + describe('Basic render friday', () => { + test('en locale', () => { + setup(WEEK_DAYS.FRIDAY, 'en'); + + const dayOfWeekCellElem = screen.getByTestId('day-of-week-cell'); + expect(dayOfWeekCellElem).toHaveTextContent('Fri.'); + }); + + test('ru locale', () => { + setup(WEEK_DAYS.FRIDAY, 'ru'); + + const dayOfWeekCellElem = screen.getByTestId('day-of-week-cell'); + expect(dayOfWeekCellElem).toHaveTextContent('Пт.'); + }); + }); + + describe('Basic render saturday', () => { + test('en locale', () => { + setup(WEEK_DAYS.SATURDAY, 'en'); + + const dayOfWeekCellElem = screen.getByTestId('day-of-week-cell'); + expect(dayOfWeekCellElem).toHaveTextContent('Sat.'); + }); + + test('ru locale', () => { + setup(WEEK_DAYS.SATURDAY, 'ru'); + + const dayOfWeekCellElem = screen.getByTestId('day-of-week-cell'); + expect(dayOfWeekCellElem).toHaveTextContent('Сб.'); + }); + }); +}); diff --git a/src/widgets/CalendarWidget/ui/components/DayOfWeekCell/ui/DayOfWeekCell.style.module.css b/src/widgets/CalendarWidget/ui/components/DayOfWeekCell/ui/DayOfWeekCell.style.module.css new file mode 100644 index 0000000..c10bbc9 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/DayOfWeekCell/ui/DayOfWeekCell.style.module.css @@ -0,0 +1,4 @@ +.content { + max-width: 100%; + font-weight: 600; +} diff --git a/src/widgets/CalendarWidget/ui/components/DayOfWeekCell/ui/DayOfWeekCell.ui.tsx b/src/widgets/CalendarWidget/ui/components/DayOfWeekCell/ui/DayOfWeekCell.ui.tsx new file mode 100644 index 0000000..220c38b --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/DayOfWeekCell/ui/DayOfWeekCell.ui.tsx @@ -0,0 +1,28 @@ +import { useContext } from 'react'; + +import type { WeekDaysValues } from 'shared/constants'; +import { WEEK_DAYS_LABEL } from 'shared/constants'; + +import { CalendarWidgetContext } from '../../../CalendarWidgetContext'; + +import classes from './DayOfWeekCell.style.module.css'; + +import type { FC } from 'react'; + +export type DayOfWeekCellProps = { + day: WeekDaysValues; +}; +const DayOfWeekCell: FC = (props) => { + const { day } = props; + const { locale } = useContext(CalendarWidgetContext); + const content = WEEK_DAYS_LABEL[day]?.[locale].short; + + return ( + + {content} + . + + ); +}; + +export default DayOfWeekCell; diff --git a/src/widgets/CalendarWidget/ui/components/DayOfWeekRow/index.ts b/src/widgets/CalendarWidget/ui/components/DayOfWeekRow/index.ts new file mode 100644 index 0000000..238cd25 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/DayOfWeekRow/index.ts @@ -0,0 +1 @@ +export { default as DayOfWeekRow } from './ui/DayOfWeekRow.ui'; diff --git a/src/widgets/CalendarWidget/ui/components/DayOfWeekRow/ui/DayOfWeekRow.spec.jsx b/src/widgets/CalendarWidget/ui/components/DayOfWeekRow/ui/DayOfWeekRow.spec.jsx new file mode 100644 index 0000000..7fd1783 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/DayOfWeekRow/ui/DayOfWeekRow.spec.jsx @@ -0,0 +1,29 @@ +import { render, screen } from '@testing-library/react'; + +import { withProvider } from 'shared/hoc/withProvider'; + +import { CalendarWidgetProvider } from '../../../CalendarWidgetContext'; + +import DayOfWeekRow from './DayOfWeekRow.ui'; + +describe('Test DayOfWeekRow', () => { + const setup = () => { + const DayOfWeekRowWithProvider = withProvider(CalendarWidgetProvider)(DayOfWeekRow); + + render(); + }; + + test('Basic render row', () => { + setup(); + + const dayOfWeekRowElem = screen.getByTestId('day-of-week-row'); + expect(dayOfWeekRowElem).toBeInTheDocument(); + }); + + test('Basic render cells', () => { + setup(); + + const dayOfWeekCellElems = screen.getAllByTestId('day-of-week-cell'); + expect(dayOfWeekCellElems).toHaveLength(7); + }); +}); diff --git a/src/widgets/CalendarWidget/ui/components/DayOfWeekRow/ui/DayOfWeekRow.style.module.css b/src/widgets/CalendarWidget/ui/components/DayOfWeekRow/ui/DayOfWeekRow.style.module.css new file mode 100644 index 0000000..20062f0 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/DayOfWeekRow/ui/DayOfWeekRow.style.module.css @@ -0,0 +1,24 @@ +.dayOfWeekRow { + display: flex; + justify-content: space-between; + align-items: center; + border-top: 1px solid black; + + >div { + width: calc(100% / 7 - 1px); + max-width: calc(100% / 7 - 1px); + display: flex; + justify-content: center; + align-items: center; + overflow: hidden; + + &:last-child { + width: calc(100% / 7); + max-width: calc(100% / 7); + } + + &:not(:last-child) { + border-right: 1px solid black; + } + } +} diff --git a/src/widgets/CalendarWidget/ui/components/DayOfWeekRow/ui/DayOfWeekRow.ui.jsx b/src/widgets/CalendarWidget/ui/components/DayOfWeekRow/ui/DayOfWeekRow.ui.jsx new file mode 100644 index 0000000..c2110d1 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/DayOfWeekRow/ui/DayOfWeekRow.ui.jsx @@ -0,0 +1,39 @@ +import { WEEK_DAYS } from 'shared/constants'; + +import { DayOfWeekCell } from '../../DayOfWeekCell'; + +import classes from './DayOfWeekRow.style.module.css'; + +const DayOfWeekRow = () => ( +
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+); + +export default DayOfWeekRow; diff --git a/src/widgets/CalendarWidget/ui/components/HeaderRow/index.js b/src/widgets/CalendarWidget/ui/components/HeaderRow/index.js new file mode 100644 index 0000000..257aa52 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/HeaderRow/index.js @@ -0,0 +1 @@ +export { default as HeaderRow } from './ui/HeaderRow.ui'; diff --git a/src/widgets/CalendarWidget/ui/components/HeaderRow/ui/HeaderRow.spec.jsx b/src/widgets/CalendarWidget/ui/components/HeaderRow/ui/HeaderRow.spec.jsx new file mode 100644 index 0000000..644feb2 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/HeaderRow/ui/HeaderRow.spec.jsx @@ -0,0 +1,77 @@ +import { render, screen } from '@testing-library/react'; + +import { withProvider } from 'shared/hoc/withProvider'; + +import { CalendarWidgetProvider } from '../../../CalendarWidgetContext'; + +import HeaderRow from './HeaderRow.ui'; + +describe('Test HeaderRow', () => { + const setup = () => { + const HeaderRowWithProvider = withProvider(CalendarWidgetProvider)(HeaderRow); + + render(); + }; + + test('Basic render', () => { + setup(); + + const headerRowElem = screen.getByTestId('header-row'); + expect(headerRowElem).toBeInTheDocument(); + }); + + test('Render month select', () => { + setup(); + + const headerRowElem = screen.getByTestId('header-row'); + const monthSelectElem = screen.getByTestId('month-select'); + + expect(headerRowElem).toContainElement(monthSelectElem); + expect(monthSelectElem).toBeInTheDocument(); + expect(monthSelectElem).toBeVisible(); + }); + + test('Render prev month button', () => { + setup(); + + const headerRowElem = screen.getByTestId('header-row'); + const prevMonthButtonElem = screen.getByTestId('prev-month-button'); + + expect(headerRowElem).toContainElement(prevMonthButtonElem); + expect(prevMonthButtonElem).toBeInTheDocument(); + expect(prevMonthButtonElem).toBeVisible(); + }); + + test('Render today button', () => { + setup(); + + const headerRowElem = screen.getByTestId('header-row'); + const todayButtonElem = screen.getByTestId('today-button'); + + expect(headerRowElem).toContainElement(todayButtonElem); + expect(todayButtonElem).toBeInTheDocument(); + expect(todayButtonElem).toBeVisible(); + }); + + test('Render next month button', () => { + setup(); + + const headerRowElem = screen.getByTestId('header-row'); + const nextMonthButtonElem = screen.getByTestId('next-month-button'); + + expect(headerRowElem).toContainElement(nextMonthButtonElem); + expect(nextMonthButtonElem).toBeInTheDocument(); + expect(nextMonthButtonElem).toBeVisible(); + }); + + test('Render year select', () => { + setup(); + + const headerRowElem = screen.getByTestId('header-row'); + const yearSelectElem = screen.getByTestId('year-select'); + + expect(headerRowElem).toContainElement(yearSelectElem); + expect(yearSelectElem).toBeInTheDocument(); + expect(yearSelectElem).toBeVisible(); + }); +}); diff --git a/src/widgets/CalendarWidget/ui/components/HeaderRow/ui/HeaderRow.styles.module.css b/src/widgets/CalendarWidget/ui/components/HeaderRow/ui/HeaderRow.styles.module.css new file mode 100644 index 0000000..9105e66 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/HeaderRow/ui/HeaderRow.styles.module.css @@ -0,0 +1,9 @@ +.headerRow { + display: flex; + justify-content: space-between; + align-items: center; + + >div { + background: dimgrey; + } +} diff --git a/src/widgets/CalendarWidget/ui/components/HeaderRow/ui/HeaderRow.ui.jsx b/src/widgets/CalendarWidget/ui/components/HeaderRow/ui/HeaderRow.ui.jsx new file mode 100644 index 0000000..3716020 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/HeaderRow/ui/HeaderRow.ui.jsx @@ -0,0 +1,35 @@ +import { MonthSelect } from '../../MonthSelect'; +import { NextMonthButton } from '../../NextMonthButton'; +import { PrevMonthButton } from '../../PrevMonthButton'; +import { TodayButton } from '../../TodayButton'; +import { YearSelect } from '../../YearSelect'; + +import classes from './HeaderRow.styles.module.css'; + +const HeaderRow = () => ( +
+
+ +
+ +
+ + < + + + + Сегодня + + + + > + +
+ +
+ +
+
+); + +export default HeaderRow; diff --git a/src/widgets/CalendarWidget/ui/components/MonthSelect/index.js b/src/widgets/CalendarWidget/ui/components/MonthSelect/index.js new file mode 100644 index 0000000..c9d19ac --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/MonthSelect/index.js @@ -0,0 +1 @@ +export { default as MonthSelect } from './ui/MonthSelect.ui'; diff --git a/src/widgets/CalendarWidget/ui/components/MonthSelect/ui/MonthSelect.spec.jsx b/src/widgets/CalendarWidget/ui/components/MonthSelect/ui/MonthSelect.spec.jsx new file mode 100644 index 0000000..32fdd82 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/MonthSelect/ui/MonthSelect.spec.jsx @@ -0,0 +1,51 @@ +import { render, screen } from '@testing-library/react'; +import { userEvent } from '@testing-library/user-event'; + +import { MONTHS } from 'shared/constants'; +import { withProvider } from 'shared/hoc/withProvider'; + +import { CalendarWidgetProvider } from '../../../CalendarWidgetContext'; + +import MonthSelect from './MonthSelect.ui'; + +describe('Test MonthSelect', () => { + const user = userEvent.setup(); + const setup = (props, providerProps) => { + const MonthSelectComponent = () => ( + + ); + + const Provider = (params) => ( + + ); + const MonthSelectWithProvider = withProvider(Provider)(MonthSelectComponent); + + render(); + }; + + test('Basic render', async () => { + setup(); + + const monthSelectElem = screen.getByTestId('month-select'); + + expect(monthSelectElem).toBeInTheDocument(); + expect(monthSelectElem).toBeVisible(); + + await user.selectOptions(monthSelectElem, String(MONTHS.JULY)); + expect(monthSelectElem).toHaveValue('6'); + expect(monthSelectElem).toHaveDisplayValue(['Июль']); + }); + + test('onChange handler', async () => { + const onChange = jest.fn(); + + setup({ onChange }, { value: new Date(2020, 9, 15) }); + + const monthSelectElem = screen.getByTestId('month-select'); + await user.selectOptions(monthSelectElem, String(MONTHS.JULY)); + + expect(onChange).toHaveBeenCalled(); + const newDate = new Date(2020, 6); + expect(onChange).toHaveBeenCalledWith(newDate); + }); +}); diff --git a/src/widgets/CalendarWidget/ui/components/MonthSelect/ui/MonthSelect.ui.jsx b/src/widgets/CalendarWidget/ui/components/MonthSelect/ui/MonthSelect.ui.jsx new file mode 100644 index 0000000..1ed43fe --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/MonthSelect/ui/MonthSelect.ui.jsx @@ -0,0 +1,61 @@ +import PropTypes from 'prop-types'; +import { useContext } from 'react'; + +import { MONTHS, MONTHS_LABEL } from 'shared/constants'; +import { lastDayOfMonthDate } from 'shared/utils/date'; + +import { CalendarWidgetContext } from '../../../CalendarWidgetContext'; + +const MonthSelect = (props) => { + const { + onChange, + ...restProps + } = props; + // todo eslint sort + const { + targetYear, + targetMonthIndex, + setTargetDate, + minDate, + maxDate, + locale, + } = useContext(CalendarWidgetContext); + + const onChangeHandler = (e) => { + const newDate = new Date(targetYear, Number(e.target.value)); + setTargetDate(newDate); + onChange?.(newDate); + }; + + const createOption = (value) => { + const newDate = new Date(targetYear, value); + + return ( + + ); + }; + + return ( + + ); +}; + +MonthSelect.propTypes = { + onChange: PropTypes.func, +}; + +export default MonthSelect; diff --git a/src/widgets/CalendarWidget/ui/components/NextMonthButton/index.ts b/src/widgets/CalendarWidget/ui/components/NextMonthButton/index.ts new file mode 100644 index 0000000..be91df4 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/NextMonthButton/index.ts @@ -0,0 +1 @@ +export { default as NextMonthButton } from './ui/NextMonthButton.ui'; diff --git a/src/widgets/CalendarWidget/ui/components/NextMonthButton/ui/NextMonthButton.spec.tsx b/src/widgets/CalendarWidget/ui/components/NextMonthButton/ui/NextMonthButton.spec.tsx new file mode 100644 index 0000000..a2e475e --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/NextMonthButton/ui/NextMonthButton.spec.tsx @@ -0,0 +1,46 @@ +import { render, screen } from '@testing-library/react'; +import { userEvent } from '@testing-library/user-event'; + +import { withProvider } from 'shared/hoc/withProvider'; + +import { CalendarWidgetProvider } from '../../../CalendarWidgetContext'; + +import NextMonthButton from './NextMonthButton.ui'; + +import type { NextMonthButtonProps } from './NextMonthButton.ui'; +import type { CalendarWidgetProviderProps } from '../../../CalendarWidgetContext'; + +describe('Test NextMonthButton', () => { + const user = userEvent.setup(); + + const setup = (props?: NextMonthButtonProps, providerProps?: CalendarWidgetProviderProps) => { + const NextMonthButtonComponent = () => ( + + ); + const Provider = (params: CalendarWidgetProviderProps) => ( + + ); + const NextMonthButtonWithProvider = withProvider(Provider)(NextMonthButtonComponent); + + render(); + }; + + test('Basic render', () => { + setup(); + + const nextMontButtonElem = screen.getByTestId('next-month-button'); + expect(nextMontButtonElem).toBeInTheDocument(); + expect(nextMontButtonElem).toBeVisible(); + }); + + test('onClick handler', async () => { + const onClick = jest.fn(); + setup({ onClick }, { value: new Date(2020, 9, 15) }); + + const nextMontButtonElem = screen.getByTestId('next-month-button'); + await user.click(nextMontButtonElem); + + expect(onClick).toHaveBeenCalled(); + expect(onClick).toHaveBeenCalledWith(new Date(2020, 10, 1)); + }); +}); diff --git a/src/widgets/CalendarWidget/ui/components/NextMonthButton/ui/NextMonthButton.ui.tsx b/src/widgets/CalendarWidget/ui/components/NextMonthButton/ui/NextMonthButton.ui.tsx new file mode 100644 index 0000000..b5d0c07 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/NextMonthButton/ui/NextMonthButton.ui.tsx @@ -0,0 +1,46 @@ +import { useContext } from 'react'; + +import { CalendarWidgetContext } from '../../../CalendarWidgetContext'; + +import type { ReactNode, FC } from 'react'; + +export type NextMonthButtonProps = { + children?: ReactNode; + onClick?: (newDate: Date) => void; + disabled?: boolean; +}; +const NextMonthButton: FC = (props) => { + const { + children = 'next', + disabled, + onClick, + ...restProps + } = props; + const { + targetYear, + targetMonthIndex, + setTargetDate, + maxDate, + } = useContext(CalendarWidgetContext); + + const nextDate = new Date(targetYear, targetMonthIndex + 1); + + const onClickHandler = () => { + setTargetDate(nextDate); + onClick?.(nextDate); + }; + + return ( + + ); +}; + +export default NextMonthButton; diff --git a/src/widgets/CalendarWidget/ui/components/PrevMonthButton/index.ts b/src/widgets/CalendarWidget/ui/components/PrevMonthButton/index.ts new file mode 100644 index 0000000..5a64373 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/PrevMonthButton/index.ts @@ -0,0 +1 @@ +export { default as PrevMonthButton } from './ui/PrevMonthButton.ui'; diff --git a/src/widgets/CalendarWidget/ui/components/PrevMonthButton/ui/PrevMonthButton.spec.tsx b/src/widgets/CalendarWidget/ui/components/PrevMonthButton/ui/PrevMonthButton.spec.tsx new file mode 100644 index 0000000..2028067 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/PrevMonthButton/ui/PrevMonthButton.spec.tsx @@ -0,0 +1,44 @@ +import { render, screen } from '@testing-library/react'; +import { userEvent } from '@testing-library/user-event'; + +import { withProvider } from 'shared/hoc/withProvider'; + +import { CalendarWidgetProvider, type CalendarWidgetProviderProps } from '../../../CalendarWidgetContext'; + +import PrevMonthButton from './PrevMonthButton.ui'; + +import type { PrevMonthButtonProps } from './PrevMonthButton.ui'; + +describe('Test NextMonthButton', () => { + const user = userEvent.setup(); + const setup = (props?: PrevMonthButtonProps, providerProps?: CalendarWidgetProviderProps) => { + const PrevMonthButtonComponent = () => ( + + ); + const Provider = (params: CalendarWidgetProviderProps) => ( + + ); + const PrevMonthButtonWithProvider = withProvider(Provider)(PrevMonthButtonComponent); + + render(); + }; + + test('Basic render', () => { + setup(); + + const prevMontButtonElem = screen.getByTestId('prev-month-button'); + expect(prevMontButtonElem).toBeInTheDocument(); + expect(prevMontButtonElem).toBeVisible(); + }); + + test('onClick handler', async () => { + const onClick = jest.fn(); + setup({ onClick }, { value: new Date(2020, 9, 15) }); + + const prevMontButtonElem = screen.getByTestId('prev-month-button'); + await user.click(prevMontButtonElem); + + expect(onClick).toHaveBeenCalled(); + expect(onClick).toHaveBeenCalledWith(new Date(2020, 9, 0)); + }); +}); diff --git a/src/widgets/CalendarWidget/ui/components/PrevMonthButton/ui/PrevMonthButton.ui.tsx b/src/widgets/CalendarWidget/ui/components/PrevMonthButton/ui/PrevMonthButton.ui.tsx new file mode 100644 index 0000000..7ac17c8 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/PrevMonthButton/ui/PrevMonthButton.ui.tsx @@ -0,0 +1,46 @@ +import { useContext } from 'react'; + +import { CalendarWidgetContext } from '../../../CalendarWidgetContext'; + +import type { FC, ReactNode } from 'react'; + +export type PrevMonthButtonProps = { + children?: ReactNode; + onClick?: (newDate: Date) => void; + disabled?: boolean; +}; +const PrevMonthButton: FC = (props) => { + const { + children = 'prev', + onClick, + disabled, + ...restProps + } = props; + const { + targetYear, + targetMonthIndex, + setTargetDate, + minDate, + } = useContext(CalendarWidgetContext); + + const prevDate = new Date(targetYear, targetMonthIndex, 0); + + const onClickHandler = () => { + setTargetDate(prevDate); + onClick?.(prevDate); + }; + + return ( + + ); +}; + +export default PrevMonthButton; diff --git a/src/widgets/CalendarWidget/ui/components/TodayButton/index.ts b/src/widgets/CalendarWidget/ui/components/TodayButton/index.ts new file mode 100644 index 0000000..92dd317 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/TodayButton/index.ts @@ -0,0 +1 @@ +export { default as TodayButton } from './ui/TodayButton.ui'; diff --git a/src/widgets/CalendarWidget/ui/components/TodayButton/ui/TodayButton.spec.tsx b/src/widgets/CalendarWidget/ui/components/TodayButton/ui/TodayButton.spec.tsx new file mode 100644 index 0000000..7fa0039 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/TodayButton/ui/TodayButton.spec.tsx @@ -0,0 +1,54 @@ +import { render, screen } from '@testing-library/react'; +import { userEvent } from '@testing-library/user-event'; + +import { withProvider } from 'shared/hoc/withProvider'; + +import { CalendarWidgetProvider } from '../../../CalendarWidgetContext'; + +import TodayButton from './TodayButton.ui'; + +import type { TodayButtonProps } from './TodayButton.ui'; + +describe('Test NextMonthButton', () => { + const user = userEvent.setup(); + const setup = (props?: TodayButtonProps) => { + const TodayButtonComponent = () => ( + + ); + const TodayButtonWithProvider = withProvider(CalendarWidgetProvider)(TodayButtonComponent); + + render(); + }; + + test('Basic render', () => { + setup(); + + const todayButtonElem = screen.getByTestId('today-button'); + expect(todayButtonElem).toBeInTheDocument(); + expect(todayButtonElem).toBeVisible(); + }); + + test('onClick handler', async () => { + const onClick = jest.fn(); + setup({ onClick }); + + const todayButtonElem = screen.getByTestId('today-button'); + await user.click(todayButtonElem); + + expect(onClick).toHaveBeenCalled(); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + const onClickArgument = onClick.mock.calls[0][0] as number; + const calledDate = new Date(onClickArgument); + const calledYear = calledDate.getFullYear(); + const calledMonthIndex = calledDate.getMonth(); + const calledDateNumber = calledDate.getDate(); + const calledString = `${calledYear}-${calledMonthIndex}-${calledDateNumber}`; + + const currentYear = new Date().getFullYear(); + const currentMonthIndex = new Date().getMonth(); + const currentDateNumber = new Date().getDate(); + const expectedString = `${currentYear}-${currentMonthIndex}-${currentDateNumber}`; + expect(calledString).toBe(expectedString); + }); +}); diff --git a/src/widgets/CalendarWidget/ui/components/TodayButton/ui/TodayButton.ui.tsx b/src/widgets/CalendarWidget/ui/components/TodayButton/ui/TodayButton.ui.tsx new file mode 100644 index 0000000..2d54d70 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/TodayButton/ui/TodayButton.ui.tsx @@ -0,0 +1,38 @@ +import { useContext } from 'react'; + +import { CalendarWidgetContext } from '../../../CalendarWidgetContext'; + +import type { FC, ReactNode } from 'react'; + +export type TodayButtonProps = { + children?: ReactNode; + onClick?: (newDate: Date) => void; +}; +const TodayButton: FC = (props) => { + const { + children = 'today', + onClick, + ...restProps + } = props; + + const { setTargetDate } = useContext(CalendarWidgetContext); + + const onClickHandler = () => { + const newDate = new Date(); + setTargetDate(newDate); + onClick?.(newDate); + }; + + return ( + + ); +}; + +export default TodayButton; diff --git a/src/widgets/CalendarWidget/ui/components/YearSelect/index.ts b/src/widgets/CalendarWidget/ui/components/YearSelect/index.ts new file mode 100644 index 0000000..7ac62c0 --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/YearSelect/index.ts @@ -0,0 +1 @@ +export { default as YearSelect } from './ui/YearSelect.ui'; diff --git a/src/widgets/CalendarWidget/ui/components/YearSelect/ui/YearSelect.spec.tsx b/src/widgets/CalendarWidget/ui/components/YearSelect/ui/YearSelect.spec.tsx new file mode 100644 index 0000000..fdca1aa --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/YearSelect/ui/YearSelect.spec.tsx @@ -0,0 +1,50 @@ +import { render, screen } from '@testing-library/react'; +import { userEvent } from '@testing-library/user-event'; + +import { withProvider } from 'shared/hoc/withProvider'; + +import { CalendarWidgetProvider } from '../../../CalendarWidgetContext'; + +import YearSelect from './YearSelect.ui'; + +import type { YearSelectProps } from './YearSelect.ui'; + +describe('Test YearSelect', () => { + const user = userEvent.setup(); + const setup = (props?: YearSelectProps) => { + const YearSelectComponent = () => ( + + ); + const YearSelectWithProvider = withProvider(CalendarWidgetProvider)(YearSelectComponent); + + render(); + }; + + test('Basic render', async () => { + setup(); + + const yearSelectElem = screen.getByTestId('year-select'); + + expect(yearSelectElem).toBeInTheDocument(); + expect(yearSelectElem).toBeVisible(); + + await user.selectOptions(yearSelectElem, '2020'); + expect(yearSelectElem).toHaveValue('2020'); + expect(yearSelectElem).toHaveDisplayValue(['2020']); + }); + + test('onChange handler', async () => { + const onChange = jest.fn(); + + setup({ onChange }); + + const yearSelectElem = screen.getByTestId('year-select'); + await user.selectOptions(yearSelectElem, '2020'); + + expect(onChange).toHaveBeenCalled(); + const currentDate = new Date(); + const currentMonthIndex = currentDate.getMonth(); + const newDate = new Date(2020, currentMonthIndex); + expect(onChange).toHaveBeenCalledWith(newDate); + }); +}); diff --git a/src/widgets/CalendarWidget/ui/components/YearSelect/ui/YearSelect.ui.tsx b/src/widgets/CalendarWidget/ui/components/YearSelect/ui/YearSelect.ui.tsx new file mode 100644 index 0000000..0ff678d --- /dev/null +++ b/src/widgets/CalendarWidget/ui/components/YearSelect/ui/YearSelect.ui.tsx @@ -0,0 +1,71 @@ +import { useContext } from 'react'; + +import { CalendarWidgetContext } from '../../../CalendarWidgetContext'; + +import type { FC, ChangeEventHandler } from 'react'; + +export type YearSelectProps = { + onChange?: (newDate: Date) => void; +}; +const YearSelect: FC = (props) => { + const { + onChange, + ...restProps + } = props; + + // todo eslint fix + const { + targetYear, targetMonthIndex, setTargetDate, minDate, maxDate, + } = useContext(CalendarWidgetContext); + + const onChangeHandler: ChangeEventHandler = (event) => { + let newDate = new Date(Number(event.target.value), targetMonthIndex); + + if (newDate < minDate) { + newDate = minDate; + } + + if (newDate > maxDate) { + newDate = maxDate; + } + + setTargetDate(newDate); + onChange?.(newDate); + }; + + const renderOptions = () => { + const minYear = minDate.getFullYear(); + const maxYear = maxDate.getFullYear(); + const options = []; + + for (let i = minYear; i <= maxYear; i++) { + options.push(i); + } + + return options.map((item) => { + // todo refactor + const newDate = new Date(item, targetMonthIndex + 1, 0); + const newDate2 = new Date(item, targetMonthIndex); + const disabled = newDate2 > maxDate || newDate < minDate; + + return ( + + ); + }); + }; + + return ( + + ); +}; + +export default YearSelect; diff --git a/src/widgets/DatePicker/index.ts b/src/widgets/DatePicker/index.ts new file mode 100644 index 0000000..8d28001 --- /dev/null +++ b/src/widgets/DatePicker/index.ts @@ -0,0 +1 @@ +export { default as DatePicker } from './ui/DatePicker.ui'; diff --git a/src/widgets/DatePicker/ui/DatePicker.spec.tsx b/src/widgets/DatePicker/ui/DatePicker.spec.tsx new file mode 100644 index 0000000..4dc89a7 --- /dev/null +++ b/src/widgets/DatePicker/ui/DatePicker.spec.tsx @@ -0,0 +1,402 @@ +import { dragAndDropCellByDataDate, pickCellByDataDate } from '__spec__/helpers'; +import { render, screen } from '__spec__/utils'; + +import DatePicker from './DatePicker.ui'; + +import type { DatePickerProps } from './DatePicker.ui'; + +describe('Test DatePicker', () => { + const setup = (props?: DatePickerProps) => render( + , + ); + + test('Basic render DatePicker', () => { + setup(); + + const datePickerElem = screen.queryByTestId('calendar-widget'); + expect(datePickerElem).toBeVisible(); + }); + + describe('Test base props', () => { + test('Default picked first date', () => { + setup({ + firstDate: new Date(2024, 9, 11), + value: new Date(2024, 9, 15), + }); + + const firstPickedCellElem = screen.queryByTestId('first-selected-cell'); + expect(firstPickedCellElem).toBeVisible(); + expect(firstPickedCellElem).toHaveDataDate('10/11/2024'); + + const lastPickedCellElem = screen.queryByTestId('last-selected-cell'); + expect(lastPickedCellElem).not.toBeInTheDocument(); + }); + + test('Default picked last date', () => { + setup({ + lastDate: new Date(2024, 9, 18), + value: new Date(2024, 9, 15), + }); + + const lastPickedCellElem = screen.queryByTestId('last-selected-cell'); + expect(lastPickedCellElem).toBeVisible(); + expect(lastPickedCellElem).toHaveDataDate('10/18/2024'); + + const firstPickedCellElem = screen.queryByTestId('first-selected-cell'); + expect(firstPickedCellElem).not.toBeInTheDocument(); + }); + + describe('onSelect handler', () => { + test('No default picked', () => { + const onSelect = jest.fn(); + setup({ + onSelect, + value: new Date(2024, 9, 15), + }); + + pickCellByDataDate('10/18/2024'); + + expect(onSelect).toHaveBeenCalled(); + expect(onSelect).toHaveBeenCalledWith({ + dataDate: '10/18/2024', + date: new Date('10/18/2024'), + type: 'firstDate', + }); + }); + + test('Picked first date', () => { + const onSelect = jest.fn(); + setup({ + onSelect, + value: new Date(2024, 9, 15), + firstDate: new Date(2024, 9, 15), + }); + + pickCellByDataDate('10/18/2024'); + + expect(onSelect).toHaveBeenCalled(); + expect(onSelect).toHaveBeenCalledWith({ + dataDate: '10/18/2024', + date: new Date('10/18/2024'), + type: 'lastDate', + }); + }); + + test('Picked last date', () => { + const onSelect = jest.fn(); + setup({ + onSelect, + value: new Date(2024, 9, 15), + lastDate: new Date(2024, 9, 15), + }); + + pickCellByDataDate('10/11/2024'); + + expect(onSelect).toHaveBeenCalled(); + expect(onSelect).toHaveBeenCalledWith({ + dataDate: '10/11/2024', + date: new Date('10/11/2024'), + type: 'firstDate', + }); + }); + }); + + describe('onUnselect handler', () => { + test('Unpick first date', () => { + const onUnselect = jest.fn(); + setup({ + onUnselect, + value: new Date(2024, 9, 15), + firstDate: new Date(2024, 9, 15), + lastDate: new Date(2024, 9, 18), + }); + + pickCellByDataDate('10/15/2024'); + + expect(onUnselect).toHaveBeenCalled(); + expect(onUnselect).toHaveBeenCalledWith({ + dataDate: '10/15/2024', + date: new Date('10/15/2024'), + type: 'firstDate', + }); + }); + + test('Unpick last date', () => { + const onUnselect = jest.fn(); + setup({ + onUnselect, + value: new Date(2024, 9, 15), + firstDate: new Date(2024, 9, 15), + lastDate: new Date(2024, 9, 18), + }); + + pickCellByDataDate('10/18/2024'); + + expect(onUnselect).toHaveBeenCalled(); + expect(onUnselect).toHaveBeenCalledWith({ + dataDate: '10/18/2024', + date: new Date('10/18/2024'), + type: 'lastDate', + }); + }); + }); + }); + + describe('Test pick date', () => { + test('No picked date, select first', () => { + setup({ + value: new Date(2024, 9, 15), + }); + const cellElem = screen.getByDataDate('10/11/2024'); + pickCellByDataDate('10/11/2024'); + + const firstSelectedCellElem = screen.queryByTestId('first-selected-cell'); + expect(firstSelectedCellElem).toBe(cellElem); + }); + + test('Picked first date, pick before first date', () => { + setup({ + value: new Date(2024, 9, 15), + firstDate: new Date(2024, 9, 15), + }); + pickCellByDataDate('10/11/2024'); + + const firstPickedCellElem = screen.queryByTestId('first-selected-cell'); + expect(firstPickedCellElem).toHaveDataDate('10/11/2024'); + + const lastPickedCellElem = screen.queryByTestId('last-selected-cell'); + expect(lastPickedCellElem).toHaveDataDate('10/15/2024'); + }); + + test('Picked first date, pick after first date', () => { + setup({ + value: new Date(2024, 9, 15), + firstDate: new Date(2024, 9, 15), + }); + pickCellByDataDate('10/18/2024'); + + const firstPickedCellElem = screen.queryByTestId('first-selected-cell'); + expect(firstPickedCellElem).toHaveDataDate('10/15/2024'); + + const lastPickedCellElem = screen.queryByTestId('last-selected-cell'); + expect(lastPickedCellElem).toHaveDataDate('10/18/2024'); + }); + + test('Picked first date, pick this date', () => { + setup({ + value: new Date(2024, 9, 15), + firstDate: new Date(2024, 9, 15), + }); + pickCellByDataDate('10/15/2024'); + + const firstPickedCellElem = screen.queryByTestId('first-selected-cell'); + expect(firstPickedCellElem).not.toBeInTheDocument(); + }); + + test('Picked last date, pick before last date', () => { + setup({ + value: new Date(2024, 9, 15), + lastDate: new Date(2024, 9, 15), + }); + pickCellByDataDate('10/11/2024'); + + const firstPickedCellElem = screen.queryByTestId('first-selected-cell'); + expect(firstPickedCellElem).toHaveDataDate('10/11/2024'); + + const lastPickedCellElem = screen.queryByTestId('last-selected-cell'); + expect(lastPickedCellElem).toHaveDataDate('10/15/2024'); + }); + + test('Picked last date, pick after last date', () => { + setup({ + value: new Date(2024, 9, 15), + lastDate: new Date(2024, 9, 15), + }); + pickCellByDataDate('10/18/2024'); + + const firstPickedCellElem = screen.queryByTestId('first-selected-cell'); + expect(firstPickedCellElem).toHaveDataDate('10/15/2024'); + + const lastPickedCellElem = screen.queryByTestId('last-selected-cell'); + expect(lastPickedCellElem).toHaveDataDate('10/18/2024'); + }); + + test('Picked last date, pick this date', () => { + setup({ + value: new Date(2024, 9, 15), + lastDate: new Date(2024, 9, 15), + }); + pickCellByDataDate('10/15/2024'); + + const lastPickedCellElem = screen.queryByTestId('last-selected-cell'); + expect(lastPickedCellElem).not.toBeInTheDocument(); + }); + + test('Picked first & last date, pick date before first', () => { + setup({ + value: new Date(2024, 9, 15), + firstDate: new Date(2024, 9, 15), + lastDate: new Date(2024, 9, 18), + }); + pickCellByDataDate('10/11/2024'); + + const firstPickedCellElem = screen.queryByTestId('first-selected-cell'); + expect(firstPickedCellElem).toHaveDataDate('10/11/2024'); + + const lastPickedCellElem = screen.queryByTestId('last-selected-cell'); + expect(lastPickedCellElem).toHaveDataDate('10/18/2024'); + }); + + test('Picked first & last date, pick date after last', () => { + setup({ + value: new Date(2024, 9, 15), + firstDate: new Date(2024, 9, 15), + lastDate: new Date(2024, 9, 18), + }); + pickCellByDataDate('10/21/2024'); + + const firstPickedCellElem = screen.queryByTestId('first-selected-cell'); + expect(firstPickedCellElem).toHaveDataDate('10/15/2024'); + + const lastPickedCellElem = screen.queryByTestId('last-selected-cell'); + expect(lastPickedCellElem).toHaveDataDate('10/21/2024'); + }); + + test('Picked first & last date, pick fist date', () => { + setup({ + value: new Date(2024, 9, 15), + firstDate: new Date(2024, 9, 15), + lastDate: new Date(2024, 9, 18), + }); + pickCellByDataDate('10/15/2024'); + + const firstPickedCellElem = screen.queryByTestId('first-selected-cell'); + expect(firstPickedCellElem).not.toBeInTheDocument(); + + const lastPickedCellElem = screen.queryByTestId('last-selected-cell'); + expect(lastPickedCellElem).toHaveDataDate('10/18/2024'); + }); + + test('Picked first & last date, pick last date', () => { + setup({ + value: new Date(2024, 9, 15), + firstDate: new Date(2024, 9, 15), + lastDate: new Date(2024, 9, 18), + }); + pickCellByDataDate('10/18/2024'); + + const firstPickedCellElem = screen.queryByTestId('first-selected-cell'); + expect(firstPickedCellElem).toHaveDataDate('10/15/2024'); + + const lastPickedCellElem = screen.queryByTestId('last-selected-cell'); + expect(lastPickedCellElem).not.toBeInTheDocument(); + }); + + test('Picked first & last date, pick the date closer to first date', () => { + setup({ + value: new Date(2024, 9, 15), + firstDate: new Date(2024, 9, 15), + lastDate: new Date(2024, 9, 18), + }); + pickCellByDataDate('10/16/2024'); + + const firstPickedCellElem = screen.queryByTestId('first-selected-cell'); + expect(firstPickedCellElem).toHaveDataDate('10/16/2024'); + + const lastPickedCellElem = screen.queryByTestId('last-selected-cell'); + expect(lastPickedCellElem).toHaveDataDate('10/18/2024'); + }); + + test('Picked first & last date, pick the date closer to last date', () => { + setup({ + value: new Date(2024, 9, 15), + firstDate: new Date(2024, 9, 15), + lastDate: new Date(2024, 9, 18), + }); + pickCellByDataDate('10/17/2024'); + + const firstPickedCellElem = screen.queryByTestId('first-selected-cell'); + expect(firstPickedCellElem).toHaveDataDate('10/15/2024'); + + const lastPickedCellElem = screen.queryByTestId('last-selected-cell'); + expect(lastPickedCellElem).toHaveDataDate('10/17/2024'); + }); + + test('Picked first & last date, pick the equidistant date', () => { + setup({ + value: new Date(2024, 9, 15), + firstDate: new Date(2024, 9, 15), + lastDate: new Date(2024, 9, 19), + }); + pickCellByDataDate('10/17/2024'); + + const firstPickedCellElem = screen.queryByTestId('first-selected-cell'); + expect(firstPickedCellElem).toHaveDataDate('10/17/2024'); + + const lastPickedCellElem = screen.queryByTestId('last-selected-cell'); + expect(lastPickedCellElem).toHaveDataDate('10/19/2024'); + }); + }); + + describe('Test dragging', () => { + test('Drag first cell and drop earlier end date', () => { + setup({ + firstDate: new Date(2024, 9, 15), + lastDate: new Date(2024, 9, 18), + value: new Date(2024, 9, 15), + }); + dragAndDropCellByDataDate('10/15/2024', '10/11/2024'); + + const newFirstDateElem = screen.getByTestId('first-selected-cell'); + expect(newFirstDateElem).toHaveDataDate('10/11/2024'); + + const lastDateElem = screen.getByTestId('last-selected-cell'); + expect(lastDateElem).toHaveDataDate('10/18/2024'); + }); + + test('Drag last cell and drop later start date', () => { + setup({ + firstDate: new Date(2024, 9, 15), + lastDate: new Date(2024, 9, 18), + value: new Date(2024, 9, 15), + }); + dragAndDropCellByDataDate('10/18/2024', '10/16/2024'); + + const newFirstDateElem = screen.getByTestId('first-selected-cell'); + expect(newFirstDateElem).toHaveDataDate('10/15/2024'); + + const lastDateElem = screen.getByTestId('last-selected-cell'); + expect(lastDateElem).toHaveDataDate('10/16/2024'); + }); + + test('Drag first cell and drop later end date', () => { + setup({ + firstDate: new Date(2024, 9, 15), + lastDate: new Date(2024, 9, 18), + value: new Date(2024, 9, 15), + }); + dragAndDropCellByDataDate('10/15/2024', '10/20/2024'); + + const newFirstDateElem = screen.getByTestId('first-selected-cell'); + expect(newFirstDateElem).toHaveDataDate('10/18/2024'); + + const lastDateElem = screen.getByTestId('last-selected-cell'); + expect(lastDateElem).toHaveDataDate('10/20/2024'); + }); + + test('Drag last cell and drop earlier start date', () => { + setup({ + firstDate: new Date(2024, 9, 15), + lastDate: new Date(2024, 9, 18), + value: new Date(2024, 9, 15), + }); + dragAndDropCellByDataDate('10/18/2024', '10/11/2024'); + + const newFirstDateElem = screen.getByTestId('first-selected-cell'); + expect(newFirstDateElem).toHaveDataDate('10/11/2024'); + + const lastDateElem = screen.getByTestId('last-selected-cell'); + expect(lastDateElem).toHaveDataDate('10/15/2024'); + }); + }); +}); diff --git a/src/widgets/DatePicker/ui/DatePicker.ui.tsx b/src/widgets/DatePicker/ui/DatePicker.ui.tsx new file mode 100644 index 0000000..6def2a7 --- /dev/null +++ b/src/widgets/DatePicker/ui/DatePicker.ui.tsx @@ -0,0 +1,44 @@ +import { useContext } from 'react'; +import { DndProvider } from 'react-dnd'; +import { HTML5Backend } from 'react-dnd-html5-backend'; + +import { CalendarWidget } from '../../CalendarWidget'; + +import { CustomDragLayer } from './components/CustomDragLayer'; +import { DraggableCell } from './components/DraggableCell'; +import DatePickerContextProvider, { DatePickerContext } from './DatePickerContext'; + +import type { DatePickerContextProviderProps } from './DatePickerContext'; +import type { CalendarWidgetProps } from '../../CalendarWidget'; +import type { FC } from 'react'; + +export type DatePickerProps = CalendarWidgetProps & Omit; + +const MyCalendar: FC = (props) => { + const { toggleCellSelection, getDataTestId } = useContext(DatePickerContext); + + return ( + ({ + onClick: () => { + toggleCellSelection(dataDate); + }, + ...getDataTestId(dataDate), + })} + {...props} + /> + ); +}; + +const DatePicker: FC = (props) => ( + + + + + + + +); + +export default DatePicker; diff --git a/src/widgets/DatePicker/ui/DatePickerContext.tsx b/src/widgets/DatePicker/ui/DatePickerContext.tsx new file mode 100644 index 0000000..6c4d314 --- /dev/null +++ b/src/widgets/DatePicker/ui/DatePickerContext.tsx @@ -0,0 +1,282 @@ +import { + createContext, + useCallback, + useMemo, + useState, +} from 'react'; + +import type { DataDateString } from 'shared/types/date'; +import { daysCountBetween, getDataDateString } from 'shared/utils/date'; +import { exhaustiveCheck } from 'shared/utils/type'; + +import type { FC, ReactNode } from 'react'; + +type DatePickerContextValue = { + firstSelectedDate: DataDateString | null; + lastSelectedDate: DataDateString | null; + isSelectedFirstDate: boolean; + isSelectedLastDate: boolean; + isSelectedBothDate: boolean; + isCellInSelection: (dataDate: DataDateString) => boolean; + toggleCellDate: (params: { dataDate: DataDateString | null; type: 'firstDate' | 'lastDate' }) => void; + toggleCellSelection: (dataDate: DataDateString) => void; + isFirstDate: (dataDate: DataDateString) => boolean; + isLastDate: (dataDate: DataDateString) => boolean; + getDataTestId: (dataDate: DataDateString) => Record<'data-testid', string> | null; +}; +export const DatePickerContext = createContext({} as DatePickerContextValue); + +export type DatePickerContextProviderProps = { + firstDate?: Date; + lastDate?: Date; + onSelect?: (params: { dataDate: DataDateString; date: Date; type: 'firstDate' | 'lastDate' }) => void; + onUnselect?: (params: { dataDate: DataDateString; date: Date; type: 'firstDate' | 'lastDate' }) => void; + children: ReactNode; +}; +const DatePickerContextProvider: FC = (props) => { + const { + children, + firstDate, + lastDate, + onUnselect, + onSelect, + } = props; + + const [firstSelectedDate, setFirstSelectedDate] = useState( + firstDate + ? getDataDateString(firstDate) + : null, + ); + const [lastSelectedDate, setLastSelectedDate] = useState( + lastDate + ? getDataDateString(lastDate) + : null, + ); + + const isSelectedFirstDate = firstSelectedDate !== null; + const isSelectedLastDate = lastSelectedDate !== null; + const isSelectedBothDate = isSelectedFirstDate && isSelectedLastDate; + + const isCellInSelection = useCallback((dataDate: DataDateString) => { + if (!isSelectedFirstDate || !isSelectedLastDate) { + return false; + } + + const dateTime = new Date(dataDate).getTime(); + const firstDateTime = new Date(firstSelectedDate).getTime(); + const lastDateTime = new Date(lastSelectedDate).getTime(); + + return dateTime >= firstDateTime && dateTime <= lastDateTime; + }, [firstSelectedDate, isSelectedFirstDate, isSelectedLastDate, lastSelectedDate]); + + const toggleCellDate = useCallback((params: { dataDate: DataDateString | null; type: 'firstDate' | 'lastDate' }) => { + const { dataDate, type } = params; + + if (dataDate === null) { + let typedDataDate: DataDateString; + + switch (type) { + case 'firstDate': + if (!isSelectedFirstDate) { + return; + } + typedDataDate = firstSelectedDate; + setFirstSelectedDate(null); + break; + + case 'lastDate': + if (!isSelectedLastDate) { + return; + } + typedDataDate = lastSelectedDate; + setLastSelectedDate(null); + + break; + default: + exhaustiveCheck(type); + break; + } + + onUnselect?.({ + type, + // @ts-ignore + dataDate: typedDataDate, + // @ts-ignore + date: new Date(typedDataDate), + }); + + return; + } + + switch (type) { + case 'firstDate': + setFirstSelectedDate(dataDate); + break; + + case 'lastDate': + setLastSelectedDate(dataDate); + break; + + default: + exhaustiveCheck(type); + break; + } + onSelect?.({ + type, + dataDate, + date: new Date(dataDate), + }); + }, [firstSelectedDate, isSelectedFirstDate, isSelectedLastDate, lastSelectedDate, onSelect, onUnselect]); + + const toggleCellSelection = useCallback((dataDate: DataDateString) => { + if (!isSelectedFirstDate && !isSelectedLastDate) { + toggleCellDate({ dataDate, type: 'firstDate' }); + + return; + } + + if (isSelectedFirstDate && !isSelectedLastDate) { + if (dataDate < firstSelectedDate) { + toggleCellDate({ dataDate: firstSelectedDate, type: 'lastDate' }); + toggleCellDate({ dataDate, type: 'firstDate' }); + + return; + } + + if (dataDate > firstSelectedDate) { + toggleCellDate({ dataDate, type: 'lastDate' }); + + return; + } + + toggleCellDate({ dataDate: null, type: 'firstDate' }); + } + + if (!isSelectedFirstDate && isSelectedLastDate) { + if (dataDate < lastSelectedDate) { + toggleCellDate({ dataDate, type: 'firstDate' }); + + return; + } + + if (dataDate > lastSelectedDate) { + toggleCellDate({ dataDate: lastSelectedDate, type: 'firstDate' }); + toggleCellDate({ dataDate, type: 'lastDate' }); + + return; + } + + toggleCellDate({ dataDate: null, type: 'lastDate' }); + } + + if (isSelectedBothDate) { + if (dataDate < firstSelectedDate) { + toggleCellDate({ dataDate, type: 'firstDate' }); + + return; + } + + if (dataDate > lastSelectedDate) { + toggleCellDate({ dataDate, type: 'lastDate' }); + + return; + } + + if (dataDate === firstSelectedDate) { + toggleCellDate({ dataDate: null, type: 'firstDate' }); + + return; + } + + if (dataDate === lastSelectedDate) { + toggleCellDate({ dataDate: null, type: 'lastDate' }); + + return; + } + + const daysToFirstDate = daysCountBetween(new Date(firstSelectedDate), new Date(dataDate)); + const daysToLastDate = daysCountBetween(new Date(lastSelectedDate), new Date(dataDate)); + + if (daysToFirstDate < daysToLastDate) { + toggleCellDate({ dataDate, type: 'firstDate' }); + + return; + } + + if (daysToFirstDate > daysToLastDate) { + toggleCellDate({ dataDate, type: 'lastDate' }); + + return; + } + + toggleCellDate({ dataDate, type: 'firstDate' }); + } + }, [ + firstSelectedDate, + isSelectedBothDate, + isSelectedFirstDate, + isSelectedLastDate, + lastSelectedDate, + toggleCellDate, + ]); + + const isFirstDate = useCallback((dataDate: DataDateString) => dataDate === firstSelectedDate, [firstSelectedDate]); + + const isLastDate = useCallback((dataDate: DataDateString) => dataDate === lastSelectedDate, [lastSelectedDate]); + + const getDataTestId = useCallback((dataDate: DataDateString) => { + if (isFirstDate(dataDate)) { + return { + 'data-testid': 'first-selected-cell', + }; + } + + if (isLastDate(dataDate)) { + return { + 'data-testid': 'last-selected-cell', + }; + } + + if (isCellInSelection(dataDate)) { + return { + 'data-testid': 'cell-in-range', + }; + } + + return null; + }, [isCellInSelection, isFirstDate, isLastDate]); + + const value: DatePickerContextValue = useMemo(() => ({ + firstSelectedDate, + lastSelectedDate, + isSelectedFirstDate, + isSelectedLastDate, + isSelectedBothDate, + isCellInSelection, + toggleCellDate, + toggleCellSelection, + isFirstDate, + isLastDate, + getDataTestId, + }), [ + firstSelectedDate, + getDataTestId, + isCellInSelection, + isFirstDate, + isLastDate, + isSelectedBothDate, + isSelectedFirstDate, + isSelectedLastDate, + lastSelectedDate, + toggleCellDate, + toggleCellSelection, + ]); + + return ( + + {children} + + ); +}; + +export default DatePickerContextProvider; diff --git a/src/widgets/DatePicker/ui/components/CustomDragLayer/index.ts b/src/widgets/DatePicker/ui/components/CustomDragLayer/index.ts new file mode 100644 index 0000000..5aba48e --- /dev/null +++ b/src/widgets/DatePicker/ui/components/CustomDragLayer/index.ts @@ -0,0 +1 @@ +export { default as CustomDragLayer } from './ui/CustomDragLayer.ui'; diff --git a/src/widgets/DatePicker/ui/components/CustomDragLayer/ui/CustomDragLayer.style.module.css b/src/widgets/DatePicker/ui/components/CustomDragLayer/ui/CustomDragLayer.style.module.css new file mode 100644 index 0000000..a37d455 --- /dev/null +++ b/src/widgets/DatePicker/ui/components/CustomDragLayer/ui/CustomDragLayer.style.module.css @@ -0,0 +1,13 @@ +.root { + height: 35px; + width: 35px; + background-color: #1892ff; + opacity: 0.8; + border-radius: 50%; + position: fixed; + z-index: 999; + pointer-events: none; + top: 0; + left: 0; + cursor: grabbing; +} diff --git a/src/widgets/DatePicker/ui/components/CustomDragLayer/ui/CustomDragLayer.ui.tsx b/src/widgets/DatePicker/ui/components/CustomDragLayer/ui/CustomDragLayer.ui.tsx new file mode 100644 index 0000000..467b102 --- /dev/null +++ b/src/widgets/DatePicker/ui/components/CustomDragLayer/ui/CustomDragLayer.ui.tsx @@ -0,0 +1,74 @@ +import { useDragLayer } from 'react-dnd'; + +import { ItemTypes } from 'shared/constants'; + +import classes from './CustomDragLayer.style.module.css'; + +import type { XYCoord } from 'react-dnd'; + +const snapToGrid = (x: number, y: number) => { + const snappedX = Math.round(x / 53) * 53; + const snappedY = Math.round(y / 41) * 41; + + return [snappedX, snappedY]; +}; + +const getDragLayerStyles = ( + initialOffset: XYCoord | null, + currentOffset: XYCoord | null, +) => { + if (!initialOffset || !currentOffset) { + return { + display: 'none', + }; + } + + let { x = 0, y = 0 } = currentOffset; + + x -= initialOffset.x || 0; + y -= initialOffset.y || 0; + // @ts-ignore + [x, y] = snapToGrid(x, y); + x += initialOffset.x || 0; + y += initialOffset.y || 0; + + const transform = `translate(${Math.round(x) + 8.5}px, ${Math.round(y) + 3}px)`; + + return { + transform, + WebkitTransform: transform, + }; +}; + +const CustomDragLayer = () => { + const { + itemType, + isDragging, + sourceClientOffset, + initialSourceClientOffset, + } = useDragLayer((monitor) => ({ + itemType: monitor.getItemType(), + initialSourceClientOffset: monitor.getInitialSourceClientOffset(), + sourceClientOffset: monitor.getSourceClientOffset(), + isDragging: monitor.isDragging(), + })); + + if (itemType !== ItemTypes.CELL) { + return null; + } + + if (!isDragging) { + return null; + } + + const transformStyles = getDragLayerStyles(initialSourceClientOffset, sourceClientOffset); + + return ( +
+ ); +}; + +export default CustomDragLayer; diff --git a/src/widgets/DatePicker/ui/components/DraggableCell/index.ts b/src/widgets/DatePicker/ui/components/DraggableCell/index.ts new file mode 100644 index 0000000..adfb8fa --- /dev/null +++ b/src/widgets/DatePicker/ui/components/DraggableCell/index.ts @@ -0,0 +1 @@ +export { default as DraggableCell } from './ui/DraggableCell.ui'; diff --git a/src/widgets/DatePicker/ui/components/DraggableCell/ui/DraggableCell.style.module.css b/src/widgets/DatePicker/ui/components/DraggableCell/ui/DraggableCell.style.module.css new file mode 100644 index 0000000..79294d7 --- /dev/null +++ b/src/widgets/DatePicker/ui/components/DraggableCell/ui/DraggableCell.style.module.css @@ -0,0 +1,71 @@ +.dateCell { + width: calc((100% / 7)); + height: 40px; + background: aquamarine; + display: flex; + justify-content: center; + align-items: center; + + &:nth-child(odd):not(:last-child) { + width: calc((100% / 7) - 1px); + border-right: 1px solid black; + } + + &:nth-child(even) { + width: calc((100% / 7) - 1px); + border-right: 1px solid black; + } + + .today { + color: red; + font-size: 1.2em; + font-weight: bold; + } + + .outMothRange { + color: darkgrey; + } + + .valueDate { + color: gold; + background: red; + border-radius: 50%; + padding: 5px; + height: 1.2em; + width: 1.2em; + display: inline-flex; + justify-content: center; + align-items: center; + } +} + +.firstDate { + background: #cfe8ff; +} + +.inSelection { + background: #cfe8ff; + color: black; +} + +.lastDate { + background: #cfe8ff; +} + +.selectedDateCell { + height: 35px; + width: 35px; + display: flex; + justify-content: center; + align-items: center; + border-radius: 50%; + background-color: #1892ff; + + span { + color: white !important; + } +} + +.dragging { + background: red; +} diff --git a/src/widgets/DatePicker/ui/components/DraggableCell/ui/DraggableCell.ui.tsx b/src/widgets/DatePicker/ui/components/DraggableCell/ui/DraggableCell.ui.tsx new file mode 100644 index 0000000..a62f7ae --- /dev/null +++ b/src/widgets/DatePicker/ui/components/DraggableCell/ui/DraggableCell.ui.tsx @@ -0,0 +1,195 @@ +import classnames from 'classnames'; +import { useContext, useEffect } from 'react'; +import { + useDrag, + useDragDropManager, + useDrop, +} from 'react-dnd'; +import { getEmptyImage } from 'react-dnd-html5-backend'; + +import { CalendarWidgetContext } from 'widgets/CalendarWidget/ui/CalendarWidgetContext'; +import type { DateCellProps } from 'widgets/CalendarWidget/ui/components/DateCell/ui/DateCell.ui'; +import { DatePickerContext } from 'widgets/DatePicker/ui/DatePickerContext'; + +import { ItemTypes } from 'shared/constants'; +import type { DataDateString } from 'shared/types/date'; +import { getDataDateString } from 'shared/utils/date'; + +import classes from './DraggableCell.style.module.css'; + +import type { FC } from 'react'; + +type DraggableCellProps = DateCellProps; +const DraggableCell: FC = (props) => { + const { + date, + className, + ...restProps + } = props; + + const { + targetMonthIndex, + value, + highlightToday, + highlightValue, + } = useContext(CalendarWidgetContext); + + const { + toggleCellDate, + isFirstDate, + isLastDate, + firstSelectedDate, + lastSelectedDate, + isCellInSelection, + } = useContext(DatePickerContext); + + const todayDate = new Date(); + const dataDate = getDataDateString(date); + const dataToday = getDataDateString(todayDate); + const dataValue = getDataDateString(value); + const isOutMonthRange = date.getMonth() !== targetMonthIndex; + const dragDropManager = useDragDropManager(); + + const [{ isDragging, canDrag }, drag, preview] = useDrag(() => ({ + type: ItemTypes.CELL, + item: { + dataDate, + isFirstDate: isFirstDate(dataDate), + isLastDate: isLastDate(dataDate), + firstSelectedDate, + lastSelectedDate, + }, + collect: (monitor) => ({ + isDragging: monitor.isDragging(), + canDrag: isFirstDate(dataDate) || isLastDate(dataDate), + }), + }), [isFirstDate, isLastDate, dataDate]); + + const onDropHandler = (item: { dataDate: DataDateString }) => { + const type = isFirstDate(item.dataDate) ? 'firstDate' : 'lastDate'; + if (firstSelectedDate !== null && lastSelectedDate !== null) { + if (dataDate < firstSelectedDate && type === 'lastDate') { + toggleCellDate({ dataDate, type: 'firstDate' }); + toggleCellDate({ dataDate: firstSelectedDate, type: 'lastDate' }); + + return; + } + + if (dataDate > lastSelectedDate && type === 'firstDate') { + toggleCellDate({ dataDate, type: 'lastDate' }); + toggleCellDate({ dataDate: lastSelectedDate, type: 'firstDate' }); + + return; + } + } + + toggleCellDate({ dataDate, type }); + }; + + const [{ isOver }, drop] = useDrop(() => ({ + accept: ItemTypes.CELL, + drop: onDropHandler, + collect: (monitor) => ({ + isOver: monitor.isOver(), + }), + }), [onDropHandler]); + + useEffect(() => { + preview(getEmptyImage(), { captureDraggingState: true }); + }, [preview]); + + useEffect(() => { + type DragItem = { + dataDate: DataDateString; + isFirstDate: boolean; + isLastDate: boolean; + firstSelectedDate: DataDateString; + lastSelectedDate: DataDateString; + }; + const dragItem = dragDropManager.getMonitor().getItem() as DragItem | null; + + if (!isOver || !dragItem) { + return; + } + + const isDragLast = dragItem.isLastDate; + const isDragFirst = dragItem.isFirstDate; + + if (isDragFirst) { + if (dataDate < dragItem.lastSelectedDate) { + toggleCellDate({ dataDate, type: 'firstDate' }); + toggleCellDate({ dataDate: dragItem.lastSelectedDate, type: 'lastDate' }); + + return; + } + + if (dataDate > dragItem.lastSelectedDate) { + toggleCellDate({ dataDate, type: 'lastDate' }); + toggleCellDate({ dataDate: dragItem.lastSelectedDate, type: 'firstDate' }); + } + } + + if (isDragLast) { + if (dataDate < dragItem.firstSelectedDate) { + toggleCellDate({ dataDate, type: 'firstDate' }); + toggleCellDate({ dataDate: dragItem.firstSelectedDate, type: 'lastDate' }); + + return; + } + + if (dataDate > dragItem.firstSelectedDate) { + toggleCellDate({ dataDate, type: 'lastDate' }); + toggleCellDate({ dataDate: dragItem.firstSelectedDate, type: 'firstDate' }); + } + } + }, [dataDate, dragDropManager, isFirstDate, isLastDate, isOver, toggleCellDate]); + + return ( +
+
+ + {date.getDate()} + +
+
+ ); +}; + +export default DraggableCell; diff --git a/src/widgets/PageLoader/index.ts b/src/widgets/PageLoader/index.ts new file mode 100644 index 0000000..d658126 --- /dev/null +++ b/src/widgets/PageLoader/index.ts @@ -0,0 +1 @@ +export { default as PageLoader } from './ui/PageLoader.ui'; diff --git a/src/widgets/PageLoader/ui/PageLoader.ui.tsx b/src/widgets/PageLoader/ui/PageLoader.ui.tsx new file mode 100644 index 0000000..bc3a384 --- /dev/null +++ b/src/widgets/PageLoader/ui/PageLoader.ui.tsx @@ -0,0 +1,20 @@ +import CircularProgress from '@mui/material/CircularProgress'; +import { styled } from '@mui/material/styles'; + +const CenteredDiv = styled('div')( + () => ({ + width: '100%', + height: '100%', + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + }), +); + +const PageLoader = () => ( + + + +); + +export default PageLoader; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..b3c1d07 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,62 @@ +{ + "include": [ + "./src", + "./configs", + "./jest.config.ts", + "./webpack.config.ts", + "./__spec__", + ], + "compilerOptions": { + "allowUnreachableCode": false, + "allowUnusedLabels": false, + "alwaysStrict": true, + "exactOptionalPropertyTypes": true, + "noFallthroughCasesInSwitch": true, + "noImplicitAny": true, + "noImplicitOverride": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "noUncheckedIndexedAccess": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "strict": true, + "strictBindCallApply": true, + "strictFunctionTypes": true, + "strictNullChecks": true, + "strictPropertyInitialization": true, + "useUnknownInCatchVariables": true, + + "allowArbitraryExtensions": true, + "allowUmdGlobalAccess": true, + + "module": "ESNext", + "moduleResolution": "Node", + "paths": { + "__spec__/*": ["./__spec__/*"], + "public*": ["./public/*"], + "*": ["./src/*"] + }, + + "resolveJsonModule": true, + "noEmit": true, + "noEmitOnError": true, + "preserveConstEnums": true, + "allowJs": true, + + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "isolatedModules": true, + "jsx": "react-jsx", + "lib": [ + "ESNext", + "DOM" + ], + "skipLibCheck": true + }, + "ts-node": { + "compilerOptions": { + "module": "CommonJS" + } + } +} diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 412ee4b..0000000 --- a/webpack.config.js +++ /dev/null @@ -1,13 +0,0 @@ -const path = require('node:path'); - -const { createConfig } = require('ksv741-react-scripts'); - -module.exports = (env) => createConfig({ - analyze: env?.analyze, - mode: env?.mode, - plugins: { - htmlWebpackPlugin: { - favicon: path.resolve(__dirname, 'public', 'favicon.png'), - }, - }, -}); diff --git a/webpack.config.ts b/webpack.config.ts new file mode 100644 index 0000000..1438964 --- /dev/null +++ b/webpack.config.ts @@ -0,0 +1,48 @@ +import path from 'path'; + +import { createConfig } from 'ksv741-react-scripts'; +import { InjectManifest } from 'workbox-webpack-plugin'; + +import type { WebpackEnv } from 'ksv741-react-scripts'; +import type { WebpackOptions } from 'ksv741-react-scripts/dist/types'; + +const config = (env: WebpackEnv) => { + const baseConfig = createConfig({ + analyze: Boolean(env.analyze), + mode: env.mode ?? 'development', + devServer: { + port: 3003, + }, + plugins: { + htmlWebpackPlugin: { + favicon: path.resolve(__dirname, 'public', 'favicon.png'), + }, + copyPlugin: { + patterns: [ + { + from: path.resolve(__dirname, 'public', 'assets', 'icons'), + to: path.resolve(__dirname, 'build', 'static', 'icons'), + }, + { + from: path.resolve(__dirname, 'public', 'assets', 'screenshots'), + to: path.resolve(__dirname, 'build', 'static', 'screenshots'), + }, + ], + }, + }, + } as WebpackOptions); + + if (env.mode === 'production') { + const swPlugin = new InjectManifest({ + swSrc: './src/src-sw.js', + swDest: 'sw.js', + }); + + // @ts-ignore + baseConfig.plugins.push(swPlugin); + } + + return baseConfig; +}; + +export default config; diff --git a/yarn.lock b/yarn.lock index 2141898..0a9ebbf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,10 +12,10 @@ __metadata: languageName: node linkType: hard -"@adobe/css-tools@npm:^4.3.2": - version: 4.3.3 - resolution: "@adobe/css-tools@npm:4.3.3" - checksum: 10c0/e76e712df713964b87cdf2aca1f0477f19bebd845484d5fcba726d3ec7782366e2f26ec8cb2dcfaf47081a5c891987d8a9f5c3f30d11e1eb3c1848adc27fcb24 +"@adobe/css-tools@npm:^4.4.0": + version: 4.4.0 + resolution: "@adobe/css-tools@npm:4.4.0" + checksum: 10c0/d65ddc719389bf469097df80fb16a8af48a973dea4b57565789d70ac8e7ab4987e6dc0095da3ed5dc16c1b6f8960214a7590312eeda8abd543d91fd0f59e6c94 languageName: node linkType: hard @@ -29,6 +29,19 @@ __metadata: languageName: node linkType: hard +"@apideck/better-ajv-errors@npm:^0.3.1": + version: 0.3.6 + resolution: "@apideck/better-ajv-errors@npm:0.3.6" + dependencies: + json-schema: "npm:^0.4.0" + jsonpointer: "npm:^5.0.0" + leven: "npm:^3.1.0" + peerDependencies: + ajv: ">=8" + checksum: 10c0/f89a1e16ecbc2ada91c56d4391c8345471e385f0b9c38d62c3bccac40ec94482cdfa496d4c2fe0af411e9851a9931c0d5042a8040f52213f603ba6b6fd7f949b + languageName: node + linkType: hard + "@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.16.7, @babel/code-frame@npm:^7.23.5, @babel/code-frame@npm:^7.24.1, @babel/code-frame@npm:^7.24.2": version: 7.24.2 resolution: "@babel/code-frame@npm:7.24.2" @@ -39,6 +52,16 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/code-frame@npm:7.24.7" + dependencies: + "@babel/highlight": "npm:^7.24.7" + picocolors: "npm:^1.0.0" + checksum: 10c0/ab0af539473a9f5aeaac7047e377cb4f4edd255a81d84a76058595f8540784cc3fbe8acf73f1e073981104562490aabfb23008cd66dc677a456a4ed5390fdde6 + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.23.5, @babel/compat-data@npm:^7.24.1": version: 7.24.1 resolution: "@babel/compat-data@npm:7.24.1" @@ -46,6 +69,13 @@ __metadata: languageName: node linkType: hard +"@babel/compat-data@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/compat-data@npm:7.24.7" + checksum: 10c0/dcd93a5632b04536498fbe2be5af1057f635fd7f7090483d8e797878559037e5130b26862ceb359acbae93ed27e076d395ddb4663db6b28a665756ffd02d324f + languageName: node + linkType: hard + "@babel/core@npm:7.24.0": version: 7.24.0 resolution: "@babel/core@npm:7.24.0" @@ -69,7 +99,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:7.24.3, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.21.3, @babel/core@npm:^7.23.9": +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.21.3, @babel/core@npm:^7.23.9": version: 7.24.3 resolution: "@babel/core@npm:7.24.3" dependencies: @@ -92,6 +122,29 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.24.4": + version: 7.24.7 + resolution: "@babel/core@npm:7.24.7" + dependencies: + "@ampproject/remapping": "npm:^2.2.0" + "@babel/code-frame": "npm:^7.24.7" + "@babel/generator": "npm:^7.24.7" + "@babel/helper-compilation-targets": "npm:^7.24.7" + "@babel/helper-module-transforms": "npm:^7.24.7" + "@babel/helpers": "npm:^7.24.7" + "@babel/parser": "npm:^7.24.7" + "@babel/template": "npm:^7.24.7" + "@babel/traverse": "npm:^7.24.7" + "@babel/types": "npm:^7.24.7" + convert-source-map: "npm:^2.0.0" + debug: "npm:^4.1.0" + gensync: "npm:^1.0.0-beta.2" + json5: "npm:^2.2.3" + semver: "npm:^6.3.1" + checksum: 10c0/4004ba454d3c20a46ea66264e06c15b82e9f6bdc35f88819907d24620da70dbf896abac1cb4cc4b6bb8642969e45f4d808497c9054a1388a386cf8c12e9b9e0d + languageName: node + linkType: hard + "@babel/generator@npm:^7.23.6, @babel/generator@npm:^7.24.1, @babel/generator@npm:^7.7.2": version: 7.24.1 resolution: "@babel/generator@npm:7.24.1" @@ -104,6 +157,18 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/generator@npm:7.24.7" + dependencies: + "@babel/types": "npm:^7.24.7" + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + jsesc: "npm:^2.5.1" + checksum: 10c0/06b1f3350baf527a3309e50ffd7065f7aee04dd06e1e7db794ddfde7fe9d81f28df64edd587173f8f9295496a7ddb74b9a185d4bf4de7bb619e6d4ec45c8fd35 + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-annotate-as-pure@npm:7.22.5" @@ -113,6 +178,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-annotate-as-pure@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-annotate-as-pure@npm:7.24.7" + dependencies: + "@babel/types": "npm:^7.24.7" + checksum: 10c0/4679f7df4dffd5b3e26083ae65228116c3da34c3fff2c11ae11b259a61baec440f51e30fd236f7a0435b9d471acd93d0bc5a95df8213cbf02b1e083503d81b9a + languageName: node + linkType: hard + "@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.22.15": version: 7.22.15 resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.22.15" @@ -122,6 +196,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.24.7" + dependencies: + "@babel/traverse": "npm:^7.24.7" + "@babel/types": "npm:^7.24.7" + checksum: 10c0/0ed84abf848c79fb1cd4c1ddac12c771d32c1904d87fc3087f33cfdeb0c2e0db4e7892b74b407d9d8d0c000044f3645a7391a781f788da8410c290bb123a1f13 + languageName: node + linkType: hard + "@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.23.6": version: 7.23.6 resolution: "@babel/helper-compilation-targets@npm:7.23.6" @@ -135,6 +219,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-compilation-targets@npm:7.24.7" + dependencies: + "@babel/compat-data": "npm:^7.24.7" + "@babel/helper-validator-option": "npm:^7.24.7" + browserslist: "npm:^4.22.2" + lru-cache: "npm:^5.1.1" + semver: "npm:^6.3.1" + checksum: 10c0/1d580a9bcacefe65e6bf02ba1dafd7ab278269fef45b5e281d8354d95c53031e019890464e7f9351898c01502dd2e633184eb0bcda49ed2ecd538675ce310f51 + languageName: node + linkType: hard + "@babel/helper-create-class-features-plugin@npm:^7.24.1": version: 7.24.1 resolution: "@babel/helper-create-class-features-plugin@npm:7.24.1" @@ -154,6 +251,25 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-class-features-plugin@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-create-class-features-plugin@npm:7.24.7" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.24.7" + "@babel/helper-environment-visitor": "npm:^7.24.7" + "@babel/helper-function-name": "npm:^7.24.7" + "@babel/helper-member-expression-to-functions": "npm:^7.24.7" + "@babel/helper-optimise-call-expression": "npm:^7.24.7" + "@babel/helper-replace-supers": "npm:^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" + "@babel/helper-split-export-declaration": "npm:^7.24.7" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/6b7b47d70b41c00f39f86790cff67acf2bce0289d52a7c182b28e797f4e0e6d69027e3d06eccf1d54dddc2e5dde1df663bb1932437e5f447aeb8635d8d64a6ab + languageName: node + linkType: hard + "@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.15, @babel/helper-create-regexp-features-plugin@npm:^7.22.5": version: 7.22.15 resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.15" @@ -167,6 +283,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-regexp-features-plugin@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.24.7" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.24.7" + regexpu-core: "npm:^5.3.1" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/ed611a7eb0c71843f9cdc471eeb38767972229f9225f7aaa90d124d7ee0062cf6908fd53ee9c34f731394c429594f06049a7738a71d342e0191d4047b2fc0ac2 + languageName: node + linkType: hard + "@babel/helper-define-polyfill-provider@npm:^0.5.0": version: 0.5.0 resolution: "@babel/helper-define-polyfill-provider@npm:0.5.0" @@ -204,6 +333,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-environment-visitor@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-environment-visitor@npm:7.24.7" + dependencies: + "@babel/types": "npm:^7.24.7" + checksum: 10c0/36ece78882b5960e2d26abf13cf15ff5689bf7c325b10a2895a74a499e712de0d305f8d78bb382dd3c05cfba7e47ec98fe28aab5674243e0625cd38438dd0b2d + languageName: node + linkType: hard + "@babel/helper-function-name@npm:^7.22.5, @babel/helper-function-name@npm:^7.23.0": version: 7.23.0 resolution: "@babel/helper-function-name@npm:7.23.0" @@ -214,6 +352,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-function-name@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-function-name@npm:7.24.7" + dependencies: + "@babel/template": "npm:^7.24.7" + "@babel/types": "npm:^7.24.7" + checksum: 10c0/e5e41e6cf86bd0f8bf272cbb6e7c5ee0f3e9660414174435a46653efba4f2479ce03ce04abff2aa2ef9359cf057c79c06cb7b134a565ad9c0e8a50dcdc3b43c4 + languageName: node + linkType: hard + "@babel/helper-hoist-variables@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-hoist-variables@npm:7.22.5" @@ -223,6 +371,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-hoist-variables@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-hoist-variables@npm:7.24.7" + dependencies: + "@babel/types": "npm:^7.24.7" + checksum: 10c0/19ee37563bbd1219f9d98991ad0e9abef77803ee5945fd85aa7aa62a67c69efca9a801696a1b58dda27f211e878b3327789e6fd2a6f6c725ccefe36774b5ce95 + languageName: node + linkType: hard + "@babel/helper-member-expression-to-functions@npm:^7.23.0": version: 7.23.0 resolution: "@babel/helper-member-expression-to-functions@npm:7.23.0" @@ -232,6 +389,35 @@ __metadata: languageName: node linkType: hard +"@babel/helper-member-expression-to-functions@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-member-expression-to-functions@npm:7.24.7" + dependencies: + "@babel/traverse": "npm:^7.24.7" + "@babel/types": "npm:^7.24.7" + checksum: 10c0/9638c1d33cf6aba028461ccd3db6061c76ff863ca0d5013dd9a088bf841f2f77c46956493f9da18355c16759449d23b74cc1de4da357ade5c5c34c858f840f0a + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.10.4, @babel/helper-module-imports@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-module-imports@npm:7.24.7" + dependencies: + "@babel/traverse": "npm:^7.24.7" + "@babel/types": "npm:^7.24.7" + checksum: 10c0/97c57db6c3eeaea31564286e328a9fb52b0313c5cfcc7eee4bc226aebcf0418ea5b6fe78673c0e4a774512ec6c86e309d0f326e99d2b37bfc16a25a032498af0 + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.16.7": + version: 7.24.6 + resolution: "@babel/helper-module-imports@npm:7.24.6" + dependencies: + "@babel/types": "npm:^7.24.6" + checksum: 10c0/e0db3fbfcd963d138f0792ff626f940a576fcf212d02b8fe6478dccf3421bd1c2a76f8e69c7450c049985e7b63b30be309a24eeeb6ad7c2137a31b676a095a84 + languageName: node + linkType: hard + "@babel/helper-module-imports@npm:^7.22.15, @babel/helper-module-imports@npm:^7.24.1": version: 7.24.3 resolution: "@babel/helper-module-imports@npm:7.24.3" @@ -256,6 +442,21 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-module-transforms@npm:7.24.7" + dependencies: + "@babel/helper-environment-visitor": "npm:^7.24.7" + "@babel/helper-module-imports": "npm:^7.24.7" + "@babel/helper-simple-access": "npm:^7.24.7" + "@babel/helper-split-export-declaration": "npm:^7.24.7" + "@babel/helper-validator-identifier": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/4f311755fcc3b4cbdb689386309cdb349cf0575a938f0b9ab5d678e1a81bbb265aa34ad93174838245f2ac7ff6d5ddbd0104638a75e4e961958ed514355687b6 + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-optimise-call-expression@npm:7.22.5" @@ -265,6 +466,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-optimise-call-expression@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-optimise-call-expression@npm:7.24.7" + dependencies: + "@babel/types": "npm:^7.24.7" + checksum: 10c0/ca6a9884705dea5c95a8b3ce132d1e3f2ae951ff74987d400d1d9c215dae9c0f9e29924d8f8e131e116533d182675bc261927be72f6a9a2968eaeeaa51eb1d0f + languageName: node + linkType: hard + "@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.0, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": version: 7.24.0 resolution: "@babel/helper-plugin-utils@npm:7.24.0" @@ -272,6 +482,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-plugin-utils@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-plugin-utils@npm:7.24.7" + checksum: 10c0/c3d38cd9b3520757bb4a279255cc3f956fc0ac1c193964bd0816ebd5c86e30710be8e35252227e0c9d9e0f4f56d9b5f916537f2bc588084b0988b4787a967d31 + languageName: node + linkType: hard + "@babel/helper-remap-async-to-generator@npm:^7.22.20": version: 7.22.20 resolution: "@babel/helper-remap-async-to-generator@npm:7.22.20" @@ -285,6 +502,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-remap-async-to-generator@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-remap-async-to-generator@npm:7.24.7" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.24.7" + "@babel/helper-environment-visitor": "npm:^7.24.7" + "@babel/helper-wrap-function": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/4e7fa2cdcbc488e41c27066c16e562857ef3c5c2bfe70d2f1e32e9ee7546b17c3fc1c20d05bf2a7f1c291bd9e7a0a219f6a9fa387209013294be79a26fcfe64d + languageName: node + linkType: hard + "@babel/helper-replace-supers@npm:^7.24.1": version: 7.24.1 resolution: "@babel/helper-replace-supers@npm:7.24.1" @@ -298,6 +528,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-replace-supers@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-replace-supers@npm:7.24.7" + dependencies: + "@babel/helper-environment-visitor": "npm:^7.24.7" + "@babel/helper-member-expression-to-functions": "npm:^7.24.7" + "@babel/helper-optimise-call-expression": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/0e133bb03371dee78e519c334a09c08e1493103a239d9628db0132dfaac3fc16380479ca3c590d278a9b71b624030a338c18ebbfe6d430ebb2e4653775c4b3e3 + languageName: node + linkType: hard + "@babel/helper-simple-access@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-simple-access@npm:7.22.5" @@ -307,6 +550,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-simple-access@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-simple-access@npm:7.24.7" + dependencies: + "@babel/traverse": "npm:^7.24.7" + "@babel/types": "npm:^7.24.7" + checksum: 10c0/7230e419d59a85f93153415100a5faff23c133d7442c19e0cd070da1784d13cd29096ee6c5a5761065c44e8164f9f80e3a518c41a0256df39e38f7ad6744fed7 + languageName: node + linkType: hard + "@babel/helper-skip-transparent-expression-wrappers@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.22.5" @@ -316,6 +569,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.24.7" + dependencies: + "@babel/traverse": "npm:^7.24.7" + "@babel/types": "npm:^7.24.7" + checksum: 10c0/e3a9b8ac9c262ac976a1bcb5fe59694db5e6f0b4f9e7bdba5c7693b8b5e28113c23bdaa60fe8d3ec32a337091b67720b2053bcb3d5655f5406536c3d0584242b + languageName: node + linkType: hard + "@babel/helper-split-export-declaration@npm:^7.22.6": version: 7.22.6 resolution: "@babel/helper-split-export-declaration@npm:7.22.6" @@ -325,6 +588,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-split-export-declaration@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-split-export-declaration@npm:7.24.7" + dependencies: + "@babel/types": "npm:^7.24.7" + checksum: 10c0/0254577d7086bf09b01bbde98f731d4fcf4b7c3fa9634fdb87929801307c1f6202a1352e3faa5492450fa8da4420542d44de604daf540704ff349594a78184f6 + languageName: node + linkType: hard + "@babel/helper-string-parser@npm:^7.23.4": version: 7.24.1 resolution: "@babel/helper-string-parser@npm:7.24.1" @@ -332,6 +604,20 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.24.6": + version: 7.24.6 + resolution: "@babel/helper-string-parser@npm:7.24.6" + checksum: 10c0/95115bf676e92c4e99166395649108d97447e6cabef1fabaec8cdbc53a43f27b5df2268ff6534439d405bc1bd06685b163eb3b470455bd49f69159dada414145 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-string-parser@npm:7.24.7" + checksum: 10c0/47840c7004e735f3dc93939c77b099bb41a64bf3dda0cae62f60e6f74a5ff80b63e9b7cf77b5ec25a324516381fc994e1f62f922533236a8e3a6af57decb5e1e + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.22.20": version: 7.22.20 resolution: "@babel/helper-validator-identifier@npm:7.22.20" @@ -339,6 +625,20 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.24.6": + version: 7.24.6 + resolution: "@babel/helper-validator-identifier@npm:7.24.6" + checksum: 10c0/d29d2e3fca66c31867a009014169b93f7bc21c8fc1dd7d0b9d85d7a4000670526ff2222d966febb75a6e12f9859a31d1e75b558984e28ecb69651314dd0a6fd1 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-validator-identifier@npm:7.24.7" + checksum: 10c0/87ad608694c9477814093ed5b5c080c2e06d44cb1924ae8320474a74415241223cc2a725eea2640dd783ff1e3390e5f95eede978bc540e870053152e58f1d651 + languageName: node + linkType: hard + "@babel/helper-validator-option@npm:^7.22.15, @babel/helper-validator-option@npm:^7.23.5": version: 7.23.5 resolution: "@babel/helper-validator-option@npm:7.23.5" @@ -346,6 +646,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-option@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-validator-option@npm:7.24.7" + checksum: 10c0/21aea2b7bc5cc8ddfb828741d5c8116a84cbc35b4a3184ec53124f08e09746f1f67a6f9217850188995ca86059a7942e36d8965a6730784901def777b7e8a436 + languageName: node + linkType: hard + "@babel/helper-wrap-function@npm:^7.22.20": version: 7.22.20 resolution: "@babel/helper-wrap-function@npm:7.22.20" @@ -357,6 +664,18 @@ __metadata: languageName: node linkType: hard +"@babel/helper-wrap-function@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-wrap-function@npm:7.24.7" + dependencies: + "@babel/helper-function-name": "npm:^7.24.7" + "@babel/template": "npm:^7.24.7" + "@babel/traverse": "npm:^7.24.7" + "@babel/types": "npm:^7.24.7" + checksum: 10c0/d5689f031bf0eb38c0d7fad6b7e320ddef4bfbdf08d12d7d76ef41b7ca365a32721e74cb5ed5a9a9ec634bc20f9b7a27314fa6fb08f1576b8f6d8330fcea6f47 + languageName: node + linkType: hard + "@babel/helpers@npm:^7.24.0, @babel/helpers@npm:^7.24.1": version: 7.24.1 resolution: "@babel/helpers@npm:7.24.1" @@ -368,6 +687,16 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helpers@npm:7.24.7" + dependencies: + "@babel/template": "npm:^7.24.7" + "@babel/types": "npm:^7.24.7" + checksum: 10c0/aa8e230f6668773e17e141dbcab63e935c514b4b0bf1fed04d2eaefda17df68e16b61a56573f7f1d4d1e605ce6cc162b5f7e9fdf159fde1fd9b77c920ae47d27 + languageName: node + linkType: hard + "@babel/highlight@npm:^7.24.2": version: 7.24.2 resolution: "@babel/highlight@npm:7.24.2" @@ -380,6 +709,18 @@ __metadata: languageName: node linkType: hard +"@babel/highlight@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/highlight@npm:7.24.7" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.24.7" + chalk: "npm:^2.4.2" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.0.0" + checksum: 10c0/674334c571d2bb9d1c89bdd87566383f59231e16bcdcf5bb7835babdf03c9ae585ca0887a7b25bdf78f303984af028df52831c7989fecebb5101cc132da9393a + languageName: node + linkType: hard + "@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.24.0, @babel/parser@npm:^7.24.1": version: 7.24.1 resolution: "@babel/parser@npm:7.24.1" @@ -389,6 +730,27 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/parser@npm:7.24.7" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/8b244756872185a1c6f14b979b3535e682ff08cb5a2a5fd97cc36c017c7ef431ba76439e95e419d43000c5b07720495b00cf29a7f0d9a483643d08802b58819b + languageName: node + linkType: hard + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.24.7" + dependencies: + "@babel/helper-environment-visitor": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/394c30e2b708ad385fa1219528e039066a1f1cb40f47986f283878848fd354c745e6397f588b4e5a046ee8d64bfdf4c208e4c3dfbdcfb2fd34315ec67c64e7af + languageName: node + linkType: hard + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.23.3, @babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.24.1" @@ -400,6 +762,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/a36307428ecc1a01b00cf90812335eed1575d13f211ab24fe4d0c55c28a2fcbd4135f142efabc3b277b2a8e09ee05df594a1272353f061b63829495b5dcfdb96 + languageName: node + linkType: hard + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.23.3, @babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.24.1" @@ -413,6 +786,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" + "@babel/plugin-transform-optional-chaining": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.13.0 + checksum: 10c0/aeb6e7aa363a47f815cf956ea1053c5dd8b786a17799f065c9688ba4b0051fe7565d258bbe9400bfcbfb3114cb9fda66983e10afe4d750bc70ff75403e15dd36 + languageName: node + linkType: hard + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.23.7, @babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.24.1" @@ -425,6 +811,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.24.7" + dependencies: + "@babel/helper-environment-visitor": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/2b52a73e444f6adc73f927b623e53a4cf64397170dd1071268536df1b3db1e02131418c8dc91351af48837a6298212118f4a72d5407f8005cf9a732370a315b0 + languageName: node + linkType: hard + "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": version: 7.21.0-placeholder-for-preset-env.2 resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" @@ -511,6 +909,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-import-assertions@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/b82c53e095274ee71c248551352d73441cf65b3b3fc0107258ba4e9aef7090772a425442b3ed1c396fa207d0efafde8929c87a17d3c885b3ca2021316e87e246 + languageName: node + linkType: hard + "@babel/plugin-syntax-import-attributes@npm:^7.23.3, @babel/plugin-syntax-import-attributes@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-syntax-import-attributes@npm:7.24.1" @@ -522,6 +931,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-import-attributes@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/eccc54d0f03c96d0eec7a6e2fa124dadbc7298345b62ffc4238f173308c4325b5598f139695ff05a95cf78412ef6903599e4b814496612bf39aad4715a16375b + languageName: node + linkType: hard + "@babel/plugin-syntax-import-meta@npm:^7.10.4, @babel/plugin-syntax-import-meta@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" @@ -677,6 +1097,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-arrow-functions@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/6ac05a54e5582f34ac6d5dc26499e227227ec1c7fa6fc8de1f3d40c275f140d3907f79bbbd49304da2d7008a5ecafb219d0b71d78ee3290ca22020d878041245 + languageName: node + linkType: hard + "@babel/plugin-transform-async-generator-functions@npm:^7.23.9, @babel/plugin-transform-async-generator-functions@npm:^7.24.3": version: 7.24.3 resolution: "@babel/plugin-transform-async-generator-functions@npm:7.24.3" @@ -691,6 +1122,20 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-async-generator-functions@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.24.7" + dependencies: + "@babel/helper-environment-visitor": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-remap-async-to-generator": "npm:^7.24.7" + "@babel/plugin-syntax-async-generators": "npm:^7.8.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/6b5e33ae66dce0afce9b06d8dace6fa052528e60f7622aa6cfd3e71bd372ca5079d426e78336ca564bc0d5f37acbcda1b21f4fe656fcb642f1a93a697ab39742 + languageName: node + linkType: hard + "@babel/plugin-transform-async-to-generator@npm:^7.23.3, @babel/plugin-transform-async-to-generator@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-async-to-generator@npm:7.24.1" @@ -704,6 +1149,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-async-to-generator@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.24.7" + dependencies: + "@babel/helper-module-imports": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-remap-async-to-generator": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/83c82e243898875af8457972a26ab29baf8a2078768ee9f35141eb3edff0f84b165582a2ff73e90a9e08f5922bf813dbf15a85c1213654385198f4591c0dc45d + languageName: node + linkType: hard + "@babel/plugin-transform-block-scoped-functions@npm:^7.23.3, @babel/plugin-transform-block-scoped-functions@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.24.1" @@ -715,6 +1173,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-block-scoped-functions@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/113e86de4612ae91773ff5cb6b980f01e1da7e26ae6f6012127415d7ae144e74987bc23feb97f63ba4bc699331490ddea36eac004d76a20d5369e4cc6a7f61cd + languageName: node + linkType: hard + "@babel/plugin-transform-block-scoping@npm:^7.23.4, @babel/plugin-transform-block-scoping@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-block-scoping@npm:7.24.1" @@ -726,6 +1195,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-block-scoping@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-block-scoping@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/dcbc5e385c0ca5fb5736b1c720c90755cffe9f91d8c854f82e61e59217dd3f6c91b3633eeee4b55a89d3f59e5275d0f5b0b1b1363d4fa70c49c468b55aa87700 + languageName: node + linkType: hard + "@babel/plugin-transform-class-properties@npm:^7.23.3, @babel/plugin-transform-class-properties@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-class-properties@npm:7.24.1" @@ -738,6 +1218,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-class-properties@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-class-properties@npm:7.24.7" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/75018a466c7ede3d2397e158891c224ba7fca72864506ce067ddbc02fc65191d44da4d6379c996d0c7f09019e26b5c3f5f1d3a639cd98366519723886f0689d0 + languageName: node + linkType: hard + "@babel/plugin-transform-class-static-block@npm:^7.23.4, @babel/plugin-transform-class-static-block@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-class-static-block@npm:7.24.1" @@ -751,6 +1243,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-class-static-block@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-class-static-block@npm:7.24.7" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.12.0 + checksum: 10c0/b0ade39a3d09dce886f79dbd5907c3d99b48167eddb6b9bbde24a0598129654d7017e611c20494cdbea48b07ac14397cd97ea34e3754bbb2abae4e698128eccb + languageName: node + linkType: hard + "@babel/plugin-transform-classes@npm:^7.23.8, @babel/plugin-transform-classes@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-classes@npm:7.24.1" @@ -769,6 +1274,24 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-classes@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-classes@npm:7.24.7" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.24.7" + "@babel/helper-compilation-targets": "npm:^7.24.7" + "@babel/helper-environment-visitor": "npm:^7.24.7" + "@babel/helper-function-name": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-replace-supers": "npm:^7.24.7" + "@babel/helper-split-export-declaration": "npm:^7.24.7" + globals: "npm:^11.1.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e51dba7ce8b770d1eee929e098d5a3be3efc3e8b941e22dda7d0097dc4e7be5feabd2da7b707ac06fcac5661b31223c541941dec08ce76c1faa55544d87d06ec + languageName: node + linkType: hard + "@babel/plugin-transform-computed-properties@npm:^7.23.3, @babel/plugin-transform-computed-properties@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-computed-properties@npm:7.24.1" @@ -781,6 +1304,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-computed-properties@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-computed-properties@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/template": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/25636dbc1f605c0b8bc60aa58628a916b689473d11551c9864a855142e36742fe62d4a70400ba3b74902338e77fb3d940376c0a0ba154b6b7ec5367175233b49 + languageName: node + linkType: hard + "@babel/plugin-transform-destructuring@npm:^7.23.3, @babel/plugin-transform-destructuring@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-destructuring@npm:7.24.1" @@ -792,6 +1327,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-destructuring@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-destructuring@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/929f07a807fb62230bfbf881cfcedf187ac5daf2f1b01da94a75c7a0f6f72400268cf4bcfee534479e43260af8193e42c31ee03c8b0278ba77d0036ed6709c27 + languageName: node + linkType: hard + "@babel/plugin-transform-dotall-regex@npm:^7.23.3, @babel/plugin-transform-dotall-regex@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-dotall-regex@npm:7.24.1" @@ -804,6 +1350,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-dotall-regex@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.24.7" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/793f14c9494972d294b7e7b97b747f47874b6d57d7804d3443c701becf5db192c9311be6a1835c07664486df1f5c60d33196c36fb7e11a53015e476b4c145b33 + languageName: node + linkType: hard + "@babel/plugin-transform-duplicate-keys@npm:^7.23.3, @babel/plugin-transform-duplicate-keys@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-duplicate-keys@npm:7.24.1" @@ -815,6 +1373,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-duplicate-keys@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/75ff7ec1117ac500e77bf20a144411d39c0fdd038f108eec061724123ce6d1bb8d5bd27968e466573ee70014f8be0043361cdb0ef388f8a182d1d97ad67e51b9 + languageName: node + linkType: hard + "@babel/plugin-transform-dynamic-import@npm:^7.23.4, @babel/plugin-transform-dynamic-import@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-dynamic-import@npm:7.24.1" @@ -827,6 +1396,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-dynamic-import@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/eeda48372efd0a5103cb22dadb13563c975bce18ae85daafbb47d57bb9665d187da9d4fe8d07ac0a6e1288afcfcb73e4e5618bf75ff63fddf9736bfbf225203b + languageName: node + linkType: hard + "@babel/plugin-transform-exponentiation-operator@npm:^7.23.3, @babel/plugin-transform-exponentiation-operator@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.24.1" @@ -839,6 +1420,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-exponentiation-operator@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.24.7" + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/ace3e11c94041b88848552ba8feb39ae4d6cad3696d439ff51445bd2882d8b8775d85a26c2c0edb9b5e38c9e6013cc11b0dea89ec8f93c7d9d7ee95e3645078c + languageName: node + linkType: hard + "@babel/plugin-transform-export-namespace-from@npm:^7.23.4, @babel/plugin-transform-export-namespace-from@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-export-namespace-from@npm:7.24.1" @@ -851,6 +1444,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-export-namespace-from@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4e144d7f1c57bc63b4899dbbbdfed0880f2daa75ea9c7251c7997f106e4b390dc362175ab7830f11358cb21f6b972ca10a43a2e56cd789065f7606b082674c0c + languageName: node + linkType: hard + "@babel/plugin-transform-for-of@npm:^7.23.6, @babel/plugin-transform-for-of@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-for-of@npm:7.24.1" @@ -863,6 +1468,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-for-of@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-for-of@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/77629b1173e55d07416f05ba7353caa09d2c2149da2ca26721ab812209b63689d1be45116b68eadc011c49ced59daf5320835b15245eb7ae93ae0c5e8277cfc0 + languageName: node + linkType: hard + "@babel/plugin-transform-function-name@npm:^7.23.3, @babel/plugin-transform-function-name@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-function-name@npm:7.24.1" @@ -876,6 +1493,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-function-name@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-function-name@npm:7.24.7" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.24.7" + "@babel/helper-function-name": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/3e9642428d6952851850d89ea9307d55946528d18973784d0e2f04a651b23bd9924dd8a2641c824b483bd4ab1223bab1d2f6a1106a939998f7ced512cb60ac5b + languageName: node + linkType: hard + "@babel/plugin-transform-json-strings@npm:^7.23.4, @babel/plugin-transform-json-strings@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-json-strings@npm:7.24.1" @@ -888,6 +1518,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-json-strings@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-json-strings@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/plugin-syntax-json-strings": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/17c72cd5bf3e90e722aabd333559275f3309e3fa0b9cea8c2944ab83ae01502c71a2be05da5101edc02b3fc8df15a8dbb9b861cbfcc8a52bf5e797cf01d3a40a + languageName: node + linkType: hard + "@babel/plugin-transform-literals@npm:^7.23.3, @babel/plugin-transform-literals@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-literals@npm:7.24.1" @@ -899,6 +1541,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-literals@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-literals@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/9f3f6f3831929cd2a977748c07addf9944d5cccb50bd3a24a58beb54f91f00d6cacd3d7831d13ffe1ad6f8aba0aefd7bca5aec65d63b77f39c62ad1f2d484a3e + languageName: node + linkType: hard + "@babel/plugin-transform-logical-assignment-operators@npm:^7.23.4, @babel/plugin-transform-logical-assignment-operators@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.24.1" @@ -911,6 +1564,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-logical-assignment-operators@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/dbe882eb9053931f2ab332c50fc7c2a10ef507d6421bd9831adbb4cb7c9f8e1e5fbac4fbd2e007f6a1bf1df1843547559434012f118084dc0bf42cda3b106272 + languageName: node + linkType: hard + "@babel/plugin-transform-member-expression-literals@npm:^7.23.3, @babel/plugin-transform-member-expression-literals@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-member-expression-literals@npm:7.24.1" @@ -922,6 +1587,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-member-expression-literals@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e789ae359bdf2d20e90bedef18dfdbd965c9ebae1cee398474a0c349590fda7c8b874e1a2ceee62e47e5e6ec1730e76b0f24e502164357571854271fc12cc684 + languageName: node + linkType: hard + "@babel/plugin-transform-modules-amd@npm:^7.23.3, @babel/plugin-transform-modules-amd@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-modules-amd@npm:7.24.1" @@ -934,6 +1610,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-amd@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-modules-amd@npm:7.24.7" + dependencies: + "@babel/helper-module-transforms": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/6df7de7fce34117ca4b2fa07949b12274c03668cbfe21481c4037b6300796d50ae40f4f170527b61b70a67f26db906747797e30dbd0d9809a441b6e220b5728f + languageName: node + linkType: hard + "@babel/plugin-transform-modules-commonjs@npm:^7.23.3, @babel/plugin-transform-modules-commonjs@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.1" @@ -947,6 +1635,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-commonjs@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.7" + dependencies: + "@babel/helper-module-transforms": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-simple-access": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/9442292b3daf6a5076cdc3c4c32bf423bda824ccaeb0dd0dc8b3effaa1fecfcb0130ae6e647fef12a5d5ff25bcc99a0d6bfc6d24a7525345e1bcf46fcdf81752 + languageName: node + linkType: hard + "@babel/plugin-transform-modules-systemjs@npm:^7.23.9, @babel/plugin-transform-modules-systemjs@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-modules-systemjs@npm:7.24.1" @@ -961,6 +1662,20 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-systemjs@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.24.7" + dependencies: + "@babel/helper-hoist-variables": "npm:^7.24.7" + "@babel/helper-module-transforms": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-validator-identifier": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e2a795e0a6baafe26f4a74010622212ddd873170742d673f450e0097f8d984f6e6a95eb8ce41b05071ee9790c4be088b33801aaab3f78ee202c567634e52a331 + languageName: node + linkType: hard + "@babel/plugin-transform-modules-umd@npm:^7.23.3, @babel/plugin-transform-modules-umd@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-modules-umd@npm:7.24.1" @@ -973,6 +1688,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-umd@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-modules-umd@npm:7.24.7" + dependencies: + "@babel/helper-module-transforms": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/7791d290121db210e4338b94b4a069a1a79e4c7a8d7638d8159a97b281851bbed3048dac87a4ae718ad963005e6c14a5d28e6db2eeb2b04e031cee92fb312f85 + languageName: node + linkType: hard + "@babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.22.5" @@ -985,6 +1712,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.24.7" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/41a0b0f2d0886318237440aa3b489f6d0305361d8671121777d9ff89f9f6de9d0c02ce93625049061426c8994064ef64deae8b819d1b14c00374a6a2336fb5d9 + languageName: node + linkType: hard + "@babel/plugin-transform-new-target@npm:^7.23.3, @babel/plugin-transform-new-target@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-new-target@npm:7.24.1" @@ -996,6 +1735,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-new-target@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-new-target@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2540808a35e1a978e537334c43dab439cf24c93e7beb213a2e71902f6710e60e0184316643790c0a6644e7a8021e52f7ab8165e6b3e2d6651be07bdf517b67df + languageName: node + linkType: hard + "@babel/plugin-transform-nullish-coalescing-operator@npm:^7.23.4, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.24.1" @@ -1008,6 +1758,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/7243c8ff734ed5ef759dd8768773c4b443c12e792727e759a1aec2c7fa2bfdd24f1ecb42e292a7b3d8bd3d7f7b861cf256a8eb4ba144fc9cc463892c303083d9 + languageName: node + linkType: hard + "@babel/plugin-transform-numeric-separator@npm:^7.23.4, @babel/plugin-transform-numeric-separator@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-numeric-separator@npm:7.24.1" @@ -1020,6 +1782,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-numeric-separator@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e18e09ca5a6342645d00ede477731aa6e8714ff357efc9d7cda5934f1703b3b6fb7d3298dce3ce3ba53e9ff1158eab8f1aadc68874cc21a6099d33a1ca457789 + languageName: node + linkType: hard + "@babel/plugin-transform-object-rest-spread@npm:^7.24.0, @babel/plugin-transform-object-rest-spread@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-object-rest-spread@npm:7.24.1" @@ -1034,6 +1808,20 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-object-rest-spread@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.24.7" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" + "@babel/plugin-transform-parameters": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/9ad64bc003f583030f9da50614b485852f8edac93f8faf5d1cd855201a4852f37c5255ae4daf70dd4375bdd4874e16e39b91f680d4668ec219ba05441ce286eb + languageName: node + linkType: hard + "@babel/plugin-transform-object-super@npm:^7.23.3, @babel/plugin-transform-object-super@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-object-super@npm:7.24.1" @@ -1046,6 +1834,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-object-super@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-object-super@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-replace-supers": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/770cebb4b4e1872c216b17069db9a13b87dfee747d359dc56d9fcdd66e7544f92dc6ab1861a4e7e0528196aaff2444e4f17dc84efd8eaf162d542b4ba0943869 + languageName: node + linkType: hard + "@babel/plugin-transform-optional-catch-binding@npm:^7.23.4, @babel/plugin-transform-optional-catch-binding@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.24.1" @@ -1058,6 +1858,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-optional-catch-binding@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/1e2f10a018f7d03b3bde6c0b70d063df8d5dd5209861d4467726cf834f5e3d354e2276079dc226aa8e6ece35f5c9b264d64b8229a8bb232829c01e561bcfb07a + languageName: node + linkType: hard + "@babel/plugin-transform-optional-chaining@npm:^7.23.4, @babel/plugin-transform-optional-chaining@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-optional-chaining@npm:7.24.1" @@ -1071,6 +1883,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-optional-chaining@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" + "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/b9e3649b299e103b0d1767bbdba56574d065ff776e5350403b7bfd4e3982743c0cdb373d33bdbf94fa3c322d155e45d0aad946acf0aa741b870aed22dfec8b8e + languageName: node + linkType: hard + "@babel/plugin-transform-parameters@npm:^7.23.3, @babel/plugin-transform-parameters@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-parameters@npm:7.24.1" @@ -1082,6 +1907,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-parameters@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-parameters@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/53bf190d6926771545d5184f1f5f3f5144d0f04f170799ad46a43f683a01fab8d5fe4d2196cf246774530990c31fe1f2b9f0def39f0a5ddbb2340b924f5edf01 + languageName: node + linkType: hard + "@babel/plugin-transform-private-methods@npm:^7.23.3, @babel/plugin-transform-private-methods@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-private-methods@npm:7.24.1" @@ -1094,6 +1930,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-private-methods@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-private-methods@npm:7.24.7" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5b7bf923b738fbe3ad6c33b260e0a7451be288edfe4ef516303fa787a1870cd87533bfbf61abb779c22ed003c2fc484dec2436fe75a48756f686c0241173d364 + languageName: node + linkType: hard + "@babel/plugin-transform-private-property-in-object@npm:^7.23.4, @babel/plugin-transform-private-property-in-object@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-private-property-in-object@npm:7.24.1" @@ -1108,6 +1956,20 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-private-property-in-object@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.24.7" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.24.7" + "@babel/helper-create-class-features-plugin": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c6fa7defb90b1b0ed46f24ff94ff2e77f44c1f478d1090e81712f33cf992dda5ba347016f030082a2f770138bac6f4a9c2c1565e9f767a125901c77dd9c239ba + languageName: node + linkType: hard + "@babel/plugin-transform-property-literals@npm:^7.23.3, @babel/plugin-transform-property-literals@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-property-literals@npm:7.24.1" @@ -1119,6 +1981,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-property-literals@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-property-literals@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/52564b58f3d111dc02d241d5892a4b01512e98dfdf6ef11b0ed62f8b11b0acacccef0fc229b44114fe8d1a57a8b70780b11bdd18b807d3754a781a07d8f57433 + languageName: node + linkType: hard + "@babel/plugin-transform-react-constant-elements@npm:^7.21.3": version: 7.24.1 resolution: "@babel/plugin-transform-react-constant-elements@npm:7.24.1" @@ -1191,6 +2064,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-regenerator@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-regenerator@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + regenerator-transform: "npm:^0.15.2" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/d2dc2c788fdae9d97217e70d46ba8ca9db0035c398dc3e161552b0c437113719a75c04f201f9c91ddc8d28a1da60d0b0853f616dead98a396abb9c845c44892b + languageName: node + linkType: hard + "@babel/plugin-transform-reserved-words@npm:^7.23.3, @babel/plugin-transform-reserved-words@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-reserved-words@npm:7.24.1" @@ -1202,6 +2087,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-reserved-words@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-reserved-words@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2229de2768615e7f5dc0bbc55bc121b5678fd6d2febd46c74a58e42bb894d74cd5955c805880f4e02d0e1cf94f6886270eda7fafc1be9305a1ec3b9fd1d063f5 + languageName: node + linkType: hard + "@babel/plugin-transform-shorthand-properties@npm:^7.23.3, @babel/plugin-transform-shorthand-properties@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-shorthand-properties@npm:7.24.1" @@ -1213,6 +2109,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-shorthand-properties@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/41b155bdbb3be66618358488bf7731b3b2e8fff2de3dbfd541847720a9debfcec14db06a117abedd03c9cd786db20a79e2a86509a4f19513f6e1b610520905cf + languageName: node + linkType: hard + "@babel/plugin-transform-spread@npm:^7.23.3, @babel/plugin-transform-spread@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-spread@npm:7.24.1" @@ -1225,6 +2132,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-spread@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-spread@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/facba1553035f76b0d2930d4ada89a8cd0f45b79579afd35baefbfaf12e3b86096995f4b0c402cf9ee23b3f2ea0a4460c3b1ec0c192d340962c948bb223d4e66 + languageName: node + linkType: hard + "@babel/plugin-transform-sticky-regex@npm:^7.23.3, @babel/plugin-transform-sticky-regex@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-sticky-regex@npm:7.24.1" @@ -1236,6 +2155,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-sticky-regex@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5a74ed2ed0a3ab51c3d15fcaf09d9e2fe915823535c7a4d7b019813177d559b69677090e189ec3d5d08b619483eb5ad371fbcfbbff5ace2a76ba33ee566a1109 + languageName: node + linkType: hard + "@babel/plugin-transform-template-literals@npm:^7.23.3, @babel/plugin-transform-template-literals@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-template-literals@npm:7.24.1" @@ -1247,6 +2177,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-template-literals@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-template-literals@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/3630f966257bcace122f04d3157416a09d40768c44c3a800855da81146b009187daa21859d1c3b7d13f4e19e8888e60613964b175b2275d451200fb6d8d6cfe6 + languageName: node + linkType: hard + "@babel/plugin-transform-typeof-symbol@npm:^7.23.3, @babel/plugin-transform-typeof-symbol@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-typeof-symbol@npm:7.24.1" @@ -1258,6 +2199,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-typeof-symbol@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5649e7260a138681e68b296ab5931e2b1f132f287d6b4131d49b24f9dc20d62902b7e9d63c4d2decd5683b41df35ef4b9b03f58c7f9f65e4c25a6d8bbf04e9e9 + languageName: node + linkType: hard + "@babel/plugin-transform-typescript@npm:^7.23.3, @babel/plugin-transform-typescript@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-typescript@npm:7.24.1" @@ -1283,6 +2235,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-unicode-escapes@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/8b18e2e66af33471a6971289492beff5c240e56727331db1d34c4338a6a368a82a7ed6d57ec911001b6d65643aed76531e1e7cac93265fb3fb2717f54d845e69 + languageName: node + linkType: hard + "@babel/plugin-transform-unicode-property-regex@npm:^7.23.3, @babel/plugin-transform-unicode-property-regex@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.24.1" @@ -1295,6 +2258,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-unicode-property-regex@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.24.7" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/bc57656eb94584d1b74a385d378818ac2b3fca642e3f649fead8da5fb3f9de22f8461185936915dfb33d5a9104e62e7a47828331248b09d28bb2d59e9276de3e + languageName: node + linkType: hard + "@babel/plugin-transform-unicode-regex@npm:^7.23.3, @babel/plugin-transform-unicode-regex@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-unicode-regex@npm:7.24.1" @@ -1307,6 +2282,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-unicode-regex@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.24.7" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/83f72a345b751566b601dc4d07e9f2c8f1bc0e0c6f7abb56ceb3095b3c9d304de73f85f2f477a09f8cc7edd5e65afd0ff9e376cdbcbea33bc0c28f3705b38fd9 + languageName: node + linkType: hard + "@babel/plugin-transform-unicode-sets-regex@npm:^7.23.3, @babel/plugin-transform-unicode-sets-regex@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.24.1" @@ -1319,6 +2306,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-unicode-sets-regex@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.24.7" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/7457c0ee8e80a80cb6fdc1fe54ab115b52815627616ce9151be8ef292fc99d04a910ec24f11382b4f124b89374264396892b086886bd2a9c2317904d87c9b21b + languageName: node + linkType: hard + "@babel/preset-env@npm:7.24.0": version: 7.24.0 resolution: "@babel/preset-env@npm:7.24.0" @@ -1409,7 +2408,98 @@ __metadata: languageName: node linkType: hard -"@babel/preset-env@npm:7.24.3, @babel/preset-env@npm:^7.20.2": +"@babel/preset-env@npm:^7.11.0": + version: 7.24.7 + resolution: "@babel/preset-env@npm:7.24.7" + dependencies: + "@babel/compat-data": "npm:^7.24.7" + "@babel/helper-compilation-targets": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-validator-option": "npm:^7.24.7" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.24.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.24.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.24.7" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.24.7" + "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-async-generators": "npm:^7.8.4" + "@babel/plugin-syntax-class-properties": "npm:^7.12.13" + "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" + "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" + "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" + "@babel/plugin-syntax-import-assertions": "npm:^7.24.7" + "@babel/plugin-syntax-import-attributes": "npm:^7.24.7" + "@babel/plugin-syntax-import-meta": "npm:^7.10.4" + "@babel/plugin-syntax-json-strings": "npm:^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" + "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" + "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" + "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" + "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" + "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" + "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" + "@babel/plugin-transform-arrow-functions": "npm:^7.24.7" + "@babel/plugin-transform-async-generator-functions": "npm:^7.24.7" + "@babel/plugin-transform-async-to-generator": "npm:^7.24.7" + "@babel/plugin-transform-block-scoped-functions": "npm:^7.24.7" + "@babel/plugin-transform-block-scoping": "npm:^7.24.7" + "@babel/plugin-transform-class-properties": "npm:^7.24.7" + "@babel/plugin-transform-class-static-block": "npm:^7.24.7" + "@babel/plugin-transform-classes": "npm:^7.24.7" + "@babel/plugin-transform-computed-properties": "npm:^7.24.7" + "@babel/plugin-transform-destructuring": "npm:^7.24.7" + "@babel/plugin-transform-dotall-regex": "npm:^7.24.7" + "@babel/plugin-transform-duplicate-keys": "npm:^7.24.7" + "@babel/plugin-transform-dynamic-import": "npm:^7.24.7" + "@babel/plugin-transform-exponentiation-operator": "npm:^7.24.7" + "@babel/plugin-transform-export-namespace-from": "npm:^7.24.7" + "@babel/plugin-transform-for-of": "npm:^7.24.7" + "@babel/plugin-transform-function-name": "npm:^7.24.7" + "@babel/plugin-transform-json-strings": "npm:^7.24.7" + "@babel/plugin-transform-literals": "npm:^7.24.7" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.24.7" + "@babel/plugin-transform-member-expression-literals": "npm:^7.24.7" + "@babel/plugin-transform-modules-amd": "npm:^7.24.7" + "@babel/plugin-transform-modules-commonjs": "npm:^7.24.7" + "@babel/plugin-transform-modules-systemjs": "npm:^7.24.7" + "@babel/plugin-transform-modules-umd": "npm:^7.24.7" + "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.24.7" + "@babel/plugin-transform-new-target": "npm:^7.24.7" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.24.7" + "@babel/plugin-transform-numeric-separator": "npm:^7.24.7" + "@babel/plugin-transform-object-rest-spread": "npm:^7.24.7" + "@babel/plugin-transform-object-super": "npm:^7.24.7" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.24.7" + "@babel/plugin-transform-optional-chaining": "npm:^7.24.7" + "@babel/plugin-transform-parameters": "npm:^7.24.7" + "@babel/plugin-transform-private-methods": "npm:^7.24.7" + "@babel/plugin-transform-private-property-in-object": "npm:^7.24.7" + "@babel/plugin-transform-property-literals": "npm:^7.24.7" + "@babel/plugin-transform-regenerator": "npm:^7.24.7" + "@babel/plugin-transform-reserved-words": "npm:^7.24.7" + "@babel/plugin-transform-shorthand-properties": "npm:^7.24.7" + "@babel/plugin-transform-spread": "npm:^7.24.7" + "@babel/plugin-transform-sticky-regex": "npm:^7.24.7" + "@babel/plugin-transform-template-literals": "npm:^7.24.7" + "@babel/plugin-transform-typeof-symbol": "npm:^7.24.7" + "@babel/plugin-transform-unicode-escapes": "npm:^7.24.7" + "@babel/plugin-transform-unicode-property-regex": "npm:^7.24.7" + "@babel/plugin-transform-unicode-regex": "npm:^7.24.7" + "@babel/plugin-transform-unicode-sets-regex": "npm:^7.24.7" + "@babel/preset-modules": "npm:0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2: "npm:^0.4.10" + babel-plugin-polyfill-corejs3: "npm:^0.10.4" + babel-plugin-polyfill-regenerator: "npm:^0.6.1" + core-js-compat: "npm:^3.31.0" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c6714346f3ccc1271eaa90051c75b8bb57b20ef57408ab68740e2f3552693ae0ee5a4bcce3a00211d40e4947af1f7b8ab422066b953f0095461937fb72d11274 + languageName: node + linkType: hard + +"@babel/preset-env@npm:^7.20.2": version: 7.24.3 resolution: "@babel/preset-env@npm:7.24.3" dependencies: @@ -1528,7 +2618,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-react@npm:7.24.1, @babel/preset-react@npm:^7.18.6": +"@babel/preset-react@npm:^7.18.6": version: 7.24.1 resolution: "@babel/preset-react@npm:7.24.1" dependencies: @@ -1581,7 +2671,16 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2": +"@babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.23.2": + version: 7.24.7 + resolution: "@babel/runtime@npm:7.24.7" + dependencies: + regenerator-runtime: "npm:^0.14.0" + checksum: 10c0/b6fa3ec61a53402f3c1d75f4d808f48b35e0dfae0ec8e2bb5c6fc79fb95935da75766e0ca534d0f1c84871f6ae0d2ebdd950727cfadb745a2cdbef13faef5513 + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2": version: 7.24.1 resolution: "@babel/runtime@npm:7.24.1" dependencies: @@ -1590,6 +2689,15 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.7": + version: 7.24.6 + resolution: "@babel/runtime@npm:7.24.6" + dependencies: + regenerator-runtime: "npm:^0.14.0" + checksum: 10c0/224ad205de33ea28979baaec89eea4c4d4e9482000dd87d15b97859365511cdd4d06517712504024f5d33a5fb9412f9b91c96f1d923974adf9359e1575cde049 + languageName: node + linkType: hard + "@babel/template@npm:^7.22.15, @babel/template@npm:^7.24.0, @babel/template@npm:^7.3.3": version: 7.24.0 resolution: "@babel/template@npm:7.24.0" @@ -1601,6 +2709,17 @@ __metadata: languageName: node linkType: hard +"@babel/template@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/template@npm:7.24.7" + dependencies: + "@babel/code-frame": "npm:^7.24.7" + "@babel/parser": "npm:^7.24.7" + "@babel/types": "npm:^7.24.7" + checksum: 10c0/95b0b3ee80fcef685b7f4426f5713a855ea2cd5ac4da829b213f8fb5afe48a2a14683c2ea04d446dbc7f711c33c5cd4a965ef34dcbe5bc387c9e966b67877ae3 + languageName: node + linkType: hard + "@babel/traverse@npm:^7.24.0, @babel/traverse@npm:^7.24.1": version: 7.24.1 resolution: "@babel/traverse@npm:7.24.1" @@ -1619,6 +2738,24 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/traverse@npm:7.24.7" + dependencies: + "@babel/code-frame": "npm:^7.24.7" + "@babel/generator": "npm:^7.24.7" + "@babel/helper-environment-visitor": "npm:^7.24.7" + "@babel/helper-function-name": "npm:^7.24.7" + "@babel/helper-hoist-variables": "npm:^7.24.7" + "@babel/helper-split-export-declaration": "npm:^7.24.7" + "@babel/parser": "npm:^7.24.7" + "@babel/types": "npm:^7.24.7" + debug: "npm:^4.3.1" + globals: "npm:^11.1.0" + checksum: 10c0/a5135e589c3f1972b8877805f50a084a04865ccb1d68e5e1f3b94a8841b3485da4142e33413d8fd76bc0e6444531d3adf1f59f359c11ffac452b743d835068ab + languageName: node + linkType: hard + "@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.3, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.4, @babel/types@npm:^7.24.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": version: 7.24.0 resolution: "@babel/types@npm:7.24.0" @@ -1630,6 +2767,28 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.24.6": + version: 7.24.6 + resolution: "@babel/types@npm:7.24.6" + dependencies: + "@babel/helper-string-parser": "npm:^7.24.6" + "@babel/helper-validator-identifier": "npm:^7.24.6" + to-fast-properties: "npm:^2.0.0" + checksum: 10c0/1d94d92d97ef49030ad7f9e14cfccfeb70b1706dabcaa69037e659ec9d2c3178fb005d2088cce40d88dfc1306153d9157fe038a79ea2be92e5e6b99a59ef80cc + languageName: node + linkType: hard + +"@babel/types@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/types@npm:7.24.7" + dependencies: + "@babel/helper-string-parser": "npm:^7.24.7" + "@babel/helper-validator-identifier": "npm:^7.24.7" + to-fast-properties: "npm:^2.0.0" + checksum: 10c0/d9ecbfc3eb2b05fb1e6eeea546836ac30d990f395ef3fe3f75ced777a222c3cfc4489492f72e0ce3d9a5a28860a1ce5f81e66b88cf5088909068b3ff4fab72c1 + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -1637,12 +2796,12 @@ __metadata: languageName: node linkType: hard -"@commitlint/cli@npm:19.2.1": - version: 19.2.1 - resolution: "@commitlint/cli@npm:19.2.1" +"@commitlint/cli@npm:19.3.0": + version: 19.3.0 + resolution: "@commitlint/cli@npm:19.3.0" dependencies: - "@commitlint/format": "npm:^19.0.3" - "@commitlint/lint": "npm:^19.1.0" + "@commitlint/format": "npm:^19.3.0" + "@commitlint/lint": "npm:^19.2.2" "@commitlint/load": "npm:^19.2.0" "@commitlint/read": "npm:^19.2.1" "@commitlint/types": "npm:^19.0.3" @@ -1650,17 +2809,17 @@ __metadata: yargs: "npm:^17.0.0" bin: commitlint: cli.js - checksum: 10c0/14057446e60c403793af2a92c019440f83cdaf77bec6d48ad0102270a5b32fbd60b9929fbd4be6b6f7dadc7981ebe95ba54798d2f3d993429f364b3e9b46c9d1 + checksum: 10c0/12049b6ccb1fd3939c5713fdc9b2aa9054985f3ced465e9494ce7c23b3c69a9e9ea25c84fffa5ba147b6bb5cd086a29000dfac2218a7592494b007bab592e057 languageName: node linkType: hard -"@commitlint/config-conventional@npm:19.1.0": - version: 19.1.0 - resolution: "@commitlint/config-conventional@npm:19.1.0" +"@commitlint/config-conventional@npm:19.2.2": + version: 19.2.2 + resolution: "@commitlint/config-conventional@npm:19.2.2" dependencies: "@commitlint/types": "npm:^19.0.3" conventional-changelog-conventionalcommits: "npm:^7.0.2" - checksum: 10c0/540c30b7522e5772d4b7cc2abfa2d484933a40939d9896f9681117f35775f2fa350973ccddcd016ed520be515844581c6a687646707e097220b34e7d01bfff07 + checksum: 10c0/2f2a07ee318ac42ffda488521bd84f28268a6d2ea10b332abcad6106559d8a64a765cc58ddea106fd67fce376228cb24059000a584f4986e0e8f972cedd85442 languageName: node linkType: hard @@ -1695,35 +2854,35 @@ __metadata: languageName: node linkType: hard -"@commitlint/format@npm:^19.0.3": - version: 19.0.3 - resolution: "@commitlint/format@npm:19.0.3" +"@commitlint/format@npm:^19.3.0": + version: 19.3.0 + resolution: "@commitlint/format@npm:19.3.0" dependencies: "@commitlint/types": "npm:^19.0.3" chalk: "npm:^5.3.0" - checksum: 10c0/9d8a5b55ca8e35351c6f1dbbec8f749fe3f7c66f01ba0e248574530fa1dac944b87ee5bd63153a14e3748068a2e9b0b8341cec21c768f384bb5a5c8124902a1f + checksum: 10c0/857a1784481edad9013514cbcc9ec93af33acc8bd491f5d23625c53fb93841566ce110e3004ecaab7f4f89c9331940fe63b83922a4a81f419e67b70e0dc90e41 languageName: node linkType: hard -"@commitlint/is-ignored@npm:^19.0.3": - version: 19.0.3 - resolution: "@commitlint/is-ignored@npm:19.0.3" +"@commitlint/is-ignored@npm:^19.2.2": + version: 19.2.2 + resolution: "@commitlint/is-ignored@npm:19.2.2" dependencies: "@commitlint/types": "npm:^19.0.3" semver: "npm:^7.6.0" - checksum: 10c0/aa9d8d0db4625a0b631c8a811844ea90594764e5f7a1131d99a69dde743ef66ad0157d5f5df224bad645b5978c2c1e25ce0e22d9ade8c8e46a3577063d5bbe90 + checksum: 10c0/8e416edbf24ec386f6211d4879c002cf82fdebfd1f69556ae2ad62f6ae9b705aa20ea3108529fd44e7d246526c6133851905ee826a83efc81b2f11443a7d03c3 languageName: node linkType: hard -"@commitlint/lint@npm:^19.1.0": - version: 19.1.0 - resolution: "@commitlint/lint@npm:19.1.0" +"@commitlint/lint@npm:^19.2.2": + version: 19.2.2 + resolution: "@commitlint/lint@npm:19.2.2" dependencies: - "@commitlint/is-ignored": "npm:^19.0.3" + "@commitlint/is-ignored": "npm:^19.2.2" "@commitlint/parse": "npm:^19.0.3" "@commitlint/rules": "npm:^19.0.3" "@commitlint/types": "npm:^19.0.3" - checksum: 10c0/7624eaafe0769e5dd7053f8558753ed33f7fd4351358510566c4b215d8c2e61c290666324dcc5dfcdc6545fb215040fe181ed4b870b062b06020793fcaa90089 + checksum: 10c0/e7b3ca6027fecc1a3eda0ee8c21ecef0071ddddc7711a922cc6eb53a590c7e4f00d550b01134a5ebaaae603a0afbeaf65809b12f8099e08cace9d594cb69ff4b languageName: node linkType: hard @@ -2281,6 +3440,152 @@ __metadata: languageName: node linkType: hard +"@emotion/babel-plugin@npm:^11.11.0": + version: 11.11.0 + resolution: "@emotion/babel-plugin@npm:11.11.0" + dependencies: + "@babel/helper-module-imports": "npm:^7.16.7" + "@babel/runtime": "npm:^7.18.3" + "@emotion/hash": "npm:^0.9.1" + "@emotion/memoize": "npm:^0.8.1" + "@emotion/serialize": "npm:^1.1.2" + babel-plugin-macros: "npm:^3.1.0" + convert-source-map: "npm:^1.5.0" + escape-string-regexp: "npm:^4.0.0" + find-root: "npm:^1.1.0" + source-map: "npm:^0.5.7" + stylis: "npm:4.2.0" + checksum: 10c0/89cbb6ec0e52c8ee9c2a4b9889ccd4fc3a75d28091d835bfac6d7c4565d3338621e23af0a85f3bcd133e1cae795c692e1dadada015784d4b0554aa5bb111df43 + languageName: node + linkType: hard + +"@emotion/cache@npm:^11.11.0": + version: 11.11.0 + resolution: "@emotion/cache@npm:11.11.0" + dependencies: + "@emotion/memoize": "npm:^0.8.1" + "@emotion/sheet": "npm:^1.2.2" + "@emotion/utils": "npm:^1.2.1" + "@emotion/weak-memoize": "npm:^0.3.1" + stylis: "npm:4.2.0" + checksum: 10c0/a23ab5ab2fd08e904698106d58ad3536fed51cc1aa0ef228e95bb640eaf11f560dbd91a395477b0d84e1e3c20150263764b4558517cf6576a89d2d6cc5253688 + languageName: node + linkType: hard + +"@emotion/hash@npm:^0.9.1": + version: 0.9.1 + resolution: "@emotion/hash@npm:0.9.1" + checksum: 10c0/cdafe5da63fc1137f3db6e232fdcde9188b2b47ee66c56c29137199642a4086f42382d866911cfb4833cae2cc00271ab45cad3946b024f67b527bb7fac7f4c9d + languageName: node + linkType: hard + +"@emotion/is-prop-valid@npm:^1.2.2": + version: 1.2.2 + resolution: "@emotion/is-prop-valid@npm:1.2.2" + dependencies: + "@emotion/memoize": "npm:^0.8.1" + checksum: 10c0/bb1530dcb4e0e5a4fabb219279f2d0bc35796baf66f6241f98b0d03db1985c890a8cafbea268e0edefd5eeda143dbd5c09a54b5fba74cee8c69b98b13194af50 + languageName: node + linkType: hard + +"@emotion/memoize@npm:^0.8.1": + version: 0.8.1 + resolution: "@emotion/memoize@npm:0.8.1" + checksum: 10c0/dffed372fc3b9fa2ba411e76af22b6bb686fb0cb07694fdfaa6dd2baeb0d5e4968c1a7caa472bfcf06a5997d5e7c7d16b90e993f9a6ffae79a2c3dbdc76dfe78 + languageName: node + linkType: hard + +"@emotion/react@npm:11.11.4": + version: 11.11.4 + resolution: "@emotion/react@npm:11.11.4" + dependencies: + "@babel/runtime": "npm:^7.18.3" + "@emotion/babel-plugin": "npm:^11.11.0" + "@emotion/cache": "npm:^11.11.0" + "@emotion/serialize": "npm:^1.1.3" + "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.0.1" + "@emotion/utils": "npm:^1.2.1" + "@emotion/weak-memoize": "npm:^0.3.1" + hoist-non-react-statics: "npm:^3.3.1" + peerDependencies: + react: ">=16.8.0" + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/6df892fd9e04b5c8c37aacfd7f461631e04e00e845edc3c5b2955ab8ad681abf5cd49584101f579427e08b82f2f88369c78d37ae2fe9360a8f68fd4e51b8e448 + languageName: node + linkType: hard + +"@emotion/serialize@npm:^1.1.2, @emotion/serialize@npm:^1.1.3, @emotion/serialize@npm:^1.1.4": + version: 1.1.4 + resolution: "@emotion/serialize@npm:1.1.4" + dependencies: + "@emotion/hash": "npm:^0.9.1" + "@emotion/memoize": "npm:^0.8.1" + "@emotion/unitless": "npm:^0.8.1" + "@emotion/utils": "npm:^1.2.1" + csstype: "npm:^3.0.2" + checksum: 10c0/164d936f72382594c47b9c24e67a51c7fc16b83d9a36b84eec5e4cb9bf7be029218a490ef4b44233a1b53423bdb3905d65b597cde3ebba759d40dab7a4c99121 + languageName: node + linkType: hard + +"@emotion/sheet@npm:^1.2.2": + version: 1.2.2 + resolution: "@emotion/sheet@npm:1.2.2" + checksum: 10c0/69827a1bfa43d7b188f1d8cea42163143a36312543fdade5257c459a2b3efd7ce386aac84ba152bc2517a4f7e54384c04800b26adb382bb284ac7e4ad40e584b + languageName: node + linkType: hard + +"@emotion/styled@npm:11.11.5": + version: 11.11.5 + resolution: "@emotion/styled@npm:11.11.5" + dependencies: + "@babel/runtime": "npm:^7.18.3" + "@emotion/babel-plugin": "npm:^11.11.0" + "@emotion/is-prop-valid": "npm:^1.2.2" + "@emotion/serialize": "npm:^1.1.4" + "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.0.1" + "@emotion/utils": "npm:^1.2.1" + peerDependencies: + "@emotion/react": ^11.0.0-rc.0 + react: ">=16.8.0" + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/27da6ad7f5b374d61cfe6647cc2f93ee3ceb1139a51907050576ee30da0a50a27b0bbed45f76889d560d2a8ccf8bc4a4f7126cad3f00127e107c11093dc0a801 + languageName: node + linkType: hard + +"@emotion/unitless@npm:^0.8.1": + version: 0.8.1 + resolution: "@emotion/unitless@npm:0.8.1" + checksum: 10c0/a1ed508628288f40bfe6dd17d431ed899c067a899fa293a13afe3aed1d70fac0412b8a215fafab0b42829360db687fecd763e5f01a64ddc4a4b58ec3112ff548 + languageName: node + linkType: hard + +"@emotion/use-insertion-effect-with-fallbacks@npm:^1.0.1": + version: 1.0.1 + resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.0.1" + peerDependencies: + react: ">=16.8.0" + checksum: 10c0/a15b2167940e3a908160687b73fc4fcd81e59ab45136b6967f02c7c419d9a149acd22a416b325c389642d4f1c3d33cf4196cad6b618128b55b7c74f6807a240b + languageName: node + linkType: hard + +"@emotion/utils@npm:^1.2.1": + version: 1.2.1 + resolution: "@emotion/utils@npm:1.2.1" + checksum: 10c0/db43ca803361740c14dfb1cca1464d10d27f4c8b40d3e8864e6932ccf375d1450778ff4e4eadee03fb97f2aeb18de9fae98294905596a12ff7d4cd1910414d8d + languageName: node + linkType: hard + +"@emotion/weak-memoize@npm:^0.3.1": + version: 0.3.1 + resolution: "@emotion/weak-memoize@npm:0.3.1" + checksum: 10c0/ed514b3cb94bbacece4ac2450d98898066c0a0698bdeda256e312405ca53634cb83c75889b25cd8bbbe185c80f4c05a1f0a0091e1875460ba6be61d0334f0b8a + languageName: node + linkType: hard + "@esbuild/aix-ppc64@npm:0.19.12": version: 0.19.12 resolution: "@esbuild/aix-ppc64@npm:0.19.12" @@ -2453,7 +3758,14 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": +"@eslint-community/regexpp@npm:^4.10.0": + version: 4.11.0 + resolution: "@eslint-community/regexpp@npm:4.11.0" + checksum: 10c0/0f6328869b2741e2794da4ad80beac55cba7de2d3b44f796a60955b0586212ec75e6b0253291fd4aad2100ad471d1480d8895f2b54f1605439ba4c875e05e523 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.6.1": version: 4.10.0 resolution: "@eslint-community/regexpp@npm:4.10.0" checksum: 10c0/c5f60ef1f1ea7649fa7af0e80a5a79f64b55a8a8fa5086de4727eb4c86c652aedee407a9c143b8995d2c0b2d75c1222bec9ba5d73dbfc1f314550554f0979ef4 @@ -2484,6 +3796,44 @@ __metadata: languageName: node linkType: hard +"@floating-ui/core@npm:^1.0.0": + version: 1.6.2 + resolution: "@floating-ui/core@npm:1.6.2" + dependencies: + "@floating-ui/utils": "npm:^0.2.0" + checksum: 10c0/db2621dc682e7f043d6f118d087ae6a6bfdacf40b26ede561760dd53548c16e2e7c59031e013e37283801fa307b55e6de65bf3b316b96a054e4a6a7cb937c59e + languageName: node + linkType: hard + +"@floating-ui/dom@npm:^1.0.0": + version: 1.6.5 + resolution: "@floating-ui/dom@npm:1.6.5" + dependencies: + "@floating-ui/core": "npm:^1.0.0" + "@floating-ui/utils": "npm:^0.2.0" + checksum: 10c0/ebdc14806f786e60df8e7cc2c30bf9cd4d75fe734f06d755588bbdef2f60d0a0f21dffb14abdc58dea96e5577e2e366feca6d66ba962018efd1bc91a3ece4526 + languageName: node + linkType: hard + +"@floating-ui/react-dom@npm:^2.0.8": + version: 2.1.0 + resolution: "@floating-ui/react-dom@npm:2.1.0" + dependencies: + "@floating-ui/dom": "npm:^1.0.0" + peerDependencies: + react: ">=16.8.0" + react-dom: ">=16.8.0" + checksum: 10c0/9ee44dfeb27f585fb1e0114cbe37c72ff5d34149900f4f3013f6b0abf8c3365eab13286c360f97fbe0c44bb91a745e7a4c18b82d111990b45a7a7796dc55e461 + languageName: node + linkType: hard + +"@floating-ui/utils@npm:^0.2.0": + version: 0.2.2 + resolution: "@floating-ui/utils@npm:0.2.2" + checksum: 10c0/b2becdcafdf395af1641348da0031ff1eaad2bc60c22e14bd3abad4acfe2c8401e03097173d89a2f646a99b75819a78ef21ebb2572cab0042a56dd654b0065cd + languageName: node + linkType: hard + "@humanwhocodes/config-array@npm:^0.11.14": version: 0.11.14 resolution: "@humanwhocodes/config-array@npm:0.11.14" @@ -2849,6 +4199,180 @@ __metadata: languageName: node linkType: hard +"@mui/base@npm:5.0.0-beta.40": + version: 5.0.0-beta.40 + resolution: "@mui/base@npm:5.0.0-beta.40" + dependencies: + "@babel/runtime": "npm:^7.23.9" + "@floating-ui/react-dom": "npm:^2.0.8" + "@mui/types": "npm:^7.2.14" + "@mui/utils": "npm:^5.15.14" + "@popperjs/core": "npm:^2.11.8" + clsx: "npm:^2.1.0" + prop-types: "npm:^15.8.1" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/631b4ee389e23d82c16c5845c2849af43000f52f1def639b9bb5bf39fd09f4eab93787d32950b715a7de7b689faab53bb7c9a78f6fd12b663876cf8128d45de1 + languageName: node + linkType: hard + +"@mui/core-downloads-tracker@npm:^5.15.19": + version: 5.15.19 + resolution: "@mui/core-downloads-tracker@npm:5.15.19" + checksum: 10c0/90cd3eb95399326f60140618b43c91de133a7192fd122c379278e30e09b921a6109786189b1a78e45b3b6ef6104d0f0e2f29209e48f64c978ec28ef91c5bce2b + languageName: node + linkType: hard + +"@mui/icons-material@npm:^5.15.19": + version: 5.15.19 + resolution: "@mui/icons-material@npm:5.15.19" + dependencies: + "@babel/runtime": "npm:^7.23.9" + peerDependencies: + "@mui/material": ^5.0.0 + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/f2a4381b6a0f955d74aa5ac88bb8d38fee384fdff9a8e82c7fb9e596fbc61ccff97883a6c1a3cfbab3253f4d53c3fef21a3b438dfe45de365e842577bc892c08 + languageName: node + linkType: hard + +"@mui/material@npm:5.15.19": + version: 5.15.19 + resolution: "@mui/material@npm:5.15.19" + dependencies: + "@babel/runtime": "npm:^7.23.9" + "@mui/base": "npm:5.0.0-beta.40" + "@mui/core-downloads-tracker": "npm:^5.15.19" + "@mui/system": "npm:^5.15.15" + "@mui/types": "npm:^7.2.14" + "@mui/utils": "npm:^5.15.14" + "@types/react-transition-group": "npm:^4.4.10" + clsx: "npm:^2.1.0" + csstype: "npm:^3.1.3" + prop-types: "npm:^15.8.1" + react-is: "npm:^18.2.0" + react-transition-group: "npm:^4.4.5" + peerDependencies: + "@emotion/react": ^11.5.0 + "@emotion/styled": ^11.3.0 + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + "@types/react": + optional: true + checksum: 10c0/388eb14bedea7453dde7e5cbdcf9e51bec20567978d9405aa4affb9df69d25c9696427820ebff927215a8e8cd79a873ce9ac4207989a1c6b859d26394031382e + languageName: node + linkType: hard + +"@mui/private-theming@npm:^5.15.14": + version: 5.15.14 + resolution: "@mui/private-theming@npm:5.15.14" + dependencies: + "@babel/runtime": "npm:^7.23.9" + "@mui/utils": "npm:^5.15.14" + prop-types: "npm:^15.8.1" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/28889505874f03e2aeeb147bc5eefcc537825a91ab9c771a5e60ea0df1eab760e900a3a50fec55b25bc9087e9030be37adbe1acdd81a3e2fcca5a1e0cf5979ec + languageName: node + linkType: hard + +"@mui/styled-engine@npm:^5.15.14": + version: 5.15.14 + resolution: "@mui/styled-engine@npm:5.15.14" + dependencies: + "@babel/runtime": "npm:^7.23.9" + "@emotion/cache": "npm:^11.11.0" + csstype: "npm:^3.1.3" + prop-types: "npm:^15.8.1" + peerDependencies: + "@emotion/react": ^11.4.1 + "@emotion/styled": ^11.3.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + checksum: 10c0/0d262ea0b3c117f865af1cd52b992592c24432e491b35e712159bb49adfd776ee9a532abbc4ab08889f308e75d30082a0fee809119d5d61a82b3277212655319 + languageName: node + linkType: hard + +"@mui/system@npm:^5.15.15": + version: 5.15.15 + resolution: "@mui/system@npm:5.15.15" + dependencies: + "@babel/runtime": "npm:^7.23.9" + "@mui/private-theming": "npm:^5.15.14" + "@mui/styled-engine": "npm:^5.15.14" + "@mui/types": "npm:^7.2.14" + "@mui/utils": "npm:^5.15.14" + clsx: "npm:^2.1.0" + csstype: "npm:^3.1.3" + prop-types: "npm:^15.8.1" + peerDependencies: + "@emotion/react": ^11.5.0 + "@emotion/styled": ^11.3.0 + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + "@types/react": + optional: true + checksum: 10c0/80724377ee9c0e1604373371bb9b7d566c899009264caf6f638eed224600b91b739f32bef03c6a479dc9348dfc01d7c28cc8d1252454d7dd4a23f59033a8653e + languageName: node + linkType: hard + +"@mui/types@npm:^7.2.14": + version: 7.2.14 + resolution: "@mui/types@npm:7.2.14" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/d4e0a9fce4bddfb5e0b7b6be1b15b591df33bb90ef0087e4bd5fe85f00f62776c7ed0e4698e7fb43213e1f04064aac1695b53ca52aaeaee7dbba248a792bdd1e + languageName: node + linkType: hard + +"@mui/utils@npm:^5.15.14": + version: 5.15.14 + resolution: "@mui/utils@npm:5.15.14" + dependencies: + "@babel/runtime": "npm:^7.23.9" + "@types/prop-types": "npm:^15.7.11" + prop-types: "npm:^15.8.1" + react-is: "npm:^18.2.0" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/36265988477637a011361456b40929de928e215466b72e6c48673a2088610d83e09960a3e0608100448910683079fc80a5e11dbf49b9ce7109dd8e49403ae3b3 + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -2951,10 +4475,189 @@ __metadata: languageName: node linkType: hard -"@remix-run/router@npm:1.15.3": - version: 1.15.3 - resolution: "@remix-run/router@npm:1.15.3" - checksum: 10c0/aea197447cee21e137d70f0c93e00de70c64fcfae20ae349ade9dc4202e782bd94dbc88be7302d13b6aa6cde38a701b074cd8e09a161d14cecda832a36dd2695 +"@popperjs/core@npm:^2.11.8": + version: 2.11.8 + resolution: "@popperjs/core@npm:2.11.8" + checksum: 10c0/4681e682abc006d25eb380d0cf3efc7557043f53b6aea7a5057d0d1e7df849a00e281cd8ea79c902a35a414d7919621fc2ba293ecec05f413598e0b23d5a1e63 + languageName: node + linkType: hard + +"@react-dnd/asap@npm:^5.0.1": + version: 5.0.2 + resolution: "@react-dnd/asap@npm:5.0.2" + checksum: 10c0/0063db616db9801c9be18f11a912c3e214f87e714b1e4bf9462952af7ead65cba0b43e1f7c34bc8748811b6926e74d929e5e126f85ebb91b870faf809ceb5177 + languageName: node + linkType: hard + +"@react-dnd/invariant@npm:^4.0.1": + version: 4.0.2 + resolution: "@react-dnd/invariant@npm:4.0.2" + checksum: 10c0/b303cc53fc5074cefb2a76b45b9c73ebb5d35630b18f5dc282ed9a9ac9b0287b9da1f6ac63acfdea2341b8f8187f615afc12d5eb14ec6015964f5c1b167332e2 + languageName: node + linkType: hard + +"@react-dnd/shallowequal@npm:^4.0.1": + version: 4.0.2 + resolution: "@react-dnd/shallowequal@npm:4.0.2" + checksum: 10c0/9a352fd176752e5d9c2797d598aca034b7829111ae0c992d80f40d5f068fcd6a039b1841c741dfa1ab67a36a00664310aec4f0ce216e4112f80875c9fe6fd8dc + languageName: node + linkType: hard + +"@react-spring/animated@npm:~9.7.3": + version: 9.7.3 + resolution: "@react-spring/animated@npm:9.7.3" + dependencies: + "@react-spring/shared": "npm:~9.7.3" + "@react-spring/types": "npm:~9.7.3" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 10c0/5151da4fa7da010bb2edbee05871aa7a4aea8763fe617389d17605810aa0dd817374205e5fb3930b650f4a7f25fcdf23205fdfb7365686ff75888bdfd0b39839 + languageName: node + linkType: hard + +"@react-spring/core@npm:~9.7.3": + version: 9.7.3 + resolution: "@react-spring/core@npm:9.7.3" + dependencies: + "@react-spring/animated": "npm:~9.7.3" + "@react-spring/shared": "npm:~9.7.3" + "@react-spring/types": "npm:~9.7.3" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 10c0/e28c05de8435bf2eaf8481f8acdf093909d4be9881a9a854c51dfac7c2d5562088d0fb2ce04e2f07e1b3bf621d8da3ab57bf6fedb4fdc954e3aa263bc1e393af + languageName: node + linkType: hard + +"@react-spring/shared@npm:~9.7.3": + version: 9.7.3 + resolution: "@react-spring/shared@npm:9.7.3" + dependencies: + "@react-spring/types": "npm:~9.7.3" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 10c0/afb03ed28ccf62efa4012e531c3659999bb364d1e0eb0fb729b962f9bd21a0b772a2d98e862062c9c32c06edf72327afcc45984d9eb22fdd961706b6ddf6950d + languageName: node + linkType: hard + +"@react-spring/types@npm:~9.7.3": + version: 9.7.3 + resolution: "@react-spring/types@npm:9.7.3" + checksum: 10c0/d645044f3cc9ceb7c4f6c4d061aaf6660018568a1553d05638f56b3328c5f91597ee4118334abe22fc8f07f5ee02f054340170c1d52e11b3faea22888b5170d4 + languageName: node + linkType: hard + +"@react-spring/web@npm:9.7.3": + version: 9.7.3 + resolution: "@react-spring/web@npm:9.7.3" + dependencies: + "@react-spring/animated": "npm:~9.7.3" + "@react-spring/core": "npm:~9.7.3" + "@react-spring/shared": "npm:~9.7.3" + "@react-spring/types": "npm:~9.7.3" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 10c0/a5b4847a2921a29a3e8ce569f4951abeb268b6e8eb230f8c49d98709216b2b3a23ba1e58628c51c9eaa0bd20d83f9d7b8f8f03df98215e933de4c66c39e17fe1 + languageName: node + linkType: hard + +"@remix-run/router@npm:1.16.1": + version: 1.16.1 + resolution: "@remix-run/router@npm:1.16.1" + checksum: 10c0/5f1b0aef4924830eeab9c86dcaa5af8157066e5de65b449e7fdf406532b2384828a46a447c31b0735fd713a06938dd88bfd4e566d9989be70c770457dda16c92 + languageName: node + linkType: hard + +"@rollup/plugin-babel@npm:^5.2.0": + version: 5.3.1 + resolution: "@rollup/plugin-babel@npm:5.3.1" + dependencies: + "@babel/helper-module-imports": "npm:^7.10.4" + "@rollup/pluginutils": "npm:^3.1.0" + peerDependencies: + "@babel/core": ^7.0.0 + "@types/babel__core": ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + "@types/babel__core": + optional: true + checksum: 10c0/2766134dd5567c0d4fd6909d1f511ce9bf3bd9d727e1bc5ffdd6097a3606faca324107ae8e0961839ee4dbb45e5e579ae601efe472fc0a271259aea79920cafa + languageName: node + linkType: hard + +"@rollup/plugin-node-resolve@npm:^15.2.3": + version: 15.2.3 + resolution: "@rollup/plugin-node-resolve@npm:15.2.3" + dependencies: + "@rollup/pluginutils": "npm:^5.0.1" + "@types/resolve": "npm:1.20.2" + deepmerge: "npm:^4.2.2" + is-builtin-module: "npm:^3.2.1" + is-module: "npm:^1.0.0" + resolve: "npm:^1.22.1" + peerDependencies: + rollup: ^2.78.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/598c15615086f26e28c4b3dbf966682af7fb0e5bc277cc4e57f559668a3be675a63ab261eb34729ce9569c3a51342c48863e50b5efe02e0fc1571828f0113f9d + languageName: node + linkType: hard + +"@rollup/plugin-replace@npm:^2.4.1": + version: 2.4.2 + resolution: "@rollup/plugin-replace@npm:2.4.2" + dependencies: + "@rollup/pluginutils": "npm:^3.1.0" + magic-string: "npm:^0.25.7" + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + checksum: 10c0/ea3d27291c791661638b91809d0247dde1ee71be0b16fa7060078c2700db3669eada2c3978ea979b917b29ebe06f3fddc8797feae554da966264a22142b5771a + languageName: node + linkType: hard + +"@rollup/plugin-terser@npm:^0.4.3": + version: 0.4.4 + resolution: "@rollup/plugin-terser@npm:0.4.4" + dependencies: + serialize-javascript: "npm:^6.0.1" + smob: "npm:^1.0.0" + terser: "npm:^5.17.4" + peerDependencies: + rollup: ^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/b9cb6c8f02ac1c1344019e9fb854321b74f880efebc41b6bdd84f18331fce0f4a2aadcdb481042245cd3f409b429ac363af71f9efec4a2024731d67d32af36ee + languageName: node + linkType: hard + +"@rollup/pluginutils@npm:^3.1.0": + version: 3.1.0 + resolution: "@rollup/pluginutils@npm:3.1.0" + dependencies: + "@types/estree": "npm:0.0.39" + estree-walker: "npm:^1.0.1" + picomatch: "npm:^2.2.2" + peerDependencies: + rollup: ^1.20.0||^2.0.0 + checksum: 10c0/7151753160d15ba2b259461a6c25b3932150994ea52dba8fd3144f634c7647c2e56733d986e2c15de67c4d96a9ee7d6278efa6d2e626a7169898fd64adc0f90c + languageName: node + linkType: hard + +"@rollup/pluginutils@npm:^5.0.1": + version: 5.1.0 + resolution: "@rollup/pluginutils@npm:5.1.0" + dependencies: + "@types/estree": "npm:^1.0.0" + estree-walker: "npm:^2.0.2" + picomatch: "npm:^2.3.1" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/c7bed15711f942d6fdd3470fef4105b73991f99a478605e13d41888963330a6f9e32be37e6ddb13f012bc7673ff5e54f06f59fd47109436c1c513986a8a7612d languageName: node linkType: hard @@ -2990,81 +4693,83 @@ __metadata: languageName: node linkType: hard -"@stylistic/eslint-plugin-js@npm:1.5.4": - version: 1.5.4 - resolution: "@stylistic/eslint-plugin-js@npm:1.5.4" +"@stylistic/eslint-plugin-js@npm:2.3.0, @stylistic/eslint-plugin-js@npm:^2.3.0": + version: 2.3.0 + resolution: "@stylistic/eslint-plugin-js@npm:2.3.0" dependencies: + "@types/eslint": "npm:^8.56.10" acorn: "npm:^8.11.3" - escape-string-regexp: "npm:^4.0.0" - eslint-visitor-keys: "npm:^3.4.3" - espree: "npm:^9.6.1" + eslint-visitor-keys: "npm:^4.0.0" + espree: "npm:^10.0.1" peerDependencies: eslint: ">=8.40.0" - checksum: 10c0/df306a6f285bf22d91f453e15f6774df7551c065d90db1007824d6fc70fee7aed239b2bd2b0e8f924069138f62e014416d53c180e1ba05e9dccb98efa8714630 + checksum: 10c0/41edf0a6ac4643145d4ccb939b24e0227e790eb4efc7ebc4d8bb68bb99ff6406af154a3384b12147c4b34aa6c2bed506703ef8d82fb4c73ca7aa978fa4fed922 languageName: node linkType: hard -"@stylistic/eslint-plugin-js@npm:^1.5.4": - version: 1.7.0 - resolution: "@stylistic/eslint-plugin-js@npm:1.7.0" +"@stylistic/eslint-plugin-jsx@npm:2.3.0": + version: 2.3.0 + resolution: "@stylistic/eslint-plugin-jsx@npm:2.3.0" dependencies: - "@types/eslint": "npm:^8.56.2" - acorn: "npm:^8.11.3" - escape-string-regexp: "npm:^4.0.0" - eslint-visitor-keys: "npm:^3.4.3" - espree: "npm:^9.6.1" - peerDependencies: - eslint: ">=8.40.0" - checksum: 10c0/67944f8c0a8030df8b18e096dca02ace98f3039c68afbb9074caa43fdd7809e413a908d3aec981f9dff1f2e943db06744a813d4ad7808bae0643231f9ffda0f9 - languageName: node - linkType: hard - -"@stylistic/eslint-plugin-jsx@npm:1.5.4": - version: 1.5.4 - resolution: "@stylistic/eslint-plugin-jsx@npm:1.5.4" - dependencies: - "@stylistic/eslint-plugin-js": "npm:^1.5.4" + "@stylistic/eslint-plugin-js": "npm:^2.3.0" + "@types/eslint": "npm:^8.56.10" estraverse: "npm:^5.3.0" + picomatch: "npm:^4.0.2" peerDependencies: eslint: ">=8.40.0" - checksum: 10c0/f9462f655a65144c62f108a5f87b59ba12b444578ab067f45289e93a1dc5dd0094f235dd2ce325ba5d3aca698bdb362d74344eaaaccc365746d6e0306c8196e2 + checksum: 10c0/6aec33ed4c62f4a8dadc8ef00d7220ed3ef7f0b3f12d4afc9932aafd2d4502789c5d32b111ddc6391d220a2855cc5225070ae0c09c1680761f016dbeea94e676 languageName: node linkType: hard -"@stylistic/eslint-plugin-plus@npm:1.5.4": - version: 1.5.4 - resolution: "@stylistic/eslint-plugin-plus@npm:1.5.4" +"@stylistic/eslint-plugin-plus@npm:2.3.0": + version: 2.3.0 + resolution: "@stylistic/eslint-plugin-plus@npm:2.3.0" dependencies: - "@typescript-eslint/utils": "npm:^6.19.0" + "@types/eslint": "npm:^8.56.10" + "@typescript-eslint/utils": "npm:^7.12.0" peerDependencies: eslint: "*" - checksum: 10c0/b824b432cdcb530512b29dab7c3facdbfb83d355d7e2785bdbdd1fad7bff51132df918da1701636389f29066be2b8707c348abd66b774ecf8eeb037e0fcc7b4e + checksum: 10c0/709975a01bfccfbd25690fa12a9a5d15685e9c31e09ff3bda0f573a94411ada81c2511a91c48cd638b32c7a5fb0a9283d5430f7bb1cf97a93ff5ea458f312c56 languageName: node linkType: hard -"@stylistic/eslint-plugin-ts@npm:1.5.4": - version: 1.5.4 - resolution: "@stylistic/eslint-plugin-ts@npm:1.5.4" +"@stylistic/eslint-plugin-ts@npm:2.3.0": + version: 2.3.0 + resolution: "@stylistic/eslint-plugin-ts@npm:2.3.0" dependencies: - "@stylistic/eslint-plugin-js": "npm:1.5.4" - "@typescript-eslint/utils": "npm:^6.19.0" + "@stylistic/eslint-plugin-js": "npm:2.3.0" + "@types/eslint": "npm:^8.56.10" + "@typescript-eslint/utils": "npm:^7.12.0" peerDependencies: eslint: ">=8.40.0" - checksum: 10c0/3327c31782c1d5c1077bac2dba8adf20ce7b6170f823b4a2686af4c0cf916364826d927478a6d42c1dcc4df21eb40c82f084983908858f36e875c6fc10d4a684 + checksum: 10c0/df8a334eccdbf4af291e40e0b14f07ff897778a653836c2c2e7f7f8e41608b0e151f0c9cf11863ff610bb6139a183a2cb465557dd09ae4b5957a8eee974c089b languageName: node linkType: hard -"@stylistic/eslint-plugin@npm:1.5.4": - version: 1.5.4 - resolution: "@stylistic/eslint-plugin@npm:1.5.4" +"@stylistic/eslint-plugin@npm:2.3.0": + version: 2.3.0 + resolution: "@stylistic/eslint-plugin@npm:2.3.0" dependencies: - "@stylistic/eslint-plugin-js": "npm:1.5.4" - "@stylistic/eslint-plugin-jsx": "npm:1.5.4" - "@stylistic/eslint-plugin-plus": "npm:1.5.4" - "@stylistic/eslint-plugin-ts": "npm:1.5.4" + "@stylistic/eslint-plugin-js": "npm:2.3.0" + "@stylistic/eslint-plugin-jsx": "npm:2.3.0" + "@stylistic/eslint-plugin-plus": "npm:2.3.0" + "@stylistic/eslint-plugin-ts": "npm:2.3.0" + "@types/eslint": "npm:^8.56.10" peerDependencies: eslint: ">=8.40.0" - checksum: 10c0/faf280c93a87f29105638d515af8c82d0721e3a4eaf3e944b22136c26f8318280f666b828e961626ea5de9453549e1875b0779683f0d530e8c1c2ed88e3627c3 + checksum: 10c0/17a82df97a0714406eab76cf42399ec37b47937df0e29ce2254622e734490234d770acf21c086f70415816a0ec3dc9a2da36a0aa18c8596bd9ec82a1ec8bc867 + languageName: node + linkType: hard + +"@surma/rollup-plugin-off-main-thread@npm:^2.2.3": + version: 2.2.3 + resolution: "@surma/rollup-plugin-off-main-thread@npm:2.2.3" + dependencies: + ejs: "npm:^3.1.6" + json5: "npm:^2.2.0" + magic-string: "npm:^0.25.0" + string.prototype.matchall: "npm:^4.0.6" + checksum: 10c0/4f36a7488cdae2907053a48231430e8e9aa8f1903a96131bf8325786afba3224011f9120164cae75043558bd051881050b071958388fe477927d340b1cc1a066 languageName: node linkType: hard @@ -3372,17 +5077,17 @@ __metadata: languageName: node linkType: hard -"@testing-library/jest-dom@npm:6.4.2": - version: 6.4.2 - resolution: "@testing-library/jest-dom@npm:6.4.2" +"@testing-library/jest-dom@npm:6.4.6": + version: 6.4.6 + resolution: "@testing-library/jest-dom@npm:6.4.6" dependencies: - "@adobe/css-tools": "npm:^4.3.2" + "@adobe/css-tools": "npm:^4.4.0" "@babel/runtime": "npm:^7.9.2" aria-query: "npm:^5.0.0" chalk: "npm:^3.0.0" css.escape: "npm:^1.5.1" dom-accessibility-api: "npm:^0.6.3" - lodash: "npm:^4.17.15" + lodash: "npm:^4.17.21" redent: "npm:^3.0.0" peerDependencies: "@jest/globals": ">= 28" @@ -3401,7 +5106,7 @@ __metadata: optional: true vitest: optional: true - checksum: 10c0/e7eba527b34ce30cde94424d2ec685bdfed51daaafb7df9b68b51aec6052e99a50c8bfe654612dacdf857a1eb81d68cf294fc89de558ee3a992bf7a6019fffcc + checksum: 10c0/8f369c1d27f8128b3794c6b9af5f5b794a47af4670819756e9f4e7cf69e277b30e8b89c548277a279918f648c85c6c7874f1a867e52edd4edb0629a2cf377daa languageName: node linkType: hard @@ -3419,6 +5124,15 @@ __metadata: languageName: node linkType: hard +"@testing-library/user-event@npm:^14.5.2": + version: 14.5.2 + resolution: "@testing-library/user-event@npm:14.5.2" + peerDependencies: + "@testing-library/dom": ">=7.21.4" + checksum: 10c0/68a0c2aa28a3c8e6eb05cafee29705438d7d8a9427423ce5064d44f19c29e89b5636de46dd2f28620fb10abba75c67130185bbc3aa23ac1163a227a5f36641e1 + languageName: node + linkType: hard + "@tootallnate/once@npm:2": version: 2.0.0 resolution: "@tootallnate/once@npm:2.0.0" @@ -3566,7 +5280,7 @@ __metadata: languageName: node linkType: hard -"@types/eslint@npm:*, @types/eslint@npm:^8.37.0, @types/eslint@npm:^8.56.2": +"@types/eslint@npm:*, @types/eslint@npm:^8.37.0": version: 8.56.6 resolution: "@types/eslint@npm:8.56.6" dependencies: @@ -3576,13 +5290,30 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:*, @types/estree@npm:^1.0.5": +"@types/eslint@npm:^8.56.10": + version: 8.56.10 + resolution: "@types/eslint@npm:8.56.10" + dependencies: + "@types/estree": "npm:*" + "@types/json-schema": "npm:*" + checksum: 10c0/674349d6c342c3864d70f4d5a9965f96fb253801532752c8c500ad6a1c2e8b219e01ccff5dc8791dcb58b5483012c495708bb9f3ff929f5c9322b3da126c15d3 + languageName: node + linkType: hard + +"@types/estree@npm:*, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.5": version: 1.0.5 resolution: "@types/estree@npm:1.0.5" checksum: 10c0/b3b0e334288ddb407c7b3357ca67dbee75ee22db242ca7c56fe27db4e1a31989cb8af48a84dd401deb787fe10cc6b2ab1ee82dc4783be87ededbe3d53c79c70d languageName: node linkType: hard +"@types/estree@npm:0.0.39": + version: 0.0.39 + resolution: "@types/estree@npm:0.0.39" + checksum: 10c0/f0af6c95ac1988c4827964bd9d3b51d24da442e2188943f6dfcb1e1559103d5d024d564b2e9d3f84c53714a02a0a7435c7441138eb63d9af5de4dfc66cdc0d92 + languageName: node + linkType: hard + "@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.33": version: 4.17.43 resolution: "@types/express-serve-static-core@npm:4.17.43" @@ -3685,7 +5416,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db @@ -3745,7 +5476,14 @@ __metadata: languageName: node linkType: hard -"@types/prop-types@npm:*": +"@types/parse-json@npm:^4.0.0": + version: 4.0.2 + resolution: "@types/parse-json@npm:4.0.2" + checksum: 10c0/b1b863ac34a2c2172fbe0807a1ec4d5cb684e48d422d15ec95980b81475fac4fdb3768a8b13eef39130203a7c04340fc167bae057c7ebcafd7dec9fe6c36aeb1 + languageName: node + linkType: hard + +"@types/prop-types@npm:*, @types/prop-types@npm:^15.7.11": version: 15.7.12 resolution: "@types/prop-types@npm:15.7.12" checksum: 10c0/1babcc7db6a1177779f8fde0ccc78d64d459906e6ef69a4ed4dd6339c920c2e05b074ee5a92120fe4e9d9f1a01c952f843ebd550bee2332fc2ef81d1706878f8 @@ -3775,6 +5513,15 @@ __metadata: languageName: node linkType: hard +"@types/react-transition-group@npm:^4.4.10": + version: 4.4.10 + resolution: "@types/react-transition-group@npm:4.4.10" + dependencies: + "@types/react": "npm:*" + checksum: 10c0/3eb9bca143abc21eb781aa5cb1bded0c9335689d515bf0513fb8e63217b7a8122c6a323ecd5644a06938727e1f467ee061d8df1c93b68825a80ff1b47ab777a2 + languageName: node + linkType: hard + "@types/react@npm:*": version: 18.2.69 resolution: "@types/react@npm:18.2.69" @@ -3786,6 +5533,13 @@ __metadata: languageName: node linkType: hard +"@types/resolve@npm:1.20.2": + version: 1.20.2 + resolution: "@types/resolve@npm:1.20.2" + checksum: 10c0/c5b7e1770feb5ccfb6802f6ad82a7b0d50874c99331e0c9b259e415e55a38d7a86ad0901c57665d93f75938be2a6a0bc9aa06c9749192cadb2e4512800bbc6e6 + languageName: node + linkType: hard + "@types/retry@npm:0.12.2": version: 0.12.2 resolution: "@types/retry@npm:0.12.2" @@ -3800,7 +5554,7 @@ __metadata: languageName: node linkType: hard -"@types/semver@npm:^7.3.12, @types/semver@npm:^7.5.0": +"@types/semver@npm:^7.3.12": version: 7.5.8 resolution: "@types/semver@npm:7.5.8" checksum: 10c0/8663ff927234d1c5fcc04b33062cb2b9fcfbe0f5f351ed26c4d1e1581657deebd506b41ff7fdf89e787e3d33ce05854bc01686379b89e9c49b564c4cfa988efa @@ -3860,6 +5614,13 @@ __metadata: languageName: node linkType: hard +"@types/trusted-types@npm:^2.0.2": + version: 2.0.7 + resolution: "@types/trusted-types@npm:2.0.7" + checksum: 10c0/4c4855f10de7c6c135e0d32ce462419d8abbbc33713b31d294596c0cc34ae1fa6112a2f9da729c8f7a20707782b0d69da3b1f8df6645b0366d08825ca1522e0c + languageName: node + linkType: hard + "@types/ws@npm:^8.5.10": version: 8.5.10 resolution: "@types/ws@npm:8.5.10" @@ -3885,46 +5646,44 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:6.20.0": - version: 6.20.0 - resolution: "@typescript-eslint/eslint-plugin@npm:6.20.0" +"@typescript-eslint/eslint-plugin@npm:7.15.0": + version: 7.15.0 + resolution: "@typescript-eslint/eslint-plugin@npm:7.15.0" dependencies: - "@eslint-community/regexpp": "npm:^4.5.1" - "@typescript-eslint/scope-manager": "npm:6.20.0" - "@typescript-eslint/type-utils": "npm:6.20.0" - "@typescript-eslint/utils": "npm:6.20.0" - "@typescript-eslint/visitor-keys": "npm:6.20.0" - debug: "npm:^4.3.4" + "@eslint-community/regexpp": "npm:^4.10.0" + "@typescript-eslint/scope-manager": "npm:7.15.0" + "@typescript-eslint/type-utils": "npm:7.15.0" + "@typescript-eslint/utils": "npm:7.15.0" + "@typescript-eslint/visitor-keys": "npm:7.15.0" graphemer: "npm:^1.4.0" - ignore: "npm:^5.2.4" + ignore: "npm:^5.3.1" natural-compare: "npm:^1.4.0" - semver: "npm:^7.5.4" - ts-api-utils: "npm:^1.0.1" + ts-api-utils: "npm:^1.3.0" peerDependencies: - "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 + "@typescript-eslint/parser": ^7.0.0 + eslint: ^8.56.0 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/5020faac39be476de056342f58f2bf68bb788f230e2fa4a2e27ceab8a5187dc450beba7333b0aa741a43aeaff45a117558132953f9390b5eca4c2cc004fde716 + checksum: 10c0/7ed4ef8355cb60f02ed603673ef749928a001931c534960d1f3f9f9b8092f4abd7ec1e80a33b4c38efb6e8e66c902583bd56a4c4d6ccbd870677a40680a7d1f5 languageName: node linkType: hard -"@typescript-eslint/parser@npm:6.20.0": - version: 6.20.0 - resolution: "@typescript-eslint/parser@npm:6.20.0" +"@typescript-eslint/parser@npm:7.15.0": + version: 7.15.0 + resolution: "@typescript-eslint/parser@npm:7.15.0" dependencies: - "@typescript-eslint/scope-manager": "npm:6.20.0" - "@typescript-eslint/types": "npm:6.20.0" - "@typescript-eslint/typescript-estree": "npm:6.20.0" - "@typescript-eslint/visitor-keys": "npm:6.20.0" + "@typescript-eslint/scope-manager": "npm:7.15.0" + "@typescript-eslint/types": "npm:7.15.0" + "@typescript-eslint/typescript-estree": "npm:7.15.0" + "@typescript-eslint/visitor-keys": "npm:7.15.0" debug: "npm:^4.3.4" peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.56.0 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/d84ad5e2282b1096c80dedb903c83ecc31eaf7be1aafcb14c18d9ec2d4a319f2fd1e5a9038b944d9f42c36c1c57add5e4292d4026ca7d3d5441d41286700d402 + checksum: 10c0/8dcad9b84e2cbf89afea97ee7f690f91b487eed21d01997126f98cb7dd56d3b6c98c7ecbdbeda35904af521c4ed746c47887e908f8a1e2148d47c05b491d7b9d languageName: node linkType: hard @@ -3938,40 +5697,30 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:6.20.0": - version: 6.20.0 - resolution: "@typescript-eslint/scope-manager@npm:6.20.0" +"@typescript-eslint/scope-manager@npm:7.15.0": + version: 7.15.0 + resolution: "@typescript-eslint/scope-manager@npm:7.15.0" dependencies: - "@typescript-eslint/types": "npm:6.20.0" - "@typescript-eslint/visitor-keys": "npm:6.20.0" - checksum: 10c0/f6768ed2dcd2d1771d55ed567ff392a6569ffd683a26500067509dd41769f8838c43686460fe7337144f324fd063df33f5d5646d44e5df4998ceffb3ad1fb790 + "@typescript-eslint/types": "npm:7.15.0" + "@typescript-eslint/visitor-keys": "npm:7.15.0" + checksum: 10c0/781ec31a07ab7f0bdfb07dd271ef6553aa98f8492f1b3a67c65d178c94d590f4fd2e0916450f2446f1da2fbe007f3454c360ccb25f4d69612f782eb499f400ab languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/scope-manager@npm:6.21.0" +"@typescript-eslint/type-utils@npm:7.15.0": + version: 7.15.0 + resolution: "@typescript-eslint/type-utils@npm:7.15.0" dependencies: - "@typescript-eslint/types": "npm:6.21.0" - "@typescript-eslint/visitor-keys": "npm:6.21.0" - checksum: 10c0/eaf868938d811cbbea33e97e44ba7050d2b6892202cea6a9622c486b85ab1cf801979edf78036179a8ba4ac26f1dfdf7fcc83a68c1ff66be0b3a8e9a9989b526 - languageName: node - linkType: hard - -"@typescript-eslint/type-utils@npm:6.20.0": - version: 6.20.0 - resolution: "@typescript-eslint/type-utils@npm:6.20.0" - dependencies: - "@typescript-eslint/typescript-estree": "npm:6.20.0" - "@typescript-eslint/utils": "npm:6.20.0" + "@typescript-eslint/typescript-estree": "npm:7.15.0" + "@typescript-eslint/utils": "npm:7.15.0" debug: "npm:^4.3.4" - ts-api-utils: "npm:^1.0.1" + ts-api-utils: "npm:^1.3.0" peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.56.0 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/8f622fbb14268f1d00b2948f995b570f0ef82be02c12be41d90385290a56ea0dbd34d855d6a5aff100b57f3bdd300ff0c300f16c78f12d6064f7ae6e34fd71bf + checksum: 10c0/06189eb05d741f05977bbc029c6ac46edd566e0136f2f2c22429fd5f2be1224e2d9135b7021bc686871bfaec9c05a5c9990a321762d3abd06e457486956326ba languageName: node linkType: hard @@ -3982,17 +5731,10 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:6.20.0": - version: 6.20.0 - resolution: "@typescript-eslint/types@npm:6.20.0" - checksum: 10c0/37589003b0e06f83c1945e3748e91af85918cfd997766894642a08e6f355f611cfe11df4e7632dda96e3a9b3441406283fe834ab0906cf81ea97fd43ca2aebe3 - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/types@npm:6.21.0" - checksum: 10c0/020631d3223bbcff8a0da3efbdf058220a8f48a3de221563996ad1dcc30d6c08dadc3f7608cc08830d21c0d565efd2db19b557b9528921c78aabb605eef2d74d +"@typescript-eslint/types@npm:7.15.0": + version: 7.15.0 + resolution: "@typescript-eslint/types@npm:7.15.0" + checksum: 10c0/935387b21d9fdff65de86f6350cdda1f0614e269324f3a4f0a2ca1b0d72ef4b1d40c7de2f3a20a6f8c83edca6507bfbac3168c860625859e59fc455c80392bed languageName: node linkType: hard @@ -4014,62 +5756,40 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:6.20.0": - version: 6.20.0 - resolution: "@typescript-eslint/typescript-estree@npm:6.20.0" +"@typescript-eslint/typescript-estree@npm:7.15.0": + version: 7.15.0 + resolution: "@typescript-eslint/typescript-estree@npm:7.15.0" dependencies: - "@typescript-eslint/types": "npm:6.20.0" - "@typescript-eslint/visitor-keys": "npm:6.20.0" + "@typescript-eslint/types": "npm:7.15.0" + "@typescript-eslint/visitor-keys": "npm:7.15.0" debug: "npm:^4.3.4" globby: "npm:^11.1.0" is-glob: "npm:^4.0.3" - minimatch: "npm:9.0.3" - semver: "npm:^7.5.4" - ts-api-utils: "npm:^1.0.1" + minimatch: "npm:^9.0.4" + semver: "npm:^7.6.0" + ts-api-utils: "npm:^1.3.0" peerDependenciesMeta: typescript: optional: true - checksum: 10c0/551f13445a303882d9fc0fbe14ef8507eb8414253fd87a5f13d2e324b5280b626421a238b8ec038e628bc80128dc06c057757f668738e82e64d5b39a9083c27d + checksum: 10c0/0d6e61cb36c4612147ceea796c2bdbb65fca59170d9d768cff314146c5564253a058cbcb9e251722cd76c92a90c257e1210a69f8d4377c8002f211c574d18d24 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/typescript-estree@npm:6.21.0" - dependencies: - "@typescript-eslint/types": "npm:6.21.0" - "@typescript-eslint/visitor-keys": "npm:6.21.0" - debug: "npm:^4.3.4" - globby: "npm:^11.1.0" - is-glob: "npm:^4.0.3" - minimatch: "npm:9.0.3" - semver: "npm:^7.5.4" - ts-api-utils: "npm:^1.0.1" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/af1438c60f080045ebb330155a8c9bb90db345d5069cdd5d01b67de502abb7449d6c75500519df829f913a6b3f490ade3e8215279b6bdc63d0fb0ae61034df5f - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:6.20.0": - version: 6.20.0 - resolution: "@typescript-eslint/utils@npm:6.20.0" +"@typescript-eslint/utils@npm:7.15.0, @typescript-eslint/utils@npm:^6.0.0 || ^7.0.0, @typescript-eslint/utils@npm:^7.12.0": + version: 7.15.0 + resolution: "@typescript-eslint/utils@npm:7.15.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" - "@types/json-schema": "npm:^7.0.12" - "@types/semver": "npm:^7.5.0" - "@typescript-eslint/scope-manager": "npm:6.20.0" - "@typescript-eslint/types": "npm:6.20.0" - "@typescript-eslint/typescript-estree": "npm:6.20.0" - semver: "npm:^7.5.4" + "@typescript-eslint/scope-manager": "npm:7.15.0" + "@typescript-eslint/types": "npm:7.15.0" + "@typescript-eslint/typescript-estree": "npm:7.15.0" peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - checksum: 10c0/0a8ede3d80a365b52ae96d88e4a9f6e6abf3569c6b60ff9f42ff900cd843ae7c5493cd95f8f2029d90bb0acbf31030980206af98e581d760d6d41e0f80e9fb86 + eslint: ^8.56.0 + checksum: 10c0/26aced17976cee0aa39a79201f68b384bbce1dc96e1c70d0e5f790e1e5655b1b1ddb2afd9eaf3fce9a48c0fb69daecd37a99fdbcdbf1cb58c65ae89ecac88a2c languageName: node linkType: hard -"@typescript-eslint/utils@npm:^5.10.0, @typescript-eslint/utils@npm:^5.58.0": +"@typescript-eslint/utils@npm:^5.58.0": version: 5.62.0 resolution: "@typescript-eslint/utils@npm:5.62.0" dependencies: @@ -4087,23 +5807,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:^6.19.0": - version: 6.21.0 - resolution: "@typescript-eslint/utils@npm:6.21.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.4.0" - "@types/json-schema": "npm:^7.0.12" - "@types/semver": "npm:^7.5.0" - "@typescript-eslint/scope-manager": "npm:6.21.0" - "@typescript-eslint/types": "npm:6.21.0" - "@typescript-eslint/typescript-estree": "npm:6.21.0" - semver: "npm:^7.5.4" - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - checksum: 10c0/ab2df3833b2582d4e5467a484d08942b4f2f7208f8e09d67de510008eb8001a9b7460f2f9ba11c12086fd3cdcac0c626761c7995c2c6b5657d5fa6b82030a32d - languageName: node - linkType: hard - "@typescript-eslint/visitor-keys@npm:5.62.0": version: 5.62.0 resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" @@ -4114,23 +5817,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:6.20.0": - version: 6.20.0 - resolution: "@typescript-eslint/visitor-keys@npm:6.20.0" +"@typescript-eslint/visitor-keys@npm:7.15.0": + version: 7.15.0 + resolution: "@typescript-eslint/visitor-keys@npm:7.15.0" dependencies: - "@typescript-eslint/types": "npm:6.20.0" - eslint-visitor-keys: "npm:^3.4.1" - checksum: 10c0/852d938f2e5d57200cf62733b42e73a369f797b097d17e8fd3fffd0f7315c3b9e1863eed60bb8d57d6535a3b7f1980f645f96ec6d513950f182bfa8107b33fab - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/visitor-keys@npm:6.21.0" - dependencies: - "@typescript-eslint/types": "npm:6.21.0" - eslint-visitor-keys: "npm:^3.4.1" - checksum: 10c0/7395f69739cfa1cb83c1fb2fad30afa2a814756367302fb4facd5893eff66abc807e8d8f63eba94ed3b0fe0c1c996ac9a1680bcbf0f83717acedc3f2bb724fbf + "@typescript-eslint/types": "npm:7.15.0" + eslint-visitor-keys: "npm:^3.4.3" + checksum: 10c0/7509f01c8cd2126a38213bc735a77aa7e976340af0d664be5b2ccd01b8211724b2ea129e33bfd32fe5feac848b7b68ca55bb533f6ccfeec1d2f26a91240489b9 languageName: node linkType: hard @@ -4419,6 +6112,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.12.0": + version: 8.12.1 + resolution: "acorn@npm:8.12.1" + bin: + acorn: bin/acorn + checksum: 10c0/51fb26cd678f914e13287e886da2d7021f8c2bc0ccc95e03d3e0447ee278dd3b40b9c57dc222acd5881adcf26f3edc40901a4953403232129e3876793cd17386 + languageName: node + linkType: hard + "add-stream@npm:^1.0.0": version: 1.0.0 resolution: "add-stream@npm:1.0.0" @@ -4512,6 +6214,18 @@ __metadata: languageName: node linkType: hard +"ajv@npm:^8.6.0": + version: 8.16.0 + resolution: "ajv@npm:8.16.0" + dependencies: + fast-deep-equal: "npm:^3.1.3" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + uri-js: "npm:^4.4.1" + checksum: 10c0/6fc38aa8fd4fbfaa7096ac049e48c0cb440db36b76fef2d7d5b7d92b102735670d055d412d19176c08c9d48eaa9d06661b67e59f04943dc71ab1551e0484f88c + languageName: node + linkType: hard + "ansi-escapes@npm:^4.2.1": version: 4.3.2 resolution: "ansi-escapes@npm:4.3.2" @@ -4616,7 +6330,7 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:5.1.3": +"aria-query@npm:5.1.3, aria-query@npm:~5.1.3": version: 5.1.3 resolution: "aria-query@npm:5.1.3" dependencies: @@ -4625,7 +6339,7 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:^5.0.0, aria-query@npm:^5.3.0": +"aria-query@npm:^5.0.0": version: 5.3.0 resolution: "aria-query@npm:5.3.0" dependencies: @@ -4658,7 +6372,7 @@ __metadata: languageName: node linkType: hard -"array-includes@npm:^3.1.6, array-includes@npm:^3.1.7": +"array-includes@npm:^3.1.6, array-includes@npm:^3.1.7, array-includes@npm:^3.1.8": version: 3.1.8 resolution: "array-includes@npm:3.1.8" dependencies: @@ -4692,6 +6406,20 @@ __metadata: languageName: node linkType: hard +"array.prototype.findlast@npm:^1.2.5": + version: 1.2.5 + resolution: "array.prototype.findlast@npm:1.2.5" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10c0/ddc952b829145ab45411b9d6adcb51a8c17c76bf89c9dd64b52d5dffa65d033da8c076ed2e17091779e83bc892b9848188d7b4b33453c5565e65a92863cb2775 + languageName: node + linkType: hard + "array.prototype.findlastindex@npm:^1.2.3": version: 1.2.5 resolution: "array.prototype.findlastindex@npm:1.2.5" @@ -4718,7 +6446,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.flatmap@npm:^1.3.1, array.prototype.flatmap@npm:^1.3.2": +"array.prototype.flatmap@npm:^1.3.2": version: 1.3.2 resolution: "array.prototype.flatmap@npm:1.3.2" dependencies: @@ -4730,16 +6458,28 @@ __metadata: languageName: node linkType: hard -"array.prototype.tosorted@npm:^1.1.1": - version: 1.1.3 - resolution: "array.prototype.tosorted@npm:1.1.3" +"array.prototype.toreversed@npm:^1.1.2": + version: 1.1.2 + resolution: "array.prototype.toreversed@npm:1.1.2" dependencies: - call-bind: "npm:^1.0.5" + call-bind: "npm:^1.0.2" + define-properties: "npm:^1.2.0" + es-abstract: "npm:^1.22.1" + es-shim-unscopables: "npm:^1.0.0" + checksum: 10c0/2b7627ea85eae1e80ecce665a500cc0f3355ac83ee4a1a727562c7c2a1d5f1c0b4dd7b65c468ec6867207e452ba01256910a2c0b41486bfdd11acf875a7a3435 + languageName: node + linkType: hard + +"array.prototype.tosorted@npm:^1.1.4": + version: 1.1.4 + resolution: "array.prototype.tosorted@npm:1.1.4" + dependencies: + call-bind: "npm:^1.0.7" define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.22.3" - es-errors: "npm:^1.1.0" + es-abstract: "npm:^1.23.3" + es-errors: "npm:^1.3.0" es-shim-unscopables: "npm:^1.0.2" - checksum: 10c0/a27e1ca51168ecacf6042901f5ef021e43c8fa04b6c6b6f2a30bac3645cd2b519cecbe0bc45db1b85b843f64dc3207f0268f700b4b9fbdec076d12d432cf0865 + checksum: 10c0/eb3c4c4fc0381b0bf6dba2ea4d48d367c2827a0d4236a5718d97caaccc6b78f11f4cadf090736e86301d295a6aa4967ed45568f92ced51be8cbbacd9ca410943 languageName: node linkType: hard @@ -4773,6 +6513,13 @@ __metadata: languageName: node linkType: hard +"async@npm:^3.2.3": + version: 3.2.5 + resolution: "async@npm:3.2.5" + checksum: 10c0/1408287b26c6db67d45cb346e34892cee555b8b59e6c68e6f8c3e495cad5ca13b4f218180e871f3c2ca30df4ab52693b66f2f6ff43644760cab0b2198bda79c1 + languageName: node + linkType: hard + "asynckit@npm:^0.4.0": version: 0.4.0 resolution: "asynckit@npm:0.4.0" @@ -4780,6 +6527,13 @@ __metadata: languageName: node linkType: hard +"at-least-node@npm:^1.0.0": + version: 1.0.0 + resolution: "at-least-node@npm:1.0.0" + checksum: 10c0/4c058baf6df1bc5a1697cf182e2029c58cd99975288a13f9e70068ef5d6f4e1f1fd7c4d2c3c4912eae44797d1725be9700995736deca441b39f3e66d8dee97ef + languageName: node + linkType: hard + "autoprefixer@npm:^10.4.16": version: 10.4.19 resolution: "autoprefixer@npm:10.4.19" @@ -4807,19 +6561,19 @@ __metadata: languageName: node linkType: hard -"axe-core@npm:=4.7.0": - version: 4.7.0 - resolution: "axe-core@npm:4.7.0" - checksum: 10c0/89ac5712b5932ac7d23398b4cb5ba081c394a086e343acc68ba49c83472706e18e0799804e8388c779dcdacc465377deb29f2714241d3fbb389cf3a6b275c9ba +"axe-core@npm:^4.9.1": + version: 4.9.1 + resolution: "axe-core@npm:4.9.1" + checksum: 10c0/ac9e5a0c6fa115a43ebffc32a1d2189e1ca6431b5a78e88cdcf94a72a25c5964185682edd94fe6bdb1cb4266c0d06301b022866e0e50dcdf6e3cefe556470110 languageName: node linkType: hard -"axobject-query@npm:^3.2.1": - version: 3.2.1 - resolution: "axobject-query@npm:3.2.1" +"axobject-query@npm:~3.1.1": + version: 3.1.1 + resolution: "axobject-query@npm:3.1.1" dependencies: - dequal: "npm:^2.0.3" - checksum: 10c0/f7debc2012e456139b57d888c223f6d3cb4b61eb104164a85e3d346273dd6ef0bc9a04b6660ca9407704a14a8e05fa6b6eb9d55f44f348c7210de7ffb350c3a7 + deep-equal: "npm:^2.0.5" + checksum: 10c0/fff3175a22fd1f41fceb7ae0cd25f6594a0d7fba28c2335dd904538b80eb4e1040432564a3c643025cd2bb748f68d35aaabffb780b794da97ecfc748810b25ad languageName: node linkType: hard @@ -4878,6 +6632,17 @@ __metadata: languageName: node linkType: hard +"babel-plugin-macros@npm:^3.1.0": + version: 3.1.0 + resolution: "babel-plugin-macros@npm:3.1.0" + dependencies: + "@babel/runtime": "npm:^7.12.5" + cosmiconfig: "npm:^7.0.0" + resolve: "npm:^1.19.0" + checksum: 10c0/c6dfb15de96f67871d95bd2e8c58b0c81edc08b9b087dc16755e7157f357dc1090a8dc60ebab955e92587a9101f02eba07e730adc253a1e4cf593ca3ebd3839c + languageName: node + linkType: hard + "babel-plugin-polyfill-corejs2@npm:^0.4.10, babel-plugin-polyfill-corejs2@npm:^0.4.8": version: 0.4.10 resolution: "babel-plugin-polyfill-corejs2@npm:0.4.10" @@ -5064,6 +6829,15 @@ __metadata: languageName: node linkType: hard +"braces@npm:^3.0.3": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: "npm:^7.1.1" + checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 + languageName: node + linkType: hard + "browserslist@npm:^4.0.0, browserslist@npm:^4.21.10, browserslist@npm:^4.22.1, browserslist@npm:^4.22.2, browserslist@npm:^4.23.0": version: 4.23.0 resolution: "browserslist@npm:4.23.0" @@ -5078,6 +6852,15 @@ __metadata: languageName: node linkType: hard +"bs-logger@npm:0.x": + version: 0.2.6 + resolution: "bs-logger@npm:0.2.6" + dependencies: + fast-json-stable-stringify: "npm:2.x" + checksum: 10c0/80e89aaaed4b68e3374ce936f2eb097456a0dddbf11f75238dbd53140b1e39259f0d248a5089ed456f1158984f22191c3658d54a713982f676709fbe1a6fa5a0 + languageName: node + linkType: hard + "bser@npm:2.1.1": version: 2.1.1 resolution: "bser@npm:2.1.1" @@ -5094,6 +6877,13 @@ __metadata: languageName: node linkType: hard +"builtin-modules@npm:^3.3.0": + version: 3.3.0 + resolution: "builtin-modules@npm:3.3.0" + checksum: 10c0/2cb3448b4f7306dc853632a4fcddc95e8d4e4b9868c139400027b71938fc6806d4ff44007deffb362ac85724bd40c2c6452fb6a0aa4531650eeddb98d8e5ee8a + languageName: node + linkType: hard + "bundle-name@npm:^4.1.0": version: 4.1.0 resolution: "bundle-name@npm:4.1.0" @@ -5211,13 +7001,6 @@ __metadata: languageName: node linkType: hard -"chalk@npm:5.3.0, chalk@npm:^5.3.0": - version: 5.3.0 - resolution: "chalk@npm:5.3.0" - checksum: 10c0/8297d436b2c0f95801103ff2ef67268d362021b8210daf8ddbe349695333eb3610a71122172ff3b0272f1ef2cf7cc2c41fdaa4715f52e49ffe04c56340feed09 - languageName: node - linkType: hard - "chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -5239,7 +7022,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.2": +"chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -5249,6 +7032,13 @@ __metadata: languageName: node linkType: hard +"chalk@npm:^5.3.0, chalk@npm:~5.3.0": + version: 5.3.0 + resolution: "chalk@npm:5.3.0" + checksum: 10c0/8297d436b2c0f95801103ff2ef67268d362021b8210daf8ddbe349695333eb3610a71122172ff3b0272f1ef2cf7cc2c41fdaa4715f52e49ffe04c56340feed09 + languageName: node + linkType: hard + "char-regex@npm:^1.0.2": version: 1.0.2 resolution: "char-regex@npm:1.0.2" @@ -5378,6 +7168,20 @@ __metadata: languageName: node linkType: hard +"clsx@npm:^1.1.0": + version: 1.2.1 + resolution: "clsx@npm:1.2.1" + checksum: 10c0/34dead8bee24f5e96f6e7937d711978380647e936a22e76380290e35486afd8634966ce300fc4b74a32f3762c7d4c0303f442c3e259f4ce02374eb0c82834f27 + languageName: node + linkType: hard + +"clsx@npm:^2.1.0": + version: 2.1.1 + resolution: "clsx@npm:2.1.1" + checksum: 10c0/c4c8eb865f8c82baab07e71bfa8897c73454881c4f99d6bc81585aecd7c441746c1399d08363dc096c550cceaf97bd4ce1e8854e1771e9998d9f94c4fe075839 + languageName: node + linkType: hard + "co@npm:^4.6.0": version: 4.6.0 resolution: "co@npm:4.6.0" @@ -5447,13 +7251,6 @@ __metadata: languageName: node linkType: hard -"commander@npm:11.1.0": - version: 11.1.0 - resolution: "commander@npm:11.1.0" - checksum: 10c0/13cc6ac875e48780250f723fb81c1c1178d35c5decb1abb1b628b3177af08a8554e76b2c0f29de72d69eef7c864d12613272a71fabef8047922bc622ab75a179 - languageName: node - linkType: hard - "commander@npm:^10.0.1": version: 10.0.1 resolution: "commander@npm:10.0.1" @@ -5489,6 +7286,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:~12.1.0": + version: 12.1.0 + resolution: "commander@npm:12.1.0" + checksum: 10c0/6e1996680c083b3b897bfc1cfe1c58dfbcd9842fd43e1aaf8a795fbc237f65efcc860a3ef457b318e73f29a4f4a28f6403c3d653d021d960e4632dd45bde54a9 + languageName: node + linkType: hard + "common-path-prefix@npm:^3.0.0": version: 3.0.0 resolution: "common-path-prefix@npm:3.0.0" @@ -5496,6 +7300,13 @@ __metadata: languageName: node linkType: hard +"common-tags@npm:^1.8.0": + version: 1.8.2 + resolution: "common-tags@npm:1.8.2" + checksum: 10c0/23efe47ff0a1a7c91489271b3a1e1d2a171c12ec7f9b35b29b2fce51270124aff0ec890087e2bc2182c1cb746e232ab7561aaafe05f1e7452aea733d2bfe3f63 + languageName: node + linkType: hard + "compare-func@npm:^2.0.0": version: 2.0.0 resolution: "compare-func@npm:2.0.0" @@ -5807,6 +7618,13 @@ __metadata: languageName: node linkType: hard +"convert-source-map@npm:^1.5.0": + version: 1.9.0 + resolution: "convert-source-map@npm:1.9.0" + checksum: 10c0/281da55454bf8126cbc6625385928c43479f2060984180c42f3a86c8b8c12720a24eac260624a7d1e090004028d2dee78602330578ceec1a08e27cb8bb0a8a5b + languageName: node + linkType: hard + "convert-source-map@npm:^2.0.0": version: 2.0.0 resolution: "convert-source-map@npm:2.0.0" @@ -5880,6 +7698,19 @@ __metadata: languageName: node linkType: hard +"cosmiconfig@npm:^7.0.0": + version: 7.1.0 + resolution: "cosmiconfig@npm:7.1.0" + dependencies: + "@types/parse-json": "npm:^4.0.0" + import-fresh: "npm:^3.2.1" + parse-json: "npm:^5.0.0" + path-type: "npm:^4.0.0" + yaml: "npm:^1.10.0" + checksum: 10c0/b923ff6af581638128e5f074a5450ba12c0300b71302398ea38dbeabd33bbcaa0245ca9adbedfcf284a07da50f99ede5658c80bb3e39e2ce770a99d28a21ef03 + languageName: node + linkType: hard + "cosmiconfig@npm:^8.1.3, cosmiconfig@npm:^8.2.0": version: 8.3.6 resolution: "cosmiconfig@npm:8.3.6" @@ -5938,6 +7769,15 @@ __metadata: languageName: node linkType: hard +"cross-fetch@npm:4.0.0": + version: 4.0.0 + resolution: "cross-fetch@npm:4.0.0" + dependencies: + node-fetch: "npm:^2.6.12" + checksum: 10c0/386727dc4c6b044746086aced959ff21101abb85c43df5e1d151547ccb6f338f86dec3f28b9dbddfa8ff5b9ec8662ed2263ad4607a93b2dc354fb7fe3bbb898a + languageName: node + linkType: hard + "cross-spawn@npm:7.0.3, cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" @@ -5949,6 +7789,13 @@ __metadata: languageName: node linkType: hard +"crypto-random-string@npm:^2.0.0": + version: 2.0.0 + resolution: "crypto-random-string@npm:2.0.0" + checksum: 10c0/288589b2484fe787f9e146f56c4be90b940018f17af1b152e4dde12309042ff5a2bf69e949aab8b8ac253948381529cc6f3e5a2427b73643a71ff177fa122b37 + languageName: node + linkType: hard + "css-blank-pseudo@npm:^6.0.0": version: 6.0.1 resolution: "css-blank-pseudo@npm:6.0.1" @@ -6213,7 +8060,7 @@ __metadata: languageName: node linkType: hard -"csstype@npm:^3.0.2": +"csstype@npm:^3.0.2, csstype@npm:^3.1.3": version: 3.1.3 resolution: "csstype@npm:3.1.3" checksum: 10c0/80c089d6f7e0c5b2bd83cf0539ab41474198579584fa10d86d0cafe0642202343cbc119e076a0b1aece191989477081415d66c9fefbf3c957fc2fc4b7009f248 @@ -6308,7 +8155,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:4.3.4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4": +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -6329,6 +8176,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:~4.3.4": + version: 4.3.5 + resolution: "debug@npm:4.3.5" + dependencies: + ms: "npm:2.1.2" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/082c375a2bdc4f4469c99f325ff458adad62a3fc2c482d59923c260cb08152f34e2659f72b3767db8bb2f21ca81a60a42d1019605a412132d7b9f59363a005cc + languageName: node + linkType: hard + "decamelize-keys@npm:^1.1.0": version: 1.1.1 resolution: "decamelize-keys@npm:1.1.1" @@ -6539,6 +8398,17 @@ __metadata: languageName: node linkType: hard +"dnd-core@npm:^16.0.1": + version: 16.0.1 + resolution: "dnd-core@npm:16.0.1" + dependencies: + "@react-dnd/asap": "npm:^5.0.1" + "@react-dnd/invariant": "npm:^4.0.1" + redux: "npm:^4.2.0" + checksum: 10c0/6b852c576c88b0a42e618efb37e046334f5e9914b8d38ad139933dd9595b6caf2a484953a6301094d23119c17479549553d71e92fd77fa37318122ea1e579f65 + languageName: node + linkType: hard + "dns-packet@npm:^5.2.2": version: 5.6.1 resolution: "dns-packet@npm:5.6.1" @@ -6589,6 +8459,16 @@ __metadata: languageName: node linkType: hard +"dom-helpers@npm:^5.0.1": + version: 5.2.1 + resolution: "dom-helpers@npm:5.2.1" + dependencies: + "@babel/runtime": "npm:^7.8.7" + csstype: "npm:^3.0.2" + checksum: 10c0/f735074d66dd759b36b158fa26e9d00c9388ee0e8c9b16af941c38f014a37fc80782de83afefd621681b19ac0501034b4f1c4a3bff5caa1b8667f0212b5e124c + languageName: node + linkType: hard + "dom-serializer@npm:^1.0.1": version: 1.4.1 resolution: "dom-serializer@npm:1.4.1" @@ -6733,6 +8613,17 @@ __metadata: languageName: node linkType: hard +"ejs@npm:^3.1.6": + version: 3.1.10 + resolution: "ejs@npm:3.1.10" + dependencies: + jake: "npm:^10.8.5" + bin: + ejs: bin/cli.js + checksum: 10c0/52eade9e68416ed04f7f92c492183340582a36482836b11eab97b159fcdcfdedc62233a1bf0bf5e5e1851c501f2dca0e2e9afd111db2599e4e7f53ee29429ae1 + languageName: node + linkType: hard + "electron-to-chromium@npm:^1.4.668": version: 1.4.715 resolution: "electron-to-chromium@npm:1.4.715" @@ -6867,6 +8758,60 @@ __metadata: languageName: node linkType: hard +"es-abstract@npm:^1.17.5, es-abstract@npm:^1.23.3": + version: 1.23.3 + resolution: "es-abstract@npm:1.23.3" + dependencies: + array-buffer-byte-length: "npm:^1.0.1" + arraybuffer.prototype.slice: "npm:^1.0.3" + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.7" + data-view-buffer: "npm:^1.0.1" + data-view-byte-length: "npm:^1.0.1" + data-view-byte-offset: "npm:^1.0.0" + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + es-set-tostringtag: "npm:^2.0.3" + es-to-primitive: "npm:^1.2.1" + function.prototype.name: "npm:^1.1.6" + get-intrinsic: "npm:^1.2.4" + get-symbol-description: "npm:^1.0.2" + globalthis: "npm:^1.0.3" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.2" + has-proto: "npm:^1.0.3" + has-symbols: "npm:^1.0.3" + hasown: "npm:^2.0.2" + internal-slot: "npm:^1.0.7" + is-array-buffer: "npm:^3.0.4" + is-callable: "npm:^1.2.7" + is-data-view: "npm:^1.0.1" + is-negative-zero: "npm:^2.0.3" + is-regex: "npm:^1.1.4" + is-shared-array-buffer: "npm:^1.0.3" + is-string: "npm:^1.0.7" + is-typed-array: "npm:^1.1.13" + is-weakref: "npm:^1.0.2" + object-inspect: "npm:^1.13.1" + object-keys: "npm:^1.1.1" + object.assign: "npm:^4.1.5" + regexp.prototype.flags: "npm:^1.5.2" + safe-array-concat: "npm:^1.1.2" + safe-regex-test: "npm:^1.0.3" + string.prototype.trim: "npm:^1.2.9" + string.prototype.trimend: "npm:^1.0.8" + string.prototype.trimstart: "npm:^1.0.8" + typed-array-buffer: "npm:^1.0.2" + typed-array-byte-length: "npm:^1.0.1" + typed-array-byte-offset: "npm:^1.0.2" + typed-array-length: "npm:^1.0.6" + unbox-primitive: "npm:^1.0.2" + which-typed-array: "npm:^1.1.15" + checksum: 10c0/d27e9afafb225c6924bee9971a7f25f20c314f2d6cb93a63cada4ac11dcf42040896a6c22e5fb8f2a10767055ed4ddf400be3b1eb12297d281726de470b75666 + languageName: node + linkType: hard + "es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.1, es-abstract@npm:^1.23.2": version: 1.23.2 resolution: "es-abstract@npm:1.23.2" @@ -6930,7 +8875,7 @@ __metadata: languageName: node linkType: hard -"es-errors@npm:^1.1.0, es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": +"es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": version: 1.3.0 resolution: "es-errors@npm:1.3.0" checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 @@ -6954,13 +8899,13 @@ __metadata: languageName: node linkType: hard -"es-iterator-helpers@npm:^1.0.12, es-iterator-helpers@npm:^1.0.15": - version: 1.0.18 - resolution: "es-iterator-helpers@npm:1.0.18" +"es-iterator-helpers@npm:^1.0.19": + version: 1.0.19 + resolution: "es-iterator-helpers@npm:1.0.19" dependencies: call-bind: "npm:^1.0.7" define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.0" + es-abstract: "npm:^1.23.3" es-errors: "npm:^1.3.0" es-set-tostringtag: "npm:^2.0.3" function-bind: "npm:^1.1.2" @@ -6972,7 +8917,7 @@ __metadata: internal-slot: "npm:^1.0.7" iterator.prototype: "npm:^1.1.2" safe-array-concat: "npm:^1.1.2" - checksum: 10c0/93be402e01fa3d8bf62fcadd2fb3055126ffcfe8846911b10b85918ef46775252696c84e6191ec8125bedb61e92242ad1a54a86118436ba19814720cb9ff4aed + checksum: 10c0/ae8f0241e383b3d197383b9842c48def7fce0255fb6ed049311b686ce295595d9e389b466f6a1b7d4e7bb92d82f5e716d6fae55e20c1040249bf976743b038c5 languageName: node linkType: hard @@ -7170,29 +9115,29 @@ __metadata: languageName: node linkType: hard -"eslint-config-ksv741@npm:0.0.2": - version: 0.0.2 - resolution: "eslint-config-ksv741@npm:0.0.2" +"eslint-config-ksv741@npm:0.0.3": + version: 0.0.3 + resolution: "eslint-config-ksv741@npm:0.0.3" dependencies: - "@stylistic/eslint-plugin": "npm:1.5.4" - "@typescript-eslint/eslint-plugin": "npm:6.20.0" - "@typescript-eslint/parser": "npm:6.20.0" + "@stylistic/eslint-plugin": "npm:2.3.0" + "@typescript-eslint/eslint-plugin": "npm:7.15.0" + "@typescript-eslint/parser": "npm:7.15.0" eslint-import-resolver-typescript: "npm:3.6.1" eslint-plugin-import: "npm:2.29.1" - eslint-plugin-jest: "npm:27.9.0" - eslint-plugin-jest-dom: "npm:5.2.0" + eslint-plugin-jest: "npm:28.6.0" + eslint-plugin-jest-dom: "npm:5.4.0" eslint-plugin-jest-formatting: "npm:3.1.0" - eslint-plugin-jsx-a11y: "npm:6.8.0" - eslint-plugin-react: "npm:7.33.2" - eslint-plugin-react-hooks: "npm:4.6.0" - eslint-plugin-testing-library: "npm:6.2.0" + eslint-plugin-jsx-a11y: "npm:6.9.0" + eslint-plugin-react: "npm:7.34.3" + eslint-plugin-react-hooks: "npm:4.6.2" + eslint-plugin-testing-library: "npm:6.2.2" peerDependencies: eslint: ">=8.56.0" typescript: ">=4.2.2" peerDependenciesMeta: typescript: optional: true - checksum: 10c0/0fae6908f4d69fefcc07276284f1acb97d296ea18367a02af7fc112b1888db796f86d04130f810df6a6a3828ca79f0889055f1b5e5fdc745724a89bb0ca7ddd0 + checksum: 10c0/86933a03582e58015805b1405a622bff93a5074b0c68b6d622b776ceda7c5dfe08b06264f086a401aeece703f04ebc3c6f9a77b58a28258815aca105ea8d6fd9 languageName: node linkType: hard @@ -7286,19 +9231,19 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jest-dom@npm:5.2.0": - version: 5.2.0 - resolution: "eslint-plugin-jest-dom@npm:5.2.0" +"eslint-plugin-jest-dom@npm:5.4.0": + version: 5.4.0 + resolution: "eslint-plugin-jest-dom@npm:5.4.0" dependencies: "@babel/runtime": "npm:^7.16.3" requireindex: "npm:^1.2.0" peerDependencies: - "@testing-library/dom": ^8.0.0 || ^9.0.0 - eslint: ^6.8.0 || ^7.0.0 || ^8.0.0 + "@testing-library/dom": ^8.0.0 || ^9.0.0 || ^10.0.0 + eslint: ^6.8.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 peerDependenciesMeta: "@testing-library/dom": optional: true - checksum: 10c0/07ab52063c64ca74f343827b7e648119f00786d4c3ddb6f0364c5fa8c4ba90b447904cc90ca39e6b2548fb5e0ae26271fbf77ad20fa92d3ab5faa464fcba87ba + checksum: 10c0/7a3cab6bae787345f1e485a2b767068121ce5084276d67ab2132411792c63f1303cdebfb9fad8c755baaabaa10e0511e606a4175a56fe8fd199062807b2cda10 languageName: node linkType: hard @@ -7311,93 +9256,95 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jest@npm:27.9.0": - version: 27.9.0 - resolution: "eslint-plugin-jest@npm:27.9.0" +"eslint-plugin-jest@npm:28.6.0": + version: 28.6.0 + resolution: "eslint-plugin-jest@npm:28.6.0" dependencies: - "@typescript-eslint/utils": "npm:^5.10.0" + "@typescript-eslint/utils": "npm:^6.0.0 || ^7.0.0" peerDependencies: - "@typescript-eslint/eslint-plugin": ^5.0.0 || ^6.0.0 || ^7.0.0 - eslint: ^7.0.0 || ^8.0.0 + "@typescript-eslint/eslint-plugin": ^6.0.0 || ^7.0.0 + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 jest: "*" peerDependenciesMeta: "@typescript-eslint/eslint-plugin": optional: true jest: optional: true - checksum: 10c0/b8b09f7d8ba3d84a8779a6e95702a6e4dce45ab034e4edf5ddb631e77cd38dcdf791dfd9228e0a0d1d80d1eb2d278deb62ad2ec39f10fb8fd43cec07304e0c38 + checksum: 10c0/301008d8dd3578a74c92011b3fcbbe4b60d2dbe342f525a31f05b3fcd0e17d514459cf4df65c510062e65b4f19c06b3a27504500a07fe339fd6eb20362620e50 languageName: node linkType: hard -"eslint-plugin-jsx-a11y@npm:6.8.0": - version: 6.8.0 - resolution: "eslint-plugin-jsx-a11y@npm:6.8.0" +"eslint-plugin-jsx-a11y@npm:6.9.0": + version: 6.9.0 + resolution: "eslint-plugin-jsx-a11y@npm:6.9.0" dependencies: - "@babel/runtime": "npm:^7.23.2" - aria-query: "npm:^5.3.0" - array-includes: "npm:^3.1.7" + aria-query: "npm:~5.1.3" + array-includes: "npm:^3.1.8" array.prototype.flatmap: "npm:^1.3.2" ast-types-flow: "npm:^0.0.8" - axe-core: "npm:=4.7.0" - axobject-query: "npm:^3.2.1" + axe-core: "npm:^4.9.1" + axobject-query: "npm:~3.1.1" damerau-levenshtein: "npm:^1.0.8" emoji-regex: "npm:^9.2.2" - es-iterator-helpers: "npm:^1.0.15" - hasown: "npm:^2.0.0" + es-iterator-helpers: "npm:^1.0.19" + hasown: "npm:^2.0.2" jsx-ast-utils: "npm:^3.3.5" language-tags: "npm:^1.0.9" minimatch: "npm:^3.1.2" - object.entries: "npm:^1.1.7" - object.fromentries: "npm:^2.0.7" + object.fromentries: "npm:^2.0.8" + safe-regex-test: "npm:^1.0.3" + string.prototype.includes: "npm:^2.0.0" peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 10c0/199b883e526e6f9d7c54cb3f094abc54f11a1ec816db5fb6cae3b938eb0e503acc10ccba91ca7451633a9d0b9abc0ea03601844a8aba5fe88c5e8897c9ac8f49 + checksum: 10c0/72ac719ca90b6149c8f3c708ac5b1177f6757668b6e174d72a78512d4ac10329331b9c666c21e9561237a96a45d7f147f6a5d270dadbb99eb4ee093f127792c3 languageName: node linkType: hard -"eslint-plugin-react-hooks@npm:4.6.0": - version: 4.6.0 - resolution: "eslint-plugin-react-hooks@npm:4.6.0" +"eslint-plugin-react-hooks@npm:4.6.2": + version: 4.6.2 + resolution: "eslint-plugin-react-hooks@npm:4.6.2" peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - checksum: 10c0/58c7e10ea5792c33346fcf5cb4024e14837035ce412ff99c2dcb7c4f903dc9b17939078f80bfef826301ce326582c396c00e8e0ac9d10ac2cde2b42d33763c65 + checksum: 10c0/4844e58c929bc05157fb70ba1e462e34f1f4abcbc8dd5bbe5b04513d33e2699effb8bca668297976ceea8e7ebee4e8fc29b9af9d131bcef52886feaa2308b2cc languageName: node linkType: hard -"eslint-plugin-react@npm:7.33.2": - version: 7.33.2 - resolution: "eslint-plugin-react@npm:7.33.2" +"eslint-plugin-react@npm:7.34.3": + version: 7.34.3 + resolution: "eslint-plugin-react@npm:7.34.3" dependencies: - array-includes: "npm:^3.1.6" - array.prototype.flatmap: "npm:^1.3.1" - array.prototype.tosorted: "npm:^1.1.1" + array-includes: "npm:^3.1.8" + array.prototype.findlast: "npm:^1.2.5" + array.prototype.flatmap: "npm:^1.3.2" + array.prototype.toreversed: "npm:^1.1.2" + array.prototype.tosorted: "npm:^1.1.4" doctrine: "npm:^2.1.0" - es-iterator-helpers: "npm:^1.0.12" + es-iterator-helpers: "npm:^1.0.19" estraverse: "npm:^5.3.0" jsx-ast-utils: "npm:^2.4.1 || ^3.0.0" minimatch: "npm:^3.1.2" - object.entries: "npm:^1.1.6" - object.fromentries: "npm:^2.0.6" - object.hasown: "npm:^1.1.2" - object.values: "npm:^1.1.6" + object.entries: "npm:^1.1.8" + object.fromentries: "npm:^2.0.8" + object.hasown: "npm:^1.1.4" + object.values: "npm:^1.2.0" prop-types: "npm:^15.8.1" - resolve: "npm:^2.0.0-next.4" + resolve: "npm:^2.0.0-next.5" semver: "npm:^6.3.1" - string.prototype.matchall: "npm:^4.0.8" + string.prototype.matchall: "npm:^4.0.11" peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 10c0/f9b247861024bafc396c4bd3c9ac946604b3b23077251c98f23602aa22027a0c33a69157fd49564e4ff7f17b3678e5dc366a46c7ec42a09454d7cbce786d5001 + checksum: 10c0/60717e32c9948e2b4ddc53dac7c4b62c68fc7129c3249079191c941c08ebe7d1f4793d65182922d19427c2a6634e05231a7b74ceee34169afdfd0e43d4a43d26 languageName: node linkType: hard -"eslint-plugin-testing-library@npm:6.2.0": - version: 6.2.0 - resolution: "eslint-plugin-testing-library@npm:6.2.0" +"eslint-plugin-testing-library@npm:6.2.2": + version: 6.2.2 + resolution: "eslint-plugin-testing-library@npm:6.2.2" dependencies: "@typescript-eslint/utils": "npm:^5.58.0" peerDependencies: eslint: ^7.5.0 || ^8.0.0 - checksum: 10c0/00ed418670f5842151d8a195315aaaf36f4b19e62d539c67be40edf634914a95cc0f65bdb30a4e7a078aafecd5bae423dd4d1f96b2879e72bb9cb80d09a3916c + checksum: 10c0/f7dd5ba10ea448438f32f240958d183d0e52738c140670657b8adc5b95787fb7bb9e3b88d885be130a91c10a2f8c346f603bddabd6ac93813ca2224bedfd49f0 languageName: node linkType: hard @@ -7428,6 +9375,13 @@ __metadata: languageName: node linkType: hard +"eslint-visitor-keys@npm:^4.0.0": + version: 4.0.0 + resolution: "eslint-visitor-keys@npm:4.0.0" + checksum: 10c0/76619f42cf162705a1515a6868e6fc7567e185c7063a05621a8ac4c3b850d022661262c21d9f1fc1d144ecf0d5d64d70a3f43c15c3fc969a61ace0fb25698cf5 + languageName: node + linkType: hard + "eslint-webpack-plugin@npm:4.0.1": version: 4.0.1 resolution: "eslint-webpack-plugin@npm:4.0.1" @@ -7492,6 +9446,17 @@ __metadata: languageName: node linkType: hard +"espree@npm:^10.0.1": + version: 10.1.0 + resolution: "espree@npm:10.1.0" + dependencies: + acorn: "npm:^8.12.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^4.0.0" + checksum: 10c0/52e6feaa77a31a6038f0c0e3fce93010a4625701925b0715cd54a2ae190b3275053a0717db698697b32653788ac04845e489d6773b508d6c2e8752f3c57470a0 + languageName: node + linkType: hard + "espree@npm:^9.6.0, espree@npm:^9.6.1": version: 9.6.1 resolution: "espree@npm:9.6.1" @@ -7545,6 +9510,20 @@ __metadata: languageName: node linkType: hard +"estree-walker@npm:^1.0.1": + version: 1.0.1 + resolution: "estree-walker@npm:1.0.1" + checksum: 10c0/fa9e5f8c1bbe8d01e314c0f03067b64a4f22d4c58410fc5237060d0c15b81e58c23921c41acc60abbdab490f1fdfcbd6408ede2d03ca704454272e0244d61a55 + languageName: node + linkType: hard + +"estree-walker@npm:^2.0.2": + version: 2.0.2 + resolution: "estree-walker@npm:2.0.2" + checksum: 10c0/53a6c54e2019b8c914dc395890153ffdc2322781acf4bd7d1a32d7aedc1710807bdcd866ac133903d5629ec601fbb50abe8c2e5553c7f5a0afdd9b6af6c945af + languageName: node + linkType: hard + "esutils@npm:^2.0.2": version: 2.0.3 resolution: "esutils@npm:2.0.3" @@ -7580,23 +9559,6 @@ __metadata: languageName: node linkType: hard -"execa@npm:8.0.1, execa@npm:^8.0.1": - version: 8.0.1 - resolution: "execa@npm:8.0.1" - dependencies: - cross-spawn: "npm:^7.0.3" - get-stream: "npm:^8.0.1" - human-signals: "npm:^5.0.0" - is-stream: "npm:^3.0.0" - merge-stream: "npm:^2.0.0" - npm-run-path: "npm:^5.1.0" - onetime: "npm:^6.0.0" - signal-exit: "npm:^4.1.0" - strip-final-newline: "npm:^3.0.0" - checksum: 10c0/2c52d8775f5bf103ce8eec9c7ab3059909ba350a5164744e9947ed14a53f51687c040a250bda833f906d1283aa8803975b84e6c8f7a7c42f99dc8ef80250d1af - languageName: node - linkType: hard - "execa@npm:^5.0.0": version: 5.1.1 resolution: "execa@npm:5.1.1" @@ -7614,6 +9576,23 @@ __metadata: languageName: node linkType: hard +"execa@npm:^8.0.1, execa@npm:~8.0.1": + version: 8.0.1 + resolution: "execa@npm:8.0.1" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^8.0.1" + human-signals: "npm:^5.0.0" + is-stream: "npm:^3.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^5.1.0" + onetime: "npm:^6.0.0" + signal-exit: "npm:^4.1.0" + strip-final-newline: "npm:^3.0.0" + checksum: 10c0/2c52d8775f5bf103ce8eec9c7ab3059909ba350a5164744e9947ed14a53f51687c040a250bda833f906d1283aa8803975b84e6c8f7a7c42f99dc8ef80250d1af + languageName: node + linkType: hard + "exit@npm:^0.1.2": version: 0.1.2 resolution: "exit@npm:0.1.2" @@ -7700,7 +9679,7 @@ __metadata: languageName: node linkType: hard -"fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": +"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b @@ -7766,6 +9745,15 @@ __metadata: languageName: node linkType: hard +"filelist@npm:^1.0.4": + version: 1.0.4 + resolution: "filelist@npm:1.0.4" + dependencies: + minimatch: "npm:^5.0.1" + checksum: 10c0/426b1de3944a3d153b053f1c0ebfd02dccd0308a4f9e832ad220707a6d1f1b3c9784d6cadf6b2f68f09a57565f63ebc7bcdc913ccf8012d834f472c46e596f41 + languageName: node + linkType: hard + "fill-range@npm:^7.0.1": version: 7.0.1 resolution: "fill-range@npm:7.0.1" @@ -7775,6 +9763,15 @@ __metadata: languageName: node linkType: hard +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 + languageName: node + linkType: hard + "finalhandler@npm:1.2.0": version: 1.2.0 resolution: "finalhandler@npm:1.2.0" @@ -7988,6 +9985,18 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:^9.0.1": + version: 9.1.0 + resolution: "fs-extra@npm:9.1.0" + dependencies: + at-least-node: "npm:^1.0.0" + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/9b808bd884beff5cb940773018179a6b94a966381d005479f00adda6b44e5e3d4abf765135773d849cc27efe68c349e4a7b86acd7d3306d5932c14f3a4b17a92 + languageName: node + linkType: hard + "fs-minipass@npm:^2.0.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" @@ -8099,6 +10108,13 @@ __metadata: languageName: node linkType: hard +"get-own-enumerable-property-symbols@npm:^3.0.0": + version: 3.0.2 + resolution: "get-own-enumerable-property-symbols@npm:3.0.2" + checksum: 10c0/103999855f3d1718c631472437161d76962cbddcd95cc642a34c07bfb661ed41b6c09a9c669ccdff89ee965beb7126b80eec7b2101e20e31e9cc6c4725305e10 + languageName: node + linkType: hard + "get-package-type@npm:^0.1.0": version: 0.1.0 resolution: "get-package-type@npm:0.1.0" @@ -8268,7 +10284,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.3, glob@npm:^7.1.4": +"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -8344,6 +10360,15 @@ __metadata: languageName: node linkType: hard +"goober@npm:^2.0.33": + version: 2.1.14 + resolution: "goober@npm:2.1.14" + peerDependencies: + csstype: ^3.0.10 + checksum: 10c0/184eda787a9a14cffbaa8284e98dc127095e538b4acab2a84b81babca84253bb883e16208822e02584f27c7a69f3ec47341e5060dfa40a0e07c32ac1f79b2714 + languageName: node + linkType: hard + "gopd@npm:^1.0.1": version: 1.0.1 resolution: "gopd@npm:1.0.1" @@ -8486,6 +10511,15 @@ __metadata: languageName: node linkType: hard +"hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": + version: 3.3.2 + resolution: "hoist-non-react-statics@npm:3.3.2" + dependencies: + react-is: "npm:^16.7.0" + checksum: 10c0/fe0889169e845d738b59b64badf5e55fa3cf20454f9203d1eb088df322d49d4318df774828e789898dcb280e8a5521bb59b3203385662ca5e9218a6ca5820e74 + languageName: node + linkType: hard + "hosted-git-info@npm:^2.1.4": version: 2.8.9 resolution: "hosted-git-info@npm:2.8.9" @@ -8554,6 +10588,15 @@ __metadata: languageName: node linkType: hard +"html-parse-stringify@npm:^3.0.1": + version: 3.0.1 + resolution: "html-parse-stringify@npm:3.0.1" + dependencies: + void-elements: "npm:3.1.0" + checksum: 10c0/159292753d48b84d216d61121054ae5a33466b3db5b446e2ffc093ac077a411a99ce6cbe0d18e55b87cf25fa3c5a86c4d8b130b9719ec9b66623259000c72c15 + languageName: node + linkType: hard + "html-webpack-plugin@npm:5.6.0": version: 5.6.0 resolution: "html-webpack-plugin@npm:5.6.0" @@ -8726,6 +10769,33 @@ __metadata: languageName: node linkType: hard +"i18next-browser-languagedetector@npm:8.0.0": + version: 8.0.0 + resolution: "i18next-browser-languagedetector@npm:8.0.0" + dependencies: + "@babel/runtime": "npm:^7.23.2" + checksum: 10c0/08a7c747ec18a0743b54390a0b42836d814b15fb49c92b90c259298e6a6e7e001ff9df99d0fd308283a34fceea53b4d9053aa1695a37f696bc04160017bbb524 + languageName: node + linkType: hard + +"i18next-http-backend@npm:2.5.2": + version: 2.5.2 + resolution: "i18next-http-backend@npm:2.5.2" + dependencies: + cross-fetch: "npm:4.0.0" + checksum: 10c0/57cfbeeea40a751134e1521fac89b14b780c9ad87b74a4f7d7168a88a8b603efed9f5df455dddbb408f7e268eae5aa0a6888e47b9f10cb9482d812d4d6997ffa + languageName: node + linkType: hard + +"i18next@npm:23.11.5": + version: 23.11.5 + resolution: "i18next@npm:23.11.5" + dependencies: + "@babel/runtime": "npm:^7.23.2" + checksum: 10c0/b0bec64250a3e529d4c51e2fc511406a85c5dde3d005d3aabe919551ca31dfc0a8f5490bf6e44649822e895a1fa91a58092d112367669cd11b2eb89e6ba90d1a + languageName: node + linkType: hard + "iconv-lite@npm:0.4.24": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" @@ -8753,6 +10823,13 @@ __metadata: languageName: node linkType: hard +"idb@npm:^7.0.1": + version: 7.1.1 + resolution: "idb@npm:7.1.1" + checksum: 10c0/72418e4397638797ee2089f97b45fc29f937b830bc0eb4126f4a9889ecf10320ceacf3a177fe5d7ffaf6b4fe38b20bbd210151549bfdc881db8081eed41c870d + languageName: node + linkType: hard + "identity-obj-proxy@npm:3.0.0": version: 3.0.0 resolution: "identity-obj-proxy@npm:3.0.0" @@ -8762,7 +10839,7 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.2.0, ignore@npm:^5.2.4": +"ignore@npm:^5.2.0, ignore@npm:^5.2.4, ignore@npm:^5.3.1": version: 5.3.1 resolution: "ignore@npm:5.3.1" checksum: 10c0/703f7f45ffb2a27fb2c5a8db0c32e7dee66b33a225d28e8db4e1be6474795f606686a6e3bcc50e1aa12f2042db4c9d4a7d60af3250511de74620fbed052ea4cd @@ -8970,6 +11047,15 @@ __metadata: languageName: node linkType: hard +"is-builtin-module@npm:^3.2.1": + version: 3.2.1 + resolution: "is-builtin-module@npm:3.2.1" + dependencies: + builtin-modules: "npm:^3.3.0" + checksum: 10c0/5a66937a03f3b18803381518f0ef679752ac18cdb7dd53b5e23ee8df8d440558737bd8dcc04d2aae555909d2ecb4a81b5c0d334d119402584b61e6a003e31af1 + languageName: node + linkType: hard + "is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": version: 1.2.7 resolution: "is-callable@npm:1.2.7" @@ -9102,6 +11188,13 @@ __metadata: languageName: node linkType: hard +"is-module@npm:^1.0.0": + version: 1.0.0 + resolution: "is-module@npm:1.0.0" + checksum: 10c0/795a3914bcae7c26a1c23a1e5574c42eac13429625045737bf3e324ce865c0601d61aee7a5afbca1bee8cb300c7d9647e7dc98860c9bdbc3b7fdc51d8ac0bffc + languageName: node + linkType: hard + "is-negative-zero@npm:^2.0.3": version: 2.0.3 resolution: "is-negative-zero@npm:2.0.3" @@ -9132,6 +11225,13 @@ __metadata: languageName: node linkType: hard +"is-obj@npm:^1.0.1": + version: 1.0.1 + resolution: "is-obj@npm:1.0.1" + checksum: 10c0/5003acba0af7aa47dfe0760e545a89bbac89af37c12092c3efadc755372cdaec034f130e7a3653a59eb3c1843cfc72ca71eaf1a6c3bafe5a0bab3611a47f9945 + languageName: node + linkType: hard + "is-obj@npm:^2.0.0": version: 2.0.0 resolution: "is-obj@npm:2.0.0" @@ -9193,6 +11293,13 @@ __metadata: languageName: node linkType: hard +"is-regexp@npm:^1.0.0": + version: 1.0.0 + resolution: "is-regexp@npm:1.0.0" + checksum: 10c0/34cacda1901e00f6e44879378f1d2fa96320ea956c1bec27713130aaf1d44f6e7bd963eed28945bfe37e600cb27df1cf5207302680dad8bdd27b9baff8ecf611 + languageName: node + linkType: hard + "is-set@npm:^2.0.2, is-set@npm:^2.0.3": version: 2.0.3 resolution: "is-set@npm:2.0.3" @@ -9429,6 +11536,20 @@ __metadata: languageName: node linkType: hard +"jake@npm:^10.8.5": + version: 10.9.1 + resolution: "jake@npm:10.9.1" + dependencies: + async: "npm:^3.2.3" + chalk: "npm:^4.0.2" + filelist: "npm:^1.0.4" + minimatch: "npm:^3.1.2" + bin: + jake: bin/cli.js + checksum: 10c0/dda972431a926462f08fcf583ea8997884216a43daa5cce81cb42e7e661dc244f836c0a802fde23439c6e1fc59743d1c0be340aa726d3b17d77557611a5cd541 + languageName: node + linkType: hard + "jest-changed-files@npm:^29.7.0": version: 29.7.0 resolution: "jest-changed-files@npm:29.7.0" @@ -9814,7 +11935,7 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^29.7.0": +"jest-util@npm:^29.0.0, jest-util@npm:^29.7.0": version: 29.7.0 resolution: "jest-util@npm:29.7.0" dependencies: @@ -10038,6 +12159,13 @@ __metadata: languageName: node linkType: hard +"json-schema@npm:^0.4.0": + version: 0.4.0 + resolution: "json-schema@npm:0.4.0" + checksum: 10c0/d4a637ec1d83544857c1c163232f3da46912e971d5bf054ba44fdb88f07d8d359a462b4aec46f2745efbc57053365608d88bc1d7b1729f7b4fc3369765639ed3 + languageName: node + linkType: hard + "json-stable-stringify-without-jsonify@npm:^1.0.1": version: 1.0.1 resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" @@ -10063,7 +12191,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^2.1.2, json5@npm:^2.2.2, json5@npm:^2.2.3": +"json5@npm:^2.1.2, json5@npm:^2.2.0, json5@npm:^2.2.2, json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" bin: @@ -10092,6 +12220,13 @@ __metadata: languageName: node linkType: hard +"jsonpointer@npm:^5.0.0": + version: 5.0.1 + resolution: "jsonpointer@npm:5.0.1" + checksum: 10c0/89929e58b400fcb96928c0504fcf4fc3f919d81e9543ceb055df125538470ee25290bb4984251e172e6ef8fcc55761eb998c118da763a82051ad89d4cb073fe7 + languageName: node + linkType: hard + "jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.5": version: 3.3.5 resolution: "jsx-ast-utils@npm:3.3.5" @@ -10226,13 +12361,6 @@ __metadata: languageName: node linkType: hard -"lilconfig@npm:3.0.0": - version: 3.0.0 - resolution: "lilconfig@npm:3.0.0" - checksum: 10c0/7f5ee7a658dc016cacf146815e8d88b06f06f4402823b8b0934e305a57a197f55ccc9c5cd4fb5ea1b2b821c8ccaf2d54abd59602a4931af06eabda332388d3e6 - languageName: node - linkType: hard - "lilconfig@npm:^3.1.1": version: 3.1.1 resolution: "lilconfig@npm:3.1.1" @@ -10240,6 +12368,13 @@ __metadata: languageName: node linkType: hard +"lilconfig@npm:~3.1.1": + version: 3.1.2 + resolution: "lilconfig@npm:3.1.2" + checksum: 10c0/f059630b1a9bddaeba83059db00c672b64dc14074e9f232adce32b38ca1b5686ab737eb665c5ba3c32f147f0002b4bee7311ad0386a9b98547b5623e87071fbe + languageName: node + linkType: hard + "lines-and-columns@npm:^1.1.6": version: 1.2.4 resolution: "lines-and-columns@npm:1.2.4" @@ -10247,37 +12382,37 @@ __metadata: languageName: node linkType: hard -"lint-staged@npm:15.2.2": - version: 15.2.2 - resolution: "lint-staged@npm:15.2.2" +"lint-staged@npm:15.2.7": + version: 15.2.7 + resolution: "lint-staged@npm:15.2.7" dependencies: - chalk: "npm:5.3.0" - commander: "npm:11.1.0" - debug: "npm:4.3.4" - execa: "npm:8.0.1" - lilconfig: "npm:3.0.0" - listr2: "npm:8.0.1" - micromatch: "npm:4.0.5" - pidtree: "npm:0.6.0" - string-argv: "npm:0.3.2" - yaml: "npm:2.3.4" + chalk: "npm:~5.3.0" + commander: "npm:~12.1.0" + debug: "npm:~4.3.4" + execa: "npm:~8.0.1" + lilconfig: "npm:~3.1.1" + listr2: "npm:~8.2.1" + micromatch: "npm:~4.0.7" + pidtree: "npm:~0.6.0" + string-argv: "npm:~0.3.2" + yaml: "npm:~2.4.2" bin: lint-staged: bin/lint-staged.js - checksum: 10c0/a1ba6c7ee53e30a0f6ea9a351d95d3d0d2be916a41b561e22907e9ea513eb18cb3dbe65bff3ec13fad15777999efe56b2e2a95427e31d12a9b7e7948c3630ee2 + checksum: 10c0/c14399f9782ae222a1748144254f24b5b9afc816dc8840bd02d50f523c6582796ff18410767eb1a73cf1a83bc6e492dea7b1c4f0912bf3e434c068221f13c878 languageName: node linkType: hard -"listr2@npm:8.0.1": - version: 8.0.1 - resolution: "listr2@npm:8.0.1" +"listr2@npm:~8.2.1": + version: 8.2.3 + resolution: "listr2@npm:8.2.3" dependencies: cli-truncate: "npm:^4.0.0" colorette: "npm:^2.0.20" eventemitter3: "npm:^5.0.1" log-update: "npm:^6.0.0" - rfdc: "npm:^1.3.0" + rfdc: "npm:^1.4.1" wrap-ansi: "npm:^9.0.0" - checksum: 10c0/b565d6ceb3a4c2dbe0c1735c0fd907afd0d6f89de21aced8e05187b2d88ca2f8f9ebc5d743885396a00f05f13146f6be744d098a56ce0402cf1cd131485a7ff1 + checksum: 10c0/44404ecfcb49719538b39aceaa1c7f5a61e6ed88456769c8c876bfc326fc69c26c88cc1cc81ea6cc8341f5ca14ed56558b65263f3ec4d396e83ff02ee8a69508 languageName: node linkType: hard @@ -10393,7 +12528,7 @@ __metadata: languageName: node linkType: hard -"lodash.memoize@npm:^4.1.2": +"lodash.memoize@npm:4.x, lodash.memoize@npm:^4.1.2": version: 4.1.2 resolution: "lodash.memoize@npm:4.1.2" checksum: 10c0/c8713e51eccc650422716a14cece1809cfe34bc5ab5e242b7f8b4e2241c2483697b971a604252807689b9dd69bfe3a98852e19a5b89d506b000b4187a1285df8 @@ -10421,6 +12556,13 @@ __metadata: languageName: node linkType: hard +"lodash.sortby@npm:^4.7.0": + version: 4.7.0 + resolution: "lodash.sortby@npm:4.7.0" + checksum: 10c0/fc48fb54ff7669f33bb32997cab9460757ee99fafaf72400b261c3e10fde21538e47d8cfcbe6a25a31bcb5b7b727c27d52626386fc2de24eb059a6d64a89cdf5 + languageName: node + linkType: hard + "lodash.startcase@npm:^4.4.0": version: 4.4.0 resolution: "lodash.startcase@npm:4.4.0" @@ -10516,6 +12658,15 @@ __metadata: languageName: node linkType: hard +"magic-string@npm:^0.25.0, magic-string@npm:^0.25.7": + version: 0.25.9 + resolution: "magic-string@npm:0.25.9" + dependencies: + sourcemap-codec: "npm:^1.4.8" + checksum: 10c0/37f5e01a7e8b19a072091f0b45ff127cda676232d373ce2c551a162dd4053c575ec048b9cbb4587a1f03adb6c5d0fd0dd49e8ab070cd2c83a4992b2182d9cb56 + languageName: node + linkType: hard + "make-dir@npm:^4.0.0": version: 4.0.0 resolution: "make-dir@npm:4.0.0" @@ -10525,7 +12676,7 @@ __metadata: languageName: node linkType: hard -"make-error@npm:^1.1.1": +"make-error@npm:1.x, make-error@npm:^1.1.1": version: 1.3.6 resolution: "make-error@npm:1.3.6" checksum: 10c0/171e458d86854c6b3fc46610cfacf0b45149ba043782558c6875d9f42f222124384ad0b468c92e996d815a8a2003817a710c0a160e49c1c394626f76fa45396f @@ -10674,7 +12825,7 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:4.0.5, micromatch@npm:^4.0.0, micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": +"micromatch@npm:^4.0.0, micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": version: 4.0.5 resolution: "micromatch@npm:4.0.5" dependencies: @@ -10684,6 +12835,16 @@ __metadata: languageName: node linkType: hard +"micromatch@npm:~4.0.7": + version: 4.0.7 + resolution: "micromatch@npm:4.0.7" + dependencies: + braces: "npm:^3.0.3" + picomatch: "npm:^2.3.1" + checksum: 10c0/58fa99bc5265edec206e9163a1d2cec5fabc46a5b473c45f4a700adce88c2520456ae35f2b301e4410fb3afb27e9521fb2813f6fc96be0a48a89430e0916a772 + languageName: node + linkType: hard + "mime-db@npm:1.52.0, mime-db@npm:>= 1.43.0 < 2": version: 1.52.0 resolution: "mime-db@npm:1.52.0" @@ -10749,7 +12910,25 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:9.0.3, minimatch@npm:^9.0.1": +"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + languageName: node + linkType: hard + +"minimatch@npm:^5.0.1": + version: 5.1.6 + resolution: "minimatch@npm:5.1.6" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/3defdfd230914f22a8da203747c42ee3c405c39d4d37ffda284dac5e45b7e1f6c49aa8be606509002898e73091ff2a3bbfc59c2c6c71d4660609f63aa92f98e3 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.1": version: 9.0.3 resolution: "minimatch@npm:9.0.3" dependencies: @@ -10758,12 +12937,12 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" +"minimatch@npm:^9.0.4": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" dependencies: - brace-expansion: "npm:^1.1.7" - checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + brace-expansion: "npm:^2.0.1" + checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed languageName: node linkType: hard @@ -10889,30 +13068,46 @@ __metadata: version: 0.0.0-use.local resolution: "money-controll-frontend-app@workspace:." dependencies: - "@babel/core": "npm:7.24.3" - "@babel/preset-env": "npm:7.24.3" - "@babel/preset-react": "npm:7.24.1" - "@commitlint/cli": "npm:19.2.1" - "@commitlint/config-conventional": "npm:19.1.0" - "@testing-library/jest-dom": "npm:6.4.2" + "@commitlint/cli": "npm:19.3.0" + "@commitlint/config-conventional": "npm:19.2.2" + "@emotion/react": "npm:11.11.4" + "@emotion/styled": "npm:11.11.5" + "@mui/icons-material": "npm:^5.15.19" + "@mui/material": "npm:5.15.19" + "@react-spring/web": "npm:9.7.3" + "@testing-library/jest-dom": "npm:6.4.6" "@testing-library/react": "npm:14.3.1" + "@testing-library/user-event": "npm:^14.5.2" "@types/jest": "npm:29.5.12" classnames: "npm:2.5.1" eslint: "npm:8.57.0" - eslint-config-ksv741: "npm:0.0.2" + eslint-config-ksv741: "npm:0.0.3" eslint-import-resolver-webpack: "npm:0.13.8" husky: "npm:9.0.11" + i18next: "npm:23.11.5" + i18next-browser-languagedetector: "npm:8.0.0" + i18next-http-backend: "npm:2.5.2" identity-obj-proxy: "npm:3.0.0" jest: "npm:29.7.0" jest-environment-jsdom: "npm:29.7.0" ksv741-react-scripts: "npm:0.3.1" - lint-staged: "npm:15.2.2" - normalize.css: "npm:8.0.1" + lint-staged: "npm:15.2.7" + notistack: "npm:3.0.1" prop-types: "npm:15.8.1" - react: "npm:18.2.0" - react-dom: "npm:18.2.0" - react-router-dom: "npm:6.22.3" + react: "npm:18.3.1" + react-dnd: "npm:16.0.1" + react-dnd-html5-backend: "npm:16.0.1" + react-dom: "npm:18.3.1" + react-i18next: "npm:14.1.2" + react-router-dom: "npm:6.23.1" standard-version: "npm:9.5.0" + ts-jest: "npm:29.1.4" + typescript: "npm:5.5.3" + workbox-core: "npm:7.1.0" + workbox-precaching: "npm:7.1.0" + workbox-recipes: "npm:7.1.0" + workbox-webpack-plugin: "npm:7.1.0" + workbox-window: "npm:7.1.0" languageName: unknown linkType: soft @@ -11010,6 +13205,20 @@ __metadata: languageName: node linkType: hard +"node-fetch@npm:^2.6.12": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: "npm:^5.0.0" + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 + languageName: node + linkType: hard + "node-forge@npm:^1": version: 1.3.1 resolution: "node-forge@npm:1.3.1" @@ -11100,10 +13309,16 @@ __metadata: languageName: node linkType: hard -"normalize.css@npm:8.0.1": - version: 8.0.1 - resolution: "normalize.css@npm:8.0.1" - checksum: 10c0/4ddf56d1af5ca755fa5e692e718316d8758ecb792aa96e1ad206824b5810a043763d681d6f7697d46573515f5e9690038b4c91a95c1997567128815545fb8cd7 +"notistack@npm:3.0.1": + version: 3.0.1 + resolution: "notistack@npm:3.0.1" + dependencies: + clsx: "npm:^1.1.0" + goober: "npm:^2.0.33" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 10c0/dd5bd492dbaf8d07a1f45a53ae195c5d481bc7136d73a756eb076534d315216a3cd2f4628263be55ad21d8bfed6ec546e5063584ffcc2798fb2aac56e5ccf0cf languageName: node linkType: hard @@ -11184,7 +13399,7 @@ __metadata: languageName: node linkType: hard -"object.entries@npm:^1.1.6, object.entries@npm:^1.1.7": +"object.entries@npm:^1.1.8": version: 1.1.8 resolution: "object.entries@npm:1.1.8" dependencies: @@ -11195,7 +13410,7 @@ __metadata: languageName: node linkType: hard -"object.fromentries@npm:^2.0.6, object.fromentries@npm:^2.0.7": +"object.fromentries@npm:^2.0.7, object.fromentries@npm:^2.0.8": version: 2.0.8 resolution: "object.fromentries@npm:2.0.8" dependencies: @@ -11218,7 +13433,7 @@ __metadata: languageName: node linkType: hard -"object.hasown@npm:^1.1.2": +"object.hasown@npm:^1.1.4": version: 1.1.4 resolution: "object.hasown@npm:1.1.4" dependencies: @@ -11229,7 +13444,7 @@ __metadata: languageName: node linkType: hard -"object.values@npm:^1.1.6, object.values@npm:^1.1.7": +"object.values@npm:^1.1.6, object.values@npm:^1.1.7, object.values@npm:^1.2.0": version: 1.2.0 resolution: "object.values@npm:1.2.0" dependencies: @@ -11613,14 +13828,21 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be languageName: node linkType: hard -"pidtree@npm:0.6.0": +"picomatch@npm:^4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc + languageName: node + linkType: hard + +"pidtree@npm:~0.6.0": version: 0.6.0 resolution: "pidtree@npm:0.6.0" bin: @@ -12458,6 +14680,13 @@ __metadata: languageName: node linkType: hard +"pretty-bytes@npm:^5.3.0, pretty-bytes@npm:^5.4.1": + version: 5.6.0 + resolution: "pretty-bytes@npm:5.6.0" + checksum: 10c0/f69f494dcc1adda98dbe0e4a36d301e8be8ff99bfde7a637b2ee2820e7cb583b0fc0f3a63b0e3752c01501185a5cf38602c7be60da41bdf84ef5b70e89c370f3 + languageName: node + linkType: hard + "pretty-error@npm:^4.0.0": version: 4.0.0 resolution: "pretty-error@npm:4.0.0" @@ -12531,7 +14760,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:15.8.1, prop-types@npm:^15.8.1": +"prop-types@npm:15.8.1, prop-types@npm:^15.6.2, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: @@ -12645,19 +14874,71 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:18.2.0": - version: 18.2.0 - resolution: "react-dom@npm:18.2.0" +"react-dnd-html5-backend@npm:16.0.1": + version: 16.0.1 + resolution: "react-dnd-html5-backend@npm:16.0.1" dependencies: - loose-envify: "npm:^1.1.0" - scheduler: "npm:^0.23.0" - peerDependencies: - react: ^18.2.0 - checksum: 10c0/66dfc5f93e13d0674e78ef41f92ed21dfb80f9c4ac4ac25a4b51046d41d4d2186abc915b897f69d3d0ebbffe6184e7c5876f2af26bfa956f179225d921be713a + dnd-core: "npm:^16.0.1" + checksum: 10c0/6e4b632a11e20211d71f5f3bedadf13ecec2fa73372fde388619838294b1375f15b717d1ce128e12c872ff7b15c32d26761d2026b33c14fc55e4fd5477c15289 languageName: node linkType: hard -"react-is@npm:^16.13.1": +"react-dnd@npm:16.0.1": + version: 16.0.1 + resolution: "react-dnd@npm:16.0.1" + dependencies: + "@react-dnd/invariant": "npm:^4.0.1" + "@react-dnd/shallowequal": "npm:^4.0.1" + dnd-core: "npm:^16.0.1" + fast-deep-equal: "npm:^3.1.3" + hoist-non-react-statics: "npm:^3.3.2" + peerDependencies: + "@types/hoist-non-react-statics": ">= 3.3.1" + "@types/node": ">= 12" + "@types/react": ">= 16" + react: ">= 16.14" + peerDependenciesMeta: + "@types/hoist-non-react-statics": + optional: true + "@types/node": + optional: true + "@types/react": + optional: true + checksum: 10c0/d069435750f0d6653cfa2b951cac8abb3583fb144ff134a20176608877d9c5964c63384ebbacaa0fdeef819b592a103de0d8e06f3b742311d64a029ffed0baa3 + languageName: node + linkType: hard + +"react-dom@npm:18.3.1": + version: 18.3.1 + resolution: "react-dom@npm:18.3.1" + dependencies: + loose-envify: "npm:^1.1.0" + scheduler: "npm:^0.23.2" + peerDependencies: + react: ^18.3.1 + checksum: 10c0/a752496c1941f958f2e8ac56239172296fcddce1365ce45222d04a1947e0cc5547df3e8447f855a81d6d39f008d7c32eab43db3712077f09e3f67c4874973e85 + languageName: node + linkType: hard + +"react-i18next@npm:14.1.2": + version: 14.1.2 + resolution: "react-i18next@npm:14.1.2" + dependencies: + "@babel/runtime": "npm:^7.23.9" + html-parse-stringify: "npm:^3.0.1" + peerDependencies: + i18next: ">= 23.2.3" + react: ">= 16.8.0" + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + checksum: 10c0/cb8a83b3696639f083dc9f770d9d9e0681c0fe56f6b5fe24cd6facce08d363c37bd3440078e9d63abacabd7037b783e6b4e4d0c935de9c8dda7820bd4ef7e329 + languageName: node + linkType: hard + +"react-is@npm:^16.13.1, react-is@npm:^16.7.0": version: 16.13.1 resolution: "react-is@npm:16.13.1" checksum: 10c0/33977da7a5f1a287936a0c85639fec6ca74f4f15ef1e59a6bc20338fc73dc69555381e211f7a3529b8150a1f71e4225525b41b60b52965bda53ce7d47377ada1 @@ -12678,6 +14959,13 @@ __metadata: languageName: node linkType: hard +"react-is@npm:^18.2.0": + version: 18.3.1 + resolution: "react-is@npm:18.3.1" + checksum: 10c0/f2f1e60010c683479e74c63f96b09fb41603527cd131a9959e2aee1e5a8b0caf270b365e5ca77d4a6b18aae659b60a86150bb3979073528877029b35aecd2072 + languageName: node + linkType: hard + "react-refresh@npm:0.14.0": version: 0.14.0 resolution: "react-refresh@npm:0.14.0" @@ -12685,36 +14973,51 @@ __metadata: languageName: node linkType: hard -"react-router-dom@npm:6.22.3": - version: 6.22.3 - resolution: "react-router-dom@npm:6.22.3" +"react-router-dom@npm:6.23.1": + version: 6.23.1 + resolution: "react-router-dom@npm:6.23.1" dependencies: - "@remix-run/router": "npm:1.15.3" - react-router: "npm:6.22.3" + "@remix-run/router": "npm:1.16.1" + react-router: "npm:6.23.1" peerDependencies: react: ">=16.8" react-dom: ">=16.8" - checksum: 10c0/39b0472db5d153cbbbf4f5df5c0b26f2b75ffd7b857d7b67d17e03f4618d806b957cf033fbeb265bb317ade951e6ce0d576311bdf6eb15a7013203079cfadf03 + checksum: 10c0/01b954d7d0ff4c53bb2edbc816458f3fad1ce9ee49a4dfdc5c866065c23026c9cce429b46b754cbaebb83b22cfe5f605bbf441acf515e3c377cbdf021b0bec4c languageName: node linkType: hard -"react-router@npm:6.22.3": - version: 6.22.3 - resolution: "react-router@npm:6.22.3" +"react-router@npm:6.23.1": + version: 6.23.1 + resolution: "react-router@npm:6.23.1" dependencies: - "@remix-run/router": "npm:1.15.3" + "@remix-run/router": "npm:1.16.1" peerDependencies: react: ">=16.8" - checksum: 10c0/a2c85c3d1fa93585e312b1f7e6e21d1ca421875013a8d879e109d3ed41fb035bc93faef4cd42b354ea18d039bc50b679bf752679ad83ac26a986e3432fbd0462 + checksum: 10c0/091949805745136350ab049b2a96281bf38742c9d3651019fb48ea79c5eafbfb0379f1d3e636602dd56b0ef278389e8fd25be983dc2c0ffd1103d06dfa8019f3 languageName: node linkType: hard -"react@npm:18.2.0": - version: 18.2.0 - resolution: "react@npm:18.2.0" +"react-transition-group@npm:^4.4.5": + version: 4.4.5 + resolution: "react-transition-group@npm:4.4.5" + dependencies: + "@babel/runtime": "npm:^7.5.5" + dom-helpers: "npm:^5.0.1" + loose-envify: "npm:^1.4.0" + prop-types: "npm:^15.6.2" + peerDependencies: + react: ">=16.6.0" + react-dom: ">=16.6.0" + checksum: 10c0/2ba754ba748faefa15f87c96dfa700d5525054a0141de8c75763aae6734af0740e77e11261a1e8f4ffc08fd9ab78510122e05c21c2d79066c38bb6861a886c82 + languageName: node + linkType: hard + +"react@npm:18.3.1": + version: 18.3.1 + resolution: "react@npm:18.3.1" dependencies: loose-envify: "npm:^1.1.0" - checksum: 10c0/b562d9b569b0cb315e44b48099f7712283d93df36b19a39a67c254c6686479d3980b7f013dc931f4a5a3ae7645eae6386b4aa5eea933baa54ecd0f9acb0902b8 + checksum: 10c0/283e8c5efcf37802c9d1ce767f302dd569dd97a70d9bb8c7be79a789b9902451e0d16334b05d73299b20f048cbc3c7d288bbbde10b701fa194e2089c237dbea3 languageName: node linkType: hard @@ -12816,6 +15119,15 @@ __metadata: languageName: node linkType: hard +"redux@npm:^4.2.0": + version: 4.2.1 + resolution: "redux@npm:4.2.1" + dependencies: + "@babel/runtime": "npm:^7.9.2" + checksum: 10c0/136d98b3d5dbed1cd6279c8c18a6a74c416db98b8a432a46836bdd668475de6279a2d4fd9d1363f63904e00f0678a8a3e7fa532c897163340baf1e71bb42c742 + languageName: node + linkType: hard + "reflect.getprototypeof@npm:^1.0.4": version: 1.0.6 resolution: "reflect.getprototypeof@npm:1.0.6" @@ -12985,7 +15297,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.20.0, resolve@npm:^1.22.4": +"resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.4": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -12998,7 +15310,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^2.0.0-next.4, resolve@npm:^2.0.0-next.5": +"resolve@npm:^2.0.0-next.5": version: 2.0.0-next.5 resolution: "resolve@npm:2.0.0-next.5" dependencies: @@ -13011,7 +15323,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin": +"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -13024,7 +15336,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^2.0.0-next.4#optional!builtin, resolve@patch:resolve@npm%3A^2.0.0-next.5#optional!builtin": +"resolve@patch:resolve@npm%3A^2.0.0-next.5#optional!builtin": version: 2.0.0-next.5 resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#optional!builtin::version=2.0.0-next.5&hash=c3c19d" dependencies: @@ -13068,10 +15380,10 @@ __metadata: languageName: node linkType: hard -"rfdc@npm:^1.3.0": - version: 1.3.1 - resolution: "rfdc@npm:1.3.1" - checksum: 10c0/69f65e3ed30970f8055fac9fbbef9ce578800ca19554eab1dcbffe73a4b8aef536bc4248313889cf25e3b4e38b212c721eabe30856575bf2b2bc3d90f8ba93ef +"rfdc@npm:^1.4.1": + version: 1.4.1 + resolution: "rfdc@npm:1.4.1" + checksum: 10c0/4614e4292356cafade0b6031527eea9bc90f2372a22c012313be1dcc69a3b90c7338158b414539be863fa95bfcb2ddcd0587be696841af4e6679d85e62c060c7 languageName: node linkType: hard @@ -13097,6 +15409,20 @@ __metadata: languageName: node linkType: hard +"rollup@npm:^2.43.1": + version: 2.79.1 + resolution: "rollup@npm:2.79.1" + dependencies: + fsevents: "npm:~2.3.2" + dependenciesMeta: + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/421418687f5dcd7324f4387f203c6bfc7118b7ace789e30f5da022471c43e037a76f5fd93837052754eeeae798a4fb266ac05ccee1e594406d912a59af98dde9 + languageName: node + linkType: hard + "run-applescript@npm:^7.0.0": version: 7.0.0 resolution: "run-applescript@npm:7.0.0" @@ -13205,12 +15531,12 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:^0.23.0": - version: 0.23.0 - resolution: "scheduler@npm:0.23.0" +"scheduler@npm:^0.23.2": + version: 0.23.2 + resolution: "scheduler@npm:0.23.2" dependencies: loose-envify: "npm:^1.1.0" - checksum: 10c0/b777f7ca0115e6d93e126ac490dbd82642d14983b3079f58f35519d992fa46260be7d6e6cede433a92db70306310c6f5f06e144f0e40c484199e09c1f7be53dd + checksum: 10c0/26383305e249651d4c58e6705d5f8425f153211aef95f15161c151f7b8de885f24751b377e4a0b3dd42cce09aad3f87a61dab7636859c0d89b7daf1a1e2a5c78 languageName: node linkType: hard @@ -13497,6 +15823,13 @@ __metadata: languageName: node linkType: hard +"smob@npm:^1.0.0": + version: 1.5.0 + resolution: "smob@npm:1.5.0" + checksum: 10c0/a1067f23265812de8357ed27312101af49b89129eb973e3f26ab5856ea774f88cace13342e66e32470f933ccfa916e0e9d0f7ca8bbd4f92dfab2af45c15956c2 + languageName: node + linkType: hard + "snake-case@npm:^3.0.4": version: 3.0.4 resolution: "snake-case@npm:3.0.4" @@ -13573,6 +15906,13 @@ __metadata: languageName: node linkType: hard +"source-map@npm:^0.5.7": + version: 0.5.7 + resolution: "source-map@npm:0.5.7" + checksum: 10c0/904e767bb9c494929be013017380cbba013637da1b28e5943b566031e29df04fba57edf3f093e0914be094648b577372bd8ad247fa98cfba9c600794cd16b599 + languageName: node + linkType: hard + "source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.0, source-map@npm:~0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" @@ -13587,6 +15927,22 @@ __metadata: languageName: node linkType: hard +"source-map@npm:^0.8.0-beta.0": + version: 0.8.0-beta.0 + resolution: "source-map@npm:0.8.0-beta.0" + dependencies: + whatwg-url: "npm:^7.0.0" + checksum: 10c0/fb4d9bde9a9fdb2c29b10e5eae6c71d10e09ef467e1afb75fdec2eb7e11fa5b343a2af553f74f18b695dbc0b81f9da2e9fa3d7a317d5985e9939499ec6087835 + languageName: node + linkType: hard + +"sourcemap-codec@npm:^1.4.8": + version: 1.4.8 + resolution: "sourcemap-codec@npm:1.4.8" + checksum: 10c0/f099279fdaae070ff156df7414bbe39aad69cdd615454947ed3e19136bfdfcb4544952685ee73f56e17038f4578091e12b17b283ed8ac013882916594d95b9e6 + languageName: node + linkType: hard + "spdx-correct@npm:^3.0.0": version: 3.2.0 resolution: "spdx-correct@npm:3.2.0" @@ -13759,7 +16115,7 @@ __metadata: languageName: node linkType: hard -"string-argv@npm:0.3.2": +"string-argv@npm:~0.3.2": version: 0.3.2 resolution: "string-argv@npm:0.3.2" checksum: 10c0/75c02a83759ad1722e040b86823909d9a2fc75d15dd71ec4b537c3560746e33b5f5a07f7332d1e3f88319909f82190843aa2f0a0d8c8d591ec08e93d5b8dec82 @@ -13809,7 +16165,17 @@ __metadata: languageName: node linkType: hard -"string.prototype.matchall@npm:^4.0.8": +"string.prototype.includes@npm:^2.0.0": + version: 2.0.0 + resolution: "string.prototype.includes@npm:2.0.0" + dependencies: + define-properties: "npm:^1.1.3" + es-abstract: "npm:^1.17.5" + checksum: 10c0/32dff118c9e9dcc87e240b05462fa8ee7248d9e335c0015c1442fe18152261508a2146d9bb87ddae56abab69148a83c61dfaea33f53853812a6a2db737689ed2 + languageName: node + linkType: hard + +"string.prototype.matchall@npm:^4.0.11, string.prototype.matchall@npm:^4.0.6": version: 4.0.11 resolution: "string.prototype.matchall@npm:4.0.11" dependencies: @@ -13852,7 +16218,7 @@ __metadata: languageName: node linkType: hard -"string.prototype.trimstart@npm:^1.0.7": +"string.prototype.trimstart@npm:^1.0.7, string.prototype.trimstart@npm:^1.0.8": version: 1.0.8 resolution: "string.prototype.trimstart@npm:1.0.8" dependencies: @@ -13881,6 +16247,17 @@ __metadata: languageName: node linkType: hard +"stringify-object@npm:^3.3.0": + version: 3.3.0 + resolution: "stringify-object@npm:3.3.0" + dependencies: + get-own-enumerable-property-symbols: "npm:^3.0.0" + is-obj: "npm:^1.0.1" + is-regexp: "npm:^1.0.0" + checksum: 10c0/ba8078f84128979ee24b3de9a083489cbd3c62cb8572a061b47d4d82601a8ae4b4d86fa8c54dd955593da56bb7c16a6de51c27221fdc6b7139bb4f29d815f35b + languageName: node + linkType: hard + "stringify-package@npm:^1.0.1": version: 1.0.1 resolution: "stringify-package@npm:1.0.1" @@ -13920,6 +16297,13 @@ __metadata: languageName: node linkType: hard +"strip-comments@npm:^2.0.1": + version: 2.0.1 + resolution: "strip-comments@npm:2.0.1" + checksum: 10c0/984321b1ec47a531bdcfddd87f217590934e2d2f142198a080ec88588280239a5b58a81ca780730679b6195e52afef83673c6d6466c07c2277f71f44d7d9553d + languageName: node + linkType: hard + "strip-final-newline@npm:^2.0.0": version: 2.0.0 resolution: "strip-final-newline@npm:2.0.0" @@ -13971,6 +16355,13 @@ __metadata: languageName: node linkType: hard +"stylis@npm:4.2.0": + version: 4.2.0 + resolution: "stylis@npm:4.2.0" + checksum: 10c0/a7128ad5a8ed72652c6eba46bed4f416521bc9745a460ef5741edc725252cebf36ee45e33a8615a7057403c93df0866ab9ee955960792db210bb80abd5ac6543 + languageName: node + linkType: hard + "supports-color@npm:^5.3.0": version: 5.5.0 resolution: "supports-color@npm:5.5.0" @@ -14076,6 +16467,25 @@ __metadata: languageName: node linkType: hard +"temp-dir@npm:^2.0.0": + version: 2.0.0 + resolution: "temp-dir@npm:2.0.0" + checksum: 10c0/b1df969e3f3f7903f3426861887ed76ba3b495f63f6d0c8e1ce22588679d9384d336df6064210fda14e640ed422e2a17d5c40d901f60e161c99482d723f4d309 + languageName: node + linkType: hard + +"tempy@npm:^0.6.0": + version: 0.6.0 + resolution: "tempy@npm:0.6.0" + dependencies: + is-stream: "npm:^2.0.0" + temp-dir: "npm:^2.0.0" + type-fest: "npm:^0.16.0" + unique-string: "npm:^2.0.0" + checksum: 10c0/ca0882276732d1313b85006b0427620cb4a8d7a57738a2311a72befae60ed152be7d5b41b951dcb447a01a35404bed76f33eb4e37c55263cd7f807eee1187f8f + languageName: node + linkType: hard + "terser-webpack-plugin@npm:5.3.10, terser-webpack-plugin@npm:^5.3.10": version: 5.3.10 resolution: "terser-webpack-plugin@npm:5.3.10" @@ -14112,6 +16522,20 @@ __metadata: languageName: node linkType: hard +"terser@npm:^5.17.4": + version: 5.31.1 + resolution: "terser@npm:5.31.1" + dependencies: + "@jridgewell/source-map": "npm:^0.3.3" + acorn: "npm:^8.8.2" + commander: "npm:^2.20.0" + source-map-support: "npm:~0.5.20" + bin: + terser: bin/terser + checksum: 10c0/4d49a58f64c11f3742e779a0a03aff69972ca5739decb361d909d22c8f3f7d8e2ec982a928d987d56737ad50229e8ab3f62d8ba993e4b5f360a53ed487d3c06c + languageName: node + linkType: hard + "test-exclude@npm:^6.0.0": version: 6.0.0 resolution: "test-exclude@npm:6.0.0" @@ -14226,6 +16650,15 @@ __metadata: languageName: node linkType: hard +"tr46@npm:^1.0.1": + version: 1.0.1 + resolution: "tr46@npm:1.0.1" + dependencies: + punycode: "npm:^2.1.0" + checksum: 10c0/41525c2ccce86e3ef30af6fa5e1464e6d8bb4286a58ea8db09228f598889581ef62347153f6636cd41553dc41685bdfad0a9d032ef58df9fbb0792b3447d0f04 + languageName: node + linkType: hard + "tr46@npm:^3.0.0": version: 3.0.0 resolution: "tr46@npm:3.0.0" @@ -14235,6 +16668,13 @@ __metadata: languageName: node linkType: hard +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 + languageName: node + linkType: hard + "trim-newlines@npm:^3.0.0": version: 3.0.1 resolution: "trim-newlines@npm:3.0.1" @@ -14242,7 +16682,7 @@ __metadata: languageName: node linkType: hard -"ts-api-utils@npm:^1.0.1": +"ts-api-utils@npm:^1.3.0": version: 1.3.0 resolution: "ts-api-utils@npm:1.3.0" peerDependencies: @@ -14251,6 +16691,42 @@ __metadata: languageName: node linkType: hard +"ts-jest@npm:29.1.4": + version: 29.1.4 + resolution: "ts-jest@npm:29.1.4" + dependencies: + bs-logger: "npm:0.x" + fast-json-stable-stringify: "npm:2.x" + jest-util: "npm:^29.0.0" + json5: "npm:^2.2.3" + lodash.memoize: "npm:4.x" + make-error: "npm:1.x" + semver: "npm:^7.5.3" + yargs-parser: "npm:^21.0.1" + peerDependencies: + "@babel/core": ">=7.0.0-beta.0 <8" + "@jest/transform": ^29.0.0 + "@jest/types": ^29.0.0 + babel-jest: ^29.0.0 + jest: ^29.0.0 + typescript: ">=4.3 <6" + peerDependenciesMeta: + "@babel/core": + optional: true + "@jest/transform": + optional: true + "@jest/types": + optional: true + babel-jest: + optional: true + esbuild: + optional: true + bin: + ts-jest: cli.js + checksum: 10c0/97def10be26a553e529dfacafe264fa9833d638052bc2b1ebe6301262ae2d3e43954f4d91f2d2d07cf92352cdd4fa163a86f8116a1f6bb8cef7060cddfec794b + languageName: node + linkType: hard + "ts-loader@npm:9.5.1": version: 9.5.1 resolution: "ts-loader@npm:9.5.1" @@ -14396,6 +16872,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^0.16.0": + version: 0.16.0 + resolution: "type-fest@npm:0.16.0" + checksum: 10c0/6b4d846534e7bcb49a6160b068ffaed2b62570d989d909ac3f29df5ef1e993859f890a4242eebe023c9e923f96adbcb3b3e88a198c35a1ee9a731e147a6839c3 + languageName: node + linkType: hard + "type-fest@npm:^0.18.0": version: 0.18.1 resolution: "type-fest@npm:0.18.1" @@ -14479,7 +16962,7 @@ __metadata: languageName: node linkType: hard -"typed-array-length@npm:^1.0.5": +"typed-array-length@npm:^1.0.5, typed-array-length@npm:^1.0.6": version: 1.0.6 resolution: "typed-array-length@npm:1.0.6" dependencies: @@ -14500,6 +16983,26 @@ __metadata: languageName: node linkType: hard +"typescript@npm:5.5.3": + version: 5.5.3 + resolution: "typescript@npm:5.5.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/f52c71ccbc7080b034b9d3b72051d563601a4815bf3e39ded188e6ce60813f75dbedf11ad15dd4d32a12996a9ed8c7155b46c93a9b9c9bad1049766fe614bbdd + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A5.5.3#optional!builtin": + version: 5.5.3 + resolution: "typescript@patch:typescript@npm%3A5.5.3#optional!builtin::version=5.5.3&hash=5adc0c" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/5a437c416251334deeaf29897157032311f3f126547cfdc4b133768b606cb0e62bcee733bb97cf74c42fe7268801aea1392d8e40988cdef112e9546eba4c03c5 + languageName: node + linkType: hard + "uglify-js@npm:^3.1.4": version: 3.17.4 resolution: "uglify-js@npm:3.17.4" @@ -14584,6 +17087,15 @@ __metadata: languageName: node linkType: hard +"unique-string@npm:^2.0.0": + version: 2.0.0 + resolution: "unique-string@npm:2.0.0" + dependencies: + crypto-random-string: "npm:^2.0.0" + checksum: 10c0/11820db0a4ba069d174bedfa96c588fc2c96b083066fafa186851e563951d0de78181ac79c744c1ed28b51f9d82ac5b8196ff3e4560d0178046ef455d8c2244b + languageName: node + linkType: hard + "universalify@npm:^0.2.0": version: 0.2.0 resolution: "universalify@npm:0.2.0" @@ -14605,6 +17117,13 @@ __metadata: languageName: node linkType: hard +"upath@npm:^1.2.0": + version: 1.2.0 + resolution: "upath@npm:1.2.0" + checksum: 10c0/3746f24099bf69dbf8234cecb671e1016e1f6b26bd306de4ff8966fb0bc463fa1014ffc48646b375de1ab573660e3a0256f6f2a87218b2dfa1779a84ef6992fa + languageName: node + linkType: hard + "update-browserslist-db@npm:^1.0.13": version: 1.0.13 resolution: "update-browserslist-db@npm:1.0.13" @@ -14619,7 +17138,7 @@ __metadata: languageName: node linkType: hard -"uri-js@npm:^4.2.2": +"uri-js@npm:^4.2.2, uri-js@npm:^4.4.1": version: 4.4.1 resolution: "uri-js@npm:4.4.1" dependencies: @@ -14703,6 +17222,13 @@ __metadata: languageName: node linkType: hard +"void-elements@npm:3.1.0": + version: 3.1.0 + resolution: "void-elements@npm:3.1.0" + checksum: 10c0/0b8686f9f9aa44012e9bd5eabf287ae0cde409b9a2854c5a2335cb83920c957668ac5876e3f0d158dd424744ac411a7270e64128556b451ed3bec875ef18534d + languageName: node + linkType: hard + "w3c-xmlserializer@npm:^4.0.0": version: 4.0.0 resolution: "w3c-xmlserializer@npm:4.0.0" @@ -14740,6 +17266,20 @@ __metadata: languageName: node linkType: hard +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db + languageName: node + linkType: hard + +"webidl-conversions@npm:^4.0.2": + version: 4.0.2 + resolution: "webidl-conversions@npm:4.0.2" + checksum: 10c0/def5c5ac3479286dffcb604547628b2e6b46c5c5b8a8cfaa8c71dc3bafc85859bde5fbe89467ff861f571ab38987cf6ab3d6e7c80b39b999e50e803c12f3164f + languageName: node + linkType: hard + "webidl-conversions@npm:^7.0.0": version: 7.0.0 resolution: "webidl-conversions@npm:7.0.0" @@ -14977,6 +17517,27 @@ __metadata: languageName: node linkType: hard +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: "npm:~0.0.3" + webidl-conversions: "npm:^3.0.0" + checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 + languageName: node + linkType: hard + +"whatwg-url@npm:^7.0.0": + version: 7.1.0 + resolution: "whatwg-url@npm:7.1.0" + dependencies: + lodash.sortby: "npm:^4.7.0" + tr46: "npm:^1.0.1" + webidl-conversions: "npm:^4.0.2" + checksum: 10c0/2785fe4647690e5a0225a79509ba5e21fdf4a71f9de3eabdba1192483fe006fc79961198e0b99f82751557309f17fc5a07d4d83c251aa5b2f85ba71e674cbee9 + languageName: node + linkType: hard + "which-boxed-primitive@npm:^1.0.2": version: 1.0.2 resolution: "which-boxed-primitive@npm:1.0.2" @@ -15071,6 +17632,211 @@ __metadata: languageName: node linkType: hard +"workbox-background-sync@npm:7.1.0": + version: 7.1.0 + resolution: "workbox-background-sync@npm:7.1.0" + dependencies: + idb: "npm:^7.0.1" + workbox-core: "npm:7.1.0" + checksum: 10c0/9538c49a377d8eb06acee3848fbca09bac1940a2ca9e904fed765c39aa32f77c20d72c3ba6fa1eb47bee81289b1d527556a1cd3e02728960a4c40400ce6d0e91 + languageName: node + linkType: hard + +"workbox-broadcast-update@npm:7.1.0": + version: 7.1.0 + resolution: "workbox-broadcast-update@npm:7.1.0" + dependencies: + workbox-core: "npm:7.1.0" + checksum: 10c0/4a6e201cedcbc11b9d2f63f63477ba4564a35ce07bd54640198db6ff6a3b8347a65e0b4973c8f8463e8a622fd1ad93d7b3bab42338608811d23c7db01fef475e + languageName: node + linkType: hard + +"workbox-build@npm:7.1.0": + version: 7.1.0 + resolution: "workbox-build@npm:7.1.0" + dependencies: + "@apideck/better-ajv-errors": "npm:^0.3.1" + "@babel/core": "npm:^7.24.4" + "@babel/preset-env": "npm:^7.11.0" + "@babel/runtime": "npm:^7.11.2" + "@rollup/plugin-babel": "npm:^5.2.0" + "@rollup/plugin-node-resolve": "npm:^15.2.3" + "@rollup/plugin-replace": "npm:^2.4.1" + "@rollup/plugin-terser": "npm:^0.4.3" + "@surma/rollup-plugin-off-main-thread": "npm:^2.2.3" + ajv: "npm:^8.6.0" + common-tags: "npm:^1.8.0" + fast-json-stable-stringify: "npm:^2.1.0" + fs-extra: "npm:^9.0.1" + glob: "npm:^7.1.6" + lodash: "npm:^4.17.20" + pretty-bytes: "npm:^5.3.0" + rollup: "npm:^2.43.1" + source-map: "npm:^0.8.0-beta.0" + stringify-object: "npm:^3.3.0" + strip-comments: "npm:^2.0.1" + tempy: "npm:^0.6.0" + upath: "npm:^1.2.0" + workbox-background-sync: "npm:7.1.0" + workbox-broadcast-update: "npm:7.1.0" + workbox-cacheable-response: "npm:7.1.0" + workbox-core: "npm:7.1.0" + workbox-expiration: "npm:7.1.0" + workbox-google-analytics: "npm:7.1.0" + workbox-navigation-preload: "npm:7.1.0" + workbox-precaching: "npm:7.1.0" + workbox-range-requests: "npm:7.1.0" + workbox-recipes: "npm:7.1.0" + workbox-routing: "npm:7.1.0" + workbox-strategies: "npm:7.1.0" + workbox-streams: "npm:7.1.0" + workbox-sw: "npm:7.1.0" + workbox-window: "npm:7.1.0" + checksum: 10c0/c482fde713bad582bd7d4861113d7367ab4722eba9c102864c71048815792c623e9117a8f79957e0388d0c08e8303962d1fb23931456da73909e87d06638d101 + languageName: node + linkType: hard + +"workbox-cacheable-response@npm:7.1.0": + version: 7.1.0 + resolution: "workbox-cacheable-response@npm:7.1.0" + dependencies: + workbox-core: "npm:7.1.0" + checksum: 10c0/52ea73bb184c9ef9280cc8f00a1ab7d103d495e12a7a6378fae02fd0aa1a9b893aac5d8074f14ed8c198527123e4401f4703fbfd2be98e184ca783b9216cb4c5 + languageName: node + linkType: hard + +"workbox-core@npm:7.1.0": + version: 7.1.0 + resolution: "workbox-core@npm:7.1.0" + checksum: 10c0/fb0b6e23a52e085da00b7a74b1f1854f06c695eb2bd4c244aa335165f59156a4febb4f116b9893b9fb7e0e8bac092d32eecceb4d00f930a93f64737cb2be9531 + languageName: node + linkType: hard + +"workbox-expiration@npm:7.1.0": + version: 7.1.0 + resolution: "workbox-expiration@npm:7.1.0" + dependencies: + idb: "npm:^7.0.1" + workbox-core: "npm:7.1.0" + checksum: 10c0/669d76f87c1550ce9b425232c3202a26fdea4c4c9bdc1b71c1cee741a5d011423098994452e508576174d3c0b4bec0f4b35012b6d7257e300684c87fdddb7949 + languageName: node + linkType: hard + +"workbox-google-analytics@npm:7.1.0": + version: 7.1.0 + resolution: "workbox-google-analytics@npm:7.1.0" + dependencies: + workbox-background-sync: "npm:7.1.0" + workbox-core: "npm:7.1.0" + workbox-routing: "npm:7.1.0" + workbox-strategies: "npm:7.1.0" + checksum: 10c0/4178d94fb7f3f7b789f117c104b2ff33945256dc550418b0e9c81130c1e2c2bcd72ec6a1661d91326c04de360e6592edd505f0e2142e8e1043fe0c45f9c1a3fe + languageName: node + linkType: hard + +"workbox-navigation-preload@npm:7.1.0": + version: 7.1.0 + resolution: "workbox-navigation-preload@npm:7.1.0" + dependencies: + workbox-core: "npm:7.1.0" + checksum: 10c0/b667a3ba0cae4d43a53a6e211f0f33f6ebc1d9fec6cbb93de83f72a37b81cc39d887b969db9b1cd5c396a1ce34636c89c3b157cc64a5265635d0b274e362db0e + languageName: node + linkType: hard + +"workbox-precaching@npm:7.1.0": + version: 7.1.0 + resolution: "workbox-precaching@npm:7.1.0" + dependencies: + workbox-core: "npm:7.1.0" + workbox-routing: "npm:7.1.0" + workbox-strategies: "npm:7.1.0" + checksum: 10c0/53b2d0a658109b4d83ee2b1913f884ee1c757a12b8931a7102272bd1e228d29f9430e7d060f328f465bca2aa24bf0719d026eef4f4d21395fa1f678f8d6a3c06 + languageName: node + linkType: hard + +"workbox-range-requests@npm:7.1.0": + version: 7.1.0 + resolution: "workbox-range-requests@npm:7.1.0" + dependencies: + workbox-core: "npm:7.1.0" + checksum: 10c0/bf4aa597d04cbb533796af64f4006a1f472f8a14ea91f96fe37b2d5e63ffe86dcb944dab9a41317e69d368d83bee20f03ff32b339ae5addef50f325703ad4b77 + languageName: node + linkType: hard + +"workbox-recipes@npm:7.1.0": + version: 7.1.0 + resolution: "workbox-recipes@npm:7.1.0" + dependencies: + workbox-cacheable-response: "npm:7.1.0" + workbox-core: "npm:7.1.0" + workbox-expiration: "npm:7.1.0" + workbox-precaching: "npm:7.1.0" + workbox-routing: "npm:7.1.0" + workbox-strategies: "npm:7.1.0" + checksum: 10c0/5a8c2444f6338c6092be87cc6fd69c8b0cbb413bfc0a11a8f10961bfb2b8059359c4be0264ffa0c01deff3ab5dba15bbcf61d4dedbc93d8bfe1f8a2841b1657c + languageName: node + linkType: hard + +"workbox-routing@npm:7.1.0": + version: 7.1.0 + resolution: "workbox-routing@npm:7.1.0" + dependencies: + workbox-core: "npm:7.1.0" + checksum: 10c0/efd630fff594bd50276770840bce274660972587e79c097a9f1a84e8347351736aac13f11c6d7655ff550b13195d370d5c3b81a075bf452f358fc144ee868ad9 + languageName: node + linkType: hard + +"workbox-strategies@npm:7.1.0": + version: 7.1.0 + resolution: "workbox-strategies@npm:7.1.0" + dependencies: + workbox-core: "npm:7.1.0" + checksum: 10c0/b08712a69b1b13e354345cc228c29f0c759043f7ca7cf6ce9b82fe79c9d423142bfa4a118f91f1a57054047a730127fa4474d59d9306fb2ed42fe9ef568be01a + languageName: node + linkType: hard + +"workbox-streams@npm:7.1.0": + version: 7.1.0 + resolution: "workbox-streams@npm:7.1.0" + dependencies: + workbox-core: "npm:7.1.0" + workbox-routing: "npm:7.1.0" + checksum: 10c0/1d75c046fcb7b25e1cf85457e3610309dd5513f68752ef333529fcf155df2114b72f3d6f416bb68393e51b5396e3f6df7171e8e2889d0e9e1805e315754b771e + languageName: node + linkType: hard + +"workbox-sw@npm:7.1.0": + version: 7.1.0 + resolution: "workbox-sw@npm:7.1.0" + checksum: 10c0/2084f1b58c8509d7ca53ce8a13d93e57d1f13307e0279fedc87942e83c8cb96bc2e5ed3992a89af6245ad2a66897a92908cb60d0717fb90492056eb6fbf20dc6 + languageName: node + linkType: hard + +"workbox-webpack-plugin@npm:7.1.0": + version: 7.1.0 + resolution: "workbox-webpack-plugin@npm:7.1.0" + dependencies: + fast-json-stable-stringify: "npm:^2.1.0" + pretty-bytes: "npm:^5.4.1" + upath: "npm:^1.2.0" + webpack-sources: "npm:^1.4.3" + workbox-build: "npm:7.1.0" + peerDependencies: + webpack: ^4.4.0 || ^5.91.0 + checksum: 10c0/516fa68a6a6958ee1560299dd1146032dda68474a2ab01643cbde78fc65b75a3157aef60cb45dcc1984cc458ce44d4e3090cda08dd7cefd0952351270e963a00 + languageName: node + linkType: hard + +"workbox-window@npm:7.1.0": + version: 7.1.0 + resolution: "workbox-window@npm:7.1.0" + dependencies: + "@types/trusted-types": "npm:^2.0.2" + workbox-core: "npm:7.1.0" + checksum: 10c0/c989a6e3a0488f049eead3892f8249387604fb04898aa79d0cf14cd7b684f0758f1edf1996745f4755bd30c31c449f628803e507d39b2ea91cc9c36f7d5e9c72 + languageName: node + linkType: hard + "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" @@ -15193,10 +17959,19 @@ __metadata: languageName: node linkType: hard -"yaml@npm:2.3.4": - version: 2.3.4 - resolution: "yaml@npm:2.3.4" - checksum: 10c0/cf03b68f8fef5e8516b0f0b54edaf2459f1648317fc6210391cf606d247e678b449382f4bd01f77392538429e306c7cba8ff46ff6b37cac4de9a76aff33bd9e1 +"yaml@npm:^1.10.0": + version: 1.10.2 + resolution: "yaml@npm:1.10.2" + checksum: 10c0/5c28b9eb7adc46544f28d9a8d20c5b3cb1215a886609a2fd41f51628d8aaa5878ccd628b755dbcd29f6bb4921bd04ffbc6dcc370689bb96e594e2f9813d2605f + languageName: node + linkType: hard + +"yaml@npm:~2.4.2": + version: 2.4.5 + resolution: "yaml@npm:2.4.5" + bin: + yaml: bin.mjs + checksum: 10c0/e1ee78b381e5c710f715cc4082fd10fc82f7f5c92bd6f075771d20559e175616f56abf1c411f545ea0e9e16e4f84a83a50b42764af5f16ec006328ba9476bb31 languageName: node linkType: hard @@ -15207,7 +17982,7 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^21.1.1": +"yargs-parser@npm:^21.0.1, yargs-parser@npm:^21.1.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1" checksum: 10c0/f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2