From aa5ffef29a2488b96d992ab1a88fae0340ad23a9 Mon Sep 17 00:00:00 2001 From: prabhuignoto Date: Fri, 6 Jun 2025 23:17:33 +0530 Subject: [PATCH 1/2] Refactor form field component props and tests for consistency - Updated FormField component props to maintain consistent order of attributes. - Modified test cases for FormField to reflect the new prop order. - Changed FormFieldMessage and FormField model types from type to interface for better extensibility. - Adjusted imports and added missing imports in various components. - Updated SVG assets to ensure consistent class naming and structure. - Improved overall code readability and organization across multiple components. --- .eslintignore | 12 +- .eslintrc.json | 38 - eslint.config.mjs | 134 ++++ package.json | 50 +- pnpm-lock.yaml | 681 ++++++++++++++---- src/App.tsx | 1 - .../form-field/__tests__/form-field.test.tsx | 29 +- .../form-field/form-field-input.tsx | 2 + .../form-field/form-field-message.tsx | 6 +- src/components/form-field/form-field.model.ts | 8 +- src/components/form-field/form-field.tsx | 2 + src/components/page/__tests__/page.test.tsx | 25 +- src/components/page/page.model.ts | 4 +- src/components/page/page.tsx | 2 + src/components/wizard-context.ts | 1 + src/components/wizard-finish.tsx | 6 +- .../__tests__/wizard-footer.test.tsx | 1 + .../wizard-footer/wizard-footer.model.ts | 4 +- .../wizard-footer/wizard-footer.tsx | 2 + .../__tests__/wizard-header.test.tsx | 17 +- .../wizard-header/wizard-header-tab.tsx | 2 + .../wizard-header/wizard-header.model.ts | 5 +- .../wizard-header/wizard-header.tsx | 2 + src/components/wizard.model.ts | 13 +- src/components/wizard.tsx | 5 +- src/example-assets/box.tsx | 8 +- src/example-assets/dollar.tsx | 8 +- src/example-assets/twitter.tsx | 8 +- src/example-assets/user.tsx | 8 +- src/icons/alert.tsx | 8 +- src/icons/asterisk.tsx | 2 +- src/icons/check.tsx | 6 +- src/icons/chevron-left.tsx | 6 +- src/icons/chevron-right.tsx | 8 +- src/icons/circle-check.tsx | 2 +- src/icons/exclamation.tsx | 2 +- src/icons/info.tsx | 6 +- src/icons/warning.tsx | 8 +- src/main.tsx | 1 + 39 files changed, 804 insertions(+), 329 deletions(-) delete mode 100644 .eslintrc.json create mode 100644 eslint.config.mjs diff --git a/.eslintignore b/.eslintignore index 9404c81..52a9516 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,2 +1,12 @@ coverage/ -__tests__ \ No newline at end of file +__tests__ +node_modules/ +dist/ +.github/ +.vscode/ +.husky/ +public/ +*.config.js +*.config.ts +*.d.ts +vite-env.d.ts \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 2c69ed5..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "env": { - "browser": true, - "es2021": true - }, - "extends": [ - "plugin:react/recommended", - "standard", - "prettier", - "plugin:react/jsx-runtime" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 12, - "sourceType": "module" - }, - "plugins": ["react", "@typescript-eslint", "sort-keys-fix"], - "rules": { - "react/jsx-sort-props": 1, - "sort-keys": [ - "error", - "asc", - { - "caseSensitive": true, - "natural": true - } - ], - "sort-keys-fix/sort-keys-fix": "warn" - }, - "settings": { - "react": { - "version": "detect" - } - } -} diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..b866c8a --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,134 @@ +// @ts-check +import eslint from '@eslint/js'; +import tseslint from 'typescript-eslint'; +import reactPlugin from 'eslint-plugin-react'; +import reactHooksPlugin from 'eslint-plugin-react-hooks'; +import jsxA11yPlugin from 'eslint-plugin-jsx-a11y'; +import * as importPlugin from 'eslint-plugin-import'; +import securityPlugin from 'eslint-plugin-security'; +import sortKeysFixPlugin from 'eslint-plugin-sort-keys-fix'; +import { glob } from 'glob'; + +export default tseslint.config( + // Base ESLint recommended configuration + eslint.configs.recommended, + + // TypeScript ESLint recommended configuration + ...tseslint.configs.recommended, + ...tseslint.configs.stylistic, + + // Ignore patterns (replaces .eslintignore) + { + ignores: [ + 'node_modules/**', + 'dist/**', + 'coverage/**', + '.github/**', + '.vscode/**', + '.husky/**', + 'public/**', + '**/*.config.js', + '**/*.config.ts', + '**/*.d.ts', + 'vite-env.d.ts', + '__tests__/**' + ] + }, + + // Configure for React + { + files: ['**/*.{js,jsx,ts,tsx}'], + plugins: { + react: reactPlugin, + 'react-hooks': reactHooksPlugin, + 'jsx-a11y': jsxA11yPlugin, + import: importPlugin, + security: securityPlugin, + 'sort-keys-fix': sortKeysFixPlugin, + }, + languageOptions: { + ecmaVersion: 2022, + sourceType: 'module', + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + }, + }, + settings: { + react: { + version: 'detect', + }, + 'import/resolver': { + typescript: {}, + }, + }, + rules: { + // Disable problematic rules that cause circular dependencies + 'import/order': 'off', + 'import/no-duplicates': 'off', + + // React rules + 'react/jsx-sort-props': 'off', // Disable for now to avoid circular fixes + 'react/jsx-runtime': 'off', + 'react/prop-types': 'off', + 'react/jsx-uses-react': 'off', + 'react/react-in-jsx-scope': 'off', + + // React hooks rules - relaxed for now + 'react-hooks/rules-of-hooks': 'error', + 'react-hooks/exhaustive-deps': 'warn', + + // Accessibility rules + 'jsx-a11y/alt-text': 'warn', + 'jsx-a11y/anchor-has-content': 'warn', + 'jsx-a11y/aria-props': 'warn', + 'jsx-a11y/aria-role': 'warn', + 'jsx-a11y/aria-unsupported-elements': 'warn', + + // Sort keys rules - relaxed to avoid circular issues + 'sort-keys': 'off', + 'sort-keys-fix/sort-keys-fix': 'off', + + // Security rules - turned to warnings to avoid breaking changes + 'security/detect-object-injection': 'warn', + 'security/detect-non-literal-regexp': 'warn', + 'security/detect-possible-timing-attacks': 'warn', + + // Disable some ESLint rules that might conflict + 'no-useless-escape': 'warn', + }, + }, + + // Special configuration for TypeScript files + { + files: ['**/*.ts', '**/*.tsx'], + rules: { + // Disable ESLint rules that TypeScript ESLint handles better + 'no-undef': 'off', + 'no-unused-vars': 'off', + '@typescript-eslint/no-unused-vars': ['warn', { + argsIgnorePattern: '^_', + varsIgnorePattern: '^_', + }], + '@typescript-eslint/no-explicit-any': 'warn', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/consistent-type-definitions': 'off', // Disable to avoid breaking changes + '@typescript-eslint/consistent-indexed-object-style': 'off', // Disable to avoid breaking changes + '@typescript-eslint/no-wrapper-object-types': 'off', // Disable to avoid breaking changes + }, + }, + + // Test files + { + files: ['**/__tests__/**/*', '**/*.{spec,test}.*'], + rules: { + // Relaxed rules for tests + '@typescript-eslint/no-explicit-any': 'off', + 'security/detect-object-injection': 'off', + 'sort-keys': 'off', + 'sort-keys-fix/sort-keys-fix': 'off', + }, + } +); diff --git a/package.json b/package.json index bf9ba5f..cd0d556 100644 --- a/package.json +++ b/package.json @@ -19,8 +19,8 @@ "preview": "vite preview", "format": "pnpm prettier --write ./src/components/*.{ts,tsx}", "test": "pnpm vitest --config ./vitest.config.ts --coverage", - "lint": "pnpm eslint ./src/components/**/*.{ts,tsx}", - "fix-lint": "pnpm eslint ./src/components/**/*.{ts,tsx} --fix", + "lint": "pnpm eslint \"./src/**/*.{ts,tsx,js,jsx}\"", + "fix-lint": "pnpm eslint \"./src/**/*.{ts,tsx,js,jsx}\" --fix", "build:dev": "webpack --mode=development", "build:prod": "webpack --mode=production --node-env=production", "analyze": "webpack --mode=production --node-env=production --env analyze", @@ -59,39 +59,6 @@ "pre-commit": "pretty-quick --staged" } }, - "eslintConfig": { - "env": { - "browser": true, - "commonjs": true, - "es2021": true - }, - "extends": [ - "plugin:react/recommended", - "standard", - "prettier" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 12, - "sourceType": "module" - }, - "plugins": [ - "react", - "@typescript-eslint" - ], - "rules": { - "no-use-before-define": "off", - "react/prop-types": "off" - }, - "settings": { - "react": { - "version": "detect" - } - } - }, "main": "dist/react-wizardry.js", "devDependencies": { "@babel/core": "^7.19.6", @@ -99,6 +66,7 @@ "@babel/preset-env": "^7.19.4", "@babel/preset-react": "^7.18.6", "@babel/runtime": "^7.20.0", + "@eslint/js": "^9.28.0", "@swc/core": "^1.11.31", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", @@ -120,16 +88,19 @@ "cssnano": "^7.0.7", "dotenv-webpack": "^8.1.0", "esbuild-loader": "^2.20.0", - "eslint": "^8.26.0", + "eslint": "^9.28.0", "eslint-config-prettier": "^8.5.0", "eslint-config-standard": "^17.0.0", - "eslint-plugin-import": "^2.25.2", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-n": "^15.4.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-react": "^7.31.10", - "eslint-plugin-security": "^1.5.0", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-security": "^3.0.1", "eslint-plugin-sort-keys-fix": "^1.1.2", + "glob": "^11.0.2", "husky": "^8.0.1", "jsdom": "^20.0.2", "mini-css-extract-plugin": "^2.6.1", @@ -150,6 +121,7 @@ "terser-webpack-plugin": "^5.3.6", "ts-loader": "^9.4.1", "typescript": "^4.8.4", + "typescript-eslint": "^8.33.1", "vite": "^6.3.5", "vitest": "^3.2.2", "webpack": "^5.99.9", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 38704ca..39bdce6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,6 +30,9 @@ importers: '@babel/runtime': specifier: ^7.20.0 version: 7.27.6 + '@eslint/js': + specifier: ^9.28.0 + version: 9.28.0 '@swc/core': specifier: ^1.11.31 version: 1.11.31 @@ -47,10 +50,10 @@ importers: version: 18.3.7(@types/react@18.3.23) '@typescript-eslint/eslint-plugin': specifier: ^5.42.0 - version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1)(typescript@4.9.5) + version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5))(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.42.0 - version: 5.62.0(eslint@8.57.1)(typescript@4.9.5) + version: 5.62.0(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5) '@vitejs/plugin-react': specifier: ^4.5.1 version: 4.5.1(vite@6.3.5(@types/node@22.15.30)(jiti@1.21.7)(sass@1.89.1)(terser@5.41.0)) @@ -94,35 +97,44 @@ importers: specifier: ^2.20.0 version: 2.21.0(webpack@5.99.9) eslint: - specifier: ^8.26.0 - version: 8.57.1 + specifier: ^9.28.0 + version: 9.28.0(jiti@1.21.7) eslint-config-prettier: specifier: ^8.5.0 - version: 8.10.0(eslint@8.57.1) + version: 8.10.0(eslint@9.28.0(jiti@1.21.7)) eslint-config-standard: specifier: ^17.0.0 - version: 17.1.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1) + version: 17.1.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@5.62.0(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5))(eslint@9.28.0(jiti@1.21.7)))(eslint-plugin-n@15.7.0(eslint@9.28.0(jiti@1.21.7)))(eslint-plugin-promise@6.6.0(eslint@9.28.0(jiti@1.21.7)))(eslint@9.28.0(jiti@1.21.7)) eslint-plugin-import: - specifier: ^2.25.2 - version: 2.31.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1) + specifier: ^2.31.0 + version: 2.31.0(@typescript-eslint/parser@5.62.0(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5))(eslint@9.28.0(jiti@1.21.7)) + eslint-plugin-jsx-a11y: + specifier: ^6.10.2 + version: 6.10.2(eslint@9.28.0(jiti@1.21.7)) eslint-plugin-n: specifier: ^15.4.0 - version: 15.7.0(eslint@8.57.1) + version: 15.7.0(eslint@9.28.0(jiti@1.21.7)) eslint-plugin-node: specifier: ^11.1.0 - version: 11.1.0(eslint@8.57.1) + version: 11.1.0(eslint@9.28.0(jiti@1.21.7)) eslint-plugin-promise: specifier: ^6.1.1 - version: 6.6.0(eslint@8.57.1) + version: 6.6.0(eslint@9.28.0(jiti@1.21.7)) eslint-plugin-react: - specifier: ^7.31.10 - version: 7.37.5(eslint@8.57.1) + specifier: ^7.37.5 + version: 7.37.5(eslint@9.28.0(jiti@1.21.7)) + eslint-plugin-react-hooks: + specifier: ^5.2.0 + version: 5.2.0(eslint@9.28.0(jiti@1.21.7)) eslint-plugin-security: - specifier: ^1.5.0 - version: 1.7.1 + specifier: ^3.0.1 + version: 3.0.1 eslint-plugin-sort-keys-fix: specifier: ^1.1.2 version: 1.1.2 + glob: + specifier: ^11.0.2 + version: 11.0.2 husky: specifier: ^8.0.1 version: 8.0.3 @@ -183,6 +195,9 @@ importers: typescript: specifier: ^4.8.4 version: 4.9.5 + typescript-eslint: + specifier: ^8.33.1 + version: 8.33.1(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5) vite: specifier: ^6.3.5 version: 6.3.5(@types/node@22.15.30)(jiti@1.21.7)(sass@1.89.1)(terser@5.41.0) @@ -1150,29 +1165,56 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/config-array@0.20.0': + resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@8.57.1': - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/config-helpers@0.2.2': + resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.14.0': + resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.28.0': + resolution: {integrity: sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.3.1': + resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@gar/promisify@1.1.3': resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} - '@humanwhocodes/config-array@0.13.0': - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -1961,6 +2003,14 @@ packages: typescript: optional: true + '@typescript-eslint/eslint-plugin@8.33.1': + resolution: {integrity: sha512-TDCXj+YxLgtvxvFlAvpoRv9MAncDLBV2oT9Bd7YBGC/b/sEURoOYuIwLI99rjWOfY3QtDzO+mk0n4AmdFExW8A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.33.1 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/parser@5.62.0': resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1971,10 +2021,33 @@ packages: typescript: optional: true + '@typescript-eslint/parser@8.33.1': + resolution: {integrity: sha512-qwxv6dq682yVvgKKp2qWwLgRbscDAYktPptK4JPojCwwi3R9cwrvIxS4lvBpzmcqzR4bdn54Z0IG1uHFskW4dA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/project-service@8.33.1': + resolution: {integrity: sha512-DZR0efeNklDIHHGRpMpR5gJITQpu6tLr9lDJnKdONTC7vvzOlLAG/wcfxcdxEWrbiZApcoBCzXqU/Z458Za5Iw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/scope-manager@5.62.0': resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/scope-manager@8.33.1': + resolution: {integrity: sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.33.1': + resolution: {integrity: sha512-STAQsGYbHCF0/e+ShUQ4EatXQ7ceh3fBCXkNU7/MZVKulrlq1usH7t2FhxvCpuCi5O5oi1vmVaAjrGeL71OK1g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/type-utils@5.62.0': resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1985,10 +2058,21 @@ packages: typescript: optional: true + '@typescript-eslint/type-utils@8.33.1': + resolution: {integrity: sha512-1cG37d9xOkhlykom55WVwG2QRNC7YXlxMaMzqw2uPeJixBFfKWZgaP/hjAObqMN/u3fr5BrTwTnc31/L9jQ2ww==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/types@5.62.0': resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/types@8.33.1': + resolution: {integrity: sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@5.62.0': resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1998,18 +2082,32 @@ packages: typescript: optional: true + '@typescript-eslint/typescript-estree@8.33.1': + resolution: {integrity: sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/utils@5.62.0': resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/utils@8.33.1': + resolution: {integrity: sha512-52HaBiEQUaRYqAXpfzWSR2U3gxk92Kw006+xZpElaPMg3C4PgM+A5LqwoQI1f9E5aZ/qlxAZxzm42WX+vn92SQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/visitor-keys@5.62.0': resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@ungap/structured-clone@1.3.0': - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + '@typescript-eslint/visitor-keys@8.33.1': + resolution: {integrity: sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@vitejs/plugin-react@4.5.1': resolution: {integrity: sha512-uPZBqSI0YD4lpkIru6M35sIfylLGTyhGHvDZbNLuMA73lMlwJKz5xweH7FajfcCAc2HnINciejA9qTz0dr0M7A==} @@ -2388,6 +2486,9 @@ packages: resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} engines: {node: '>=0.10.0'} + ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + ast-v8-to-istanbul@0.3.3: resolution: {integrity: sha512-MuXMrSLVVoA6sYN/6Hke18vMzrT4TZNbZIj/hvh0fnYFpO+/kFXcLIaiPwXXWaQUPg4yJD8fj+lfJ7/1EBconw==} @@ -2424,9 +2525,17 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + axe-core@4.10.3: + resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} + engines: {node: '>=4'} + axios@0.21.4: resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + babel-loader@9.2.1: resolution: {integrity: sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==} engines: {node: '>= 14.15.0'} @@ -2985,6 +3094,9 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + dargs@6.1.0: resolution: {integrity: sha512-5dVBvpBLBnPwSsYXqfybFyehMmC/EenKEcf23AhCTgTf48JFBbmJKqoZBsERDnjL0FyiVTYWdFsRfTLHxLyKdQ==} engines: {node: '>=6'} @@ -3174,10 +3286,6 @@ packages: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} @@ -3450,6 +3558,12 @@ packages: '@typescript-eslint/parser': optional: true + eslint-plugin-jsx-a11y@6.10.2: + resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + eslint-plugin-n@15.7.0: resolution: {integrity: sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==} engines: {node: '>=12.22.0'} @@ -3468,14 +3582,21 @@ packages: peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + eslint-plugin-react-hooks@5.2.0: + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + eslint-plugin-react@7.37.5: resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - eslint-plugin-security@1.7.1: - resolution: {integrity: sha512-sMStceig8AFglhhT2LqlU5r+/fn9OwsA72O5bBuQVTssPCdQAOQzL+oMn/ZcpeUY6KcNfLJArgcrsSULNjYYdQ==} + eslint-plugin-security@3.0.1: + resolution: {integrity: sha512-XjVGBhtDZJfyuhIxnQ/WMm385RbX3DBu7H1J7HNNhmB2tnGxMeqVSnYv79oAj992ayvIBZghsymwkYFS6cGH4Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-plugin-sort-keys-fix@1.1.2: resolution: {integrity: sha512-DNPHFGCA0/hZIsfODbeLZqaGY/+q3vgtshF85r+YWDNCQ2apd9PNs/zL6ttKm0nD1IFwvxyg3YOTI7FHl4unrw==} @@ -3485,9 +3606,9 @@ packages: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@8.3.0: + resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-utils@2.1.0: resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} @@ -3511,20 +3632,28 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.28.0: + resolution: {integrity: sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} espree@6.2.1: resolution: {integrity: sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==} engines: {node: '>=6.0.0'} - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} @@ -3658,6 +3787,10 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + file-type@16.5.4: resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} engines: {node: '>=10'} @@ -3708,6 +3841,10 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true @@ -3851,6 +3988,11 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true + glob@11.0.2: + resolution: {integrity: sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==} + engines: {node: 20 || >=22} + hasBin: true + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -3875,9 +4017,9 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} @@ -4099,6 +4241,10 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + image-q@4.0.0: resolution: {integrity: sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==} @@ -4316,10 +4462,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - is-plain-obj@1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} @@ -4466,6 +4608,10 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jackspeak@4.1.1: + resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} + engines: {node: 20 || >=22} + jake@10.9.2: resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} engines: {node: '>=10'} @@ -4608,6 +4754,13 @@ packages: known-css-properties@0.26.0: resolution: {integrity: sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==} + language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + + language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + launch-editor@2.10.0: resolution: {integrity: sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==} @@ -4697,6 +4850,10 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@11.1.0: + resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -4862,6 +5019,10 @@ packages: minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -5340,6 +5501,10 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + path-to-regexp@0.1.12: resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} @@ -6508,6 +6673,10 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} + string.prototype.includes@2.0.1: + resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} + engines: {node: '>= 0.4'} + string.prototype.matchall@4.0.12: resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} engines: {node: '>= 0.4'} @@ -6795,6 +6964,12 @@ packages: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + ts-loader@9.5.2: resolution: {integrity: sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==} engines: {node: '>=12.0.0'} @@ -6825,10 +7000,6 @@ packages: resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} engines: {node: '>=10'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -6861,6 +7032,13 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} + typescript-eslint@8.33.1: + resolution: {integrity: sha512-AgRnV4sKkWOiZ0Kjbnf5ytTJXMUZQ0qhSVdQtDNYLPLnjsATEYhaO94GlRQwi4t4gO8FfjM6NnikHeKjUm8D7A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + typescript@4.9.5: resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} @@ -8293,19 +8471,33 @@ snapshots: '@esbuild/win32-x64@0.25.5': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@8.57.1)': + '@eslint-community/eslint-utils@4.7.0(eslint@9.28.0(jiti@1.21.7))': dependencies: - eslint: 8.57.1 + eslint: 9.28.0(jiti@1.21.7) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/eslintrc@2.1.4': + '@eslint/config-array@0.20.0': + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.4.1 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.2.2': {} + + '@eslint/core@0.14.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 debug: 4.4.1 - espree: 9.6.1 - globals: 13.24.0 + espree: 10.3.0 + globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 js-yaml: 4.1.0 @@ -8314,21 +8506,29 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.57.1': {} + '@eslint/js@9.28.0': {} + + '@eslint/object-schema@2.1.6': {} + + '@eslint/plugin-kit@0.3.1': + dependencies: + '@eslint/core': 0.14.0 + levn: 0.4.1 '@gar/promisify@1.1.3': {} - '@humanwhocodes/config-array@0.13.0': + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.4.1 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/object-schema@2.0.3': {} + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.3': {} '@isaacs/cliui@8.0.2': dependencies: @@ -9206,15 +9406,15 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1)(typescript@4.9.5)': + '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5))(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@4.9.5) + '@typescript-eslint/parser': 5.62.0(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5) '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@4.9.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@4.9.5) + '@typescript-eslint/type-utils': 5.62.0(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5) + '@typescript-eslint/utils': 5.62.0(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5) debug: 4.4.1 - eslint: 8.57.1 + eslint: 9.28.0(jiti@1.21.7) graphemer: 1.4.0 ignore: 5.3.2 natural-compare-lite: 1.4.0 @@ -9225,37 +9425,97 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5)': + '@typescript-eslint/eslint-plugin@8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5))(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.33.1(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5) + '@typescript-eslint/scope-manager': 8.33.1 + '@typescript-eslint/type-utils': 8.33.1(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5) + '@typescript-eslint/utils': 8.33.1(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5) + '@typescript-eslint/visitor-keys': 8.33.1 + eslint: 9.28.0(jiti@1.21.7) + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@5.62.0(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5)': dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) debug: 4.4.1 - eslint: 8.57.1 + eslint: 9.28.0(jiti@1.21.7) optionalDependencies: typescript: 4.9.5 transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.33.1(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5)': + dependencies: + '@typescript-eslint/scope-manager': 8.33.1 + '@typescript-eslint/types': 8.33.1 + '@typescript-eslint/typescript-estree': 8.33.1(typescript@4.9.5) + '@typescript-eslint/visitor-keys': 8.33.1 + debug: 4.4.1 + eslint: 9.28.0(jiti@1.21.7) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.33.1(typescript@4.9.5)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.33.1(typescript@4.9.5) + '@typescript-eslint/types': 8.33.1 + debug: 4.4.1 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/scope-manager@5.62.0': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - '@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@4.9.5)': + '@typescript-eslint/scope-manager@8.33.1': + dependencies: + '@typescript-eslint/types': 8.33.1 + '@typescript-eslint/visitor-keys': 8.33.1 + + '@typescript-eslint/tsconfig-utils@8.33.1(typescript@4.9.5)': + dependencies: + typescript: 4.9.5 + + '@typescript-eslint/type-utils@5.62.0(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5)': dependencies: '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@4.9.5) + '@typescript-eslint/utils': 5.62.0(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5) debug: 4.4.1 - eslint: 8.57.1 + eslint: 9.28.0(jiti@1.21.7) tsutils: 3.21.0(typescript@4.9.5) optionalDependencies: typescript: 4.9.5 transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@8.33.1(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5)': + dependencies: + '@typescript-eslint/typescript-estree': 8.33.1(typescript@4.9.5) + '@typescript-eslint/utils': 8.33.1(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5) + debug: 4.4.1 + eslint: 9.28.0(jiti@1.21.7) + ts-api-utils: 2.1.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/types@5.62.0': {} + '@typescript-eslint/types@8.33.1': {} + '@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5)': dependencies: '@typescript-eslint/types': 5.62.0 @@ -9270,27 +9530,57 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@4.9.5)': + '@typescript-eslint/typescript-estree@8.33.1(typescript@4.9.5)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) + '@typescript-eslint/project-service': 8.33.1(typescript@4.9.5) + '@typescript-eslint/tsconfig-utils': 8.33.1(typescript@4.9.5) + '@typescript-eslint/types': 8.33.1 + '@typescript-eslint/visitor-keys': 8.33.1 + debug: 4.4.1 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@5.62.0(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5)': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@1.21.7)) '@types/json-schema': 7.0.15 '@types/semver': 7.7.0 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) - eslint: 8.57.1 + eslint: 9.28.0(jiti@1.21.7) eslint-scope: 5.1.1 semver: 7.7.2 transitivePeerDependencies: - supports-color - typescript + '@typescript-eslint/utils@8.33.1(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5)': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@1.21.7)) + '@typescript-eslint/scope-manager': 8.33.1 + '@typescript-eslint/types': 8.33.1 + '@typescript-eslint/typescript-estree': 8.33.1(typescript@4.9.5) + eslint: 9.28.0(jiti@1.21.7) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@5.62.0': dependencies: '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 - '@ungap/structured-clone@1.3.0': {} + '@typescript-eslint/visitor-keys@8.33.1': + dependencies: + '@typescript-eslint/types': 8.33.1 + eslint-visitor-keys: 4.2.0 '@vitejs/plugin-react@4.5.1(vite@6.3.5(@types/node@22.15.30)(jiti@1.21.7)(sass@1.89.1)(terser@5.41.0))': dependencies: @@ -9724,6 +10014,8 @@ snapshots: assign-symbols@1.0.0: {} + ast-types-flow@0.0.8: {} + ast-v8-to-istanbul@0.3.3: dependencies: '@jridgewell/trace-mapping': 0.3.25 @@ -9758,6 +10050,8 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 + axe-core@4.10.3: {} + axios@0.21.4(debug@3.2.7): dependencies: follow-redirects: 1.15.9(debug@3.2.7) @@ -9765,6 +10059,8 @@ snapshots: - debug optional: true + axobject-query@4.1.0: {} + babel-loader@9.2.1(@babel/core@7.27.4)(webpack@5.99.9): dependencies: '@babel/core': 7.27.4 @@ -10401,6 +10697,8 @@ snapshots: csstype@3.1.3: {} + damerau-levenshtein@1.0.8: {} + dargs@6.1.0: {} data-urls@3.0.2: @@ -10574,10 +10872,6 @@ snapshots: dependencies: esutils: 2.0.3 - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - dom-accessibility-api@0.5.16: {} dom-serializer@2.0.0: @@ -10892,16 +11186,16 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@8.10.0(eslint@8.57.1): + eslint-config-prettier@8.10.0(eslint@9.28.0(jiti@1.21.7)): dependencies: - eslint: 8.57.1 + eslint: 9.28.0(jiti@1.21.7) - eslint-config-standard@17.1.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1): + eslint-config-standard@17.1.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@5.62.0(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5))(eslint@9.28.0(jiti@1.21.7)))(eslint-plugin-n@15.7.0(eslint@9.28.0(jiti@1.21.7)))(eslint-plugin-promise@6.6.0(eslint@9.28.0(jiti@1.21.7)))(eslint@9.28.0(jiti@1.21.7)): dependencies: - eslint: 8.57.1 - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1) - eslint-plugin-n: 15.7.0(eslint@8.57.1) - eslint-plugin-promise: 6.6.0(eslint@8.57.1) + eslint: 9.28.0(jiti@1.21.7) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@5.62.0(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5))(eslint@9.28.0(jiti@1.21.7)) + eslint-plugin-n: 15.7.0(eslint@9.28.0(jiti@1.21.7)) + eslint-plugin-promise: 6.6.0(eslint@9.28.0(jiti@1.21.7)) eslint-import-resolver-node@0.3.9: dependencies: @@ -10911,29 +11205,29 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): + eslint-module-utils@2.12.0(@typescript-eslint/parser@5.62.0(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@1.21.7)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@4.9.5) - eslint: 8.57.1 + '@typescript-eslint/parser': 5.62.0(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5) + eslint: 9.28.0(jiti@1.21.7) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-es@3.0.1(eslint@8.57.1): + eslint-plugin-es@3.0.1(eslint@9.28.0(jiti@1.21.7)): dependencies: - eslint: 8.57.1 + eslint: 9.28.0(jiti@1.21.7) eslint-utils: 2.1.0 regexpp: 3.2.0 - eslint-plugin-es@4.1.0(eslint@8.57.1): + eslint-plugin-es@4.1.0(eslint@9.28.0(jiti@1.21.7)): dependencies: - eslint: 8.57.1 + eslint: 9.28.0(jiti@1.21.7) eslint-utils: 2.1.0 regexpp: 3.2.0 - eslint-plugin-import@2.31.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@5.62.0(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5))(eslint@9.28.0(jiti@1.21.7)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -10942,9 +11236,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.1 + eslint: 9.28.0(jiti@1.21.7) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@5.62.0(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@1.21.7)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -10956,39 +11250,62 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@4.9.5) + '@typescript-eslint/parser': 5.62.0(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-n@15.7.0(eslint@8.57.1): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.28.0(jiti@1.21.7)): + dependencies: + aria-query: 5.3.2 + array-includes: 3.1.9 + array.prototype.flatmap: 1.3.3 + ast-types-flow: 0.0.8 + axe-core: 4.10.3 + axobject-query: 4.1.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 9.28.0(jiti@1.21.7) + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + safe-regex-test: 1.1.0 + string.prototype.includes: 2.0.1 + + eslint-plugin-n@15.7.0(eslint@9.28.0(jiti@1.21.7)): dependencies: builtins: 5.1.0 - eslint: 8.57.1 - eslint-plugin-es: 4.1.0(eslint@8.57.1) - eslint-utils: 3.0.0(eslint@8.57.1) + eslint: 9.28.0(jiti@1.21.7) + eslint-plugin-es: 4.1.0(eslint@9.28.0(jiti@1.21.7)) + eslint-utils: 3.0.0(eslint@9.28.0(jiti@1.21.7)) ignore: 5.3.2 is-core-module: 2.16.1 minimatch: 3.1.2 resolve: 1.22.10 semver: 7.7.2 - eslint-plugin-node@11.1.0(eslint@8.57.1): + eslint-plugin-node@11.1.0(eslint@9.28.0(jiti@1.21.7)): dependencies: - eslint: 8.57.1 - eslint-plugin-es: 3.0.1(eslint@8.57.1) + eslint: 9.28.0(jiti@1.21.7) + eslint-plugin-es: 3.0.1(eslint@9.28.0(jiti@1.21.7)) eslint-utils: 2.1.0 ignore: 5.3.2 minimatch: 3.1.2 resolve: 1.22.10 semver: 6.3.1 - eslint-plugin-promise@6.6.0(eslint@8.57.1): + eslint-plugin-promise@6.6.0(eslint@9.28.0(jiti@1.21.7)): + dependencies: + eslint: 9.28.0(jiti@1.21.7) + + eslint-plugin-react-hooks@5.2.0(eslint@9.28.0(jiti@1.21.7)): dependencies: - eslint: 8.57.1 + eslint: 9.28.0(jiti@1.21.7) - eslint-plugin-react@7.37.5(eslint@8.57.1): + eslint-plugin-react@7.37.5(eslint@9.28.0(jiti@1.21.7)): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -10996,7 +11313,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 8.57.1 + eslint: 9.28.0(jiti@1.21.7) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -11010,7 +11327,7 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-security@1.7.1: + eslint-plugin-security@3.0.1: dependencies: safe-regex: 2.1.1 @@ -11026,7 +11343,7 @@ snapshots: esrecurse: 4.3.0 estraverse: 4.3.0 - eslint-scope@7.2.2: + eslint-scope@8.3.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 @@ -11035,9 +11352,9 @@ snapshots: dependencies: eslint-visitor-keys: 1.3.0 - eslint-utils@3.0.0(eslint@8.57.1): + eslint-utils@3.0.0(eslint@9.28.0(jiti@1.21.7)): dependencies: - eslint: 8.57.1 + eslint: 9.28.0(jiti@1.21.7) eslint-visitor-keys: 2.1.0 eslint-visitor-keys@1.3.0: {} @@ -11046,61 +11363,62 @@ snapshots: eslint-visitor-keys@3.4.3: {} - eslint@8.57.1: + eslint-visitor-keys@4.2.0: {} + + eslint@9.28.0(jiti@1.21.7): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@1.21.7)) '@eslint-community/regexpp': 4.12.1 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.1 - '@humanwhocodes/config-array': 0.13.0 + '@eslint/config-array': 0.20.0 + '@eslint/config-helpers': 0.2.2 + '@eslint/core': 0.14.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.28.0 + '@eslint/plugin-kit': 0.3.1 + '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.3.0 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 debug: 4.4.1 - doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 + eslint-scope: 8.3.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 + optionalDependencies: + jiti: 1.21.7 transitivePeerDependencies: - supports-color + espree@10.3.0: + dependencies: + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) + eslint-visitor-keys: 4.2.0 + espree@6.2.1: dependencies: acorn: 7.4.1 acorn-jsx: 5.3.2(acorn@7.4.1) eslint-visitor-keys: 1.3.0 - espree@9.6.1: - dependencies: - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) - eslint-visitor-keys: 3.4.3 - esprima@4.0.1: {} esquery@1.6.0: @@ -11290,6 +11608,10 @@ snapshots: dependencies: flat-cache: 3.2.0 + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + file-type@16.5.4: dependencies: readable-web-to-node-stream: 3.0.4 @@ -11362,6 +11684,11 @@ snapshots: keyv: 4.5.4 rimraf: 3.0.2 + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + flat@5.0.2: {} flatted@3.3.3: {} @@ -11520,6 +11847,15 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + glob@11.0.2: + dependencies: + foreground-child: 3.3.1 + jackspeak: 4.1.1 + minimatch: 10.0.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.0 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -11554,9 +11890,7 @@ snapshots: globals@11.12.0: {} - globals@13.24.0: - dependencies: - type-fest: 0.20.2 + globals@14.0.0: {} globalthis@1.0.4: dependencies: @@ -11812,6 +12146,8 @@ snapshots: ignore@5.3.2: {} + ignore@7.0.5: {} + image-q@4.0.0: dependencies: '@types/node': 16.9.1 @@ -12032,8 +12368,6 @@ snapshots: is-number@7.0.0: {} - is-path-inside@3.0.3: {} - is-plain-obj@1.1.0: {} is-plain-obj@3.0.0: {} @@ -12170,6 +12504,10 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jackspeak@4.1.1: + dependencies: + '@isaacs/cliui': 8.0.2 + jake@10.9.2: dependencies: async: 3.2.6 @@ -12342,6 +12680,12 @@ snapshots: known-css-properties@0.26.0: {} + language-subtag-registry@0.3.23: {} + + language-tags@1.0.9: + dependencies: + language-subtag-registry: 0.3.23 + launch-editor@2.10.0: dependencies: picocolors: 1.1.1 @@ -12438,6 +12782,8 @@ snapshots: lru-cache@10.4.3: {} + lru-cache@11.1.0: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -12675,6 +13021,10 @@ snapshots: minimalistic-assert@1.0.1: {} + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -13233,6 +13583,11 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 + path-scurry@2.0.0: + dependencies: + lru-cache: 11.1.0 + minipass: 7.1.2 + path-to-regexp@0.1.12: {} path-type@3.0.0: @@ -14453,6 +14808,12 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 + string.prototype.includes@2.0.1: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + string.prototype.matchall@4.0.12: dependencies: call-bind: 1.0.8 @@ -14787,6 +15148,10 @@ snapshots: trim-newlines@3.0.1: {} + ts-api-utils@2.1.0(typescript@4.9.5): + dependencies: + typescript: 4.9.5 + ts-loader@9.5.2(typescript@4.9.5)(webpack@5.99.9): dependencies: chalk: 4.1.2 @@ -14819,8 +15184,6 @@ snapshots: type-fest@0.18.1: {} - type-fest@0.20.2: {} - type-fest@0.21.3: {} type-fest@0.6.0: {} @@ -14865,6 +15228,16 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 + typescript-eslint@8.33.1(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5): + dependencies: + '@typescript-eslint/eslint-plugin': 8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5))(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5) + '@typescript-eslint/parser': 8.33.1(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5) + '@typescript-eslint/utils': 8.33.1(eslint@9.28.0(jiti@1.21.7))(typescript@4.9.5) + eslint: 9.28.0(jiti@1.21.7) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + typescript@4.9.5: {} unbox-primitive@1.1.0: diff --git a/src/App.tsx b/src/App.tsx index eee0a1c..8e5e0c1 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,6 +1,5 @@ import "./App.css"; import { Wizard } from "./components/wizard"; - import Box from "./example-assets/box"; import Dollar from "./example-assets/dollar"; import Twitter from "./example-assets/twitter"; diff --git a/src/components/form-field/__tests__/form-field.test.tsx b/src/components/form-field/__tests__/form-field.test.tsx index 6b34e4d..bfdd087 100644 --- a/src/components/form-field/__tests__/form-field.test.tsx +++ b/src/components/form-field/__tests__/form-field.test.tsx @@ -1,13 +1,14 @@ import { fireEvent, render, waitFor } from "@testing-library/react"; import React from "react"; import { describe, expect, it, vi } from "vitest"; + import { FormField } from "../form-field"; import styles from "../form-field.module.scss"; describe("FormField", () => { it("should render text box", () => { const { getByText } = render( - + ); expect(getByText("first name")).toBeInTheDocument(); @@ -15,7 +16,7 @@ describe("FormField", () => { it("should render checkbox", () => { const { getByText } = render( - + ); expect(getByText("option")).toBeInTheDocument(); @@ -23,7 +24,7 @@ describe("FormField", () => { it("should render datetime", () => { const { getByText } = render( - + ); expect(getByText("date")).toBeInTheDocument(); @@ -31,7 +32,7 @@ describe("FormField", () => { it("should render file", () => { const { getByText } = render( - + ); expect(getByText("file")).toBeInTheDocument(); @@ -42,7 +43,6 @@ describe("FormField", () => { { value: "two", }, ]} + type="select" /> ); @@ -60,7 +61,7 @@ describe("FormField", () => { it("should render text area", () => { const { getByText } = render( - + ); expect(getByText("text")).toBeInTheDocument(); @@ -68,7 +69,7 @@ describe("FormField", () => { it("should render valid icon", () => { const { getByLabelText } = render( - + ); expect(getByLabelText("success")).toBeInTheDocument(); @@ -80,10 +81,10 @@ describe("FormField", () => { const { getByLabelText } = render( ); @@ -94,7 +95,7 @@ describe("FormField", () => { it("should render the label", () => { const { getByLabelText } = render( - + ); expect(getByLabelText("field 123")).toBeInTheDocument(); @@ -102,7 +103,7 @@ describe("FormField", () => { it("should have the valid class", () => { const { container } = render( - + ); expect(container.firstChild).toHaveClass( @@ -113,7 +114,7 @@ describe("FormField", () => { it("should render asterisk icon for required field", () => { const { getByLabelText } = render( - + ); expect(getByLabelText("important field")).toBeInTheDocument(); @@ -125,10 +126,10 @@ describe("FormField", () => { const { container } = render( ); diff --git a/src/components/form-field/form-field-input.tsx b/src/components/form-field/form-field-input.tsx index 02e9c8c..c2f23af 100644 --- a/src/components/form-field/form-field-input.tsx +++ b/src/components/form-field/form-field-input.tsx @@ -1,7 +1,9 @@ import classNames from "classnames"; import { FunctionComponent, useContext, useMemo } from "react"; + import Asterisk from "../../icons/asterisk"; import { WizardContext } from "../wizard-context"; + import { FormChangeEvent, FormFieldProps } from "./form-field.model"; import styles from "./form-field.module.scss"; diff --git a/src/components/form-field/form-field-message.tsx b/src/components/form-field/form-field-message.tsx index d2b8303..bd8bd22 100644 --- a/src/components/form-field/form-field-message.tsx +++ b/src/components/form-field/form-field-message.tsx @@ -1,14 +1,16 @@ import classNames from "classnames"; import { FunctionComponent, useMemo } from "react"; + import InfoIcon from "../../icons/info"; + import styles from "./form-field-message.module.scss"; -export type FormFieldMessageProps = { +export interface FormFieldMessageProps { message?: string; RTL?: boolean; isValid?: boolean | null; show?: boolean; -}; +} const FormFieldMessage: FunctionComponent = ({ message, diff --git a/src/components/form-field/form-field.model.ts b/src/components/form-field/form-field.model.ts index 25732e7..71502ab 100644 --- a/src/components/form-field/form-field.model.ts +++ b/src/components/form-field/form-field.model.ts @@ -1,10 +1,10 @@ import { ChangeEvent } from "react"; -export type Option = { +export interface Option { id?: string; name: string; value: string | number | boolean; -}; +} export type InputType = | "text" @@ -20,7 +20,7 @@ export type InputType = | "radio" | "textarea"; -export type FormFieldProps = { +export interface FormFieldProps { name: string; id?: string; isRequired?: boolean; @@ -35,7 +35,7 @@ export type FormFieldProps = { placeholder?: string; disabled?: boolean; validationMessage?: string; -}; +} export type FormChangeEvent = ( e: ChangeEvent< diff --git a/src/components/form-field/form-field.tsx b/src/components/form-field/form-field.tsx index 419ee48..af19329 100644 --- a/src/components/form-field/form-field.tsx +++ b/src/components/form-field/form-field.tsx @@ -8,9 +8,11 @@ import { useRef, useState, } from "react"; + import CheckIcon from "../../icons/check"; import Exclamation from "../../icons/exclamation"; import { WizardContext } from "../wizard-context"; + import { FormFieldInput } from "./form-field-input"; import { FormFieldMessage } from "./form-field-message"; import { FormChangeEvent, FormFieldProps } from "./form-field.model"; diff --git a/src/components/page/__tests__/page.test.tsx b/src/components/page/__tests__/page.test.tsx index e225d0d..6fd5163 100644 --- a/src/components/page/__tests__/page.test.tsx +++ b/src/components/page/__tests__/page.test.tsx @@ -1,22 +1,23 @@ import { fireEvent, render, waitFor } from "@testing-library/react"; import React from "react"; import { describe, expect, it, vi } from "vitest"; + import { FormFieldProps } from "../../form-field/form-field.model"; import { Page } from "../page"; const fields: FormFieldProps[] = [ { - name: "name", - label: "name", id: "name", isRequired: true, + label: "name", + name: "name", type: "text", }, { - name: "email", id: "email", - label: `email`, isRequired: true, + label: `email`, + name: "email", type: "email", }, ]; @@ -24,7 +25,7 @@ const fields: FormFieldProps[] = [ describe("Page", () => { it("should render the page", () => { const { getByText } = render( - + ); expect(getByText("Introduction")).toBeInTheDocument(); @@ -32,7 +33,7 @@ describe("Page", () => { it("should render the fields", () => { const { getByLabelText } = render( - + ); expect(getByLabelText("name")).toBeInTheDocument(); @@ -43,11 +44,11 @@ describe("Page", () => { const onChange = vi.fn(); const { container } = render( ); @@ -72,11 +73,11 @@ describe("Page", () => { const onChange = vi.fn(); const { container } = render( ); diff --git a/src/components/page/page.model.ts b/src/components/page/page.model.ts index b6493ef..8a03906 100644 --- a/src/components/page/page.model.ts +++ b/src/components/page/page.model.ts @@ -1,6 +1,6 @@ import { FormFieldProps } from "../form-field/form-field.model"; -export type PageModelProps = { +export interface PageModelProps { id: string; onChange?: (id: string, success: boolean) => void; fields: FormFieldProps[]; @@ -10,4 +10,4 @@ export type PageModelProps = { width?: number; hide?: boolean; state: "NOT_VALIDATED" | "SUCCESS" | "FAIL"; -}; +} diff --git a/src/components/page/page.tsx b/src/components/page/page.tsx index 117619a..74fe268 100644 --- a/src/components/page/page.tsx +++ b/src/components/page/page.tsx @@ -9,10 +9,12 @@ import { useRef, useState } from "react"; + import { getValidationMessage, validator } from "../../utils"; import { FormField } from "../form-field/form-field"; import { FormFieldProps } from "../form-field/form-field.model"; import { PageModelProps } from "../page/page.model"; + import { WizardContext } from './../wizard-context'; import styles from "./page.module.scss"; diff --git a/src/components/wizard-context.ts b/src/components/wizard-context.ts index 3c017f7..338a9d2 100644 --- a/src/components/wizard-context.ts +++ b/src/components/wizard-context.ts @@ -1,4 +1,5 @@ import { createContext } from "react"; + import { contextType } from "./wizard.model"; export const WizardContext = createContext({ diff --git a/src/components/wizard-finish.tsx b/src/components/wizard-finish.tsx index 014a958..2411385 100644 --- a/src/components/wizard-finish.tsx +++ b/src/components/wizard-finish.tsx @@ -1,10 +1,12 @@ import { FunctionComponent } from "react"; + import CircleCheck from "../icons/circle-check"; + import styles from "./wizard-finish.module.scss"; -export type WizardFinishProps = { +export interface WizardFinishProps { message?: string; -}; +} const WizardFinish: FunctionComponent = ({ message = "Thanks for submitting the details", diff --git a/src/components/wizard-footer/__tests__/wizard-footer.test.tsx b/src/components/wizard-footer/__tests__/wizard-footer.test.tsx index dc610a2..8fb52b5 100644 --- a/src/components/wizard-footer/__tests__/wizard-footer.test.tsx +++ b/src/components/wizard-footer/__tests__/wizard-footer.test.tsx @@ -1,5 +1,6 @@ import { fireEvent, render } from "@testing-library/react"; import { describe, expect, it, vi } from "vitest"; + import { PageModelProps } from "../../page/page.model"; import { WizardFooter } from "../wizard-footer"; import styles from "../wizard-footer.module.scss"; diff --git a/src/components/wizard-footer/wizard-footer.model.ts b/src/components/wizard-footer/wizard-footer.model.ts index bf0fc2b..bfcfd3c 100644 --- a/src/components/wizard-footer/wizard-footer.model.ts +++ b/src/components/wizard-footer/wizard-footer.model.ts @@ -1,10 +1,10 @@ import { PageModelProps } from "../page/page.model"; -export type WizardFooterProps = { +export interface WizardFooterProps { onNext?: () => void; onPrev?: () => void; onFinish?: () => void; activeId?: string; pages: PageModelProps[]; message?: string; -}; +} diff --git a/src/components/wizard-footer/wizard-footer.tsx b/src/components/wizard-footer/wizard-footer.tsx index 0e9c8a8..0e282c0 100644 --- a/src/components/wizard-footer/wizard-footer.tsx +++ b/src/components/wizard-footer/wizard-footer.tsx @@ -1,8 +1,10 @@ import classNames from "classnames"; import { FunctionComponent, useContext, useMemo } from "react"; + import ChevronLeft from "../../icons/chevron-left"; import ChevronRight from "../../icons/chevron-right"; import { WizardFooterProps } from "../wizard-footer/wizard-footer.model"; + import { WizardContext } from "./../wizard-context"; import styles from "./wizard-footer.module.scss"; diff --git a/src/components/wizard-header/__tests__/wizard-header.test.tsx b/src/components/wizard-header/__tests__/wizard-header.test.tsx index 378330c..0fdfe58 100644 --- a/src/components/wizard-header/__tests__/wizard-header.test.tsx +++ b/src/components/wizard-header/__tests__/wizard-header.test.tsx @@ -1,34 +1,35 @@ import { render } from "@testing-library/react"; import React from "react"; import { describe, expect, it } from "vitest"; + import { PageModelProps } from "../../page/page.model"; import { WizardHeader } from "../wizard-header"; const pages: PageModelProps[] = [ { + fields: [], id: "page1", - title: "Page 1", state: "NOT_VALIDATED", - fields: [], + title: "Page 1", }, { + fields: [], id: "page2", - title: "Page 2", state: "FAIL", - fields: [], + title: "Page 2", }, { + fields: [], id: "page3", - title: "Page 3", state: "NOT_VALIDATED", - fields: [], + title: "Page 3", }, ]; describe("Wizard Header", () => { it("should render the header", () => { const { getByRole, getAllByRole } = render( - + ); expect(getByRole("tablist")).toBeInTheDocument(); @@ -37,7 +38,7 @@ describe("Wizard Header", () => { it("should render icon states", () => { const { getAllByRole } = render( - + ); expect(getAllByRole("img")).toHaveLength(3); diff --git a/src/components/wizard-header/wizard-header-tab.tsx b/src/components/wizard-header/wizard-header-tab.tsx index e384264..9159211 100644 --- a/src/components/wizard-header/wizard-header-tab.tsx +++ b/src/components/wizard-header/wizard-header-tab.tsx @@ -1,8 +1,10 @@ import classNames from "classnames"; import { CSSProperties, FunctionComponent, useContext, useMemo } from "react"; + import CheckIcon from "../../icons/check"; import WarnIcon from "../../icons/warning"; import { WizardContext } from "../wizard-context"; + import { WizardTabProps } from "./wizard-header.model"; import styles from "./wizard-header.module.scss"; diff --git a/src/components/wizard-header/wizard-header.model.ts b/src/components/wizard-header/wizard-header.model.ts index 66a1454..924dfe8 100644 --- a/src/components/wizard-header/wizard-header.model.ts +++ b/src/components/wizard-header/wizard-header.model.ts @@ -1,12 +1,13 @@ import { ReactNode } from "react"; + import { PageModelProps } from "../page/page.model"; -export type WizardHeaderProps = { +export interface WizardHeaderProps { pages: PageModelProps[]; onSelect?: (id?: string) => void; activeIndex: number; icons?: ReactNode[]; -}; +} export type WizardTabProps = Pick & Pick & { diff --git a/src/components/wizard-header/wizard-header.tsx b/src/components/wizard-header/wizard-header.tsx index 8ce485e..001b4cc 100644 --- a/src/components/wizard-header/wizard-header.tsx +++ b/src/components/wizard-header/wizard-header.tsx @@ -1,6 +1,8 @@ import classNames from "classnames"; import { FunctionComponent, useContext, useMemo } from "react"; + import { WizardContext } from "../wizard-context"; + import { WizardHeaderTab } from "./wizard-header-tab"; import { WizardHeaderProps } from "./wizard-header.model"; import styles from "./wizard-header.module.scss"; diff --git a/src/components/wizard.model.ts b/src/components/wizard.model.ts index df81900..486e377 100644 --- a/src/components/wizard.model.ts +++ b/src/components/wizard.model.ts @@ -1,9 +1,10 @@ import { ReactNode } from "react"; + import { PageModelProps } from "./page/page.model"; export type WizardPageProps = Pick; -export type Theme = { +export interface Theme { background?: string; fail?: string; formFieldBackground?: string; @@ -16,9 +17,9 @@ export type Theme = { tabColor?: string; tabLineColor?: string; warning?: string; -}; +} -export type WizardProps = { +export interface WizardProps { pages: WizardPageProps[]; theme?: Theme; highlightFieldsOnValidation?: boolean; @@ -34,12 +35,12 @@ export type WizardProps = { silent?: boolean; stepperItemWidth?: string; showStepperTitles?: boolean; -}; +} -export type PageDim = { +export interface PageDim { height: number; id: string; -}; +} export type contextType = Pick< WizardProps, diff --git a/src/components/wizard.tsx b/src/components/wizard.tsx index f3f21d6..c007fcb 100644 --- a/src/components/wizard.tsx +++ b/src/components/wizard.tsx @@ -8,6 +8,7 @@ import { useRef, useState, } from "react"; + import { FormFieldProps } from "./form-field/form-field.model"; import { Page } from "./page/page"; import { PageModelProps } from "./page/page.model"; @@ -53,7 +54,7 @@ const Wizard: FunctionComponent = ({ const bodyNode = useRef(null); const [activeIndex, setActiveIndex] = useState(0); - const finalTheme = useRef<{ [key: string]: Object }>( + const finalTheme = useRef>( Object.assign({}, ThemeDefaults, theme) ); @@ -166,7 +167,7 @@ const Wizard: FunctionComponent = ({ const node = bodyNode.current; if (node) { const pages = node.querySelectorAll(".rc-wiz-page"); - const result: { [key: string]: Object } = {}; + const result: Record = {}; pages.forEach((page) => { const title = page.getAttribute("data-title")?.toLowerCase(); diff --git a/src/example-assets/box.tsx b/src/example-assets/box.tsx index e68cb74..ed03c21 100644 --- a/src/example-assets/box.tsx +++ b/src/example-assets/box.tsx @@ -2,14 +2,14 @@ import * as React from "react"; const SvgComponent = () => ( diff --git a/src/example-assets/dollar.tsx b/src/example-assets/dollar.tsx index 0329d8d..f9b04d5 100644 --- a/src/example-assets/dollar.tsx +++ b/src/example-assets/dollar.tsx @@ -2,14 +2,14 @@ import * as React from "react"; const SvgComponent = () => ( diff --git a/src/example-assets/twitter.tsx b/src/example-assets/twitter.tsx index 5911928..055502f 100644 --- a/src/example-assets/twitter.tsx +++ b/src/example-assets/twitter.tsx @@ -2,14 +2,14 @@ import * as React from "react"; const SvgComponent = () => ( diff --git a/src/example-assets/user.tsx b/src/example-assets/user.tsx index 3b994dc..3bcf258 100644 --- a/src/example-assets/user.tsx +++ b/src/example-assets/user.tsx @@ -2,14 +2,14 @@ import * as React from "react" const SvgComponent = () => ( diff --git a/src/icons/alert.tsx b/src/icons/alert.tsx index 0f94458..a3d83b7 100644 --- a/src/icons/alert.tsx +++ b/src/icons/alert.tsx @@ -2,14 +2,14 @@ import * as React from "react"; const SvgComponent = () => ( diff --git a/src/icons/asterisk.tsx b/src/icons/asterisk.tsx index 97033e9..167035e 100644 --- a/src/icons/asterisk.tsx +++ b/src/icons/asterisk.tsx @@ -1,7 +1,7 @@ import * as React from "react"; const SvgComponent = () => ( - + ); diff --git a/src/icons/check.tsx b/src/icons/check.tsx index 2cbf3dc..f3f1420 100644 --- a/src/icons/check.tsx +++ b/src/icons/check.tsx @@ -2,13 +2,13 @@ import * as React from "react"; const SvgComponent = () => ( diff --git a/src/icons/chevron-left.tsx b/src/icons/chevron-left.tsx index cf58ad4..e27ed71 100644 --- a/src/icons/chevron-left.tsx +++ b/src/icons/chevron-left.tsx @@ -2,13 +2,13 @@ import * as React from "react"; const SvgComponent = () => ( diff --git a/src/icons/chevron-right.tsx b/src/icons/chevron-right.tsx index 7b2b89e..bba8dd7 100644 --- a/src/icons/chevron-right.tsx +++ b/src/icons/chevron-right.tsx @@ -2,14 +2,14 @@ import React from "react"; const SvgComponent = () => ( diff --git a/src/icons/circle-check.tsx b/src/icons/circle-check.tsx index 681b742..e2a8adc 100644 --- a/src/icons/circle-check.tsx +++ b/src/icons/circle-check.tsx @@ -1,7 +1,7 @@ import * as React from "react"; const SvgComponent = () => ( - + ); diff --git a/src/icons/exclamation.tsx b/src/icons/exclamation.tsx index 07ab310..9e5b2c8 100644 --- a/src/icons/exclamation.tsx +++ b/src/icons/exclamation.tsx @@ -1,7 +1,7 @@ import * as React from "react"; const SvgComponent = () => ( - + ); diff --git a/src/icons/info.tsx b/src/icons/info.tsx index 9a31fd3..bba8238 100644 --- a/src/icons/info.tsx +++ b/src/icons/info.tsx @@ -2,13 +2,13 @@ import * as React from "react"; const SvgComponent = () => ( diff --git a/src/icons/warning.tsx b/src/icons/warning.tsx index e6ab9ba..af6bb76 100644 --- a/src/icons/warning.tsx +++ b/src/icons/warning.tsx @@ -2,14 +2,14 @@ import * as React from "react"; const SvgComponent = () => ( diff --git a/src/main.tsx b/src/main.tsx index 9b67590..9a877a4 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,5 +1,6 @@ import React from "react"; import ReactDOM from "react-dom/client"; + import App from "./App"; import "./index.css"; From d1a9c3c69fdbbc439ff0643d30cced97efac4267 Mon Sep 17 00:00:00 2001 From: prabhuignoto Date: Fri, 6 Jun 2025 23:42:22 +0530 Subject: [PATCH 2/2] fix: correct JSX syntax in FormFieldInput and update label format in tests --- eslint.config.mjs | 1 - src/components/form-field/form-field-input.tsx | 2 +- src/components/page/__tests__/page.test.tsx | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index b866c8a..804d990 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -7,7 +7,6 @@ import jsxA11yPlugin from 'eslint-plugin-jsx-a11y'; import * as importPlugin from 'eslint-plugin-import'; import securityPlugin from 'eslint-plugin-security'; import sortKeysFixPlugin from 'eslint-plugin-sort-keys-fix'; -import { glob } from 'glob'; export default tseslint.config( // Base ESLint recommended configuration diff --git a/src/components/form-field/form-field-input.tsx b/src/components/form-field/form-field-input.tsx index c2f23af..8ceb67e 100644 --- a/src/components/form-field/form-field-input.tsx +++ b/src/components/form-field/form-field-input.tsx @@ -75,7 +75,7 @@ const FormFieldInput: FunctionComponent = ({ onChange={handleChange} placeholder={placeholder} required={isRequired} - > + /> ); } else if (type === "radio" || type === "checkbox") { return ( diff --git a/src/components/page/__tests__/page.test.tsx b/src/components/page/__tests__/page.test.tsx index 6fd5163..e362e2d 100644 --- a/src/components/page/__tests__/page.test.tsx +++ b/src/components/page/__tests__/page.test.tsx @@ -16,7 +16,7 @@ const fields: FormFieldProps[] = [ { id: "email", isRequired: true, - label: `email`, + label: "email", name: "email", type: "email", },