From f225ab77dec31111154c58c6bfe9af81adbba95d Mon Sep 17 00:00:00 2001 From: Fernanda Toledo Date: Mon, 25 May 2026 17:25:59 -0300 Subject: [PATCH 01/18] chore: replace Prettier with @antfu/eslint-config --- .prettierrc.js | 7 - .vscode/settings.json | 55 +- eslint.config.mjs | 253 +-- jest-setup.ts | 8 +- lint-staged.config.js | 4 - package.json | 37 +- pnpm-lock.yaml | 4237 +++++++++++++++++++++++------------------ 7 files changed, 2540 insertions(+), 2061 deletions(-) delete mode 100644 .prettierrc.js diff --git a/.prettierrc.js b/.prettierrc.js deleted file mode 100644 index cd202582c..000000000 --- a/.prettierrc.js +++ /dev/null @@ -1,7 +0,0 @@ -/** @type {import('prettier').Config} */ -const config = { - singleQuote: true, - endOfLine: 'auto', -}; - -module.exports = config; diff --git a/.vscode/settings.json b/.vscode/settings.json index 1120468a6..3455bd701 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,26 +4,45 @@ "search.exclude": { "yarn.lock": true }, - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": true, + "prettier.enable": false, + "editor.formatOnSave": false, "typescript.tsdk": "node_modules/typescript/lib", - "eslint.format.enable": true, - "[javascript][typescript][typescriptreact]": { - "editor.formatOnSave": true, - "editor.defaultFormatter": "dbaeumer.vscode-eslint", - "editor.codeActionsOnSave": [ - "source.addMissingImports", - "source.fixAll.eslint" - ] - }, - "[json][jsonc]": { - "editor.formatOnSave": true, - "editor.defaultFormatter": "esbenp.prettier-vscode" - }, - "[astro]": { - "editor.formatOnSave": true, - "editor.defaultFormatter": "astro-build.astro-vscode" + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit", + "source.organizeImports": "never" }, + "eslint.rules.customizations": [ + { "rule": "style/*", "severity": "off", "fixable": true }, + { "rule": "format/*", "severity": "off", "fixable": true }, + { "rule": "*-indent", "severity": "off", "fixable": true }, + { "rule": "*-spacing", "severity": "off", "fixable": true }, + { "rule": "*-spaces", "severity": "off", "fixable": true }, + { "rule": "*-order", "severity": "off", "fixable": true }, + { "rule": "*-dangle", "severity": "off", "fixable": true }, + { "rule": "*-newline", "severity": "off", "fixable": true }, + { "rule": "*quotes", "severity": "off", "fixable": true }, + { "rule": "*semi", "severity": "off", "fixable": true } + ], + "eslint.validate": [ + "javascript", + "javascriptreact", + "typescript", + "typescriptreact", + "vue", + "html", + "markdown", + "json", + "jsonc", + "yaml", + "toml", + "xml", + "graphql", + "astro", + "css", + "less", + "scss", + "postcss" + ], "cSpell.words": ["Flashlist", "Lato", "rootstrap"], "i18n-ally.localesPaths": ["src/translations/"], "i18n-ally.keystyle": "nested", diff --git a/eslint.config.mjs b/eslint.config.mjs index b61b744b4..25ebfd324 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,65 +1,54 @@ import path from 'node:path'; import { fileURLToPath } from 'node:url'; -import { defineConfig, globalIgnores } from 'eslint/config'; -import expoConfig from 'eslint-config-expo/flat.js'; +import antfu from '@antfu/eslint-config'; +import expoPlugin from 'eslint-plugin-expo'; import i18nJsonPlugin from 'eslint-plugin-i18n-json'; -import pluginJest from 'eslint-plugin-jest'; -import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'; import reactCompiler from 'eslint-plugin-react-compiler'; -import simpleImportSort from 'eslint-plugin-simple-import-sort'; -import sonarjs from 'eslint-plugin-sonarjs'; import tailwind from 'eslint-plugin-tailwindcss'; import testingLibrary from 'eslint-plugin-testing-library'; -// eslint-disable-next-line import/no-named-as-default, import/no-named-as-default-member, import/namespace -import eslintPluginUnicorn from 'eslint-plugin-unicorn'; -import unusedImports from 'eslint-plugin-unused-imports'; -import { configs, parser } from 'typescript-eslint'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); -export default defineConfig([ - globalIgnores([ - 'dist/*', - 'node_modules', - '__tests__/', - 'coverage', - '.expo', - '.expo-shared', - 'android', - 'ios', - '.vscode', - 'docs/', - 'cli/', - 'expo-env.d.ts', - '*.config.js', - 'lint-staged.config.js', - 'i18next-syntax-validation.js', - 'env.js', - ]), - expoConfig, - eslintPluginPrettierRecommended, - ...tailwind.configs['flat/recommended'], - reactCompiler.configs.recommended, +export default antfu( { - plugins: { - 'simple-import-sort': simpleImportSort, - unicorn: eslintPluginUnicorn, - 'unused-imports': unusedImports, - sonarjs, - jest: pluginJest, + react: true, + typescript: true, + jsonc: false, + markdown: false, + + stylistic: { + indent: 2, + quotes: 'single', + semi: true, }, + + ignores: [ + 'dist/*', + 'node_modules', + '__tests__/', + 'coverage', + '.expo', + '.expo-shared', + 'android', + 'ios', + '.vscode', + 'docs/', + 'cli/', + 'expo-env.d.ts', + '*.config.js', + 'lint-staged.config.js', + 'i18next-syntax-validation.js', + 'env.js', + ], + }, + + // Scoped to JS/TS only — max-lines-per-function crashes on markdown/json parsers if global + { + files: ['**/*.{js,jsx,ts,tsx,mjs,cjs}'], rules: { - 'import/no-duplicates': 'error', 'max-params': ['error', 3], - 'max-lines-per-function': ['error', 70], - 'tailwindcss/classnames-order': [ - 'warn', - { - officialSorting: true, - }, - ], - 'tailwindcss/no-custom-classname': 'off', + 'max-lines-per-function': ['error', 75], 'react/display-name': 'off', 'react/no-inline-styles': 'off', 'react/destructuring-assignment': 'off', @@ -70,76 +59,121 @@ export default defineConfig([ 'no-nested-ternary': 'error', 'no-unneeded-ternary': 'error', 'prefer-template': 'error', + 'curly': [2, 'all'], + 'object-shorthand': 'error', + 'arrow-body-style': ['error', 'as-needed'], + 'no-console': ['error', { allow: ['error'] }], + 'guard-for-in': 'error', + 'import/prefer-default-export': 'off', + 'import/no-cycle': ['error', { maxDepth: '∞' }], + 'unused-imports/no-unused-vars': [ + 'error', + { + args: 'after-used', + argsIgnorePattern: '^_', + varsIgnorePattern: '^_', + caughtErrorsIgnorePattern: '^_', + ignoreRestSiblings: true, + }, + ], 'unicorn/filename-case': [ 'error', { case: 'kebabCase', - ignore: ['/android', '/ios'], + ignore: [ + '/android', + '/ios', + 'README.md', + 'README-project.md', + 'ISSUE_TEMPLATE.md', + 'PULL_REQUEST_TEMPLATE.md', + ], }, ], - 'simple-import-sort/imports': 'error', - 'simple-import-sort/exports': 'error', - 'unused-imports/no-unused-imports': 'error', - 'unused-imports/no-unused-vars': [ - 'error', + // antfu enables these by default; disable to avoid code rewrites beyond formatting + 'node/prefer-global/process': 'off', + 'ts/no-use-before-define': 'off', + 'no-cond-assign': 'off', + 'regexp/no-super-linear-backtracking': 'off', + 'regexp/no-unused-capturing-group': 'off', + 'react-refresh/only-export-components': 'off', + 'react/no-forward-ref': 'off', + 'react-hooks/set-state-in-effect': 'off', + 'react-hooks-extra/no-direct-set-state-in-use-effect': 'off', + 'react-hooks/preserve-manual-memoization': 'off', + 'react-dom/no-dangerously-set-innerhtml': 'off', + 'e18e/prefer-static-regex': 'off', + }, + }, + + // TypeScript-specific rules + { + files: ['**/*.ts', '**/*.tsx'], + rules: { + 'ts/consistent-type-definitions': ['error', 'type'], + 'ts/consistent-type-imports': [ + 'warn', { - argsIgnorePattern: '^_', - varsIgnorePattern: '^_', - caughtErrorsIgnorePattern: '^_', + prefer: 'type-imports', + fixStyle: 'inline-type-imports', + disallowTypeAnnotations: true, }, ], - curly: [2, 'all'], - 'object-shorthand': 'error', - 'arrow-body-style': ['error', 'as-needed'], - 'no-console': ['error', { allow: ['error'] }], - 'guard-for-in': 'error', + 'react-hooks/refs': 'off', + 'ts/no-explicit-any': 'error', + 'ts/no-magic-numbers': [ + 'error', + { ignoreArrayIndexes: true, ignoreEnums: true, ignore: [-1, 0, 1] }, + ], + 'ts/prefer-nullish-coalescing': 'error', + 'ts/array-type': ['error', { default: 'generic' }], + }, + }, - 'import/prefer-default-export': 'off', - 'import/no-cycle': ['error', { maxDepth: '∞' }], - 'prettier/prettier': 'error', + // Must come AFTER the TS block — flat config is last-wins. + // axios.d.ts uses interface for module augmentation which cannot be rewritten as type. + { + files: ['**/*.d.ts'], + rules: { + 'ts/consistent-type-definitions': 'off', }, }, + + // Mocks commonly use require() for dynamic imports { files: ['**/__mocks__/**'], rules: { - '@typescript-eslint/no-require-imports': 'off', + 'ts/no-require-imports': 'off', }, }, + + ...tailwind.configs['flat/recommended'].map((config) => ({ + ...config, + rules: { + ...config.rules, + 'tailwindcss/classnames-order': ['warn', { officialSorting: true }], + 'tailwindcss/no-custom-classname': 'off', + }, + })), + { - files: ['**/*.ts', '**/*.tsx'], - languageOptions: { - parser, - parserOptions: { - project: './tsconfig.json', - sourceType: 'module', - }, - globals: pluginJest.environments.globals.globals, + plugins: { expo: expoPlugin }, + rules: { + 'expo/use-dom-exports': 'error', + 'expo/no-env-var-destructuring': 'error', + 'expo/no-dynamic-env-var': 'error', + }, + }, + + { + plugins: { + 'react-compiler': reactCompiler, }, rules: { - ...configs.recommended.rules, - '@typescript-eslint/no-explicit-any': 'error', - '@typescript-eslint/comma-dangle': 'off', - '@typescript-eslint/no-magic-numbers': [ - 'error', - { ignoreArrayIndexes: true, ignoreEnums: true, ignore: [-1, 0, 1] }, - ], - '@typescript-eslint/prefer-nullish-coalescing': 'error', - '@typescript-eslint/array-type': [ - 'error', - { - default: 'generic', - }, - ], - '@typescript-eslint/consistent-type-imports': [ - 'error', - { - prefer: 'type-imports', - fixStyle: 'inline-type-imports', - disallowTypeAnnotations: true, - }, - ], + 'react-compiler/react-compiler': 'error', }, }, + { files: ['src/translations/*.json'], plugins: { 'i18n-json': i18nJsonPlugin }, @@ -149,7 +183,6 @@ export default defineConfig([ }, rules: { ...i18nJsonPlugin.configs.recommended.rules, - '@typescript-eslint/ban-types': 'off', 'i18n-json/valid-message-syntax': [ 2, { @@ -160,28 +193,18 @@ export default defineConfig([ }, ], 'i18n-json/valid-json': 2, - 'i18n-json/sorted-keys': [ - 2, - { - order: 'asc', - indentSpaces: 2, - }, - ], + 'i18n-json/sorted-keys': [2, { order: 'asc', indentSpaces: 2 }], 'i18n-json/identical-keys': [ 2, - { - filePath: path.resolve(__dirname, './src/translations/en.json'), - }, - ], - 'prettier/prettier': [ - 0, - { - singleQuote: true, - endOfLine: 'auto', - }, + { filePath: path.resolve(__dirname, './src/translations/en.json') }, ], + 'style/semi': 'off', + 'style/comma-dangle': 'off', + 'style/quotes': 'off', + 'unused-imports/no-unused-vars': 'off', }, }, + { files: ['**/__tests__/**/*.[jt]s?(x)', '**/?(*.)+(spec|test).[jt]s?(x)'], plugins: { 'testing-library': testingLibrary }, @@ -189,4 +212,4 @@ export default defineConfig([ ...testingLibrary.configs.react.rules, }, }, -]); +); diff --git a/jest-setup.ts b/jest-setup.ts index 8501c5fce..1eb40533b 100644 --- a/jest-setup.ts +++ b/jest-setup.ts @@ -1,9 +1,9 @@ import '@testing-library/react-native/extend-expect'; // react-hook form setup for testing -// @ts-ignore -global.window = {}; -// @ts-ignore -global.window = global; +// @ts-expect-error - window is not defined in React Native test environment +globalThis.window = {}; +// @ts-expect-error - window needs to reference globalThis for react-hook-form compatibility +globalThis.window = globalThis; jest.mock('react-native-mmkv'); diff --git a/lint-staged.config.js b/lint-staged.config.js index 196ef19a4..cc9b7420a 100644 --- a/lint-staged.config.js +++ b/lint-staged.config.js @@ -4,10 +4,6 @@ module.exports = { .map((filename) => `"${filename}"`) .join(' ')}`, ], - '**/*.(md|json)': (filenames) => - `npx prettier --write ${filenames - .map((filename) => `"${filename}"`) - .join(' ')}`, 'src/translations/*.(json)': (filenames) => [ `npx eslint --fix ${filenames .map((filename) => `"${filename}"`) diff --git a/package.json b/package.json index 0288be2c8..31af2a7fe 100644 --- a/package.json +++ b/package.json @@ -50,9 +50,10 @@ "preinstall": "npx only-allow pnpm", "app-release": "cross-env SKIP_BRANCH_PROTECTION=true np --no-publish --no-cleanup --no-release-draft --message 'chore: release template v%s'", "version": "git add package.json", - "lint": "eslint . --ext .js,.jsx,.ts,.tsx", - "type-check": "tsc --noemit", - "lint:translations": "eslint ./src/translations/ --fix --ext .json ", + "lint": "eslint .", + "lint:fix": "eslint . --fix", + "type-check": "tsc --noemit", + "lint:translations": "eslint ./src/translations/ --fix", "test": "jest", "check-all": "pnpm run lint && pnpm run type-check && pnpm run lint:translations && pnpm run test", "test:ci": "pnpm run test --coverage", @@ -119,8 +120,8 @@ "@commitlint/cli": "^19.2.2", "@commitlint/config-conventional": "^19.2.2", "@dev-plugins/react-query": "^0.0.7", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "^9.28.0", + "@antfu/eslint-config": "^7.2.0", + "@eslint-react/eslint-plugin": "^2.7.2", "@expo/config": "~12.0.13", "@tanstack/eslint-plugin-query": "^5.62.1", "@testing-library/jest-dom": "^6.5.0", @@ -130,27 +131,17 @@ "@types/jest": "^29.5.14", "@types/lodash.memoize": "^4.1.9", "@types/react": "~19.1.17", - "@typescript-eslint/eslint-plugin": "^8.34.0", - "@typescript-eslint/parser": "^8.34.0", "babel-plugin-module-resolver": "^5.0.2", "cross-env": "^7.0.3", "dotenv": "^16.4.5", - "eslint": "^9.28.0", - "eslint-config-expo": "^9.2.0", - "eslint-config-prettier": "^10.1.5", - "eslint-import-resolver-typescript": "^4.4.3", + "eslint": "^9.39.2", + "eslint-plugin-expo": "^1.0.2", "eslint-plugin-i18n-json": "^4.0.1", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jest": "^28.8.3", - "eslint-plugin-prettier": "^5.4.1", - "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-compiler": "19.1.0-rc.2", - "eslint-plugin-simple-import-sort": "^12.1.1", - "eslint-plugin-sonarjs": "^1.0.4", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.4.26", "eslint-plugin-tailwindcss": "^3.18.0", "eslint-plugin-testing-library": "^7.5.2", - "eslint-plugin-unicorn": "^59.0.1", - "eslint-plugin-unused-imports": "^4.1.4", "husky": "^9.1.5", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", @@ -158,11 +149,9 @@ "jest-junit": "^16.0.0", "lint-staged": "^15.2.9", "np": "^10.0.7", - "prettier": "^3.3.3", "tailwindcss": "3.4.4", "ts-jest": "^29.1.2", - "typescript": "^5.9.3", - "typescript-eslint": "^8.34.0" + "typescript": "^5.9.3" }, "repository": { "type": "git", @@ -179,9 +168,7 @@ } }, "install": { - "exclude": [ - "eslint-config-expo" - ] + "exclude": [] } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 34e9940e1..2d252af98 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -165,6 +165,9 @@ importers: specifier: ^5.0.5 version: 5.0.8(@types/react@19.1.17)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0)) devDependencies: + '@antfu/eslint-config': + specifier: ^7.2.0 + version: 7.7.3(@eslint-react/eslint-plugin@2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(@typescript-eslint/rule-tester@8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.60.0(typescript@5.9.3))(@typescript-eslint/utils@8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(@vue/compiler-sfc@3.5.34)(eslint-plugin-react-hooks@7.1.1(eslint@9.39.4(jiti@1.21.6)))(eslint-plugin-react-refresh@0.4.26(eslint@9.39.4(jiti@1.21.6)))(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) '@babel/core': specifier: ^7.26.0 version: 7.28.4 @@ -177,18 +180,15 @@ importers: '@dev-plugins/react-query': specifier: ^0.0.7 version: 0.0.7(@tanstack/react-query@5.52.1(react@19.1.0))(expo@54.0.32) - '@eslint/eslintrc': - specifier: ^3.3.1 - version: 3.3.1 - '@eslint/js': - specifier: ^9.28.0 - version: 9.35.0 + '@eslint-react/eslint-plugin': + specifier: ^2.7.2 + version: 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) '@expo/config': specifier: ~12.0.13 version: 12.0.13 '@tanstack/eslint-plugin-query': specifier: ^5.62.1 - version: 5.89.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) + version: 5.89.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) '@testing-library/jest-dom': specifier: ^6.5.0 version: 6.5.0 @@ -210,12 +210,6 @@ importers: '@types/react': specifier: ~19.1.17 version: 19.1.17 - '@typescript-eslint/eslint-plugin': - specifier: ^8.34.0 - version: 8.44.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) - '@typescript-eslint/parser': - specifier: ^8.34.0 - version: 8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) babel-plugin-module-resolver: specifier: ^5.0.2 version: 5.0.2 @@ -226,53 +220,29 @@ importers: specifier: ^16.4.5 version: 16.4.5 eslint: - specifier: ^9.28.0 - version: 9.35.0(jiti@1.21.6) - eslint-config-expo: - specifier: ^9.2.0 - version: 9.2.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) - eslint-config-prettier: - specifier: ^10.1.5 - version: 10.1.8(eslint@9.35.0(jiti@1.21.6)) - eslint-import-resolver-typescript: - specifier: ^4.4.3 - version: 4.4.4(eslint-plugin-import@2.31.0)(eslint@9.35.0(jiti@1.21.6)) + specifier: ^9.39.2 + version: 9.39.4(jiti@1.21.6) + eslint-plugin-expo: + specifier: ^1.0.2 + version: 1.0.3(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) eslint-plugin-i18n-json: specifier: ^4.0.1 - version: 4.0.1(eslint@9.35.0(jiti@1.21.6)) - eslint-plugin-import: - specifier: ^2.31.0 - version: 2.31.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.35.0(jiti@1.21.6)) - eslint-plugin-jest: - specifier: ^28.8.3 - version: 28.14.0(@typescript-eslint/eslint-plugin@8.44.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint@9.35.0(jiti@1.21.6))(jest@29.7.0(@types/node@22.9.1))(typescript@5.9.3) - eslint-plugin-prettier: - specifier: ^5.4.1 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.35.0(jiti@1.21.6)))(eslint@9.35.0(jiti@1.21.6))(prettier@3.3.3) - eslint-plugin-react: - specifier: ^7.37.5 - version: 7.37.5(eslint@9.35.0(jiti@1.21.6)) + version: 4.0.1(eslint@9.39.4(jiti@1.21.6)) eslint-plugin-react-compiler: specifier: 19.1.0-rc.2 - version: 19.1.0-rc.2(eslint@9.35.0(jiti@1.21.6)) - eslint-plugin-simple-import-sort: - specifier: ^12.1.1 - version: 12.1.1(eslint@9.35.0(jiti@1.21.6)) - eslint-plugin-sonarjs: - specifier: ^1.0.4 - version: 1.0.4(eslint@9.35.0(jiti@1.21.6)) + version: 19.1.0-rc.2(eslint@9.39.4(jiti@1.21.6)) + eslint-plugin-react-hooks: + specifier: ^7.0.1 + version: 7.1.1(eslint@9.39.4(jiti@1.21.6)) + eslint-plugin-react-refresh: + specifier: ^0.4.26 + version: 0.4.26(eslint@9.39.4(jiti@1.21.6)) eslint-plugin-tailwindcss: specifier: ^3.18.0 version: 3.18.2(tailwindcss@3.4.4) eslint-plugin-testing-library: specifier: ^7.5.2 - version: 7.8.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) - eslint-plugin-unicorn: - specifier: ^59.0.1 - version: 59.0.1(eslint@9.35.0(jiti@1.21.6)) - eslint-plugin-unused-imports: - specifier: ^4.1.4 - version: 4.2.0(@typescript-eslint/eslint-plugin@8.44.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint@9.35.0(jiti@1.21.6)) + version: 7.8.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) husky: specifier: ^9.1.5 version: 9.1.5 @@ -294,9 +264,6 @@ importers: np: specifier: ^10.0.7 version: 10.0.7(typescript@5.9.3) - prettier: - specifier: ^3.3.3 - version: 3.3.3 tailwindcss: specifier: 3.4.4 version: 3.4.4 @@ -306,9 +273,6 @@ importers: typescript: specifier: ^5.9.3 version: 5.9.3 - typescript-eslint: - specifier: ^8.34.0 - version: 8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) packages: @@ -327,6 +291,73 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} + '@antfu/eslint-config@7.7.3': + resolution: {integrity: sha512-BtroDxTvmWtvr3yJkdWVCvwsKlnEdkreoeOyrdNezc/W5qaiQNf2xjcsQ3N5Yy0x27h+0WFfW8rG8YlVioG6dw==} + hasBin: true + peerDependencies: + '@angular-eslint/eslint-plugin': ^21.1.0 + '@angular-eslint/eslint-plugin-template': ^21.1.0 + '@angular-eslint/template-parser': ^21.1.0 + '@eslint-react/eslint-plugin': ^2.11.0 + '@next/eslint-plugin-next': '>=15.0.0' + '@prettier/plugin-xml': ^3.4.1 + '@unocss/eslint-plugin': '>=0.50.0' + astro-eslint-parser: ^1.0.2 + eslint: ^9.10.0 || ^10.0.0 + eslint-plugin-astro: ^1.2.0 + eslint-plugin-format: '>=0.1.0' + eslint-plugin-jsx-a11y: '>=6.10.2' + eslint-plugin-react-hooks: ^7.0.0 + eslint-plugin-react-refresh: ^0.5.0 + eslint-plugin-solid: ^0.14.3 + eslint-plugin-svelte: '>=2.35.1' + eslint-plugin-vuejs-accessibility: ^2.4.1 + prettier-plugin-astro: ^0.14.0 + prettier-plugin-slidev: ^1.0.5 + svelte-eslint-parser: '>=0.37.0' + peerDependenciesMeta: + '@angular-eslint/eslint-plugin': + optional: true + '@angular-eslint/eslint-plugin-template': + optional: true + '@angular-eslint/template-parser': + optional: true + '@eslint-react/eslint-plugin': + optional: true + '@next/eslint-plugin-next': + optional: true + '@prettier/plugin-xml': + optional: true + '@unocss/eslint-plugin': + optional: true + astro-eslint-parser: + optional: true + eslint-plugin-astro: + optional: true + eslint-plugin-format: + optional: true + eslint-plugin-jsx-a11y: + optional: true + eslint-plugin-react-hooks: + optional: true + eslint-plugin-react-refresh: + optional: true + eslint-plugin-solid: + optional: true + eslint-plugin-svelte: + optional: true + eslint-plugin-vuejs-accessibility: + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-slidev: + optional: true + svelte-eslint-parser: + optional: true + + '@antfu/install-pkg@1.1.0': + resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} + '@babel/code-frame@7.10.4': resolution: {integrity: sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==} @@ -425,10 +456,18 @@ packages: resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.27.1': resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.27.1': resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} @@ -450,6 +489,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-proposal-decorators@7.28.0': resolution: {integrity: sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==} engines: {node: '>=6.9.0'} @@ -857,9 +901,21 @@ packages: resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} engines: {node: '>=6.9.0'} + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@clack/core@1.3.1': + resolution: {integrity: sha512-fT1qHVGAag4IEkrupZ6lRRbNCs1vS9P01KB/sG8zKgvUztbYtFBtQpjSITNwooDZ83tpsPzP0mRNs1/KVszCRA==} + engines: {node: '>= 20.12.0'} + + '@clack/prompts@1.4.0': + resolution: {integrity: sha512-S0My7XPGIgpRWMDG8uRqalbgT+a6FmCUdOW+HaIOVVpUPHOb7RrpvjTjiODadKp06fsrVDJZlIzc6yCTp4AnxA==} + engines: {node: '>= 20.12.0'} + '@commitlint/cli@19.2.2': resolution: {integrity: sha512-P8cbOHfg2PQRzfICLSrzUVOCVMqjEZ8Hlth6mtJ4yOEjT47Q5PbIGymgX3rLVylNw+3IAT2Djn9IJ2wHbXFzBg==} engines: {node: '>=v18'} @@ -935,71 +991,161 @@ packages: '@tanstack/react-query': '*' expo: '*' + '@e18e/eslint-plugin@0.2.0': + resolution: {integrity: sha512-mXgODVwhuDjTJ+UT+XSvmMmCidtGKfrV5nMIv1UtpWex2pYLsIM3RSpT8HWIMAebS9qANbXPKlSX4BE7ZvuCgA==} + peerDependencies: + eslint: ^9.0.0 || ^10.0.0 + oxlint: ^1.41.0 + peerDependenciesMeta: + eslint: + optional: true + oxlint: + optional: true + '@egjs/hammerjs@2.0.17': resolution: {integrity: sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==} engines: {node: '>=0.8.0'} - '@emnapi/core@1.5.0': - resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} - - '@emnapi/runtime@1.5.0': - resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} - - '@emnapi/wasi-threads@1.1.0': - resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} - '@emotion/is-prop-valid@0.8.8': resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} '@emotion/memoize@0.7.4': resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} + '@es-joy/jsdoccomment@0.84.0': + resolution: {integrity: sha512-0xew1CxOam0gV5OMjh2KjFQZsKL2bByX1+q4j3E73MpYIdyUxcZb/xQct9ccUb+ve5KGUYbCUxyPnYB7RbuP+w==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@es-joy/jsdoccomment@0.86.0': + resolution: {integrity: sha512-ukZmRQ81WiTpDWO6D/cTBM7XbrNtutHKvAVnZN/8pldAwLoJArGOvkNyxPTBGsPjsoaQBJxlH+tE2TNA/92Qgw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@es-joy/resolve.exports@1.2.0': + resolution: {integrity: sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==} + engines: {node: '>=10'} + + '@eslint-community/eslint-plugin-eslint-comments@4.7.1': + resolution: {integrity: sha512-Ql2nJFwA8wUGpILYGOQaT1glPsmvEwE0d+a+l7AALLzQvInqdbXJdx7aSu0DpUX9dB1wMVBMhm99/++S3MdEtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 + '@eslint-community/eslint-utils@4.9.0': resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/regexpp@4.12.1': resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.21.0': - resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint-react/ast@2.13.0': + resolution: {integrity: sha512-43+5gmqV3MpatTzKnu/V2i/jXjmepvwhrb9MaGQvnXHQgq9J7/C7VVCCcwp6Rvp2QHAFquAAdvQDSL8IueTpeA==} + engines: {node: '>=20.19.0'} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@eslint-react/core@2.13.0': + resolution: {integrity: sha512-m62XDzkf1hpzW4sBc7uh7CT+8rBG2xz/itSADuEntlsg4YA7Jhb8hjU6VHf3wRFDwyfx5VnbV209sbJ7Azey0Q==} + engines: {node: '>=20.19.0'} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@eslint-react/eff@2.13.0': + resolution: {integrity: sha512-rEH2R8FQnUAblUW+v3ZHDU1wEhatbL1+U2B1WVuBXwSKqzF7BGaLqCPIU7o9vofumz5MerVfaCtJgI8jYe2Btg==} + engines: {node: '>=20.19.0'} + + '@eslint-react/eslint-plugin@2.13.0': + resolution: {integrity: sha512-iaMXpqnJCTW7317hg8L4wx7u5aIiPzZ+d1p59X8wXFgMHzFX4hNu4IfV8oygyjmWKdLsjKE9sEpv/UYWczlb+A==} + engines: {node: '>=20.19.0'} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@eslint-react/shared@2.13.0': + resolution: {integrity: sha512-IOloCqrZ7gGBT4lFf9+0/wn7TfzU7JBRjYwTSyb9SDngsbeRrtW95ZpgUpS8/jen1wUEm6F08duAooTZ2FtsWA==} + engines: {node: '>=20.19.0'} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@eslint-react/var@2.13.0': + resolution: {integrity: sha512-dM+QaeiHR16qPQoJYg205MkdHYSWVa2B7ore5OFpOPlSwqDV3tLW7I+475WjbK7potq5QNPTxRa7VLp9FGeQqA==} + engines: {node: '>=20.19.0'} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@eslint/compat@2.1.0': + resolution: {integrity: sha512-LgaSCymEpw7tF53xvDw9SNsraPb1IBHxpdABIOM0hW8UAlP8znrjYtuxfR58FSJ3L9BhwD+FaPRFQpZq84Nh6g==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + peerDependencies: + eslint: ^8.40 || 9 || 10 + peerDependenciesMeta: + eslint: + optional: true - '@eslint/config-helpers@0.3.1': - resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==} + '@eslint/config-array@0.21.2': + resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.13.0': - resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.15.2': - resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} + '@eslint/config-helpers@0.5.5': + resolution: {integrity: sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.3.1': - resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + '@eslint/core@1.2.1': + resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/eslintrc@3.3.5': + resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.35.0': - resolution: {integrity: sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw==} + '@eslint/js@9.39.4': + resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/object-schema@2.1.6': - resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + '@eslint/markdown@7.5.1': + resolution: {integrity: sha512-R8uZemG9dKTbru/DQRPblbJyXpObwKzo8rv1KYGGuPUPtjM4LXBYM9q5CIZAComzZupws3tWbDwam5AFpPLyJQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.2.8': - resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.3.5': - resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/plugin-kit@0.6.1': + resolution: {integrity: sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/plugin-kit@0.7.1': + resolution: {integrity: sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@expo/cli@54.0.22': resolution: {integrity: sha512-BTH2FCczhJLfj1cpfcKrzhKnvRLTOztgW4bVloKDqH+G3ZSohWLRFNAIz56XtdjPxBbi2/qWhGBAkl7kBon/Jw==} hasBin: true @@ -1464,6 +1610,9 @@ packages: '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -1495,9 +1644,6 @@ packages: '@motionone/utils@10.18.0': resolution: {integrity: sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw==} - '@napi-rs/wasm-runtime@0.2.12': - resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1510,9 +1656,9 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nolyfill/is-core-module@1.0.39': - resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} - engines: {node: '>=12.4.0'} + '@ota-meshi/ast-token-store@0.3.0': + resolution: {integrity: sha512-XRO0zi2NIUKq2lUk3T1ecFSld1fMWRKE6naRFGkgkdeosx7IslyUKNv5Dcb5PJTja9tHJoFu0v/7yEpAkrkrTg==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} @@ -1871,9 +2017,6 @@ packages: '@react-navigation/routers@7.5.1': resolution: {integrity: sha512-pxipMW/iEBSUrjxz2cDD7fNwkqR4xoi0E/PcfTQGCcdJwLoaxzab5kSadBLj1MTJyT0YRrOXL9umHpXtp+Dv4w==} - '@rtsao/scc@1.1.0': - resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@samverschueren/stream-to-observable@0.3.1': resolution: {integrity: sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==} engines: {node: '>=6'} @@ -1896,12 +2039,22 @@ packages: '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + '@sindresorhus/base62@1.0.0': + resolution: {integrity: sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==} + engines: {node: '>=18'} + '@sinonjs/commons@3.0.1': resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + '@stylistic/eslint-plugin@5.10.0': + resolution: {integrity: sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^9.0.0 || ^10.0.0 + '@tanstack/eslint-plugin-query@5.89.0': resolution: {integrity: sha512-vz8TEuw9GO0xXIdreMpcofvOY17T3cjgob9bSFln8yQsKsbsUvtpvV3F8pVC3tZEDq0IwO++3/e0/+7YKEarNA==} peerDependencies: @@ -1937,6 +2090,7 @@ packages: '@testing-library/react-native@12.7.2': resolution: {integrity: sha512-fSUIruOUFcuwssC8+m9H+9ib7P/+JrtIszHS4eZ6O9e4FjpjS3m24UnkJXTRl+FCbknz8oxH5Tw+thzy0qsIMg==} + deprecated: React Native Testing Library v12 is no longer maintained. Please upgrade to v13 or v14. peerDependencies: jest: '>=28.0.0' react: '>=16.8.0' @@ -1953,9 +2107,6 @@ packages: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} - '@tybys/wasm-util@0.10.1': - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} - '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -1971,12 +2122,15 @@ packages: '@types/conventional-commits-parser@5.0.0': resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==} - '@types/eslint@9.6.1': - resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} @@ -2007,15 +2161,18 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/lodash.memoize@4.1.9': resolution: {integrity: sha512-glY1nQuoqX4Ft8Uk+KfJudOD7DQbbEDF6k9XpGncaohW3RW4eSWBlx6AA0fZCrh40tZcQNH4jS/Oc59J6Eq+aw==} '@types/lodash@4.17.13': resolution: {integrity: sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==} + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/node@16.9.1': resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==} @@ -2034,26 +2191,29 @@ packages: '@types/tough-cookie@4.0.5': resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} '@types/yargs@17.0.33': resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - '@typescript-eslint/eslint-plugin@8.44.0': - resolution: {integrity: sha512-EGDAOGX+uwwekcS0iyxVDmRV9HX6FLSM5kzrAToLTsr9OWCIKG/y3lQheCq18yZ5Xh78rRKJiEpP0ZaCs4ryOQ==} + '@typescript-eslint/eslint-plugin@8.60.0': + resolution: {integrity: sha512-QYb/sa74/s7OKMbACMjrYnGspj9Hs5YI5aaffSL65UfeBUzVzBJfVo3oWSpbzPurvm7yaCCo2Lk7lVj610HqKw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.44.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/parser': ^8.60.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.44.0': - resolution: {integrity: sha512-VGMpFQGUQWYT9LfnPcX8ouFojyrZ/2w3K5BucvxL/spdNehccKhB4jUyB1yBCXpr2XFm0jkECxgrpXBW2ipoAw==} + '@typescript-eslint/parser@8.60.0': + resolution: {integrity: sha512-fcqpj/MyK4sxDPcbe7STNPbpQL4RLZOPWuaTmwZYuc+hJKzRf58yRxfhqGpc6PIq9ZyfSBpfHgmUHmHs0KwHwg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' '@typescript-eslint/project-service@8.44.0': resolution: {integrity: sha512-ZeaGNraRsq10GuEohKTo4295Z/SuGcSq2LzfGlqiuEvfArzo/VRrT0ZaJsVPuKZ55lVbNk8U6FcL+ZMH8CoyVA==} @@ -2061,33 +2221,66 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/project-service@8.60.0': + resolution: {integrity: sha512-aZu74NNKJeUWqCjDddzdiKaS82dgYgV/vmf+Ui3ZdZejmgfXR/q+pRumgobnQ2cCJTgGTWp4ypiwsuofFubavg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/rule-tester@8.60.0': + resolution: {integrity: sha512-lQct+GlpO4JKKxZbo+ZTWjnxA2BqSoOWmJYvQxezuJGGpl6Lk2XTd2odVP/7lAJUQaw3Qip+qo/1gsAda4jGlA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/scope-manager@8.44.0': resolution: {integrity: sha512-87Jv3E+al8wpD+rIdVJm/ItDBe/Im09zXIjFoipOjr5gHUhJmTzfFLuTJ/nPTMc2Srsroy4IBXwcTCHyRR7KzA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.60.0': + resolution: {integrity: sha512-pFzqhllJMs+jghLQWzV00ds39xLzuyqPSev5pd8f4Ir0rtKR3ZLUB4/4dhjOFighWb9larvtfJvqL+4yKDI3Xw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/tsconfig-utils@8.44.0': resolution: {integrity: sha512-x5Y0+AuEPqAInc6yd0n5DAcvtoQ/vyaGwuX5HE9n6qAefk1GaedqrLQF8kQGylLUb9pnZyLf+iEiL9fr8APDtQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.44.0': - resolution: {integrity: sha512-9cwsoSxJ8Sak67Be/hD2RNt/fsqmWnNE1iHohG8lxqLSNY8xNfyY7wloo5zpW3Nu9hxVgURevqfcH6vvKCt6yg==} + '@typescript-eslint/tsconfig-utils@8.60.0': + resolution: {integrity: sha512-BZPR3RGYlAXnly6ymAxfkVn5rCbZzQNou0rxv3GfWZ8cTQp+hhVd73khbGLAd8k1TlAPLISH337M+tAgAnaJDQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/type-utils@8.60.0': + resolution: {integrity: sha512-SX46wEUtitCpq7AN38HkUU/+zvUpdKf7ephtWAFgckH8O7PQIyL5gvrhQgBLuEYgLfuKWOVvWVskMbuFHAz5xg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' '@typescript-eslint/types@8.44.0': resolution: {integrity: sha512-ZSl2efn44VsYM0MfDQe68RKzBz75NPgLQXuGypmym6QVOWL5kegTZuZ02xRAT9T+onqvM6T8CdQk0OwYMB6ZvA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.60.0': + resolution: {integrity: sha512-AsE7x2XaAK+CVbeih0Fvbn+r1qHxtpLDJ3XUuFcIinT318T90yHMJC+Zgv+jUuDjQQd06HKwxnDu6sz1IcTilA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.44.0': resolution: {integrity: sha512-lqNj6SgnGcQZwL4/SBJ3xdPEfcBuhCG8zdcwCPgYcmiPLgokiNDKlbPzCwEwu7m279J/lBYWtDYL+87OEfn8Jw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/typescript-estree@8.60.0': + resolution: {integrity: sha512-3AcZNBGMClm6CXDyo8kYvVGT/sx29sS0oBsIb9oZI2gunA4Vm2M3YHzRLPvsUBBsl+yB5FPtltq7gGH0iTlp9g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/utils@8.44.0': resolution: {integrity: sha512-nktOlVcg3ALo0mYlV+L7sWUD58KG4CMj1rb2HUVOO4aL3K/6wcD+NERqd0rrA5Vg06b42YhF6cFxeixsp9Riqg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2095,107 +2288,24 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@8.60.0': + resolution: {integrity: sha512-HtXuPfrHTyBDkameWpl+vJb1Uevu2tznAyahM1Oc4AENidCLTPiZDWIo4GfcxNdC/RcfGcadzzkqbRG87dUrQA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/visitor-keys@8.44.0': resolution: {integrity: sha512-zaz9u8EJ4GBmnehlrpoKvj/E3dNbuQ7q0ucyZImm3cLqJ8INTc970B1qEqDX/Rzq65r3TvVTN7kHWPBoyW7DWw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.60.0': + resolution: {integrity: sha512-9WI52t8ZGLVGrPMBet25yAftqY/n95+zmoUUtJBBQTKDSKUu7OsPTroT2op7U9JatkoRccL0YkWDNMFfC4Sjxg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - - '@unrs/resolver-binding-android-arm-eabi@1.11.1': - resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} - cpu: [arm] - os: [android] - - '@unrs/resolver-binding-android-arm64@1.11.1': - resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} - cpu: [arm64] - os: [android] - - '@unrs/resolver-binding-darwin-arm64@1.11.1': - resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} - cpu: [arm64] - os: [darwin] - - '@unrs/resolver-binding-darwin-x64@1.11.1': - resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} - cpu: [x64] - os: [darwin] - - '@unrs/resolver-binding-freebsd-x64@1.11.1': - resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} - cpu: [x64] - os: [freebsd] - - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': - resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} - cpu: [arm] - os: [linux] - - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': - resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} - cpu: [arm] - os: [linux] - - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': - resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} - cpu: [arm64] - os: [linux] - - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': - resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} - cpu: [arm64] - os: [linux] - - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': - resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} - cpu: [ppc64] - os: [linux] - - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': - resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} - cpu: [riscv64] - os: [linux] - - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': - resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} - cpu: [riscv64] - os: [linux] - - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': - resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} - cpu: [s390x] - os: [linux] - - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': - resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} - cpu: [x64] - os: [linux] - - '@unrs/resolver-binding-linux-x64-musl@1.11.1': - resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} - cpu: [x64] - os: [linux] - - '@unrs/resolver-binding-wasm32-wasi@1.11.1': - resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': - resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} - cpu: [arm64] - os: [win32] - - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': - resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} - cpu: [ia32] - os: [win32] - - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': - resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} - cpu: [x64] - os: [win32] + deprecated: Potential CWE-502 - Update to 1.3.1 or higher '@urql/core@5.0.8': resolution: {integrity: sha512-1GOnUw7/a9bzkcM0+U8U5MmxW2A7FE5YquuEmcJzTtW5tIs2EoS4F2ITpuKBjRBbyRjZgO860nWFPo1m4JImGA==} @@ -2205,9 +2315,41 @@ packages: peerDependencies: '@urql/core': ^5.0.0 + '@vitest/eslint-plugin@1.6.18': + resolution: {integrity: sha512-J6U4X0jH3NwTuYouvrJn6I8ypTOU+GhKEjyVwpoPnDuc23usa/xi/R0caWLBbNp3xLy3/rL1YkuJuneTMVV4Mg==} + engines: {node: '>=18'} + peerDependencies: + '@typescript-eslint/eslint-plugin': '*' + eslint: '>=8.57.0' + typescript: '>=5.0.0' + vitest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + typescript: + optional: true + vitest: + optional: true + + '@vue/compiler-core@3.5.34': + resolution: {integrity: sha512-s9cLyK5mLcvZ4Agva5QgRsQyLKvts9WbU9DB6NqiZkkGEdwmcEiylj5Jbwkp680drF/NNCV8OlAJSe+yMLxaJw==} + + '@vue/compiler-dom@3.5.34': + resolution: {integrity: sha512-EbF/T++k0e2MMZlJsBhzK8Sgwt0HcIPOhzn1CTB/lv6sQcyk+OWf8YeiLxZp3ro7MbbLcAfAJ6sEvjFWuNgUCw==} + + '@vue/compiler-sfc@3.5.34': + resolution: {integrity: sha512-D/ihr6uZeIt6r+pVZf46RWT1fAsLFMbUP7k8G1VkiiWexriED9GrX3echHd4Abbt17zjlfiFJ8z7a3BxZOPNjg==} + + '@vue/compiler-ssr@3.5.34': + resolution: {integrity: sha512-cDtTHKibkThKGHH1SP+WdccquNRYQDFH6rRjQCqT9G2ltFAfoR5pUftpab/z+aM5mW9HLLVQW7hfKKQe/1GBeQ==} + + '@vue/shared@3.5.34': + resolution: {integrity: sha512-24uqU4OIiX29ryC3MeWid/Xf2fa2EFRUVLb77nRhk+UrTVrh/XiGtFAFmJBAtBRbjwNdsPRP+jj/OL27Eg1NDA==} + '@xmldom/xmldom@0.8.10': resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} engines: {node: '>=10.0.0'} + deprecated: this version has critical issues, please update to the latest version JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} @@ -2247,6 +2389,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} + hasBin: true + agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -2259,8 +2406,8 @@ packages: resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} engines: {node: '>=12'} - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} @@ -2331,6 +2478,10 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} + ansis@4.3.0: + resolution: {integrity: sha512-44mvgtPvohuU/70DdY5Oz2AIrLJ9k6/5x4KmoSvPwO+5Moijo0+N9D0fKbbYZQWP1hNm5CpOf+E01jhxG/r8xg==} + engines: {node: '>=14'} + any-base@1.1.0: resolution: {integrity: sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==} @@ -2357,6 +2508,10 @@ packages: resolution: {integrity: sha512-k9IEyaRFWEBjuazjgJIf6DnypoXppdxn0olkCQvts83VBehg1vm3IIp6HJpGpfDsUgymNJkYd7r8Q4pDfO6cpw==} hasBin: true + are-docs-informative@0.0.2: + resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} + engines: {node: '>=14'} + arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -2374,44 +2529,12 @@ packages: resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} - array-ify@1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} - array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} - array-timsort@1.0.3: resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} - array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} - - array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} - engines: {node: '>= 0.4'} - - array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.3: - resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} - engines: {node: '>= 0.4'} - - array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} - asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} @@ -2424,10 +2547,6 @@ packages: atomically@2.0.3: resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==} - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - axios@1.7.5: resolution: {integrity: sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==} @@ -2501,9 +2620,18 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + baseline-browser-mapping@2.10.32: + resolution: {integrity: sha512-wbPvpyjJPC0zdfdKXxqEL3Ea+bOMD/87X4lftiJkkaBiuG6ALQy1SLmEd7BSmVCuwCQsBrCamgBoLyfFDD1EPg==} + engines: {node: '>=6.0.0'} + hasBin: true + baseline-browser-mapping@2.8.4: resolution: {integrity: sha512-L+YvJwGAgwJBV1p6ffpSTa2KRc69EeeYGYjRVWKs0GKrK+LON0GC0gV+rKSNtALEDvMDqkvCFq9r1r94/Gjwxw==} hasBin: true @@ -2520,6 +2648,9 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + birecord@0.1.1: + resolution: {integrity: sha512-VUpsf/qykW0heRlC8LooCq28Kxn3mAqKohhDG/49rrsQ1dT1CXyj/pgXS+5BSRzFTR/3DyIBOqQOrGyZOh71Aw==} + bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -2550,6 +2681,10 @@ packages: brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@5.0.6: + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} + engines: {node: 18 || 20 || >=22} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -2564,6 +2699,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} @@ -2593,17 +2733,9 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} - - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} + cac@7.0.0: + resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} + engines: {node: '>=20.19.0'} callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} @@ -2631,6 +2763,12 @@ packages: caniuse-lite@1.0.30001743: resolution: {integrity: sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==} + caniuse-lite@1.0.30001793: + resolution: {integrity: sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + centra@2.7.0: resolution: {integrity: sha512-PbFMgMSrmgx6uxCdm57RUos9Tc3fclMvhLSATYN39XsDV29B89zZ3KA89jmY0vwSGazyU+uerqwa6t+KaodPcg==} @@ -2658,6 +2796,9 @@ packages: resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + change-case@5.4.4: + resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} + char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} @@ -2666,6 +2807,9 @@ packages: resolution: {integrity: sha512-cbGOjAptfM2LVmWhwRFHEKTPkLwNddVmuqYZQt895yXwAsWsXObCG+YN4DGQ/JBtT4GP1a1lPPdio2z413LmTg==} engines: {node: '>=12.20'} + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} @@ -2692,8 +2836,8 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - ci-info@4.3.0: - resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==} + ci-info@4.4.0: + resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} engines: {node: '>=8'} cjs-module-lexer@1.4.1: @@ -2818,9 +2962,24 @@ packages: resolution: {integrity: sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==} engines: {node: '>= 6'} + comment-parser@1.4.5: + resolution: {integrity: sha512-aRDkn3uyIlCFfk5NUA+VdwMmMsh8JGhc4hapfV4yxymHGQ3BVskMQfoXGpCo5IoBuQ9tS5iiVKhCpTcB4pW4qw==} + engines: {node: '>= 12.0.0'} + + comment-parser@1.4.6: + resolution: {integrity: sha512-ObxuY6vnbWTN6Od72xfwN9DbzC7Y2vv8u1Soi9ahRKL37gb6y1qk6/dgjs+3JWuXJHWvsg3BXIwzd/rkmAwavg==} + engines: {node: '>= 12.0.0'} + + comment-parser@1.4.7: + resolution: {integrity: sha512-0h+uSNtQGW3D98eQt3jJ8L06Fves8hncB4V/PKdw/Qb8Hnk19VaKuTr55UNRYiSoVa7WwrFls+rh3ux9agmkeQ==} + engines: {node: '>= 12.0.0'} + compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + compare-versions@6.1.1: + resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} + compressible@2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} @@ -2832,6 +2991,12 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.4: + resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} + config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -2862,6 +3027,9 @@ packages: core-js-compat@3.43.0: resolution: {integrity: sha512-2GML2ZsCc5LR7hZYz4AXmjQw8zuy2T//2QntwdnpuYI7jteT6GVYJL7F6C2C57R7gSYrcqVW3lAALefdbhBLDA==} + core-js-compat@3.49.0: + resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} + core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -2955,18 +3123,6 @@ packages: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} - date-fns@1.30.1: resolution: {integrity: sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==} @@ -3010,6 +3166,9 @@ packages: decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + decode-named-character-reference@1.3.0: + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} + decode-uri-component@0.2.2: resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} engines: {node: '>=0.10'} @@ -3044,10 +3203,6 @@ packages: defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} @@ -3056,10 +3211,6 @@ packages: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - del@7.1.0: resolution: {integrity: sha512-v2KyNk7efxhlyHpjEvfyxaAihKKK0nWCuf6ZtqZcFFpQRG0bJ12Qsr0RpvsICMjAAZ8DOVCxrlqpxISlMHC4Kg==} engines: {node: '>=14.16'} @@ -3075,6 +3226,10 @@ packages: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + destroy@1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -3095,6 +3250,9 @@ packages: detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -3113,10 +3271,6 @@ packages: dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - dom-accessibility-api@0.6.3: resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} @@ -3157,10 +3311,6 @@ packages: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -3170,6 +3320,9 @@ packages: electron-to-chromium@1.5.218: resolution: {integrity: sha512-uwwdN0TUHs8u6iRgN8vKeWZMRll4gBkz+QMqdS7DDe49uiK68/UX92lFb61oiFPrpYZNeZIqa4bA7O6Aiasnzg==} + electron-to-chromium@1.5.361: + resolution: {integrity: sha512-Q6Hts7N9FnJc5LeGRINFvLhCI9xZmNtTDe5ZbcVezQz7cU4a8Aua3GH1b8J2XY8Al9PF+OCwYqhgsOOheMdvkA==} + electron-to-chromium@1.5.63: resolution: {integrity: sha512-ddeXKuY9BHo/mw145axlyWjlJ1UBt4WK3AlvkT7W2AbqfRQoacVoRUCF6wL3uIx/8wT9oLKXzI+rFqHHscByaA==} @@ -3190,6 +3343,10 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + empathic@2.0.1: + resolution: {integrity: sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==} + engines: {node: '>=14'} + encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} @@ -3206,6 +3363,10 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + env-editor@0.4.2: resolution: {integrity: sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==} engines: {node: '>=8'} @@ -3224,37 +3385,6 @@ packages: error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} - es-abstract@1.24.0: - resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-iterator-helpers@1.2.1: - resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} - engines: {node: '>= 0.4'} - - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - - es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} - engines: {node: '>= 0.4'} - escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -3287,78 +3417,62 @@ packages: engines: {node: '>=6.0'} hasBin: true - eslint-config-expo@9.2.0: - resolution: {integrity: sha512-TQgmSx+2mRM7qUS0hB5kTDrHcSC35rA1UzOSgK5YRLmSkSMlKLmXkUrhwOpnyo9D/nHdf4ERRAySRYxgA6dlrw==} + eslint-compat-utils@0.5.1: + resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} + engines: {node: '>=12'} peerDependencies: - eslint: '>=8.10' + eslint: '>=6.0.0' - eslint-config-prettier@10.1.8: - resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} - hasBin: true + eslint-config-flat-gitignore@2.3.0: + resolution: {integrity: sha512-bg4ZLGgoARg1naWfsINUUb/52Ksw/K22K+T16D38Y8v+/sGwwIYrGvH/JBjOin+RQtxxC9tzNNiy4shnGtGyyQ==} peerDependencies: - eslint: '>=7.0.0' + eslint: ^9.5.0 || ^10.0.0 - eslint-import-context@0.1.9: - resolution: {integrity: sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + eslint-flat-config-utils@3.2.0: + resolution: {integrity: sha512-PHgo1X5uqIorJONLVD9BIaOSdoYFD3z/AeJljdqDPlWVRpeCYkDbK9k0AXoYVqqNJr6FEYIEr5Rm2TSktLQcHw==} + + eslint-json-compat-utils@0.2.3: + resolution: {integrity: sha512-RbBmDFyu7FqnjE8F0ZxPNzx5UaptdeS9Uu50r7A+D7s/+FCX+ybiyViYEgFUaFIFqSWJgZRTpL5d8Kanxxl2lQ==} + engines: {node: '>=12'} peerDependencies: - unrs-resolver: ^1.0.0 + '@eslint/json': '*' + eslint: '*' + jsonc-eslint-parser: ^2.4.0 || ^3.0.0 peerDependenciesMeta: - unrs-resolver: + '@eslint/json': optional: true - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - - eslint-import-resolver-typescript@3.6.3: - resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==} - engines: {node: ^14.18.0 || >=16.0.0} + eslint-merge-processors@2.0.0: + resolution: {integrity: sha512-sUuhSf3IrJdGooquEUB5TNpGNpBoQccbnaLHsb1XkBLUPPqCNivCpY05ZcpCOiV9uHwO2yxXEWVczVclzMxYlA==} peerDependencies: eslint: '*' - eslint-plugin-import: '*' - eslint-plugin-import-x: '*' - peerDependenciesMeta: - eslint-plugin-import: - optional: true - eslint-plugin-import-x: - optional: true - eslint-import-resolver-typescript@4.4.4: - resolution: {integrity: sha512-1iM2zeBvrYmUNTj2vSC/90JTHDth+dfOfiNKkxApWRsTJYNrc8rOdxxIf5vazX+BiAXTeOT0UvWpGI/7qIWQOw==} - engines: {node: ^16.17.0 || >=18.6.0} + eslint-plugin-antfu@3.2.3: + resolution: {integrity: sha512-U2fnz/H0gFPxpuC7QpaHa0Jv2AgCZ5hunp36SOP/yWo8yFzgvMh8X4pZ4uN4IKoqtBhk7G3HuVa93Urf51+sZg==} peerDependencies: eslint: '*' - eslint-plugin-import: '*' - eslint-plugin-import-x: '*' - peerDependenciesMeta: - eslint-plugin-import: - optional: true - eslint-plugin-import-x: - optional: true - eslint-module-utils@2.12.0: - resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} - engines: {node: '>=4'} + eslint-plugin-command@3.5.2: + resolution: {integrity: sha512-PA59QAkQDwvcCMEt5lYLJLI3zDGVKJeC4id/pcRY2XdRYhSGW7iyYT1VC1N3bmpuvu6Qb/9QptiS3GJMjeGTJg==} peerDependencies: - '@typescript-eslint/parser': '*' + '@typescript-eslint/rule-tester': '*' + '@typescript-eslint/typescript-estree': '*' + '@typescript-eslint/utils': '*' eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - eslint-plugin-expo@0.1.4: - resolution: {integrity: sha512-YA7yiMacQbLJySuyJA0Eb5V65obqp6fVOWtw1JdYDRWC5MeToPrnNvhGDpk01Bv3Vm4ownuzUfvi89MXi1d6cg==} + eslint-plugin-depend@1.5.0: + resolution: {integrity: sha512-i3UeLYmclf1Icp35+6W7CR4Bp2PIpDgBuf/mpmXK5UeLkZlvYJ21VuQKKHHAIBKRTPivPGX/gZl5JGno1o9Y0A==} + peerDependencies: + eslint: '>=8.40.0' + + eslint-plugin-es-x@7.8.0: + resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '>=8' + + eslint-plugin-expo@1.0.3: + resolution: {integrity: sha512-C1v9NPvpDET36+7Klpp/+53Jl+VzOfpbDxpKtL/pAPhCDwTX0kW6Swo425PT0uc4AMT5jpQbB7hSKFjKOGMl4A==} engines: {node: '>=18.0.0'} peerDependencies: eslint: '>=8.10' @@ -3369,42 +3483,44 @@ packages: peerDependencies: eslint: '>=4.0.0' - eslint-plugin-import@2.31.0: - resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} - engines: {node: '>=4'} + eslint-plugin-import-lite@0.5.2: + resolution: {integrity: sha512-XvfdWOC5dSLEI9krIPRlNmKSI2ViIE9pVylzfV9fCq0ZpDaNeUk6o0wZv0OzN83QdadgXp1NsY0qjLINxwYCsw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true + eslint: '>=9.0.0' - eslint-plugin-jest@28.14.0: - resolution: {integrity: sha512-P9s/qXSMTpRTerE2FQ0qJet2gKbcGyFTPAJipoKxmWqR6uuFqIqk8FuEfg5yBieOezVrEfAMZrEwJ6yEp+1MFQ==} - engines: {node: ^16.10.0 || ^18.12.0 || >=20.0.0} + eslint-plugin-jsdoc@62.9.0: + resolution: {integrity: sha512-PY7/X4jrVgoIDncUmITlUqK546Ltmx/Pd4Hdsu4CvSjryQZJI2mEV4vrdMufyTetMiZ5taNSqvK//BTgVUlNkA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} peerDependencies: - '@typescript-eslint/eslint-plugin': ^6.0.0 || ^7.0.0 || ^8.0.0 - eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 - eslint-plugin-prettier@5.5.4: - resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==} - engines: {node: ^14.18.0 || >=16.0.0} + eslint-plugin-jsonc@3.1.2: + resolution: {integrity: sha512-dopTxdB22iuOkgKyJCupEC5IYBItUT4J/teq1H5ddUObcaYhOURxtJElZczdcYnnKCghNU/vccuyPkliy2Wxsg==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': - optional: true - eslint-config-prettier: - optional: true + eslint: '>=9.38.0' + + eslint-plugin-n@17.24.0: + resolution: {integrity: sha512-/gC7/KAYmfNnPNOb3eu8vw+TdVnV0zhdQwexsw6FLXbhzroVj20vRn2qL8lDWDGnAQ2J8DhdfvXxX9EoxvERvw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.23.0' + + eslint-plugin-no-only-tests@3.4.0: + resolution: {integrity: sha512-4S3/9Nb7A2tiMcpzEQE9bQSlpeOz6WJkgryBuou/SA8W2x2c8Zf4j0NvTKBjv6qNhF9T79tmkecm/0CHqV0UGg==} + engines: {node: '>=5.0.0'} + + eslint-plugin-perfectionist@5.9.0: + resolution: {integrity: sha512-8TWzg02zmnBdZwCkWLi8jhzqXI+fE7Z/RwV8SL6xD45tJ8Bp3wGuYL2XtQgfe/Wd0eBqOUX+s6ey73IyszvKTA==} + engines: {node: ^20.0.0 || >=22.0.0} + peerDependencies: + eslint: ^8.45.0 || ^9.0.0 || ^10.0.0 + + eslint-plugin-pnpm@1.6.1: + resolution: {integrity: sha512-pgcaJclu3YxZ/WMsiKMF58bHQasbGVARSMqCJvFaETYxSc7KcR2H74UVWV6exuGv9nNv9c0KKqn4PVHQlzMSEg==} + peerDependencies: + eslint: ^9.0.0 || ^10.0.0 eslint-plugin-react-compiler@19.1.0-rc.2: resolution: {integrity: sha512-oKalwDGcD+RX9mf3NEO4zOoUMeLvjSvcbbEOpquzmzqEEM2MQdp7/FY/Hx9NzmUwFzH1W9SKTz5fihfMldpEYw==} @@ -3412,28 +3528,64 @@ packages: peerDependencies: eslint: '>=7' - eslint-plugin-react-hooks@5.2.0: - resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} - engines: {node: '>=10'} + eslint-plugin-react-dom@2.13.0: + resolution: {integrity: sha512-+2IZzQ1WEFYOWatW+xvNUqmZn55YBCufzKA7hX3XQ/8eu85Mp4vnlOyNvdVHEOGhUnGuC6+9+zLK+IlEHKdKLQ==} + engines: {node: '>=20.19.0'} 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: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' - eslint-plugin-react@7.37.5: - resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} - engines: {node: '>=4'} + eslint-plugin-react-hooks-extra@2.13.0: + resolution: {integrity: sha512-qIbha1nzuyhXM9SbEfrcGVqmyvQu7GAOB2sy9Y4Qo5S8nCqw4fSBxq+8lSce5Tk5Y7XzIkgHOhNyXEvUHRWFMQ==} + engines: {node: '>=20.19.0'} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + eslint-plugin-react-hooks@7.1.1: + resolution: {integrity: sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==} + engines: {node: '>=18'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0 + + eslint-plugin-react-naming-convention@2.13.0: + resolution: {integrity: sha512-uSd25JzSg2R4p81s3Wqck0AdwRlO9Yc+cZqTEXv7vW8exGGAM3mWnF6hgrgdqVJqBEGJIbS/Vx1r5BdKcY/MHA==} + engines: {node: '>=20.19.0'} peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' - eslint-plugin-simple-import-sort@12.1.1: - resolution: {integrity: sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==} + eslint-plugin-react-refresh@0.4.26: + resolution: {integrity: sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==} peerDependencies: - eslint: '>=5.0.0' + eslint: '>=8.40' - eslint-plugin-sonarjs@1.0.4: - resolution: {integrity: sha512-jF0eGCUsq/HzMub4ExAyD8x1oEgjOyB9XVytYGyWgSFvdiJQJp6IuP7RmtauCf06o6N/kZErh+zW4b10y1WZ+Q==} - engines: {node: '>=16'} + eslint-plugin-react-rsc@2.13.0: + resolution: {integrity: sha512-RaftgITDLQm1zIgYyvR51sBdy4FlVaXFts5VISBaKbSUB0oqXyzOPxMHasfr9BCSjPLKus9zYe+G/Hr6rjFLXQ==} + engines: {node: '>=20.19.0'} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + eslint-plugin-react-web-api@2.13.0: + resolution: {integrity: sha512-nmJbzIAte7PeAkp22CwcKEASkKi49MshSdiDGO1XuN3f4N4/8sBfDcWbQuLPde6JiuzDT/0+l7Gi8wwTHtR1kg==} + engines: {node: '>=20.19.0'} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + eslint-plugin-react-x@2.13.0: + resolution: {integrity: sha512-cMNX0+ws/fWTgVxn52qAQbaFF2rqvaDAtjrPUzY6XOzPjY0rJQdR2tSlWJttz43r2yBfqu+LGvHlGpWL2wfpTQ==} + engines: {node: '>=20.19.0'} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + eslint-plugin-regexp@3.1.0: + resolution: {integrity: sha512-qGXIC3DIKZHcK1H9A9+Byz9gmndY6TTSRkSMTZpNXdyCw2ObSehRgccJv35n9AdUakEjQp5VFNLas6BMXizCZg==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} peerDependencies: - eslint: ^8.0.0 || ^9.0.0 + eslint: '>=9.38.0' eslint-plugin-tailwindcss@3.18.2: resolution: {integrity: sha512-QbkMLDC/OkkjFQ1iz/5jkMdHfiMu/uwujUHLAJK5iwNHD8RTxVTlsUezE0toTZ6VhybNBsk+gYGPDq2agfeRNA==} @@ -3447,21 +3599,53 @@ packages: peerDependencies: eslint: ^8.57.0 || ^9.0.0 - eslint-plugin-unicorn@59.0.1: - resolution: {integrity: sha512-EtNXYuWPUmkgSU2E7Ttn57LbRREQesIP1BiLn7OZLKodopKfDXfBUkC/0j6mpw2JExwf43Uf3qLSvrSvppgy8Q==} - engines: {node: ^18.20.0 || ^20.10.0 || >=21.0.0} + eslint-plugin-toml@1.3.1: + resolution: {integrity: sha512-1l00fBP03HIt9IPV7ZxBi7x0y0NMdEZmakL1jBD6N/FoKBvfKxPw5S8XkmzBecOnFBTn5Z8sNJtL5vdf9cpRMQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} peerDependencies: - eslint: '>=9.22.0' + eslint: '>=9.38.0' - eslint-plugin-unused-imports@4.2.0: - resolution: {integrity: sha512-hLbJ2/wnjKq4kGA9AUaExVFIbNzyxYdVo49QZmKCnhk5pc9wcYRbfgLHvWJ8tnsdcseGhoUAddm9gn/lt+d74w==} + eslint-plugin-unicorn@63.0.0: + resolution: {integrity: sha512-Iqecl9118uQEXYh7adylgEmGfkn5es3/mlQTLLkd4pXkIk9CTGrAbeUux+YljSa2ohXCBmQQ0+Ej1kZaFgcfkA==} + engines: {node: ^20.10.0 || >=21.0.0} + peerDependencies: + eslint: '>=9.38.0' + + eslint-plugin-unused-imports@4.4.1: + resolution: {integrity: sha512-oZGYUz1X3sRMGUB+0cZyK2VcvRX5lm/vB56PgNNcU+7ficUCKm66oZWKUubXWnOuPjQ8PvmXtCViXBMONPe7tQ==} peerDependencies: '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 - eslint: ^9.0.0 || ^8.0.0 + eslint: ^10.0.0 || ^9.0.0 || ^8.0.0 peerDependenciesMeta: '@typescript-eslint/eslint-plugin': optional: true + eslint-plugin-vue@10.9.1: + resolution: {integrity: sha512-cHB0Tf4Duvzwecwd/AqWzZvF/QszE13BhjVUpVXWCy9AeMR5GjkAjP3i85vqgLgOuTmkHR1OJ5oMeqLHtuw8zg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@stylistic/eslint-plugin': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + '@typescript-eslint/parser': ^7.0.0 || ^8.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + vue-eslint-parser: ^10.3.0 + peerDependenciesMeta: + '@stylistic/eslint-plugin': + optional: true + '@typescript-eslint/parser': + optional: true + + eslint-plugin-yml@3.3.2: + resolution: {integrity: sha512-XjmOB/fLBwYHqevnpclPL938V+9ExX7xw1hPaM3IPePGyMFRV1giS16RjSTNhIyCv/Oh0G0PEdmmZPATJ02YCw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24.0.0} + peerDependencies: + eslint: '>=9.38.0' + + eslint-processor-vue-blocks@2.0.0: + resolution: {integrity: sha512-u4W0CJwGoWY3bjXAuFpc/b6eK3NQEI8MoeW7ritKj3G3z/WtHrKjkqf+wk8mPEy5rlMGS+k6AZYOw2XBoN/02Q==} + peerDependencies: + '@vue/compiler-sfc': ^3.3.0 + eslint: '>=9.0.0' + eslint-scope@8.4.0: resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3474,8 +3658,12 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.35.0: - resolution: {integrity: sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg==} + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@9.39.4: + resolution: {integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -3488,6 +3676,10 @@ packages: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + espree@11.2.0: + resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} @@ -3497,6 +3689,10 @@ packages: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} @@ -3505,6 +3701,9 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -3733,6 +3932,9 @@ packages: exponential-backoff@3.1.1: resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} + exsolve@1.0.8: + resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} @@ -3740,9 +3942,6 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} @@ -3753,12 +3952,24 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-string-truncated-width@3.0.3: + resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} + + fast-string-width@3.0.2: + resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} + fast-uri@3.0.3: resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==} + fast-wrap-ansi@0.2.2: + resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==} + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fault@2.0.1: + resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} @@ -3858,10 +4069,6 @@ packages: fontfaceobserver@2.3.0: resolution: {integrity: sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==} - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} - foreground-child@3.3.0: resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} @@ -3870,6 +4077,10 @@ packages: resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} engines: {node: '>= 6'} + format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + framer-motion@6.5.1: resolution: {integrity: sha512-o1BGqqposwi7cgDrtg0dNONhkmPsUFDaLcKXigzuTFC5x58mE8iyTazxSudFzmT6MEyJKfjjU8ItoMe3W+3fiw==} peerDependencies: @@ -3898,13 +4109,6 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -3917,10 +4121,6 @@ packages: resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} engines: {node: '>=18'} - get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} - get-nonce@1.0.1: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} @@ -3929,10 +4129,6 @@ packages: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -3941,16 +4137,9 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} - get-tsconfig@4.10.1: resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} - get-tsconfig@4.8.1: - resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} - getenv@2.0.0: resolution: {integrity: sha512-VilgtJj/ALgGY77fiLam5iD336eSWi96Q15JSAG1zi8NRBysm3LXKdGnHb4m5cuyxvOLQQKWpBZAT6ni4FI2iQ==} engines: {node: '>=6'} @@ -3963,6 +4152,9 @@ packages: engines: {node: '>=16'} hasBin: true + github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + github-url-from-git@1.5.0: resolution: {integrity: sha512-WWOec4aRI7YAykQ9+BHmzjyNlkfJFG8QLXnDTsLz/kZefq7qkzdfo4p6fkYYMIq1aj+gZcQs/1HQhQh3DPPxlQ==} @@ -3976,6 +4168,7 @@ packages: glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@13.0.0: @@ -3984,11 +4177,12 @@ packages: glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me glob@9.3.5: resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} engines: {node: '>=16 || 14 >=14.17'} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me global-directory@4.0.1: resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} @@ -4009,21 +4203,24 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} + engines: {node: '>=18'} + globals@16.4.0: resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} engines: {node: '>=18'} - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} + globals@17.6.0: + resolution: {integrity: sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==} + engines: {node: '>=18'} globby@13.2.2: resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} + globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} graceful-fs@4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} @@ -4031,9 +4228,6 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} @@ -4043,9 +4237,6 @@ packages: resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} engines: {node: '>=0.10.0'} - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -4058,21 +4249,6 @@ packages: resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==} engines: {node: '>=8'} - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -4109,6 +4285,9 @@ packages: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} + html-entities@2.6.0: + resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==} + html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -4245,10 +4424,6 @@ packages: resolution: {integrity: sha512-LJKFHCSeIRq9hanN14IlOtPSTe3lNES7TYDTE2xxdAy1LS5rYphajK1qtwvj3YmQXvvk0U2Vbmcni8P9EIQW9w==} engines: {node: '>=18'} - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} - invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} @@ -4256,46 +4431,20 @@ packages: resolution: {integrity: sha512-kniTIJmaZYiwa17eTtWIfm0K342seyugl6vuC8DiiyiRAJWAVlLkqGCI0Im0neo0TkXw+pRcKaBPRdcKHnQJ6Q==} engines: {node: '>=0.10.0'} - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} - is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} - - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} - is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} - is-builtin-module@5.0.0: resolution: {integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==} engines: {node: '>=18.20'} - is-bun-module@1.2.1: - resolution: {integrity: sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==} - - is-bun-module@2.0.0: - resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - is-core-module@2.15.1: resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} engines: {node: '>= 0.4'} @@ -4304,14 +4453,6 @@ packages: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} - - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} - is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} @@ -4326,10 +4467,6 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} - is-fullwidth-code-point@1.0.0: resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==} engines: {node: '>=0.10.0'} @@ -4357,14 +4494,16 @@ packages: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} - is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-immutable-type@5.0.2: + resolution: {integrity: sha512-liGTvz7pbINOKvy0P4VTCEAIf8xrKJ9165xnwsS7udUyYxwDGBdQIJd+OhwxAn6Kv3pzdy1uha4oJCigzNw2xA==} + peerDependencies: + eslint: '*' + typescript: '>=4.7.4' + is-in-ci@1.0.0: resolution: {integrity: sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==} engines: {node: '>=18'} @@ -4387,22 +4526,10 @@ packages: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - is-npm@6.0.0: resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} - is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -4429,22 +4556,10 @@ packages: is-promise@2.2.2: resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} - is-scoped@3.0.0: resolution: {integrity: sha512-ezxLUq30kiTvP0w/5n9tj4qTOKlrA07Oty1hwTQ+lcqw11x6uc8sp7VRb2OVGRzKfCHZ2A22T5Zsau/Q2Akb0g==} engines: {node: '>=12'} - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} - is-stream@1.1.0: resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} engines: {node: '>=0.10.0'} @@ -4457,22 +4572,10 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} - - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} - is-text-path@2.0.0: resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} engines: {node: '>=8'} - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} - is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} @@ -4485,18 +4588,6 @@ packages: resolution: {integrity: sha512-LXdhGlYqUPdvEyIhWPEEwYYK3yrUiPcBjmFGlZNv1u5GtIL5qQRf7ddDyPNAvsMFqdzS923FROpTQU97tLe3JQ==} engines: {node: '>=12'} - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} - - is-weakset@2.0.3: - resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} - engines: {node: '>= 0.4'} - is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} @@ -4505,9 +4596,6 @@ packages: resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} engines: {node: '>=16'} - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -4542,10 +4630,6 @@ packages: resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} - iterator.prototype@1.1.5: - resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} - engines: {node: '>= 0.4'} - jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} @@ -4741,9 +4825,21 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + jsc-safe-url@0.2.4: resolution: {integrity: sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==} + jsdoc-type-pratt-parser@7.1.1: + resolution: {integrity: sha512-/2uqY7x6bsrpi3i9LVU6J89352C0rpMk0as8trXxCtvd4kPk1ke/Eyif6wqfSLvoNJqcDG9Vk4UsXgygzCt2xA==} + engines: {node: '>=20.0.0'} + + jsdoc-type-pratt-parser@7.2.0: + resolution: {integrity: sha512-dh140MMgjyg3JhJZY/+iEzW+NO5xR2gpbDFKHqotCmexElVntw7GjWjt511+C/Ef02RU5TKYrJo/Xlzk+OLaTw==} + engines: {node: '>=20.0.0'} + jsdom@20.0.3: resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} engines: {node: '>=14'} @@ -4778,23 +4874,19 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true + jsonc-eslint-parser@3.1.0: + resolution: {integrity: sha512-75EA7EWZExL/j+MDKQrRbdzcRI2HOkRlmUw8fZJc1ioqFEOvBsq7Rt+A6yCxOt9w/TYNpkt52gC6nm/g5tFIng==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -5004,6 +5096,10 @@ packages: load-bmfont@1.4.2: resolution: {integrity: sha512-qElWkmjW9Oq1F9EI5Gt7aD9zcdHb9spJCW1L/dmPf7KzCCEJxq8nhHz5eCgI9aMf7vrG/wyaCqdsI+Iy9ZTlog==} + local-pkg@1.2.1: + resolution: {integrity: sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q==} + engines: {node: '>=14'} + locate-path@3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} @@ -5086,6 +5182,9 @@ packages: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -5100,6 +5199,9 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} @@ -5110,12 +5212,47 @@ packages: makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + marky@1.2.5: resolution: {integrity: sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==} - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + + mdast-util-from-markdown@2.0.3: + resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} + + mdast-util-frontmatter@2.0.1: + resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} mdn-data@2.0.14: resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} @@ -5257,6 +5394,93 @@ packages: engines: {node: '>=20.19.4'} hasBin: true + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + + micromark-extension-frontmatter@2.0.0: + resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==} + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -5305,9 +5529,16 @@ packages: resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} engines: {node: 20 || >=22} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + minimatch@8.0.4: resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} engines: {node: '>=16 || 14 >=14.17'} @@ -5336,6 +5567,12 @@ packages: engines: {node: '>=10'} hasBin: true + mlly@1.8.2: + resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} + + module-replacements@2.11.0: + resolution: {integrity: sha512-j5sNQm3VCpQQ7nTqGeOZtoJtV3uKERgCBm9QRhmGRiXiqkf7iRFOkfxdJRZWLkqYY8PNf4cDQF/WfXUYLENrRA==} + moti@0.29.0: resolution: {integrity: sha512-o/blVE3lm0i/6E5X0RLK59SVWEGxo7pQh8dTm+JykVCYY9bcz0lWyZFCO1s+MMNq+nMsSZBX8lkp4im/AZmhyw==} peerDependencies: @@ -5365,9 +5602,9 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - napi-postinstall@0.3.3: - resolution: {integrity: sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true nativewind@4.1.21: @@ -5379,6 +5616,10 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + natural-orderby@5.0.0: + resolution: {integrity: sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==} + engines: {node: '>=18'} + negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -5419,6 +5660,10 @@ packages: node-releases@2.0.21: resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==} + node-releases@2.0.46: + resolution: {integrity: sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==} + engines: {node: '>=18'} + normalize-package-data@6.0.2: resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} engines: {node: ^16.14.0 || >=18.0.0} @@ -5473,38 +5718,13 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + object-deep-merge@2.0.1: + resolution: {integrity: sha512-aKttDKcU3pyZqKcCkDhsMn70WmZFG2JGDQLP9EcLyTSIFQRCPWLAmBZRLJnrVUrhPG1jETEEbfdgbNtJf1LyMg==} + object-hash@3.0.0: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} - - object.entries@1.1.9: - resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - - object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} - - object.values@1.2.1: - resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} - engines: {node: '>= 0.4'} - omggif@1.0.10: resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==} @@ -5571,10 +5791,6 @@ packages: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} - own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} - p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -5634,6 +5850,9 @@ packages: resolution: {integrity: sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==} engines: {node: '>=18'} + package-manager-detector@1.6.0: + resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} + pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} @@ -5650,9 +5869,16 @@ packages: parse-bmfont-xml@1.1.6: resolution: {integrity: sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==} + parse-gitignore@2.0.0: + resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==} + engines: {node: '>=14'} + parse-headers@2.0.5: resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==} + parse-imports-exports@0.2.4: + resolution: {integrity: sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==} + parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -5665,6 +5891,9 @@ packages: resolution: {integrity: sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==} engines: {node: '>=10'} + parse-statements@1.0.11: + resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==} + parse5@7.2.1: resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} @@ -5711,6 +5940,9 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + peek-readable@4.1.0: resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} engines: {node: '>=8'} @@ -5735,6 +5967,10 @@ packages: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + pidtree@0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} engines: {node: '>=0.10'} @@ -5760,6 +5996,12 @@ packages: resolution: {integrity: sha512-4peoBq4Wks0riS0z8741NVv+/8IiTvqnZAr8QGgtdifrtpdXbNw/FxRS1l6NFqm4EMzuS0EDqNNx4XGaz8cuyQ==} engines: {node: '>=18'} + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.3.1: + resolution: {integrity: sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==} + pkg-up@3.1.0: resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} engines: {node: '>=8'} @@ -5784,13 +6026,12 @@ packages: resolution: {integrity: sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==} engines: {node: '>=12.13.0'} + pnpm-workspace-yaml@1.6.1: + resolution: {integrity: sha512-yTeZntGWi8m9WNuhoVsP0DpFc4sC1U0+rr/qR6Zi9n2g3sxXY+JfccjXjjruNz96tM8I09yaJUA86doRnNLkbg==} + popmotion@11.0.3: resolution: {integrity: sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA==} - possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - postcss-import@15.1.0: resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} @@ -5825,6 +6066,10 @@ packages: resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} + postcss-selector-parser@7.1.1: + resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} + engines: {node: '>=4'} + postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} @@ -5832,19 +6077,14 @@ packages: resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.15: + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} + engines: {node: ^10 || ^12 || >=14} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} - - prettier@3.3.3: - resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} - engines: {node: '>=14'} - hasBin: true - pretty-bytes@5.6.0: resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} engines: {node: '>=6'} @@ -5905,6 +6145,9 @@ packages: resolution: {integrity: sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==} hasBin: true + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + query-string@7.1.3: resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} engines: {node: '>=6'} @@ -6193,9 +6436,9 @@ packages: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} + refa@0.12.1: + resolution: {integrity: sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} regenerate-unicode-properties@10.2.2: resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==} @@ -6210,14 +6453,14 @@ packages: regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + regexp-ast-analysis@0.7.1: + resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + regexp-tree@0.1.27: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} hasBin: true - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} - regexpu-core@6.3.1: resolution: {integrity: sha512-DzcswPr252wEr7Qz8AyAVbfyBDKLoYp6eRA1We2Fa9qirRFSdtkP5sHr3yglDKy2BbA0fd2T+j/CUSKes3FeVQ==} engines: {node: '>=4'} @@ -6237,6 +6480,10 @@ packages: resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} hasBin: true + regjsparser@0.13.1: + resolution: {integrity: sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==} + hasBin: true + repeat-string@1.6.1: resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} engines: {node: '>=0.10'} @@ -6259,6 +6506,10 @@ packages: reselect@4.1.8: resolution: {integrity: sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==} + reserved-identifiers@1.2.0: + resolution: {integrity: sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==} + engines: {node: '>=18'} + resolve-cwd@3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} @@ -6301,10 +6552,6 @@ packages: resolve@1.7.1: resolution: {integrity: sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==} - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true - restore-cursor@2.0.0: resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==} engines: {node: '>=4'} @@ -6354,21 +6601,9 @@ packages: rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} - engines: {node: '>=0.4'} - safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} - - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} - safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -6386,6 +6621,10 @@ packages: resolution: {integrity: sha512-yEsN6TuxZhZ1Tl9iB81frTNS292m0I/IG7+w8lTvfcJQP2x3vnpOoevjBoE3Np5A6KnZM2+RtVenihj9t6NiYg==} engines: {node: '>=12'} + scslre@0.3.0: + resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==} + engines: {node: ^14.0.0 || >=16.0.0} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -6400,6 +6639,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.8.1: + resolution: {integrity: sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==} + engines: {node: '>=10'} + hasBin: true + send@0.19.0: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} @@ -6419,18 +6663,6 @@ packages: server-only@0.0.1: resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} - setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} @@ -6455,22 +6687,6 @@ packages: shell-quote@1.8.1: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} - signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -6546,6 +6762,9 @@ packages: spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + spdx-expression-parse@4.0.0: + resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} + spdx-license-ids@3.0.20: resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} @@ -6560,10 +6779,6 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - stable-hash-x@0.2.0: - resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==} - engines: {node: '>=12.0.0'} - stack-generator@2.0.10: resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==} @@ -6592,10 +6807,6 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - stop-iteration-iterator@1.1.0: - resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} - engines: {node: '>= 0.4'} - stream-buffers@2.2.0: resolution: {integrity: sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==} engines: {node: '>= 0.10.0'} @@ -6616,6 +6827,9 @@ packages: resolution: {integrity: sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==} engines: {node: '>=12.20'} + string-ts@2.3.1: + resolution: {integrity: sha512-xSJq+BS52SaFFAVxuStmx6n5aYZU571uYUnUrPXkPFCfdHyZMMlbP2v2Wx5sNBnAVzq/2+0+mcBLBa3Xa5ubYw==} + string-width@1.0.2: resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} engines: {node: '>=0.10.0'} @@ -6636,25 +6850,6 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} - string.prototype.matchall@4.0.12: - resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} - engines: {node: '>= 0.4'} - - string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} - - string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -6678,10 +6873,6 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} @@ -6698,8 +6889,8 @@ packages: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} - strip-indent@4.1.0: - resolution: {integrity: sha512-OA95x+JPmL7kc7zCu+e+TeYxEiaIyndRx0OrBcK2QPPH09oAndr2ALvymxWA+Lx1PYYvFUm4O63pRkdJAaW96w==} + strip-indent@4.1.1: + resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==} engines: {node: '>=12'} strip-json-comments@2.0.1: @@ -6771,8 +6962,8 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - synckit@0.11.11: - resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} + synckit@0.11.12: + resolution: {integrity: sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==} engines: {node: ^14.18.0 || >=16.0.0} tailwind-merge@2.5.4: @@ -6796,7 +6987,7 @@ packages: tar@7.5.2: resolution: {integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==} engines: {node: '>=18'} - deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me temp-dir@2.0.0: resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} @@ -6845,10 +7036,18 @@ packages: tinyexec@0.3.1: resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} + tinyexec@1.2.2: + resolution: {integrity: sha512-M/Q0B2cp4K7kynaT/vnED1j8TlLY+Pp7C6Wl2bl/7u/F0mUVwdyOpwomQb8JpYLitHUssAJRmLZdMCGsrx7i+g==} + engines: {node: '>=18'} + tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} + tinyglobby@0.2.16: + resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} + engines: {node: '>=12.0.0'} + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -6860,6 +7059,10 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + to-valid-identifier@1.0.0: + resolution: {integrity: sha512-41wJyvKep3yT2tyPqX/4blcfybknGB4D+oETKLs7Q76UiPqRpUJK3hr1nxelyYO0PHKVzJwlu0aCeEAsGI6rpw==} + engines: {node: '>=20'} + toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} @@ -6868,6 +7071,10 @@ packages: resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} engines: {node: '>=10'} + toml-eslint-parser@1.0.3: + resolution: {integrity: sha512-A5F0cM6+mDleacLIEUkmfpkBbnHJFV1d2rprHU2MXNk7mlxHq2zGojA+SRvQD1RoMo9gqjZPWEaKG4v1BQ48lw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + tough-cookie@4.1.4: resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} @@ -6885,6 +7092,17 @@ packages: peerDependencies: typescript: '>=4.8.4' + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-declaration-location@1.0.7: + resolution: {integrity: sha512-EDyGAwH1gO0Ausm9gV6T2nUvBgXT5kGoCMJPllOaooZ+4VvJiKBdZE7wK18N1deEowhcUptS+5GXZK8U/fvpwA==} + peerDependencies: + typescript: '>=4.0.0' + ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} @@ -6915,8 +7133,8 @@ packages: jest-util: optional: true - tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + ts-pattern@5.9.0: + resolution: {integrity: sha512-6s5V71mX8qBUmlgbrfL33xDUwO0fq48rxAu2LBE11WBeGdpCPOsXksQbZJHvHwhrd3QjUusd3mAOM5Gg0mFBLg==} tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} @@ -6960,29 +7178,6 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} - engines: {node: '>= 0.4'} - - typescript-eslint@8.44.0: - resolution: {integrity: sha512-ib7mCkYuIzYonCq9XWF5XNw+fkj2zg629PSa9KNIQ47RXFF763S5BIX4wqz1+FLPogTZoiw8KmCiRPRa8bL3qw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} @@ -6992,15 +7187,14 @@ packages: resolution: {integrity: sha512-k24RCVWlEcjkdOxYmVJgeD/0a1TiSpqLg+ZalVGV9lsnr4yqu0w7tX/x2xX6G4zpkgQnRf89lxuZ1wsbjXM8lw==} hasBin: true + ufo@1.6.4: + resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} + uglify-js@3.19.3: resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} engines: {node: '>=0.8.0'} hasBin: true - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} - undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} @@ -7032,6 +7226,18 @@ packages: resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} engines: {node: '>=8'} + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} @@ -7040,9 +7246,6 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - unrs-resolver@1.11.1: - resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} - update-browserslist-db@1.1.1: resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} hasBin: true @@ -7055,6 +7258,12 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + update-notifier@7.3.1: resolution: {integrity: sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==} engines: {node: '>=18'} @@ -7107,10 +7316,12 @@ packages: uuid@7.0.3: resolution: {integrity: sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true v8-to-istanbul@9.3.0: @@ -7141,6 +7352,12 @@ packages: resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} engines: {node: '>=0.10.0'} + vue-eslint-parser@10.4.0: + resolution: {integrity: sha512-Vxi9pJdbN3ZnVGLODVtZ7y4Y2kzAAE2Cm0CZ3ZDRvydVYxZ6VrnBhLikBsRS+dpwj4Jv4UCv21PTEwF5rQ9WXg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + w3c-xmlserializer@4.0.0: resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} engines: {node: '>=14'} @@ -7168,6 +7385,7 @@ packages: whatwg-encoding@2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation whatwg-fetch@3.6.20: resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} @@ -7190,22 +7408,6 @@ packages: when-exit@2.1.3: resolution: {integrity: sha512-uVieSTccFIr/SFQdFWN/fFaQYmV37OKtuaGphMAzi4DmmUlrvRBJW5WSLkHyjNQY/ePJMz3LoiX9R3yy1Su6Hw==} - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} - - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} - - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} - - which-typed-array@1.1.19: - resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} - engines: {node: '>= 0.4'} - which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -7354,6 +7556,10 @@ packages: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} + yaml-eslint-parser@2.0.0: + resolution: {integrity: sha512-h0uDm97wvT2bokfwwTmY6kJ1hp6YDFL0nRHwNKz8s/VD1FH/vvZjAKoMUE+un0eaYBSG7/c6h+lJTP+31tjgTw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + yaml@2.5.1: resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} engines: {node: '>= 14'} @@ -7364,6 +7570,11 @@ packages: engines: {node: '>= 14'} hasBin: true + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} + engines: {node: '>= 14.6'} + hasBin: true + yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} @@ -7390,9 +7601,18 @@ packages: peerDependencies: zod: ^3.18.0 + zod-validation-error@4.0.2: + resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + zod@3.23.8: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + zustand@5.0.8: resolution: {integrity: sha512-gyPKpIaxY9XcO2vSMrLbiER7QMAMGOQZVRdJ6Zi782jkbzZygq5GI9nG8g+sMgitRtndwaBSl7uiqC49o1SSiw==} engines: {node: '>=12.20.0'} @@ -7411,6 +7631,9 @@ packages: use-sync-external-store: optional: true + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + snapshots: '@0no-co/graphql.web@1.0.11': {} @@ -7419,6 +7642,65 @@ snapshots: '@alloc/quick-lru@5.2.0': {} + '@antfu/eslint-config@7.7.3(@eslint-react/eslint-plugin@2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(@typescript-eslint/rule-tester@8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.60.0(typescript@5.9.3))(@typescript-eslint/utils@8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(@vue/compiler-sfc@3.5.34)(eslint-plugin-react-hooks@7.1.1(eslint@9.39.4(jiti@1.21.6)))(eslint-plugin-react-refresh@0.4.26(eslint@9.39.4(jiti@1.21.6)))(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3)': + dependencies: + '@antfu/install-pkg': 1.1.0 + '@clack/prompts': 1.4.0 + '@e18e/eslint-plugin': 0.2.0(eslint@9.39.4(jiti@1.21.6)) + '@eslint-community/eslint-plugin-eslint-comments': 4.7.1(eslint@9.39.4(jiti@1.21.6)) + '@eslint/markdown': 7.5.1 + '@stylistic/eslint-plugin': 5.10.0(eslint@9.39.4(jiti@1.21.6)) + '@typescript-eslint/eslint-plugin': 8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@typescript-eslint/parser': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@vitest/eslint-plugin': 1.6.18(@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + ansis: 4.3.0 + cac: 7.0.0 + eslint: 9.39.4(jiti@1.21.6) + eslint-config-flat-gitignore: 2.3.0(eslint@9.39.4(jiti@1.21.6)) + eslint-flat-config-utils: 3.2.0 + eslint-merge-processors: 2.0.0(eslint@9.39.4(jiti@1.21.6)) + eslint-plugin-antfu: 3.2.3(eslint@9.39.4(jiti@1.21.6)) + eslint-plugin-command: 3.5.2(@typescript-eslint/rule-tester@8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.60.0(typescript@5.9.3))(@typescript-eslint/utils@8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.6)) + eslint-plugin-import-lite: 0.5.2(eslint@9.39.4(jiti@1.21.6)) + eslint-plugin-jsdoc: 62.9.0(eslint@9.39.4(jiti@1.21.6)) + eslint-plugin-jsonc: 3.1.2(eslint@9.39.4(jiti@1.21.6)) + eslint-plugin-n: 17.24.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + eslint-plugin-no-only-tests: 3.4.0 + eslint-plugin-perfectionist: 5.9.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + eslint-plugin-pnpm: 1.6.1(eslint@9.39.4(jiti@1.21.6)) + eslint-plugin-regexp: 3.1.0(eslint@9.39.4(jiti@1.21.6)) + eslint-plugin-toml: 1.3.1(eslint@9.39.4(jiti@1.21.6)) + eslint-plugin-unicorn: 63.0.0(eslint@9.39.4(jiti@1.21.6)) + eslint-plugin-unused-imports: 4.4.1(@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.6)) + eslint-plugin-vue: 10.9.1(@stylistic/eslint-plugin@5.10.0(eslint@9.39.4(jiti@1.21.6)))(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.6))(vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@1.21.6))) + eslint-plugin-yml: 3.3.2(eslint@9.39.4(jiti@1.21.6)) + eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.34)(eslint@9.39.4(jiti@1.21.6)) + globals: 17.6.0 + local-pkg: 1.2.1 + parse-gitignore: 2.0.0 + toml-eslint-parser: 1.0.3 + vue-eslint-parser: 10.4.0(eslint@9.39.4(jiti@1.21.6)) + yaml-eslint-parser: 2.0.0 + optionalDependencies: + '@eslint-react/eslint-plugin': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + eslint-plugin-react-hooks: 7.1.1(eslint@9.39.4(jiti@1.21.6)) + eslint-plugin-react-refresh: 0.4.26(eslint@9.39.4(jiti@1.21.6)) + transitivePeerDependencies: + - '@eslint/json' + - '@typescript-eslint/rule-tester' + - '@typescript-eslint/typescript-estree' + - '@typescript-eslint/utils' + - '@vue/compiler-sfc' + - oxlint + - supports-color + - typescript + - vitest + + '@antfu/install-pkg@1.1.0': + dependencies: + package-manager-detector: 1.6.0 + tinyexec: 1.2.2 + '@babel/code-frame@7.10.4': dependencies: '@babel/highlight': 7.25.9 @@ -7569,8 +7851,12 @@ snapshots: '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-string-parser@7.29.7': {} + '@babel/helper-validator-identifier@7.27.1': {} + '@babel/helper-validator-identifier@7.29.7': {} + '@babel/helper-validator-option@7.27.1': {} '@babel/helper-wrap-function@7.28.3': @@ -7597,6 +7883,10 @@ snapshots: dependencies: '@babel/types': 7.28.4 + '@babel/parser@7.29.7': + dependencies: + '@babel/types': 7.29.7 + '@babel/plugin-proposal-decorators@7.28.0(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 @@ -8071,8 +8361,25 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 + '@babel/types@7.29.7': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@bcoe/v8-coverage@0.2.3': {} + '@clack/core@1.3.1': + dependencies: + fast-wrap-ansi: 0.2.2 + sisteransi: 1.0.5 + + '@clack/prompts@1.4.0': + dependencies: + '@clack/core': 1.3.1 + fast-string-width: 3.0.2 + fast-wrap-ansi: 0.2.2 + sisteransi: 1.0.5 + '@commitlint/cli@19.2.2(@types/node@22.9.1)(typescript@5.9.3)': dependencies: '@commitlint/format': 19.5.0 @@ -8189,85 +8496,211 @@ snapshots: expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) flatted: 3.3.2 + '@e18e/eslint-plugin@0.2.0(eslint@9.39.4(jiti@1.21.6))': + dependencies: + eslint-plugin-depend: 1.5.0(eslint@9.39.4(jiti@1.21.6)) + optionalDependencies: + eslint: 9.39.4(jiti@1.21.6) + '@egjs/hammerjs@2.0.17': dependencies: '@types/hammerjs': 2.0.46 - '@emnapi/core@1.5.0': + '@emotion/is-prop-valid@0.8.8': dependencies: - '@emnapi/wasi-threads': 1.1.0 - tslib: 2.8.1 + '@emotion/memoize': 0.7.4 optional: true - '@emnapi/runtime@1.5.0': - dependencies: - tslib: 2.8.1 + '@emotion/memoize@0.7.4': optional: true - '@emnapi/wasi-threads@1.1.0': + '@es-joy/jsdoccomment@0.84.0': dependencies: - tslib: 2.8.1 - optional: true + '@types/estree': 1.0.9 + '@typescript-eslint/types': 8.60.0 + comment-parser: 1.4.5 + esquery: 1.7.0 + jsdoc-type-pratt-parser: 7.1.1 - '@emotion/is-prop-valid@0.8.8': + '@es-joy/jsdoccomment@0.86.0': dependencies: - '@emotion/memoize': 0.7.4 - optional: true + '@types/estree': 1.0.9 + '@typescript-eslint/types': 8.60.0 + comment-parser: 1.4.6 + esquery: 1.7.0 + jsdoc-type-pratt-parser: 7.2.0 - '@emotion/memoize@0.7.4': - optional: true + '@es-joy/resolve.exports@1.2.0': {} + + '@eslint-community/eslint-plugin-eslint-comments@4.7.1(eslint@9.39.4(jiti@1.21.6))': + dependencies: + escape-string-regexp: 4.0.0 + eslint: 9.39.4(jiti@1.21.6) + ignore: 7.0.5 + + '@eslint-community/eslint-utils@4.9.0(eslint@9.39.4(jiti@1.21.6))': + dependencies: + eslint: 9.39.4(jiti@1.21.6) + eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.9.0(eslint@9.35.0(jiti@1.21.6))': + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@1.21.6))': dependencies: - eslint: 9.35.0(jiti@1.21.6) + eslint: 9.39.4(jiti@1.21.6) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.21.0': + '@eslint-community/regexpp@4.12.2': {} + + '@eslint-react/ast@2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3)': + dependencies: + '@eslint-react/eff': 2.13.0 + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/typescript-estree': 8.60.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + eslint: 9.39.4(jiti@1.21.6) + string-ts: 2.3.1 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@eslint-react/core@2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3)': + dependencies: + '@eslint-react/ast': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@eslint-react/eff': 2.13.0 + '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@eslint-react/var': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.60.0 + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + eslint: 9.39.4(jiti@1.21.6) + ts-pattern: 5.9.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@eslint-react/eff@2.13.0': {} + + '@eslint-react/eslint-plugin@2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3)': + dependencies: + '@eslint-react/eff': 2.13.0 + '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.60.0 + '@typescript-eslint/type-utils': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + eslint: 9.39.4(jiti@1.21.6) + eslint-plugin-react-dom: 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + eslint-plugin-react-hooks-extra: 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + eslint-plugin-react-naming-convention: 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + eslint-plugin-react-rsc: 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + eslint-plugin-react-web-api: 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + eslint-plugin-react-x: 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@eslint-react/shared@2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3)': + dependencies: + '@eslint-react/eff': 2.13.0 + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + eslint: 9.39.4(jiti@1.21.6) + ts-pattern: 5.9.0 + typescript: 5.9.3 + zod: 3.25.76 + transitivePeerDependencies: + - supports-color + + '@eslint-react/var@2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3)': + dependencies: + '@eslint-react/ast': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@eslint-react/eff': 2.13.0 + '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.60.0 + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + eslint: 9.39.4(jiti@1.21.6) + ts-pattern: 5.9.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@eslint/compat@2.1.0(eslint@9.39.4(jiti@1.21.6))': dependencies: - '@eslint/object-schema': 2.1.6 + '@eslint/core': 1.2.1 + optionalDependencies: + eslint: 9.39.4(jiti@1.21.6) + + '@eslint/config-array@0.21.2': + dependencies: + '@eslint/object-schema': 2.1.7 debug: 4.4.3 - minimatch: 3.1.2 + minimatch: 3.1.5 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.3.1': {} + '@eslint/config-helpers@0.4.2': + dependencies: + '@eslint/core': 0.17.0 + + '@eslint/config-helpers@0.5.5': + dependencies: + '@eslint/core': 1.2.1 - '@eslint/core@0.13.0': + '@eslint/core@0.17.0': dependencies: '@types/json-schema': 7.0.15 - '@eslint/core@0.15.2': + '@eslint/core@1.2.1': dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.3.1': + '@eslint/eslintrc@3.3.5': dependencies: - ajv: 6.12.6 + ajv: 6.15.0 debug: 4.4.3 espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 + js-yaml: 4.1.1 + minimatch: 3.1.5 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - '@eslint/js@9.35.0': {} + '@eslint/js@9.39.4': {} + + '@eslint/markdown@7.5.1': + dependencies: + '@eslint/core': 0.17.0 + '@eslint/plugin-kit': 0.4.1 + github-slugger: 2.0.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-frontmatter: 2.0.1 + mdast-util-gfm: 3.1.0 + micromark-extension-frontmatter: 2.0.0 + micromark-extension-gfm: 3.0.0 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + + '@eslint/object-schema@2.1.7': {} - '@eslint/object-schema@2.1.6': {} + '@eslint/plugin-kit@0.4.1': + dependencies: + '@eslint/core': 0.17.0 + levn: 0.4.1 - '@eslint/plugin-kit@0.2.8': + '@eslint/plugin-kit@0.6.1': dependencies: - '@eslint/core': 0.13.0 + '@eslint/core': 1.2.1 levn: 0.4.1 - '@eslint/plugin-kit@0.3.5': + '@eslint/plugin-kit@0.7.1': dependencies: - '@eslint/core': 0.15.2 + '@eslint/core': 1.2.1 levn: 0.4.1 '@expo/cli@54.0.22(expo-router@6.0.22)(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))': @@ -9069,6 +9502,8 @@ snapshots: '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/sourcemap-codec@1.5.5': {} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -9119,13 +9554,6 @@ snapshots: hey-listen: 1.0.8 tslib: 2.8.1 - '@napi-rs/wasm-runtime@0.2.12': - dependencies: - '@emnapi/core': 1.5.0 - '@emnapi/runtime': 1.5.0 - '@tybys/wasm-util': 0.10.1 - optional: true - '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -9138,7 +9566,7 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - '@nolyfill/is-core-module@1.0.39': {} + '@ota-meshi/ast-token-store@0.3.0': {} '@pkgjs/parseargs@0.11.0': optional: true @@ -9530,8 +9958,6 @@ snapshots: dependencies: nanoid: 3.3.11 - '@rtsao/scc@1.1.0': {} - '@samverschueren/stream-to-observable@0.3.1(rxjs@6.6.7)': dependencies: any-observable: 0.3.0(rxjs@6.6.7) @@ -9549,6 +9975,8 @@ snapshots: '@sinclair/typebox@0.27.8': {} + '@sindresorhus/base62@1.0.0': {} + '@sinonjs/commons@3.0.1': dependencies: type-detect: 4.0.8 @@ -9557,10 +9985,20 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 - '@tanstack/eslint-plugin-query@5.89.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3)': + '@stylistic/eslint-plugin@5.10.0(eslint@9.39.4(jiti@1.21.6))': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@1.21.6)) + '@typescript-eslint/types': 8.60.0 + eslint: 9.39.4(jiti@1.21.6) + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + estraverse: 5.3.0 + picomatch: 4.0.3 + + '@tanstack/eslint-plugin-query@5.89.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3)': dependencies: - '@typescript-eslint/utils': 8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) - eslint: 9.35.0(jiti@1.21.6) + '@typescript-eslint/utils': 8.44.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + eslint: 9.39.4(jiti@1.21.6) transitivePeerDependencies: - supports-color - typescript @@ -9607,11 +10045,6 @@ snapshots: '@tootallnate/once@2.0.0': {} - '@tybys/wasm-util@0.10.1': - dependencies: - tslib: 2.8.1 - optional: true - '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.28.4 @@ -9637,14 +10070,14 @@ snapshots: dependencies: '@types/node': 22.9.1 - '@types/eslint@9.6.1': + '@types/debug@4.1.13': dependencies: - '@types/estree': 1.0.6 - '@types/json-schema': 7.0.15 - optional: true + '@types/ms': 2.1.0 '@types/estree@1.0.6': {} + '@types/estree@1.0.9': {} + '@types/graceful-fs@4.1.9': dependencies: '@types/node': 22.9.1 @@ -9678,14 +10111,18 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/json5@0.0.29': {} - '@types/lodash.memoize@4.1.9': dependencies: '@types/lodash': 4.17.13 '@types/lodash@4.17.13': {} + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/ms@2.1.0': {} + '@types/node@16.9.1': {} '@types/node@22.9.1': @@ -9702,37 +10139,38 @@ snapshots: '@types/tough-cookie@4.0.5': {} + '@types/unist@3.0.3': {} + '@types/yargs-parser@21.0.3': {} '@types/yargs@17.0.33': dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.44.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3)': dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.44.0 - '@typescript-eslint/type-utils': 8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) - '@typescript-eslint/utils': 8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.44.0 - eslint: 9.35.0(jiti@1.21.6) - graphemer: 1.4.0 + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.60.0 + '@typescript-eslint/type-utils': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.60.0 + eslint: 9.39.4(jiti@1.21.6) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.9.3) + ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3)': + '@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.44.0 - '@typescript-eslint/types': 8.44.0 - '@typescript-eslint/typescript-estree': 8.44.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.44.0 + '@typescript-eslint/scope-manager': 8.60.0 + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/typescript-estree': 8.60.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.60.0 debug: 4.4.3 - eslint: 9.35.0(jiti@1.21.6) + eslint: 9.39.4(jiti@1.21.6) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -9740,35 +10178,69 @@ snapshots: '@typescript-eslint/project-service@8.44.0(typescript@5.9.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.44.0(typescript@5.9.3) - '@typescript-eslint/types': 8.44.0 + '@typescript-eslint/types': 8.60.0 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color + '@typescript-eslint/project-service@8.60.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.60.0(typescript@5.9.3) + '@typescript-eslint/types': 8.60.0 + debug: 4.4.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/rule-tester@8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/parser': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.60.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + ajv: 6.15.0 + eslint: 9.39.4(jiti@1.21.6) + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + semver: 7.8.1 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/scope-manager@8.44.0': dependencies: '@typescript-eslint/types': 8.44.0 '@typescript-eslint/visitor-keys': 8.44.0 + '@typescript-eslint/scope-manager@8.60.0': + dependencies: + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/visitor-keys': 8.60.0 + '@typescript-eslint/tsconfig-utils@8.44.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.60.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.44.0 - '@typescript-eslint/typescript-estree': 8.44.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) + typescript: 5.9.3 + + '@typescript-eslint/type-utils@8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/typescript-estree': 8.60.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) debug: 4.4.3 - eslint: 9.35.0(jiti@1.21.6) - ts-api-utils: 2.1.0(typescript@5.9.3) + eslint: 9.39.4(jiti@1.21.6) + ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color '@typescript-eslint/types@8.44.0': {} + '@typescript-eslint/types@8.60.0': {} + '@typescript-eslint/typescript-estree@8.44.0(typescript@5.9.3)': dependencies: '@typescript-eslint/project-service': 8.44.0(typescript@5.9.3) @@ -9785,13 +10257,39 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.60.0(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0(jiti@1.21.6)) + '@typescript-eslint/project-service': 8.60.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.60.0(typescript@5.9.3) + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/visitor-keys': 8.60.0 + debug: 4.4.3 + minimatch: 10.2.5 + semver: 7.8.1 + tinyglobby: 0.2.15 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.44.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.4(jiti@1.21.6)) '@typescript-eslint/scope-manager': 8.44.0 '@typescript-eslint/types': 8.44.0 '@typescript-eslint/typescript-estree': 8.44.0(typescript@5.9.3) - eslint: 9.35.0(jiti@1.21.6) + eslint: 9.39.4(jiti@1.21.6) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@1.21.6)) + '@typescript-eslint/scope-manager': 8.60.0 + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/typescript-estree': 8.60.0(typescript@5.9.3) + eslint: 9.39.4(jiti@1.21.6) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -9801,66 +10299,12 @@ snapshots: '@typescript-eslint/types': 8.44.0 eslint-visitor-keys: 4.2.1 - '@ungap/structured-clone@1.3.0': {} - - '@unrs/resolver-binding-android-arm-eabi@1.11.1': - optional: true - - '@unrs/resolver-binding-android-arm64@1.11.1': - optional: true - - '@unrs/resolver-binding-darwin-arm64@1.11.1': - optional: true - - '@unrs/resolver-binding-darwin-x64@1.11.1': - optional: true - - '@unrs/resolver-binding-freebsd-x64@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-x64-musl@1.11.1': - optional: true - - '@unrs/resolver-binding-wasm32-wasi@1.11.1': + '@typescript-eslint/visitor-keys@8.60.0': dependencies: - '@napi-rs/wasm-runtime': 0.2.12 - optional: true - - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': - optional: true - - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': - optional: true + '@typescript-eslint/types': 8.60.0 + eslint-visitor-keys: 5.0.1 - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': - optional: true + '@ungap/structured-clone@1.3.0': {} '@urql/core@5.0.8': dependencies: @@ -9874,6 +10318,49 @@ snapshots: '@urql/core': 5.0.8 wonka: 6.3.4 + '@vitest/eslint-plugin@1.6.18(@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.60.0 + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + eslint: 9.39.4(jiti@1.21.6) + optionalDependencies: + '@typescript-eslint/eslint-plugin': 8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@vue/compiler-core@3.5.34': + dependencies: + '@babel/parser': 7.29.7 + '@vue/shared': 3.5.34 + entities: 7.0.1 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.34': + dependencies: + '@vue/compiler-core': 3.5.34 + '@vue/shared': 3.5.34 + + '@vue/compiler-sfc@3.5.34': + dependencies: + '@babel/parser': 7.29.7 + '@vue/compiler-core': 3.5.34 + '@vue/compiler-dom': 3.5.34 + '@vue/compiler-ssr': 3.5.34 + '@vue/shared': 3.5.34 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.15 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.34': + dependencies: + '@vue/compiler-dom': 3.5.34 + '@vue/shared': 3.5.34 + + '@vue/shared@3.5.34': {} + '@xmldom/xmldom@0.8.10': {} JSONStream@1.3.5: @@ -9901,14 +10388,20 @@ snapshots: dependencies: acorn: 8.15.0 + acorn-jsx@5.3.2(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + acorn-walk@8.3.4: dependencies: - acorn: 8.14.0 + acorn: 8.15.0 acorn@8.14.0: {} acorn@8.15.0: {} + acorn@8.16.0: {} + agent-base@6.0.2: dependencies: debug: 4.4.3 @@ -9922,7 +10415,7 @@ snapshots: clean-stack: 4.2.0 indent-string: 5.0.0 - ajv@6.12.6: + ajv@6.15.0: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 @@ -9982,6 +10475,8 @@ snapshots: ansi-styles@6.2.1: {} + ansis@4.3.0: {} + any-base@1.1.0: {} any-observable@0.3.0(rxjs@6.6.7): @@ -10005,6 +10500,8 @@ snapshots: - debug - encoding + are-docs-informative@0.0.2: {} + arg@5.0.2: {} argparse@1.0.10: @@ -10019,74 +10516,10 @@ snapshots: aria-query@5.3.2: {} - array-buffer-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 - array-ify@1.0.0: {} - array-includes@3.1.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - is-string: 1.1.1 - array-timsort@1.0.3: {} - array.prototype.findlast@1.2.5: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-shim-unscopables: 1.0.2 - - array.prototype.findlastindex@1.2.5: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-shim-unscopables: 1.0.2 - - array.prototype.flat@1.3.2: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-shim-unscopables: 1.0.2 - - array.prototype.flatmap@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-shim-unscopables: 1.0.2 - - array.prototype.tosorted@1.1.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-shim-unscopables: 1.0.2 - - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 - asap@2.0.6: {} async-limiter@1.0.1: {} @@ -10098,10 +10531,6 @@ snapshots: stubborn-fs: 1.2.5 when-exit: 2.1.3 - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.0.0 - axios@1.7.5: dependencies: follow-redirects: 1.15.9 @@ -10247,8 +10676,12 @@ snapshots: balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + base64-js@1.5.1: {} + baseline-browser-mapping@2.10.32: {} + baseline-browser-mapping@2.8.4: {} better-opn@3.0.2: @@ -10259,6 +10692,8 @@ snapshots: binary-extensions@2.3.0: {} + birecord@0.1.1: {} + bl@4.1.0: dependencies: buffer: 5.7.1 @@ -10301,6 +10736,10 @@ snapshots: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.6: + dependencies: + balanced-match: 4.0.4 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -10320,6 +10759,14 @@ snapshots: node-releases: 2.0.21 update-browserslist-db: 1.1.3(browserslist@4.26.2) + browserslist@4.28.2: + dependencies: + baseline-browser-mapping: 2.10.32 + caniuse-lite: 1.0.30001793 + electron-to-chromium: 1.5.361 + node-releases: 2.0.46 + update-browserslist-db: 1.2.3(browserslist@4.28.2) + bs-logger@0.2.6: dependencies: fast-json-stable-stringify: 2.1.0 @@ -10345,22 +10792,7 @@ snapshots: bytes@3.1.2: {} - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bind@1.0.8: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 - set-function-length: 1.2.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 + cac@7.0.0: {} callsites@3.1.0: {} @@ -10376,6 +10808,10 @@ snapshots: caniuse-lite@1.0.30001743: {} + caniuse-lite@1.0.30001793: {} + + ccount@2.0.1: {} + centra@2.7.0: dependencies: follow-redirects: 1.15.9 @@ -10412,10 +10848,14 @@ snapshots: chalk@5.3.0: {} + change-case@5.4.4: {} + char-regex@1.0.2: {} char-regex@2.0.2: {} + character-entities@2.0.2: {} + chardet@0.7.0: {} chokidar@3.6.0: @@ -10456,7 +10896,7 @@ snapshots: ci-info@3.9.0: {} - ci-info@4.3.0: {} + ci-info@4.4.0: {} cjs-module-lexer@1.4.1: {} @@ -10562,11 +11002,19 @@ snapshots: has-own-prop: 2.0.0 repeat-string: 1.6.1 + comment-parser@1.4.5: {} + + comment-parser@1.4.6: {} + + comment-parser@1.4.7: {} + compare-func@2.0.0: dependencies: array-ify: 1.0.0 dot-prop: 5.3.0 + compare-versions@6.1.1: {} + compressible@2.0.18: dependencies: mime-db: 1.53.0 @@ -10585,6 +11033,10 @@ snapshots: concat-map@0.0.1: {} + confbox@0.1.8: {} + + confbox@0.2.4: {} + config-chain@1.1.13: dependencies: ini: 1.3.8 @@ -10627,6 +11079,10 @@ snapshots: dependencies: browserslist: 4.26.2 + core-js-compat@3.49.0: + dependencies: + browserslist: 4.28.2 + core-util-is@1.0.3: {} cosmiconfig-typescript-loader@5.1.0(@types/node@22.9.1)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3): @@ -10728,24 +11184,6 @@ snapshots: whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - data-view-buffer@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - date-fns@1.30.1: {} dayjs@1.11.18: {} @@ -10768,6 +11206,10 @@ snapshots: decimal.js@10.4.3: {} + decode-named-character-reference@1.3.0: + dependencies: + character-entities: 2.0.2 + decode-uri-component@0.2.2: {} dedent@1.5.3: {} @@ -10789,22 +11231,10 @@ snapshots: dependencies: clone: 1.0.4 - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - define-lazy-prop@2.0.0: {} define-lazy-prop@3.0.0: {} - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - del@7.1.0: dependencies: globby: 13.2.2 @@ -10822,6 +11252,8 @@ snapshots: depd@2.0.0: {} + dequal@2.0.3: {} + destroy@1.2.0: {} detect-libc@1.0.3: {} @@ -10832,6 +11264,10 @@ snapshots: detect-node-es@1.1.0: {} + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + didyoumean@1.2.2: {} diff-sequences@29.6.3: {} @@ -10844,10 +11280,6 @@ snapshots: dlv@1.1.3: {} - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - dom-accessibility-api@0.6.3: {} dom-serializer@2.0.0: @@ -10888,18 +11320,14 @@ snapshots: dotenv@16.4.5: {} - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - eastasianwidth@0.2.0: {} ee-first@1.1.1: {} electron-to-chromium@1.5.218: {} + electron-to-chromium@1.5.361: {} + electron-to-chromium@1.5.63: {} elegant-spinner@1.0.1: {} @@ -10912,6 +11340,8 @@ snapshots: emoji-regex@9.2.2: {} + empathic@2.0.1: {} + encodeurl@1.0.2: {} encodeurl@2.0.0: {} @@ -10923,6 +11353,8 @@ snapshots: entities@4.5.0: {} + entities@7.0.1: {} + env-editor@0.4.2: {} env-paths@2.2.1: {} @@ -10937,107 +11369,6 @@ snapshots: dependencies: stackframe: 1.3.4 - es-abstract@1.24.0: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.8 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-negative-zero: 2.0.3 - is-regex: 1.2.1 - is-set: 2.0.3 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.1 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - stop-iteration-iterator: 1.1.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.7 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.19 - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-iterator-helpers@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-set-tostringtag: 2.1.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - iterator.prototype: 1.1.5 - safe-array-concat: 1.1.3 - - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-shim-unscopables@1.0.2: - dependencies: - hasown: 2.0.2 - - es-to-primitive@1.3.0: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 - escalade@3.2.0: {} escape-goat@4.0.0: {} @@ -11060,123 +11391,71 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-expo@9.2.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3): + eslint-compat-utils@0.5.1(eslint@9.39.4(jiti@1.21.6)): dependencies: - '@typescript-eslint/eslint-plugin': 8.44.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) - '@typescript-eslint/parser': 8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) - eslint: 9.35.0(jiti@1.21.6) - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint-plugin-import@2.31.0)(eslint@9.35.0(jiti@1.21.6)) - eslint-plugin-expo: 0.1.4(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.35.0(jiti@1.21.6)) - eslint-plugin-react: 7.37.5(eslint@9.35.0(jiti@1.21.6)) - eslint-plugin-react-hooks: 5.2.0(eslint@9.35.0(jiti@1.21.6)) - globals: 16.4.0 - transitivePeerDependencies: - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - eslint-plugin-import-x - - supports-color - - typescript + eslint: 9.39.4(jiti@1.21.6) + semver: 7.7.2 - eslint-config-prettier@10.1.8(eslint@9.35.0(jiti@1.21.6)): + eslint-config-flat-gitignore@2.3.0(eslint@9.39.4(jiti@1.21.6)): dependencies: - eslint: 9.35.0(jiti@1.21.6) + '@eslint/compat': 2.1.0(eslint@9.39.4(jiti@1.21.6)) + eslint: 9.39.4(jiti@1.21.6) - eslint-import-context@0.1.9(unrs-resolver@1.11.1): + eslint-flat-config-utils@3.2.0: dependencies: - get-tsconfig: 4.10.1 - stable-hash-x: 0.2.0 - optionalDependencies: - unrs-resolver: 1.11.1 + '@eslint/config-helpers': 0.5.5 + pathe: 2.0.3 - eslint-import-resolver-node@0.3.9: + eslint-json-compat-utils@0.2.3(eslint@9.39.4(jiti@1.21.6))(jsonc-eslint-parser@3.1.0): dependencies: - debug: 3.2.7 - is-core-module: 2.15.1 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color + eslint: 9.39.4(jiti@1.21.6) + esquery: 1.6.0 + jsonc-eslint-parser: 3.1.0 - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint-plugin-import@2.31.0)(eslint@9.35.0(jiti@1.21.6)): + eslint-merge-processors@2.0.0(eslint@9.39.4(jiti@1.21.6)): dependencies: - '@nolyfill/is-core-module': 1.0.39 - debug: 4.4.3 - enhanced-resolve: 5.17.1 - eslint: 9.35.0(jiti@1.21.6) - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.35.0(jiti@1.21.6)) - fast-glob: 3.3.2 - get-tsconfig: 4.8.1 - is-bun-module: 1.2.1 - is-glob: 4.0.3 - optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.35.0(jiti@1.21.6)) - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color + eslint: 9.39.4(jiti@1.21.6) - eslint-import-resolver-typescript@4.4.4(eslint-plugin-import@2.31.0)(eslint@9.35.0(jiti@1.21.6)): + eslint-plugin-antfu@3.2.3(eslint@9.39.4(jiti@1.21.6)): dependencies: - debug: 4.4.3 - eslint: 9.35.0(jiti@1.21.6) - eslint-import-context: 0.1.9(unrs-resolver@1.11.1) - get-tsconfig: 4.10.1 - is-bun-module: 2.0.0 - stable-hash-x: 0.2.0 - tinyglobby: 0.2.15 - unrs-resolver: 1.11.1 - optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.35.0(jiti@1.21.6)) - transitivePeerDependencies: - - supports-color + eslint: 9.39.4(jiti@1.21.6) - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.35.0(jiti@1.21.6)): + eslint-plugin-command@3.5.2(@typescript-eslint/rule-tester@8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.60.0(typescript@5.9.3))(@typescript-eslint/utils@8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.6)): dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) - eslint: 9.35.0(jiti@1.21.6) - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint-plugin-import@2.31.0)(eslint@9.35.0(jiti@1.21.6)) - transitivePeerDependencies: - - supports-color + '@es-joy/jsdoccomment': 0.84.0 + '@typescript-eslint/rule-tester': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.60.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + eslint: 9.39.4(jiti@1.21.6) - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.35.0(jiti@1.21.6)): + eslint-plugin-depend@1.5.0(eslint@9.39.4(jiti@1.21.6)): dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) - eslint: 9.35.0(jiti@1.21.6) - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import@2.31.0)(eslint@9.35.0(jiti@1.21.6)) - transitivePeerDependencies: - - supports-color + empathic: 2.0.1 + eslint: 9.39.4(jiti@1.21.6) + module-replacements: 2.11.0 + semver: 7.7.2 - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.35.0(jiti@1.21.6)): + eslint-plugin-es-x@7.8.0(eslint@9.39.4(jiti@1.21.6)): dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) - eslint: 9.35.0(jiti@1.21.6) - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint-plugin-import@2.31.0)(eslint@9.35.0(jiti@1.21.6)) - transitivePeerDependencies: - - supports-color + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.4(jiti@1.21.6)) + '@eslint-community/regexpp': 4.12.1 + eslint: 9.39.4(jiti@1.21.6) + eslint-compat-utils: 0.5.1(eslint@9.39.4(jiti@1.21.6)) - eslint-plugin-expo@0.1.4(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3): + eslint-plugin-expo@1.0.3(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3): dependencies: - '@typescript-eslint/types': 8.44.0 - '@typescript-eslint/utils': 8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) - eslint: 9.35.0(jiti@1.21.6) + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + eslint: 9.39.4(jiti@1.21.6) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-i18n-json@4.0.1(eslint@9.35.0(jiti@1.21.6)): + eslint-plugin-i18n-json@4.0.1(eslint@9.39.4(jiti@1.21.6)): dependencies: '@formatjs/icu-messageformat-parser': 2.9.4 chalk: 2.4.2 - eslint: 9.35.0(jiti@1.21.6) + eslint: 9.39.4(jiti@1.21.6) indent-string: 3.2.0 jest-diff: 22.4.3 lodash: 4.17.21 @@ -11185,130 +11464,222 @@ snapshots: plur: 2.1.2 pretty-format: 22.4.3 - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.35.0(jiti@1.21.6)): + eslint-plugin-import-lite@0.5.2(eslint@9.39.4(jiti@1.21.6)): dependencies: - '@rtsao/scc': 1.1.0 - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.3 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 9.35.0(jiti@1.21.6) - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.35.0(jiti@1.21.6)) - hasown: 2.0.2 - is-core-module: 2.15.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.1 - semver: 6.3.1 - string.prototype.trimend: 1.0.9 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) + eslint: 9.39.4(jiti@1.21.6) + + eslint-plugin-jsdoc@62.9.0(eslint@9.39.4(jiti@1.21.6)): + dependencies: + '@es-joy/jsdoccomment': 0.86.0 + '@es-joy/resolve.exports': 1.2.0 + are-docs-informative: 0.0.2 + comment-parser: 1.4.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint: 9.39.4(jiti@1.21.6) + espree: 11.2.0 + esquery: 1.7.0 + html-entities: 2.6.0 + object-deep-merge: 2.0.1 + parse-imports-exports: 0.2.4 + semver: 7.8.1 + spdx-expression-parse: 4.0.0 + to-valid-identifier: 1.0.0 transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.35.0(jiti@1.21.6)): + eslint-plugin-jsonc@3.1.2(eslint@9.39.4(jiti@1.21.6)): dependencies: - '@rtsao/scc': 1.1.0 - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.3 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 9.35.0(jiti@1.21.6) - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.35.0(jiti@1.21.6)) - hasown: 2.0.2 - is-core-module: 2.15.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.1 - semver: 6.3.1 - string.prototype.trimend: 1.0.9 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.4(jiti@1.21.6)) + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.6.1 + '@ota-meshi/ast-token-store': 0.3.0 + diff-sequences: 29.6.3 + eslint: 9.39.4(jiti@1.21.6) + eslint-json-compat-utils: 0.2.3(eslint@9.39.4(jiti@1.21.6))(jsonc-eslint-parser@3.1.0) + jsonc-eslint-parser: 3.1.0 + natural-compare: 1.4.0 + synckit: 0.11.12 transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color + - '@eslint/json' - eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.44.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint@9.35.0(jiti@1.21.6))(jest@29.7.0(@types/node@22.9.1))(typescript@5.9.3): + eslint-plugin-n@17.24.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) - eslint: 9.35.0(jiti@1.21.6) - optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.44.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) - jest: 29.7.0(@types/node@22.9.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.4(jiti@1.21.6)) + enhanced-resolve: 5.17.1 + eslint: 9.39.4(jiti@1.21.6) + eslint-plugin-es-x: 7.8.0(eslint@9.39.4(jiti@1.21.6)) + get-tsconfig: 4.10.1 + globals: 15.15.0 + globrex: 0.1.2 + ignore: 5.3.2 + semver: 7.7.2 + ts-declaration-location: 1.0.7(typescript@5.9.3) + transitivePeerDependencies: + - typescript + + eslint-plugin-no-only-tests@3.4.0: {} + + eslint-plugin-perfectionist@5.9.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3): + dependencies: + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + eslint: 9.39.4(jiti@1.21.6) + natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.35.0(jiti@1.21.6)))(eslint@9.35.0(jiti@1.21.6))(prettier@3.3.3): + eslint-plugin-pnpm@1.6.1(eslint@9.39.4(jiti@1.21.6)): dependencies: - eslint: 9.35.0(jiti@1.21.6) - prettier: 3.3.3 - prettier-linter-helpers: 1.0.0 - synckit: 0.11.11 - optionalDependencies: - '@types/eslint': 9.6.1 - eslint-config-prettier: 10.1.8(eslint@9.35.0(jiti@1.21.6)) + empathic: 2.0.1 + eslint: 9.39.4(jiti@1.21.6) + jsonc-eslint-parser: 3.1.0 + pathe: 2.0.3 + pnpm-workspace-yaml: 1.6.1 + tinyglobby: 0.2.16 + yaml: 2.9.0 + yaml-eslint-parser: 2.0.0 - eslint-plugin-react-compiler@19.1.0-rc.2(eslint@9.35.0(jiti@1.21.6)): + eslint-plugin-react-compiler@19.1.0-rc.2(eslint@9.39.4(jiti@1.21.6)): dependencies: '@babel/core': 7.28.4 '@babel/parser': 7.28.4 '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.28.4) - eslint: 9.35.0(jiti@1.21.6) + eslint: 9.39.4(jiti@1.21.6) hermes-parser: 0.25.1 zod: 3.23.8 zod-validation-error: 3.4.0(zod@3.23.8) transitivePeerDependencies: - supports-color - eslint-plugin-react-hooks@5.2.0(eslint@9.35.0(jiti@1.21.6)): + eslint-plugin-react-dom@2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3): dependencies: - eslint: 9.35.0(jiti@1.21.6) + '@eslint-react/ast': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@eslint-react/core': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@eslint-react/eff': 2.13.0 + '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@eslint-react/var': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.60.0 + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + compare-versions: 6.1.1 + eslint: 9.39.4(jiti@1.21.6) + ts-pattern: 5.9.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color - eslint-plugin-react@7.37.5(eslint@9.35.0(jiti@1.21.6)): + eslint-plugin-react-hooks-extra@2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3): dependencies: - array-includes: 3.1.8 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.3 - array.prototype.tosorted: 1.1.4 - doctrine: 2.1.0 - es-iterator-helpers: 1.2.1 - eslint: 9.35.0(jiti@1.21.6) - estraverse: 5.3.0 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.9 - object.fromentries: 2.0.8 - object.values: 1.2.1 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.12 - string.prototype.repeat: 1.0.0 + '@eslint-react/ast': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@eslint-react/core': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@eslint-react/eff': 2.13.0 + '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@eslint-react/var': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.60.0 + '@typescript-eslint/type-utils': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + eslint: 9.39.4(jiti@1.21.6) + ts-pattern: 5.9.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + eslint-plugin-react-hooks@7.1.1(eslint@9.39.4(jiti@1.21.6)): + dependencies: + '@babel/core': 7.28.4 + '@babel/parser': 7.28.4 + eslint: 9.39.4(jiti@1.21.6) + hermes-parser: 0.25.1 + zod: 3.25.76 + zod-validation-error: 4.0.2(zod@3.25.76) + transitivePeerDependencies: + - supports-color + + eslint-plugin-react-naming-convention@2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3): + dependencies: + '@eslint-react/ast': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@eslint-react/core': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@eslint-react/eff': 2.13.0 + '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@eslint-react/var': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.60.0 + '@typescript-eslint/type-utils': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + compare-versions: 6.1.1 + eslint: 9.39.4(jiti@1.21.6) + string-ts: 2.3.1 + ts-pattern: 5.9.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color - eslint-plugin-simple-import-sort@12.1.1(eslint@9.35.0(jiti@1.21.6)): + eslint-plugin-react-refresh@0.4.26(eslint@9.39.4(jiti@1.21.6)): dependencies: - eslint: 9.35.0(jiti@1.21.6) + eslint: 9.39.4(jiti@1.21.6) - eslint-plugin-sonarjs@1.0.4(eslint@9.35.0(jiti@1.21.6)): + eslint-plugin-react-rsc@2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3): dependencies: - eslint: 9.35.0(jiti@1.21.6) + '@eslint-react/ast': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@eslint-react/var': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + eslint: 9.39.4(jiti@1.21.6) + ts-pattern: 5.9.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + eslint-plugin-react-web-api@2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3): + dependencies: + '@eslint-react/ast': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@eslint-react/core': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@eslint-react/eff': 2.13.0 + '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@eslint-react/var': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.60.0 + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + birecord: 0.1.1 + eslint: 9.39.4(jiti@1.21.6) + ts-pattern: 5.9.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + eslint-plugin-react-x@2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3): + dependencies: + '@eslint-react/ast': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@eslint-react/core': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@eslint-react/eff': 2.13.0 + '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@eslint-react/var': 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.60.0 + '@typescript-eslint/type-utils': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + compare-versions: 6.1.1 + eslint: 9.39.4(jiti@1.21.6) + is-immutable-type: 5.0.2(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + ts-api-utils: 2.5.0(typescript@5.9.3) + ts-pattern: 5.9.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + eslint-plugin-regexp@3.1.0(eslint@9.39.4(jiti@1.21.6)): + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.4(jiti@1.21.6)) + '@eslint-community/regexpp': 4.12.1 + comment-parser: 1.4.7 + eslint: 9.39.4(jiti@1.21.6) + jsdoc-type-pratt-parser: 7.2.0 + refa: 0.12.1 + regexp-ast-analysis: 0.7.1 + scslre: 0.3.0 eslint-plugin-tailwindcss@3.18.2(tailwindcss@3.4.4): dependencies: @@ -11316,25 +11687,35 @@ snapshots: postcss: 8.4.49 tailwindcss: 3.4.4 - eslint-plugin-testing-library@7.8.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3): + eslint-plugin-testing-library@7.8.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3): dependencies: '@typescript-eslint/scope-manager': 8.44.0 - '@typescript-eslint/utils': 8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) - eslint: 9.35.0(jiti@1.21.6) + '@typescript-eslint/utils': 8.44.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + eslint: 9.39.4(jiti@1.21.6) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-unicorn@59.0.1(eslint@9.35.0(jiti@1.21.6)): + eslint-plugin-toml@1.3.1(eslint@9.39.4(jiti@1.21.6)): dependencies: - '@babel/helper-validator-identifier': 7.27.1 - '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0(jiti@1.21.6)) - '@eslint/plugin-kit': 0.2.8 - ci-info: 4.3.0 + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.6.1 + '@ota-meshi/ast-token-store': 0.3.0 + debug: 4.4.3 + eslint: 9.39.4(jiti@1.21.6) + toml-eslint-parser: 1.0.3 + transitivePeerDependencies: + - supports-color + + eslint-plugin-unicorn@63.0.0(eslint@9.39.4(jiti@1.21.6)): + dependencies: + '@babel/helper-validator-identifier': 7.29.7 + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.4(jiti@1.21.6)) + change-case: 5.4.4 + ci-info: 4.4.0 clean-regexp: 1.0.0 - core-js-compat: 3.43.0 - eslint: 9.35.0(jiti@1.21.6) - esquery: 1.6.0 + core-js-compat: 3.49.0 + eslint: 9.39.4(jiti@1.21.6) find-up-simple: 1.0.1 globals: 16.4.0 indent-string: 5.0.0 @@ -11342,15 +11723,45 @@ snapshots: jsesc: 3.1.0 pluralize: 8.0.0 regexp-tree: 0.1.27 - regjsparser: 0.12.0 - semver: 7.7.2 - strip-indent: 4.1.0 + regjsparser: 0.13.1 + semver: 7.8.1 + strip-indent: 4.1.1 - eslint-plugin-unused-imports@4.2.0(@typescript-eslint/eslint-plugin@8.44.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint@9.35.0(jiti@1.21.6)): + eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.6)): dependencies: - eslint: 9.35.0(jiti@1.21.6) + eslint: 9.39.4(jiti@1.21.6) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.44.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + + eslint-plugin-vue@10.9.1(@stylistic/eslint-plugin@5.10.0(eslint@9.39.4(jiti@1.21.6)))(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.6))(vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@1.21.6))): + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.4(jiti@1.21.6)) + eslint: 9.39.4(jiti@1.21.6) + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 7.1.1 + semver: 7.7.2 + vue-eslint-parser: 10.4.0(eslint@9.39.4(jiti@1.21.6)) + xml-name-validator: 4.0.0 + optionalDependencies: + '@stylistic/eslint-plugin': 5.10.0(eslint@9.39.4(jiti@1.21.6)) + '@typescript-eslint/parser': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + + eslint-plugin-yml@3.3.2(eslint@9.39.4(jiti@1.21.6)): + dependencies: + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.7.1 + '@ota-meshi/ast-token-store': 0.3.0 + diff-sequences: 29.6.3 + escape-string-regexp: 5.0.0 + eslint: 9.39.4(jiti@1.21.6) + natural-compare: 1.4.0 + yaml-eslint-parser: 2.0.0 + + eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.34)(eslint@9.39.4(jiti@1.21.6)): + dependencies: + '@vue/compiler-sfc': 3.5.34 + eslint: 9.39.4(jiti@1.21.6) eslint-scope@8.4.0: dependencies: @@ -11361,22 +11772,23 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.35.0(jiti@1.21.6): + eslint-visitor-keys@5.0.1: {} + + eslint@9.39.4(jiti@1.21.6): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0(jiti@1.21.6)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.4(jiti@1.21.6)) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.21.0 - '@eslint/config-helpers': 0.3.1 - '@eslint/core': 0.15.2 - '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.35.0 - '@eslint/plugin-kit': 0.3.5 + '@eslint/config-array': 0.21.2 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.5 + '@eslint/js': 9.39.4 + '@eslint/plugin-kit': 0.4.1 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.6 - '@types/json-schema': 7.0.15 - ajv: 6.12.6 + ajv: 6.15.0 chalk: 4.1.2 cross-spawn: 7.0.6 debug: 4.4.3 @@ -11395,7 +11807,7 @@ snapshots: is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 lodash.merge: 4.6.2 - minimatch: 3.1.2 + minimatch: 3.1.5 natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: @@ -11409,18 +11821,30 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 4.2.1 + espree@11.2.0: + dependencies: + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + eslint-visitor-keys: 5.0.1 + esprima@4.0.1: {} esquery@1.6.0: dependencies: estraverse: 5.3.0 + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 estraverse@5.3.0: {} + estree-walker@2.0.2: {} + esutils@2.0.3: {} etag@1.8.1: {} @@ -11705,6 +12129,8 @@ snapshots: exponential-backoff@3.1.1: {} + exsolve@1.0.8: {} + external-editor@3.1.0: dependencies: chardet: 0.7.0 @@ -11713,8 +12139,6 @@ snapshots: fast-deep-equal@3.1.3: {} - fast-diff@1.3.0: {} - fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -11727,12 +12151,26 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-string-truncated-width@3.0.3: {} + + fast-string-width@3.0.2: + dependencies: + fast-string-truncated-width: 3.0.3 + fast-uri@3.0.3: {} + fast-wrap-ansi@0.2.2: + dependencies: + fast-string-width: 3.0.2 + fastq@1.17.1: dependencies: reusify: 1.0.4 + fault@2.0.1: + dependencies: + format: 0.2.2 + fb-watchman@2.0.2: dependencies: bser: 2.1.1 @@ -11755,6 +12193,10 @@ snapshots: optionalDependencies: picomatch: 4.0.3 + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + figures@1.7.0: dependencies: escape-string-regexp: 1.0.5 @@ -11837,10 +12279,6 @@ snapshots: fontfaceobserver@2.3.0: {} - for-each@0.3.5: - dependencies: - is-callable: 1.2.7 - foreground-child@3.3.0: dependencies: cross-spawn: 7.0.6 @@ -11852,6 +12290,8 @@ snapshots: combined-stream: 1.0.8 mime-types: 2.1.35 + format@0.2.2: {} + framer-motion@6.5.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@motionone/dom': 10.12.0 @@ -11880,63 +12320,24 @@ snapshots: function-bind@1.1.2: {} - function.prototype.name@1.1.8: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - functions-have-names: 1.2.3 - hasown: 2.0.2 - is-callable: 1.2.7 - - functions-have-names@1.2.3: {} - gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} get-east-asian-width@1.3.0: {} - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - math-intrinsics: 1.1.0 - get-nonce@1.0.1: {} get-package-type@0.1.0: {} - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 - get-stream@6.0.1: {} get-stream@8.0.1: {} - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - get-tsconfig@4.10.1: dependencies: resolve-pkg-maps: 1.0.0 - get-tsconfig@4.8.1: - dependencies: - resolve-pkg-maps: 1.0.0 - getenv@2.0.0: {} gifwrap@0.10.1: @@ -11950,6 +12351,8 @@ snapshots: meow: 12.1.1 split2: 4.2.0 + github-slugger@2.0.0: {} + github-url-from-git@1.5.0: {} glob-parent@5.1.2: @@ -12008,12 +12411,11 @@ snapshots: globals@14.0.0: {} + globals@15.15.0: {} + globals@16.4.0: {} - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 + globals@17.6.0: {} globby@13.2.2: dependencies: @@ -12023,14 +12425,12 @@ snapshots: merge2: 1.4.1 slash: 4.0.0 - gopd@1.2.0: {} + globrex@0.1.2: {} graceful-fs@4.2.10: {} graceful-fs@4.2.11: {} - graphemer@1.4.0: {} - handlebars@4.7.8: dependencies: minimist: 1.2.8 @@ -12044,28 +12444,12 @@ snapshots: dependencies: ansi-regex: 2.1.1 - has-bigints@1.0.2: {} - has-flag@3.0.0: {} has-flag@4.0.0: {} has-own-prop@2.0.0: {} - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -12102,6 +12486,8 @@ snapshots: dependencies: whatwg-encoding: 2.0.0 + html-entities@2.6.0: {} + html-escaper@2.0.2: {} html-parse-stringify@3.0.1: @@ -12266,59 +12652,24 @@ snapshots: wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.2 - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.1.0 - invariant@2.2.4: dependencies: loose-envify: 1.4.0 irregular-plurals@1.4.0: {} - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-arrayish@0.2.1: {} is-arrayish@0.3.2: {} - is-async-function@2.0.0: - dependencies: - has-tostringtag: 1.0.2 - - is-bigint@1.1.0: - dependencies: - has-bigints: 1.0.2 - is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 - is-boolean-object@1.2.2: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - is-builtin-module@5.0.0: dependencies: builtin-modules: 5.0.0 - is-bun-module@1.2.1: - dependencies: - semver: 7.7.2 - - is-bun-module@2.0.0: - dependencies: - semver: 7.7.2 - - is-callable@1.2.7: {} - is-core-module@2.15.1: dependencies: hasown: 2.0.2 @@ -12327,27 +12678,12 @@ snapshots: dependencies: hasown: 2.0.2 - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 - - is-date-object@1.1.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - is-docker@2.2.1: {} is-docker@3.0.0: {} is-extglob@2.1.1: {} - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 - is-fullwidth-code-point@1.0.0: dependencies: number-is-nan: 1.0.1 @@ -12366,14 +12702,20 @@ snapshots: is-generator-fn@2.1.0: {} - is-generator-function@1.0.10: - dependencies: - has-tostringtag: 1.0.2 - is-glob@4.0.3: dependencies: is-extglob: 2.1.1 + is-immutable-type@5.0.2(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3): + dependencies: + '@typescript-eslint/type-utils': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + eslint: 9.39.4(jiti@1.21.6) + ts-api-utils: 2.5.0(typescript@5.9.3) + ts-declaration-location: 1.0.7(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + is-in-ci@1.0.0: {} is-inside-container@1.0.0: @@ -12389,17 +12731,8 @@ snapshots: is-interactive@2.0.0: {} - is-map@2.0.3: {} - - is-negative-zero@2.0.3: {} - is-npm@6.0.0: {} - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - is-number@7.0.0: {} is-obj@2.0.0: {} @@ -12416,65 +12749,26 @@ snapshots: is-promise@2.2.2: {} - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - is-scoped@3.0.0: dependencies: scoped-regex: 3.0.0 - is-set@2.0.3: {} - - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.4 - is-stream@1.1.0: {} is-stream@2.0.1: {} is-stream@3.0.0: {} - is-string@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 - is-text-path@2.0.0: dependencies: text-extensions: 2.4.0 - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.19 - is-unicode-supported@0.1.0: {} is-unicode-supported@1.3.0: {} is-url-superb@6.1.0: {} - is-weakmap@2.0.2: {} - - is-weakref@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-weakset@2.0.3: - dependencies: - call-bind: 1.0.8 - get-intrinsic: 1.3.0 - is-wsl@2.2.0: dependencies: is-docker: 2.2.1 @@ -12483,8 +12777,6 @@ snapshots: dependencies: is-inside-container: 1.0.0 - isarray@2.0.5: {} - isexe@2.0.0: {} isomorphic-fetch@3.0.0: @@ -12537,15 +12829,6 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - iterator.prototype@1.1.5: - dependencies: - define-data-property: 1.1.4 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - has-symbols: 1.1.0 - set-function-name: 2.0.2 - jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 @@ -12962,8 +13245,16 @@ snapshots: dependencies: argparse: 2.0.1 + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + jsc-safe-url@0.2.4: {} + jsdoc-type-pratt-parser@7.1.1: {} + + jsdoc-type-pratt-parser@7.2.0: {} + jsdom@20.0.3: dependencies: abab: 2.0.6 @@ -13011,20 +13302,15 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - json5@1.0.2: - dependencies: - minimist: 1.2.8 - json5@2.2.3: {} - jsonparse@1.3.1: {} - - jsx-ast-utils@3.3.5: + jsonc-eslint-parser@3.1.0: dependencies: - array-includes: 3.1.8 - array.prototype.flat: 1.3.2 - object.assign: 4.1.7 - object.values: 1.2.1 + acorn: 8.15.0 + eslint-visitor-keys: 5.0.1 + semver: 7.7.2 + + jsonparse@1.3.1: {} keyv@4.5.4: dependencies: @@ -13234,6 +13520,12 @@ snapshots: transitivePeerDependencies: - debug + local-pkg@1.2.1: + dependencies: + mlly: 1.8.2 + pkg-types: 2.3.1 + quansync: 0.2.11 + locate-path@3.0.0: dependencies: p-locate: 3.0.0 @@ -13311,31 +13603,150 @@ snapshots: strip-ansi: 7.1.0 wrap-ansi: 9.0.0 + longest-streak@3.1.0: {} + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 lru-cache@10.4.3: {} - lru-cache@11.2.4: {} + lru-cache@11.2.4: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + make-dir@4.0.0: + dependencies: + semver: 7.7.2 + + make-error@1.3.6: {} + + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 + + markdown-table@3.0.4: {} + + marky@1.2.5: {} + + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + mdast-util-from-markdown@2.0.3: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-frontmatter@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + escape-string-regexp: 5.0.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + micromark-extension-frontmatter: 2.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + + mdast-util-gfm-footnote@2.1.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color - lru-cache@5.1.1: + mdast-util-gfm-table@2.0.0: dependencies: - yallist: 3.1.1 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color - make-dir@4.0.0: + mdast-util-gfm-task-list-item@2.0.0: dependencies: - semver: 7.7.2 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color - make-error@1.3.6: {} + mdast-util-gfm@3.1.0: + dependencies: + mdast-util-from-markdown: 2.0.3 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color - makeerror@1.0.12: + mdast-util-phrasing@4.1.0: dependencies: - tmpl: 1.0.5 + '@types/mdast': 4.0.4 + unist-util-is: 6.0.1 - marky@1.2.5: {} + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.1.0 + zwitch: 2.0.4 - math-intrinsics@1.1.0: {} + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 mdn-data@2.0.14: {} @@ -13701,6 +14112,204 @@ snapshots: - supports-color - utf-8-validate + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-frontmatter@2.0.0: + dependencies: + fault: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.3.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + + micromark-util-encode@2.0.1: {} + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + micromark@4.0.2: + dependencies: + '@types/debug': 4.1.13 + debug: 4.4.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -13734,10 +14343,18 @@ snapshots: dependencies: '@isaacs/brace-expansion': 5.0.0 + minimatch@10.2.5: + dependencies: + brace-expansion: 5.0.6 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.11 + minimatch@8.0.4: dependencies: brace-expansion: 2.0.1 @@ -13758,6 +14375,15 @@ snapshots: mkdirp@1.0.4: {} + mlly@1.8.2: + dependencies: + acorn: 8.16.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.4 + + module-replacements@2.11.0: {} + moti@0.29.0(react-dom@19.1.0(react@19.1.0))(react-native-reanimated@4.1.5(@babel/core@7.28.4)(react-native-worklets@0.5.1(@babel/core@7.28.4)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react@19.1.0): dependencies: framer-motion: 6.5.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -13784,7 +14410,7 @@ snapshots: nanoid@3.3.11: {} - napi-postinstall@0.3.3: {} + nanoid@3.3.12: {} nativewind@4.1.21(react-native-reanimated@4.1.5(@babel/core@7.28.4)(react-native-worklets@0.5.1(@babel/core@7.28.4)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-svg@15.12.1(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(tailwindcss@3.4.4): dependencies: @@ -13802,6 +14428,8 @@ snapshots: natural-compare@1.4.0: {} + natural-orderby@5.0.0: {} + negotiator@0.6.3: {} negotiator@0.6.4: {} @@ -13826,6 +14454,8 @@ snapshots: node-releases@2.0.21: {} + node-releases@2.0.46: {} + normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 @@ -13924,47 +14554,9 @@ snapshots: object-assign@4.1.1: {} - object-hash@3.0.0: {} - - object-inspect@1.13.4: {} - - object-keys@1.1.1: {} - - object.assign@4.1.7: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - has-symbols: 1.1.0 - object-keys: 1.1.1 - - object.entries@1.1.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 - - object.groupby@1.0.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 + object-deep-merge@2.0.1: {} - object.values@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 + object-hash@3.0.0: {} omggif@1.0.10: {} @@ -14050,12 +14642,6 @@ snapshots: os-tmpdir@1.0.2: {} - own-keys@1.0.1: - dependencies: - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 - p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -14110,6 +14696,8 @@ snapshots: registry-url: 6.0.1 semver: 7.7.2 + package-manager-detector@1.6.0: {} + pako@1.0.11: {} parent-module@1.0.1: @@ -14125,8 +14713,14 @@ snapshots: xml-parse-from-string: 1.0.1 xml2js: 0.5.0 + parse-gitignore@2.0.0: {} + parse-headers@2.0.5: {} + parse-imports-exports@0.2.4: + dependencies: + parse-statements: 1.0.11 + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.27.1 @@ -14144,6 +14738,8 @@ snapshots: dependencies: pngjs: 3.4.0 + parse-statements@1.0.11: {} + parse5@7.2.1: dependencies: entities: 4.5.0 @@ -14176,6 +14772,8 @@ snapshots: path-type@4.0.0: {} + pathe@2.0.3: {} + peek-readable@4.1.0: {} phin@3.7.1: @@ -14192,6 +14790,8 @@ snapshots: picomatch@4.0.3: {} + picomatch@4.0.4: {} + pidtree@0.6.0: {} pify@2.3.0: {} @@ -14210,6 +14810,18 @@ snapshots: dependencies: find-up-simple: 1.0.0 + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.2 + pathe: 2.0.3 + + pkg-types@2.3.1: + dependencies: + confbox: 0.2.4 + exsolve: 1.0.8 + pathe: 2.0.3 + pkg-up@3.1.0: dependencies: find-up: 3.0.0 @@ -14230,6 +14842,10 @@ snapshots: pngjs@6.0.0: {} + pnpm-workspace-yaml@1.6.1: + dependencies: + yaml: 2.9.0 + popmotion@11.0.3: dependencies: framesync: 6.0.1 @@ -14237,8 +14853,6 @@ snapshots: style-value-types: 5.0.0 tslib: 2.8.1 - possible-typed-array-names@1.0.0: {} - postcss-import@15.1.0(postcss@8.4.49): dependencies: postcss: 8.4.49 @@ -14268,6 +14882,11 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 + postcss-selector-parser@7.1.1: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + postcss-value-parser@4.2.0: {} postcss@8.4.49: @@ -14276,13 +14895,13 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - prelude-ls@1.2.1: {} - - prettier-linter-helpers@1.0.0: + postcss@8.5.15: dependencies: - fast-diff: 1.3.0 + nanoid: 3.3.12 + picocolors: 1.1.1 + source-map-js: 1.2.1 - prettier@3.3.3: {} + prelude-ls@1.2.1: {} pretty-bytes@5.6.0: {} @@ -14340,6 +14959,8 @@ snapshots: qrcode-terminal@0.11.0: {} + quansync@0.2.11: {} + query-string@7.1.3: dependencies: decode-uri-component: 0.2.2 @@ -14684,16 +15305,9 @@ snapshots: indent-string: 4.0.0 strip-indent: 3.0.0 - reflect.getprototypeof@1.0.10: + refa@0.12.1: dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 + '@eslint-community/regexpp': 4.12.1 regenerate-unicode-properties@10.2.2: dependencies: @@ -14705,16 +15319,12 @@ snapshots: regenerator-runtime@0.14.1: {} - regexp-tree@0.1.27: {} - - regexp.prototype.flags@1.5.4: + regexp-ast-analysis@0.7.1: dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 - set-function-name: 2.0.2 + '@eslint-community/regexpp': 4.12.1 + refa: 0.12.1 + + regexp-tree@0.1.27: {} regexpu-core@6.3.1: dependencies: @@ -14739,6 +15349,10 @@ snapshots: dependencies: jsesc: 3.0.2 + regjsparser@0.13.1: + dependencies: + jsesc: 3.1.0 + repeat-string@1.6.1: {} require-directory@2.1.1: {} @@ -14755,6 +15369,8 @@ snapshots: reselect@4.1.8: {} + reserved-identifiers@1.2.0: {} + resolve-cwd@3.0.0: dependencies: resolve-from: 5.0.0 @@ -14791,12 +15407,6 @@ snapshots: dependencies: path-parse: 1.0.7 - resolve@2.0.0-next.5: - dependencies: - is-core-module: 2.15.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - restore-cursor@2.0.0: dependencies: onetime: 2.0.1 @@ -14840,27 +15450,8 @@ snapshots: dependencies: tslib: 2.8.1 - safe-array-concat@1.1.3: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 - safe-buffer@5.2.1: {} - safe-push-apply@1.0.0: - dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 - - safe-regex-test@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-regex: 1.2.1 - safer-buffer@2.1.2: {} sax@1.4.1: {} @@ -14873,12 +15464,20 @@ snapshots: scoped-regex@3.0.0: {} + scslre@0.3.0: + dependencies: + '@eslint-community/regexpp': 4.12.1 + refa: 0.12.1 + regexp-ast-analysis: 0.7.1 + semver@6.3.1: {} semver@7.6.3: {} semver@7.7.2: {} + semver@7.8.1: {} + send@0.19.0: dependencies: debug: 2.6.9 @@ -14928,28 +15527,6 @@ snapshots: server-only@0.0.1: {} - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - set-proto@1.0.0: - dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - setimmediate@1.0.5: {} setprototypeof@1.2.0: {} @@ -14966,34 +15543,6 @@ snapshots: shell-quote@1.8.1: {} - side-channel-list@1.0.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.0 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - signal-exit@3.0.7: {} signal-exit@4.1.0: {} @@ -15060,6 +15609,11 @@ snapshots: spdx-exceptions: 2.5.0 spdx-license-ids: 3.0.20 + spdx-expression-parse@4.0.0: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.20 + spdx-license-ids@3.0.20: {} split-on-first@1.1.0: {} @@ -15068,8 +15622,6 @@ snapshots: sprintf-js@1.0.3: {} - stable-hash-x@0.2.0: {} - stack-generator@2.0.10: dependencies: stackframe: 1.3.4 @@ -15099,11 +15651,6 @@ snapshots: statuses@2.0.1: {} - stop-iteration-iterator@1.1.0: - dependencies: - es-errors: 1.3.0 - internal-slot: 1.1.0 - stream-buffers@2.2.0: {} strict-uri-encode@2.0.0: {} @@ -15120,6 +15667,8 @@ snapshots: char-regex: 2.0.2 strip-ansi: 7.1.0 + string-ts@2.3.1: {} + string-width@1.0.2: dependencies: code-point-at: 1.1.0 @@ -15149,50 +15698,6 @@ snapshots: get-east-asian-width: 1.3.0 strip-ansi: 7.1.0 - string.prototype.matchall@4.0.12: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - regexp.prototype.flags: 1.5.4 - set-function-name: 2.0.2 - side-channel: 1.1.0 - - string.prototype.repeat@1.0.0: - dependencies: - define-properties: 1.2.1 - es-abstract: 1.24.0 - - string.prototype.trim@1.2.10: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 - has-property-descriptors: 1.0.2 - - string.prototype.trimend@1.0.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 @@ -15217,8 +15722,6 @@ snapshots: dependencies: ansi-regex: 6.1.0 - strip-bom@3.0.0: {} - strip-bom@4.0.0: {} strip-final-newline@2.0.0: {} @@ -15229,7 +15732,7 @@ snapshots: dependencies: min-indent: 1.0.1 - strip-indent@4.1.0: {} + strip-indent@4.1.1: {} strip-json-comments@2.0.1: {} @@ -15298,7 +15801,7 @@ snapshots: symbol-tree@3.2.4: {} - synckit@0.11.11: + synckit@0.11.12: dependencies: '@pkgr/core': 0.2.9 @@ -15391,11 +15894,18 @@ snapshots: tinyexec@0.3.1: {} + tinyexec@1.2.2: {} + tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 + tinyglobby@0.2.16: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 @@ -15406,6 +15916,11 @@ snapshots: dependencies: is-number: 7.0.0 + to-valid-identifier@1.0.0: + dependencies: + '@sindresorhus/base62': 1.0.0 + reserved-identifiers: 1.2.0 + toidentifier@1.0.1: {} token-types@4.2.1: @@ -15413,6 +15928,10 @@ snapshots: '@tokenizer/token': 0.3.0 ieee754: 1.2.1 + toml-eslint-parser@1.0.3: + dependencies: + eslint-visitor-keys: 5.0.1 + tough-cookie@4.1.4: dependencies: psl: 1.10.0 @@ -15430,6 +15949,15 @@ snapshots: dependencies: typescript: 5.9.3 + ts-api-utils@2.5.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + + ts-declaration-location@1.0.7(typescript@5.9.3): + dependencies: + picomatch: 4.0.3 + typescript: 5.9.3 + ts-interface-checker@0.1.13: {} ts-jest@29.4.2(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest-util@29.7.0)(jest@29.7.0(@types/node@22.9.1))(typescript@5.9.3): @@ -15452,12 +15980,7 @@ snapshots: babel-jest: 29.7.0(@babel/core@7.28.4) jest-util: 29.7.0 - tsconfig-paths@3.15.0: - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 + ts-pattern@5.9.0: {} tslib@1.14.1: {} @@ -15483,64 +16006,15 @@ snapshots: type-fest@4.41.0: {} - typed-array-buffer@1.0.3: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-typed-array: 1.1.15 - - typed-array-byte-length@1.0.3: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 - - typed-array-length@1.0.7: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.0.0 - reflect.getprototypeof: 1.0.10 - - typescript-eslint@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3): - dependencies: - '@typescript-eslint/eslint-plugin': 8.44.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3))(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) - '@typescript-eslint/parser': 8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.44.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.44.0(eslint@9.35.0(jiti@1.21.6))(typescript@5.9.3) - eslint: 9.35.0(jiti@1.21.6) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - typescript@5.9.3: {} ua-parser-js@1.0.39: {} + ufo@1.6.4: {} + uglify-js@3.19.3: optional: true - unbox-primitive@1.1.0: - dependencies: - call-bound: 1.0.4 - has-bigints: 1.0.2 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 - undici-types@6.19.8: {} undici@6.21.3: {} @@ -15562,33 +16036,28 @@ snapshots: dependencies: crypto-random-string: 2.0.0 - universalify@0.2.0: {} + unist-util-is@6.0.1: + dependencies: + '@types/unist': 3.0.3 - unpipe@1.0.0: {} + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 - unrs-resolver@1.11.1: + unist-util-visit-parents@6.0.2: dependencies: - napi-postinstall: 0.3.3 - optionalDependencies: - '@unrs/resolver-binding-android-arm-eabi': 1.11.1 - '@unrs/resolver-binding-android-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-x64': 1.11.1 - '@unrs/resolver-binding-freebsd-x64': 1.11.1 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 - '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-musl': 1.11.1 - '@unrs/resolver-binding-wasm32-wasi': 1.11.1 - '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 - '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 - '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-visit@5.1.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + universalify@0.2.0: {} + + unpipe@1.0.0: {} update-browserslist-db@1.1.1(browserslist@4.24.2): dependencies: @@ -15602,6 +16071,12 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + update-browserslist-db@1.2.3(browserslist@4.28.2): + dependencies: + browserslist: 4.28.2 + escalade: 3.2.0 + picocolors: 1.1.1 + update-notifier@7.3.1: dependencies: boxen: 8.0.1 @@ -15687,6 +16162,18 @@ snapshots: void-elements@3.1.0: {} + vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@1.21.6)): + dependencies: + debug: 4.4.3 + eslint: 9.39.4(jiti@1.21.6) + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.6.0 + semver: 7.7.2 + transitivePeerDependencies: + - supports-color + w3c-xmlserializer@4.0.0: dependencies: xml-name-validator: 4.0.0 @@ -15733,47 +16220,6 @@ snapshots: when-exit@2.1.3: {} - which-boxed-primitive@1.1.1: - dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.2 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 - - which-builtin-type@1.2.1: - dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.1.8 - has-tostringtag: 1.0.2 - is-async-function: 2.0.0 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.0.10 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.19 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.3 - - which-typed-array@1.1.19: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - for-each: 0.3.5 - get-proto: 1.0.1 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - which@2.0.2: dependencies: isexe: 2.0.0 @@ -15878,10 +16324,17 @@ snapshots: yallist@5.0.0: {} + yaml-eslint-parser@2.0.0: + dependencies: + eslint-visitor-keys: 5.0.1 + yaml: 2.6.1 + yaml@2.5.1: {} yaml@2.6.1: {} + yaml@2.9.0: {} + yargs-parser@21.1.1: {} yargs@17.7.2: @@ -15904,10 +16357,18 @@ snapshots: dependencies: zod: 3.23.8 + zod-validation-error@4.0.2(zod@3.25.76): + dependencies: + zod: 3.25.76 + zod@3.23.8: {} + zod@3.25.76: {} + zustand@5.0.8(@types/react@19.1.17)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0)): optionalDependencies: '@types/react': 19.1.17 react: 19.1.0 use-sync-external-store: 1.5.0(react@19.1.0) + + zwitch@2.0.4: {} From 1b49be22ac8def4e2c44f574b40da32553cd870c Mon Sep 17 00:00:00 2001 From: Fernanda Toledo Date: Mon, 25 May 2026 17:49:35 -0300 Subject: [PATCH 02/18] chore: replace Prettier with @antfu/eslint-config --- eslint.config.mjs | 27 ++++++++++++++++----------- package.json | 1 + 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 25ebfd324..4ea2966fe 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -3,6 +3,7 @@ import { fileURLToPath } from 'node:url'; import antfu from '@antfu/eslint-config'; import expoPlugin from 'eslint-plugin-expo'; +import importX from 'eslint-plugin-import-x'; import i18nJsonPlugin from 'eslint-plugin-i18n-json'; import reactCompiler from 'eslint-plugin-react-compiler'; import tailwind from 'eslint-plugin-tailwindcss'; @@ -13,7 +14,9 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url)); export default antfu( { react: true, - typescript: true, + typescript: { + tsconfigPath: './tsconfig.json', + }, jsonc: false, markdown: false, @@ -49,13 +52,11 @@ export default antfu( rules: { 'max-params': ['error', 3], 'max-lines-per-function': ['error', 75], - 'react/display-name': 'off', - 'react/no-inline-styles': 'off', - 'react/destructuring-assignment': 'off', - 'react/require-default-props': 'off', - 'react/jsx-fragments': ['error', 'syntax'], - 'react/jsx-no-useless-fragment': 'error', - 'react/no-children-prop': ['error', { allowFunctions: true }], + 'react/no-missing-component-display-name': 'off', + 'react/prefer-destructuring-assignment': 'off', + 'react/jsx-shorthand-fragment': 'error', + 'react/no-useless-fragment': 'error', + 'react/no-children-prop': 'error', 'no-nested-ternary': 'error', 'no-unneeded-ternary': 'error', 'prefer-template': 'error', @@ -65,7 +66,7 @@ export default antfu( 'no-console': ['error', { allow: ['error'] }], 'guard-for-in': 'error', 'import/prefer-default-export': 'off', - 'import/no-cycle': ['error', { maxDepth: '∞' }], + 'import-x/no-cycle': 'error', 'unused-imports/no-unused-vars': [ 'error', { @@ -125,8 +126,8 @@ export default antfu( 'error', { ignoreArrayIndexes: true, ignoreEnums: true, ignore: [-1, 0, 1] }, ], - 'ts/prefer-nullish-coalescing': 'error', 'ts/array-type': ['error', { default: 'generic' }], + 'ts/prefer-nullish-coalescing': 'error', }, }, @@ -147,7 +148,7 @@ export default antfu( }, }, - ...tailwind.configs['flat/recommended'].map((config) => ({ + ...tailwind.configs['flat/recommended'].map(config => ({ ...config, rules: { ...config.rules, @@ -156,6 +157,10 @@ export default antfu( }, })), + { + plugins: { 'import-x': importX }, + }, + { plugins: { expo: expoPlugin }, rules: { diff --git a/package.json b/package.json index 31af2a7fe..fae469cd8 100644 --- a/package.json +++ b/package.json @@ -136,6 +136,7 @@ "dotenv": "^16.4.5", "eslint": "^9.39.2", "eslint-plugin-expo": "^1.0.2", + "eslint-plugin-import-x": "^4.16.2", "eslint-plugin-i18n-json": "^4.0.1", "eslint-plugin-react-compiler": "19.1.0-rc.2", "eslint-plugin-react-hooks": "^7.0.1", From 6a53e019b660f4e01c3e875677b8ec1dceb45754 Mon Sep 17 00:00:00 2001 From: Fernanda Toledo Date: Mon, 25 May 2026 18:52:29 -0300 Subject: [PATCH 03/18] chore: migrate from Prettier + eslint-config-expo to @antfu/eslint-config --- eslint.config.mjs | 15 ++- pnpm-lock.yaml | 334 +++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 342 insertions(+), 7 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 4ea2966fe..102da765f 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -3,8 +3,8 @@ import { fileURLToPath } from 'node:url'; import antfu from '@antfu/eslint-config'; import expoPlugin from 'eslint-plugin-expo'; -import importX from 'eslint-plugin-import-x'; import i18nJsonPlugin from 'eslint-plugin-i18n-json'; +import importX from 'eslint-plugin-import-x'; import reactCompiler from 'eslint-plugin-react-compiler'; import tailwind from 'eslint-plugin-tailwindcss'; import testingLibrary from 'eslint-plugin-testing-library'; @@ -66,7 +66,7 @@ export default antfu( 'no-console': ['error', { allow: ['error'] }], 'guard-for-in': 'error', 'import/prefer-default-export': 'off', - 'import-x/no-cycle': 'error', + 'import-x/no-cycle': ['error', { ignoreExternal: true }], 'unused-imports/no-unused-vars': [ 'error', { @@ -128,6 +128,17 @@ export default antfu( ], 'ts/array-type': ['error', { default: 'generic' }], 'ts/prefer-nullish-coalescing': 'error', + // Type-aware rules activated by tsconfigPath — disable until addressed individually + 'ts/no-unsafe-assignment': 'off', + 'ts/no-unsafe-return': 'off', + 'ts/no-unsafe-argument': 'off', + 'ts/no-unsafe-call': 'off', + 'ts/no-unsafe-member-access': 'off', + 'ts/strict-boolean-expressions': 'off', + 'ts/no-floating-promises': 'off', + 'ts/no-misused-promises': 'off', + 'ts/unbound-method': 'off', + 'react/no-leaked-conditional-rendering': 'off', }, }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2d252af98..6570ac0ec 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -228,6 +228,9 @@ importers: eslint-plugin-i18n-json: specifier: ^4.0.1 version: 4.0.1(eslint@9.39.4(jiti@1.21.6)) + eslint-plugin-import-x: + specifier: ^4.16.2 + version: 4.16.2(@typescript-eslint/utils@8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.6)) eslint-plugin-react-compiler: specifier: 19.1.0-rc.2 version: 19.1.0-rc.2(eslint@9.39.4(jiti@1.21.6)) @@ -1006,6 +1009,15 @@ packages: resolution: {integrity: sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==} engines: {node: '>=0.8.0'} + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@emotion/is-prop-valid@0.8.8': resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} @@ -1644,6 +1656,12 @@ packages: '@motionone/utils@10.18.0': resolution: {integrity: sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw==} + '@napi-rs/wasm-runtime@1.1.4': + resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1660,6 +1678,9 @@ packages: resolution: {integrity: sha512-XRO0zi2NIUKq2lUk3T1ecFSld1fMWRKE6naRFGkgkdeosx7IslyUKNv5Dcb5PJTja9tHJoFu0v/7yEpAkrkrTg==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@package-json/types@0.0.12': + resolution: {integrity: sha512-uu43FGU34B5VM9mCNjXCwLaGHYjXdNincqKLaraaCW+7S2+SmiBg1Nv8bPnmschrIfZmfKNY9f3fC376MRrObw==} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -2107,6 +2128,9 @@ packages: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} + '@tybys/wasm-util@0.10.2': + resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -2307,6 +2331,116 @@ packages: resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} deprecated: Potential CWE-502 - Update to 1.3.1 or higher + '@unrs/resolver-binding-android-arm-eabi@1.12.2': + resolution: {integrity: sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w==} + cpu: [arm] + os: [android] + + '@unrs/resolver-binding-android-arm64@1.12.2': + resolution: {integrity: sha512-YGCRZv/9GLhwmz6mYDeTsm/92BAyR28l6c2ReweVW5pWgfsitWLY8upvfRlGdoyD8HjeTHSYJWyZGD4KJA/nFQ==} + cpu: [arm64] + os: [android] + + '@unrs/resolver-binding-darwin-arm64@1.12.2': + resolution: {integrity: sha512-u9DiNT1auQMO20A9SyTuG3wUgQWB9Z7KjAg0uFuCDR1FsAY8A0CG2S6JpHS1xwm/w1G08bjXZDcyOCjv1WAm2w==} + cpu: [arm64] + os: [darwin] + + '@unrs/resolver-binding-darwin-x64@1.12.2': + resolution: {integrity: sha512-f7rPLi/T1HVKZu/u6t87lroib16n8vrSzcyxI7lg4BGO9UF26KhQL44sd9eOUgrTYhvRXtWOIZT5PejdPyJfUA==} + cpu: [x64] + os: [darwin] + + '@unrs/resolver-binding-freebsd-x64@1.12.2': + resolution: {integrity: sha512-BpcOjWCJub6nRZUS2zA20pmLvjtqAtGejETaIyRLiZiQf++cbrjltLA5NN/xaXfqeOBOSlMFbemIl5/S5tljmg==} + cpu: [x64] + os: [freebsd] + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.12.2': + resolution: {integrity: sha512-vZTDvdSISZjJx66OzJqtsOhzifbqRjbmI1Mnu49fQDwog5GtDI4QidRiEAYbZCRj9C8YZEW+3ZjqsyS9GR4k2A==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm-musleabihf@1.12.2': + resolution: {integrity: sha512-BiPI+IrIlwcW4nLLMM21+B1dFPzd55yAVgVGrdgDjNef+ch03GdxrcyaIz8X9SsQirh/kCQ7mviyWlMxdh2D7g==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-gnu@1.12.2': + resolution: {integrity: sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-musl@1.12.2': + resolution: {integrity: sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-loong64-gnu@1.12.2': + resolution: {integrity: sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q==} + cpu: [loong64] + os: [linux] + + '@unrs/resolver-binding-linux-loong64-musl@1.12.2': + resolution: {integrity: sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew==} + cpu: [loong64] + os: [linux] + + '@unrs/resolver-binding-linux-ppc64-gnu@1.12.2': + resolution: {integrity: sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg==} + cpu: [ppc64] + os: [linux] + + '@unrs/resolver-binding-linux-riscv64-gnu@1.12.2': + resolution: {integrity: sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A==} + cpu: [riscv64] + os: [linux] + + '@unrs/resolver-binding-linux-riscv64-musl@1.12.2': + resolution: {integrity: sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w==} + cpu: [riscv64] + os: [linux] + + '@unrs/resolver-binding-linux-s390x-gnu@1.12.2': + resolution: {integrity: sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw==} + cpu: [s390x] + os: [linux] + + '@unrs/resolver-binding-linux-x64-gnu@1.12.2': + resolution: {integrity: sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-linux-x64-musl@1.12.2': + resolution: {integrity: sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-openharmony-arm64@1.12.2': + resolution: {integrity: sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ==} + cpu: [arm64] + os: [openharmony] + + '@unrs/resolver-binding-wasm32-wasi@1.12.2': + resolution: {integrity: sha512-tYFDIkMxSflfEc/h92ZWNsZlHSwgimbNHSO3PL2JWQHfCuC2q316jMyYU9TIWZsFK2bQwyK5VAdYgn8ygPj69A==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@unrs/resolver-binding-win32-arm64-msvc@1.12.2': + resolution: {integrity: sha512-qzNyg3xL0VPQmCaUh+N5jSitce6k+uCBfMDesWRnlULOZaqUkaJ0ybdT+UqlAWJoQjuqfIU/0Ptx9bteN4D82g==} + cpu: [arm64] + os: [win32] + + '@unrs/resolver-binding-win32-ia32-msvc@1.12.2': + resolution: {integrity: sha512-WD9sY00OfpHVGfsnHZoA8jVT+esS/Bg8z8jzxp5BnDCjjwsuKsPQrzswwpFy4J1AUJbXPRfkpcX0mXrzeXW79g==} + cpu: [ia32] + os: [win32] + + '@unrs/resolver-binding-win32-x64-msvc@1.12.2': + resolution: {integrity: sha512-nAB74NfSNKknqQ1RrYj6uz8FcXEomu/MATJZxh/x+BArzN2U3JbOYC0APYzUIGhVY3m5hRxA8VPNdPBoG8txlA==} + cpu: [x64] + os: [win32] + '@urql/core@5.0.8': resolution: {integrity: sha512-1GOnUw7/a9bzkcM0+U8U5MmxW2A7FE5YquuEmcJzTtW5tIs2EoS4F2ITpuKBjRBbyRjZgO860nWFPo1m4JImGA==} @@ -3431,6 +3565,15 @@ packages: eslint-flat-config-utils@3.2.0: resolution: {integrity: sha512-PHgo1X5uqIorJONLVD9BIaOSdoYFD3z/AeJljdqDPlWVRpeCYkDbK9k0AXoYVqqNJr6FEYIEr5Rm2TSktLQcHw==} + eslint-import-context@0.1.9: + resolution: {integrity: sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + peerDependencies: + unrs-resolver: ^1.0.0 + peerDependenciesMeta: + unrs-resolver: + optional: true + eslint-json-compat-utils@0.2.3: resolution: {integrity: sha512-RbBmDFyu7FqnjE8F0ZxPNzx5UaptdeS9Uu50r7A+D7s/+FCX+ybiyViYEgFUaFIFqSWJgZRTpL5d8Kanxxl2lQ==} engines: {node: '>=12'} @@ -3489,6 +3632,19 @@ packages: peerDependencies: eslint: '>=9.0.0' + eslint-plugin-import-x@4.16.2: + resolution: {integrity: sha512-rM9K8UBHcWKpzQzStn1YRN2T5NvdeIfSVoKu/lKF41znQXHAUcBbYXe5wd6GNjZjTrP7viQ49n1D83x/2gYgIw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/utils': ^8.56.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + eslint-import-resolver-node: '*' + peerDependenciesMeta: + '@typescript-eslint/utils': + optional: true + eslint-import-resolver-node: + optional: true + eslint-plugin-jsdoc@62.9.0: resolution: {integrity: sha512-PY7/X4jrVgoIDncUmITlUqK546Ltmx/Pd4Hdsu4CvSjryQZJI2mEV4vrdMufyTetMiZ5taNSqvK//BTgVUlNkA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} @@ -5607,6 +5763,11 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + napi-postinstall@0.3.4: + resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + hasBin: true + nativewind@4.1.21: resolution: {integrity: sha512-CYlxaP3pJ6K81l+mgXVnC5YakiNlm7zvSob8yYH91tVEBZbNd8SNImsSKJAsq0ULCDAhdWjB8kd7591r1yfnyg==} engines: {node: '>=16'} @@ -6779,6 +6940,10 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + stable-hash-x@0.2.0: + resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==} + engines: {node: '>=12.0.0'} + stack-generator@2.0.10: resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==} @@ -7246,6 +7411,9 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} + unrs-resolver@1.12.2: + resolution: {integrity: sha512-dmlRxBJJayXjqTwC+JtF1HhJmgf3ftQ3YejFcZrf4+KKtJv0qDsK1pjqaaVjG7wJ5NJ6UVP1OqRMQ71Z4C3rxQ==} + update-browserslist-db@1.1.1: resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} hasBin: true @@ -8506,6 +8674,22 @@ snapshots: dependencies: '@types/hammerjs': 2.0.46 + '@emnapi/core@1.10.0': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.10.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + '@emotion/is-prop-valid@0.8.8': dependencies: '@emotion/memoize': 0.7.4 @@ -9554,6 +9738,13 @@ snapshots: hey-listen: 1.0.8 tslib: 2.8.1 + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.2 + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -9568,6 +9759,8 @@ snapshots: '@ota-meshi/ast-token-store@0.3.0': {} + '@package-json/types@0.0.12': {} + '@pkgjs/parseargs@0.11.0': optional: true @@ -10045,6 +10238,11 @@ snapshots: '@tootallnate/once@2.0.0': {} + '@tybys/wasm-util@0.10.2': + dependencies: + tslib: 2.8.1 + optional: true + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.28.4 @@ -10306,6 +10504,76 @@ snapshots: '@ungap/structured-clone@1.3.0': {} + '@unrs/resolver-binding-android-arm-eabi@1.12.2': + optional: true + + '@unrs/resolver-binding-android-arm64@1.12.2': + optional: true + + '@unrs/resolver-binding-darwin-arm64@1.12.2': + optional: true + + '@unrs/resolver-binding-darwin-x64@1.12.2': + optional: true + + '@unrs/resolver-binding-freebsd-x64@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-arm-musleabihf@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-arm64-gnu@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-arm64-musl@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-loong64-gnu@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-loong64-musl@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-ppc64-gnu@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-riscv64-gnu@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-riscv64-musl@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-s390x-gnu@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-x64-gnu@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-x64-musl@1.12.2': + optional: true + + '@unrs/resolver-binding-openharmony-arm64@1.12.2': + optional: true + + '@unrs/resolver-binding-wasm32-wasi@1.12.2': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + optional: true + + '@unrs/resolver-binding-win32-arm64-msvc@1.12.2': + optional: true + + '@unrs/resolver-binding-win32-ia32-msvc@1.12.2': + optional: true + + '@unrs/resolver-binding-win32-x64-msvc@1.12.2': + optional: true + '@urql/core@5.0.8': dependencies: '@0no-co/graphql.web': 1.0.11 @@ -11394,7 +11662,7 @@ snapshots: eslint-compat-utils@0.5.1(eslint@9.39.4(jiti@1.21.6)): dependencies: eslint: 9.39.4(jiti@1.21.6) - semver: 7.7.2 + semver: 7.8.1 eslint-config-flat-gitignore@2.3.0(eslint@9.39.4(jiti@1.21.6)): dependencies: @@ -11406,6 +11674,13 @@ snapshots: '@eslint/config-helpers': 0.5.5 pathe: 2.0.3 + eslint-import-context@0.1.9(unrs-resolver@1.12.2): + dependencies: + get-tsconfig: 4.10.1 + stable-hash-x: 0.2.0 + optionalDependencies: + unrs-resolver: 1.12.2 + eslint-json-compat-utils@0.2.3(eslint@9.39.4(jiti@1.21.6))(jsonc-eslint-parser@3.1.0): dependencies: eslint: 9.39.4(jiti@1.21.6) @@ -11468,6 +11743,24 @@ snapshots: dependencies: eslint: 9.39.4(jiti@1.21.6) + eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.6)): + dependencies: + '@package-json/types': 0.0.12 + '@typescript-eslint/types': 8.60.0 + comment-parser: 1.4.7 + debug: 4.4.3 + eslint: 9.39.4(jiti@1.21.6) + eslint-import-context: 0.1.9(unrs-resolver@1.12.2) + is-glob: 4.0.3 + minimatch: 10.2.5 + semver: 7.8.1 + stable-hash-x: 0.2.0 + unrs-resolver: 1.12.2 + optionalDependencies: + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) + transitivePeerDependencies: + - supports-color + eslint-plugin-jsdoc@62.9.0(eslint@9.39.4(jiti@1.21.6)): dependencies: '@es-joy/jsdoccomment': 0.86.0 @@ -12806,7 +13099,7 @@ snapshots: '@babel/parser': 7.28.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.7.2 + semver: 7.8.1 transitivePeerDependencies: - supports-color @@ -13623,7 +13916,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.7.2 + semver: 7.8.1 make-error@1.3.6: {} @@ -14412,6 +14705,8 @@ snapshots: nanoid@3.3.12: {} + napi-postinstall@0.3.4: {} + nativewind@4.1.21(react-native-reanimated@4.1.5(@babel/core@7.28.4)(react-native-worklets@0.5.1(@babel/core@7.28.4)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-svg@15.12.1(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(tailwindcss@3.4.4): dependencies: comment-json: 4.2.5 @@ -14694,7 +14989,7 @@ snapshots: ky: 1.7.2 registry-auth-token: 5.0.2 registry-url: 6.0.1 - semver: 7.7.2 + semver: 7.8.1 package-manager-detector@1.6.0: {} @@ -15622,6 +15917,8 @@ snapshots: sprintf-js@1.0.3: {} + stable-hash-x@0.2.0: {} + stack-generator@2.0.10: dependencies: stackframe: 1.3.4 @@ -15872,7 +16169,7 @@ snapshots: dependencies: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 - minimatch: 3.1.2 + minimatch: 3.1.5 text-extensions@2.4.0: {} @@ -16059,6 +16356,33 @@ snapshots: unpipe@1.0.0: {} + unrs-resolver@1.12.2: + dependencies: + napi-postinstall: 0.3.4 + optionalDependencies: + '@unrs/resolver-binding-android-arm-eabi': 1.12.2 + '@unrs/resolver-binding-android-arm64': 1.12.2 + '@unrs/resolver-binding-darwin-arm64': 1.12.2 + '@unrs/resolver-binding-darwin-x64': 1.12.2 + '@unrs/resolver-binding-freebsd-x64': 1.12.2 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.12.2 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.12.2 + '@unrs/resolver-binding-linux-arm64-gnu': 1.12.2 + '@unrs/resolver-binding-linux-arm64-musl': 1.12.2 + '@unrs/resolver-binding-linux-loong64-gnu': 1.12.2 + '@unrs/resolver-binding-linux-loong64-musl': 1.12.2 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.12.2 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.12.2 + '@unrs/resolver-binding-linux-riscv64-musl': 1.12.2 + '@unrs/resolver-binding-linux-s390x-gnu': 1.12.2 + '@unrs/resolver-binding-linux-x64-gnu': 1.12.2 + '@unrs/resolver-binding-linux-x64-musl': 1.12.2 + '@unrs/resolver-binding-openharmony-arm64': 1.12.2 + '@unrs/resolver-binding-wasm32-wasi': 1.12.2 + '@unrs/resolver-binding-win32-arm64-msvc': 1.12.2 + '@unrs/resolver-binding-win32-ia32-msvc': 1.12.2 + '@unrs/resolver-binding-win32-x64-msvc': 1.12.2 + update-browserslist-db@1.1.1(browserslist@4.24.2): dependencies: browserslist: 4.24.2 From 5a38c034ebd7540b6fceca92fe3a2157a363f7c2 Mon Sep 17 00:00:00 2001 From: Fernanda Toledo Date: Mon, 25 May 2026 19:45:02 -0300 Subject: [PATCH 04/18] fix: add explicit return type to renderContent to resolve async inference --- .../actions/setup-jdk-generate-apk/action.yml | 6 +- .../setup-node-pnpm-install/action.yml | 4 +- .../project-workflows/sync-with-template.yml | 2 +- .github/workflows/deploy-cli.yml | 2 +- .github/workflows/e2e-android-eas-build.yml | 4 +- .github/workflows/e2e-android.yml | 2 +- .github/workflows/eas-build.yml | 18 +- .github/workflows/expo-doctor.yml | 10 +- .github/workflows/lint-ts.yml | 2 +- .github/workflows/new-template-version.yml | 2 +- .github/workflows/sonar.yml | 2 +- .github/workflows/stale.yml | 10 +- .github/workflows/sync-with-upstream.yml | 26 +- .github/workflows/test.yml | 2 +- .maestro/app/create-post.yaml | 24 +- .maestro/app/tabs.yaml | 20 +- .maestro/auth/login-with-validation.yaml | 32 +- .maestro/auth/onboarding.yaml | 4 +- .maestro/config.yaml | 8 +- .maestro/utils/hide-keyboard-android.yaml | 2 +- .maestro/utils/hide-keyboard-ios.yaml | 2 +- .maestro/utils/hide-keyboard.yaml | 2 +- .maestro/utils/login.yaml | 16 +- .maestro/utils/onboarding-and-login.yaml | 4 +- .maestro/utils/onboarding.yaml | 4 +- __mocks__/expo-localization.ts | 28 +- __mocks__/react-native-mmkv.ts | 4 +- scripts/i18next-syntax-validation.js | 10 +- src/api/auth/use-forgot-password.ts | 6 +- src/api/auth/use-login.ts | 6 +- src/api/auth/use-sign-up.ts | 6 +- src/api/auth/use-update-password.ts | 6 +- src/api/auth/use-user.tsx | 8 +- src/api/common/api-provider.tsx | 3 +- src/api/common/interceptors.ts | 2 +- src/api/common/utils.tsx | 26 +- src/api/query-factory.ts | 6 +- src/api/types.ts | 8 +- src/app/(app)/_layout.tsx | 16 +- src/app/(app)/settings.tsx | 12 +- src/app/(app)/style.tsx | 2 +- src/app/+html.tsx | 2 +- src/app/_layout.tsx | 10 +- src/app/feed/add-post.tsx | 1 + src/app/forgot-password.tsx | 7 +- src/app/onboarding.tsx | 1 + src/app/sign-in.tsx | 9 +- src/app/sign-up.tsx | 8 +- src/app/update-password.tsx | 4 +- src/app/www.tsx | 3 +- src/components/buttons.tsx | 60 +-- src/components/colors.tsx | 43 +- src/components/cover.tsx | 426 +++++++++--------- src/components/forgot-password-form.tsx | 4 +- src/components/inputs.tsx | 22 +- src/components/login-form.tsx | 14 +- src/components/providers/auth.tsx | 53 ++- .../settings/delete-account-item.tsx | 8 +- src/components/settings/item.tsx | 5 +- src/components/settings/items-container.tsx | 18 +- src/components/settings/language-item.tsx | 13 +- src/components/settings/theme-item.tsx | 12 +- src/components/sign-up-form.tsx | 14 +- src/components/title.tsx | 14 +- src/components/typography.tsx | 38 +- src/components/ui/button.tsx | 10 +- src/components/ui/checkbox.tsx | 147 +++--- src/components/ui/focus-aware-status-bar.tsx | 18 +- src/components/ui/icons/arrow-right.tsx | 40 +- src/components/ui/icons/caret-down.tsx | 34 +- src/components/ui/icons/feed.tsx | 18 +- src/components/ui/icons/github.tsx | 40 +- src/components/ui/icons/language.tsx | 58 +-- src/components/ui/icons/rate.tsx | 38 +- src/components/ui/icons/settings.tsx | 18 +- src/components/ui/icons/share.tsx | 22 +- src/components/ui/icons/style.tsx | 38 +- src/components/ui/icons/support.tsx | 40 +- src/components/ui/icons/website.tsx | 42 +- src/components/ui/image.tsx | 25 +- src/components/ui/index.tsx | 2 +- src/components/ui/input.tsx | 25 +- src/components/ui/list.tsx | 85 ++-- .../ui/modal-keyboard-aware-scroll-view.tsx | 16 +- src/components/ui/modal.tsx | 60 +-- src/components/ui/progress-bar.tsx | 4 +- src/components/ui/select.tsx | 66 +-- src/components/ui/text.tsx | 18 +- src/components/ui/utils.tsx | 14 +- src/lib/auth/index.tsx | 15 +- src/lib/auth/utils.tsx | 4 +- src/lib/env.js | 2 +- src/lib/hooks/use-is-first-time.tsx | 4 +- src/lib/hooks/use-selected-theme.tsx | 8 +- src/lib/i18n/index.tsx | 1 + src/lib/i18n/types.ts | 4 +- src/lib/i18n/utils.tsx | 23 +- src/lib/test-utils.tsx | 28 +- src/lib/utils.ts | 14 +- 99 files changed, 1111 insertions(+), 1018 deletions(-) diff --git a/.github/actions/setup-jdk-generate-apk/action.yml b/.github/actions/setup-jdk-generate-apk/action.yml index ab8a457f7..27d1dfa85 100644 --- a/.github/actions/setup-jdk-generate-apk/action.yml +++ b/.github/actions/setup-jdk-generate-apk/action.yml @@ -21,15 +21,15 @@ inputs: APP_ENV: description: 'APP_ENV (one of): development, staging, production' required: true - default: 'staging' + default: staging runs: - using: 'composite' + using: composite steps: - name: Set Up JDK uses: actions/setup-java@v3 with: - distribution: 'zulu' # See 'Supported distributions' for available options + distribution: zulu # See 'Supported distributions' for available options java-version: '17' - name: Setup Gradle uses: gradle/gradle-build-action@v2 diff --git a/.github/actions/setup-node-pnpm-install/action.yml b/.github/actions/setup-node-pnpm-install/action.yml index 92c402d41..679595b70 100644 --- a/.github/actions/setup-node-pnpm-install/action.yml +++ b/.github/actions/setup-node-pnpm-install/action.yml @@ -14,7 +14,7 @@ name: 'Setup Node + PNPM + Install Dependencies' description: 'Setup Node + PNPM + Install Dependencies' runs: - using: 'composite' + using: composite steps: - uses: pnpm/action-setup@v4 name: Install pnpm @@ -24,7 +24,7 @@ runs: name: Install Node.js with: node-version: 20 - cache: 'pnpm' + cache: pnpm - name: 📦 Install Project Dependencies run: pnpm install --frozen-lockfile diff --git a/.github/project-workflows/sync-with-template.yml b/.github/project-workflows/sync-with-template.yml index b7a0fac9a..d046d4520 100644 --- a/.github/project-workflows/sync-with-template.yml +++ b/.github/project-workflows/sync-with-template.yml @@ -33,7 +33,7 @@ on: inputs: template-version: type: string - description: 'Template release version to sync with (e.g. v1.0.0). Leave empty to sync with the latest release.' + description: Template release version to sync with (e.g. v1.0.0). Leave empty to sync with the latest release. required: false default: '' diff --git a/.github/workflows/deploy-cli.yml b/.github/workflows/deploy-cli.yml index 186ae56e2..4f642cb8d 100644 --- a/.github/workflows/deploy-cli.yml +++ b/.github/workflows/deploy-cli.yml @@ -27,7 +27,7 @@ on: type: choice description: 'Release type (one of): patch, minor, major' required: true - default: 'patch' + default: patch options: - patch - minor diff --git a/.github/workflows/e2e-android-eas-build.yml b/.github/workflows/e2e-android-eas-build.yml index 4dfd7e992..358d85f05 100644 --- a/.github/workflows/e2e-android-eas-build.yml +++ b/.github/workflows/e2e-android-eas-build.yml @@ -17,7 +17,7 @@ on: inputs: apk-url: type: string - description: 'EAS APK URL' + description: EAS APK URL required: true default: '' @@ -49,7 +49,7 @@ jobs: fetch-depth: 0 - name: 📦 Install Maestro - run: npm run install-maestro ## We use npm because we don't need to install deps again + run: npm run install-maestro # # We use npm because we don't need to install deps again - name: Download Test APK uses: actions/download-artifact@v3 diff --git a/.github/workflows/e2e-android.yml b/.github/workflows/e2e-android.yml index 7d1f8d6d0..be2073da6 100644 --- a/.github/workflows/e2e-android.yml +++ b/.github/workflows/e2e-android.yml @@ -57,7 +57,7 @@ jobs: fetch-depth: 0 - name: 📦 Install Maestro - run: npm run install-maestro ## We use npm because we don't need to install deps again + run: npm run install-maestro # # We use npm because we don't need to install deps again - name: Download Test APK uses: actions/download-artifact@v3 diff --git a/.github/workflows/eas-build.yml b/.github/workflows/eas-build.yml index 781fca439..f4ce7634f 100644 --- a/.github/workflows/eas-build.yml +++ b/.github/workflows/eas-build.yml @@ -38,10 +38,10 @@ on: - ios new-version: type: string - description: 'New version (e.g. 1.0.0) (optional)' + description: New version (e.g. 1.0.0) (optional) auto-submit: type: boolean - description: 'Auto-submit the build to the store' + description: Auto-submit the build to the store required: false default: true @@ -66,12 +66,12 @@ jobs: run: | CURRENT_VERSION=$(node -p "require('./package.json').version") NEW_VERSION="${{ inputs.new-version }}" - + echo "Current version: $CURRENT_VERSION" echo "New version: $NEW_VERSION" - - npx semver -r ">=$CURRENT_VERSION" "$NEW_VERSION" > /dev/null || (echo "❌ New version must be greater than or equal to current version ($CURRENT_VERSION)" && exit 1) - + + npx semver -r ">=$CURRENT_VERSION" "$NEW_VERSION" > /dev/null || (echo "❌ New version must be greater than or equal to current version ($CURRENT_VERSION)" && exit 1) + echo "✅ New version is valid" build: @@ -136,7 +136,7 @@ jobs: git config --global user.name "github-actions[bot]" git config --global user.email "github-actions[bot]@users.noreply.github.com" pnpm version ${{ inputs.new-version }} -m "chore: set app version to ${{ inputs.new-version }}" - + - name: Setup latest version of Xcode uses: maxim-lobanov/setup-xcode@v1 if: inputs.platform == 'ios' @@ -147,7 +147,7 @@ jobs: uses: actions/setup-java@v3 if: inputs.platform == 'android' with: - distribution: 'zulu' # See 'Supported distributions' for available options + distribution: zulu # See 'Supported distributions' for available options java-version: '17' - name: ⚙️ Run Prebuild @@ -178,4 +178,4 @@ jobs: - name: 📦 Push changes to repository if: inputs.new-version run: | - git push || echo "Skipping push: version was already updated." + git push || echo "Skipping push: version was already updated." diff --git a/.github/workflows/expo-doctor.yml b/.github/workflows/expo-doctor.yml index 60d64fd73..f202e8e5a 100644 --- a/.github/workflows/expo-doctor.yml +++ b/.github/workflows/expo-doctor.yml @@ -16,17 +16,17 @@ on: - main - master paths: - - 'package.json' - - 'pnpm-lock.yaml' + - package.json + - pnpm-lock.yaml pull_request: paths: - - 'package.json' - - 'pnpm-lock.yaml' + - package.json + - pnpm-lock.yaml permissions: contents: read pull-requests: write - + jobs: doctor: name: Expo Doctor (expo) diff --git a/.github/workflows/lint-ts.yml b/.github/workflows/lint-ts.yml index 07535c547..45c7271cf 100644 --- a/.github/workflows/lint-ts.yml +++ b/.github/workflows/lint-ts.yml @@ -21,7 +21,7 @@ on: permissions: contents: read pull-requests: write - + jobs: lint: name: Lint TS (eslint, prettier) diff --git a/.github/workflows/new-template-version.yml b/.github/workflows/new-template-version.yml index d5cf238a7..69269a9aa 100644 --- a/.github/workflows/new-template-version.yml +++ b/.github/workflows/new-template-version.yml @@ -37,7 +37,7 @@ on: type: choice description: 'Release type (one of): patch, minor, major' required: true - default: 'patch' + default: patch options: - patch - minor diff --git a/.github/workflows/sonar.yml b/.github/workflows/sonar.yml index b007dbe6b..7d58b5e61 100644 --- a/.github/workflows/sonar.yml +++ b/.github/workflows/sonar.yml @@ -33,7 +33,7 @@ jobs: SONAR_HOST_URL: ${{ secrets.SONAR_URL }} with: args: > - -Dsonar.sonar.sources=./src + -Dsonar.sonar.sources=./src -Dsonar.qualitygate.wait=true -Dsonar.projectBaseDir=. -Dsonar.verbose=false diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 3fbbdea6d..4bcf53efc 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -7,7 +7,7 @@ on: permissions: contents: read pull-requests: write - + jobs: stale: runs-on: ubuntu-latest @@ -16,9 +16,9 @@ jobs: - uses: actions/stale@v1 with: repo-token: ${{ secrets.GITHUB_TOKEN }} - stale-issue-message: 'This issue is stale because it has been open 90 days with no activity. Remove stale label or comment or this will be closed in 14 days' - stale-pr-message: 'This PR is stale because it has been open 90 days with no activity. Remove stale label or comment or this will be closed in 14 days' - stale-issue-label: 'no-issue-activity' - stale-pr-label: 'no-pr-activity' + stale-issue-message: This issue is stale because it has been open 90 days with no activity. Remove stale label or comment or this will be closed in 14 days + stale-pr-message: This PR is stale because it has been open 90 days with no activity. Remove stale label or comment or this will be closed in 14 days + stale-issue-label: no-issue-activity + stale-pr-label: no-pr-activity days-before-stale: 60 days-before-close: 14 diff --git a/.github/workflows/sync-with-upstream.yml b/.github/workflows/sync-with-upstream.yml index 39ca0d23b..d37105eb9 100644 --- a/.github/workflows/sync-with-upstream.yml +++ b/.github/workflows/sync-with-upstream.yml @@ -28,29 +28,29 @@ name: 🔄 Sync with upstream on: schedule: - - cron: "0 12 * * 1-5" # At 12:00 UTC on every day-of-week from Monday through Friday + - cron: '0 12 * * 1-5' # At 12:00 UTC on every day-of-week from Monday through Friday workflow_dispatch: inputs: upstream-version: type: string - description: "Upstream release version to sync with (e.g. v1.0.0). Leave empty to sync with the latest release." + description: Upstream release version to sync with (e.g. v1.0.0). Leave empty to sync with the latest release. required: false - default: "" + default: '' env: UPSTREAM_REPOSITORY: obytes/react-native-template-obytes DIFF_EXCLUDED_ROUTES: | # Files/directories we don't want from the upstream repository - ios - android - .cursorrules - .github/workflows/eas-build-prod.yml - .github/workflows/eas-build-qa.yml - .github/workflows/new-app-version.yml - .github/workflows/new-github-release.yml - docs/public/reviews - src/app/login.tsx - src/components/card.tsx + ios + android + .cursorrules + .github/workflows/eas-build-prod.yml + .github/workflows/eas-build-qa.yml + .github/workflows/new-app-version.yml + .github/workflows/new-github-release.yml + docs/public/reviews + src/app/login.tsx + src/components/card.tsx jobs: sync: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 42cc78667..f2d90f0f9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -43,7 +43,7 @@ jobs: if: (success() || failure()) && github.event_name == 'pull_request' with: coverage-summary-path: ./coverage/coverage-summary.json - summary-title: '💯 Test Coverage' + summary-title: 💯 Test Coverage badge-title: Coverage create-new-comment: false junitxml-title: 😎 Tests Results diff --git a/.maestro/app/create-post.yaml b/.maestro/app/create-post.yaml index 89772e95d..f371f511e 100644 --- a/.maestro/app/create-post.yaml +++ b/.maestro/app/create-post.yaml @@ -1,6 +1,6 @@ appId: ${APP_ID} env: - Title: 'Post title' + Title: Post title CONTENT: "It is a long established fact that a reader will be distracted by the\ \ readable content of a page when looking at its layout. The point of using Lorem\ @@ -9,21 +9,21 @@ env: --- - launchApp - runFlow: ../utils/onboarding-and-login.yaml -- assertVisible: 'Feed' -- assertVisible: 'Create' -- tapOn: 'Create' -- assertVisible: 'Add Post' +- assertVisible: Feed +- assertVisible: Create +- tapOn: Create +- assertVisible: Add Post - tapOn: - id: 'title' + id: title - inputText: ${Title} - tapOn: - id: 'body-input' -- inputText: 'short content' + id: body-input +- inputText: short content - tapOn: - id: 'add-post-button' -- assertVisible: 'String must contain at least 120 character(s)' + id: add-post-button +- assertVisible: String must contain at least 120 character(s) - inputText: ${CONTENT} - runFlow: ../utils/hide-keyboard.yaml - tapOn: - id: 'add-post-button' -- assertVisible: 'Post added successfully' + id: add-post-button +- assertVisible: Post added successfully diff --git a/.maestro/app/tabs.yaml b/.maestro/app/tabs.yaml index 741d92fed..eaffdd98e 100644 --- a/.maestro/app/tabs.yaml +++ b/.maestro/app/tabs.yaml @@ -1,19 +1,19 @@ appId: ${APP_ID} env: - Name: 'User' - EMAIL: 'user@test.com' - PASSWORD: 'password' + Name: User + EMAIL: user@test.com + PASSWORD: password --- - launchApp - runFlow: ../utils/onboarding-and-login.yaml -- assertVisible: 'Feed' +- assertVisible: Feed - assertVisible: - id: 'style-tab' + id: style-tab - tapOn: - id: 'style-tab' -- assertVisible: 'Typography' + id: style-tab +- assertVisible: Typography - tapOn: - id: 'settings-tab' -- assertVisible: 'Settings' + id: settings-tab +- assertVisible: Settings - scroll -- assertVisible: 'Logout' +- assertVisible: Logout diff --git a/.maestro/auth/login-with-validation.yaml b/.maestro/auth/login-with-validation.yaml index a669e39b7..5cb1fdb69 100644 --- a/.maestro/auth/login-with-validation.yaml +++ b/.maestro/auth/login-with-validation.yaml @@ -1,35 +1,35 @@ appId: ${APP_ID} env: - Name: 'User' - EMAIL: 'user@test.com' - PASSWORD: 'password' + Name: User + EMAIL: user@test.com + PASSWORD: password --- - launchApp - runFlow: when: - visible: 'Obytes Starter' + visible: Obytes Starter file: ../utils/onboarding.yaml -- assertVisible: 'Sign In' +- assertVisible: Sign In - assertVisible: - id: 'login-button' + id: login-button - tapOn: - id: 'login-button' -- assertVisible: 'Email is required' -- assertVisible: 'Password is required' + id: login-button +- assertVisible: Email is required +- assertVisible: Password is required - tapOn: - id: 'name' + id: name - inputText: ${Name} - runFlow: ../utils/hide-keyboard.yaml - tapOn: - id: 'email-input' -- inputText: 'email' -- assertVisible: 'Invalid email format' + id: email-input +- inputText: email +- assertVisible: Invalid email format - inputText: ${EMAIL} - runFlow: ../utils/hide-keyboard.yaml - tapOn: - id: 'password-input' + id: password-input - inputText: ${PASSWORD} - runFlow: ../utils/hide-keyboard.yaml - tapOn: - id: 'login-button' -- assertVisible: 'Feed' + id: login-button +- assertVisible: Feed diff --git a/.maestro/auth/onboarding.yaml b/.maestro/auth/onboarding.yaml index b52203dfd..d3adc8e7b 100644 --- a/.maestro/auth/onboarding.yaml +++ b/.maestro/auth/onboarding.yaml @@ -2,7 +2,7 @@ appId: ${APP_ID} --- - clearState - launchApp -- assertVisible: "Obytes Starter" +- assertVisible: Obytes Starter - assertVisible: "Let's Get Started " - tapOn: "Let's Get Started " -- assertVisible: "Sign In" \ No newline at end of file +- assertVisible: Sign In diff --git a/.maestro/config.yaml b/.maestro/config.yaml index 6961b7e01..01923b3d0 100644 --- a/.maestro/config.yaml +++ b/.maestro/config.yaml @@ -6,7 +6,7 @@ excludeTags: - util executionOrder: - continueOnFailure: false # default is true - flowsOrder: - - onboarding - - login-with-validation \ No newline at end of file + continueOnFailure: false # default is true + flowsOrder: + - onboarding + - login-with-validation diff --git a/.maestro/utils/hide-keyboard-android.yaml b/.maestro/utils/hide-keyboard-android.yaml index 07025331e..b92bc02dd 100644 --- a/.maestro/utils/hide-keyboard-android.yaml +++ b/.maestro/utils/hide-keyboard-android.yaml @@ -2,4 +2,4 @@ appId: ${APP_ID} tags: - util --- -- hideKeyboard \ No newline at end of file +- hideKeyboard diff --git a/.maestro/utils/hide-keyboard-ios.yaml b/.maestro/utils/hide-keyboard-ios.yaml index f22dc286f..bcb47c3ed 100644 --- a/.maestro/utils/hide-keyboard-ios.yaml +++ b/.maestro/utils/hide-keyboard-ios.yaml @@ -3,4 +3,4 @@ tags: - util --- - tapOn: - id: "Return" # Keyboard Return \ No newline at end of file + id: Return # Keyboard Return diff --git a/.maestro/utils/hide-keyboard.yaml b/.maestro/utils/hide-keyboard.yaml index dfd1cf9a2..ca3323107 100644 --- a/.maestro/utils/hide-keyboard.yaml +++ b/.maestro/utils/hide-keyboard.yaml @@ -9,4 +9,4 @@ tags: - runFlow: when: platform: Android - file: ./hide-keyboard-android.yaml \ No newline at end of file + file: ./hide-keyboard-android.yaml diff --git a/.maestro/utils/login.yaml b/.maestro/utils/login.yaml index 6e2b32046..c2f03a36f 100644 --- a/.maestro/utils/login.yaml +++ b/.maestro/utils/login.yaml @@ -1,22 +1,22 @@ appId: ${APP_ID} env: - Name: "User" - EMAIL: "user@test.com" - PASSWORD: "password" + Name: User + EMAIL: user@test.com + PASSWORD: password tags: - util --- - tapOn: - id: "name" + id: name - inputText: ${Name} - tapOn: - id: "email-input" + id: email-input - inputText: ${EMAIL} - runFlow: ../utils/hide-keyboard.yaml - tapOn: - id: "password-input" + id: password-input - inputText: ${PASSWORD} - runFlow: ../utils/hide-keyboard.yaml - tapOn: - id: "login-button" -- assertVisible: "Typography" + id: login-button +- assertVisible: Typography diff --git a/.maestro/utils/onboarding-and-login.yaml b/.maestro/utils/onboarding-and-login.yaml index 707c945c1..190ede9ad 100644 --- a/.maestro/utils/onboarding-and-login.yaml +++ b/.maestro/utils/onboarding-and-login.yaml @@ -4,9 +4,9 @@ tags: --- - runFlow: when: - visible: "Obytes Starter" + visible: Obytes Starter file: onboarding.yaml - runFlow: when: visible: Sign In - file: login.yaml \ No newline at end of file + file: login.yaml diff --git a/.maestro/utils/onboarding.yaml b/.maestro/utils/onboarding.yaml index bb1b8937e..5562d77f2 100644 --- a/.maestro/utils/onboarding.yaml +++ b/.maestro/utils/onboarding.yaml @@ -2,7 +2,7 @@ appId: ${APP_ID} tags: - util --- -- assertVisible: 'Obytes Starter' +- assertVisible: Obytes Starter - assertVisible: "Let's Get Started " - tapOn: "Let's Get Started " -- assertVisible: 'Sign In' +- assertVisible: Sign In diff --git a/__mocks__/expo-localization.ts b/__mocks__/expo-localization.ts index 3463b0622..341e6da3a 100644 --- a/__mocks__/expo-localization.ts +++ b/__mocks__/expo-localization.ts @@ -3,16 +3,18 @@ export const locales = ['en-US']; export const timezone = 'UTC'; export const isRTL = false; -export const getLocales = () => [ - { - languageTag: 'en-US', - languageCode: 'en', - textDirection: 'ltr', - digitGroupingSeparator: ',', - decimalSeparator: '.', - measurementSystem: 'imperial', - currencyCode: 'USD', - currencySymbol: '$', - regionCode: 'US', - }, -]; +export function getLocales() { + return [ + { + languageTag: 'en-US', + languageCode: 'en', + textDirection: 'ltr', + digitGroupingSeparator: ',', + decimalSeparator: '.', + measurementSystem: 'imperial', + currencyCode: 'USD', + currencySymbol: '$', + regionCode: 'US', + }, + ]; +} diff --git a/__mocks__/react-native-mmkv.ts b/__mocks__/react-native-mmkv.ts index baa4dc1d0..5971ba697 100644 --- a/__mocks__/react-native-mmkv.ts +++ b/__mocks__/react-native-mmkv.ts @@ -1,6 +1,6 @@ const sharedMockStorage = new Map(); -const createMockStorage = () => { +function createMockStorage() { const mockGetString = jest.fn((key: string): string | undefined => sharedMockStorage.get(key), ); @@ -42,7 +42,7 @@ const createMockStorage = () => { sharedMockStorage.set(key, String(value)); }), }; -}; +} export function createMMKV(_options?: { id?: string }) { return createMockStorage(); diff --git a/scripts/i18next-syntax-validation.js b/scripts/i18next-syntax-validation.js index 40b11cfdd..d99093812 100644 --- a/scripts/i18next-syntax-validation.js +++ b/scripts/i18next-syntax-validation.js @@ -1,4 +1,4 @@ -const validate = (message = '') => { +function validate(message = '') { if (!(message || '').trim()) { throw new SyntaxError('Message is Empty.'); } @@ -6,18 +6,18 @@ const validate = (message = '') => { throw new TypeError('Message must be a String.'); } if ( - (message.includes('{') || message.includes('}')) && - !/{{ ?(?:- |\w+?)(, ?)?\w+? ?}}/g.test(message) + (message.includes('{') || message.includes('}')) + && !/\{\{ ?(?:- |\w+?)(, ?)?\w+ ?\}\}/.test(message) ) { throw new SyntaxError( 'Interpolation error. See: https://www.i18next.com/misc/json-format', ); } - if (message.includes('$t(') && !/\$t\(\w+:\w+(?:\.\w+)*\)/g.test(message)) { + if (message.includes('$t(') && !/\$t\(\w+:\w+(?:\.\w+)*\)/.test(message)) { throw new SyntaxError( 'Nesting error. See: https://www.i18next.com/misc/json-format', ); } -}; +} module.exports = validate; diff --git a/src/api/auth/use-forgot-password.ts b/src/api/auth/use-forgot-password.ts index 6cd81e494..bd4181051 100644 --- a/src/api/auth/use-forgot-password.ts +++ b/src/api/auth/use-forgot-password.ts @@ -13,7 +13,7 @@ type Response = { // Should be replaced with the app's web url. const redirectUrl = 'https://example.com'; -const sendForgotPasswordInstructions = async (variables: Variables) => { +async function sendForgotPasswordInstructions(variables: Variables) { const { data } = await client({ url: '/v1/users/password', // Dummy endpoint for forgot password method: 'POST', @@ -26,8 +26,8 @@ const sendForgotPasswordInstructions = async (variables: Variables) => { }, }); return data; -}; +} export const useForgotPassword = createMutation({ - mutationFn: (variables) => sendForgotPasswordInstructions(variables), + mutationFn: async variables => sendForgotPasswordInstructions(variables), }); diff --git a/src/api/auth/use-login.ts b/src/api/auth/use-login.ts index 61d22d119..413da4511 100644 --- a/src/api/auth/use-login.ts +++ b/src/api/auth/use-login.ts @@ -16,7 +16,7 @@ type Response = { refreshToken: string; }; -const login = async (variables: Variables) => { +async function login(variables: Variables) { const { data } = await client({ url: '/v1/users/sign_in', method: 'POST', @@ -25,8 +25,8 @@ const login = async (variables: Variables) => { }, }); return data; -}; +} export const useLogin = createMutation({ - mutationFn: (variables) => login(variables), + mutationFn: async variables => login(variables), }); diff --git a/src/api/auth/use-sign-up.ts b/src/api/auth/use-sign-up.ts index 469e4b3d8..ca393e45c 100644 --- a/src/api/auth/use-sign-up.ts +++ b/src/api/auth/use-sign-up.ts @@ -26,7 +26,7 @@ type Response = { }; }; -const signUp = async (variables: Variables) => { +async function signUp(variables: Variables) { const { data } = await client({ url: '/v1/users', method: 'POST', @@ -36,8 +36,8 @@ const signUp = async (variables: Variables) => { }); return data; -}; +} export const useSignUp = createMutation({ - mutationFn: (variables) => signUp(variables), + mutationFn: async variables => signUp(variables), }); diff --git a/src/api/auth/use-update-password.ts b/src/api/auth/use-update-password.ts index 92be4e4bc..3e20c46f8 100644 --- a/src/api/auth/use-update-password.ts +++ b/src/api/auth/use-update-password.ts @@ -27,7 +27,7 @@ type Response = { data?: ResponseData; }; -const updatePasswordRequest = async (variables: Variables) => { +async function updatePasswordRequest(variables: Variables) { const { data } = await client({ url: '/v1/users/password', method: 'PUT', @@ -37,8 +37,8 @@ const updatePasswordRequest = async (variables: Variables) => { }, }); return data; -}; +} export const useUpdatePassword = createMutation({ - mutationFn: (variables) => updatePasswordRequest(variables), + mutationFn: async variables => updatePasswordRequest(variables), }); diff --git a/src/api/auth/use-user.tsx b/src/api/auth/use-user.tsx index 067750824..e72fae680 100644 --- a/src/api/auth/use-user.tsx +++ b/src/api/auth/use-user.tsx @@ -14,20 +14,20 @@ export type DeleteUserVariables = { email: string; }; -const getUser = async () => { +async function getUser() { const { data } = await client({ url: '/v1/users', method: 'GET', }); return data; -}; +} -const deleteUser = async (variables: DeleteUserVariables) => { +async function deleteUser(variables: DeleteUserVariables) { const { data } = await client.delete('/v1/users', { data: variables, }); return data; -}; +} export const useUser = createQuery({ queryKey: ['getUser'], diff --git a/src/api/common/api-provider.tsx b/src/api/common/api-provider.tsx index b02d39492..9354cc30e 100644 --- a/src/api/common/api-provider.tsx +++ b/src/api/common/api-provider.tsx @@ -1,6 +1,7 @@ +import type { ReactNode } from 'react'; import { useReactQueryDevTools } from '@dev-plugins/react-query'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import { type ReactNode } from 'react'; + export const queryClient = new QueryClient(); export function APIProvider({ children }: Readonly<{ children: ReactNode }>) { diff --git a/src/api/common/interceptors.ts b/src/api/common/interceptors.ts index 2daf0bde7..34a3691e6 100644 --- a/src/api/common/interceptors.ts +++ b/src/api/common/interceptors.ts @@ -56,6 +56,6 @@ export default function interceptors() { return response; }, - (error: AxiosError) => Promise.reject(error), + async (error: AxiosError) => Promise.reject(error), ); } diff --git a/src/api/common/utils.tsx b/src/api/common/utils.tsx index cef901928..48d0f4210 100644 --- a/src/api/common/utils.tsx +++ b/src/api/common/utils.tsx @@ -42,12 +42,12 @@ export function getUrlParameters( export const getPreviousPageParam: GetNextPageParamFunction< unknown, PaginateQuery -> = (page) => getUrlParameters(page.previous)?.offset ?? null; +> = page => getUrlParameters(page.previous)?.offset ?? null; export const getNextPageParam: GetPreviousPageParamFunction< unknown, PaginateQuery -> = (page) => getUrlParameters(page.next)?.offset ?? null; +> = page => getUrlParameters(page.next)?.offset ?? null; type GenericObject = { [key: string]: unknown }; @@ -55,32 +55,34 @@ function isGenericObject(value: unknown): value is GenericObject { return typeof value === 'object' && value !== null && !Array.isArray(value); } -export const toCamelCase = (obj: GenericObject): GenericObject => { +export function toCamelCase(obj: GenericObject): GenericObject { const newObj: GenericObject = {}; for (const key in obj) { if (Object.hasOwn(obj, key)) { - const newKey = key.replaceAll(/_([a-z])/g, (g) => g[1].toUpperCase()); + const newKey = key.replaceAll(/_([a-z])/g, g => g[1].toUpperCase()); const value = obj[key]; if (isGenericObject(value)) { newObj[newKey] = toCamelCase(value); - } else { + } + else { newObj[newKey] = value; } } } return newObj; -}; +} -const camelToSnake = (key: string): string => - key.replaceAll(/([a-z])([A-Z])/g, '$1_$2').toLowerCase(); +function camelToSnake(key: string): string { + return key.replaceAll(/([a-z])([A-Z])/g, '$1_$2').toLowerCase(); +} -export const toSnakeCase = (obj: GenericObject): GenericObject => { +export function toSnakeCase(obj: GenericObject): GenericObject { const newObj: GenericObject = {}; for (const [key, value] of Object.entries(obj)) { const newKey = camelToSnake(key); - newObj[newKey] = - isGenericObject(value) && value !== null ? toSnakeCase(value) : value; + newObj[newKey] + = isGenericObject(value) && value !== null ? toSnakeCase(value) : value; } return newObj; -}; +} diff --git a/src/api/query-factory.ts b/src/api/query-factory.ts index 3c9034d3e..76c51276c 100644 --- a/src/api/query-factory.ts +++ b/src/api/query-factory.ts @@ -9,7 +9,7 @@ type Filters = { }; export const postKeys = createQueryKeys('posts', { list: (filters: Filters) => [filters], - detail: (id) => ({ + detail: id => ({ queryKey: [id], contextQueries: { comments: { @@ -20,8 +20,8 @@ export const postKeys = createQueryKeys('posts', { }); const productsKeys = createQueryKeys('products', { - list: (filters) => [filters], - detail: (id) => [id], + list: filters => [filters], + detail: id => [id], }); export const queryFactory = mergeQueryKeys(postKeys, productsKeys); diff --git a/src/api/types.ts b/src/api/types.ts index 84e7c7dc7..c00a9d916 100644 --- a/src/api/types.ts +++ b/src/api/types.ts @@ -5,8 +5,8 @@ export type PaginateQuery = { previous: string | null; }; -export type ApiResponse = - | { - errors: Array; - } +export type ApiResponse + = | { + errors: Array; + } | T; diff --git a/src/app/(app)/_layout.tsx b/src/app/(app)/_layout.tsx index 9da348c65..cd5771624 100644 --- a/src/app/(app)/_layout.tsx +++ b/src/app/(app)/_layout.tsx @@ -60,10 +60,12 @@ export default function TabLayout() { ); } -const CreateNewPostLink = () => ( - - - Create - - -); +function CreateNewPostLink() { + return ( + + + Create + + + ); +} diff --git a/src/app/(app)/settings.tsx b/src/app/(app)/settings.tsx index 3b40d16cb..b4da31129 100644 --- a/src/app/(app)/settings.tsx +++ b/src/app/(app)/settings.tsx @@ -1,7 +1,7 @@ /* eslint-disable max-lines-per-function */ import { Link } from 'expo-router'; import { useColorScheme } from 'nativewind'; -import React from 'react'; +import * as React from 'react'; import { showMessage } from 'react-native-flash-message'; import { useDeleteUser, useUser } from '@/api/auth/use-user'; @@ -29,11 +29,11 @@ export default function Settings() { onSuccess: () => { logout(); }, - onError: (error) => showMessage({ message: error.message, type: 'danger' }), + onError: error => showMessage({ message: error.message, type: 'danger' }), }); const { colorScheme } = useColorScheme(); - const iconColor = - colorScheme === 'dark' ? colors.neutral[400] : colors.neutral[500]; + const iconColor + = colorScheme === 'dark' ? colors.neutral[400] : colors.neutral[500]; const handleDeleteUser = async () => { if (!userData?.email) { @@ -51,9 +51,9 @@ export default function Settings() { {translate('settings.title')} - + showMessage({ message: error.message, type: 'danger' }), + onError: error => showMessage({ message: error.message, type: 'danger' }), }); const onSubmit: LoginFormProps['onSubmit'] = (data) => { diff --git a/src/app/sign-up.tsx b/src/app/sign-up.tsx index dd8daf857..d92280a71 100644 --- a/src/app/sign-up.tsx +++ b/src/app/sign-up.tsx @@ -1,14 +1,14 @@ -import React from 'react'; -import { showMessage } from 'react-native-flash-message'; +import type { SignUpFormProps } from '@/components/sign-up-form'; +import * as React from 'react'; +import { showMessage } from 'react-native-flash-message'; import { useSignUp } from '@/api/auth/use-sign-up'; -import type { SignUpFormProps } from '@/components/sign-up-form'; import { SignUpForm } from '@/components/sign-up-form'; import { FocusAwareStatusBar } from '@/components/ui'; export default function SignIn() { const { mutate: signUp, isPending } = useSignUp({ - onError: (error) => showMessage({ message: error.message, type: 'danger' }), + onError: error => showMessage({ message: error.message, type: 'danger' }), }); const onSubmit: SignUpFormProps['onSubmit'] = (data) => { diff --git a/src/app/update-password.tsx b/src/app/update-password.tsx index 202e1d652..fbb0ce211 100644 --- a/src/app/update-password.tsx +++ b/src/app/update-password.tsx @@ -1,6 +1,6 @@ import { zodResolver } from '@hookform/resolvers/zod'; import { useNavigation } from 'expo-router'; -import React from 'react'; +import * as React from 'react'; import { useForm } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { showMessage } from 'react-native-flash-message'; @@ -30,7 +30,7 @@ const schema = z ), passwordConfirmation: z.string(), }) - .refine((data) => data.password === data.passwordConfirmation, { + .refine(data => data.password === data.passwordConfirmation, { message: translate('updatePassword.error.passwordsMustMatch'), path: ['passwordConfirmation'], }); diff --git a/src/app/www.tsx b/src/app/www.tsx index 15009aad6..c85492ea0 100644 --- a/src/app/www.tsx +++ b/src/app/www.tsx @@ -1,5 +1,6 @@ import { useLocalSearchParams, useNavigation, useRouter } from 'expo-router'; -import React, { useEffect } from 'react'; +import * as React from 'react'; +import { useEffect } from 'react'; import { View } from 'react-native'; import { WebView } from 'react-native-webview'; diff --git a/src/components/buttons.tsx b/src/components/buttons.tsx index 2d56ee3de..c49688871 100644 --- a/src/components/buttons.tsx +++ b/src/components/buttons.tsx @@ -2,33 +2,35 @@ import { Button, View } from '@/components/ui'; import { Title } from './title'; -export const Buttons = () => ( - <> - - <View> - <View className="flex-row flex-wrap"> - <Button label="small" size="sm" className="mr-2" /> - <Button label="small" loading size="sm" className="mr-2 min-w-[60px]" /> - <Button label="small" size="sm" variant="secondary" className="mr-2" /> - <Button label="small" size="sm" variant="outline" className="mr-2" /> - <Button - label="small" - size="sm" - variant="destructive" - className="mr-2" - /> - <Button label="small" size="sm" variant="ghost" className="mr-2" /> - <Button label="small" size="sm" disabled className="mr-2" /> +export function Buttons() { + return ( + <> + <Title text="Buttons" /> + <View> + <View className="flex-row flex-wrap"> + <Button label="small" size="sm" className="mr-2" /> + <Button label="small" loading size="sm" className="mr-2 min-w-[60px]" /> + <Button label="small" size="sm" variant="secondary" className="mr-2" /> + <Button label="small" size="sm" variant="outline" className="mr-2" /> + <Button + label="small" + size="sm" + variant="destructive" + className="mr-2" + /> + <Button label="small" size="sm" variant="ghost" className="mr-2" /> + <Button label="small" size="sm" disabled className="mr-2" /> + </View> + <Button label="Default Button" /> + <Button label="Secondary Button" variant="secondary" /> + <Button label="Outline Button" variant="outline" /> + <Button label="Destructive Button" variant="destructive" /> + <Button label="Ghost Button" variant="ghost" /> + <Button label="Button" loading={true} /> + <Button label="Button" loading={true} variant="outline" /> + <Button label="Default Button Disabled" disabled /> + <Button label="Secondary Button Disabled" disabled variant="secondary" /> </View> - <Button label="Default Button" /> - <Button label="Secondary Button" variant="secondary" /> - <Button label="Outline Button" variant="outline" /> - <Button label="Destructive Button" variant="destructive" /> - <Button label="Ghost Button" variant="ghost" /> - <Button label="Button" loading={true} /> - <Button label="Button" loading={true} variant="outline" /> - <Button label="Default Button Disabled" disabled /> - <Button label="Secondary Button Disabled" disabled variant="secondary" /> - </View> - </> -); + </> + ); +} diff --git a/src/components/colors.tsx b/src/components/colors.tsx index 8ffc01637..125ba7e11 100644 --- a/src/components/colors.tsx +++ b/src/components/colors.tsx @@ -2,18 +2,21 @@ import { Text, View } from '@/components/ui'; import colors from '@/components/ui/colors'; import { Title } from './title'; + type ColorName = keyof typeof colors; -export const Colors = () => ( - <> - <Title text="Colors" /> - {(Object.keys(colors) as Array<ColorName>).map((name) => ( - <Color name={name} key={name} /> - ))} - </> -); +export function Colors() { + return ( + <> + <Title text="Colors" /> + {(Object.keys(colors) as Array<ColorName>).map(name => ( + <Color name={name} key={name} /> + ))} + </> + ); +} -const Color = ({ name }: { name: ColorName }) => { +function Color({ name }: { name: ColorName }) { if (typeof colors[name] === 'string') { return null; } @@ -29,14 +32,16 @@ const Color = ({ name }: { name: ColorName }) => { </View> </View> ); -}; +} -const ColorCard = ({ color, value }: { value: string; color: string }) => ( - <View className="flex-1"> - <View - className="h-14 w-full rounded-sm" - style={{ backgroundColor: color }} - /> - <Text className="text-sm">{value}</Text> - </View> -); +function ColorCard({ color, value }: { value: string; color: string }) { + return ( + <View className="flex-1"> + <View + className="h-14 w-full rounded-sm" + style={{ backgroundColor: color }} + /> + <Text className="text-sm">{value}</Text> + </View> + ); +} diff --git a/src/components/cover.tsx b/src/components/cover.tsx index 2e81fb292..c73f9f2f1 100644 --- a/src/components/cover.tsx +++ b/src/components/cover.tsx @@ -2,215 +2,217 @@ import type { SvgProps } from 'react-native-svg'; import Svg, { Circle, Path, Polygon } from 'react-native-svg'; // TODO: should be updated to simple images -export const Cover = (props: SvgProps) => ( - <Svg data-name="Layer 1" viewBox="0 0 831 729.98934" {...props}> - <Path - d="M908.4762,788.57689v-72.34S936.66786,767.52287,908.4762,788.57689Z" - transform="translate(-184.5 -85.00533)" - fill="#f1f1f1" - /> - <Path - d="M910.21766,788.56417,856.928,739.64292S913.77324,753.55845,910.21766,788.56417Z" - transform="translate(-184.5 -85.00533)" - fill="#f1f1f1" - /> - <Path - d="M290.95913,788.57689v-72.34S262.76747,767.52287,290.95913,788.57689Z" - transform="translate(-184.5 -85.00533)" - fill="#f1f1f1" - /> - <Path - d="M289.21766,788.56417l53.28963-48.92125S285.66209,753.55845,289.21766,788.56417Z" - transform="translate(-184.5 -85.00533)" - fill="#f1f1f1" - /> - <Path - d="M775.25582,252.05354h-3.86238V146.24468a61.23928,61.23928,0,0,0-61.23923-61.23935H485.9837a61.23927,61.23927,0,0,0-61.2394,61.23916V726.72032a61.2393,61.2393,0,0,0,61.23922,61.23935H710.15391a61.2393,61.2393,0,0,0,61.23947-61.23911V327.3701h3.86244Z" - transform="translate(-184.5 -85.00533)" - fill="#3f3d56" - /> - <Path - d="M712.625,100.93768H683.36335a21.72758,21.72758,0,0,1-20.11676,29.93348H534.82222a21.72754,21.72754,0,0,1-20.11676-29.93351H487.375a45.73283,45.73283,0,0,0-45.73286,45.73276V726.2945a45.73282,45.73282,0,0,0,45.7328,45.73286H712.625a45.73283,45.73283,0,0,0,45.73286-45.7328h0V146.67045A45.73279,45.73279,0,0,0,712.625,100.93768Z" - transform="translate(-184.5 -85.00533)" - fill="#fff" - /> - <Path - d="M706.98254,762.07515H493.01746c-24.58521,0-44.58667-17.85253-44.58667-39.79589V693.46871c0-17.48975,15.92895-31.71875,35.50805-31.71875H716.06116c19.5791,0,35.50805,14.229,35.50805,31.71875v28.81055C751.56921,744.22262,731.56775,762.07515,706.98254,762.07515Z" - transform="translate(-184.5 -85.00533)" - fill="#e5e5e5" - /> - <Path - d="M515.50942,277.85025H467.78191a3.22863,3.22863,0,0,1-3.22483-3.22483V226.89791a3.22863,3.22863,0,0,1,3.22483-3.22483h47.72751a3.22863,3.22863,0,0,1,3.22483,3.22483v47.72751A3.22863,3.22863,0,0,1,515.50942,277.85025Z" - transform="translate(-184.5 -85.00533)" - fill="#ff7b1a" - /> - <Path - d="M587.74564,277.85025h-47.7275a3.22863,3.22863,0,0,1-3.22483-3.22483V226.89791a3.22862,3.22862,0,0,1,3.22483-3.22483h47.7275a3.22862,3.22862,0,0,1,3.22483,3.22483v47.72751A3.22863,3.22863,0,0,1,587.74564,277.85025Z" - transform="translate(-184.5 -85.00533)" - fill="#e5e5e5" - /> - <Path - d="M659.98186,277.85025h-47.7275a3.22863,3.22863,0,0,1-3.22483-3.22483V226.89791a3.22862,3.22862,0,0,1,3.22483-3.22483h47.7275a3.22862,3.22862,0,0,1,3.22483,3.22483v47.72751A3.22863,3.22863,0,0,1,659.98186,277.85025Z" - transform="translate(-184.5 -85.00533)" - fill="#e5e5e5" - /> - <Path - d="M732.21809,277.85025H684.49058a3.22863,3.22863,0,0,1-3.22483-3.22483V226.89791a3.22863,3.22863,0,0,1,3.22483-3.22483h47.72751a3.22863,3.22863,0,0,1,3.22483,3.22483v47.72751A3.22863,3.22863,0,0,1,732.21809,277.85025Z" - transform="translate(-184.5 -85.00533)" - fill="#e5e5e5" - /> - <Path - d="M515.33871,366.21063h-47.7275a3.22863,3.22863,0,0,1-3.22483-3.22484v-47.7275a3.22862,3.22862,0,0,1,3.22483-3.22483h47.7275a3.22862,3.22862,0,0,1,3.22483,3.22483v47.7275A3.22863,3.22863,0,0,1,515.33871,366.21063Z" - transform="translate(-184.5 -85.00533)" - fill="#e5e5e5" - /> - <Path - d="M587.57493,366.21063h-47.7275a3.22863,3.22863,0,0,1-3.22483-3.22484v-47.7275a3.22862,3.22862,0,0,1,3.22483-3.22483h47.7275a3.22863,3.22863,0,0,1,3.22484,3.22483v47.7275A3.22864,3.22864,0,0,1,587.57493,366.21063Z" - transform="translate(-184.5 -85.00533)" - fill="#e5e5e5" - /> - <Path - d="M659.81116,366.21063H612.08365a3.22864,3.22864,0,0,1-3.22483-3.22484v-47.7275a3.22863,3.22863,0,0,1,3.22483-3.22483h47.72751a3.22863,3.22863,0,0,1,3.22483,3.22483v47.7275A3.22864,3.22864,0,0,1,659.81116,366.21063Z" - transform="translate(-184.5 -85.00533)" - fill="#ff7b1a" - /> - <Path - d="M732.04738,366.21063h-47.7275a3.22864,3.22864,0,0,1-3.22484-3.22484v-47.7275a3.22863,3.22863,0,0,1,3.22484-3.22483h47.7275a3.22862,3.22862,0,0,1,3.22483,3.22483v47.7275A3.22863,3.22863,0,0,1,732.04738,366.21063Z" - transform="translate(-184.5 -85.00533)" - fill="#ff7b1a" - /> - <Path - d="M515.168,454.571H467.4405a3.22863,3.22863,0,0,1-3.22483-3.22484v-47.7275a3.22862,3.22862,0,0,1,3.22483-3.22483H515.168a3.22863,3.22863,0,0,1,3.22484,3.22483v47.7275A3.22864,3.22864,0,0,1,515.168,454.571Z" - transform="translate(-184.5 -85.00533)" - fill="#e5e5e5" - /> - <Path - d="M587.40423,454.571H539.67672a3.22864,3.22864,0,0,1-3.22483-3.22484v-47.7275a3.22863,3.22863,0,0,1,3.22483-3.22483h47.72751a3.22863,3.22863,0,0,1,3.22483,3.22483v47.7275A3.22864,3.22864,0,0,1,587.40423,454.571Z" - transform="translate(-184.5 -85.00533)" - fill="#e5e5e5" - /> - <Path - d="M659.64045,454.571H611.913a3.22864,3.22864,0,0,1-3.22484-3.22484v-47.7275a3.22863,3.22863,0,0,1,3.22484-3.22483h47.7275a3.22862,3.22862,0,0,1,3.22483,3.22483v47.7275A3.22863,3.22863,0,0,1,659.64045,454.571Z" - transform="translate(-184.5 -85.00533)" - fill="#e5e5e5" - /> - <Path - d="M731.87667,454.571h-47.7275a3.22863,3.22863,0,0,1-3.22483-3.22484v-47.7275a3.22862,3.22862,0,0,1,3.22483-3.22483h47.7275a3.22862,3.22862,0,0,1,3.22483,3.22483v47.7275A3.22863,3.22863,0,0,1,731.87667,454.571Z" - transform="translate(-184.5 -85.00533)" - fill="#e5e5e5" - /> - <Path - d="M514.9973,542.93139H467.26979a3.22864,3.22864,0,0,1-3.22483-3.22484v-47.7275a3.22863,3.22863,0,0,1,3.22483-3.22483H514.9973a3.22863,3.22863,0,0,1,3.22483,3.22483v47.7275A3.22864,3.22864,0,0,1,514.9973,542.93139Z" - transform="translate(-184.5 -85.00533)" - fill="#e5e5e5" - /> - <Path - d="M587.23352,542.93139H539.506a3.22864,3.22864,0,0,1-3.22484-3.22484v-47.7275a3.22863,3.22863,0,0,1,3.22484-3.22483h47.7275a3.22862,3.22862,0,0,1,3.22483,3.22483v47.7275A3.22863,3.22863,0,0,1,587.23352,542.93139Z" - transform="translate(-184.5 -85.00533)" - fill="#e5e5e5" - /> - <Path - d="M659.46974,542.93139h-47.7275a3.22863,3.22863,0,0,1-3.22483-3.22484v-47.7275a3.22862,3.22862,0,0,1,3.22483-3.22483h47.7275a3.22862,3.22862,0,0,1,3.22483,3.22483v47.7275A3.22863,3.22863,0,0,1,659.46974,542.93139Z" - transform="translate(-184.5 -85.00533)" - fill="#e5e5e5" - /> - <Path - d="M731.706,542.93139H683.97846a3.22864,3.22864,0,0,1-3.22483-3.22484v-47.7275a3.22863,3.22863,0,0,1,3.22483-3.22483H731.706a3.22863,3.22863,0,0,1,3.22483,3.22483v47.7275A3.22864,3.22864,0,0,1,731.706,542.93139Z" - transform="translate(-184.5 -85.00533)" - fill="#e5e5e5" - /> - <Path - d="M515.50942,740.29107H467.78191a3.22864,3.22864,0,0,1-3.22483-3.22484v-47.7275a3.22863,3.22863,0,0,1,3.22483-3.22483h47.72751a3.22863,3.22863,0,0,1,3.22483,3.22483v47.7275A3.22864,3.22864,0,0,1,515.50942,740.29107Z" - transform="translate(-184.5 -85.00533)" - fill="#fff" - /> - <Path - d="M587.74564,740.29107h-47.7275a3.22863,3.22863,0,0,1-3.22483-3.22484v-47.7275a3.22862,3.22862,0,0,1,3.22483-3.22483h47.7275a3.22862,3.22862,0,0,1,3.22483,3.22483v47.7275A3.22863,3.22863,0,0,1,587.74564,740.29107Z" - transform="translate(-184.5 -85.00533)" - fill="#fff" - /> - <Path - d="M659.98186,740.29107h-47.7275a3.22863,3.22863,0,0,1-3.22483-3.22484v-47.7275a3.22862,3.22862,0,0,1,3.22483-3.22483h47.7275a3.22862,3.22862,0,0,1,3.22483,3.22483v47.7275A3.22863,3.22863,0,0,1,659.98186,740.29107Z" - transform="translate(-184.5 -85.00533)" - fill="#fff" - /> - <Path - d="M732.21809,740.29107H684.49058a3.22864,3.22864,0,0,1-3.22483-3.22484v-47.7275a3.22863,3.22863,0,0,1,3.22483-3.22483h47.72751a3.22863,3.22863,0,0,1,3.22483,3.22483v47.7275A3.22864,3.22864,0,0,1,732.21809,740.29107Z" - transform="translate(-184.5 -85.00533)" - fill="#fff" - /> - <Circle cx={392.11051} cy={548.22133} r={6.44966} fill="#e5e5e5" /> - <Circle cx={415.32929} cy={548.22133} r={6.44966} fill="#e5e5e5" /> - <Circle cx={438.54808} cy={548.22133} r={6.44966} fill="#e5e5e5" /> - <Path - d="M1014.5,789.00533h-829a1,1,0,0,1,0-2h829a1,1,0,0,1,0,2Z" - transform="translate(-184.5 -85.00533)" - fill="#cbcbcb" - /> - <Path - d="M510.864,592.10718a13.04925,13.04925,0,0,0-1.75972-19.93187l12.59561-44.62912-22.9642,7.30333-8.44035,41.26089A13.11993,13.11993,0,0,0,510.864,592.10718Z" - transform="translate(-184.5 -85.00533)" - fill="#ffb7b7" - /> - <Path - d="M517.39368,564.75191a5.96933,5.96933,0,0,1-1.24508.10531l-22.02964-.44139a5.83948,5.83948,0,0,1-5.65948-6.693L510.80711,406.732a18.51184,18.51184,0,0,1,18.25725-15.71657h0a18.41265,18.41265,0,0,1,17.83,22.82525l-15.84048,64.15663L522.07066,559.658A5.80616,5.80616,0,0,1,517.39368,564.75191Z" - transform="translate(-184.5 -85.00533)" - fill="#3f3d56" - /> - <Polygon - points="342.105 718.105 354.365 718.105 360.198 670.817 342.103 670.818 342.105 718.105" - fill="#ffb7b7" - /> - <Path - d="M523.47815,799.108l24.144-.001h.001a15.3873,15.3873,0,0,1,15.38647,15.38623v.5l-39.53076.00147Z" - transform="translate(-184.5 -85.00533)" - fill="#2f2e41" - /> - <Polygon - points="394.382 714.123 406.565 715.489 417.632 669.146 399.65 667.13 394.382 714.123" - fill="#ffb7b7" - /> - <Path - d="M576.22006,794.80228l23.99372,2.69008.001.00011a15.38731,15.38731,0,0,1,13.57568,17.00532l-.05573.49688-39.28462-4.40458Z" - transform="translate(-184.5 -85.00533)" - fill="#2f2e41" - /> - <Path - d="M515.09858,539.9603s-16.808,37.20886-1.96521,61.37694l8.84283,188.16809h20.30315l19.69685-152,35,45L575.65255,787.53294l24.83152,1.394L634.9762,682.50533S608.47831,565.15663,599.72725,562.331l-5.75105-26.82565Z" - transform="translate(-184.5 -85.00533)" - fill="#2f2e41" - /> - <Path - d="M507.61793,572.62738s-15.14173,17.37795,24.85827,23.37795,82-3,83-15S507.61793,572.62738,507.61793,572.62738Z" - transform="translate(-184.5 -85.00533)" - fill="#cbcbcb" - /> - <Path - d="M708.1348,357.05837a11.61132,11.61132,0,0,1-14.05875,10.92486l-15.11989,21.80439-15.49148-5.95655,21.78468-30.49213a11.67422,11.67422,0,0,1,22.88544,3.71943Z" - transform="translate(-184.5 -85.00533)" - fill="#ffb7b7" - /> - <Path - d="M580.2636,385.112l-21.37737-9.671L531.49666,377.399s-33.02046,38.6063-20.02046,75.6063l-8,129c51,14,74.1831-12.25781,111-1L603.10422,437.636Z" - transform="translate(-184.5 -85.00533)" - fill="#3f3d56" - /> - <Path - d="M565.9762,394.50533l14.2874-9.39337s19.84646-3,27.77953,4.69668c0,0,26.92659,2.25376,33.42983,8.97523l7.16026,1.6141,23.7869-30.80184,14.55608,7.9092-21,57-62.872,3.13064Z" - transform="translate(-184.5 -85.00533)" - fill="#3f3d56" - /> - <Circle - cx={554.72002} - cy={334.98279} - r={33.74484} - transform="translate(-277.19936 222.12213) rotate(-28.66318)" - fill="#ffb7b7" - /> - <Path - d="M525.53291,308.60053c6.02337-10.83362,13.55038-17.84837,25.94329-17.5952s23.11287-.23674,28.68877,10.83384a18.20735,18.20735,0,0,0,2.14293-8.97911,10.2833,10.2833,0,0,1,4.53932,10.34472,7.50982,7.50982,0,0,0,3.70778-6.16528c4.136,1.37646,5.2115,7.20519,3.11866,11.02892s-6.19726,6.03481-10.13517,7.904-2.1199,11.75518-4.69141,15.27487c-1.79468,2.45641-2.61549,5.4668-3.82479,8.25829a.54091.54091,0,0,1-.2448.25565c-2.77277,1.54608-4.5229,4.30857-4.03339,7.44529a1.21274,1.21274,0,0,1-.03945.70958c-3.51018,6.613-7.29926,13.53194-13.66181,17.478a22.65364,22.65364,0,0,1-17.01862,2.63072c-6.50353-1.55494-12.1259-5.86678-16.18006-11.18444s-6.662-11.60249-8.62153-17.99576c-1.73827-5.6714-3.00232-11.73529-1.62409-17.50476s6.04709-11.112,11.96211-11.55783" - transform="translate(-184.5 -85.00533)" - fill="#2f2e41" - /> - </Svg> -); +export function Cover(props: SvgProps) { + return ( + <Svg data-name="Layer 1" viewBox="0 0 831 729.98934" {...props}> + <Path + d="M908.4762,788.57689v-72.34S936.66786,767.52287,908.4762,788.57689Z" + transform="translate(-184.5 -85.00533)" + fill="#f1f1f1" + /> + <Path + d="M910.21766,788.56417,856.928,739.64292S913.77324,753.55845,910.21766,788.56417Z" + transform="translate(-184.5 -85.00533)" + fill="#f1f1f1" + /> + <Path + d="M290.95913,788.57689v-72.34S262.76747,767.52287,290.95913,788.57689Z" + transform="translate(-184.5 -85.00533)" + fill="#f1f1f1" + /> + <Path + d="M289.21766,788.56417l53.28963-48.92125S285.66209,753.55845,289.21766,788.56417Z" + transform="translate(-184.5 -85.00533)" + fill="#f1f1f1" + /> + <Path + d="M775.25582,252.05354h-3.86238V146.24468a61.23928,61.23928,0,0,0-61.23923-61.23935H485.9837a61.23927,61.23927,0,0,0-61.2394,61.23916V726.72032a61.2393,61.2393,0,0,0,61.23922,61.23935H710.15391a61.2393,61.2393,0,0,0,61.23947-61.23911V327.3701h3.86244Z" + transform="translate(-184.5 -85.00533)" + fill="#3f3d56" + /> + <Path + d="M712.625,100.93768H683.36335a21.72758,21.72758,0,0,1-20.11676,29.93348H534.82222a21.72754,21.72754,0,0,1-20.11676-29.93351H487.375a45.73283,45.73283,0,0,0-45.73286,45.73276V726.2945a45.73282,45.73282,0,0,0,45.7328,45.73286H712.625a45.73283,45.73283,0,0,0,45.73286-45.7328h0V146.67045A45.73279,45.73279,0,0,0,712.625,100.93768Z" + transform="translate(-184.5 -85.00533)" + fill="#fff" + /> + <Path + d="M706.98254,762.07515H493.01746c-24.58521,0-44.58667-17.85253-44.58667-39.79589V693.46871c0-17.48975,15.92895-31.71875,35.50805-31.71875H716.06116c19.5791,0,35.50805,14.229,35.50805,31.71875v28.81055C751.56921,744.22262,731.56775,762.07515,706.98254,762.07515Z" + transform="translate(-184.5 -85.00533)" + fill="#e5e5e5" + /> + <Path + d="M515.50942,277.85025H467.78191a3.22863,3.22863,0,0,1-3.22483-3.22483V226.89791a3.22863,3.22863,0,0,1,3.22483-3.22483h47.72751a3.22863,3.22863,0,0,1,3.22483,3.22483v47.72751A3.22863,3.22863,0,0,1,515.50942,277.85025Z" + transform="translate(-184.5 -85.00533)" + fill="#ff7b1a" + /> + <Path + d="M587.74564,277.85025h-47.7275a3.22863,3.22863,0,0,1-3.22483-3.22483V226.89791a3.22862,3.22862,0,0,1,3.22483-3.22483h47.7275a3.22862,3.22862,0,0,1,3.22483,3.22483v47.72751A3.22863,3.22863,0,0,1,587.74564,277.85025Z" + transform="translate(-184.5 -85.00533)" + fill="#e5e5e5" + /> + <Path + d="M659.98186,277.85025h-47.7275a3.22863,3.22863,0,0,1-3.22483-3.22483V226.89791a3.22862,3.22862,0,0,1,3.22483-3.22483h47.7275a3.22862,3.22862,0,0,1,3.22483,3.22483v47.72751A3.22863,3.22863,0,0,1,659.98186,277.85025Z" + transform="translate(-184.5 -85.00533)" + fill="#e5e5e5" + /> + <Path + d="M732.21809,277.85025H684.49058a3.22863,3.22863,0,0,1-3.22483-3.22483V226.89791a3.22863,3.22863,0,0,1,3.22483-3.22483h47.72751a3.22863,3.22863,0,0,1,3.22483,3.22483v47.72751A3.22863,3.22863,0,0,1,732.21809,277.85025Z" + transform="translate(-184.5 -85.00533)" + fill="#e5e5e5" + /> + <Path + d="M515.33871,366.21063h-47.7275a3.22863,3.22863,0,0,1-3.22483-3.22484v-47.7275a3.22862,3.22862,0,0,1,3.22483-3.22483h47.7275a3.22862,3.22862,0,0,1,3.22483,3.22483v47.7275A3.22863,3.22863,0,0,1,515.33871,366.21063Z" + transform="translate(-184.5 -85.00533)" + fill="#e5e5e5" + /> + <Path + d="M587.57493,366.21063h-47.7275a3.22863,3.22863,0,0,1-3.22483-3.22484v-47.7275a3.22862,3.22862,0,0,1,3.22483-3.22483h47.7275a3.22863,3.22863,0,0,1,3.22484,3.22483v47.7275A3.22864,3.22864,0,0,1,587.57493,366.21063Z" + transform="translate(-184.5 -85.00533)" + fill="#e5e5e5" + /> + <Path + d="M659.81116,366.21063H612.08365a3.22864,3.22864,0,0,1-3.22483-3.22484v-47.7275a3.22863,3.22863,0,0,1,3.22483-3.22483h47.72751a3.22863,3.22863,0,0,1,3.22483,3.22483v47.7275A3.22864,3.22864,0,0,1,659.81116,366.21063Z" + transform="translate(-184.5 -85.00533)" + fill="#ff7b1a" + /> + <Path + d="M732.04738,366.21063h-47.7275a3.22864,3.22864,0,0,1-3.22484-3.22484v-47.7275a3.22863,3.22863,0,0,1,3.22484-3.22483h47.7275a3.22862,3.22862,0,0,1,3.22483,3.22483v47.7275A3.22863,3.22863,0,0,1,732.04738,366.21063Z" + transform="translate(-184.5 -85.00533)" + fill="#ff7b1a" + /> + <Path + d="M515.168,454.571H467.4405a3.22863,3.22863,0,0,1-3.22483-3.22484v-47.7275a3.22862,3.22862,0,0,1,3.22483-3.22483H515.168a3.22863,3.22863,0,0,1,3.22484,3.22483v47.7275A3.22864,3.22864,0,0,1,515.168,454.571Z" + transform="translate(-184.5 -85.00533)" + fill="#e5e5e5" + /> + <Path + d="M587.40423,454.571H539.67672a3.22864,3.22864,0,0,1-3.22483-3.22484v-47.7275a3.22863,3.22863,0,0,1,3.22483-3.22483h47.72751a3.22863,3.22863,0,0,1,3.22483,3.22483v47.7275A3.22864,3.22864,0,0,1,587.40423,454.571Z" + transform="translate(-184.5 -85.00533)" + fill="#e5e5e5" + /> + <Path + d="M659.64045,454.571H611.913a3.22864,3.22864,0,0,1-3.22484-3.22484v-47.7275a3.22863,3.22863,0,0,1,3.22484-3.22483h47.7275a3.22862,3.22862,0,0,1,3.22483,3.22483v47.7275A3.22863,3.22863,0,0,1,659.64045,454.571Z" + transform="translate(-184.5 -85.00533)" + fill="#e5e5e5" + /> + <Path + d="M731.87667,454.571h-47.7275a3.22863,3.22863,0,0,1-3.22483-3.22484v-47.7275a3.22862,3.22862,0,0,1,3.22483-3.22483h47.7275a3.22862,3.22862,0,0,1,3.22483,3.22483v47.7275A3.22863,3.22863,0,0,1,731.87667,454.571Z" + transform="translate(-184.5 -85.00533)" + fill="#e5e5e5" + /> + <Path + d="M514.9973,542.93139H467.26979a3.22864,3.22864,0,0,1-3.22483-3.22484v-47.7275a3.22863,3.22863,0,0,1,3.22483-3.22483H514.9973a3.22863,3.22863,0,0,1,3.22483,3.22483v47.7275A3.22864,3.22864,0,0,1,514.9973,542.93139Z" + transform="translate(-184.5 -85.00533)" + fill="#e5e5e5" + /> + <Path + d="M587.23352,542.93139H539.506a3.22864,3.22864,0,0,1-3.22484-3.22484v-47.7275a3.22863,3.22863,0,0,1,3.22484-3.22483h47.7275a3.22862,3.22862,0,0,1,3.22483,3.22483v47.7275A3.22863,3.22863,0,0,1,587.23352,542.93139Z" + transform="translate(-184.5 -85.00533)" + fill="#e5e5e5" + /> + <Path + d="M659.46974,542.93139h-47.7275a3.22863,3.22863,0,0,1-3.22483-3.22484v-47.7275a3.22862,3.22862,0,0,1,3.22483-3.22483h47.7275a3.22862,3.22862,0,0,1,3.22483,3.22483v47.7275A3.22863,3.22863,0,0,1,659.46974,542.93139Z" + transform="translate(-184.5 -85.00533)" + fill="#e5e5e5" + /> + <Path + d="M731.706,542.93139H683.97846a3.22864,3.22864,0,0,1-3.22483-3.22484v-47.7275a3.22863,3.22863,0,0,1,3.22483-3.22483H731.706a3.22863,3.22863,0,0,1,3.22483,3.22483v47.7275A3.22864,3.22864,0,0,1,731.706,542.93139Z" + transform="translate(-184.5 -85.00533)" + fill="#e5e5e5" + /> + <Path + d="M515.50942,740.29107H467.78191a3.22864,3.22864,0,0,1-3.22483-3.22484v-47.7275a3.22863,3.22863,0,0,1,3.22483-3.22483h47.72751a3.22863,3.22863,0,0,1,3.22483,3.22483v47.7275A3.22864,3.22864,0,0,1,515.50942,740.29107Z" + transform="translate(-184.5 -85.00533)" + fill="#fff" + /> + <Path + d="M587.74564,740.29107h-47.7275a3.22863,3.22863,0,0,1-3.22483-3.22484v-47.7275a3.22862,3.22862,0,0,1,3.22483-3.22483h47.7275a3.22862,3.22862,0,0,1,3.22483,3.22483v47.7275A3.22863,3.22863,0,0,1,587.74564,740.29107Z" + transform="translate(-184.5 -85.00533)" + fill="#fff" + /> + <Path + d="M659.98186,740.29107h-47.7275a3.22863,3.22863,0,0,1-3.22483-3.22484v-47.7275a3.22862,3.22862,0,0,1,3.22483-3.22483h47.7275a3.22862,3.22862,0,0,1,3.22483,3.22483v47.7275A3.22863,3.22863,0,0,1,659.98186,740.29107Z" + transform="translate(-184.5 -85.00533)" + fill="#fff" + /> + <Path + d="M732.21809,740.29107H684.49058a3.22864,3.22864,0,0,1-3.22483-3.22484v-47.7275a3.22863,3.22863,0,0,1,3.22483-3.22483h47.72751a3.22863,3.22863,0,0,1,3.22483,3.22483v47.7275A3.22864,3.22864,0,0,1,732.21809,740.29107Z" + transform="translate(-184.5 -85.00533)" + fill="#fff" + /> + <Circle cx={392.11051} cy={548.22133} r={6.44966} fill="#e5e5e5" /> + <Circle cx={415.32929} cy={548.22133} r={6.44966} fill="#e5e5e5" /> + <Circle cx={438.54808} cy={548.22133} r={6.44966} fill="#e5e5e5" /> + <Path + d="M1014.5,789.00533h-829a1,1,0,0,1,0-2h829a1,1,0,0,1,0,2Z" + transform="translate(-184.5 -85.00533)" + fill="#cbcbcb" + /> + <Path + d="M510.864,592.10718a13.04925,13.04925,0,0,0-1.75972-19.93187l12.59561-44.62912-22.9642,7.30333-8.44035,41.26089A13.11993,13.11993,0,0,0,510.864,592.10718Z" + transform="translate(-184.5 -85.00533)" + fill="#ffb7b7" + /> + <Path + d="M517.39368,564.75191a5.96933,5.96933,0,0,1-1.24508.10531l-22.02964-.44139a5.83948,5.83948,0,0,1-5.65948-6.693L510.80711,406.732a18.51184,18.51184,0,0,1,18.25725-15.71657h0a18.41265,18.41265,0,0,1,17.83,22.82525l-15.84048,64.15663L522.07066,559.658A5.80616,5.80616,0,0,1,517.39368,564.75191Z" + transform="translate(-184.5 -85.00533)" + fill="#3f3d56" + /> + <Polygon + points="342.105 718.105 354.365 718.105 360.198 670.817 342.103 670.818 342.105 718.105" + fill="#ffb7b7" + /> + <Path + d="M523.47815,799.108l24.144-.001h.001a15.3873,15.3873,0,0,1,15.38647,15.38623v.5l-39.53076.00147Z" + transform="translate(-184.5 -85.00533)" + fill="#2f2e41" + /> + <Polygon + points="394.382 714.123 406.565 715.489 417.632 669.146 399.65 667.13 394.382 714.123" + fill="#ffb7b7" + /> + <Path + d="M576.22006,794.80228l23.99372,2.69008.001.00011a15.38731,15.38731,0,0,1,13.57568,17.00532l-.05573.49688-39.28462-4.40458Z" + transform="translate(-184.5 -85.00533)" + fill="#2f2e41" + /> + <Path + d="M515.09858,539.9603s-16.808,37.20886-1.96521,61.37694l8.84283,188.16809h20.30315l19.69685-152,35,45L575.65255,787.53294l24.83152,1.394L634.9762,682.50533S608.47831,565.15663,599.72725,562.331l-5.75105-26.82565Z" + transform="translate(-184.5 -85.00533)" + fill="#2f2e41" + /> + <Path + d="M507.61793,572.62738s-15.14173,17.37795,24.85827,23.37795,82-3,83-15S507.61793,572.62738,507.61793,572.62738Z" + transform="translate(-184.5 -85.00533)" + fill="#cbcbcb" + /> + <Path + d="M708.1348,357.05837a11.61132,11.61132,0,0,1-14.05875,10.92486l-15.11989,21.80439-15.49148-5.95655,21.78468-30.49213a11.67422,11.67422,0,0,1,22.88544,3.71943Z" + transform="translate(-184.5 -85.00533)" + fill="#ffb7b7" + /> + <Path + d="M580.2636,385.112l-21.37737-9.671L531.49666,377.399s-33.02046,38.6063-20.02046,75.6063l-8,129c51,14,74.1831-12.25781,111-1L603.10422,437.636Z" + transform="translate(-184.5 -85.00533)" + fill="#3f3d56" + /> + <Path + d="M565.9762,394.50533l14.2874-9.39337s19.84646-3,27.77953,4.69668c0,0,26.92659,2.25376,33.42983,8.97523l7.16026,1.6141,23.7869-30.80184,14.55608,7.9092-21,57-62.872,3.13064Z" + transform="translate(-184.5 -85.00533)" + fill="#3f3d56" + /> + <Circle + cx={554.72002} + cy={334.98279} + r={33.74484} + transform="translate(-277.19936 222.12213) rotate(-28.66318)" + fill="#ffb7b7" + /> + <Path + d="M525.53291,308.60053c6.02337-10.83362,13.55038-17.84837,25.94329-17.5952s23.11287-.23674,28.68877,10.83384a18.20735,18.20735,0,0,0,2.14293-8.97911,10.2833,10.2833,0,0,1,4.53932,10.34472,7.50982,7.50982,0,0,0,3.70778-6.16528c4.136,1.37646,5.2115,7.20519,3.11866,11.02892s-6.19726,6.03481-10.13517,7.904-2.1199,11.75518-4.69141,15.27487c-1.79468,2.45641-2.61549,5.4668-3.82479,8.25829a.54091.54091,0,0,1-.2448.25565c-2.77277,1.54608-4.5229,4.30857-4.03339,7.44529a1.21274,1.21274,0,0,1-.03945.70958c-3.51018,6.613-7.29926,13.53194-13.66181,17.478a22.65364,22.65364,0,0,1-17.01862,2.63072c-6.50353-1.55494-12.1259-5.86678-16.18006-11.18444s-6.662-11.60249-8.62153-17.99576c-1.73827-5.6714-3.00232-11.73529-1.62409-17.50476s6.04709-11.112,11.96211-11.55783" + transform="translate(-184.5 -85.00533)" + fill="#2f2e41" + /> + </Svg> + ); +} diff --git a/src/components/forgot-password-form.tsx b/src/components/forgot-password-form.tsx index 2fee2c504..50872723f 100644 --- a/src/components/forgot-password-form.tsx +++ b/src/components/forgot-password-form.tsx @@ -22,7 +22,7 @@ export type ForgotPasswordFormProps = { onSubmit: (data: FormType) => void; }; -export const ForgotPasswordForm = (props: ForgotPasswordFormProps) => { +export function ForgotPasswordForm(props: ForgotPasswordFormProps) { const { t } = useTranslation(); const { handleSubmit, control } = useForm<{ email: string; @@ -70,4 +70,4 @@ export const ForgotPasswordForm = (props: ForgotPasswordFormProps) => { </View> </KeyboardAvoidingView> ); -}; +} diff --git a/src/components/inputs.tsx b/src/components/inputs.tsx index d8bd56e94..071bec317 100644 --- a/src/components/inputs.tsx +++ b/src/components/inputs.tsx @@ -1,6 +1,6 @@ -import { useState } from 'react'; - import type { OptionType } from '@/components/ui'; + +import { useState } from 'react'; import { Checkbox, Input, Radio, Select, Switch, View } from '@/components/ui'; import { Title } from './title'; @@ -11,7 +11,7 @@ const options: Array<OptionType> = [ { value: 'vanilla', label: 'Vanilla' }, ]; -export const Inputs = () => { +export function Inputs() { const [value, setValue] = useState<string | number | undefined>(); return ( <> @@ -24,7 +24,7 @@ export const Inputs = () => { label="Select" options={options} value={value} - onSelect={(option) => setValue(option)} + onSelect={option => setValue(option)} /> <CheckboxExample /> <RadioExample /> @@ -32,9 +32,9 @@ export const Inputs = () => { </View> </> ); -}; +} -const CheckboxExample = () => { +function CheckboxExample() { const [checked, setChecked] = useState(false); return ( <Checkbox.Root @@ -47,9 +47,9 @@ const CheckboxExample = () => { <Checkbox.Label text="checkbox" /> </Checkbox.Root> ); -}; +} -const RadioExample = () => { +function RadioExample() { const [selected, setSelected] = useState(false); return ( <Radio.Root @@ -62,9 +62,9 @@ const RadioExample = () => { <Radio.Label text="radio button" /> </Radio.Root> ); -}; +} -const SwitchExample = () => { +function SwitchExample() { const [active, setActive] = useState(false); return ( <Switch.Root @@ -77,4 +77,4 @@ const SwitchExample = () => { <Switch.Label text="switch" /> </Switch.Root> ); -}; +} diff --git a/src/components/login-form.tsx b/src/components/login-form.tsx index a161a4de9..7fe33319d 100644 --- a/src/components/login-form.tsx +++ b/src/components/login-form.tsx @@ -1,9 +1,10 @@ +import type { SubmitHandler } from 'react-hook-form'; +import type { z } from 'zod'; import { zodResolver } from '@hookform/resolvers/zod'; import { Link } from 'expo-router'; -import type { SubmitHandler } from 'react-hook-form'; import { useForm } from 'react-hook-form'; import { KeyboardAvoidingView } from 'react-native-keyboard-controller'; -import { object, string, type z } from 'zod'; +import { object, string } from 'zod'; import { Button, ControlledInput, Text, View } from '@/components/ui'; import { translate } from '@/lib'; @@ -25,10 +26,10 @@ export type LoginFormProps = { onSubmit?: SubmitHandler<FormType>; }; -export const LoginForm = ({ +export function LoginForm({ onSubmit = () => {}, isLoading = false, -}: LoginFormProps) => { +}: LoginFormProps) { const { handleSubmit, control } = useForm<FormType>({ resolver: zodResolver(schema), }); @@ -67,7 +68,8 @@ export const LoginForm = ({ loading={isLoading} /> <Text> - {translate('auth.signIn.newAccount')}{' '} + {translate('auth.signIn.newAccount')} + {' '} <Link href="/sign-up" disabled={isLoading}> <Text className="font-bold text-black"> {translate('auth.signIn.buttons.signUp')} @@ -85,4 +87,4 @@ export const LoginForm = ({ </View> </KeyboardAvoidingView> ); -}; +} diff --git a/src/components/providers/auth.tsx b/src/components/providers/auth.tsx index 34f0f5f21..9692f8030 100644 --- a/src/components/providers/auth.tsx +++ b/src/components/providers/auth.tsx @@ -1,8 +1,9 @@ import dayjs from 'dayjs'; -import React, { +import * as React from 'react'; +import { createContext, + use, useCallback, - useContext, useEffect, useMemo, useState, @@ -27,28 +28,30 @@ export const HEADER_KEYS = { AUTHORIZATION: 'Authorization', }; -export const storeTokens = (args: { +export function storeTokens(args: { accessToken: string; refreshToken: string; userId: string; expiration: string; -}) => { +}) { authStorage.set(HEADER_KEYS.ACCESS_TOKEN, args.accessToken); authStorage.set(HEADER_KEYS.REFRESH_TOKEN, args.refreshToken); authStorage.set(HEADER_KEYS.USER_ID, args.userId); authStorage.set(HEADER_KEYS.EXPIRY, args.expiration); -}; +} -export const getTokenDetails = () => ({ - accessToken: authStorage.getString(HEADER_KEYS.ACCESS_TOKEN) ?? '', - refreshToken: authStorage.getString(HEADER_KEYS.REFRESH_TOKEN) ?? '', - userId: authStorage.getString(HEADER_KEYS.USER_ID) ?? '', - expiration: authStorage.getString(HEADER_KEYS.EXPIRY) ?? '', -}); +export function getTokenDetails() { + return { + accessToken: authStorage.getString(HEADER_KEYS.ACCESS_TOKEN) ?? '', + refreshToken: authStorage.getString(HEADER_KEYS.REFRESH_TOKEN) ?? '', + userId: authStorage.getString(HEADER_KEYS.USER_ID) ?? '', + expiration: authStorage.getString(HEADER_KEYS.EXPIRY) ?? '', + }; +} -export const clearTokens = () => { +export function clearTokens() { authStorage.clearAll(); -}; +} // Request interceptor to add Authorization header client.interceptors.request.use( @@ -68,7 +71,7 @@ client.interceptors.request.use( return config; }, - (error) => Promise.reject(error), + async error => Promise.reject(error), ); // Response interceptor to handle tokens @@ -90,16 +93,16 @@ client.interceptors.response.use( return response; }, - (error) => Promise.reject(error), + async error => Promise.reject(error), ); -interface AuthContextProps { +type AuthContextProps = { token: string | null; isAuthenticated: boolean; loading: boolean; ready: boolean; logout: () => void; -} +}; const AuthContext = createContext<AuthContextProps | undefined>(undefined); @@ -125,7 +128,8 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ if (isExpired) { setToken(null); // Token expired, clear it - } else { + } + else { setToken(storedToken); // Token is valid, set it } @@ -141,7 +145,8 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ useEffect(() => { try { checkToken(); - } catch { + } + catch { setReady(true); } const requestInterceptor = client.interceptors.response.use( @@ -152,7 +157,7 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ checkToken(); return config; }, - (error) => Promise.reject(error), + async error => Promise.reject(error), ); return () => { @@ -170,13 +175,13 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ }), [loading, ready, token], ); - return <AuthContext.Provider value={values}>{children}</AuthContext.Provider>; + return <AuthContext value={values}>{children}</AuthContext>; }; -export const useAuth = (): AuthContextProps => { - const context = useContext(AuthContext); +export function useAuth(): AuthContextProps { + const context = use(AuthContext); if (!context) { throw new Error('useAuth must be used within an AuthProvider'); } return context; -}; +} diff --git a/src/components/settings/delete-account-item.tsx b/src/components/settings/delete-account-item.tsx index eb370d0a1..9c57cfb3f 100644 --- a/src/components/settings/delete-account-item.tsx +++ b/src/components/settings/delete-account-item.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import * as React from 'react'; import { Alert } from 'react-native'; import { translate } from '@/lib'; @@ -9,7 +9,7 @@ export type DeleteAccountItemProps = { onDelete: () => void; }; -export const DeleteAccountItem = (props: DeleteAccountItemProps) => { +export function DeleteAccountItem(props: DeleteAccountItemProps) { const handleDeleteAccount = () => { props.onDelete(); }; @@ -29,5 +29,5 @@ export const DeleteAccountItem = (props: DeleteAccountItemProps) => { ); }; - return <Item text={'settings.deleteAccount.title'} onPress={confirmDelete} />; -}; + return <Item text="settings.deleteAccount.title" onPress={confirmDelete} />; +} diff --git a/src/components/settings/item.tsx b/src/components/settings/item.tsx index 1c839e83a..4ce8074bc 100644 --- a/src/components/settings/item.tsx +++ b/src/components/settings/item.tsx @@ -1,8 +1,9 @@ -import React, { forwardRef } from 'react'; +import type { TxKeyPath } from '@/lib'; +import * as React from 'react'; +import { forwardRef } from 'react'; import { Pressable, Text, View } from '@/components/ui'; import { ArrowRight } from '@/components/ui/icons'; -import type { TxKeyPath } from '@/lib'; type ItemProps = { text: TxKeyPath; diff --git a/src/components/settings/items-container.tsx b/src/components/settings/items-container.tsx index de8308d2c..b853368a5 100644 --- a/src/components/settings/items-container.tsx +++ b/src/components/settings/items-container.tsx @@ -1,20 +1,20 @@ -import React from 'react'; +import type { TxKeyPath } from '@/lib'; +import * as React from 'react'; import { Text, View } from '@/components/ui'; -import type { TxKeyPath } from '@/lib'; type Props = { children: React.ReactNode; title?: TxKeyPath; }; -export const ItemsContainer = ({ children, title }: Props) => ( - <View className="gap-2"> - {title && <Text className="text-lg" tx={title} />} - { +export function ItemsContainer({ children, title }: Props) { + return ( + <View className="gap-2"> + {title && <Text className="text-lg" tx={title} />} <View className=" rounded-md border border-neutral-200 dark:border-neutral-700 dark:bg-neutral-800"> {children} </View> - } - </View> -); + </View> + ); +} diff --git a/src/components/settings/language-item.tsx b/src/components/settings/language-item.tsx index 63f388922..db840769b 100644 --- a/src/components/settings/language-item.tsx +++ b/src/components/settings/language-item.tsx @@ -1,13 +1,14 @@ -import React, { useCallback, useMemo } from 'react'; - import type { OptionType } from '@/components/ui'; +import type { Language } from '@/lib/i18n/resources'; + +import * as React from 'react'; +import { useCallback, useMemo } from 'react'; import { Options, useModal } from '@/components/ui'; import { translate, useSelectedLanguage } from '@/lib'; -import type { Language } from '@/lib/i18n/resources'; import { Item } from './item'; -export const LanguageItem = () => { +export function LanguageItem() { const { language, setLanguage } = useSelectedLanguage(); const modal = useModal(); const onSelect = useCallback( @@ -24,7 +25,7 @@ export const LanguageItem = () => { ); const selectedLanguage = useMemo( - () => langs.find((lang) => lang.value === language), + () => langs.find(lang => lang.value === language), [language, langs], ); @@ -43,4 +44,4 @@ export const LanguageItem = () => { /> </> ); -}; +} diff --git a/src/components/settings/theme-item.tsx b/src/components/settings/theme-item.tsx index 853459f9c..6eee86185 100644 --- a/src/components/settings/theme-item.tsx +++ b/src/components/settings/theme-item.tsx @@ -1,13 +1,13 @@ -import { useCallback, useMemo } from 'react'; - import type { OptionType } from '@/components/ui'; -import { Options, useModal } from '@/components/ui'; + import type { ColorSchemeType } from '@/lib'; +import { useCallback, useMemo } from 'react'; +import { Options, useModal } from '@/components/ui'; import { translate, useSelectedTheme } from '@/lib'; import { Item } from './item'; -export const ThemeItem = () => { +export function ThemeItem() { const { selectedTheme, setSelectedTheme } = useSelectedTheme(); const modal = useModal(); @@ -29,7 +29,7 @@ export const ThemeItem = () => { ); const theme = useMemo( - () => themes.find((t) => t.value === selectedTheme), + () => themes.find(t => t.value === selectedTheme), [selectedTheme, themes], ); @@ -48,4 +48,4 @@ export const ThemeItem = () => { /> </> ); -}; +} diff --git a/src/components/sign-up-form.tsx b/src/components/sign-up-form.tsx index 0d192a9bb..95a545cd7 100644 --- a/src/components/sign-up-form.tsx +++ b/src/components/sign-up-form.tsx @@ -1,7 +1,9 @@ +import type { SubmitHandler } from 'react-hook-form'; +import type { z } from 'zod'; import { zodResolver } from '@hookform/resolvers/zod'; -import { type SubmitHandler, useForm } from 'react-hook-form'; +import { useForm } from 'react-hook-form'; import { KeyboardAvoidingView } from 'react-native'; -import { object, string, type z } from 'zod'; +import { object, string } from 'zod'; import { Button, ControlledInput, Text, View } from '@/components/ui'; import { translate } from '@/lib'; @@ -23,7 +25,7 @@ const schema = object({ passwordConfirmation: string({ required_error: translate('auth.signUp.error.passwordConfirmationRequired'), }), -}).refine((data) => data.password === data.passwordConfirmation, { +}).refine(data => data.password === data.passwordConfirmation, { message: translate('auth.signUp.error.passwordsDoNotMatch'), path: ['passwordConfirmation'], }); @@ -35,10 +37,10 @@ export type SignUpFormProps = { isPending?: boolean; }; -export const SignUpForm = ({ +export function SignUpForm({ onSubmit = () => {}, isPending = false, -}: SignUpFormProps) => { +}: SignUpFormProps) { const { handleSubmit, control } = useForm<FormType>({ resolver: zodResolver(schema), }); @@ -96,4 +98,4 @@ export const SignUpForm = ({ </View> </KeyboardAvoidingView> ); -}; +} diff --git a/src/components/title.tsx b/src/components/title.tsx index 50210c15e..5543d859f 100644 --- a/src/components/title.tsx +++ b/src/components/title.tsx @@ -3,9 +3,11 @@ import { Text, View } from '@/components/ui'; type Props = { text: string; }; -export const Title = ({ text }: Props) => ( - <View className="flex-row items-center justify-center py-4 pb-2"> - <Text className="pr-2 text-2xl">{text}</Text> - <View className="h-[2px] flex-1 bg-neutral-300" /> - </View> -); +export function Title({ text }: Props) { + return ( + <View className="flex-row items-center justify-center py-4 pb-2"> + <Text className="pr-2 text-2xl">{text}</Text> + <View className="h-[2px] flex-1 bg-neutral-300" /> + </View> + ); +} diff --git a/src/components/typography.tsx b/src/components/typography.tsx index c4c267808..9ac694bec 100644 --- a/src/components/typography.tsx +++ b/src/components/typography.tsx @@ -2,21 +2,23 @@ import { Text, View } from '@/components/ui'; import { Title } from './title'; -export const Typography = () => ( - <> - <Title text="Typography" /> - <View className="mb-4 flex-col"> - <Text className="text-3xl tracking-tight"> - H1: Lorem ipsum dolor sit - </Text> - <Text className="text-2xl ">H2: Lorem ipsum dolor sit</Text> - <Text className="text-xl ">H3: Lorem ipsum dolor sit</Text> - <Text className="text-lg ">H4: Lorem ipsum dolor sit</Text> - <Text className="text-base"> - Lorem ipsum dolor sit amet consectetur, adipisicing elit. Cumque quasi - aut, expedita tempore ratione quidem in, corporis quia minus et dolorem - sunt temporibus iusto consequatur culpa. Omnis sequi debitis recusandae? - </Text> - </View> - </> -); +export function Typography() { + return ( + <> + <Title text="Typography" /> + <View className="mb-4 flex-col"> + <Text className="text-3xl tracking-tight"> + H1: Lorem ipsum dolor sit + </Text> + <Text className="text-2xl ">H2: Lorem ipsum dolor sit</Text> + <Text className="text-xl ">H3: Lorem ipsum dolor sit</Text> + <Text className="text-lg ">H4: Lorem ipsum dolor sit</Text> + <Text className="text-base"> + Lorem ipsum dolor sit amet consectetur, adipisicing elit. Cumque quasi + aut, expedita tempore ratione quidem in, corporis quia minus et dolorem + sunt temporibus iusto consequatur culpa. Omnis sequi debitis recusandae? + </Text> + </View> + </> + ); +} diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx index b6c8786d2..c5883b097 100644 --- a/src/components/ui/button.tsx +++ b/src/components/ui/button.tsx @@ -1,7 +1,7 @@ -import { forwardRef, useMemo } from 'react'; import type { PressableProps, View } from 'react-native'; -import { ActivityIndicator, Pressable, Text } from 'react-native'; import type { VariantProps } from 'tailwind-variants'; +import { forwardRef, useMemo } from 'react'; +import { ActivityIndicator, Pressable, Text } from 'react-native'; import { tv } from 'tailwind-variants'; const TEXT_WHITE = 'text-white'; @@ -86,12 +86,12 @@ const button = tv({ }); type ButtonVariants = VariantProps<typeof button>; -interface Props extends ButtonVariants, Omit<PressableProps, 'disabled'> { +type Props = { label?: string; loading?: boolean; className?: string; textClassName?: string; -} +} & ButtonVariants & Omit<PressableProps, 'disabled'>; export const Button = forwardRef<View, Props>( ( @@ -113,7 +113,7 @@ export const Button = forwardRef<View, Props>( [variant, disabled, size], ); - const renderContent = () => { + const renderContent = (): PressableProps['children'] => { if (props?.children) { return props.children; } diff --git a/src/components/ui/checkbox.tsx b/src/components/ui/checkbox.tsx index 8c1c8a565..570e1ff76 100644 --- a/src/components/ui/checkbox.tsx +++ b/src/components/ui/checkbox.tsx @@ -1,9 +1,10 @@ +import type { PressableProps } from 'react-native'; import { MotiView } from 'moti'; import { useCallback } from 'react'; import { I18nManager, Pressable, - type PressableProps, + View, } from 'react-native'; import Svg, { Path } from 'react-native-svg'; @@ -19,25 +20,25 @@ const THUMB_HEIGHT = 22; const THUMB_WIDTH = 22; const THUMB_OFFSET = 4; -export interface RootProps extends Omit<PressableProps, 'onPress'> { +export type RootProps = { onChange: (checked: boolean) => void; checked?: boolean; className?: string; accessibilityLabel: string; -} +} & Omit<PressableProps, 'onPress'>; export type IconProps = { checked: boolean; }; -export const Root = ({ +export function Root({ checked, children, onChange, disabled, className = '', ...props -}: RootProps) => { +}: RootProps) { const handleChange = useCallback(() => { onChange(!checked); }, [onChange, checked]); @@ -55,7 +56,7 @@ export const Root = ({ {children} </Pressable> ); -}; +} type LabelProps = { text: string; @@ -63,13 +64,15 @@ type LabelProps = { testID?: string; }; -const Label = ({ text, testID, className = '' }: LabelProps) => ( - <Text testID={testID} className={` ${className} pl-2`}> - {text} - </Text> -); +function Label({ text, testID, className = '' }: LabelProps) { + return ( + <Text testID={testID} className={` ${className} pl-2`}> + {text} + </Text> + ); +} -export const CheckboxIcon = ({ checked }: IconProps) => { +export function CheckboxIcon({ checked }: IconProps) { const color = checked ? colors.primary[300] : colors.charcoal[400]; return ( <MotiView @@ -103,32 +106,38 @@ export const CheckboxIcon = ({ checked }: IconProps) => { </MotiView> </MotiView> ); -}; +} -const CheckboxRoot = ({ checked, children, ...props }: RootProps) => ( - <Root checked={checked} accessibilityRole="checkbox" {...props}> - {children} - </Root> -); +function CheckboxRoot({ checked, children, ...props }: RootProps) { + return ( + <Root checked={checked} accessibilityRole="checkbox" {...props}> + {children} + </Root> + ); +} -const CheckboxBase = ({ +function CheckboxBase({ checked = false, testID, label, ...props -}: RootProps & { label?: string }) => ( - <CheckboxRoot checked={checked} testID={testID} {...props}> - <CheckboxIcon checked={checked} /> - {label ? ( - <Label - text={label} - testID={testID ? `${testID}-label` : undefined} - className="pr-2" - /> - ) : null} - </CheckboxRoot> -); +}: RootProps & { label?: string }) { + return ( + <CheckboxRoot checked={checked} testID={testID} {...props}> + <CheckboxIcon checked={checked} /> + {label + ? ( + <Label + text={label} + testID={testID ? `${testID}-label` : undefined} + className="pr-2" + /> + ) + : null} + </CheckboxRoot> + ); +} export const Checkbox = Object.assign(CheckboxBase, { Icon: CheckboxIcon, @@ -136,7 +145,7 @@ export const Checkbox = Object.assign(CheckboxBase, { Label, }); -export const RadioIcon = ({ checked }: IconProps) => { +export function RadioIcon({ checked }: IconProps) { const color = checked ? colors.primary[300] : colors.charcoal[400]; return ( <MotiView @@ -160,27 +169,33 @@ export const RadioIcon = ({ checked }: IconProps) => { /> </MotiView> ); -}; +} -const RadioRoot = ({ checked, children, ...props }: RootProps) => ( - <Root checked={checked} accessibilityRole="radio" {...props}> - {children} - </Root> -); +function RadioRoot({ checked, children, ...props }: RootProps) { + return ( + <Root checked={checked} accessibilityRole="radio" {...props}> + {children} + </Root> + ); +} -const RadioBase = ({ +function RadioBase({ checked = false, testID, label, ...props -}: RootProps & { label?: string }) => ( - <RadioRoot checked={checked} testID={testID} {...props}> - <RadioIcon checked={checked} /> - {label ? ( - <Label text={label} testID={testID ? `${testID}-label` : undefined} /> - ) : null} - </RadioRoot> -); +}: RootProps & { label?: string }) { + return ( + <RadioRoot checked={checked} testID={testID} {...props}> + <RadioIcon checked={checked} /> + {label + ? ( + <Label text={label} testID={testID ? `${testID}-label` : undefined} /> + ) + : null} + </RadioRoot> + ); +} export const Radio = Object.assign(RadioBase, { Icon: RadioIcon, @@ -188,7 +203,7 @@ export const Radio = Object.assign(RadioBase, { Label, }); -export const SwitchIcon = ({ checked }: IconProps) => { +export function SwitchIcon({ checked }: IconProps) { const translateX = checked ? THUMB_OFFSET : WIDTH - THUMB_WIDTH - THUMB_OFFSET; @@ -222,26 +237,32 @@ export const SwitchIcon = ({ checked }: IconProps) => { /> </View> ); -}; -const SwitchRoot = ({ checked, children, ...props }: RootProps) => ( - <Root checked={checked} accessibilityRole="switch" {...props}> - {children} - </Root> -); +} +function SwitchRoot({ checked, children, ...props }: RootProps) { + return ( + <Root checked={checked} accessibilityRole="switch" {...props}> + {children} + </Root> + ); +} -const SwitchBase = ({ +function SwitchBase({ checked = false, testID, label, ...props -}: RootProps & { label?: string }) => ( - <SwitchRoot checked={checked} testID={testID} {...props}> - <SwitchIcon checked={checked} /> - {label ? ( - <Label text={label} testID={testID ? `${testID}-label` : undefined} /> - ) : null} - </SwitchRoot> -); +}: RootProps & { label?: string }) { + return ( + <SwitchRoot checked={checked} testID={testID} {...props}> + <SwitchIcon checked={checked} /> + {label + ? ( + <Label text={label} testID={testID ? `${testID}-label` : undefined} /> + ) + : null} + </SwitchRoot> + ); +} export const Switch = Object.assign(SwitchBase, { Icon: SwitchIcon, diff --git a/src/components/ui/focus-aware-status-bar.tsx b/src/components/ui/focus-aware-status-bar.tsx index 37d7d3611..1f934a96b 100644 --- a/src/components/ui/focus-aware-status-bar.tsx +++ b/src/components/ui/focus-aware-status-bar.tsx @@ -5,7 +5,7 @@ import { Platform } from 'react-native'; import { SystemBars } from 'react-native-edge-to-edge'; type Props = { hidden?: boolean }; -export const FocusAwareStatusBar = ({ hidden = false }: Props) => { +export function FocusAwareStatusBar({ hidden = false }: Props) { const isFocused = useIsFocused(); const { colorScheme } = useColorScheme(); @@ -13,10 +13,12 @@ export const FocusAwareStatusBar = ({ hidden = false }: Props) => { return null; } - return isFocused ? ( - <SystemBars - style={colorScheme === 'light' ? 'dark' : 'light'} - hidden={hidden} - /> - ) : null; -}; + return isFocused + ? ( + <SystemBars + style={colorScheme === 'light' ? 'dark' : 'light'} + hidden={hidden} + /> + ) + : null; +} diff --git a/src/components/ui/icons/arrow-right.tsx b/src/components/ui/icons/arrow-right.tsx index e515dd419..513db9561 100644 --- a/src/components/ui/icons/arrow-right.tsx +++ b/src/components/ui/icons/arrow-right.tsx @@ -1,24 +1,26 @@ -import { StyleSheet } from 'react-native'; import type { SvgProps } from 'react-native-svg'; +import { StyleSheet } from 'react-native'; import Svg, { Path } from 'react-native-svg'; import { isRTL } from '@/lib'; -export const ArrowRight = ({ color = '#CCC', style, ...props }: SvgProps) => ( - <Svg - width={7} - height={14} - viewBox="0 0 7 14" - fill="none" - {...props} - style={StyleSheet.flatten([ - style, - { transform: [{ scaleX: isRTL ? -1 : 1 }] }, - ])} - > - <Path - d="M.872 13.101a.874.874 0 0 0 .621-.253l5.252-5.253a.875.875 0 0 0 0-1.234L1.493 1.11A.875.875 0 0 0 .26 2.343l4.63 4.63-4.63 4.632A.876.876 0 0 0 .872 13.1Z" - fill={color} - /> - </Svg> -); +export function ArrowRight({ color = '#CCC', style, ...props }: SvgProps) { + return ( + <Svg + width={7} + height={14} + viewBox="0 0 7 14" + fill="none" + {...props} + style={StyleSheet.flatten([ + style, + { transform: [{ scaleX: isRTL ? -1 : 1 }] }, + ])} + > + <Path + d="M.872 13.101a.874.874 0 0 0 .621-.253l5.252-5.253a.875.875 0 0 0 0-1.234L1.493 1.11A.875.875 0 0 0 .26 2.343l4.63 4.63-4.63 4.632A.876.876 0 0 0 .872 13.1Z" + fill={color} + /> + </Svg> + ); +} diff --git a/src/components/ui/icons/caret-down.tsx b/src/components/ui/icons/caret-down.tsx index 2d591cd80..4650c5794 100644 --- a/src/components/ui/icons/caret-down.tsx +++ b/src/components/ui/icons/caret-down.tsx @@ -1,19 +1,21 @@ import type { SvgProps } from 'react-native-svg'; import Svg, { Path } from 'react-native-svg'; -export const CaretDown = ({ ...props }: SvgProps) => ( - <Svg - width={12} - height={13} - fill="none" - {...props} - className="stroke-black dark:stroke-white" - > - <Path - strokeLinecap="round" - strokeLinejoin="round" - strokeWidth={1.5} - d="M9.75 4.744 6 8.494l-3.75-3.75" - /> - </Svg> -); +export function CaretDown({ ...props }: SvgProps) { + return ( + <Svg + width={12} + height={13} + fill="none" + {...props} + className="stroke-black dark:stroke-white" + > + <Path + strokeLinecap="round" + strokeLinejoin="round" + strokeWidth={1.5} + d="M9.75 4.744 6 8.494l-3.75-3.75" + /> + </Svg> + ); +} diff --git a/src/components/ui/icons/feed.tsx b/src/components/ui/icons/feed.tsx index da5c2b51f..3ca88e5b1 100644 --- a/src/components/ui/icons/feed.tsx +++ b/src/components/ui/icons/feed.tsx @@ -1,11 +1,13 @@ import type { SvgProps } from 'react-native-svg'; import Svg, { Path } from 'react-native-svg'; -export const Feed = ({ color = '#000', ...props }: SvgProps) => ( - <Svg width={24} height={24} fill="none" viewBox="0 0 24 24" {...props}> - <Path - d="M16.191 2C19.28 2 21 3.78 21 6.83v10.33c0 3.1-1.72 4.84-4.809 4.84H7.81C4.77 22 3 20.26 3 17.16V6.83C3 3.78 4.77 2 7.81 2h8.381ZM8.08 15.74a.795.795 0 0 0-.75 1.21c.16.25.45.4.75.36h7.84c.399-.04.7-.381.7-.78 0-.41-.301-.75-.7-.79H8.08Zm7.84-4.561H8.08a.781.781 0 0 0 0 1.561h7.84a.781.781 0 0 0 0-1.561ZM11.069 6.65H8.08v.01a.78.78 0 0 0 0 1.56h2.989c.431 0 .781-.35.781-.791a.781.781 0 0 0-.781-.779Z" - fill={color} - /> - </Svg> -); +export function Feed({ color = '#000', ...props }: SvgProps) { + return ( + <Svg width={24} height={24} fill="none" viewBox="0 0 24 24" {...props}> + <Path + d="M16.191 2C19.28 2 21 3.78 21 6.83v10.33c0 3.1-1.72 4.84-4.809 4.84H7.81C4.77 22 3 20.26 3 17.16V6.83C3 3.78 4.77 2 7.81 2h8.381ZM8.08 15.74a.795.795 0 0 0-.75 1.21c.16.25.45.4.75.36h7.84c.399-.04.7-.381.7-.78 0-.41-.301-.75-.7-.79H8.08Zm7.84-4.561H8.08a.781.781 0 0 0 0 1.561h7.84a.781.781 0 0 0 0-1.561ZM11.069 6.65H8.08v.01a.78.78 0 0 0 0 1.56h2.989c.431 0 .781-.35.781-.791a.781.781 0 0 0-.781-.779Z" + fill={color} + /> + </Svg> + ); +} diff --git a/src/components/ui/icons/github.tsx b/src/components/ui/icons/github.tsx index fc9d7c90f..17f84b6fc 100644 --- a/src/components/ui/icons/github.tsx +++ b/src/components/ui/icons/github.tsx @@ -3,22 +3,24 @@ import Svg, { ClipPath, Defs, G, Path } from 'react-native-svg'; import colors from '../colors'; -export const Github = ({ color = colors.neutral[500], ...props }: SvgProps) => ( - <Svg width={24} height={24} fill="none" viewBox="0 0 24 24" {...props}> - <G - clipPath="url(#github)" - stroke={color} - strokeWidth={1.219} - strokeLinecap="round" - strokeLinejoin="round" - > - <Path d="M7.876 22.5a2.242 2.242 0 0 0 2.25-2.25v-4.5M16.125 22.5a2.242 2.242 0 0 1-2.25-2.25v-4.5M14.25 15.75h1.5A2.24 2.24 0 0 1 18 18v.75A2.24 2.24 0 0 0 20.25 21M9.752 15.75h-1.5A2.24 2.24 0 0 0 6.002 18v.75A2.24 2.24 0 0 1 3.752 21" /> - <Path d="M10.485 6a4.875 4.875 0 0 0-4.107-2.25 4.875 4.875 0 0 0-.328 4.19 4.622 4.622 0 0 0-.797 2.56v.75a4.5 4.5 0 0 0 4.5 4.5h4.5a4.5 4.5 0 0 0 4.5-4.5v-.75a4.622 4.622 0 0 0-.797-2.56 4.874 4.874 0 0 0-.328-4.19A4.875 4.875 0 0 0 13.522 6h-3.037Z" /> - </G> - <Defs> - <ClipPath id="github"> - <Path fill="#fff" d="M0 0h24v24H0z" /> - </ClipPath> - </Defs> - </Svg> -); +export function Github({ color = colors.neutral[500], ...props }: SvgProps) { + return ( + <Svg width={24} height={24} fill="none" viewBox="0 0 24 24" {...props}> + <G + clipPath="url(#github)" + stroke={color} + strokeWidth={1.219} + strokeLinecap="round" + strokeLinejoin="round" + > + <Path d="M7.876 22.5a2.242 2.242 0 0 0 2.25-2.25v-4.5M16.125 22.5a2.242 2.242 0 0 1-2.25-2.25v-4.5M14.25 15.75h1.5A2.24 2.24 0 0 1 18 18v.75A2.24 2.24 0 0 0 20.25 21M9.752 15.75h-1.5A2.24 2.24 0 0 0 6.002 18v.75A2.24 2.24 0 0 1 3.752 21" /> + <Path d="M10.485 6a4.875 4.875 0 0 0-4.107-2.25 4.875 4.875 0 0 0-.328 4.19 4.622 4.622 0 0 0-.797 2.56v.75a4.5 4.5 0 0 0 4.5 4.5h4.5a4.5 4.5 0 0 0 4.5-4.5v-.75a4.622 4.622 0 0 0-.797-2.56 4.874 4.874 0 0 0-.328-4.19A4.875 4.875 0 0 0 13.522 6h-3.037Z" /> + </G> + <Defs> + <ClipPath id="github"> + <Path fill="#fff" d="M0 0h24v24H0z" /> + </ClipPath> + </Defs> + </Svg> + ); +} diff --git a/src/components/ui/icons/language.tsx b/src/components/ui/icons/language.tsx index 5ee9863d5..77396fbea 100644 --- a/src/components/ui/icons/language.tsx +++ b/src/components/ui/icons/language.tsx @@ -1,32 +1,34 @@ import type { SvgProps } from 'react-native-svg'; import Svg, { G, Path, Text, TSpan } from 'react-native-svg'; -export const Language = ({ ...props }: SvgProps) => ( - <Svg width={100} height={71} {...props}> - <G fill="none" fillRule="evenodd"> - <Path - d="M55.684 0H3.319A3.319 3.319 0 0 0 0 3.324V39.4a3.319 3.319 0 0 0 3.32 3.324h10.207V57l14.048-14.276h28.109A3.32 3.32 0 0 0 59 39.4V3.324A3.32 3.32 0 0 0 55.684 0" - fill="#FC6276" - /> - <Path - d="M32.103 23.62l-3.242-11.567-3.394 11.567h6.636zM25.856 6.23a26.079 26.079 0 0 1 1.562-.172A19.683 19.683 0 0 1 29.058 6c.521 0 1.026.016 1.52.058.494.04 1.041.094 1.64.172L41 33.769a21.499 21.499 0 0 1-3.122.231c-.992 0-1.95-.075-2.887-.231l-1.56-5.512h-9.29l-1.6 5.512c-.936.156-1.837.231-2.693.231-.962 0-1.914-.075-2.848-.231l8.856-27.54z" - fill="#FFF" - /> - <Path - d="M96.682 14H44.316A3.32 3.32 0 0 0 41 17.318v36.08a3.321 3.321 0 0 0 3.316 3.323h28.11L86.473 71V56.721h10.208A3.32 3.32 0 0 0 100 53.398v-36.08A3.317 3.317 0 0 0 96.682 14" - fill="#192332" - /> - <Text +export function Language({ ...props }: SvgProps) { + return ( + <Svg width={100} height={71} {...props}> + <G fill="none" fillRule="evenodd"> + <Path + d="M55.684 0H3.319A3.319 3.319 0 0 0 0 3.324V39.4a3.319 3.319 0 0 0 3.32 3.324h10.207V57l14.048-14.276h28.109A3.32 3.32 0 0 0 59 39.4V3.324A3.32 3.32 0 0 0 55.684 0" + fill="#FC6276" + /> + <Path + d="M32.103 23.62l-3.242-11.567-3.394 11.567h6.636zM25.856 6.23a26.079 26.079 0 0 1 1.562-.172A19.683 19.683 0 0 1 29.058 6c.521 0 1.026.016 1.52.058.494.04 1.041.094 1.64.172L41 33.769a21.499 21.499 0 0 1-3.122.231c-.992 0-1.95-.075-2.887-.231l-1.56-5.512h-9.29l-1.6 5.512c-.936.156-1.837.231-2.693.231-.962 0-1.914-.075-2.848-.231l8.856-27.54z" + fill="#FFF" + /> + <Path + d="M96.682 14H44.316A3.32 3.32 0 0 0 41 17.318v36.08a3.321 3.321 0 0 0 3.316 3.323h28.11L86.473 71V56.721h10.208A3.32 3.32 0 0 0 100 53.398v-36.08A3.317 3.317 0 0 0 96.682 14" + fill="#192332" + /> + <Text // fontFamily="HelveticaNeueLTArabic-Bold, Helvetica Neue LT Arabic" - fontSize={30} - fontWeight="bold" - fill="#FFF" - transform="translate(0 -4)" - > - <TSpan x={59} y={42}> - ي - </TSpan> - </Text> - </G> - </Svg> -); + fontSize={30} + fontWeight="bold" + fill="#FFF" + transform="translate(0 -4)" + > + <TSpan x={59} y={42}> + ي + </TSpan> + </Text> + </G> + </Svg> + ); +} diff --git a/src/components/ui/icons/rate.tsx b/src/components/ui/icons/rate.tsx index 9778ab55f..a7636fe8e 100644 --- a/src/components/ui/icons/rate.tsx +++ b/src/components/ui/icons/rate.tsx @@ -3,21 +3,23 @@ import Svg, { ClipPath, Defs, G, Path } from 'react-native-svg'; import colors from '../colors'; -export const Rate = ({ color = colors.neutral[500], ...props }: SvgProps) => ( - <Svg width={24} height={24} fill="none" viewBox="0 0 24 24" {...props}> - <G clipPath="url(#a)"> - <Path - d="m12.412 17.878 4.725 3c.61.384 1.36-.187 1.181-.89l-1.369-5.382a.816.816 0 0 1 .272-.825l4.238-3.534c.553-.46.271-1.388-.45-1.434l-5.532-.357a.778.778 0 0 1-.684-.506L12.73 2.756a.778.778 0 0 0-1.462 0L9.206 7.95a.778.778 0 0 1-.685.506l-5.531.357c-.722.046-1.003.975-.45 1.434l4.237 3.534a.815.815 0 0 1 .272.825l-1.265 4.988c-.216.843.684 1.528 1.406 1.069l4.397-2.785a.769.769 0 0 1 .825 0v0Z" - stroke={color} - strokeWidth={1.219} - strokeLinecap="round" - strokeLinejoin="round" - /> - </G> - <Defs> - <ClipPath id="a"> - <Path fill="#fff" d="M0 0h24v24H0z" /> - </ClipPath> - </Defs> - </Svg> -); +export function Rate({ color = colors.neutral[500], ...props }: SvgProps) { + return ( + <Svg width={24} height={24} fill="none" viewBox="0 0 24 24" {...props}> + <G clipPath="url(#a)"> + <Path + d="m12.412 17.878 4.725 3c.61.384 1.36-.187 1.181-.89l-1.369-5.382a.816.816 0 0 1 .272-.825l4.238-3.534c.553-.46.271-1.388-.45-1.434l-5.532-.357a.778.778 0 0 1-.684-.506L12.73 2.756a.778.778 0 0 0-1.462 0L9.206 7.95a.778.778 0 0 1-.685.506l-5.531.357c-.722.046-1.003.975-.45 1.434l4.237 3.534a.815.815 0 0 1 .272.825l-1.265 4.988c-.216.843.684 1.528 1.406 1.069l4.397-2.785a.769.769 0 0 1 .825 0v0Z" + stroke={color} + strokeWidth={1.219} + strokeLinecap="round" + strokeLinejoin="round" + /> + </G> + <Defs> + <ClipPath id="a"> + <Path fill="#fff" d="M0 0h24v24H0z" /> + </ClipPath> + </Defs> + </Svg> + ); +} diff --git a/src/components/ui/icons/settings.tsx b/src/components/ui/icons/settings.tsx index b5c68d451..e22dd122b 100644 --- a/src/components/ui/icons/settings.tsx +++ b/src/components/ui/icons/settings.tsx @@ -1,11 +1,13 @@ import type { SvgProps } from 'react-native-svg'; import Svg, { Path } from 'react-native-svg'; -export const Settings = ({ color = '#000', ...props }: SvgProps) => ( - <Svg width={24} height={24} viewBox="0 0 24 24" fill="none" {...props}> - <Path - d="M19.405 12.975c.05-.292.05-.634.05-.975 0-.341-.05-.634-.05-.975l2.093-1.609c.2-.146.25-.39.1-.633l-1.994-3.364c-.1-.195-.399-.293-.599-.195l-2.493.975a7.258 7.258 0 0 0-1.695-.975l-.349-2.584a.534.534 0 0 0-.498-.39H9.98a.534.534 0 0 0-.498.39l-.399 2.584c-.598.243-1.147.585-1.695.975l-2.494-.975c-.249-.098-.498 0-.598.195L2.302 8.783c-.1.194-.05.487.1.633l2.143 1.609c0 .341-.05.634-.05.975 0 .341.05.634.05.975l-2.093 1.609c-.2.146-.25.39-.1.633l1.994 3.364c.1.195.4.293.599.195l2.493-.975c.498.39 1.096.732 1.695.975l.399 2.584c.05.244.249.39.498.39h3.99c.249 0 .448-.195.498-.39l.4-2.584c.597-.243 1.146-.585 1.694-.975l2.493.975c.25.098.499 0 .599-.195l1.994-3.364a.588.588 0 0 0-.1-.633l-2.193-1.609Zm-7.43 2.438c-1.945 0-3.49-1.512-3.49-3.413 0-1.902 1.545-3.413 3.49-3.413 1.945 0 3.49 1.511 3.49 3.413 0 1.901-1.545 3.412-3.49 3.412Z" - fill={color} - /> - </Svg> -); +export function Settings({ color = '#000', ...props }: SvgProps) { + return ( + <Svg width={24} height={24} viewBox="0 0 24 24" fill="none" {...props}> + <Path + d="M19.405 12.975c.05-.292.05-.634.05-.975 0-.341-.05-.634-.05-.975l2.093-1.609c.2-.146.25-.39.1-.633l-1.994-3.364c-.1-.195-.399-.293-.599-.195l-2.493.975a7.258 7.258 0 0 0-1.695-.975l-.349-2.584a.534.534 0 0 0-.498-.39H9.98a.534.534 0 0 0-.498.39l-.399 2.584c-.598.243-1.147.585-1.695.975l-2.494-.975c-.249-.098-.498 0-.598.195L2.302 8.783c-.1.194-.05.487.1.633l2.143 1.609c0 .341-.05.634-.05.975 0 .341.05.634.05.975l-2.093 1.609c-.2.146-.25.39-.1.633l1.994 3.364c.1.195.4.293.599.195l2.493-.975c.498.39 1.096.732 1.695.975l.399 2.584c.05.244.249.39.498.39h3.99c.249 0 .448-.195.498-.39l.4-2.584c.597-.243 1.146-.585 1.694-.975l2.493.975c.25.098.499 0 .599-.195l1.994-3.364a.588.588 0 0 0-.1-.633l-2.193-1.609Zm-7.43 2.438c-1.945 0-3.49-1.512-3.49-3.413 0-1.902 1.545-3.413 3.49-3.413 1.945 0 3.49 1.511 3.49 3.413 0 1.901-1.545 3.412-3.49 3.412Z" + fill={color} + /> + </Svg> + ); +} diff --git a/src/components/ui/icons/share.tsx b/src/components/ui/icons/share.tsx index 52eb34441..20ec74fd4 100644 --- a/src/components/ui/icons/share.tsx +++ b/src/components/ui/icons/share.tsx @@ -3,13 +3,15 @@ import Svg, { Path } from 'react-native-svg'; import colors from '../colors'; -export const Share = ({ color = colors.neutral[500], ...props }: SvgProps) => ( - <Svg width={24} height={24} fill="none" viewBox="0 0 24 24" {...props}> - <Path - fillRule="evenodd" - clipRule="evenodd" - d="M17 23.5H7A2.5 2.5 0 0 1 4.5 21v-9A2.5 2.5 0 0 1 7 9.5h2a.5.5 0 1 1 0 1H7A1.5 1.5 0 0 0 5.5 12v9A1.5 1.5 0 0 0 7 22.5h10a1.5 1.5 0 0 0 1.5-1.5v-9a1.5 1.5 0 0 0-1.5-1.5h-2a.5.5 0 0 1 0-1h2a2.5 2.5 0 0 1 2.5 2.5v9a2.5 2.5 0 0 1-2.5 2.5ZM15.667 5.358 12.5 2.19V15a.5.5 0 0 1-1 0V2.19L8.333 5.357a.489.489 0 0 1-.69-.69L11.595.715c.016-.024.026-.051.047-.073a.487.487 0 0 1 .353-.141L12 .5l.005.001a.486.486 0 0 1 .352.141c.021.021.03.047.046.07l3.955 3.955a.488.488 0 0 1-.691.69Z" - fill={color} - /> - </Svg> -); +export function Share({ color = colors.neutral[500], ...props }: SvgProps) { + return ( + <Svg width={24} height={24} fill="none" viewBox="0 0 24 24" {...props}> + <Path + fillRule="evenodd" + clipRule="evenodd" + d="M17 23.5H7A2.5 2.5 0 0 1 4.5 21v-9A2.5 2.5 0 0 1 7 9.5h2a.5.5 0 1 1 0 1H7A1.5 1.5 0 0 0 5.5 12v9A1.5 1.5 0 0 0 7 22.5h10a1.5 1.5 0 0 0 1.5-1.5v-9a1.5 1.5 0 0 0-1.5-1.5h-2a.5.5 0 0 1 0-1h2a2.5 2.5 0 0 1 2.5 2.5v9a2.5 2.5 0 0 1-2.5 2.5ZM15.667 5.358 12.5 2.19V15a.5.5 0 0 1-1 0V2.19L8.333 5.357a.489.489 0 0 1-.69-.69L11.595.715c.016-.024.026-.051.047-.073a.487.487 0 0 1 .353-.141L12 .5l.005.001a.486.486 0 0 1 .352.141c.021.021.03.047.046.07l3.955 3.955a.488.488 0 0 1-.691.69Z" + fill={color} + /> + </Svg> + ); +} diff --git a/src/components/ui/icons/style.tsx b/src/components/ui/icons/style.tsx index 70cd94996..7c66265d7 100644 --- a/src/components/ui/icons/style.tsx +++ b/src/components/ui/icons/style.tsx @@ -1,21 +1,23 @@ import type { SvgProps } from 'react-native-svg'; import Svg, { ClipPath, Defs, G, Path } from 'react-native-svg'; -export const Style = ({ color, ...props }: SvgProps) => ( - <Svg width={25} height={24} fill="none" viewBox="0 0 25 24" {...props}> - <G - clipPath="url(#style)" - stroke={color} - strokeWidth={2.438} - strokeLinecap="round" - strokeLinejoin="round" - > - <Path d="M6.94 10.125a3.188 3.188 0 1 0 0-6.375 3.188 3.188 0 0 0 0 6.375ZM17.064 10.125a3.188 3.188 0 1 0 0-6.375 3.188 3.188 0 0 0 0 6.375ZM6.94 20.25a3.188 3.188 0 1 0 0-6.375 3.188 3.188 0 0 0 0 6.375ZM17.064 20.25a3.188 3.188 0 1 0 0-6.375 3.188 3.188 0 0 0 0 6.375Z" /> - </G> - <Defs> - <ClipPath id="style"> - <Path fill="#fff" transform="translate(.002)" d="M0 0h24v24H0z" /> - </ClipPath> - </Defs> - </Svg> -); +export function Style({ color, ...props }: SvgProps) { + return ( + <Svg width={25} height={24} fill="none" viewBox="0 0 25 24" {...props}> + <G + clipPath="url(#style)" + stroke={color} + strokeWidth={2.438} + strokeLinecap="round" + strokeLinejoin="round" + > + <Path d="M6.94 10.125a3.188 3.188 0 1 0 0-6.375 3.188 3.188 0 0 0 0 6.375ZM17.064 10.125a3.188 3.188 0 1 0 0-6.375 3.188 3.188 0 0 0 0 6.375ZM6.94 20.25a3.188 3.188 0 1 0 0-6.375 3.188 3.188 0 0 0 0 6.375ZM17.064 20.25a3.188 3.188 0 1 0 0-6.375 3.188 3.188 0 0 0 0 6.375Z" /> + </G> + <Defs> + <ClipPath id="style"> + <Path fill="#fff" transform="translate(.002)" d="M0 0h24v24H0z" /> + </ClipPath> + </Defs> + </Svg> + ); +} diff --git a/src/components/ui/icons/support.tsx b/src/components/ui/icons/support.tsx index d621c7829..0dcbb07e2 100644 --- a/src/components/ui/icons/support.tsx +++ b/src/components/ui/icons/support.tsx @@ -3,24 +3,26 @@ import Svg, { ClipPath, Defs, G, Path } from 'react-native-svg'; import colors from '../colors'; -export const Support = ({ +export function Support({ color = colors.neutral[500], ...props -}: SvgProps) => ( - <Svg width={24} height={24} fill="none" viewBox="0 0 24 24" {...props}> - <G clipPath="url(#a)"> - <Path - d="m12.533 19.866 7.594-7.594c1.865-1.875 2.137-4.94.375-6.9a4.875 4.875 0 0 0-7.078-.197L11.999 6.61 10.77 5.372c-1.874-1.866-4.94-2.137-6.9-.375a4.875 4.875 0 0 0-.196 7.078l7.79 7.79a.76.76 0 0 0 1.069 0v0Z" - stroke={color} - strokeWidth={1.219} - strokeLinecap="round" - strokeLinejoin="round" - /> - </G> - <Defs> - <ClipPath id="a"> - <Path fill="#fff" d="M0 0h24v24H0z" /> - </ClipPath> - </Defs> - </Svg> -); +}: SvgProps) { + return ( + <Svg width={24} height={24} fill="none" viewBox="0 0 24 24" {...props}> + <G clipPath="url(#a)"> + <Path + d="m12.533 19.866 7.594-7.594c1.865-1.875 2.137-4.94.375-6.9a4.875 4.875 0 0 0-7.078-.197L11.999 6.61 10.77 5.372c-1.874-1.866-4.94-2.137-6.9-.375a4.875 4.875 0 0 0-.196 7.078l7.79 7.79a.76.76 0 0 0 1.069 0v0Z" + stroke={color} + strokeWidth={1.219} + strokeLinecap="round" + strokeLinejoin="round" + /> + </G> + <Defs> + <ClipPath id="a"> + <Path fill="#fff" d="M0 0h24v24H0z" /> + </ClipPath> + </Defs> + </Svg> + ); +} diff --git a/src/components/ui/icons/website.tsx b/src/components/ui/icons/website.tsx index 7e9176f07..86532825e 100644 --- a/src/components/ui/icons/website.tsx +++ b/src/components/ui/icons/website.tsx @@ -3,25 +3,27 @@ import Svg, { ClipPath, Defs, G, Path } from 'react-native-svg'; import colors from '../colors'; -export const Website = ({ +export function Website({ color = colors.neutral[500], ...props -}: SvgProps) => ( - <Svg width={24} height={24} fill="none" viewBox="0 0 24 24" {...props}> - <G - clipPath="url(#a)" - stroke={color} - strokeWidth={1.219} - strokeLinecap="round" - strokeLinejoin="round" - > - <Path d="M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18ZM3 12h18" /> - <Path d="M12 20.756c2.07 0 3.75-3.92 3.75-8.756S14.07 3.244 12 3.244c-2.071 0-3.75 3.92-3.75 8.756s1.679 8.756 3.75 8.756Z" /> - </G> - <Defs> - <ClipPath id="a"> - <Path fill="#fff" d="M0 0h24v24H0z" /> - </ClipPath> - </Defs> - </Svg> -); +}: SvgProps) { + return ( + <Svg width={24} height={24} fill="none" viewBox="0 0 24 24" {...props}> + <G + clipPath="url(#a)" + stroke={color} + strokeWidth={1.219} + strokeLinecap="round" + strokeLinejoin="round" + > + <Path d="M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18ZM3 12h18" /> + <Path d="M12 20.756c2.07 0 3.75-3.92 3.75-8.756S14.07 3.244 12 3.244c-2.071 0-3.75 3.92-3.75 8.756s1.679 8.756 3.75 8.756Z" /> + </G> + <Defs> + <ClipPath id="a"> + <Path fill="#fff" d="M0 0h24v24H0z" /> + </ClipPath> + </Defs> + </Svg> + ); +} diff --git a/src/components/ui/image.tsx b/src/components/ui/image.tsx index 6164a5549..a5908ae2d 100644 --- a/src/components/ui/image.tsx +++ b/src/components/ui/image.tsx @@ -1,26 +1,29 @@ import type { ImageProps } from 'expo-image'; import { Image as NImage } from 'expo-image'; import { cssInterop } from 'nativewind'; + export type ImgProps = ImageProps & { className?: string; }; cssInterop(NImage, { className: 'style' }); -export const Image = ({ +export function Image({ style, className, placeholder = 'L6PZfSi_.AyE_3t7t7R**0o#DgR4', ...props -}: ImgProps) => ( - <NImage - className={className} - placeholder={placeholder} - style={style} - {...props} - /> -); +}: ImgProps) { + return ( + <NImage + className={className} + placeholder={placeholder} + style={style} + {...props} + /> + ); +} -export const preloadImages = (sources: Array<string>) => { +export function preloadImages(sources: Array<string>) { NImage.prefetch(sources); -}; +} diff --git a/src/components/ui/index.tsx b/src/components/ui/index.tsx index e6e253fed..2256f7f73 100644 --- a/src/components/ui/index.tsx +++ b/src/components/ui/index.tsx @@ -24,7 +24,7 @@ export { } from 'react-native'; export { SafeAreaView } from 'react-native-safe-area-context'; -//Apply cssInterop to Svg to resolve className string into style +// Apply cssInterop to Svg to resolve className string into style cssInterop(Svg, { className: { target: 'style', diff --git a/src/components/ui/input.tsx b/src/components/ui/input.tsx index 183684aad..03e5b4081 100644 --- a/src/components/ui/input.tsx +++ b/src/components/ui/input.tsx @@ -1,16 +1,17 @@ -import React, { forwardRef, useCallback, useMemo, useState } from 'react'; import type { Control, FieldValues, Path, RegisterOptions, } from 'react-hook-form'; -import { useController } from 'react-hook-form'; import type { TextInputProps } from 'react-native'; +import * as React from 'react'; +import { forwardRef, useCallback, useMemo, useState } from 'react'; +import { useController } from 'react-hook-form'; import { I18nManager, - StyleSheet, TextInput as NTextInput, + StyleSheet, View, } from 'react-native'; import { tv } from 'tailwind-variants'; @@ -51,17 +52,17 @@ const inputTv = tv({ }, }); -export interface NInputProps extends TextInputProps { +export type NInputProps = { label?: string; disabled?: boolean; error?: string; -} +} & TextInputProps; -type TRule<T extends FieldValues> = - | Omit< - RegisterOptions<T>, +type TRule<T extends FieldValues> + = | Omit< + RegisterOptions<T>, 'disabled' | 'valueAsNumber' | 'valueAsDate' | 'setValueAs' - > + > | undefined; export type RuleType<T extends FieldValues> = { [name in keyof T]: TRule<T> }; @@ -71,9 +72,7 @@ export type InputControllerType<T extends FieldValues> = { rules?: RuleType<T>; }; -interface ControlledInputProps<T extends FieldValues> - extends NInputProps, - InputControllerType<T> {} +type ControlledInputProps<T extends FieldValues> = {} & NInputProps & InputControllerType<T>; export const Input = forwardRef<NTextInput, NInputProps>((props, ref) => { const { label, error, testID, ...inputProps } = props; @@ -139,7 +138,7 @@ export function ControlledInput<T extends FieldValues>( ref={field.ref} autoCapitalize="none" onChangeText={field.onChange} - value={(field.value as string) || ''} + value={(field.value) || ''} {...inputProps} error={fieldState.error?.message} /> diff --git a/src/components/ui/list.tsx b/src/components/ui/list.tsx index c528065cc..cf6e9bb60 100644 --- a/src/components/ui/list.tsx +++ b/src/components/ui/list.tsx @@ -4,6 +4,7 @@ import { ActivityIndicator, View } from 'react-native'; import Svg, { Circle, Path } from 'react-native-svg'; import { Text } from './text'; + type Props = { isLoading: boolean; }; @@ -12,46 +13,50 @@ export const List = NFlashList; export const EmptyList = memo(({ isLoading }: Props) => ( <View className="min-h-[400px] flex-1 items-center justify-center"> - {!isLoading ? ( - <View> - <NoData /> - <Text className="pt-4 text-center">Sorry! No data found</Text> - </View> - ) : ( - <ActivityIndicator /> - )} + {!isLoading + ? ( + <View> + <NoData /> + <Text className="pt-4 text-center">Sorry! No data found</Text> + </View> + ) + : ( + <ActivityIndicator /> + )} </View> )); -export const NoData = () => ( - <Svg width={200} height={200} viewBox="0 0 647.636 632.174"> - <Path - d="M411.146 142.174h-174.51a15.018 15.018 0 0 0-15 15v387.85l-2 .61-42.81 13.11a8.007 8.007 0 0 1-9.99-5.31l-127.34-415.95a8.003 8.003 0 0 1 5.31-9.99l65.97-20.2 191.25-58.54 65.97-20.2a7.99 7.99 0 0 1 9.99 5.3l32.55 106.32Z" - fill="#f2f2f2" - /> - <Path - d="m449.226 140.174-39.23-128.14a16.994 16.994 0 0 0-21.23-11.28l-92.75 28.39-191.24 58.55-92.75 28.4a17.015 17.015 0 0 0-11.28 21.23l134.08 437.93a17.027 17.027 0 0 0 16.26 12.03 16.79 16.79 0 0 0 4.97-.75l63.58-19.46 2-.62v-2.09l-2 .61-64.17 19.65a15.015 15.015 0 0 1-18.73-9.95L2.666 136.734a14.98 14.98 0 0 1 9.95-18.73l92.75-28.4 191.24-58.54 92.75-28.4a15.156 15.156 0 0 1 4.41-.66 15.015 15.015 0 0 1 14.32 10.61l39.05 127.56.62 2h2.08Z" - fill="#3f3d56" - /> - <Path - d="M122.68 127.82a9.016 9.016 0 0 1-8.61-6.366l-12.88-42.072a8.999 8.999 0 0 1 5.97-11.24L283.1 14.278a9.009 9.009 0 0 1 11.24 5.971l12.88 42.072a9.01 9.01 0 0 1-5.97 11.241l-175.94 53.864a8.976 8.976 0 0 1-2.63.395Z" - fill="#7eb55a" - /> - <Circle cx={190.154} cy={24.955} r={20} fill="#7eb55a" /> - <Circle cx={190.154} cy={24.955} r={12.665} fill="#fff" /> - <Path - d="M602.636 582.174h-338a8.51 8.51 0 0 1-8.5-8.5v-405a8.51 8.51 0 0 1 8.5-8.5h338a8.51 8.51 0 0 1 8.5 8.5v405a8.51 8.51 0 0 1-8.5 8.5Z" - fill="#e6e6e6" - /> - <Path - d="M447.136 140.174h-210.5a17.024 17.024 0 0 0-17 17v407.8l2-.61v-407.19a15.018 15.018 0 0 1 15-15h211.12Zm183.5 0h-394a17.024 17.024 0 0 0-17 17v458a17.024 17.024 0 0 0 17 17h394a17.024 17.024 0 0 0 17-17v-458a17.024 17.024 0 0 0-17-17Zm15 475a15.018 15.018 0 0 1-15 15h-394a15.018 15.018 0 0 1-15-15v-458a15.018 15.018 0 0 1 15-15h394a15.018 15.018 0 0 1 15 15Z" - fill="#3f3d56" - /> - <Path - d="M525.636 184.174h-184a9.01 9.01 0 0 1-9-9v-44a9.01 9.01 0 0 1 9-9h184a9.01 9.01 0 0 1 9 9v44a9.01 9.01 0 0 1-9 9Z" - fill="#7eb55a" - /> - <Circle cx={433.636} cy={105.174} r={20} fill="#7eb55a" /> - <Circle cx={433.636} cy={105.174} r={12.182} fill="#fff" /> - </Svg> -); +export function NoData() { + return ( + <Svg width={200} height={200} viewBox="0 0 647.636 632.174"> + <Path + d="M411.146 142.174h-174.51a15.018 15.018 0 0 0-15 15v387.85l-2 .61-42.81 13.11a8.007 8.007 0 0 1-9.99-5.31l-127.34-415.95a8.003 8.003 0 0 1 5.31-9.99l65.97-20.2 191.25-58.54 65.97-20.2a7.99 7.99 0 0 1 9.99 5.3l32.55 106.32Z" + fill="#f2f2f2" + /> + <Path + d="m449.226 140.174-39.23-128.14a16.994 16.994 0 0 0-21.23-11.28l-92.75 28.39-191.24 58.55-92.75 28.4a17.015 17.015 0 0 0-11.28 21.23l134.08 437.93a17.027 17.027 0 0 0 16.26 12.03 16.79 16.79 0 0 0 4.97-.75l63.58-19.46 2-.62v-2.09l-2 .61-64.17 19.65a15.015 15.015 0 0 1-18.73-9.95L2.666 136.734a14.98 14.98 0 0 1 9.95-18.73l92.75-28.4 191.24-58.54 92.75-28.4a15.156 15.156 0 0 1 4.41-.66 15.015 15.015 0 0 1 14.32 10.61l39.05 127.56.62 2h2.08Z" + fill="#3f3d56" + /> + <Path + d="M122.68 127.82a9.016 9.016 0 0 1-8.61-6.366l-12.88-42.072a8.999 8.999 0 0 1 5.97-11.24L283.1 14.278a9.009 9.009 0 0 1 11.24 5.971l12.88 42.072a9.01 9.01 0 0 1-5.97 11.241l-175.94 53.864a8.976 8.976 0 0 1-2.63.395Z" + fill="#7eb55a" + /> + <Circle cx={190.154} cy={24.955} r={20} fill="#7eb55a" /> + <Circle cx={190.154} cy={24.955} r={12.665} fill="#fff" /> + <Path + d="M602.636 582.174h-338a8.51 8.51 0 0 1-8.5-8.5v-405a8.51 8.51 0 0 1 8.5-8.5h338a8.51 8.51 0 0 1 8.5 8.5v405a8.51 8.51 0 0 1-8.5 8.5Z" + fill="#e6e6e6" + /> + <Path + d="M447.136 140.174h-210.5a17.024 17.024 0 0 0-17 17v407.8l2-.61v-407.19a15.018 15.018 0 0 1 15-15h211.12Zm183.5 0h-394a17.024 17.024 0 0 0-17 17v458a17.024 17.024 0 0 0 17 17h394a17.024 17.024 0 0 0 17-17v-458a17.024 17.024 0 0 0-17-17Zm15 475a15.018 15.018 0 0 1-15 15h-394a15.018 15.018 0 0 1-15-15v-458a15.018 15.018 0 0 1 15-15h394a15.018 15.018 0 0 1 15 15Z" + fill="#3f3d56" + /> + <Path + d="M525.636 184.174h-184a9.01 9.01 0 0 1-9-9v-44a9.01 9.01 0 0 1 9-9h184a9.01 9.01 0 0 1 9 9v44a9.01 9.01 0 0 1-9 9Z" + fill="#7eb55a" + /> + <Circle cx={433.636} cy={105.174} r={20} fill="#7eb55a" /> + <Circle cx={433.636} cy={105.174} r={12.182} fill="#fff" /> + </Svg> + ); +} diff --git a/src/components/ui/modal-keyboard-aware-scroll-view.tsx b/src/components/ui/modal-keyboard-aware-scroll-view.tsx index 08e2bdb20..cc1d1cee4 100644 --- a/src/components/ui/modal-keyboard-aware-scroll-view.tsx +++ b/src/components/ui/modal-keyboard-aware-scroll-view.tsx @@ -1,3 +1,6 @@ +import type { BottomSheetScrollViewMethods } from '@gorhom/bottom-sheet'; +import type { BottomSheetScrollViewProps } from '@gorhom/bottom-sheet/src/components/bottomSheetScrollable/types'; +import type { KeyboardAwareScrollViewProps } from 'react-native-keyboard-controller'; // source https://kirillzyusko.github.io/react-native-keyboard-controller/docs/api/components/keyboard-aware-scroll-view /** * This component is used to handle the keyboard in a modal. @@ -14,20 +17,19 @@ } */ import { - type BottomSheetScrollViewMethods, + createBottomSheetScrollableComponent, SCROLLABLE_TYPE, } from '@gorhom/bottom-sheet'; -import { type BottomSheetScrollViewProps } from '@gorhom/bottom-sheet/src/components/bottomSheetScrollable/types'; import { memo } from 'react'; import { KeyboardAwareScrollView, - type KeyboardAwareScrollViewProps, + } from 'react-native-keyboard-controller'; import Reanimated from 'react-native-reanimated'; -const AnimatedScrollView = - Reanimated.createAnimatedComponent<KeyboardAwareScrollViewProps>( +const AnimatedScrollView + = Reanimated.createAnimatedComponent<KeyboardAwareScrollViewProps>( KeyboardAwareScrollView, ); const BottomSheetScrollViewComponent = createBottomSheetScrollableComponent< @@ -36,8 +38,8 @@ const BottomSheetScrollViewComponent = createBottomSheetScrollableComponent< >(SCROLLABLE_TYPE.SCROLLVIEW, AnimatedScrollView); const BottomSheetKeyboardAwareScrollView = memo(BottomSheetScrollViewComponent); -BottomSheetKeyboardAwareScrollView.displayName = - 'BottomSheetKeyboardAwareScrollView'; +BottomSheetKeyboardAwareScrollView.displayName + = 'BottomSheetKeyboardAwareScrollView'; export default BottomSheetKeyboardAwareScrollView as ( props: BottomSheetScrollViewProps & KeyboardAwareScrollViewProps, diff --git a/src/components/ui/modal.tsx b/src/components/ui/modal.tsx index 2d39abf9e..9902ddf6e 100644 --- a/src/components/ui/modal.tsx +++ b/src/components/ui/modal.tsx @@ -32,8 +32,8 @@ import type { BottomSheetBackdropProps, BottomSheetModalProps, } from '@gorhom/bottom-sheet'; -import { BottomSheetModal, useBottomSheet } from '@gorhom/bottom-sheet'; import type { ForwardedRef } from 'react'; +import { BottomSheetModal, useBottomSheet } from '@gorhom/bottom-sheet'; import { forwardRef, memo, @@ -59,7 +59,7 @@ type ModalHeaderProps = { dismiss: () => void; }; -export const useModal = () => { +export function useModal() { const ref = useRef<BottomSheetModal>(null); const present = useCallback((data?: never) => { ref.current?.present(data); @@ -68,7 +68,7 @@ export const useModal = () => { ref.current?.dismiss(); }, []); return { ref, present, dismiss }; -}; +} export const Modal = forwardRef( ( @@ -120,7 +120,7 @@ export const Modal = forwardRef( const AnimatedPressable = Animated.createAnimatedComponent(Pressable); -const CustomBackdrop = ({ style }: BottomSheetBackdropProps) => { +function CustomBackdrop({ style }: BottomSheetBackdropProps) { const { close } = useBottomSheet(); const FADE_IN_DURATION = 50; const FADE_OUT_DURATION = 20; @@ -132,11 +132,11 @@ const CustomBackdrop = ({ style }: BottomSheetBackdropProps) => { style={[style, { backgroundColor: 'rgba(0, 0, 0, 0.4)' }]} /> ); -}; +} -export const renderBackdrop = (props: BottomSheetBackdropProps) => ( - <CustomBackdrop {...props} /> -); +export function renderBackdrop(props: BottomSheetBackdropProps) { + return <CustomBackdrop {...props} />; +} /** * @@ -147,7 +147,7 @@ export const renderBackdrop = (props: BottomSheetBackdropProps) => ( * In case the modal is detached, we need to add some extra props to the modal to make it look like a detached modal. */ -const getDetachedProps = (detached: boolean) => { +function getDetachedProps(detached: boolean) { if (detached) { return { detached: true, @@ -156,7 +156,7 @@ const getDetachedProps = (detached: boolean) => { } as Partial<BottomSheetModalProps>; } return {} as Partial<BottomSheetModalProps>; -}; +} /** * ModalHeader @@ -178,23 +178,25 @@ const ModalHeader = memo(({ title, dismiss }: ModalHeaderProps) => ( </> )); -const CloseButton = ({ close }: { close: () => void }) => ( - <Pressable - onPress={close} - className="absolute right-3 top-3 size-[24px] items-center justify-center " - hitSlop={{ top: 20, bottom: 20, left: 20, right: 20 }} - accessibilityLabel="close modal" - accessibilityRole="button" - accessibilityHint="closes the modal" - > - <Svg - className="fill-neutral-300 dark:fill-white" - width={24} - height={24} - fill="none" - viewBox="0 0 24 24" +function CloseButton({ close }: { close: () => void }) { + return ( + <Pressable + onPress={close} + className="absolute right-3 top-3 size-[24px] items-center justify-center " + hitSlop={{ top: 20, bottom: 20, left: 20, right: 20 }} + accessibilityLabel="close modal" + accessibilityRole="button" + accessibilityHint="closes the modal" > - <Path d="M18.707 6.707a1 1 0 0 0-1.414-1.414L12 10.586 6.707 5.293a1 1 0 0 0-1.414 1.414L10.586 12l-5.293 5.293a1 1 0 1 0 1.414 1.414L12 13.414l5.293 5.293a1 1 0 0 0 1.414-1.414L13.414 12l5.293-5.293Z" /> - </Svg> - </Pressable> -); + <Svg + className="fill-neutral-300 dark:fill-white" + width={24} + height={24} + fill="none" + viewBox="0 0 24 24" + > + <Path d="M18.707 6.707a1 1 0 0 0-1.414-1.414L12 10.586 6.707 5.293a1 1 0 0 0-1.414 1.414L10.586 12l-5.293 5.293a1 1 0 1 0 1.414 1.414L12 13.414l5.293 5.293a1 1 0 0 0 1.414-1.414L13.414 12l5.293-5.293Z" /> + </Svg> + </Pressable> + ); +} diff --git a/src/components/ui/progress-bar.tsx b/src/components/ui/progress-bar.tsx index 77258fe02..653354264 100644 --- a/src/components/ui/progress-bar.tsx +++ b/src/components/ui/progress-bar.tsx @@ -40,10 +40,10 @@ export const ProgressBar = forwardRef<ProgressBarRef, Props>( })); return ( <View - testID={'progress-bar-container'} + testID="progress-bar-container" className={twMerge(` bg-[#EAEAEA]`, className)} > - <Animated.View testID={'progress-bar'} style={style} /> + <Animated.View testID="progress-bar" style={style} /> </View> ); }, diff --git a/src/components/ui/select.tsx b/src/components/ui/select.tsx index 81310225d..633c9fd0a 100644 --- a/src/components/ui/select.tsx +++ b/src/components/ui/select.tsx @@ -1,22 +1,24 @@ /* eslint-disable max-lines-per-function */ +import type { BottomSheetModal } from '@gorhom/bottom-sheet'; +import type { FieldValues } from 'react-hook-form'; +import type { PressableProps } from 'react-native'; +import type { SvgProps } from 'react-native-svg'; +import type { InputControllerType } from './input'; import { BottomSheetFlatList, - type BottomSheetModal, + } from '@gorhom/bottom-sheet'; import { FlashList } from '@shopify/flash-list'; import { useColorScheme } from 'nativewind'; import { forwardRef, memo, useCallback, useMemo } from 'react'; -import type { FieldValues } from 'react-hook-form'; import { useController } from 'react-hook-form'; -import { Platform, Pressable, type PressableProps, View } from 'react-native'; -import type { SvgProps } from 'react-native-svg'; +import { Platform, Pressable, View } from 'react-native'; import Svg, { Path } from 'react-native-svg'; -import { tv } from 'tailwind-variants'; +import { tv } from 'tailwind-variants'; import colors from '@/components/ui/colors'; -import { CaretDown } from '@/components/ui/icons'; -import type { InputControllerType } from './input'; +import { CaretDown } from '@/components/ui/icons'; import { Modal, useModal } from './modal'; import { Text } from './text'; @@ -131,7 +133,7 @@ const Option = memo( ), ); -export interface SelectProps { +export type SelectProps = { value?: string | number; label?: string; disabled?: boolean; @@ -140,12 +142,10 @@ export interface SelectProps { onSelect?: (value: string | number) => void; placeholder?: string; testID?: string; -} -interface ControlledSelectProps<T extends FieldValues> - extends SelectProps, - InputControllerType<T> {} +}; +type ControlledSelectProps<T extends FieldValues> = {} & SelectProps & InputControllerType<T>; -export const Select = (props: SelectProps) => { +export function Select(props: SelectProps) { const { label, value, @@ -178,7 +178,7 @@ export const Select = (props: SelectProps) => { const textValue = useMemo( () => value !== undefined - ? (options?.find((t) => t.value === value)?.label ?? placeholder) + ? (options?.find(t => t.value === value)?.label ?? placeholder) : placeholder, [value, options, placeholder], ); @@ -222,7 +222,7 @@ export const Select = (props: SelectProps) => { /> </> ); -}; +} // only used with react-hook-form export function ControlledSelect<T extends FieldValues>( @@ -248,20 +248,22 @@ export function ControlledSelect<T extends FieldValues>( ); } -const Check = ({ ...props }: SvgProps) => ( - <Svg - width={25} - height={24} - fill="none" - viewBox="0 0 25 24" - {...props} - className="stroke-black dark:stroke-white" - > - <Path - d="m20.256 6.75-10.5 10.5L4.506 12" - strokeWidth={2.438} - strokeLinecap="round" - strokeLinejoin="round" - /> - </Svg> -); +function Check({ ...props }: SvgProps) { + return ( + <Svg + width={25} + height={24} + fill="none" + viewBox="0 0 25 24" + {...props} + className="stroke-black dark:stroke-white" + > + <Path + d="m20.256 6.75-10.5 10.5L4.506 12" + strokeWidth={2.438} + strokeLinecap="round" + strokeLinejoin="round" + /> + </Svg> + ); +} diff --git a/src/components/ui/text.tsx b/src/components/ui/text.tsx index 2052e30e7..489a0ebdc 100644 --- a/src/components/ui/text.tsx +++ b/src/components/ui/text.tsx @@ -1,23 +1,23 @@ -import { useMemo } from 'react'; import type { TextProps, TextStyle } from 'react-native'; -import { I18nManager, StyleSheet, Text as NNText } from 'react-native'; -import { twMerge } from 'tailwind-merge'; - import type { TxKeyPath } from '@/lib/i18n'; +import { useMemo } from 'react'; +import { I18nManager, Text as NNText, StyleSheet } from 'react-native'; + +import { twMerge } from 'tailwind-merge'; import { translate } from '@/lib/i18n'; -interface Props extends TextProps { +type Props = { className?: string; tx?: TxKeyPath; -} +} & TextProps; -export const Text = ({ +export function Text({ className = '', style, tx, children, ...props -}: Props) => { +}: Props) { const textStyle = useMemo( () => twMerge( @@ -42,4 +42,4 @@ export const Text = ({ {tx ? translate(tx) : children} </NNText> ); -}; +} diff --git a/src/components/ui/utils.tsx b/src/components/ui/utils.tsx index 0ed00aa5a..379f5205c 100644 --- a/src/components/ui/utils.tsx +++ b/src/components/ui/utils.tsx @@ -9,7 +9,7 @@ export const WIDTH = width; export const HEIGHT = height; // for onError react queries and mutations -export const showError = (error: AxiosError) => { +export function showError(error: AxiosError) { const description = extractError(error?.response?.data).trimEnd(); showMessage({ @@ -19,22 +19,22 @@ export const showError = (error: AxiosError) => { duration: 4000, icon: 'danger', }); -}; +} -export const showErrorMessage = (message: string = 'Something went wrong ') => { +export function showErrorMessage(message: string = 'Something went wrong ') { showMessage({ message, type: 'danger', duration: 4000, }); -}; +} -export const extractError = (data: unknown): string => { +export function extractError(data: unknown): string { if (typeof data === 'string') { return data; } if (Array.isArray(data)) { - const messages = data.map((item) => ` ${extractError(item)}`); + const messages = data.map(item => ` ${extractError(item)}`); return `${messages.join('')}`; } @@ -49,4 +49,4 @@ export const extractError = (data: unknown): string => { return `${messages.join('')} `; } return 'Something went wrong '; -}; +} diff --git a/src/lib/auth/index.tsx b/src/lib/auth/index.tsx index d52252bf3..443a58ae1 100644 --- a/src/lib/auth/index.tsx +++ b/src/lib/auth/index.tsx @@ -1,15 +1,16 @@ -import { create } from 'zustand'; +import type { TokenType } from './utils'; +import { create } from 'zustand'; import { createSelectors } from '../utils'; -import { getToken, removeToken, setToken, type TokenType } from './utils'; +import { getToken, removeToken, setToken } from './utils'; -interface AuthState { +type AuthState = { token: TokenType | null; status: 'idle' | 'signOut' | 'signIn'; signIn: (data: TokenType) => void; signOut: () => void; hydrate: () => void; -} +}; const _useAuth = create<AuthState>((set, get) => ({ status: 'idle', @@ -27,10 +28,12 @@ const _useAuth = create<AuthState>((set, get) => ({ const userToken = getToken(); if (userToken !== null) { get().signIn(userToken); - } else { + } + else { get().signOut(); } - } catch { + } + catch { // catch error here // Maybe sign_out user! } diff --git a/src/lib/auth/utils.tsx b/src/lib/auth/utils.tsx index 1bd12d516..4244bfd09 100644 --- a/src/lib/auth/utils.tsx +++ b/src/lib/auth/utils.tsx @@ -11,5 +11,5 @@ export type TokenType = { }; export const getToken = () => getItem<TokenType>(TOKEN); -export const removeToken = () => removeItem(TOKEN); -export const setToken = (value: TokenType) => setItem<TokenType>(TOKEN, value); +export const removeToken = async () => removeItem(TOKEN); +export const setToken = async (value: TokenType) => setItem<TokenType>(TOKEN, value); diff --git a/src/lib/env.js b/src/lib/env.js index 2c3559bc5..80096e4ad 100644 --- a/src/lib/env.js +++ b/src/lib/env.js @@ -9,5 +9,5 @@ import Constants from 'expo-constants'; /** * @type {typeof import('../../env.js').ClientEnv} */ -//@ts-ignore // Don't worry about TypeScript here; we know we're passing the correct environment variables to `extra` in `app.config.ts`. +// @ts-ignore // Don't worry about TypeScript here; we know we're passing the correct environment variables to `extra` in `app.config.ts`. export const Env = Constants.expoConfig?.extra ?? {}; diff --git a/src/lib/hooks/use-is-first-time.tsx b/src/lib/hooks/use-is-first-time.tsx index 39d2a5945..395b02cd2 100644 --- a/src/lib/hooks/use-is-first-time.tsx +++ b/src/lib/hooks/use-is-first-time.tsx @@ -4,10 +4,10 @@ import { storage } from '../storage'; const IS_FIRST_TIME = 'IS_FIRST_TIME'; -export const useIsFirstTime = () => { +export function useIsFirstTime() { const [isFirstTime, setIsFirstTime] = useMMKVBoolean(IS_FIRST_TIME, storage); if (isFirstTime === undefined) { return [true, setIsFirstTime] as const; } return [isFirstTime, setIsFirstTime] as const; -}; +} diff --git a/src/lib/hooks/use-selected-theme.tsx b/src/lib/hooks/use-selected-theme.tsx index 37f44ac02..19b2d26de 100644 --- a/src/lib/hooks/use-selected-theme.tsx +++ b/src/lib/hooks/use-selected-theme.tsx @@ -13,7 +13,7 @@ export type ColorSchemeType = 'light' | 'dark' | 'system'; * don't use this hooks if you want to use it to style your component based on the theme use useColorScheme from nativewind instead * */ -export const useSelectedTheme = () => { +export function useSelectedTheme() { const { setColorScheme } = useColorScheme(); const [theme, _setTheme] = useMMKVString(SELECTED_THEME, storage); @@ -27,11 +27,11 @@ export const useSelectedTheme = () => { const selectedTheme = (theme ?? 'system') as ColorSchemeType; return { selectedTheme, setSelectedTheme } as const; -}; +} // to be used in the root file to load the selected theme from MMKV -export const loadSelectedTheme = () => { +export function loadSelectedTheme() { const theme = storage.getString(SELECTED_THEME); if (theme !== undefined) { colorScheme.set(theme as ColorSchemeType); } -}; +} diff --git a/src/lib/i18n/index.tsx b/src/lib/i18n/index.tsx index 8f9c9bfe4..afafe798f 100644 --- a/src/lib/i18n/index.tsx +++ b/src/lib/i18n/index.tsx @@ -4,6 +4,7 @@ import { initReactI18next } from 'react-i18next'; import { I18nManager } from 'react-native'; import { resources } from './resources'; + export * from './utils'; const locales = getLocales(); diff --git a/src/lib/i18n/types.ts b/src/lib/i18n/types.ts index 2c41eb81a..24deba28d 100644 --- a/src/lib/i18n/types.ts +++ b/src/lib/i18n/types.ts @@ -13,8 +13,8 @@ type RecursiveKeyOfInner<TObj extends object> = { >; }[keyof TObj & (string | number)]; -type RecursiveKeyOfHandleValue<TValue, Text extends string> = - TValue extends Array<unknown> +type RecursiveKeyOfHandleValue<TValue, Text extends string> + = TValue extends Array<unknown> ? Text : TValue extends object ? Text | `${Text}${RecursiveKeyOfInner<TValue>}` diff --git a/src/lib/i18n/utils.tsx b/src/lib/i18n/utils.tsx index 1f64ba990..209eff8c2 100644 --- a/src/lib/i18n/utils.tsx +++ b/src/lib/i18n/utils.tsx @@ -1,14 +1,14 @@ import type TranslateOptions from 'i18next'; +import type { Language, resources } from './resources'; +import type { RecursiveKeyOf } from './types'; import { changeLanguage as i18nChangeLanguage, t } from 'i18next'; import memoize from 'lodash.memoize'; import { useCallback } from 'react'; import { NativeModules, Platform } from 'react-native'; + import { useMMKVString } from 'react-native-mmkv'; import RNRestart from 'react-native-restart'; - import { storage } from '../storage'; -import type { Language, resources } from './resources'; -import type { RecursiveKeyOf } from './types'; type DefaultLocale = typeof resources.en.translation; export type TxKeyPath = RecursiveKeyOf<DefaultLocale>; @@ -23,22 +23,25 @@ export const translate = memoize( options ? key + JSON.stringify(options) : key, ); -export const changeLanguage = (lang: Language) => { +export function changeLanguage(lang: Language) { i18nChangeLanguage(lang); if (Platform.OS === 'ios' || Platform.OS === 'android') { if (__DEV__) { NativeModules.DevSettings.reload(); - } else { + } + else { RNRestart.restart(); } - } else if (Platform.OS === 'web') { + } + else if (Platform.OS === 'web') { window.location.reload(); - } else { + } + else { throw new Error('Unexpected value for Platform.OS'); } -}; +} -export const useSelectedLanguage = () => { +export function useSelectedLanguage() { const [language, setLang] = useMMKVString(LOCAL); const setLanguage = useCallback( @@ -52,4 +55,4 @@ export const useSelectedLanguage = () => { ); return { language, setLanguage }; -}; +} diff --git a/src/lib/test-utils.tsx b/src/lib/test-utils.tsx index 3a7ec405e..a87de1a35 100644 --- a/src/lib/test-utils.tsx +++ b/src/lib/test-utils.tsx @@ -1,43 +1,37 @@ -import '@shopify/flash-list/jestSetup'; +import type { RenderOptions } from '@testing-library/react-native'; +import type { ReactElement } from 'react'; import { BottomSheetModalProvider } from '@gorhom/bottom-sheet'; import { NavigationContainer } from '@react-navigation/native'; -import type { RenderOptions } from '@testing-library/react-native'; import { render, userEvent } from '@testing-library/react-native'; -import type { ReactElement } from 'react'; -import React from 'react'; +import * as React from 'react'; +import '@shopify/flash-list/jestSetup'; jest.mock('@dev-plugins/react-query', () => ({ useReactQueryDevTools: jest.fn(), })); -const createAppWrapper = - () => - ({ children }: { children: React.ReactNode }) => ( +function createAppWrapper() { + return ({ children }: { children: React.ReactNode }) => ( <BottomSheetModalProvider> <NavigationContainer>{children}</NavigationContainer> </BottomSheetModalProvider> ); +} -const customRender = ( - ui: ReactElement, - options?: Omit<RenderOptions, 'wrapper'>, -) => { +function customRender(ui: ReactElement, options?: Omit<RenderOptions, 'wrapper'>) { const Wrapper = createAppWrapper(); // make sure we have a new wrapper for each render return render(ui, { wrapper: Wrapper, ...options }); -}; +} // use this if you want to test user events -export const setup = ( - ui: ReactElement, - options?: Omit<RenderOptions, 'wrapper'>, -) => { +export function setup(ui: ReactElement, options?: Omit<RenderOptions, 'wrapper'>) { const Wrapper = createAppWrapper(); return { user: userEvent.setup(), ...render(ui, { wrapper: Wrapper, ...options }), }; -}; +} export * from '@testing-library/react-native'; export { customRender as render }; diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 270b28193..260740dd5 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -1,26 +1,24 @@ -import { Linking } from 'react-native'; import type { StoreApi, UseBoundStore } from 'zustand'; +import { Linking } from 'react-native'; export function openLinkInBrowser(url: string) { - Linking.canOpenURL(url).then((canOpen) => canOpen && Linking.openURL(url)); + Linking.canOpenURL(url).then(async canOpen => canOpen && Linking.openURL(url)); } type WithSelectors<S> = S extends { getState: () => infer T } ? S & { use: { [K in keyof T]: () => T[K] } } : never; -export const createSelectors = < +export function createSelectors< T extends object, S extends UseBoundStore<StoreApi<T>>, ->( - _store: S, -) => { +>(_store: S) { const store = _store as WithSelectors<typeof _store>; store.use = {} as { [K in keyof T]: () => T[K] }; for (const k of Object.keys(store.getState()) as Array<keyof T>) { - store.use[k] = () => store((s) => s[k]); + store.use[k] = () => store(s => s[k]); } return store; -}; +} From ae7625cfc01f32aa0692ab24b53bf793c3924732 Mon Sep 17 00:00:00 2001 From: Fernanda Toledo <fertoledo93@gmail.com> Date: Mon, 25 May 2026 20:01:06 -0300 Subject: [PATCH 05/18] fix: address ts/no-unsafe-assignment violations --- eslint.config.mjs | 2 +- src/api/auth/use-forgot-password.ts | 2 +- src/api/auth/use-login.ts | 2 +- src/api/auth/use-sign-up.ts | 2 +- src/api/auth/use-update-password.ts | 2 +- src/api/auth/use-user.tsx | 4 ++-- src/api/common/interceptors.ts | 20 ++++++++++---------- src/components/providers/auth.tsx | 11 ++++++----- src/components/ui/utils.tsx | 2 +- 9 files changed, 24 insertions(+), 23 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 102da765f..b377e3823 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -129,7 +129,6 @@ export default antfu( 'ts/array-type': ['error', { default: 'generic' }], 'ts/prefer-nullish-coalescing': 'error', // Type-aware rules activated by tsconfigPath — disable until addressed individually - 'ts/no-unsafe-assignment': 'off', 'ts/no-unsafe-return': 'off', 'ts/no-unsafe-argument': 'off', 'ts/no-unsafe-call': 'off', @@ -156,6 +155,7 @@ export default antfu( files: ['**/__mocks__/**'], rules: { 'ts/no-require-imports': 'off', + 'ts/no-unsafe-assignment': 'off', }, }, diff --git a/src/api/auth/use-forgot-password.ts b/src/api/auth/use-forgot-password.ts index bd4181051..bfeb9d15a 100644 --- a/src/api/auth/use-forgot-password.ts +++ b/src/api/auth/use-forgot-password.ts @@ -14,7 +14,7 @@ type Response = { const redirectUrl = 'https://example.com'; async function sendForgotPasswordInstructions(variables: Variables) { - const { data } = await client({ + const { data } = await client<Response>({ url: '/v1/users/password', // Dummy endpoint for forgot password method: 'POST', data: { diff --git a/src/api/auth/use-login.ts b/src/api/auth/use-login.ts index 413da4511..032cac8b8 100644 --- a/src/api/auth/use-login.ts +++ b/src/api/auth/use-login.ts @@ -17,7 +17,7 @@ type Response = { }; async function login(variables: Variables) { - const { data } = await client({ + const { data } = await client<Response>({ url: '/v1/users/sign_in', method: 'POST', data: { diff --git a/src/api/auth/use-sign-up.ts b/src/api/auth/use-sign-up.ts index ca393e45c..6f0206c2c 100644 --- a/src/api/auth/use-sign-up.ts +++ b/src/api/auth/use-sign-up.ts @@ -27,7 +27,7 @@ type Response = { }; async function signUp(variables: Variables) { - const { data } = await client({ + const { data } = await client<Response>({ url: '/v1/users', method: 'POST', data: { diff --git a/src/api/auth/use-update-password.ts b/src/api/auth/use-update-password.ts index 3e20c46f8..84906a3fc 100644 --- a/src/api/auth/use-update-password.ts +++ b/src/api/auth/use-update-password.ts @@ -28,7 +28,7 @@ type Response = { }; async function updatePasswordRequest(variables: Variables) { - const { data } = await client({ + const { data } = await client<Response>({ url: '/v1/users/password', method: 'PUT', data: { ...variables }, diff --git a/src/api/auth/use-user.tsx b/src/api/auth/use-user.tsx index e72fae680..f4ae3769a 100644 --- a/src/api/auth/use-user.tsx +++ b/src/api/auth/use-user.tsx @@ -15,7 +15,7 @@ export type DeleteUserVariables = { }; async function getUser() { - const { data } = await client({ + const { data } = await client<User>({ url: '/v1/users', method: 'GET', }); @@ -23,7 +23,7 @@ async function getUser() { } async function deleteUser(variables: DeleteUserVariables) { - const { data } = await client.delete('/v1/users', { + const { data } = await client.delete<void>('/v1/users', { data: variables, }); return data; diff --git a/src/api/common/interceptors.ts b/src/api/common/interceptors.ts index 34a3691e6..55b11fe25 100644 --- a/src/api/common/interceptors.ts +++ b/src/api/common/interceptors.ts @@ -18,9 +18,9 @@ export default function interceptors() { client.interceptors.request.use((config: InternalAxiosRequestConfig) => { const token = useAuth.getState().token; - const { headers, data } = config; + const { headers } = config; - if (headers && headers[CONTENT_TYPE] !== MULTIPART_FORM_DATA && data) { + if (headers && headers[CONTENT_TYPE] !== MULTIPART_FORM_DATA && config.data) { config.data = toSnakeCase(config.data); } @@ -39,20 +39,20 @@ export default function interceptors() { client.interceptors.response.use( (response) => { - const { data, headers } = response; - response.data = toCamelCase(response.data); + const { headers } = response; + const originalData = response.data as Record<string, unknown>; - const token = headers[ACCESS_TOKEN]; - const _client = headers[CLIENT_HEADER]; - const uid = headers[UID_HEADER]; - const expiry = headers[EXPIRY_HEADER]; - const bearer = headers[AUTHORIZATION_HEADER]; + const token = headers[ACCESS_TOKEN] as string | undefined; + const _client = (headers[CLIENT_HEADER] as string | undefined) ?? ''; + const uid = (headers[UID_HEADER] as string | undefined) ?? ''; + const expiry = (headers[EXPIRY_HEADER] as string | undefined) ?? ''; + const bearer = (headers[AUTHORIZATION_HEADER] as string | undefined) ?? ''; if (token) { signIn({ access: token, client: _client, uid, expiry, bearer }); } - response.data = toCamelCase(data); + response.data = toCamelCase(originalData); return response; }, diff --git a/src/components/providers/auth.tsx b/src/components/providers/auth.tsx index 9692f8030..677892790 100644 --- a/src/components/providers/auth.tsx +++ b/src/components/providers/auth.tsx @@ -77,13 +77,14 @@ client.interceptors.request.use( // Response interceptor to handle tokens client.interceptors.response.use( (response) => { - const accessToken = response.headers[HEADER_KEYS.ACCESS_TOKEN] ?? ''; - const refreshToken = response.headers[HEADER_KEYS.REFRESH_TOKEN] ?? ''; - const userId = response.headers[HEADER_KEYS.USER_ID] ?? ''; + const accessToken = (response.headers[HEADER_KEYS.ACCESS_TOKEN] as string | undefined) ?? ''; + const refreshToken = (response.headers[HEADER_KEYS.REFRESH_TOKEN] as string | undefined) ?? ''; + const userId = (response.headers[HEADER_KEYS.USER_ID] as string | undefined) ?? ''; - const expiration = response.headers[HEADER_KEYS.EXPIRY] + const expiryHeader = response.headers[HEADER_KEYS.EXPIRY] as string | undefined; + const expiration = expiryHeader ? dayjs - .unix(Number.parseInt(response.headers[HEADER_KEYS.EXPIRY], 10)) + .unix(Number.parseInt(expiryHeader, 10)) .toISOString() : dayjs().add(1, 'hour').toISOString(); diff --git a/src/components/ui/utils.tsx b/src/components/ui/utils.tsx index 379f5205c..377c5e0fd 100644 --- a/src/components/ui/utils.tsx +++ b/src/components/ui/utils.tsx @@ -41,7 +41,7 @@ export function extractError(data: unknown): string { if (typeof data === 'object' && data !== null) { const messages = Object.entries(data).map((item) => { - const [key, value] = item; + const [key, value] = item as [string, unknown]; const separator = Array.isArray(value) ? ':\n ' : ': '; return `- ${key}${separator}${extractError(value)} \n `; From 0b6a94d2ecf754a6553289243c99dfacc945d6c9 Mon Sep 17 00:00:00 2001 From: Fernanda Toledo <fertoledo93@gmail.com> Date: Mon, 25 May 2026 20:08:25 -0300 Subject: [PATCH 06/18] fix: address ts/no-unsafe-assignment and ts/no-unsafe-return violations --- eslint.config.mjs | 1 - src/lib/storage.tsx | 2 +- src/lib/utils.ts | 8 ++++++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index b377e3823..772e966d7 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -129,7 +129,6 @@ export default antfu( 'ts/array-type': ['error', { default: 'generic' }], 'ts/prefer-nullish-coalescing': 'error', // Type-aware rules activated by tsconfigPath — disable until addressed individually - 'ts/no-unsafe-return': 'off', 'ts/no-unsafe-argument': 'off', 'ts/no-unsafe-call': 'off', 'ts/no-unsafe-member-access': 'off', diff --git a/src/lib/storage.tsx b/src/lib/storage.tsx index 0b0862a3f..3dea1a4bb 100644 --- a/src/lib/storage.tsx +++ b/src/lib/storage.tsx @@ -4,7 +4,7 @@ export const storage = createMMKV(); export function getItem<T>(key: string): T | null { const value = storage.getString(key); - return value ? JSON.parse(value) : null; + return value ? (JSON.parse(value) as T) : null; } export async function setItem<T>(key: string, value: T) { diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 260740dd5..2d39d9563 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -1,8 +1,12 @@ import type { StoreApi, UseBoundStore } from 'zustand'; import { Linking } from 'react-native'; -export function openLinkInBrowser(url: string) { - Linking.canOpenURL(url).then(async canOpen => canOpen && Linking.openURL(url)); +export function openLinkInBrowser(url: string): void { + void Linking.canOpenURL(url).then((canOpen) => { + if (canOpen) { + void Linking.openURL(url); + } + }); } type WithSelectors<S> = S extends { getState: () => infer T } From fc24754fc55ac1c9054015cafbefdfe38a7c87fa Mon Sep 17 00:00:00 2001 From: Fernanda Toledo <fertoledo93@gmail.com> Date: Mon, 25 May 2026 21:15:37 -0300 Subject: [PATCH 07/18] fix: address ts/no-unsafe-argument violations --- eslint.config.mjs | 2 -- src/api/common/interceptors.ts | 3 ++- src/lib/i18n/utils.tsx | 13 +++++++------ 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 772e966d7..29f3aedc1 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -129,8 +129,6 @@ export default antfu( 'ts/array-type': ['error', { default: 'generic' }], 'ts/prefer-nullish-coalescing': 'error', // Type-aware rules activated by tsconfigPath — disable until addressed individually - 'ts/no-unsafe-argument': 'off', - 'ts/no-unsafe-call': 'off', 'ts/no-unsafe-member-access': 'off', 'ts/strict-boolean-expressions': 'off', 'ts/no-floating-promises': 'off', diff --git a/src/api/common/interceptors.ts b/src/api/common/interceptors.ts index 55b11fe25..e5ceed657 100644 --- a/src/api/common/interceptors.ts +++ b/src/api/common/interceptors.ts @@ -21,7 +21,8 @@ export default function interceptors() { const { headers } = config; if (headers && headers[CONTENT_TYPE] !== MULTIPART_FORM_DATA && config.data) { - config.data = toSnakeCase(config.data); + const requestData: Record<string, unknown> = config.data as Record<string, unknown>; + config.data = toSnakeCase(requestData); } if (token) { diff --git a/src/lib/i18n/utils.tsx b/src/lib/i18n/utils.tsx index 209eff8c2..6f1c6a157 100644 --- a/src/lib/i18n/utils.tsx +++ b/src/lib/i18n/utils.tsx @@ -1,4 +1,4 @@ -import type TranslateOptions from 'i18next'; +import type { TOptions } from 'i18next'; import type { Language, resources } from './resources'; import type { RecursiveKeyOf } from './types'; import { changeLanguage as i18nChangeLanguage, t } from 'i18next'; @@ -18,16 +18,17 @@ export const LOCAL = 'local'; export const getLanguage = () => storage.getString(LOCAL); // 'Marc' getItem<Language | undefined>(LOCAL); export const translate = memoize( - (key: TxKeyPath, options = undefined) => t(key, options) as unknown as string, - (key: TxKeyPath, options: typeof TranslateOptions) => - options ? key + JSON.stringify(options) : key, -); + + (key: TxKeyPath, options?: Record<string, unknown>) => t(key, options as TOptions), + (key: TxKeyPath, options?: unknown) => + options ? `${key}${JSON.stringify(options)}` : key, +) as (key: TxKeyPath, options?: Record<string, unknown>) => string; export function changeLanguage(lang: Language) { i18nChangeLanguage(lang); if (Platform.OS === 'ios' || Platform.OS === 'android') { if (__DEV__) { - NativeModules.DevSettings.reload(); + (NativeModules.DevSettings as { reload: () => void }).reload(); } else { RNRestart.restart(); From 9216318acc71f7d6a902645ef1524f2a1f0812cf Mon Sep 17 00:00:00 2001 From: Fernanda Toledo <fertoledo93@gmail.com> Date: Tue, 26 May 2026 10:07:47 -0300 Subject: [PATCH 08/18] fix: address remaining type-aware lint rule violations --- __mocks__/react-native-mmkv.ts | 2 +- eslint.config.mjs | 7 ------- src/api/common/interceptors.ts | 4 ++-- src/app/(app)/_layout.tsx | 2 +- src/app/(app)/settings.tsx | 4 ++-- src/app/_layout.tsx | 2 +- src/app/update-password.tsx | 2 +- src/app/www.tsx | 4 ++-- src/components/forgot-password-form.tsx | 2 +- src/components/login-form.tsx | 2 +- src/components/providers/auth.tsx | 8 ++++---- src/components/settings/item.tsx | 2 +- src/components/sign-up-form.tsx | 2 +- src/components/ui/button.tsx | 6 +++--- src/components/ui/checkbox.tsx | 14 +++++++------- src/components/ui/image.tsx | 2 +- src/components/ui/input.tsx | 10 +++++----- src/components/ui/modal.tsx | 4 ++-- src/components/ui/select.tsx | 14 +++++++------- src/lib/auth/index.tsx | 4 ++-- src/lib/hooks/use-selected-theme.tsx | 1 + src/lib/i18n/index.tsx | 2 +- src/lib/i18n/utils.tsx | 4 ++-- src/lib/storage.tsx | 2 +- 24 files changed, 50 insertions(+), 56 deletions(-) diff --git a/__mocks__/react-native-mmkv.ts b/__mocks__/react-native-mmkv.ts index 5971ba697..262d7e7b9 100644 --- a/__mocks__/react-native-mmkv.ts +++ b/__mocks__/react-native-mmkv.ts @@ -26,7 +26,7 @@ function createMockStorage() { contains: jest.fn((key: string): boolean => sharedMockStorage.has(key)), getNumber: jest.fn((key: string): number | undefined => { const value = sharedMockStorage.get(key); - return value ? Number(value) : undefined; + return value !== undefined ? Number(value) : undefined; }), getBoolean: jest.fn((key: string): boolean | undefined => { const value = sharedMockStorage.get(key); diff --git a/eslint.config.mjs b/eslint.config.mjs index 29f3aedc1..5e98e7390 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -128,13 +128,6 @@ export default antfu( ], 'ts/array-type': ['error', { default: 'generic' }], 'ts/prefer-nullish-coalescing': 'error', - // Type-aware rules activated by tsconfigPath — disable until addressed individually - 'ts/no-unsafe-member-access': 'off', - 'ts/strict-boolean-expressions': 'off', - 'ts/no-floating-promises': 'off', - 'ts/no-misused-promises': 'off', - 'ts/unbound-method': 'off', - 'react/no-leaked-conditional-rendering': 'off', }, }, diff --git a/src/api/common/interceptors.ts b/src/api/common/interceptors.ts index e5ceed657..9cf8839c1 100644 --- a/src/api/common/interceptors.ts +++ b/src/api/common/interceptors.ts @@ -20,7 +20,7 @@ export default function interceptors() { const { headers } = config; - if (headers && headers[CONTENT_TYPE] !== MULTIPART_FORM_DATA && config.data) { + if (headers[CONTENT_TYPE] !== MULTIPART_FORM_DATA && config.data !== undefined && config.data !== null) { const requestData: Record<string, unknown> = config.data as Record<string, unknown>; config.data = toSnakeCase(requestData); } @@ -49,7 +49,7 @@ export default function interceptors() { const expiry = (headers[EXPIRY_HEADER] as string | undefined) ?? ''; const bearer = (headers[AUTHORIZATION_HEADER] as string | undefined) ?? ''; - if (token) { + if (token !== undefined) { signIn({ access: token, client: _client, uid, expiry, bearer }); } diff --git a/src/app/(app)/_layout.tsx b/src/app/(app)/_layout.tsx index cd5771624..66e3b8b7d 100644 --- a/src/app/(app)/_layout.tsx +++ b/src/app/(app)/_layout.tsx @@ -19,7 +19,7 @@ export default function TabLayout() { useEffect(() => { if (!ready) { - hideSplash(); + void hideSplash(); } }, [hideSplash, ready]); diff --git a/src/app/(app)/settings.tsx b/src/app/(app)/settings.tsx index b4da31129..2ad5ed049 100644 --- a/src/app/(app)/settings.tsx +++ b/src/app/(app)/settings.tsx @@ -36,7 +36,7 @@ export default function Settings() { = colorScheme === 'dark' ? colors.neutral[400] : colors.neutral[500]; const handleDeleteUser = async () => { - if (!userData?.email) { + if (userData?.email == null || userData.email === '') { return; } await deleteUserAsync({ email: userData?.email }); @@ -106,7 +106,7 @@ export default function Settings() { <View className="my-8"> <ItemsContainer> - <DeleteAccountItem onDelete={handleDeleteUser} /> + <DeleteAccountItem onDelete={() => { void handleDeleteUser(); }} /> <Item text="settings.logout" onPress={logout} /> </ItemsContainer> </View> diff --git a/src/app/_layout.tsx b/src/app/_layout.tsx index 939a51ba7..a105f26b8 100644 --- a/src/app/_layout.tsx +++ b/src/app/_layout.tsx @@ -28,7 +28,7 @@ hydrateAuth(); loadSelectedTheme(); interceptors(); // Prevent the splash screen from auto-hiding before asset loading is complete. -SplashScreen.preventAutoHideAsync(); +void SplashScreen.preventAutoHideAsync(); // Set the animation options. This is optional. SplashScreen.setOptions({ duration: 500, diff --git a/src/app/update-password.tsx b/src/app/update-password.tsx index fbb0ce211..923f0740b 100644 --- a/src/app/update-password.tsx +++ b/src/app/update-password.tsx @@ -97,7 +97,7 @@ export default function UpdatePassword() { <Button testID="update-password-button" label={t('updatePassword.buttonLabel')} - onPress={handleSubmit(onSubmit)} + onPress={() => { void handleSubmit(onSubmit)(); }} /> </View> </View> diff --git a/src/app/www.tsx b/src/app/www.tsx index c85492ea0..6c24b3268 100644 --- a/src/app/www.tsx +++ b/src/app/www.tsx @@ -13,14 +13,14 @@ export default function WWW() { const navigation = useNavigation(); useEffect(() => { - if (title) { + if (title !== undefined) { navigation.setOptions({ title, }); } }, [navigation, title]); - if (!url || typeof url !== 'string') { + if (url === undefined || typeof url !== 'string') { return ( <View className="flex-1 items-center justify-center bg-white"> <Text className="text-lg text-red-500"> diff --git a/src/components/forgot-password-form.tsx b/src/components/forgot-password-form.tsx index 50872723f..74684c241 100644 --- a/src/components/forgot-password-form.tsx +++ b/src/components/forgot-password-form.tsx @@ -64,7 +64,7 @@ export function ForgotPasswordForm(props: ForgotPasswordFormProps) { <Button testID="send-email-button" label={t('forgotPassword.buttonLabel')} - onPress={handleSubmit(onSubmit)} + onPress={() => { void handleSubmit(onSubmit)(); }} /> </View> </View> diff --git a/src/components/login-form.tsx b/src/components/login-form.tsx index 7fe33319d..aebc42964 100644 --- a/src/components/login-form.tsx +++ b/src/components/login-form.tsx @@ -64,7 +64,7 @@ export function LoginForm({ <Button testID="login-button" label={translate('auth.signIn.buttons.login')} - onPress={handleSubmit(onSubmit)} + onPress={() => { void handleSubmit(onSubmit)(); }} loading={isLoading} /> <Text> diff --git a/src/components/providers/auth.tsx b/src/components/providers/auth.tsx index 677892790..0514fceff 100644 --- a/src/components/providers/auth.tsx +++ b/src/components/providers/auth.tsx @@ -82,13 +82,13 @@ client.interceptors.response.use( const userId = (response.headers[HEADER_KEYS.USER_ID] as string | undefined) ?? ''; const expiryHeader = response.headers[HEADER_KEYS.EXPIRY] as string | undefined; - const expiration = expiryHeader + const expiration = expiryHeader !== undefined ? dayjs .unix(Number.parseInt(expiryHeader, 10)) .toISOString() : dayjs().add(1, 'hour').toISOString(); - if (accessToken && refreshToken && userId && expiration) { + if (accessToken !== '' && refreshToken !== '' && userId !== '' && expiration !== '') { storeTokens({ accessToken, refreshToken, userId, expiration }); } @@ -118,7 +118,7 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ const storedToken = authStorage.getString(HEADER_KEYS.ACCESS_TOKEN); const expiration = authStorage.getString(HEADER_KEYS.EXPIRY); - if (!storedToken || !expiration) { + if (storedToken === undefined || expiration === undefined) { setToken(null); setLoading(false); setReady(true); @@ -169,7 +169,7 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ const values = useMemo( () => ({ token, - isAuthenticated: !!token, + isAuthenticated: token !== null, loading, ready, logout, diff --git a/src/components/settings/item.tsx b/src/components/settings/item.tsx index 4ce8074bc..7eaff20da 100644 --- a/src/components/settings/item.tsx +++ b/src/components/settings/item.tsx @@ -23,7 +23,7 @@ export const Item = forwardRef<View, ItemProps>( className="flex-1 flex-row items-center justify-between px-4 py-2" > <View className="flex-row items-center"> - {icon && <View className="pr-2">{icon}</View>} + {icon !== undefined && <View className="pr-2">{icon}</View>} <Text tx={text} /> </View> <View className="flex-row items-center"> diff --git a/src/components/sign-up-form.tsx b/src/components/sign-up-form.tsx index 95a545cd7..15a6bbd4f 100644 --- a/src/components/sign-up-form.tsx +++ b/src/components/sign-up-form.tsx @@ -90,7 +90,7 @@ export function SignUpForm({ <Button testID="sign-up-button" label={translate('auth.signUp.signUpButton')} - onPress={handleSubmit(onSubmit)} + onPress={() => { void handleSubmit(onSubmit)(); }} loading={isPending} disabled={isPending} /> diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx index c5883b097..f69dacdd9 100644 --- a/src/components/ui/button.tsx +++ b/src/components/ui/button.tsx @@ -114,7 +114,7 @@ export const Button = forwardRef<View, Props>( ); const renderContent = (): PressableProps['children'] => { - if (props?.children) { + if (props?.children != null) { return props.children; } @@ -123,13 +123,13 @@ export const Button = forwardRef<View, Props>( <ActivityIndicator size="small" className={styles.indicator()} - testID={testID ? `${testID}-activity-indicator` : undefined} + testID={testID !== undefined ? `${testID}-activity-indicator` : undefined} /> ); } return ( <Text - testID={testID ? `${testID}-label` : undefined} + testID={testID !== undefined ? `${testID}-label` : undefined} className={styles.label({ className: textClassName })} > {text} diff --git a/src/components/ui/checkbox.tsx b/src/components/ui/checkbox.tsx index 570e1ff76..a1ff16c7d 100644 --- a/src/components/ui/checkbox.tsx +++ b/src/components/ui/checkbox.tsx @@ -126,11 +126,11 @@ function CheckboxBase({ return ( <CheckboxRoot checked={checked} testID={testID} {...props}> <CheckboxIcon checked={checked} /> - {label + {label !== undefined ? ( <Label text={label} - testID={testID ? `${testID}-label` : undefined} + testID={testID !== undefined ? `${testID}-label` : undefined} className="pr-2" /> ) @@ -162,7 +162,7 @@ export function RadioIcon({ checked }: IconProps) { transition={{ borderColor: { duration: 100, type: 'timing' } }} > <MotiView - className={`size-[10px] rounded-[10px] ${checked && 'bg-primary-300'} `} + className={`size-[10px] rounded-[10px] ${checked ? 'bg-primary-300' : ''} `} from={{ opacity: 0 }} animate={{ opacity: checked ? 1 : 0 }} transition={{ opacity: { duration: 50, type: 'timing' } }} @@ -188,9 +188,9 @@ function RadioBase({ return ( <RadioRoot checked={checked} testID={testID} {...props}> <RadioIcon checked={checked} /> - {label + {label !== undefined ? ( - <Label text={label} testID={testID ? `${testID}-label` : undefined} /> + <Label text={label} testID={testID !== undefined ? `${testID}-label` : undefined} /> ) : null} </RadioRoot> @@ -255,9 +255,9 @@ function SwitchBase({ return ( <SwitchRoot checked={checked} testID={testID} {...props}> <SwitchIcon checked={checked} /> - {label + {label !== undefined ? ( - <Label text={label} testID={testID ? `${testID}-label` : undefined} /> + <Label text={label} testID={testID !== undefined ? `${testID}-label` : undefined} /> ) : null} </SwitchRoot> diff --git a/src/components/ui/image.tsx b/src/components/ui/image.tsx index a5908ae2d..54b7031fd 100644 --- a/src/components/ui/image.tsx +++ b/src/components/ui/image.tsx @@ -25,5 +25,5 @@ export function Image({ } export function preloadImages(sources: Array<string>) { - NImage.prefetch(sources); + void NImage.prefetch(sources); } diff --git a/src/components/ui/input.tsx b/src/components/ui/input.tsx index 03e5b4081..0ab551dcb 100644 --- a/src/components/ui/input.tsx +++ b/src/components/ui/input.tsx @@ -92,9 +92,9 @@ export const Input = forwardRef<NTextInput, NInputProps>((props, ref) => { return ( <View className={styles.container()}> - {label && ( + {label !== undefined && ( <Text - testID={testID ? `${testID}-label` : undefined} + testID={testID !== undefined ? `${testID}-label` : undefined} className={styles.label()} > {label} @@ -114,9 +114,9 @@ export const Input = forwardRef<NTextInput, NInputProps>((props, ref) => { inputProps.style, ])} /> - {error && ( + {error !== undefined && ( <Text - testID={testID ? `${testID}-error` : undefined} + testID={testID !== undefined ? `${testID}-error` : undefined} className="text-sm text-danger-400 dark:text-danger-600" > {error} @@ -138,7 +138,7 @@ export function ControlledInput<T extends FieldValues>( ref={field.ref} autoCapitalize="none" onChangeText={field.onChange} - value={(field.value) || ''} + value={field.value ?? ''} {...inputProps} error={fieldState.error?.message} /> diff --git a/src/components/ui/modal.tsx b/src/components/ui/modal.tsx index 9902ddf6e..755bcb9b7 100644 --- a/src/components/ui/modal.tsx +++ b/src/components/ui/modal.tsx @@ -86,7 +86,7 @@ export const Modal = forwardRef( useImperativeHandle( ref, - () => (modal.ref.current as BottomSheetModal) || null, + () => modal.ref.current as BottomSheetModal, ); const renderHandleComponent = useCallback( @@ -164,7 +164,7 @@ function getDetachedProps(detached: boolean) { const ModalHeader = memo(({ title, dismiss }: ModalHeaderProps) => ( <> - {title && ( + {title !== undefined && ( <View className="flex-row px-2 py-4"> <View className="size-[24px]" /> <View className="flex-1"> diff --git a/src/components/ui/select.tsx b/src/components/ui/select.tsx index 633c9fd0a..6bfc7a9fc 100644 --- a/src/components/ui/select.tsx +++ b/src/components/ui/select.tsx @@ -87,7 +87,7 @@ export const Options = forwardRef<BottomSheetModal, OptionsProps>( label={item.label} selected={value === item.value} onPress={() => onSelect(item)} - testID={testID ? `${testID}-item-${item.value}` : undefined} + testID={testID !== undefined ? `${testID}-item-${item.value}` : undefined} /> ), [onSelect, value, testID], @@ -106,7 +106,7 @@ export const Options = forwardRef<BottomSheetModal, OptionsProps>( data={options} keyExtractor={keyExtractor} renderItem={renderSelectItem} - testID={testID ? `${testID}-modal` : undefined} + testID={testID !== undefined ? `${testID}-modal` : undefined} estimatedItemSize={52} /> </Modal> @@ -186,9 +186,9 @@ export function Select(props: SelectProps) { return ( <> <View className={styles.container()}> - {label && ( + {label !== undefined && ( <Text - testID={testID ? `${testID}-label` : undefined} + testID={testID !== undefined ? `${testID}-label` : undefined} className={styles.label()} > {label} @@ -198,16 +198,16 @@ export function Select(props: SelectProps) { className={styles.input()} disabled={disabled} onPress={() => modal.present()} - testID={testID ? `${testID}-trigger` : undefined} + testID={testID !== undefined ? `${testID}-trigger` : undefined} > <View className="flex-1"> <Text className={styles.inputValue()}>{textValue}</Text> </View> <CaretDown /> </Pressable> - {error && ( + {error !== undefined && ( <Text - testID={`${testID}-error`} + testID={`${testID ?? ''}-error`} className="text-sm text-danger-300 dark:text-danger-600" > {error} diff --git a/src/lib/auth/index.tsx b/src/lib/auth/index.tsx index 443a58ae1..0c440f70c 100644 --- a/src/lib/auth/index.tsx +++ b/src/lib/auth/index.tsx @@ -16,11 +16,11 @@ const _useAuth = create<AuthState>((set, get) => ({ status: 'idle', token: null, signIn: (token) => { - setToken(token); + void setToken(token); set({ status: 'signIn', token }); }, signOut: () => { - removeToken(); + void removeToken(); set({ status: 'signOut', token: null }); }, hydrate: () => { diff --git a/src/lib/hooks/use-selected-theme.tsx b/src/lib/hooks/use-selected-theme.tsx index 19b2d26de..64e63425a 100644 --- a/src/lib/hooks/use-selected-theme.tsx +++ b/src/lib/hooks/use-selected-theme.tsx @@ -14,6 +14,7 @@ export type ColorSchemeType = 'light' | 'dark' | 'system'; * */ export function useSelectedTheme() { + // eslint-disable-next-line ts/unbound-method const { setColorScheme } = useColorScheme(); const [theme, _setTheme] = useMMKVString(SELECTED_THEME, storage); diff --git a/src/lib/i18n/index.tsx b/src/lib/i18n/index.tsx index afafe798f..ea3a97e63 100644 --- a/src/lib/i18n/index.tsx +++ b/src/lib/i18n/index.tsx @@ -10,7 +10,7 @@ export * from './utils'; const locales = getLocales(); // eslint-disable-next-line react-hooks/rules-of-hooks -use(initReactI18next).init({ +void use(initReactI18next).init({ resources, lng: locales[0]?.languageTag, // TODO: if you are not supporting multiple languages or languages with multiple directions you can set the default value to `en` fallbackLng: 'en', diff --git a/src/lib/i18n/utils.tsx b/src/lib/i18n/utils.tsx index 6f1c6a157..d99926177 100644 --- a/src/lib/i18n/utils.tsx +++ b/src/lib/i18n/utils.tsx @@ -21,11 +21,11 @@ export const translate = memoize( (key: TxKeyPath, options?: Record<string, unknown>) => t(key, options as TOptions), (key: TxKeyPath, options?: unknown) => - options ? `${key}${JSON.stringify(options)}` : key, + options !== undefined ? `${key}${JSON.stringify(options)}` : key, ) as (key: TxKeyPath, options?: Record<string, unknown>) => string; export function changeLanguage(lang: Language) { - i18nChangeLanguage(lang); + void i18nChangeLanguage(lang); if (Platform.OS === 'ios' || Platform.OS === 'android') { if (__DEV__) { (NativeModules.DevSettings as { reload: () => void }).reload(); diff --git a/src/lib/storage.tsx b/src/lib/storage.tsx index 3dea1a4bb..bbe58a167 100644 --- a/src/lib/storage.tsx +++ b/src/lib/storage.tsx @@ -4,7 +4,7 @@ export const storage = createMMKV(); export function getItem<T>(key: string): T | null { const value = storage.getString(key); - return value ? (JSON.parse(value) as T) : null; + return value !== undefined ? (JSON.parse(value) as T) : null; } export async function setItem<T>(key: string, value: T) { From 9b4852238968ef22a6544e25a8714daedfed4553 Mon Sep 17 00:00:00 2001 From: Fernanda Toledo <fertoledo93@gmail.com> Date: Tue, 26 May 2026 10:43:29 -0300 Subject: [PATCH 09/18] fix: handle empty string as falsy in label and storage checks --- src/components/ui/checkbox.tsx | 6 +++--- src/lib/storage.tsx | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/ui/checkbox.tsx b/src/components/ui/checkbox.tsx index a1ff16c7d..f86097227 100644 --- a/src/components/ui/checkbox.tsx +++ b/src/components/ui/checkbox.tsx @@ -126,7 +126,7 @@ function CheckboxBase({ return ( <CheckboxRoot checked={checked} testID={testID} {...props}> <CheckboxIcon checked={checked} /> - {label !== undefined + {label !== undefined && label !== '' ? ( <Label text={label} @@ -188,7 +188,7 @@ function RadioBase({ return ( <RadioRoot checked={checked} testID={testID} {...props}> <RadioIcon checked={checked} /> - {label !== undefined + {label !== undefined && label !== '' ? ( <Label text={label} testID={testID !== undefined ? `${testID}-label` : undefined} /> ) @@ -255,7 +255,7 @@ function SwitchBase({ return ( <SwitchRoot checked={checked} testID={testID} {...props}> <SwitchIcon checked={checked} /> - {label !== undefined + {label !== undefined && label !== '' ? ( <Label text={label} testID={testID !== undefined ? `${testID}-label` : undefined} /> ) diff --git a/src/lib/storage.tsx b/src/lib/storage.tsx index bbe58a167..6399f3afe 100644 --- a/src/lib/storage.tsx +++ b/src/lib/storage.tsx @@ -4,7 +4,7 @@ export const storage = createMMKV(); export function getItem<T>(key: string): T | null { const value = storage.getString(key); - return value !== undefined ? (JSON.parse(value) as T) : null; + return value !== undefined && value !== '' ? (JSON.parse(value) as T) : null; } export async function setItem<T>(key: string, value: T) { From 836d2696dd476caf65fea4283881f694a746095d Mon Sep 17 00:00:00 2001 From: Fernanda Toledo <fertoledo93@gmail.com> Date: Tue, 26 May 2026 10:50:20 -0300 Subject: [PATCH 10/18] ci: bump Node to 22 for Object.groupBy support, remove legacy eslint --ext flag --- .github/actions/setup-node-pnpm-install/action.yml | 2 +- .github/workflows/lint-ts.yml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/actions/setup-node-pnpm-install/action.yml b/.github/actions/setup-node-pnpm-install/action.yml index 679595b70..9f3e5a497 100644 --- a/.github/actions/setup-node-pnpm-install/action.yml +++ b/.github/actions/setup-node-pnpm-install/action.yml @@ -23,7 +23,7 @@ runs: - uses: actions/setup-node@v4 name: Install Node.js with: - node-version: 20 + node-version: 22 cache: pnpm - name: 📦 Install Project Dependencies diff --git a/.github/workflows/lint-ts.yml b/.github/workflows/lint-ts.yml index 45c7271cf..55041e09f 100644 --- a/.github/workflows/lint-ts.yml +++ b/.github/workflows/lint-ts.yml @@ -10,7 +10,7 @@ # 🚨 GITHUB SECRETS REQUIRED: NONE -name: Lint TS (eslint, prettier) +name: Lint TS (eslint) on: push: @@ -24,7 +24,7 @@ permissions: jobs: lint: - name: Lint TS (eslint, prettier) + name: Lint TS (eslint) runs-on: ubuntu-latest permissions: contents: read @@ -45,7 +45,7 @@ jobs: with: github_token: ${{ secrets.GITHUB_TOKEN }} reporter: github-pr-review - eslint_flags: '. --ext .js,.jsx,.ts,.tsx' + eslint_flags: '.' - name: 🏃‍♂️ Run ESLint PR if: github.event_name != 'pull_request' From ba8665dd6c04e8bd9cbb9f99529e2c19ffa3626b Mon Sep 17 00:00:00 2001 From: Fernanda Toledo <fertoledo93@gmail.com> Date: Tue, 26 May 2026 10:58:57 -0300 Subject: [PATCH 11/18] fix: resolve expo doctor warnings --- package.json | 16 +- pnpm-lock.yaml | 461 +++++++++++++++++++++---------------------------- 2 files changed, 209 insertions(+), 268 deletions(-) diff --git a/package.json b/package.json index fae469cd8..283cf1efd 100644 --- a/package.json +++ b/package.json @@ -72,16 +72,16 @@ "app-icon-badge": "^0.1.2", "axios": "^1.7.5", "dayjs": "^1.11.13", - "expo": "~54.0.32", + "expo": "~54.0.34", "expo-build-properties": "^1.0.10", "expo-constants": "~18.0.13", - "expo-crypto": "^15.0.8", - "expo-dev-client": "~6.0.20", + "expo-crypto": "^15.0.9", + "expo-dev-client": "~6.0.21", "expo-font": "~14.0.11", "expo-image": "~3.0.11", - "expo-linking": "~8.0.11", + "expo-linking": "~8.0.12", "expo-localization": "~17.0.8", - "expo-router": "~6.0.22", + "expo-router": "~6.0.23", "expo-splash-screen": "~31.0.13", "expo-status-bar": "~3.0.9", "expo-system-ui": "~6.0.9", @@ -116,11 +116,11 @@ "zustand": "^5.0.5" }, "devDependencies": { + "@antfu/eslint-config": "^7.2.0", "@babel/core": "^7.26.0", "@commitlint/cli": "^19.2.2", "@commitlint/config-conventional": "^19.2.2", "@dev-plugins/react-query": "^0.0.7", - "@antfu/eslint-config": "^7.2.0", "@eslint-react/eslint-plugin": "^2.7.2", "@expo/config": "~12.0.13", "@tanstack/eslint-plugin-query": "^5.62.1", @@ -136,8 +136,8 @@ "dotenv": "^16.4.5", "eslint": "^9.39.2", "eslint-plugin-expo": "^1.0.2", - "eslint-plugin-import-x": "^4.16.2", "eslint-plugin-i18n-json": "^4.0.1", + "eslint-plugin-import-x": "^4.16.2", "eslint-plugin-react-compiler": "19.1.0-rc.2", "eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-react-refresh": "^0.4.26", @@ -146,7 +146,7 @@ "husky": "^9.1.5", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", - "jest-expo": "~54.0.16", + "jest-expo": "~54.0.17", "jest-junit": "^16.0.0", "lint-staged": "^15.2.9", "np": "^10.0.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6570ac0ec..d720d7fc4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: dependencies: '@expo/metro-runtime': specifier: ^6.1.2 - version: 6.1.2(expo@54.0.32)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 6.1.2(expo@54.0.34)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) '@gorhom/bottom-sheet': specifier: ^5.0.5 version: 5.2.8(@types/react@19.1.17)(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.5(@babel/core@7.28.4)(react-native-worklets@0.5.1(@babel/core@7.28.4)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) @@ -39,44 +39,44 @@ importers: specifier: ^1.11.13 version: 1.11.18 expo: - specifier: ~54.0.32 - version: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + specifier: ~54.0.34 + version: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) expo-build-properties: specifier: ^1.0.10 - version: 1.0.10(expo@54.0.32) + version: 1.0.10(expo@54.0.34) expo-constants: specifier: ~18.0.13 - version: 18.0.13(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0)) + version: 18.0.13(expo@54.0.34)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0)) expo-crypto: - specifier: ^15.0.8 - version: 15.0.8(expo@54.0.32) + specifier: ^15.0.9 + version: 15.0.9(expo@54.0.34) expo-dev-client: - specifier: ~6.0.20 - version: 6.0.20(expo@54.0.32) + specifier: ~6.0.21 + version: 6.0.21(expo@54.0.34) expo-font: specifier: ~14.0.11 - version: 14.0.11(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 14.0.11(expo@54.0.34)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) expo-image: specifier: ~3.0.11 - version: 3.0.11(expo@54.0.32)(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 3.0.11(expo@54.0.34)(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) expo-linking: - specifier: ~8.0.11 - version: 8.0.11(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + specifier: ~8.0.12 + version: 8.0.12(expo@54.0.34)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) expo-localization: specifier: ~17.0.8 - version: 17.0.8(expo@54.0.32)(react@19.1.0) + version: 17.0.8(expo@54.0.34)(react@19.1.0) expo-router: - specifier: ~6.0.22 - version: 6.0.22(66e01e64ee5bf13a04f2f85ec0534cd3) + specifier: ~6.0.23 + version: 6.0.23(e628dfda4f41215298c7be55e0366448) expo-splash-screen: specifier: ~31.0.13 - version: 31.0.13(expo@54.0.32) + version: 31.0.13(expo@54.0.34) expo-status-bar: specifier: ~3.0.9 version: 3.0.9(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) expo-system-ui: specifier: ~6.0.9 - version: 6.0.9(expo@54.0.32)(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0)) + version: 6.0.9(expo@54.0.34)(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0)) i18next: specifier: ^23.14.0 version: 23.14.0 @@ -179,7 +179,7 @@ importers: version: 19.2.2 '@dev-plugins/react-query': specifier: ^0.0.7 - version: 0.0.7(@tanstack/react-query@5.52.1(react@19.1.0))(expo@54.0.32) + version: 0.0.7(@tanstack/react-query@5.52.1(react@19.1.0))(expo@54.0.34) '@eslint-react/eslint-plugin': specifier: ^2.7.2 version: 2.13.0(eslint@9.39.4(jiti@1.21.6))(typescript@5.9.3) @@ -256,8 +256,8 @@ importers: specifier: ^29.7.0 version: 29.7.0 jest-expo: - specifier: ~54.0.16 - version: 54.0.16(@babel/core@7.28.4)(expo@54.0.32)(jest@29.7.0(@types/node@22.9.1))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + specifier: ~54.0.17 + version: 54.0.17(@babel/core@7.28.4)(expo@54.0.34)(jest@29.7.0(@types/node@22.9.1))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) jest-junit: specifier: ^16.0.0 version: 16.0.0 @@ -1158,8 +1158,8 @@ packages: resolution: {integrity: sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@expo/cli@54.0.22': - resolution: {integrity: sha512-BTH2FCczhJLfj1cpfcKrzhKnvRLTOztgW4bVloKDqH+G3ZSohWLRFNAIz56XtdjPxBbi2/qWhGBAkl7kBon/Jw==} + '@expo/cli@54.0.24': + resolution: {integrity: sha512-5xse1bEgnVUBhOrtttc6xTNJVvjyTRavpzuF0/0nuj+312vfSbk7EiRbG+xJ2pW/iZxnhLPJkFCrPYG0nmheAQ==} hasBin: true peerDependencies: expo: '*' @@ -1200,8 +1200,8 @@ packages: '@expo/env@2.0.8': resolution: {integrity: sha512-5VQD6GT8HIMRaSaB5JFtOXuvfDVU80YtZIuUT/GDhUF782usIXY13Tn3IdDz1Tm/lqA9qnRZQ1BF4t7LlvdJPA==} - '@expo/fingerprint@0.15.4': - resolution: {integrity: sha512-eYlxcrGdR2/j2M6pEDXo9zU9KXXF1vhP+V+Tl+lyY+bU8lnzrN6c637mz6Ye3em2ANy8hhUR03Raf8VsT9Ogng==} + '@expo/fingerprint@0.15.5': + resolution: {integrity: sha512-mdVoAMcux1WlM6kd1RoWiHRNqKqS+J6mKmWQ/BKgeh937S/fcW58EE68O6nc4KDXtWi3PBeNHskOFcgyIuD4hw==} hasBin: true '@expo/image-utils@0.8.8': @@ -1210,8 +1210,8 @@ packages: '@expo/json-file@10.0.8': resolution: {integrity: sha512-9LOTh1PgKizD1VXfGQ88LtDH0lRwq9lsTb4aichWTWSWqy3Ugfkhfm3BhzBIkJJfQQ5iJu3m/BoRlEIjoCGcnQ==} - '@expo/metro-config@54.0.14': - resolution: {integrity: sha512-hxpLyDfOR4L23tJ9W1IbJJsG7k4lv2sotohBm/kTYyiG+pe1SYCAWsRmgk+H42o/wWf/HQjE5k45S5TomGLxNA==} + '@expo/metro-config@54.0.15': + resolution: {integrity: sha512-SqIya4VZ9KHM1S9g+xR0A+QKw1Tfs7Gacx6bQNJ98vs4+O7I5+QP5mHZIB0QSZLUV8opiXebHYTiTu+0OAsIUw==} peerDependencies: expo: '*' peerDependenciesMeta: @@ -2766,10 +2766,6 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - baseline-browser-mapping@2.8.4: - resolution: {integrity: sha512-L+YvJwGAgwJBV1p6ffpSTa2KRc69EeeYGYjRVWKs0GKrK+LON0GC0gV+rKSNtALEDvMDqkvCFq9r1r94/Gjwxw==} - hasBin: true - better-opn@3.0.2: resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} engines: {node: '>=12.0.0'} @@ -2828,11 +2824,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - browserslist@4.26.2: - resolution: {integrity: sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - browserslist@4.28.2: resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -2894,9 +2885,6 @@ packages: caniuse-lite@1.0.30001680: resolution: {integrity: sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==} - caniuse-lite@1.0.30001743: - resolution: {integrity: sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==} - caniuse-lite@1.0.30001793: resolution: {integrity: sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==} @@ -3158,9 +3146,6 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - core-js-compat@3.43.0: - resolution: {integrity: sha512-2GML2ZsCc5LR7hZYz4AXmjQw8zuy2T//2QntwdnpuYI7jteT6GVYJL7F6C2C57R7gSYrcqVW3lAALefdbhBLDA==} - core-js-compat@3.49.0: resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} @@ -3451,9 +3436,6 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.218: - resolution: {integrity: sha512-uwwdN0TUHs8u6iRgN8vKeWZMRll4gBkz+QMqdS7DDe49uiK68/UX92lFb61oiFPrpYZNeZIqa4bA7O6Aiasnzg==} - electron-to-chromium@1.5.361: resolution: {integrity: sha512-Q6Hts7N9FnJc5LeGRINFvLhCI9xZmNtTDe5ZbcVezQz7cU4a8Aua3GH1b8J2XY8Al9PF+OCwYqhgsOOheMdvkA==} @@ -3901,8 +3883,8 @@ packages: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - expo-asset@12.0.12: - resolution: {integrity: sha512-CsXFCQbx2fElSMn0lyTdRIyKlSXOal6ilLJd+yeZ6xaC7I9AICQgscY5nj0QcwgA+KYYCCEQEBndMsmj7drOWQ==} + expo-asset@12.0.13: + resolution: {integrity: sha512-x/p7WvQUnkn6K43b9eL6SPeq5Vnf1E8BDe9bDrWrvMqzyUvJnUFvl+ctg3034s/+UHe7Ne2pAmc0+yzbl8CrDQ==} peerDependencies: expo: '*' react: '*' @@ -3919,18 +3901,18 @@ packages: expo: '*' react-native: '*' - expo-crypto@15.0.8: - resolution: {integrity: sha512-aF7A914TB66WIlTJvl5J6/itejfY78O7dq3ibvFltL9vnTALJ/7LYHvLT4fwmx9yUNS6ekLBtDGWivFWnj2Fcw==} + expo-crypto@15.0.9: + resolution: {integrity: sha512-SNWKa2fXx7v9gkp1h/7nqXY5XN7qgNDn3yRc2aO0gWGbeMbvob/haMxxsPFe9f51aqH5NjNCqHf2kvLhvAd8KQ==} peerDependencies: expo: '*' - expo-dev-client@6.0.20: - resolution: {integrity: sha512-5XjoVlj1OxakNxy55j/AUaGPrDOlQlB6XdHLLWAw61w5ffSpUDHDnuZzKzs9xY1eIaogOqTOQaAzZ2ddBkdXLA==} + expo-dev-client@6.0.21: + resolution: {integrity: sha512-SWI6HD0pa4eJujkYFkvvpezUE1zmJXGLu+34azpu7+QJgO+FLutDYDj8BSTdeH/NYDEClDFjCGqVMcWETvmsCQ==} peerDependencies: expo: '*' - expo-dev-launcher@6.0.20: - resolution: {integrity: sha512-a04zHEeT9sB0L5EB38fz7sNnUKJ2Ar1pXpcyl60Ki8bXPNCs9rjY7NuYrDkP/irM8+1DklMBqHpyHiLyJ/R+EA==} + expo-dev-launcher@6.0.21: + resolution: {integrity: sha512-QZ9gcKMZbp6EsIhzS0QoGB8Cf4xeVJhjbNgWUwcoBIk8gshoFz8CkCQOnX+HNv2sSY3rdCaNpx3Xo0Rflyq7rA==} peerDependencies: expo: '*' @@ -3939,13 +3921,13 @@ packages: peerDependencies: expo: '*' - expo-dev-menu@7.0.18: - resolution: {integrity: sha512-4kTdlHrnZCAWCT6tZRQHSSjZ7vECFisL4T+nsG/GJDo/jcHNaOVGV5qPV9wzlTxyMk3YOPggRw4+g7Ownrg5eA==} + expo-dev-menu@7.0.19: + resolution: {integrity: sha512-ju5MZiBCPhUKKvHy0ElZdnlhq01mkEEiR8jfrgQVvW26aWjzjLiOhppNAyXtvGbhk7WxJim3wYMiqFFrjGdfKA==} peerDependencies: expo: '*' - expo-file-system@19.0.21: - resolution: {integrity: sha512-s3DlrDdiscBHtab/6W1osrjGL+C2bvoInPJD7sOwmxfJ5Woynv2oc+Fz1/xVXaE/V7HE/+xrHC/H45tu6lZzzg==} + expo-file-system@19.0.22: + resolution: {integrity: sha512-l9pgahSc7sJD0bP9vBNeXvZjy8QKDpVHVxWmei/ESQOrzmoj5BidziqLVsyZdxsi+PfdbTtttLTAmddH/JafYA==} peerDependencies: expo: '*' react-native: '*' @@ -3977,8 +3959,8 @@ packages: expo: '*' react: '*' - expo-linking@8.0.11: - resolution: {integrity: sha512-+VSaNL5om3kOp/SSKO5qe6cFgfSIWnnQDSbA7XLs3ECkYzXRquk5unxNS3pg7eK5kNUmQ4kgLI7MhTggAEUBLA==} + expo-linking@8.0.12: + resolution: {integrity: sha512-FpXeIpFgZuxihwT9lBo86YD3y6LphBuAhN680MMxm/Y7fmsc57vimn2d3vFu68VI0+Z9w457t494mu2wvlgWTQ==} peerDependencies: react: '*' react-native: '*' @@ -3989,23 +3971,23 @@ packages: expo: '*' react: '*' - expo-manifests@1.0.10: - resolution: {integrity: sha512-oxDUnURPcL4ZsOBY6X1DGWGuoZgVAFzp6PISWV7lPP2J0r8u1/ucuChBgpK7u1eLGFp6sDIPwXyEUCkI386XSQ==} + expo-manifests@1.0.11: + resolution: {integrity: sha512-6zItytTewN37Cjhp3glUg0ozrgW2GwB8x9wtfzUNoJIMmxO38nnGdTLMaotYhRqdf5PP2Dzdmej1HDHXVNUpRw==} peerDependencies: expo: '*' - expo-modules-autolinking@3.0.24: - resolution: {integrity: sha512-TP+6HTwhL7orDvsz2VzauyQlXJcAWyU3ANsZ7JGL4DQu8XaZv/A41ZchbtAYLfozNA2Ya1Hzmhx65hXryBMjaQ==} + expo-modules-autolinking@3.0.25: + resolution: {integrity: sha512-YmHWctJlwvOuLZccg3cOXvSiXVJrPMKl7g2YR0YHWoGL9v2RvcmgaPJWPSLVW+voNEgEPsbo5UmUrAqbnYcBeg==} hasBin: true - expo-modules-core@3.0.29: - resolution: {integrity: sha512-LzipcjGqk8gvkrOUf7O2mejNWugPkf3lmd9GkqL9WuNyeN2fRwU0Dn77e3ZUKI3k6sI+DNwjkq4Nu9fNN9WS7Q==} + expo-modules-core@3.0.30: + resolution: {integrity: sha512-a6IrpAn/Jbmwxi9L+hMmXKpNqnkUpoF7WHOpn02rVLyax2J0gB1vvCVE5rNydplEnt41Q6WxQwvcOjZaIkcSUg==} peerDependencies: react: '*' react-native: '*' - expo-router@6.0.22: - resolution: {integrity: sha512-6eOwobaVZQRsSQv0IoWwVlPbJru1zbreVsuPFIWwk7HApENStU2MggrceHXJqXjGho+FKeXxUop/gqOFDzpOMg==} + expo-router@6.0.23: + resolution: {integrity: sha512-qCxVAiCrCyu0npky6azEZ6dJDMt77OmCzEbpF6RbUTlfkaCA417LvY14SBkk0xyGruSxy/7pvJOI6tuThaUVCA==} peerDependencies: '@expo/metro-runtime': ^6.1.2 '@react-navigation/drawer': ^7.5.0 @@ -4021,7 +4003,7 @@ packages: react-native-safe-area-context: '>= 5.4.0' react-native-screens: '*' react-native-web: '*' - react-server-dom-webpack: ~19.0.3 || ~19.1.4 || ~19.2.3 + react-server-dom-webpack: ~19.0.4 || ~19.1.5 || ~19.2.4 peerDependenciesMeta: '@react-navigation/drawer': optional: true @@ -4038,8 +4020,8 @@ packages: react-server-dom-webpack: optional: true - expo-server@1.0.5: - resolution: {integrity: sha512-IGR++flYH70rhLyeXF0Phle56/k4cee87WeQ4mamS+MkVAVP+dDlOHf2nN06Z9Y2KhU0Gp1k+y61KkghF7HdhA==} + expo-server@1.0.6: + resolution: {integrity: sha512-vb5TBtskvEdzYuW79lATXutOEBfW5m6U4EFpNjCVZTnI7S//SAsLQkYEpn+EDfn84m6VQfzSGkIVR6YPaScKFA==} engines: {node: '>=20.16.0'} expo-splash-screen@31.0.13: @@ -4068,8 +4050,8 @@ packages: peerDependencies: expo: '*' - expo@54.0.32: - resolution: {integrity: sha512-yL9eTxiQ/QKKggVDAWO5CLjUl6IS0lPYgEvC3QM4q4fxd6rs7ks3DnbXSGVU3KNFoY/7cRNYihvd0LKYP+MCXA==} + expo@54.0.34: + resolution: {integrity: sha512-XkVHguZZDC8BcTQxHAd14/TQFbDp1Wt0Z/KApO9t68Ll5A127hLCPzU+a9gytfCIiyL/V1IpF1vIcOLKEVAoNQ==} hasBin: true peerDependencies: '@expo/dom-webview': '*' @@ -4847,13 +4829,13 @@ packages: resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-expo@54.0.16: - resolution: {integrity: sha512-wPV5dddlNMORNSA7ZjEjePA+ztks3G5iKCOHLIauURnKQPTscnaat5juXPboK1Bv2I+c/RDfkt4uZtAmXdlu/g==} + jest-expo@54.0.17: + resolution: {integrity: sha512-LyIhrsP4xvHEEcR1R024u/LBj3uPpAgB+UljgV+YXWkEHjprnr0KpE4tROsMNYCVTM1pPlAnPuoBmn5gnAN9KA==} hasBin: true peerDependencies: expo: '*' react-native: '*' - react-server-dom-webpack: ~19.0.3 || ~19.1.4 || ~19.2.3 + react-server-dom-webpack: ~19.0.4 || ~19.1.5 || ~19.2.4 peerDependenciesMeta: react-server-dom-webpack: optional: true @@ -5054,8 +5036,8 @@ packages: resolution: {integrity: sha512-OzIvbHKKDpi60TnF9t7UUVAF1B4mcqc02z5PIvrm08Wyb+yOcz63GRvEuVxNT18a9E1SrNouhB4W2NNLeD7Ykg==} engines: {node: '>=18'} - lan-network@0.1.7: - resolution: {integrity: sha512-mnIlAEMu4OyEvUNdzco9xpuB9YVcPkQec+QsgycBCtPZvEqWPCDPfbAE4OJMdBBWpZWtpCn1xw9jJYlwjWI5zQ==} + lan-network@0.2.1: + resolution: {integrity: sha512-ONPnazC96VKDntab9j9JKwIWhZ4ZUceB4A9Epu4Ssg0hYFmtHZSeQ+n15nIwTFmcBUKtExOer8WTJ4GF9MO64A==} hasBin: true latest-version@9.0.0: @@ -5818,9 +5800,6 @@ packages: node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} - node-releases@2.0.21: - resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==} - node-releases@2.0.46: resolution: {integrity: sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==} engines: {node: '>=18'} @@ -6120,10 +6099,6 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - picomatch@3.0.1: - resolution: {integrity: sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==} - engines: {node: '>=10'} - picomatch@4.0.3: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} @@ -7420,12 +7395,6 @@ packages: peerDependencies: browserslist: '>= 4.21.0' - update-browserslist-db@1.1.3: - resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - update-browserslist-db@1.2.3: resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true @@ -7911,7 +7880,7 @@ snapshots: '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.29.7 '@babel/helper-compilation-targets@7.27.2': dependencies: @@ -7957,14 +7926,14 @@ snapshots: '@babel/helper-member-expression-to-functions@7.27.1': dependencies: '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.25.9': dependencies: '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color @@ -7986,7 +7955,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.29.7 '@babel/helper-plugin-utils@7.27.1': {} @@ -8011,7 +7980,7 @@ snapshots: '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color @@ -8031,7 +8000,7 @@ snapshots: dependencies: '@babel/template': 7.27.2 '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color @@ -8389,7 +8358,7 @@ snapshots: '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) - '@babel/types': 7.28.4 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color @@ -8486,8 +8455,8 @@ snapshots: '@babel/template@7.25.9': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 '@babel/template@7.27.2': dependencies: @@ -8501,7 +8470,7 @@ snapshots: '@babel/generator': 7.28.3 '@babel/parser': 7.28.4 '@babel/template': 7.25.9 - '@babel/types': 7.28.4 + '@babel/types': 7.29.7 debug: 4.4.3 globals: 11.12.0 transitivePeerDependencies: @@ -8658,10 +8627,10 @@ snapshots: '@types/conventional-commits-parser': 5.0.0 chalk: 5.3.0 - '@dev-plugins/react-query@0.0.7(@tanstack/react-query@5.52.1(react@19.1.0))(expo@54.0.32)': + '@dev-plugins/react-query@0.0.7(@tanstack/react-query@5.52.1(react@19.1.0))(expo@54.0.34)': dependencies: '@tanstack/react-query': 5.52.1(react@19.1.0) - expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) flatted: 3.3.2 '@e18e/eslint-plugin@0.2.0(eslint@9.39.4(jiti@1.21.6))': @@ -8887,7 +8856,7 @@ snapshots: '@eslint/core': 1.2.1 levn: 0.4.1 - '@expo/cli@54.0.22(expo-router@6.0.22)(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))': + '@expo/cli@54.0.24(expo-router@6.0.23)(expo@54.0.34)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))': dependencies: '@0no-co/graphql.web': 1.0.11 '@expo/code-signing-certificates': 0.0.6 @@ -8898,11 +8867,11 @@ snapshots: '@expo/image-utils': 0.8.8 '@expo/json-file': 10.0.8 '@expo/metro': 54.2.0 - '@expo/metro-config': 54.0.14(expo@54.0.32) + '@expo/metro-config': 54.0.15(expo@54.0.34) '@expo/osascript': 2.3.8 '@expo/package-manager': 1.9.10 '@expo/plist': 0.4.8 - '@expo/prebuild-config': 54.0.8(expo@54.0.32) + '@expo/prebuild-config': 54.0.8(expo@54.0.34) '@expo/schema-utils': 0.1.8 '@expo/spawn-async': 1.7.2 '@expo/ws-tunnel': 1.0.4 @@ -8921,17 +8890,17 @@ snapshots: connect: 3.7.0 debug: 4.4.3 env-editor: 0.4.2 - expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - expo-server: 1.0.5 + expo: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo-server: 1.0.6 freeport-async: 2.0.0 getenv: 2.0.0 glob: 13.0.0 - lan-network: 0.1.7 + lan-network: 0.2.1 minimatch: 9.0.5 node-forge: 1.3.3 npm-package-arg: 11.0.3 ora: 3.4.0 - picomatch: 3.0.1 + picomatch: 4.0.4 pretty-bytes: 5.6.0 pretty-format: 29.7.0 progress: 2.0.3 @@ -8942,7 +8911,7 @@ snapshots: resolve: 1.22.10 resolve-from: 5.0.0 resolve.exports: 2.0.3 - semver: 7.7.2 + semver: 7.8.1 send: 0.19.1 slugify: 1.6.6 source-map-support: 0.5.21 @@ -8954,7 +8923,7 @@ snapshots: wrap-ansi: 7.0.0 ws: 8.18.3 optionalDependencies: - expo-router: 6.0.22(66e01e64ee5bf13a04f2f85ec0534cd3) + expo-router: 6.0.23(e628dfda4f41215298c7be55e0366448) react-native: 0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0) transitivePeerDependencies: - bufferutil @@ -8977,7 +8946,7 @@ snapshots: getenv: 2.0.0 glob: 13.0.0 resolve-from: 5.0.0 - semver: 7.7.2 + semver: 7.8.1 slash: 3.0.0 slugify: 1.6.6 xcode: 3.0.1 @@ -9029,7 +8998,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/fingerprint@0.15.4': + '@expo/fingerprint@0.15.5': dependencies: '@expo/spawn-async': 1.7.2 arg: 5.0.2 @@ -9038,10 +9007,10 @@ snapshots: getenv: 2.0.0 glob: 13.0.0 ignore: 5.3.2 - minimatch: 9.0.5 + minimatch: 10.2.5 p-limit: 3.1.0 resolve-from: 5.0.0 - semver: 7.7.2 + semver: 7.8.1 transitivePeerDependencies: - supports-color @@ -9054,7 +9023,7 @@ snapshots: parse-png: 2.1.0 resolve-from: 5.0.0 resolve-global: 1.0.0 - semver: 7.7.2 + semver: 7.8.1 temp-dir: 2.0.0 unique-string: 2.0.0 @@ -9063,7 +9032,7 @@ snapshots: '@babel/code-frame': 7.10.4 json5: 2.2.3 - '@expo/metro-config@54.0.14(expo@54.0.32)': + '@expo/metro-config@54.0.15(expo@54.0.34)': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.28.4 @@ -9073,7 +9042,7 @@ snapshots: '@expo/json-file': 10.0.8 '@expo/metro': 54.2.0 '@expo/spawn-async': 1.7.2 - browserslist: 4.26.2 + browserslist: 4.28.2 chalk: 4.1.2 debug: 4.4.3 dotenv: 16.4.5 @@ -9083,20 +9052,20 @@ snapshots: hermes-parser: 0.29.1 jsc-safe-url: 0.2.4 lightningcss: 1.30.2 - minimatch: 9.0.5 + picomatch: 4.0.4 postcss: 8.4.49 resolve-from: 5.0.0 optionalDependencies: - expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - '@expo/metro-runtime@6.1.2(expo@54.0.32)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@expo/metro-runtime@6.1.2(expo@54.0.34)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': dependencies: anser: 1.4.10 - expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) pretty-format: 29.7.0 react: 19.1.0 react-native: 0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0) @@ -9146,7 +9115,7 @@ snapshots: base64-js: 1.5.1 xmlbuilder: 15.1.1 - '@expo/prebuild-config@54.0.8(expo@54.0.32)': + '@expo/prebuild-config@54.0.8(expo@54.0.34)': dependencies: '@expo/config': 12.0.13 '@expo/config-plugins': 54.0.4 @@ -9155,7 +9124,7 @@ snapshots: '@expo/json-file': 10.0.8 '@react-native/normalize-colors': 0.81.5 debug: 4.4.3 - expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) resolve-from: 5.0.0 semver: 7.7.2 xml2js: 0.6.0 @@ -9172,9 +9141,9 @@ snapshots: '@expo/sudo-prompt@9.3.2': {} - '@expo/vector-icons@15.0.3(expo-font@14.0.11(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@expo/vector-icons@15.0.3(expo-font@14.0.11(expo@54.0.34)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': dependencies: - expo-font: 14.0.11(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo-font: 14.0.11(expo@54.0.34)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react: 19.1.0 react-native: 0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0) @@ -9185,7 +9154,7 @@ snapshots: '@babel/code-frame': 7.10.4 chalk: 4.1.2 find-up: 5.0.0 - js-yaml: 4.1.0 + js-yaml: 4.1.1 '@formatjs/ecma402-abstract@2.2.4': dependencies: @@ -10108,7 +10077,7 @@ snapshots: dependencies: '@react-navigation/routers': 7.5.1 escape-string-regexp: 4.0.0 - nanoid: 3.3.11 + nanoid: 3.3.12 query-string: 7.1.3 react: 19.1.0 react-is: 19.1.1 @@ -10142,14 +10111,14 @@ snapshots: '@react-navigation/core': 7.12.4(react@19.1.0) escape-string-regexp: 4.0.0 fast-deep-equal: 3.1.3 - nanoid: 3.3.11 + nanoid: 3.3.12 react: 19.1.0 react-native: 0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0) use-latest-callback: 0.2.4(react@19.1.0) '@react-navigation/routers@7.5.1': dependencies: - nanoid: 3.3.11 + nanoid: 3.3.12 '@samverschueren/stream-to-observable@0.3.1(rxjs@6.6.7)': dependencies: @@ -10245,24 +10214,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.29.7 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.29.7 '@types/conventional-commits-parser@5.0.0': dependencies: @@ -10449,7 +10418,7 @@ snapshots: fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.2 + semver: 7.8.1 ts-api-utils: 2.1.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -10833,7 +10802,7 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.4 + '@babel/types': 7.29.7 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 @@ -10858,7 +10827,7 @@ snapshots: dependencies: '@babel/core': 7.28.4 '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) - core-js-compat: 3.43.0 + core-js-compat: 3.49.0 transitivePeerDependencies: - supports-color @@ -10871,7 +10840,7 @@ snapshots: babel-plugin-react-compiler@1.0.0: dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.29.7 babel-plugin-react-native-web@0.21.2: {} @@ -10904,7 +10873,7 @@ snapshots: '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.4) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.4) - babel-preset-expo@54.0.10(@babel/core@7.28.4)(@babel/runtime@7.26.0)(expo@54.0.32)(react-refresh@0.14.2): + babel-preset-expo@54.0.10(@babel/core@7.28.4)(@babel/runtime@7.26.0)(expo@54.0.34)(react-refresh@0.14.2): dependencies: '@babel/helper-module-imports': 7.27.1 '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.4) @@ -10931,7 +10900,7 @@ snapshots: resolve-from: 5.0.0 optionalDependencies: '@babel/runtime': 7.26.0 - expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) transitivePeerDependencies: - '@babel/core' - supports-color @@ -10950,8 +10919,6 @@ snapshots: baseline-browser-mapping@2.10.32: {} - baseline-browser-mapping@2.8.4: {} - better-opn@3.0.2: dependencies: open: 8.4.2 @@ -11019,14 +10986,6 @@ snapshots: node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) - browserslist@4.26.2: - dependencies: - baseline-browser-mapping: 2.8.4 - caniuse-lite: 1.0.30001743 - electron-to-chromium: 1.5.218 - node-releases: 2.0.21 - update-browserslist-db: 1.1.3(browserslist@4.26.2) - browserslist@4.28.2: dependencies: baseline-browser-mapping: 2.10.32 @@ -11074,8 +11033,6 @@ snapshots: caniuse-lite@1.0.30001680: {} - caniuse-lite@1.0.30001743: {} - caniuse-lite@1.0.30001793: {} ccount@2.0.1: {} @@ -11343,10 +11300,6 @@ snapshots: convert-source-map@2.0.0: {} - core-js-compat@3.43.0: - dependencies: - browserslist: 4.26.2 - core-js-compat@3.49.0: dependencies: browserslist: 4.28.2 @@ -11592,8 +11545,6 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.218: {} - electron-to-chromium@1.5.361: {} electron-to-chromium@1.5.63: {} @@ -11708,7 +11659,7 @@ snapshots: empathic: 2.0.1 eslint: 9.39.4(jiti@1.21.6) module-replacements: 2.11.0 - semver: 7.7.2 + semver: 7.8.1 eslint-plugin-es-x@7.8.0(eslint@9.39.4(jiti@1.21.6)): dependencies: @@ -12186,80 +12137,80 @@ snapshots: jest-message-util: 29.7.0 jest-util: 29.7.0 - expo-asset@12.0.12(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + expo-asset@12.0.13(expo@54.0.34)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: '@expo/image-utils': 0.8.8 - expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - expo-constants: 18.0.13(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0)) + expo: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo-constants: 18.0.13(expo@54.0.34)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0)) react: 19.1.0 react-native: 0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0) transitivePeerDependencies: - supports-color - expo-build-properties@1.0.10(expo@54.0.32): + expo-build-properties@1.0.10(expo@54.0.34): dependencies: ajv: 8.17.1 - expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) semver: 7.7.2 - expo-constants@18.0.13(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0)): + expo-constants@18.0.13(expo@54.0.34)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0)): dependencies: '@expo/config': 12.0.13 '@expo/env': 2.0.8 - expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native: 0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0) transitivePeerDependencies: - supports-color - expo-crypto@15.0.8(expo@54.0.32): + expo-crypto@15.0.9(expo@54.0.34): dependencies: base64-js: 1.5.1 - expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - expo-dev-client@6.0.20(expo@54.0.32): + expo-dev-client@6.0.21(expo@54.0.34): dependencies: - expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - expo-dev-launcher: 6.0.20(expo@54.0.32) - expo-dev-menu: 7.0.18(expo@54.0.32) - expo-dev-menu-interface: 2.0.0(expo@54.0.32) - expo-manifests: 1.0.10(expo@54.0.32) - expo-updates-interface: 2.0.0(expo@54.0.32) + expo: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo-dev-launcher: 6.0.21(expo@54.0.34) + expo-dev-menu: 7.0.19(expo@54.0.34) + expo-dev-menu-interface: 2.0.0(expo@54.0.34) + expo-manifests: 1.0.11(expo@54.0.34) + expo-updates-interface: 2.0.0(expo@54.0.34) transitivePeerDependencies: - supports-color - expo-dev-launcher@6.0.20(expo@54.0.32): + expo-dev-launcher@6.0.21(expo@54.0.34): dependencies: ajv: 8.17.1 - expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - expo-dev-menu: 7.0.18(expo@54.0.32) - expo-manifests: 1.0.10(expo@54.0.32) + expo: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo-dev-menu: 7.0.19(expo@54.0.34) + expo-manifests: 1.0.11(expo@54.0.34) transitivePeerDependencies: - supports-color - expo-dev-menu-interface@2.0.0(expo@54.0.32): + expo-dev-menu-interface@2.0.0(expo@54.0.34): dependencies: - expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - expo-dev-menu@7.0.18(expo@54.0.32): + expo-dev-menu@7.0.19(expo@54.0.34): dependencies: - expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - expo-dev-menu-interface: 2.0.0(expo@54.0.32) + expo: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo-dev-menu-interface: 2.0.0(expo@54.0.34) - expo-file-system@19.0.21(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0)): + expo-file-system@19.0.22(expo@54.0.34)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0)): dependencies: - expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native: 0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0) - expo-font@14.0.11(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + expo-font@14.0.11(expo@54.0.34)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: - expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) fontfaceobserver: 2.3.0 react: 19.1.0 react-native: 0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0) - expo-image@3.0.11(expo@54.0.32)(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + expo-image@3.0.11(expo@54.0.34)(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: - expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react: 19.1.0 react-native: 0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0) optionalDependencies: @@ -12267,14 +12218,14 @@ snapshots: expo-json-utils@0.15.0: {} - expo-keep-awake@15.0.8(expo@54.0.32)(react@19.1.0): + expo-keep-awake@15.0.8(expo@54.0.34)(react@19.1.0): dependencies: - expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react: 19.1.0 - expo-linking@8.0.11(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + expo-linking@8.0.12(expo@54.0.34)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: - expo-constants: 18.0.13(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0)) + expo-constants: 18.0.13(expo@54.0.34)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0)) invariant: 2.2.4 react: 19.1.0 react-native: 0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0) @@ -12282,21 +12233,21 @@ snapshots: - expo - supports-color - expo-localization@17.0.8(expo@54.0.32)(react@19.1.0): + expo-localization@17.0.8(expo@54.0.34)(react@19.1.0): dependencies: - expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react: 19.1.0 rtl-detect: 1.1.2 - expo-manifests@1.0.10(expo@54.0.32): + expo-manifests@1.0.11(expo@54.0.34): dependencies: '@expo/config': 12.0.13 - expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) expo-json-utils: 0.15.0 transitivePeerDependencies: - supports-color - expo-modules-autolinking@3.0.24: + expo-modules-autolinking@3.0.25: dependencies: '@expo/spawn-async': 1.7.2 chalk: 4.1.2 @@ -12304,15 +12255,15 @@ snapshots: require-from-string: 2.0.2 resolve-from: 5.0.0 - expo-modules-core@3.0.29(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + expo-modules-core@3.0.30(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: invariant: 2.2.4 react: 19.1.0 react-native: 0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0) - expo-router@6.0.22(66e01e64ee5bf13a04f2f85ec0534cd3): + expo-router@6.0.23(e628dfda4f41215298c7be55e0366448): dependencies: - '@expo/metro-runtime': 6.1.2(expo@54.0.32)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@expo/metro-runtime': 6.1.2(expo@54.0.34)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) '@expo/schema-utils': 0.1.8 '@radix-ui/react-slot': 1.2.0(@types/react@19.1.17)(react@19.1.0) '@radix-ui/react-tabs': 1.1.13(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -12322,13 +12273,13 @@ snapshots: client-only: 0.0.1 debug: 4.4.3 escape-string-regexp: 4.0.0 - expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - expo-constants: 18.0.13(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0)) - expo-linking: 8.0.11(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - expo-server: 1.0.5 + expo: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo-constants: 18.0.13(expo@54.0.34)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0)) + expo-linking: 8.0.12(expo@54.0.34)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo-server: 1.0.6 fast-deep-equal: 3.1.3 invariant: 2.2.4 - nanoid: 3.3.11 + nanoid: 3.3.12 query-string: 7.1.3 react: 19.1.0 react-fast-compare: 3.2.2 @@ -12354,12 +12305,12 @@ snapshots: - '@types/react-dom' - supports-color - expo-server@1.0.5: {} + expo-server@1.0.6: {} - expo-splash-screen@31.0.13(expo@54.0.32): + expo-splash-screen@31.0.13(expo@54.0.34): dependencies: - '@expo/prebuild-config': 54.0.8(expo@54.0.32) - expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@expo/prebuild-config': 54.0.8(expo@54.0.34) + expo: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) transitivePeerDependencies: - supports-color @@ -12369,48 +12320,48 @@ snapshots: react-native: 0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0) react-native-is-edge-to-edge: 1.2.1(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - expo-system-ui@6.0.9(expo@54.0.32)(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0)): + expo-system-ui@6.0.9(expo@54.0.34)(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0)): dependencies: '@react-native/normalize-colors': 0.81.5 debug: 4.4.3 - expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native: 0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0) optionalDependencies: react-native-web: 0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) transitivePeerDependencies: - supports-color - expo-updates-interface@2.0.0(expo@54.0.32): + expo-updates-interface@2.0.0(expo@54.0.34): dependencies: - expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - expo@54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + expo@54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: '@babel/runtime': 7.26.0 - '@expo/cli': 54.0.22(expo-router@6.0.22)(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0)) + '@expo/cli': 54.0.24(expo-router@6.0.23)(expo@54.0.34)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0)) '@expo/config': 12.0.13 '@expo/config-plugins': 54.0.4 '@expo/devtools': 0.1.8(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - '@expo/fingerprint': 0.15.4 + '@expo/fingerprint': 0.15.5 '@expo/metro': 54.2.0 - '@expo/metro-config': 54.0.14(expo@54.0.32) - '@expo/vector-icons': 15.0.3(expo-font@14.0.11(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@expo/metro-config': 54.0.15(expo@54.0.34) + '@expo/vector-icons': 15.0.3(expo-font@14.0.11(expo@54.0.34)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) '@ungap/structured-clone': 1.3.0 - babel-preset-expo: 54.0.10(@babel/core@7.28.4)(@babel/runtime@7.26.0)(expo@54.0.32)(react-refresh@0.14.2) - expo-asset: 12.0.12(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - expo-constants: 18.0.13(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0)) - expo-file-system: 19.0.21(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0)) - expo-font: 14.0.11(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - expo-keep-awake: 15.0.8(expo@54.0.32)(react@19.1.0) - expo-modules-autolinking: 3.0.24 - expo-modules-core: 3.0.29(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + babel-preset-expo: 54.0.10(@babel/core@7.28.4)(@babel/runtime@7.26.0)(expo@54.0.34)(react-refresh@0.14.2) + expo-asset: 12.0.13(expo@54.0.34)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo-constants: 18.0.13(expo@54.0.34)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0)) + expo-file-system: 19.0.22(expo@54.0.34)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0)) + expo-font: 14.0.11(expo@54.0.34)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo-keep-awake: 15.0.8(expo@54.0.34)(react@19.1.0) + expo-modules-autolinking: 3.0.25 + expo-modules-core: 3.0.30(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) pretty-format: 29.7.0 react: 19.1.0 react-native: 0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0) react-refresh: 0.14.2 whatwg-url-without-unicode: 8.0.0-3 optionalDependencies: - '@expo/metro-runtime': 6.1.2(expo@54.0.32)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@expo/metro-runtime': 6.1.2(expo@54.0.34)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-webview: 13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) transitivePeerDependencies: - '@babel/core' @@ -13086,7 +13037,7 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.28.4 - '@babel/parser': 7.28.4 + '@babel/parser': 7.29.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -13259,14 +13210,14 @@ snapshots: jest-mock: 29.7.0 jest-util: 29.7.0 - jest-expo@54.0.16(@babel/core@7.28.4)(expo@54.0.32)(jest@29.7.0(@types/node@22.9.1))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + jest-expo@54.0.17(@babel/core@7.28.4)(expo@54.0.34)(jest@29.7.0(@types/node@22.9.1))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: '@expo/config': 12.0.13 '@expo/json-file': 10.0.8 '@jest/create-cache-key-function': 29.7.0 '@jest/globals': 29.7.0 babel-jest: 29.7.0(@babel/core@7.28.4) - expo: 54.0.32(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 54.0.34(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) jest-environment-jsdom: 29.7.0 jest-snapshot: 29.7.0 jest-watch-select-projects: 2.0.0 @@ -13427,7 +13378,7 @@ snapshots: '@babel/generator': 7.28.3 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) - '@babel/types': 7.28.4 + '@babel/types': 7.29.7 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 @@ -13442,7 +13393,7 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.7.2 + semver: 7.8.1 transitivePeerDependencies: - supports-color @@ -13601,7 +13552,7 @@ snapshots: dependencies: acorn: 8.15.0 eslint-visitor-keys: 5.0.1 - semver: 7.7.2 + semver: 7.8.1 jsonparse@1.3.1: {} @@ -13613,7 +13564,7 @@ snapshots: ky@1.7.2: {} - lan-network@0.1.7: {} + lan-network@0.2.1: {} latest-version@9.0.0: dependencies: @@ -14123,7 +14074,7 @@ snapshots: metro-cache: 0.83.3 metro-core: 0.83.3 metro-runtime: 0.83.3 - yaml: 2.6.1 + yaml: 2.9.0 transitivePeerDependencies: - bufferutil - supports-color @@ -14216,7 +14167,7 @@ snapshots: dependencies: '@babel/traverse': 7.28.4 '@babel/traverse--for-generate-function-map': '@babel/traverse@7.28.4' - '@babel/types': 7.28.4 + '@babel/types': 7.29.7 flow-enums-runtime: 0.0.6 invariant: 2.2.4 metro-symbolicate: 0.83.3 @@ -14275,8 +14226,8 @@ snapshots: dependencies: '@babel/core': 7.28.4 '@babel/generator': 7.28.3 - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 flow-enums-runtime: 0.0.6 metro: 0.83.2 metro-babel-transformer: 0.83.2 @@ -14295,8 +14246,8 @@ snapshots: dependencies: '@babel/core': 7.28.4 '@babel/generator': 7.28.3 - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 flow-enums-runtime: 0.0.6 metro: 0.83.3 metro-babel-transformer: 0.83.3 @@ -14319,7 +14270,7 @@ snapshots: '@babel/parser': 7.28.4 '@babel/template': 7.27.2 '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/types': 7.29.7 accepts: 1.3.8 chalk: 4.1.2 ci-info: 2.0.0 @@ -14363,10 +14314,10 @@ snapshots: '@babel/code-frame': 7.27.1 '@babel/core': 7.28.4 '@babel/generator': 7.28.3 - '@babel/parser': 7.28.4 + '@babel/parser': 7.29.7 '@babel/template': 7.27.2 '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/types': 7.29.7 accepts: 1.3.8 chalk: 4.1.2 ci-info: 2.0.0 @@ -14747,14 +14698,12 @@ snapshots: node-releases@2.0.18: {} - node-releases@2.0.21: {} - node-releases@2.0.46: {} normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 - semver: 7.7.2 + semver: 7.8.1 validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} @@ -14818,7 +14767,7 @@ snapshots: dependencies: hosted-git-info: 7.0.2 proc-log: 4.2.0 - semver: 7.7.2 + semver: 7.8.1 validate-npm-package-name: 5.0.1 npm-run-path@4.0.1: @@ -15081,8 +15030,6 @@ snapshots: picomatch@2.3.1: {} - picomatch@3.0.1: {} - picomatch@4.0.3: {} picomatch@4.0.4: {} @@ -16161,7 +16108,7 @@ snapshots: terser@5.36.0: dependencies: '@jridgewell/source-map': 0.3.6 - acorn: 8.15.0 + acorn: 8.16.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -16389,12 +16336,6 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - update-browserslist-db@1.1.3(browserslist@4.26.2): - dependencies: - browserslist: 4.26.2 - escalade: 3.2.0 - picocolors: 1.1.1 - update-browserslist-db@1.2.3(browserslist@4.28.2): dependencies: browserslist: 4.28.2 From 497388a78298fe5e5c520c8dbc738aeae67d53ae Mon Sep 17 00:00:00 2001 From: Fernanda Toledo <fertoledo93@gmail.com> Date: Tue, 26 May 2026 11:01:53 -0300 Subject: [PATCH 12/18] fix: use plain scalar for eslint_flags in lint workflow --- .github/workflows/lint-ts.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lint-ts.yml b/.github/workflows/lint-ts.yml index 55041e09f..60929f839 100644 --- a/.github/workflows/lint-ts.yml +++ b/.github/workflows/lint-ts.yml @@ -45,7 +45,7 @@ jobs: with: github_token: ${{ secrets.GITHUB_TOKEN }} reporter: github-pr-review - eslint_flags: '.' + eslint_flags: . - name: 🏃‍♂️ Run ESLint PR if: github.event_name != 'pull_request' From 84cbb47c951d6a71a71e476bff7c7c8a886cff8b Mon Sep 17 00:00:00 2001 From: Fernanda Toledo <fertoledo93@gmail.com> Date: Tue, 26 May 2026 11:21:21 -0300 Subject: [PATCH 13/18] fix: replace Promise.reject with throw and remove empty type intersection --- src/api/common/interceptors.ts | 2 +- src/components/providers/auth.tsx | 6 +++--- src/components/ui/input.tsx | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/api/common/interceptors.ts b/src/api/common/interceptors.ts index 9cf8839c1..4fbf0f14a 100644 --- a/src/api/common/interceptors.ts +++ b/src/api/common/interceptors.ts @@ -57,6 +57,6 @@ export default function interceptors() { return response; }, - async (error: AxiosError) => Promise.reject(error), + (error: AxiosError) => { throw error; }, ); } diff --git a/src/components/providers/auth.tsx b/src/components/providers/auth.tsx index 0514fceff..3fcb384e2 100644 --- a/src/components/providers/auth.tsx +++ b/src/components/providers/auth.tsx @@ -71,7 +71,7 @@ client.interceptors.request.use( return config; }, - async error => Promise.reject(error), + (error: unknown) => { throw error; }, ); // Response interceptor to handle tokens @@ -94,7 +94,7 @@ client.interceptors.response.use( return response; }, - async error => Promise.reject(error), + (error: unknown) => { throw error; }, ); type AuthContextProps = { @@ -158,7 +158,7 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ checkToken(); return config; }, - async error => Promise.reject(error), + (error: unknown) => { throw error; }, ); return () => { diff --git a/src/components/ui/input.tsx b/src/components/ui/input.tsx index 0ab551dcb..85080755a 100644 --- a/src/components/ui/input.tsx +++ b/src/components/ui/input.tsx @@ -72,7 +72,7 @@ export type InputControllerType<T extends FieldValues> = { rules?: RuleType<T>; }; -type ControlledInputProps<T extends FieldValues> = {} & NInputProps & InputControllerType<T>; +type ControlledInputProps<T extends FieldValues> = NInputProps & InputControllerType<T>; export const Input = forwardRef<NTextInput, NInputProps>((props, ref) => { const { label, error, testID, ...inputProps } = props; From abde8ea3db8432e305f1f08d596bce1be630a17c Mon Sep 17 00:00:00 2001 From: Fernanda Toledo <fertoledo93@gmail.com> Date: Tue, 26 May 2026 11:57:52 -0300 Subject: [PATCH 14/18] fix(sonar): use node: protocol for built-in module imports Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --- cli/utils.js | 2 +- env.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cli/utils.js b/cli/utils.js index b5df62f65..7bbcb5e1d 100755 --- a/cli/utils.js +++ b/cli/utils.js @@ -1,5 +1,5 @@ #!/usr/bin/env node -const { exec } = require('child_process'); +const { exec } = require('node:child_process'); const { consola } = require('consola'); const UPSTREAM_REPOSITORY = "obytes/react-native-template-obytes"; diff --git a/env.js b/env.js index abd00d493..d396e9671 100644 --- a/env.js +++ b/env.js @@ -16,7 +16,7 @@ const z = require('zod'); const packageJSON = require('./package.json'); -const path = require('path'); +const path = require('node:path'); const APP_ENV = /** @type {z.infer<typeof clientEnvSchema>['APP_ENV']} */ From 25134549f16b01d6691419235f6aa9409b3c0f75 Mon Sep 17 00:00:00 2001 From: Fernanda Toledo <fertoledo93@gmail.com> Date: Tue, 26 May 2026 12:23:20 -0300 Subject: [PATCH 15/18] fix(sonar): resolve low-priority SonarQube issues - Name the anonymous function in babel.config.js - Handle exception and rename latest_release to latestRelease in cli/clone-repo.js - Add Readonly<> to component props across settings, forms, and UI components - Flip negated ternary condition in auth.tsx response interceptor - Return Promise.reject in interceptors.ts error handler to fix failing test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --- babel.config.js | 2 +- cli/clone-repo.js | 9 +++++---- src/api/common/interceptors.ts | 2 +- src/components/colors.tsx | 4 ++-- src/components/cover.tsx | 2 +- src/components/forgot-password-form.tsx | 2 +- src/components/login-form.tsx | 2 +- src/components/providers/auth.tsx | 8 +++----- src/components/settings/delete-account-item.tsx | 2 +- src/components/settings/items-container.tsx | 2 +- src/components/sign-up-form.tsx | 2 +- src/components/title.tsx | 2 +- 12 files changed, 19 insertions(+), 20 deletions(-) diff --git a/babel.config.js b/babel.config.js index 106f3b21a..18a2ba350 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,4 +1,4 @@ -module.exports = function (api) { +module.exports = function babel(api) { api.cache(true); return { presets: [ diff --git a/cli/clone-repo.js b/cli/clone-repo.js index 309ee8d45..269d4e0a2 100755 --- a/cli/clone-repo.js +++ b/cli/clone-repo.js @@ -10,7 +10,8 @@ const getLatestRelease = async () => { return releaseData.tag_name || 'master'; } catch (error) { console.warn( - 'Failed to retrieve the latest release; will use the master branch instead' + 'Failed to retrieve the latest release; will use the master branch instead', + error ); return 'master'; } @@ -18,11 +19,11 @@ const getLatestRelease = async () => { const cloneLatestTemplateRelease = async (projectName) => { consola.start('Extracting last release number 👀'); - const latest_release = await getLatestRelease(); - consola.info(`Using Rootstrap's Template ${latest_release}`); + const latestRelease = await getLatestRelease(); + consola.info(`Using Rootstrap's Template ${latestRelease}`); // create a new project based on Rootstrap template - const cloneStarter = `git clone -b ${latest_release} --depth=1 https://github.com/${TEMPLATE_REPOSITORY}.git ${projectName}`; + const cloneStarter = `git clone -b ${latestRelease} --depth=1 https://github.com/${TEMPLATE_REPOSITORY}.git ${projectName}`; await runCommand(cloneStarter, { loading: 'Extracting the template...', success: 'Template extracted successfully', diff --git a/src/api/common/interceptors.ts b/src/api/common/interceptors.ts index 4fbf0f14a..9cf8839c1 100644 --- a/src/api/common/interceptors.ts +++ b/src/api/common/interceptors.ts @@ -57,6 +57,6 @@ export default function interceptors() { return response; }, - (error: AxiosError) => { throw error; }, + async (error: AxiosError) => Promise.reject(error), ); } diff --git a/src/components/colors.tsx b/src/components/colors.tsx index 125ba7e11..332585abf 100644 --- a/src/components/colors.tsx +++ b/src/components/colors.tsx @@ -16,7 +16,7 @@ export function Colors() { ); } -function Color({ name }: { name: ColorName }) { +function Color({ name }: Readonly<{ name: ColorName }>) { if (typeof colors[name] === 'string') { return null; } @@ -34,7 +34,7 @@ function Color({ name }: { name: ColorName }) { ); } -function ColorCard({ color, value }: { value: string; color: string }) { +function ColorCard({ color, value }: Readonly<{ value: string; color: string }>) { return ( <View className="flex-1"> <View diff --git a/src/components/cover.tsx b/src/components/cover.tsx index c73f9f2f1..7a1ed7965 100644 --- a/src/components/cover.tsx +++ b/src/components/cover.tsx @@ -2,7 +2,7 @@ import type { SvgProps } from 'react-native-svg'; import Svg, { Circle, Path, Polygon } from 'react-native-svg'; // TODO: should be updated to simple images -export function Cover(props: SvgProps) { +export function Cover(props: Readonly<SvgProps>) { return ( <Svg data-name="Layer 1" viewBox="0 0 831 729.98934" {...props}> <Path diff --git a/src/components/forgot-password-form.tsx b/src/components/forgot-password-form.tsx index 74684c241..179b68f81 100644 --- a/src/components/forgot-password-form.tsx +++ b/src/components/forgot-password-form.tsx @@ -22,7 +22,7 @@ export type ForgotPasswordFormProps = { onSubmit: (data: FormType) => void; }; -export function ForgotPasswordForm(props: ForgotPasswordFormProps) { +export function ForgotPasswordForm(props: Readonly<ForgotPasswordFormProps>) { const { t } = useTranslation(); const { handleSubmit, control } = useForm<{ email: string; diff --git a/src/components/login-form.tsx b/src/components/login-form.tsx index aebc42964..b41cf6e93 100644 --- a/src/components/login-form.tsx +++ b/src/components/login-form.tsx @@ -29,7 +29,7 @@ export type LoginFormProps = { export function LoginForm({ onSubmit = () => {}, isLoading = false, -}: LoginFormProps) { +}: Readonly<LoginFormProps>) { const { handleSubmit, control } = useForm<FormType>({ resolver: zodResolver(schema), }); diff --git a/src/components/providers/auth.tsx b/src/components/providers/auth.tsx index 3fcb384e2..60704e1f8 100644 --- a/src/components/providers/auth.tsx +++ b/src/components/providers/auth.tsx @@ -82,11 +82,9 @@ client.interceptors.response.use( const userId = (response.headers[HEADER_KEYS.USER_ID] as string | undefined) ?? ''; const expiryHeader = response.headers[HEADER_KEYS.EXPIRY] as string | undefined; - const expiration = expiryHeader !== undefined - ? dayjs - .unix(Number.parseInt(expiryHeader, 10)) - .toISOString() - : dayjs().add(1, 'hour').toISOString(); + const expiration = expiryHeader === undefined + ? dayjs().add(1, 'hour').toISOString() + : dayjs.unix(Number.parseInt(expiryHeader, 10)).toISOString(); if (accessToken !== '' && refreshToken !== '' && userId !== '' && expiration !== '') { storeTokens({ accessToken, refreshToken, userId, expiration }); diff --git a/src/components/settings/delete-account-item.tsx b/src/components/settings/delete-account-item.tsx index 9c57cfb3f..f75f61a21 100644 --- a/src/components/settings/delete-account-item.tsx +++ b/src/components/settings/delete-account-item.tsx @@ -9,7 +9,7 @@ export type DeleteAccountItemProps = { onDelete: () => void; }; -export function DeleteAccountItem(props: DeleteAccountItemProps) { +export function DeleteAccountItem(props: Readonly<DeleteAccountItemProps>) { const handleDeleteAccount = () => { props.onDelete(); }; diff --git a/src/components/settings/items-container.tsx b/src/components/settings/items-container.tsx index b853368a5..691bc83b1 100644 --- a/src/components/settings/items-container.tsx +++ b/src/components/settings/items-container.tsx @@ -8,7 +8,7 @@ type Props = { title?: TxKeyPath; }; -export function ItemsContainer({ children, title }: Props) { +export function ItemsContainer({ children, title }: Readonly<Props>) { return ( <View className="gap-2"> {title && <Text className="text-lg" tx={title} />} diff --git a/src/components/sign-up-form.tsx b/src/components/sign-up-form.tsx index 15a6bbd4f..87806f1d8 100644 --- a/src/components/sign-up-form.tsx +++ b/src/components/sign-up-form.tsx @@ -40,7 +40,7 @@ export type SignUpFormProps = { export function SignUpForm({ onSubmit = () => {}, isPending = false, -}: SignUpFormProps) { +}: Readonly<SignUpFormProps>) { const { handleSubmit, control } = useForm<FormType>({ resolver: zodResolver(schema), }); diff --git a/src/components/title.tsx b/src/components/title.tsx index 5543d859f..851030bd8 100644 --- a/src/components/title.tsx +++ b/src/components/title.tsx @@ -3,7 +3,7 @@ import { Text, View } from '@/components/ui'; type Props = { text: string; }; -export function Title({ text }: Props) { +export function Title({ text }: Readonly<Props>) { return ( <View className="flex-row items-center justify-center py-4 pb-2"> <Text className="pr-2 text-2xl">{text}</Text> From 1ab7cb92f83f9516422926fb10e0b6cafb003927 Mon Sep 17 00:00:00 2001 From: Fernanda Toledo <fertoledo93@gmail.com> Date: Tue, 26 May 2026 15:26:16 -0300 Subject: [PATCH 16/18] chore: add SonarQube Claude Code integration and pending fixes - Configure SonarQube MCP server via .mcp.json (project: react-native-template) - Register secrets-scanning hooks in .claude/settings.json - Install sonar-secrets hook scripts under .claude/hooks/ --- .../build-scripts/pretool-secrets.sh | 5 ++++ .../build-scripts/prompt-secrets.sh | 5 ++++ .claude/settings.json | 26 ++++++++++++++++++- .mcp.json | 13 ++++++++++ __tests__/api/common/interceptors.test.ts | 2 +- src/api/common/interceptors.ts | 2 +- src/components/ui/select.tsx | 2 +- 7 files changed, 51 insertions(+), 4 deletions(-) create mode 100755 .claude/hooks/sonar-secrets/build-scripts/pretool-secrets.sh create mode 100755 .claude/hooks/sonar-secrets/build-scripts/prompt-secrets.sh create mode 100644 .mcp.json diff --git a/.claude/hooks/sonar-secrets/build-scripts/pretool-secrets.sh b/.claude/hooks/sonar-secrets/build-scripts/pretool-secrets.sh new file mode 100755 index 000000000..24f537c2d --- /dev/null +++ b/.claude/hooks/sonar-secrets/build-scripts/pretool-secrets.sh @@ -0,0 +1,5 @@ +#!/bin/bash +if ! command -v sonar &> /dev/null; then + exit 0 +fi +sonar hook claude-pre-tool-use diff --git a/.claude/hooks/sonar-secrets/build-scripts/prompt-secrets.sh b/.claude/hooks/sonar-secrets/build-scripts/prompt-secrets.sh new file mode 100755 index 000000000..2bb89ce29 --- /dev/null +++ b/.claude/hooks/sonar-secrets/build-scripts/prompt-secrets.sh @@ -0,0 +1,5 @@ +#!/bin/bash +if ! command -v sonar &> /dev/null; then + exit 0 +fi +sonar hook claude-prompt-submit diff --git a/.claude/settings.json b/.claude/settings.json index 12d738c0d..25c4f4afa 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -10,6 +10,30 @@ } ] } + ], + "PreToolUse": [ + { + "matcher": "Read", + "hooks": [ + { + "type": "command", + "command": ".claude/hooks/sonar-secrets/build-scripts/pretool-secrets.sh", + "timeout": 60 + } + ] + } + ], + "UserPromptSubmit": [ + { + "matcher": "*", + "hooks": [ + { + "type": "command", + "command": ".claude/hooks/sonar-secrets/build-scripts/prompt-secrets.sh", + "timeout": 60 + } + ] + } ] } -} +} \ No newline at end of file diff --git a/.mcp.json b/.mcp.json new file mode 100644 index 000000000..bbc4dcb78 --- /dev/null +++ b/.mcp.json @@ -0,0 +1,13 @@ +{ + "mcpServers": { + "sonarqube": { + "command": "sonar", + "args": [ + "run", + "mcp", + "--project", + "react-native-template" + ] + } + } +} \ No newline at end of file diff --git a/__tests__/api/common/interceptors.test.ts b/__tests__/api/common/interceptors.test.ts index ef286ba9e..3c980a171 100644 --- a/__tests__/api/common/interceptors.test.ts +++ b/__tests__/api/common/interceptors.test.ts @@ -122,7 +122,7 @@ const testResponseInterceptors = () => { return; } - await expect(rejected(axiosError)).rejects.toEqual(axiosError); + await expect(async () => rejected(axiosError)).rejects.toEqual(axiosError); }); }); }); diff --git a/src/api/common/interceptors.ts b/src/api/common/interceptors.ts index 9cf8839c1..4fbf0f14a 100644 --- a/src/api/common/interceptors.ts +++ b/src/api/common/interceptors.ts @@ -57,6 +57,6 @@ export default function interceptors() { return response; }, - async (error: AxiosError) => Promise.reject(error), + (error: AxiosError) => { throw error; }, ); } diff --git a/src/components/ui/select.tsx b/src/components/ui/select.tsx index 6bfc7a9fc..e55ddd14d 100644 --- a/src/components/ui/select.tsx +++ b/src/components/ui/select.tsx @@ -143,7 +143,7 @@ export type SelectProps = { placeholder?: string; testID?: string; }; -type ControlledSelectProps<T extends FieldValues> = {} & SelectProps & InputControllerType<T>; +type ControlledSelectProps<T extends FieldValues> = SelectProps & InputControllerType<T>; export function Select(props: SelectProps) { const { From 93eed761d9f1407b3b561cdd88e3b8751143ee0f Mon Sep 17 00:00:00 2001 From: Fernanda Toledo <fertoledo93@gmail.com> Date: Tue, 26 May 2026 15:48:59 -0300 Subject: [PATCH 17/18] fix(sonar): resolve S7735 unexpected negated condition issues Flip negated conditions to their positive equivalents across UI components, auth provider, and i18n utils to comply with SonarQube S7735. --- src/components/providers/auth.tsx | 2 +- src/components/ui/button.tsx | 4 ++-- src/components/ui/checkbox.tsx | 6 +++--- src/components/ui/input.tsx | 4 ++-- src/components/ui/list.tsx | 8 ++++---- src/components/ui/select.tsx | 8 ++++---- src/lib/i18n/utils.tsx | 2 +- 7 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/components/providers/auth.tsx b/src/components/providers/auth.tsx index 60704e1f8..d3ece1a7c 100644 --- a/src/components/providers/auth.tsx +++ b/src/components/providers/auth.tsx @@ -179,7 +179,7 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ export function useAuth(): AuthContextProps { const context = use(AuthContext); - if (!context) { + if (context === undefined) { throw new Error('useAuth must be used within an AuthProvider'); } return context; diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx index f69dacdd9..9759a8c23 100644 --- a/src/components/ui/button.tsx +++ b/src/components/ui/button.tsx @@ -123,13 +123,13 @@ export const Button = forwardRef<View, Props>( <ActivityIndicator size="small" className={styles.indicator()} - testID={testID !== undefined ? `${testID}-activity-indicator` : undefined} + testID={testID === undefined ? undefined : `${testID}-activity-indicator`} /> ); } return ( <Text - testID={testID !== undefined ? `${testID}-label` : undefined} + testID={testID === undefined ? undefined : `${testID}-label`} className={styles.label({ className: textClassName })} > {text} diff --git a/src/components/ui/checkbox.tsx b/src/components/ui/checkbox.tsx index f86097227..d492d57d0 100644 --- a/src/components/ui/checkbox.tsx +++ b/src/components/ui/checkbox.tsx @@ -130,7 +130,7 @@ function CheckboxBase({ ? ( <Label text={label} - testID={testID !== undefined ? `${testID}-label` : undefined} + testID={testID === undefined ? undefined : `${testID}-label`} className="pr-2" /> ) @@ -190,7 +190,7 @@ function RadioBase({ <RadioIcon checked={checked} /> {label !== undefined && label !== '' ? ( - <Label text={label} testID={testID !== undefined ? `${testID}-label` : undefined} /> + <Label text={label} testID={testID === undefined ? undefined : `${testID}-label`} /> ) : null} </RadioRoot> @@ -257,7 +257,7 @@ function SwitchBase({ <SwitchIcon checked={checked} /> {label !== undefined && label !== '' ? ( - <Label text={label} testID={testID !== undefined ? `${testID}-label` : undefined} /> + <Label text={label} testID={testID === undefined ? undefined : `${testID}-label`} /> ) : null} </SwitchRoot> diff --git a/src/components/ui/input.tsx b/src/components/ui/input.tsx index 85080755a..16d8de4ae 100644 --- a/src/components/ui/input.tsx +++ b/src/components/ui/input.tsx @@ -94,7 +94,7 @@ export const Input = forwardRef<NTextInput, NInputProps>((props, ref) => { <View className={styles.container()}> {label !== undefined && ( <Text - testID={testID !== undefined ? `${testID}-label` : undefined} + testID={testID === undefined ? undefined : `${testID}-label`} className={styles.label()} > {label} @@ -116,7 +116,7 @@ export const Input = forwardRef<NTextInput, NInputProps>((props, ref) => { /> {error !== undefined && ( <Text - testID={testID !== undefined ? `${testID}-error` : undefined} + testID={testID === undefined ? undefined : `${testID}-error`} className="text-sm text-danger-400 dark:text-danger-600" > {error} diff --git a/src/components/ui/list.tsx b/src/components/ui/list.tsx index cf6e9bb60..ab51a856e 100644 --- a/src/components/ui/list.tsx +++ b/src/components/ui/list.tsx @@ -13,15 +13,15 @@ export const List = NFlashList; export const EmptyList = memo(({ isLoading }: Props) => ( <View className="min-h-[400px] flex-1 items-center justify-center"> - {!isLoading + {isLoading ? ( + <ActivityIndicator /> + ) + : ( <View> <NoData /> <Text className="pt-4 text-center">Sorry! No data found</Text> </View> - ) - : ( - <ActivityIndicator /> )} </View> )); diff --git a/src/components/ui/select.tsx b/src/components/ui/select.tsx index e55ddd14d..54aa5d8eb 100644 --- a/src/components/ui/select.tsx +++ b/src/components/ui/select.tsx @@ -87,7 +87,7 @@ export const Options = forwardRef<BottomSheetModal, OptionsProps>( label={item.label} selected={value === item.value} onPress={() => onSelect(item)} - testID={testID !== undefined ? `${testID}-item-${item.value}` : undefined} + testID={testID === undefined ? undefined : `${testID}-item-${item.value}`} /> ), [onSelect, value, testID], @@ -106,7 +106,7 @@ export const Options = forwardRef<BottomSheetModal, OptionsProps>( data={options} keyExtractor={keyExtractor} renderItem={renderSelectItem} - testID={testID !== undefined ? `${testID}-modal` : undefined} + testID={testID === undefined ? undefined : `${testID}-modal`} estimatedItemSize={52} /> </Modal> @@ -188,7 +188,7 @@ export function Select(props: SelectProps) { <View className={styles.container()}> {label !== undefined && ( <Text - testID={testID !== undefined ? `${testID}-label` : undefined} + testID={testID === undefined ? undefined : `${testID}-label`} className={styles.label()} > {label} @@ -198,7 +198,7 @@ export function Select(props: SelectProps) { className={styles.input()} disabled={disabled} onPress={() => modal.present()} - testID={testID !== undefined ? `${testID}-trigger` : undefined} + testID={testID === undefined ? undefined : `${testID}-trigger`} > <View className="flex-1"> <Text className={styles.inputValue()}>{textValue}</Text> diff --git a/src/lib/i18n/utils.tsx b/src/lib/i18n/utils.tsx index d99926177..a8e30d6eb 100644 --- a/src/lib/i18n/utils.tsx +++ b/src/lib/i18n/utils.tsx @@ -21,7 +21,7 @@ export const translate = memoize( (key: TxKeyPath, options?: Record<string, unknown>) => t(key, options as TOptions), (key: TxKeyPath, options?: unknown) => - options !== undefined ? `${key}${JSON.stringify(options)}` : key, + options === undefined ? key : `${key}${JSON.stringify(options)}`, ) as (key: TxKeyPath, options?: Record<string, unknown>) => string; export function changeLanguage(lang: Language) { From 9711e199b56d7877ba98fdf02cda7c969f47f671 Mon Sep 17 00:00:00 2001 From: Fernanda Toledo <fertoledo93@gmail.com> Date: Tue, 26 May 2026 16:18:39 -0300 Subject: [PATCH 18/18] fix(sonar): mark component props as read-only (S6759) Add Readonly<> wrapper to props in icon components, checkbox icons, modal backdrop/close button, and select components. --- src/components/ui/checkbox.tsx | 8 ++++---- src/components/ui/icons/arrow-right.tsx | 2 +- src/components/ui/icons/caret-down.tsx | 2 +- src/components/ui/icons/feed.tsx | 2 +- src/components/ui/icons/github.tsx | 2 +- src/components/ui/icons/language.tsx | 2 +- src/components/ui/icons/rate.tsx | 2 +- src/components/ui/icons/settings.tsx | 2 +- src/components/ui/icons/share.tsx | 2 +- src/components/ui/icons/style.tsx | 2 +- src/components/ui/icons/support.tsx | 2 +- src/components/ui/icons/website.tsx | 2 +- src/components/ui/modal.tsx | 4 ++-- src/components/ui/select.tsx | 4 ++-- 14 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/components/ui/checkbox.tsx b/src/components/ui/checkbox.tsx index d492d57d0..c80aa62f5 100644 --- a/src/components/ui/checkbox.tsx +++ b/src/components/ui/checkbox.tsx @@ -64,7 +64,7 @@ type LabelProps = { testID?: string; }; -function Label({ text, testID, className = '' }: LabelProps) { +function Label({ text, testID, className = '' }: Readonly<LabelProps>) { return ( <Text testID={testID} className={` ${className} pl-2`}> {text} @@ -72,7 +72,7 @@ function Label({ text, testID, className = '' }: LabelProps) { ); } -export function CheckboxIcon({ checked }: IconProps) { +export function CheckboxIcon({ checked }: Readonly<IconProps>) { const color = checked ? colors.primary[300] : colors.charcoal[400]; return ( <MotiView @@ -145,7 +145,7 @@ export const Checkbox = Object.assign(CheckboxBase, { Label, }); -export function RadioIcon({ checked }: IconProps) { +export function RadioIcon({ checked }: Readonly<IconProps>) { const color = checked ? colors.primary[300] : colors.charcoal[400]; return ( <MotiView @@ -203,7 +203,7 @@ export const Radio = Object.assign(RadioBase, { Label, }); -export function SwitchIcon({ checked }: IconProps) { +export function SwitchIcon({ checked }: Readonly<IconProps>) { const translateX = checked ? THUMB_OFFSET : WIDTH - THUMB_WIDTH - THUMB_OFFSET; diff --git a/src/components/ui/icons/arrow-right.tsx b/src/components/ui/icons/arrow-right.tsx index 513db9561..88e4c9ec4 100644 --- a/src/components/ui/icons/arrow-right.tsx +++ b/src/components/ui/icons/arrow-right.tsx @@ -4,7 +4,7 @@ import Svg, { Path } from 'react-native-svg'; import { isRTL } from '@/lib'; -export function ArrowRight({ color = '#CCC', style, ...props }: SvgProps) { +export function ArrowRight({ color = '#CCC', style, ...props }: Readonly<SvgProps>) { return ( <Svg width={7} diff --git a/src/components/ui/icons/caret-down.tsx b/src/components/ui/icons/caret-down.tsx index 4650c5794..a2d29855b 100644 --- a/src/components/ui/icons/caret-down.tsx +++ b/src/components/ui/icons/caret-down.tsx @@ -1,7 +1,7 @@ import type { SvgProps } from 'react-native-svg'; import Svg, { Path } from 'react-native-svg'; -export function CaretDown({ ...props }: SvgProps) { +export function CaretDown({ ...props }: Readonly<SvgProps>) { return ( <Svg width={12} diff --git a/src/components/ui/icons/feed.tsx b/src/components/ui/icons/feed.tsx index 3ca88e5b1..a76757fc3 100644 --- a/src/components/ui/icons/feed.tsx +++ b/src/components/ui/icons/feed.tsx @@ -1,7 +1,7 @@ import type { SvgProps } from 'react-native-svg'; import Svg, { Path } from 'react-native-svg'; -export function Feed({ color = '#000', ...props }: SvgProps) { +export function Feed({ color = '#000', ...props }: Readonly<SvgProps>) { return ( <Svg width={24} height={24} fill="none" viewBox="0 0 24 24" {...props}> <Path diff --git a/src/components/ui/icons/github.tsx b/src/components/ui/icons/github.tsx index 17f84b6fc..19a162505 100644 --- a/src/components/ui/icons/github.tsx +++ b/src/components/ui/icons/github.tsx @@ -3,7 +3,7 @@ import Svg, { ClipPath, Defs, G, Path } from 'react-native-svg'; import colors from '../colors'; -export function Github({ color = colors.neutral[500], ...props }: SvgProps) { +export function Github({ color = colors.neutral[500], ...props }: Readonly<SvgProps>) { return ( <Svg width={24} height={24} fill="none" viewBox="0 0 24 24" {...props}> <G diff --git a/src/components/ui/icons/language.tsx b/src/components/ui/icons/language.tsx index 77396fbea..74a2577ab 100644 --- a/src/components/ui/icons/language.tsx +++ b/src/components/ui/icons/language.tsx @@ -1,7 +1,7 @@ import type { SvgProps } from 'react-native-svg'; import Svg, { G, Path, Text, TSpan } from 'react-native-svg'; -export function Language({ ...props }: SvgProps) { +export function Language({ ...props }: Readonly<SvgProps>) { return ( <Svg width={100} height={71} {...props}> <G fill="none" fillRule="evenodd"> diff --git a/src/components/ui/icons/rate.tsx b/src/components/ui/icons/rate.tsx index a7636fe8e..655d11bcc 100644 --- a/src/components/ui/icons/rate.tsx +++ b/src/components/ui/icons/rate.tsx @@ -3,7 +3,7 @@ import Svg, { ClipPath, Defs, G, Path } from 'react-native-svg'; import colors from '../colors'; -export function Rate({ color = colors.neutral[500], ...props }: SvgProps) { +export function Rate({ color = colors.neutral[500], ...props }: Readonly<SvgProps>) { return ( <Svg width={24} height={24} fill="none" viewBox="0 0 24 24" {...props}> <G clipPath="url(#a)"> diff --git a/src/components/ui/icons/settings.tsx b/src/components/ui/icons/settings.tsx index e22dd122b..0eac53502 100644 --- a/src/components/ui/icons/settings.tsx +++ b/src/components/ui/icons/settings.tsx @@ -1,7 +1,7 @@ import type { SvgProps } from 'react-native-svg'; import Svg, { Path } from 'react-native-svg'; -export function Settings({ color = '#000', ...props }: SvgProps) { +export function Settings({ color = '#000', ...props }: Readonly<SvgProps>) { return ( <Svg width={24} height={24} viewBox="0 0 24 24" fill="none" {...props}> <Path diff --git a/src/components/ui/icons/share.tsx b/src/components/ui/icons/share.tsx index 20ec74fd4..369a75304 100644 --- a/src/components/ui/icons/share.tsx +++ b/src/components/ui/icons/share.tsx @@ -3,7 +3,7 @@ import Svg, { Path } from 'react-native-svg'; import colors from '../colors'; -export function Share({ color = colors.neutral[500], ...props }: SvgProps) { +export function Share({ color = colors.neutral[500], ...props }: Readonly<SvgProps>) { return ( <Svg width={24} height={24} fill="none" viewBox="0 0 24 24" {...props}> <Path diff --git a/src/components/ui/icons/style.tsx b/src/components/ui/icons/style.tsx index 7c66265d7..824c53507 100644 --- a/src/components/ui/icons/style.tsx +++ b/src/components/ui/icons/style.tsx @@ -1,7 +1,7 @@ import type { SvgProps } from 'react-native-svg'; import Svg, { ClipPath, Defs, G, Path } from 'react-native-svg'; -export function Style({ color, ...props }: SvgProps) { +export function Style({ color, ...props }: Readonly<SvgProps>) { return ( <Svg width={25} height={24} fill="none" viewBox="0 0 25 24" {...props}> <G diff --git a/src/components/ui/icons/support.tsx b/src/components/ui/icons/support.tsx index 0dcbb07e2..8148a0ea8 100644 --- a/src/components/ui/icons/support.tsx +++ b/src/components/ui/icons/support.tsx @@ -6,7 +6,7 @@ import colors from '../colors'; export function Support({ color = colors.neutral[500], ...props -}: SvgProps) { +}: Readonly<SvgProps>) { return ( <Svg width={24} height={24} fill="none" viewBox="0 0 24 24" {...props}> <G clipPath="url(#a)"> diff --git a/src/components/ui/icons/website.tsx b/src/components/ui/icons/website.tsx index 86532825e..e34eeba94 100644 --- a/src/components/ui/icons/website.tsx +++ b/src/components/ui/icons/website.tsx @@ -6,7 +6,7 @@ import colors from '../colors'; export function Website({ color = colors.neutral[500], ...props -}: SvgProps) { +}: Readonly<SvgProps>) { return ( <Svg width={24} height={24} fill="none" viewBox="0 0 24 24" {...props}> <G diff --git a/src/components/ui/modal.tsx b/src/components/ui/modal.tsx index 755bcb9b7..b65c75a5c 100644 --- a/src/components/ui/modal.tsx +++ b/src/components/ui/modal.tsx @@ -120,7 +120,7 @@ export const Modal = forwardRef( const AnimatedPressable = Animated.createAnimatedComponent(Pressable); -function CustomBackdrop({ style }: BottomSheetBackdropProps) { +function CustomBackdrop({ style }: Readonly<BottomSheetBackdropProps>) { const { close } = useBottomSheet(); const FADE_IN_DURATION = 50; const FADE_OUT_DURATION = 20; @@ -178,7 +178,7 @@ const ModalHeader = memo(({ title, dismiss }: ModalHeaderProps) => ( </> )); -function CloseButton({ close }: { close: () => void }) { +function CloseButton({ close }: Readonly<{ close: () => void }>) { return ( <Pressable onPress={close} diff --git a/src/components/ui/select.tsx b/src/components/ui/select.tsx index 54aa5d8eb..df35ddbc1 100644 --- a/src/components/ui/select.tsx +++ b/src/components/ui/select.tsx @@ -145,7 +145,7 @@ export type SelectProps = { }; type ControlledSelectProps<T extends FieldValues> = SelectProps & InputControllerType<T>; -export function Select(props: SelectProps) { +export function Select(props: Readonly<SelectProps>) { const { label, value, @@ -248,7 +248,7 @@ export function ControlledSelect<T extends FieldValues>( ); } -function Check({ ...props }: SvgProps) { +function Check({ ...props }: Readonly<SvgProps>) { return ( <Svg width={25}